diff --git a/SConstruct b/SConstruct index 369a1801aec..8a026a0c083 100644 --- a/SConstruct +++ b/SConstruct @@ -378,7 +378,7 @@ if not os.path.isdir ( B.root_build_dir): os.makedirs ( B.root_build_dir + 'extern' ) os.makedirs ( B.root_build_dir + 'lib' ) os.makedirs ( B.root_build_dir + 'bin' ) -if not os.path.isdir(B.doc_build_dir): +if not os.path.isdir(B.doc_build_dir) and env['WITH_BF_DOCS']: os.makedirs ( B.doc_build_dir ) Help(opts.GenerateHelpText(env)) @@ -533,9 +533,10 @@ plugtargetlist = [] for tp, tn, tf in os.walk('release/plugins'): if '.svn' in tn: tn.remove('.svn') + df = tp[8:] # remove 'release/' for f in tf: pluglist.append(os.path.join(tp, f)) - plugtargetlist.append( os.path.join(*([BLENDERPATH] + tp.split(os.sep)[1:] + [f])) ) + plugtargetlist.append( os.path.join(BLENDERPATH, df, f) ) # header files for plugins @@ -648,12 +649,14 @@ if not env['WITHOUT_BF_INSTALL']: #------------ EPYDOC if env['WITH_BF_DOCS']: - try: import epydoc - except: epydoc = None - - if epydoc: - SConscript('source/gameengine/PyDoc/SConscript') - else: - print "No epydoc install detected, Python API and Gameengine API Docs will not be generated " - + try: + import epydoc + except ImportError: + epydoc = None + + if epydoc: + SConscript('source/gameengine/PyDoc/SConscript') + else: + print "No epydoc install detected, Python API and Gameengine API Docs will not be generated " + diff --git a/config/darwin-config.py b/config/darwin-config.py index 55cb5d6a253..049fe62f3b0 100644 --- a/config/darwin-config.py +++ b/config/darwin-config.py @@ -270,6 +270,14 @@ BF_PCRE_LIBPATH = '${BF_PCRE}/lib' #BF_EXPAT_LIB = 'expat' #BF_EXPAT_LIBPATH = '/usr/lib' +#Ray trace optimization +WITH_BF_RAYOPTIMIZATION = False +if MACOSX_ARCHITECTURE == 'i386': + BF_RAYOPTIMIZATION_SSE_FLAGS = ['-msse'] +elif MACOSX_ARCHITECTURE == 'x86_64': + BF_RAYOPTIMIZATION_SSE_FLAGS = ['-msse','-msse2'] + + ############################################################################# ################### various compile settings and flags ################## ############################################################################# diff --git a/config/linux2-config.py b/config/linux2-config.py index 3e40b7af416..abe79ba5806 100644 --- a/config/linux2-config.py +++ b/config/linux2-config.py @@ -167,6 +167,10 @@ BF_EXPAT_LIBPATH = '/usr/lib' WITH_BF_OPENMP = True +#Ray trace optimization +WITH_BF_RAYOPTIMIZATION = False +BF_RAYOPTIMIZATION_SSE_FLAGS = ['-msse','-pthread'] + ## CC = 'gcc' CXX = 'g++' diff --git a/config/win32-mingw-config.py b/config/win32-mingw-config.py index 7973ae930b4..00c70aaaf1f 100644 --- a/config/win32-mingw-config.py +++ b/config/win32-mingw-config.py @@ -137,6 +137,10 @@ BF_OPENCOLLADA_INC = '${BF_OPENCOLLADA}/include' BF_OPENCOLLADA_LIB = 'OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver xml2 pcre' BF_OPENCOLLADA_LIBPATH = '${BF_OPENCOLLADA}/lib' +#Ray trace optimization +WITH_BF_RAYOPTIMIZATION = False +BF_RAYOPTIMIZATION_SSE_FLAGS = ['-msse'] + ## CC = 'gcc' CXX = 'g++' diff --git a/config/win32-vc-config.py b/config/win32-vc-config.py index 60463a07a32..f18ed3e2007 100644 --- a/config/win32-vc-config.py +++ b/config/win32-vc-config.py @@ -148,6 +148,10 @@ BF_OPENCOLLADA_INC = '${BF_OPENCOLLADA}/include' BF_OPENCOLLADA_LIB = 'OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver xml2 pcre' BF_OPENCOLLADA_LIBPATH = '${BF_OPENCOLLADA}/lib' +#Ray trace optimization +WITH_BF_RAYOPTIMIZATION = False +BF_RAYOPTIMIZATION_SSE_FLAGS = ['/arch:SSE'] + WITH_BF_STATICOPENGL = False BF_OPENGL_INC = '${BF_OPENGL}/include' BF_OPENGL_LIBINC = '${BF_OPENGL}/lib' @@ -155,6 +159,7 @@ BF_OPENGL_LIB = 'opengl32 glu32' BF_OPENGL_LIB_STATIC = [ '${BF_OPENGL}/lib/libGL.a', '${BF_OPENGL}/lib/libGLU.a', '${BF_OPENGL}/lib/libXmu.a', '${BF_OPENGL}/lib/libXext.a', '${BF_OPENGL}/lib/libX11.a', '${BF_OPENGL}/lib/libXi.a' ] + CC = 'cl.exe' CXX = 'cl.exe' diff --git a/config/win64-vc-config.py b/config/win64-vc-config.py index 53df6d96bf8..457640507da 100644 --- a/config/win64-vc-config.py +++ b/config/win64-vc-config.py @@ -161,6 +161,10 @@ BF_OPENCOLLADA_INC = '${BF_OPENCOLLADA}/include' BF_OPENCOLLADA_LIB = 'OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver xml2 pcre' BF_OPENCOLLADA_LIBPATH = '${BF_OPENCOLLADA}/lib' +#Ray trace optimization +WITH_BF_RAYOPTIMIZATION = False +BF_RAYOPTIMIZATION_SSE_FLAGS = ['/arch:SSE','/arch:SSE2'] + WITH_BF_STATICOPENGL = False BF_OPENGL_INC = '${BF_OPENGL}/include' BF_OPENGL_LIBINC = '${BF_OPENGL}/lib' diff --git a/intern/audaspace/SRC/Makefile b/intern/audaspace/SRC/Makefile index 5cf5f55b11f..0959ebb4bfa 100644 --- a/intern/audaspace/SRC/Makefile +++ b/intern/audaspace/SRC/Makefile @@ -35,7 +35,7 @@ include nan_compile.mk CCFLAGS += $(LEVEL_1_CPP_WARNINGS) -CPPFLAGS += -I$(LCGDIR)/samplerate/include/ +CPPFLAGS += -I$(NAN_SAMPLERATE)/include CPPFLAGS += -I../ffmpeg CPPFLAGS += -I../FX CPPFLAGS += -I../SDL diff --git a/intern/ghost/intern/GHOST_SystemCocoa.h b/intern/ghost/intern/GHOST_SystemCocoa.h index bcc5da72b2e..81eb8978588 100644 --- a/intern/ghost/intern/GHOST_SystemCocoa.h +++ b/intern/ghost/intern/GHOST_SystemCocoa.h @@ -140,6 +140,24 @@ public: */ GHOST_TUns8 handleQuitRequest(); + /** + * Handle Cocoa openFile event + * Display confirmation request panel if changes performed since last save + */ + bool handleOpenDocumentRequest(void *filepathStr); + + /** + * Handles a drag'n'drop destination event. Called by GHOST_WindowCocoa window subclass + * @param eventType The type of drag'n'drop event + * @param draggedObjectType The type object concerned (currently array of file names, string, TIFF image) + * @param mouseX x mouse coordinate (in cocoa base window coordinates) + * @param mouseY y mouse coordinate + * @param window The window on which the event occured + * @return Indication whether the event was handled. + */ + GHOST_TSuccess handleDraggingEvent(GHOST_TEventType eventType, GHOST_TDragnDropTypes draggedObjectType, + GHOST_WindowCocoa* window, int mouseX, int mouseY, void* data); + /*************************************************************************************** ** Cursor management functionality ***************************************************************************************/ @@ -207,18 +225,6 @@ public: GHOST_TSuccess handleApplicationBecomeActiveEvent(); - /** - * Handles a drag'n'drop destination event. Called by GHOST_WindowCocoa window subclass - * @param eventType The type of drag'n'drop event - * @param draggedObjectType The type object concerned (currently array of file names, string, TIFF image) - * @param mouseX x mouse coordinate (in cocoa base window coordinates) - * @param mouseY y mouse coordinate - * @param window The window on which the event occured - * @return Indication whether the event was handled. - */ - GHOST_TSuccess handleDraggingEvent(GHOST_TEventType eventType, GHOST_TDragnDropTypes draggedObjectType, - GHOST_WindowCocoa* window, int mouseX, int mouseY, void* data); - protected: /** * Initializes the system. diff --git a/intern/ghost/intern/GHOST_SystemCocoa.mm b/intern/ghost/intern/GHOST_SystemCocoa.mm index 37befdf7f85..71465822bee 100644 --- a/intern/ghost/intern/GHOST_SystemCocoa.mm +++ b/intern/ghost/intern/GHOST_SystemCocoa.mm @@ -436,9 +436,7 @@ int cocoa_request_qtcodec_settings(bContext *C, wmOperator *op) - (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename { - NSLog(@"\nGet open file event from cocoa : %@",filename); - systemCocoa->handleDraggingEvent(GHOST_kEventDraggingDropOnIcon, GHOST_kDragnDropTypeFilenames, nil, 0, 0, [NSArray arrayWithObject:filename]); - return YES; + return systemCocoa->handleOpenDocumentRequest(filename); } - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender @@ -958,7 +956,7 @@ GHOST_TSuccess GHOST_SystemCocoa::handleWindowEvent(GHOST_TEventType eventType, GHOST_TSuccess GHOST_SystemCocoa::handleDraggingEvent(GHOST_TEventType eventType, GHOST_TDragnDropTypes draggedObjectType, GHOST_WindowCocoa* window, int mouseX, int mouseY, void* data) { - if (!validWindow(window)) { + if (!validWindow(window) && (eventType != GHOST_kEventDraggingDropOnIcon)) { return GHOST_kFailure; } switch(eventType) @@ -1086,6 +1084,33 @@ GHOST_TUns8 GHOST_SystemCocoa::handleQuitRequest() return GHOST_kExitCancel; } +bool GHOST_SystemCocoa::handleOpenDocumentRequest(void *filepathStr) +{ + NSString *filepath = (NSString*)filepathStr; + int confirmOpen = NSAlertAlternateReturn; + NSArray *windowsList; + + //Check open windows if some changes are not saved + if (m_windowManager->getAnyModifiedState()) + { + confirmOpen = NSRunAlertPanel([NSString stringWithFormat:@"Opening %@",[filepath lastPathComponent]], + @"Current document has not been saved.\nDo you really want to proceed?", + @"Cancel", @"Open", nil); + } + + //Give back focus to the blender window + windowsList = [NSApp orderedWindows]; + if ([windowsList count]) { + [[windowsList objectAtIndex:0] makeKeyAndOrderFront:nil]; + } + + if (confirmOpen == NSAlertAlternateReturn) + { + handleDraggingEvent(GHOST_kEventDraggingDropOnIcon,GHOST_kDragnDropTypeFilenames,NULL,0,0, [NSArray arrayWithObject:filepath]); + return YES; + } + else return NO; +} GHOST_TSuccess GHOST_SystemCocoa::handleTabletEvent(void *eventPtr, short eventType) { diff --git a/intern/ghost/intern/GHOST_WindowCocoa.mm b/intern/ghost/intern/GHOST_WindowCocoa.mm index 4058d721bdb..8c9f8a7647d 100644 --- a/intern/ghost/intern/GHOST_WindowCocoa.mm +++ b/intern/ghost/intern/GHOST_WindowCocoa.mm @@ -245,6 +245,10 @@ extern "C" { case 'w': case 'h': case 'm': + case '<': + case '>': + case '~': + case '`': return NO; default: return YES; diff --git a/intern/ghost/intern/Makefile b/intern/ghost/intern/Makefile index 5b95bbb3b68..a6392662c30 100644 --- a/intern/ghost/intern/Makefile +++ b/intern/ghost/intern/Makefile @@ -41,7 +41,15 @@ CCSRCS += GHOST_CallbackEventConsumer.cpp CCSRCS += GHOST_NDOFManager.cpp ifeq ($(OS),$(findstring $(OS), "darwin")) - CCSRCS += $(wildcard *Carbon.cpp) + ifeq ($(WITH_COCOA), true) + OCSRCS += $(wildcard *Cocoa.mm) + CPPFLAGS += -DGHOST_COCOA + ifeq ($(WITH_QUICKTIME), true) + CPPFLAGS += -DWITH_QUICKTIME + endif + else + CCSRCS += $(wildcard *Carbon.cpp) + endif endif ifeq ($(OS),$(findstring $(OS), "windows")) diff --git a/projectfiles_vc9/blender/BPY_python/BPY_python.vcproj b/projectfiles_vc9/blender/BPY_python/BPY_python.vcproj index 42dd1c7cef0..68feafe6bef 100644 --- a/projectfiles_vc9/blender/BPY_python/BPY_python.vcproj +++ b/projectfiles_vc9/blender/BPY_python/BPY_python.vcproj @@ -339,6 +339,10 @@ RelativePath="..\..\..\source\blender\python\intern\bpy_array.c" > + + diff --git a/projectfiles_vc9/blender/blender.vcproj b/projectfiles_vc9/blender/blender.vcproj index ec863853daa..0d7f3c66ff0 100644 --- a/projectfiles_vc9/blender/blender.vcproj +++ b/projectfiles_vc9/blender/blender.vcproj @@ -221,45 +221,45 @@ RelativePath="..\..\source\icons\winblenderfile.ico" > - - - - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj b/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj index ad40639db12..c537f4f6f84 100644 --- a/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj +++ b/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj @@ -43,7 +43,7 @@ + + @@ -743,7 +747,7 @@ > + + @@ -1063,6 +1071,10 @@ RelativePath="..\..\..\source\blender\blenkernel\BKE_script.h" > + + diff --git a/projectfiles_vc9/blender/blenlib/BLI_blenlib.vcproj b/projectfiles_vc9/blender/blenlib/BLI_blenlib.vcproj index 4626d3fbdec..7ac0f473b0d 100644 --- a/projectfiles_vc9/blender/blenlib/BLI_blenlib.vcproj +++ b/projectfiles_vc9/blender/blenlib/BLI_blenlib.vcproj @@ -43,7 +43,7 @@ + + + + @@ -627,10 +635,6 @@ RelativePath="..\..\..\source\blender\blenlib\intern\time.c" > - - @@ -752,6 +756,10 @@ RelativePath="..\..\..\source\blender\blenlib\BLI_mempool.h" > + + @@ -772,10 +780,6 @@ RelativePath="..\..\..\source\blender\blenlib\BLI_threads.h" > - - diff --git a/projectfiles_vc9/blender/editors/ED_editors.vcproj b/projectfiles_vc9/blender/editors/ED_editors.vcproj index fec46871e83..0956dd7c388 100644 --- a/projectfiles_vc9/blender/editors/ED_editors.vcproj +++ b/projectfiles_vc9/blender/editors/ED_editors.vcproj @@ -631,10 +631,6 @@ RelativePath="..\..\..\source\blender\editors\space_graph\graph_edit.c" > - - @@ -835,10 +831,6 @@ RelativePath="..\..\..\source\blender\editors\space_action\action_edit.c" > - - @@ -875,10 +867,6 @@ RelativePath="..\..\..\source\blender\editors\space_nla\nla_edit.c" > - - @@ -1319,6 +1307,10 @@ RelativePath="..\..\..\source\blender\editors\sculpt_paint\paint_stroke.c" > + + diff --git a/projectfiles_vc9/blender/loader/BLO_loader.vcproj b/projectfiles_vc9/blender/loader/BLO_loader.vcproj index 0ddb02afad1..77edb4b074d 100644 --- a/projectfiles_vc9/blender/loader/BLO_loader.vcproj +++ b/projectfiles_vc9/blender/loader/BLO_loader.vcproj @@ -490,123 +490,123 @@ RelativePath="..\..\..\source\blender\blenloader\BLO_undofile.h" > - + + - + + - - + + - - - - - - - - - - - - - - - - - - - - + + - - + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/projectfiles_vc9/blender/makesrna/RNA_makesrna.vcproj b/projectfiles_vc9/blender/makesrna/RNA_makesrna.vcproj index 2a8e25d02be..c358c91c3f6 100644 --- a/projectfiles_vc9/blender/makesrna/RNA_makesrna.vcproj +++ b/projectfiles_vc9/blender/makesrna/RNA_makesrna.vcproj @@ -806,7 +806,7 @@ > + +import sys +import os if len(sys.argv) < 2: sys.stdout.write("Usage: datatoc \n") @@ -33,7 +36,7 @@ if len(sys.argv) < 2: filename = sys.argv[1] try: - fpin = open(filename, "rb"); + fpin = open(filename, "rb") except: sys.stdout.write("Unable to open input %s\n" % sys.argv[1]) sys.exit(1) diff --git a/release/getversion.py b/release/getversion.py index fd52129bf4a..a9bf3b1d04e 100755 --- a/release/getversion.py +++ b/release/getversion.py @@ -24,15 +24,19 @@ # The Original Code is: see repository. # # Contributor(s): see repository. -# -import sys, os, re -nanblenderhome = os.getenv("NANBLENDERHOME"); +# + +import sys +import os +import re + +nanblenderhome = os.getenv("NANBLENDERHOME") if nanblenderhome == None: - nanblenderhome = os.path.dirname(os.path.abspath(sys.argv[0]))+"/.." + nanblenderhome = os.path.dirname(os.path.abspath(sys.argv[0])) + "/.." -config = nanblenderhome+"/source/blender/blenkernel/BKE_blender.h" +config = nanblenderhome + "/source/blender/blenkernel/BKE_blender.h" infile = open(config) @@ -40,23 +44,23 @@ major = None minor = None for line in infile.readlines(): - m = re.search("#define BLENDER_VERSION\s+(\d+)", line) - if m: - major = m.group(1) - m = re.search("#define BLENDER_SUBVERSION\s+(\d+)", line) - if m: - minor = m.group(1) - if minor and major: - major = float(major) / 100.0 - break + m = re.search("#define BLENDER_VERSION\s+(\d+)", line) + if m: + major = m.group(1) + m = re.search("#define BLENDER_SUBVERSION\s+(\d+)", line) + if m: + minor = m.group(1) + if minor and major: + major = float(major) / 100.0 + break infile.close() # Major was changed to float, but minor is still a string if minor and major: - if minor == "0": - print "%.2f" % major - else: - print "%.2f.%s" % (major, minor) + if minor == "0": + print "%.2f" % major + else: + print "%.2f.%s" % (major, minor) else: - print "unknownversion" + print "unknownversion" diff --git a/release/scripts/io/engine_render_pov.py b/release/scripts/io/engine_render_pov.py index 9157136475b..3ad75f41709 100644 --- a/release/scripts/io/engine_render_pov.py +++ b/release/scripts/io/engine_render_pov.py @@ -4,18 +4,20 @@ # 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # ##### END GPL LICENSE BLOCK ##### +# + import bpy from math import atan, pi, degrees @@ -27,820 +29,830 @@ import time import platform as pltfrm if pltfrm.architecture()[0] == '64bit': - bitness = 64 + bitness = 64 else: - bitness = 32 + bitness = 32 -def write_pov(filename, scene=None, info_callback = None): - file = open(filename, 'w') - - # Only for testing - if not scene: - scene = bpy.data.scenes[0] - - render = scene.render_data - world = scene.world - - # --- taken from fbx exporter - ## This was used to make V, but faster not to do all that - ##valid = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_,.()[]{}' - ##v = range(255) - ##for c in valid: v.remove(ord(c)) - v = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,42,43,46,47,58,59,60,61,62,63,64,92,94,96,124,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254] - invalid = ''.join([chr(i) for i in v]) - def cleanName(name): - for ch in invalid: name = name.replace(ch, '_') - return name - del v - - # --- done with clean name. - - def uniqueName(name, nameSeq): - - if name not in nameSeq: - return name - - name_orig = name - i = 1 - while name in nameSeq: - name = '%s_%.3d' % (name_orig, i) - i+=1 - - return name - - - def writeMatrix(matrix): - file.write('\tmatrix <%.6f, %.6f, %.6f, %.6f, %.6f, %.6f, %.6f, %.6f, %.6f, %.6f, %.6f, %.6f>\n' %\ - (matrix[0][0], matrix[0][1], matrix[0][2], matrix[1][0], matrix[1][1], matrix[1][2], matrix[2][0], matrix[2][1], matrix[2][2], matrix[3][0], matrix[3][1], matrix[3][2]) ) - - def writeObjectMaterial(material): - if material and material.transparency_method=='RAYTRACE': - file.write('\tinterior { ior %.6f }\n' % material.raytrace_transparency.ior) - - # Other interior args - # fade_distance 2 - # fade_power [Value] - # fade_color - - # dispersion - # dispersion_samples - - materialNames = {} - DEF_MAT_NAME = 'Default' - def writeMaterial(material): - # Assumes only called once on each material - - if material: - name_orig = material.name - else: - name_orig = DEF_MAT_NAME - - name = materialNames[name_orig] = uniqueName(cleanName(name_orig), materialNames) - - file.write('#declare %s = finish {\n' % name) - - if material: - file.write('\tdiffuse %.3g\n' % material.diffuse_intensity) - file.write('\tspecular %.3g\n' % material.specular_intensity) - - file.write('\tambient %.3g\n' % material.ambient) - #file.write('\tambient rgb <%.3g, %.3g, %.3g>\n' % tuple([c*material.ambient for c in world.ambient_color])) # povray blends the global value - - # map hardness between 0.0 and 1.0 - roughness = ((1.0 - ((material.specular_hardness-1.0)/510.0))) - # scale from 0.0 to 0.1 - roughness *= 0.1 - # add a small value because 0.0 is invalid - roughness += (1/511.0) - - file.write('\troughness %.3g\n' % roughness) - - # 'phong 70.0 ' - - if material.raytrace_mirror.enabled: - raytrace_mirror= material.raytrace_mirror - if raytrace_mirror.reflect_factor: - file.write('\treflection {\n') - file.write('\t\trgb <%.3g, %.3g, %.3g>' % tuple(material.mirror_color)) - file.write('\t\tfresnel 1 falloff %.3g exponent %.3g metallic %.3g} ' % (raytrace_mirror.fresnel, raytrace_mirror.fresnel_factor, raytrace_mirror.reflect_factor)) - - else: - file.write('\tdiffuse 0.8\n') - file.write('\tspecular 0.2\n') - - # This is written into the object - ''' - if material and material.transparency_method=='RAYTRACE': - 'interior { ior %.3g} ' % material.raytrace_transparency.ior - ''' - - #file.write('\t\t\tcrand 1.0\n') # Sand granyness - #file.write('\t\t\tmetallic %.6f\n' % material.spec) - #file.write('\t\t\tphong %.6f\n' % material.spec) - #file.write('\t\t\tphong_size %.6f\n' % material.spec) - #file.write('\t\t\tbrilliance %.6f ' % (material.specular_hardness/256.0) # Like hardness - - file.write('}\n') - - def exportCamera(): - camera = scene.camera - matrix = camera.matrix - - # compute resolution - Qsize=float(render.resolution_x)/float(render.resolution_y) - - file.write('camera {\n') - file.write('\tlocation <0, 0, 0>\n') - file.write('\tlook_at <0, 0, -1>\n') - file.write('\tright <%s, 0, 0>\n' % -Qsize) - file.write('\tup <0, 1, 0>\n') - file.write('\tangle %f \n' % (360.0*atan(16.0/camera.data.lens)/pi)) - - file.write('\trotate <%.6f, %.6f, %.6f>\n' % tuple([degrees(e) for e in matrix.rotationPart().toEuler()])) - file.write('\ttranslate <%.6f, %.6f, %.6f>\n' % (matrix[3][0], matrix[3][1], matrix[3][2])) - file.write('}\n') +def write_pov(filename, scene=None, info_callback=None): + file = open(filename, 'w') - def exportLamps(lamps): - # Get all lamps - for ob in lamps: - lamp = ob.data - - matrix = ob.matrix - - color = tuple([c * lamp.energy for c in lamp.color]) # Colour is modified by energy - - file.write('light_source {\n') - file.write('\t< 0,0,0 >\n') - file.write('\tcolor rgb<%.3g, %.3g, %.3g>\n' % color) - - if lamp.type == 'POINT': # Point Lamp - pass - elif lamp.type == 'SPOT': # Spot - file.write('\tspotlight\n') - - # Falloff is the main radius from the centre line - file.write('\tfalloff %.2f\n' % (lamp.spot_size/2.0) ) # 1 TO 179 FOR BOTH - file.write('\tradius %.6f\n' % ((lamp.spot_size/2.0) * (1-lamp.spot_blend)) ) - - # Blender does not have a tightness equivilent, 0 is most like blender default. - file.write('\ttightness 0\n') # 0:10f - - file.write('\tpoint_at <0, 0, -1>\n') - elif lamp.type == 'SUN': - file.write('\tparallel\n') - file.write('\tpoint_at <0, 0, -1>\n') # *must* be after 'parallel' - - elif lamp.type == 'AREA': - - size_x = lamp.size - samples_x = lamp.shadow_ray_samples_x - if lamp.shape == 'SQUARE': - size_y = size_x - samples_y = samples_x - else: - size_y = lamp.size_y - samples_y = lamp.shadow_ray_samples_y + # Only for testing + if not scene: + scene = bpy.data.scenes[0] - file.write('\tarea_light <%d,0,0>,<0,0,%d> %d, %d\n' % (size_x, size_y, samples_x, samples_y)) - if lamp.shadow_ray_sampling_method == 'CONSTANT_JITTERED': - if lamp.jitter: - file.write('\tjitter\n') - else: - file.write('\tadaptive 1\n') - file.write('\tjitter\n') - - if lamp.shadow_method == 'NOSHADOW': - file.write('\tshadowless\n') - - file.write('\tfade_distance %.6f\n' % lamp.distance) - file.write('\tfade_power %d\n' % 1) # Could use blenders lamp quad? - writeMatrix(matrix) - - file.write('}\n') - - def exportMeta(metas): - - # TODO - blenders 'motherball' naming is not supported. - - for ob in metas: - meta = ob.data - - file.write('blob {\n') - file.write('\t\tthreshold %.4g\n' % meta.threshold) - - try: - material= meta.materials[0] # lame! - blender cant do enything else. - except: - material= None - - for elem in meta.elements: - - if elem.type not in ('BALL', 'ELLIPSOID'): - continue # Not supported - - loc = elem.location - - stiffness= elem.stiffness - if elem.negative: - stiffness = -stiffness - - if elem.type == 'BALL': - - file.write('\tsphere { <%.6g, %.6g, %.6g>, %.4g, %.4g ' % (loc.x, loc.y, loc.z, elem.radius, stiffness)) - - # After this wecould do something simple like... - # "pigment {Blue} }" - # except we'll write the color - - elif elem.type == 'ELLIPSOID': - # location is modified by scale - file.write('\tsphere { <%.6g, %.6g, %.6g>, %.4g, %.4g ' % (loc.x/elem.size_x, loc.y/elem.size_y, loc.z/elem.size_z, elem.radius, stiffness)) - file.write( 'scale <%.6g, %.6g, %.6g> ' % (elem.size_x, elem.size_y, elem.size_z)) - - if material: - diffuse_color = material.diffuse_color - - if material.transparency and material.transparency_method=='RAYTRACE': trans = 1-material.raytrace_transparency.filter - else: trans = 0.0 - - file.write( - 'pigment {rgbft<%.3g, %.3g, %.3g, %.3g, %.3g>} finish {%s} }\n' % \ - (diffuse_color[0], diffuse_color[1], diffuse_color[2], 1-material.alpha, trans, materialNames[material.name]) - ) - - else: - file.write('pigment {rgb<1 1 1>} finish {%s} }\n' % DEF_MAT_NAME) # Write the finish last. - - writeObjectMaterial(material) + render = scene.render_data + world = scene.world - writeMatrix(ob.matrix) - - file.write('}\n') + def uniqueName(name, nameSeq): - def exportMeshs(sel): - - ob_num = 0 - - for ob in sel: - ob_num+= 1 - - if ob.type in ('LAMP', 'CAMERA', 'EMPTY', 'META', 'ARMATURE'): - continue - - me = ob.data - me_materials= me.materials - - me = ob.create_mesh(True, 'RENDER') - - if not me: - continue - - if info_callback: - info_callback('Object %2.d of %2.d (%s)' % (ob_num, len(sel), ob.name)) - - #if ob.type!='MESH': - # continue - # me = ob.data - - matrix = ob.matrix - try: uv_layer = me.active_uv_texture.data - except:uv_layer = None - - try: vcol_layer = me.active_vertex_color.data - except:vcol_layer = None - - faces_verts = [f.verts for f in me.faces] - faces_normals = [tuple(f.normal) for f in me.faces] - verts_normals = [tuple(v.normal) for v in me.verts] - - # quads incur an extra face - quadCount = len([f for f in faces_verts if len(f)==4]) - - file.write('mesh2 {\n') - file.write('\tvertex_vectors {\n') - file.write('\t\t%s' % (len(me.verts))) # vert count - for v in me.verts: - file.write(',\n\t\t<%.6f, %.6f, %.6f>' % tuple(v.co)) # vert count - file.write('\n }\n') - - - # Build unique Normal list - uniqueNormals = {} - for fi, f in enumerate(me.faces): - fv = faces_verts[fi] - # [-1] is a dummy index, use a list so we can modify in place - if f.smooth: # Use vertex normals - for v in fv: - key = verts_normals[v] - uniqueNormals[key] = [-1] - else: # Use face normal - key = faces_normals[fi] - uniqueNormals[key] = [-1] - - file.write('\tnormal_vectors {\n') - file.write('\t\t%d' % len(uniqueNormals)) # vert count - idx = 0 - for no, index in uniqueNormals.items(): - file.write(',\n\t\t<%.6f, %.6f, %.6f>' % no) # vert count - index[0] = idx - idx +=1 - file.write('\n }\n') - - - # Vertex colours - vertCols = {} # Use for material colours also. - - if uv_layer: - # Generate unique UV's - uniqueUVs = {} - - for fi, uv in enumerate(uv_layer): - - if len(faces_verts[fi])==4: - uvs = uv.uv1, uv.uv2, uv.uv3, uv.uv4 - else: - uvs = uv.uv1, uv.uv2, uv.uv3 - - for uv in uvs: - uniqueUVs[tuple(uv)] = [-1] - - file.write('\tuv_vectors {\n') - #print unique_uvs - file.write('\t\t%s' % (len(uniqueUVs))) # vert count - idx = 0 - for uv, index in uniqueUVs.items(): - file.write(',\n\t\t<%.6f, %.6f>' % uv) - index[0] = idx - idx +=1 - ''' - else: - # Just add 1 dummy vector, no real UV's - file.write('\t\t1') # vert count - file.write(',\n\t\t<0.0, 0.0>') - ''' - file.write('\n }\n') - - - if me.vertex_colors: - - for fi, f in enumerate(me.faces): - material_index = f.material_index - material = me_materials[material_index] - - if material and material.vertex_color_paint: - - col = vcol_layer[fi] - - if len(faces_verts[fi])==4: - cols = col.color1, col.color2, col.color3, col.color4 - else: - cols = col.color1, col.color2, col.color3 - - for col in cols: - key = col[0], col[1], col[2], material_index # Material index! - vertCols[key] = [-1] - - else: - if material: - diffuse_color = tuple(material.diffuse_color) - key = diffuse_color[0], diffuse_color[1], diffuse_color[2], material_index - vertCols[key] = [-1] - - - else: - # No vertex colours, so write material colours as vertex colours - for i, material in enumerate(me_materials): - - if material: - diffuse_color = tuple(material.diffuse_color) - key = diffuse_color[0], diffuse_color[1], diffuse_color[2], i # i == f.mat - vertCols[key] = [-1] - - - # Vert Colours - file.write('\ttexture_list {\n') - file.write('\t\t%s' % (len(vertCols))) # vert count - idx=0 - for col, index in vertCols.items(): - - if me_materials: - material = me_materials[col[3]] - material_finish = materialNames[material.name] - - if material.transparency and material.transparency_method=='RAYTRACE': trans = 1-material.raytrace_transparency.filter - else: trans = 0.0 - - else: - material_finish = DEF_MAT_NAME # not working properly, - trans = 0.0 - - #print material.apl - file.write( ',\n\t\ttexture { pigment {rgbft<%.3g, %.3g, %.3g, %.3g, %.3g>} finish {%s}}' % - (col[0], col[1], col[2], 1-material.alpha, trans, material_finish) ) - - index[0] = idx - idx+=1 - - file.write( '\n }\n' ) - - # Face indicies - file.write('\tface_indices {\n') - file.write('\t\t%d' % (len(me.faces) + quadCount)) # faces count - for fi, f in enumerate(me.faces): - fv = faces_verts[fi] - material_index= f.material_index - if len(fv) == 4: indicies = (0,1,2), (0,2,3) - else: indicies = ((0,1,2),) - - if vcol_layer: - col = vcol_layer[fi] - - if len(fv) == 4: - cols = col.color1, col.color2, col.color3, col.color4 - else: - cols = col.color1, col.color2, col.color3 - - - if not me_materials or me_materials[material_index] == None: # No materials - for i1, i2, i3 in indicies: - file.write(',\n\t\t<%d,%d,%d>' % (fv[i1], fv[i2], fv[i3])) # vert count - else: - material = me_materials[material_index] - for i1, i2, i3 in indicies: - if me.vertex_colors and material.vertex_color_paint: - # Colour per vertex - vertex colour - - col1 = cols[i1] - col2 = cols[i2] - col3 = cols[i3] - - ci1 = vertCols[col1[0], col1[1], col1[2], material_index][0] - ci2 = vertCols[col2[0], col2[1], col2[2], material_index][0] - ci3 = vertCols[col3[0], col3[1], col3[2], material_index][0] - else: - # Colour per material - flat material colour - diffuse_color= material.diffuse_color - ci1 = ci2 = ci3 = vertCols[diffuse_color[0], diffuse_color[1], diffuse_color[2], f.material_index][0] - - file.write(',\n\t\t<%d,%d,%d>, %d,%d,%d' % (fv[i1], fv[i2], fv[i3], ci1, ci2, ci3)) # vert count - - - file.write('\n }\n') - - # normal_indices indicies - file.write('\tnormal_indices {\n') - file.write('\t\t%d' % (len(me.faces) + quadCount)) # faces count - for fi, fv in enumerate(faces_verts): - - if len(fv) == 4: indicies = (0,1,2), (0,2,3) - else: indicies = ((0,1,2),) - - for i1, i2, i3 in indicies: - if f.smooth: - file.write(',\n\t\t<%d,%d,%d>' %\ - (uniqueNormals[verts_normals[fv[i1]]][0],\ - uniqueNormals[verts_normals[fv[i2]]][0],\ - uniqueNormals[verts_normals[fv[i3]]][0])) # vert count - else: - idx = uniqueNormals[faces_normals[fi]][0] - file.write(',\n\t\t<%d,%d,%d>' % (idx, idx, idx)) # vert count - - file.write('\n }\n') - - if uv_layer: - file.write('\tuv_indices {\n') - file.write('\t\t%d' % (len(me.faces) + quadCount)) # faces count - for fi, fv in enumerate(faces_verts): - - if len(fv) == 4: indicies = (0,1,2), (0,2,3) - else: indicies = ((0,1,2),) - - uv = uv_layer[fi] - if len(faces_verts[fi])==4: - uvs = tuple(uv.uv1), tuple(uv.uv2), tuple(uv.uv3), tuple(uv.uv4) - else: - uvs = tuple(uv.uv1), tuple(uv.uv2), tuple(uv.uv3) - - for i1, i2, i3 in indicies: - file.write(',\n\t\t<%d,%d,%d>' %\ - (uniqueUVs[uvs[i1]][0],\ - uniqueUVs[uvs[i2]][0],\ - uniqueUVs[uvs[i2]][0])) # vert count - file.write('\n }\n') - - if me.materials: - material = me.materials[0] # dodgy - writeObjectMaterial(material) - - writeMatrix(matrix) - file.write('}\n') - - bpy.data.remove_mesh(me) - - def exportWorld(world): - if not world: - return - - mist = world.mist - - if mist.enabled: - file.write('fog {\n') - file.write('\tdistance %.6f\n' % mist.depth) - file.write('\tcolor rgbt<%.3g, %.3g, %.3g, %.3g>\n' % (tuple(world.horizon_color) + (1-mist.intensity,))) - #file.write('\tfog_offset %.6f\n' % mist.start) - #file.write('\tfog_alt 5\n') - #file.write('\tturbulence 0.2\n') - #file.write('\tturb_depth 0.3\n') - file.write('\tfog_type 1\n') - file.write('}\n') - - def exportGlobalSettings(scene): - - file.write('global_settings {\n') + if name not in nameSeq: + return name + + name_orig = name + i = 1 + while name in nameSeq: + name = '%s_%.3d' % (name_orig, i) + i += 1 + + return name + + def writeMatrix(matrix): + file.write('\tmatrix <%.6f, %.6f, %.6f, %.6f, %.6f, %.6f, %.6f, %.6f, %.6f, %.6f, %.6f, %.6f>\n' %\ + (matrix[0][0], matrix[0][1], matrix[0][2], matrix[1][0], matrix[1][1], matrix[1][2], matrix[2][0], matrix[2][1], matrix[2][2], matrix[3][0], matrix[3][1], matrix[3][2])) + + def writeObjectMaterial(material): + if material and material.transparency_method == 'RAYTRACE': + file.write('\tinterior { ior %.6f }\n' % material.raytrace_transparency.ior) + + # Other interior args + # fade_distance 2 + # fade_power [Value] + # fade_color + + # dispersion + # dispersion_samples + + materialNames = {} + DEF_MAT_NAME = 'Default' + + def writeMaterial(material): + # Assumes only called once on each material + + if material: + name_orig = material.name + else: + name_orig = DEF_MAT_NAME + + name = materialNames[name_orig] = uniqueName(bpy.utils.clean_name(name_orig), materialNames) + + file.write('#declare %s = finish {\n' % name) + + if material: + file.write('\tdiffuse %.3g\n' % material.diffuse_intensity) + file.write('\tspecular %.3g\n' % material.specular_intensity) + + file.write('\tambient %.3g\n' % material.ambient) + #file.write('\tambient rgb <%.3g, %.3g, %.3g>\n' % tuple([c*material.ambient for c in world.ambient_color])) # povray blends the global value + + # map hardness between 0.0 and 1.0 + roughness = ((1.0 - ((material.specular_hardness - 1.0) / 510.0))) + # scale from 0.0 to 0.1 + roughness *= 0.1 + # add a small value because 0.0 is invalid + roughness += (1 / 511.0) + + file.write('\troughness %.3g\n' % roughness) + + # 'phong 70.0 ' + + if material.raytrace_mirror.enabled: + raytrace_mirror = material.raytrace_mirror + if raytrace_mirror.reflect_factor: + file.write('\treflection {\n') + file.write('\t\trgb <%.3g, %.3g, %.3g>' % tuple(material.mirror_color)) + file.write('\t\tfresnel 1 falloff %.3g exponent %.3g metallic %.3g} ' % (raytrace_mirror.fresnel, raytrace_mirror.fresnel_factor, raytrace_mirror.reflect_factor)) + + else: + file.write('\tdiffuse 0.8\n') + file.write('\tspecular 0.2\n') + + + # This is written into the object + ''' + if material and material.transparency_method=='RAYTRACE': + 'interior { ior %.3g} ' % material.raytrace_transparency.ior + ''' + + #file.write('\t\t\tcrand 1.0\n') # Sand granyness + #file.write('\t\t\tmetallic %.6f\n' % material.spec) + #file.write('\t\t\tphong %.6f\n' % material.spec) + #file.write('\t\t\tphong_size %.6f\n' % material.spec) + #file.write('\t\t\tbrilliance %.6f ' % (material.specular_hardness/256.0) # Like hardness + + file.write('}\n') + + def exportCamera(): + camera = scene.camera + matrix = camera.matrix + + # compute resolution + Qsize = float(render.resolution_x) / float(render.resolution_y) + + file.write('camera {\n') + file.write('\tlocation <0, 0, 0>\n') + file.write('\tlook_at <0, 0, -1>\n') + file.write('\tright <%s, 0, 0>\n' % - Qsize) + file.write('\tup <0, 1, 0>\n') + file.write('\tangle %f \n' % (360.0 * atan(16.0 / camera.data.lens) / pi)) + + file.write('\trotate <%.6f, %.6f, %.6f>\n' % tuple([degrees(e) for e in matrix.rotationPart().toEuler()])) + file.write('\ttranslate <%.6f, %.6f, %.6f>\n' % (matrix[3][0], matrix[3][1], matrix[3][2])) + file.write('}\n') + + def exportLamps(lamps): + # Get all lamps + for ob in lamps: + lamp = ob.data + + matrix = ob.matrix + + color = tuple([c * lamp.energy for c in lamp.color]) # Colour is modified by energy + + file.write('light_source {\n') + file.write('\t< 0,0,0 >\n') + file.write('\tcolor rgb<%.3g, %.3g, %.3g>\n' % color) + + if lamp.type == 'POINT': # Point Lamp + pass + elif lamp.type == 'SPOT': # Spot + file.write('\tspotlight\n') + + # Falloff is the main radius from the centre line + file.write('\tfalloff %.2f\n' % (lamp.spot_size / 2.0)) # 1 TO 179 FOR BOTH + file.write('\tradius %.6f\n' % ((lamp.spot_size / 2.0) * (1.0 - lamp.spot_blend))) + + # Blender does not have a tightness equivilent, 0 is most like blender default. + file.write('\ttightness 0\n') # 0:10f + + file.write('\tpoint_at <0, 0, -1>\n') + elif lamp.type == 'SUN': + file.write('\tparallel\n') + file.write('\tpoint_at <0, 0, -1>\n') # *must* be after 'parallel' + + elif lamp.type == 'AREA': + + size_x = lamp.size + samples_x = lamp.shadow_ray_samples_x + if lamp.shape == 'SQUARE': + size_y = size_x + samples_y = samples_x + else: + size_y = lamp.size_y + samples_y = lamp.shadow_ray_samples_y + + file.write('\tarea_light <%d,0,0>,<0,0,%d> %d, %d\n' % (size_x, size_y, samples_x, samples_y)) + if lamp.shadow_ray_sampling_method == 'CONSTANT_JITTERED': + if lamp.jitter: + file.write('\tjitter\n') + else: + file.write('\tadaptive 1\n') + file.write('\tjitter\n') + + if lamp.shadow_method == 'NOSHADOW': + file.write('\tshadowless\n') + + file.write('\tfade_distance %.6f\n' % lamp.distance) + file.write('\tfade_power %d\n' % 1) # Could use blenders lamp quad? + writeMatrix(matrix) + + file.write('}\n') + + def exportMeta(metas): + + # TODO - blenders 'motherball' naming is not supported. + + for ob in metas: + meta = ob.data + + file.write('blob {\n') + file.write('\t\tthreshold %.4g\n' % meta.threshold) + + try: + material = meta.materials[0] # lame! - blender cant do enything else. + except: + material = None + + for elem in meta.elements: + + if elem.type not in ('BALL', 'ELLIPSOID'): + continue # Not supported + + loc = elem.location + + stiffness = elem.stiffness + if elem.negative: + stiffness = - stiffness + + if elem.type == 'BALL': + + file.write('\tsphere { <%.6g, %.6g, %.6g>, %.4g, %.4g ' % (loc.x, loc.y, loc.z, elem.radius, stiffness)) + + # After this wecould do something simple like... + # "pigment {Blue} }" + # except we'll write the color + + elif elem.type == 'ELLIPSOID': + # location is modified by scale + file.write('\tsphere { <%.6g, %.6g, %.6g>, %.4g, %.4g ' % (loc.x / elem.size_x, loc.y / elem.size_y, loc.z / elem.size_z, elem.radius, stiffness)) + file.write('scale <%.6g, %.6g, %.6g> ' % (elem.size_x, elem.size_y, elem.size_z)) + + if material: + diffuse_color = material.diffuse_color + + if material.transparency and material.transparency_method == 'RAYTRACE': + trans = 1.0 - material.raytrace_transparency.filter + else: + trans = 0.0 + + file.write('pigment {rgbft<%.3g, %.3g, %.3g, %.3g, %.3g>} finish {%s} }\n' % \ + (diffuse_color[0], diffuse_color[1], diffuse_color[2], 1.0 - material.alpha, trans, materialNames[material.name])) + + else: + file.write('pigment {rgb<1 1 1>} finish {%s} }\n' % DEF_MAT_NAME) # Write the finish last. + + writeObjectMaterial(material) + + writeMatrix(ob.matrix) + + file.write('}\n') + + def exportMeshs(sel): + + ob_num = 0 + + for ob in sel: + ob_num += 1 + + if ob.type in ('LAMP', 'CAMERA', 'EMPTY', 'META', 'ARMATURE'): + continue + + me = ob.data + me_materials = me.materials + + me = ob.create_mesh(True, 'RENDER') + + if not me: + continue + + if info_callback: + info_callback('Object %2.d of %2.d (%s)' % (ob_num, len(sel), ob.name)) + + #if ob.type!='MESH': + # continue + # me = ob.data + + matrix = ob.matrix + try: + uv_layer = me.active_uv_texture.data + except: + uv_layer = None + + try: + vcol_layer = me.active_vertex_color.data + except: + vcol_layer = None + + faces_verts = [f.verts for f in me.faces] + faces_normals = [tuple(f.normal) for f in me.faces] + verts_normals = [tuple(v.normal) for v in me.verts] + + # quads incur an extra face + quadCount = len([f for f in faces_verts if len(f) == 4]) + + file.write('mesh2 {\n') + file.write('\tvertex_vectors {\n') + file.write('\t\t%s' % (len(me.verts))) # vert count + for v in me.verts: + file.write(',\n\t\t<%.6f, %.6f, %.6f>' % tuple(v.co)) # vert count + file.write('\n }\n') + + + # Build unique Normal list + uniqueNormals = {} + for fi, f in enumerate(me.faces): + fv = faces_verts[fi] + # [-1] is a dummy index, use a list so we can modify in place + if f.smooth: # Use vertex normals + for v in fv: + key = verts_normals[v] + uniqueNormals[key] = [-1] + else: # Use face normal + key = faces_normals[fi] + uniqueNormals[key] = [-1] + + file.write('\tnormal_vectors {\n') + file.write('\t\t%d' % len(uniqueNormals)) # vert count + idx = 0 + for no, index in uniqueNormals.items(): + file.write(',\n\t\t<%.6f, %.6f, %.6f>' % no) # vert count + index[0] = idx + idx += 1 + file.write('\n }\n') + + + # Vertex colours + vertCols = {} # Use for material colours also. + + if uv_layer: + # Generate unique UV's + uniqueUVs = {} + + for fi, uv in enumerate(uv_layer): + + if len(faces_verts[fi]) == 4: + uvs = uv.uv1, uv.uv2, uv.uv3, uv.uv4 + else: + uvs = uv.uv1, uv.uv2, uv.uv3 + + for uv in uvs: + uniqueUVs[tuple(uv)] = [-1] + + file.write('\tuv_vectors {\n') + #print unique_uvs + file.write('\t\t%s' % (len(uniqueUVs))) # vert count + idx = 0 + for uv, index in uniqueUVs.items(): + file.write(',\n\t\t<%.6f, %.6f>' % uv) + index[0] = idx + idx += 1 + ''' + else: + # Just add 1 dummy vector, no real UV's + file.write('\t\t1') # vert count + file.write(',\n\t\t<0.0, 0.0>') + ''' + file.write('\n }\n') + + + if me.vertex_colors: + + for fi, f in enumerate(me.faces): + material_index = f.material_index + material = me_materials[material_index] + + if material and material.vertex_color_paint: + + col = vcol_layer[fi] + + if len(faces_verts[fi]) == 4: + cols = col.color1, col.color2, col.color3, col.color4 + else: + cols = col.color1, col.color2, col.color3 + + for col in cols: + key = col[0], col[1], col[2], material_index # Material index! + vertCols[key] = [-1] + + else: + if material: + diffuse_color = tuple(material.diffuse_color) + key = diffuse_color[0], diffuse_color[1], diffuse_color[2], material_index + vertCols[key] = [-1] + + + else: + # No vertex colours, so write material colours as vertex colours + for i, material in enumerate(me_materials): + + if material: + diffuse_color = tuple(material.diffuse_color) + key = diffuse_color[0], diffuse_color[1], diffuse_color[2], i # i == f.mat + vertCols[key] = [-1] + + + # Vert Colours + file.write('\ttexture_list {\n') + file.write('\t\t%s' % (len(vertCols))) # vert count + idx = 0 + for col, index in vertCols.items(): + + if me_materials: + material = me_materials[col[3]] + material_finish = materialNames[material.name] + + if material.transparency and material.transparency_method == 'RAYTRACE': + trans = 1.0 - material.raytrace_transparency.filter + else: + trans = 0.0 + + else: + material_finish = DEF_MAT_NAME # not working properly, + trans = 0.0 + + #print material.apl + file.write(',\n\t\ttexture { pigment {rgbft<%.3g, %.3g, %.3g, %.3g, %.3g>} finish {%s}}' % + (col[0], col[1], col[2], 1.0 - material.alpha, trans, material_finish)) + + index[0] = idx + idx += 1 + + file.write('\n }\n') + + # Face indicies + file.write('\tface_indices {\n') + file.write('\t\t%d' % (len(me.faces) + quadCount)) # faces count + for fi, f in enumerate(me.faces): + fv = faces_verts[fi] + material_index = f.material_index + if len(fv) == 4: + indicies = (0, 1, 2), (0, 2, 3) + else: + indicies = ((0, 1, 2),) + + if vcol_layer: + col = vcol_layer[fi] + + if len(fv) == 4: + cols = col.color1, col.color2, col.color3, col.color4 + else: + cols = col.color1, col.color2, col.color3 + + + if not me_materials or me_materials[material_index] == None: # No materials + for i1, i2, i3 in indicies: + file.write(',\n\t\t<%d,%d,%d>' % (fv[i1], fv[i2], fv[i3])) # vert count + else: + material = me_materials[material_index] + for i1, i2, i3 in indicies: + if me.vertex_colors and material.vertex_color_paint: + # Colour per vertex - vertex colour + + col1 = cols[i1] + col2 = cols[i2] + col3 = cols[i3] + + ci1 = vertCols[col1[0], col1[1], col1[2], material_index][0] + ci2 = vertCols[col2[0], col2[1], col2[2], material_index][0] + ci3 = vertCols[col3[0], col3[1], col3[2], material_index][0] + else: + # Colour per material - flat material colour + diffuse_color = material.diffuse_color + ci1 = ci2 = ci3 = vertCols[diffuse_color[0], diffuse_color[1], diffuse_color[2], f.material_index][0] + + file.write(',\n\t\t<%d,%d,%d>, %d,%d,%d' % (fv[i1], fv[i2], fv[i3], ci1, ci2, ci3)) # vert count + + + file.write('\n }\n') + + # normal_indices indicies + file.write('\tnormal_indices {\n') + file.write('\t\t%d' % (len(me.faces) + quadCount)) # faces count + for fi, fv in enumerate(faces_verts): + + if len(fv) == 4: + indicies = (0, 1, 2), (0, 2, 3) + else: + indicies = ((0, 1, 2),) + + for i1, i2, i3 in indicies: + if f.smooth: + file.write(',\n\t\t<%d,%d,%d>' %\ + (uniqueNormals[verts_normals[fv[i1]]][0],\ + uniqueNormals[verts_normals[fv[i2]]][0],\ + uniqueNormals[verts_normals[fv[i3]]][0])) # vert count + else: + idx = uniqueNormals[faces_normals[fi]][0] + file.write(',\n\t\t<%d,%d,%d>' % (idx, idx, idx)) # vert count + + file.write('\n }\n') + + if uv_layer: + file.write('\tuv_indices {\n') + file.write('\t\t%d' % (len(me.faces) + quadCount)) # faces count + for fi, fv in enumerate(faces_verts): + + if len(fv) == 4: + indicies = (0, 1, 2), (0, 2, 3) + else: + indicies = ((0, 1, 2),) + + uv = uv_layer[fi] + if len(faces_verts[fi]) == 4: + uvs = tuple(uv.uv1), tuple(uv.uv2), tuple(uv.uv3), tuple(uv.uv4) + else: + uvs = tuple(uv.uv1), tuple(uv.uv2), tuple(uv.uv3) + + for i1, i2, i3 in indicies: + file.write(',\n\t\t<%d,%d,%d>' %\ + (uniqueUVs[uvs[i1]][0],\ + uniqueUVs[uvs[i2]][0],\ + uniqueUVs[uvs[i2]][0])) # vert count + file.write('\n }\n') + + if me.materials: + material = me.materials[0] # dodgy + writeObjectMaterial(material) + + writeMatrix(matrix) + file.write('}\n') + + bpy.data.remove_mesh(me) + + def exportWorld(world): + if not world: + return + + mist = world.mist + + if mist.enabled: + file.write('fog {\n') + file.write('\tdistance %.6f\n' % mist.depth) + file.write('\tcolor rgbt<%.3g, %.3g, %.3g, %.3g>\n' % (tuple(world.horizon_color) + (1 - mist.intensity,))) + #file.write('\tfog_offset %.6f\n' % mist.start) + #file.write('\tfog_alt 5\n') + #file.write('\tturbulence 0.2\n') + #file.write('\tturb_depth 0.3\n') + file.write('\tfog_type 1\n') + file.write('}\n') + + def exportGlobalSettings(scene): + + file.write('global_settings {\n') + + if scene.pov_radio_enable: + file.write('\tradiosity {\n') + file.write("\t\tadc_bailout %.4g\n" % scene.pov_radio_adc_bailout) + file.write("\t\talways_sample %d\n" % scene.pov_radio_always_sample) + file.write("\t\tbrightness %.4g\n" % scene.pov_radio_brightness) + file.write("\t\tcount %d\n" % scene.pov_radio_count) + file.write("\t\terror_bound %.4g\n" % scene.pov_radio_error_bound) + file.write("\t\tgray_threshold %.4g\n" % scene.pov_radio_gray_threshold) + file.write("\t\tlow_error_factor %.4g\n" % scene.pov_radio_low_error_factor) + file.write("\t\tmedia %d\n" % scene.pov_radio_media) + file.write("\t\tminimum_reuse %.4g\n" % scene.pov_radio_minimum_reuse) + file.write("\t\tnearest_count %d\n" % scene.pov_radio_nearest_count) + file.write("\t\tnormal %d\n" % scene.pov_radio_normal) + file.write("\t\trecursion_limit %d\n" % scene.pov_radio_recursion_limit) + file.write('\t}\n') + + if world: + file.write("\tambient_light rgb<%.3g, %.3g, %.3g>\n" % tuple(world.ambient_color)) + + file.write('}\n') + + + # Convert all materials to strings we can access directly per vertex. + writeMaterial(None) # default material + + for material in bpy.data.materials: + writeMaterial(material) + + exportCamera() + #exportMaterials() + sel = scene.objects + exportLamps([l for l in sel if l.type == 'LAMP']) + exportMeta([l for l in sel if l.type == 'META']) + exportMeshs(sel) + exportWorld(scene.world) + exportGlobalSettings(scene) + + file.close() - if scene.pov_radio_enable: - file.write('\tradiosity {\n') - file.write("\t\tadc_bailout %.4g\n" % scene.pov_radio_adc_bailout) - file.write("\t\talways_sample %d\n" % scene.pov_radio_always_sample) - file.write("\t\tbrightness %.4g\n" % scene.pov_radio_brightness) - file.write("\t\tcount %d\n" % scene.pov_radio_count) - file.write("\t\terror_bound %.4g\n" % scene.pov_radio_error_bound) - file.write("\t\tgray_threshold %.4g\n" % scene.pov_radio_gray_threshold) - file.write("\t\tlow_error_factor %.4g\n" % scene.pov_radio_low_error_factor) - file.write("\t\tmedia %d\n" % scene.pov_radio_media) - file.write("\t\tminimum_reuse %.4g\n" % scene.pov_radio_minimum_reuse) - file.write("\t\tnearest_count %d\n" % scene.pov_radio_nearest_count) - file.write("\t\tnormal %d\n" % scene.pov_radio_normal) - file.write("\t\trecursion_limit %d\n" % scene.pov_radio_recursion_limit) - file.write('\t}\n') - - if world: - file.write("\tambient_light rgb<%.3g, %.3g, %.3g>\n" % tuple(world.ambient_color)) - - file.write('}\n') - - - # Convert all materials to strings we can access directly per vertex. - writeMaterial(None) # default material - - for material in bpy.data.materials: - writeMaterial(material) - - exportCamera() - #exportMaterials() - sel = scene.objects - exportLamps([l for l in sel if l.type == 'LAMP']) - exportMeta([l for l in sel if l.type == 'META']) - exportMeshs(sel) - exportWorld(scene.world) - exportGlobalSettings(scene) - - file.close() def write_pov_ini(filename_ini, filename_pov, filename_image): - scene = bpy.data.scenes[0] - render = scene.render_data - - x= int(render.resolution_x*render.resolution_percentage*0.01) - y= int(render.resolution_y*render.resolution_percentage*0.01) - - file = open(filename_ini, 'w') - - file.write('Input_File_Name="%s"\n' % filename_pov) - file.write('Output_File_Name="%s"\n' % filename_image) - - file.write('Width=%d\n' % x) - file.write('Height=%d\n' % y) - - # Needed for border render. - ''' - file.write('Start_Column=%d\n' % part.x) - file.write('End_Column=%d\n' % (part.x+part.w)) - - file.write('Start_Row=%d\n' % (part.y)) - file.write('End_Row=%d\n' % (part.y+part.h)) - ''' - - file.write('Display=0\n') - file.write('Pause_When_Done=0\n') - file.write('Output_File_Type=T\n') # TGA, best progressive loading - file.write('Output_Alpha=1\n') - - if render.antialiasing: - aa_mapping = {'OVERSAMPLE_5':2, 'OVERSAMPLE_8':3, 'OVERSAMPLE_11':4, 'OVERSAMPLE_16':5} # method 1 assumed - file.write('Antialias=1\n') - file.write('Antialias_Depth=%d\n' % aa_mapping[render.antialiasing_samples]) - else: - file.write('Antialias=0\n') - - file.close() + scene = bpy.data.scenes[0] + render = scene.render_data + + x = int(render.resolution_x * render.resolution_percentage * 0.01) + y = int(render.resolution_y * render.resolution_percentage * 0.01) + + file = open(filename_ini, 'w') + + file.write('Input_File_Name="%s"\n' % filename_pov) + file.write('Output_File_Name="%s"\n' % filename_image) + + file.write('Width=%d\n' % x) + file.write('Height=%d\n' % y) + + # Needed for border render. + ''' + file.write('Start_Column=%d\n' % part.x) + file.write('End_Column=%d\n' % (part.x+part.w)) + + file.write('Start_Row=%d\n' % (part.y)) + file.write('End_Row=%d\n' % (part.y+part.h)) + ''' + + file.write('Display=0\n') + file.write('Pause_When_Done=0\n') + file.write('Output_File_Type=T\n') # TGA, best progressive loading + file.write('Output_Alpha=1\n') + + if render.antialiasing: + aa_mapping = {'OVERSAMPLE_5': 2, 'OVERSAMPLE_8': 3, 'OVERSAMPLE_11': 4, 'OVERSAMPLE_16': 5} # method 1 assumed + file.write('Antialias=1\n') + file.write('Antialias_Depth=%d\n' % aa_mapping[render.antialiasing_samples]) + else: + file.write('Antialias=0\n') + + file.close() # Radiosity panel, use in the scene for now. -FloatProperty= bpy.types.Scene.FloatProperty -IntProperty= bpy.types.Scene.IntProperty -BoolProperty= bpy.types.Scene.BoolProperty +FloatProperty = bpy.types.Scene.FloatProperty +IntProperty = bpy.types.Scene.IntProperty +BoolProperty = bpy.types.Scene.BoolProperty # Not a real pov option, just to know if we should write -BoolProperty( attr="pov_radio_enable", - name="Enable Radiosity", - description="Enable povrays radiosity calculation.", - default= False) -BoolProperty( attr="pov_radio_display_advanced", - name="Advanced Options", - description="Show advanced options.", - default= False) +BoolProperty(attr="pov_radio_enable", + name="Enable Radiosity", + description="Enable povrays radiosity calculation.", + default=False) +BoolProperty(attr="pov_radio_display_advanced", + name="Advanced Options", + description="Show advanced options.", + default=False) # Real pov options -FloatProperty( attr="pov_radio_adc_bailout", - name="ADC Bailout", - description="The adc_bailout for radiosity rays. Use adc_bailout = 0.01 / brightest_ambient_object for good results.", - min=0.0, max=1000.0, soft_min=0.0, soft_max=1.0, default= 0.01) +FloatProperty(attr="pov_radio_adc_bailout", + name="ADC Bailout", + description="The adc_bailout for radiosity rays. Use adc_bailout = 0.01 / brightest_ambient_object for good results.", + min=0.0, max=1000.0, soft_min=0.0, soft_max=1.0, default=0.01) -BoolProperty( attr="pov_radio_always_sample", - name="Always Sample", - description="Only use the data from the pretrace step and not gather any new samples during the final radiosity pass..", - default= True) +BoolProperty(attr="pov_radio_always_sample", + name="Always Sample", + description="Only use the data from the pretrace step and not gather any new samples during the final radiosity pass..", + default=True) -FloatProperty( attr="pov_radio_brightness", - name="Brightness", - description="Ammount objects are brightened before being returned upwards to the rest of the system.", - min=0.0, max=1000.0, soft_min=0.0, soft_max=10.0, default= 1.0) +FloatProperty(attr="pov_radio_brightness", + name="Brightness", + description="Ammount objects are brightened before being returned upwards to the rest of the system.", + min=0.0, max=1000.0, soft_min=0.0, soft_max=10.0, default=1.0) -IntProperty( attr="pov_radio_count", - name="Ray Count", - description="number of rays that are sent out whenever a new radiosity value has to be calculated.", - min=1, max=1600, default= 35) +IntProperty(attr="pov_radio_count", + name="Ray Count", + description="number of rays that are sent out whenever a new radiosity value has to be calculated.", + min=1, max=1600, default=35) -FloatProperty( attr="pov_radio_error_bound", - name="Error Bound", - description="one of the two main speed/quality tuning values, lower values are more accurate.", - min=0.0, max=1000.0, soft_min=0.1, soft_max=10.0, default= 1.8) +FloatProperty(attr="pov_radio_error_bound", + name="Error Bound", + description="one of the two main speed/quality tuning values, lower values are more accurate.", + min=0.0, max=1000.0, soft_min=0.1, soft_max=10.0, default=1.8) -FloatProperty( attr="pov_radio_gray_threshold", - name="Gray Threshold", - description="one of the two main speed/quality tuning values, lower values are more accurate.", - min=0.0, max=1.0, soft_min=0, soft_max=1, default= 0.0) - -FloatProperty( attr="pov_radio_low_error_factor", - name="Low Error Factor", - description="If you calculate just enough samples, but no more, you will get an image which has slightly blotchy lighting.", - min=0.0, max=1.0, soft_min=0.0, soft_max=1.0, default= 0.5) +FloatProperty(attr="pov_radio_gray_threshold", + name="Gray Threshold", + description="one of the two main speed/quality tuning values, lower values are more accurate.", + min=0.0, max=1.0, soft_min=0, soft_max=1, default=0.0) + +FloatProperty(attr="pov_radio_low_error_factor", + name="Low Error Factor", + description="If you calculate just enough samples, but no more, you will get an image which has slightly blotchy lighting.", + min=0.0, max=1.0, soft_min=0.0, soft_max=1.0, default=0.5) # max_sample - not available yet -BoolProperty( attr="pov_radio_media", - name="Media", - description="Radiosity estimation can be affected by media.", - default= False) +BoolProperty(attr="pov_radio_media", + name="Media", + description="Radiosity estimation can be affected by media.", + default=False) -FloatProperty( attr="pov_radio_minimum_reuse", - name="Minimum Reuse", - description="Fraction of the screen width which sets the minimum radius of reuse for each sample point (At values higher than 2% expect errors).", - min=0.0, max=1.0, soft_min=0.1, soft_max=0.1, default= 0.015) - -IntProperty( attr="pov_radio_nearest_count", - name="Nearest Count", - description="Number of old ambient values blended together to create a new interpolated value.", - min=1, max=20, default= 5) - -BoolProperty( attr="pov_radio_normal", - name="Normals", - description="Radiosity estimation can be affected by normals.", - default= False) +FloatProperty(attr="pov_radio_minimum_reuse", + name="Minimum Reuse", + description="Fraction of the screen width which sets the minimum radius of reuse for each sample point (At values higher than 2% expect errors).", + min=0.0, max=1.0, soft_min=0.1, soft_max=0.1, default=0.015) + +IntProperty(attr="pov_radio_nearest_count", + name="Nearest Count", + description="Number of old ambient values blended together to create a new interpolated value.", + min=1, max=20, default=5) + +BoolProperty(attr="pov_radio_normal", + name="Normals", + description="Radiosity estimation can be affected by normals.", + default=False) + +IntProperty(attr="pov_radio_recursion_limit", + name="Recursion Limit", + description="how many recursion levels are used to calculate the diffuse inter-reflection.", + min=1, max=20, default=3) -IntProperty( attr="pov_radio_recursion_limit", - name="Recursion Limit", - description="how many recursion levels are used to calculate the diffuse inter-reflection.", - min=1, max=20, default= 3) - class PovrayRender(bpy.types.RenderEngine): - bl_idname = 'POVRAY_RENDER' - bl_label = "Povray" - DELAY = 0.02 - - def _export(self, scene): - import tempfile - - self._temp_file_in = tempfile.mktemp(suffix='.pov') - self._temp_file_out = tempfile.mktemp(suffix='.tga') - self._temp_file_ini = tempfile.mktemp(suffix='.ini') - ''' - self._temp_file_in = '/test.pov' - self._temp_file_out = '/test.tga' - self._temp_file_ini = '/test.ini' - ''' - - def info_callback(txt): - self.update_stats("", "POVRAY: " + txt) - - write_pov(self._temp_file_in, scene, info_callback) - - def _render(self): - - try: os.remove(self._temp_file_out) # so as not to load the old file - except: pass - - write_pov_ini(self._temp_file_ini, self._temp_file_in, self._temp_file_out) - - print ("***-STARTING-***") - - pov_binary = "povray" - - if sys.platform=='win32': - import winreg - regKey = winreg.OpenKey(winreg.HKEY_CURRENT_USER, 'Software\\POV-Ray\\v3.6\\Windows') - - if bitness == 64: - pov_binary = winreg.QueryValueEx(regKey, 'Home')[0] + '\\bin\\pvengine64' - else: - pov_binary = winreg.QueryValueEx(regKey, 'Home')[0] + '\\bin\\pvengine' - - if 1: - # TODO, when povray isnt found this gives a cryptic error, would be nice to be able to detect if it exists - self._process = subprocess.Popen([pov_binary, self._temp_file_ini]) # stdout=subprocess.PIPE, stderr=subprocess.PIPE - else: - # This works too but means we have to wait until its done - os.system('%s %s' % (pov_binary, self._temp_file_ini)) - - print ("***-DONE-***") - - def _cleanup(self): - for f in (self._temp_file_in, self._temp_file_ini, self._temp_file_out): - try: os.remove(f) - except: pass - - self.update_stats("", "") - - def render(self, scene): - - self.update_stats("", "POVRAY: Exporting data from Blender") - self._export(scene) - self.update_stats("", "POVRAY: Parsing File") - self._render() - - r = scene.render_data - - # compute resolution - x= int(r.resolution_x*r.resolution_percentage*0.01) - y= int(r.resolution_y*r.resolution_percentage*0.01) + bl_idname = 'POVRAY_RENDER' + bl_label = "Povray" + DELAY = 0.02 - # Wait for the file to be created - while not os.path.exists(self._temp_file_out): - if self.test_break(): - try: self._process.terminate() - except: pass - break - - if self._process.poll() != None: - self.update_stats("", "POVRAY: Failed") - break - - time.sleep(self.DELAY) - - if os.path.exists(self._temp_file_out): - - self.update_stats("", "POVRAY: Rendering") - - prev_size = -1 - - def update_image(): - result = self.begin_result(0, 0, x, y) - lay = result.layers[0] - # possible the image wont load early on. - try: lay.load_from_file(self._temp_file_out) - except: pass - self.end_result(result) - - # Update while povray renders - while True: - - # test if povray exists - if self._process.poll() != None: - update_image(); - break - - # user exit - if self.test_break(): - try: self._process.terminate() - except: pass - - break - - # Would be nice to redirect the output - # stdout_value, stderr_value = self._process.communicate() # locks - - - # check if the file updated - new_size = os.path.getsize(self._temp_file_out) - - if new_size != prev_size: - update_image() - prev_size = new_size - - time.sleep(self.DELAY) - - self._cleanup() + def _export(self, scene): + import tempfile + + self._temp_file_in = tempfile.mktemp(suffix='.pov') + self._temp_file_out = tempfile.mktemp(suffix='.tga') + self._temp_file_ini = tempfile.mktemp(suffix='.ini') + ''' + self._temp_file_in = '/test.pov' + self._temp_file_out = '/test.tga' + self._temp_file_ini = '/test.ini' + ''' + + def info_callback(txt): + self.update_stats("", "POVRAY: " + txt) + + write_pov(self._temp_file_in, scene, info_callback) + + def _render(self): + + try: + os.remove(self._temp_file_out) # so as not to load the old file + except: + pass + + write_pov_ini(self._temp_file_ini, self._temp_file_in, self._temp_file_out) + + print ("***-STARTING-***") + + pov_binary = "povray" + + if sys.platform == 'win32': + import winreg + regKey = winreg.OpenKey(winreg.HKEY_CURRENT_USER, 'Software\\POV-Ray\\v3.6\\Windows') + + if bitness == 64: + pov_binary = winreg.QueryValueEx(regKey, 'Home')[0] + '\\bin\\pvengine64' + else: + pov_binary = winreg.QueryValueEx(regKey, 'Home')[0] + '\\bin\\pvengine' + + if 1: + # TODO, when povray isnt found this gives a cryptic error, would be nice to be able to detect if it exists + self._process = subprocess.Popen([pov_binary, self._temp_file_ini]) # stdout=subprocess.PIPE, stderr=subprocess.PIPE + else: + # This works too but means we have to wait until its done + os.system('%s %s' % (pov_binary, self._temp_file_ini)) + + print ("***-DONE-***") + + def _cleanup(self): + for f in (self._temp_file_in, self._temp_file_ini, self._temp_file_out): + try: + os.remove(f) + except: + pass + + self.update_stats("", "") + + def render(self, scene): + + self.update_stats("", "POVRAY: Exporting data from Blender") + self._export(scene) + self.update_stats("", "POVRAY: Parsing File") + self._render() + + r = scene.render_data + + # compute resolution + x = int(r.resolution_x * r.resolution_percentage * 0.01) + y = int(r.resolution_y * r.resolution_percentage * 0.01) + + # Wait for the file to be created + while not os.path.exists(self._temp_file_out): + if self.test_break(): + try: + self._process.terminate() + except: + pass + break + + if self._process.poll() != None: + self.update_stats("", "POVRAY: Failed") + break + + time.sleep(self.DELAY) + + if os.path.exists(self._temp_file_out): + + self.update_stats("", "POVRAY: Rendering") + + prev_size = -1 + + def update_image(): + result = self.begin_result(0, 0, x, y) + lay = result.layers[0] + # possible the image wont load early on. + try: + lay.load_from_file(self._temp_file_out) + except: + pass + self.end_result(result) + + # Update while povray renders + while True: + + # test if povray exists + if self._process.poll() is not None: + update_image() + break + + # user exit + if self.test_break(): + try: + self._process.terminate() + except: + pass + + break + + # Would be nice to redirect the output + # stdout_value, stderr_value = self._process.communicate() # locks + + + # check if the file updated + new_size = os.path.getsize(self._temp_file_out) + + if new_size != prev_size: + update_image() + prev_size = new_size + + time.sleep(self.DELAY) + + self._cleanup() bpy.types.register(PovrayRender) @@ -863,69 +875,73 @@ del properties_world # Example of wrapping every class 'as is' import properties_material for member in dir(properties_material): - subclass = getattr(properties_material, member) - try: subclass.COMPAT_ENGINES.add('POVRAY_RENDER') - except: pass + subclass = getattr(properties_material, member) + try: + subclass.COMPAT_ENGINES.add('POVRAY_RENDER') + except: + pass del properties_material + class RenderButtonsPanel(bpy.types.Panel): - bl_space_type = 'PROPERTIES' - bl_region_type = 'WINDOW' - bl_context = "render" - # COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here - - def poll(self, context): - rd = context.scene.render_data - return (rd.use_game_engine==False) and (rd.engine in self.COMPAT_ENGINES) + bl_space_type = 'PROPERTIES' + bl_region_type = 'WINDOW' + bl_context = "render" + # COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here + + def poll(self, context): + rd = context.scene.render_data + return (rd.use_game_engine == False) and (rd.engine in self.COMPAT_ENGINES) + class RENDER_PT_povray_radiosity(RenderButtonsPanel): - bl_label = "Radiosity" - COMPAT_ENGINES = set(['POVRAY_RENDER']) + bl_label = "Radiosity" + COMPAT_ENGINES = {'POVRAY_RENDER'} - def draw_header(self, context): - scene = context.scene + def draw_header(self, context): + scene = context.scene - self.layout.prop(scene, "pov_radio_enable", text="") + self.layout.prop(scene, "pov_radio_enable", text="") - def draw(self, context): - layout = self.layout + def draw(self, context): + layout = self.layout - scene = context.scene - rd = scene.render_data - - layout.active = scene.pov_radio_enable - - split = layout.split() - - col = split.column() - col.prop(scene, "pov_radio_count", text="Rays") - col.prop(scene, "pov_radio_recursion_limit", text="Recursions") - col = split.column() - col.prop(scene, "pov_radio_error_bound", text="Error") - - layout.prop(scene, "pov_radio_display_advanced") - - if scene.pov_radio_display_advanced: - split = layout.split() - - col = split.column() - col.prop(scene, "pov_radio_adc_bailout", slider=True) - col.prop(scene, "pov_radio_gray_threshold", slider=True) - col.prop(scene, "pov_radio_low_error_factor", slider=True) + scene = context.scene + rd = scene.render_data - col = split.column() - col.prop(scene, "pov_radio_brightness") - col.prop(scene, "pov_radio_minimum_reuse", text="Min Reuse") - col.prop(scene, "pov_radio_nearest_count") + layout.active = scene.pov_radio_enable - split = layout.split() - - col = split.column() - col.label(text="Estimation Influence:") - col.prop(scene, "pov_radio_media") - col.prop(scene, "pov_radio_normal") - - col = split.column() - col.prop(scene, "pov_radio_always_sample") + split = layout.split() + + col = split.column() + col.prop(scene, "pov_radio_count", text="Rays") + col.prop(scene, "pov_radio_recursion_limit", text="Recursions") + col = split.column() + col.prop(scene, "pov_radio_error_bound", text="Error") + + layout.prop(scene, "pov_radio_display_advanced") + + if scene.pov_radio_display_advanced: + split = layout.split() + + col = split.column() + col.prop(scene, "pov_radio_adc_bailout", slider=True) + col.prop(scene, "pov_radio_gray_threshold", slider=True) + col.prop(scene, "pov_radio_low_error_factor", slider=True) + + col = split.column() + col.prop(scene, "pov_radio_brightness") + col.prop(scene, "pov_radio_minimum_reuse", text="Min Reuse") + col.prop(scene, "pov_radio_nearest_count") + + split = layout.split() + + col = split.column() + col.label(text="Estimation Influence:") + col.prop(scene, "pov_radio_media") + col.prop(scene, "pov_radio_normal") + + col = split.column() + col.prop(scene, "pov_radio_always_sample") bpy.types.register(RENDER_PT_povray_radiosity) diff --git a/release/scripts/io/export_3ds.py b/release/scripts/io/export_3ds.py index 5f585ac4336..edbb80b0272 100644 --- a/release/scripts/io/export_3ds.py +++ b/release/scripts/io/export_3ds.py @@ -5,18 +5,20 @@ # 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # ##### END GPL LICENSE BLOCK ##### +# + __author__ = ["Campbell Barton", "Bob Holcomb", "Richard Lärkäng", "Damien McGinnes", "Mark Stijnman"] __url__ = ("blenderartists.org", "www.blender.org", "www.gametutorials.com", "lib3ds.sourceforge.net/") __version__ = "0.90a" @@ -32,7 +34,7 @@ from the lib3ds project (http://lib3ds.sourceforge.net/) sourcecode. # ***** BEGIN GPL LICENSE BLOCK ***** # -# Script copyright (C) Bob Holcomb +# Script copyright (C) Bob Holcomb # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -65,50 +67,50 @@ import bpy # import Blender # from BPyMesh import getMeshFromObject # from BPyObject import getDerivedObjects -# try: +# try: # import struct -# except: +# except: # struct = None # also used by X3D exporter # return a tuple (free, object list), free is True if memory should be freed later with free_derived_objects() def create_derived_objects(ob): - if ob.parent and ob.parent.dupli_type != 'NONE': - return False, None + if ob.parent and ob.parent.dupli_type != 'NONE': + return False, None - if ob.dupli_type != 'NONE': - ob.create_dupli_list() - return True, [(dob.object, dob.matrix) for dob in ob.dupli_list] - else: - return False, [(ob, ob.matrix)] + if ob.dupli_type != 'NONE': + ob.create_dupli_list() + return True, [(dob.object, dob.matrix) for dob in ob.dupli_list] + else: + return False, [(ob, ob.matrix)] # also used by X3D exporter def free_derived_objects(ob): - ob.free_dupli_list() + ob.free_dupli_list() # So 3ds max can open files, limit names to 12 in length # this is verry annoying for filenames! name_unique = [] name_mapping = {} def sane_name(name): - name_fixed = name_mapping.get(name) - if name_fixed != None: - return name_fixed - - if len(name) > 12: - new_name = name[:12] - else: - new_name = name - - i = 0 - - while new_name in name_unique: - new_name = new_name[:-4] + '.%.3d' % i - i+=1 - - name_unique.append(new_name) - name_mapping[name] = new_name - return new_name + name_fixed = name_mapping.get(name) + if name_fixed != None: + return name_fixed + + if len(name) > 12: + new_name = name[:12] + else: + new_name = name + + i = 0 + + while new_name in name_unique: + new_name = new_name[:-4] + '.%.3d' % i + i+=1 + + name_unique.append(new_name) + name_mapping[name] = new_name + return new_name ###################################################### # Data Structures @@ -170,284 +172,284 @@ ROT_TRACK_TAG = int("0xB021",16); SCL_TRACK_TAG = int("0xB022",16); def uv_key(uv): - return round(uv[0], 6), round(uv[1], 6) + return round(uv[0], 6), round(uv[1], 6) # return round(uv.x, 6), round(uv.y, 6) -# size defines: +# size defines: SZ_SHORT = 2 SZ_INT = 4 SZ_FLOAT = 4 class _3ds_short(object): - '''Class representing a short (2-byte integer) for a 3ds file. - *** This looks like an unsigned short H is unsigned from the struct docs - Cam***''' - __slots__ = 'value' - def __init__(self, val=0): - self.value=val - - def get_size(self): - return SZ_SHORT + '''Class representing a short (2-byte integer) for a 3ds file. + *** This looks like an unsigned short H is unsigned from the struct docs - Cam***''' + __slots__ = 'value' + def __init__(self, val=0): + self.value=val - def write(self,file): - file.write(struct.pack("= mat_ls_len: - mat_index = f.mat = 0 - mat = mat_ls[mat_index] - if mat: mat_name = mat.name - else: mat_name = None - # else there alredy set to none - - img = uf.image + if mat_index >= mat_ls_len: + mat_index = f.mat = 0 + mat = mat_ls[mat_index] + if mat: mat_name = mat.name + else: mat_name = None + # else there alredy set to none + + img = uf.image # img = f.image - if img: img_name = img.name - else: img_name = None - - materialDict.setdefault((mat_name, img_name), (mat, img) ) - - - else: - for mat in mat_ls: - if mat: # material may be None so check its not. - materialDict.setdefault((mat.name, None), (mat, None) ) - - # Why 0 Why! - for f in data.faces: - if f.material_index >= mat_ls_len: + if img: img_name = img.name + else: img_name = None + + materialDict.setdefault((mat_name, img_name), (mat, img) ) + + + else: + for mat in mat_ls: + if mat: # material may be None so check its not. + materialDict.setdefault((mat.name, None), (mat, None) ) + + # Why 0 Why! + for f in data.faces: + if f.material_index >= mat_ls_len: # if f.mat >= mat_ls_len: - f.material_index = 0 - # f.mat = 0 + f.material_index = 0 + # f.mat = 0 - if free: - free_derived_objects(ob) + if free: + free_derived_objects(ob) - - # Make material chunks for all materials used in the meshes: - for mat_and_image in materialDict.values(): - object_info.add_subchunk(make_material_chunk(mat_and_image[0], mat_and_image[1])) - - # Give all objects a unique ID and build a dictionary from object name to object id: - """ - name_to_id = {} - for ob, data in mesh_objects: - name_to_id[ob.name]= len(name_to_id) - #for ob in empty_objects: - # name_to_id[ob.name]= len(name_to_id) - """ - - # Create object chunks for all meshes: - i = 0 - for ob, blender_mesh in mesh_objects: - # create a new object chunk - object_chunk = _3ds_chunk(OBJECT) - - # set the object name - object_chunk.add_variable("name", _3ds_string(sane_name(ob.name))) - - # make a mesh chunk out of the mesh: - object_chunk.add_subchunk(make_mesh_chunk(blender_mesh, materialDict)) - object_info.add_subchunk(object_chunk) - - ''' # COMMENTED OUT FOR 2.42 RELEASE!! CRASHES 3DS MAX - # make a kf object node for the object: - kfdata.add_subchunk(make_kf_obj_node(ob, name_to_id)) - ''' + + # Make material chunks for all materials used in the meshes: + for mat_and_image in materialDict.values(): + object_info.add_subchunk(make_material_chunk(mat_and_image[0], mat_and_image[1])) + + # Give all objects a unique ID and build a dictionary from object name to object id: + """ + name_to_id = {} + for ob, data in mesh_objects: + name_to_id[ob.name]= len(name_to_id) + #for ob in empty_objects: + # name_to_id[ob.name]= len(name_to_id) + """ + + # Create object chunks for all meshes: + i = 0 + for ob, blender_mesh in mesh_objects: + # create a new object chunk + object_chunk = _3ds_chunk(OBJECT) + + # set the object name + object_chunk.add_variable("name", _3ds_string(sane_name(ob.name))) + + # make a mesh chunk out of the mesh: + object_chunk.add_subchunk(make_mesh_chunk(blender_mesh, materialDict)) + object_info.add_subchunk(object_chunk) + + ''' # COMMENTED OUT FOR 2.42 RELEASE!! CRASHES 3DS MAX + # make a kf object node for the object: + kfdata.add_subchunk(make_kf_obj_node(ob, name_to_id)) + ''' # if not blender_mesh.users: - bpy.data.remove_mesh(blender_mesh) + bpy.data.remove_mesh(blender_mesh) # blender_mesh.verts = None - i+=i + i+=i - # Create chunks for all empties: - ''' # COMMENTED OUT FOR 2.42 RELEASE!! CRASHES 3DS MAX - for ob in empty_objects: - # Empties only require a kf object node: - kfdata.add_subchunk(make_kf_obj_node(ob, name_to_id)) - pass - ''' - - # Add main object info chunk to primary chunk: - primary.add_subchunk(object_info) - - ''' # COMMENTED OUT FOR 2.42 RELEASE!! CRASHES 3DS MAX - # Add main keyframe data chunk to primary chunk: - primary.add_subchunk(kfdata) - ''' - - # At this point, the chunk hierarchy is completely built. - - # Check the size: - primary.get_size() - # Open the file for writing: - file = open( filename, 'wb' ) - - # Recursively write the chunks to file: - primary.write(file) - - # Close the file: - file.close() - - # Debugging only: report the exporting time: + # Create chunks for all empties: + ''' # COMMENTED OUT FOR 2.42 RELEASE!! CRASHES 3DS MAX + for ob in empty_objects: + # Empties only require a kf object node: + kfdata.add_subchunk(make_kf_obj_node(ob, name_to_id)) + pass + ''' + + # Add main object info chunk to primary chunk: + primary.add_subchunk(object_info) + + ''' # COMMENTED OUT FOR 2.42 RELEASE!! CRASHES 3DS MAX + # Add main keyframe data chunk to primary chunk: + primary.add_subchunk(kfdata) + ''' + + # At this point, the chunk hierarchy is completely built. + + # Check the size: + primary.get_size() + # Open the file for writing: + file = open( filename, 'wb' ) + + # Recursively write the chunks to file: + primary.write(file) + + # Close the file: + file.close() + + # Debugging only: report the exporting time: # Blender.Window.WaitCursor(0) - print("3ds export time: %.2f" % (time.clock() - time1)) + print("3ds export time: %.2f" % (time.clock() - time1)) # print("3ds export time: %.2f" % (Blender.sys.time() - time1)) - - # Debugging only: dump the chunk hierarchy: - #primary.dump() + + # Debugging only: dump the chunk hierarchy: + #primary.dump() # if __name__=='__main__': @@ -1110,29 +1112,29 @@ def save_3ds(filename, context): # # save_3ds('/test_b.3ds') from bpy.props import * class Export3DS(bpy.types.Operator): - '''Export to 3DS file format (.3ds).''' - bl_idname = "export.autodesk_3ds" - bl_label = 'Export 3DS' - - # List of operator properties, the attributes will be assigned - # to the class instance from the operator settings before calling. + '''Export to 3DS file format (.3ds).''' + bl_idname = "export.autodesk_3ds" + bl_label = 'Export 3DS' - - # filename = StringProperty(name="File Name", description="File name used for exporting the 3DS file", maxlen= 1024, default= ""), - path = StringProperty(name="File Path", description="File path used for exporting the 3DS file", maxlen= 1024, default= "") + # List of operator properties, the attributes will be assigned + # to the class instance from the operator settings before calling. - - def execute(self, context): - save_3ds(self.properties.path, context) - return ('FINISHED',) - - def invoke(self, context, event): - wm = context.manager - wm.add_fileselect(self) - return ('RUNNING_MODAL',) - - def poll(self, context): # Poll isnt working yet - return context.active_object != None + + # filename = StringProperty(name="File Name", description="File name used for exporting the 3DS file", maxlen= 1024, default= ""), + path = StringProperty(name="File Path", description="File path used for exporting the 3DS file", maxlen= 1024, default= "") + + + def execute(self, context): + save_3ds(self.properties.path, context) + return ('FINISHED',) + + def invoke(self, context, event): + wm = context.manager + wm.add_fileselect(self) + return ('RUNNING_MODAL',) + + def poll(self, context): # Poll isnt working yet + return context.active_object != None bpy.ops.add(Export3DS) diff --git a/release/scripts/io/export_fbx.py b/release/scripts/io/export_fbx.py index c821e1d4fad..ba2741a7e7e 100644 --- a/release/scripts/io/export_fbx.py +++ b/release/scripts/io/export_fbx.py @@ -4,18 +4,20 @@ # 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # ##### END GPL LICENSE BLOCK ##### +# + __author__ = "Campbell Barton" __url__ = ['www.blender.org', 'blenderartists.org'] __version__ = "1.2" @@ -52,94 +54,94 @@ import time import math # math.pi import shutil # for file copying -# try: -# import time -# # import os # only needed for batch export, nbot used yet -# except: -# time = None # use this to check if they have python modules installed -# for python 2.3 support -try: - set() -except: - try: - from sets import Set as set - except: - set = None # so it complains you dont have a ! -# # os is only needed for batch 'own dir' option -# try: -# import os -# except: -# os = None + + + + + + + + + + + + + + + + + + # import Blender import bpy import Mathutils -# from Blender.Mathutils import Matrix, Vector, RotationMatrix -# import BPyObject -# import BPyMesh -# import BPySys -# import BPyMessages -## This was used to make V, but faster not to do all that -##valid = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_,.()[]{}' -##v = range(255) -##for c in valid: v.remove(ord(c)) -v = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,42,43,47,58,59,60,61,62,63,64,92,94,96,124,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254] -invalid = ''.join([chr(i) for i in v]) -def cleanName(name): - for ch in invalid: name = name.replace(ch, '_') - return name -# del v, i + + + + + + + + + + + + + + + def copy_file(source, dest): - file = open(source, 'rb') - data = file.read() - file.close() - - file = open(dest, 'wb') - file.write(data) - file.close() + file = open(source, 'rb') + data = file.read() + file.close() + + file = open(dest, 'wb') + file.write(data) + file.close() # XXX not used anymore, images are copied one at a time def copy_images(dest_dir, textures): - if not dest_dir.endswith(os.sep): - dest_dir += os.sep - - image_paths = set() - for tex in textures: - image_paths.add(Blender.sys.expandpath(tex.filename)) - - # Now copy images - copyCount = 0 - for image_path in image_paths: - if Blender.sys.exists(image_path): - # Make a name for the target path. - dest_image_path = dest_dir + image_path.split('\\')[-1].split('/')[-1] - if not Blender.sys.exists(dest_image_path): # Image isnt alredy there - print('\tCopying "%s" > "%s"' % (image_path, dest_image_path)) - try: - copy_file(image_path, dest_image_path) - copyCount+=1 - except: - print('\t\tWarning, file failed to copy, skipping.') - - print('\tCopied %d images' % copyCount) + if not dest_dir.endswith(os.sep): + dest_dir += os.sep + + image_paths = set() + for tex in textures: + image_paths.add(Blender.sys.expandpath(tex.filename)) + + # Now copy images + copyCount = 0 + for image_path in image_paths: + if Blender.sys.exists(image_path): + # Make a name for the target path. + dest_image_path = dest_dir + image_path.split('\\')[-1].split('/')[-1] + if not Blender.sys.exists(dest_image_path): # Image isnt alredy there + print('\tCopying "%s" > "%s"' % (image_path, dest_image_path)) + try: + copy_file(image_path, dest_image_path) + copyCount+=1 + except: + print('\t\tWarning, file failed to copy, skipping.') + + print('\tCopied %d images' % copyCount) # I guess FBX uses degrees instead of radians (Arystan). # Call this function just before writing to FBX. def eulerRadToDeg(eul): - ret = Mathutils.Euler() + ret = Mathutils.Euler() - ret.x = 180 / math.pi * eul[0] - ret.y = 180 / math.pi * eul[1] - ret.z = 180 / math.pi * eul[2] + ret.x = 180 / math.pi * eul[0] + ret.y = 180 / math.pi * eul[1] + ret.z = 180 / math.pi * eul[2] - return ret + return ret mtx4_identity = Mathutils.Matrix() @@ -161,7 +163,7 @@ mtx4_z90n = Mathutils.RotationMatrix(-math.pi/2, 4, 'z') # used # def strip_path(p): # return p.split('\\')[-1].split('/')[-1] -# Used to add the scene name into the filename without using odd chars +# Used to add the scene name into the filename without using odd chars sane_name_mapping_ob = {} sane_name_mapping_mat = {} sane_name_mapping_tex = {} @@ -173,56 +175,56 @@ sane_name_mapping_ob['Scene'] = 'Scene_' sane_name_mapping_ob['blend_root'] = 'blend_root_' def increment_string(t): - name = t - num = '' - while name and name[-1].isdigit(): - num = name[-1] + num - name = name[:-1] - if num: return '%s%d' % (name, int(num)+1) - else: return name + '_0' + name = t + num = '' + while name and name[-1].isdigit(): + num = name[-1] + num + name = name[:-1] + if num: return '%s%d' % (name, int(num)+1) + else: return name + '_0' # todo - Disallow the name 'Scene' and 'blend_root' - it will bugger things up. def sane_name(data, dct): - #if not data: return None - - if type(data)==tuple: # materials are paired up with images - data, other = data - use_other = True - else: - other = None - use_other = False - - if data: name = data.name - else: name = None - orig_name = name - - if other: - orig_name_other = other.name - name = '%s #%s' % (name, orig_name_other) - else: - orig_name_other = None - - # dont cache, only ever call once for each data type now, - # so as to avoid namespace collision between types - like with objects <-> bones - #try: return dct[name] - #except: pass - - if not name: - name = 'unnamed' # blank string, ASKING FOR TROUBLE! - else: - #name = BPySys.cleanName(name) - name = cleanName(name) # use our own - - while name in iter(dct.values()): name = increment_string(name) - - if use_other: # even if other is None - orig_name_other will be a string or None - dct[orig_name, orig_name_other] = name - else: - dct[orig_name] = name - - return name + #if not data: return None + + if type(data)==tuple: # materials are paired up with images + data, other = data + use_other = True + else: + other = None + use_other = False + + if data: name = data.name + else: name = None + orig_name = name + + if other: + orig_name_other = other.name + name = '%s #%s' % (name, orig_name_other) + else: + orig_name_other = None + + # dont cache, only ever call once for each data type now, + # so as to avoid namespace collision between types - like with objects <-> bones + #try: return dct[name] + #except: pass + + if not name: + name = 'unnamed' # blank string, ASKING FOR TROUBLE! + else: + + name = bpy.utils.clean_name(name) # use our own + + while name in iter(dct.values()): name = increment_string(name) + + if use_other: # even if other is None - orig_name_other will be a string or None + dct[orig_name, orig_name_other] = name + else: + dct[orig_name] = name + + return name def sane_obname(data): return sane_name(data, sane_name_mapping_ob) def sane_matname(data): return sane_name(data, sane_name_mapping_mat) @@ -251,65 +253,65 @@ def sane_groupname(data): return sane_name(data, sane_name_mapping_group) def mat4x4str(mat): - return '%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f' % tuple([ f for v in mat for f in v ]) + return '%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f,%.15f' % tuple([ f for v in mat for f in v ]) # XXX not used # duplicated in OBJ exporter def getVertsFromGroup(me, group_index): - ret = [] + ret = [] - for i, v in enumerate(me.verts): - for g in v.groups: - if g.group == group_index: - ret.append((i, g.weight)) + for i, v in enumerate(me.verts): + for g in v.groups: + if g.group == group_index: + ret.append((i, g.weight)) - return ret + return ret # ob must be OB_MESH def BPyMesh_meshWeight2List(ob): - ''' Takes a mesh and return its group names and a list of lists, one list per vertex. - aligning the each vert list with the group names, each list contains float value for the weight. - These 2 lists can be modified and then used with list2MeshWeight to apply the changes. - ''' + ''' Takes a mesh and return its group names and a list of lists, one list per vertex. + aligning the each vert list with the group names, each list contains float value for the weight. + These 2 lists can be modified and then used with list2MeshWeight to apply the changes. + ''' - me = ob.data + me = ob.data - # Clear the vert group. - groupNames= [g.name for g in ob.vertex_groups] - len_groupNames= len(groupNames) - - if not len_groupNames: - # no verts? return a vert aligned empty list - return [[] for i in range(len(me.verts))], [] - else: - vWeightList= [[0.0]*len_groupNames for i in range(len(me.verts))] + # Clear the vert group. + groupNames= [g.name for g in ob.vertex_groups] + len_groupNames= len(groupNames) - for i, v in enumerate(me.verts): - for g in v.groups: - vWeightList[i][g.group] = g.weight + if not len_groupNames: + # no verts? return a vert aligned empty list + return [[] for i in range(len(me.verts))], [] + else: + vWeightList= [[0.0]*len_groupNames for i in range(len(me.verts))] - return groupNames, vWeightList + for i, v in enumerate(me.verts): + for g in v.groups: + vWeightList[i][g.group] = g.weight + + return groupNames, vWeightList def meshNormalizedWeights(me): - try: # account for old bad BPyMesh - groupNames, vWeightList = BPyMesh_meshWeight2List(me) + try: # account for old bad BPyMesh + groupNames, vWeightList = BPyMesh_meshWeight2List(me) # groupNames, vWeightList = BPyMesh.meshWeight2List(me) - except: - return [],[] - - if not groupNames: - return [],[] - - for i, vWeights in enumerate(vWeightList): - tot = 0.0 - for w in vWeights: - tot+=w - - if tot: - for j, w in enumerate(vWeights): - vWeights[j] = w/tot - - return groupNames, vWeightList + except: + return [],[] + + if not groupNames: + return [],[] + + for i, vWeights in enumerate(vWeightList): + tot = 0.0 + for w in vWeights: + tot+=w + + if tot: + for j, w in enumerate(vWeights): + vWeights[j] = w/tot + + return groupNames, vWeightList header_comment = \ '''; FBX 6.1.0 project file @@ -321,1379 +323,1379 @@ header_comment = \ # This func can be called with just the filename def write(filename, batch_objects = None, \ - context = None, - EXP_OBS_SELECTED = True, - EXP_MESH = True, - EXP_MESH_APPLY_MOD = True, + context = None, + EXP_OBS_SELECTED = True, + EXP_MESH = True, + EXP_MESH_APPLY_MOD = True, # EXP_MESH_HQ_NORMALS = False, - EXP_ARMATURE = True, - EXP_LAMP = True, - EXP_CAMERA = True, - EXP_EMPTY = True, - EXP_IMAGE_COPY = False, - GLOBAL_MATRIX = Mathutils.Matrix(), - ANIM_ENABLE = True, - ANIM_OPTIMIZE = True, - ANIM_OPTIMIZE_PRECISSION = 6, - ANIM_ACTION_ALL = False, - BATCH_ENABLE = False, - BATCH_GROUP = True, - BATCH_FILE_PREFIX = '', - BATCH_OWN_DIR = False - ): - - # ----------------- Batch support! - if BATCH_ENABLE: - if os == None: BATCH_OWN_DIR = False - - fbxpath = filename - - # get the path component of filename - tmp_exists = bpy.utils.exists(fbxpath) + EXP_ARMATURE = True, + EXP_LAMP = True, + EXP_CAMERA = True, + EXP_EMPTY = True, + EXP_IMAGE_COPY = False, + GLOBAL_MATRIX = Mathutils.Matrix(), + ANIM_ENABLE = True, + ANIM_OPTIMIZE = True, + ANIM_OPTIMIZE_PRECISSION = 6, + ANIM_ACTION_ALL = False, + BATCH_ENABLE = False, + BATCH_GROUP = True, + BATCH_FILE_PREFIX = '', + BATCH_OWN_DIR = False + ): + + # ----------------- Batch support! + if BATCH_ENABLE: + if os == None: BATCH_OWN_DIR = False + + fbxpath = filename + + # get the path component of filename + tmp_exists = bpy.utils.exists(fbxpath) # tmp_exists = Blender.sys.exists(fbxpath) - - if tmp_exists != 2: # a file, we want a path - fbxpath = os.path.dirname(fbxpath) + + if tmp_exists != 2: # a file, we want a path + fbxpath = os.path.dirname(fbxpath) # while fbxpath and fbxpath[-1] not in ('/', '\\'): # fbxpath = fbxpath[:-1] - if not fbxpath: + if not fbxpath: # if not filename: - # XXX - print('Error%t|Directory does not exist!') + # XXX + print('Error%t|Directory does not exist!') # Draw.PupMenu('Error%t|Directory does not exist!') - return + return - tmp_exists = bpy.utils.exists(fbxpath) + tmp_exists = bpy.utils.exists(fbxpath) # tmp_exists = Blender.sys.exists(fbxpath) - - if tmp_exists != 2: - # XXX - print('Error%t|Directory does not exist!') + + if tmp_exists != 2: + # XXX + print('Error%t|Directory does not exist!') # Draw.PupMenu('Error%t|Directory does not exist!') - return - - if not fbxpath.endswith(os.sep): - fbxpath += os.sep - del tmp_exists - - - if BATCH_GROUP: - data_seq = bpy.data.groups - else: - data_seq = bpy.data.scenes - - # call this function within a loop with BATCH_ENABLE == False - orig_sce = context.scene + return + + if not fbxpath.endswith(os.sep): + fbxpath += os.sep + del tmp_exists + + + if BATCH_GROUP: + data_seq = bpy.data.groups + else: + data_seq = bpy.data.scenes + + # call this function within a loop with BATCH_ENABLE == False + orig_sce = context.scene # orig_sce = bpy.data.scenes.active - - - new_fbxpath = fbxpath # own dir option modifies, we need to keep an original - for data in data_seq: # scene or group - newname = BATCH_FILE_PREFIX + cleanName(data.name) -# newname = BATCH_FILE_PREFIX + BPySys.cleanName(data.name) - - - if BATCH_OWN_DIR: - new_fbxpath = fbxpath + newname + os.sep - # path may alredy exist - # TODO - might exist but be a file. unlikely but should probably account for it. - if bpy.utils.exists(new_fbxpath) == 0: + + new_fbxpath = fbxpath # own dir option modifies, we need to keep an original + for data in data_seq: # scene or group + newname = BATCH_FILE_PREFIX + bpy.utils.clean_name(data.name) +# newname = BATCH_FILE_PREFIX + BPySys.bpy.utils.clean_name(data.name) + + + if BATCH_OWN_DIR: + new_fbxpath = fbxpath + newname + os.sep + # path may alredy exist + # TODO - might exist but be a file. unlikely but should probably account for it. + + if bpy.utils.exists(new_fbxpath) == 0: # if Blender.sys.exists(new_fbxpath) == 0: - os.mkdir(new_fbxpath) - - - filename = new_fbxpath + newname + '.fbx' - - print('\nBatch exporting %s as...\n\t"%s"' % (data, filename)) + os.mkdir(new_fbxpath) - # XXX don't know what to do with this, probably do the same? (Arystan) - if BATCH_GROUP: #group - # group, so objects update properly, add a dummy scene. - sce = bpy.data.scenes.new() - sce.Layers = (1<<20) -1 - bpy.data.scenes.active = sce - for ob_base in data.objects: - sce.objects.link(ob_base) - - sce.update(1) - - # TODO - BUMMER! Armatures not in the group wont animate the mesh - - else:# scene - - - data_seq.active = data - - - # Call self with modified args - # Dont pass batch options since we alredy usedt them - write(filename, data.objects, - context, - False, - EXP_MESH, - EXP_MESH_APPLY_MOD, + + filename = new_fbxpath + newname + '.fbx' + + print('\nBatch exporting %s as...\n\t"%s"' % (data, filename)) + + # XXX don't know what to do with this, probably do the same? (Arystan) + if BATCH_GROUP: #group + # group, so objects update properly, add a dummy scene. + sce = bpy.data.scenes.new() + sce.Layers = (1<<20) -1 + bpy.data.scenes.active = sce + for ob_base in data.objects: + sce.objects.link(ob_base) + + sce.update(1) + + # TODO - BUMMER! Armatures not in the group wont animate the mesh + + else:# scene + + + data_seq.active = data + + + # Call self with modified args + # Dont pass batch options since we alredy usedt them + write(filename, data.objects, + context, + False, + EXP_MESH, + EXP_MESH_APPLY_MOD, # EXP_MESH_HQ_NORMALS, - EXP_ARMATURE, - EXP_LAMP, - EXP_CAMERA, - EXP_EMPTY, - EXP_IMAGE_COPY, - GLOBAL_MATRIX, - ANIM_ENABLE, - ANIM_OPTIMIZE, - ANIM_OPTIMIZE_PRECISSION, - ANIM_ACTION_ALL - ) - - if BATCH_GROUP: - # remove temp group scene - bpy.data.remove_scene(sce) + EXP_ARMATURE, + EXP_LAMP, + EXP_CAMERA, + EXP_EMPTY, + EXP_IMAGE_COPY, + GLOBAL_MATRIX, + ANIM_ENABLE, + ANIM_OPTIMIZE, + ANIM_OPTIMIZE_PRECISSION, + ANIM_ACTION_ALL + ) + + if BATCH_GROUP: + # remove temp group scene + bpy.data.remove_scene(sce) # bpy.data.scenes.unlink(sce) - - bpy.data.scenes.active = orig_sce - - return # so the script wont run after we have batch exported. - - # end batch support - - # Use this for working out paths relative to the export location - basepath = os.path.dirname(filename) or '.' - basepath += os.sep + + bpy.data.scenes.active = orig_sce + + return # so the script wont run after we have batch exported. + + # end batch support + + # Use this for working out paths relative to the export location + basepath = os.path.dirname(filename) or '.' + basepath += os.sep # basepath = Blender.sys.dirname(filename) - - # ---------------------------------------------- - # storage classes - class my_bone_class: - __slots__ =(\ - 'blenName',\ - 'blenBone',\ - 'blenMeshes',\ - 'restMatrix',\ - 'parent',\ - 'blenName',\ - 'fbxName',\ - 'fbxArm',\ - '__pose_bone',\ - '__anim_poselist') - - def __init__(self, blenBone, fbxArm): - - # This is so 2 armatures dont have naming conflicts since FBX bones use object namespace - self.fbxName = sane_obname(blenBone) - - self.blenName = blenBone.name - self.blenBone = blenBone - self.blenMeshes = {} # fbxMeshObName : mesh - self.fbxArm = fbxArm - self.restMatrix = blenBone.matrix_local + + # ---------------------------------------------- + # storage classes + class my_bone_class: + __slots__ =(\ + 'blenName',\ + 'blenBone',\ + 'blenMeshes',\ + 'restMatrix',\ + 'parent',\ + 'blenName',\ + 'fbxName',\ + 'fbxArm',\ + '__pose_bone',\ + '__anim_poselist') + + def __init__(self, blenBone, fbxArm): + + # This is so 2 armatures dont have naming conflicts since FBX bones use object namespace + self.fbxName = sane_obname(blenBone) + + self.blenName = blenBone.name + self.blenBone = blenBone + self.blenMeshes = {} # fbxMeshObName : mesh + self.fbxArm = fbxArm + self.restMatrix = blenBone.matrix_local # self.restMatrix = blenBone.matrix['ARMATURESPACE'] - - # not used yet - # self.restMatrixInv = self.restMatrix.copy().invert() - # self.restMatrixLocal = None # set later, need parent matrix - - self.parent = None - - # not public - pose = fbxArm.blenObject.pose + + # not used yet + # self.restMatrixInv = self.restMatrix.copy().invert() + # self.restMatrixLocal = None # set later, need parent matrix + + self.parent = None + + # not public + pose = fbxArm.blenObject.pose # pose = fbxArm.blenObject.getPose() - self.__pose_bone = pose.bones[self.blenName] - - # store a list if matricies here, (poseMatrix, head, tail) - # {frame:posematrix, frame:posematrix, ...} - self.__anim_poselist = {} - - ''' - def calcRestMatrixLocal(self): - if self.parent: - self.restMatrixLocal = self.restMatrix * self.parent.restMatrix.copy().invert() - else: - self.restMatrixLocal = self.restMatrix.copy() - ''' - def setPoseFrame(self, f): - # cache pose info here, frame must be set beforehand - - # Didnt end up needing head or tail, if we do - here it is. - ''' - self.__anim_poselist[f] = (\ - self.__pose_bone.poseMatrix.copy(),\ - self.__pose_bone.head.copy(),\ - self.__pose_bone.tail.copy() ) - ''' + self.__pose_bone = pose.bones[self.blenName] - self.__anim_poselist[f] = self.__pose_bone.pose_matrix.copy() + # store a list if matricies here, (poseMatrix, head, tail) + # {frame:posematrix, frame:posematrix, ...} + self.__anim_poselist = {} + + ''' + def calcRestMatrixLocal(self): + if self.parent: + self.restMatrixLocal = self.restMatrix * self.parent.restMatrix.copy().invert() + else: + self.restMatrixLocal = self.restMatrix.copy() + ''' + def setPoseFrame(self, f): + # cache pose info here, frame must be set beforehand + + # Didnt end up needing head or tail, if we do - here it is. + ''' + self.__anim_poselist[f] = (\ + self.__pose_bone.poseMatrix.copy(),\ + self.__pose_bone.head.copy(),\ + self.__pose_bone.tail.copy() ) + ''' + + self.__anim_poselist[f] = self.__pose_bone.pose_matrix.copy() # self.__anim_poselist[f] = self.__pose_bone.poseMatrix.copy() - - # get pose from frame. - def getPoseMatrix(self, f):# ---------------------------------------------- - return self.__anim_poselist[f] - ''' - def getPoseHead(self, f): - #return self.__pose_bone.head.copy() - return self.__anim_poselist[f][1].copy() - def getPoseTail(self, f): - #return self.__pose_bone.tail.copy() - return self.__anim_poselist[f][2].copy() - ''' - # end - - def getAnimParRelMatrix(self, frame): - #arm_mat = self.fbxArm.matrixWorld - #arm_mat = self.fbxArm.parRelMatrix() - if not self.parent: - #return mtx4_z90 * (self.getPoseMatrix(frame) * arm_mat) # dont apply arm matrix anymore - return mtx4_z90 * self.getPoseMatrix(frame) - else: - #return (mtx4_z90 * ((self.getPoseMatrix(frame) * arm_mat))) * (mtx4_z90 * (self.parent.getPoseMatrix(frame) * arm_mat)).invert() - return (mtx4_z90 * (self.getPoseMatrix(frame))) * (mtx4_z90 * self.parent.getPoseMatrix(frame)).invert() - - # we need thes because cameras and lights modified rotations - def getAnimParRelMatrixRot(self, frame): - return self.getAnimParRelMatrix(frame) - - def flushAnimData(self): - self.__anim_poselist.clear() + + # get pose from frame. + def getPoseMatrix(self, f):# ---------------------------------------------- + return self.__anim_poselist[f] + ''' + def getPoseHead(self, f): + #return self.__pose_bone.head.copy() + return self.__anim_poselist[f][1].copy() + def getPoseTail(self, f): + #return self.__pose_bone.tail.copy() + return self.__anim_poselist[f][2].copy() + ''' + # end + + def getAnimParRelMatrix(self, frame): + #arm_mat = self.fbxArm.matrixWorld + #arm_mat = self.fbxArm.parRelMatrix() + if not self.parent: + #return mtx4_z90 * (self.getPoseMatrix(frame) * arm_mat) # dont apply arm matrix anymore + return mtx4_z90 * self.getPoseMatrix(frame) + else: + #return (mtx4_z90 * ((self.getPoseMatrix(frame) * arm_mat))) * (mtx4_z90 * (self.parent.getPoseMatrix(frame) * arm_mat)).invert() + return (mtx4_z90 * (self.getPoseMatrix(frame))) * (mtx4_z90 * self.parent.getPoseMatrix(frame)).invert() + + # we need thes because cameras and lights modified rotations + def getAnimParRelMatrixRot(self, frame): + return self.getAnimParRelMatrix(frame) + + def flushAnimData(self): + self.__anim_poselist.clear() - class my_object_generic: - # Other settings can be applied for each type - mesh, armature etc. - def __init__(self, ob, matrixWorld = None): - self.fbxName = sane_obname(ob) - self.blenObject = ob - self.fbxGroupNames = [] - self.fbxParent = None # set later on IF the parent is in the selection. - if matrixWorld: self.matrixWorld = matrixWorld * GLOBAL_MATRIX - else: self.matrixWorld = ob.matrix * GLOBAL_MATRIX + class my_object_generic: + # Other settings can be applied for each type - mesh, armature etc. + def __init__(self, ob, matrixWorld = None): + self.fbxName = sane_obname(ob) + self.blenObject = ob + self.fbxGroupNames = [] + self.fbxParent = None # set later on IF the parent is in the selection. + if matrixWorld: self.matrixWorld = matrixWorld * GLOBAL_MATRIX + else: self.matrixWorld = ob.matrix * GLOBAL_MATRIX # else: self.matrixWorld = ob.matrixWorld * GLOBAL_MATRIX - self.__anim_poselist = {} # we should only access this - - def parRelMatrix(self): - if self.fbxParent: - return self.matrixWorld * self.fbxParent.matrixWorld.copy().invert() - else: - return self.matrixWorld - - def setPoseFrame(self, f): - self.__anim_poselist[f] = self.blenObject.matrix.copy() -# self.__anim_poselist[f] = self.blenObject.matrixWorld.copy() - - def getAnimParRelMatrix(self, frame): - if self.fbxParent: - #return (self.__anim_poselist[frame] * self.fbxParent.__anim_poselist[frame].copy().invert() ) * GLOBAL_MATRIX - return (self.__anim_poselist[frame] * GLOBAL_MATRIX) * (self.fbxParent.__anim_poselist[frame] * GLOBAL_MATRIX).invert() - else: - return self.__anim_poselist[frame] * GLOBAL_MATRIX - - def getAnimParRelMatrixRot(self, frame): - type = self.blenObject.type - if self.fbxParent: - matrix_rot = (((self.__anim_poselist[frame] * GLOBAL_MATRIX) * (self.fbxParent.__anim_poselist[frame] * GLOBAL_MATRIX).invert())).rotationPart() - else: - matrix_rot = (self.__anim_poselist[frame] * GLOBAL_MATRIX).rotationPart() - - # Lamps need to be rotated - if type =='LAMP': - matrix_rot = mtx_x90 * matrix_rot - elif type =='CAMERA': -# elif ob and type =='Camera': - y = Mathutils.Vector(0,1,0) * matrix_rot - matrix_rot = matrix_rot * Mathutils.RotationMatrix(math.pi/2, 3, 'r', y) - - return matrix_rot - - # ---------------------------------------------- - - - - - - print('\nFBX export starting...', filename) - start_time = time.clock() -# start_time = Blender.sys.time() - try: - file = open(filename, 'w') - except: - return False + self.__anim_poselist = {} # we should only access this - sce = context.scene + def parRelMatrix(self): + if self.fbxParent: + return self.matrixWorld * self.fbxParent.matrixWorld.copy().invert() + else: + return self.matrixWorld + + def setPoseFrame(self, f): + self.__anim_poselist[f] = self.blenObject.matrix.copy() +# self.__anim_poselist[f] = self.blenObject.matrixWorld.copy() + + def getAnimParRelMatrix(self, frame): + if self.fbxParent: + #return (self.__anim_poselist[frame] * self.fbxParent.__anim_poselist[frame].copy().invert() ) * GLOBAL_MATRIX + return (self.__anim_poselist[frame] * GLOBAL_MATRIX) * (self.fbxParent.__anim_poselist[frame] * GLOBAL_MATRIX).invert() + else: + return self.__anim_poselist[frame] * GLOBAL_MATRIX + + def getAnimParRelMatrixRot(self, frame): + type = self.blenObject.type + if self.fbxParent: + matrix_rot = (((self.__anim_poselist[frame] * GLOBAL_MATRIX) * (self.fbxParent.__anim_poselist[frame] * GLOBAL_MATRIX).invert())).rotationPart() + else: + matrix_rot = (self.__anim_poselist[frame] * GLOBAL_MATRIX).rotationPart() + + # Lamps need to be rotated + if type =='LAMP': + matrix_rot = mtx_x90 * matrix_rot + elif type =='CAMERA': +# elif ob and type =='Camera': + y = Mathutils.Vector(0,1,0) * matrix_rot + matrix_rot = matrix_rot * Mathutils.RotationMatrix(math.pi/2, 3, 'r', y) + + return matrix_rot + + # ---------------------------------------------- + + + + + + print('\nFBX export starting...', filename) + start_time = time.clock() +# start_time = Blender.sys.time() + try: + file = open(filename, 'w') + except: + return False + + sce = context.scene # sce = bpy.data.scenes.active - world = sce.world - - - # ---------------------------- Write the header first - file.write(header_comment) - if time: - curtime = time.localtime()[0:6] - else: - curtime = (0,0,0,0,0,0) - # - file.write(\ + world = sce.world + + + # ---------------------------- Write the header first + file.write(header_comment) + if time: + curtime = time.localtime()[0:6] + else: + curtime = (0,0,0,0,0,0) + # + file.write(\ '''FBXHeaderExtension: { - FBXHeaderVersion: 1003 - FBXVersion: 6100 - CreationTimeStamp: { - Version: 1000 - Year: %.4i - Month: %.2i - Day: %.2i - Hour: %.2i - Minute: %.2i - Second: %.2i - Millisecond: 0 - } - Creator: "FBX SDK/FBX Plugins build 20070228" - OtherFlags: { - FlagPLE: 0 - } + FBXHeaderVersion: 1003 + FBXVersion: 6100 + CreationTimeStamp: { + Version: 1000 + Year: %.4i + Month: %.2i + Day: %.2i + Hour: %.2i + Minute: %.2i + Second: %.2i + Millisecond: 0 + } + Creator: "FBX SDK/FBX Plugins build 20070228" + OtherFlags: { + FlagPLE: 0 + } }''' % (curtime)) - - file.write('\nCreationTime: "%.4i-%.2i-%.2i %.2i:%.2i:%.2i:000"' % curtime) - file.write('\nCreator: "Blender3D version 2.5"') + + file.write('\nCreationTime: "%.4i-%.2i-%.2i %.2i:%.2i:%.2i:000"' % curtime) + file.write('\nCreator: "Blender3D version 2.5"') # file.write('\nCreator: "Blender3D version %.2f"' % Blender.Get('version')) - - pose_items = [] # list of (fbxName, matrix) to write pose data for, easier to collect allong the way - - # --------------- funcs for exporting - def object_tx(ob, loc, matrix, matrix_mod = None): - ''' - Matrix mod is so armature objects can modify their bone matricies - ''' - if isinstance(ob, bpy.types.Bone): + + pose_items = [] # list of (fbxName, matrix) to write pose data for, easier to collect allong the way + + # --------------- funcs for exporting + def object_tx(ob, loc, matrix, matrix_mod = None): + ''' + Matrix mod is so armature objects can modify their bone matricies + ''' + if isinstance(ob, bpy.types.Bone): # if isinstance(ob, Blender.Types.BoneType): - - # we know we have a matrix - # matrix = mtx4_z90 * (ob.matrix['ARMATURESPACE'] * matrix_mod) - matrix = mtx4_z90 * ob.matrix_local # dont apply armature matrix anymore + + # we know we have a matrix + # matrix = mtx4_z90 * (ob.matrix['ARMATURESPACE'] * matrix_mod) + matrix = mtx4_z90 * ob.matrix_local # dont apply armature matrix anymore # matrix = mtx4_z90 * ob.matrix['ARMATURESPACE'] # dont apply armature matrix anymore - - parent = ob.parent - if parent: - #par_matrix = mtx4_z90 * (parent.matrix['ARMATURESPACE'] * matrix_mod) - par_matrix = mtx4_z90 * parent.matrix_local # dont apply armature matrix anymore + + parent = ob.parent + if parent: + #par_matrix = mtx4_z90 * (parent.matrix['ARMATURESPACE'] * matrix_mod) + par_matrix = mtx4_z90 * parent.matrix_local # dont apply armature matrix anymore # par_matrix = mtx4_z90 * parent.matrix['ARMATURESPACE'] # dont apply armature matrix anymore - matrix = matrix * par_matrix.copy().invert() - - matrix_rot = matrix.rotationPart() - - loc = tuple(matrix.translationPart()) - scale = tuple(matrix.scalePart()) - rot = tuple(matrix_rot.toEuler()) - - else: - # This is bad because we need the parent relative matrix from the fbx parent (if we have one), dont use anymore - #if ob and not matrix: matrix = ob.matrixWorld * GLOBAL_MATRIX - if ob and not matrix: raise Exception("error: this should never happen!") - - matrix_rot = matrix - #if matrix: - # matrix = matrix_scale * matrix - - if matrix: - loc = tuple(matrix.translationPart()) - scale = tuple(matrix.scalePart()) - - matrix_rot = matrix.rotationPart() - # Lamps need to be rotated - if ob and ob.type =='Lamp': - matrix_rot = mtx_x90 * matrix_rot - rot = tuple(matrix_rot.toEuler()) - elif ob and ob.type =='Camera': - y = Mathutils.Vector(0,1,0) * matrix_rot - matrix_rot = matrix_rot * Mathutils.RotationMatrix(math.pi/2, 3, 'r', y) - rot = tuple(matrix_rot.toEuler()) - else: - rot = tuple(matrix_rot.toEuler()) - else: - if not loc: - loc = 0,0,0 - scale = 1,1,1 - rot = 0,0,0 - - return loc, rot, scale, matrix, matrix_rot - - def write_object_tx(ob, loc, matrix, matrix_mod= None): - ''' - We have loc to set the location if non blender objects that have a location - - matrix_mod is only used for bones at the moment - ''' - loc, rot, scale, matrix, matrix_rot = object_tx(ob, loc, matrix, matrix_mod) - - file.write('\n\t\t\tProperty: "Lcl Translation", "Lcl Translation", "A+",%.15f,%.15f,%.15f' % loc) - file.write('\n\t\t\tProperty: "Lcl Rotation", "Lcl Rotation", "A+",%.15f,%.15f,%.15f' % tuple(eulerRadToDeg(rot))) + matrix = matrix * par_matrix.copy().invert() + + matrix_rot = matrix.rotationPart() + + loc = tuple(matrix.translationPart()) + scale = tuple(matrix.scalePart()) + rot = tuple(matrix_rot.toEuler()) + + else: + # This is bad because we need the parent relative matrix from the fbx parent (if we have one), dont use anymore + #if ob and not matrix: matrix = ob.matrixWorld * GLOBAL_MATRIX + if ob and not matrix: raise Exception("error: this should never happen!") + + matrix_rot = matrix + #if matrix: + # matrix = matrix_scale * matrix + + if matrix: + loc = tuple(matrix.translationPart()) + scale = tuple(matrix.scalePart()) + + matrix_rot = matrix.rotationPart() + # Lamps need to be rotated + if ob and ob.type =='Lamp': + matrix_rot = mtx_x90 * matrix_rot + rot = tuple(matrix_rot.toEuler()) + elif ob and ob.type =='Camera': + y = Mathutils.Vector(0,1,0) * matrix_rot + matrix_rot = matrix_rot * Mathutils.RotationMatrix(math.pi/2, 3, 'r', y) + rot = tuple(matrix_rot.toEuler()) + else: + rot = tuple(matrix_rot.toEuler()) + else: + if not loc: + loc = 0,0,0 + scale = 1,1,1 + rot = 0,0,0 + + return loc, rot, scale, matrix, matrix_rot + + def write_object_tx(ob, loc, matrix, matrix_mod= None): + ''' + We have loc to set the location if non blender objects that have a location + + matrix_mod is only used for bones at the moment + ''' + loc, rot, scale, matrix, matrix_rot = object_tx(ob, loc, matrix, matrix_mod) + + file.write('\n\t\t\tProperty: "Lcl Translation", "Lcl Translation", "A+",%.15f,%.15f,%.15f' % loc) + file.write('\n\t\t\tProperty: "Lcl Rotation", "Lcl Rotation", "A+",%.15f,%.15f,%.15f' % tuple(eulerRadToDeg(rot))) # file.write('\n\t\t\tProperty: "Lcl Rotation", "Lcl Rotation", "A+",%.15f,%.15f,%.15f' % rot) - file.write('\n\t\t\tProperty: "Lcl Scaling", "Lcl Scaling", "A+",%.15f,%.15f,%.15f' % scale) - return loc, rot, scale, matrix, matrix_rot - - def write_object_props(ob=None, loc=None, matrix=None, matrix_mod=None): - # if the type is 0 its an empty otherwise its a mesh - # only difference at the moment is one has a color - file.write(''' - Properties60: { - Property: "QuaternionInterpolate", "bool", "",0 - Property: "Visibility", "Visibility", "A+",1''') - - loc, rot, scale, matrix, matrix_rot = write_object_tx(ob, loc, matrix, matrix_mod) - - # Rotation order, note, for FBX files Iv loaded normal order is 1 - # setting to zero. - # eEULER_XYZ = 0 - # eEULER_XZY - # eEULER_YZX - # eEULER_YXZ - # eEULER_ZXY - # eEULER_ZYX - - file.write(''' - Property: "RotationOffset", "Vector3D", "",0,0,0 - Property: "RotationPivot", "Vector3D", "",0,0,0 - Property: "ScalingOffset", "Vector3D", "",0,0,0 - Property: "ScalingPivot", "Vector3D", "",0,0,0 - Property: "TranslationActive", "bool", "",0 - Property: "TranslationMin", "Vector3D", "",0,0,0 - Property: "TranslationMax", "Vector3D", "",0,0,0 - Property: "TranslationMinX", "bool", "",0 - Property: "TranslationMinY", "bool", "",0 - Property: "TranslationMinZ", "bool", "",0 - Property: "TranslationMaxX", "bool", "",0 - Property: "TranslationMaxY", "bool", "",0 - Property: "TranslationMaxZ", "bool", "",0 - Property: "RotationOrder", "enum", "",0 - Property: "RotationSpaceForLimitOnly", "bool", "",0 - Property: "AxisLen", "double", "",10 - Property: "PreRotation", "Vector3D", "",0,0,0 - Property: "PostRotation", "Vector3D", "",0,0,0 - Property: "RotationActive", "bool", "",0 - Property: "RotationMin", "Vector3D", "",0,0,0 - Property: "RotationMax", "Vector3D", "",0,0,0 - Property: "RotationMinX", "bool", "",0 - Property: "RotationMinY", "bool", "",0 - Property: "RotationMinZ", "bool", "",0 - Property: "RotationMaxX", "bool", "",0 - Property: "RotationMaxY", "bool", "",0 - Property: "RotationMaxZ", "bool", "",0 - Property: "RotationStiffnessX", "double", "",0 - Property: "RotationStiffnessY", "double", "",0 - Property: "RotationStiffnessZ", "double", "",0 - Property: "MinDampRangeX", "double", "",0 - Property: "MinDampRangeY", "double", "",0 - Property: "MinDampRangeZ", "double", "",0 - Property: "MaxDampRangeX", "double", "",0 - Property: "MaxDampRangeY", "double", "",0 - Property: "MaxDampRangeZ", "double", "",0 - Property: "MinDampStrengthX", "double", "",0 - Property: "MinDampStrengthY", "double", "",0 - Property: "MinDampStrengthZ", "double", "",0 - Property: "MaxDampStrengthX", "double", "",0 - Property: "MaxDampStrengthY", "double", "",0 - Property: "MaxDampStrengthZ", "double", "",0 - Property: "PreferedAngleX", "double", "",0 - Property: "PreferedAngleY", "double", "",0 - Property: "PreferedAngleZ", "double", "",0 - Property: "InheritType", "enum", "",0 - Property: "ScalingActive", "bool", "",0 - Property: "ScalingMin", "Vector3D", "",1,1,1 - Property: "ScalingMax", "Vector3D", "",1,1,1 - Property: "ScalingMinX", "bool", "",0 - Property: "ScalingMinY", "bool", "",0 - Property: "ScalingMinZ", "bool", "",0 - Property: "ScalingMaxX", "bool", "",0 - Property: "ScalingMaxY", "bool", "",0 - Property: "ScalingMaxZ", "bool", "",0 - Property: "GeometricTranslation", "Vector3D", "",0,0,0 - Property: "GeometricRotation", "Vector3D", "",0,0,0 - Property: "GeometricScaling", "Vector3D", "",1,1,1 - Property: "LookAtProperty", "object", "" - Property: "UpVectorProperty", "object", "" - Property: "Show", "bool", "",1 - Property: "NegativePercentShapeSupport", "bool", "",1 - Property: "DefaultAttributeIndex", "int", "",0''') - if ob and not isinstance(ob, bpy.types.Bone): + file.write('\n\t\t\tProperty: "Lcl Scaling", "Lcl Scaling", "A+",%.15f,%.15f,%.15f' % scale) + return loc, rot, scale, matrix, matrix_rot + + def write_object_props(ob=None, loc=None, matrix=None, matrix_mod=None): + # if the type is 0 its an empty otherwise its a mesh + # only difference at the moment is one has a color + file.write(''' + Properties60: { + Property: "QuaternionInterpolate", "bool", "",0 + Property: "Visibility", "Visibility", "A+",1''') + + loc, rot, scale, matrix, matrix_rot = write_object_tx(ob, loc, matrix, matrix_mod) + + # Rotation order, note, for FBX files Iv loaded normal order is 1 + # setting to zero. + # eEULER_XYZ = 0 + # eEULER_XZY + # eEULER_YZX + # eEULER_YXZ + # eEULER_ZXY + # eEULER_ZYX + + file.write(''' + Property: "RotationOffset", "Vector3D", "",0,0,0 + Property: "RotationPivot", "Vector3D", "",0,0,0 + Property: "ScalingOffset", "Vector3D", "",0,0,0 + Property: "ScalingPivot", "Vector3D", "",0,0,0 + Property: "TranslationActive", "bool", "",0 + Property: "TranslationMin", "Vector3D", "",0,0,0 + Property: "TranslationMax", "Vector3D", "",0,0,0 + Property: "TranslationMinX", "bool", "",0 + Property: "TranslationMinY", "bool", "",0 + Property: "TranslationMinZ", "bool", "",0 + Property: "TranslationMaxX", "bool", "",0 + Property: "TranslationMaxY", "bool", "",0 + Property: "TranslationMaxZ", "bool", "",0 + Property: "RotationOrder", "enum", "",0 + Property: "RotationSpaceForLimitOnly", "bool", "",0 + Property: "AxisLen", "double", "",10 + Property: "PreRotation", "Vector3D", "",0,0,0 + Property: "PostRotation", "Vector3D", "",0,0,0 + Property: "RotationActive", "bool", "",0 + Property: "RotationMin", "Vector3D", "",0,0,0 + Property: "RotationMax", "Vector3D", "",0,0,0 + Property: "RotationMinX", "bool", "",0 + Property: "RotationMinY", "bool", "",0 + Property: "RotationMinZ", "bool", "",0 + Property: "RotationMaxX", "bool", "",0 + Property: "RotationMaxY", "bool", "",0 + Property: "RotationMaxZ", "bool", "",0 + Property: "RotationStiffnessX", "double", "",0 + Property: "RotationStiffnessY", "double", "",0 + Property: "RotationStiffnessZ", "double", "",0 + Property: "MinDampRangeX", "double", "",0 + Property: "MinDampRangeY", "double", "",0 + Property: "MinDampRangeZ", "double", "",0 + Property: "MaxDampRangeX", "double", "",0 + Property: "MaxDampRangeY", "double", "",0 + Property: "MaxDampRangeZ", "double", "",0 + Property: "MinDampStrengthX", "double", "",0 + Property: "MinDampStrengthY", "double", "",0 + Property: "MinDampStrengthZ", "double", "",0 + Property: "MaxDampStrengthX", "double", "",0 + Property: "MaxDampStrengthY", "double", "",0 + Property: "MaxDampStrengthZ", "double", "",0 + Property: "PreferedAngleX", "double", "",0 + Property: "PreferedAngleY", "double", "",0 + Property: "PreferedAngleZ", "double", "",0 + Property: "InheritType", "enum", "",0 + Property: "ScalingActive", "bool", "",0 + Property: "ScalingMin", "Vector3D", "",1,1,1 + Property: "ScalingMax", "Vector3D", "",1,1,1 + Property: "ScalingMinX", "bool", "",0 + Property: "ScalingMinY", "bool", "",0 + Property: "ScalingMinZ", "bool", "",0 + Property: "ScalingMaxX", "bool", "",0 + Property: "ScalingMaxY", "bool", "",0 + Property: "ScalingMaxZ", "bool", "",0 + Property: "GeometricTranslation", "Vector3D", "",0,0,0 + Property: "GeometricRotation", "Vector3D", "",0,0,0 + Property: "GeometricScaling", "Vector3D", "",1,1,1 + Property: "LookAtProperty", "object", "" + Property: "UpVectorProperty", "object", "" + Property: "Show", "bool", "",1 + Property: "NegativePercentShapeSupport", "bool", "",1 + Property: "DefaultAttributeIndex", "int", "",0''') + if ob and not isinstance(ob, bpy.types.Bone): # if ob and type(ob) != Blender.Types.BoneType: - # Only mesh objects have color - file.write('\n\t\t\tProperty: "Color", "Color", "A",0.8,0.8,0.8') - file.write('\n\t\t\tProperty: "Size", "double", "",100') - file.write('\n\t\t\tProperty: "Look", "enum", "",1') - - return loc, rot, scale, matrix, matrix_rot - - - # -------------------------------------------- Armatures - #def write_bone(bone, name, matrix_mod): - def write_bone(my_bone): - file.write('\n\tModel: "Model::%s", "Limb" {' % my_bone.fbxName) - file.write('\n\t\tVersion: 232') - - #poseMatrix = write_object_props(my_bone.blenBone, None, None, my_bone.fbxArm.parRelMatrix())[3] - poseMatrix = write_object_props(my_bone.blenBone)[3] # dont apply bone matricies anymore - pose_items.append( (my_bone.fbxName, poseMatrix) ) - - - # file.write('\n\t\t\tProperty: "Size", "double", "",%.6f' % ((my_bone.blenData.head['ARMATURESPACE'] - my_bone.blenData.tail['ARMATURESPACE']) * my_bone.fbxArm.parRelMatrix()).length) - file.write('\n\t\t\tProperty: "Size", "double", "",1') - - #((my_bone.blenData.head['ARMATURESPACE'] * my_bone.fbxArm.matrixWorld) - (my_bone.blenData.tail['ARMATURESPACE'] * my_bone.fbxArm.parRelMatrix())).length) - - """ - file.write('\n\t\t\tProperty: "LimbLength", "double", "",%.6f' %\ - ((my_bone.blenBone.head['ARMATURESPACE'] - my_bone.blenBone.tail['ARMATURESPACE']) * my_bone.fbxArm.parRelMatrix()).length) - """ - - file.write('\n\t\t\tProperty: "LimbLength", "double", "",%.6f' % - (my_bone.blenBone.head_local - my_bone.blenBone.tail_local).length) + # Only mesh objects have color + file.write('\n\t\t\tProperty: "Color", "Color", "A",0.8,0.8,0.8') + file.write('\n\t\t\tProperty: "Size", "double", "",100') + file.write('\n\t\t\tProperty: "Look", "enum", "",1') + + return loc, rot, scale, matrix, matrix_rot + + + # -------------------------------------------- Armatures + #def write_bone(bone, name, matrix_mod): + def write_bone(my_bone): + file.write('\n\tModel: "Model::%s", "Limb" {' % my_bone.fbxName) + file.write('\n\t\tVersion: 232') + + #poseMatrix = write_object_props(my_bone.blenBone, None, None, my_bone.fbxArm.parRelMatrix())[3] + poseMatrix = write_object_props(my_bone.blenBone)[3] # dont apply bone matricies anymore + pose_items.append( (my_bone.fbxName, poseMatrix) ) + + + # file.write('\n\t\t\tProperty: "Size", "double", "",%.6f' % ((my_bone.blenData.head['ARMATURESPACE'] - my_bone.blenData.tail['ARMATURESPACE']) * my_bone.fbxArm.parRelMatrix()).length) + file.write('\n\t\t\tProperty: "Size", "double", "",1') + + #((my_bone.blenData.head['ARMATURESPACE'] * my_bone.fbxArm.matrixWorld) - (my_bone.blenData.tail['ARMATURESPACE'] * my_bone.fbxArm.parRelMatrix())).length) + + """ + file.write('\n\t\t\tProperty: "LimbLength", "double", "",%.6f' %\ + ((my_bone.blenBone.head['ARMATURESPACE'] - my_bone.blenBone.tail['ARMATURESPACE']) * my_bone.fbxArm.parRelMatrix()).length) + """ + + file.write('\n\t\t\tProperty: "LimbLength", "double", "",%.6f' % + (my_bone.blenBone.head_local - my_bone.blenBone.tail_local).length) # (my_bone.blenBone.head['ARMATURESPACE'] - my_bone.blenBone.tail['ARMATURESPACE']).length) - - #file.write('\n\t\t\tProperty: "LimbLength", "double", "",1') - file.write('\n\t\t\tProperty: "Color", "ColorRGB", "",0.8,0.8,0.8') - file.write('\n\t\t\tProperty: "Color", "Color", "A",0.8,0.8,0.8') - file.write('\n\t\t}') - file.write('\n\t\tMultiLayer: 0') - file.write('\n\t\tMultiTake: 1') - file.write('\n\t\tShading: Y') - file.write('\n\t\tCulling: "CullingOff"') - file.write('\n\t\tTypeFlags: "Skeleton"') - file.write('\n\t}') - - def write_camera_switch(): - file.write(''' - Model: "Model::Camera Switcher", "CameraSwitcher" { - Version: 232''') - - write_object_props() - file.write(''' - Property: "Color", "Color", "A",0.8,0.8,0.8 - Property: "Camera Index", "Integer", "A+",100 - } - MultiLayer: 0 - MultiTake: 1 - Hidden: "True" - Shading: W - Culling: "CullingOff" - Version: 101 - Name: "Model::Camera Switcher" - CameraId: 0 - CameraName: 100 - CameraIndexName: - }''') - - def write_camera_dummy(name, loc, near, far, proj_type, up): - file.write('\n\tModel: "Model::%s", "Camera" {' % name ) - file.write('\n\t\tVersion: 232') - write_object_props(None, loc) - - file.write('\n\t\t\tProperty: "Color", "Color", "A",0.8,0.8,0.8') - file.write('\n\t\t\tProperty: "Roll", "Roll", "A+",0') - file.write('\n\t\t\tProperty: "FieldOfView", "FieldOfView", "A+",40') - file.write('\n\t\t\tProperty: "FieldOfViewX", "FieldOfView", "A+",1') - file.write('\n\t\t\tProperty: "FieldOfViewY", "FieldOfView", "A+",1') - file.write('\n\t\t\tProperty: "OpticalCenterX", "Real", "A+",0') - file.write('\n\t\t\tProperty: "OpticalCenterY", "Real", "A+",0') - file.write('\n\t\t\tProperty: "BackgroundColor", "Color", "A+",0.63,0.63,0.63') - file.write('\n\t\t\tProperty: "TurnTable", "Real", "A+",0') - file.write('\n\t\t\tProperty: "DisplayTurnTableIcon", "bool", "",1') - file.write('\n\t\t\tProperty: "Motion Blur Intensity", "Real", "A+",1') - file.write('\n\t\t\tProperty: "UseMotionBlur", "bool", "",0') - file.write('\n\t\t\tProperty: "UseRealTimeMotionBlur", "bool", "",1') - file.write('\n\t\t\tProperty: "ResolutionMode", "enum", "",0') - file.write('\n\t\t\tProperty: "ApertureMode", "enum", "",2') - file.write('\n\t\t\tProperty: "GateFit", "enum", "",0') - file.write('\n\t\t\tProperty: "FocalLength", "Real", "A+",21.3544940948486') - file.write('\n\t\t\tProperty: "CameraFormat", "enum", "",0') - file.write('\n\t\t\tProperty: "AspectW", "double", "",320') - file.write('\n\t\t\tProperty: "AspectH", "double", "",200') - file.write('\n\t\t\tProperty: "PixelAspectRatio", "double", "",1') - file.write('\n\t\t\tProperty: "UseFrameColor", "bool", "",0') - file.write('\n\t\t\tProperty: "FrameColor", "ColorRGB", "",0.3,0.3,0.3') - file.write('\n\t\t\tProperty: "ShowName", "bool", "",1') - file.write('\n\t\t\tProperty: "ShowGrid", "bool", "",1') - file.write('\n\t\t\tProperty: "ShowOpticalCenter", "bool", "",0') - file.write('\n\t\t\tProperty: "ShowAzimut", "bool", "",1') - file.write('\n\t\t\tProperty: "ShowTimeCode", "bool", "",0') - file.write('\n\t\t\tProperty: "NearPlane", "double", "",%.6f' % near) - file.write('\n\t\t\tProperty: "FarPlane", "double", "",%.6f' % far) - file.write('\n\t\t\tProperty: "FilmWidth", "double", "",0.816') - file.write('\n\t\t\tProperty: "FilmHeight", "double", "",0.612') - file.write('\n\t\t\tProperty: "FilmAspectRatio", "double", "",1.33333333333333') - file.write('\n\t\t\tProperty: "FilmSqueezeRatio", "double", "",1') - file.write('\n\t\t\tProperty: "FilmFormatIndex", "enum", "",4') - file.write('\n\t\t\tProperty: "ViewFrustum", "bool", "",1') - file.write('\n\t\t\tProperty: "ViewFrustumNearFarPlane", "bool", "",0') - file.write('\n\t\t\tProperty: "ViewFrustumBackPlaneMode", "enum", "",2') - file.write('\n\t\t\tProperty: "BackPlaneDistance", "double", "",100') - file.write('\n\t\t\tProperty: "BackPlaneDistanceMode", "enum", "",0') - file.write('\n\t\t\tProperty: "ViewCameraToLookAt", "bool", "",1') - file.write('\n\t\t\tProperty: "LockMode", "bool", "",0') - file.write('\n\t\t\tProperty: "LockInterestNavigation", "bool", "",0') - file.write('\n\t\t\tProperty: "FitImage", "bool", "",0') - file.write('\n\t\t\tProperty: "Crop", "bool", "",0') - file.write('\n\t\t\tProperty: "Center", "bool", "",1') - file.write('\n\t\t\tProperty: "KeepRatio", "bool", "",1') - file.write('\n\t\t\tProperty: "BackgroundMode", "enum", "",0') - file.write('\n\t\t\tProperty: "BackgroundAlphaTreshold", "double", "",0.5') - file.write('\n\t\t\tProperty: "ForegroundTransparent", "bool", "",1') - file.write('\n\t\t\tProperty: "DisplaySafeArea", "bool", "",0') - file.write('\n\t\t\tProperty: "SafeAreaDisplayStyle", "enum", "",1') - file.write('\n\t\t\tProperty: "SafeAreaAspectRatio", "double", "",1.33333333333333') - file.write('\n\t\t\tProperty: "Use2DMagnifierZoom", "bool", "",0') - file.write('\n\t\t\tProperty: "2D Magnifier Zoom", "Real", "A+",100') - file.write('\n\t\t\tProperty: "2D Magnifier X", "Real", "A+",50') - file.write('\n\t\t\tProperty: "2D Magnifier Y", "Real", "A+",50') - file.write('\n\t\t\tProperty: "CameraProjectionType", "enum", "",%i' % proj_type) - file.write('\n\t\t\tProperty: "UseRealTimeDOFAndAA", "bool", "",0') - file.write('\n\t\t\tProperty: "UseDepthOfField", "bool", "",0') - file.write('\n\t\t\tProperty: "FocusSource", "enum", "",0') - file.write('\n\t\t\tProperty: "FocusAngle", "double", "",3.5') - file.write('\n\t\t\tProperty: "FocusDistance", "double", "",200') - file.write('\n\t\t\tProperty: "UseAntialiasing", "bool", "",0') - file.write('\n\t\t\tProperty: "AntialiasingIntensity", "double", "",0.77777') - file.write('\n\t\t\tProperty: "UseAccumulationBuffer", "bool", "",0') - file.write('\n\t\t\tProperty: "FrameSamplingCount", "int", "",7') - file.write('\n\t\t}') - file.write('\n\t\tMultiLayer: 0') - file.write('\n\t\tMultiTake: 0') - file.write('\n\t\tHidden: "True"') - file.write('\n\t\tShading: Y') - file.write('\n\t\tCulling: "CullingOff"') - file.write('\n\t\tTypeFlags: "Camera"') - file.write('\n\t\tGeometryVersion: 124') - file.write('\n\t\tPosition: %.6f,%.6f,%.6f' % loc) - file.write('\n\t\tUp: %i,%i,%i' % up) - file.write('\n\t\tLookAt: 0,0,0') - file.write('\n\t\tShowInfoOnMoving: 1') - file.write('\n\t\tShowAudio: 0') - file.write('\n\t\tAudioColor: 0,1,0') - file.write('\n\t\tCameraOrthoZoom: 1') - file.write('\n\t}') - - def write_camera_default(): - # This sucks but to match FBX converter its easier to - # write the cameras though they are not needed. - write_camera_dummy('Producer Perspective', (0,71.3,287.5), 10, 4000, 0, (0,1,0)) - write_camera_dummy('Producer Top', (0,4000,0), 1, 30000, 1, (0,0,-1)) - write_camera_dummy('Producer Bottom', (0,-4000,0), 1, 30000, 1, (0,0,-1)) - write_camera_dummy('Producer Front', (0,0,4000), 1, 30000, 1, (0,1,0)) - write_camera_dummy('Producer Back', (0,0,-4000), 1, 30000, 1, (0,1,0)) - write_camera_dummy('Producer Right', (4000,0,0), 1, 30000, 1, (0,1,0)) - write_camera_dummy('Producer Left', (-4000,0,0), 1, 30000, 1, (0,1,0)) - - def write_camera(my_cam): - ''' - Write a blender camera - ''' - render = sce.render_data - width = render.resolution_x - height = render.resolution_y + + #file.write('\n\t\t\tProperty: "LimbLength", "double", "",1') + file.write('\n\t\t\tProperty: "Color", "ColorRGB", "",0.8,0.8,0.8') + file.write('\n\t\t\tProperty: "Color", "Color", "A",0.8,0.8,0.8') + file.write('\n\t\t}') + file.write('\n\t\tMultiLayer: 0') + file.write('\n\t\tMultiTake: 1') + file.write('\n\t\tShading: Y') + file.write('\n\t\tCulling: "CullingOff"') + file.write('\n\t\tTypeFlags: "Skeleton"') + file.write('\n\t}') + + def write_camera_switch(): + file.write(''' + Model: "Model::Camera Switcher", "CameraSwitcher" { + Version: 232''') + + write_object_props() + file.write(''' + Property: "Color", "Color", "A",0.8,0.8,0.8 + Property: "Camera Index", "Integer", "A+",100 + } + MultiLayer: 0 + MultiTake: 1 + Hidden: "True" + Shading: W + Culling: "CullingOff" + Version: 101 + Name: "Model::Camera Switcher" + CameraId: 0 + CameraName: 100 + CameraIndexName: + }''') + + def write_camera_dummy(name, loc, near, far, proj_type, up): + file.write('\n\tModel: "Model::%s", "Camera" {' % name ) + file.write('\n\t\tVersion: 232') + write_object_props(None, loc) + + file.write('\n\t\t\tProperty: "Color", "Color", "A",0.8,0.8,0.8') + file.write('\n\t\t\tProperty: "Roll", "Roll", "A+",0') + file.write('\n\t\t\tProperty: "FieldOfView", "FieldOfView", "A+",40') + file.write('\n\t\t\tProperty: "FieldOfViewX", "FieldOfView", "A+",1') + file.write('\n\t\t\tProperty: "FieldOfViewY", "FieldOfView", "A+",1') + file.write('\n\t\t\tProperty: "OpticalCenterX", "Real", "A+",0') + file.write('\n\t\t\tProperty: "OpticalCenterY", "Real", "A+",0') + file.write('\n\t\t\tProperty: "BackgroundColor", "Color", "A+",0.63,0.63,0.63') + file.write('\n\t\t\tProperty: "TurnTable", "Real", "A+",0') + file.write('\n\t\t\tProperty: "DisplayTurnTableIcon", "bool", "",1') + file.write('\n\t\t\tProperty: "Motion Blur Intensity", "Real", "A+",1') + file.write('\n\t\t\tProperty: "UseMotionBlur", "bool", "",0') + file.write('\n\t\t\tProperty: "UseRealTimeMotionBlur", "bool", "",1') + file.write('\n\t\t\tProperty: "ResolutionMode", "enum", "",0') + file.write('\n\t\t\tProperty: "ApertureMode", "enum", "",2') + file.write('\n\t\t\tProperty: "GateFit", "enum", "",0') + file.write('\n\t\t\tProperty: "FocalLength", "Real", "A+",21.3544940948486') + file.write('\n\t\t\tProperty: "CameraFormat", "enum", "",0') + file.write('\n\t\t\tProperty: "AspectW", "double", "",320') + file.write('\n\t\t\tProperty: "AspectH", "double", "",200') + file.write('\n\t\t\tProperty: "PixelAspectRatio", "double", "",1') + file.write('\n\t\t\tProperty: "UseFrameColor", "bool", "",0') + file.write('\n\t\t\tProperty: "FrameColor", "ColorRGB", "",0.3,0.3,0.3') + file.write('\n\t\t\tProperty: "ShowName", "bool", "",1') + file.write('\n\t\t\tProperty: "ShowGrid", "bool", "",1') + file.write('\n\t\t\tProperty: "ShowOpticalCenter", "bool", "",0') + file.write('\n\t\t\tProperty: "ShowAzimut", "bool", "",1') + file.write('\n\t\t\tProperty: "ShowTimeCode", "bool", "",0') + file.write('\n\t\t\tProperty: "NearPlane", "double", "",%.6f' % near) + file.write('\n\t\t\tProperty: "FarPlane", "double", "",%.6f' % far) + file.write('\n\t\t\tProperty: "FilmWidth", "double", "",0.816') + file.write('\n\t\t\tProperty: "FilmHeight", "double", "",0.612') + file.write('\n\t\t\tProperty: "FilmAspectRatio", "double", "",1.33333333333333') + file.write('\n\t\t\tProperty: "FilmSqueezeRatio", "double", "",1') + file.write('\n\t\t\tProperty: "FilmFormatIndex", "enum", "",4') + file.write('\n\t\t\tProperty: "ViewFrustum", "bool", "",1') + file.write('\n\t\t\tProperty: "ViewFrustumNearFarPlane", "bool", "",0') + file.write('\n\t\t\tProperty: "ViewFrustumBackPlaneMode", "enum", "",2') + file.write('\n\t\t\tProperty: "BackPlaneDistance", "double", "",100') + file.write('\n\t\t\tProperty: "BackPlaneDistanceMode", "enum", "",0') + file.write('\n\t\t\tProperty: "ViewCameraToLookAt", "bool", "",1') + file.write('\n\t\t\tProperty: "LockMode", "bool", "",0') + file.write('\n\t\t\tProperty: "LockInterestNavigation", "bool", "",0') + file.write('\n\t\t\tProperty: "FitImage", "bool", "",0') + file.write('\n\t\t\tProperty: "Crop", "bool", "",0') + file.write('\n\t\t\tProperty: "Center", "bool", "",1') + file.write('\n\t\t\tProperty: "KeepRatio", "bool", "",1') + file.write('\n\t\t\tProperty: "BackgroundMode", "enum", "",0') + file.write('\n\t\t\tProperty: "BackgroundAlphaTreshold", "double", "",0.5') + file.write('\n\t\t\tProperty: "ForegroundTransparent", "bool", "",1') + file.write('\n\t\t\tProperty: "DisplaySafeArea", "bool", "",0') + file.write('\n\t\t\tProperty: "SafeAreaDisplayStyle", "enum", "",1') + file.write('\n\t\t\tProperty: "SafeAreaAspectRatio", "double", "",1.33333333333333') + file.write('\n\t\t\tProperty: "Use2DMagnifierZoom", "bool", "",0') + file.write('\n\t\t\tProperty: "2D Magnifier Zoom", "Real", "A+",100') + file.write('\n\t\t\tProperty: "2D Magnifier X", "Real", "A+",50') + file.write('\n\t\t\tProperty: "2D Magnifier Y", "Real", "A+",50') + file.write('\n\t\t\tProperty: "CameraProjectionType", "enum", "",%i' % proj_type) + file.write('\n\t\t\tProperty: "UseRealTimeDOFAndAA", "bool", "",0') + file.write('\n\t\t\tProperty: "UseDepthOfField", "bool", "",0') + file.write('\n\t\t\tProperty: "FocusSource", "enum", "",0') + file.write('\n\t\t\tProperty: "FocusAngle", "double", "",3.5') + file.write('\n\t\t\tProperty: "FocusDistance", "double", "",200') + file.write('\n\t\t\tProperty: "UseAntialiasing", "bool", "",0') + file.write('\n\t\t\tProperty: "AntialiasingIntensity", "double", "",0.77777') + file.write('\n\t\t\tProperty: "UseAccumulationBuffer", "bool", "",0') + file.write('\n\t\t\tProperty: "FrameSamplingCount", "int", "",7') + file.write('\n\t\t}') + file.write('\n\t\tMultiLayer: 0') + file.write('\n\t\tMultiTake: 0') + file.write('\n\t\tHidden: "True"') + file.write('\n\t\tShading: Y') + file.write('\n\t\tCulling: "CullingOff"') + file.write('\n\t\tTypeFlags: "Camera"') + file.write('\n\t\tGeometryVersion: 124') + file.write('\n\t\tPosition: %.6f,%.6f,%.6f' % loc) + file.write('\n\t\tUp: %i,%i,%i' % up) + file.write('\n\t\tLookAt: 0,0,0') + file.write('\n\t\tShowInfoOnMoving: 1') + file.write('\n\t\tShowAudio: 0') + file.write('\n\t\tAudioColor: 0,1,0') + file.write('\n\t\tCameraOrthoZoom: 1') + file.write('\n\t}') + + def write_camera_default(): + # This sucks but to match FBX converter its easier to + # write the cameras though they are not needed. + write_camera_dummy('Producer Perspective', (0,71.3,287.5), 10, 4000, 0, (0,1,0)) + write_camera_dummy('Producer Top', (0,4000,0), 1, 30000, 1, (0,0,-1)) + write_camera_dummy('Producer Bottom', (0,-4000,0), 1, 30000, 1, (0,0,-1)) + write_camera_dummy('Producer Front', (0,0,4000), 1, 30000, 1, (0,1,0)) + write_camera_dummy('Producer Back', (0,0,-4000), 1, 30000, 1, (0,1,0)) + write_camera_dummy('Producer Right', (4000,0,0), 1, 30000, 1, (0,1,0)) + write_camera_dummy('Producer Left', (-4000,0,0), 1, 30000, 1, (0,1,0)) + + def write_camera(my_cam): + ''' + Write a blender camera + ''' + render = sce.render_data + width = render.resolution_x + height = render.resolution_y # render = sce.render # width = render.sizeX # height = render.sizeY - aspect = float(width)/height - - data = my_cam.blenObject.data - - file.write('\n\tModel: "Model::%s", "Camera" {' % my_cam.fbxName ) - file.write('\n\t\tVersion: 232') - loc, rot, scale, matrix, matrix_rot = write_object_props(my_cam.blenObject, None, my_cam.parRelMatrix()) - - file.write('\n\t\t\tProperty: "Roll", "Roll", "A+",0') - file.write('\n\t\t\tProperty: "FieldOfView", "FieldOfView", "A+",%.6f' % data.angle) - file.write('\n\t\t\tProperty: "FieldOfViewX", "FieldOfView", "A+",1') - file.write('\n\t\t\tProperty: "FieldOfViewY", "FieldOfView", "A+",1') - file.write('\n\t\t\tProperty: "FocalLength", "Real", "A+",14.0323972702026') - file.write('\n\t\t\tProperty: "OpticalCenterX", "Real", "A+",%.6f' % data.shift_x) # not sure if this is in the correct units? + aspect = float(width)/height + + data = my_cam.blenObject.data + + file.write('\n\tModel: "Model::%s", "Camera" {' % my_cam.fbxName ) + file.write('\n\t\tVersion: 232') + loc, rot, scale, matrix, matrix_rot = write_object_props(my_cam.blenObject, None, my_cam.parRelMatrix()) + + file.write('\n\t\t\tProperty: "Roll", "Roll", "A+",0') + file.write('\n\t\t\tProperty: "FieldOfView", "FieldOfView", "A+",%.6f' % data.angle) + file.write('\n\t\t\tProperty: "FieldOfViewX", "FieldOfView", "A+",1') + file.write('\n\t\t\tProperty: "FieldOfViewY", "FieldOfView", "A+",1') + file.write('\n\t\t\tProperty: "FocalLength", "Real", "A+",14.0323972702026') + file.write('\n\t\t\tProperty: "OpticalCenterX", "Real", "A+",%.6f' % data.shift_x) # not sure if this is in the correct units? # file.write('\n\t\t\tProperty: "OpticalCenterX", "Real", "A+",%.6f' % data.shiftX) # not sure if this is in the correct units? - file.write('\n\t\t\tProperty: "OpticalCenterY", "Real", "A+",%.6f' % data.shift_y) # ditto -# file.write('\n\t\t\tProperty: "OpticalCenterY", "Real", "A+",%.6f' % data.shiftY) # ditto - file.write('\n\t\t\tProperty: "BackgroundColor", "Color", "A+",0,0,0') - file.write('\n\t\t\tProperty: "TurnTable", "Real", "A+",0') - file.write('\n\t\t\tProperty: "DisplayTurnTableIcon", "bool", "",1') - file.write('\n\t\t\tProperty: "Motion Blur Intensity", "Real", "A+",1') - file.write('\n\t\t\tProperty: "UseMotionBlur", "bool", "",0') - file.write('\n\t\t\tProperty: "UseRealTimeMotionBlur", "bool", "",1') - file.write('\n\t\t\tProperty: "ResolutionMode", "enum", "",0') - file.write('\n\t\t\tProperty: "ApertureMode", "enum", "",2') - file.write('\n\t\t\tProperty: "GateFit", "enum", "",0') - file.write('\n\t\t\tProperty: "CameraFormat", "enum", "",0') - file.write('\n\t\t\tProperty: "AspectW", "double", "",%i' % width) - file.write('\n\t\t\tProperty: "AspectH", "double", "",%i' % height) - - '''Camera aspect ratio modes. - 0 If the ratio mode is eWINDOW_SIZE, both width and height values aren't relevant. - 1 If the ratio mode is eFIXED_RATIO, the height value is set to 1.0 and the width value is relative to the height value. - 2 If the ratio mode is eFIXED_RESOLUTION, both width and height values are in pixels. - 3 If the ratio mode is eFIXED_WIDTH, the width value is in pixels and the height value is relative to the width value. - 4 If the ratio mode is eFIXED_HEIGHT, the height value is in pixels and the width value is relative to the height value. - - Definition at line 234 of file kfbxcamera.h. ''' - - file.write('\n\t\t\tProperty: "PixelAspectRatio", "double", "",2') - - file.write('\n\t\t\tProperty: "UseFrameColor", "bool", "",0') - file.write('\n\t\t\tProperty: "FrameColor", "ColorRGB", "",0.3,0.3,0.3') - file.write('\n\t\t\tProperty: "ShowName", "bool", "",1') - file.write('\n\t\t\tProperty: "ShowGrid", "bool", "",1') - file.write('\n\t\t\tProperty: "ShowOpticalCenter", "bool", "",0') - file.write('\n\t\t\tProperty: "ShowAzimut", "bool", "",1') - file.write('\n\t\t\tProperty: "ShowTimeCode", "bool", "",0') - file.write('\n\t\t\tProperty: "NearPlane", "double", "",%.6f' % data.clip_start) + file.write('\n\t\t\tProperty: "OpticalCenterY", "Real", "A+",%.6f' % data.shift_y) # ditto +# file.write('\n\t\t\tProperty: "OpticalCenterY", "Real", "A+",%.6f' % data.shiftY) # ditto + file.write('\n\t\t\tProperty: "BackgroundColor", "Color", "A+",0,0,0') + file.write('\n\t\t\tProperty: "TurnTable", "Real", "A+",0') + file.write('\n\t\t\tProperty: "DisplayTurnTableIcon", "bool", "",1') + file.write('\n\t\t\tProperty: "Motion Blur Intensity", "Real", "A+",1') + file.write('\n\t\t\tProperty: "UseMotionBlur", "bool", "",0') + file.write('\n\t\t\tProperty: "UseRealTimeMotionBlur", "bool", "",1') + file.write('\n\t\t\tProperty: "ResolutionMode", "enum", "",0') + file.write('\n\t\t\tProperty: "ApertureMode", "enum", "",2') + file.write('\n\t\t\tProperty: "GateFit", "enum", "",0') + file.write('\n\t\t\tProperty: "CameraFormat", "enum", "",0') + file.write('\n\t\t\tProperty: "AspectW", "double", "",%i' % width) + file.write('\n\t\t\tProperty: "AspectH", "double", "",%i' % height) + + '''Camera aspect ratio modes. + 0 If the ratio mode is eWINDOW_SIZE, both width and height values aren't relevant. + 1 If the ratio mode is eFIXED_RATIO, the height value is set to 1.0 and the width value is relative to the height value. + 2 If the ratio mode is eFIXED_RESOLUTION, both width and height values are in pixels. + 3 If the ratio mode is eFIXED_WIDTH, the width value is in pixels and the height value is relative to the width value. + 4 If the ratio mode is eFIXED_HEIGHT, the height value is in pixels and the width value is relative to the height value. + + Definition at line 234 of file kfbxcamera.h. ''' + + file.write('\n\t\t\tProperty: "PixelAspectRatio", "double", "",2') + + file.write('\n\t\t\tProperty: "UseFrameColor", "bool", "",0') + file.write('\n\t\t\tProperty: "FrameColor", "ColorRGB", "",0.3,0.3,0.3') + file.write('\n\t\t\tProperty: "ShowName", "bool", "",1') + file.write('\n\t\t\tProperty: "ShowGrid", "bool", "",1') + file.write('\n\t\t\tProperty: "ShowOpticalCenter", "bool", "",0') + file.write('\n\t\t\tProperty: "ShowAzimut", "bool", "",1') + file.write('\n\t\t\tProperty: "ShowTimeCode", "bool", "",0') + file.write('\n\t\t\tProperty: "NearPlane", "double", "",%.6f' % data.clip_start) # file.write('\n\t\t\tProperty: "NearPlane", "double", "",%.6f' % data.clipStart) - file.write('\n\t\t\tProperty: "FarPlane", "double", "",%.6f' % data.clip_end) + file.write('\n\t\t\tProperty: "FarPlane", "double", "",%.6f' % data.clip_end) # file.write('\n\t\t\tProperty: "FarPlane", "double", "",%.6f' % data.clipStart) - file.write('\n\t\t\tProperty: "FilmWidth", "double", "",1.0') - file.write('\n\t\t\tProperty: "FilmHeight", "double", "",1.0') - file.write('\n\t\t\tProperty: "FilmAspectRatio", "double", "",%.6f' % aspect) - file.write('\n\t\t\tProperty: "FilmSqueezeRatio", "double", "",1') - file.write('\n\t\t\tProperty: "FilmFormatIndex", "enum", "",0') - file.write('\n\t\t\tProperty: "ViewFrustum", "bool", "",1') - file.write('\n\t\t\tProperty: "ViewFrustumNearFarPlane", "bool", "",0') - file.write('\n\t\t\tProperty: "ViewFrustumBackPlaneMode", "enum", "",2') - file.write('\n\t\t\tProperty: "BackPlaneDistance", "double", "",100') - file.write('\n\t\t\tProperty: "BackPlaneDistanceMode", "enum", "",0') - file.write('\n\t\t\tProperty: "ViewCameraToLookAt", "bool", "",1') - file.write('\n\t\t\tProperty: "LockMode", "bool", "",0') - file.write('\n\t\t\tProperty: "LockInterestNavigation", "bool", "",0') - file.write('\n\t\t\tProperty: "FitImage", "bool", "",0') - file.write('\n\t\t\tProperty: "Crop", "bool", "",0') - file.write('\n\t\t\tProperty: "Center", "bool", "",1') - file.write('\n\t\t\tProperty: "KeepRatio", "bool", "",1') - file.write('\n\t\t\tProperty: "BackgroundMode", "enum", "",0') - file.write('\n\t\t\tProperty: "BackgroundAlphaTreshold", "double", "",0.5') - file.write('\n\t\t\tProperty: "ForegroundTransparent", "bool", "",1') - file.write('\n\t\t\tProperty: "DisplaySafeArea", "bool", "",0') - file.write('\n\t\t\tProperty: "SafeAreaDisplayStyle", "enum", "",1') - file.write('\n\t\t\tProperty: "SafeAreaAspectRatio", "double", "",%.6f' % aspect) - file.write('\n\t\t\tProperty: "Use2DMagnifierZoom", "bool", "",0') - file.write('\n\t\t\tProperty: "2D Magnifier Zoom", "Real", "A+",100') - file.write('\n\t\t\tProperty: "2D Magnifier X", "Real", "A+",50') - file.write('\n\t\t\tProperty: "2D Magnifier Y", "Real", "A+",50') - file.write('\n\t\t\tProperty: "CameraProjectionType", "enum", "",0') - file.write('\n\t\t\tProperty: "UseRealTimeDOFAndAA", "bool", "",0') - file.write('\n\t\t\tProperty: "UseDepthOfField", "bool", "",0') - file.write('\n\t\t\tProperty: "FocusSource", "enum", "",0') - file.write('\n\t\t\tProperty: "FocusAngle", "double", "",3.5') - file.write('\n\t\t\tProperty: "FocusDistance", "double", "",200') - file.write('\n\t\t\tProperty: "UseAntialiasing", "bool", "",0') - file.write('\n\t\t\tProperty: "AntialiasingIntensity", "double", "",0.77777') - file.write('\n\t\t\tProperty: "UseAccumulationBuffer", "bool", "",0') - file.write('\n\t\t\tProperty: "FrameSamplingCount", "int", "",7') - - file.write('\n\t\t}') - file.write('\n\t\tMultiLayer: 0') - file.write('\n\t\tMultiTake: 0') - file.write('\n\t\tShading: Y') - file.write('\n\t\tCulling: "CullingOff"') - file.write('\n\t\tTypeFlags: "Camera"') - file.write('\n\t\tGeometryVersion: 124') - file.write('\n\t\tPosition: %.6f,%.6f,%.6f' % loc) - file.write('\n\t\tUp: %.6f,%.6f,%.6f' % tuple(Mathutils.Vector(0,1,0) * matrix_rot) ) - file.write('\n\t\tLookAt: %.6f,%.6f,%.6f' % tuple(Mathutils.Vector(0,0,-1)*matrix_rot) ) - - #file.write('\n\t\tUp: 0,0,0' ) - #file.write('\n\t\tLookAt: 0,0,0' ) - - file.write('\n\t\tShowInfoOnMoving: 1') - file.write('\n\t\tShowAudio: 0') - file.write('\n\t\tAudioColor: 0,1,0') - file.write('\n\t\tCameraOrthoZoom: 1') - file.write('\n\t}') - - def write_light(my_light): - light = my_light.blenObject.data - file.write('\n\tModel: "Model::%s", "Light" {' % my_light.fbxName) - file.write('\n\t\tVersion: 232') - - write_object_props(my_light.blenObject, None, my_light.parRelMatrix()) - - # Why are these values here twice?????? - oh well, follow the holy sdk's output - - # Blender light types match FBX's, funny coincidence, we just need to - # be sure that all unsupported types are made into a point light - #ePOINT, - #eDIRECTIONAL - #eSPOT - light_type_items = {'POINT': 0, 'SUN': 1, 'SPOT': 2, 'HEMI': 3, 'AREA': 4} - light_type = light_type_items[light.type] + file.write('\n\t\t\tProperty: "FilmWidth", "double", "",1.0') + file.write('\n\t\t\tProperty: "FilmHeight", "double", "",1.0') + file.write('\n\t\t\tProperty: "FilmAspectRatio", "double", "",%.6f' % aspect) + file.write('\n\t\t\tProperty: "FilmSqueezeRatio", "double", "",1') + file.write('\n\t\t\tProperty: "FilmFormatIndex", "enum", "",0') + file.write('\n\t\t\tProperty: "ViewFrustum", "bool", "",1') + file.write('\n\t\t\tProperty: "ViewFrustumNearFarPlane", "bool", "",0') + file.write('\n\t\t\tProperty: "ViewFrustumBackPlaneMode", "enum", "",2') + file.write('\n\t\t\tProperty: "BackPlaneDistance", "double", "",100') + file.write('\n\t\t\tProperty: "BackPlaneDistanceMode", "enum", "",0') + file.write('\n\t\t\tProperty: "ViewCameraToLookAt", "bool", "",1') + file.write('\n\t\t\tProperty: "LockMode", "bool", "",0') + file.write('\n\t\t\tProperty: "LockInterestNavigation", "bool", "",0') + file.write('\n\t\t\tProperty: "FitImage", "bool", "",0') + file.write('\n\t\t\tProperty: "Crop", "bool", "",0') + file.write('\n\t\t\tProperty: "Center", "bool", "",1') + file.write('\n\t\t\tProperty: "KeepRatio", "bool", "",1') + file.write('\n\t\t\tProperty: "BackgroundMode", "enum", "",0') + file.write('\n\t\t\tProperty: "BackgroundAlphaTreshold", "double", "",0.5') + file.write('\n\t\t\tProperty: "ForegroundTransparent", "bool", "",1') + file.write('\n\t\t\tProperty: "DisplaySafeArea", "bool", "",0') + file.write('\n\t\t\tProperty: "SafeAreaDisplayStyle", "enum", "",1') + file.write('\n\t\t\tProperty: "SafeAreaAspectRatio", "double", "",%.6f' % aspect) + file.write('\n\t\t\tProperty: "Use2DMagnifierZoom", "bool", "",0') + file.write('\n\t\t\tProperty: "2D Magnifier Zoom", "Real", "A+",100') + file.write('\n\t\t\tProperty: "2D Magnifier X", "Real", "A+",50') + file.write('\n\t\t\tProperty: "2D Magnifier Y", "Real", "A+",50') + file.write('\n\t\t\tProperty: "CameraProjectionType", "enum", "",0') + file.write('\n\t\t\tProperty: "UseRealTimeDOFAndAA", "bool", "",0') + file.write('\n\t\t\tProperty: "UseDepthOfField", "bool", "",0') + file.write('\n\t\t\tProperty: "FocusSource", "enum", "",0') + file.write('\n\t\t\tProperty: "FocusAngle", "double", "",3.5') + file.write('\n\t\t\tProperty: "FocusDistance", "double", "",200') + file.write('\n\t\t\tProperty: "UseAntialiasing", "bool", "",0') + file.write('\n\t\t\tProperty: "AntialiasingIntensity", "double", "",0.77777') + file.write('\n\t\t\tProperty: "UseAccumulationBuffer", "bool", "",0') + file.write('\n\t\t\tProperty: "FrameSamplingCount", "int", "",7') + + file.write('\n\t\t}') + file.write('\n\t\tMultiLayer: 0') + file.write('\n\t\tMultiTake: 0') + file.write('\n\t\tShading: Y') + file.write('\n\t\tCulling: "CullingOff"') + file.write('\n\t\tTypeFlags: "Camera"') + file.write('\n\t\tGeometryVersion: 124') + file.write('\n\t\tPosition: %.6f,%.6f,%.6f' % loc) + file.write('\n\t\tUp: %.6f,%.6f,%.6f' % tuple(Mathutils.Vector(0,1,0) * matrix_rot) ) + file.write('\n\t\tLookAt: %.6f,%.6f,%.6f' % tuple(Mathutils.Vector(0,0,-1)*matrix_rot) ) + + #file.write('\n\t\tUp: 0,0,0' ) + #file.write('\n\t\tLookAt: 0,0,0' ) + + file.write('\n\t\tShowInfoOnMoving: 1') + file.write('\n\t\tShowAudio: 0') + file.write('\n\t\tAudioColor: 0,1,0') + file.write('\n\t\tCameraOrthoZoom: 1') + file.write('\n\t}') + + def write_light(my_light): + light = my_light.blenObject.data + file.write('\n\tModel: "Model::%s", "Light" {' % my_light.fbxName) + file.write('\n\t\tVersion: 232') + + write_object_props(my_light.blenObject, None, my_light.parRelMatrix()) + + # Why are these values here twice?????? - oh well, follow the holy sdk's output + + # Blender light types match FBX's, funny coincidence, we just need to + # be sure that all unsupported types are made into a point light + #ePOINT, + #eDIRECTIONAL + #eSPOT + light_type_items = {'POINT': 0, 'SUN': 1, 'SPOT': 2, 'HEMI': 3, 'AREA': 4} + light_type = light_type_items[light.type] # light_type = light.type - if light_type > 2: light_type = 1 # hemi and area lights become directional + if light_type > 2: light_type = 1 # hemi and area lights become directional # mode = light.mode - if light.shadow_method == 'RAY_SHADOW' or light.shadow_method == 'BUFFER_SHADOW': + if light.shadow_method == 'RAY_SHADOW' or light.shadow_method == 'BUFFER_SHADOW': # if mode & Blender.Lamp.Modes.RayShadow or mode & Blender.Lamp.Modes.Shadows: - do_shadow = 1 - else: - do_shadow = 0 + do_shadow = 1 + else: + do_shadow = 0 - if light.only_shadow or (not light.diffuse and not light.specular): + if light.only_shadow or (not light.diffuse and not light.specular): # if mode & Blender.Lamp.Modes.OnlyShadow or (mode & Blender.Lamp.Modes.NoDiffuse and mode & Blender.Lamp.Modes.NoSpecular): - do_light = 0 - else: - do_light = 1 - - scale = abs(GLOBAL_MATRIX.scalePart()[0]) # scale is always uniform in this case - - file.write('\n\t\t\tProperty: "LightType", "enum", "",%i' % light_type) - file.write('\n\t\t\tProperty: "CastLightOnObject", "bool", "",1') - file.write('\n\t\t\tProperty: "DrawVolumetricLight", "bool", "",1') - file.write('\n\t\t\tProperty: "DrawGroundProjection", "bool", "",1') - file.write('\n\t\t\tProperty: "DrawFrontFacingVolumetricLight", "bool", "",0') - file.write('\n\t\t\tProperty: "GoboProperty", "object", ""') - file.write('\n\t\t\tProperty: "Color", "Color", "A+",1,1,1') - file.write('\n\t\t\tProperty: "Intensity", "Intensity", "A+",%.2f' % (min(light.energy*100, 200))) # clamp below 200 - if light.type == 'SPOT': - file.write('\n\t\t\tProperty: "Cone angle", "Cone angle", "A+",%.2f' % (light.spot_size * scale)) + do_light = 0 + else: + do_light = 1 + + scale = abs(GLOBAL_MATRIX.scalePart()[0]) # scale is always uniform in this case + + file.write('\n\t\t\tProperty: "LightType", "enum", "",%i' % light_type) + file.write('\n\t\t\tProperty: "CastLightOnObject", "bool", "",1') + file.write('\n\t\t\tProperty: "DrawVolumetricLight", "bool", "",1') + file.write('\n\t\t\tProperty: "DrawGroundProjection", "bool", "",1') + file.write('\n\t\t\tProperty: "DrawFrontFacingVolumetricLight", "bool", "",0') + file.write('\n\t\t\tProperty: "GoboProperty", "object", ""') + file.write('\n\t\t\tProperty: "Color", "Color", "A+",1,1,1') + file.write('\n\t\t\tProperty: "Intensity", "Intensity", "A+",%.2f' % (min(light.energy*100, 200))) # clamp below 200 + if light.type == 'SPOT': + file.write('\n\t\t\tProperty: "Cone angle", "Cone angle", "A+",%.2f' % (light.spot_size * scale)) # file.write('\n\t\t\tProperty: "Cone angle", "Cone angle", "A+",%.2f' % (light.spotSize * scale)) - file.write('\n\t\t\tProperty: "Fog", "Fog", "A+",50') - file.write('\n\t\t\tProperty: "Color", "Color", "A",%.2f,%.2f,%.2f' % tuple(light.color)) + file.write('\n\t\t\tProperty: "Fog", "Fog", "A+",50') + file.write('\n\t\t\tProperty: "Color", "Color", "A",%.2f,%.2f,%.2f' % tuple(light.color)) # file.write('\n\t\t\tProperty: "Color", "Color", "A",%.2f,%.2f,%.2f' % tuple(light.col)) - file.write('\n\t\t\tProperty: "Intensity", "Intensity", "A+",%.2f' % (min(light.energy*100, 200))) # clamp below 200 -# - # duplication? see ^ (Arystan) + file.write('\n\t\t\tProperty: "Intensity", "Intensity", "A+",%.2f' % (min(light.energy*100, 200))) # clamp below 200 +# + # duplication? see ^ (Arystan) # file.write('\n\t\t\tProperty: "Cone angle", "Cone angle", "A+",%.2f' % (light.spotSize * scale)) - file.write('\n\t\t\tProperty: "Fog", "Fog", "A+",50') - file.write('\n\t\t\tProperty: "LightType", "enum", "",%i' % light_type) - file.write('\n\t\t\tProperty: "CastLightOnObject", "bool", "",%i' % do_light) - file.write('\n\t\t\tProperty: "DrawGroundProjection", "bool", "",1') - file.write('\n\t\t\tProperty: "DrawFrontFacingVolumetricLight", "bool", "",0') - file.write('\n\t\t\tProperty: "DrawVolumetricLight", "bool", "",1') - file.write('\n\t\t\tProperty: "GoboProperty", "object", ""') - file.write('\n\t\t\tProperty: "DecayType", "enum", "",0') - file.write('\n\t\t\tProperty: "DecayStart", "double", "",%.2f' % light.distance) + file.write('\n\t\t\tProperty: "Fog", "Fog", "A+",50') + file.write('\n\t\t\tProperty: "LightType", "enum", "",%i' % light_type) + file.write('\n\t\t\tProperty: "CastLightOnObject", "bool", "",%i' % do_light) + file.write('\n\t\t\tProperty: "DrawGroundProjection", "bool", "",1') + file.write('\n\t\t\tProperty: "DrawFrontFacingVolumetricLight", "bool", "",0') + file.write('\n\t\t\tProperty: "DrawVolumetricLight", "bool", "",1') + file.write('\n\t\t\tProperty: "GoboProperty", "object", ""') + file.write('\n\t\t\tProperty: "DecayType", "enum", "",0') + file.write('\n\t\t\tProperty: "DecayStart", "double", "",%.2f' % light.distance) # file.write('\n\t\t\tProperty: "DecayStart", "double", "",%.2f' % light.dist) - file.write('\n\t\t\tProperty: "EnableNearAttenuation", "bool", "",0') - file.write('\n\t\t\tProperty: "NearAttenuationStart", "double", "",0') - file.write('\n\t\t\tProperty: "NearAttenuationEnd", "double", "",0') - file.write('\n\t\t\tProperty: "EnableFarAttenuation", "bool", "",0') - file.write('\n\t\t\tProperty: "FarAttenuationStart", "double", "",0') - file.write('\n\t\t\tProperty: "FarAttenuationEnd", "double", "",0') - file.write('\n\t\t\tProperty: "CastShadows", "bool", "",%i' % do_shadow) - file.write('\n\t\t\tProperty: "ShadowColor", "ColorRGBA", "",0,0,0,1') - file.write('\n\t\t}') - file.write('\n\t\tMultiLayer: 0') - file.write('\n\t\tMultiTake: 0') - file.write('\n\t\tShading: Y') - file.write('\n\t\tCulling: "CullingOff"') - file.write('\n\t\tTypeFlags: "Light"') - file.write('\n\t\tGeometryVersion: 124') - file.write('\n\t}') - - # matrixOnly is not used at the moment - def write_null(my_null = None, fbxName = None, matrixOnly = None): - # ob can be null - if not fbxName: fbxName = my_null.fbxName - - file.write('\n\tModel: "Model::%s", "Null" {' % fbxName) - file.write('\n\t\tVersion: 232') - - # only use this for the root matrix at the moment - if matrixOnly: - poseMatrix = write_object_props(None, None, matrixOnly)[3] - - else: # all other Null's - if my_null: poseMatrix = write_object_props(my_null.blenObject, None, my_null.parRelMatrix())[3] - else: poseMatrix = write_object_props()[3] - - pose_items.append((fbxName, poseMatrix)) - - file.write(''' - } - MultiLayer: 0 - MultiTake: 1 - Shading: Y - Culling: "CullingOff" - TypeFlags: "Null" - }''') - - # Material Settings - if world: world_amb = tuple(world.ambient_color) + file.write('\n\t\t\tProperty: "EnableNearAttenuation", "bool", "",0') + file.write('\n\t\t\tProperty: "NearAttenuationStart", "double", "",0') + file.write('\n\t\t\tProperty: "NearAttenuationEnd", "double", "",0') + file.write('\n\t\t\tProperty: "EnableFarAttenuation", "bool", "",0') + file.write('\n\t\t\tProperty: "FarAttenuationStart", "double", "",0') + file.write('\n\t\t\tProperty: "FarAttenuationEnd", "double", "",0') + file.write('\n\t\t\tProperty: "CastShadows", "bool", "",%i' % do_shadow) + file.write('\n\t\t\tProperty: "ShadowColor", "ColorRGBA", "",0,0,0,1') + file.write('\n\t\t}') + file.write('\n\t\tMultiLayer: 0') + file.write('\n\t\tMultiTake: 0') + file.write('\n\t\tShading: Y') + file.write('\n\t\tCulling: "CullingOff"') + file.write('\n\t\tTypeFlags: "Light"') + file.write('\n\t\tGeometryVersion: 124') + file.write('\n\t}') + + # matrixOnly is not used at the moment + def write_null(my_null = None, fbxName = None, matrixOnly = None): + # ob can be null + if not fbxName: fbxName = my_null.fbxName + + file.write('\n\tModel: "Model::%s", "Null" {' % fbxName) + file.write('\n\t\tVersion: 232') + + # only use this for the root matrix at the moment + if matrixOnly: + poseMatrix = write_object_props(None, None, matrixOnly)[3] + + else: # all other Null's + if my_null: poseMatrix = write_object_props(my_null.blenObject, None, my_null.parRelMatrix())[3] + else: poseMatrix = write_object_props()[3] + + pose_items.append((fbxName, poseMatrix)) + + file.write(''' + } + MultiLayer: 0 + MultiTake: 1 + Shading: Y + Culling: "CullingOff" + TypeFlags: "Null" + }''') + + # Material Settings + if world: world_amb = tuple(world.ambient_color) # if world: world_amb = world.getAmb() - else: world_amb = (0,0,0) # Default value - - def write_material(matname, mat): - file.write('\n\tMaterial: "Material::%s", "" {' % matname) - - # Todo, add more material Properties. - if mat: - mat_cold = tuple(mat.diffuse_color) + else: world_amb = (0,0,0) # Default value + + def write_material(matname, mat): + file.write('\n\tMaterial: "Material::%s", "" {' % matname) + + # Todo, add more material Properties. + if mat: + mat_cold = tuple(mat.diffuse_color) # mat_cold = tuple(mat.rgbCol) - mat_cols = tuple(mat.specular_color) + mat_cols = tuple(mat.specular_color) # mat_cols = tuple(mat.specCol) - #mat_colm = tuple(mat.mirCol) # we wont use the mirror color - mat_colamb = world_amb + #mat_colm = tuple(mat.mirCol) # we wont use the mirror color + mat_colamb = world_amb # mat_colamb = tuple([c for c in world_amb]) - mat_dif = mat.diffuse_intensity + mat_dif = mat.diffuse_intensity # mat_dif = mat.ref - mat_amb = mat.ambient + mat_amb = mat.ambient # mat_amb = mat.amb - mat_hard = (float(mat.specular_hardness)-1)/5.10 + mat_hard = (float(mat.specular_hardness)-1)/5.10 # mat_hard = (float(mat.hard)-1)/5.10 - mat_spec = mat.specular_intensity/2.0 + mat_spec = mat.specular_intensity/2.0 # mat_spec = mat.spec/2.0 - mat_alpha = mat.alpha - mat_emit = mat.emit - mat_shadeless = mat.shadeless + mat_alpha = mat.alpha + mat_emit = mat.emit + mat_shadeless = mat.shadeless # mat_shadeless = mat.mode & Blender.Material.Modes.SHADELESS - if mat_shadeless: - mat_shader = 'Lambert' - else: - if mat.diffuse_shader == 'LAMBERT': + if mat_shadeless: + mat_shader = 'Lambert' + else: + if mat.diffuse_shader == 'LAMBERT': # if mat.diffuseShader == Blender.Material.Shaders.DIFFUSE_LAMBERT: - mat_shader = 'Lambert' - else: - mat_shader = 'Phong' - else: - mat_cols = mat_cold = 0.8, 0.8, 0.8 - mat_colamb = 0.0,0.0,0.0 - # mat_colm - mat_dif = 1.0 - mat_amb = 0.5 - mat_hard = 20.0 - mat_spec = 0.2 - mat_alpha = 1.0 - mat_emit = 0.0 - mat_shadeless = False - mat_shader = 'Phong' - - file.write('\n\t\tVersion: 102') - file.write('\n\t\tShadingModel: "%s"' % mat_shader.lower()) - file.write('\n\t\tMultiLayer: 0') - - file.write('\n\t\tProperties60: {') - file.write('\n\t\t\tProperty: "ShadingModel", "KString", "", "%s"' % mat_shader) - file.write('\n\t\t\tProperty: "MultiLayer", "bool", "",0') - file.write('\n\t\t\tProperty: "EmissiveColor", "ColorRGB", "",%.4f,%.4f,%.4f' % mat_cold) # emit and diffuse color are he same in blender - file.write('\n\t\t\tProperty: "EmissiveFactor", "double", "",%.4f' % mat_emit) - - file.write('\n\t\t\tProperty: "AmbientColor", "ColorRGB", "",%.4f,%.4f,%.4f' % mat_colamb) - file.write('\n\t\t\tProperty: "AmbientFactor", "double", "",%.4f' % mat_amb) - file.write('\n\t\t\tProperty: "DiffuseColor", "ColorRGB", "",%.4f,%.4f,%.4f' % mat_cold) - file.write('\n\t\t\tProperty: "DiffuseFactor", "double", "",%.4f' % mat_dif) - file.write('\n\t\t\tProperty: "Bump", "Vector3D", "",0,0,0') - file.write('\n\t\t\tProperty: "TransparentColor", "ColorRGB", "",1,1,1') - file.write('\n\t\t\tProperty: "TransparencyFactor", "double", "",%.4f' % (1.0 - mat_alpha)) - if not mat_shadeless: - file.write('\n\t\t\tProperty: "SpecularColor", "ColorRGB", "",%.4f,%.4f,%.4f' % mat_cols) - file.write('\n\t\t\tProperty: "SpecularFactor", "double", "",%.4f' % mat_spec) - file.write('\n\t\t\tProperty: "ShininessExponent", "double", "",80.0') - file.write('\n\t\t\tProperty: "ReflectionColor", "ColorRGB", "",0,0,0') - file.write('\n\t\t\tProperty: "ReflectionFactor", "double", "",1') - file.write('\n\t\t\tProperty: "Emissive", "ColorRGB", "",0,0,0') - file.write('\n\t\t\tProperty: "Ambient", "ColorRGB", "",%.1f,%.1f,%.1f' % mat_colamb) - file.write('\n\t\t\tProperty: "Diffuse", "ColorRGB", "",%.1f,%.1f,%.1f' % mat_cold) - if not mat_shadeless: - file.write('\n\t\t\tProperty: "Specular", "ColorRGB", "",%.1f,%.1f,%.1f' % mat_cols) - file.write('\n\t\t\tProperty: "Shininess", "double", "",%.1f' % mat_hard) - file.write('\n\t\t\tProperty: "Opacity", "double", "",%.1f' % mat_alpha) - if not mat_shadeless: - file.write('\n\t\t\tProperty: "Reflectivity", "double", "",0') + mat_shader = 'Lambert' + else: + mat_shader = 'Phong' + else: + mat_cols = mat_cold = 0.8, 0.8, 0.8 + mat_colamb = 0.0,0.0,0.0 + # mat_colm + mat_dif = 1.0 + mat_amb = 0.5 + mat_hard = 20.0 + mat_spec = 0.2 + mat_alpha = 1.0 + mat_emit = 0.0 + mat_shadeless = False + mat_shader = 'Phong' - file.write('\n\t\t}') - file.write('\n\t}') + file.write('\n\t\tVersion: 102') + file.write('\n\t\tShadingModel: "%s"' % mat_shader.lower()) + file.write('\n\t\tMultiLayer: 0') - def copy_image(image): + file.write('\n\t\tProperties60: {') + file.write('\n\t\t\tProperty: "ShadingModel", "KString", "", "%s"' % mat_shader) + file.write('\n\t\t\tProperty: "MultiLayer", "bool", "",0') + file.write('\n\t\t\tProperty: "EmissiveColor", "ColorRGB", "",%.4f,%.4f,%.4f' % mat_cold) # emit and diffuse color are he same in blender + file.write('\n\t\t\tProperty: "EmissiveFactor", "double", "",%.4f' % mat_emit) - rel = image.get_export_path(basepath, True) - base = os.path.basename(rel) + file.write('\n\t\t\tProperty: "AmbientColor", "ColorRGB", "",%.4f,%.4f,%.4f' % mat_colamb) + file.write('\n\t\t\tProperty: "AmbientFactor", "double", "",%.4f' % mat_amb) + file.write('\n\t\t\tProperty: "DiffuseColor", "ColorRGB", "",%.4f,%.4f,%.4f' % mat_cold) + file.write('\n\t\t\tProperty: "DiffuseFactor", "double", "",%.4f' % mat_dif) + file.write('\n\t\t\tProperty: "Bump", "Vector3D", "",0,0,0') + file.write('\n\t\t\tProperty: "TransparentColor", "ColorRGB", "",1,1,1') + file.write('\n\t\t\tProperty: "TransparencyFactor", "double", "",%.4f' % (1.0 - mat_alpha)) + if not mat_shadeless: + file.write('\n\t\t\tProperty: "SpecularColor", "ColorRGB", "",%.4f,%.4f,%.4f' % mat_cols) + file.write('\n\t\t\tProperty: "SpecularFactor", "double", "",%.4f' % mat_spec) + file.write('\n\t\t\tProperty: "ShininessExponent", "double", "",80.0') + file.write('\n\t\t\tProperty: "ReflectionColor", "ColorRGB", "",0,0,0') + file.write('\n\t\t\tProperty: "ReflectionFactor", "double", "",1') + file.write('\n\t\t\tProperty: "Emissive", "ColorRGB", "",0,0,0') + file.write('\n\t\t\tProperty: "Ambient", "ColorRGB", "",%.1f,%.1f,%.1f' % mat_colamb) + file.write('\n\t\t\tProperty: "Diffuse", "ColorRGB", "",%.1f,%.1f,%.1f' % mat_cold) + if not mat_shadeless: + file.write('\n\t\t\tProperty: "Specular", "ColorRGB", "",%.1f,%.1f,%.1f' % mat_cols) + file.write('\n\t\t\tProperty: "Shininess", "double", "",%.1f' % mat_hard) + file.write('\n\t\t\tProperty: "Opacity", "double", "",%.1f' % mat_alpha) + if not mat_shadeless: + file.write('\n\t\t\tProperty: "Reflectivity", "double", "",0') - if EXP_IMAGE_COPY: - absp = image.get_export_path(basepath, False) - if not os.path.exists(absp): - shutil.copy(image.get_abs_filename(), absp) + file.write('\n\t\t}') + file.write('\n\t}') - return (rel, base) + def copy_image(image): - # tex is an Image (Arystan) - def write_video(texname, tex): - # Same as texture really! - file.write('\n\tVideo: "Video::%s", "Clip" {' % texname) - - file.write(''' - Type: "Clip" - Properties60: { - Property: "FrameRate", "double", "",0 - Property: "LastFrame", "int", "",0 - Property: "Width", "int", "",0 - Property: "Height", "int", "",0''') - if tex: - fname_rel, fname_strip = copy_image(tex) + rel = image.get_export_path(basepath, True) + base = os.path.basename(rel) + + if EXP_IMAGE_COPY: + absp = image.get_export_path(basepath, False) + if not os.path.exists(absp): + shutil.copy(image.get_abs_filename(), absp) + + return (rel, base) + + # tex is an Image (Arystan) + def write_video(texname, tex): + # Same as texture really! + file.write('\n\tVideo: "Video::%s", "Clip" {' % texname) + + file.write(''' + Type: "Clip" + Properties60: { + Property: "FrameRate", "double", "",0 + Property: "LastFrame", "int", "",0 + Property: "Width", "int", "",0 + Property: "Height", "int", "",0''') + if tex: + fname_rel, fname_strip = copy_image(tex) # fname, fname_strip, fname_rel = derived_paths(tex.filename, basepath, EXP_IMAGE_COPY) - else: - fname = fname_strip = fname_rel = '' - - file.write('\n\t\t\tProperty: "Path", "charptr", "", "%s"' % fname_strip) - - - file.write(''' - Property: "StartFrame", "int", "",0 - Property: "StopFrame", "int", "",0 - Property: "PlaySpeed", "double", "",1 - Property: "Offset", "KTime", "",0 - Property: "InterlaceMode", "enum", "",0 - Property: "FreeRunning", "bool", "",0 - Property: "Loop", "bool", "",0 - Property: "AccessMode", "enum", "",0 - } - UseMipMap: 0''') - - file.write('\n\t\tFilename: "%s"' % fname_strip) - if fname_strip: fname_strip = '/' + fname_strip - file.write('\n\t\tRelativeFilename: "%s"' % fname_rel) # make relative - file.write('\n\t}') + else: + fname = fname_strip = fname_rel = '' - - def write_texture(texname, tex, num): - # if tex == None then this is a dummy tex - file.write('\n\tTexture: "Texture::%s", "TextureVideoClip" {' % texname) - file.write('\n\t\tType: "TextureVideoClip"') - file.write('\n\t\tVersion: 202') - # TODO, rare case _empty_ exists as a name. - file.write('\n\t\tTextureName: "Texture::%s"' % texname) - - file.write(''' - Properties60: { - Property: "Translation", "Vector", "A+",0,0,0 - Property: "Rotation", "Vector", "A+",0,0,0 - Property: "Scaling", "Vector", "A+",1,1,1''') - file.write('\n\t\t\tProperty: "Texture alpha", "Number", "A+",%i' % num) - - - # WrapModeU/V 0==rep, 1==clamp, TODO add support - file.write(''' - Property: "TextureTypeUse", "enum", "",0 - Property: "CurrentTextureBlendMode", "enum", "",1 - Property: "UseMaterial", "bool", "",0 - Property: "UseMipMap", "bool", "",0 - Property: "CurrentMappingType", "enum", "",0 - Property: "UVSwap", "bool", "",0''') + file.write('\n\t\t\tProperty: "Path", "charptr", "", "%s"' % fname_strip) - file.write('\n\t\t\tProperty: "WrapModeU", "enum", "",%i' % tex.clamp_x) + + file.write(''' + Property: "StartFrame", "int", "",0 + Property: "StopFrame", "int", "",0 + Property: "PlaySpeed", "double", "",1 + Property: "Offset", "KTime", "",0 + Property: "InterlaceMode", "enum", "",0 + Property: "FreeRunning", "bool", "",0 + Property: "Loop", "bool", "",0 + Property: "AccessMode", "enum", "",0 + } + UseMipMap: 0''') + + file.write('\n\t\tFilename: "%s"' % fname_strip) + if fname_strip: fname_strip = '/' + fname_strip + file.write('\n\t\tRelativeFilename: "%s"' % fname_rel) # make relative + file.write('\n\t}') + + + def write_texture(texname, tex, num): + # if tex == None then this is a dummy tex + file.write('\n\tTexture: "Texture::%s", "TextureVideoClip" {' % texname) + file.write('\n\t\tType: "TextureVideoClip"') + file.write('\n\t\tVersion: 202') + # TODO, rare case _empty_ exists as a name. + file.write('\n\t\tTextureName: "Texture::%s"' % texname) + + file.write(''' + Properties60: { + Property: "Translation", "Vector", "A+",0,0,0 + Property: "Rotation", "Vector", "A+",0,0,0 + Property: "Scaling", "Vector", "A+",1,1,1''') + file.write('\n\t\t\tProperty: "Texture alpha", "Number", "A+",%i' % num) + + + # WrapModeU/V 0==rep, 1==clamp, TODO add support + file.write(''' + Property: "TextureTypeUse", "enum", "",0 + Property: "CurrentTextureBlendMode", "enum", "",1 + Property: "UseMaterial", "bool", "",0 + Property: "UseMipMap", "bool", "",0 + Property: "CurrentMappingType", "enum", "",0 + Property: "UVSwap", "bool", "",0''') + + file.write('\n\t\t\tProperty: "WrapModeU", "enum", "",%i' % tex.clamp_x) # file.write('\n\t\t\tProperty: "WrapModeU", "enum", "",%i' % tex.clampX) - file.write('\n\t\t\tProperty: "WrapModeV", "enum", "",%i' % tex.clamp_y) + file.write('\n\t\t\tProperty: "WrapModeV", "enum", "",%i' % tex.clamp_y) # file.write('\n\t\t\tProperty: "WrapModeV", "enum", "",%i' % tex.clampY) - - file.write(''' - Property: "TextureRotationPivot", "Vector3D", "",0,0,0 - Property: "TextureScalingPivot", "Vector3D", "",0,0,0 - Property: "VideoProperty", "object", "" - }''') - - file.write('\n\t\tMedia: "Video::%s"' % texname) - - if tex: - fname_rel, fname_strip = copy_image(tex) -# fname, fname_strip, fname_rel = derived_paths(tex.filename, basepath, EXP_IMAGE_COPY) - else: - fname = fname_strip = fname_rel = '' - - file.write('\n\t\tFileName: "%s"' % fname_strip) - file.write('\n\t\tRelativeFilename: "%s"' % fname_rel) # need some make relative command - - file.write(''' - ModelUVTranslation: 0,0 - ModelUVScaling: 1,1 - Texture_Alpha_Source: "None" - Cropping: 0,0,0,0 - }''') - def write_deformer_skin(obname): - ''' - Each mesh has its own deformer - ''' - file.write('\n\tDeformer: "Deformer::Skin %s", "Skin" {' % obname) - file.write(''' - Version: 100 - MultiLayer: 0 - Type: "Skin" - Properties60: { - } - Link_DeformAcuracy: 50 - }''') - - # in the example was 'Bip01 L Thigh_2' - def write_sub_deformer_skin(my_mesh, my_bone, weights): - - ''' - Each subdeformer is spesific to a mesh, but the bone it links to can be used by many sub-deformers - So the SubDeformer needs the mesh-object name as a prefix to make it unique - - Its possible that there is no matching vgroup in this mesh, in that case no verts are in the subdeformer, - a but silly but dosnt really matter - ''' - file.write('\n\tDeformer: "SubDeformer::Cluster %s %s", "Cluster" {' % (my_mesh.fbxName, my_bone.fbxName)) - - file.write(''' - Version: 100 - MultiLayer: 0 - Type: "Cluster" - Properties60: { - Property: "SrcModel", "object", "" - Property: "SrcModelReference", "object", "" - } - UserData: "", ""''') - - # Support for bone parents - if my_mesh.fbxBoneParent: - if my_mesh.fbxBoneParent == my_bone: - # TODO - this is a bit lazy, we could have a simple write loop - # for this case because all weights are 1.0 but for now this is ok - # Parent Bones arent used all that much anyway. - vgroup_data = [(j, 1.0) for j in range(len(my_mesh.blenData.verts))] - else: - # This bone is not a parent of this mesh object, no weights - vgroup_data = [] - - else: - # Normal weight painted mesh - if my_bone.blenName in weights[0]: - # Before we used normalized wright list - #vgroup_data = me.getVertsFromGroup(bone.name, 1) - group_index = weights[0].index(my_bone.blenName) - vgroup_data = [(j, weight[group_index]) for j, weight in enumerate(weights[1]) if weight[group_index]] - else: - vgroup_data = [] - - file.write('\n\t\tIndexes: ') - - i = -1 - for vg in vgroup_data: - if i == -1: - file.write('%i' % vg[0]) - i=0 - else: - if i==23: - file.write('\n\t\t') - i=0 - file.write(',%i' % vg[0]) - i+=1 - - file.write('\n\t\tWeights: ') - i = -1 - for vg in vgroup_data: - if i == -1: - file.write('%.8f' % vg[1]) - i=0 - else: - if i==38: - file.write('\n\t\t') - i=0 - file.write(',%.8f' % vg[1]) - i+=1 - - if my_mesh.fbxParent: - # TODO FIXME, this case is broken in some cases. skinned meshes just shouldnt have parents where possible! - m = mtx4_z90 * (my_bone.restMatrix * my_bone.fbxArm.matrixWorld.copy() * my_mesh.matrixWorld.copy().invert() ) - else: - # Yes! this is it... - but dosnt work when the mesh is a. - m = mtx4_z90 * (my_bone.restMatrix * my_bone.fbxArm.matrixWorld.copy() * my_mesh.matrixWorld.copy().invert() ) - - #m = mtx4_z90 * my_bone.restMatrix - matstr = mat4x4str(m) - matstr_i = mat4x4str(m.invert()) - - file.write('\n\t\tTransform: %s' % matstr_i) # THIS IS __NOT__ THE GLOBAL MATRIX AS DOCUMENTED :/ - file.write('\n\t\tTransformLink: %s' % matstr) - file.write('\n\t}') - - def write_mesh(my_mesh): - - me = my_mesh.blenData - - # if there are non NULL materials on this mesh - if my_mesh.blenMaterials: do_materials = True - else: do_materials = False - - if my_mesh.blenTextures: do_textures = True - else: do_textures = False - - do_uvs = len(me.uv_textures) > 0 + file.write(''' + Property: "TextureRotationPivot", "Vector3D", "",0,0,0 + Property: "TextureScalingPivot", "Vector3D", "",0,0,0 + Property: "VideoProperty", "object", "" + }''') + + file.write('\n\t\tMedia: "Video::%s"' % texname) + + if tex: + fname_rel, fname_strip = copy_image(tex) +# fname, fname_strip, fname_rel = derived_paths(tex.filename, basepath, EXP_IMAGE_COPY) + else: + fname = fname_strip = fname_rel = '' + + file.write('\n\t\tFileName: "%s"' % fname_strip) + file.write('\n\t\tRelativeFilename: "%s"' % fname_rel) # need some make relative command + + file.write(''' + ModelUVTranslation: 0,0 + ModelUVScaling: 1,1 + Texture_Alpha_Source: "None" + Cropping: 0,0,0,0 + }''') + + def write_deformer_skin(obname): + ''' + Each mesh has its own deformer + ''' + file.write('\n\tDeformer: "Deformer::Skin %s", "Skin" {' % obname) + file.write(''' + Version: 100 + MultiLayer: 0 + Type: "Skin" + Properties60: { + } + Link_DeformAcuracy: 50 + }''') + + # in the example was 'Bip01 L Thigh_2' + def write_sub_deformer_skin(my_mesh, my_bone, weights): + + ''' + Each subdeformer is spesific to a mesh, but the bone it links to can be used by many sub-deformers + So the SubDeformer needs the mesh-object name as a prefix to make it unique + + Its possible that there is no matching vgroup in this mesh, in that case no verts are in the subdeformer, + a but silly but dosnt really matter + ''' + file.write('\n\tDeformer: "SubDeformer::Cluster %s %s", "Cluster" {' % (my_mesh.fbxName, my_bone.fbxName)) + + file.write(''' + Version: 100 + MultiLayer: 0 + Type: "Cluster" + Properties60: { + Property: "SrcModel", "object", "" + Property: "SrcModelReference", "object", "" + } + UserData: "", ""''') + + # Support for bone parents + if my_mesh.fbxBoneParent: + if my_mesh.fbxBoneParent == my_bone: + # TODO - this is a bit lazy, we could have a simple write loop + # for this case because all weights are 1.0 but for now this is ok + # Parent Bones arent used all that much anyway. + vgroup_data = [(j, 1.0) for j in range(len(my_mesh.blenData.verts))] + else: + # This bone is not a parent of this mesh object, no weights + vgroup_data = [] + + else: + # Normal weight painted mesh + if my_bone.blenName in weights[0]: + # Before we used normalized wright list + #vgroup_data = me.getVertsFromGroup(bone.name, 1) + group_index = weights[0].index(my_bone.blenName) + vgroup_data = [(j, weight[group_index]) for j, weight in enumerate(weights[1]) if weight[group_index]] + else: + vgroup_data = [] + + file.write('\n\t\tIndexes: ') + + i = -1 + for vg in vgroup_data: + if i == -1: + file.write('%i' % vg[0]) + i=0 + else: + if i==23: + file.write('\n\t\t') + i=0 + file.write(',%i' % vg[0]) + i+=1 + + file.write('\n\t\tWeights: ') + i = -1 + for vg in vgroup_data: + if i == -1: + file.write('%.8f' % vg[1]) + i=0 + else: + if i==38: + file.write('\n\t\t') + i=0 + file.write(',%.8f' % vg[1]) + i+=1 + + if my_mesh.fbxParent: + # TODO FIXME, this case is broken in some cases. skinned meshes just shouldnt have parents where possible! + m = mtx4_z90 * (my_bone.restMatrix * my_bone.fbxArm.matrixWorld.copy() * my_mesh.matrixWorld.copy().invert() ) + else: + # Yes! this is it... - but dosnt work when the mesh is a. + m = mtx4_z90 * (my_bone.restMatrix * my_bone.fbxArm.matrixWorld.copy() * my_mesh.matrixWorld.copy().invert() ) + + #m = mtx4_z90 * my_bone.restMatrix + matstr = mat4x4str(m) + matstr_i = mat4x4str(m.invert()) + + file.write('\n\t\tTransform: %s' % matstr_i) # THIS IS __NOT__ THE GLOBAL MATRIX AS DOCUMENTED :/ + file.write('\n\t\tTransformLink: %s' % matstr) + file.write('\n\t}') + + def write_mesh(my_mesh): + + me = my_mesh.blenData + + # if there are non NULL materials on this mesh + if my_mesh.blenMaterials: do_materials = True + else: do_materials = False + + if my_mesh.blenTextures: do_textures = True + else: do_textures = False + + do_uvs = len(me.uv_textures) > 0 # do_uvs = me.faceUV - - - file.write('\n\tModel: "Model::%s", "Mesh" {' % my_mesh.fbxName) - file.write('\n\t\tVersion: 232') # newline is added in write_object_props - - poseMatrix = write_object_props(my_mesh.blenObject, None, my_mesh.parRelMatrix())[3] - pose_items.append((my_mesh.fbxName, poseMatrix)) - - file.write('\n\t\t}') - file.write('\n\t\tMultiLayer: 0') - file.write('\n\t\tMultiTake: 1') - file.write('\n\t\tShading: Y') - file.write('\n\t\tCulling: "CullingOff"') - - - # Write the Real Mesh data here - file.write('\n\t\tVertices: ') - i=-1 - - for v in me.verts: - if i==-1: - file.write('%.6f,%.6f,%.6f' % tuple(v.co)); i=0 - else: - if i==7: - file.write('\n\t\t'); i=0 - file.write(',%.6f,%.6f,%.6f'% tuple(v.co)) - i+=1 - - file.write('\n\t\tPolygonVertexIndex: ') - i=-1 - for f in me.faces: - fi = f.verts - # fi = [v_index for j, v_index in enumerate(f.verts) if v_index != 0 or j != 3] + + + file.write('\n\tModel: "Model::%s", "Mesh" {' % my_mesh.fbxName) + file.write('\n\t\tVersion: 232') # newline is added in write_object_props + + poseMatrix = write_object_props(my_mesh.blenObject, None, my_mesh.parRelMatrix())[3] + pose_items.append((my_mesh.fbxName, poseMatrix)) + + file.write('\n\t\t}') + file.write('\n\t\tMultiLayer: 0') + file.write('\n\t\tMultiTake: 1') + file.write('\n\t\tShading: Y') + file.write('\n\t\tCulling: "CullingOff"') + + + # Write the Real Mesh data here + file.write('\n\t\tVertices: ') + i=-1 + + for v in me.verts: + if i==-1: + file.write('%.6f,%.6f,%.6f' % tuple(v.co)); i=0 + else: + if i==7: + file.write('\n\t\t'); i=0 + file.write(',%.6f,%.6f,%.6f'% tuple(v.co)) + i+=1 + + file.write('\n\t\tPolygonVertexIndex: ') + i=-1 + for f in me.faces: + fi = f.verts + # fi = [v_index for j, v_index in enumerate(f.verts) if v_index != 0 or j != 3] # fi = [v.index for v in f] - # flip the last index, odd but it looks like - # this is how fbx tells one face from another - fi[-1] = -(fi[-1]+1) - fi = tuple(fi) - if i==-1: - if len(fi) == 3: file.write('%i,%i,%i' % fi ) + # flip the last index, odd but it looks like + # this is how fbx tells one face from another + fi[-1] = -(fi[-1]+1) + fi = tuple(fi) + if i==-1: + if len(fi) == 3: file.write('%i,%i,%i' % fi ) # if len(f) == 3: file.write('%i,%i,%i' % fi ) - else: file.write('%i,%i,%i,%i' % fi ) - i=0 - else: - if i==13: - file.write('\n\t\t') - i=0 - if len(fi) == 3: file.write(',%i,%i,%i' % fi ) + else: file.write('%i,%i,%i,%i' % fi ) + i=0 + else: + if i==13: + file.write('\n\t\t') + i=0 + if len(fi) == 3: file.write(',%i,%i,%i' % fi ) # if len(f) == 3: file.write(',%i,%i,%i' % fi ) - else: file.write(',%i,%i,%i,%i' % fi ) - i+=1 - - file.write('\n\t\tEdges: ') - i=-1 - for ed in me.edges: - if i==-1: - file.write('%i,%i' % (ed.verts[0], ed.verts[1])) + else: file.write(',%i,%i,%i,%i' % fi ) + i+=1 + + file.write('\n\t\tEdges: ') + i=-1 + for ed in me.edges: + if i==-1: + file.write('%i,%i' % (ed.verts[0], ed.verts[1])) # file.write('%i,%i' % (ed.v1.index, ed.v2.index)) - i=0 - else: - if i==13: - file.write('\n\t\t') - i=0 - file.write(',%i,%i' % (ed.verts[0], ed.verts[1])) + i=0 + else: + if i==13: + file.write('\n\t\t') + i=0 + file.write(',%i,%i' % (ed.verts[0], ed.verts[1])) # file.write(',%i,%i' % (ed.v1.index, ed.v2.index)) - i+=1 - - file.write('\n\t\tGeometryVersion: 124') - - file.write(''' - LayerElementNormal: 0 { - Version: 101 - Name: "" - MappingInformationType: "ByVertice" - ReferenceInformationType: "Direct" - Normals: ''') - - i=-1 - for v in me.verts: - if i==-1: - file.write('%.15f,%.15f,%.15f' % tuple(v.normal)); i=0 + i+=1 + + file.write('\n\t\tGeometryVersion: 124') + + file.write(''' + LayerElementNormal: 0 { + Version: 101 + Name: "" + MappingInformationType: "ByVertice" + ReferenceInformationType: "Direct" + Normals: ''') + + i=-1 + for v in me.verts: + if i==-1: + file.write('%.15f,%.15f,%.15f' % tuple(v.normal)); i=0 # file.write('%.15f,%.15f,%.15f' % tuple(v.no)); i=0 - else: - if i==2: - file.write('\n '); i=0 - file.write(',%.15f,%.15f,%.15f' % tuple(v.normal)) + else: + if i==2: + file.write('\n '); i=0 + file.write(',%.15f,%.15f,%.15f' % tuple(v.normal)) # file.write(',%.15f,%.15f,%.15f' % tuple(v.no)) - i+=1 - file.write('\n\t\t}') - - # Write Face Smoothing - file.write(''' - LayerElementSmoothing: 0 { - Version: 102 - Name: "" - MappingInformationType: "ByPolygon" - ReferenceInformationType: "Direct" - Smoothing: ''') - - i=-1 - for f in me.faces: - if i==-1: - file.write('%i' % f.smooth); i=0 - else: - if i==54: - file.write('\n '); i=0 - file.write(',%i' % f.smooth) - i+=1 - - file.write('\n\t\t}') - - # Write Edge Smoothing - file.write(''' - LayerElementSmoothing: 0 { - Version: 101 - Name: "" - MappingInformationType: "ByEdge" - ReferenceInformationType: "Direct" - Smoothing: ''') - + i+=1 + file.write('\n\t\t}') + + # Write Face Smoothing + file.write(''' + LayerElementSmoothing: 0 { + Version: 102 + Name: "" + MappingInformationType: "ByPolygon" + ReferenceInformationType: "Direct" + Smoothing: ''') + + i=-1 + for f in me.faces: + if i==-1: + file.write('%i' % f.smooth); i=0 + else: + if i==54: + file.write('\n '); i=0 + file.write(',%i' % f.smooth) + i+=1 + + file.write('\n\t\t}') + + # Write Edge Smoothing + file.write(''' + LayerElementSmoothing: 0 { + Version: 101 + Name: "" + MappingInformationType: "ByEdge" + ReferenceInformationType: "Direct" + Smoothing: ''') + # SHARP = Blender.Mesh.EdgeFlags.SHARP - i=-1 - for ed in me.edges: - if i==-1: - file.write('%i' % (ed.sharp)); i=0 + i=-1 + for ed in me.edges: + if i==-1: + file.write('%i' % (ed.sharp)); i=0 # file.write('%i' % ((ed.flag&SHARP)!=0)); i=0 - else: - if i==54: - file.write('\n '); i=0 - file.write(',%i' % (ed.sharp)) + else: + if i==54: + file.write('\n '); i=0 + file.write(',%i' % (ed.sharp)) # file.write(',%i' % ((ed.flag&SHARP)!=0)) - i+=1 - - file.write('\n\t\t}') + i+=1 + + file.write('\n\t\t}') # del SHARP - # small utility function - # returns a slice of data depending on number of face verts - # data is either a MeshTextureFace or MeshColor - def face_data(data, face): - totvert = len(f.verts) - - return data[:totvert] + # small utility function + # returns a slice of data depending on number of face verts + # data is either a MeshTextureFace or MeshColor + def face_data(data, face): + totvert = len(f.verts) - - # Write VertexColor Layers - # note, no programs seem to use this info :/ - collayers = [] - if len(me.vertex_colors): + return data[:totvert] + + + # Write VertexColor Layers + # note, no programs seem to use this info :/ + collayers = [] + if len(me.vertex_colors): # if me.vertexColors: - collayers = me.vertex_colors + collayers = me.vertex_colors # collayers = me.getColorLayerNames() - collayer_orig = me.active_vertex_color + collayer_orig = me.active_vertex_color # collayer_orig = me.activeColorLayer - for colindex, collayer in enumerate(collayers): + for colindex, collayer in enumerate(collayers): # me.activeColorLayer = collayer - file.write('\n\t\tLayerElementColor: %i {' % colindex) - file.write('\n\t\t\tVersion: 101') - file.write('\n\t\t\tName: "%s"' % collayer.name) + file.write('\n\t\tLayerElementColor: %i {' % colindex) + file.write('\n\t\t\tVersion: 101') + file.write('\n\t\t\tName: "%s"' % collayer.name) # file.write('\n\t\t\tName: "%s"' % collayer) - - file.write(''' - MappingInformationType: "ByPolygonVertex" - ReferenceInformationType: "IndexToDirect" - Colors: ''') - - i = -1 - ii = 0 # Count how many Colors we write - for f, cf in zip(me.faces, collayer.data): - colors = [cf.color1, cf.color2, cf.color3, cf.color4] + file.write(''' + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "IndexToDirect" + Colors: ''') - # determine number of verts - colors = face_data(colors, f) + i = -1 + ii = 0 # Count how many Colors we write - for col in colors: - if i==-1: - file.write('%.4f,%.4f,%.4f,1' % tuple(col)) - i=0 - else: - if i==7: - file.write('\n\t\t\t\t') - i=0 - file.write(',%.4f,%.4f,%.4f,1' % tuple(col)) - i+=1 - ii+=1 # One more Color + for f, cf in zip(me.faces, collayer.data): + colors = [cf.color1, cf.color2, cf.color3, cf.color4] + + # determine number of verts + colors = face_data(colors, f) + + for col in colors: + if i==-1: + file.write('%.4f,%.4f,%.4f,1' % tuple(col)) + i=0 + else: + if i==7: + file.write('\n\t\t\t\t') + i=0 + file.write(',%.4f,%.4f,%.4f,1' % tuple(col)) + i+=1 + ii+=1 # One more Color # for f in me.faces: # for col in f.col: @@ -1707,391 +1709,391 @@ def write(filename, batch_objects = None, \ # file.write(',%.4f,%.4f,%.4f,1' % (col[0]/255.0, col[1]/255.0, col[2]/255.0)) # i+=1 # ii+=1 # One more Color - - file.write('\n\t\t\tColorIndex: ') - i = -1 - for j in range(ii): - if i == -1: - file.write('%i' % j) - i=0 - else: - if i==55: - file.write('\n\t\t\t\t') - i=0 - file.write(',%i' % j) - i+=1 - - file.write('\n\t\t}') - - - - # Write UV and texture layers. - uvlayers = [] - if do_uvs: - uvlayers = me.uv_textures + + file.write('\n\t\t\tColorIndex: ') + i = -1 + for j in range(ii): + if i == -1: + file.write('%i' % j) + i=0 + else: + if i==55: + file.write('\n\t\t\t\t') + i=0 + file.write(',%i' % j) + i+=1 + + file.write('\n\t\t}') + + + + # Write UV and texture layers. + uvlayers = [] + if do_uvs: + uvlayers = me.uv_textures # uvlayers = me.getUVLayerNames() - uvlayer_orig = me.active_uv_texture + uvlayer_orig = me.active_uv_texture # uvlayer_orig = me.activeUVLayer - for uvindex, uvlayer in enumerate(me.uv_textures): + for uvindex, uvlayer in enumerate(me.uv_textures): # for uvindex, uvlayer in enumerate(uvlayers): # me.activeUVLayer = uvlayer - file.write('\n\t\tLayerElementUV: %i {' % uvindex) - file.write('\n\t\t\tVersion: 101') - file.write('\n\t\t\tName: "%s"' % uvlayer.name) + file.write('\n\t\tLayerElementUV: %i {' % uvindex) + file.write('\n\t\t\tVersion: 101') + file.write('\n\t\t\tName: "%s"' % uvlayer.name) # file.write('\n\t\t\tName: "%s"' % uvlayer) - - file.write(''' - MappingInformationType: "ByPolygonVertex" - ReferenceInformationType: "IndexToDirect" - UV: ''') - - i = -1 - ii = 0 # Count how many UVs we write - - for uf in uvlayer.data: + + file.write(''' + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "IndexToDirect" + UV: ''') + + i = -1 + ii = 0 # Count how many UVs we write + + for uf in uvlayer.data: # for f in me.faces: - for uv in uf.uv: + for uv in uf.uv: # for uv in f.uv: - if i==-1: - file.write('%.6f,%.6f' % tuple(uv)) - i=0 - else: - if i==7: - file.write('\n ') - i=0 - file.write(',%.6f,%.6f' % tuple(uv)) - i+=1 - ii+=1 # One more UV - - file.write('\n\t\t\tUVIndex: ') - i = -1 - for j in range(ii): - if i == -1: - file.write('%i' % j) - i=0 - else: - if i==55: - file.write('\n\t\t\t\t') - i=0 - file.write(',%i' % j) - i+=1 - - file.write('\n\t\t}') - - if do_textures: - file.write('\n\t\tLayerElementTexture: %i {' % uvindex) - file.write('\n\t\t\tVersion: 101') - file.write('\n\t\t\tName: "%s"' % uvlayer.name) + if i==-1: + file.write('%.6f,%.6f' % tuple(uv)) + i=0 + else: + if i==7: + file.write('\n ') + i=0 + file.write(',%.6f,%.6f' % tuple(uv)) + i+=1 + ii+=1 # One more UV + + file.write('\n\t\t\tUVIndex: ') + i = -1 + for j in range(ii): + if i == -1: + file.write('%i' % j) + i=0 + else: + if i==55: + file.write('\n\t\t\t\t') + i=0 + file.write(',%i' % j) + i+=1 + + file.write('\n\t\t}') + + if do_textures: + file.write('\n\t\tLayerElementTexture: %i {' % uvindex) + file.write('\n\t\t\tVersion: 101') + file.write('\n\t\t\tName: "%s"' % uvlayer.name) # file.write('\n\t\t\tName: "%s"' % uvlayer) - - if len(my_mesh.blenTextures) == 1: - file.write('\n\t\t\tMappingInformationType: "AllSame"') - else: - file.write('\n\t\t\tMappingInformationType: "ByPolygon"') - - file.write('\n\t\t\tReferenceInformationType: "IndexToDirect"') - file.write('\n\t\t\tBlendMode: "Translucent"') - file.write('\n\t\t\tTextureAlpha: 1') - file.write('\n\t\t\tTextureId: ') - - if len(my_mesh.blenTextures) == 1: - file.write('0') - else: - texture_mapping_local = {None:-1} - - i = 0 # 1 for dummy - for tex in my_mesh.blenTextures: - if tex: # None is set above - texture_mapping_local[tex] = i - i+=1 - - i=-1 - for f in uvlayer.data: + + if len(my_mesh.blenTextures) == 1: + file.write('\n\t\t\tMappingInformationType: "AllSame"') + else: + file.write('\n\t\t\tMappingInformationType: "ByPolygon"') + + file.write('\n\t\t\tReferenceInformationType: "IndexToDirect"') + file.write('\n\t\t\tBlendMode: "Translucent"') + file.write('\n\t\t\tTextureAlpha: 1') + file.write('\n\t\t\tTextureId: ') + + if len(my_mesh.blenTextures) == 1: + file.write('0') + else: + texture_mapping_local = {None:-1} + + i = 0 # 1 for dummy + for tex in my_mesh.blenTextures: + if tex: # None is set above + texture_mapping_local[tex] = i + i+=1 + + i=-1 + for f in uvlayer.data: # for f in me.faces: - img_key = f.image - - if i==-1: - i=0 - file.write( '%s' % texture_mapping_local[img_key]) - else: - if i==55: - file.write('\n ') - i=0 - - file.write(',%s' % texture_mapping_local[img_key]) - i+=1 - - else: - file.write(''' - LayerElementTexture: 0 { - Version: 101 - Name: "" - MappingInformationType: "NoMappingInformation" - ReferenceInformationType: "IndexToDirect" - BlendMode: "Translucent" - TextureAlpha: 1 - TextureId: ''') - file.write('\n\t\t}') - + img_key = f.image + + if i==-1: + i=0 + file.write( '%s' % texture_mapping_local[img_key]) + else: + if i==55: + file.write('\n ') + i=0 + + file.write(',%s' % texture_mapping_local[img_key]) + i+=1 + + else: + file.write(''' + LayerElementTexture: 0 { + Version: 101 + Name: "" + MappingInformationType: "NoMappingInformation" + ReferenceInformationType: "IndexToDirect" + BlendMode: "Translucent" + TextureAlpha: 1 + TextureId: ''') + file.write('\n\t\t}') + # me.activeUVLayer = uvlayer_orig - - # Done with UV/textures. - - if do_materials: - file.write('\n\t\tLayerElementMaterial: 0 {') - file.write('\n\t\t\tVersion: 101') - file.write('\n\t\t\tName: ""') - - if len(my_mesh.blenMaterials) == 1: - file.write('\n\t\t\tMappingInformationType: "AllSame"') - else: - file.write('\n\t\t\tMappingInformationType: "ByPolygon"') - - file.write('\n\t\t\tReferenceInformationType: "IndexToDirect"') - file.write('\n\t\t\tMaterials: ') - - if len(my_mesh.blenMaterials) == 1: - file.write('0') - else: - # Build a material mapping for this - material_mapping_local = {} # local-mat & tex : global index. - - for j, mat_tex_pair in enumerate(my_mesh.blenMaterials): - material_mapping_local[mat_tex_pair] = j - - len_material_mapping_local = len(material_mapping_local) - - mats = my_mesh.blenMaterialList - if me.active_uv_texture: - uv_faces = me.active_uv_texture.data - else: - uv_faces = [None] * len(me.faces) - - i=-1 - for f, uf in zip(me.faces, uv_faces): + # Done with UV/textures. + + if do_materials: + file.write('\n\t\tLayerElementMaterial: 0 {') + file.write('\n\t\t\tVersion: 101') + file.write('\n\t\t\tName: ""') + + if len(my_mesh.blenMaterials) == 1: + file.write('\n\t\t\tMappingInformationType: "AllSame"') + else: + file.write('\n\t\t\tMappingInformationType: "ByPolygon"') + + file.write('\n\t\t\tReferenceInformationType: "IndexToDirect"') + file.write('\n\t\t\tMaterials: ') + + if len(my_mesh.blenMaterials) == 1: + file.write('0') + else: + # Build a material mapping for this + material_mapping_local = {} # local-mat & tex : global index. + + for j, mat_tex_pair in enumerate(my_mesh.blenMaterials): + material_mapping_local[mat_tex_pair] = j + + len_material_mapping_local = len(material_mapping_local) + + mats = my_mesh.blenMaterialList + + if me.active_uv_texture: + uv_faces = me.active_uv_texture.data + else: + uv_faces = [None] * len(me.faces) + + i=-1 + for f, uf in zip(me.faces, uv_faces): # for f in me.faces: - try: mat = mats[f.material_index] + try: mat = mats[f.material_index] # try: mat = mats[f.mat] - except:mat = None - - if do_uvs: tex = uf.image # WARNING - MULTI UV LAYER IMAGES NOT SUPPORTED :/ + except:mat = None + + if do_uvs: tex = uf.image # WARNING - MULTI UV LAYER IMAGES NOT SUPPORTED :/ # if do_uvs: tex = f.image # WARNING - MULTI UV LAYER IMAGES NOT SUPPORTED :/ - else: tex = None - - if i==-1: - i=0 - file.write( '%s' % (material_mapping_local[mat, tex])) # None for mat or tex is ok - else: - if i==55: - file.write('\n\t\t\t\t') - i=0 - - file.write(',%s' % (material_mapping_local[mat, tex])) - i+=1 - - file.write('\n\t\t}') - - file.write(''' - Layer: 0 { - Version: 100 - LayerElement: { - Type: "LayerElementNormal" - TypedIndex: 0 - }''') - - if do_materials: - file.write(''' - LayerElement: { - Type: "LayerElementMaterial" - TypedIndex: 0 - }''') - - # Always write this - if do_textures: - file.write(''' - LayerElement: { - Type: "LayerElementTexture" - TypedIndex: 0 - }''') - - if me.vertex_colors: + else: tex = None + + if i==-1: + i=0 + file.write( '%s' % (material_mapping_local[mat, tex])) # None for mat or tex is ok + else: + if i==55: + file.write('\n\t\t\t\t') + i=0 + + file.write(',%s' % (material_mapping_local[mat, tex])) + i+=1 + + file.write('\n\t\t}') + + file.write(''' + Layer: 0 { + Version: 100 + LayerElement: { + Type: "LayerElementNormal" + TypedIndex: 0 + }''') + + if do_materials: + file.write(''' + LayerElement: { + Type: "LayerElementMaterial" + TypedIndex: 0 + }''') + + # Always write this + if do_textures: + file.write(''' + LayerElement: { + Type: "LayerElementTexture" + TypedIndex: 0 + }''') + + if me.vertex_colors: # if me.vertexColors: - file.write(''' - LayerElement: { - Type: "LayerElementColor" - TypedIndex: 0 - }''') - - if do_uvs: # same as me.faceUV - file.write(''' - LayerElement: { - Type: "LayerElementUV" - TypedIndex: 0 - }''') - - - file.write('\n\t\t}') - - if len(uvlayers) > 1: - for i in range(1, len(uvlayers)): - - file.write('\n\t\tLayer: %i {' % i) - file.write('\n\t\t\tVersion: 100') - - file.write(''' - LayerElement: { - Type: "LayerElementUV"''') - - file.write('\n\t\t\t\tTypedIndex: %i' % i) - file.write('\n\t\t\t}') - - if do_textures: - - file.write(''' - LayerElement: { - Type: "LayerElementTexture"''') - - file.write('\n\t\t\t\tTypedIndex: %i' % i) - file.write('\n\t\t\t}') - - file.write('\n\t\t}') - - if len(collayers) > 1: - # Take into account any UV layers - layer_offset = 0 - if uvlayers: layer_offset = len(uvlayers)-1 - - for i in range(layer_offset, len(collayers)+layer_offset): - file.write('\n\t\tLayer: %i {' % i) - file.write('\n\t\t\tVersion: 100') - - file.write(''' - LayerElement: { - Type: "LayerElementColor"''') - - file.write('\n\t\t\t\tTypedIndex: %i' % i) - file.write('\n\t\t\t}') - file.write('\n\t\t}') - file.write('\n\t}') - - def write_group(name): - file.write('\n\tGroupSelection: "GroupSelection::%s", "Default" {' % name) - - file.write(''' - Properties60: { - Property: "MultiLayer", "bool", "",0 - Property: "Pickable", "bool", "",1 - Property: "Transformable", "bool", "",1 - Property: "Show", "bool", "",1 - } - MultiLayer: 0 - }''') - - - # add meshes here to clear because they are not used anywhere. - meshes_to_clear = [] - - ob_meshes = [] - ob_lights = [] - ob_cameras = [] - # in fbx we export bones as children of the mesh - # armatures not a part of a mesh, will be added to ob_arms - ob_bones = [] - ob_arms = [] - ob_null = [] # emptys - - # List of types that have blender objects (not bones) - ob_all_typegroups = [ob_meshes, ob_lights, ob_cameras, ob_arms, ob_null] - - groups = [] # blender groups, only add ones that have objects in the selections - materials = {} # (mat, image) keys, should be a set() - textures = {} # should be a set() - - tmp_ob_type = ob_type = None # incase no objects are exported, so as not to raise an error - - # if EXP_OBS_SELECTED is false, use sceens objects - if not batch_objects: - if EXP_OBS_SELECTED: tmp_objects = context.selected_objects + file.write(''' + LayerElement: { + Type: "LayerElementColor" + TypedIndex: 0 + }''') + + if do_uvs: # same as me.faceUV + file.write(''' + LayerElement: { + Type: "LayerElementUV" + TypedIndex: 0 + }''') + + + file.write('\n\t\t}') + + if len(uvlayers) > 1: + for i in range(1, len(uvlayers)): + + file.write('\n\t\tLayer: %i {' % i) + file.write('\n\t\t\tVersion: 100') + + file.write(''' + LayerElement: { + Type: "LayerElementUV"''') + + file.write('\n\t\t\t\tTypedIndex: %i' % i) + file.write('\n\t\t\t}') + + if do_textures: + + file.write(''' + LayerElement: { + Type: "LayerElementTexture"''') + + file.write('\n\t\t\t\tTypedIndex: %i' % i) + file.write('\n\t\t\t}') + + file.write('\n\t\t}') + + if len(collayers) > 1: + # Take into account any UV layers + layer_offset = 0 + if uvlayers: layer_offset = len(uvlayers)-1 + + for i in range(layer_offset, len(collayers)+layer_offset): + file.write('\n\t\tLayer: %i {' % i) + file.write('\n\t\t\tVersion: 100') + + file.write(''' + LayerElement: { + Type: "LayerElementColor"''') + + file.write('\n\t\t\t\tTypedIndex: %i' % i) + file.write('\n\t\t\t}') + file.write('\n\t\t}') + file.write('\n\t}') + + def write_group(name): + file.write('\n\tGroupSelection: "GroupSelection::%s", "Default" {' % name) + + file.write(''' + Properties60: { + Property: "MultiLayer", "bool", "",0 + Property: "Pickable", "bool", "",1 + Property: "Transformable", "bool", "",1 + Property: "Show", "bool", "",1 + } + MultiLayer: 0 + }''') + + + # add meshes here to clear because they are not used anywhere. + meshes_to_clear = [] + + ob_meshes = [] + ob_lights = [] + ob_cameras = [] + # in fbx we export bones as children of the mesh + # armatures not a part of a mesh, will be added to ob_arms + ob_bones = [] + ob_arms = [] + ob_null = [] # emptys + + # List of types that have blender objects (not bones) + ob_all_typegroups = [ob_meshes, ob_lights, ob_cameras, ob_arms, ob_null] + + groups = [] # blender groups, only add ones that have objects in the selections + materials = {} # (mat, image) keys, should be a set() + textures = {} # should be a set() + + tmp_ob_type = ob_type = None # incase no objects are exported, so as not to raise an error + + # if EXP_OBS_SELECTED is false, use sceens objects + if not batch_objects: + if EXP_OBS_SELECTED: tmp_objects = context.selected_objects # if EXP_OBS_SELECTED: tmp_objects = sce.objects.context - else: tmp_objects = sce.objects - else: - tmp_objects = batch_objects - - if EXP_ARMATURE: - # This is needed so applying modifiers dosnt apply the armature deformation, its also needed - # ...so mesh objects return their rest worldspace matrix when bone-parents are exported as weighted meshes. - # set every armature to its rest, backup the original values so we done mess up the scene - ob_arms_orig_rest = [arm.rest_position for arm in bpy.data.armatures] + else: tmp_objects = sce.objects + else: + tmp_objects = batch_objects + + if EXP_ARMATURE: + # This is needed so applying modifiers dosnt apply the armature deformation, its also needed + # ...so mesh objects return their rest worldspace matrix when bone-parents are exported as weighted meshes. + # set every armature to its rest, backup the original values so we done mess up the scene + ob_arms_orig_rest = [arm.rest_position for arm in bpy.data.armatures] # ob_arms_orig_rest = [arm.restPosition for arm in bpy.data.armatures] - - for arm in bpy.data.armatures: - arm.rest_position = True + + for arm in bpy.data.armatures: + arm.rest_position = True # arm.restPosition = True - - if ob_arms_orig_rest: - for ob_base in bpy.data.objects: - #if ob_base.type == 'Armature': - ob_base.make_display_list() + + if ob_arms_orig_rest: + for ob_base in bpy.data.objects: + #if ob_base.type == 'Armature': + ob_base.make_display_list() # ob_base.makeDisplayList() - - # This causes the makeDisplayList command to effect the mesh - sce.set_frame(sce.current_frame) + + # This causes the makeDisplayList command to effect the mesh + sce.set_frame(sce.current_frame) # Blender.Set('curframe', Blender.Get('curframe')) - - - for ob_base in tmp_objects: - # ignore dupli children - if ob_base.parent and ob_base.parent.dupli_type != 'NONE': - continue - obs = [(ob_base, ob_base.matrix)] - if ob_base.dupli_type != 'NONE': - ob_base.create_dupli_list() - obs = [(dob.object, dob.matrix) for dob in ob_base.dupli_list] + for ob_base in tmp_objects: - for ob, mtx in obs: + # ignore dupli children + if ob_base.parent and ob_base.parent.dupli_type != 'NONE': + continue + + obs = [(ob_base, ob_base.matrix)] + if ob_base.dupli_type != 'NONE': + ob_base.create_dupli_list() + obs = [(dob.object, dob.matrix) for dob in ob_base.dupli_list] + + for ob, mtx in obs: # for ob, mtx in BPyObject.getDerivedObjects(ob_base): - tmp_ob_type = ob.type - if tmp_ob_type == 'CAMERA': + tmp_ob_type = ob.type + if tmp_ob_type == 'CAMERA': # if tmp_ob_type == 'Camera': - if EXP_CAMERA: - ob_cameras.append(my_object_generic(ob, mtx)) - elif tmp_ob_type == 'LAMP': + if EXP_CAMERA: + ob_cameras.append(my_object_generic(ob, mtx)) + elif tmp_ob_type == 'LAMP': # elif tmp_ob_type == 'Lamp': - if EXP_LAMP: - ob_lights.append(my_object_generic(ob, mtx)) - elif tmp_ob_type == 'ARMATURE': + if EXP_LAMP: + ob_lights.append(my_object_generic(ob, mtx)) + elif tmp_ob_type == 'ARMATURE': # elif tmp_ob_type == 'Armature': - if EXP_ARMATURE: - # TODO - armatures dont work in dupligroups! - if ob not in ob_arms: ob_arms.append(ob) - # ob_arms.append(ob) # replace later. was "ob_arms.append(sane_obname(ob), ob)" - elif tmp_ob_type == 'EMPTY': + if EXP_ARMATURE: + # TODO - armatures dont work in dupligroups! + if ob not in ob_arms: ob_arms.append(ob) + # ob_arms.append(ob) # replace later. was "ob_arms.append(sane_obname(ob), ob)" + elif tmp_ob_type == 'EMPTY': # elif tmp_ob_type == 'Empty': - if EXP_EMPTY: - ob_null.append(my_object_generic(ob, mtx)) - elif EXP_MESH: - origData = True - if tmp_ob_type != 'MESH': + if EXP_EMPTY: + ob_null.append(my_object_generic(ob, mtx)) + elif EXP_MESH: + origData = True + if tmp_ob_type != 'MESH': # if tmp_ob_type != 'Mesh': # me = bpy.data.meshes.new() - try: me = ob.create_mesh(True, 'PREVIEW') + try: me = ob.create_mesh(True, 'PREVIEW') # try: me.getFromObject(ob) - except: me = None - if me: - meshes_to_clear.append( me ) - mats = me.materials - origData = False - else: - # Mesh Type! - if EXP_MESH_APPLY_MOD: + except: me = None + if me: + meshes_to_clear.append( me ) + mats = me.materials + origData = False + else: + # Mesh Type! + if EXP_MESH_APPLY_MOD: # me = bpy.data.meshes.new() - me = ob.create_mesh(True, 'PREVIEW') + me = ob.create_mesh(True, 'PREVIEW') # me.getFromObject(ob) - - # so we keep the vert groups + + # so we keep the vert groups # if EXP_ARMATURE: # orig_mesh = ob.getData(mesh=1) # if orig_mesh.getVertGroupNames(): @@ -2101,16 +2103,16 @@ def write(filename, batch_objects = None, \ # if len(me.verts) == len(orig_mesh.verts): # groupNames, vWeightDict = BPyMesh.meshWeight2Dict(orig_mesh) # BPyMesh.dict2MeshWeight(me, groupNames, vWeightDict) - - # print ob, me, me.getVertGroupNames() - meshes_to_clear.append( me ) - origData = False - mats = me.materials - else: - me = ob.data + + # print ob, me, me.getVertGroupNames() + meshes_to_clear.append( me ) + origData = False + mats = me.materials + else: + me = ob.data # me = ob.getData(mesh=1) - mats = me.materials - + mats = me.materials + # # Support object colors # tmp_colbits = ob.colbits # if tmp_colbits: @@ -2120,679 +2122,679 @@ def write(filename, batch_objects = None, \ # mats[i] = tmp_ob_mats[i] # del tmp_ob_mats # del tmp_colbits - - - if me: + + + if me: # # This WILL modify meshes in blender if EXP_MESH_APPLY_MOD is disabled. # # so strictly this is bad. but only in rare cases would it have negative results # # say with dupliverts the objects would rotate a bit differently # if EXP_MESH_HQ_NORMALS: # BPyMesh.meshCalcNormals(me) # high quality normals nice for realtime engines. - - texture_mapping_local = {} - material_mapping_local = {} - if len(me.uv_textures) > 0: + + texture_mapping_local = {} + material_mapping_local = {} + if len(me.uv_textures) > 0: # if me.faceUV: - uvlayer_orig = me.active_uv_texture + uvlayer_orig = me.active_uv_texture # uvlayer_orig = me.activeUVLayer - for uvlayer in me.uv_textures: + for uvlayer in me.uv_textures: # for uvlayer in me.getUVLayerNames(): # me.activeUVLayer = uvlayer - for f, uf in zip(me.faces, uvlayer.data): + for f, uf in zip(me.faces, uvlayer.data): # for f in me.faces: - tex = uf.image + tex = uf.image # tex = f.image - textures[tex] = texture_mapping_local[tex] = None - - try: mat = mats[f.material_index] + textures[tex] = texture_mapping_local[tex] = None + + try: mat = mats[f.material_index] # try: mat = mats[f.mat] - except: mat = None - - materials[mat, tex] = material_mapping_local[mat, tex] = None # should use sets, wait for blender 2.5 - - + except: mat = None + + materials[mat, tex] = material_mapping_local[mat, tex] = None # should use sets, wait for blender 2.5 + + # me.activeUVLayer = uvlayer_orig - else: - for mat in mats: - # 2.44 use mat.lib too for uniqueness - materials[mat, None] = material_mapping_local[mat, None] = None - else: - materials[None, None] = None - - if EXP_ARMATURE: - armob = ob.find_armature() - blenParentBoneName = None - - # parent bone - special case - if (not armob) and ob.parent and ob.parent.type == 'ARMATURE' and \ - ob.parent_type == 'BONE': + else: + for mat in mats: + # 2.44 use mat.lib too for uniqueness + materials[mat, None] = material_mapping_local[mat, None] = None + else: + materials[None, None] = None + + if EXP_ARMATURE: + armob = ob.find_armature() + blenParentBoneName = None + + # parent bone - special case + if (not armob) and ob.parent and ob.parent.type == 'ARMATURE' and \ + ob.parent_type == 'BONE': # if (not armob) and ob.parent and ob.parent.type == 'Armature' and ob.parentType == Blender.Object.ParentTypes.BONE: - armob = ob.parent - blenParentBoneName = ob.parent_bone + armob = ob.parent + blenParentBoneName = ob.parent_bone # blenParentBoneName = ob.parentbonename - - - if armob and armob not in ob_arms: - ob_arms.append(armob) - - else: - blenParentBoneName = armob = None - - my_mesh = my_object_generic(ob, mtx) - my_mesh.blenData = me - my_mesh.origData = origData - my_mesh.blenMaterials = list(material_mapping_local.keys()) - my_mesh.blenMaterialList = mats - my_mesh.blenTextures = list(texture_mapping_local.keys()) - - # if only 1 null texture then empty the list - if len(my_mesh.blenTextures) == 1 and my_mesh.blenTextures[0] == None: - my_mesh.blenTextures = [] - - my_mesh.fbxArm = armob # replace with my_object_generic armature instance later - my_mesh.fbxBoneParent = blenParentBoneName # replace with my_bone instance later - - ob_meshes.append( my_mesh ) - - # not forgetting to free dupli_list - if ob_base.dupli_list: ob_base.free_dupli_list() - if EXP_ARMATURE: - # now we have the meshes, restore the rest arm position - for i, arm in enumerate(bpy.data.armatures): - arm.rest_position = ob_arms_orig_rest[i] + if armob and armob not in ob_arms: + ob_arms.append(armob) + + else: + blenParentBoneName = armob = None + + my_mesh = my_object_generic(ob, mtx) + my_mesh.blenData = me + my_mesh.origData = origData + my_mesh.blenMaterials = list(material_mapping_local.keys()) + my_mesh.blenMaterialList = mats + my_mesh.blenTextures = list(texture_mapping_local.keys()) + + # if only 1 null texture then empty the list + if len(my_mesh.blenTextures) == 1 and my_mesh.blenTextures[0] == None: + my_mesh.blenTextures = [] + + my_mesh.fbxArm = armob # replace with my_object_generic armature instance later + my_mesh.fbxBoneParent = blenParentBoneName # replace with my_bone instance later + + ob_meshes.append( my_mesh ) + + # not forgetting to free dupli_list + if ob_base.dupli_list: ob_base.free_dupli_list() + + + if EXP_ARMATURE: + # now we have the meshes, restore the rest arm position + for i, arm in enumerate(bpy.data.armatures): + arm.rest_position = ob_arms_orig_rest[i] # arm.restPosition = ob_arms_orig_rest[i] - - if ob_arms_orig_rest: - for ob_base in bpy.data.objects: - if ob_base.type == 'ARMATURE': + + if ob_arms_orig_rest: + for ob_base in bpy.data.objects: + if ob_base.type == 'ARMATURE': # if ob_base.type == 'Armature': - ob_base.make_display_list() + ob_base.make_display_list() # ob_base.makeDisplayList() - # This causes the makeDisplayList command to effect the mesh - sce.set_frame(sce.current_frame) + # This causes the makeDisplayList command to effect the mesh + sce.set_frame(sce.current_frame) # Blender.Set('curframe', Blender.Get('curframe')) - - del tmp_ob_type, tmp_objects - - # now we have collected all armatures, add bones - for i, ob in enumerate(ob_arms): - - ob_arms[i] = my_arm = my_object_generic(ob) - - my_arm.fbxBones = [] - my_arm.blenData = ob.data - if ob.animation_data: - my_arm.blenAction = ob.animation_data.action - else: - my_arm.blenAction = None + + del tmp_ob_type, tmp_objects + + # now we have collected all armatures, add bones + for i, ob in enumerate(ob_arms): + + ob_arms[i] = my_arm = my_object_generic(ob) + + my_arm.fbxBones = [] + my_arm.blenData = ob.data + if ob.animation_data: + my_arm.blenAction = ob.animation_data.action + else: + my_arm.blenAction = None # my_arm.blenAction = ob.action - my_arm.blenActionList = [] - - # fbxName, blenderObject, my_bones, blenderActions - #ob_arms[i] = fbxArmObName, ob, arm_my_bones, (ob.action, []) - - for bone in my_arm.blenData.bones: + my_arm.blenActionList = [] + + # fbxName, blenderObject, my_bones, blenderActions + #ob_arms[i] = fbxArmObName, ob, arm_my_bones, (ob.action, []) + + for bone in my_arm.blenData.bones: # for bone in my_arm.blenData.bones.values(): - my_bone = my_bone_class(bone, my_arm) - my_arm.fbxBones.append( my_bone ) - ob_bones.append( my_bone ) - - # add the meshes to the bones and replace the meshes armature with own armature class - #for obname, ob, mtx, me, mats, arm, armname in ob_meshes: - for my_mesh in ob_meshes: - # Replace - # ...this could be sped up with dictionary mapping but its unlikely for - # it ever to be a bottleneck - (would need 100+ meshes using armatures) - if my_mesh.fbxArm: - for my_arm in ob_arms: - if my_arm.blenObject == my_mesh.fbxArm: - my_mesh.fbxArm = my_arm - break - - for my_bone in ob_bones: - - # The mesh uses this bones armature! - if my_bone.fbxArm == my_mesh.fbxArm: - my_bone.blenMeshes[my_mesh.fbxName] = me - - - # parent bone: replace bone names with our class instances - # my_mesh.fbxBoneParent is None or a blender bone name initialy, replacing if the names match. - if my_mesh.fbxBoneParent == my_bone.blenName: - my_mesh.fbxBoneParent = my_bone - - bone_deformer_count = 0 # count how many bones deform a mesh - my_bone_blenParent = None - for my_bone in ob_bones: - my_bone_blenParent = my_bone.blenBone.parent - if my_bone_blenParent: - for my_bone_parent in ob_bones: - # Note 2.45rc2 you can compare bones normally - if my_bone_blenParent.name == my_bone_parent.blenName and my_bone.fbxArm == my_bone_parent.fbxArm: - my_bone.parent = my_bone_parent - break - - # Not used at the moment - # my_bone.calcRestMatrixLocal() - bone_deformer_count += len(my_bone.blenMeshes) - - del my_bone_blenParent - - - # Build blenObject -> fbxObject mapping - # this is needed for groups as well as fbxParenting + my_bone = my_bone_class(bone, my_arm) + my_arm.fbxBones.append( my_bone ) + ob_bones.append( my_bone ) + + # add the meshes to the bones and replace the meshes armature with own armature class + #for obname, ob, mtx, me, mats, arm, armname in ob_meshes: + for my_mesh in ob_meshes: + # Replace + # ...this could be sped up with dictionary mapping but its unlikely for + # it ever to be a bottleneck - (would need 100+ meshes using armatures) + if my_mesh.fbxArm: + for my_arm in ob_arms: + if my_arm.blenObject == my_mesh.fbxArm: + my_mesh.fbxArm = my_arm + break + + for my_bone in ob_bones: + + # The mesh uses this bones armature! + if my_bone.fbxArm == my_mesh.fbxArm: + my_bone.blenMeshes[my_mesh.fbxName] = me + + + # parent bone: replace bone names with our class instances + # my_mesh.fbxBoneParent is None or a blender bone name initialy, replacing if the names match. + if my_mesh.fbxBoneParent == my_bone.blenName: + my_mesh.fbxBoneParent = my_bone + + bone_deformer_count = 0 # count how many bones deform a mesh + my_bone_blenParent = None + for my_bone in ob_bones: + my_bone_blenParent = my_bone.blenBone.parent + if my_bone_blenParent: + for my_bone_parent in ob_bones: + # Note 2.45rc2 you can compare bones normally + if my_bone_blenParent.name == my_bone_parent.blenName and my_bone.fbxArm == my_bone_parent.fbxArm: + my_bone.parent = my_bone_parent + break + + # Not used at the moment + # my_bone.calcRestMatrixLocal() + bone_deformer_count += len(my_bone.blenMeshes) + + del my_bone_blenParent + + + # Build blenObject -> fbxObject mapping + # this is needed for groups as well as fbxParenting # for ob in bpy.data.objects: ob.tag = False # bpy.data.objects.tag = False - # using a list of object names for tagging (Arystan) - tagged_objects = [] + # using a list of object names for tagging (Arystan) + tagged_objects = [] - tmp_obmapping = {} - for ob_generic in ob_all_typegroups: - for ob_base in ob_generic: - tagged_objects.append(ob_base.blenObject.name) + tmp_obmapping = {} + for ob_generic in ob_all_typegroups: + for ob_base in ob_generic: + tagged_objects.append(ob_base.blenObject.name) # ob_base.blenObject.tag = True - tmp_obmapping[ob_base.blenObject] = ob_base - - # Build Groups from objects we export - for blenGroup in bpy.data.groups: - fbxGroupName = None - for ob in blenGroup.objects: - if ob.name in tagged_objects: + tmp_obmapping[ob_base.blenObject] = ob_base + + # Build Groups from objects we export + for blenGroup in bpy.data.groups: + fbxGroupName = None + for ob in blenGroup.objects: + if ob.name in tagged_objects: # if ob.tag: - if fbxGroupName == None: - fbxGroupName = sane_groupname(blenGroup) - groups.append((fbxGroupName, blenGroup)) - - tmp_obmapping[ob].fbxGroupNames.append(fbxGroupName) # also adds to the objects fbxGroupNames - - groups.sort() # not really needed - - # Assign parents using this mapping - for ob_generic in ob_all_typegroups: - for my_ob in ob_generic: - parent = my_ob.blenObject.parent - if parent and parent.name in tagged_objects: # does it exist and is it in the mapping + if fbxGroupName == None: + fbxGroupName = sane_groupname(blenGroup) + groups.append((fbxGroupName, blenGroup)) + + tmp_obmapping[ob].fbxGroupNames.append(fbxGroupName) # also adds to the objects fbxGroupNames + + groups.sort() # not really needed + + # Assign parents using this mapping + for ob_generic in ob_all_typegroups: + for my_ob in ob_generic: + parent = my_ob.blenObject.parent + if parent and parent.name in tagged_objects: # does it exist and is it in the mapping # if parent and parent.tag: # does it exist and is it in the mapping - my_ob.fbxParent = tmp_obmapping[parent] - - - del tmp_obmapping - # Finished finding groups we use - - - materials = [(sane_matname(mat_tex_pair), mat_tex_pair) for mat_tex_pair in materials.keys()] - textures = [(sane_texname(tex), tex) for tex in textures.keys() if tex] - materials.sort() # sort by name - textures.sort() - - camera_count = 8 - file.write(''' + my_ob.fbxParent = tmp_obmapping[parent] + + + del tmp_obmapping + # Finished finding groups we use + + + materials = [(sane_matname(mat_tex_pair), mat_tex_pair) for mat_tex_pair in materials.keys()] + textures = [(sane_texname(tex), tex) for tex in textures.keys() if tex] + materials.sort() # sort by name + textures.sort() + + camera_count = 8 + file.write(''' ; Object definitions ;------------------------------------------------------------------ Definitions: { - Version: 100 - Count: %i''' % (\ - 1+1+camera_count+\ - len(ob_meshes)+\ - len(ob_lights)+\ - len(ob_cameras)+\ - len(ob_arms)+\ - len(ob_null)+\ - len(ob_bones)+\ - bone_deformer_count+\ - len(materials)+\ - (len(textures)*2))) # add 1 for the root model 1 for global settings - - del bone_deformer_count - - file.write(''' - ObjectType: "Model" { - Count: %i - }''' % (\ - 1+camera_count+\ - len(ob_meshes)+\ - len(ob_lights)+\ - len(ob_cameras)+\ - len(ob_arms)+\ - len(ob_null)+\ - len(ob_bones))) # add 1 for the root model - - file.write(''' - ObjectType: "Geometry" { - Count: %i - }''' % len(ob_meshes)) - - if materials: - file.write(''' - ObjectType: "Material" { - Count: %i - }''' % len(materials)) - - if textures: - file.write(''' - ObjectType: "Texture" { - Count: %i - }''' % len(textures)) # add 1 for an empty tex - file.write(''' - ObjectType: "Video" { - Count: %i - }''' % len(textures)) # add 1 for an empty tex - - tmp = 0 - # Add deformer nodes - for my_mesh in ob_meshes: - if my_mesh.fbxArm: - tmp+=1 - - # Add subdeformers - for my_bone in ob_bones: - tmp += len(my_bone.blenMeshes) - - if tmp: - file.write(''' - ObjectType: "Deformer" { - Count: %i - }''' % tmp) - del tmp - - # we could avoid writing this possibly but for now just write it - - file.write(''' - ObjectType: "Pose" { - Count: 1 - }''') - - if groups: - file.write(''' - ObjectType: "GroupSelection" { - Count: %i - }''' % len(groups)) - - file.write(''' - ObjectType: "GlobalSettings" { - Count: 1 - } + Version: 100 + Count: %i''' % (\ + 1+1+camera_count+\ + len(ob_meshes)+\ + len(ob_lights)+\ + len(ob_cameras)+\ + len(ob_arms)+\ + len(ob_null)+\ + len(ob_bones)+\ + bone_deformer_count+\ + len(materials)+\ + (len(textures)*2))) # add 1 for the root model 1 for global settings + + del bone_deformer_count + + file.write(''' + ObjectType: "Model" { + Count: %i + }''' % (\ + 1+camera_count+\ + len(ob_meshes)+\ + len(ob_lights)+\ + len(ob_cameras)+\ + len(ob_arms)+\ + len(ob_null)+\ + len(ob_bones))) # add 1 for the root model + + file.write(''' + ObjectType: "Geometry" { + Count: %i + }''' % len(ob_meshes)) + + if materials: + file.write(''' + ObjectType: "Material" { + Count: %i + }''' % len(materials)) + + if textures: + file.write(''' + ObjectType: "Texture" { + Count: %i + }''' % len(textures)) # add 1 for an empty tex + file.write(''' + ObjectType: "Video" { + Count: %i + }''' % len(textures)) # add 1 for an empty tex + + tmp = 0 + # Add deformer nodes + for my_mesh in ob_meshes: + if my_mesh.fbxArm: + tmp+=1 + + # Add subdeformers + for my_bone in ob_bones: + tmp += len(my_bone.blenMeshes) + + if tmp: + file.write(''' + ObjectType: "Deformer" { + Count: %i + }''' % tmp) + del tmp + + # we could avoid writing this possibly but for now just write it + + file.write(''' + ObjectType: "Pose" { + Count: 1 + }''') + + if groups: + file.write(''' + ObjectType: "GroupSelection" { + Count: %i + }''' % len(groups)) + + file.write(''' + ObjectType: "GlobalSettings" { + Count: 1 + } }''') - file.write(''' + file.write(''' ; Object properties ;------------------------------------------------------------------ Objects: {''') - - # To comply with other FBX FILES - write_camera_switch() - - # Write the null object - write_null(None, 'blend_root')# , GLOBAL_MATRIX) - - for my_null in ob_null: - write_null(my_null) - - for my_arm in ob_arms: - write_null(my_arm) - - for my_cam in ob_cameras: - write_camera(my_cam) - for my_light in ob_lights: - write_light(my_light) - - for my_mesh in ob_meshes: - write_mesh(my_mesh) + # To comply with other FBX FILES + write_camera_switch() - #for bonename, bone, obname, me, armob in ob_bones: - for my_bone in ob_bones: - write_bone(my_bone) - - write_camera_default() - - for matname, (mat, tex) in materials: - write_material(matname, mat) # We only need to have a material per image pair, but no need to write any image info into the material (dumb fbx standard) - - # each texture uses a video, odd - for texname, tex in textures: - write_video(texname, tex) - i = 0 - for texname, tex in textures: - write_texture(texname, tex, i) - i+=1 - - for groupname, group in groups: - write_group(groupname) - - # NOTE - c4d and motionbuilder dont need normalized weights, but deep-exploration 5 does and (max?) do. - - # Write armature modifiers - # TODO - add another MODEL? - because of this skin definition. - for my_mesh in ob_meshes: - if my_mesh.fbxArm: - write_deformer_skin(my_mesh.fbxName) - - # Get normalized weights for temorary use - if my_mesh.fbxBoneParent: - weights = None - else: - weights = meshNormalizedWeights(my_mesh.blenObject) + # Write the null object + write_null(None, 'blend_root')# , GLOBAL_MATRIX) + + for my_null in ob_null: + write_null(my_null) + + for my_arm in ob_arms: + write_null(my_arm) + + for my_cam in ob_cameras: + write_camera(my_cam) + + for my_light in ob_lights: + write_light(my_light) + + for my_mesh in ob_meshes: + write_mesh(my_mesh) + + #for bonename, bone, obname, me, armob in ob_bones: + for my_bone in ob_bones: + write_bone(my_bone) + + write_camera_default() + + for matname, (mat, tex) in materials: + write_material(matname, mat) # We only need to have a material per image pair, but no need to write any image info into the material (dumb fbx standard) + + # each texture uses a video, odd + for texname, tex in textures: + write_video(texname, tex) + i = 0 + for texname, tex in textures: + write_texture(texname, tex, i) + i+=1 + + for groupname, group in groups: + write_group(groupname) + + # NOTE - c4d and motionbuilder dont need normalized weights, but deep-exploration 5 does and (max?) do. + + # Write armature modifiers + # TODO - add another MODEL? - because of this skin definition. + for my_mesh in ob_meshes: + if my_mesh.fbxArm: + write_deformer_skin(my_mesh.fbxName) + + # Get normalized weights for temorary use + if my_mesh.fbxBoneParent: + weights = None + else: + weights = meshNormalizedWeights(my_mesh.blenObject) # weights = meshNormalizedWeights(my_mesh.blenData) - - #for bonename, bone, obname, bone_mesh, armob in ob_bones: - for my_bone in ob_bones: - if me in iter(my_bone.blenMeshes.values()): - write_sub_deformer_skin(my_mesh, my_bone, weights) - - # Write pose's really weired, only needed when an armature and mesh are used together - # each by themselves dont need pose data. for now only pose meshes and bones - - file.write(''' - Pose: "Pose::BIND_POSES", "BindPose" { - Type: "BindPose" - Version: 100 - Properties60: { - } - NbPoseNodes: ''') - file.write(str(len(pose_items))) - - for fbxName, matrix in pose_items: - file.write('\n\t\tPoseNode: {') - file.write('\n\t\t\tNode: "Model::%s"' % fbxName ) - if matrix: file.write('\n\t\t\tMatrix: %s' % mat4x4str(matrix)) - else: file.write('\n\t\t\tMatrix: %s' % mat4x4str(mtx4_identity)) - file.write('\n\t\t}') - - file.write('\n\t}') - - - # Finish Writing Objects - # Write global settings - file.write(''' - GlobalSettings: { - Version: 1000 - Properties60: { - Property: "UpAxis", "int", "",1 - Property: "UpAxisSign", "int", "",1 - Property: "FrontAxis", "int", "",2 - Property: "FrontAxisSign", "int", "",1 - Property: "CoordAxis", "int", "",0 - Property: "CoordAxisSign", "int", "",1 - Property: "UnitScaleFactor", "double", "",100 - } - } -''') - file.write('}') - - file.write(''' + #for bonename, bone, obname, bone_mesh, armob in ob_bones: + for my_bone in ob_bones: + if me in iter(my_bone.blenMeshes.values()): + write_sub_deformer_skin(my_mesh, my_bone, weights) + + # Write pose's really weired, only needed when an armature and mesh are used together + # each by themselves dont need pose data. for now only pose meshes and bones + + file.write(''' + Pose: "Pose::BIND_POSES", "BindPose" { + Type: "BindPose" + Version: 100 + Properties60: { + } + NbPoseNodes: ''') + file.write(str(len(pose_items))) + + + for fbxName, matrix in pose_items: + file.write('\n\t\tPoseNode: {') + file.write('\n\t\t\tNode: "Model::%s"' % fbxName ) + if matrix: file.write('\n\t\t\tMatrix: %s' % mat4x4str(matrix)) + else: file.write('\n\t\t\tMatrix: %s' % mat4x4str(mtx4_identity)) + file.write('\n\t\t}') + + file.write('\n\t}') + + + # Finish Writing Objects + # Write global settings + file.write(''' + GlobalSettings: { + Version: 1000 + Properties60: { + Property: "UpAxis", "int", "",1 + Property: "UpAxisSign", "int", "",1 + Property: "FrontAxis", "int", "",2 + Property: "FrontAxisSign", "int", "",1 + Property: "CoordAxis", "int", "",0 + Property: "CoordAxisSign", "int", "",1 + Property: "UnitScaleFactor", "double", "",100 + } + } +''') + file.write('}') + + file.write(''' ; Object relations ;------------------------------------------------------------------ Relations: {''') - file.write('\n\tModel: "Model::blend_root", "Null" {\n\t}') + file.write('\n\tModel: "Model::blend_root", "Null" {\n\t}') - for my_null in ob_null: - file.write('\n\tModel: "Model::%s", "Null" {\n\t}' % my_null.fbxName) + for my_null in ob_null: + file.write('\n\tModel: "Model::%s", "Null" {\n\t}' % my_null.fbxName) - for my_arm in ob_arms: - file.write('\n\tModel: "Model::%s", "Null" {\n\t}' % my_arm.fbxName) + for my_arm in ob_arms: + file.write('\n\tModel: "Model::%s", "Null" {\n\t}' % my_arm.fbxName) - for my_mesh in ob_meshes: - file.write('\n\tModel: "Model::%s", "Mesh" {\n\t}' % my_mesh.fbxName) + for my_mesh in ob_meshes: + file.write('\n\tModel: "Model::%s", "Mesh" {\n\t}' % my_mesh.fbxName) - # TODO - limbs can have the same name for multiple armatures, should prefix. - #for bonename, bone, obname, me, armob in ob_bones: - for my_bone in ob_bones: - file.write('\n\tModel: "Model::%s", "Limb" {\n\t}' % my_bone.fbxName) - - for my_cam in ob_cameras: - file.write('\n\tModel: "Model::%s", "Camera" {\n\t}' % my_cam.fbxName) - - for my_light in ob_lights: - file.write('\n\tModel: "Model::%s", "Light" {\n\t}' % my_light.fbxName) - - file.write(''' - Model: "Model::Producer Perspective", "Camera" { - } - Model: "Model::Producer Top", "Camera" { - } - Model: "Model::Producer Bottom", "Camera" { - } - Model: "Model::Producer Front", "Camera" { - } - Model: "Model::Producer Back", "Camera" { - } - Model: "Model::Producer Right", "Camera" { - } - Model: "Model::Producer Left", "Camera" { - } - Model: "Model::Camera Switcher", "CameraSwitcher" { - }''') - - for matname, (mat, tex) in materials: - file.write('\n\tMaterial: "Material::%s", "" {\n\t}' % matname) + # TODO - limbs can have the same name for multiple armatures, should prefix. + #for bonename, bone, obname, me, armob in ob_bones: + for my_bone in ob_bones: + file.write('\n\tModel: "Model::%s", "Limb" {\n\t}' % my_bone.fbxName) - if textures: - for texname, tex in textures: - file.write('\n\tTexture: "Texture::%s", "TextureVideoClip" {\n\t}' % texname) - for texname, tex in textures: - file.write('\n\tVideo: "Video::%s", "Clip" {\n\t}' % texname) + for my_cam in ob_cameras: + file.write('\n\tModel: "Model::%s", "Camera" {\n\t}' % my_cam.fbxName) - # deformers - modifiers - for my_mesh in ob_meshes: - if my_mesh.fbxArm: - file.write('\n\tDeformer: "Deformer::Skin %s", "Skin" {\n\t}' % my_mesh.fbxName) - - #for bonename, bone, obname, me, armob in ob_bones: - for my_bone in ob_bones: - for fbxMeshObName in my_bone.blenMeshes: # .keys() - fbxMeshObName - # is this bone effecting a mesh? - file.write('\n\tDeformer: "SubDeformer::Cluster %s %s", "Cluster" {\n\t}' % (fbxMeshObName, my_bone.fbxName)) - - # This should be at the end - # file.write('\n\tPose: "Pose::BIND_POSES", "BindPose" {\n\t}') - - for groupname, group in groups: - file.write('\n\tGroupSelection: "GroupSelection::%s", "Default" {\n\t}' % groupname) - - file.write('\n}') - file.write(''' + for my_light in ob_lights: + file.write('\n\tModel: "Model::%s", "Light" {\n\t}' % my_light.fbxName) + + file.write(''' + Model: "Model::Producer Perspective", "Camera" { + } + Model: "Model::Producer Top", "Camera" { + } + Model: "Model::Producer Bottom", "Camera" { + } + Model: "Model::Producer Front", "Camera" { + } + Model: "Model::Producer Back", "Camera" { + } + Model: "Model::Producer Right", "Camera" { + } + Model: "Model::Producer Left", "Camera" { + } + Model: "Model::Camera Switcher", "CameraSwitcher" { + }''') + + for matname, (mat, tex) in materials: + file.write('\n\tMaterial: "Material::%s", "" {\n\t}' % matname) + + if textures: + for texname, tex in textures: + file.write('\n\tTexture: "Texture::%s", "TextureVideoClip" {\n\t}' % texname) + for texname, tex in textures: + file.write('\n\tVideo: "Video::%s", "Clip" {\n\t}' % texname) + + # deformers - modifiers + for my_mesh in ob_meshes: + if my_mesh.fbxArm: + file.write('\n\tDeformer: "Deformer::Skin %s", "Skin" {\n\t}' % my_mesh.fbxName) + + #for bonename, bone, obname, me, armob in ob_bones: + for my_bone in ob_bones: + for fbxMeshObName in my_bone.blenMeshes: # .keys() - fbxMeshObName + # is this bone effecting a mesh? + file.write('\n\tDeformer: "SubDeformer::Cluster %s %s", "Cluster" {\n\t}' % (fbxMeshObName, my_bone.fbxName)) + + # This should be at the end + # file.write('\n\tPose: "Pose::BIND_POSES", "BindPose" {\n\t}') + + for groupname, group in groups: + file.write('\n\tGroupSelection: "GroupSelection::%s", "Default" {\n\t}' % groupname) + + file.write('\n}') + file.write(''' ; Object connections ;------------------------------------------------------------------ Connections: {''') - - # NOTE - The FBX SDK dosnt care about the order but some importers DO! - # for instance, defining the material->mesh connection - # before the mesh->blend_root crashes cinema4d - - # write the fake root node - file.write('\n\tConnect: "OO", "Model::blend_root", "Model::Scene"') - - for ob_generic in ob_all_typegroups: # all blender 'Object's we support - for my_ob in ob_generic: - if my_ob.fbxParent: - file.write('\n\tConnect: "OO", "Model::%s", "Model::%s"' % (my_ob.fbxName, my_ob.fbxParent.fbxName)) - else: - file.write('\n\tConnect: "OO", "Model::%s", "Model::blend_root"' % my_ob.fbxName) - - if materials: - for my_mesh in ob_meshes: - # Connect all materials to all objects, not good form but ok for now. - for mat, tex in my_mesh.blenMaterials: - if mat: mat_name = mat.name - else: mat_name = None - - if tex: tex_name = tex.name - else: tex_name = None - - file.write('\n\tConnect: "OO", "Material::%s", "Model::%s"' % (sane_name_mapping_mat[mat_name, tex_name], my_mesh.fbxName)) - - if textures: - for my_mesh in ob_meshes: - if my_mesh.blenTextures: - # file.write('\n\tConnect: "OO", "Texture::_empty_", "Model::%s"' % my_mesh.fbxName) - for tex in my_mesh.blenTextures: - if tex: - file.write('\n\tConnect: "OO", "Texture::%s", "Model::%s"' % (sane_name_mapping_tex[tex.name], my_mesh.fbxName)) - - for texname, tex in textures: - file.write('\n\tConnect: "OO", "Video::%s", "Texture::%s"' % (texname, texname)) - - for my_mesh in ob_meshes: - if my_mesh.fbxArm: - file.write('\n\tConnect: "OO", "Deformer::Skin %s", "Model::%s"' % (my_mesh.fbxName, my_mesh.fbxName)) - - #for bonename, bone, obname, me, armob in ob_bones: - for my_bone in ob_bones: - for fbxMeshObName in my_bone.blenMeshes: # .keys() - file.write('\n\tConnect: "OO", "SubDeformer::Cluster %s %s", "Deformer::Skin %s"' % (fbxMeshObName, my_bone.fbxName, fbxMeshObName)) - - # limbs -> deformers - # for bonename, bone, obname, me, armob in ob_bones: - for my_bone in ob_bones: - for fbxMeshObName in my_bone.blenMeshes: # .keys() - file.write('\n\tConnect: "OO", "Model::%s", "SubDeformer::Cluster %s %s"' % (my_bone.fbxName, fbxMeshObName, my_bone.fbxName)) - - - #for bonename, bone, obname, me, armob in ob_bones: - for my_bone in ob_bones: - # Always parent to armature now - if my_bone.parent: - file.write('\n\tConnect: "OO", "Model::%s", "Model::%s"' % (my_bone.fbxName, my_bone.parent.fbxName) ) - else: - # the armature object is written as an empty and all root level bones connect to it - file.write('\n\tConnect: "OO", "Model::%s", "Model::%s"' % (my_bone.fbxName, my_bone.fbxArm.fbxName) ) - - # groups - if groups: - for ob_generic in ob_all_typegroups: - for ob_base in ob_generic: - for fbxGroupName in ob_base.fbxGroupNames: - file.write('\n\tConnect: "OO", "Model::%s", "GroupSelection::%s"' % (ob_base.fbxName, fbxGroupName)) - - for my_arm in ob_arms: - file.write('\n\tConnect: "OO", "Model::%s", "Model::blend_root"' % my_arm.fbxName) - - file.write('\n}') - - - # Needed for scene footer as well as animation - render = sce.render_data + # NOTE - The FBX SDK dosnt care about the order but some importers DO! + # for instance, defining the material->mesh connection + # before the mesh->blend_root crashes cinema4d + + + # write the fake root node + file.write('\n\tConnect: "OO", "Model::blend_root", "Model::Scene"') + + for ob_generic in ob_all_typegroups: # all blender 'Object's we support + for my_ob in ob_generic: + if my_ob.fbxParent: + file.write('\n\tConnect: "OO", "Model::%s", "Model::%s"' % (my_ob.fbxName, my_ob.fbxParent.fbxName)) + else: + file.write('\n\tConnect: "OO", "Model::%s", "Model::blend_root"' % my_ob.fbxName) + + if materials: + for my_mesh in ob_meshes: + # Connect all materials to all objects, not good form but ok for now. + for mat, tex in my_mesh.blenMaterials: + if mat: mat_name = mat.name + else: mat_name = None + + if tex: tex_name = tex.name + else: tex_name = None + + file.write('\n\tConnect: "OO", "Material::%s", "Model::%s"' % (sane_name_mapping_mat[mat_name, tex_name], my_mesh.fbxName)) + + if textures: + for my_mesh in ob_meshes: + if my_mesh.blenTextures: + # file.write('\n\tConnect: "OO", "Texture::_empty_", "Model::%s"' % my_mesh.fbxName) + for tex in my_mesh.blenTextures: + if tex: + file.write('\n\tConnect: "OO", "Texture::%s", "Model::%s"' % (sane_name_mapping_tex[tex.name], my_mesh.fbxName)) + + for texname, tex in textures: + file.write('\n\tConnect: "OO", "Video::%s", "Texture::%s"' % (texname, texname)) + + for my_mesh in ob_meshes: + if my_mesh.fbxArm: + file.write('\n\tConnect: "OO", "Deformer::Skin %s", "Model::%s"' % (my_mesh.fbxName, my_mesh.fbxName)) + + #for bonename, bone, obname, me, armob in ob_bones: + for my_bone in ob_bones: + for fbxMeshObName in my_bone.blenMeshes: # .keys() + file.write('\n\tConnect: "OO", "SubDeformer::Cluster %s %s", "Deformer::Skin %s"' % (fbxMeshObName, my_bone.fbxName, fbxMeshObName)) + + # limbs -> deformers + # for bonename, bone, obname, me, armob in ob_bones: + for my_bone in ob_bones: + for fbxMeshObName in my_bone.blenMeshes: # .keys() + file.write('\n\tConnect: "OO", "Model::%s", "SubDeformer::Cluster %s %s"' % (my_bone.fbxName, fbxMeshObName, my_bone.fbxName)) + + + #for bonename, bone, obname, me, armob in ob_bones: + for my_bone in ob_bones: + # Always parent to armature now + if my_bone.parent: + file.write('\n\tConnect: "OO", "Model::%s", "Model::%s"' % (my_bone.fbxName, my_bone.parent.fbxName) ) + else: + # the armature object is written as an empty and all root level bones connect to it + file.write('\n\tConnect: "OO", "Model::%s", "Model::%s"' % (my_bone.fbxName, my_bone.fbxArm.fbxName) ) + + # groups + if groups: + for ob_generic in ob_all_typegroups: + for ob_base in ob_generic: + for fbxGroupName in ob_base.fbxGroupNames: + file.write('\n\tConnect: "OO", "Model::%s", "GroupSelection::%s"' % (ob_base.fbxName, fbxGroupName)) + + for my_arm in ob_arms: + file.write('\n\tConnect: "OO", "Model::%s", "Model::blend_root"' % my_arm.fbxName) + + file.write('\n}') + + + # Needed for scene footer as well as animation + render = sce.render_data # render = sce.render - - # from the FBX sdk - #define KTIME_ONE_SECOND KTime (K_LONGLONG(46186158000)) - def fbx_time(t): - # 0.5 + val is the same as rounding. - return int(0.5 + ((t/fps) * 46186158000)) - - fps = float(render.fps) - start = sce.start_frame + + # from the FBX sdk + #define KTIME_ONE_SECOND KTime (K_LONGLONG(46186158000)) + def fbx_time(t): + # 0.5 + val is the same as rounding. + return int(0.5 + ((t/fps) * 46186158000)) + + fps = float(render.fps) + start = sce.start_frame # start = render.sFrame - end = sce.end_frame + end = sce.end_frame # end = render.eFrame - if end < start: start, end = end, start - if start==end: ANIM_ENABLE = False - - # animations for these object types - ob_anim_lists = ob_bones, ob_meshes, ob_null, ob_cameras, ob_lights, ob_arms - - if ANIM_ENABLE and [tmp for tmp in ob_anim_lists if tmp]: - - frame_orig = sce.current_frame + if end < start: start, end = end, start + if start==end: ANIM_ENABLE = False + + # animations for these object types + ob_anim_lists = ob_bones, ob_meshes, ob_null, ob_cameras, ob_lights, ob_arms + + if ANIM_ENABLE and [tmp for tmp in ob_anim_lists if tmp]: + + frame_orig = sce.current_frame # frame_orig = Blender.Get('curframe') - - if ANIM_OPTIMIZE: - ANIM_OPTIMIZE_PRECISSION_FLOAT = 0.1 ** ANIM_OPTIMIZE_PRECISSION - - # default action, when no actions are avaioable - tmp_actions = [None] # None is the default action - blenActionDefault = None - action_lastcompat = None - # instead of tagging - tagged_actions = [] - - if ANIM_ACTION_ALL: + if ANIM_OPTIMIZE: + ANIM_OPTIMIZE_PRECISSION_FLOAT = 0.1 ** ANIM_OPTIMIZE_PRECISSION + + # default action, when no actions are avaioable + tmp_actions = [None] # None is the default action + blenActionDefault = None + action_lastcompat = None + + # instead of tagging + tagged_actions = [] + + if ANIM_ACTION_ALL: # bpy.data.actions.tag = False - tmp_actions = list(bpy.data.actions) - - - # find which actions are compatible with the armatures - # blenActions is not yet initialized so do it now. - tmp_act_count = 0 - for my_arm in ob_arms: - - # get the default name - if not blenActionDefault: - blenActionDefault = my_arm.blenAction - - arm_bone_names = set([my_bone.blenName for my_bone in my_arm.fbxBones]) - - for action in tmp_actions: + tmp_actions = list(bpy.data.actions) - action_chan_names = arm_bone_names.intersection( set([g.name for g in action.groups]) ) + + # find which actions are compatible with the armatures + # blenActions is not yet initialized so do it now. + tmp_act_count = 0 + for my_arm in ob_arms: + + # get the default name + if not blenActionDefault: + blenActionDefault = my_arm.blenAction + + arm_bone_names = set([my_bone.blenName for my_bone in my_arm.fbxBones]) + + for action in tmp_actions: + + action_chan_names = arm_bone_names.intersection( set([g.name for g in action.groups]) ) # action_chan_names = arm_bone_names.intersection( set(action.getChannelNames()) ) - - if action_chan_names: # at least one channel matches. - my_arm.blenActionList.append(action) - tagged_actions.append(action.name) + + if action_chan_names: # at least one channel matches. + my_arm.blenActionList.append(action) + tagged_actions.append(action.name) # action.tag = True - tmp_act_count += 1 - - # incase there is no actions applied to armatures - action_lastcompat = action - - if tmp_act_count: - # unlikely to ever happen but if no actions applied to armatures, just use the last compatible armature. - if not blenActionDefault: - blenActionDefault = action_lastcompat - - del action_lastcompat - - file.write(''' + tmp_act_count += 1 + + # incase there is no actions applied to armatures + action_lastcompat = action + + if tmp_act_count: + # unlikely to ever happen but if no actions applied to armatures, just use the last compatible armature. + if not blenActionDefault: + blenActionDefault = action_lastcompat + + del action_lastcompat + + file.write(''' ;Takes and animation section ;---------------------------------------------------- Takes: {''') - - if blenActionDefault: - file.write('\n\tCurrent: "%s"' % sane_takename(blenActionDefault)) - else: - file.write('\n\tCurrent: "Default Take"') - - for blenAction in tmp_actions: - # we have tagged all actious that are used be selected armatures - if blenAction: - if blenAction.name in tagged_actions: -# if blenAction.tag: - print('\taction: "%s" exporting...' % blenAction.name) - else: - print('\taction: "%s" has no armature using it, skipping' % blenAction.name) - continue - - if blenAction == None: - # Warning, this only accounts for tmp_actions being [None] - file.write('\n\tTake: "Default Take" {') - act_start = start - act_end = end - else: - # use existing name - if blenAction == blenActionDefault: # have we alredy got the name - file.write('\n\tTake: "%s" {' % sane_name_mapping_take[blenAction.name]) - else: - file.write('\n\tTake: "%s" {' % sane_takename(blenAction)) - act_start, act_end = blenAction.get_frame_range() + if blenActionDefault: + file.write('\n\tCurrent: "%s"' % sane_takename(blenActionDefault)) + else: + file.write('\n\tCurrent: "Default Take"') + + for blenAction in tmp_actions: + # we have tagged all actious that are used be selected armatures + if blenAction: + if blenAction.name in tagged_actions: +# if blenAction.tag: + print('\taction: "%s" exporting...' % blenAction.name) + else: + print('\taction: "%s" has no armature using it, skipping' % blenAction.name) + continue + + if blenAction == None: + # Warning, this only accounts for tmp_actions being [None] + file.write('\n\tTake: "Default Take" {') + act_start = start + act_end = end + else: + # use existing name + if blenAction == blenActionDefault: # have we alredy got the name + file.write('\n\tTake: "%s" {' % sane_name_mapping_take[blenAction.name]) + else: + file.write('\n\tTake: "%s" {' % sane_takename(blenAction)) + + act_start, act_end = blenAction.get_frame_range() # tmp = blenAction.getFrameNumbers() # if tmp: # act_start = min(tmp) @@ -2803,262 +2805,262 @@ Takes: {''') # # when an action has no length # act_start = start # act_end = end - - # Set the action active - for my_bone in ob_arms: - if blenAction in my_bone.blenActionList: - ob.action = blenAction - # print '\t\tSetting Action!', blenAction - # sce.update(1) - - file.write('\n\t\tFileName: "Default_Take.tak"') # ??? - not sure why this is needed - file.write('\n\t\tLocalTime: %i,%i' % (fbx_time(act_start-1), fbx_time(act_end-1))) # ??? - not sure why this is needed - file.write('\n\t\tReferenceTime: %i,%i' % (fbx_time(act_start-1), fbx_time(act_end-1))) # ??? - not sure why this is needed - - file.write(''' - ;Models animation - ;----------------------------------------------------''') - - - # set pose data for all bones - # do this here incase the action changes - ''' - for my_bone in ob_bones: - my_bone.flushAnimData() - ''' - i = act_start - while i <= act_end: - sce.set_frame(i) + # Set the action active + for my_bone in ob_arms: + if blenAction in my_bone.blenActionList: + ob.action = blenAction + # print '\t\tSetting Action!', blenAction + # sce.update(1) + + file.write('\n\t\tFileName: "Default_Take.tak"') # ??? - not sure why this is needed + file.write('\n\t\tLocalTime: %i,%i' % (fbx_time(act_start-1), fbx_time(act_end-1))) # ??? - not sure why this is needed + file.write('\n\t\tReferenceTime: %i,%i' % (fbx_time(act_start-1), fbx_time(act_end-1))) # ??? - not sure why this is needed + + file.write(''' + + ;Models animation + ;----------------------------------------------------''') + + + # set pose data for all bones + # do this here incase the action changes + ''' + for my_bone in ob_bones: + my_bone.flushAnimData() + ''' + i = act_start + while i <= act_end: + sce.set_frame(i) # Blender.Set('curframe', i) - for ob_generic in ob_anim_lists: - for my_ob in ob_generic: - #Blender.Window.RedrawAll() - if ob_generic == ob_meshes and my_ob.fbxArm: - # We cant animate armature meshes! - pass - else: - my_ob.setPoseFrame(i) - - i+=1 - - - #for bonename, bone, obname, me, armob in ob_bones: - for ob_generic in (ob_bones, ob_meshes, ob_null, ob_cameras, ob_lights, ob_arms): - - for my_ob in ob_generic: - - if ob_generic == ob_meshes and my_ob.fbxArm: - # do nothing, - pass - else: - - file.write('\n\t\tModel: "Model::%s" {' % my_ob.fbxName) # ??? - not sure why this is needed - file.write('\n\t\t\tVersion: 1.1') - file.write('\n\t\t\tChannel: "Transform" {') - - context_bone_anim_mats = [ (my_ob.getAnimParRelMatrix(frame), my_ob.getAnimParRelMatrixRot(frame)) for frame in range(act_start, act_end+1) ] - - # ---------------- - # ---------------- - for TX_LAYER, TX_CHAN in enumerate('TRS'): # transform, rotate, scale - - if TX_CHAN=='T': context_bone_anim_vecs = [mtx[0].translationPart() for mtx in context_bone_anim_mats] - elif TX_CHAN=='S': context_bone_anim_vecs = [mtx[0].scalePart() for mtx in context_bone_anim_mats] - elif TX_CHAN=='R': - # Was.... - # elif TX_CHAN=='R': context_bone_anim_vecs = [mtx[1].toEuler() for mtx in context_bone_anim_mats] - # - # ...but we need to use the previous euler for compatible conversion. - context_bone_anim_vecs = [] - prev_eul = None - for mtx in context_bone_anim_mats: - if prev_eul: prev_eul = mtx[1].toEuler(prev_eul) - else: prev_eul = mtx[1].toEuler() - context_bone_anim_vecs.append(eulerRadToDeg(prev_eul)) -# context_bone_anim_vecs.append(prev_eul) - - file.write('\n\t\t\t\tChannel: "%s" {' % TX_CHAN) # translation - - for i in range(3): - # Loop on each axis of the bone - file.write('\n\t\t\t\t\tChannel: "%s" {'% ('XYZ'[i])) # translation - file.write('\n\t\t\t\t\t\tDefault: %.15f' % context_bone_anim_vecs[0][i] ) - file.write('\n\t\t\t\t\t\tKeyVer: 4005') - - if not ANIM_OPTIMIZE: - # Just write all frames, simple but in-eficient - file.write('\n\t\t\t\t\t\tKeyCount: %i' % (1 + act_end - act_start)) - file.write('\n\t\t\t\t\t\tKey: ') - frame = act_start - while frame <= act_end: - if frame!=act_start: - file.write(',') - - # Curve types are 'C,n' for constant, 'L' for linear - # C,n is for bezier? - linear is best for now so we can do simple keyframe removal - file.write('\n\t\t\t\t\t\t\t%i,%.15f,L' % (fbx_time(frame-1), context_bone_anim_vecs[frame-act_start][i] )) - frame+=1 - else: - # remove unneeded keys, j is the frame, needed when some frames are removed. - context_bone_anim_keys = [ (vec[i], j) for j, vec in enumerate(context_bone_anim_vecs) ] - - # last frame to fisrt frame, missing 1 frame on either side. - # removeing in a backwards loop is faster - #for j in xrange( (act_end-act_start)-1, 0, -1 ): - # j = (act_end-act_start)-1 - j = len(context_bone_anim_keys)-2 - while j > 0 and len(context_bone_anim_keys) > 2: - # print j, len(context_bone_anim_keys) - # Is this key the same as the ones next to it? - - # co-linear horizontal... - if abs(context_bone_anim_keys[j][0] - context_bone_anim_keys[j-1][0]) < ANIM_OPTIMIZE_PRECISSION_FLOAT and\ - abs(context_bone_anim_keys[j][0] - context_bone_anim_keys[j+1][0]) < ANIM_OPTIMIZE_PRECISSION_FLOAT: - - del context_bone_anim_keys[j] - - else: - frame_range = float(context_bone_anim_keys[j+1][1] - context_bone_anim_keys[j-1][1]) - frame_range_fac1 = (context_bone_anim_keys[j+1][1] - context_bone_anim_keys[j][1]) / frame_range - frame_range_fac2 = 1.0 - frame_range_fac1 - - if abs(((context_bone_anim_keys[j-1][0]*frame_range_fac1 + context_bone_anim_keys[j+1][0]*frame_range_fac2)) - context_bone_anim_keys[j][0]) < ANIM_OPTIMIZE_PRECISSION_FLOAT: - del context_bone_anim_keys[j] - else: - j-=1 - - # keep the index below the list length - if j > len(context_bone_anim_keys)-2: - j = len(context_bone_anim_keys)-2 - - if len(context_bone_anim_keys) == 2 and context_bone_anim_keys[0][0] == context_bone_anim_keys[1][0]: - # This axis has no moton, its okay to skip KeyCount and Keys in this case - pass - else: - # We only need to write these if there is at least one - file.write('\n\t\t\t\t\t\tKeyCount: %i' % len(context_bone_anim_keys)) - file.write('\n\t\t\t\t\t\tKey: ') - for val, frame in context_bone_anim_keys: - if frame != context_bone_anim_keys[0][1]: # not the first - file.write(',') - # frame is alredy one less then blenders frame - file.write('\n\t\t\t\t\t\t\t%i,%.15f,L' % (fbx_time(frame), val )) - - if i==0: file.write('\n\t\t\t\t\t\tColor: 1,0,0') - elif i==1: file.write('\n\t\t\t\t\t\tColor: 0,1,0') - elif i==2: file.write('\n\t\t\t\t\t\tColor: 0,0,1') - - file.write('\n\t\t\t\t\t}') - file.write('\n\t\t\t\t\tLayerType: %i' % (TX_LAYER+1) ) - file.write('\n\t\t\t\t}') - - # --------------- - - file.write('\n\t\t\t}') - file.write('\n\t\t}') - - # end the take - file.write('\n\t}') - - # end action loop. set original actions - # do this after every loop incase actions effect eachother. - for my_bone in ob_arms: - my_bone.blenObject.action = my_bone.blenAction - - file.write('\n}') + for ob_generic in ob_anim_lists: + for my_ob in ob_generic: + #Blender.Window.RedrawAll() + if ob_generic == ob_meshes and my_ob.fbxArm: + # We cant animate armature meshes! + pass + else: + my_ob.setPoseFrame(i) - sce.set_frame(frame_orig) + i+=1 + + + #for bonename, bone, obname, me, armob in ob_bones: + for ob_generic in (ob_bones, ob_meshes, ob_null, ob_cameras, ob_lights, ob_arms): + + for my_ob in ob_generic: + + if ob_generic == ob_meshes and my_ob.fbxArm: + # do nothing, + pass + else: + + file.write('\n\t\tModel: "Model::%s" {' % my_ob.fbxName) # ??? - not sure why this is needed + file.write('\n\t\t\tVersion: 1.1') + file.write('\n\t\t\tChannel: "Transform" {') + + context_bone_anim_mats = [ (my_ob.getAnimParRelMatrix(frame), my_ob.getAnimParRelMatrixRot(frame)) for frame in range(act_start, act_end+1) ] + + # ---------------- + # ---------------- + for TX_LAYER, TX_CHAN in enumerate('TRS'): # transform, rotate, scale + + if TX_CHAN=='T': context_bone_anim_vecs = [mtx[0].translationPart() for mtx in context_bone_anim_mats] + elif TX_CHAN=='S': context_bone_anim_vecs = [mtx[0].scalePart() for mtx in context_bone_anim_mats] + elif TX_CHAN=='R': + # Was.... + # elif TX_CHAN=='R': context_bone_anim_vecs = [mtx[1].toEuler() for mtx in context_bone_anim_mats] + # + # ...but we need to use the previous euler for compatible conversion. + context_bone_anim_vecs = [] + prev_eul = None + for mtx in context_bone_anim_mats: + if prev_eul: prev_eul = mtx[1].toEuler(prev_eul) + else: prev_eul = mtx[1].toEuler() + context_bone_anim_vecs.append(eulerRadToDeg(prev_eul)) +# context_bone_anim_vecs.append(prev_eul) + + file.write('\n\t\t\t\tChannel: "%s" {' % TX_CHAN) # translation + + for i in range(3): + # Loop on each axis of the bone + file.write('\n\t\t\t\t\tChannel: "%s" {'% ('XYZ'[i])) # translation + file.write('\n\t\t\t\t\t\tDefault: %.15f' % context_bone_anim_vecs[0][i] ) + file.write('\n\t\t\t\t\t\tKeyVer: 4005') + + if not ANIM_OPTIMIZE: + # Just write all frames, simple but in-eficient + file.write('\n\t\t\t\t\t\tKeyCount: %i' % (1 + act_end - act_start)) + file.write('\n\t\t\t\t\t\tKey: ') + frame = act_start + while frame <= act_end: + if frame!=act_start: + file.write(',') + + # Curve types are 'C,n' for constant, 'L' for linear + # C,n is for bezier? - linear is best for now so we can do simple keyframe removal + file.write('\n\t\t\t\t\t\t\t%i,%.15f,L' % (fbx_time(frame-1), context_bone_anim_vecs[frame-act_start][i] )) + frame+=1 + else: + # remove unneeded keys, j is the frame, needed when some frames are removed. + context_bone_anim_keys = [ (vec[i], j) for j, vec in enumerate(context_bone_anim_vecs) ] + + # last frame to fisrt frame, missing 1 frame on either side. + # removeing in a backwards loop is faster + #for j in xrange( (act_end-act_start)-1, 0, -1 ): + # j = (act_end-act_start)-1 + j = len(context_bone_anim_keys)-2 + while j > 0 and len(context_bone_anim_keys) > 2: + # print j, len(context_bone_anim_keys) + # Is this key the same as the ones next to it? + + # co-linear horizontal... + if abs(context_bone_anim_keys[j][0] - context_bone_anim_keys[j-1][0]) < ANIM_OPTIMIZE_PRECISSION_FLOAT and\ + abs(context_bone_anim_keys[j][0] - context_bone_anim_keys[j+1][0]) < ANIM_OPTIMIZE_PRECISSION_FLOAT: + + del context_bone_anim_keys[j] + + else: + frame_range = float(context_bone_anim_keys[j+1][1] - context_bone_anim_keys[j-1][1]) + frame_range_fac1 = (context_bone_anim_keys[j+1][1] - context_bone_anim_keys[j][1]) / frame_range + frame_range_fac2 = 1.0 - frame_range_fac1 + + if abs(((context_bone_anim_keys[j-1][0]*frame_range_fac1 + context_bone_anim_keys[j+1][0]*frame_range_fac2)) - context_bone_anim_keys[j][0]) < ANIM_OPTIMIZE_PRECISSION_FLOAT: + del context_bone_anim_keys[j] + else: + j-=1 + + # keep the index below the list length + if j > len(context_bone_anim_keys)-2: + j = len(context_bone_anim_keys)-2 + + if len(context_bone_anim_keys) == 2 and context_bone_anim_keys[0][0] == context_bone_anim_keys[1][0]: + # This axis has no moton, its okay to skip KeyCount and Keys in this case + pass + else: + # We only need to write these if there is at least one + file.write('\n\t\t\t\t\t\tKeyCount: %i' % len(context_bone_anim_keys)) + file.write('\n\t\t\t\t\t\tKey: ') + for val, frame in context_bone_anim_keys: + if frame != context_bone_anim_keys[0][1]: # not the first + file.write(',') + # frame is alredy one less then blenders frame + file.write('\n\t\t\t\t\t\t\t%i,%.15f,L' % (fbx_time(frame), val )) + + if i==0: file.write('\n\t\t\t\t\t\tColor: 1,0,0') + elif i==1: file.write('\n\t\t\t\t\t\tColor: 0,1,0') + elif i==2: file.write('\n\t\t\t\t\t\tColor: 0,0,1') + + file.write('\n\t\t\t\t\t}') + file.write('\n\t\t\t\t\tLayerType: %i' % (TX_LAYER+1) ) + file.write('\n\t\t\t\t}') + + # --------------- + + file.write('\n\t\t\t}') + file.write('\n\t\t}') + + # end the take + file.write('\n\t}') + + # end action loop. set original actions + # do this after every loop incase actions effect eachother. + for my_bone in ob_arms: + my_bone.blenObject.action = my_bone.blenAction + + file.write('\n}') + + sce.set_frame(frame_orig) # Blender.Set('curframe', frame_orig) - - else: - # no animation - file.write('\n;Takes and animation section') - file.write('\n;----------------------------------------------------') - file.write('\n') - file.write('\nTakes: {') - file.write('\n\tCurrent: ""') - file.write('\n}') - - - # write meshes animation - #for obname, ob, mtx, me, mats, arm, armname in ob_meshes: - - - # Clear mesh data Only when writing with modifiers applied - for me in meshes_to_clear: - bpy.data.remove_mesh(me) + + else: + # no animation + file.write('\n;Takes and animation section') + file.write('\n;----------------------------------------------------') + file.write('\n') + file.write('\nTakes: {') + file.write('\n\tCurrent: ""') + file.write('\n}') + + + # write meshes animation + #for obname, ob, mtx, me, mats, arm, armname in ob_meshes: + + + # Clear mesh data Only when writing with modifiers applied + for me in meshes_to_clear: + bpy.data.remove_mesh(me) # me.verts = None - - # --------------------------- Footer - if world: - m = world.mist - has_mist = m.enabled + + # --------------------------- Footer + if world: + m = world.mist + has_mist = m.enabled # has_mist = world.mode & 1 - mist_intense = m.intensity - mist_start = m.start - mist_end = m.depth - mist_height = m.height + mist_intense = m.intensity + mist_start = m.start + mist_end = m.depth + mist_height = m.height # mist_intense, mist_start, mist_end, mist_height = world.mist - world_hor = world.horizon_color + world_hor = world.horizon_color # world_hor = world.hor - else: - has_mist = mist_intense = mist_start = mist_end = mist_height = 0 - world_hor = 0,0,0 - - file.write('\n;Version 5 settings') - file.write('\n;------------------------------------------------------------------') - file.write('\n') - file.write('\nVersion5: {') - file.write('\n\tAmbientRenderSettings: {') - file.write('\n\t\tVersion: 101') - file.write('\n\t\tAmbientLightColor: %.1f,%.1f,%.1f,0' % tuple(world_amb)) - file.write('\n\t}') - file.write('\n\tFogOptions: {') - file.write('\n\t\tFlogEnable: %i' % has_mist) - file.write('\n\t\tFogMode: 0') - file.write('\n\t\tFogDensity: %.3f' % mist_intense) - file.write('\n\t\tFogStart: %.3f' % mist_start) - file.write('\n\t\tFogEnd: %.3f' % mist_end) - file.write('\n\t\tFogColor: %.1f,%.1f,%.1f,1' % tuple(world_hor)) - file.write('\n\t}') - file.write('\n\tSettings: {') - file.write('\n\t\tFrameRate: "%i"' % int(fps)) - file.write('\n\t\tTimeFormat: 1') - file.write('\n\t\tSnapOnFrames: 0') - file.write('\n\t\tReferenceTimeIndex: -1') - file.write('\n\t\tTimeLineStartTime: %i' % fbx_time(start-1)) - file.write('\n\t\tTimeLineStopTime: %i' % fbx_time(end-1)) - file.write('\n\t}') - file.write('\n\tRendererSetting: {') - file.write('\n\t\tDefaultCamera: "Producer Perspective"') - file.write('\n\t\tDefaultViewingMode: 0') - file.write('\n\t}') - file.write('\n}') - file.write('\n') - - # Incase sombody imports this, clean up by clearing global dicts - sane_name_mapping_ob.clear() - sane_name_mapping_mat.clear() - sane_name_mapping_tex.clear() - - ob_arms[:] = [] - ob_bones[:] = [] - ob_cameras[:] = [] - ob_lights[:] = [] - ob_meshes[:] = [] - ob_null[:] = [] - - - # copy images if enabled + else: + has_mist = mist_intense = mist_start = mist_end = mist_height = 0 + world_hor = 0,0,0 + + file.write('\n;Version 5 settings') + file.write('\n;------------------------------------------------------------------') + file.write('\n') + file.write('\nVersion5: {') + file.write('\n\tAmbientRenderSettings: {') + file.write('\n\t\tVersion: 101') + file.write('\n\t\tAmbientLightColor: %.1f,%.1f,%.1f,0' % tuple(world_amb)) + file.write('\n\t}') + file.write('\n\tFogOptions: {') + file.write('\n\t\tFlogEnable: %i' % has_mist) + file.write('\n\t\tFogMode: 0') + file.write('\n\t\tFogDensity: %.3f' % mist_intense) + file.write('\n\t\tFogStart: %.3f' % mist_start) + file.write('\n\t\tFogEnd: %.3f' % mist_end) + file.write('\n\t\tFogColor: %.1f,%.1f,%.1f,1' % tuple(world_hor)) + file.write('\n\t}') + file.write('\n\tSettings: {') + file.write('\n\t\tFrameRate: "%i"' % int(fps)) + file.write('\n\t\tTimeFormat: 1') + file.write('\n\t\tSnapOnFrames: 0') + file.write('\n\t\tReferenceTimeIndex: -1') + file.write('\n\t\tTimeLineStartTime: %i' % fbx_time(start-1)) + file.write('\n\t\tTimeLineStopTime: %i' % fbx_time(end-1)) + file.write('\n\t}') + file.write('\n\tRendererSetting: {') + file.write('\n\t\tDefaultCamera: "Producer Perspective"') + file.write('\n\t\tDefaultViewingMode: 0') + file.write('\n\t}') + file.write('\n}') + file.write('\n') + + # Incase sombody imports this, clean up by clearing global dicts + sane_name_mapping_ob.clear() + sane_name_mapping_mat.clear() + sane_name_mapping_tex.clear() + + ob_arms[:] = [] + ob_bones[:] = [] + ob_cameras[:] = [] + ob_lights[:] = [] + ob_meshes[:] = [] + ob_null[:] = [] + + + # copy images if enabled # if EXP_IMAGE_COPY: # # copy_images( basepath, [ tex[1] for tex in textures if tex[1] != None ]) -# bpy.util.copy_images( [ tex[1] for tex in textures if tex[1] != None ], basepath) - - print('export finished in %.4f sec.' % (time.clock() - start_time)) +# bpy.util.copy_images( [ tex[1] for tex in textures if tex[1] != None ], basepath) + + print('export finished in %.4f sec.' % (time.clock() - start_time)) # print 'export finished in %.4f sec.' % (Blender.sys.time() - start_time) - return True - + return True + # -------------------------------------------- # UI Function - not a part of the exporter. @@ -3077,46 +3079,46 @@ def do_redraw(e,v): GLOBALS['EVENT'] = e # toggle between these 2, only allow one on at once def do_obs_sel(e,v): - GLOBALS['EVENT'] = e - GLOBALS['EXP_OBS_SCENE'].val = 0 - GLOBALS['EXP_OBS_SELECTED'].val = 1 + GLOBALS['EVENT'] = e + GLOBALS['EXP_OBS_SCENE'].val = 0 + GLOBALS['EXP_OBS_SELECTED'].val = 1 def do_obs_sce(e,v): - GLOBALS['EVENT'] = e - GLOBALS['EXP_OBS_SCENE'].val = 1 - GLOBALS['EXP_OBS_SELECTED'].val = 0 + GLOBALS['EVENT'] = e + GLOBALS['EXP_OBS_SCENE'].val = 1 + GLOBALS['EXP_OBS_SELECTED'].val = 0 def do_batch_type_grp(e,v): - GLOBALS['EVENT'] = e - GLOBALS['BATCH_GROUP'].val = 1 - GLOBALS['BATCH_SCENE'].val = 0 + GLOBALS['EVENT'] = e + GLOBALS['BATCH_GROUP'].val = 1 + GLOBALS['BATCH_SCENE'].val = 0 def do_batch_type_sce(e,v): - GLOBALS['EVENT'] = e - GLOBALS['BATCH_GROUP'].val = 0 - GLOBALS['BATCH_SCENE'].val = 1 + GLOBALS['EVENT'] = e + GLOBALS['BATCH_GROUP'].val = 0 + GLOBALS['BATCH_SCENE'].val = 1 def do_anim_act_all(e,v): - GLOBALS['EVENT'] = e - GLOBALS['ANIM_ACTION_ALL'][0].val = 1 - GLOBALS['ANIM_ACTION_ALL'][1].val = 0 + GLOBALS['EVENT'] = e + GLOBALS['ANIM_ACTION_ALL'][0].val = 1 + GLOBALS['ANIM_ACTION_ALL'][1].val = 0 def do_anim_act_cur(e,v): - if GLOBALS['BATCH_ENABLE'].val and GLOBALS['BATCH_GROUP'].val: - Draw.PupMenu('Warning%t|Cant use this with batch export group option') - else: - GLOBALS['EVENT'] = e - GLOBALS['ANIM_ACTION_ALL'][0].val = 0 - GLOBALS['ANIM_ACTION_ALL'][1].val = 1 + if GLOBALS['BATCH_ENABLE'].val and GLOBALS['BATCH_GROUP'].val: + Draw.PupMenu('Warning%t|Cant use this with batch export group option') + else: + GLOBALS['EVENT'] = e + GLOBALS['ANIM_ACTION_ALL'][0].val = 0 + GLOBALS['ANIM_ACTION_ALL'][1].val = 1 def fbx_ui_exit(e,v): - GLOBALS['EVENT'] = e + GLOBALS['EVENT'] = e def do_help(e,v): url = 'http://wiki.blender.org/index.php/Scripts/Manual/Export/autodesk_fbx' print('Trying to open web browser with documentation at this address...') print('\t' + url) - + try: import webbrowser webbrowser.open(url) @@ -3124,312 +3126,312 @@ def do_help(e,v): Blender.Draw.PupMenu("Error%t|Opening a webbrowser requires a full python installation") print('...could not open a browser window.') - + # run when export is pressed #def fbx_ui_write(e,v): def fbx_ui_write(filename, context): - - # Dont allow overwriting files when saving normally - if not GLOBALS['BATCH_ENABLE'].val: - if not BPyMessages.Warning_SaveOver(filename): - return - - GLOBALS['EVENT'] = EVENT_EXIT - - # Keep the order the same as above for simplicity - # the [] is a dummy arg used for objects - - Blender.Window.WaitCursor(1) - - # Make the matrix - GLOBAL_MATRIX = mtx4_identity - GLOBAL_MATRIX[0][0] = GLOBAL_MATRIX[1][1] = GLOBAL_MATRIX[2][2] = GLOBALS['_SCALE'].val - if GLOBALS['_XROT90'].val: GLOBAL_MATRIX = GLOBAL_MATRIX * mtx4_x90n - if GLOBALS['_YROT90'].val: GLOBAL_MATRIX = GLOBAL_MATRIX * mtx4_y90n - if GLOBALS['_ZROT90'].val: GLOBAL_MATRIX = GLOBAL_MATRIX * mtx4_z90n - - ret = write(\ - filename, None,\ - context, - GLOBALS['EXP_OBS_SELECTED'].val,\ - GLOBALS['EXP_MESH'].val,\ - GLOBALS['EXP_MESH_APPLY_MOD'].val,\ - GLOBALS['EXP_MESH_HQ_NORMALS'].val,\ - GLOBALS['EXP_ARMATURE'].val,\ - GLOBALS['EXP_LAMP'].val,\ - GLOBALS['EXP_CAMERA'].val,\ - GLOBALS['EXP_EMPTY'].val,\ - GLOBALS['EXP_IMAGE_COPY'].val,\ - GLOBAL_MATRIX,\ - GLOBALS['ANIM_ENABLE'].val,\ - GLOBALS['ANIM_OPTIMIZE'].val,\ - GLOBALS['ANIM_OPTIMIZE_PRECISSION'].val,\ - GLOBALS['ANIM_ACTION_ALL'][0].val,\ - GLOBALS['BATCH_ENABLE'].val,\ - GLOBALS['BATCH_GROUP'].val,\ - GLOBALS['BATCH_SCENE'].val,\ - GLOBALS['BATCH_FILE_PREFIX'].val,\ - GLOBALS['BATCH_OWN_DIR'].val,\ - ) - - Blender.Window.WaitCursor(0) - GLOBALS.clear() - - if ret == False: - Draw.PupMenu('Error%t|Path cannot be written to!') + + # Dont allow overwriting files when saving normally + if not GLOBALS['BATCH_ENABLE'].val: + if not BPyMessages.Warning_SaveOver(filename): + return + + GLOBALS['EVENT'] = EVENT_EXIT + + # Keep the order the same as above for simplicity + # the [] is a dummy arg used for objects + + Blender.Window.WaitCursor(1) + + # Make the matrix + GLOBAL_MATRIX = mtx4_identity + GLOBAL_MATRIX[0][0] = GLOBAL_MATRIX[1][1] = GLOBAL_MATRIX[2][2] = GLOBALS['_SCALE'].val + if GLOBALS['_XROT90'].val: GLOBAL_MATRIX = GLOBAL_MATRIX * mtx4_x90n + if GLOBALS['_YROT90'].val: GLOBAL_MATRIX = GLOBAL_MATRIX * mtx4_y90n + if GLOBALS['_ZROT90'].val: GLOBAL_MATRIX = GLOBAL_MATRIX * mtx4_z90n + + ret = write(\ + filename, None,\ + context, + GLOBALS['EXP_OBS_SELECTED'].val,\ + GLOBALS['EXP_MESH'].val,\ + GLOBALS['EXP_MESH_APPLY_MOD'].val,\ + GLOBALS['EXP_MESH_HQ_NORMALS'].val,\ + GLOBALS['EXP_ARMATURE'].val,\ + GLOBALS['EXP_LAMP'].val,\ + GLOBALS['EXP_CAMERA'].val,\ + GLOBALS['EXP_EMPTY'].val,\ + GLOBALS['EXP_IMAGE_COPY'].val,\ + GLOBAL_MATRIX,\ + GLOBALS['ANIM_ENABLE'].val,\ + GLOBALS['ANIM_OPTIMIZE'].val,\ + GLOBALS['ANIM_OPTIMIZE_PRECISSION'].val,\ + GLOBALS['ANIM_ACTION_ALL'][0].val,\ + GLOBALS['BATCH_ENABLE'].val,\ + GLOBALS['BATCH_GROUP'].val,\ + GLOBALS['BATCH_SCENE'].val,\ + GLOBALS['BATCH_FILE_PREFIX'].val,\ + GLOBALS['BATCH_OWN_DIR'].val,\ + ) + + Blender.Window.WaitCursor(0) + GLOBALS.clear() + + if ret == False: + Draw.PupMenu('Error%t|Path cannot be written to!') def fbx_ui(): - # Only to center the UI - x,y = GLOBALS['MOUSE'] - x-=180; y-=0 # offset... just to get it centered - - Draw.Label('Export Objects...', x+20,y+165, 200, 20) - - if not GLOBALS['BATCH_ENABLE'].val: - Draw.BeginAlign() - GLOBALS['EXP_OBS_SELECTED'] = Draw.Toggle('Selected Objects', EVENT_REDRAW, x+20, y+145, 160, 20, GLOBALS['EXP_OBS_SELECTED'].val, 'Export selected objects on visible layers', do_obs_sel) - GLOBALS['EXP_OBS_SCENE'] = Draw.Toggle('Scene Objects', EVENT_REDRAW, x+180, y+145, 160, 20, GLOBALS['EXP_OBS_SCENE'].val, 'Export all objects in this scene', do_obs_sce) - Draw.EndAlign() - - Draw.BeginAlign() - GLOBALS['_SCALE'] = Draw.Number('Scale:', EVENT_NONE, x+20, y+120, 140, 20, GLOBALS['_SCALE'].val, 0.01, 1000.0, 'Scale all data, (Note! some imports dont support scaled armatures)') - GLOBALS['_XROT90'] = Draw.Toggle('Rot X90', EVENT_NONE, x+160, y+120, 60, 20, GLOBALS['_XROT90'].val, 'Rotate all objects 90 degrese about the X axis') - GLOBALS['_YROT90'] = Draw.Toggle('Rot Y90', EVENT_NONE, x+220, y+120, 60, 20, GLOBALS['_YROT90'].val, 'Rotate all objects 90 degrese about the Y axis') - GLOBALS['_ZROT90'] = Draw.Toggle('Rot Z90', EVENT_NONE, x+280, y+120, 60, 20, GLOBALS['_ZROT90'].val, 'Rotate all objects 90 degrese about the Z axis') - Draw.EndAlign() - - y -= 35 - - Draw.BeginAlign() - GLOBALS['EXP_EMPTY'] = Draw.Toggle('Empty', EVENT_NONE, x+20, y+120, 60, 20, GLOBALS['EXP_EMPTY'].val, 'Export empty objects') - GLOBALS['EXP_CAMERA'] = Draw.Toggle('Camera', EVENT_NONE, x+80, y+120, 60, 20, GLOBALS['EXP_CAMERA'].val, 'Export camera objects') - GLOBALS['EXP_LAMP'] = Draw.Toggle('Lamp', EVENT_NONE, x+140, y+120, 60, 20, GLOBALS['EXP_LAMP'].val, 'Export lamp objects') - GLOBALS['EXP_ARMATURE'] = Draw.Toggle('Armature', EVENT_NONE, x+200, y+120, 60, 20, GLOBALS['EXP_ARMATURE'].val, 'Export armature objects') - GLOBALS['EXP_MESH'] = Draw.Toggle('Mesh', EVENT_REDRAW, x+260, y+120, 80, 20, GLOBALS['EXP_MESH'].val, 'Export mesh objects', do_redraw) #, do_axis_z) - Draw.EndAlign() - - if GLOBALS['EXP_MESH'].val: - # below mesh but - Draw.BeginAlign() - GLOBALS['EXP_MESH_APPLY_MOD'] = Draw.Toggle('Modifiers', EVENT_NONE, x+260, y+100, 80, 20, GLOBALS['EXP_MESH_APPLY_MOD'].val, 'Apply modifiers to mesh objects') #, do_axis_z) - GLOBALS['EXP_MESH_HQ_NORMALS'] = Draw.Toggle('HQ Normals', EVENT_NONE, x+260, y+80, 80, 20, GLOBALS['EXP_MESH_HQ_NORMALS'].val, 'Generate high quality normals') #, do_axis_z) - Draw.EndAlign() - - GLOBALS['EXP_IMAGE_COPY'] = Draw.Toggle('Copy Image Files', EVENT_NONE, x+20, y+80, 160, 20, GLOBALS['EXP_IMAGE_COPY'].val, 'Copy image files to the destination path') #, do_axis_z) - - - Draw.Label('Export Armature Animation...', x+20,y+45, 300, 20) - - GLOBALS['ANIM_ENABLE'] = Draw.Toggle('Enable Animation', EVENT_REDRAW, x+20, y+25, 160, 20, GLOBALS['ANIM_ENABLE'].val, 'Export keyframe animation', do_redraw) - if GLOBALS['ANIM_ENABLE'].val: - Draw.BeginAlign() - GLOBALS['ANIM_OPTIMIZE'] = Draw.Toggle('Optimize Keyframes', EVENT_REDRAW, x+20, y+0, 160, 20, GLOBALS['ANIM_OPTIMIZE'].val, 'Remove double keyframes', do_redraw) - if GLOBALS['ANIM_OPTIMIZE'].val: - GLOBALS['ANIM_OPTIMIZE_PRECISSION'] = Draw.Number('Precission: ', EVENT_NONE, x+180, y+0, 160, 20, GLOBALS['ANIM_OPTIMIZE_PRECISSION'].val, 1, 16, 'Tolerence for comparing double keyframes (higher for greater accuracy)') - Draw.EndAlign() - - Draw.BeginAlign() - GLOBALS['ANIM_ACTION_ALL'][1] = Draw.Toggle('Current Action', EVENT_REDRAW, x+20, y-25, 160, 20, GLOBALS['ANIM_ACTION_ALL'][1].val, 'Use actions currently applied to the armatures (use scene start/end frame)', do_anim_act_cur) - GLOBALS['ANIM_ACTION_ALL'][0] = Draw.Toggle('All Actions', EVENT_REDRAW, x+180,y-25, 160, 20, GLOBALS['ANIM_ACTION_ALL'][0].val, 'Use all actions for armatures', do_anim_act_all) - Draw.EndAlign() - - - Draw.Label('Export Batch...', x+20,y-60, 300, 20) - GLOBALS['BATCH_ENABLE'] = Draw.Toggle('Enable Batch', EVENT_REDRAW, x+20, y-80, 160, 20, GLOBALS['BATCH_ENABLE'].val, 'Automate exporting multiple scenes or groups to files', do_redraw) - - if GLOBALS['BATCH_ENABLE'].val: - Draw.BeginAlign() - GLOBALS['BATCH_GROUP'] = Draw.Toggle('Group > File', EVENT_REDRAW, x+20, y-105, 160, 20, GLOBALS['BATCH_GROUP'].val, 'Export each group as an FBX file', do_batch_type_grp) - GLOBALS['BATCH_SCENE'] = Draw.Toggle('Scene > File', EVENT_REDRAW, x+180, y-105, 160, 20, GLOBALS['BATCH_SCENE'].val, 'Export each scene as an FBX file', do_batch_type_sce) - - # Own dir requires OS module - if os: - GLOBALS['BATCH_OWN_DIR'] = Draw.Toggle('Own Dir', EVENT_NONE, x+20, y-125, 80, 20, GLOBALS['BATCH_OWN_DIR'].val, 'Create a dir for each exported file') - GLOBALS['BATCH_FILE_PREFIX'] = Draw.String('Prefix: ', EVENT_NONE, x+100, y-125, 240, 20, GLOBALS['BATCH_FILE_PREFIX'].val, 64, 'Prefix each file with this name ') - else: - GLOBALS['BATCH_FILE_PREFIX'] = Draw.String('Prefix: ', EVENT_NONE, x+20, y-125, 320, 20, GLOBALS['BATCH_FILE_PREFIX'].val, 64, 'Prefix each file with this name ') - - - Draw.EndAlign() + # Only to center the UI + x,y = GLOBALS['MOUSE'] + x-=180; y-=0 # offset... just to get it centered - #y+=80 - - ''' - Draw.BeginAlign() - GLOBALS['FILENAME'] = Draw.String('path: ', EVENT_NONE, x+20, y-170, 300, 20, GLOBALS['FILENAME'].val, 64, 'Prefix each file with this name ') - Draw.PushButton('..', EVENT_FILESEL, x+320, y-170, 20, 20, 'Select the path', do_redraw) - ''' - # Until batch is added - # - - - #Draw.BeginAlign() - Draw.PushButton('Online Help', EVENT_REDRAW, x+20, y-160, 100, 20, 'Open online help in a browser window', do_help) - Draw.PushButton('Cancel', EVENT_EXIT, x+130, y-160, 100, 20, 'Exit the exporter', fbx_ui_exit) - Draw.PushButton('Export', EVENT_FILESEL, x+240, y-160, 100, 20, 'Export the fbx file', do_redraw) - - #Draw.PushButton('Export', EVENT_EXIT, x+180, y-160, 160, 20, 'Export the fbx file', fbx_ui_write) - #Draw.EndAlign() - - # exit when mouse out of the view? - # GLOBALS['EVENT'] = EVENT_EXIT + Draw.Label('Export Objects...', x+20,y+165, 200, 20) + + if not GLOBALS['BATCH_ENABLE'].val: + Draw.BeginAlign() + GLOBALS['EXP_OBS_SELECTED'] = Draw.Toggle('Selected Objects', EVENT_REDRAW, x+20, y+145, 160, 20, GLOBALS['EXP_OBS_SELECTED'].val, 'Export selected objects on visible layers', do_obs_sel) + GLOBALS['EXP_OBS_SCENE'] = Draw.Toggle('Scene Objects', EVENT_REDRAW, x+180, y+145, 160, 20, GLOBALS['EXP_OBS_SCENE'].val, 'Export all objects in this scene', do_obs_sce) + Draw.EndAlign() + + Draw.BeginAlign() + GLOBALS['_SCALE'] = Draw.Number('Scale:', EVENT_NONE, x+20, y+120, 140, 20, GLOBALS['_SCALE'].val, 0.01, 1000.0, 'Scale all data, (Note! some imports dont support scaled armatures)') + GLOBALS['_XROT90'] = Draw.Toggle('Rot X90', EVENT_NONE, x+160, y+120, 60, 20, GLOBALS['_XROT90'].val, 'Rotate all objects 90 degrese about the X axis') + GLOBALS['_YROT90'] = Draw.Toggle('Rot Y90', EVENT_NONE, x+220, y+120, 60, 20, GLOBALS['_YROT90'].val, 'Rotate all objects 90 degrese about the Y axis') + GLOBALS['_ZROT90'] = Draw.Toggle('Rot Z90', EVENT_NONE, x+280, y+120, 60, 20, GLOBALS['_ZROT90'].val, 'Rotate all objects 90 degrese about the Z axis') + Draw.EndAlign() + + y -= 35 + + Draw.BeginAlign() + GLOBALS['EXP_EMPTY'] = Draw.Toggle('Empty', EVENT_NONE, x+20, y+120, 60, 20, GLOBALS['EXP_EMPTY'].val, 'Export empty objects') + GLOBALS['EXP_CAMERA'] = Draw.Toggle('Camera', EVENT_NONE, x+80, y+120, 60, 20, GLOBALS['EXP_CAMERA'].val, 'Export camera objects') + GLOBALS['EXP_LAMP'] = Draw.Toggle('Lamp', EVENT_NONE, x+140, y+120, 60, 20, GLOBALS['EXP_LAMP'].val, 'Export lamp objects') + GLOBALS['EXP_ARMATURE'] = Draw.Toggle('Armature', EVENT_NONE, x+200, y+120, 60, 20, GLOBALS['EXP_ARMATURE'].val, 'Export armature objects') + GLOBALS['EXP_MESH'] = Draw.Toggle('Mesh', EVENT_REDRAW, x+260, y+120, 80, 20, GLOBALS['EXP_MESH'].val, 'Export mesh objects', do_redraw) #, do_axis_z) + Draw.EndAlign() + + if GLOBALS['EXP_MESH'].val: + # below mesh but + Draw.BeginAlign() + GLOBALS['EXP_MESH_APPLY_MOD'] = Draw.Toggle('Modifiers', EVENT_NONE, x+260, y+100, 80, 20, GLOBALS['EXP_MESH_APPLY_MOD'].val, 'Apply modifiers to mesh objects') #, do_axis_z) + GLOBALS['EXP_MESH_HQ_NORMALS'] = Draw.Toggle('HQ Normals', EVENT_NONE, x+260, y+80, 80, 20, GLOBALS['EXP_MESH_HQ_NORMALS'].val, 'Generate high quality normals') #, do_axis_z) + Draw.EndAlign() + + GLOBALS['EXP_IMAGE_COPY'] = Draw.Toggle('Copy Image Files', EVENT_NONE, x+20, y+80, 160, 20, GLOBALS['EXP_IMAGE_COPY'].val, 'Copy image files to the destination path') #, do_axis_z) + + + Draw.Label('Export Armature Animation...', x+20,y+45, 300, 20) + + GLOBALS['ANIM_ENABLE'] = Draw.Toggle('Enable Animation', EVENT_REDRAW, x+20, y+25, 160, 20, GLOBALS['ANIM_ENABLE'].val, 'Export keyframe animation', do_redraw) + if GLOBALS['ANIM_ENABLE'].val: + Draw.BeginAlign() + GLOBALS['ANIM_OPTIMIZE'] = Draw.Toggle('Optimize Keyframes', EVENT_REDRAW, x+20, y+0, 160, 20, GLOBALS['ANIM_OPTIMIZE'].val, 'Remove double keyframes', do_redraw) + if GLOBALS['ANIM_OPTIMIZE'].val: + GLOBALS['ANIM_OPTIMIZE_PRECISSION'] = Draw.Number('Precission: ', EVENT_NONE, x+180, y+0, 160, 20, GLOBALS['ANIM_OPTIMIZE_PRECISSION'].val, 1, 16, 'Tolerence for comparing double keyframes (higher for greater accuracy)') + Draw.EndAlign() + + Draw.BeginAlign() + GLOBALS['ANIM_ACTION_ALL'][1] = Draw.Toggle('Current Action', EVENT_REDRAW, x+20, y-25, 160, 20, GLOBALS['ANIM_ACTION_ALL'][1].val, 'Use actions currently applied to the armatures (use scene start/end frame)', do_anim_act_cur) + GLOBALS['ANIM_ACTION_ALL'][0] = Draw.Toggle('All Actions', EVENT_REDRAW, x+180,y-25, 160, 20, GLOBALS['ANIM_ACTION_ALL'][0].val, 'Use all actions for armatures', do_anim_act_all) + Draw.EndAlign() + + + Draw.Label('Export Batch...', x+20,y-60, 300, 20) + GLOBALS['BATCH_ENABLE'] = Draw.Toggle('Enable Batch', EVENT_REDRAW, x+20, y-80, 160, 20, GLOBALS['BATCH_ENABLE'].val, 'Automate exporting multiple scenes or groups to files', do_redraw) + + if GLOBALS['BATCH_ENABLE'].val: + Draw.BeginAlign() + GLOBALS['BATCH_GROUP'] = Draw.Toggle('Group > File', EVENT_REDRAW, x+20, y-105, 160, 20, GLOBALS['BATCH_GROUP'].val, 'Export each group as an FBX file', do_batch_type_grp) + GLOBALS['BATCH_SCENE'] = Draw.Toggle('Scene > File', EVENT_REDRAW, x+180, y-105, 160, 20, GLOBALS['BATCH_SCENE'].val, 'Export each scene as an FBX file', do_batch_type_sce) + + # Own dir requires OS module + if os: + GLOBALS['BATCH_OWN_DIR'] = Draw.Toggle('Own Dir', EVENT_NONE, x+20, y-125, 80, 20, GLOBALS['BATCH_OWN_DIR'].val, 'Create a dir for each exported file') + GLOBALS['BATCH_FILE_PREFIX'] = Draw.String('Prefix: ', EVENT_NONE, x+100, y-125, 240, 20, GLOBALS['BATCH_FILE_PREFIX'].val, 64, 'Prefix each file with this name ') + else: + GLOBALS['BATCH_FILE_PREFIX'] = Draw.String('Prefix: ', EVENT_NONE, x+20, y-125, 320, 20, GLOBALS['BATCH_FILE_PREFIX'].val, 64, 'Prefix each file with this name ') + + + Draw.EndAlign() + + #y+=80 + + ''' + Draw.BeginAlign() + GLOBALS['FILENAME'] = Draw.String('path: ', EVENT_NONE, x+20, y-170, 300, 20, GLOBALS['FILENAME'].val, 64, 'Prefix each file with this name ') + Draw.PushButton('..', EVENT_FILESEL, x+320, y-170, 20, 20, 'Select the path', do_redraw) + ''' + # Until batch is added + # + + + #Draw.BeginAlign() + Draw.PushButton('Online Help', EVENT_REDRAW, x+20, y-160, 100, 20, 'Open online help in a browser window', do_help) + Draw.PushButton('Cancel', EVENT_EXIT, x+130, y-160, 100, 20, 'Exit the exporter', fbx_ui_exit) + Draw.PushButton('Export', EVENT_FILESEL, x+240, y-160, 100, 20, 'Export the fbx file', do_redraw) + + #Draw.PushButton('Export', EVENT_EXIT, x+180, y-160, 160, 20, 'Export the fbx file', fbx_ui_write) + #Draw.EndAlign() + + # exit when mouse out of the view? + # GLOBALS['EVENT'] = EVENT_EXIT #def write_ui(filename): def write_ui(): - - # globals - GLOBALS['EVENT'] = EVENT_REDRAW - #GLOBALS['MOUSE'] = Window.GetMouseCoords() - GLOBALS['MOUSE'] = [i/2 for i in Window.GetScreenSize()] - GLOBALS['FILENAME'] = '' - ''' - # IF called from the fileselector - if filename == None: - GLOBALS['FILENAME'] = filename # Draw.Create(Blender.sys.makename(ext='.fbx')) - else: - GLOBALS['FILENAME'].val = filename - ''' - GLOBALS['EXP_OBS_SELECTED'] = Draw.Create(1) # dont need 2 variables but just do this for clarity - GLOBALS['EXP_OBS_SCENE'] = Draw.Create(0) - GLOBALS['EXP_MESH'] = Draw.Create(1) - GLOBALS['EXP_MESH_APPLY_MOD'] = Draw.Create(1) - GLOBALS['EXP_MESH_HQ_NORMALS'] = Draw.Create(0) - GLOBALS['EXP_ARMATURE'] = Draw.Create(1) - GLOBALS['EXP_LAMP'] = Draw.Create(1) - GLOBALS['EXP_CAMERA'] = Draw.Create(1) - GLOBALS['EXP_EMPTY'] = Draw.Create(1) - GLOBALS['EXP_IMAGE_COPY'] = Draw.Create(0) - # animation opts - GLOBALS['ANIM_ENABLE'] = Draw.Create(1) - GLOBALS['ANIM_OPTIMIZE'] = Draw.Create(1) - GLOBALS['ANIM_OPTIMIZE_PRECISSION'] = Draw.Create(4) # decimal places - GLOBALS['ANIM_ACTION_ALL'] = [Draw.Create(0), Draw.Create(1)] # not just the current action - - # batch export options - GLOBALS['BATCH_ENABLE'] = Draw.Create(0) - GLOBALS['BATCH_GROUP'] = Draw.Create(1) # cant have both of these enabled at once. - GLOBALS['BATCH_SCENE'] = Draw.Create(0) # see above - GLOBALS['BATCH_FILE_PREFIX'] = Draw.Create(Blender.sys.makename(ext='_').split('\\')[-1].split('/')[-1]) - GLOBALS['BATCH_OWN_DIR'] = Draw.Create(0) - # done setting globals - - # Used by the user interface - GLOBALS['_SCALE'] = Draw.Create(1.0) - GLOBALS['_XROT90'] = Draw.Create(True) - GLOBALS['_YROT90'] = Draw.Create(False) - GLOBALS['_ZROT90'] = Draw.Create(False) - - # best not do move the cursor - # Window.SetMouseCoords(*[i/2 for i in Window.GetScreenSize()]) - - # hack so the toggle buttons redraw. this is not nice at all - while GLOBALS['EVENT'] != EVENT_EXIT: - - if GLOBALS['BATCH_ENABLE'].val and GLOBALS['BATCH_GROUP'].val and GLOBALS['ANIM_ACTION_ALL'][1].val: - #Draw.PupMenu("Warning%t|Cant batch export groups with 'Current Action' ") - GLOBALS['ANIM_ACTION_ALL'][0].val = 1 - GLOBALS['ANIM_ACTION_ALL'][1].val = 0 - - if GLOBALS['EVENT'] == EVENT_FILESEL: - if GLOBALS['BATCH_ENABLE'].val: - txt = 'Batch FBX Dir' - name = Blender.sys.expandpath('//') - else: - txt = 'Export FBX' - name = Blender.sys.makename(ext='.fbx') - - Blender.Window.FileSelector(fbx_ui_write, txt, name) - #fbx_ui_write('/test.fbx') - break - - Draw.UIBlock(fbx_ui, 0) - - - # GLOBALS.clear() + # globals + GLOBALS['EVENT'] = EVENT_REDRAW + #GLOBALS['MOUSE'] = Window.GetMouseCoords() + GLOBALS['MOUSE'] = [i/2 for i in Window.GetScreenSize()] + GLOBALS['FILENAME'] = '' + ''' + # IF called from the fileselector + if filename == None: + GLOBALS['FILENAME'] = filename # Draw.Create(Blender.sys.makename(ext='.fbx')) + else: + GLOBALS['FILENAME'].val = filename + ''' + GLOBALS['EXP_OBS_SELECTED'] = Draw.Create(1) # dont need 2 variables but just do this for clarity + GLOBALS['EXP_OBS_SCENE'] = Draw.Create(0) + + GLOBALS['EXP_MESH'] = Draw.Create(1) + GLOBALS['EXP_MESH_APPLY_MOD'] = Draw.Create(1) + GLOBALS['EXP_MESH_HQ_NORMALS'] = Draw.Create(0) + GLOBALS['EXP_ARMATURE'] = Draw.Create(1) + GLOBALS['EXP_LAMP'] = Draw.Create(1) + GLOBALS['EXP_CAMERA'] = Draw.Create(1) + GLOBALS['EXP_EMPTY'] = Draw.Create(1) + GLOBALS['EXP_IMAGE_COPY'] = Draw.Create(0) + # animation opts + GLOBALS['ANIM_ENABLE'] = Draw.Create(1) + GLOBALS['ANIM_OPTIMIZE'] = Draw.Create(1) + GLOBALS['ANIM_OPTIMIZE_PRECISSION'] = Draw.Create(4) # decimal places + GLOBALS['ANIM_ACTION_ALL'] = [Draw.Create(0), Draw.Create(1)] # not just the current action + + # batch export options + GLOBALS['BATCH_ENABLE'] = Draw.Create(0) + GLOBALS['BATCH_GROUP'] = Draw.Create(1) # cant have both of these enabled at once. + GLOBALS['BATCH_SCENE'] = Draw.Create(0) # see above + GLOBALS['BATCH_FILE_PREFIX'] = Draw.Create(Blender.sys.makename(ext='_').split('\\')[-1].split('/')[-1]) + GLOBALS['BATCH_OWN_DIR'] = Draw.Create(0) + # done setting globals + + # Used by the user interface + GLOBALS['_SCALE'] = Draw.Create(1.0) + GLOBALS['_XROT90'] = Draw.Create(True) + GLOBALS['_YROT90'] = Draw.Create(False) + GLOBALS['_ZROT90'] = Draw.Create(False) + + # best not do move the cursor + # Window.SetMouseCoords(*[i/2 for i in Window.GetScreenSize()]) + + # hack so the toggle buttons redraw. this is not nice at all + while GLOBALS['EVENT'] != EVENT_EXIT: + + if GLOBALS['BATCH_ENABLE'].val and GLOBALS['BATCH_GROUP'].val and GLOBALS['ANIM_ACTION_ALL'][1].val: + #Draw.PupMenu("Warning%t|Cant batch export groups with 'Current Action' ") + GLOBALS['ANIM_ACTION_ALL'][0].val = 1 + GLOBALS['ANIM_ACTION_ALL'][1].val = 0 + + if GLOBALS['EVENT'] == EVENT_FILESEL: + if GLOBALS['BATCH_ENABLE'].val: + txt = 'Batch FBX Dir' + name = Blender.sys.expandpath('//') + else: + txt = 'Export FBX' + name = Blender.sys.makename(ext='.fbx') + + Blender.Window.FileSelector(fbx_ui_write, txt, name) + #fbx_ui_write('/test.fbx') + break + + Draw.UIBlock(fbx_ui, 0) + + + # GLOBALS.clear() from bpy.props import * class ExportFBX(bpy.types.Operator): - '''Selection to an ASCII Autodesk FBX''' - bl_idname = "export.fbx" - bl_label = "Export FBX" - - # List of operator properties, the attributes will be assigned - # to the class instance from the operator settings before calling. - - - path = StringProperty(name="File Path", description="File path used for exporting the FBX file", maxlen= 1024, default= "") - - EXP_OBS_SELECTED = BoolProperty(name="Selected Objects", description="Export selected objects on visible layers", default=True) + '''Selection to an ASCII Autodesk FBX''' + bl_idname = "export.fbx" + bl_label = "Export FBX" + + # List of operator properties, the attributes will be assigned + # to the class instance from the operator settings before calling. + + + path = StringProperty(name="File Path", description="File path used for exporting the FBX file", maxlen= 1024, default= "") + + EXP_OBS_SELECTED = BoolProperty(name="Selected Objects", description="Export selected objects on visible layers", default=True) # EXP_OBS_SCENE = BoolProperty(name="Scene Objects", description="Export all objects in this scene", default=True) - _SCALE = FloatProperty(name="Scale", description="Scale all data, (Note! some imports dont support scaled armatures)", min=0.01, max=1000.0, soft_min=0.01, soft_max=1000.0, default=1.0) - _XROT90 = BoolProperty(name="Rot X90", description="Rotate all objects 90 degrese about the X axis", default=True) - _YROT90 = BoolProperty(name="Rot Y90", description="Rotate all objects 90 degrese about the Y axis", default=False) - _ZROT90 = BoolProperty(name="Rot Z90", description="Rotate all objects 90 degrese about the Z axis", default=False) - EXP_EMPTY = BoolProperty(name="Empties", description="Export empty objects", default=True) - EXP_CAMERA = BoolProperty(name="Cameras", description="Export camera objects", default=True) - EXP_LAMP = BoolProperty(name="Lamps", description="Export lamp objects", default=True) - EXP_ARMATURE = BoolProperty(name="Armatures", description="Export armature objects", default=True) - EXP_MESH = BoolProperty(name="Meshes", description="Export mesh objects", default=True) - EXP_MESH_APPLY_MOD = BoolProperty(name="Modifiers", description="Apply modifiers to mesh objects", default=True) - EXP_MESH_HQ_NORMALS = BoolProperty(name="HQ Normals", description="Generate high quality normals", default=True) - EXP_IMAGE_COPY = BoolProperty(name="Copy Image Files", description="Copy image files to the destination path", default=False) - # armature animation - ANIM_ENABLE = BoolProperty(name="Enable Animation", description="Export keyframe animation", default=True) - ANIM_OPTIMIZE = BoolProperty(name="Optimize Keyframes", description="Remove double keyframes", default=True) - ANIM_OPTIMIZE_PRECISSION = FloatProperty(name="Precision", description="Tolerence for comparing double keyframes (higher for greater accuracy)", min=1, max=16, soft_min=1, soft_max=16, default=6.0) + TX_SCALE = FloatProperty(name="Scale", description="Scale all data, (Note! some imports dont support scaled armatures)", min=0.01, max=1000.0, soft_min=0.01, soft_max=1000.0, default=1.0) + TX_XROT90 = BoolProperty(name="Rot X90", description="Rotate all objects 90 degrese about the X axis", default=True) + TX_YROT90 = BoolProperty(name="Rot Y90", description="Rotate all objects 90 degrese about the Y axis", default=False) + TX_ZROT90 = BoolProperty(name="Rot Z90", description="Rotate all objects 90 degrese about the Z axis", default=False) + EXP_EMPTY = BoolProperty(name="Empties", description="Export empty objects", default=True) + EXP_CAMERA = BoolProperty(name="Cameras", description="Export camera objects", default=True) + EXP_LAMP = BoolProperty(name="Lamps", description="Export lamp objects", default=True) + EXP_ARMATURE = BoolProperty(name="Armatures", description="Export armature objects", default=True) + EXP_MESH = BoolProperty(name="Meshes", description="Export mesh objects", default=True) + EXP_MESH_APPLY_MOD = BoolProperty(name="Modifiers", description="Apply modifiers to mesh objects", default=True) + EXP_MESH_HQ_NORMALS = BoolProperty(name="HQ Normals", description="Generate high quality normals", default=True) + EXP_IMAGE_COPY = BoolProperty(name="Copy Image Files", description="Copy image files to the destination path", default=False) + # armature animation + ANIM_ENABLE = BoolProperty(name="Enable Animation", description="Export keyframe animation", default=True) + ANIM_OPTIMIZE = BoolProperty(name="Optimize Keyframes", description="Remove double keyframes", default=True) + ANIM_OPTIMIZE_PRECISSION = FloatProperty(name="Precision", description="Tolerence for comparing double keyframes (higher for greater accuracy)", min=1, max=16, soft_min=1, soft_max=16, default=6.0) # ANIM_ACTION_ALL = BoolProperty(name="Current Action", description="Use actions currently applied to the armatures (use scene start/end frame)", default=True) - ANIM_ACTION_ALL = BoolProperty(name="All Actions", description="Use all actions for armatures, if false, use current action", default=False) - # batch - BATCH_ENABLE = BoolProperty(name="Enable Batch", description="Automate exporting multiple scenes or groups to files", default=False) - BATCH_GROUP = BoolProperty(name="Group > File", description="Export each group as an FBX file, if false, export each scene as an FBX file", default=False) - BATCH_OWN_DIR = BoolProperty(name="Own Dir", description="Create a dir for each exported file", default=True) - BATCH_FILE_PREFIX = StringProperty(name="Prefix", description="Prefix each file with this name", maxlen= 1024, default="") - - - def poll(self, context): - print("Poll") - return context.active_object != None - - def execute(self, context): - if not self.properties.path: - raise Exception("path not set") + ANIM_ACTION_ALL = BoolProperty(name="All Actions", description="Use all actions for armatures, if false, use current action", default=False) + # batch + BATCH_ENABLE = BoolProperty(name="Enable Batch", description="Automate exporting multiple scenes or groups to files", default=False) + BATCH_GROUP = BoolProperty(name="Group > File", description="Export each group as an FBX file, if false, export each scene as an FBX file", default=False) + BATCH_OWN_DIR = BoolProperty(name="Own Dir", description="Create a dir for each exported file", default=True) + BATCH_FILE_PREFIX = StringProperty(name="Prefix", description="Prefix each file with this name", maxlen= 1024, default="") - GLOBAL_MATRIX = mtx4_identity - GLOBAL_MATRIX[0][0] = GLOBAL_MATRIX[1][1] = GLOBAL_MATRIX[2][2] = self.properties._SCALE - if self.properties._XROT90: GLOBAL_MATRIX = GLOBAL_MATRIX * mtx4_x90n - if self.properties._YROT90: GLOBAL_MATRIX = GLOBAL_MATRIX * mtx4_y90n - if self.properties._ZROT90: GLOBAL_MATRIX = GLOBAL_MATRIX * mtx4_z90n - - write(self.properties.path, - None, # XXX - context, - self.properties.EXP_OBS_SELECTED, - self.properties.EXP_MESH, - self.properties.EXP_MESH_APPLY_MOD, + + def poll(self, context): + print("Poll") + return context.active_object != None + + def execute(self, context): + if not self.properties.path: + raise Exception("path not set") + + GLOBAL_MATRIX = mtx4_identity + GLOBAL_MATRIX[0][0] = GLOBAL_MATRIX[1][1] = GLOBAL_MATRIX[2][2] = self.properties.TX_SCALE + if self.properties.TX_XROT90: GLOBAL_MATRIX = GLOBAL_MATRIX * mtx4_x90n + if self.properties.TX_YROT90: GLOBAL_MATRIX = GLOBAL_MATRIX * mtx4_y90n + if self.properties.TX_ZROT90: GLOBAL_MATRIX = GLOBAL_MATRIX * mtx4_z90n + + write(self.properties.path, + None, # XXX + context, + self.properties.EXP_OBS_SELECTED, + self.properties.EXP_MESH, + self.properties.EXP_MESH_APPLY_MOD, # self.properties.EXP_MESH_HQ_NORMALS, - self.properties.EXP_ARMATURE, - self.properties.EXP_LAMP, - self.properties.EXP_CAMERA, - self.properties.EXP_EMPTY, - self.properties.EXP_IMAGE_COPY, - GLOBAL_MATRIX, - self.properties.ANIM_ENABLE, - self.properties.ANIM_OPTIMIZE, - self.properties.ANIM_OPTIMIZE_PRECISSION, - self.properties.ANIM_ACTION_ALL, - self.properties.BATCH_ENABLE, - self.properties.BATCH_GROUP, - self.properties.BATCH_FILE_PREFIX, - self.properties.BATCH_OWN_DIR) + self.properties.EXP_ARMATURE, + self.properties.EXP_LAMP, + self.properties.EXP_CAMERA, + self.properties.EXP_EMPTY, + self.properties.EXP_IMAGE_COPY, + GLOBAL_MATRIX, + self.properties.ANIM_ENABLE, + self.properties.ANIM_OPTIMIZE, + self.properties.ANIM_OPTIMIZE_PRECISSION, + self.properties.ANIM_ACTION_ALL, + self.properties.BATCH_ENABLE, + self.properties.BATCH_GROUP, + self.properties.BATCH_FILE_PREFIX, + self.properties.BATCH_OWN_DIR) - return ('FINISHED',) - - def invoke(self, context, event): - wm = context.manager - wm.add_fileselect(self) - return ('RUNNING_MODAL',) + return ('FINISHED',) + + def invoke(self, context, event): + wm = context.manager + wm.add_fileselect(self) + return ('RUNNING_MODAL',) bpy.ops.add(ExportFBX) @@ -3440,7 +3442,7 @@ bpy.ops.add(ExportFBX) # NOTES (all line numbers correspond to original export_fbx.py (under release/scripts) # - Draw.PupMenu alternative in 2.5?, temporarily replaced PupMenu with print -# - get rid of cleanName somehow +# - get rid of bpy.utils.clean_name somehow # + fixed: isinstance(inst, bpy.types.*) doesn't work on RNA objects: line 565 # + get rid of BPyObject_getObjectArmature, move it in RNA? # - BATCH_ENABLE and BATCH_GROUP options: line 327 diff --git a/release/scripts/io/export_mdd.py b/release/scripts/io/export_mdd.py index c160b94e546..cfd73b1979e 100644 --- a/release/scripts/io/export_mdd.py +++ b/release/scripts/io/export_mdd.py @@ -4,18 +4,20 @@ # 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # ##### END GPL LICENSE BLOCK ##### +# + __author__ = "Bill L.Nieuwendorp" __bpydoc__ = """\ This script Exports Lightwaves MotionDesigner format. @@ -47,16 +49,8 @@ Be sure not to use modifiers that change the number or order of verts in the mes import bpy import Mathutils -import math -import os +from struct import pack -#import Blender -#from Blender import * -#import BPyMessages -try: - from struct import pack -except: - pack = None def zero_file(filepath): ''' @@ -66,7 +60,8 @@ def zero_file(filepath): file.write('\n') # apparently macosx needs some data in a blank file? file.close() -def check_vertcount(mesh,vertcount): + +def check_vertcount(mesh, vertcount): ''' check and make sure the vertcount is consistent throughout the frame range ''' @@ -75,8 +70,8 @@ def check_vertcount(mesh,vertcount): f.close() zero_file(filepath) return - - + + def write(filename, sce, ob, PREF_STARTFRAME, PREF_ENDFRAME, PREF_FPS): """ Blender.Window.WaitCursor(1) @@ -92,7 +87,7 @@ def write(filename, sce, ob, PREF_STARTFRAME, PREF_ENDFRAME, PREF_FPS): me = ob.create_mesh(True, 'PREVIEW') #Flip y and z - mat_flip= Mathutils.Matrix(\ + mat_flip = Mathutils.Matrix(\ [1.0, 0.0, 0.0, 0.0],\ [0.0, 0.0, 1.0, 0.0],\ [0.0, 1.0, 0.0, 0.0],\ @@ -101,27 +96,27 @@ def write(filename, sce, ob, PREF_STARTFRAME, PREF_ENDFRAME, PREF_FPS): numverts = len(me.verts) - numframes = PREF_ENDFRAME-PREF_STARTFRAME+1 - PREF_FPS= float(PREF_FPS) + numframes = PREF_ENDFRAME-PREF_STARTFRAME + 1 + PREF_FPS = float(PREF_FPS) f = open(filename, 'wb') #no Errors yet:Safe to create file - + # Write the header f.write(pack(">2i", numframes, numverts)) - + # Write the frame times (should we use the time IPO??) - f.write( pack(">%df" % (numframes), *[frame/PREF_FPS for frame in range(numframes)]) ) # seconds - + f.write( pack(">%df" % (numframes), *[frame / PREF_FPS for frame in range(numframes)]) ) # seconds + #rest frame needed to keep frames in sync """ Blender.Set('curframe', PREF_STARTFRAME) me_tmp.getFromObject(ob.name) """ - check_vertcount(me,numverts) + check_vertcount(me, numverts) me.transform(mat_flip * ob.matrix) - f.write(pack(">%df" % (numverts*3), *[axis for v in me.verts for axis in v.co])) - - for frame in range(PREF_STARTFRAME,PREF_ENDFRAME+1):#in order to start at desired frame + f.write(pack(">%df" % (numverts * 3), *[axis for v in me.verts for axis in v.co])) + + for frame in range(PREF_STARTFRAME, PREF_ENDFRAME + 1):#in order to start at desired frame """ Blender.Set('curframe', frame) me_tmp.getFromObject(ob.name) @@ -129,18 +124,18 @@ def write(filename, sce, ob, PREF_STARTFRAME, PREF_ENDFRAME, PREF_FPS): sce.set_frame(frame) me = ob.create_mesh(True, 'PREVIEW') - check_vertcount(me,numverts) + check_vertcount(me, numverts) me.transform(mat_flip * ob.matrix) - + # Write the vertex data - f.write(pack(">%df" % (numverts*3), *[axis for v in me.verts for axis in v.co])) - + f.write(pack(">%df" % (numverts * 3), *[axis for v in me.verts for axis in v.co])) + """ me_tmp.verts= None """ f.close() - - print ('MDD Exported: %s frames:%d\n'% (filename, numframes-1)) + + print('MDD Exported: %s frames:%d\n' % (filename, numframes - 1)) """ Blender.Window.WaitCursor(0) Blender.Set('curframe', orig_frame) @@ -149,6 +144,7 @@ def write(filename, sce, ob, PREF_STARTFRAME, PREF_ENDFRAME, PREF_FPS): from bpy.props import * + class ExportMDD(bpy.types.Operator): '''Animated mesh to MDD vertex keyframe file.''' bl_idname = "export.mdd" @@ -163,22 +159,22 @@ class ExportMDD(bpy.types.Operator): # List of operator properties, the attributes will be assigned # to the class instance from the operator settings before calling. - path = StringProperty(name="File Path", description="File path used for exporting the MDD file", maxlen= 1024, default= "tmp.mdd") + path = StringProperty(name="File Path", description="File path used for exporting the MDD file", maxlen= 1024, default= "") fps = IntProperty(name="Frames Per Second", description="Number of frames/second", min=minfps, max=maxfps, default= 25) - start_frame = IntProperty(name="Start Frame", description="Start frame for baking", min=minframe,max=maxframe,default=1) - end_frame = IntProperty(name="End Frame", description="End frame for baking", min=minframe, max=maxframe, default= 250) + start_frame = IntProperty(name="Start Frame", description="Start frame for baking", min=minframe, max=maxframe, default=1) + end_frame = IntProperty(name="End Frame", description="End frame for baking", min=minframe, max=maxframe, default=250) def poll(self, context): ob = context.active_object - return (ob and ob.type=='MESH') + return (ob and ob.type == 'MESH') def execute(self, context): if not self.properties.path: raise Exception("filename not set") write(self.properties.path, context.scene, context.active_object, - self.properties.start_frame, self.properties.end_frame, self.properties.fps ) + self.properties.start_frame, self.properties.end_frame, self.properties.fps) return ('FINISHED',) - + def invoke(self, context, event): wm = context.manager wm.add_fileselect(self) @@ -189,11 +185,12 @@ bpy.ops.add(ExportMDD) # Add to a menu import dynamic_menu + def menu_func(self, context): default_path = bpy.data.filename.replace(".blend", ".mdd") self.layout.operator(ExportMDD.bl_idname, text="Vertex Keyframe Animation (.mdd)...").path = default_path menu_item = dynamic_menu.add(bpy.types.INFO_MT_file_export, menu_func) -if __name__=='__main__': +if __name__ == '__main__': bpy.ops.export.mdd(path="/tmp/test.mdd") diff --git a/release/scripts/io/export_obj.py b/release/scripts/io/export_obj.py index 94e8a365c0f..d6026d10ba9 100644 --- a/release/scripts/io/export_obj.py +++ b/release/scripts/io/export_obj.py @@ -4,18 +4,20 @@ # 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # ##### END GPL LICENSE BLOCK ##### +# + """ Name: 'Wavefront (.obj)...' Blender: 248 @@ -73,142 +75,142 @@ import Mathutils # Returns a tuple - path,extension. # 'hello.obj' > ('hello', '.obj') def splitExt(path): - dotidx = path.rfind('.') - if dotidx == -1: - return path, '' - else: - return path[:dotidx], path[dotidx:] + dotidx = path.rfind('.') + if dotidx == -1: + return path, '' + else: + return path[:dotidx], path[dotidx:] def fixName(name): - if name == None: - return 'None' - else: - return name.replace(' ', '_') + if name == None: + return 'None' + else: + return name.replace(' ', '_') # A Dict of Materials # (material.name, image.name):matname_imagename # matname_imagename has gaps removed. -MTL_DICT = {} +MTL_DICT = {} def write_mtl(scene, filename, copy_images): - world = scene.world - worldAmb = world.ambient_color + world = scene.world + worldAmb = world.ambient_color - dest_dir = os.path.dirname(filename) + dest_dir = os.path.dirname(filename) - def copy_image(image): - rel = image.get_export_path(dest_dir, True) + def copy_image(image): + rel = image.get_export_path(dest_dir, True) - if copy_images: - abspath = image.get_export_path(dest_dir, False) - if not os.path.exists(abs_path): - shutil.copy(image.get_abs_filename(), abs_path) + if copy_images: + abspath = image.get_export_path(dest_dir, False) + if not os.path.exists(abs_path): + shutil.copy(image.get_abs_filename(), abs_path) - return rel + return rel - file = open(filename, "w") - # XXX + file = open(filename, "w") + # XXX # file.write('# Blender3D MTL File: %s\n' % Blender.Get('filename').split('\\')[-1].split('/')[-1]) - file.write('# Material Count: %i\n' % len(MTL_DICT)) - # Write material/image combinations we have used. - for key, (mtl_mat_name, mat, img) in MTL_DICT.items(): - - # Get the Blender data for the material and the image. - # Having an image named None will make a bug, dont do it :) - - file.write('newmtl %s\n' % mtl_mat_name) # Define a new material: matname_imgname - - if mat: - file.write('Ns %.6f\n' % ((mat.specular_hardness-1) * 1.9607843137254901) ) # Hardness, convert blenders 1-511 to MTL's - file.write('Ka %.6f %.6f %.6f\n' % tuple([c*mat.ambient for c in worldAmb]) ) # Ambient, uses mirror colour, - file.write('Kd %.6f %.6f %.6f\n' % tuple([c*mat.diffuse_intensity for c in mat.diffuse_color]) ) # Diffuse - file.write('Ks %.6f %.6f %.6f\n' % tuple([c*mat.specular_intensity for c in mat.specular_color]) ) # Specular - if hasattr(mat, "ior"): - file.write('Ni %.6f\n' % mat.ior) # Refraction index - else: - file.write('Ni %.6f\n' % 1.0) - file.write('d %.6f\n' % mat.alpha) # Alpha (obj uses 'd' for dissolve) + file.write('# Material Count: %i\n' % len(MTL_DICT)) + # Write material/image combinations we have used. + for key, (mtl_mat_name, mat, img) in MTL_DICT.items(): - # 0 to disable lighting, 1 for ambient & diffuse only (specular color set to black), 2 for full lighting. - if mat.shadeless: - file.write('illum 0\n') # ignore lighting - elif mat.specular_intensity == 0: - file.write('illum 1\n') # no specular. - else: - file.write('illum 2\n') # light normaly - - else: - #write a dummy material here? - file.write('Ns 0\n') - file.write('Ka %.6f %.6f %.6f\n' % tuple([c for c in worldAmb]) ) # Ambient, uses mirror colour, - file.write('Kd 0.8 0.8 0.8\n') - file.write('Ks 0.8 0.8 0.8\n') - file.write('d 1\n') # No alpha - file.write('illum 2\n') # light normaly - - # Write images! - if img: # We have an image on the face! - # write relative image path - rel = copy_image(img) - file.write('map_Kd %s\n' % rel) # Diffuse mapping image -# file.write('map_Kd %s\n' % img.filename.split('\\')[-1].split('/')[-1]) # Diffuse mapping image - - elif mat: # No face image. if we havea material search for MTex image. - for mtex in mat.textures: - if mtex and mtex.texture.type == 'IMAGE': - try: - filename = copy_image(mtex.texture.image) + # Get the Blender data for the material and the image. + # Having an image named None will make a bug, dont do it :) + + file.write('newmtl %s\n' % mtl_mat_name) # Define a new material: matname_imgname + + if mat: + file.write('Ns %.6f\n' % ((mat.specular_hardness-1) * 1.9607843137254901) ) # Hardness, convert blenders 1-511 to MTL's + file.write('Ka %.6f %.6f %.6f\n' % tuple([c*mat.ambient for c in worldAmb]) ) # Ambient, uses mirror colour, + file.write('Kd %.6f %.6f %.6f\n' % tuple([c*mat.diffuse_intensity for c in mat.diffuse_color]) ) # Diffuse + file.write('Ks %.6f %.6f %.6f\n' % tuple([c*mat.specular_intensity for c in mat.specular_color]) ) # Specular + if hasattr(mat, "ior"): + file.write('Ni %.6f\n' % mat.ior) # Refraction index + else: + file.write('Ni %.6f\n' % 1.0) + file.write('d %.6f\n' % mat.alpha) # Alpha (obj uses 'd' for dissolve) + + # 0 to disable lighting, 1 for ambient & diffuse only (specular color set to black), 2 for full lighting. + if mat.shadeless: + file.write('illum 0\n') # ignore lighting + elif mat.specular_intensity == 0: + file.write('illum 1\n') # no specular. + else: + file.write('illum 2\n') # light normaly + + else: + #write a dummy material here? + file.write('Ns 0\n') + file.write('Ka %.6f %.6f %.6f\n' % tuple([c for c in worldAmb]) ) # Ambient, uses mirror colour, + file.write('Kd 0.8 0.8 0.8\n') + file.write('Ks 0.8 0.8 0.8\n') + file.write('d 1\n') # No alpha + file.write('illum 2\n') # light normaly + + # Write images! + if img: # We have an image on the face! + # write relative image path + rel = copy_image(img) + file.write('map_Kd %s\n' % rel) # Diffuse mapping image +# file.write('map_Kd %s\n' % img.filename.split('\\')[-1].split('/')[-1]) # Diffuse mapping image + + elif mat: # No face image. if we havea material search for MTex image. + for mtex in mat.textures: + if mtex and mtex.texture.type == 'IMAGE': + try: + filename = copy_image(mtex.texture.image) # filename = mtex.texture.image.filename.split('\\')[-1].split('/')[-1] - file.write('map_Kd %s\n' % filename) # Diffuse mapping image - break - except: - # Texture has no image though its an image type, best ignore. - pass - - file.write('\n\n') - - file.close() + file.write('map_Kd %s\n' % filename) # Diffuse mapping image + break + except: + # Texture has no image though its an image type, best ignore. + pass + + file.write('\n\n') + + file.close() # XXX not used def copy_file(source, dest): - file = open(source, 'rb') - data = file.read() - file.close() - - file = open(dest, 'wb') - file.write(data) - file.close() + file = open(source, 'rb') + data = file.read() + file.close() + + file = open(dest, 'wb') + file.write(data) + file.close() # XXX not used def copy_images(dest_dir): - if dest_dir[-1] != os.sep: - dest_dir += os.sep + if dest_dir[-1] != os.sep: + dest_dir += os.sep # if dest_dir[-1] != sys.sep: # dest_dir += sys.sep - - # Get unique image names - uniqueImages = {} - for matname, mat, image in MTL_DICT.values(): # Only use image name - # Get Texface images - if image: - uniqueImages[image] = image # Should use sets here. wait until Python 2.4 is default. - - # Get MTex images - if mat: - for mtex in mat.textures: - if mtex and mtex.texture.type == 'IMAGE': - image_tex = mtex.texture.image - if image_tex: - try: - uniqueImages[image_tex] = image_tex - except: - pass - - # Now copy images - copyCount = 0 - + + # Get unique image names + uniqueImages = {} + for matname, mat, image in MTL_DICT.values(): # Only use image name + # Get Texface images + if image: + uniqueImages[image] = image # Should use sets here. wait until Python 2.4 is default. + + # Get MTex images + if mat: + for mtex in mat.textures: + if mtex and mtex.texture.type == 'IMAGE': + image_tex = mtex.texture.image + if image_tex: + try: + uniqueImages[image_tex] = image_tex + except: + pass + + # Now copy images + copyCount = 0 + # for bImage in uniqueImages.values(): # image_path = bpy.utils.expandpath(bImage.filename) # if bpy.sys.exists(image_path): @@ -221,283 +223,283 @@ def copy_images(dest_dir): # paths= bpy.util.copy_images(uniqueImages.values(), dest_dir) - print('\tCopied %d images' % copyCount) + print('\tCopied %d images' % copyCount) # print('\tCopied %d images' % copyCount) # XXX not converted def test_nurbs_compat(ob): - if ob.type != 'Curve': - return False - - for nu in ob.data: - if (not nu.knotsV) and nu.type != 1: # not a surface and not bezier - return True - - return False + if ob.type != 'Curve': + return False + + for nu in ob.data: + if (not nu.knotsV) and nu.type != 1: # not a surface and not bezier + return True + + return False # XXX not converted def write_nurb(file, ob, ob_mat): - tot_verts = 0 - cu = ob.data - - # use negative indices - Vector = Blender.Mathutils.Vector - for nu in cu: - - if nu.type==0: DEG_ORDER_U = 1 - else: DEG_ORDER_U = nu.orderU-1 # Tested to be correct - - if nu.type==1: - print("\tWarning, bezier curve:", ob.name, "only poly and nurbs curves supported") - continue - - if nu.knotsV: - print("\tWarning, surface:", ob.name, "only poly and nurbs curves supported") - continue - - if len(nu) <= DEG_ORDER_U: - print("\tWarning, orderU is lower then vert count, skipping:", ob.name) - continue - - pt_num = 0 - do_closed = (nu.flagU & 1) - do_endpoints = (do_closed==0) and (nu.flagU & 2) - - for pt in nu: - pt = Vector(pt[0], pt[1], pt[2]) * ob_mat - file.write('v %.6f %.6f %.6f\n' % (pt[0], pt[1], pt[2])) - pt_num += 1 - tot_verts += pt_num - - file.write('g %s\n' % (fixName(ob.name))) # fixName(ob.getData(1)) could use the data name too - file.write('cstype bspline\n') # not ideal, hard coded - file.write('deg %d\n' % DEG_ORDER_U) # not used for curves but most files have it still - - curve_ls = [-(i+1) for i in range(pt_num)] - - # 'curv' keyword - if do_closed: - if DEG_ORDER_U == 1: - pt_num += 1 - curve_ls.append(-1) - else: - pt_num += DEG_ORDER_U - curve_ls = curve_ls + curve_ls[0:DEG_ORDER_U] - - file.write('curv 0.0 1.0 %s\n' % (' '.join( [str(i) for i in curve_ls] ))) # Blender has no U and V values for the curve - - # 'parm' keyword - tot_parm = (DEG_ORDER_U + 1) + pt_num - tot_parm_div = float(tot_parm-1) - parm_ls = [(i/tot_parm_div) for i in range(tot_parm)] - - if do_endpoints: # end points, force param - for i in range(DEG_ORDER_U+1): - parm_ls[i] = 0.0 - parm_ls[-(1+i)] = 1.0 - - file.write('parm u %s\n' % ' '.join( [str(i) for i in parm_ls] )) + tot_verts = 0 + cu = ob.data - file.write('end\n') - - return tot_verts + # use negative indices + Vector = Blender.Mathutils.Vector + for nu in cu: + + if nu.type==0: DEG_ORDER_U = 1 + else: DEG_ORDER_U = nu.orderU-1 # Tested to be correct + + if nu.type==1: + print("\tWarning, bezier curve:", ob.name, "only poly and nurbs curves supported") + continue + + if nu.knotsV: + print("\tWarning, surface:", ob.name, "only poly and nurbs curves supported") + continue + + if len(nu) <= DEG_ORDER_U: + print("\tWarning, orderU is lower then vert count, skipping:", ob.name) + continue + + pt_num = 0 + do_closed = (nu.flagU & 1) + do_endpoints = (do_closed==0) and (nu.flagU & 2) + + for pt in nu: + pt = Vector(pt[0], pt[1], pt[2]) * ob_mat + file.write('v %.6f %.6f %.6f\n' % (pt[0], pt[1], pt[2])) + pt_num += 1 + tot_verts += pt_num + + file.write('g %s\n' % (fixName(ob.name))) # fixName(ob.getData(1)) could use the data name too + file.write('cstype bspline\n') # not ideal, hard coded + file.write('deg %d\n' % DEG_ORDER_U) # not used for curves but most files have it still + + curve_ls = [-(i+1) for i in range(pt_num)] + + # 'curv' keyword + if do_closed: + if DEG_ORDER_U == 1: + pt_num += 1 + curve_ls.append(-1) + else: + pt_num += DEG_ORDER_U + curve_ls = curve_ls + curve_ls[0:DEG_ORDER_U] + + file.write('curv 0.0 1.0 %s\n' % (' '.join( [str(i) for i in curve_ls] ))) # Blender has no U and V values for the curve + + # 'parm' keyword + tot_parm = (DEG_ORDER_U + 1) + pt_num + tot_parm_div = float(tot_parm-1) + parm_ls = [(i/tot_parm_div) for i in range(tot_parm)] + + if do_endpoints: # end points, force param + for i in range(DEG_ORDER_U+1): + parm_ls[i] = 0.0 + parm_ls[-(1+i)] = 1.0 + + file.write('parm u %s\n' % ' '.join( [str(i) for i in parm_ls] )) + + file.write('end\n') + + return tot_verts def write(filename, objects, scene, - EXPORT_TRI=False, - EXPORT_EDGES=False, - EXPORT_NORMALS=False, - EXPORT_NORMALS_HQ=False, - EXPORT_UV=True, - EXPORT_MTL=True, - EXPORT_COPY_IMAGES=False, - EXPORT_APPLY_MODIFIERS=True, - EXPORT_ROTX90=True, - EXPORT_BLEN_OBS=True, - EXPORT_GROUP_BY_OB=False, - EXPORT_GROUP_BY_MAT=False, - EXPORT_KEEP_VERT_ORDER=False, - EXPORT_POLYGROUPS=False, - EXPORT_CURVE_AS_NURBS=True): - ''' - Basic write function. The context and options must be alredy set - This can be accessed externaly - eg. - write( 'c:\\test\\foobar.obj', Blender.Object.GetSelected() ) # Using default options. - ''' + EXPORT_TRI=False, + EXPORT_EDGES=False, + EXPORT_NORMALS=False, + EXPORT_NORMALS_HQ=False, + EXPORT_UV=True, + EXPORT_MTL=True, + EXPORT_COPY_IMAGES=False, + EXPORT_APPLY_MODIFIERS=True, + EXPORT_ROTX90=True, + EXPORT_BLEN_OBS=True, + EXPORT_GROUP_BY_OB=False, + EXPORT_GROUP_BY_MAT=False, + EXPORT_KEEP_VERT_ORDER=False, + EXPORT_POLYGROUPS=False, + EXPORT_CURVE_AS_NURBS=True): + ''' + Basic write function. The context and options must be alredy set + This can be accessed externaly + eg. + write( 'c:\\test\\foobar.obj', Blender.Object.GetSelected() ) # Using default options. + ''' - # XXX - import math - - def veckey3d(v): - return round(v.x, 6), round(v.y, 6), round(v.z, 6) - - def veckey2d(v): - return round(v[0], 6), round(v[1], 6) - # return round(v.x, 6), round(v.y, 6) - - def findVertexGroupName(face, vWeightMap): - """ - Searches the vertexDict to see what groups is assigned to a given face. - We use a frequency system in order to sort out the name because a given vetex can - belong to two or more groups at the same time. To find the right name for the face - we list all the possible vertex group names with their frequency and then sort by - frequency in descend order. The top element is the one shared by the highest number - of vertices is the face's group - """ - weightDict = {} - for vert_index in face.verts: + # XXX + import math + + def veckey3d(v): + return round(v.x, 6), round(v.y, 6), round(v.z, 6) + + def veckey2d(v): + return round(v[0], 6), round(v[1], 6) + # return round(v.x, 6), round(v.y, 6) + + def findVertexGroupName(face, vWeightMap): + """ + Searches the vertexDict to see what groups is assigned to a given face. + We use a frequency system in order to sort out the name because a given vetex can + belong to two or more groups at the same time. To find the right name for the face + we list all the possible vertex group names with their frequency and then sort by + frequency in descend order. The top element is the one shared by the highest number + of vertices is the face's group + """ + weightDict = {} + for vert_index in face.verts: # for vert in face: - vWeights = vWeightMap[vert_index] + vWeights = vWeightMap[vert_index] # vWeights = vWeightMap[vert] - for vGroupName, weight in vWeights: - weightDict[vGroupName] = weightDict.get(vGroupName, 0) + weight - - if weightDict: - alist = [(weight,vGroupName) for vGroupName, weight in weightDict.items()] # sort least to greatest amount of weight - alist.sort() - return(alist[-1][1]) # highest value last - else: - return '(null)' + for vGroupName, weight in vWeights: + weightDict[vGroupName] = weightDict.get(vGroupName, 0) + weight - # TODO: implement this in C? dunno how it should be called... - def getVertsFromGroup(me, group_index): - ret = [] + if weightDict: + alist = [(weight,vGroupName) for vGroupName, weight in weightDict.items()] # sort least to greatest amount of weight + alist.sort() + return(alist[-1][1]) # highest value last + else: + return '(null)' - for i, v in enumerate(me.verts): - for g in v.groups: - if g.group == group_index: - ret.append((i, g.weight)) + # TODO: implement this in C? dunno how it should be called... + def getVertsFromGroup(me, group_index): + ret = [] - return ret + for i, v in enumerate(me.verts): + for g in v.groups: + if g.group == group_index: + ret.append((i, g.weight)) + + return ret - print('OBJ Export path: "%s"' % filename) - temp_mesh_name = '~tmp-mesh' + print('OBJ Export path: "%s"' % filename) + temp_mesh_name = '~tmp-mesh' - time1 = time.clock() + time1 = time.clock() # time1 = sys.time() # scn = Scene.GetCurrent() - file = open(filename, "w") + file = open(filename, "w") - # Write Header - version = "2.5" - file.write('# Blender3D v%s OBJ File: %s\n' % (version, bpy.data.filename.split('/')[-1].split('\\')[-1] )) - file.write('# www.blender3d.org\n') + # Write Header + version = "2.5" + file.write('# Blender3D v%s OBJ File: %s\n' % (version, bpy.data.filename.split('/')[-1].split('\\')[-1] )) + file.write('# www.blender3d.org\n') - # Tell the obj file what material file to use. - if EXPORT_MTL: - mtlfilename = '%s.mtl' % '.'.join(filename.split('.')[:-1]) - file.write('mtllib %s\n' % ( mtlfilename.split('\\')[-1].split('/')[-1] )) - - if EXPORT_ROTX90: - mat_xrot90= Mathutils.RotationMatrix(-math.pi/2, 4, 'x') - - # Initialize totals, these are updated each object - totverts = totuvco = totno = 1 - - face_vert_index = 1 - - globalNormals = {} + # Tell the obj file what material file to use. + if EXPORT_MTL: + mtlfilename = '%s.mtl' % '.'.join(filename.split('.')[:-1]) + file.write('mtllib %s\n' % ( mtlfilename.split('\\')[-1].split('/')[-1] )) - # Get all meshes - for ob_main in objects: + if EXPORT_ROTX90: + mat_xrot90= Mathutils.RotationMatrix(-math.pi/2, 4, 'x') - # ignore dupli children - if ob_main.parent and ob_main.parent.dupli_type != 'NONE': - # XXX - print(ob_main.name, 'is a dupli child - ignoring') - continue + # Initialize totals, these are updated each object + totverts = totuvco = totno = 1 - obs = [] - if ob_main.dupli_type != 'NONE': - # XXX - print('creating dupli_list on', ob_main.name) - ob_main.create_dupli_list() - - obs = [(dob.object, dob.matrix) for dob in ob_main.dupli_list] + face_vert_index = 1 - # XXX debug print - print(ob_main.name, 'has', len(obs), 'dupli children') - else: - obs = [(ob_main, ob_main.matrix)] + globalNormals = {} - for ob, ob_mat in obs: + # Get all meshes + for ob_main in objects: - # XXX postponed + # ignore dupli children + if ob_main.parent and ob_main.parent.dupli_type != 'NONE': + # XXX + print(ob_main.name, 'is a dupli child - ignoring') + continue + + obs = [] + if ob_main.dupli_type != 'NONE': + # XXX + print('creating dupli_list on', ob_main.name) + ob_main.create_dupli_list() + + obs = [(dob.object, dob.matrix) for dob in ob_main.dupli_list] + + # XXX debug print + print(ob_main.name, 'has', len(obs), 'dupli children') + else: + obs = [(ob_main, ob_main.matrix)] + + for ob, ob_mat in obs: + + # XXX postponed # # Nurbs curve support # if EXPORT_CURVE_AS_NURBS and test_nurbs_compat(ob): # if EXPORT_ROTX90: # ob_mat = ob_mat * mat_xrot90 - + # totverts += write_nurb(file, ob, ob_mat) - + # continue # end nurbs - if ob.type != 'MESH': - continue + if ob.type != 'MESH': + continue - me = ob.create_mesh(EXPORT_APPLY_MODIFIERS, 'PREVIEW') + me = ob.create_mesh(EXPORT_APPLY_MODIFIERS, 'PREVIEW') - if EXPORT_ROTX90: - me.transform(ob_mat * mat_xrot90) - else: - me.transform(ob_mat) + if EXPORT_ROTX90: + me.transform(ob_mat * mat_xrot90) + else: + me.transform(ob_mat) # # Will work for non meshes now! :) # me= BPyMesh.getMeshFromObject(ob, containerMesh, EXPORT_APPLY_MODIFIERS, EXPORT_POLYGROUPS, scn) # if not me: # continue - if EXPORT_UV: - faceuv = len(me.uv_textures) > 0 - else: - faceuv = False + if EXPORT_UV: + faceuv = len(me.uv_textures) > 0 + else: + faceuv = False - # XXX - todo, find a better way to do triangulation - # ...removed convert_to_triface because it relies on editmesh - ''' - # We have a valid mesh - if EXPORT_TRI and me.faces: - # Add a dummy object to it. - has_quads = False - for f in me.faces: - if f.verts[3] != 0: - has_quads = True - break - - if has_quads: - newob = bpy.data.add_object('MESH', 'temp_object') - newob.data = me - # if we forget to set Object.data - crash - scene.objects.link(newob) - newob.convert_to_triface(scene) - # mesh will still be there - scene.objects.unlink(newob) - ''' - - # Make our own list so it can be sorted to reduce context switching - face_index_pairs = [ (face, index) for index, face in enumerate(me.faces)] - # faces = [ f for f in me.faces ] - - if EXPORT_EDGES: - edges = me.edges - else: - edges = [] + # XXX - todo, find a better way to do triangulation + # ...removed convert_to_triface because it relies on editmesh + ''' + # We have a valid mesh + if EXPORT_TRI and me.faces: + # Add a dummy object to it. + has_quads = False + for f in me.faces: + if f.verts[3] != 0: + has_quads = True + break - if not (len(face_index_pairs)+len(edges)+len(me.verts)): # Make sure there is somthing to write + if has_quads: + newob = bpy.data.add_object('MESH', 'temp_object') + newob.data = me + # if we forget to set Object.data - crash + scene.objects.link(newob) + newob.convert_to_triface(scene) + # mesh will still be there + scene.objects.unlink(newob) + ''' - # clean up - bpy.data.remove_mesh(me) + # Make our own list so it can be sorted to reduce context switching + face_index_pairs = [ (face, index) for index, face in enumerate(me.faces)] + # faces = [ f for f in me.faces ] - continue # dont bother with this mesh. - - # XXX - # High Quality Normals - if EXPORT_NORMALS and face_index_pairs: - me.calc_normals() + if EXPORT_EDGES: + edges = me.edges + else: + edges = [] + + if not (len(face_index_pairs)+len(edges)+len(me.verts)): # Make sure there is somthing to write + + # clean up + bpy.data.remove_mesh(me) + + continue # dont bother with this mesh. + + # XXX + # High Quality Normals + if EXPORT_NORMALS and face_index_pairs: + me.calc_normals() # if EXPORT_NORMALS_HQ: # BPyMesh.meshCalcNormals(me) # else: @@ -505,51 +507,51 @@ def write(filename, objects, scene, # # when the matrix is scaled, # # better to recalculate them # me.calcNormals() - - materials = me.materials - - materialNames = [] - materialItems = [m for m in materials] - if materials: - for mat in materials: - if mat: # !=None - materialNames.append(mat.name) - else: - materialNames.append(None) - # Cant use LC because some materials are None. - # materialNames = map(lambda mat: mat.name, materials) # Bug Blender, dosent account for null materials, still broken. - - # Possible there null materials, will mess up indicies - # but at least it will export, wait until Blender gets fixed. - materialNames.extend((16-len(materialNames)) * [None]) - materialItems.extend((16-len(materialItems)) * [None]) - - # Sort by Material, then images - # so we dont over context switch in the obj file. - if EXPORT_KEEP_VERT_ORDER: - pass - elif faceuv: - # XXX update - tface = me.active_uv_texture.data - # exception only raised if Python 2.3 or lower... - try: - face_index_pairs.sort(key = lambda a: (a[0].material_index, tface[a[1]].image, a[0].smooth)) - except: - face_index_pairs.sort(lambda a,b: cmp((a[0].material_index, tface[a[1]].image, a[0].smooth), - (b[0].material_index, tface[b[1]].image, b[0].smooth))) - elif len(materials) > 1: - try: - face_index_pairs.sort(key = lambda a: (a[0].material_index, a[0].smooth)) - except: - face_index_pairs.sort(lambda a,b: cmp((a[0].material_index, a[0].smooth), - (b[0].material_index, b[0].smooth))) - else: - # no materials - try: - face_index_pairs.sort(key = lambda a: a[0].smooth) - except: - face_index_pairs.sort(lambda a,b: cmp(a[0].smooth, b[0].smooth)) + materials = me.materials + + materialNames = [] + materialItems = [m for m in materials] + if materials: + for mat in materials: + if mat: # !=None + materialNames.append(mat.name) + else: + materialNames.append(None) + # Cant use LC because some materials are None. + # materialNames = map(lambda mat: mat.name, materials) # Bug Blender, dosent account for null materials, still broken. + + # Possible there null materials, will mess up indicies + # but at least it will export, wait until Blender gets fixed. + materialNames.extend((16-len(materialNames)) * [None]) + materialItems.extend((16-len(materialItems)) * [None]) + + # Sort by Material, then images + # so we dont over context switch in the obj file. + if EXPORT_KEEP_VERT_ORDER: + pass + elif faceuv: + # XXX update + tface = me.active_uv_texture.data + + # exception only raised if Python 2.3 or lower... + try: + face_index_pairs.sort(key = lambda a: (a[0].material_index, tface[a[1]].image, a[0].smooth)) + except: + face_index_pairs.sort(lambda a,b: cmp((a[0].material_index, tface[a[1]].image, a[0].smooth), + (b[0].material_index, tface[b[1]].image, b[0].smooth))) + elif len(materials) > 1: + try: + face_index_pairs.sort(key = lambda a: (a[0].material_index, a[0].smooth)) + except: + face_index_pairs.sort(lambda a,b: cmp((a[0].material_index, a[0].smooth), + (b[0].material_index, b[0].smooth))) + else: + # no materials + try: + face_index_pairs.sort(key = lambda a: a[0].smooth) + except: + face_index_pairs.sort(lambda a,b: cmp(a[0].smooth, b[0].smooth)) # if EXPORT_KEEP_VERT_ORDER: # pass # elif faceuv: @@ -563,58 +565,58 @@ def write(filename, objects, scene, # try: faces.sort(key = lambda a: a.smooth) # except: faces.sort(lambda a,b: cmp(a.smooth, b.smooth)) - faces = [pair[0] for pair in face_index_pairs] - - # Set the default mat to no material and no image. - contextMat = (0, 0) # Can never be this, so we will label a new material teh first chance we get. - contextSmooth = None # Will either be true or false, set bad to force initialization switch. - - if EXPORT_BLEN_OBS or EXPORT_GROUP_BY_OB: - name1 = ob.name - name2 = ob.data.name - if name1 == name2: - obnamestring = fixName(name1) - else: - obnamestring = '%s_%s' % (fixName(name1), fixName(name2)) - - if EXPORT_BLEN_OBS: - file.write('o %s\n' % obnamestring) # Write Object name - else: # if EXPORT_GROUP_BY_OB: - file.write('g %s\n' % obnamestring) - - - # Vert - for v in me.verts: - file.write('v %.6f %.6f %.6f\n' % tuple(v.co)) - - # UV - if faceuv: - uv_face_mapping = [[0,0,0,0] for f in faces] # a bit of a waste for tri's :/ + faces = [pair[0] for pair in face_index_pairs] - uv_dict = {} # could use a set() here - uv_layer = me.active_uv_texture - for f, f_index in face_index_pairs: + # Set the default mat to no material and no image. + contextMat = (0, 0) # Can never be this, so we will label a new material teh first chance we get. + contextSmooth = None # Will either be true or false, set bad to force initialization switch. - tface = uv_layer.data[f_index] + if EXPORT_BLEN_OBS or EXPORT_GROUP_BY_OB: + name1 = ob.name + name2 = ob.data.name + if name1 == name2: + obnamestring = fixName(name1) + else: + obnamestring = '%s_%s' % (fixName(name1), fixName(name2)) - uvs = tface.uv - # uvs = [tface.uv1, tface.uv2, tface.uv3] + if EXPORT_BLEN_OBS: + file.write('o %s\n' % obnamestring) # Write Object name + else: # if EXPORT_GROUP_BY_OB: + file.write('g %s\n' % obnamestring) - # # add another UV if it's a quad - # if len(f.verts) == 4: - # uvs.append(tface.uv4) - for uv_index, uv in enumerate(uvs): - uvkey = veckey2d(uv) - try: - uv_face_mapping[f_index][uv_index] = uv_dict[uvkey] - except: - uv_face_mapping[f_index][uv_index] = uv_dict[uvkey] = len(uv_dict) - file.write('vt %.6f %.6f\n' % tuple(uv)) + # Vert + for v in me.verts: + file.write('v %.6f %.6f %.6f\n' % tuple(v.co)) + + # UV + if faceuv: + uv_face_mapping = [[0,0,0,0] for f in faces] # a bit of a waste for tri's :/ + + uv_dict = {} # could use a set() here + uv_layer = me.active_uv_texture + for f, f_index in face_index_pairs: + + tface = uv_layer.data[f_index] + + uvs = tface.uv + # uvs = [tface.uv1, tface.uv2, tface.uv3] + + # # add another UV if it's a quad + # if len(f.verts) == 4: + # uvs.append(tface.uv4) + + for uv_index, uv in enumerate(uvs): + uvkey = veckey2d(uv) + try: + uv_face_mapping[f_index][uv_index] = uv_dict[uvkey] + except: + uv_face_mapping[f_index][uv_index] = uv_dict[uvkey] = len(uv_dict) + file.write('vt %.6f %.6f\n' % tuple(uv)) # uv_dict = {} # could use a set() here # for f_index, f in enumerate(faces): - + # for uv_index, uv in enumerate(f.uv): # uvkey = veckey2d(uv) # try: @@ -622,83 +624,83 @@ def write(filename, objects, scene, # except: # uv_face_mapping[f_index][uv_index] = uv_dict[uvkey] = len(uv_dict) # file.write('vt %.6f %.6f\n' % tuple(uv)) - - uv_unique_count = len(uv_dict) -# del uv, uvkey, uv_dict, f_index, uv_index - # Only need uv_unique_count and uv_face_mapping - - # NORMAL, Smooth/Non smoothed. - if EXPORT_NORMALS: - for f in faces: - if f.smooth: - for v in f: - noKey = veckey3d(v.normal) - if noKey not in globalNormals: - globalNormals[noKey] = totno - totno +=1 - file.write('vn %.6f %.6f %.6f\n' % noKey) - else: - # Hard, 1 normal from the face. - noKey = veckey3d(f.normal) - if noKey not in globalNormals: - globalNormals[noKey] = totno - totno +=1 - file.write('vn %.6f %.6f %.6f\n' % noKey) - - if not faceuv: - f_image = None - # XXX - if EXPORT_POLYGROUPS: - # Retrieve the list of vertex groups + uv_unique_count = len(uv_dict) +# del uv, uvkey, uv_dict, f_index, uv_index + # Only need uv_unique_count and uv_face_mapping + + # NORMAL, Smooth/Non smoothed. + if EXPORT_NORMALS: + for f in faces: + if f.smooth: + for v in f: + noKey = veckey3d(v.normal) + if noKey not in globalNormals: + globalNormals[noKey] = totno + totno +=1 + file.write('vn %.6f %.6f %.6f\n' % noKey) + else: + # Hard, 1 normal from the face. + noKey = veckey3d(f.normal) + if noKey not in globalNormals: + globalNormals[noKey] = totno + totno +=1 + file.write('vn %.6f %.6f %.6f\n' % noKey) + + if not faceuv: + f_image = None + + # XXX + if EXPORT_POLYGROUPS: + # Retrieve the list of vertex groups # vertGroupNames = me.getVertGroupNames() - currentVGroup = '' - # Create a dictionary keyed by face id and listing, for each vertex, the vertex groups it belongs to - vgroupsMap = [[] for _i in range(len(me.verts))] + currentVGroup = '' + # Create a dictionary keyed by face id and listing, for each vertex, the vertex groups it belongs to + vgroupsMap = [[] for _i in range(len(me.verts))] # vgroupsMap = [[] for _i in xrange(len(me.verts))] - for g in ob.vertex_groups: + for g in ob.vertex_groups: # for vertexGroupName in vertGroupNames: - for vIdx, vWeight in getVertsFromGroup(me, g.index): + for vIdx, vWeight in getVertsFromGroup(me, g.index): # for vIdx, vWeight in me.getVertsFromGroup(vertexGroupName, 1): - vgroupsMap[vIdx].append((g.name, vWeight)) + vgroupsMap[vIdx].append((g.name, vWeight)) - for f_index, f in enumerate(faces): - f_v = [{"index": index, "vertex": me.verts[index]} for index in f.verts] + for f_index, f in enumerate(faces): + f_v = [{"index": index, "vertex": me.verts[index]} for index in f.verts] - # if f.verts[3] == 0: - # f_v.pop() + # if f.verts[3] == 0: + # f_v.pop() # f_v= f.v - f_smooth= f.smooth - f_mat = min(f.material_index, len(materialNames)-1) + f_smooth= f.smooth + f_mat = min(f.material_index, len(materialNames)-1) # f_mat = min(f.mat, len(materialNames)-1) - if faceuv: + if faceuv: - tface = me.active_uv_texture.data[face_index_pairs[f_index][1]] + tface = me.active_uv_texture.data[face_index_pairs[f_index][1]] - f_image = tface.image - f_uv = tface.uv - # f_uv= [tface.uv1, tface.uv2, tface.uv3] - # if len(f.verts) == 4: - # f_uv.append(tface.uv4) + f_image = tface.image + f_uv = tface.uv + # f_uv= [tface.uv1, tface.uv2, tface.uv3] + # if len(f.verts) == 4: + # f_uv.append(tface.uv4) # f_image = f.image # f_uv= f.uv - - # MAKE KEY - if faceuv and f_image: # Object is always true. - key = materialNames[f_mat], f_image.name - else: - key = materialNames[f_mat], None # No image, use None instead. - # Write the vertex group - if EXPORT_POLYGROUPS: - if len(ob.vertex_groups): - # find what vertext group the face belongs to - theVGroup = findVertexGroupName(f,vgroupsMap) - if theVGroup != currentVGroup: - currentVGroup = theVGroup - file.write('g %s\n' % theVGroup) + # MAKE KEY + if faceuv and f_image: # Object is always true. + key = materialNames[f_mat], f_image.name + else: + key = materialNames[f_mat], None # No image, use None instead. + + # Write the vertex group + if EXPORT_POLYGROUPS: + if len(ob.vertex_groups): + # find what vertext group the face belongs to + theVGroup = findVertexGroupName(f,vgroupsMap) + if theVGroup != currentVGroup: + currentVGroup = theVGroup + file.write('g %s\n' % theVGroup) # # Write the vertex group # if EXPORT_POLYGROUPS: # if vertGroupNames: @@ -708,110 +710,110 @@ def write(filename, objects, scene, # currentVGroup = theVGroup # file.write('g %s\n' % theVGroup) - # CHECK FOR CONTEXT SWITCH - if key == contextMat: - pass # Context alredy switched, dont do anything - else: - if key[0] == None and key[1] == None: - # Write a null material, since we know the context has changed. - if EXPORT_GROUP_BY_MAT: - # can be mat_image or (null) - file.write('g %s_%s\n' % (fixName(ob.name), fixName(ob.data.name)) ) # can be mat_image or (null) - file.write('usemtl (null)\n') # mat, image - - else: - mat_data= MTL_DICT.get(key) - if not mat_data: - # First add to global dict so we can export to mtl - # Then write mtl - - # Make a new names from the mat and image name, - # converting any spaces to underscores with fixName. - - # If none image dont bother adding it to the name - if key[1] == None: - mat_data = MTL_DICT[key] = ('%s'%fixName(key[0])), materialItems[f_mat], f_image - else: - mat_data = MTL_DICT[key] = ('%s_%s' % (fixName(key[0]), fixName(key[1]))), materialItems[f_mat], f_image - - if EXPORT_GROUP_BY_MAT: - file.write('g %s_%s_%s\n' % (fixName(ob.name), fixName(ob.data.name), mat_data[0]) ) # can be mat_image or (null) + # CHECK FOR CONTEXT SWITCH + if key == contextMat: + pass # Context alredy switched, dont do anything + else: + if key[0] == None and key[1] == None: + # Write a null material, since we know the context has changed. + if EXPORT_GROUP_BY_MAT: + # can be mat_image or (null) + file.write('g %s_%s\n' % (fixName(ob.name), fixName(ob.data.name)) ) # can be mat_image or (null) + file.write('usemtl (null)\n') # mat, image - file.write('usemtl %s\n' % mat_data[0]) # can be mat_image or (null) - - contextMat = key - if f_smooth != contextSmooth: - if f_smooth: # on now off - file.write('s 1\n') - contextSmooth = f_smooth - else: # was off now on - file.write('s off\n') - contextSmooth = f_smooth - - file.write('f') - if faceuv: - if EXPORT_NORMALS: - if f_smooth: # Smoothed, use vertex normals - for vi, v in enumerate(f_v): - file.write( ' %d/%d/%d' % \ - (v["index"] + totverts, - totuvco + uv_face_mapping[f_index][vi], - globalNormals[ veckey3d(v["vertex"].normal) ]) ) # vert, uv, normal - - else: # No smoothing, face normals - no = globalNormals[ veckey3d(f.normal) ] - for vi, v in enumerate(f_v): - file.write( ' %d/%d/%d' % \ - (v["index"] + totverts, - totuvco + uv_face_mapping[f_index][vi], - no) ) # vert, uv, normal - else: # No Normals - for vi, v in enumerate(f_v): - file.write( ' %d/%d' % (\ - v["index"] + totverts,\ - totuvco + uv_face_mapping[f_index][vi])) # vert, uv - - face_vert_index += len(f_v) - - else: # No UV's - if EXPORT_NORMALS: - if f_smooth: # Smoothed, use vertex normals - for v in f_v: - file.write( ' %d//%d' % - (v["index"] + totverts, globalNormals[ veckey3d(v["vertex"].normal) ]) ) - else: # No smoothing, face normals - no = globalNormals[ veckey3d(f.normal) ] - for v in f_v: - file.write( ' %d//%d' % (v["index"] + totverts, no) ) - else: # No Normals - for v in f_v: - file.write( ' %d' % (v["index"] + totverts) ) - - file.write('\n') - - # Write edges. - if EXPORT_EDGES: - for ed in edges: - if ed.loose: - file.write('f %d %d\n' % (ed.verts[0] + totverts, ed.verts[1] + totverts)) - - # Make the indicies global rather then per mesh - totverts += len(me.verts) - if faceuv: - totuvco += uv_unique_count + else: + mat_data= MTL_DICT.get(key) + if not mat_data: + # First add to global dict so we can export to mtl + # Then write mtl - # clean up - bpy.data.remove_mesh(me) + # Make a new names from the mat and image name, + # converting any spaces to underscores with fixName. - if ob_main.dupli_type != 'NONE': - ob_main.free_dupli_list() + # If none image dont bother adding it to the name + if key[1] == None: + mat_data = MTL_DICT[key] = ('%s'%fixName(key[0])), materialItems[f_mat], f_image + else: + mat_data = MTL_DICT[key] = ('%s_%s' % (fixName(key[0]), fixName(key[1]))), materialItems[f_mat], f_image - file.close() - - - # Now we have all our materials, save them - if EXPORT_MTL: - write_mtl(scene, mtlfilename, EXPORT_COPY_IMAGES) + if EXPORT_GROUP_BY_MAT: + file.write('g %s_%s_%s\n' % (fixName(ob.name), fixName(ob.data.name), mat_data[0]) ) # can be mat_image or (null) + + file.write('usemtl %s\n' % mat_data[0]) # can be mat_image or (null) + + contextMat = key + if f_smooth != contextSmooth: + if f_smooth: # on now off + file.write('s 1\n') + contextSmooth = f_smooth + else: # was off now on + file.write('s off\n') + contextSmooth = f_smooth + + file.write('f') + if faceuv: + if EXPORT_NORMALS: + if f_smooth: # Smoothed, use vertex normals + for vi, v in enumerate(f_v): + file.write( ' %d/%d/%d' % \ + (v["index"] + totverts, + totuvco + uv_face_mapping[f_index][vi], + globalNormals[ veckey3d(v["vertex"].normal) ]) ) # vert, uv, normal + + else: # No smoothing, face normals + no = globalNormals[ veckey3d(f.normal) ] + for vi, v in enumerate(f_v): + file.write( ' %d/%d/%d' % \ + (v["index"] + totverts, + totuvco + uv_face_mapping[f_index][vi], + no) ) # vert, uv, normal + else: # No Normals + for vi, v in enumerate(f_v): + file.write( ' %d/%d' % (\ + v["index"] + totverts,\ + totuvco + uv_face_mapping[f_index][vi])) # vert, uv + + face_vert_index += len(f_v) + + else: # No UV's + if EXPORT_NORMALS: + if f_smooth: # Smoothed, use vertex normals + for v in f_v: + file.write( ' %d//%d' % + (v["index"] + totverts, globalNormals[ veckey3d(v["vertex"].normal) ]) ) + else: # No smoothing, face normals + no = globalNormals[ veckey3d(f.normal) ] + for v in f_v: + file.write( ' %d//%d' % (v["index"] + totverts, no) ) + else: # No Normals + for v in f_v: + file.write( ' %d' % (v["index"] + totverts) ) + + file.write('\n') + + # Write edges. + if EXPORT_EDGES: + for ed in edges: + if ed.loose: + file.write('f %d %d\n' % (ed.verts[0] + totverts, ed.verts[1] + totverts)) + + # Make the indicies global rather then per mesh + totverts += len(me.verts) + if faceuv: + totuvco += uv_unique_count + + # clean up + bpy.data.remove_mesh(me) + + if ob_main.dupli_type != 'NONE': + ob_main.free_dupli_list() + + file.close() + + + # Now we have all our materials, save them + if EXPORT_MTL: + write_mtl(scene, mtlfilename, EXPORT_COPY_IMAGES) # if EXPORT_COPY_IMAGES: # dest_dir = os.path.basename(filename) # # dest_dir = filename @@ -823,93 +825,93 @@ def write(filename, objects, scene, # else: # print('\tError: "%s" could not be used as a base for an image path.' % filename) - print("OBJ Export time: %.2f" % (time.clock() - time1)) + print("OBJ Export time: %.2f" % (time.clock() - time1)) # print "OBJ Export time: %.2f" % (sys.time() - time1) -def do_export(filename, context, - EXPORT_APPLY_MODIFIERS = True, # not used - EXPORT_ROTX90 = True, # wrong - EXPORT_TRI = False, # ok - EXPORT_EDGES = False, - EXPORT_NORMALS = False, # not yet - EXPORT_NORMALS_HQ = False, # not yet - EXPORT_UV = True, # ok - EXPORT_MTL = True, - EXPORT_SEL_ONLY = True, # ok - EXPORT_ALL_SCENES = False, # XXX not working atm - EXPORT_ANIMATION = False, - EXPORT_COPY_IMAGES = False, - EXPORT_BLEN_OBS = True, - EXPORT_GROUP_BY_OB = False, - EXPORT_GROUP_BY_MAT = False, - EXPORT_KEEP_VERT_ORDER = False, - EXPORT_POLYGROUPS = False, - EXPORT_CURVE_AS_NURBS = True): - # Window.EditMode(0) - # Window.WaitCursor(1) +def do_export(filename, context, + EXPORT_APPLY_MODIFIERS = True, # not used + EXPORT_ROTX90 = True, # wrong + EXPORT_TRI = False, # ok + EXPORT_EDGES = False, + EXPORT_NORMALS = False, # not yet + EXPORT_NORMALS_HQ = False, # not yet + EXPORT_UV = True, # ok + EXPORT_MTL = True, + EXPORT_SEL_ONLY = True, # ok + EXPORT_ALL_SCENES = False, # XXX not working atm + EXPORT_ANIMATION = False, + EXPORT_COPY_IMAGES = False, + EXPORT_BLEN_OBS = True, + EXPORT_GROUP_BY_OB = False, + EXPORT_GROUP_BY_MAT = False, + EXPORT_KEEP_VERT_ORDER = False, + EXPORT_POLYGROUPS = False, + EXPORT_CURVE_AS_NURBS = True): + # Window.EditMode(0) + # Window.WaitCursor(1) - base_name, ext = splitExt(filename) - context_name = [base_name, '', '', ext] # Base name, scene name, frame number, extension - - orig_scene = context.scene + base_name, ext = splitExt(filename) + context_name = [base_name, '', '', ext] # Base name, scene name, frame number, extension + + orig_scene = context.scene # if EXPORT_ALL_SCENES: # export_scenes = bpy.data.scenes # else: # export_scenes = [orig_scene] - # XXX only exporting one scene atm since changing - # current scene is not possible. - # Brecht says that ideally in 2.5 we won't need such a function, - # allowing multiple scenes open at once. - export_scenes = [orig_scene] + # XXX only exporting one scene atm since changing + # current scene is not possible. + # Brecht says that ideally in 2.5 we won't need such a function, + # allowing multiple scenes open at once. + export_scenes = [orig_scene] - # Export all scenes. - for scn in export_scenes: - # scn.makeCurrent() # If already current, this is not slow. - # context = scn.getRenderingContext() - orig_frame = scn.current_frame - - if EXPORT_ALL_SCENES: # Add scene name into the context_name - context_name[1] = '_%s' % bpy.utils.clean_name(scn.name) # WARNING, its possible that this could cause a collision. we could fix if were feeling parranoied. - - # Export an animation? - if EXPORT_ANIMATION: - scene_frames = range(scn.start_frame, context.end_frame+1) # Up to and including the end frame. - else: - scene_frames = [orig_frame] # Dont export an animation. - - # Loop through all frames in the scene and export. - for frame in scene_frames: - if EXPORT_ANIMATION: # Add frame to the filename. - context_name[2] = '_%.6d' % frame - - scn.current_frame = frame - if EXPORT_SEL_ONLY: - export_objects = context.selected_objects - else: - export_objects = scn.objects - - full_path= ''.join(context_name) - - # erm... bit of a problem here, this can overwrite files when exporting frames. not too bad. - # EXPORT THE FILE. - write(full_path, export_objects, scn, - EXPORT_TRI, EXPORT_EDGES, EXPORT_NORMALS, - EXPORT_NORMALS_HQ, EXPORT_UV, EXPORT_MTL, - EXPORT_COPY_IMAGES, EXPORT_APPLY_MODIFIERS, - EXPORT_ROTX90, EXPORT_BLEN_OBS, - EXPORT_GROUP_BY_OB, EXPORT_GROUP_BY_MAT, EXPORT_KEEP_VERT_ORDER, - EXPORT_POLYGROUPS, EXPORT_CURVE_AS_NURBS) + # Export all scenes. + for scn in export_scenes: + # scn.makeCurrent() # If already current, this is not slow. + # context = scn.getRenderingContext() + orig_frame = scn.current_frame - - scn.current_frame = orig_frame - - # Restore old active scene. + if EXPORT_ALL_SCENES: # Add scene name into the context_name + context_name[1] = '_%s' % bpy.utils.clean_name(scn.name) # WARNING, its possible that this could cause a collision. we could fix if were feeling parranoied. + + # Export an animation? + if EXPORT_ANIMATION: + scene_frames = range(scn.start_frame, context.end_frame+1) # Up to and including the end frame. + else: + scene_frames = [orig_frame] # Dont export an animation. + + # Loop through all frames in the scene and export. + for frame in scene_frames: + if EXPORT_ANIMATION: # Add frame to the filename. + context_name[2] = '_%.6d' % frame + + scn.current_frame = frame + if EXPORT_SEL_ONLY: + export_objects = context.selected_objects + else: + export_objects = scn.objects + + full_path= ''.join(context_name) + + # erm... bit of a problem here, this can overwrite files when exporting frames. not too bad. + # EXPORT THE FILE. + write(full_path, export_objects, scn, + EXPORT_TRI, EXPORT_EDGES, EXPORT_NORMALS, + EXPORT_NORMALS_HQ, EXPORT_UV, EXPORT_MTL, + EXPORT_COPY_IMAGES, EXPORT_APPLY_MODIFIERS, + EXPORT_ROTX90, EXPORT_BLEN_OBS, + EXPORT_GROUP_BY_OB, EXPORT_GROUP_BY_MAT, EXPORT_KEEP_VERT_ORDER, + EXPORT_POLYGROUPS, EXPORT_CURVE_AS_NURBS) + + + scn.current_frame = orig_frame + + # Restore old active scene. # orig_scene.makeCurrent() # Window.WaitCursor(0) - + ''' Currently the exporter lacks these features: * nurbs @@ -920,71 +922,71 @@ Currently the exporter lacks these features: from bpy.props import * class ExportOBJ(bpy.types.Operator): - '''Save a Wavefront OBJ File''' - - bl_idname = "export.obj" - bl_label = 'Export OBJ' - - # List of operator properties, the attributes will be assigned - # to the class instance from the operator settings before calling. + '''Save a Wavefront OBJ File''' - path = StringProperty(name="File Path", description="File path used for exporting the OBJ file", maxlen= 1024, default= "") + bl_idname = "export.obj" + bl_label = 'Export OBJ' - # context group - use_selection = BoolProperty(name="Selection Only", description="", default= False) - use_all_scenes = BoolProperty(name="All Scenes", description="", default= False) - use_animation = BoolProperty(name="All Animation", description="", default= False) + # List of operator properties, the attributes will be assigned + # to the class instance from the operator settings before calling. - # object group - use_modifiers = BoolProperty(name="Apply Modifiers", description="", default= True) - use_rotate90 = BoolProperty(name="Rotate X90", description="", default= True) + path = StringProperty(name="File Path", description="File path used for exporting the OBJ file", maxlen= 1024, default= "") - # extra data group - use_edges = BoolProperty(name="Edges", description="", default= True) - use_normals = BoolProperty(name="Normals", description="", default= False) - use_hq_normals = BoolProperty(name="High Quality Normals", description="", default= True) - use_uvs = BoolProperty(name="UVs", description="", default= True) - use_materials = BoolProperty(name="Materials", description="", default= True) - copy_images = BoolProperty(name="Copy Images", description="", default= False) - use_triangles = BoolProperty(name="Triangulate", description="", default= False) - use_vertex_groups = BoolProperty(name="Polygroups", description="", default= False) - use_nurbs = BoolProperty(name="Nurbs", description="", default= False) + # context group + use_selection = BoolProperty(name="Selection Only", description="", default= False) + use_all_scenes = BoolProperty(name="All Scenes", description="", default= False) + use_animation = BoolProperty(name="All Animation", description="", default= False) - # grouping group - use_blen_objects = BoolProperty(name="Objects as OBJ Objects", description="", default= True) - group_by_object = BoolProperty(name="Objects as OBJ Groups ", description="", default= False) - group_by_material = BoolProperty(name="Material Groups", description="", default= False) - keep_vertex_order = BoolProperty(name="Keep Vertex Order", description="", default= False) - - - def execute(self, context): + # object group + use_modifiers = BoolProperty(name="Apply Modifiers", description="", default= True) + use_rotate90 = BoolProperty(name="Rotate X90", description="", default= True) - do_export(self.properties.path, context, - EXPORT_TRI=self.properties.use_triangles, - EXPORT_EDGES=self.properties.use_edges, - EXPORT_NORMALS=self.properties.use_normals, - EXPORT_NORMALS_HQ=self.properties.use_hq_normals, - EXPORT_UV=self.properties.use_uvs, - EXPORT_MTL=self.properties.use_materials, - EXPORT_COPY_IMAGES=self.properties.copy_images, - EXPORT_APPLY_MODIFIERS=self.properties.use_modifiers, - EXPORT_ROTX90=self.properties.use_rotate90, - EXPORT_BLEN_OBS=self.properties.use_blen_objects, - EXPORT_GROUP_BY_OB=self.properties.group_by_object, - EXPORT_GROUP_BY_MAT=self.properties.group_by_material, - EXPORT_KEEP_VERT_ORDER=self.properties.keep_vertex_order, - EXPORT_POLYGROUPS=self.properties.use_vertex_groups, - EXPORT_CURVE_AS_NURBS=self.properties.use_nurbs, - EXPORT_SEL_ONLY=self.properties.use_selection, - EXPORT_ALL_SCENES=self.properties.use_all_scenes) + # extra data group + use_edges = BoolProperty(name="Edges", description="", default= True) + use_normals = BoolProperty(name="Normals", description="", default= False) + use_hq_normals = BoolProperty(name="High Quality Normals", description="", default= True) + use_uvs = BoolProperty(name="UVs", description="", default= True) + use_materials = BoolProperty(name="Materials", description="", default= True) + copy_images = BoolProperty(name="Copy Images", description="", default= False) + use_triangles = BoolProperty(name="Triangulate", description="", default= False) + use_vertex_groups = BoolProperty(name="Polygroups", description="", default= False) + use_nurbs = BoolProperty(name="Nurbs", description="", default= False) + + # grouping group + use_blen_objects = BoolProperty(name="Objects as OBJ Objects", description="", default= True) + group_by_object = BoolProperty(name="Objects as OBJ Groups ", description="", default= False) + group_by_material = BoolProperty(name="Material Groups", description="", default= False) + keep_vertex_order = BoolProperty(name="Keep Vertex Order", description="", default= False) + + + def execute(self, context): + + do_export(self.properties.path, context, + EXPORT_TRI=self.properties.use_triangles, + EXPORT_EDGES=self.properties.use_edges, + EXPORT_NORMALS=self.properties.use_normals, + EXPORT_NORMALS_HQ=self.properties.use_hq_normals, + EXPORT_UV=self.properties.use_uvs, + EXPORT_MTL=self.properties.use_materials, + EXPORT_COPY_IMAGES=self.properties.copy_images, + EXPORT_APPLY_MODIFIERS=self.properties.use_modifiers, + EXPORT_ROTX90=self.properties.use_rotate90, + EXPORT_BLEN_OBS=self.properties.use_blen_objects, + EXPORT_GROUP_BY_OB=self.properties.group_by_object, + EXPORT_GROUP_BY_MAT=self.properties.group_by_material, + EXPORT_KEEP_VERT_ORDER=self.properties.keep_vertex_order, + EXPORT_POLYGROUPS=self.properties.use_vertex_groups, + EXPORT_CURVE_AS_NURBS=self.properties.use_nurbs, + EXPORT_SEL_ONLY=self.properties.use_selection, + EXPORT_ALL_SCENES=self.properties.use_all_scenes) + + return ('FINISHED',) + + def invoke(self, context, event): + wm = context.manager + wm.add_fileselect(self) + return ('RUNNING_MODAL',) - return ('FINISHED',) - - def invoke(self, context, event): - wm = context.manager - wm.add_fileselect(self) - return ('RUNNING_MODAL',) - @@ -1000,7 +1002,7 @@ def menu_func(self, context): menu_item = dynamic_menu.add(bpy.types.INFO_MT_file_export, menu_func) if __name__ == "__main__": - bpy.ops.EXPORT_OT_obj(filename="/tmp/test.obj") + bpy.ops.EXPORT_OT_obj(filename="/tmp/test.obj") # CONVERSION ISSUES # - matrix problem diff --git a/release/scripts/io/export_ply.py b/release/scripts/io/export_ply.py index f9720be4646..858e22952b8 100644 --- a/release/scripts/io/export_ply.py +++ b/release/scripts/io/export_ply.py @@ -4,24 +4,26 @@ # 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # ##### END GPL LICENSE BLOCK ##### +# + import bpy __author__ = "Bruce Merry" __version__ = "0.93" __bpydoc__ = """\ -This script exports Stanford PLY files from Blender. It supports normals, +This script exports Stanford PLY files from Blender. It supports normals, colours, and texture coordinates per face or per vertex. Only one mesh can be exported at a time. """ @@ -65,253 +67,265 @@ Only one mesh can be exported at a time. # -def rvec3d(v): return round(v[0], 6), round(v[1], 6), round(v[2], 6) -def rvec2d(v): return round(v[0], 6), round(v[1], 6) +def rvec3d(v): + return round(v[0], 6), round(v[1], 6), round(v[2], 6) + + +def rvec2d(v): + return round(v[0], 6), round(v[1], 6) + def write(filename, scene, ob, \ - EXPORT_APPLY_MODIFIERS= True,\ - EXPORT_NORMALS= True,\ - EXPORT_UV= True,\ - EXPORT_COLORS= True\ - ): - - if not filename.lower().endswith('.ply'): - filename += '.ply' - - if not ob: - raise Exception("Error, Select 1 active object") - return - - file = open(filename, 'w') - - - #EXPORT_EDGES = Draw.Create(0) - """ - is_editmode = Blender.Window.EditMode() - if is_editmode: - Blender.Window.EditMode(0, '', 0) - - Window.WaitCursor(1) - """ - - #mesh = BPyMesh.getMeshFromObject(ob, None, EXPORT_APPLY_MODIFIERS, False, scn) # XXX - if EXPORT_APPLY_MODIFIERS: - mesh = ob.create_mesh(True, 'PREVIEW') - else: - mesh = ob.data - - if not mesh: - raise ("Error, could not get mesh data from active object") - return - - # mesh.transform(ob.matrixWorld) # XXX - - faceUV = len(mesh.uv_textures) > 0 - vertexUV = len(mesh.sticky) > 0 - vertexColors = len(mesh.vertex_colors) > 0 - - if (not faceUV) and (not vertexUV): EXPORT_UV = False - if not vertexColors: EXPORT_COLORS = False - - if not EXPORT_UV: faceUV = vertexUV = False - if not EXPORT_COLORS: vertexColors = False - - if faceUV: - active_uv_layer = None - for lay in mesh.uv_textures: - if lay.active: - active_uv_layer= lay.data - break - if not active_uv_layer: - EXPORT_UV = False - faceUV = None - - if vertexColors: - active_col_layer = None - for lay in mesh.vertex_colors: - if lay.active: - active_col_layer= lay.data - if not active_col_layer: - EXPORT_COLORS = False - vertexColors = None - - # incase - color = uvcoord = uvcoord_key = normal = normal_key = None - - mesh_verts = mesh.verts # save a lookup - ply_verts = [] # list of dictionaries - # vdict = {} # (index, normal, uv) -> new index - vdict = [{} for i in range(len(mesh_verts))] - ply_faces = [[] for f in range(len(mesh.faces))] - vert_count = 0 - for i, f in enumerate(mesh.faces): - - - smooth = f.smooth - if not smooth: - normal = tuple(f.normal) - normal_key = rvec3d(normal) - - if faceUV: - uv = active_uv_layer[i] - uv = uv.uv1, uv.uv2, uv.uv3, uv.uv4 # XXX - crufty :/ - if vertexColors: - col = active_col_layer[i] - col = col.color1, col.color2, col.color3, col.color4 - - f_verts= f.verts - - pf= ply_faces[i] - for j, vidx in enumerate(f_verts): - v = mesh_verts[vidx] - - if smooth: - normal= tuple(v.normal) - normal_key = rvec3d(normal) - - if faceUV: - uvcoord= uv[j][0], 1.0-uv[j][1] - uvcoord_key = rvec2d(uvcoord) - elif vertexUV: - uvcoord= v.uvco[0], 1.0-v.uvco[1] - uvcoord_key = rvec2d(uvcoord) - - if vertexColors: - color= col[j] - color= int(color[0]*255.0), int(color[1]*255.0), int(color[2]*255.0) - - - key = normal_key, uvcoord_key, color - - vdict_local = vdict[vidx] - pf_vidx = vdict_local.get(key) # Will be None initially - - if pf_vidx == None: # same as vdict_local.has_key(key) - pf_vidx = vdict_local[key] = vert_count; - ply_verts.append((vidx, normal, uvcoord, color)) - vert_count += 1 - - pf.append(pf_vidx) - - file.write('ply\n') - file.write('format ascii 1.0\n') - version = "2.5" # Blender.Get('version') - file.write('comment Created by Blender3D %s - www.blender.org, source file: %s\n' % (version, bpy.data.filename.split('/')[-1].split('\\')[-1] )) - - file.write('element vertex %d\n' % len(ply_verts)) - - file.write('property float x\n') - file.write('property float y\n') - file.write('property float z\n') - - # XXX - """ - if EXPORT_NORMALS: - file.write('property float nx\n') - file.write('property float ny\n') - file.write('property float nz\n') - """ - if EXPORT_UV: - file.write('property float s\n') - file.write('property float t\n') - if EXPORT_COLORS: - file.write('property uchar red\n') - file.write('property uchar green\n') - file.write('property uchar blue\n') - - file.write('element face %d\n' % len(mesh.faces)) - file.write('property list uchar uint vertex_indices\n') - file.write('end_header\n') + EXPORT_APPLY_MODIFIERS=True,\ + EXPORT_NORMALS=True,\ + EXPORT_UV=True,\ + EXPORT_COLORS=True): - for i, v in enumerate(ply_verts): - file.write('%.6f %.6f %.6f ' % tuple(mesh_verts[v[0]].co)) # co - """ - if EXPORT_NORMALS: - file.write('%.6f %.6f %.6f ' % v[1]) # no - """ - if EXPORT_UV: file.write('%.6f %.6f ' % v[2]) # uv - if EXPORT_COLORS: file.write('%u %u %u' % v[3]) # col - file.write('\n') - - for pf in ply_faces: - if len(pf)==3: file.write('3 %d %d %d\n' % tuple(pf)) - else: file.write('4 %d %d %d %d\n' % tuple(pf)) - - file.close() - print("writing", filename, "done") - - if EXPORT_APPLY_MODIFIERS: - bpy.data.remove_mesh(mesh) - - # XXX - """ - if is_editmode: - Blender.Window.EditMode(1, '', 0) - """ + if not filename.lower().endswith('.ply'): + filename += '.ply' + + if not ob: + raise Exception("Error, Select 1 active object") + return + + file = open(filename, 'w') + + + #EXPORT_EDGES = Draw.Create(0) + """ + is_editmode = Blender.Window.EditMode() + if is_editmode: + Blender.Window.EditMode(0, '', 0) + + Window.WaitCursor(1) + """ + + #mesh = BPyMesh.getMeshFromObject(ob, None, EXPORT_APPLY_MODIFIERS, False, scn) # XXX + if EXPORT_APPLY_MODIFIERS: + mesh = ob.create_mesh(True, 'PREVIEW') + else: + mesh = ob.data + + if not mesh: + raise ("Error, could not get mesh data from active object") + return + + # mesh.transform(ob.matrixWorld) # XXX + + faceUV = (len(mesh.uv_textures) > 0) + vertexUV = (len(mesh.sticky) > 0) + vertexColors = len(mesh.vertex_colors) > 0 + + if (not faceUV) and (not vertexUV): + EXPORT_UV = False + if not vertexColors: + EXPORT_COLORS = False + + if not EXPORT_UV: + faceUV = vertexUV = False + if not EXPORT_COLORS: + vertexColors = False + + if faceUV: + active_uv_layer = None + for lay in mesh.uv_textures: + if lay.active: + active_uv_layer = lay.data + break + if not active_uv_layer: + EXPORT_UV = False + faceUV = None + + if vertexColors: + active_col_layer = None + for lay in mesh.vertex_colors: + if lay.active: + active_col_layer = lay.data + if not active_col_layer: + EXPORT_COLORS = False + vertexColors = None + + # incase + color = uvcoord = uvcoord_key = normal = normal_key = None + + mesh_verts = mesh.verts # save a lookup + ply_verts = [] # list of dictionaries + # vdict = {} # (index, normal, uv) -> new index + vdict = [{} for i in range(len(mesh_verts))] + ply_faces = [[] for f in range(len(mesh.faces))] + vert_count = 0 + for i, f in enumerate(mesh.faces): + + + smooth = f.smooth + if not smooth: + normal = tuple(f.normal) + normal_key = rvec3d(normal) + + if faceUV: + uv = active_uv_layer[i] + uv = uv.uv1, uv.uv2, uv.uv3, uv.uv4 # XXX - crufty :/ + if vertexColors: + col = active_col_layer[i] + col = col.color1, col.color2, col.color3, col.color4 + + f_verts = f.verts + + pf = ply_faces[i] + for j, vidx in enumerate(f_verts): + v = mesh_verts[vidx] + + if smooth: + normal = tuple(v.normal) + normal_key = rvec3d(normal) + + if faceUV: + uvcoord = uv[j][0], 1.0-uv[j][1] + uvcoord_key = rvec2d(uvcoord) + elif vertexUV: + uvcoord = v.uvco[0], 1.0 - v.uvco[1] + uvcoord_key = rvec2d(uvcoord) + + if vertexColors: + color = col[j] + color = int(color[0] * 255.0), int(color[1] * 255.0), int(color[2] * 255.0) + + + key = normal_key, uvcoord_key, color + + vdict_local = vdict[vidx] + pf_vidx = vdict_local.get(key) # Will be None initially + + if pf_vidx == None: # same as vdict_local.has_key(key) + pf_vidx = vdict_local[key] = vert_count + ply_verts.append((vidx, normal, uvcoord, color)) + vert_count += 1 + + pf.append(pf_vidx) + + file.write('ply\n') + file.write('format ascii 1.0\n') + version = "2.5" # Blender.Get('version') + file.write('comment Created by Blender3D %s - www.blender.org, source file: %s\n' % (version, bpy.data.filename.split('/')[-1].split('\\')[-1])) + + file.write('element vertex %d\n' % len(ply_verts)) + + file.write('property float x\n') + file.write('property float y\n') + file.write('property float z\n') + + # XXX + """ + if EXPORT_NORMALS: + file.write('property float nx\n') + file.write('property float ny\n') + file.write('property float nz\n') + """ + if EXPORT_UV: + file.write('property float s\n') + file.write('property float t\n') + if EXPORT_COLORS: + file.write('property uchar red\n') + file.write('property uchar green\n') + file.write('property uchar blue\n') + + file.write('element face %d\n' % len(mesh.faces)) + file.write('property list uchar uint vertex_indices\n') + file.write('end_header\n') + + for i, v in enumerate(ply_verts): + file.write('%.6f %.6f %.6f ' % tuple(mesh_verts[v[0]].co)) # co + """ + if EXPORT_NORMALS: + file.write('%.6f %.6f %.6f ' % v[1]) # no + """ + if EXPORT_UV: + file.write('%.6f %.6f ' % v[2]) # uv + if EXPORT_COLORS: + file.write('%u %u %u' % v[3]) # col + file.write('\n') + + for pf in ply_faces: + if len(pf)==3: + file.write('3 %d %d %d\n' % tuple(pf)) + else: + file.write('4 %d %d %d %d\n' % tuple(pf)) + + file.close() + print("writing", filename, "done") + + if EXPORT_APPLY_MODIFIERS: + bpy.data.remove_mesh(mesh) + + # XXX + """ + if is_editmode: + Blender.Window.EditMode(1, '', 0) + """ from bpy.props import * class ExportPLY(bpy.types.Operator): - '''Export a single object as a stanford PLY with normals, colours and texture coordinates.''' - bl_idname = "export.ply" - bl_label = "Export PLY" - - # List of operator properties, the attributes will be assigned - # to the class instance from the operator settings before calling. - - - path = StringProperty(name="File Path", description="File path used for exporting the PLY file", maxlen= 1024, default= "") - use_modifiers = BoolProperty(name="Apply Modifiers", description="Apply Modifiers to the exported mesh", default= True) - use_normals = BoolProperty(name="Normals", description="Export Normals for smooth and hard shaded faces", default= True) - use_uvs = BoolProperty(name="UVs", description="Exort the active UV layer", default= True) - use_colors = BoolProperty(name="Vertex Colors", description="Exort the active vertex color layer", default= True) - - - def poll(self, context): - return context.active_object != None - - def execute(self, context): - # print("Selected: " + context.active_object.name) + '''Export a single object as a stanford PLY with normals, colours and texture coordinates.''' + bl_idname = "export.ply" + bl_label = "Export PLY" - if not self.properties.path: - raise Exception("filename not set") - - write(self.properties.path, context.scene, context.active_object,\ - EXPORT_APPLY_MODIFIERS = self.properties.use_modifiers, - EXPORT_NORMALS = self.properties.use_normals, - EXPORT_UV = self.properties.use_uvs, - EXPORT_COLORS = self.properties.use_colors, - ) + # List of operator properties, the attributes will be assigned + # to the class instance from the operator settings before calling. - return ('FINISHED',) - - def invoke(self, context, event): - wm = context.manager - wm.add_fileselect(self) - return ('RUNNING_MODAL',) - def draw(self, context): - layout = self.layout - props = self.properties + path = StringProperty(name="File Path", description="File path used for exporting the PLY file", maxlen=1024, default="") + use_modifiers = BoolProperty(name="Apply Modifiers", description="Apply Modifiers to the exported mesh", default=True) + use_normals = BoolProperty(name="Normals", description="Export Normals for smooth and hard shaded faces", default=True) + use_uvs = BoolProperty(name="UVs", description="Exort the active UV layer", default=True) + use_colors = BoolProperty(name="Vertex Colors", description="Exort the active vertex color layer", default=True) - row = layout.row() - row.prop(props, "use_modifiers") - row.prop(props, "use_normals") - row = layout.row() - row.prop(props, "use_uvs") - row.prop(props, "use_colors") + def poll(self, context): + return context.active_object != None + + def execute(self, context): + # print("Selected: " + context.active_object.name) + + if not self.properties.path: + raise Exception("filename not set") + + write(self.properties.path, context.scene, context.active_object,\ + EXPORT_APPLY_MODIFIERS=self.properties.use_modifiers, + EXPORT_NORMALS=self.properties.use_normals, + EXPORT_UV=self.properties.use_uvs, + EXPORT_COLORS=self.properties.use_colors, + ) + + return ('FINISHED',) + + def invoke(self, context, event): + wm = context.manager + wm.add_fileselect(self) + return ('RUNNING_MODAL',) + + def draw(self, context): + layout = self.layout + props = self.properties + + row = layout.row() + row.prop(props, "use_modifiers") + row.prop(props, "use_normals") + row = layout.row() + row.prop(props, "use_uvs") + row.prop(props, "use_colors") bpy.ops.add(ExportPLY) import dynamic_menu + def menu_func(self, context): - default_path = bpy.data.filename.replace(".blend", ".ply") - self.layout.operator(ExportPLY.bl_idname, text="Stanford (.ply)...").path = default_path + default_path = bpy.data.filename.replace(".blend", ".ply") + self.layout.operator(ExportPLY.bl_idname, text="Stanford (.ply)...").path = default_path menu_item = dynamic_menu.add(bpy.types.INFO_MT_file_export, menu_func) if __name__ == "__main__": - bpy.ops.export.ply(path="/tmp/test.ply") + bpy.ops.export.ply(path="/tmp/test.ply") diff --git a/release/scripts/io/export_x3d.py b/release/scripts/io/export_x3d.py index 8546d8619f4..6cfe0f45626 100644 --- a/release/scripts/io/export_x3d.py +++ b/release/scripts/io/export_x3d.py @@ -4,18 +4,20 @@ # 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # ##### END GPL LICENSE BLOCK ##### +# + __author__ = ("Bart", "Campbell Barton") __email__ = ["Bart, bart:neeneenee*de"] __url__ = ["Author's (Bart) homepage, http://www.neeneenee.de/vrml"] @@ -29,9 +31,9 @@ Run this script from "File->Export" menu. A pop-up will ask whether you want to export only selected or all relevant objects. Known issues:
- Doesn't handle multiple materials (don't use material indices);
- Doesn't handle multiple UV textures on a single mesh (create a mesh for each texture);
- Can't get the texture array associated with material * not the UV ones; + Doesn't handle multiple materials (don't use material indices);
+ Doesn't handle multiple UV textures on a single mesh (create a mesh for each texture);
+ Can't get the texture array associated with material * not the UV ones; """ @@ -77,7 +79,7 @@ from export_3ds import create_derived_objects, free_derived_objects # import BPyObject # import BPyMesh -# +# DEG2RAD=0.017453292519943295 MATWORLD= Mathutils.RotationMatrix(-90, 4, 'x') @@ -97,1111 +99,1111 @@ extension = '' class x3d_class: - def __init__(self, filename): - #--- public you can change these --- - self.writingcolor = 0 - self.writingtexture = 0 - self.writingcoords = 0 - self.proto = 1 - self.matonly = 0 - self.share = 0 - self.billnode = 0 - self.halonode = 0 - self.collnode = 0 - self.tilenode = 0 - self.verbose=2 # level of verbosity in console 0-none, 1-some, 2-most - self.cp=3 # decimals for material color values 0.000 - 1.000 - self.vp=3 # decimals for vertex coordinate values 0.000 - n.000 - self.tp=3 # decimals for texture coordinate values 0.000 - 1.000 - self.it=3 - - #--- class private don't touch --- - self.texNames={} # dictionary of textureNames - self.matNames={} # dictionary of materiaNames - self.meshNames={} # dictionary of meshNames - self.indentLevel=0 # keeps track of current indenting - self.filename=filename - self.file = None - if filename.lower().endswith('.x3dz'): - try: - import gzip - self.file = gzip.open(filename, "w") - except: - print("failed to import compression modules, exporting uncompressed") - self.filename = filename[:-1] # remove trailing z - - if self.file == None: - self.file = open(self.filename, "w") + def __init__(self, filename): + #--- public you can change these --- + self.writingcolor = 0 + self.writingtexture = 0 + self.writingcoords = 0 + self.proto = 1 + self.matonly = 0 + self.share = 0 + self.billnode = 0 + self.halonode = 0 + self.collnode = 0 + self.tilenode = 0 + self.verbose=2 # level of verbosity in console 0-none, 1-some, 2-most + self.cp=3 # decimals for material color values 0.000 - 1.000 + self.vp=3 # decimals for vertex coordinate values 0.000 - n.000 + self.tp=3 # decimals for texture coordinate values 0.000 - 1.000 + self.it=3 - self.bNav=0 - self.nodeID=0 - self.namesReserved=[ "Anchor","Appearance","Arc2D","ArcClose2D","AudioClip","Background","Billboard", - "BooleanFilter","BooleanSequencer","BooleanToggle","BooleanTrigger","Box","Circle2D", - "Collision","Color","ColorInterpolator","ColorRGBA","component","Cone","connect", - "Contour2D","ContourPolyline2D","Coordinate","CoordinateDouble","CoordinateInterpolator", - "CoordinateInterpolator2D","Cylinder","CylinderSensor","DirectionalLight","Disk2D", - "ElevationGrid","EspduTransform","EXPORT","ExternProtoDeclare","Extrusion","field", - "fieldValue","FillProperties","Fog","FontStyle","GeoCoordinate","GeoElevationGrid", - "GeoLocationLocation","GeoLOD","GeoMetadata","GeoOrigin","GeoPositionInterpolator", - "GeoTouchSensor","GeoViewpoint","Group","HAnimDisplacer","HAnimHumanoid","HAnimJoint", - "HAnimSegment","HAnimSite","head","ImageTexture","IMPORT","IndexedFaceSet", - "IndexedLineSet","IndexedTriangleFanSet","IndexedTriangleSet","IndexedTriangleStripSet", - "Inline","IntegerSequencer","IntegerTrigger","IS","KeySensor","LineProperties","LineSet", - "LoadSensor","LOD","Material","meta","MetadataDouble","MetadataFloat","MetadataInteger", - "MetadataSet","MetadataString","MovieTexture","MultiTexture","MultiTextureCoordinate", - "MultiTextureTransform","NavigationInfo","Normal","NormalInterpolator","NurbsCurve", - "NurbsCurve2D","NurbsOrientationInterpolator","NurbsPatchSurface", - "NurbsPositionInterpolator","NurbsSet","NurbsSurfaceInterpolator","NurbsSweptSurface", - "NurbsSwungSurface","NurbsTextureCoordinate","NurbsTrimmedSurface","OrientationInterpolator", - "PixelTexture","PlaneSensor","PointLight","PointSet","Polyline2D","Polypoint2D", - "PositionInterpolator","PositionInterpolator2D","ProtoBody","ProtoDeclare","ProtoInstance", - "ProtoInterface","ProximitySensor","ReceiverPdu","Rectangle2D","ROUTE","ScalarInterpolator", - "Scene","Script","Shape","SignalPdu","Sound","Sphere","SphereSensor","SpotLight","StaticGroup", - "StringSensor","Switch","Text","TextureBackground","TextureCoordinate","TextureCoordinateGenerator", - "TextureTransform","TimeSensor","TimeTrigger","TouchSensor","Transform","TransmitterPdu", - "TriangleFanSet","TriangleSet","TriangleSet2D","TriangleStripSet","Viewpoint","VisibilitySensor", - "WorldInfo","X3D","XvlShell","VertexShader","FragmentShader","MultiShaderAppearance","ShaderAppearance" ] - self.namesStandard=[ "Empty","Empty.000","Empty.001","Empty.002","Empty.003","Empty.004","Empty.005", - "Empty.006","Empty.007","Empty.008","Empty.009","Empty.010","Empty.011","Empty.012", - "Scene.001","Scene.002","Scene.003","Scene.004","Scene.005","Scene.06","Scene.013", - "Scene.006","Scene.007","Scene.008","Scene.009","Scene.010","Scene.011","Scene.012", - "World","World.000","World.001","World.002","World.003","World.004","World.005" ] - self.namesFog=[ "","LINEAR","EXPONENTIAL","" ] + #--- class private don't touch --- + self.texNames={} # dictionary of textureNames + self.matNames={} # dictionary of materiaNames + self.meshNames={} # dictionary of meshNames + self.indentLevel=0 # keeps track of current indenting + self.filename=filename + self.file = None + if filename.lower().endswith('.x3dz'): + try: + import gzip + self.file = gzip.open(filename, "w") + except: + print("failed to import compression modules, exporting uncompressed") + self.filename = filename[:-1] # remove trailing z + + if self.file == None: + self.file = open(self.filename, "w") + + self.bNav=0 + self.nodeID=0 + self.namesReserved=[ "Anchor","Appearance","Arc2D","ArcClose2D","AudioClip","Background","Billboard", + "BooleanFilter","BooleanSequencer","BooleanToggle","BooleanTrigger","Box","Circle2D", + "Collision","Color","ColorInterpolator","ColorRGBA","component","Cone","connect", + "Contour2D","ContourPolyline2D","Coordinate","CoordinateDouble","CoordinateInterpolator", + "CoordinateInterpolator2D","Cylinder","CylinderSensor","DirectionalLight","Disk2D", + "ElevationGrid","EspduTransform","EXPORT","ExternProtoDeclare","Extrusion","field", + "fieldValue","FillProperties","Fog","FontStyle","GeoCoordinate","GeoElevationGrid", + "GeoLocationLocation","GeoLOD","GeoMetadata","GeoOrigin","GeoPositionInterpolator", + "GeoTouchSensor","GeoViewpoint","Group","HAnimDisplacer","HAnimHumanoid","HAnimJoint", + "HAnimSegment","HAnimSite","head","ImageTexture","IMPORT","IndexedFaceSet", + "IndexedLineSet","IndexedTriangleFanSet","IndexedTriangleSet","IndexedTriangleStripSet", + "Inline","IntegerSequencer","IntegerTrigger","IS","KeySensor","LineProperties","LineSet", + "LoadSensor","LOD","Material","meta","MetadataDouble","MetadataFloat","MetadataInteger", + "MetadataSet","MetadataString","MovieTexture","MultiTexture","MultiTextureCoordinate", + "MultiTextureTransform","NavigationInfo","Normal","NormalInterpolator","NurbsCurve", + "NurbsCurve2D","NurbsOrientationInterpolator","NurbsPatchSurface", + "NurbsPositionInterpolator","NurbsSet","NurbsSurfaceInterpolator","NurbsSweptSurface", + "NurbsSwungSurface","NurbsTextureCoordinate","NurbsTrimmedSurface","OrientationInterpolator", + "PixelTexture","PlaneSensor","PointLight","PointSet","Polyline2D","Polypoint2D", + "PositionInterpolator","PositionInterpolator2D","ProtoBody","ProtoDeclare","ProtoInstance", + "ProtoInterface","ProximitySensor","ReceiverPdu","Rectangle2D","ROUTE","ScalarInterpolator", + "Scene","Script","Shape","SignalPdu","Sound","Sphere","SphereSensor","SpotLight","StaticGroup", + "StringSensor","Switch","Text","TextureBackground","TextureCoordinate","TextureCoordinateGenerator", + "TextureTransform","TimeSensor","TimeTrigger","TouchSensor","Transform","TransmitterPdu", + "TriangleFanSet","TriangleSet","TriangleSet2D","TriangleStripSet","Viewpoint","VisibilitySensor", + "WorldInfo","X3D","XvlShell","VertexShader","FragmentShader","MultiShaderAppearance","ShaderAppearance" ] + self.namesStandard=[ "Empty","Empty.000","Empty.001","Empty.002","Empty.003","Empty.004","Empty.005", + "Empty.006","Empty.007","Empty.008","Empty.009","Empty.010","Empty.011","Empty.012", + "Scene.001","Scene.002","Scene.003","Scene.004","Scene.005","Scene.06","Scene.013", + "Scene.006","Scene.007","Scene.008","Scene.009","Scene.010","Scene.011","Scene.012", + "World","World.000","World.001","World.002","World.003","World.004","World.005" ] + self.namesFog=[ "","LINEAR","EXPONENTIAL","" ] ########################################################## # Writing nodes routines ########################################################## - def writeHeader(self): - #bfile = sys.expandpath( Blender.Get('filename') ).replace('<', '<').replace('>', '>') - bfile = self.filename.replace('<', '<').replace('>', '>') # use outfile name - self.file.write("\n") - self.file.write("\n") - self.file.write("\n") - self.file.write("\n") - self.file.write("\t\n" % os.path.basename(bfile)) - # self.file.write("\t\n" % sys.basename(bfile)) - self.file.write("\t\n" % '2.5') - # self.file.write("\t\n" % Blender.Get('version')) - self.file.write("\t\n") - self.file.write("\n") - self.file.write("\n") - - # This functionality is poorly defined, disabling for now - campbell - ''' - def writeInline(self): - inlines = Blender.Scene.Get() - allinlines = len(inlines) - if scene != inlines[0]: - return - else: - for i in xrange(allinlines): - nameinline=inlines[i].name - if (nameinline not in self.namesStandard) and (i > 0): - self.file.write("" % nameinline) - self.file.write("\n\n") + def writeHeader(self): + #bfile = sys.expandpath( Blender.Get('filename') ).replace('<', '<').replace('>', '>') + bfile = self.filename.replace('<', '<').replace('>', '>') # use outfile name + self.file.write("\n") + self.file.write("\n") + self.file.write("\n") + self.file.write("\n") + self.file.write("\t\n" % os.path.basename(bfile)) + # self.file.write("\t\n" % sys.basename(bfile)) + self.file.write("\t\n" % '2.5') + # self.file.write("\t\n" % Blender.Get('version')) + self.file.write("\t\n") + self.file.write("\n") + self.file.write("\n") - - def writeScript(self): - textEditor = Blender.Text.Get() - alltext = len(textEditor) - for i in xrange(alltext): - nametext = textEditor[i].name - nlines = textEditor[i].getNLines() - if (self.proto == 1): - if (nametext == "proto" or nametext == "proto.js" or nametext == "proto.txt") and (nlines != None): - nalllines = len(textEditor[i].asLines()) - alllines = textEditor[i].asLines() - for j in xrange(nalllines): - self.writeIndented(alllines[j] + "\n") - elif (self.proto == 0): - if (nametext == "route" or nametext == "route.js" or nametext == "route.txt") and (nlines != None): - nalllines = len(textEditor[i].asLines()) - alllines = textEditor[i].asLines() - for j in xrange(nalllines): - self.writeIndented(alllines[j] + "\n") - self.writeIndented("\n") - ''' - - def writeViewpoint(self, ob, mat, scene): - context = scene.render_data - # context = scene.render - ratio = float(context.resolution_x)/float(context.resolution_y) - # ratio = float(context.imageSizeY())/float(context.imageSizeX()) - lens = (360* (math.atan(ratio *16 / ob.data.lens) / math.pi))*(math.pi/180) - # lens = (360* (math.atan(ratio *16 / ob.data.getLens()) / math.pi))*(math.pi/180) - lens = min(lens, math.pi) - - # get the camera location, subtract 90 degress from X to orient like X3D does - # mat = ob.matrixWorld - mat is now passed! - - loc = self.rotatePointForVRML(mat.translationPart()) - rot = mat.toEuler() - rot = (((rot[0]-90)), rot[1], rot[2]) - # rot = (((rot[0]-90)*DEG2RAD), rot[1]*DEG2RAD, rot[2]*DEG2RAD) - nRot = self.rotatePointForVRML( rot ) - # convert to Quaternion and to Angle Axis - Q = self.eulerToQuaternions(nRot[0], nRot[1], nRot[2]) - Q1 = self.multiplyQuaternions(Q[0], Q[1]) - Qf = self.multiplyQuaternions(Q1, Q[2]) - angleAxis = self.quaternionToAngleAxis(Qf) - self.file.write("\n\n" % (lens)) + # This functionality is poorly defined, disabling for now - campbell + ''' + def writeInline(self): + inlines = Blender.Scene.Get() + allinlines = len(inlines) + if scene != inlines[0]: + return + else: + for i in xrange(allinlines): + nameinline=inlines[i].name + if (nameinline not in self.namesStandard) and (i > 0): + self.file.write("" % nameinline) + self.file.write("\n\n") - def writeFog(self, world): - if world: - mtype = world.mist.falloff - # mtype = world.getMistype() - mparam = world.mist - # mparam = world.getMist() - grd = world.horizon_color - # grd = world.getHor() - grd0, grd1, grd2 = grd[0], grd[1], grd[2] - else: - return - if (mtype == 'LINEAR' or mtype == 'INVERSE_QUADRATIC'): - mtype = 1 if mtype == 'LINEAR' else 2 - # if (mtype == 1 or mtype == 2): - self.file.write("\n\n" % round(mparam[2],self.cp)) - else: - return - - def writeNavigationInfo(self, scene): - self.file.write('\n') - - def writeSpotLight(self, ob, mtx, lamp, world): - safeName = self.cleanStr(ob.name) - if world: - ambi = world.ambient_color - # ambi = world.amb - ambientIntensity = ((float(ambi[0] + ambi[1] + ambi[2]))/3)/2.5 - else: - ambi = 0 - ambientIntensity = 0 - # compute cutoff and beamwidth - intensity=min(lamp.energy/1.75,1.0) - beamWidth=((lamp.spot_size*math.pi)/180.0)*.37; - # beamWidth=((lamp.spotSize*math.pi)/180.0)*.37; - cutOffAngle=beamWidth*1.3 + def writeScript(self): + textEditor = Blender.Text.Get() + alltext = len(textEditor) + for i in xrange(alltext): + nametext = textEditor[i].name + nlines = textEditor[i].getNLines() + if (self.proto == 1): + if (nametext == "proto" or nametext == "proto.js" or nametext == "proto.txt") and (nlines != None): + nalllines = len(textEditor[i].asLines()) + alllines = textEditor[i].asLines() + for j in xrange(nalllines): + self.writeIndented(alllines[j] + "\n") + elif (self.proto == 0): + if (nametext == "route" or nametext == "route.js" or nametext == "route.txt") and (nlines != None): + nalllines = len(textEditor[i].asLines()) + alllines = textEditor[i].asLines() + for j in xrange(nalllines): + self.writeIndented(alllines[j] + "\n") + self.writeIndented("\n") + ''' - dx,dy,dz=self.computeDirection(mtx) - # note -dx seems to equal om[3][0] - # note -dz seems to equal om[3][1] - # note dy seems to equal om[3][2] + def writeViewpoint(self, ob, mat, scene): + context = scene.render_data + # context = scene.render + ratio = float(context.resolution_x)/float(context.resolution_y) + # ratio = float(context.imageSizeY())/float(context.imageSizeX()) + lens = (360* (math.atan(ratio *16 / ob.data.lens) / math.pi))*(math.pi/180) + # lens = (360* (math.atan(ratio *16 / ob.data.getLens()) / math.pi))*(math.pi/180) + lens = min(lens, math.pi) - #location=(ob.matrixWorld*MATWORLD).translationPart() # now passed - location=(mtx*MATWORLD).translationPart() - - radius = lamp.distance*math.cos(beamWidth) - # radius = lamp.dist*math.cos(beamWidth) - self.file.write("\n\n" % (round(location[0],3), round(location[1],3), round(location[2],3))) - - - def writeDirectionalLight(self, ob, mtx, lamp, world): - safeName = self.cleanStr(ob.name) - if world: - ambi = world.ambient_color - # ambi = world.amb - ambientIntensity = ((float(ambi[0] + ambi[1] + ambi[2]))/3)/2.5 - else: - ambi = 0 - ambientIntensity = 0 + # get the camera location, subtract 90 degress from X to orient like X3D does + # mat = ob.matrixWorld - mat is now passed! - intensity=min(lamp.energy/1.75,1.0) - (dx,dy,dz)=self.computeDirection(mtx) - self.file.write("\n\n" % (round(dx,4),round(dy,4),round(dz,4))) + loc = self.rotatePointForVRML(mat.translationPart()) + rot = mat.toEuler() + rot = (((rot[0]-90)), rot[1], rot[2]) + # rot = (((rot[0]-90)*DEG2RAD), rot[1]*DEG2RAD, rot[2]*DEG2RAD) + nRot = self.rotatePointForVRML( rot ) + # convert to Quaternion and to Angle Axis + Q = self.eulerToQuaternions(nRot[0], nRot[1], nRot[2]) + Q1 = self.multiplyQuaternions(Q[0], Q[1]) + Qf = self.multiplyQuaternions(Q1, Q[2]) + angleAxis = self.quaternionToAngleAxis(Qf) + self.file.write("\n\n" % (lens)) - def writePointLight(self, ob, mtx, lamp, world): - safeName = self.cleanStr(ob.name) - if world: - ambi = world.ambient_color - # ambi = world.amb - ambientIntensity = ((float(ambi[0] + ambi[1] + ambi[2]))/3)/2.5 - else: - ambi = 0 - ambientIntensity = 0 - - # location=(ob.matrixWorld*MATWORLD).translationPart() # now passed - location= (mtx*MATWORLD).translationPart() - - self.file.write("\n\n" % (round(location[0],3), round(location[1],3), round(location[2],3))) - ''' - def writeNode(self, ob, mtx): - obname=str(ob.name) - if obname in self.namesStandard: - return - else: - dx,dy,dz = self.computeDirection(mtx) - # location=(ob.matrixWorld*MATWORLD).translationPart() - location=(mtx*MATWORLD).translationPart() - self.writeIndented("<%s\n" % obname,1) - self.writeIndented("direction=\"%s %s %s\"\n" % (round(dx,3),round(dy,3),round(dz,3))) - self.writeIndented("location=\"%s %s %s\"\n" % (round(location[0],3), round(location[1],3), round(location[2],3))) - self.writeIndented("/>\n",-1) - self.writeIndented("\n") - ''' - def secureName(self, name): - name = name + str(self.nodeID) - self.nodeID=self.nodeID+1 - if len(name) <= 3: - newname = "_" + str(self.nodeID) - return "%s" % (newname) - else: - for bad in ['"','#',"'",',','.','[','\\',']','{','}']: - name=name.replace(bad,'_') - if name in self.namesReserved: - newname = name[0:3] + "_" + str(self.nodeID) - return "%s" % (newname) - elif name[0].isdigit(): - newname = "_" + name + str(self.nodeID) - return "%s" % (newname) - else: - newname = name - return "%s" % (newname) + def writeFog(self, world): + if world: + mtype = world.mist.falloff + # mtype = world.getMistype() + mparam = world.mist + # mparam = world.getMist() + grd = world.horizon_color + # grd = world.getHor() + grd0, grd1, grd2 = grd[0], grd[1], grd[2] + else: + return + if (mtype == 'LINEAR' or mtype == 'INVERSE_QUADRATIC'): + mtype = 1 if mtype == 'LINEAR' else 2 + # if (mtype == 1 or mtype == 2): + self.file.write("\n\n" % round(mparam[2],self.cp)) + else: + return - def writeIndexedFaceSet(self, ob, mesh, mtx, world, EXPORT_TRI = False): - imageMap={} # set of used images - sided={} # 'one':cnt , 'two':cnt - vColors={} # 'multi':1 - meshName = self.cleanStr(ob.name) - - meshME = self.cleanStr(ob.data.name) # We dont care if its the mesh name or not - # meshME = self.cleanStr(ob.getData(mesh=1).name) # We dont care if its the mesh name or not - if len(mesh.faces) == 0: return - mode = [] - # mode = 0 - if mesh.active_uv_texture: - # if mesh.faceUV: - for face in mesh.active_uv_texture.data: - # for face in mesh.faces: - if face.halo and 'HALO' not in mode: - mode += ['HALO'] - if face.billboard and 'BILLBOARD' not in mode: - mode += ['BILLBOARD'] - if face.object_color and 'OBJECT_COLOR' not in mode: - mode += ['OBJECT_COLOR'] - if face.collision and 'COLLISION' not in mode: - mode += ['COLLISION'] - # mode |= face.mode - - if 'HALO' in mode and self.halonode == 0: - # if mode & Mesh.FaceModes.HALO and self.halonode == 0: - self.writeIndented("\n",1) - self.halonode = 1 - elif 'BILLBOARD' in mode and self.billnode == 0: - # elif mode & Mesh.FaceModes.BILLBOARD and self.billnode == 0: - self.writeIndented("\n",1) - self.billnode = 1 - elif 'OBJECT_COLOR' in mode and self.matonly == 0: - # elif mode & Mesh.FaceModes.OBCOL and self.matonly == 0: - self.matonly = 1 - # TF_TILES is marked as deprecated in DNA_meshdata_types.h - # elif mode & Mesh.FaceModes.TILES and self.tilenode == 0: - # self.tilenode = 1 - elif 'COLLISION' not in mode and self.collnode == 0: - # elif not mode & Mesh.FaceModes.DYNAMIC and self.collnode == 0: - self.writeIndented("\n",1) - self.collnode = 1 - - nIFSCnt=self.countIFSSetsNeeded(mesh, imageMap, sided, vColors) - - if nIFSCnt > 1: - self.writeIndented("\n" % ("G_", meshName),1) - - if 'two' in sided and sided['two'] > 0: - bTwoSided=1 - else: - bTwoSided=0 + def writeNavigationInfo(self, scene): + self.file.write('\n') - # mtx = ob.matrixWorld * MATWORLD # mtx is now passed - mtx = mtx * MATWORLD - - loc= mtx.translationPart() - sca= mtx.scalePart() - quat = mtx.toQuat() - rot= quat.axis + def writeSpotLight(self, ob, mtx, lamp, world): + safeName = self.cleanStr(ob.name) + if world: + ambi = world.ambient_color + # ambi = world.amb + ambientIntensity = ((float(ambi[0] + ambi[1] + ambi[2]))/3)/2.5 + else: + ambi = 0 + ambientIntensity = 0 - self.writeIndented('\n' % \ - (meshName, loc[0], loc[1], loc[2], sca[0], sca[1], sca[2], rot[0], rot[1], rot[2], quat.angle) ) - # self.writeIndented('\n' % \ - # (meshName, loc[0], loc[1], loc[2], sca[0], sca[1], sca[2], rot[0], rot[1], rot[2], quat.angle*DEG2RAD) ) + # compute cutoff and beamwidth + intensity=min(lamp.energy/1.75,1.0) + beamWidth=((lamp.spot_size*math.pi)/180.0)*.37; + # beamWidth=((lamp.spotSize*math.pi)/180.0)*.37; + cutOffAngle=beamWidth*1.3 - self.writeIndented("\n",1) - maters=mesh.materials - hasImageTexture=0 - issmooth=0 + dx,dy,dz=self.computeDirection(mtx) + # note -dx seems to equal om[3][0] + # note -dz seems to equal om[3][1] + # note dy seems to equal om[3][2] - if len(maters) > 0 or mesh.active_uv_texture: - # if len(maters) > 0 or mesh.faceUV: - self.writeIndented("\n", 1) - # right now this script can only handle a single material per mesh. - if len(maters) >= 1: - mat=maters[0] - # matFlags = mat.getMode() - if not mat.face_texture: - # if not matFlags & Blender.Material.Modes['TEXFACE']: - self.writeMaterial(mat, self.cleanStr(mat.name,''), world) - # self.writeMaterial(mat, self.cleanStr(maters[0].name,''), world) - if len(maters) > 1: - print("Warning: mesh named %s has multiple materials" % meshName) - print("Warning: only one material per object handled") - - #-- textures - face = None - if mesh.active_uv_texture: - # if mesh.faceUV: - for face in mesh.active_uv_texture.data: - # for face in mesh.faces: - if face.image: - # if (hasImageTexture == 0) and (face.image): - self.writeImageTexture(face.image) - # hasImageTexture=1 # keep track of face texture - break - if self.tilenode == 1 and face and face.image: - # if self.tilenode == 1: - self.writeIndented("\n" % (face.image.xrep, face.image.yrep)) - self.tilenode = 0 - self.writeIndented("\n", -1) + #location=(ob.matrixWorld*MATWORLD).translationPart() # now passed + location=(mtx*MATWORLD).translationPart() - #-- IndexedFaceSet or IndexedLineSet + radius = lamp.distance*math.cos(beamWidth) + # radius = lamp.dist*math.cos(beamWidth) + self.file.write("\n\n" % (round(location[0],3), round(location[1],3), round(location[2],3))) - # user selected BOUNDS=1, SOLID=3, SHARED=4, or TEXTURE=5 - ifStyle="IndexedFaceSet" - # look up mesh name, use it if available - if meshME in self.meshNames: - self.writeIndented("<%s USE=\"ME_%s\">" % (ifStyle, meshME), 1) - self.meshNames[meshME]+=1 - else: - if int(mesh.users) > 1: - self.writeIndented("<%s DEF=\"ME_%s\" " % (ifStyle, meshME), 1) - self.meshNames[meshME]=1 - else: - self.writeIndented("<%s " % ifStyle, 1) - - if bTwoSided == 1: - self.file.write("solid=\"false\" ") - else: - self.file.write("solid=\"true\" ") - for face in mesh.faces: - if face.smooth: - issmooth=1 - break - if issmooth==1: - creaseAngle=(mesh.autosmooth_angle)*(math.pi/180.0) - # creaseAngle=(mesh.degr)*(math.pi/180.0) - self.file.write("creaseAngle=\"%s\" " % (round(creaseAngle,self.cp))) + def writeDirectionalLight(self, ob, mtx, lamp, world): + safeName = self.cleanStr(ob.name) + if world: + ambi = world.ambient_color + # ambi = world.amb + ambientIntensity = ((float(ambi[0] + ambi[1] + ambi[2]))/3)/2.5 + else: + ambi = 0 + ambientIntensity = 0 - #--- output textureCoordinates if UV texture used - if mesh.active_uv_texture: - # if mesh.faceUV: - if self.matonly == 1 and self.share == 1: - self.writeFaceColors(mesh) - elif hasImageTexture == 1: - self.writeTextureCoordinates(mesh) - #--- output coordinates - self.writeCoordinates(ob, mesh, meshName, EXPORT_TRI) + intensity=min(lamp.energy/1.75,1.0) + (dx,dy,dz)=self.computeDirection(mtx) + self.file.write("\n\n" % (round(dx,4),round(dy,4),round(dz,4))) - self.writingcoords = 1 - self.writingtexture = 1 - self.writingcolor = 1 - self.writeCoordinates(ob, mesh, meshName, EXPORT_TRI) - - #--- output textureCoordinates if UV texture used - if mesh.active_uv_texture: - # if mesh.faceUV: - if hasImageTexture == 1: - self.writeTextureCoordinates(mesh) - elif self.matonly == 1 and self.share == 1: - self.writeFaceColors(mesh) - #--- output vertexColors - self.matonly = 0 - self.share = 0 - - self.writingcoords = 0 - self.writingtexture = 0 - self.writingcolor = 0 - #--- output closing braces - self.writeIndented("\n" % ifStyle, -1) - self.writeIndented("\n", -1) - self.writeIndented("\n", -1) + def writePointLight(self, ob, mtx, lamp, world): + safeName = self.cleanStr(ob.name) + if world: + ambi = world.ambient_color + # ambi = world.amb + ambientIntensity = ((float(ambi[0] + ambi[1] + ambi[2]))/3)/2.5 + else: + ambi = 0 + ambientIntensity = 0 - if self.halonode == 1: - self.writeIndented("\n", -1) - self.halonode = 0 + # location=(ob.matrixWorld*MATWORLD).translationPart() # now passed + location= (mtx*MATWORLD).translationPart() - if self.billnode == 1: - self.writeIndented("\n", -1) - self.billnode = 0 + self.file.write("\n\n" % (round(location[0],3), round(location[1],3), round(location[2],3))) + ''' + def writeNode(self, ob, mtx): + obname=str(ob.name) + if obname in self.namesStandard: + return + else: + dx,dy,dz = self.computeDirection(mtx) + # location=(ob.matrixWorld*MATWORLD).translationPart() + location=(mtx*MATWORLD).translationPart() + self.writeIndented("<%s\n" % obname,1) + self.writeIndented("direction=\"%s %s %s\"\n" % (round(dx,3),round(dy,3),round(dz,3))) + self.writeIndented("location=\"%s %s %s\"\n" % (round(location[0],3), round(location[1],3), round(location[2],3))) + self.writeIndented("/>\n",-1) + self.writeIndented("\n") + ''' + def secureName(self, name): + name = name + str(self.nodeID) + self.nodeID=self.nodeID+1 + if len(name) <= 3: + newname = "_" + str(self.nodeID) + return "%s" % (newname) + else: + for bad in ['"','#',"'",',','.','[','\\',']','{','}']: + name=name.replace(bad,'_') + if name in self.namesReserved: + newname = name[0:3] + "_" + str(self.nodeID) + return "%s" % (newname) + elif name[0].isdigit(): + newname = "_" + name + str(self.nodeID) + return "%s" % (newname) + else: + newname = name + return "%s" % (newname) - if self.collnode == 1: - self.writeIndented("\n", -1) - self.collnode = 0 + def writeIndexedFaceSet(self, ob, mesh, mtx, world, EXPORT_TRI = False): + imageMap={} # set of used images + sided={} # 'one':cnt , 'two':cnt + vColors={} # 'multi':1 + meshName = self.cleanStr(ob.name) - if nIFSCnt > 1: - self.writeIndented("\n", -1) + meshME = self.cleanStr(ob.data.name) # We dont care if its the mesh name or not + # meshME = self.cleanStr(ob.getData(mesh=1).name) # We dont care if its the mesh name or not + if len(mesh.faces) == 0: return + mode = [] + # mode = 0 + if mesh.active_uv_texture: + # if mesh.faceUV: + for face in mesh.active_uv_texture.data: + # for face in mesh.faces: + if face.halo and 'HALO' not in mode: + mode += ['HALO'] + if face.billboard and 'BILLBOARD' not in mode: + mode += ['BILLBOARD'] + if face.object_color and 'OBJECT_COLOR' not in mode: + mode += ['OBJECT_COLOR'] + if face.collision and 'COLLISION' not in mode: + mode += ['COLLISION'] + # mode |= face.mode - self.file.write("\n") + if 'HALO' in mode and self.halonode == 0: + # if mode & Mesh.FaceModes.HALO and self.halonode == 0: + self.writeIndented("\n",1) + self.halonode = 1 + elif 'BILLBOARD' in mode and self.billnode == 0: + # elif mode & Mesh.FaceModes.BILLBOARD and self.billnode == 0: + self.writeIndented("\n",1) + self.billnode = 1 + elif 'OBJECT_COLOR' in mode and self.matonly == 0: + # elif mode & Mesh.FaceModes.OBCOL and self.matonly == 0: + self.matonly = 1 + # TF_TILES is marked as deprecated in DNA_meshdata_types.h + # elif mode & Mesh.FaceModes.TILES and self.tilenode == 0: + # self.tilenode = 1 + elif 'COLLISION' not in mode and self.collnode == 0: + # elif not mode & Mesh.FaceModes.DYNAMIC and self.collnode == 0: + self.writeIndented("\n",1) + self.collnode = 1 - def writeCoordinates(self, ob, mesh, meshName, EXPORT_TRI = False): - # create vertex list and pre rotate -90 degrees X for VRML - - if self.writingcoords == 0: - self.file.write('coordIndex="') - for face in mesh.faces: - fv = face.verts - # fv = face.v - - if len(fv)==3: - # if len(face)==3: - self.file.write("%i %i %i -1, " % (fv[0], fv[1], fv[2])) - # self.file.write("%i %i %i -1, " % (fv[0].index, fv[1].index, fv[2].index)) - else: - if EXPORT_TRI: - self.file.write("%i %i %i -1, " % (fv[0], fv[1], fv[2])) - # self.file.write("%i %i %i -1, " % (fv[0].index, fv[1].index, fv[2].index)) - self.file.write("%i %i %i -1, " % (fv[0], fv[2], fv[3])) - # self.file.write("%i %i %i -1, " % (fv[0].index, fv[2].index, fv[3].index)) - else: - self.file.write("%i %i %i %i -1, " % (fv[0], fv[1], fv[2], fv[3])) - # self.file.write("%i %i %i %i -1, " % (fv[0].index, fv[1].index, fv[2].index, fv[3].index)) - - self.file.write("\">\n") - else: - #-- vertices - # mesh.transform(ob.matrixWorld) - self.writeIndented("") - self.writeIndented("\n", -1) + nIFSCnt=self.countIFSSetsNeeded(mesh, imageMap, sided, vColors) - def writeTextureCoordinates(self, mesh): - texCoordList=[] - texIndexList=[] - j=0 + if nIFSCnt > 1: + self.writeIndented("\n" % ("G_", meshName),1) - for face in mesh.active_uv_texture.data: - # for face in mesh.faces: - uvs = face.uv - # uvs = [face.uv1, face.uv2, face.uv3, face.uv4] if face.verts[3] else [face.uv1, face.uv2, face.uv3] + if 'two' in sided and sided['two'] > 0: + bTwoSided=1 + else: + bTwoSided=0 - for uv in uvs: - # for uv in face.uv: - texIndexList.append(j) - texCoordList.append(uv) - j=j+1 - texIndexList.append(-1) - if self.writingtexture == 0: - self.file.write("\n\t\t\ttexCoordIndex=\"") - texIndxStr="" - for i in range(len(texIndexList)): - texIndxStr = texIndxStr + "%d, " % texIndexList[i] - if texIndexList[i]==-1: - self.file.write(texIndxStr) - texIndxStr="" - self.file.write("\"\n\t\t\t") - else: - self.writeIndented("") - self.writeIndented("\n", -1) + # mtx = ob.matrixWorld * MATWORLD # mtx is now passed + mtx = mtx * MATWORLD - def writeFaceColors(self, mesh): - if self.writingcolor == 0: - self.file.write("colorPerVertex=\"false\" ") - elif mesh.active_vertex_color: - # else: - self.writeIndented(" 2: - print("Debug: face.col r=%d g=%d b=%d" % (c[0], c[1], c[2])) - # print("Debug: face.col r=%d g=%d b=%d" % (c.r, c.g, c.b)) - aColor = self.rgbToFS(c) - self.file.write("%s, " % aColor) + loc= mtx.translationPart() + sca= mtx.scalePart() + quat = mtx.toQuat() + rot= quat.axis - # for face in mesh.faces: - # if face.col: - # c=face.col[0] - # if self.verbose > 2: - # print("Debug: face.col r=%d g=%d b=%d" % (c.r, c.g, c.b)) - # aColor = self.rgbToFS(c) - # self.file.write("%s, " % aColor) - self.file.write("\" />") - self.writeIndented("\n",-1) - - def writeMaterial(self, mat, matName, world): - # look up material name, use it if available - if matName in self.matNames: - self.writeIndented("\n" % matName) - self.matNames[matName]+=1 - return; + self.writeIndented('\n' % \ + (meshName, loc[0], loc[1], loc[2], sca[0], sca[1], sca[2], rot[0], rot[1], rot[2], quat.angle) ) + # self.writeIndented('\n' % \ + # (meshName, loc[0], loc[1], loc[2], sca[0], sca[1], sca[2], rot[0], rot[1], rot[2], quat.angle*DEG2RAD) ) - self.matNames[matName]=1 + self.writeIndented("\n",1) + maters=mesh.materials + hasImageTexture=0 + issmooth=0 - ambient = mat.ambient/3 - # ambient = mat.amb/3 - diffuseR, diffuseG, diffuseB = tuple(mat.diffuse_color) - # diffuseR, diffuseG, diffuseB = mat.rgbCol[0], mat.rgbCol[1],mat.rgbCol[2] - if world: - ambi = world.ambient_color - # ambi = world.getAmb() - ambi0, ambi1, ambi2 = (ambi[0]*mat.ambient)*2, (ambi[1]*mat.ambient)*2, (ambi[2]*mat.ambient)*2 - # ambi0, ambi1, ambi2 = (ambi[0]*mat.amb)*2, (ambi[1]*mat.amb)*2, (ambi[2]*mat.amb)*2 - else: - ambi0, ambi1, ambi2 = 0, 0, 0 - emisR, emisG, emisB = (diffuseR*mat.emit+ambi0)/2, (diffuseG*mat.emit+ambi1)/2, (diffuseB*mat.emit+ambi2)/2 + if len(maters) > 0 or mesh.active_uv_texture: + # if len(maters) > 0 or mesh.faceUV: + self.writeIndented("\n", 1) + # right now this script can only handle a single material per mesh. + if len(maters) >= 1: + mat=maters[0] + # matFlags = mat.getMode() + if not mat.face_texture: + # if not matFlags & Blender.Material.Modes['TEXFACE']: + self.writeMaterial(mat, self.cleanStr(mat.name,''), world) + # self.writeMaterial(mat, self.cleanStr(maters[0].name,''), world) + if len(maters) > 1: + print("Warning: mesh named %s has multiple materials" % meshName) + print("Warning: only one material per object handled") - shininess = mat.specular_hardness/512.0 - # shininess = mat.hard/512.0 - specR = (mat.specular_color[0]+0.001)/(1.25/(mat.specular_intensity+0.001)) - # specR = (mat.specCol[0]+0.001)/(1.25/(mat.spec+0.001)) - specG = (mat.specular_color[1]+0.001)/(1.25/(mat.specular_intensity+0.001)) - # specG = (mat.specCol[1]+0.001)/(1.25/(mat.spec+0.001)) - specB = (mat.specular_color[2]+0.001)/(1.25/(mat.specular_intensity+0.001)) - # specB = (mat.specCol[2]+0.001)/(1.25/(mat.spec+0.001)) - transp = 1-mat.alpha - # matFlags = mat.getMode() - if mat.shadeless: - # if matFlags & Blender.Material.Modes['SHADELESS']: - ambient = 1 - shine = 1 - specR = emitR = diffuseR - specG = emitG = diffuseG - specB = emitB = diffuseB - self.writeIndented("" % (round(transp,self.cp))) - self.writeIndented("\n",-1) + #-- textures + face = None + if mesh.active_uv_texture: + # if mesh.faceUV: + for face in mesh.active_uv_texture.data: + # for face in mesh.faces: + if face.image: + # if (hasImageTexture == 0) and (face.image): + self.writeImageTexture(face.image) + # hasImageTexture=1 # keep track of face texture + break + if self.tilenode == 1 and face and face.image: + # if self.tilenode == 1: + self.writeIndented("\n" % (face.image.xrep, face.image.yrep)) + self.tilenode = 0 + self.writeIndented("\n", -1) - def writeImageTexture(self, image): - name = image.name - filename = image.filename.split('/')[-1].split('\\')[-1] - if name in self.texNames: - self.writeIndented("\n" % self.cleanStr(name)) - self.texNames[name] += 1 - return - else: - self.writeIndented("" % name) - self.writeIndented("\n",-1) - self.texNames[name] = 1 + #-- IndexedFaceSet or IndexedLineSet - def writeBackground(self, world, alltextures): - if world: worldname = world.name - else: return - blending = (world.blend_sky, world.paper_sky, world.real_sky) - # blending = world.getSkytype() - grd = world.horizon_color - # grd = world.getHor() - grd0, grd1, grd2 = grd[0], grd[1], grd[2] - sky = world.zenith_color - # sky = world.getZen() - sky0, sky1, sky2 = sky[0], sky[1], sky[2] - mix0, mix1, mix2 = grd[0]+sky[0], grd[1]+sky[1], grd[2]+sky[2] - mix0, mix1, mix2 = mix0/2, mix1/2, mix2/2 - self.file.write("" % (ifStyle, meshME), 1) + self.meshNames[meshME]+=1 + else: + if int(mesh.users) > 1: + self.writeIndented("<%s DEF=\"ME_%s\" " % (ifStyle, meshME), 1) + self.meshNames[meshME]=1 + else: + self.writeIndented("<%s " % ifStyle, 1) - alltexture = len(alltextures) + if bTwoSided == 1: + self.file.write("solid=\"false\" ") + else: + self.file.write("solid=\"true\" ") - for i in range(alltexture): - tex = alltextures[i] + for face in mesh.faces: + if face.smooth: + issmooth=1 + break + if issmooth==1: + creaseAngle=(mesh.autosmooth_angle)*(math.pi/180.0) + # creaseAngle=(mesh.degr)*(math.pi/180.0) + self.file.write("creaseAngle=\"%s\" " % (round(creaseAngle,self.cp))) - if tex.type != 'IMAGE' or tex.image == None: - continue + #--- output textureCoordinates if UV texture used + if mesh.active_uv_texture: + # if mesh.faceUV: + if self.matonly == 1 and self.share == 1: + self.writeFaceColors(mesh) + elif hasImageTexture == 1: + self.writeTextureCoordinates(mesh) + #--- output coordinates + self.writeCoordinates(ob, mesh, meshName, EXPORT_TRI) - namemat = tex.name - # namemat = alltextures[i].name + self.writingcoords = 1 + self.writingtexture = 1 + self.writingcolor = 1 + self.writeCoordinates(ob, mesh, meshName, EXPORT_TRI) - pic = tex.image + #--- output textureCoordinates if UV texture used + if mesh.active_uv_texture: + # if mesh.faceUV: + if hasImageTexture == 1: + self.writeTextureCoordinates(mesh) + elif self.matonly == 1 and self.share == 1: + self.writeFaceColors(mesh) + #--- output vertexColors + self.matonly = 0 + self.share = 0 - # using .expandpath just in case, os.path may not expect // - basename = os.path.basename(pic.get_abs_filename()) + self.writingcoords = 0 + self.writingtexture = 0 + self.writingcolor = 0 + #--- output closing braces + self.writeIndented("\n" % ifStyle, -1) + self.writeIndented("\n", -1) + self.writeIndented("\n", -1) - pic = alltextures[i].image - # pic = alltextures[i].getImage() - if (namemat == "back") and (pic != None): - self.file.write("\n\tbackUrl=\"%s\" " % basename) - # self.file.write("\n\tbackUrl=\"%s\" " % pic.filename.split('/')[-1].split('\\')[-1]) - elif (namemat == "bottom") and (pic != None): - self.writeIndented("bottomUrl=\"%s\" " % basename) - # self.writeIndented("bottomUrl=\"%s\" " % pic.filename.split('/')[-1].split('\\')[-1]) - elif (namemat == "front") and (pic != None): - self.writeIndented("frontUrl=\"%s\" " % basename) - # self.writeIndented("frontUrl=\"%s\" " % pic.filename.split('/')[-1].split('\\')[-1]) - elif (namemat == "left") and (pic != None): - self.writeIndented("leftUrl=\"%s\" " % basename) - # self.writeIndented("leftUrl=\"%s\" " % pic.filename.split('/')[-1].split('\\')[-1]) - elif (namemat == "right") and (pic != None): - self.writeIndented("rightUrl=\"%s\" " % basename) - # self.writeIndented("rightUrl=\"%s\" " % pic.filename.split('/')[-1].split('\\')[-1]) - elif (namemat == "top") and (pic != None): - self.writeIndented("topUrl=\"%s\" " % basename) - # self.writeIndented("topUrl=\"%s\" " % pic.filename.split('/')[-1].split('\\')[-1]) - self.writeIndented("/>\n\n") + if self.halonode == 1: + self.writeIndented("\n", -1) + self.halonode = 0 + + if self.billnode == 1: + self.writeIndented("\n", -1) + self.billnode = 0 + + if self.collnode == 1: + self.writeIndented("\n", -1) + self.collnode = 0 + + if nIFSCnt > 1: + self.writeIndented("\n", -1) + + self.file.write("\n") + + def writeCoordinates(self, ob, mesh, meshName, EXPORT_TRI = False): + # create vertex list and pre rotate -90 degrees X for VRML + + if self.writingcoords == 0: + self.file.write('coordIndex="') + for face in mesh.faces: + fv = face.verts + # fv = face.v + + if len(fv)==3: + # if len(face)==3: + self.file.write("%i %i %i -1, " % (fv[0], fv[1], fv[2])) + # self.file.write("%i %i %i -1, " % (fv[0].index, fv[1].index, fv[2].index)) + else: + if EXPORT_TRI: + self.file.write("%i %i %i -1, " % (fv[0], fv[1], fv[2])) + # self.file.write("%i %i %i -1, " % (fv[0].index, fv[1].index, fv[2].index)) + self.file.write("%i %i %i -1, " % (fv[0], fv[2], fv[3])) + # self.file.write("%i %i %i -1, " % (fv[0].index, fv[2].index, fv[3].index)) + else: + self.file.write("%i %i %i %i -1, " % (fv[0], fv[1], fv[2], fv[3])) + # self.file.write("%i %i %i %i -1, " % (fv[0].index, fv[1].index, fv[2].index, fv[3].index)) + + self.file.write("\">\n") + else: + #-- vertices + # mesh.transform(ob.matrixWorld) + self.writeIndented("") + self.writeIndented("\n", -1) + + def writeTextureCoordinates(self, mesh): + texCoordList=[] + texIndexList=[] + j=0 + + for face in mesh.active_uv_texture.data: + # for face in mesh.faces: + uvs = face.uv + # uvs = [face.uv1, face.uv2, face.uv3, face.uv4] if face.verts[3] else [face.uv1, face.uv2, face.uv3] + + for uv in uvs: + # for uv in face.uv: + texIndexList.append(j) + texCoordList.append(uv) + j=j+1 + texIndexList.append(-1) + if self.writingtexture == 0: + self.file.write("\n\t\t\ttexCoordIndex=\"") + texIndxStr="" + for i in range(len(texIndexList)): + texIndxStr = texIndxStr + "%d, " % texIndexList[i] + if texIndexList[i]==-1: + self.file.write(texIndxStr) + texIndxStr="" + self.file.write("\"\n\t\t\t") + else: + self.writeIndented("") + self.writeIndented("\n", -1) + + def writeFaceColors(self, mesh): + if self.writingcolor == 0: + self.file.write("colorPerVertex=\"false\" ") + elif mesh.active_vertex_color: + # else: + self.writeIndented(" 2: + print("Debug: face.col r=%d g=%d b=%d" % (c[0], c[1], c[2])) + # print("Debug: face.col r=%d g=%d b=%d" % (c.r, c.g, c.b)) + aColor = self.rgbToFS(c) + self.file.write("%s, " % aColor) + + # for face in mesh.faces: + # if face.col: + # c=face.col[0] + # if self.verbose > 2: + # print("Debug: face.col r=%d g=%d b=%d" % (c.r, c.g, c.b)) + # aColor = self.rgbToFS(c) + # self.file.write("%s, " % aColor) + self.file.write("\" />") + self.writeIndented("\n",-1) + + def writeMaterial(self, mat, matName, world): + # look up material name, use it if available + if matName in self.matNames: + self.writeIndented("\n" % matName) + self.matNames[matName]+=1 + return; + + self.matNames[matName]=1 + + ambient = mat.ambient/3 + # ambient = mat.amb/3 + diffuseR, diffuseG, diffuseB = tuple(mat.diffuse_color) + # diffuseR, diffuseG, diffuseB = mat.rgbCol[0], mat.rgbCol[1],mat.rgbCol[2] + if world: + ambi = world.ambient_color + # ambi = world.getAmb() + ambi0, ambi1, ambi2 = (ambi[0]*mat.ambient)*2, (ambi[1]*mat.ambient)*2, (ambi[2]*mat.ambient)*2 + # ambi0, ambi1, ambi2 = (ambi[0]*mat.amb)*2, (ambi[1]*mat.amb)*2, (ambi[2]*mat.amb)*2 + else: + ambi0, ambi1, ambi2 = 0, 0, 0 + emisR, emisG, emisB = (diffuseR*mat.emit+ambi0)/2, (diffuseG*mat.emit+ambi1)/2, (diffuseB*mat.emit+ambi2)/2 + + shininess = mat.specular_hardness/512.0 + # shininess = mat.hard/512.0 + specR = (mat.specular_color[0]+0.001)/(1.25/(mat.specular_intensity+0.001)) + # specR = (mat.specCol[0]+0.001)/(1.25/(mat.spec+0.001)) + specG = (mat.specular_color[1]+0.001)/(1.25/(mat.specular_intensity+0.001)) + # specG = (mat.specCol[1]+0.001)/(1.25/(mat.spec+0.001)) + specB = (mat.specular_color[2]+0.001)/(1.25/(mat.specular_intensity+0.001)) + # specB = (mat.specCol[2]+0.001)/(1.25/(mat.spec+0.001)) + transp = 1-mat.alpha + # matFlags = mat.getMode() + if mat.shadeless: + # if matFlags & Blender.Material.Modes['SHADELESS']: + ambient = 1 + shine = 1 + specR = emitR = diffuseR + specG = emitG = diffuseG + specB = emitB = diffuseB + self.writeIndented("" % (round(transp,self.cp))) + self.writeIndented("\n",-1) + + def writeImageTexture(self, image): + name = image.name + filename = image.filename.split('/')[-1].split('\\')[-1] + if name in self.texNames: + self.writeIndented("\n" % self.cleanStr(name)) + self.texNames[name] += 1 + return + else: + self.writeIndented("" % name) + self.writeIndented("\n",-1) + self.texNames[name] = 1 + + def writeBackground(self, world, alltextures): + if world: worldname = world.name + else: return + blending = (world.blend_sky, world.paper_sky, world.real_sky) + # blending = world.getSkytype() + grd = world.horizon_color + # grd = world.getHor() + grd0, grd1, grd2 = grd[0], grd[1], grd[2] + sky = world.zenith_color + # sky = world.getZen() + sky0, sky1, sky2 = sky[0], sky[1], sky[2] + mix0, mix1, mix2 = grd[0]+sky[0], grd[1]+sky[1], grd[2]+sky[2] + mix0, mix1, mix2 = mix0/2, mix1/2, mix2/2 + self.file.write("\n\n") ########################################################## # export routine ########################################################## - def export(self, scene, world, alltextures,\ - EXPORT_APPLY_MODIFIERS = False,\ - EXPORT_TRI= False,\ - ): - - print("Info: starting X3D export to " + self.filename + "...") - self.writeHeader() - # self.writeScript() - self.writeNavigationInfo(scene) - self.writeBackground(world, alltextures) - self.writeFog(world) - self.proto = 0 - - - # # COPIED FROM OBJ EXPORTER - # if EXPORT_APPLY_MODIFIERS: - # temp_mesh_name = '~tmp-mesh' - - # # Get the container mesh. - used for applying modifiers and non mesh objects. - # containerMesh = meshName = tempMesh = None - # for meshName in Blender.NMesh.GetNames(): - # if meshName.startswith(temp_mesh_name): - # tempMesh = Mesh.Get(meshName) - # if not tempMesh.users: - # containerMesh = tempMesh - # if not containerMesh: - # containerMesh = Mesh.New(temp_mesh_name) - # -------------------------- - - - for ob_main in [o for o in scene.objects if o.is_visible()]: - # for ob_main in scene.objects.context: + def export(self, scene, world, alltextures,\ + EXPORT_APPLY_MODIFIERS = False,\ + EXPORT_TRI= False,\ + ): - free, derived = create_derived_objects(ob_main) + print("Info: starting X3D export to " + self.filename + "...") + self.writeHeader() + # self.writeScript() + self.writeNavigationInfo(scene) + self.writeBackground(world, alltextures) + self.writeFog(world) + self.proto = 0 - if derived == None: continue - for ob, ob_mat in derived: - # for ob, ob_mat in BPyObject.getDerivedObjects(ob_main): - objType=ob.type - objName=ob.name - self.matonly = 0 - if objType == "CAMERA": - # if objType == "Camera": - self.writeViewpoint(ob, ob_mat, scene) - elif objType in ("MESH", "CURVE", "SURF", "TEXT") : - # elif objType in ("Mesh", "Curve", "Surf", "Text") : - if EXPORT_APPLY_MODIFIERS or objType != 'MESH': - # if EXPORT_APPLY_MODIFIERS or objType != 'Mesh': - me = ob.create_mesh(EXPORT_APPLY_MODIFIERS, 'PREVIEW') - # me= BPyMesh.getMeshFromObject(ob, containerMesh, EXPORT_APPLY_MODIFIERS, False, scene) - else: - me = ob.data - # me = ob.getData(mesh=1) - - self.writeIndexedFaceSet(ob, me, ob_mat, world, EXPORT_TRI = EXPORT_TRI) + # # COPIED FROM OBJ EXPORTER + # if EXPORT_APPLY_MODIFIERS: + # temp_mesh_name = '~tmp-mesh' - # free mesh created with create_mesh() - if me != ob.data: - bpy.data.remove_mesh(me) + # # Get the container mesh. - used for applying modifiers and non mesh objects. + # containerMesh = meshName = tempMesh = None + # for meshName in Blender.NMesh.GetNames(): + # if meshName.startswith(temp_mesh_name): + # tempMesh = Mesh.Get(meshName) + # if not tempMesh.users: + # containerMesh = tempMesh + # if not containerMesh: + # containerMesh = Mesh.New(temp_mesh_name) + # -------------------------- + + + for ob_main in [o for o in scene.objects if o.is_visible()]: + # for ob_main in scene.objects.context: + + free, derived = create_derived_objects(ob_main) + + if derived == None: continue + + for ob, ob_mat in derived: + # for ob, ob_mat in BPyObject.getDerivedObjects(ob_main): + objType=ob.type + objName=ob.name + self.matonly = 0 + if objType == "CAMERA": + # if objType == "Camera": + self.writeViewpoint(ob, ob_mat, scene) + elif objType in ("MESH", "CURVE", "SURF", "TEXT") : + # elif objType in ("Mesh", "Curve", "Surf", "Text") : + if EXPORT_APPLY_MODIFIERS or objType != 'MESH': + # if EXPORT_APPLY_MODIFIERS or objType != 'Mesh': + me = ob.create_mesh(EXPORT_APPLY_MODIFIERS, 'PREVIEW') + # me= BPyMesh.getMeshFromObject(ob, containerMesh, EXPORT_APPLY_MODIFIERS, False, scene) + else: + me = ob.data + # me = ob.getData(mesh=1) + + self.writeIndexedFaceSet(ob, me, ob_mat, world, EXPORT_TRI = EXPORT_TRI) + + # free mesh created with create_mesh() + if me != ob.data: + bpy.data.remove_mesh(me) + + elif objType == "LAMP": + # elif objType == "Lamp": + data= ob.data + datatype=data.type + if datatype == 'POINT': + # if datatype == Lamp.Types.Lamp: + self.writePointLight(ob, ob_mat, data, world) + elif datatype == 'SPOT': + # elif datatype == Lamp.Types.Spot: + self.writeSpotLight(ob, ob_mat, data, world) + elif datatype == 'SUN': + # elif datatype == Lamp.Types.Sun: + self.writeDirectionalLight(ob, ob_mat, data, world) + else: + self.writeDirectionalLight(ob, ob_mat, data, world) + # do you think x3d could document what to do with dummy objects? + #elif objType == "Empty" and objName != "Empty": + # self.writeNode(ob, ob_mat) + else: + #print "Info: Ignoring [%s], object type [%s] not handle yet" % (object.name,object.getType) + pass + + if free: + free_derived_objects(ob_main) + + self.file.write("\n\n") + + # if EXPORT_APPLY_MODIFIERS: + # if containerMesh: + # containerMesh.verts = None + + self.cleanup() - elif objType == "LAMP": - # elif objType == "Lamp": - data= ob.data - datatype=data.type - if datatype == 'POINT': - # if datatype == Lamp.Types.Lamp: - self.writePointLight(ob, ob_mat, data, world) - elif datatype == 'SPOT': - # elif datatype == Lamp.Types.Spot: - self.writeSpotLight(ob, ob_mat, data, world) - elif datatype == 'SUN': - # elif datatype == Lamp.Types.Sun: - self.writeDirectionalLight(ob, ob_mat, data, world) - else: - self.writeDirectionalLight(ob, ob_mat, data, world) - # do you think x3d could document what to do with dummy objects? - #elif objType == "Empty" and objName != "Empty": - # self.writeNode(ob, ob_mat) - else: - #print "Info: Ignoring [%s], object type [%s] not handle yet" % (object.name,object.getType) - pass - - if free: - free_derived_objects(ob_main) - - self.file.write("\n\n") - - # if EXPORT_APPLY_MODIFIERS: - # if containerMesh: - # containerMesh.verts = None - - self.cleanup() - ########################################################## # Utility methods ########################################################## - def cleanup(self): - self.file.close() - self.texNames={} - self.matNames={} - self.indentLevel=0 - print("Info: finished X3D export to %s\n" % self.filename) + def cleanup(self): + self.file.close() + self.texNames={} + self.matNames={} + self.indentLevel=0 + print("Info: finished X3D export to %s\n" % self.filename) - def cleanStr(self, name, prefix='rsvd_'): - """cleanStr(name,prefix) - try to create a valid VRML DEF name from object name""" + def cleanStr(self, name, prefix='rsvd_'): + """cleanStr(name,prefix) - try to create a valid VRML DEF name from object name""" - newName=name[:] - if len(newName) == 0: - self.nNodeID+=1 - return "%s%d" % (prefix, self.nNodeID) - - if newName in self.namesReserved: - newName='%s%s' % (prefix,newName) - - if newName[0].isdigit(): - newName='%s%s' % ('_',newName) + newName=name[:] + if len(newName) == 0: + self.nNodeID+=1 + return "%s%d" % (prefix, self.nNodeID) - for bad in [' ','"','#',"'",',','.','[','\\',']','{','}']: - newName=newName.replace(bad,'_') - return newName + if newName in self.namesReserved: + newName='%s%s' % (prefix,newName) - def countIFSSetsNeeded(self, mesh, imageMap, sided, vColors): - """ - countIFFSetsNeeded() - should look at a blender mesh to determine - how many VRML IndexFaceSets or IndexLineSets are needed. A - new mesh created under the following conditions: - - o - split by UV Textures / one per mesh - o - split by face, one sided and two sided - o - split by smooth and flat faces - o - split when faces only have 2 vertices * needs to be an IndexLineSet - """ - - imageNameMap={} - faceMap={} - nFaceIndx=0 - - if mesh.active_uv_texture: - # if mesh.faceUV: - for face in mesh.active_uv_texture.data: - # for face in mesh.faces: - sidename=''; - if face.twoside: - # if face.mode & Mesh.FaceModes.TWOSIDE: - sidename='two' - else: - sidename='one' - - if sidename in sided: - sided[sidename]+=1 - else: - sided[sidename]=1 - - image = face.image - if image: - faceName="%s_%s" % (face.image.name, sidename); - try: - imageMap[faceName].append(face) - except: - imageMap[faceName]=[face.image.name,sidename,face] + if newName[0].isdigit(): + newName='%s%s' % ('_',newName) - if self.verbose > 2: - for faceName in imageMap.keys(): - ifs=imageMap[faceName] - print("Debug: faceName=%s image=%s, solid=%s facecnt=%d" % \ - (faceName, ifs[0], ifs[1], len(ifs)-2)) + for bad in [' ','"','#',"'",',','.','[','\\',']','{','}']: + newName=newName.replace(bad,'_') + return newName - return len(imageMap) - - def faceToString(self,face): + def countIFSSetsNeeded(self, mesh, imageMap, sided, vColors): + """ + countIFFSetsNeeded() - should look at a blender mesh to determine + how many VRML IndexFaceSets or IndexLineSets are needed. A + new mesh created under the following conditions: - print("Debug: face.flag=0x%x (bitflags)" % face.flag) - if face.sel: - print("Debug: face.sel=true") + o - split by UV Textures / one per mesh + o - split by face, one sided and two sided + o - split by smooth and flat faces + o - split when faces only have 2 vertices * needs to be an IndexLineSet + """ - print("Debug: face.mode=0x%x (bitflags)" % face.mode) - if face.mode & Mesh.FaceModes.TWOSIDE: - print("Debug: face.mode twosided") + imageNameMap={} + faceMap={} + nFaceIndx=0 - print("Debug: face.transp=0x%x (enum)" % face.transp) - if face.transp == Mesh.FaceTranspModes.SOLID: - print("Debug: face.transp.SOLID") + if mesh.active_uv_texture: + # if mesh.faceUV: + for face in mesh.active_uv_texture.data: + # for face in mesh.faces: + sidename=''; + if face.twoside: + # if face.mode & Mesh.FaceModes.TWOSIDE: + sidename='two' + else: + sidename='one' - if face.image: - print("Debug: face.image=%s" % face.image.name) - print("Debug: face.materialIndex=%d" % face.materialIndex) + if sidename in sided: + sided[sidename]+=1 + else: + sided[sidename]=1 - # XXX not used - # def getVertexColorByIndx(self, mesh, indx): - # c = None - # for face in mesh.faces: - # j=0 - # for vertex in face.v: - # if vertex.index == indx: - # c=face.col[j] - # break - # j=j+1 - # if c: break - # return c + image = face.image + if image: + faceName="%s_%s" % (face.image.name, sidename); + try: + imageMap[faceName].append(face) + except: + imageMap[faceName]=[face.image.name,sidename,face] - def meshToString(self,mesh): - # print("Debug: mesh.hasVertexUV=%d" % mesh.vertexColors) - print("Debug: mesh.faceUV=%d" % (len(mesh.uv_textures) > 0)) - # print("Debug: mesh.faceUV=%d" % mesh.faceUV) - print("Debug: mesh.hasVertexColours=%d" % (len(mesh.vertex_colors) > 0)) - # print("Debug: mesh.hasVertexColours=%d" % mesh.hasVertexColours()) - print("Debug: mesh.verts=%d" % len(mesh.verts)) - print("Debug: mesh.faces=%d" % len(mesh.faces)) - print("Debug: mesh.materials=%d" % len(mesh.materials)) + if self.verbose > 2: + for faceName in imageMap.keys(): + ifs=imageMap[faceName] + print("Debug: faceName=%s image=%s, solid=%s facecnt=%d" % \ + (faceName, ifs[0], ifs[1], len(ifs)-2)) - def rgbToFS(self, c): - s="%s %s %s" % (round(c[0]/255.0,self.cp), - round(c[1]/255.0,self.cp), - round(c[2]/255.0,self.cp)) + return len(imageMap) - # s="%s %s %s" % ( - # round(c.r/255.0,self.cp), - # round(c.g/255.0,self.cp), - # round(c.b/255.0,self.cp)) - return s + def faceToString(self,face): - def computeDirection(self, mtx): - x,y,z=(0,-1.0,0) # point down - - ax,ay,az = (mtx*MATWORLD).toEuler() - - # ax *= DEG2RAD - # ay *= DEG2RAD - # az *= DEG2RAD + print("Debug: face.flag=0x%x (bitflags)" % face.flag) + if face.sel: + print("Debug: face.sel=true") - # rot X - x1=x - y1=y*math.cos(ax)-z*math.sin(ax) - z1=y*math.sin(ax)+z*math.cos(ax) + print("Debug: face.mode=0x%x (bitflags)" % face.mode) + if face.mode & Mesh.FaceModes.TWOSIDE: + print("Debug: face.mode twosided") - # rot Y - x2=x1*math.cos(ay)+z1*math.sin(ay) - y2=y1 - z2=z1*math.cos(ay)-x1*math.sin(ay) + print("Debug: face.transp=0x%x (enum)" % face.transp) + if face.transp == Mesh.FaceTranspModes.SOLID: + print("Debug: face.transp.SOLID") - # rot Z - x3=x2*math.cos(az)-y2*math.sin(az) - y3=x2*math.sin(az)+y2*math.cos(az) - z3=z2 + if face.image: + print("Debug: face.image=%s" % face.image.name) + print("Debug: face.materialIndex=%d" % face.materialIndex) - return [x3,y3,z3] - + # XXX not used + # def getVertexColorByIndx(self, mesh, indx): + # c = None + # for face in mesh.faces: + # j=0 + # for vertex in face.v: + # if vertex.index == indx: + # c=face.col[j] + # break + # j=j+1 + # if c: break + # return c - # swap Y and Z to handle axis difference between Blender and VRML - #------------------------------------------------------------------------ - def rotatePointForVRML(self, v): - x = v[0] - y = v[2] - z = -v[1] - - vrmlPoint=[x, y, z] - return vrmlPoint + def meshToString(self,mesh): + # print("Debug: mesh.hasVertexUV=%d" % mesh.vertexColors) + print("Debug: mesh.faceUV=%d" % (len(mesh.uv_textures) > 0)) + # print("Debug: mesh.faceUV=%d" % mesh.faceUV) + print("Debug: mesh.hasVertexColours=%d" % (len(mesh.vertex_colors) > 0)) + # print("Debug: mesh.hasVertexColours=%d" % mesh.hasVertexColours()) + print("Debug: mesh.verts=%d" % len(mesh.verts)) + print("Debug: mesh.faces=%d" % len(mesh.faces)) + print("Debug: mesh.materials=%d" % len(mesh.materials)) - # For writing well formed VRML code - #------------------------------------------------------------------------ - def writeIndented(self, s, inc=0): - if inc < 1: - self.indentLevel = self.indentLevel + inc + def rgbToFS(self, c): + s="%s %s %s" % (round(c[0]/255.0,self.cp), + round(c[1]/255.0,self.cp), + round(c[2]/255.0,self.cp)) - spaces="" - for x in range(self.indentLevel): - spaces = spaces + "\t" - self.file.write(spaces + s) + # s="%s %s %s" % ( + # round(c.r/255.0,self.cp), + # round(c.g/255.0,self.cp), + # round(c.b/255.0,self.cp)) + return s - if inc > 0: - self.indentLevel = self.indentLevel + inc + def computeDirection(self, mtx): + x,y,z=(0,-1.0,0) # point down - # Converts a Euler to three new Quaternions - # Angles of Euler are passed in as radians - #------------------------------------------------------------------------ - def eulerToQuaternions(self, x, y, z): - Qx = [math.cos(x/2), math.sin(x/2), 0, 0] - Qy = [math.cos(y/2), 0, math.sin(y/2), 0] - Qz = [math.cos(z/2), 0, 0, math.sin(z/2)] - - quaternionVec=[Qx,Qy,Qz] - return quaternionVec - - # Multiply two Quaternions together to get a new Quaternion - #------------------------------------------------------------------------ - def multiplyQuaternions(self, Q1, Q2): - result = [((Q1[0] * Q2[0]) - (Q1[1] * Q2[1]) - (Q1[2] * Q2[2]) - (Q1[3] * Q2[3])), - ((Q1[0] * Q2[1]) + (Q1[1] * Q2[0]) + (Q1[2] * Q2[3]) - (Q1[3] * Q2[2])), - ((Q1[0] * Q2[2]) + (Q1[2] * Q2[0]) + (Q1[3] * Q2[1]) - (Q1[1] * Q2[3])), - ((Q1[0] * Q2[3]) + (Q1[3] * Q2[0]) + (Q1[1] * Q2[2]) - (Q1[2] * Q2[1]))] - - return result - - # Convert a Quaternion to an Angle Axis (ax, ay, az, angle) - # angle is in radians - #------------------------------------------------------------------------ - def quaternionToAngleAxis(self, Qf): - scale = math.pow(Qf[1],2) + math.pow(Qf[2],2) + math.pow(Qf[3],2) - ax = Qf[1] - ay = Qf[2] - az = Qf[3] + ax,ay,az = (mtx*MATWORLD).toEuler() - if scale > .0001: - ax/=scale - ay/=scale - az/=scale - - angle = 2 * math.acos(Qf[0]) - - result = [ax, ay, az, angle] - return result + # ax *= DEG2RAD + # ay *= DEG2RAD + # az *= DEG2RAD + + # rot X + x1=x + y1=y*math.cos(ax)-z*math.sin(ax) + z1=y*math.sin(ax)+z*math.cos(ax) + + # rot Y + x2=x1*math.cos(ay)+z1*math.sin(ay) + y2=y1 + z2=z1*math.cos(ay)-x1*math.sin(ay) + + # rot Z + x3=x2*math.cos(az)-y2*math.sin(az) + y3=x2*math.sin(az)+y2*math.cos(az) + z3=z2 + + return [x3,y3,z3] + + + # swap Y and Z to handle axis difference between Blender and VRML + #------------------------------------------------------------------------ + def rotatePointForVRML(self, v): + x = v[0] + y = v[2] + z = -v[1] + + vrmlPoint=[x, y, z] + return vrmlPoint + + # For writing well formed VRML code + #------------------------------------------------------------------------ + def writeIndented(self, s, inc=0): + if inc < 1: + self.indentLevel = self.indentLevel + inc + + spaces="" + for x in range(self.indentLevel): + spaces = spaces + "\t" + self.file.write(spaces + s) + + if inc > 0: + self.indentLevel = self.indentLevel + inc + + # Converts a Euler to three new Quaternions + # Angles of Euler are passed in as radians + #------------------------------------------------------------------------ + def eulerToQuaternions(self, x, y, z): + Qx = [math.cos(x/2), math.sin(x/2), 0, 0] + Qy = [math.cos(y/2), 0, math.sin(y/2), 0] + Qz = [math.cos(z/2), 0, 0, math.sin(z/2)] + + quaternionVec=[Qx,Qy,Qz] + return quaternionVec + + # Multiply two Quaternions together to get a new Quaternion + #------------------------------------------------------------------------ + def multiplyQuaternions(self, Q1, Q2): + result = [((Q1[0] * Q2[0]) - (Q1[1] * Q2[1]) - (Q1[2] * Q2[2]) - (Q1[3] * Q2[3])), + ((Q1[0] * Q2[1]) + (Q1[1] * Q2[0]) + (Q1[2] * Q2[3]) - (Q1[3] * Q2[2])), + ((Q1[0] * Q2[2]) + (Q1[2] * Q2[0]) + (Q1[3] * Q2[1]) - (Q1[1] * Q2[3])), + ((Q1[0] * Q2[3]) + (Q1[3] * Q2[0]) + (Q1[1] * Q2[2]) - (Q1[2] * Q2[1]))] + + return result + + # Convert a Quaternion to an Angle Axis (ax, ay, az, angle) + # angle is in radians + #------------------------------------------------------------------------ + def quaternionToAngleAxis(self, Qf): + scale = math.pow(Qf[1],2) + math.pow(Qf[2],2) + math.pow(Qf[3],2) + ax = Qf[1] + ay = Qf[2] + az = Qf[3] + + if scale > .0001: + ax/=scale + ay/=scale + az/=scale + + angle = 2 * math.acos(Qf[0]) + + result = [ax, ay, az, angle] + return result ########################################################## # Callbacks, needed before Main ########################################################## def x3d_export(filename, - context, - EXPORT_APPLY_MODIFIERS=False, - EXPORT_TRI=False, - EXPORT_GZIP=False): - - if EXPORT_GZIP: - if not filename.lower().endswith('.x3dz'): - filename = '.'.join(filename.split('.')[:-1]) + '.x3dz' - else: - if not filename.lower().endswith('.x3d'): - filename = '.'.join(filename.split('.')[:-1]) + '.x3d' - - - scene = context.scene - # scene = Blender.Scene.GetCurrent() - world = scene.world + context, + EXPORT_APPLY_MODIFIERS=False, + EXPORT_TRI=False, + EXPORT_GZIP=False): - # XXX these are global textures while .Get() returned only scene's? - alltextures = bpy.data.textures - # alltextures = Blender.Texture.Get() + if EXPORT_GZIP: + if not filename.lower().endswith('.x3dz'): + filename = '.'.join(filename.split('.')[:-1]) + '.x3dz' + else: + if not filename.lower().endswith('.x3d'): + filename = '.'.join(filename.split('.')[:-1]) + '.x3d' - wrlexport=x3d_class(filename) - wrlexport.export(\ - scene,\ - world,\ - alltextures,\ - \ - EXPORT_APPLY_MODIFIERS = EXPORT_APPLY_MODIFIERS,\ - EXPORT_TRI = EXPORT_TRI,\ - ) + + scene = context.scene + # scene = Blender.Scene.GetCurrent() + world = scene.world + + # XXX these are global textures while .Get() returned only scene's? + alltextures = bpy.data.textures + # alltextures = Blender.Texture.Get() + + wrlexport=x3d_class(filename) + wrlexport.export(\ + scene,\ + world,\ + alltextures,\ + \ + EXPORT_APPLY_MODIFIERS = EXPORT_APPLY_MODIFIERS,\ + EXPORT_TRI = EXPORT_TRI,\ + ) def x3d_export_ui(filename): - if not filename.endswith(extension): - filename += extension - #if _safeOverwrite and sys.exists(filename): - # result = Draw.PupMenu("File Already Exists, Overwrite?%t|Yes%x1|No%x0") - #if(result != 1): - # return - - # Get user options - EXPORT_APPLY_MODIFIERS = Draw.Create(1) - EXPORT_TRI = Draw.Create(0) - EXPORT_GZIP = Draw.Create( filename.lower().endswith('.x3dz') ) - - # Get USER Options - pup_block = [\ - ('Apply Modifiers', EXPORT_APPLY_MODIFIERS, 'Use transformed mesh data from each object.'),\ - ('Triangulate', EXPORT_TRI, 'Triangulate quads.'),\ - ('Compress', EXPORT_GZIP, 'GZip the resulting file, requires a full python install'),\ - ] + if not filename.endswith(extension): + filename += extension + #if _safeOverwrite and sys.exists(filename): + # result = Draw.PupMenu("File Already Exists, Overwrite?%t|Yes%x1|No%x0") + #if(result != 1): + # return - if not Draw.PupBlock('Export...', pup_block): - return + # Get user options + EXPORT_APPLY_MODIFIERS = Draw.Create(1) + EXPORT_TRI = Draw.Create(0) + EXPORT_GZIP = Draw.Create( filename.lower().endswith('.x3dz') ) - Blender.Window.EditMode(0) - Blender.Window.WaitCursor(1) - - x3d_export(filename,\ - EXPORT_APPLY_MODIFIERS = EXPORT_APPLY_MODIFIERS.val,\ - EXPORT_TRI = EXPORT_TRI.val,\ - EXPORT_GZIP = EXPORT_GZIP.val\ - ) - - Blender.Window.WaitCursor(0) + # Get USER Options + pup_block = [\ + ('Apply Modifiers', EXPORT_APPLY_MODIFIERS, 'Use transformed mesh data from each object.'),\ + ('Triangulate', EXPORT_TRI, 'Triangulate quads.'),\ + ('Compress', EXPORT_GZIP, 'GZip the resulting file, requires a full python install'),\ + ] + + if not Draw.PupBlock('Export...', pup_block): + return + + Blender.Window.EditMode(0) + Blender.Window.WaitCursor(1) + + x3d_export(filename,\ + EXPORT_APPLY_MODIFIERS = EXPORT_APPLY_MODIFIERS.val,\ + EXPORT_TRI = EXPORT_TRI.val,\ + EXPORT_GZIP = EXPORT_GZIP.val\ + ) + + Blender.Window.WaitCursor(0) @@ -1216,27 +1218,27 @@ def x3d_export_ui(filename): from bpy.props import * class ExportX3D(bpy.types.Operator): - '''Export selection to Extensible 3D file (.x3d)''' - bl_idname = "export.x3d" - bl_label = 'Export X3D' - - # List of operator properties, the attributes will be assigned - # to the class instance from the operator settings before calling. - path = StringProperty(name="File Path", description="File path used for exporting the X3D file", maxlen= 1024, default= "") - - apply_modifiers = BoolProperty(name="Apply Modifiers", description="Use transformed mesh data from each object.", default=True) - triangulate = BoolProperty(name="Triangulate", description="Triangulate quads.", default=False) - compress = BoolProperty(name="Compress", description="GZip the resulting file, requires a full python install.", default=False) - - - def execute(self, context): - x3d_export(self.properties.path, context, self.properties.apply_modifiers, self.properties.triangulate, self.properties.compress) - return ('FINISHED',) - - def invoke(self, context, event): - wm = context.manager - wm.add_fileselect(self) - return ('RUNNING_MODAL',) + '''Export selection to Extensible 3D file (.x3d)''' + bl_idname = "export.x3d" + bl_label = 'Export X3D' + + # List of operator properties, the attributes will be assigned + # to the class instance from the operator settings before calling. + path = StringProperty(name="File Path", description="File path used for exporting the X3D file", maxlen= 1024, default= "") + + apply_modifiers = BoolProperty(name="Apply Modifiers", description="Use transformed mesh data from each object.", default=True) + triangulate = BoolProperty(name="Triangulate", description="Triangulate quads.", default=False) + compress = BoolProperty(name="Compress", description="GZip the resulting file, requires a full python install.", default=False) + + + def execute(self, context): + x3d_export(self.properties.path, context, self.properties.apply_modifiers, self.properties.triangulate, self.properties.compress) + return ('FINISHED',) + + def invoke(self, context, event): + wm = context.manager + wm.add_fileselect(self) + return ('RUNNING_MODAL',) bpy.ops.add(ExportX3D) @@ -1249,4 +1251,4 @@ def menu_func(self, context): menu_item = dynamic_menu.add(bpy.types.INFO_MT_file_export, menu_func) # NOTES -# - blender version is hardcoded +# - blender version is hardcoded diff --git a/release/scripts/io/import_anim_bvh.py b/release/scripts/io/import_anim_bvh.py index bb0f486b09e..30ff99c1fe8 100644 --- a/release/scripts/io/import_anim_bvh.py +++ b/release/scripts/io/import_anim_bvh.py @@ -1,14 +1,34 @@ +# ##### 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +# + import math # import Blender import bpy # import BPyMessages import Mathutils -Vector= Mathutils.Vector -Euler= Mathutils.Euler -Matrix= Mathutils.Matrix -RotationMatrix= Mathutils.RotationMatrix -TranslationMatrix= Mathutils.TranslationMatrix +Vector = Mathutils.Vector +Euler = Mathutils.Euler +Matrix = Mathutils.Matrix +RotationMatrix = Mathutils.RotationMatrix +TranslationMatrix = Mathutils.TranslationMatrix # NASTY GLOBAL ROT_STYLE = 'QUAT' @@ -16,763 +36,761 @@ ROT_STYLE = 'QUAT' DEG2RAD = 0.017453292519943295 class bvh_node_class(object): - __slots__=(\ - 'name',# bvh joint name - 'parent',# bvh_node_class type or None for no parent - 'children',# a list of children of this type. - 'rest_head_world',# worldspace rest location for the head of this node - 'rest_head_local',# localspace rest location for the head of this node - 'rest_tail_world',# # worldspace rest location for the tail of this node - 'rest_tail_local',# # worldspace rest location for the tail of this node - 'channels',# list of 6 ints, -1 for an unused channel, otherwise an index for the BVH motion data lines, lock triple then rot triple - 'rot_order',# a triple of indicies as to the order rotation is applied. [0,1,2] is x/y/z - [None, None, None] if no rotation. - 'anim_data',# a list one tuple's one for each frame. (locx, locy, locz, rotx, roty, rotz) - 'has_loc',# Conveinience function, bool, same as (channels[0]!=-1 or channels[1]!=-1 channels[2]!=-1) - 'has_rot',# Conveinience function, bool, same as (channels[3]!=-1 or channels[4]!=-1 channels[5]!=-1) - 'temp')# use this for whatever you want - - def __init__(self, name, rest_head_world, rest_head_local, parent, channels, rot_order): - self.name= name - self.rest_head_world= rest_head_world - self.rest_head_local= rest_head_local - self.rest_tail_world= None - self.rest_tail_local= None - self.parent= parent - self.channels= channels - self.rot_order= rot_order - - # convenience functions - self.has_loc= channels[0] != -1 or channels[1] != -1 or channels[2] != -1 - self.has_rot= channels[3] != -1 or channels[4] != -1 or channels[5] != -1 - - - self.children= [] - - # list of 6 length tuples: (lx,ly,lz, rx,ry,rz) - # even if the channels arnt used they will just be zero - # - self.anim_data= [(0,0,0,0,0,0)] - - - def __repr__(self): - return 'BVH name:"%s", rest_loc:(%.3f,%.3f,%.3f), rest_tail:(%.3f,%.3f,%.3f)' %\ - (self.name,\ - self.rest_head_world.x, self.rest_head_world.y, self.rest_head_world.z,\ - self.rest_head_world.x, self.rest_head_world.y, self.rest_head_world.z) - + __slots__=(\ + 'name',# bvh joint name + 'parent',# bvh_node_class type or None for no parent + 'children',# a list of children of this type. + 'rest_head_world',# worldspace rest location for the head of this node + 'rest_head_local',# localspace rest location for the head of this node + 'rest_tail_world',# # worldspace rest location for the tail of this node + 'rest_tail_local',# # worldspace rest location for the tail of this node + 'channels',# list of 6 ints, -1 for an unused channel, otherwise an index for the BVH motion data lines, lock triple then rot triple + 'rot_order',# a triple of indicies as to the order rotation is applied. [0,1,2] is x/y/z - [None, None, None] if no rotation. + 'anim_data',# a list one tuple's one for each frame. (locx, locy, locz, rotx, roty, rotz) + 'has_loc',# Conveinience function, bool, same as (channels[0]!=-1 or channels[1]!=-1 channels[2]!=-1) + 'has_rot',# Conveinience function, bool, same as (channels[3]!=-1 or channels[4]!=-1 channels[5]!=-1) + 'temp')# use this for whatever you want + + def __init__(self, name, rest_head_world, rest_head_local, parent, channels, rot_order): + self.name = name + self.rest_head_world = rest_head_world + self.rest_head_local = rest_head_local + self.rest_tail_world = None + self.rest_tail_local = None + self.parent = parent + self.channels = channels + self.rot_order = rot_order + + # convenience functions + self.has_loc = channels[0] != -1 or channels[1] != -1 or channels[2] != -1 + self.has_rot = channels[3] != -1 or channels[4] != -1 or channels[5] != -1 + + + self.children = [] + + # list of 6 length tuples: (lx,ly,lz, rx,ry,rz) + # even if the channels arnt used they will just be zero + # + self.anim_data = [(0, 0, 0, 0, 0, 0)] + + + def __repr__(self): + return 'BVH name:"%s", rest_loc:(%.3f,%.3f,%.3f), rest_tail:(%.3f,%.3f,%.3f)' %\ + (self.name,\ + self.rest_head_world.x, self.rest_head_world.y, self.rest_head_world.z,\ + self.rest_head_world.x, self.rest_head_world.y, self.rest_head_world.z) + # Change the order rotation is applied. MATRIX_IDENTITY_3x3 = Matrix([1,0,0],[0,1,0],[0,0,1]) MATRIX_IDENTITY_4x4 = Matrix([1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]) -def eulerRotate(x,y,z, rot_order): - - # Clamp all values between 0 and 360, values outside this raise an error. - mats=[RotationMatrix(math.radians(x%360),3,'x'), RotationMatrix(math.radians(y%360),3,'y'), RotationMatrix(math.radians(z%360),3,'z')] - # print rot_order - # Standard BVH multiplication order, apply the rotation in the order Z,X,Y - - #XXX, order changes??? - #eul = (mats[rot_order[2]]*(mats[rot_order[1]]* (mats[rot_order[0]]* MATRIX_IDENTITY_3x3))).toEuler() - eul = (MATRIX_IDENTITY_3x3*mats[rot_order[0]]*(mats[rot_order[1]]* (mats[rot_order[2]]))).toEuler() - - eul = math.degrees(eul.x), math.degrees(eul.y), math.degrees(eul.z) - - return eul +def eulerRotate(x,y,z, rot_order): + + # Clamp all values between 0 and 360, values outside this raise an error. + mats=[RotationMatrix(math.radians(x%360),3,'x'), RotationMatrix(math.radians(y%360),3,'y'), RotationMatrix(math.radians(z%360),3,'z')] + # print rot_order + # Standard BVH multiplication order, apply the rotation in the order Z,X,Y + + #XXX, order changes??? + #eul = (mats[rot_order[2]]*(mats[rot_order[1]]* (mats[rot_order[0]]* MATRIX_IDENTITY_3x3))).toEuler() + eul = (MATRIX_IDENTITY_3x3*mats[rot_order[0]]*(mats[rot_order[1]]* (mats[rot_order[2]]))).toEuler() + + eul = math.degrees(eul.x), math.degrees(eul.y), math.degrees(eul.z) + + return eul def read_bvh(context, file_path, GLOBAL_SCALE=1.0): - # File loading stuff - # Open the file for importing - file = open(file_path, 'rU') - - # Seperate into a list of lists, each line a list of words. - file_lines = file.readlines() - # Non standard carrage returns? - if len(file_lines) == 1: - file_lines = file_lines[0].split('\r') - - # Split by whitespace. - file_lines =[ll for ll in [ l.split() for l in file_lines] if ll] - - - # Create Hirachy as empties - - if file_lines[0][0].lower() == 'hierarchy': - #print 'Importing the BVH Hierarchy for:', file_path - pass - else: - raise 'ERROR: This is not a BVH file' - - bvh_nodes= {None:None} - bvh_nodes_serial = [None] - - channelIndex = -1 - + # File loading stuff + # Open the file for importing + file = open(file_path, 'rU') - lineIdx = 0 # An index for the file. - while lineIdx < len(file_lines) -1: - #... - if file_lines[lineIdx][0].lower() == 'root' or file_lines[lineIdx][0].lower() == 'joint': - - # Join spaces into 1 word with underscores joining it. - if len(file_lines[lineIdx]) > 2: - file_lines[lineIdx][1] = '_'.join(file_lines[lineIdx][1:]) - file_lines[lineIdx] = file_lines[lineIdx][:2] - - # MAY NEED TO SUPPORT MULTIPLE ROOT's HERE!!!, Still unsure weather multiple roots are possible.?? - - # Make sure the names are unique- Object names will match joint names exactly and both will be unique. - name = file_lines[lineIdx][1] - - #print '%snode: %s, parent: %s' % (len(bvh_nodes_serial) * ' ', name, bvh_nodes_serial[-1]) - - lineIdx += 2 # Incriment to the next line (Offset) - rest_head_local = Vector( GLOBAL_SCALE*float(file_lines[lineIdx][1]), GLOBAL_SCALE*float(file_lines[lineIdx][2]), GLOBAL_SCALE*float(file_lines[lineIdx][3]) ) - lineIdx += 1 # Incriment to the next line (Channels) - - # newChannel[Xposition, Yposition, Zposition, Xrotation, Yrotation, Zrotation] - # newChannel references indecies to the motiondata, - # if not assigned then -1 refers to the last value that will be added on loading at a value of zero, this is appended - # We'll add a zero value onto the end of the MotionDATA so this is always refers to a value. - my_channel = [-1, -1, -1, -1, -1, -1] - my_rot_order= [None, None, None] - rot_count= 0 - for channel in file_lines[lineIdx][2:]: - channel= channel.lower() - channelIndex += 1 # So the index points to the right channel - if channel == 'xposition': my_channel[0] = channelIndex - elif channel == 'yposition': my_channel[1] = channelIndex - elif channel == 'zposition': my_channel[2] = channelIndex - - elif channel == 'xrotation': - my_channel[3] = channelIndex - my_rot_order[rot_count]= 0 - rot_count+=1 - elif channel == 'yrotation': - my_channel[4] = channelIndex - my_rot_order[rot_count]= 1 - rot_count+=1 - elif channel == 'zrotation': - my_channel[5] = channelIndex - my_rot_order[rot_count]= 2 - rot_count+=1 - - channels = file_lines[lineIdx][2:] - - my_parent= bvh_nodes_serial[-1] # account for none - - - # Apply the parents offset accumletivly - if my_parent==None: - rest_head_world= Vector(rest_head_local) - else: - rest_head_world= my_parent.rest_head_world + rest_head_local - - bvh_node= bvh_nodes[name]= bvh_node_class(name, rest_head_world, rest_head_local, my_parent, my_channel, my_rot_order) - - # If we have another child then we can call ourselves a parent, else - bvh_nodes_serial.append(bvh_node) + # Seperate into a list of lists, each line a list of words. + file_lines = file.readlines() + # Non standard carrage returns? + if len(file_lines) == 1: + file_lines = file_lines[0].split('\r') - # Account for an end node - if file_lines[lineIdx][0].lower() == 'end' and file_lines[lineIdx][1].lower() == 'site': # There is somtimes a name after 'End Site' but we will ignore it. - lineIdx += 2 # Incriment to the next line (Offset) - rest_tail = Vector( GLOBAL_SCALE*float(file_lines[lineIdx][1]), GLOBAL_SCALE*float(file_lines[lineIdx][2]), GLOBAL_SCALE*float(file_lines[lineIdx][3]) ) - - bvh_nodes_serial[-1].rest_tail_world= bvh_nodes_serial[-1].rest_head_world + rest_tail - bvh_nodes_serial[-1].rest_tail_local= rest_tail - - - # Just so we can remove the Parents in a uniform way- End end never has kids - # so this is a placeholder - bvh_nodes_serial.append(None) - - if len(file_lines[lineIdx]) == 1 and file_lines[lineIdx][0] == '}': # == ['}'] - bvh_nodes_serial.pop() # Remove the last item - - if len(file_lines[lineIdx]) == 1 and file_lines[lineIdx][0].lower() == 'motion': - #print '\nImporting motion data' - lineIdx += 3 # Set the cursor to the first frame - break - - lineIdx += 1 - - - # Remove the None value used for easy parent reference - del bvh_nodes[None] - # Dont use anymore - del bvh_nodes_serial - - bvh_nodes_list= bvh_nodes.values() - - while lineIdx < len(file_lines): - line= file_lines[lineIdx] - for bvh_node in bvh_nodes_list: - #for bvh_node in bvh_nodes_serial: - lx= ly= lz= rx= ry= rz= 0.0 - channels= bvh_node.channels - anim_data= bvh_node.anim_data - if channels[0] != -1: - lx= GLOBAL_SCALE * float( line[channels[0]] ) - - if channels[1] != -1: - ly= GLOBAL_SCALE * float( line[channels[1]] ) - - if channels[2] != -1: - lz= GLOBAL_SCALE * float( line[channels[2]] ) - - if channels[3] != -1 or channels[4] != -1 or channels[5] != -1: - rx, ry, rz = float( line[channels[3]] ), float( line[channels[4]] ), float( line[channels[5]] ) - - if ROT_STYLE != 'NATIVE': - rx, ry, rz = eulerRotate(rx, ry, rz, bvh_node.rot_order) - - # Make interpolation not cross between 180d, thjis fixes sub frame interpolation and time scaling. - # Will go from (355d to 365d) rather then to (355d to 5d) - inbetween these 2 there will now be a correct interpolation. - - while anim_data[-1][3] - rx > 180: rx+=360 - while anim_data[-1][3] - rx < -180: rx-=360 - - while anim_data[-1][4] - ry > 180: ry+=360 - while anim_data[-1][4] - ry < -180: ry-=360 - - while anim_data[-1][5] - rz > 180: rz+=360 - while anim_data[-1][5] - rz < -180: rz-=360 - - # Done importing motion data # - anim_data.append( (lx, ly, lz, rx, ry, rz) ) - lineIdx += 1 - - # Assign children - for bvh_node in bvh_nodes.values(): - bvh_node_parent= bvh_node.parent - if bvh_node_parent: - bvh_node_parent.children.append(bvh_node) - - # Now set the tip of each bvh_node - for bvh_node in bvh_nodes.values(): - - if not bvh_node.rest_tail_world: - if len(bvh_node.children)==0: - # could just fail here, but rare BVH files have childless nodes - bvh_node.rest_tail_world = Vector(bvh_node.rest_head_world) - bvh_node.rest_tail_local = Vector(bvh_node.rest_head_local) - elif len(bvh_node.children)==1: - bvh_node.rest_tail_world= Vector(bvh_node.children[0].rest_head_world) - bvh_node.rest_tail_local= Vector(bvh_node.children[0].rest_head_local) - else: - # allow this, see above - #if not bvh_node.children: - # raise 'error, bvh node has no end and no children. bad file' - - # Removed temp for now - rest_tail_world= Vector(0,0,0) - rest_tail_local= Vector(0,0,0) - for bvh_node_child in bvh_node.children: - rest_tail_world += bvh_node_child.rest_head_world - rest_tail_local += bvh_node_child.rest_head_local - - bvh_node.rest_tail_world= rest_tail_world * (1.0/len(bvh_node.children)) - bvh_node.rest_tail_local= rest_tail_local * (1.0/len(bvh_node.children)) + # Split by whitespace. + file_lines =[ll for ll in [ l.split() for l in file_lines] if ll] - # Make sure tail isnt the same location as the head. - if (bvh_node.rest_tail_local-bvh_node.rest_head_local).length <= 0.001*GLOBAL_SCALE: - - bvh_node.rest_tail_local.y= bvh_node.rest_tail_local.y + GLOBAL_SCALE/10 - bvh_node.rest_tail_world.y= bvh_node.rest_tail_world.y + GLOBAL_SCALE/10 - - - - return bvh_nodes + + # Create Hirachy as empties + + if file_lines[0][0].lower() == 'hierarchy': + #print 'Importing the BVH Hierarchy for:', file_path + pass + else: + raise 'ERROR: This is not a BVH file' + + bvh_nodes = {None: None} + bvh_nodes_serial = [None] + + channelIndex = -1 + + + lineIdx = 0 # An index for the file. + while lineIdx < len(file_lines) -1: + #... + if file_lines[lineIdx][0].lower() == 'root' or file_lines[lineIdx][0].lower() == 'joint': + + # Join spaces into 1 word with underscores joining it. + if len(file_lines[lineIdx]) > 2: + file_lines[lineIdx][1] = '_'.join(file_lines[lineIdx][1:]) + file_lines[lineIdx] = file_lines[lineIdx][:2] + + # MAY NEED TO SUPPORT MULTIPLE ROOT's HERE!!!, Still unsure weather multiple roots are possible.?? + + # Make sure the names are unique- Object names will match joint names exactly and both will be unique. + name = file_lines[lineIdx][1] + + #print '%snode: %s, parent: %s' % (len(bvh_nodes_serial) * ' ', name, bvh_nodes_serial[-1]) + + lineIdx += 2 # Incriment to the next line (Offset) + rest_head_local = Vector( GLOBAL_SCALE * float(file_lines[lineIdx][1]), GLOBAL_SCALE * float(file_lines[lineIdx][2]), GLOBAL_SCALE * float(file_lines[lineIdx][3])) + lineIdx += 1 # Incriment to the next line (Channels) + + # newChannel[Xposition, Yposition, Zposition, Xrotation, Yrotation, Zrotation] + # newChannel references indecies to the motiondata, + # if not assigned then -1 refers to the last value that will be added on loading at a value of zero, this is appended + # We'll add a zero value onto the end of the MotionDATA so this is always refers to a value. + my_channel = [-1, -1, -1, -1, -1, -1] + my_rot_order = [None, None, None] + rot_count = 0 + for channel in file_lines[lineIdx][2:]: + channel = channel.lower() + channelIndex += 1 # So the index points to the right channel + if channel == 'xposition': my_channel[0] = channelIndex + elif channel == 'yposition': my_channel[1] = channelIndex + elif channel == 'zposition': my_channel[2] = channelIndex + + elif channel == 'xrotation': + my_channel[3] = channelIndex + my_rot_order[rot_count] = 0 + rot_count += 1 + elif channel == 'yrotation': + my_channel[4] = channelIndex + my_rot_order[rot_count] = 1 + rot_count += 1 + elif channel == 'zrotation': + my_channel[5] = channelIndex + my_rot_order[rot_count] = 2 + rot_count += 1 + + channels = file_lines[lineIdx][2:] + + my_parent = bvh_nodes_serial[-1] # account for none + + + # Apply the parents offset accumletivly + if my_parent==None: + rest_head_world = Vector(rest_head_local) + else: + rest_head_world = my_parent.rest_head_world + rest_head_local + + bvh_node = bvh_nodes[name] = bvh_node_class(name, rest_head_world, rest_head_local, my_parent, my_channel, my_rot_order) + + # If we have another child then we can call ourselves a parent, else + bvh_nodes_serial.append(bvh_node) + + # Account for an end node + if file_lines[lineIdx][0].lower() == 'end' and file_lines[lineIdx][1].lower() == 'site': # There is somtimes a name after 'End Site' but we will ignore it. + lineIdx += 2 # Incriment to the next line (Offset) + rest_tail = Vector( GLOBAL_SCALE*float(file_lines[lineIdx][1]), GLOBAL_SCALE*float(file_lines[lineIdx][2]), GLOBAL_SCALE*float(file_lines[lineIdx][3])) + + bvh_nodes_serial[-1].rest_tail_world = bvh_nodes_serial[-1].rest_head_world + rest_tail + bvh_nodes_serial[-1].rest_tail_local = rest_tail + + + # Just so we can remove the Parents in a uniform way- End end never has kids + # so this is a placeholder + bvh_nodes_serial.append(None) + + if len(file_lines[lineIdx]) == 1 and file_lines[lineIdx][0] == '}': # == ['}'] + bvh_nodes_serial.pop() # Remove the last item + + if len(file_lines[lineIdx]) == 1 and file_lines[lineIdx][0].lower() == 'motion': + #print '\nImporting motion data' + lineIdx += 3 # Set the cursor to the first frame + break + + lineIdx += 1 + + + # Remove the None value used for easy parent reference + del bvh_nodes[None] + # Dont use anymore + del bvh_nodes_serial + + bvh_nodes_list = bvh_nodes.values() + + while lineIdx < len(file_lines): + line = file_lines[lineIdx] + for bvh_node in bvh_nodes_list: + #for bvh_node in bvh_nodes_serial: + lx = ly = lz = rx = ry = rz = 0.0 + channels = bvh_node.channels + anim_data = bvh_node.anim_data + if channels[0] != -1: + lx = GLOBAL_SCALE * float(line[channels[0]]) + + if channels[1] != -1: + ly = GLOBAL_SCALE * float(line[channels[1]]) + + if channels[2] != -1: + lz = GLOBAL_SCALE * float(line[channels[2]]) + + if channels[3] != -1 or channels[4] != -1 or channels[5] != -1: + rx, ry, rz = float(line[channels[3]]), float(line[channels[4]]), float(line[channels[5]]) + + if ROT_STYLE != 'NATIVE': + rx, ry, rz = eulerRotate(rx, ry, rz, bvh_node.rot_order) + + # Make interpolation not cross between 180d, thjis fixes sub frame interpolation and time scaling. + # Will go from (355d to 365d) rather then to (355d to 5d) - inbetween these 2 there will now be a correct interpolation. + + while anim_data[-1][3] - rx > 180: rx+=360 + while anim_data[-1][3] - rx < -180: rx-=360 + + while anim_data[-1][4] - ry > 180: ry+=360 + while anim_data[-1][4] - ry < -180: ry-=360 + + while anim_data[-1][5] - rz > 180: rz+=360 + while anim_data[-1][5] - rz < -180: rz-=360 + + # Done importing motion data # + anim_data.append( (lx, ly, lz, rx, ry, rz) ) + lineIdx += 1 + + # Assign children + for bvh_node in bvh_nodes.values(): + bvh_node_parent = bvh_node.parent + if bvh_node_parent: + bvh_node_parent.children.append(bvh_node) + + # Now set the tip of each bvh_node + for bvh_node in bvh_nodes.values(): + + if not bvh_node.rest_tail_world: + if len(bvh_node.children)==0: + # could just fail here, but rare BVH files have childless nodes + bvh_node.rest_tail_world = Vector(bvh_node.rest_head_world) + bvh_node.rest_tail_local = Vector(bvh_node.rest_head_local) + elif len(bvh_node.children)==1: + bvh_node.rest_tail_world = Vector(bvh_node.children[0].rest_head_world) + bvh_node.rest_tail_local = Vector(bvh_node.children[0].rest_head_local) + else: + # allow this, see above + #if not bvh_node.children: + # raise 'error, bvh node has no end and no children. bad file' + + # Removed temp for now + rest_tail_world = Vector(0, 0, 0) + rest_tail_local = Vector(0, 0, 0) + for bvh_node_child in bvh_node.children: + rest_tail_world += bvh_node_child.rest_head_world + rest_tail_local += bvh_node_child.rest_head_local + + bvh_node.rest_tail_world = rest_tail_world * (1.0 / len(bvh_node.children)) + bvh_node.rest_tail_local = rest_tail_local * (1.0 / len(bvh_node.children)) + + # Make sure tail isnt the same location as the head. + if (bvh_node.rest_tail_local-bvh_node.rest_head_local).length <= 0.001*GLOBAL_SCALE: + + bvh_node.rest_tail_local.y = bvh_node.rest_tail_local.y + GLOBAL_SCALE/10 + bvh_node.rest_tail_world.y = bvh_node.rest_tail_world.y + GLOBAL_SCALE/10 + + + + return bvh_nodes def bvh_node_dict2objects(context, bvh_nodes, IMPORT_START_FRAME= 1, IMPORT_LOOP= False): - - if IMPORT_START_FRAME<1: - IMPORT_START_FRAME= 1 - - scn= context.scene - scn.objects.selected = [] - - objects= [] - - def add_ob(name): - ob = scn.objects.new('Empty') - objects.append(ob) - return ob - - # Add objects - for name, bvh_node in bvh_nodes.items(): - bvh_node.temp= add_ob(name) - - # Parent the objects - for bvh_node in bvh_nodes.values(): - bvh_node.temp.makeParent([ bvh_node_child.temp for bvh_node_child in bvh_node.children ], 1, 0) # ojbs, noninverse, 1 = not fast. - - # Offset - for bvh_node in bvh_nodes.values(): - # Make relative to parents offset - bvh_node.temp.loc= bvh_node.rest_head_local - - # Add tail objects - for name, bvh_node in bvh_nodes.items(): - if not bvh_node.children: - ob_end= add_ob(name + '_end') - bvh_node.temp.makeParent([ob_end], 1, 0) # ojbs, noninverse, 1 = not fast. - ob_end.loc= bvh_node.rest_tail_local - - - # Animate the data, the last used bvh_node will do since they all have the same number of frames - for current_frame in range(len(bvh_node.anim_data)): - Blender.Set('curframe', current_frame+IMPORT_START_FRAME) - - for bvh_node in bvh_nodes.values(): - lx,ly,lz,rx,ry,rz= bvh_node.anim_data[current_frame] - - rest_head_local= bvh_node.rest_head_local - bvh_node.temp.loc= rest_head_local.x+lx, rest_head_local.y+ly, rest_head_local.z+lz - - bvh_node.temp.rot= rx*DEG2RAD,ry*DEG2RAD,rz*DEG2RAD - - bvh_node.temp.insertIpoKey(Blender.Object.IpoKeyTypes.LOCROT) # XXX invalid - - scn.update(1) - return objects + + if IMPORT_START_FRAME<1: + IMPORT_START_FRAME= 1 + + scn= context.scene + scn.objects.selected = [] + + objects= [] + + def add_ob(name): + ob = scn.objects.new('Empty') + objects.append(ob) + return ob + + # Add objects + for name, bvh_node in bvh_nodes.items(): + bvh_node.temp= add_ob(name) + + # Parent the objects + for bvh_node in bvh_nodes.values(): + bvh_node.temp.makeParent([ bvh_node_child.temp for bvh_node_child in bvh_node.children ], 1, 0) # ojbs, noninverse, 1 = not fast. + + # Offset + for bvh_node in bvh_nodes.values(): + # Make relative to parents offset + bvh_node.temp.loc= bvh_node.rest_head_local + + # Add tail objects + for name, bvh_node in bvh_nodes.items(): + if not bvh_node.children: + ob_end= add_ob(name + '_end') + bvh_node.temp.makeParent([ob_end], 1, 0) # ojbs, noninverse, 1 = not fast. + ob_end.loc= bvh_node.rest_tail_local + + + # Animate the data, the last used bvh_node will do since they all have the same number of frames + for current_frame in range(len(bvh_node.anim_data)): + Blender.Set('curframe', current_frame+IMPORT_START_FRAME) + + for bvh_node in bvh_nodes.values(): + lx,ly,lz,rx,ry,rz= bvh_node.anim_data[current_frame] + + rest_head_local= bvh_node.rest_head_local + bvh_node.temp.loc= rest_head_local.x+lx, rest_head_local.y+ly, rest_head_local.z+lz + + bvh_node.temp.rot= rx*DEG2RAD,ry*DEG2RAD,rz*DEG2RAD + + bvh_node.temp.insertIpoKey(Blender.Object.IpoKeyTypes.LOCROT) # XXX invalid + + scn.update(1) + return objects def bvh_node_dict2armature(context, bvh_nodes, IMPORT_START_FRAME= 1, IMPORT_LOOP= False): - - if IMPORT_START_FRAME<1: - IMPORT_START_FRAME= 1 - - - # Add the new armature, - scn = context.scene + + if IMPORT_START_FRAME<1: + IMPORT_START_FRAME= 1 + + + # Add the new armature, + scn = context.scene #XXX scn.objects.selected = [] - for ob in scn.objects: - ob.selected = False - - + for ob in scn.objects: + ob.selected = False + + #XXX arm_data= bpy.data.armatures.new() #XXX arm_ob = scn.objects.new(arm_data) - bpy.ops.object.armature_add() - arm_ob= scn.objects[-1] - arm_data= arm_ob.data + bpy.ops.object.armature_add() + arm_ob= scn.objects[-1] + arm_data= arm_ob.data + + + - - - #XXX scn.objects.context = [arm_ob] #XXX scn.objects.active = arm_ob - arm_ob.selected= True - scn.objects.active= arm_ob - print(scn.objects.active) - - - # Put us into editmode + arm_ob.selected= True + scn.objects.active= arm_ob + print(scn.objects.active) + + + # Put us into editmode #XXX arm_data.makeEditable() - - bpy.ops.object.mode_set(mode='OBJECT', toggle=False) - bpy.ops.object.mode_set(mode='EDIT', toggle=False) - - - # Get the average bone length for zero length bones, we may not use this. - average_bone_length= 0.0 - nonzero_count= 0 - for bvh_node in bvh_nodes.values(): - l= (bvh_node.rest_head_local-bvh_node.rest_tail_local).length - if l: - average_bone_length+= l - nonzero_count+=1 - - # Very rare cases all bones couldbe zero length??? - if not average_bone_length: - average_bone_length = 0.1 - else: - # Normal operation - average_bone_length = average_bone_length/nonzero_count - - + bpy.ops.object.mode_set(mode='OBJECT', toggle=False) + bpy.ops.object.mode_set(mode='EDIT', toggle=False) + + + + # Get the average bone length for zero length bones, we may not use this. + average_bone_length= 0.0 + nonzero_count= 0 + for bvh_node in bvh_nodes.values(): + l= (bvh_node.rest_head_local-bvh_node.rest_tail_local).length + if l: + average_bone_length+= l + nonzero_count+=1 + + # Very rare cases all bones couldbe zero length??? + if not average_bone_length: + average_bone_length = 0.1 + else: + # Normal operation + average_bone_length = average_bone_length/nonzero_count + + #XXX - sloppy operator code - - bpy.ops.armature.delete() - bpy.ops.armature.select_all() - bpy.ops.armature.delete() - ZERO_AREA_BONES= [] - for name, bvh_node in bvh_nodes.items(): - # New editbone - bpy.ops.armature.bone_primitive_add(name="Bone") - + bpy.ops.armature.delete() + bpy.ops.armature.select_all() + bpy.ops.armature.delete() + + ZERO_AREA_BONES= [] + for name, bvh_node in bvh_nodes.items(): + # New editbone + bpy.ops.armature.bone_primitive_add(name="Bone") + #XXX bone= bvh_node.temp= Blender.Armature.Editbone() - bone= bvh_node.temp= arm_data.edit_bones[-1] + bone= bvh_node.temp= arm_data.edit_bones[-1] - bone.name= name + bone.name= name # arm_data.bones[name]= bone - - bone.head= bvh_node.rest_head_world - bone.tail= bvh_node.rest_tail_world - - # ZERO AREA BONES. - if (bone.head-bone.tail).length < 0.001: - if bvh_node.parent: - ofs= bvh_node.parent.rest_head_local- bvh_node.parent.rest_tail_local - if ofs.length: # is our parent zero length also?? unlikely - bone.tail= bone.tail+ofs - else: - bone.tail.y= bone.tail.y+average_bone_length - else: - bone.tail.y= bone.tail.y+average_bone_length - - ZERO_AREA_BONES.append(bone.name) - - - for bvh_node in bvh_nodes.values(): - if bvh_node.parent: - # bvh_node.temp is the Editbone - - # Set the bone parent - bvh_node.temp.parent= bvh_node.parent.temp - - # Set the connection state - if not bvh_node.has_loc and\ - bvh_node.parent and\ - bvh_node.parent.temp.name not in ZERO_AREA_BONES and\ - bvh_node.parent.rest_tail_local == bvh_node.rest_head_local: - bvh_node.temp.connected= True - - # Replace the editbone with the editbone name, - # to avoid memory errors accessing the editbone outside editmode - for bvh_node in bvh_nodes.values(): - bvh_node.temp= bvh_node.temp.name - -#XXX arm_data.update() - - # Now Apply the animation to the armature - - # Get armature animation data - bpy.ops.object.mode_set(mode='OBJECT', toggle=False) - bpy.ops.object.mode_set(mode='POSE', toggle=False) - - pose= arm_ob.pose - pose_bones= pose.bones - - - if ROT_STYLE=='NATIVE': - eul_order_lookup = {\ - (0,1,2):'XYZ', - (0,2,1):'XZY', - (1,0,2):'YXZ', - (1,2,0):'YZX', - (2,0,1):'ZXY', - (2,1,0):'ZYZ' - } - - for bvh_node in bvh_nodes.values(): - bone_name= bvh_node.temp # may not be the same name as the bvh_node, could have been shortened. - pose_bone= pose_bones[bone_name] - pose_bone.rotation_mode = eul_order_lookup[tuple(bvh_node.rot_order)] - - elif ROT_STYLE=='XYZ': - for pose_bone in pose_bones: - pose_bone.rotation_mode = 'XYZ' - else: - # Quats default - pass - - - bpy.ops.pose.select_all() # set - bpy.ops.anim.keyframe_insert_menu(type=-4) # XXX - -4 ??? - - - - - #for p in pose_bones: - # print(p) - - -#XXX action = Blender.Armature.NLA.NewAction("Action") + bone.head= bvh_node.rest_head_world + bone.tail= bvh_node.rest_tail_world + + # ZERO AREA BONES. + if (bone.head-bone.tail).length < 0.001: + if bvh_node.parent: + ofs= bvh_node.parent.rest_head_local- bvh_node.parent.rest_tail_local + if ofs.length: # is our parent zero length also?? unlikely + bone.tail= bone.tail+ofs + else: + bone.tail.y= bone.tail.y+average_bone_length + else: + bone.tail.y= bone.tail.y+average_bone_length + + ZERO_AREA_BONES.append(bone.name) + + + for bvh_node in bvh_nodes.values(): + if bvh_node.parent: + # bvh_node.temp is the Editbone + + # Set the bone parent + bvh_node.temp.parent= bvh_node.parent.temp + + # Set the connection state + if not bvh_node.has_loc and\ + bvh_node.parent and\ + bvh_node.parent.temp.name not in ZERO_AREA_BONES and\ + bvh_node.parent.rest_tail_local == bvh_node.rest_head_local: + bvh_node.temp.connected= True + + # Replace the editbone with the editbone name, + # to avoid memory errors accessing the editbone outside editmode + for bvh_node in bvh_nodes.values(): + bvh_node.temp= bvh_node.temp.name + +#XXX arm_data.update() + + # Now Apply the animation to the armature + + # Get armature animation data + bpy.ops.object.mode_set(mode='OBJECT', toggle=False) + bpy.ops.object.mode_set(mode='POSE', toggle=False) + + pose= arm_ob.pose + pose_bones= pose.bones + + + if ROT_STYLE=='NATIVE': + eul_order_lookup = {\ + (0,1,2):'XYZ', + (0,2,1):'XZY', + (1,0,2):'YXZ', + (1,2,0):'YZX', + (2,0,1):'ZXY', + (2,1,0):'ZYZ'} + + for bvh_node in bvh_nodes.values(): + bone_name= bvh_node.temp # may not be the same name as the bvh_node, could have been shortened. + pose_bone= pose_bones[bone_name] + pose_bone.rotation_mode = eul_order_lookup[tuple(bvh_node.rot_order)] + + elif ROT_STYLE=='XYZ': + for pose_bone in pose_bones: + pose_bone.rotation_mode = 'XYZ' + else: + # Quats default + pass + + + bpy.ops.pose.select_all() # set + bpy.ops.anim.keyframe_insert_menu(type=-4) # XXX - -4 ??? + + + + + + #for p in pose_bones: + # print(p) + + +#XXX action = Blender.Armature.NLA.NewAction("Action") #XXX action.setActive(arm_ob) - - #bpy.ops.action.new() - #action = bpy.data.actions[-1] - - # arm_ob.animation_data.action = action - action = arm_ob.animation_data.action - - - - - #xformConstants= [ Blender.Object.Pose.LOC, Blender.Object.Pose.ROT ] - - # Replace the bvh_node.temp (currently an editbone) - # With a tuple (pose_bone, armature_bone, bone_rest_matrix, bone_rest_matrix_inv) - for bvh_node in bvh_nodes.values(): - bone_name= bvh_node.temp # may not be the same name as the bvh_node, could have been shortened. - pose_bone= pose_bones[bone_name] - rest_bone= arm_data.bones[bone_name] + + #bpy.ops.action.new() + #action = bpy.data.actions[-1] + + # arm_ob.animation_data.action = action + action = arm_ob.animation_data.action + + + + + #xformConstants= [ Blender.Object.Pose.LOC, Blender.Object.Pose.ROT ] + + # Replace the bvh_node.temp (currently an editbone) + # With a tuple (pose_bone, armature_bone, bone_rest_matrix, bone_rest_matrix_inv) + for bvh_node in bvh_nodes.values(): + bone_name= bvh_node.temp # may not be the same name as the bvh_node, could have been shortened. + pose_bone= pose_bones[bone_name] + rest_bone= arm_data.bones[bone_name] #XXX bone_rest_matrix = rest_bone.matrix['ARMATURESPACE'].rotationPart() - bone_rest_matrix = rest_bone.matrix.rotationPart() - - - bone_rest_matrix_inv= Matrix(bone_rest_matrix) - bone_rest_matrix_inv.invert() - - bone_rest_matrix_inv.resize4x4() - bone_rest_matrix.resize4x4() - bvh_node.temp= (pose_bone, bone, bone_rest_matrix, bone_rest_matrix_inv) - - - # Make a dict for fast access without rebuilding a list all the time. - ''' - xformConstants_dict={ - (True,True): [Blender.Object.Pose.LOC, Blender.Object.Pose.ROT],\ - (False,True): [Blender.Object.Pose.ROT],\ - (True,False): [Blender.Object.Pose.LOC],\ - (False,False): [],\ - } - ''' - - # KEYFRAME METHOD, SLOW, USE IPOS DIRECT - # TODO: use f-point samples instead (Aligorith) - - # Animate the data, the last used bvh_node will do since they all have the same number of frames - for current_frame in range(len(bvh_node.anim_data)-1): # skip the first frame (rest frame) - # print current_frame - - #if current_frame==150: # debugging - # break - - # Dont neet to set the current frame - for bvh_node in bvh_nodes.values(): - pose_bone, bone, bone_rest_matrix, bone_rest_matrix_inv= bvh_node.temp - lx,ly,lz,rx,ry,rz= bvh_node.anim_data[current_frame+1] - - if bvh_node.has_rot: - - if ROT_STYLE=='QUAT': - # Set the rotation, not so simple - bone_rotation_matrix= Euler(math.radians(rx), math.radians(ry), math.radians(rz)).toMatrix() - - bone_rotation_matrix.resize4x4() - #XXX ORDER CHANGE??? - #pose_bone.rotation_quaternion= (bone_rest_matrix * bone_rotation_matrix * bone_rest_matrix_inv).toQuat() # ORIGINAL - # pose_bone.rotation_quaternion= (bone_rest_matrix_inv * bone_rotation_matrix * bone_rest_matrix).toQuat() - # pose_bone.rotation_quaternion= (bone_rotation_matrix * bone_rest_matrix).toQuat() # BAD - # pose_bone.rotation_quaternion= bone_rotation_matrix.toQuat() # NOT GOOD - # pose_bone.rotation_quaternion= bone_rotation_matrix.toQuat() # NOT GOOD - - #pose_bone.rotation_quaternion= (bone_rotation_matrix * bone_rest_matrix_inv * bone_rest_matrix).toQuat() - #pose_bone.rotation_quaternion= (bone_rest_matrix_inv * bone_rest_matrix * bone_rotation_matrix).toQuat() - #pose_bone.rotation_quaternion= (bone_rest_matrix * bone_rotation_matrix * bone_rest_matrix_inv).toQuat() - - #pose_bone.rotation_quaternion= ( bone_rest_matrix* bone_rest_matrix_inv * bone_rotation_matrix).toQuat() - #pose_bone.rotation_quaternion= (bone_rotation_matrix * bone_rest_matrix * bone_rest_matrix_inv).toQuat() - #pose_bone.rotation_quaternion= (bone_rest_matrix_inv * bone_rotation_matrix * bone_rest_matrix ).toQuat() - - pose_bone.rotation_quaternion= (bone_rest_matrix_inv * bone_rotation_matrix * bone_rest_matrix).toQuat() - - else: - bone_rotation_matrix= Euler(math.radians(rx), math.radians(ry), math.radians(rz)).toMatrix() - bone_rotation_matrix.resize4x4() - - eul= (bone_rest_matrix * bone_rotation_matrix * bone_rest_matrix_inv).toEuler() - - #pose_bone.rotation_euler = math.radians(rx), math.radians(ry), math.radians(rz) - pose_bone.rotation_euler = eul - - print("ROTATION" + str(Euler(math.radians(rx), math.radians(ry), math.radians(rz)))) - - if bvh_node.has_loc: - # Set the Location, simple too - - #XXX ORDER CHANGE - # pose_bone.location= (TranslationMatrix(Vector(lx, ly, lz) - bvh_node.rest_head_local ) * bone_rest_matrix_inv).translationPart() # WHY * 10? - just how pose works - # pose_bone.location= (bone_rest_matrix_inv * TranslationMatrix(Vector(lx, ly, lz) - bvh_node.rest_head_local )).translationPart() - # pose_bone.location= lx, ly, lz - pose_bone.location= Vector(lx, ly, lz) - bvh_node.rest_head_local - + bone_rest_matrix = rest_bone.matrix.rotationPart() + + + bone_rest_matrix_inv= Matrix(bone_rest_matrix) + bone_rest_matrix_inv.invert() + + bone_rest_matrix_inv.resize4x4() + bone_rest_matrix.resize4x4() + bvh_node.temp= (pose_bone, bone, bone_rest_matrix, bone_rest_matrix_inv) + + + # Make a dict for fast access without rebuilding a list all the time. + ''' + xformConstants_dict={ + (True,True): [Blender.Object.Pose.LOC, Blender.Object.Pose.ROT],\ + (False,True): [Blender.Object.Pose.ROT],\ + (True,False): [Blender.Object.Pose.LOC],\ + (False,False): [],\ + } + ''' + + # KEYFRAME METHOD, SLOW, USE IPOS DIRECT + # TODO: use f-point samples instead (Aligorith) + + # Animate the data, the last used bvh_node will do since they all have the same number of frames + for current_frame in range(len(bvh_node.anim_data)-1): # skip the first frame (rest frame) + # print current_frame + + #if current_frame==150: # debugging + # break + + # Dont neet to set the current frame + for bvh_node in bvh_nodes.values(): + pose_bone, bone, bone_rest_matrix, bone_rest_matrix_inv= bvh_node.temp + lx,ly,lz,rx,ry,rz= bvh_node.anim_data[current_frame+1] + + if bvh_node.has_rot: + + if ROT_STYLE=='QUAT': + # Set the rotation, not so simple + bone_rotation_matrix= Euler(math.radians(rx), math.radians(ry), math.radians(rz)).toMatrix() + + bone_rotation_matrix.resize4x4() + #XXX ORDER CHANGE??? + #pose_bone.rotation_quaternion= (bone_rest_matrix * bone_rotation_matrix * bone_rest_matrix_inv).toQuat() # ORIGINAL + # pose_bone.rotation_quaternion= (bone_rest_matrix_inv * bone_rotation_matrix * bone_rest_matrix).toQuat() + # pose_bone.rotation_quaternion= (bone_rotation_matrix * bone_rest_matrix).toQuat() # BAD + # pose_bone.rotation_quaternion= bone_rotation_matrix.toQuat() # NOT GOOD + # pose_bone.rotation_quaternion= bone_rotation_matrix.toQuat() # NOT GOOD + + #pose_bone.rotation_quaternion= (bone_rotation_matrix * bone_rest_matrix_inv * bone_rest_matrix).toQuat() + #pose_bone.rotation_quaternion= (bone_rest_matrix_inv * bone_rest_matrix * bone_rotation_matrix).toQuat() + #pose_bone.rotation_quaternion= (bone_rest_matrix * bone_rotation_matrix * bone_rest_matrix_inv).toQuat() + + #pose_bone.rotation_quaternion= ( bone_rest_matrix* bone_rest_matrix_inv * bone_rotation_matrix).toQuat() + #pose_bone.rotation_quaternion= (bone_rotation_matrix * bone_rest_matrix * bone_rest_matrix_inv).toQuat() + #pose_bone.rotation_quaternion= (bone_rest_matrix_inv * bone_rotation_matrix * bone_rest_matrix ).toQuat() + + pose_bone.rotation_quaternion= (bone_rest_matrix_inv * bone_rotation_matrix * bone_rest_matrix).toQuat() + + else: + bone_rotation_matrix= Euler(math.radians(rx), math.radians(ry), math.radians(rz)).toMatrix() + bone_rotation_matrix.resize4x4() + + eul= (bone_rest_matrix * bone_rotation_matrix * bone_rest_matrix_inv).toEuler() + + #pose_bone.rotation_euler = math.radians(rx), math.radians(ry), math.radians(rz) + pose_bone.rotation_euler = eul + + print("ROTATION" + str(Euler(math.radians(rx), math.radians(ry), math.radians(rz)))) + + if bvh_node.has_loc: + # Set the Location, simple too + + #XXX ORDER CHANGE + # pose_bone.location= (TranslationMatrix(Vector(lx, ly, lz) - bvh_node.rest_head_local ) * bone_rest_matrix_inv).translationPart() # WHY * 10? - just how pose works + # pose_bone.location= (bone_rest_matrix_inv * TranslationMatrix(Vector(lx, ly, lz) - bvh_node.rest_head_local )).translationPart() + # pose_bone.location= lx, ly, lz + pose_bone.location= Vector(lx, ly, lz) - bvh_node.rest_head_local + #XXX # TODO- add in 2.5 - if 0: - # Get the transform - xformConstants= xformConstants_dict[bvh_node.has_loc, bvh_node.has_rot] - - if xformConstants: - # Insert the keyframe from the loc/quat - pose_bone.insertKey(arm_ob, current_frame+IMPORT_START_FRAME, xformConstants, True ) - else: - - if bvh_node.has_loc: - pose_bone.keyframe_insert("location") - if bvh_node.has_rot: - if ROT_STYLE=='QUAT': - pose_bone.keyframe_insert("rotation_quaternion") - else: - pose_bone.keyframe_insert("rotation_euler") - - - - # bpy.ops.anim.keyframe_insert_menu(type=-4) # XXX - -4 ??? - bpy.ops.screen.frame_offset(delta=1) - - # First time, set the IPO's to linear + if 0: + # Get the transform + xformConstants = xformConstants_dict[bvh_node.has_loc, bvh_node.has_rot] + + if xformConstants: + # Insert the keyframe from the loc/quat + pose_bone.insertKey(arm_ob, current_frame + IMPORT_START_FRAME, xformConstants, True) + else: + + if bvh_node.has_loc: + pose_bone.keyframe_insert("location") + if bvh_node.has_rot: + if ROT_STYLE == 'QUAT': + pose_bone.keyframe_insert("rotation_quaternion") + else: + pose_bone.keyframe_insert("rotation_euler") + + + # bpy.ops.anim.keyframe_insert_menu(type=-4) # XXX - -4 ??? + bpy.ops.screen.frame_offset(delta=1) + + # First time, set the IPO's to linear #XXX #TODO - if 0: - if current_frame==0: - for ipo in action.getAllChannelIpos().values(): - if ipo: - for cur in ipo: - cur.interpolation = Blender.IpoCurve.InterpTypes.LINEAR - if IMPORT_LOOP: - cur.extend = Blender.IpoCurve.ExtendTypes.CYCLIC - - - else: - for cu in action.fcurves: - for bez in cu.keyframe_points: - bez.interpolation = 'CONSTANT' - - # END KEYFRAME METHOD - - - """ - # IPO KEYFRAME SETTING - # Add in the IPOs by adding keyframes, AFAIK theres no way to add IPOs to an action so I do this :/ - for bvh_node in bvh_nodes.values(): - pose_bone, bone, bone_rest_matrix, bone_rest_matrix_inv= bvh_node.temp - - # Get the transform - xformConstants= xformConstants_dict[bvh_node.has_loc, bvh_node.has_rot] - if xformConstants: - pose_bone.loc[:]= 0,0,0 - pose_bone.quat[:]= 0,0,1,0 - # Insert the keyframe from the loc/quat - pose_bone.insertKey(arm_ob, IMPORT_START_FRAME, xformConstants) + if 0: + if current_frame == 0: + for ipo in action.getAllChannelIpos().values(): + if ipo: + for cur in ipo: + cur.interpolation = Blender.IpoCurve.InterpTypes.LINEAR + if IMPORT_LOOP: + cur.extend = Blender.IpoCurve.ExtendTypes.CYCLIC - - action_ipos= action.getAllChannelIpos() - - - for bvh_node in bvh_nodes.values(): - has_loc= bvh_node.has_loc - has_rot= bvh_node.has_rot - - if not has_rot and not has_loc: - # No animation data - continue - - ipo= action_ipos[bvh_node.temp[0].name] # posebones name as key - - if has_loc: - curve_xloc= ipo[Blender.Ipo.PO_LOCX] - curve_yloc= ipo[Blender.Ipo.PO_LOCY] - curve_zloc= ipo[Blender.Ipo.PO_LOCZ] - - curve_xloc.interpolation= \ - curve_yloc.interpolation= \ - curve_zloc.interpolation= \ - Blender.IpoCurve.InterpTypes.LINEAR - - - if has_rot: - curve_wquat= ipo[Blender.Ipo.PO_QUATW] - curve_xquat= ipo[Blender.Ipo.PO_QUATX] - curve_yquat= ipo[Blender.Ipo.PO_QUATY] - curve_zquat= ipo[Blender.Ipo.PO_QUATZ] - - curve_wquat.interpolation= \ - curve_xquat.interpolation= \ - curve_yquat.interpolation= \ - curve_zquat.interpolation= \ - Blender.IpoCurve.InterpTypes.LINEAR - - # Get the bone - pose_bone, bone, bone_rest_matrix, bone_rest_matrix_inv= bvh_node.temp - - - def pose_rot(anim_data): - bone_rotation_matrix= Euler(anim_data[3], anim_data[4], anim_data[5]).toMatrix() - bone_rotation_matrix.resize4x4() - return tuple((bone_rest_matrix * bone_rotation_matrix * bone_rest_matrix_inv).toQuat()) # qw,qx,qy,qz - - def pose_loc(anim_data): - return tuple((TranslationMatrix(Vector(anim_data[0], anim_data[1], anim_data[2])) * bone_rest_matrix_inv).translationPart()) - - - last_frame= len(bvh_node.anim_data)+IMPORT_START_FRAME-1 - - if has_loc: - pose_locations= [pose_loc(anim_key) for anim_key in bvh_node.anim_data] - - # Add the start at the end, we know the start is just 0,0,0 anyway - curve_xloc.append((last_frame, pose_locations[-1][0])) - curve_yloc.append((last_frame, pose_locations[-1][1])) - curve_zloc.append((last_frame, pose_locations[-1][2])) - - if len(pose_locations) > 1: - ox,oy,oz= pose_locations[0] - x,y,z= pose_locations[1] - - for i in range(1, len(pose_locations)-1): # from second frame to second last frame - - nx,ny,nz= pose_locations[i+1] - xset= yset= zset= True # we set all these by default - if abs((ox+nx)/2 - x) < 0.00001: xset= False - if abs((oy+ny)/2 - y) < 0.00001: yset= False - if abs((oz+nz)/2 - z) < 0.00001: zset= False - - if xset: curve_xloc.append((i+IMPORT_START_FRAME, x)) - if yset: curve_yloc.append((i+IMPORT_START_FRAME, y)) - if zset: curve_zloc.append((i+IMPORT_START_FRAME, z)) - - # Set the old and use the new - ox,oy,oz= x,y,z - x,y,z= nx,ny,nz - - - if has_rot: - pose_rotations= [pose_rot(anim_key) for anim_key in bvh_node.anim_data] - - # Add the start at the end, we know the start is just 0,0,0 anyway - curve_wquat.append((last_frame, pose_rotations[-1][0])) - curve_xquat.append((last_frame, pose_rotations[-1][1])) - curve_yquat.append((last_frame, pose_rotations[-1][2])) - curve_zquat.append((last_frame, pose_rotations[-1][3])) - - - if len(pose_rotations) > 1: - ow,ox,oy,oz= pose_rotations[0] - w,x,y,z= pose_rotations[1] - - for i in range(1, len(pose_rotations)-1): # from second frame to second last frame - - nw, nx,ny,nz= pose_rotations[i+1] - wset= xset= yset= zset= True # we set all these by default - if abs((ow+nw)/2 - w) < 0.00001: wset= False - if abs((ox+nx)/2 - x) < 0.00001: xset= False - if abs((oy+ny)/2 - y) < 0.00001: yset= False - if abs((oz+nz)/2 - z) < 0.00001: zset= False - - if wset: curve_wquat.append((i+IMPORT_START_FRAME, w)) - if xset: curve_xquat.append((i+IMPORT_START_FRAME, x)) - if yset: curve_yquat.append((i+IMPORT_START_FRAME, y)) - if zset: curve_zquat.append((i+IMPORT_START_FRAME, z)) - - # Set the old and use the new - ow,ox,oy,oz= w,x,y,z - w,x,y,z= nw,nx,ny,nz - # IPO KEYFRAME SETTING - """ - + else: + for cu in action.fcurves: + for bez in cu.keyframe_points: + bez.interpolation = 'CONSTANT' + + # END KEYFRAME METHOD + + + """ + # IPO KEYFRAME SETTING + # Add in the IPOs by adding keyframes, AFAIK theres no way to add IPOs to an action so I do this :/ + for bvh_node in bvh_nodes.values(): + pose_bone, bone, bone_rest_matrix, bone_rest_matrix_inv= bvh_node.temp + + # Get the transform + xformConstants= xformConstants_dict[bvh_node.has_loc, bvh_node.has_rot] + if xformConstants: + pose_bone.loc[:]= 0,0,0 + pose_bone.quat[:]= 0,0,1,0 + # Insert the keyframe from the loc/quat + pose_bone.insertKey(arm_ob, IMPORT_START_FRAME, xformConstants) + + + action_ipos= action.getAllChannelIpos() + + + for bvh_node in bvh_nodes.values(): + has_loc= bvh_node.has_loc + has_rot= bvh_node.has_rot + + if not has_rot and not has_loc: + # No animation data + continue + + ipo= action_ipos[bvh_node.temp[0].name] # posebones name as key + + if has_loc: + curve_xloc= ipo[Blender.Ipo.PO_LOCX] + curve_yloc= ipo[Blender.Ipo.PO_LOCY] + curve_zloc= ipo[Blender.Ipo.PO_LOCZ] + + curve_xloc.interpolation= \ + curve_yloc.interpolation= \ + curve_zloc.interpolation= \ + Blender.IpoCurve.InterpTypes.LINEAR + + + if has_rot: + curve_wquat= ipo[Blender.Ipo.PO_QUATW] + curve_xquat= ipo[Blender.Ipo.PO_QUATX] + curve_yquat= ipo[Blender.Ipo.PO_QUATY] + curve_zquat= ipo[Blender.Ipo.PO_QUATZ] + + curve_wquat.interpolation= \ + curve_xquat.interpolation= \ + curve_yquat.interpolation= \ + curve_zquat.interpolation= \ + Blender.IpoCurve.InterpTypes.LINEAR + + # Get the bone + pose_bone, bone, bone_rest_matrix, bone_rest_matrix_inv= bvh_node.temp + + + def pose_rot(anim_data): + bone_rotation_matrix= Euler(anim_data[3], anim_data[4], anim_data[5]).toMatrix() + bone_rotation_matrix.resize4x4() + return tuple((bone_rest_matrix * bone_rotation_matrix * bone_rest_matrix_inv).toQuat()) # qw,qx,qy,qz + + def pose_loc(anim_data): + return tuple((TranslationMatrix(Vector(anim_data[0], anim_data[1], anim_data[2])) * bone_rest_matrix_inv).translationPart()) + + + last_frame= len(bvh_node.anim_data)+IMPORT_START_FRAME-1 + + if has_loc: + pose_locations= [pose_loc(anim_key) for anim_key in bvh_node.anim_data] + + # Add the start at the end, we know the start is just 0,0,0 anyway + curve_xloc.append((last_frame, pose_locations[-1][0])) + curve_yloc.append((last_frame, pose_locations[-1][1])) + curve_zloc.append((last_frame, pose_locations[-1][2])) + + if len(pose_locations) > 1: + ox,oy,oz= pose_locations[0] + x,y,z= pose_locations[1] + + for i in range(1, len(pose_locations)-1): # from second frame to second last frame + + nx,ny,nz= pose_locations[i+1] + xset= yset= zset= True # we set all these by default + if abs((ox+nx)/2 - x) < 0.00001: xset= False + if abs((oy+ny)/2 - y) < 0.00001: yset= False + if abs((oz+nz)/2 - z) < 0.00001: zset= False + + if xset: curve_xloc.append((i+IMPORT_START_FRAME, x)) + if yset: curve_yloc.append((i+IMPORT_START_FRAME, y)) + if zset: curve_zloc.append((i+IMPORT_START_FRAME, z)) + + # Set the old and use the new + ox,oy,oz= x,y,z + x,y,z= nx,ny,nz + + + if has_rot: + pose_rotations= [pose_rot(anim_key) for anim_key in bvh_node.anim_data] + + # Add the start at the end, we know the start is just 0,0,0 anyway + curve_wquat.append((last_frame, pose_rotations[-1][0])) + curve_xquat.append((last_frame, pose_rotations[-1][1])) + curve_yquat.append((last_frame, pose_rotations[-1][2])) + curve_zquat.append((last_frame, pose_rotations[-1][3])) + + + if len(pose_rotations) > 1: + ow,ox,oy,oz= pose_rotations[0] + w,x,y,z= pose_rotations[1] + + for i in range(1, len(pose_rotations)-1): # from second frame to second last frame + + nw, nx,ny,nz= pose_rotations[i+1] + wset= xset= yset= zset= True # we set all these by default + if abs((ow+nw)/2 - w) < 0.00001: wset= False + if abs((ox+nx)/2 - x) < 0.00001: xset= False + if abs((oy+ny)/2 - y) < 0.00001: yset= False + if abs((oz+nz)/2 - z) < 0.00001: zset= False + + if wset: curve_wquat.append((i+IMPORT_START_FRAME, w)) + if xset: curve_xquat.append((i+IMPORT_START_FRAME, x)) + if yset: curve_yquat.append((i+IMPORT_START_FRAME, y)) + if zset: curve_zquat.append((i+IMPORT_START_FRAME, z)) + + # Set the old and use the new + ow,ox,oy,oz= w,x,y,z + w,x,y,z= nw,nx,ny,nz + + # IPO KEYFRAME SETTING + """ + # XXX NOT NEEDED NOW? - # pose.update() - return arm_ob + # pose.update() + return arm_ob #=============# @@ -789,87 +807,92 @@ def bvh_node_dict2armature(context, bvh_nodes, IMPORT_START_FRAME= 1, IMPORT_LOO import os DIR = '/metavr/mocap/bvh/' for f in ('/d/staggered_walk.bvh',): - #for f in os.listdir(DIR)[5:6]: - #for f in os.listdir(DIR): - if f.endswith('.bvh'): - s = Blender.Scene.New(f) - s.makeCurrent() - #file= DIR + f - file= f - print f - bvh_nodes= read_bvh(file, 1.0) - bvh_node_dict2armature(bvh_nodes, 1) + #for f in os.listdir(DIR)[5:6]: + #for f in os.listdir(DIR): + if f.endswith('.bvh'): + s = Blender.Scene.New(f) + s.makeCurrent() + #file= DIR + f + file= f + print f + bvh_nodes= read_bvh(file, 1.0) + bvh_node_dict2armature(bvh_nodes, 1) ''' -def load_bvh_ui(context, file, PREF_UI= False): - + +def load_bvh_ui(context, file, PREF_UI=False): + #XXX if BPyMessages.Error_NoFile(file): #XXX return - + #XXX Draw= Blender.Draw - - IMPORT_SCALE = 0.1 - IMPORT_START_FRAME = 1 - IMPORT_AS_ARMATURE = 1 - IMPORT_AS_EMPTIES = 0 - IMPORT_LOOP = 0 - - # Get USER Options - if PREF_UI: - pup_block = [\ - ('As Armature', IMPORT_AS_ARMATURE, 'Imports the BVH as an armature'),\ - ('As Empties', IMPORT_AS_EMPTIES, 'Imports the BVH as empties'),\ - ('Scale: ', IMPORT_SCALE, 0.001, 100.0, 'Scale the BVH, Use 0.01 when 1.0 is 1 metre'),\ - ('Start Frame: ', IMPORT_START_FRAME, 1, 30000, 'Frame to start BVH motion'),\ - ('Loop Animation', IMPORT_LOOP, 'Enable cyclic IPOs'),\ - ] - + + IMPORT_SCALE = 0.1 + IMPORT_START_FRAME = 1 + IMPORT_AS_ARMATURE = 1 + IMPORT_AS_EMPTIES = 0 + IMPORT_LOOP = 0 + + # Get USER Options + if PREF_UI: + pup_block = [\ + ('As Armature', IMPORT_AS_ARMATURE, 'Imports the BVH as an armature'),\ + ('As Empties', IMPORT_AS_EMPTIES, 'Imports the BVH as empties'),\ + ('Scale: ', IMPORT_SCALE, 0.001, 100.0, 'Scale the BVH, Use 0.01 when 1.0 is 1 metre'),\ + ('Start Frame: ', IMPORT_START_FRAME, 1, 30000, 'Frame to start BVH motion'),\ + ('Loop Animation', IMPORT_LOOP, 'Enable cyclic IPOs'),\ + ] + #XXX if not Draw.PupBlock('BVH Import...', pup_block): #XXX return - - # print('Attempting import BVH', file) - - if not IMPORT_AS_ARMATURE and not IMPORT_AS_EMPTIES: - raise('No import option selected') + + # print('Attempting import BVH', file) + + if not IMPORT_AS_ARMATURE and not IMPORT_AS_EMPTIES: + raise('No import option selected') #XXX Blender.Window.WaitCursor(1) - # Get the BVH data and act on it. - import time - t1= time.time() - print('\tparsing bvh...', end= "") - bvh_nodes= read_bvh(context, file, IMPORT_SCALE) - print('%.4f' % (time.time()-t1)) - t1= time.time() - print('\timporting to blender...', end="") - if IMPORT_AS_ARMATURE: bvh_node_dict2armature(context, bvh_nodes, IMPORT_START_FRAME, IMPORT_LOOP) - if IMPORT_AS_EMPTIES: bvh_node_dict2objects(context, bvh_nodes, IMPORT_START_FRAME, IMPORT_LOOP) - - print('Done in %.4f\n' % (time.time()-t1)) + # Get the BVH data and act on it. + import time + t1 = time.time() + print('\tparsing bvh...', end="") + bvh_nodes = read_bvh(context, file, IMPORT_SCALE) + print('%.4f' % (time.time() - t1)) + t1 = time.time() + print('\timporting to blender...', end="") + if IMPORT_AS_ARMATURE: + bvh_node_dict2armature(context, bvh_nodes, IMPORT_START_FRAME, IMPORT_LOOP) + if IMPORT_AS_EMPTIES: + bvh_node_dict2objects(context, bvh_nodes, IMPORT_START_FRAME, IMPORT_LOOP) + + print('Done in %.4f\n' % (time.time() - t1)) #XXX Blender.Window.WaitCursor(0) + def main(): - Blender.Window.FileSelector(load_bvh_ui, 'Import BVH', '*.bvh') + Blender.Window.FileSelector(load_bvh_ui, 'Import BVH', '*.bvh') from bpy.props import * + class BvhImporter(bpy.types.Operator): - '''Load a Wavefront OBJ File.''' - bl_idname = "import_anim.bvh" - bl_label = "Import BVH" - - path = StringProperty(name="File Path", description="File path used for importing the OBJ file", maxlen= 1024, default= "") - - def execute(self, context): - # print("Selected: " + context.active_object.name) + '''Load a Wavefront OBJ File.''' + bl_idname = "import_anim.bvh" + bl_label = "Import BVH" - read_bvh(context, self.properties.path) + path = StringProperty(name="File Path", description="File path used for importing the OBJ file", maxlen=1024, default="") - return ('FINISHED',) - - def invoke(self, context, event): - wm = context.manager - wm.add_fileselect(self) - return ('RUNNING_MODAL',) + def execute(self, context): + # print("Selected: " + context.active_object.name) + + read_bvh(context, self.properties.path) + + return ('FINISHED',) + + def invoke(self, context, event): + wm = context.manager + wm.add_fileselect(self) + return ('RUNNING_MODAL',) bpy.ops.add(BvhImporter) diff --git a/release/scripts/io/import_scene_3ds.py b/release/scripts/io/import_scene_3ds.py index 57b93d3c683..4744c5df01a 100644 --- a/release/scripts/io/import_scene_3ds.py +++ b/release/scripts/io/import_scene_3ds.py @@ -4,18 +4,20 @@ # 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # ##### END GPL LICENSE BLOCK ##### +# + __author__= ['Bob Holcomb', 'Richard L?rk?ng', 'Damien McGinnes', 'Campbell Barton', 'Mario Lapin'] __url__ = ("blenderartists.org", "www.blender.org", "www.gametutorials.com", "lib3ds.sourceforge.net/") __version__= '0.996' @@ -30,7 +32,7 @@ Loader is based on 3ds loader from www.gametutorials.com (Thanks DigiBen). 0.996 by Mario Lapin (mario.lapin@gmail.com) 13/04/200
- Implemented workaround to correct association between name, geometry and materials of imported meshes. - + Without this patch, version 0.995 of this importer would associate to each mesh object the geometry and the materials of the previously parsed mesh object. By so, the name of the first mesh object would be thrown away, and the name of the last mesh object would be @@ -63,13 +65,13 @@ Loader is based on 3ds loader from www.gametutorials.com (Thanks DigiBen). - Mesh objects split by material- many 3ds objects used more then 16 per mesh. - Removed a lot of unneeded variable creation. -0.94 by Campbell Barton
+0.94 by Campbell Barton
- Face import tested to be about overall 16x speedup over 0.93. - Material importing speedup. - Tested with more models. - Support some corrupt models. -0.93 by Campbell Barton
+0.93 by Campbell Barton
- Tested with 400 3ds files from turbosquid and samples. - Tactfully ignore faces that used the same verts twice. - Rollback to 0.83 sloppy un-reorganized code, this broke UV coord loading. @@ -104,7 +106,7 @@ Loader is based on 3ds loader from www.gametutorials.com (Thanks DigiBen). 0.81 Damien McGinnes 2005-01-09 - handle missing images better - + 0.8 Damien McGinnes 2005-01-08 - copies sticky UV coords to face ones - handles images better @@ -114,7 +116,7 @@ Loader is based on 3ds loader from www.gametutorials.com (Thanks DigiBen). # ***** BEGIN GPL LICENSE BLOCK ***** # -# Script copyright (C) Bob Holcomb +# Script copyright (C) Bob Holcomb # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -172,10 +174,10 @@ BOUNDS_3DS = [] #which shold be more useful. def createBlenderTexture(material, name, image): - texture = bpy.data.textures.new(name) - texture.setType('Image') - texture.image = image - material.setTexture(0, texture, Texture.TexCo.UV, Texture.MapTo.COL) + texture = bpy.data.textures.new(name) + texture.setType('Image') + texture.image = image + material.setTexture(0, texture, Texture.TexCo.UV, Texture.MapTo.COL) @@ -222,12 +224,12 @@ OBJECT_MESH = int('0x4100',16); # This lets us know that we are readi OBJECT_LAMP = int('0x4600',16); # This lets un know we are reading a light object OBJECT_LAMP_SPOT = int('0x4610',16); # The light is a spotloght. OBJECT_LAMP_OFF = int('0x4620',16); # The light off. -OBJECT_LAMP_ATTENUATE = int('0x4625',16); -OBJECT_LAMP_RAYSHADE = int('0x4627',16); -OBJECT_LAMP_SHADOWED = int('0x4630',16); -OBJECT_LAMP_LOCAL_SHADOW = int('0x4640',16); -OBJECT_LAMP_LOCAL_SHADOW2 = int('0x4641',16); -OBJECT_LAMP_SEE_CONE = int('0x4650',16); +OBJECT_LAMP_ATTENUATE = int('0x4625',16); +OBJECT_LAMP_RAYSHADE = int('0x4627',16); +OBJECT_LAMP_SHADOWED = int('0x4630',16); +OBJECT_LAMP_LOCAL_SHADOW = int('0x4640',16); +OBJECT_LAMP_LOCAL_SHADOW2 = int('0x4641',16); +OBJECT_LAMP_SEE_CONE = int('0x4650',16); OBJECT_LAMP_SPOT_RECTANGULAR = int('0x4651',16); OBJECT_LAMP_SPOT_OVERSHOOT = int('0x4652',16); OBJECT_LAMP_SPOT_PROJECTOR = int('0x4653',16); @@ -260,68 +262,68 @@ scn = None #the chunk class class chunk: - ID = 0 - length = 0 - bytes_read = 0 + ID = 0 + length = 0 + bytes_read = 0 - #we don't read in the bytes_read, we compute that - binary_format=' 3): - print('\tNon-Fatal Error: Version greater than 3, may not load correctly: ', version) + new_chunk.bytes_read += temp_chunk.bytes_read - #is it an object info chunk? - elif (new_chunk.ID == OBJECTINFO): - #print 'elif (new_chunk.ID == OBJECTINFO):' - # print 'found an OBJECTINFO chunk' - process_next_chunk(file, new_chunk, importedObjects, IMAGE_SEARCH) - - #keep track of how much we read in the main chunk - new_chunk.bytes_read += temp_chunk.bytes_read + # add the map to the material in the right channel + if img: + add_texture_to_material(img, new_texture, contextMaterial, mapto) - #is it an object chunk? - elif (new_chunk.ID == OBJECT): - - if CreateBlenderObject: - putContextMesh(contextMesh_vertls, contextMesh_facels, contextMeshMaterials) - contextMesh_vertls = []; contextMesh_facels = [] - - ## preparando para receber o proximo objeto - contextMeshMaterials = {} # matname:[face_idxs] - contextMeshUV = None - #contextMesh.vertexUV = 1 # Make sticky coords. - # Reset matrix - contextMatrix_rot = None - #contextMatrix_tx = None - - CreateBlenderObject = True - tempName = read_string(file) - contextObName = tempName - new_chunk.bytes_read += len(tempName)+1 - - #is it a material chunk? - elif (new_chunk.ID == MATERIAL): + dirname = os.path.dirname(FILENAME) + + #loop through all the data for this chunk (previous chunk) and see what it is + while (previous_chunk.bytes_read < previous_chunk.length): + #print '\t', previous_chunk.bytes_read, 'keep going' + #read the next chunk + #print 'reading a chunk' + read_chunk(file, new_chunk) + + #is it a Version chunk? + if (new_chunk.ID == VERSION): + #print 'if (new_chunk.ID == VERSION):' + #print 'found a VERSION chunk' + #read in the version of the file + #it's an unsigned short (H) + temp_data = file.read(struct.calcsize('I')) + version = struct.unpack(' 3): + print('\tNon-Fatal Error: Version greater than 3, may not load correctly: ', version) + + #is it an object info chunk? + elif (new_chunk.ID == OBJECTINFO): + #print 'elif (new_chunk.ID == OBJECTINFO):' + # print 'found an OBJECTINFO chunk' + process_next_chunk(file, new_chunk, importedObjects, IMAGE_SEARCH) + + #keep track of how much we read in the main chunk + new_chunk.bytes_read += temp_chunk.bytes_read + + #is it an object chunk? + elif (new_chunk.ID == OBJECT): + + if CreateBlenderObject: + putContextMesh(contextMesh_vertls, contextMesh_facels, contextMeshMaterials) + contextMesh_vertls = []; contextMesh_facels = [] + + ## preparando para receber o proximo objeto + contextMeshMaterials = {} # matname:[face_idxs] + contextMeshUV = None + #contextMesh.vertexUV = 1 # Make sticky coords. + # Reset matrix + contextMatrix_rot = None + #contextMatrix_tx = None + + CreateBlenderObject = True + tempName = read_string(file) + contextObName = tempName + new_chunk.bytes_read += len(tempName)+1 + + #is it a material chunk? + elif (new_chunk.ID == MATERIAL): # print("read material") - #print 'elif (new_chunk.ID == MATERIAL):' - contextMaterial = bpy.data.add_material('Material') + #print 'elif (new_chunk.ID == MATERIAL):' + contextMaterial = bpy.data.add_material('Material') # contextMaterial = bpy.data.materials.new('Material') - - elif (new_chunk.ID == MAT_NAME): - #print 'elif (new_chunk.ID == MAT_NAME):' - material_name = read_string(file) + + elif (new_chunk.ID == MAT_NAME): + #print 'elif (new_chunk.ID == MAT_NAME):' + material_name = read_string(file) # print("material name", material_name) - - #plus one for the null character that ended the string - new_chunk.bytes_read += len(material_name)+1 - - contextMaterial.name = material_name.rstrip() # remove trailing whitespace - MATDICT[material_name]= (contextMaterial.name, contextMaterial) - - elif (new_chunk.ID == MAT_AMBIENT): - #print 'elif (new_chunk.ID == MAT_AMBIENT):' - read_chunk(file, temp_chunk) - if (temp_chunk.ID == MAT_FLOAT_COLOR): - contextMaterial.mirror_color = read_float_color(temp_chunk) + + #plus one for the null character that ended the string + new_chunk.bytes_read += len(material_name)+1 + + contextMaterial.name = material_name.rstrip() # remove trailing whitespace + MATDICT[material_name]= (contextMaterial.name, contextMaterial) + + elif (new_chunk.ID == MAT_AMBIENT): + #print 'elif (new_chunk.ID == MAT_AMBIENT):' + read_chunk(file, temp_chunk) + if (temp_chunk.ID == MAT_FLOAT_COLOR): + contextMaterial.mirror_color = read_float_color(temp_chunk) # temp_data = file.read(struct.calcsize('3f')) # temp_chunk.bytes_read += 12 # contextMaterial.mirCol = [float(col) for col in struct.unpack('<3f', temp_data)] - elif (temp_chunk.ID == MAT_24BIT_COLOR): - contextMaterial.mirror_color = read_byte_color(temp_chunk) + elif (temp_chunk.ID == MAT_24BIT_COLOR): + contextMaterial.mirror_color = read_byte_color(temp_chunk) # temp_data = file.read(struct.calcsize('3B')) # temp_chunk.bytes_read += 3 # contextMaterial.mirCol = [float(col)/255 for col in struct.unpack('<3B', temp_data)] # data [0,1,2] == rgb - else: - skip_to_end(file, temp_chunk) - new_chunk.bytes_read += temp_chunk.bytes_read + else: + skip_to_end(file, temp_chunk) + new_chunk.bytes_read += temp_chunk.bytes_read - elif (new_chunk.ID == MAT_DIFFUSE): - #print 'elif (new_chunk.ID == MAT_DIFFUSE):' - read_chunk(file, temp_chunk) - if (temp_chunk.ID == MAT_FLOAT_COLOR): - contextMaterial.diffuse_color = read_float_color(temp_chunk) + elif (new_chunk.ID == MAT_DIFFUSE): + #print 'elif (new_chunk.ID == MAT_DIFFUSE):' + read_chunk(file, temp_chunk) + if (temp_chunk.ID == MAT_FLOAT_COLOR): + contextMaterial.diffuse_color = read_float_color(temp_chunk) # temp_data = file.read(struct.calcsize('3f')) # temp_chunk.bytes_read += 12 # contextMaterial.rgbCol = [float(col) for col in struct.unpack('<3f', temp_data)] - elif (temp_chunk.ID == MAT_24BIT_COLOR): - contextMaterial.diffuse_color = read_byte_color(temp_chunk) + elif (temp_chunk.ID == MAT_24BIT_COLOR): + contextMaterial.diffuse_color = read_byte_color(temp_chunk) # temp_data = file.read(struct.calcsize('3B')) # temp_chunk.bytes_read += 3 # contextMaterial.rgbCol = [float(col)/255 for col in struct.unpack('<3B', temp_data)] # data [0,1,2] == rgb - else: - skip_to_end(file, temp_chunk) + else: + skip_to_end(file, temp_chunk) # print("read material diffuse color", contextMaterial.diffuse_color) - new_chunk.bytes_read += temp_chunk.bytes_read + new_chunk.bytes_read += temp_chunk.bytes_read - elif (new_chunk.ID == MAT_SPECULAR): - #print 'elif (new_chunk.ID == MAT_SPECULAR):' - read_chunk(file, temp_chunk) - if (temp_chunk.ID == MAT_FLOAT_COLOR): - contextMaterial.specular_color = read_float_color(temp_chunk) + elif (new_chunk.ID == MAT_SPECULAR): + #print 'elif (new_chunk.ID == MAT_SPECULAR):' + read_chunk(file, temp_chunk) + if (temp_chunk.ID == MAT_FLOAT_COLOR): + contextMaterial.specular_color = read_float_color(temp_chunk) # temp_data = file.read(struct.calcsize('3f')) # temp_chunk.bytes_read += 12 # contextMaterial.mirCol = [float(col) for col in struct.unpack('<3f', temp_data)] - elif (temp_chunk.ID == MAT_24BIT_COLOR): - contextMaterial.specular_color = read_byte_color(temp_chunk) + elif (temp_chunk.ID == MAT_24BIT_COLOR): + contextMaterial.specular_color = read_byte_color(temp_chunk) # temp_data = file.read(struct.calcsize('3B')) # temp_chunk.bytes_read += 3 # contextMaterial.mirCol = [float(col)/255 for col in struct.unpack('<3B', temp_data)] # data [0,1,2] == rgb - else: - skip_to_end(file, temp_chunk) - new_chunk.bytes_read += temp_chunk.bytes_read - - elif (new_chunk.ID == MAT_TEXTURE_MAP): - read_texture(new_chunk, temp_chunk, "Diffuse", "COLOR") + else: + skip_to_end(file, temp_chunk) + new_chunk.bytes_read += temp_chunk.bytes_read + + elif (new_chunk.ID == MAT_TEXTURE_MAP): + read_texture(new_chunk, temp_chunk, "Diffuse", "COLOR") # #print 'elif (new_chunk.ID==MAT_TEXTURE_MAP):' # new_texture= bpy.data.textures.new('Diffuse') # new_texture.setType('Image') @@ -663,31 +665,31 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH): # while (new_chunk.bytes_read BOUNDS_3DS[i + 3]: - BOUNDS_3DS[i + 3]= v[i] # min - - # Get the max axis x/y/z - max_axis = max(BOUNDS_3DS[3]-BOUNDS_3DS[0], BOUNDS_3DS[4]-BOUNDS_3DS[1], BOUNDS_3DS[5]-BOUNDS_3DS[2]) - # print max_axis - if max_axis < 1 << 30: # Should never be false but just make sure. - - # Get a new scale factor if set as an option - SCALE = 1.0 - while (max_axis * SCALE) > IMPORT_CONSTRAIN_BOUNDS: - SCALE/=10 - - # SCALE Matrix - SCALE_MAT = Mathutils.Matrix([SCALE,0,0,0],[0,SCALE,0,0],[0,0,SCALE,0],[0,0,0,1]) + ob.makeDisplayList() # Why dosnt this update the bounds? + for v in ob.getBoundBox(): + for i in (0,1,2): + if v[i] < BOUNDS_3DS[i]: + BOUNDS_3DS[i]= v[i] # min + + if v[i] > BOUNDS_3DS[i + 3]: + BOUNDS_3DS[i + 3]= v[i] # min + + # Get the max axis x/y/z + max_axis = max(BOUNDS_3DS[3]-BOUNDS_3DS[0], BOUNDS_3DS[4]-BOUNDS_3DS[1], BOUNDS_3DS[5]-BOUNDS_3DS[2]) + # print max_axis + if max_axis < 1 << 30: # Should never be false but just make sure. + + # Get a new scale factor if set as an option + SCALE = 1.0 + while (max_axis * SCALE) > IMPORT_CONSTRAIN_BOUNDS: + SCALE/=10 + + # SCALE Matrix + SCALE_MAT = Mathutils.Matrix([SCALE,0,0,0],[0,SCALE,0,0],[0,0,SCALE,0],[0,0,0,1]) # SCALE_MAT = Blender.Mathutils.Matrix([SCALE,0,0,0],[0,SCALE,0,0],[0,0,SCALE,0],[0,0,0,1]) - - for ob in importedObjects: - ob.setMatrix(ob.matrixWorld * SCALE_MAT) - - # Done constraining to bounds. - - # Select all new objects. - print('finished importing: "%s" in %.4f sec.' % (filename, (time.clock()-time1))) + + for ob in importedObjects: + ob.setMatrix(ob.matrixWorld * SCALE_MAT) + + # Done constraining to bounds. + + # Select all new objects. + print('finished importing: "%s" in %.4f sec.' % (filename, (time.clock()-time1))) # print('finished importing: "%s" in %.4f sec.' % (filename, (Blender.sys.time()-time1))) - file.close() + file.close() # Blender.Window.WaitCursor(0) - + DEBUG = False # if __name__=='__main__' and not DEBUG: # if calcsize == None: -# Blender.Draw.PupMenu('Error%t|a full python installation not found') +# Blender.Draw.PupMenu('Error%t|a full python installation not found') # else: # Blender.Window.FileSelector(load_3ds, 'Import 3DS', '*.3ds') @@ -1104,65 +1106,65 @@ DEBUG = False ''' else: - import os - # DEBUG ONLY - TIME = Blender.sys.time() - import os - print 'Searching for files' - os.system('find /metavr/ -iname "*.3ds" > /tmp/temp3ds_list') - # os.system('find /storage/ -iname "*.3ds" > /tmp/temp3ds_list') - print '...Done' - file = open('/tmp/temp3ds_list', 'r') - lines = file.readlines() - file.close() - # sort by filesize for faster testing - lines_size = [(os.path.getsize(f[:-1]), f[:-1]) for f in lines] - lines_size.sort() - lines = [f[1] for f in lines_size] - + import os + # DEBUG ONLY + TIME = Blender.sys.time() + import os + print 'Searching for files' + os.system('find /metavr/ -iname "*.3ds" > /tmp/temp3ds_list') + # os.system('find /storage/ -iname "*.3ds" > /tmp/temp3ds_list') + print '...Done' + file = open('/tmp/temp3ds_list', 'r') + lines = file.readlines() + file.close() + # sort by filesize for faster testing + lines_size = [(os.path.getsize(f[:-1]), f[:-1]) for f in lines] + lines_size.sort() + lines = [f[1] for f in lines_size] - def between(v,a,b): - if v <= max(a,b) and v >= min(a,b): - return True - return False - - for i, _3ds in enumerate(lines): - if between(i, 650,800): - #_3ds= _3ds[:-1] - print 'Importing', _3ds, '\nNUMBER', i, 'of', len(lines) - _3ds_file= _3ds.split('/')[-1].split('\\')[-1] - newScn = Blender.Scene.New(_3ds_file) - newScn.makeCurrent() - load_3ds(_3ds, False) - print 'TOTAL TIME: %.6f' % (Blender.sys.time() - TIME) + def between(v,a,b): + if v <= max(a,b) and v >= min(a,b): + return True + return False + + for i, _3ds in enumerate(lines): + if between(i, 650,800): + #_3ds= _3ds[:-1] + print 'Importing', _3ds, '\nNUMBER', i, 'of', len(lines) + _3ds_file= _3ds.split('/')[-1].split('\\')[-1] + newScn = Blender.Scene.New(_3ds_file) + newScn.makeCurrent() + load_3ds(_3ds, False) + + print 'TOTAL TIME: %.6f' % (Blender.sys.time() - TIME) ''' from bpy.props import * class IMPORT_OT_autodesk_3ds(bpy.types.Operator): - '''Import from 3DS file format (.3ds)''' - bl_idname = "import_scene.autodesk_3ds" - bl_label = 'Import 3DS' - - # List of operator properties, the attributes will be assigned - # to the class instance from the operator settings before calling. - - path = StringProperty(name="File Path", description="File path used for importing the 3DS file", maxlen= 1024, default= ""), + '''Import from 3DS file format (.3ds)''' + bl_idname = "import_scene.autodesk_3ds" + bl_label = 'Import 3DS' + + # List of operator properties, the attributes will be assigned + # to the class instance from the operator settings before calling. + + path = StringProperty(name="File Path", description="File path used for importing the 3DS file", maxlen= 1024, default= ""), # size_constraint = FloatProperty(name="Size Constraint", description="Scale the model by 10 until it reacehs the size constraint. Zero Disables.", min=0.0, max=1000.0, soft_min=0.0, soft_max=1000.0, default=10.0), # search_images = BoolProperty(name="Image Search", description="Search subdirectories for any assosiated images (Warning, may be slow)", default=True), # apply_matrix = BoolProperty(name="Transform Fix", description="Workaround for object transformations importing incorrectly", default=False), - - def execute(self, context): - load_3ds(self.properties.path, context, 0.0, False, False) - return ('FINISHED',) - - def invoke(self, context, event): - wm = context.manager - wm.add_fileselect(self) - return ('RUNNING_MODAL',) + + def execute(self, context): + load_3ds(self.properties.path, context, 0.0, False, False) + return ('FINISHED',) + + def invoke(self, context, event): + wm = context.manager + wm.add_fileselect(self) + return ('RUNNING_MODAL',) bpy.ops.add(IMPORT_OT_autodesk_3ds) diff --git a/release/scripts/io/import_scene_obj.py b/release/scripts/io/import_scene_obj.py index febd1174a06..cbd2b831e55 100644 --- a/release/scripts/io/import_scene_obj.py +++ b/release/scripts/io/import_scene_obj.py @@ -4,18 +4,20 @@ # 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # ##### END GPL LICENSE BLOCK ##### +# + __author__= "Campbell Barton", "Jiri Hnidek", "Paolo Ciccone" __url__= ['http://wiki.blender.org/index.php/Scripts/Manual/Import/wavefront_obj', 'blender.org', 'blenderartists.org'] __version__= "2.11" @@ -65,773 +67,773 @@ import Geometry # Generic path functions def stripFile(path): - '''Return directory, where the file is''' - lastSlash= max(path.rfind('\\'), path.rfind('/')) - if lastSlash != -1: - path= path[:lastSlash] - return '%s%s' % (path, os.sep) + '''Return directory, where the file is''' + lastSlash= max(path.rfind('\\'), path.rfind('/')) + if lastSlash != -1: + path= path[:lastSlash] + return '%s%s' % (path, os.sep) # return '%s%s' % (path, sys.sep) def stripPath(path): - '''Strips the slashes from the back of a string''' - return path.split('/')[-1].split('\\')[-1] + '''Strips the slashes from the back of a string''' + return path.split('/')[-1].split('\\')[-1] def stripExt(name): # name is a string - '''Strips the prefix off the name before writing''' - index= name.rfind('.') - if index != -1: - return name[ : index ] - else: - return name + '''Strips the prefix off the name before writing''' + index= name.rfind('.') + if index != -1: + return name[ : index ] + else: + return name # end path funcs def unpack_list(list_of_tuples): - l = [] - for t in list_of_tuples: - l.extend(t) - return l + l = [] + for t in list_of_tuples: + l.extend(t) + return l # same as above except that it adds 0 for triangle faces def unpack_face_list(list_of_tuples): - l = [] - for t in list_of_tuples: - face = [i for i in t] + l = [] + for t in list_of_tuples: + face = [i for i in t] - if len(face) != 3 and len(face) != 4: - raise RuntimeError("{0} vertices in face.".format(len(face))) - - # rotate indices if the 4th is 0 - if len(face) == 4 and face[3] == 0: - face = [face[3], face[0], face[1], face[2]] + if len(face) != 3 and len(face) != 4: + raise RuntimeError("{0} vertices in face.".format(len(face))) - if len(face) == 3: - face.append(0) - - l.extend(face) + # rotate indices if the 4th is 0 + if len(face) == 4 and face[3] == 0: + face = [face[3], face[0], face[1], face[2]] - return l + if len(face) == 3: + face.append(0) + + l.extend(face) + + return l def BPyMesh_ngon(from_data, indices, PREF_FIX_LOOPS= True): - ''' - Takes a polyline of indices (fgon) - and returns a list of face indicie lists. - Designed to be used for importers that need indices for an fgon to create from existing verts. - - from_data: either a mesh, or a list/tuple of vectors. - indices: a list of indicies to use this list is the ordered closed polyline to fill, and can be a subset of the data given. - PREF_FIX_LOOPS: If this is enabled polylines that use loops to make multiple polylines are delt with correctly. - ''' - - if not set: # Need sets for this, otherwise do a normal fill. - PREF_FIX_LOOPS= False - - Vector= Mathutils.Vector - if not indices: - return [] - - # return [] - def rvec(co): return round(co.x, 6), round(co.y, 6), round(co.z, 6) - def mlen(co): return abs(co[0])+abs(co[1])+abs(co[2]) # manhatten length of a vector, faster then length - - def vert_treplet(v, i): - return v, rvec(v), i, mlen(v) - - def ed_key_mlen(v1, v2): - if v1[3] > v2[3]: - return v2[1], v1[1] - else: - return v1[1], v2[1] - - - if not PREF_FIX_LOOPS: - ''' - Normal single concave loop filling - ''' - if type(from_data) in (tuple, list): - verts= [Vector(from_data[i]) for ii, i in enumerate(indices)] - else: - verts= [from_data.verts[i].co for ii, i in enumerate(indices)] - - for i in range(len(verts)-1, 0, -1): # same as reversed(xrange(1, len(verts))): - if verts[i][1]==verts[i-1][0]: - verts.pop(i-1) - - fill= Geometry.PolyFill([verts]) - - else: - ''' - Seperate this loop into multiple loops be finding edges that are used twice - This is used by lightwave LWO files a lot - ''' - - if type(from_data) in (tuple, list): - verts= [vert_treplet(Vector(from_data[i]), ii) for ii, i in enumerate(indices)] - else: - verts= [vert_treplet(from_data.verts[i].co, ii) for ii, i in enumerate(indices)] - - edges= [(i, i-1) for i in range(len(verts))] - if edges: - edges[0]= (0,len(verts)-1) - - if not verts: - return [] - - - edges_used= set() - edges_doubles= set() - # We need to check if any edges are used twice location based. - for ed in edges: - edkey= ed_key_mlen(verts[ed[0]], verts[ed[1]]) - if edkey in edges_used: - edges_doubles.add(edkey) - else: - edges_used.add(edkey) - - # Store a list of unconnected loop segments split by double edges. - # will join later - loop_segments= [] - - v_prev= verts[0] - context_loop= [v_prev] - loop_segments= [context_loop] - - for v in verts: - if v!=v_prev: - # Are we crossing an edge we removed? - if ed_key_mlen(v, v_prev) in edges_doubles: - context_loop= [v] - loop_segments.append(context_loop) - else: - if context_loop and context_loop[-1][1]==v[1]: - #raise "as" - pass - else: - context_loop.append(v) - - v_prev= v - # Now join loop segments - - def join_seg(s1,s2): - if s2[-1][1]==s1[0][1]: # - s1,s2= s2,s1 - elif s1[-1][1]==s2[0][1]: - pass - else: - return False - - # If were stuill here s1 and s2 are 2 segments in the same polyline - s1.pop() # remove the last vert from s1 - s1.extend(s2) # add segment 2 to segment 1 - - if s1[0][1]==s1[-1][1]: # remove endpoints double - s1.pop() - - s2[:]= [] # Empty this segment s2 so we dont use it again. - return True - - joining_segments= True - while joining_segments: - joining_segments= False - segcount= len(loop_segments) - - for j in range(segcount-1, -1, -1): #reversed(range(segcount)): - seg_j= loop_segments[j] - if seg_j: - for k in range(j-1, -1, -1): # reversed(range(j)): - if not seg_j: - break - seg_k= loop_segments[k] - - if seg_k and join_seg(seg_j, seg_k): - joining_segments= True - - loop_list= loop_segments - - for verts in loop_list: - while verts and verts[0][1]==verts[-1][1]: - verts.pop() - - loop_list= [verts for verts in loop_list if len(verts)>2] - # DONE DEALING WITH LOOP FIXING - - - # vert mapping - vert_map= [None]*len(indices) - ii=0 - for verts in loop_list: - if len(verts)>2: - for i, vert in enumerate(verts): - vert_map[i+ii]= vert[2] - ii+=len(verts) - - fill= Geometry.PolyFill([ [v[0] for v in loop] for loop in loop_list ]) - #draw_loops(loop_list) - #raise 'done loop' - # map to original indicies - fill= [[vert_map[i] for i in reversed(f)] for f in fill] - - - if not fill: - print('Warning Cannot scanfill, fallback on a triangle fan.') - fill= [ [0, i-1, i] for i in range(2, len(indices)) ] - else: - # Use real scanfill. - # See if its flipped the wrong way. - flip= None - for fi in fill: - if flip != None: - break - for i, vi in enumerate(fi): - if vi==0 and fi[i-1]==1: - flip= False - break - elif vi==1 and fi[i-1]==0: - flip= True - break - - if not flip: - for i, fi in enumerate(fill): - fill[i]= tuple([ii for ii in reversed(fi)]) - - return fill + ''' + Takes a polyline of indices (fgon) + and returns a list of face indicie lists. + Designed to be used for importers that need indices for an fgon to create from existing verts. + + from_data: either a mesh, or a list/tuple of vectors. + indices: a list of indicies to use this list is the ordered closed polyline to fill, and can be a subset of the data given. + PREF_FIX_LOOPS: If this is enabled polylines that use loops to make multiple polylines are delt with correctly. + ''' + + if not set: # Need sets for this, otherwise do a normal fill. + PREF_FIX_LOOPS= False + + Vector= Mathutils.Vector + if not indices: + return [] + + # return [] + def rvec(co): return round(co.x, 6), round(co.y, 6), round(co.z, 6) + def mlen(co): return abs(co[0])+abs(co[1])+abs(co[2]) # manhatten length of a vector, faster then length + + def vert_treplet(v, i): + return v, rvec(v), i, mlen(v) + + def ed_key_mlen(v1, v2): + if v1[3] > v2[3]: + return v2[1], v1[1] + else: + return v1[1], v2[1] + + + if not PREF_FIX_LOOPS: + ''' + Normal single concave loop filling + ''' + if type(from_data) in (tuple, list): + verts= [Vector(from_data[i]) for ii, i in enumerate(indices)] + else: + verts= [from_data.verts[i].co for ii, i in enumerate(indices)] + + for i in range(len(verts)-1, 0, -1): # same as reversed(xrange(1, len(verts))): + if verts[i][1]==verts[i-1][0]: + verts.pop(i-1) + + fill= Geometry.PolyFill([verts]) + + else: + ''' + Seperate this loop into multiple loops be finding edges that are used twice + This is used by lightwave LWO files a lot + ''' + + if type(from_data) in (tuple, list): + verts= [vert_treplet(Vector(from_data[i]), ii) for ii, i in enumerate(indices)] + else: + verts= [vert_treplet(from_data.verts[i].co, ii) for ii, i in enumerate(indices)] + + edges= [(i, i-1) for i in range(len(verts))] + if edges: + edges[0]= (0,len(verts)-1) + + if not verts: + return [] + + + edges_used= set() + edges_doubles= set() + # We need to check if any edges are used twice location based. + for ed in edges: + edkey= ed_key_mlen(verts[ed[0]], verts[ed[1]]) + if edkey in edges_used: + edges_doubles.add(edkey) + else: + edges_used.add(edkey) + + # Store a list of unconnected loop segments split by double edges. + # will join later + loop_segments= [] + + v_prev= verts[0] + context_loop= [v_prev] + loop_segments= [context_loop] + + for v in verts: + if v!=v_prev: + # Are we crossing an edge we removed? + if ed_key_mlen(v, v_prev) in edges_doubles: + context_loop= [v] + loop_segments.append(context_loop) + else: + if context_loop and context_loop[-1][1]==v[1]: + #raise "as" + pass + else: + context_loop.append(v) + + v_prev= v + # Now join loop segments + + def join_seg(s1,s2): + if s2[-1][1]==s1[0][1]: # + s1,s2= s2,s1 + elif s1[-1][1]==s2[0][1]: + pass + else: + return False + + # If were stuill here s1 and s2 are 2 segments in the same polyline + s1.pop() # remove the last vert from s1 + s1.extend(s2) # add segment 2 to segment 1 + + if s1[0][1]==s1[-1][1]: # remove endpoints double + s1.pop() + + s2[:]= [] # Empty this segment s2 so we dont use it again. + return True + + joining_segments= True + while joining_segments: + joining_segments= False + segcount= len(loop_segments) + + for j in range(segcount-1, -1, -1): #reversed(range(segcount)): + seg_j= loop_segments[j] + if seg_j: + for k in range(j-1, -1, -1): # reversed(range(j)): + if not seg_j: + break + seg_k= loop_segments[k] + + if seg_k and join_seg(seg_j, seg_k): + joining_segments= True + + loop_list= loop_segments + + for verts in loop_list: + while verts and verts[0][1]==verts[-1][1]: + verts.pop() + + loop_list= [verts for verts in loop_list if len(verts)>2] + # DONE DEALING WITH LOOP FIXING + + + # vert mapping + vert_map= [None]*len(indices) + ii=0 + for verts in loop_list: + if len(verts)>2: + for i, vert in enumerate(verts): + vert_map[i+ii]= vert[2] + ii+=len(verts) + + fill= Geometry.PolyFill([ [v[0] for v in loop] for loop in loop_list ]) + #draw_loops(loop_list) + #raise 'done loop' + # map to original indicies + fill= [[vert_map[i] for i in reversed(f)] for f in fill] + + + if not fill: + print('Warning Cannot scanfill, fallback on a triangle fan.') + fill= [ [0, i-1, i] for i in range(2, len(indices)) ] + else: + # Use real scanfill. + # See if its flipped the wrong way. + flip= None + for fi in fill: + if flip != None: + break + for i, vi in enumerate(fi): + if vi==0 and fi[i-1]==1: + flip= False + break + elif vi==1 and fi[i-1]==0: + flip= True + break + + if not flip: + for i, fi in enumerate(fill): + fill[i]= tuple([ii for ii in reversed(fi)]) + + return fill def line_value(line_split): - ''' - Returns 1 string represneting the value for this line - None will be returned if theres only 1 word - ''' - length= len(line_split) - if length == 1: - return None - - elif length == 2: - return line_split[1] - - elif length > 2: - return ' '.join( line_split[1:] ) + ''' + Returns 1 string represneting the value for this line + None will be returned if theres only 1 word + ''' + length= len(line_split) + if length == 1: + return None + + elif length == 2: + return line_split[1] + + elif length > 2: + return ' '.join( line_split[1:] ) # limited replacement for BPyImage.comprehensiveImageLoad def load_image(imagepath, dirname): - if os.path.exists(imagepath): - return bpy.data.add_image(imagepath) + if os.path.exists(imagepath): + return bpy.data.add_image(imagepath) - variants = [os.path.join(dirname, imagepath), os.path.join(dirname, os.path.basename(imagepath))] + variants = [os.path.join(dirname, imagepath), os.path.join(dirname, os.path.basename(imagepath))] - for path in variants: - if os.path.exists(path): - return bpy.data.add_image(path) - else: - print(path, "doesn't exist") + for path in variants: + if os.path.exists(path): + return bpy.data.add_image(path) + else: + print(path, "doesn't exist") - # TODO comprehensiveImageLoad also searched in bpy.config.textureDir - return None + # TODO comprehensiveImageLoad also searched in bpy.config.textureDir + return None def obj_image_load(imagepath, DIR, IMAGE_SEARCH): - if '_' in imagepath: - image= load_image(imagepath.replace('_', ' '), DIR) - if image: return image + if '_' in imagepath: + image= load_image(imagepath.replace('_', ' '), DIR) + if image: return image - return load_image(imagepath, DIR) + return load_image(imagepath, DIR) # def obj_image_load(imagepath, DIR, IMAGE_SEARCH): # ''' # Mainly uses comprehensiveImageLoad # but tries to replace '_' with ' ' for Max's exporter replaces spaces with underscores. # ''' - + # if '_' in imagepath: # image= BPyImage.comprehensiveImageLoad(imagepath, DIR, PLACE_HOLDER= False, RECURSIVE= IMAGE_SEARCH) # if image: return image # # Did the exporter rename the image? # image= BPyImage.comprehensiveImageLoad(imagepath.replace('_', ' '), DIR, PLACE_HOLDER= False, RECURSIVE= IMAGE_SEARCH) # if image: return image - + # # Return an image, placeholder if it dosnt exist # image= BPyImage.comprehensiveImageLoad(imagepath, DIR, PLACE_HOLDER= True, RECURSIVE= IMAGE_SEARCH) # return image - + def create_materials(filepath, material_libs, unique_materials, unique_material_images, IMAGE_SEARCH): - ''' - Create all the used materials in this obj, - assign colors and images to the materials from all referenced material libs - ''' - DIR= stripFile(filepath) - - #==================================================================================# - # This function sets textures defined in .mtl file # - #==================================================================================# - def load_material_image(blender_material, context_material_name, imagepath, type): + ''' + Create all the used materials in this obj, + assign colors and images to the materials from all referenced material libs + ''' + DIR= stripFile(filepath) - texture= bpy.data.add_texture(type) - texture.type= 'IMAGE' + #==================================================================================# + # This function sets textures defined in .mtl file # + #==================================================================================# + def load_material_image(blender_material, context_material_name, imagepath, type): + + texture= bpy.data.add_texture(type) + texture.type= 'IMAGE' # texture= bpy.data.textures.new(type) # texture.setType('Image') - - # Absolute path - c:\.. etc would work here - image= obj_image_load(imagepath, DIR, IMAGE_SEARCH) - has_data = image.has_data if image else False - if image: - texture.image = image - - # Adds textures for materials (rendering) - if type == 'Kd': - if has_data and image.depth == 32: - # Image has alpha + # Absolute path - c:\.. etc would work here + image= obj_image_load(imagepath, DIR, IMAGE_SEARCH) + has_data = image.has_data if image else False - # XXX bitmask won't work? - blender_material.add_texture(texture, "UV", ("COLOR", "ALPHA")) - texture.mipmap = True - texture.interpolation = True - texture.use_alpha = True - blender_material.z_transparency = True - blender_material.alpha = 0.0 + if image: + texture.image = image + + # Adds textures for materials (rendering) + if type == 'Kd': + if has_data and image.depth == 32: + # Image has alpha + + # XXX bitmask won't work? + blender_material.add_texture(texture, "UV", ("COLOR", "ALPHA")) + texture.mipmap = True + texture.interpolation = True + texture.use_alpha = True + blender_material.z_transparency = True + blender_material.alpha = 0.0 # blender_material.setTexture(0, texture, Texture.TexCo.UV, Texture.MapTo.COL | Texture.MapTo.ALPHA) # texture.setImageFlags('MipMap', 'InterPol', 'UseAlpha') # blender_material.mode |= Material.Modes.ZTRANSP # blender_material.alpha = 0.0 - else: - blender_material.add_texture(texture, "UV", "COLOR") + else: + blender_material.add_texture(texture, "UV", "COLOR") # blender_material.setTexture(0, texture, Texture.TexCo.UV, Texture.MapTo.COL) - - # adds textures to faces (Textured/Alt-Z mode) - # Only apply the diffuse texture to the face if the image has not been set with the inline usemat func. - unique_material_images[context_material_name]= image, has_data # set the texface image - - elif type == 'Ka': - blender_material.add_texture(texture, "UV", "AMBIENT") + + # adds textures to faces (Textured/Alt-Z mode) + # Only apply the diffuse texture to the face if the image has not been set with the inline usemat func. + unique_material_images[context_material_name]= image, has_data # set the texface image + + elif type == 'Ka': + blender_material.add_texture(texture, "UV", "AMBIENT") # blender_material.setTexture(1, texture, Texture.TexCo.UV, Texture.MapTo.CMIR) # TODO- Add AMB to BPY API - - elif type == 'Ks': - blender_material.add_texture(texture, "UV", "SPECULARITY") + + elif type == 'Ks': + blender_material.add_texture(texture, "UV", "SPECULARITY") # blender_material.setTexture(2, texture, Texture.TexCo.UV, Texture.MapTo.SPEC) - - elif type == 'Bump': - blender_material.add_texture(texture, "UV", "NORMAL") -# blender_material.setTexture(3, texture, Texture.TexCo.UV, Texture.MapTo.NOR) - elif type == 'D': - blender_material.add_texture(texture, "UV", "ALPHA") - blender_material.z_transparency = True - blender_material.alpha = 0.0 -# blender_material.setTexture(4, texture, Texture.TexCo.UV, Texture.MapTo.ALPHA) + + elif type == 'Bump': + blender_material.add_texture(texture, "UV", "NORMAL") +# blender_material.setTexture(3, texture, Texture.TexCo.UV, Texture.MapTo.NOR) + elif type == 'D': + blender_material.add_texture(texture, "UV", "ALPHA") + blender_material.z_transparency = True + blender_material.alpha = 0.0 +# blender_material.setTexture(4, texture, Texture.TexCo.UV, Texture.MapTo.ALPHA) # blender_material.mode |= Material.Modes.ZTRANSP # blender_material.alpha = 0.0 - # Todo, unset deffuse material alpha if it has an alpha channel - - elif type == 'refl': - blender_material.add_texture(texture, "UV", "REFLECTION") + # Todo, unset deffuse material alpha if it has an alpha channel + + elif type == 'refl': + blender_material.add_texture(texture, "UV", "REFLECTION") # blender_material.setTexture(5, texture, Texture.TexCo.UV, Texture.MapTo.REF) - - - # Add an MTL with the same name as the obj if no MTLs are spesified. - temp_mtl= stripExt(stripPath(filepath))+ '.mtl' - if os.path.exists(DIR + temp_mtl) and temp_mtl not in material_libs: + + # Add an MTL with the same name as the obj if no MTLs are spesified. + temp_mtl= stripExt(stripPath(filepath))+ '.mtl' + + if os.path.exists(DIR + temp_mtl) and temp_mtl not in material_libs: # if sys.exists(DIR + temp_mtl) and temp_mtl not in material_libs: - material_libs.append( temp_mtl ) - del temp_mtl - - #Create new materials - for name in unique_materials: # .keys() - if name != None: - unique_materials[name]= bpy.data.add_material(name) + material_libs.append( temp_mtl ) + del temp_mtl + + #Create new materials + for name in unique_materials: # .keys() + if name != None: + unique_materials[name]= bpy.data.add_material(name) # unique_materials[name]= bpy.data.materials.new(name) - unique_material_images[name]= None, False # assign None to all material images to start with, add to later. - - unique_materials[None]= None - unique_material_images[None]= None, False - - for libname in material_libs: - mtlpath= DIR + libname - if not os.path.exists(mtlpath): + unique_material_images[name]= None, False # assign None to all material images to start with, add to later. + + unique_materials[None]= None + unique_material_images[None]= None, False + + for libname in material_libs: + mtlpath= DIR + libname + if not os.path.exists(mtlpath): # if not sys.exists(mtlpath): - #print '\tError Missing MTL: "%s"' % mtlpath - pass - else: - #print '\t\tloading mtl: "%s"' % mtlpath - context_material= None - mtl= open(mtlpath, 'rU') - for line in mtl: #.xreadlines(): - if line.startswith('newmtl'): - context_material_name= line_value(line.split()) - if context_material_name in unique_materials: - context_material = unique_materials[ context_material_name ] - else: - context_material = None - - elif context_material: - # we need to make a material to assign properties to it. - line_split= line.split() - line_lower= line.lower().lstrip() - if line_lower.startswith('ka'): - context_material.mirror_color = (float(line_split[1]), float(line_split[2]), float(line_split[3])) + #print '\tError Missing MTL: "%s"' % mtlpath + pass + else: + #print '\t\tloading mtl: "%s"' % mtlpath + context_material= None + mtl= open(mtlpath, 'rU') + for line in mtl: #.xreadlines(): + if line.startswith('newmtl'): + context_material_name= line_value(line.split()) + if context_material_name in unique_materials: + context_material = unique_materials[ context_material_name ] + else: + context_material = None + + elif context_material: + # we need to make a material to assign properties to it. + line_split= line.split() + line_lower= line.lower().lstrip() + if line_lower.startswith('ka'): + context_material.mirror_color = (float(line_split[1]), float(line_split[2]), float(line_split[3])) # context_material.setMirCol((float(line_split[1]), float(line_split[2]), float(line_split[3]))) - elif line_lower.startswith('kd'): - context_material.diffuse_color = (float(line_split[1]), float(line_split[2]), float(line_split[3])) + elif line_lower.startswith('kd'): + context_material.diffuse_color = (float(line_split[1]), float(line_split[2]), float(line_split[3])) # context_material.setRGBCol((float(line_split[1]), float(line_split[2]), float(line_split[3]))) - elif line_lower.startswith('ks'): - context_material.specular_color = (float(line_split[1]), float(line_split[2]), float(line_split[3])) + elif line_lower.startswith('ks'): + context_material.specular_color = (float(line_split[1]), float(line_split[2]), float(line_split[3])) # context_material.setSpecCol((float(line_split[1]), float(line_split[2]), float(line_split[3]))) - elif line_lower.startswith('ns'): - context_material.specular_hardness = int((float(line_split[1])*0.51)) + elif line_lower.startswith('ns'): + context_material.specular_hardness = int((float(line_split[1])*0.51)) # context_material.setHardness( int((float(line_split[1])*0.51)) ) - elif line_lower.startswith('ni'): # Refraction index - context_material.ior = max(1, min(float(line_split[1]), 3)) + elif line_lower.startswith('ni'): # Refraction index + context_material.ior = max(1, min(float(line_split[1]), 3)) # context_material.setIOR( max(1, min(float(line_split[1]), 3))) # Between 1 and 3 - elif line_lower.startswith('d') or line_lower.startswith('tr'): - context_material.alpha = float(line_split[1]) + elif line_lower.startswith('d') or line_lower.startswith('tr'): + context_material.alpha = float(line_split[1]) # context_material.setAlpha(float(line_split[1])) - elif line_lower.startswith('map_ka'): - img_filepath= line_value(line.split()) - if img_filepath: - load_material_image(context_material, context_material_name, img_filepath, 'Ka') - elif line_lower.startswith('map_ks'): - img_filepath= line_value(line.split()) - if img_filepath: - load_material_image(context_material, context_material_name, img_filepath, 'Ks') - elif line_lower.startswith('map_kd'): - img_filepath= line_value(line.split()) - if img_filepath: - load_material_image(context_material, context_material_name, img_filepath, 'Kd') - elif line_lower.startswith('map_bump'): - img_filepath= line_value(line.split()) - if img_filepath: - load_material_image(context_material, context_material_name, img_filepath, 'Bump') - elif line_lower.startswith('map_d') or line_lower.startswith('map_tr'): # Alpha map - Dissolve - img_filepath= line_value(line.split()) - if img_filepath: - load_material_image(context_material, context_material_name, img_filepath, 'D') - - elif line_lower.startswith('refl'): # Reflectionmap - img_filepath= line_value(line.split()) - if img_filepath: - load_material_image(context_material, context_material_name, img_filepath, 'refl') - mtl.close() + elif line_lower.startswith('map_ka'): + img_filepath= line_value(line.split()) + if img_filepath: + load_material_image(context_material, context_material_name, img_filepath, 'Ka') + elif line_lower.startswith('map_ks'): + img_filepath= line_value(line.split()) + if img_filepath: + load_material_image(context_material, context_material_name, img_filepath, 'Ks') + elif line_lower.startswith('map_kd'): + img_filepath= line_value(line.split()) + if img_filepath: + load_material_image(context_material, context_material_name, img_filepath, 'Kd') + elif line_lower.startswith('map_bump'): + img_filepath= line_value(line.split()) + if img_filepath: + load_material_image(context_material, context_material_name, img_filepath, 'Bump') + elif line_lower.startswith('map_d') or line_lower.startswith('map_tr'): # Alpha map - Dissolve + img_filepath= line_value(line.split()) + if img_filepath: + load_material_image(context_material, context_material_name, img_filepath, 'D') + + elif line_lower.startswith('refl'): # Reflectionmap + img_filepath= line_value(line.split()) + if img_filepath: + load_material_image(context_material, context_material_name, img_filepath, 'refl') + mtl.close() + - def split_mesh(verts_loc, faces, unique_materials, filepath, SPLIT_OB_OR_GROUP, SPLIT_MATERIALS): - ''' - Takes vert_loc and faces, and seperates into multiple sets of - (verts_loc, faces, unique_materials, dataname) - This is done so objects do not overload the 16 material limit. - ''' - - filename = stripExt(stripPath(filepath)) - - if not SPLIT_OB_OR_GROUP and not SPLIT_MATERIALS: - # use the filename for the object name since we arnt chopping up the mesh. - return [(verts_loc, faces, unique_materials, filename)] - - - def key_to_name(key): - # if the key is a tuple, join it to make a string - if type(key) == tuple: - return '%s_%s' % key - elif not key: - return filename # assume its a string. make sure this is true if the splitting code is changed - else: - return key - - # Return a key that makes the faces unique. - if SPLIT_OB_OR_GROUP and not SPLIT_MATERIALS: - def face_key(face): - return face[4] # object - - elif not SPLIT_OB_OR_GROUP and SPLIT_MATERIALS: - def face_key(face): - return face[2] # material - - else: # Both - def face_key(face): - return face[4], face[2] # object,material - - - face_split_dict= {} - - oldkey= -1 # initialize to a value that will never match the key - - for face in faces: - - key= face_key(face) - - if oldkey != key: - # Check the key has changed. - try: - verts_split, faces_split, unique_materials_split, vert_remap= face_split_dict[key] - except KeyError: - faces_split= [] - verts_split= [] - unique_materials_split= {} - vert_remap= [-1]*len(verts_loc) - - face_split_dict[key]= (verts_split, faces_split, unique_materials_split, vert_remap) - - oldkey= key - - face_vert_loc_indicies= face[0] - - # Remap verts to new vert list and add where needed - for enum, i in enumerate(face_vert_loc_indicies): - if vert_remap[i] == -1: - new_index= len(verts_split) - vert_remap[i]= new_index # set the new remapped index so we only add once and can reference next time. - face_vert_loc_indicies[enum] = new_index # remap to the local index - verts_split.append( verts_loc[i] ) # add the vert to the local verts - - else: - face_vert_loc_indicies[enum] = vert_remap[i] # remap to the local index - - matname= face[2] - if matname and matname not in unique_materials_split: - unique_materials_split[matname] = unique_materials[matname] - - faces_split.append(face) - - - # remove one of the itemas and reorder - return [(value[0], value[1], value[2], key_to_name(key)) for key, value in list(face_split_dict.items())] + ''' + Takes vert_loc and faces, and seperates into multiple sets of + (verts_loc, faces, unique_materials, dataname) + This is done so objects do not overload the 16 material limit. + ''' + + filename = stripExt(stripPath(filepath)) + + if not SPLIT_OB_OR_GROUP and not SPLIT_MATERIALS: + # use the filename for the object name since we arnt chopping up the mesh. + return [(verts_loc, faces, unique_materials, filename)] + + + def key_to_name(key): + # if the key is a tuple, join it to make a string + if type(key) == tuple: + return '%s_%s' % key + elif not key: + return filename # assume its a string. make sure this is true if the splitting code is changed + else: + return key + + # Return a key that makes the faces unique. + if SPLIT_OB_OR_GROUP and not SPLIT_MATERIALS: + def face_key(face): + return face[4] # object + + elif not SPLIT_OB_OR_GROUP and SPLIT_MATERIALS: + def face_key(face): + return face[2] # material + + else: # Both + def face_key(face): + return face[4], face[2] # object,material + + + face_split_dict= {} + + oldkey= -1 # initialize to a value that will never match the key + + for face in faces: + + key= face_key(face) + + if oldkey != key: + # Check the key has changed. + try: + verts_split, faces_split, unique_materials_split, vert_remap= face_split_dict[key] + except KeyError: + faces_split= [] + verts_split= [] + unique_materials_split= {} + vert_remap= [-1]*len(verts_loc) + + face_split_dict[key]= (verts_split, faces_split, unique_materials_split, vert_remap) + + oldkey= key + + face_vert_loc_indicies= face[0] + + # Remap verts to new vert list and add where needed + for enum, i in enumerate(face_vert_loc_indicies): + if vert_remap[i] == -1: + new_index= len(verts_split) + vert_remap[i]= new_index # set the new remapped index so we only add once and can reference next time. + face_vert_loc_indicies[enum] = new_index # remap to the local index + verts_split.append( verts_loc[i] ) # add the vert to the local verts + + else: + face_vert_loc_indicies[enum] = vert_remap[i] # remap to the local index + + matname= face[2] + if matname and matname not in unique_materials_split: + unique_materials_split[matname] = unique_materials[matname] + + faces_split.append(face) + + + # remove one of the itemas and reorder + return [(value[0], value[1], value[2], key_to_name(key)) for key, value in list(face_split_dict.items())] def create_mesh(scn, new_objects, has_ngons, CREATE_FGONS, CREATE_EDGES, verts_loc, verts_tex, faces, unique_materials, unique_material_images, unique_smooth_groups, vertex_groups, dataname): - ''' - Takes all the data gathered and generates a mesh, adding the new object to new_objects - deals with fgons, sharp edges and assigning materials - ''' - if not has_ngons: - CREATE_FGONS= False - - if unique_smooth_groups: - sharp_edges= {} - smooth_group_users= dict([ (context_smooth_group, {}) for context_smooth_group in list(unique_smooth_groups.keys()) ]) - context_smooth_group_old= -1 - - # Split fgons into tri's - fgon_edges= {} # Used for storing fgon keys - if CREATE_EDGES: - edges= [] - - context_object= None - - # reverse loop through face indicies - for f_idx in range(len(faces)-1, -1, -1): - - face_vert_loc_indicies,\ - face_vert_tex_indicies,\ - context_material,\ - context_smooth_group,\ - context_object= faces[f_idx] - - len_face_vert_loc_indicies = len(face_vert_loc_indicies) - - if len_face_vert_loc_indicies==1: - faces.pop(f_idx)# cant add single vert faces - - elif not face_vert_tex_indicies or len_face_vert_loc_indicies == 2: # faces that have no texture coords are lines - if CREATE_EDGES: - # generators are better in python 2.4+ but can't be used in 2.3 - # edges.extend( (face_vert_loc_indicies[i], face_vert_loc_indicies[i+1]) for i in xrange(len_face_vert_loc_indicies-1) ) - edges.extend( [(face_vert_loc_indicies[i], face_vert_loc_indicies[i+1]) for i in range(len_face_vert_loc_indicies-1)] ) + ''' + Takes all the data gathered and generates a mesh, adding the new object to new_objects + deals with fgons, sharp edges and assigning materials + ''' + if not has_ngons: + CREATE_FGONS= False - faces.pop(f_idx) - else: - - # Smooth Group - if unique_smooth_groups and context_smooth_group: - # Is a part of of a smooth group and is a face - if context_smooth_group_old is not context_smooth_group: - edge_dict= smooth_group_users[context_smooth_group] - context_smooth_group_old= context_smooth_group - - for i in range(len_face_vert_loc_indicies): - i1= face_vert_loc_indicies[i] - i2= face_vert_loc_indicies[i-1] - if i1>i2: i1,i2= i2,i1 - - try: - edge_dict[i1,i2]+= 1 - except KeyError: - edge_dict[i1,i2]= 1 - - # FGons into triangles - if has_ngons and len_face_vert_loc_indicies > 4: - - ngon_face_indices= BPyMesh_ngon(verts_loc, face_vert_loc_indicies) - faces.extend(\ - [(\ - [face_vert_loc_indicies[ngon[0]], face_vert_loc_indicies[ngon[1]], face_vert_loc_indicies[ngon[2]] ],\ - [face_vert_tex_indicies[ngon[0]], face_vert_tex_indicies[ngon[1]], face_vert_tex_indicies[ngon[2]] ],\ - context_material,\ - context_smooth_group,\ - context_object)\ - for ngon in ngon_face_indices]\ - ) - - # edges to make fgons - if CREATE_FGONS: - edge_users= {} - for ngon in ngon_face_indices: - for i in (0,1,2): - i1= face_vert_loc_indicies[ngon[i ]] - i2= face_vert_loc_indicies[ngon[i-1]] - if i1>i2: i1,i2= i2,i1 - - try: - edge_users[i1,i2]+=1 - except KeyError: - edge_users[i1,i2]= 1 - - for key, users in edge_users.items(): - if users>1: - fgon_edges[key]= None - - # remove all after 3, means we dont have to pop this one. - faces.pop(f_idx) - - - # Build sharp edges - if unique_smooth_groups: - for edge_dict in list(smooth_group_users.values()): - for key, users in list(edge_dict.items()): - if users==1: # This edge is on the boundry of a group - sharp_edges[key]= None - - - # map the material names to an index - material_mapping= dict([(name, i) for i, name in enumerate(unique_materials)]) # enumerate over unique_materials keys() - - materials= [None] * len(unique_materials) - - for name, index in list(material_mapping.items()): - materials[index]= unique_materials[name] + if unique_smooth_groups: + sharp_edges= {} + smooth_group_users= dict([ (context_smooth_group, {}) for context_smooth_group in list(unique_smooth_groups.keys()) ]) + context_smooth_group_old= -1 - me= bpy.data.add_mesh(dataname) + # Split fgons into tri's + fgon_edges= {} # Used for storing fgon keys + if CREATE_EDGES: + edges= [] + + context_object= None + + # reverse loop through face indicies + for f_idx in range(len(faces)-1, -1, -1): + + face_vert_loc_indicies,\ + face_vert_tex_indicies,\ + context_material,\ + context_smooth_group,\ + context_object= faces[f_idx] + + len_face_vert_loc_indicies = len(face_vert_loc_indicies) + + if len_face_vert_loc_indicies==1: + faces.pop(f_idx)# cant add single vert faces + + elif not face_vert_tex_indicies or len_face_vert_loc_indicies == 2: # faces that have no texture coords are lines + if CREATE_EDGES: + # generators are better in python 2.4+ but can't be used in 2.3 + # edges.extend( (face_vert_loc_indicies[i], face_vert_loc_indicies[i+1]) for i in xrange(len_face_vert_loc_indicies-1) ) + edges.extend( [(face_vert_loc_indicies[i], face_vert_loc_indicies[i+1]) for i in range(len_face_vert_loc_indicies-1)] ) + + faces.pop(f_idx) + else: + + # Smooth Group + if unique_smooth_groups and context_smooth_group: + # Is a part of of a smooth group and is a face + if context_smooth_group_old is not context_smooth_group: + edge_dict= smooth_group_users[context_smooth_group] + context_smooth_group_old= context_smooth_group + + for i in range(len_face_vert_loc_indicies): + i1= face_vert_loc_indicies[i] + i2= face_vert_loc_indicies[i-1] + if i1>i2: i1,i2= i2,i1 + + try: + edge_dict[i1,i2]+= 1 + except KeyError: + edge_dict[i1,i2]= 1 + + # FGons into triangles + if has_ngons and len_face_vert_loc_indicies > 4: + + ngon_face_indices= BPyMesh_ngon(verts_loc, face_vert_loc_indicies) + faces.extend(\ + [(\ + [face_vert_loc_indicies[ngon[0]], face_vert_loc_indicies[ngon[1]], face_vert_loc_indicies[ngon[2]] ],\ + [face_vert_tex_indicies[ngon[0]], face_vert_tex_indicies[ngon[1]], face_vert_tex_indicies[ngon[2]] ],\ + context_material,\ + context_smooth_group,\ + context_object)\ + for ngon in ngon_face_indices]\ + ) + + # edges to make fgons + if CREATE_FGONS: + edge_users= {} + for ngon in ngon_face_indices: + for i in (0,1,2): + i1= face_vert_loc_indicies[ngon[i ]] + i2= face_vert_loc_indicies[ngon[i-1]] + if i1>i2: i1,i2= i2,i1 + + try: + edge_users[i1,i2]+=1 + except KeyError: + edge_users[i1,i2]= 1 + + for key, users in edge_users.items(): + if users>1: + fgon_edges[key]= None + + # remove all after 3, means we dont have to pop this one. + faces.pop(f_idx) + + + # Build sharp edges + if unique_smooth_groups: + for edge_dict in list(smooth_group_users.values()): + for key, users in list(edge_dict.items()): + if users==1: # This edge is on the boundry of a group + sharp_edges[key]= None + + + # map the material names to an index + material_mapping= dict([(name, i) for i, name in enumerate(unique_materials)]) # enumerate over unique_materials keys() + + materials= [None] * len(unique_materials) + + for name, index in list(material_mapping.items()): + materials[index]= unique_materials[name] + + me= bpy.data.add_mesh(dataname) # me= bpy.data.meshes.new(dataname) - # make sure the list isnt too big - for material in materials[0:16]: - me.add_material(material) + # make sure the list isnt too big + for material in materials[0:16]: + me.add_material(material) # me.materials= materials[0:16] # make sure the list isnt too big. - #me.verts.extend([(0,0,0)]) # dummy vert + #me.verts.extend([(0,0,0)]) # dummy vert - me.add_geometry(len(verts_loc), 0, len(faces)) + me.add_geometry(len(verts_loc), 0, len(faces)) - # verts_loc is a list of (x, y, z) tuples - me.verts.foreach_set("co", unpack_list(verts_loc)) + # verts_loc is a list of (x, y, z) tuples + me.verts.foreach_set("co", unpack_list(verts_loc)) # me.verts.extend(verts_loc) - # faces is a list of (vert_indices, texco_indices, ...) tuples - # XXX faces should contain either 3 or 4 verts - # XXX no check for valid face indices - me.faces.foreach_set("verts_raw", unpack_face_list([f[0] for f in faces])) + # faces is a list of (vert_indices, texco_indices, ...) tuples + # XXX faces should contain either 3 or 4 verts + # XXX no check for valid face indices + me.faces.foreach_set("verts_raw", unpack_face_list([f[0] for f in faces])) # face_mapping= me.faces.extend([f[0] for f in faces], indexList=True) - - if verts_tex and me.faces: - me.add_uv_texture() + + if verts_tex and me.faces: + me.add_uv_texture() # me.faceUV= 1 - # TEXMODE= Mesh.FaceModes['TEX'] - - context_material_old= -1 # avoid a dict lookup - mat= 0 # rare case it may be un-initialized. - me_faces= me.faces + # TEXMODE= Mesh.FaceModes['TEX'] + + context_material_old= -1 # avoid a dict lookup + mat= 0 # rare case it may be un-initialized. + me_faces= me.faces # ALPHA= Mesh.FaceTranspModes.ALPHA - - for i, face in enumerate(faces): - if len(face[0]) < 2: - pass #raise "bad face" - elif len(face[0])==2: - if CREATE_EDGES: - edges.append(face[0]) - else: + + for i, face in enumerate(faces): + if len(face[0]) < 2: + pass #raise "bad face" + elif len(face[0])==2: + if CREATE_EDGES: + edges.append(face[0]) + else: # face_index_map= face_mapping[i] - # since we use foreach_set to add faces, all of them are added - if 1: + # since we use foreach_set to add faces, all of them are added + if 1: # if face_index_map!=None: # None means the face wasnt added - blender_face = me.faces[i] + blender_face = me.faces[i] # blender_face= me_faces[face_index_map] - - face_vert_loc_indicies,\ - face_vert_tex_indicies,\ - context_material,\ - context_smooth_group,\ - context_object= face - - - - if context_smooth_group: - blender_face.smooth= True - - if context_material: - if context_material_old is not context_material: - mat= material_mapping[context_material] - if mat>15: - mat= 15 - context_material_old= context_material - blender_face.material_index= mat + face_vert_loc_indicies,\ + face_vert_tex_indicies,\ + context_material,\ + context_smooth_group,\ + context_object= face + + + + if context_smooth_group: + blender_face.smooth= True + + if context_material: + if context_material_old is not context_material: + mat= material_mapping[context_material] + if mat>15: + mat= 15 + context_material_old= context_material + + blender_face.material_index= mat # blender_face.mat= mat - - - if verts_tex: - blender_tface= me.uv_textures[0].data[i] - if context_material: - image, has_data= unique_material_images[context_material] - if image: # Can be none if the material dosnt have an image. - blender_tface.image= image + if verts_tex: + + blender_tface= me.uv_textures[0].data[i] + + if context_material: + image, has_data= unique_material_images[context_material] + if image: # Can be none if the material dosnt have an image. + blender_tface.image= image # blender_face.image= image - if has_data: + if has_data: # if has_data and image.depth == 32: - blender_tface.transp = 'ALPHA' + blender_tface.transp = 'ALPHA' # blender_face.transp |= ALPHA - - # BUG - Evil eekadoodle problem where faces that have vert index 0 location at 3 or 4 are shuffled. - if len(face_vert_loc_indicies)==4: - if face_vert_loc_indicies[2]==0 or face_vert_loc_indicies[3]==0: - face_vert_tex_indicies= face_vert_tex_indicies[2], face_vert_tex_indicies[3], face_vert_tex_indicies[0], face_vert_tex_indicies[1] - else: # length of 3 - if face_vert_loc_indicies[2]==0: - face_vert_tex_indicies= face_vert_tex_indicies[1], face_vert_tex_indicies[2], face_vert_tex_indicies[0] - # END EEEKADOODLE FIX - - # assign material, uv's and image - blender_tface.uv1= verts_tex[face_vert_tex_indicies[0]] - blender_tface.uv2= verts_tex[face_vert_tex_indicies[1]] - blender_tface.uv3= verts_tex[face_vert_tex_indicies[2]] - if len(face_vert_loc_indicies)==4: - blender_tface.uv4= verts_tex[face_vert_tex_indicies[3]] + # BUG - Evil eekadoodle problem where faces that have vert index 0 location at 3 or 4 are shuffled. + if len(face_vert_loc_indicies)==4: + if face_vert_loc_indicies[2]==0 or face_vert_loc_indicies[3]==0: + face_vert_tex_indicies= face_vert_tex_indicies[2], face_vert_tex_indicies[3], face_vert_tex_indicies[0], face_vert_tex_indicies[1] + else: # length of 3 + if face_vert_loc_indicies[2]==0: + face_vert_tex_indicies= face_vert_tex_indicies[1], face_vert_tex_indicies[2], face_vert_tex_indicies[0] + # END EEEKADOODLE FIX + + # assign material, uv's and image + blender_tface.uv1= verts_tex[face_vert_tex_indicies[0]] + blender_tface.uv2= verts_tex[face_vert_tex_indicies[1]] + blender_tface.uv3= verts_tex[face_vert_tex_indicies[2]] + + if len(face_vert_loc_indicies)==4: + blender_tface.uv4= verts_tex[face_vert_tex_indicies[3]] # for ii, uv in enumerate(blender_face.uv): # uv.x, uv.y= verts_tex[face_vert_tex_indicies[ii]] - del me_faces + del me_faces # del ALPHA - if CREATE_EDGES: + if CREATE_EDGES: - me.add_geometry(0, len(edges), 0) + me.add_geometry(0, len(edges), 0) - # edges should be a list of (a, b) tuples - me.edges.foreach_set("verts", unpack_list(edges)) + # edges should be a list of (a, b) tuples + me.edges.foreach_set("verts", unpack_list(edges)) # me_edges.extend( edges ) - + # del me_edges - - # Add edge faces. + + # Add edge faces. # me_edges= me.edges - def edges_match(e1, e2): - return (e1[0] == e2[0] and e1[1] == e2[1]) or (e1[0] == e2[1] and e1[1] == e2[0]) + def edges_match(e1, e2): + return (e1[0] == e2[0] and e1[1] == e2[1]) or (e1[0] == e2[1] and e1[1] == e2[0]) - # XXX slow + # XXX slow # if CREATE_FGONS and fgon_edges: # for fgon_edge in fgon_edges.keys(): # for ed in me.edges: @@ -845,7 +847,7 @@ def create_mesh(scn, new_objects, has_ngons, CREATE_FGONS, CREATE_EDGES, verts_l # me_edges[ed].flag |= FGON # del FGON - # XXX slow + # XXX slow # if unique_smooth_groups and sharp_edges: # for sharp_edge in sharp_edges.keys(): # for ed in me.edges: @@ -859,448 +861,448 @@ def create_mesh(scn, new_objects, has_ngons, CREATE_FGONS, CREATE_EDGES, verts_l # me_edges[ed].flag |= SHARP # del SHARP - me.update() + me.update() # me.calcNormals() - - ob= bpy.data.add_object("MESH", "Mesh") - ob.data= me - scn.objects.link(ob) -# ob= scn.objects.new(me) - new_objects.append(ob) - # Create the vertex groups. No need to have the flag passed here since we test for the - # content of the vertex_groups. If the user selects to NOT have vertex groups saved then - # the following test will never run - for group_name, group_indicies in vertex_groups.items(): - group= ob.add_vertex_group(group_name) + ob= bpy.data.add_object("MESH", "Mesh") + ob.data= me + scn.objects.link(ob) +# ob= scn.objects.new(me) + new_objects.append(ob) + + # Create the vertex groups. No need to have the flag passed here since we test for the + # content of the vertex_groups. If the user selects to NOT have vertex groups saved then + # the following test will never run + for group_name, group_indicies in vertex_groups.items(): + group= ob.add_vertex_group(group_name) # me.addVertGroup(group_name) - for vertex_index in group_indicies: - ob.add_vertex_to_group(vertex_index, group, 1.0, 'REPLACE') + for vertex_index in group_indicies: + ob.add_vertex_to_group(vertex_index, group, 1.0, 'REPLACE') # me.assignVertsToGroup(group_name, group_indicies, 1.00, Mesh.AssignModes.REPLACE) def create_nurbs(scn, context_nurbs, vert_loc, new_objects): - ''' - Add nurbs object to blender, only support one type at the moment - ''' - deg = context_nurbs.get('deg', (3,)) - curv_range = context_nurbs.get('curv_range', None) - curv_idx = context_nurbs.get('curv_idx', []) - parm_u = context_nurbs.get('parm_u', []) - parm_v = context_nurbs.get('parm_v', []) - name = context_nurbs.get('name', 'ObjNurb') - cstype = context_nurbs.get('cstype', None) - - if cstype == None: - print('\tWarning, cstype not found') - return - if cstype != 'bspline': - print('\tWarning, cstype is not supported (only bspline)') - return - if not curv_idx: - print('\tWarning, curv argument empty or not set') - return - if len(deg) > 1 or parm_v: - print('\tWarning, surfaces not supported') - return - - cu = bpy.data.curves.new(name, 'Curve') - cu.flag |= 1 # 3D curve - - nu = None - for pt in curv_idx: - - pt = vert_loc[pt] - pt = (pt[0], pt[1], pt[2], 1.0) - - if nu == None: - nu = cu.appendNurb(pt) - else: - nu.append(pt) - - nu.orderU = deg[0]+1 - - # get for endpoint flag from the weighting - if curv_range and len(parm_u) > deg[0]+1: - do_endpoints = True - for i in range(deg[0]+1): - - if abs(parm_u[i]-curv_range[0]) > 0.0001: - do_endpoints = False - break - - if abs(parm_u[-(i+1)]-curv_range[1]) > 0.0001: - do_endpoints = False - break - - else: - do_endpoints = False - - if do_endpoints: - nu.flagU |= 2 - - - # close - ''' - do_closed = False - if len(parm_u) > deg[0]+1: - for i in xrange(deg[0]+1): - #print curv_idx[i], curv_idx[-(i+1)] - - if curv_idx[i]==curv_idx[-(i+1)]: - do_closed = True - break - - if do_closed: - nu.flagU |= 1 - ''' - - ob = scn.objects.new(cu) - new_objects.append(ob) + ''' + Add nurbs object to blender, only support one type at the moment + ''' + deg = context_nurbs.get('deg', (3,)) + curv_range = context_nurbs.get('curv_range', None) + curv_idx = context_nurbs.get('curv_idx', []) + parm_u = context_nurbs.get('parm_u', []) + parm_v = context_nurbs.get('parm_v', []) + name = context_nurbs.get('name', 'ObjNurb') + cstype = context_nurbs.get('cstype', None) + + if cstype == None: + print('\tWarning, cstype not found') + return + if cstype != 'bspline': + print('\tWarning, cstype is not supported (only bspline)') + return + if not curv_idx: + print('\tWarning, curv argument empty or not set') + return + if len(deg) > 1 or parm_v: + print('\tWarning, surfaces not supported') + return + + cu = bpy.data.curves.new(name, 'Curve') + cu.flag |= 1 # 3D curve + + nu = None + for pt in curv_idx: + + pt = vert_loc[pt] + pt = (pt[0], pt[1], pt[2], 1.0) + + if nu == None: + nu = cu.appendNurb(pt) + else: + nu.append(pt) + + nu.orderU = deg[0]+1 + + # get for endpoint flag from the weighting + if curv_range and len(parm_u) > deg[0]+1: + do_endpoints = True + for i in range(deg[0]+1): + + if abs(parm_u[i]-curv_range[0]) > 0.0001: + do_endpoints = False + break + + if abs(parm_u[-(i+1)]-curv_range[1]) > 0.0001: + do_endpoints = False + break + + else: + do_endpoints = False + + if do_endpoints: + nu.flagU |= 2 + + + # close + ''' + do_closed = False + if len(parm_u) > deg[0]+1: + for i in xrange(deg[0]+1): + #print curv_idx[i], curv_idx[-(i+1)] + + if curv_idx[i]==curv_idx[-(i+1)]: + do_closed = True + break + + if do_closed: + nu.flagU |= 1 + ''' + + ob = scn.objects.new(cu) + new_objects.append(ob) def strip_slash(line_split): - if line_split[-1][-1]== '\\': - if len(line_split[-1])==1: - line_split.pop() # remove the \ item - else: - line_split[-1]= line_split[-1][:-1] # remove the \ from the end last number - return True - return False + if line_split[-1][-1]== '\\': + if len(line_split[-1])==1: + line_split.pop() # remove the \ item + else: + line_split[-1]= line_split[-1][:-1] # remove the \ from the end last number + return True + return False def get_float_func(filepath): - ''' - find the float function for this obj file - - weather to replace commas or not - ''' - file= open(filepath, 'rU') - for line in file: #.xreadlines(): - line = line.lstrip() - if line.startswith('v'): # vn vt v - if ',' in line: - return lambda f: float(f.replace(',', '.')) - elif '.' in line: - return float - - # incase all vert values were ints - return float + ''' + find the float function for this obj file + - weather to replace commas or not + ''' + file= open(filepath, 'rU') + for line in file: #.xreadlines(): + line = line.lstrip() + if line.startswith('v'): # vn vt v + if ',' in line: + return lambda f: float(f.replace(',', '.')) + elif '.' in line: + return float + + # incase all vert values were ints + return float def load_obj(filepath, - context, - CLAMP_SIZE= 0.0, - CREATE_FGONS= True, - CREATE_SMOOTH_GROUPS= True, - CREATE_EDGES= True, - SPLIT_OBJECTS= True, - SPLIT_GROUPS= True, - SPLIT_MATERIALS= True, - ROTATE_X90= True, - IMAGE_SEARCH=True, - POLYGROUPS=False): - ''' - Called by the user interface or another script. - load_obj(path) - should give acceptable results. - This function passes the file and sends the data off - to be split into objects and then converted into mesh objects - ''' - print('\nimporting obj "%s"' % filepath) - - if SPLIT_OBJECTS or SPLIT_GROUPS or SPLIT_MATERIALS: - POLYGROUPS = False + context, + CLAMP_SIZE= 0.0, + CREATE_FGONS= True, + CREATE_SMOOTH_GROUPS= True, + CREATE_EDGES= True, + SPLIT_OBJECTS= True, + SPLIT_GROUPS= True, + SPLIT_MATERIALS= True, + ROTATE_X90= True, + IMAGE_SEARCH=True, + POLYGROUPS=False): + ''' + Called by the user interface or another script. + load_obj(path) - should give acceptable results. + This function passes the file and sends the data off + to be split into objects and then converted into mesh objects + ''' + print('\nimporting obj "%s"' % filepath) - time_main= time.time() + if SPLIT_OBJECTS or SPLIT_GROUPS or SPLIT_MATERIALS: + POLYGROUPS = False + + time_main= time.time() # time_main= sys.time() - - verts_loc= [] - verts_tex= [] - faces= [] # tuples of the faces - material_libs= [] # filanems to material libs this uses - vertex_groups = {} # when POLYGROUPS is true - - # Get the string to float conversion func for this file- is 'float' for almost all files. - float_func= get_float_func(filepath) - - # Context variables - context_material= None - context_smooth_group= None - context_object= None - context_vgroup = None - - # Nurbs - context_nurbs = {} - nurbs = [] - context_parm = '' # used by nurbs too but could be used elsewhere - has_ngons= False - # has_smoothgroups= False - is explicit with len(unique_smooth_groups) being > 0 - - # Until we can use sets - unique_materials= {} - unique_material_images= {} - unique_smooth_groups= {} - # unique_obects= {} - no use for this variable since the objects are stored in the face. - - # when there are faces that end with \ - # it means they are multiline- - # since we use xreadline we cant skip to the next line - # so we need to know weather - context_multi_line= '' - - print('\tparsing obj file "%s"...' % filepath) - time_sub= time.time() + verts_loc= [] + verts_tex= [] + faces= [] # tuples of the faces + material_libs= [] # filanems to material libs this uses + vertex_groups = {} # when POLYGROUPS is true + + # Get the string to float conversion func for this file- is 'float' for almost all files. + float_func= get_float_func(filepath) + + # Context variables + context_material= None + context_smooth_group= None + context_object= None + context_vgroup = None + + # Nurbs + context_nurbs = {} + nurbs = [] + context_parm = '' # used by nurbs too but could be used elsewhere + + has_ngons= False + # has_smoothgroups= False - is explicit with len(unique_smooth_groups) being > 0 + + # Until we can use sets + unique_materials= {} + unique_material_images= {} + unique_smooth_groups= {} + # unique_obects= {} - no use for this variable since the objects are stored in the face. + + # when there are faces that end with \ + # it means they are multiline- + # since we use xreadline we cant skip to the next line + # so we need to know weather + context_multi_line= '' + + print('\tparsing obj file "%s"...' % filepath) + time_sub= time.time() # time_sub= sys.time() - file= open(filepath, 'rU') - for line in file: #.xreadlines(): - line = line.lstrip() # rare cases there is white space at the start of the line - - if line.startswith('v '): - line_split= line.split() - # rotate X90: (x,-z,y) - verts_loc.append( (float_func(line_split[1]), -float_func(line_split[3]), float_func(line_split[2])) ) - - elif line.startswith('vn '): - pass - - elif line.startswith('vt '): - line_split= line.split() - verts_tex.append( (float_func(line_split[1]), float_func(line_split[2])) ) - - # Handel faces lines (as faces) and the second+ lines of fa multiline face here - # use 'f' not 'f ' because some objs (very rare have 'fo ' for faces) - elif line.startswith('f') or context_multi_line == 'f': - - if context_multi_line: - # use face_vert_loc_indicies and face_vert_tex_indicies previously defined and used the obj_face - line_split= line.split() - - else: - line_split= line[2:].split() - face_vert_loc_indicies= [] - face_vert_tex_indicies= [] - - # Instance a face - faces.append((\ - face_vert_loc_indicies,\ - face_vert_tex_indicies,\ - context_material,\ - context_smooth_group,\ - context_object\ - )) - - if strip_slash(line_split): - context_multi_line = 'f' - else: - context_multi_line = '' - - for v in line_split: - obj_vert= v.split('/') - - vert_loc_index= int(obj_vert[0])-1 - # Add the vertex to the current group - # *warning*, this wont work for files that have groups defined around verts - if POLYGROUPS and context_vgroup: - vertex_groups[context_vgroup].append(vert_loc_index) - - # Make relative negative vert indicies absolute - if vert_loc_index < 0: - vert_loc_index= len(verts_loc) + vert_loc_index + 1 - - face_vert_loc_indicies.append(vert_loc_index) - - if len(obj_vert)>1 and obj_vert[1]: - # formatting for faces with normals and textures us - # loc_index/tex_index/nor_index - - vert_tex_index= int(obj_vert[1])-1 - # Make relative negative vert indicies absolute - if vert_tex_index < 0: - vert_tex_index= len(verts_tex) + vert_tex_index + 1 - - face_vert_tex_indicies.append(vert_tex_index) - else: - # dummy - face_vert_tex_indicies.append(0) - - if len(face_vert_loc_indicies) > 4: - has_ngons= True - - elif CREATE_EDGES and (line.startswith('l ') or context_multi_line == 'l'): - # very similar to the face load function above with some parts removed - - if context_multi_line: - # use face_vert_loc_indicies and face_vert_tex_indicies previously defined and used the obj_face - line_split= line.split() - - else: - line_split= line[2:].split() - face_vert_loc_indicies= [] - face_vert_tex_indicies= [] - - # Instance a face - faces.append((\ - face_vert_loc_indicies,\ - face_vert_tex_indicies,\ - context_material,\ - context_smooth_group,\ - context_object\ - )) - - if strip_slash(line_split): - context_multi_line = 'l' - else: - context_multi_line = '' - - isline= line.startswith('l') - - for v in line_split: - vert_loc_index= int(v)-1 - - # Make relative negative vert indicies absolute - if vert_loc_index < 0: - vert_loc_index= len(verts_loc) + vert_loc_index + 1 - - face_vert_loc_indicies.append(vert_loc_index) - - elif line.startswith('s'): - if CREATE_SMOOTH_GROUPS: - context_smooth_group= line_value(line.split()) - if context_smooth_group=='off': - context_smooth_group= None - elif context_smooth_group: # is not None - unique_smooth_groups[context_smooth_group]= None - - elif line.startswith('o'): - if SPLIT_OBJECTS: - context_object= line_value(line.split()) - # unique_obects[context_object]= None - - elif line.startswith('g'): - if SPLIT_GROUPS: - context_object= line_value(line.split()) - # print 'context_object', context_object - # unique_obects[context_object]= None - elif POLYGROUPS: - context_vgroup = line_value(line.split()) - if context_vgroup and context_vgroup != '(null)': - vertex_groups.setdefault(context_vgroup, []) - else: - context_vgroup = None # dont assign a vgroup - - elif line.startswith('usemtl'): - context_material= line_value(line.split()) - unique_materials[context_material]= None - elif line.startswith('mtllib'): # usemap or usemat - material_libs.extend( line.split()[1:] ) # can have multiple mtllib filenames per line - - - # Nurbs support - elif line.startswith('cstype '): - context_nurbs['cstype']= line_value(line.split()) # 'rat bspline' / 'bspline' - elif line.startswith('curv ') or context_multi_line == 'curv': - line_split= line.split() - - curv_idx = context_nurbs['curv_idx'] = context_nurbs.get('curv_idx', []) # incase were multiline - - if not context_multi_line: - context_nurbs['curv_range'] = float_func(line_split[1]), float_func(line_split[2]) - line_split[0:3] = [] # remove first 3 items - - if strip_slash(line_split): - context_multi_line = 'curv' - else: - context_multi_line = '' - - - for i in line_split: - vert_loc_index = int(i)-1 - - if vert_loc_index < 0: - vert_loc_index= len(verts_loc) + vert_loc_index + 1 - - curv_idx.append(vert_loc_index) - - elif line.startswith('parm') or context_multi_line == 'parm': - line_split= line.split() - - if context_multi_line: - context_multi_line = '' - else: - context_parm = line_split[1] - line_split[0:2] = [] # remove first 2 - - if strip_slash(line_split): - context_multi_line = 'parm' - else: - context_multi_line = '' - - if context_parm.lower() == 'u': - context_nurbs.setdefault('parm_u', []).extend( [float_func(f) for f in line_split] ) - elif context_parm.lower() == 'v': # surfaces not suported yet - context_nurbs.setdefault('parm_v', []).extend( [float_func(f) for f in line_split] ) - # else: # may want to support other parm's ? - - elif line.startswith('deg '): - context_nurbs['deg']= [int(i) for i in line.split()[1:]] - elif line.startswith('end'): - # Add the nurbs curve - if context_object: - context_nurbs['name'] = context_object - nurbs.append(context_nurbs) - context_nurbs = {} - context_parm = '' - - ''' # How to use usemap? depricated? - elif line.startswith('usema'): # usemap or usemat - context_image= line_value(line.split()) - ''' - - file.close() - time_new= time.time() -# time_new= sys.time() - print('%.4f sec' % (time_new-time_sub)) - time_sub= time_new - - - print('\tloading materials and images...') - create_materials(filepath, material_libs, unique_materials, unique_material_images, IMAGE_SEARCH) + file= open(filepath, 'rU') + for line in file: #.xreadlines(): + line = line.lstrip() # rare cases there is white space at the start of the line - time_new= time.time() + if line.startswith('v '): + line_split= line.split() + # rotate X90: (x,-z,y) + verts_loc.append( (float_func(line_split[1]), -float_func(line_split[3]), float_func(line_split[2])) ) + + elif line.startswith('vn '): + pass + + elif line.startswith('vt '): + line_split= line.split() + verts_tex.append( (float_func(line_split[1]), float_func(line_split[2])) ) + + # Handel faces lines (as faces) and the second+ lines of fa multiline face here + # use 'f' not 'f ' because some objs (very rare have 'fo ' for faces) + elif line.startswith('f') or context_multi_line == 'f': + + if context_multi_line: + # use face_vert_loc_indicies and face_vert_tex_indicies previously defined and used the obj_face + line_split= line.split() + + else: + line_split= line[2:].split() + face_vert_loc_indicies= [] + face_vert_tex_indicies= [] + + # Instance a face + faces.append((\ + face_vert_loc_indicies,\ + face_vert_tex_indicies,\ + context_material,\ + context_smooth_group,\ + context_object\ + )) + + if strip_slash(line_split): + context_multi_line = 'f' + else: + context_multi_line = '' + + for v in line_split: + obj_vert= v.split('/') + + vert_loc_index= int(obj_vert[0])-1 + # Add the vertex to the current group + # *warning*, this wont work for files that have groups defined around verts + if POLYGROUPS and context_vgroup: + vertex_groups[context_vgroup].append(vert_loc_index) + + # Make relative negative vert indicies absolute + if vert_loc_index < 0: + vert_loc_index= len(verts_loc) + vert_loc_index + 1 + + face_vert_loc_indicies.append(vert_loc_index) + + if len(obj_vert)>1 and obj_vert[1]: + # formatting for faces with normals and textures us + # loc_index/tex_index/nor_index + + vert_tex_index= int(obj_vert[1])-1 + # Make relative negative vert indicies absolute + if vert_tex_index < 0: + vert_tex_index= len(verts_tex) + vert_tex_index + 1 + + face_vert_tex_indicies.append(vert_tex_index) + else: + # dummy + face_vert_tex_indicies.append(0) + + if len(face_vert_loc_indicies) > 4: + has_ngons= True + + elif CREATE_EDGES and (line.startswith('l ') or context_multi_line == 'l'): + # very similar to the face load function above with some parts removed + + if context_multi_line: + # use face_vert_loc_indicies and face_vert_tex_indicies previously defined and used the obj_face + line_split= line.split() + + else: + line_split= line[2:].split() + face_vert_loc_indicies= [] + face_vert_tex_indicies= [] + + # Instance a face + faces.append((\ + face_vert_loc_indicies,\ + face_vert_tex_indicies,\ + context_material,\ + context_smooth_group,\ + context_object\ + )) + + if strip_slash(line_split): + context_multi_line = 'l' + else: + context_multi_line = '' + + isline= line.startswith('l') + + for v in line_split: + vert_loc_index= int(v)-1 + + # Make relative negative vert indicies absolute + if vert_loc_index < 0: + vert_loc_index= len(verts_loc) + vert_loc_index + 1 + + face_vert_loc_indicies.append(vert_loc_index) + + elif line.startswith('s'): + if CREATE_SMOOTH_GROUPS: + context_smooth_group= line_value(line.split()) + if context_smooth_group=='off': + context_smooth_group= None + elif context_smooth_group: # is not None + unique_smooth_groups[context_smooth_group]= None + + elif line.startswith('o'): + if SPLIT_OBJECTS: + context_object= line_value(line.split()) + # unique_obects[context_object]= None + + elif line.startswith('g'): + if SPLIT_GROUPS: + context_object= line_value(line.split()) + # print 'context_object', context_object + # unique_obects[context_object]= None + elif POLYGROUPS: + context_vgroup = line_value(line.split()) + if context_vgroup and context_vgroup != '(null)': + vertex_groups.setdefault(context_vgroup, []) + else: + context_vgroup = None # dont assign a vgroup + + elif line.startswith('usemtl'): + context_material= line_value(line.split()) + unique_materials[context_material]= None + elif line.startswith('mtllib'): # usemap or usemat + material_libs.extend( line.split()[1:] ) # can have multiple mtllib filenames per line + + + # Nurbs support + elif line.startswith('cstype '): + context_nurbs['cstype']= line_value(line.split()) # 'rat bspline' / 'bspline' + elif line.startswith('curv ') or context_multi_line == 'curv': + line_split= line.split() + + curv_idx = context_nurbs['curv_idx'] = context_nurbs.get('curv_idx', []) # incase were multiline + + if not context_multi_line: + context_nurbs['curv_range'] = float_func(line_split[1]), float_func(line_split[2]) + line_split[0:3] = [] # remove first 3 items + + if strip_slash(line_split): + context_multi_line = 'curv' + else: + context_multi_line = '' + + + for i in line_split: + vert_loc_index = int(i)-1 + + if vert_loc_index < 0: + vert_loc_index= len(verts_loc) + vert_loc_index + 1 + + curv_idx.append(vert_loc_index) + + elif line.startswith('parm') or context_multi_line == 'parm': + line_split= line.split() + + if context_multi_line: + context_multi_line = '' + else: + context_parm = line_split[1] + line_split[0:2] = [] # remove first 2 + + if strip_slash(line_split): + context_multi_line = 'parm' + else: + context_multi_line = '' + + if context_parm.lower() == 'u': + context_nurbs.setdefault('parm_u', []).extend( [float_func(f) for f in line_split] ) + elif context_parm.lower() == 'v': # surfaces not suported yet + context_nurbs.setdefault('parm_v', []).extend( [float_func(f) for f in line_split] ) + # else: # may want to support other parm's ? + + elif line.startswith('deg '): + context_nurbs['deg']= [int(i) for i in line.split()[1:]] + elif line.startswith('end'): + # Add the nurbs curve + if context_object: + context_nurbs['name'] = context_object + nurbs.append(context_nurbs) + context_nurbs = {} + context_parm = '' + + ''' # How to use usemap? depricated? + elif line.startswith('usema'): # usemap or usemat + context_image= line_value(line.split()) + ''' + + file.close() + time_new= time.time() # time_new= sys.time() - print('%.4f sec' % (time_new-time_sub)) - time_sub= time_new - - if not ROTATE_X90: - verts_loc[:] = [(v[0], v[2], -v[1]) for v in verts_loc] - - # deselect all + print('%.4f sec' % (time_new-time_sub)) + time_sub= time_new + + + print('\tloading materials and images...') + create_materials(filepath, material_libs, unique_materials, unique_material_images, IMAGE_SEARCH) + + time_new= time.time() +# time_new= sys.time() + print('%.4f sec' % (time_new-time_sub)) + time_sub= time_new + + if not ROTATE_X90: + verts_loc[:] = [(v[0], v[2], -v[1]) for v in verts_loc] + + # deselect all # if context.selected_objects: # bpy.ops.OBJECT_OT_select_all() - scene = context.scene + scene = context.scene # scn = bpy.data.scenes.active # scn.objects.selected = [] - new_objects= [] # put new objects here - - print('\tbuilding geometry...\n\tverts:%i faces:%i materials: %i smoothgroups:%i ...' % ( len(verts_loc), len(faces), len(unique_materials), len(unique_smooth_groups) )) - # Split the mesh by objects/materials, may - if SPLIT_OBJECTS or SPLIT_GROUPS: SPLIT_OB_OR_GROUP = True - else: SPLIT_OB_OR_GROUP = False - - for verts_loc_split, faces_split, unique_materials_split, dataname in split_mesh(verts_loc, faces, unique_materials, filepath, SPLIT_OB_OR_GROUP, SPLIT_MATERIALS): - # Create meshes from the data, warning 'vertex_groups' wont support splitting - create_mesh(scene, new_objects, has_ngons, CREATE_FGONS, CREATE_EDGES, verts_loc_split, verts_tex, faces_split, unique_materials_split, unique_material_images, unique_smooth_groups, vertex_groups, dataname) - - # nurbs support + new_objects= [] # put new objects here + + print('\tbuilding geometry...\n\tverts:%i faces:%i materials: %i smoothgroups:%i ...' % ( len(verts_loc), len(faces), len(unique_materials), len(unique_smooth_groups) )) + # Split the mesh by objects/materials, may + if SPLIT_OBJECTS or SPLIT_GROUPS: SPLIT_OB_OR_GROUP = True + else: SPLIT_OB_OR_GROUP = False + + for verts_loc_split, faces_split, unique_materials_split, dataname in split_mesh(verts_loc, faces, unique_materials, filepath, SPLIT_OB_OR_GROUP, SPLIT_MATERIALS): + # Create meshes from the data, warning 'vertex_groups' wont support splitting + create_mesh(scene, new_objects, has_ngons, CREATE_FGONS, CREATE_EDGES, verts_loc_split, verts_tex, faces_split, unique_materials_split, unique_material_images, unique_smooth_groups, vertex_groups, dataname) + + # nurbs support # for context_nurbs in nurbs: # create_nurbs(scn, context_nurbs, verts_loc, new_objects) - - - axis_min= [ 1000000000]*3 - axis_max= [-1000000000]*3 - + + + axis_min= [ 1000000000]*3 + axis_max= [-1000000000]*3 + # if CLAMP_SIZE: # # Get all object bounds # for ob in new_objects: @@ -1308,233 +1310,233 @@ def load_obj(filepath, # for axis, value in enumerate(v): # if axis_min[axis] > value: axis_min[axis]= value # if axis_max[axis] < value: axis_max[axis]= value - + # # Scale objects # max_axis= max(axis_max[0]-axis_min[0], axis_max[1]-axis_min[1], axis_max[2]-axis_min[2]) # scale= 1.0 - + # while CLAMP_SIZE < max_axis * scale: # scale= scale/10.0 - + # for ob in new_objects: # ob.setSize(scale, scale, scale) - - # Better rotate the vert locations - #if not ROTATE_X90: - # for ob in new_objects: - # ob.RotX = -1.570796326794896558 - time_new= time.time() + # Better rotate the vert locations + #if not ROTATE_X90: + # for ob in new_objects: + # ob.RotX = -1.570796326794896558 + + time_new= time.time() # time_new= sys.time() - - print('%.4f sec' % (time_new-time_sub)) - print('finished importing: "%s" in %.4f sec.' % (filepath, (time_new-time_main))) + + print('%.4f sec' % (time_new-time_sub)) + print('finished importing: "%s" in %.4f sec.' % (filepath, (time_new-time_main))) DEBUG= True def load_obj_ui(filepath, BATCH_LOAD= False): - if BPyMessages.Error_NoFile(filepath): - return - - global CREATE_SMOOTH_GROUPS, CREATE_FGONS, CREATE_EDGES, SPLIT_OBJECTS, SPLIT_GROUPS, SPLIT_MATERIALS, CLAMP_SIZE, IMAGE_SEARCH, POLYGROUPS, KEEP_VERT_ORDER, ROTATE_X90 - - CREATE_SMOOTH_GROUPS= Draw.Create(0) - CREATE_FGONS= Draw.Create(1) - CREATE_EDGES= Draw.Create(1) - SPLIT_OBJECTS= Draw.Create(0) - SPLIT_GROUPS= Draw.Create(0) - SPLIT_MATERIALS= Draw.Create(0) - CLAMP_SIZE= Draw.Create(10.0) - IMAGE_SEARCH= Draw.Create(1) - POLYGROUPS= Draw.Create(0) - KEEP_VERT_ORDER= Draw.Create(1) - ROTATE_X90= Draw.Create(1) - - - # Get USER Options - # Note, Works but not pretty, instead use a more complicated GUI - ''' - pup_block= [\ - 'Import...',\ - ('Smooth Groups', CREATE_SMOOTH_GROUPS, 'Surround smooth groups by sharp edges'),\ - ('Create FGons', CREATE_FGONS, 'Import faces with more then 4 verts as fgons.'),\ - ('Lines', CREATE_EDGES, 'Import lines and faces with 2 verts as edges'),\ - 'Separate objects from obj...',\ - ('Object', SPLIT_OBJECTS, 'Import OBJ Objects into Blender Objects'),\ - ('Group', SPLIT_GROUPS, 'Import OBJ Groups into Blender Objects'),\ - ('Material', SPLIT_MATERIALS, 'Import each material into a seperate mesh (Avoids > 16 per mesh error)'),\ - 'Options...',\ - ('Keep Vert Order', KEEP_VERT_ORDER, 'Keep vert and face order, disables some other options.'),\ - ('Clamp Scale:', CLAMP_SIZE, 0.0, 1000.0, 'Clamp the size to this maximum (Zero to Disable)'),\ - ('Image Search', IMAGE_SEARCH, 'Search subdirs for any assosiated images (Warning, may be slow)'),\ - ] - - if not Draw.PupBlock('Import OBJ...', pup_block): - return - - if KEEP_VERT_ORDER.val: - SPLIT_OBJECTS.val = False - SPLIT_GROUPS.val = False - SPLIT_MATERIALS.val = False - ''' - - - - # BEGIN ALTERNATIVE UI ******************* - if True: - - EVENT_NONE = 0 - EVENT_EXIT = 1 - EVENT_REDRAW = 2 - EVENT_IMPORT = 3 - - GLOBALS = {} - GLOBALS['EVENT'] = EVENT_REDRAW - #GLOBALS['MOUSE'] = Window.GetMouseCoords() - GLOBALS['MOUSE'] = [i/2 for i in Window.GetScreenSize()] - - def obj_ui_set_event(e,v): - GLOBALS['EVENT'] = e - - def do_split(e,v): - global SPLIT_OBJECTS, SPLIT_GROUPS, SPLIT_MATERIALS, KEEP_VERT_ORDER, POLYGROUPS - if SPLIT_OBJECTS.val or SPLIT_GROUPS.val or SPLIT_MATERIALS.val: - KEEP_VERT_ORDER.val = 0 - POLYGROUPS.val = 0 - else: - KEEP_VERT_ORDER.val = 1 - - def do_vertorder(e,v): - global SPLIT_OBJECTS, SPLIT_GROUPS, SPLIT_MATERIALS, KEEP_VERT_ORDER - if KEEP_VERT_ORDER.val: - SPLIT_OBJECTS.val = SPLIT_GROUPS.val = SPLIT_MATERIALS.val = 0 - else: - if not (SPLIT_OBJECTS.val or SPLIT_GROUPS.val or SPLIT_MATERIALS.val): - KEEP_VERT_ORDER.val = 1 - - def do_polygroups(e,v): - global SPLIT_OBJECTS, SPLIT_GROUPS, SPLIT_MATERIALS, KEEP_VERT_ORDER, POLYGROUPS - if POLYGROUPS.val: - SPLIT_OBJECTS.val = SPLIT_GROUPS.val = SPLIT_MATERIALS.val = 0 - - def do_help(e,v): - url = __url__[0] - print('Trying to open web browser with documentation at this address...') - print('\t' + url) - - try: - import webbrowser - webbrowser.open(url) - except: - print('...could not open a browser window.') - - def obj_ui(): - ui_x, ui_y = GLOBALS['MOUSE'] - - # Center based on overall pup size - ui_x -= 165 - ui_y -= 90 - - global CREATE_SMOOTH_GROUPS, CREATE_FGONS, CREATE_EDGES, SPLIT_OBJECTS, SPLIT_GROUPS, SPLIT_MATERIALS, CLAMP_SIZE, IMAGE_SEARCH, POLYGROUPS, KEEP_VERT_ORDER, ROTATE_X90 - - Draw.Label('Import...', ui_x+9, ui_y+159, 220, 21) - Draw.BeginAlign() - CREATE_SMOOTH_GROUPS = Draw.Toggle('Smooth Groups', EVENT_NONE, ui_x+9, ui_y+139, 110, 20, CREATE_SMOOTH_GROUPS.val, 'Surround smooth groups by sharp edges') - CREATE_FGONS = Draw.Toggle('NGons as FGons', EVENT_NONE, ui_x+119, ui_y+139, 110, 20, CREATE_FGONS.val, 'Import faces with more then 4 verts as fgons') - CREATE_EDGES = Draw.Toggle('Lines as Edges', EVENT_NONE, ui_x+229, ui_y+139, 110, 20, CREATE_EDGES.val, 'Import lines and faces with 2 verts as edges') - Draw.EndAlign() - - Draw.Label('Separate objects by OBJ...', ui_x+9, ui_y+110, 220, 20) - Draw.BeginAlign() - SPLIT_OBJECTS = Draw.Toggle('Object', EVENT_REDRAW, ui_x+9, ui_y+89, 55, 21, SPLIT_OBJECTS.val, 'Import OBJ Objects into Blender Objects', do_split) - SPLIT_GROUPS = Draw.Toggle('Group', EVENT_REDRAW, ui_x+64, ui_y+89, 55, 21, SPLIT_GROUPS.val, 'Import OBJ Groups into Blender Objects', do_split) - SPLIT_MATERIALS = Draw.Toggle('Material', EVENT_REDRAW, ui_x+119, ui_y+89, 60, 21, SPLIT_MATERIALS.val, 'Import each material into a seperate mesh (Avoids > 16 per mesh error)', do_split) - Draw.EndAlign() - - # Only used for user feedback - KEEP_VERT_ORDER = Draw.Toggle('Keep Vert Order', EVENT_REDRAW, ui_x+184, ui_y+89, 113, 21, KEEP_VERT_ORDER.val, 'Keep vert and face order, disables split options, enable for morph targets', do_vertorder) - - ROTATE_X90 = Draw.Toggle('-X90', EVENT_REDRAW, ui_x+302, ui_y+89, 38, 21, ROTATE_X90.val, 'Rotate X 90.') - - Draw.Label('Options...', ui_x+9, ui_y+60, 211, 20) - CLAMP_SIZE = Draw.Number('Clamp Scale: ', EVENT_NONE, ui_x+9, ui_y+39, 130, 21, CLAMP_SIZE.val, 0.0, 1000.0, 'Clamp the size to this maximum (Zero to Disable)') - POLYGROUPS = Draw.Toggle('Poly Groups', EVENT_REDRAW, ui_x+144, ui_y+39, 90, 21, POLYGROUPS.val, 'Import OBJ groups as vertex groups.', do_polygroups) - IMAGE_SEARCH = Draw.Toggle('Image Search', EVENT_NONE, ui_x+239, ui_y+39, 100, 21, IMAGE_SEARCH.val, 'Search subdirs for any assosiated images (Warning, may be slow)') - Draw.BeginAlign() - Draw.PushButton('Online Help', EVENT_REDRAW, ui_x+9, ui_y+9, 110, 21, 'Load the wiki page for this script', do_help) - Draw.PushButton('Cancel', EVENT_EXIT, ui_x+119, ui_y+9, 110, 21, '', obj_ui_set_event) - Draw.PushButton('Import', EVENT_IMPORT, ui_x+229, ui_y+9, 110, 21, 'Import with these settings', obj_ui_set_event) - Draw.EndAlign() - - - # hack so the toggle buttons redraw. this is not nice at all - while GLOBALS['EVENT'] not in (EVENT_EXIT, EVENT_IMPORT): - Draw.UIBlock(obj_ui, 0) - - if GLOBALS['EVENT'] != EVENT_IMPORT: - return - - # END ALTERNATIVE UI ********************* - - - - - - - - Window.WaitCursor(1) - - if BATCH_LOAD: # load the dir - try: - files= [ f for f in os.listdir(filepath) if f.lower().endswith('.obj') ] - except: - Window.WaitCursor(0) - Draw.PupMenu('Error%t|Could not open path ' + filepath) - return - - if not files: - Window.WaitCursor(0) - Draw.PupMenu('Error%t|No files at path ' + filepath) - return - - for f in files: - scn= bpy.data.scenes.new( stripExt(f) ) - scn.makeCurrent() - - load_obj(sys.join(filepath, f),\ - CLAMP_SIZE.val,\ - CREATE_FGONS.val,\ - CREATE_SMOOTH_GROUPS.val,\ - CREATE_EDGES.val,\ - SPLIT_OBJECTS.val,\ - SPLIT_GROUPS.val,\ - SPLIT_MATERIALS.val,\ - ROTATE_X90.val,\ - IMAGE_SEARCH.val,\ - POLYGROUPS.val - ) - - else: # Normal load - load_obj(filepath,\ - CLAMP_SIZE.val,\ - CREATE_FGONS.val,\ - CREATE_SMOOTH_GROUPS.val,\ - CREATE_EDGES.val,\ - SPLIT_OBJECTS.val,\ - SPLIT_GROUPS.val,\ - SPLIT_MATERIALS.val,\ - ROTATE_X90.val,\ - IMAGE_SEARCH.val,\ - POLYGROUPS.val - ) - - Window.WaitCursor(0) + if BPyMessages.Error_NoFile(filepath): + return + + global CREATE_SMOOTH_GROUPS, CREATE_FGONS, CREATE_EDGES, SPLIT_OBJECTS, SPLIT_GROUPS, SPLIT_MATERIALS, CLAMP_SIZE, IMAGE_SEARCH, POLYGROUPS, KEEP_VERT_ORDER, ROTATE_X90 + + CREATE_SMOOTH_GROUPS= Draw.Create(0) + CREATE_FGONS= Draw.Create(1) + CREATE_EDGES= Draw.Create(1) + SPLIT_OBJECTS= Draw.Create(0) + SPLIT_GROUPS= Draw.Create(0) + SPLIT_MATERIALS= Draw.Create(0) + CLAMP_SIZE= Draw.Create(10.0) + IMAGE_SEARCH= Draw.Create(1) + POLYGROUPS= Draw.Create(0) + KEEP_VERT_ORDER= Draw.Create(1) + ROTATE_X90= Draw.Create(1) + + + # Get USER Options + # Note, Works but not pretty, instead use a more complicated GUI + ''' + pup_block= [\ + 'Import...',\ + ('Smooth Groups', CREATE_SMOOTH_GROUPS, 'Surround smooth groups by sharp edges'),\ + ('Create FGons', CREATE_FGONS, 'Import faces with more then 4 verts as fgons.'),\ + ('Lines', CREATE_EDGES, 'Import lines and faces with 2 verts as edges'),\ + 'Separate objects from obj...',\ + ('Object', SPLIT_OBJECTS, 'Import OBJ Objects into Blender Objects'),\ + ('Group', SPLIT_GROUPS, 'Import OBJ Groups into Blender Objects'),\ + ('Material', SPLIT_MATERIALS, 'Import each material into a seperate mesh (Avoids > 16 per mesh error)'),\ + 'Options...',\ + ('Keep Vert Order', KEEP_VERT_ORDER, 'Keep vert and face order, disables some other options.'),\ + ('Clamp Scale:', CLAMP_SIZE, 0.0, 1000.0, 'Clamp the size to this maximum (Zero to Disable)'),\ + ('Image Search', IMAGE_SEARCH, 'Search subdirs for any assosiated images (Warning, may be slow)'),\ + ] + + if not Draw.PupBlock('Import OBJ...', pup_block): + return + + if KEEP_VERT_ORDER.val: + SPLIT_OBJECTS.val = False + SPLIT_GROUPS.val = False + SPLIT_MATERIALS.val = False + ''' + + + + # BEGIN ALTERNATIVE UI ******************* + if True: + + EVENT_NONE = 0 + EVENT_EXIT = 1 + EVENT_REDRAW = 2 + EVENT_IMPORT = 3 + + GLOBALS = {} + GLOBALS['EVENT'] = EVENT_REDRAW + #GLOBALS['MOUSE'] = Window.GetMouseCoords() + GLOBALS['MOUSE'] = [i/2 for i in Window.GetScreenSize()] + + def obj_ui_set_event(e,v): + GLOBALS['EVENT'] = e + + def do_split(e,v): + global SPLIT_OBJECTS, SPLIT_GROUPS, SPLIT_MATERIALS, KEEP_VERT_ORDER, POLYGROUPS + if SPLIT_OBJECTS.val or SPLIT_GROUPS.val or SPLIT_MATERIALS.val: + KEEP_VERT_ORDER.val = 0 + POLYGROUPS.val = 0 + else: + KEEP_VERT_ORDER.val = 1 + + def do_vertorder(e,v): + global SPLIT_OBJECTS, SPLIT_GROUPS, SPLIT_MATERIALS, KEEP_VERT_ORDER + if KEEP_VERT_ORDER.val: + SPLIT_OBJECTS.val = SPLIT_GROUPS.val = SPLIT_MATERIALS.val = 0 + else: + if not (SPLIT_OBJECTS.val or SPLIT_GROUPS.val or SPLIT_MATERIALS.val): + KEEP_VERT_ORDER.val = 1 + + def do_polygroups(e,v): + global SPLIT_OBJECTS, SPLIT_GROUPS, SPLIT_MATERIALS, KEEP_VERT_ORDER, POLYGROUPS + if POLYGROUPS.val: + SPLIT_OBJECTS.val = SPLIT_GROUPS.val = SPLIT_MATERIALS.val = 0 + + def do_help(e,v): + url = __url__[0] + print('Trying to open web browser with documentation at this address...') + print('\t' + url) + + try: + import webbrowser + webbrowser.open(url) + except: + print('...could not open a browser window.') + + def obj_ui(): + ui_x, ui_y = GLOBALS['MOUSE'] + + # Center based on overall pup size + ui_x -= 165 + ui_y -= 90 + + global CREATE_SMOOTH_GROUPS, CREATE_FGONS, CREATE_EDGES, SPLIT_OBJECTS, SPLIT_GROUPS, SPLIT_MATERIALS, CLAMP_SIZE, IMAGE_SEARCH, POLYGROUPS, KEEP_VERT_ORDER, ROTATE_X90 + + Draw.Label('Import...', ui_x+9, ui_y+159, 220, 21) + Draw.BeginAlign() + CREATE_SMOOTH_GROUPS = Draw.Toggle('Smooth Groups', EVENT_NONE, ui_x+9, ui_y+139, 110, 20, CREATE_SMOOTH_GROUPS.val, 'Surround smooth groups by sharp edges') + CREATE_FGONS = Draw.Toggle('NGons as FGons', EVENT_NONE, ui_x+119, ui_y+139, 110, 20, CREATE_FGONS.val, 'Import faces with more then 4 verts as fgons') + CREATE_EDGES = Draw.Toggle('Lines as Edges', EVENT_NONE, ui_x+229, ui_y+139, 110, 20, CREATE_EDGES.val, 'Import lines and faces with 2 verts as edges') + Draw.EndAlign() + + Draw.Label('Separate objects by OBJ...', ui_x+9, ui_y+110, 220, 20) + Draw.BeginAlign() + SPLIT_OBJECTS = Draw.Toggle('Object', EVENT_REDRAW, ui_x+9, ui_y+89, 55, 21, SPLIT_OBJECTS.val, 'Import OBJ Objects into Blender Objects', do_split) + SPLIT_GROUPS = Draw.Toggle('Group', EVENT_REDRAW, ui_x+64, ui_y+89, 55, 21, SPLIT_GROUPS.val, 'Import OBJ Groups into Blender Objects', do_split) + SPLIT_MATERIALS = Draw.Toggle('Material', EVENT_REDRAW, ui_x+119, ui_y+89, 60, 21, SPLIT_MATERIALS.val, 'Import each material into a seperate mesh (Avoids > 16 per mesh error)', do_split) + Draw.EndAlign() + + # Only used for user feedback + KEEP_VERT_ORDER = Draw.Toggle('Keep Vert Order', EVENT_REDRAW, ui_x+184, ui_y+89, 113, 21, KEEP_VERT_ORDER.val, 'Keep vert and face order, disables split options, enable for morph targets', do_vertorder) + + ROTATE_X90 = Draw.Toggle('-X90', EVENT_REDRAW, ui_x+302, ui_y+89, 38, 21, ROTATE_X90.val, 'Rotate X 90.') + + Draw.Label('Options...', ui_x+9, ui_y+60, 211, 20) + CLAMP_SIZE = Draw.Number('Clamp Scale: ', EVENT_NONE, ui_x+9, ui_y+39, 130, 21, CLAMP_SIZE.val, 0.0, 1000.0, 'Clamp the size to this maximum (Zero to Disable)') + POLYGROUPS = Draw.Toggle('Poly Groups', EVENT_REDRAW, ui_x+144, ui_y+39, 90, 21, POLYGROUPS.val, 'Import OBJ groups as vertex groups.', do_polygroups) + IMAGE_SEARCH = Draw.Toggle('Image Search', EVENT_NONE, ui_x+239, ui_y+39, 100, 21, IMAGE_SEARCH.val, 'Search subdirs for any assosiated images (Warning, may be slow)') + Draw.BeginAlign() + Draw.PushButton('Online Help', EVENT_REDRAW, ui_x+9, ui_y+9, 110, 21, 'Load the wiki page for this script', do_help) + Draw.PushButton('Cancel', EVENT_EXIT, ui_x+119, ui_y+9, 110, 21, '', obj_ui_set_event) + Draw.PushButton('Import', EVENT_IMPORT, ui_x+229, ui_y+9, 110, 21, 'Import with these settings', obj_ui_set_event) + Draw.EndAlign() + + + # hack so the toggle buttons redraw. this is not nice at all + while GLOBALS['EVENT'] not in (EVENT_EXIT, EVENT_IMPORT): + Draw.UIBlock(obj_ui, 0) + + if GLOBALS['EVENT'] != EVENT_IMPORT: + return + + # END ALTERNATIVE UI ********************* + + + + + + + + Window.WaitCursor(1) + + if BATCH_LOAD: # load the dir + try: + files= [ f for f in os.listdir(filepath) if f.lower().endswith('.obj') ] + except: + Window.WaitCursor(0) + Draw.PupMenu('Error%t|Could not open path ' + filepath) + return + + if not files: + Window.WaitCursor(0) + Draw.PupMenu('Error%t|No files at path ' + filepath) + return + + for f in files: + scn= bpy.data.scenes.new( stripExt(f) ) + scn.makeCurrent() + + load_obj(sys.join(filepath, f),\ + CLAMP_SIZE.val,\ + CREATE_FGONS.val,\ + CREATE_SMOOTH_GROUPS.val,\ + CREATE_EDGES.val,\ + SPLIT_OBJECTS.val,\ + SPLIT_GROUPS.val,\ + SPLIT_MATERIALS.val,\ + ROTATE_X90.val,\ + IMAGE_SEARCH.val,\ + POLYGROUPS.val + ) + + else: # Normal load + load_obj(filepath,\ + CLAMP_SIZE.val,\ + CREATE_FGONS.val,\ + CREATE_SMOOTH_GROUPS.val,\ + CREATE_EDGES.val,\ + SPLIT_OBJECTS.val,\ + SPLIT_GROUPS.val,\ + SPLIT_MATERIALS.val,\ + ROTATE_X90.val,\ + IMAGE_SEARCH.val,\ + POLYGROUPS.val + ) + + Window.WaitCursor(0) def load_obj_ui_batch(file): - load_obj_ui(file, True) + load_obj_ui(file, True) DEBUG= False @@ -1544,82 +1546,82 @@ DEBUG= False # else: # Window.FileSelector(load_obj_ui, 'Import a Wavefront OBJ', '*.obj') - # For testing compatibility + # For testing compatibility ''' else: - # DEBUG ONLY - TIME= sys.time() - DIR = '/fe/obj' - import os - print 'Searching for files' - def fileList(path): - for dirpath, dirnames, filenames in os.walk(path): - for filename in filenames: - yield os.path.join(dirpath, filename) - - files = [f for f in fileList(DIR) if f.lower().endswith('.obj')] - files.sort() - - for i, obj_file in enumerate(files): - if 0 < i < 20: - print 'Importing', obj_file, '\nNUMBER', i, 'of', len(files) - newScn= bpy.data.scenes.new(os.path.basename(obj_file)) - newScn.makeCurrent() - load_obj(obj_file, False, IMAGE_SEARCH=0) + # DEBUG ONLY + TIME= sys.time() + DIR = '/fe/obj' + import os + print 'Searching for files' + def fileList(path): + for dirpath, dirnames, filenames in os.walk(path): + for filename in filenames: + yield os.path.join(dirpath, filename) - print 'TOTAL TIME: %.6f' % (sys.time() - TIME) + files = [f for f in fileList(DIR) if f.lower().endswith('.obj')] + files.sort() + + for i, obj_file in enumerate(files): + if 0 < i < 20: + print 'Importing', obj_file, '\nNUMBER', i, 'of', len(files) + newScn= bpy.data.scenes.new(os.path.basename(obj_file)) + newScn.makeCurrent() + load_obj(obj_file, False, IMAGE_SEARCH=0) + + print 'TOTAL TIME: %.6f' % (sys.time() - TIME) ''' from bpy.props import * class IMPORT_OT_obj(bpy.types.Operator): - '''Load a Wavefront OBJ File.''' - bl_idname = "import_scene.obj" - bl_label = "Import OBJ" - - # List of operator properties, the attributes will be assigned - # to the class instance from the operator settings before calling. - - - path = StringProperty(name="File Path", description="File path used for importing the OBJ file", maxlen= 1024, default= "") + '''Load a Wavefront OBJ File.''' + bl_idname = "import_scene.obj" + bl_label = "Import OBJ" - CREATE_SMOOTH_GROUPS = BoolProperty(name="Smooth Groups", description="Surround smooth groups by sharp edges", default= True) - CREATE_FGONS = BoolProperty(name="NGons as FGons", description="Import faces with more then 4 verts as fgons", default= True) - CREATE_EDGES = BoolProperty(name="Lines as Edges", description="Import lines and faces with 2 verts as edge", default= True) - SPLIT_OBJECTS = BoolProperty(name="Object", description="Import OBJ Objects into Blender Objects", default= True) - SPLIT_GROUPS = BoolProperty(name="Group", description="Import OBJ Groups into Blender Objects", default= True) - SPLIT_MATERIALS = BoolProperty(name="Material", description="Import each material into a seperate mesh (Avoids > 16 per mesh error)", default= True) - # old comment: only used for user feedback - # disabled this option because in old code a handler for it disabled SPLIT* params, it's not passed to load_obj - # KEEP_VERT_ORDER = BoolProperty(name="Keep Vert Order", description="Keep vert and face order, disables split options, enable for morph targets", default= True) - ROTATE_X90 = BoolProperty(name="-X90", description="Rotate X 90.", default= True) - CLAMP_SIZE = FloatProperty(name="Clamp Scale", description="Clamp the size to this maximum (Zero to Disable)", min=0.01, max=1000.0, soft_min=0.0, soft_max=1000.0, default=0.0) - POLYGROUPS = BoolProperty(name="Poly Groups", description="Import OBJ groups as vertex groups.", default= True) - IMAGE_SEARCH = BoolProperty(name="Image Search", description="Search subdirs for any assosiated images (Warning, may be slow)", default= True) - - - def execute(self, context): - # print("Selected: " + context.active_object.name) + # List of operator properties, the attributes will be assigned + # to the class instance from the operator settings before calling. - load_obj(self.properties.path, - context, - self.properties.CLAMP_SIZE, - self.properties.CREATE_FGONS, - self.properties.CREATE_SMOOTH_GROUPS, - self.properties.CREATE_EDGES, - self.properties.SPLIT_OBJECTS, - self.properties.SPLIT_GROUPS, - self.properties.SPLIT_MATERIALS, - self.properties.ROTATE_X90, - self.properties.IMAGE_SEARCH, - self.properties.POLYGROUPS) - return ('FINISHED',) - - def invoke(self, context, event): - wm = context.manager - wm.add_fileselect(self) - return ('RUNNING_MODAL',) + path = StringProperty(name="File Path", description="File path used for importing the OBJ file", maxlen= 1024, default= "") + + CREATE_SMOOTH_GROUPS = BoolProperty(name="Smooth Groups", description="Surround smooth groups by sharp edges", default= True) + CREATE_FGONS = BoolProperty(name="NGons as FGons", description="Import faces with more then 4 verts as fgons", default= True) + CREATE_EDGES = BoolProperty(name="Lines as Edges", description="Import lines and faces with 2 verts as edge", default= True) + SPLIT_OBJECTS = BoolProperty(name="Object", description="Import OBJ Objects into Blender Objects", default= True) + SPLIT_GROUPS = BoolProperty(name="Group", description="Import OBJ Groups into Blender Objects", default= True) + SPLIT_MATERIALS = BoolProperty(name="Material", description="Import each material into a seperate mesh (Avoids > 16 per mesh error)", default= True) + # old comment: only used for user feedback + # disabled this option because in old code a handler for it disabled SPLIT* params, it's not passed to load_obj + # KEEP_VERT_ORDER = BoolProperty(name="Keep Vert Order", description="Keep vert and face order, disables split options, enable for morph targets", default= True) + ROTATE_X90 = BoolProperty(name="-X90", description="Rotate X 90.", default= True) + CLAMP_SIZE = FloatProperty(name="Clamp Scale", description="Clamp the size to this maximum (Zero to Disable)", min=0.01, max=1000.0, soft_min=0.0, soft_max=1000.0, default=0.0) + POLYGROUPS = BoolProperty(name="Poly Groups", description="Import OBJ groups as vertex groups.", default= True) + IMAGE_SEARCH = BoolProperty(name="Image Search", description="Search subdirs for any assosiated images (Warning, may be slow)", default= True) + + + def execute(self, context): + # print("Selected: " + context.active_object.name) + + load_obj(self.properties.path, + context, + self.properties.CLAMP_SIZE, + self.properties.CREATE_FGONS, + self.properties.CREATE_SMOOTH_GROUPS, + self.properties.CREATE_EDGES, + self.properties.SPLIT_OBJECTS, + self.properties.SPLIT_GROUPS, + self.properties.SPLIT_MATERIALS, + self.properties.ROTATE_X90, + self.properties.IMAGE_SEARCH, + self.properties.POLYGROUPS) + + return ('FINISHED',) + + def invoke(self, context, event): + wm = context.manager + wm.add_fileselect(self) + return ('RUNNING_MODAL',) bpy.ops.add(IMPORT_OT_obj) diff --git a/release/scripts/io/netrender/balancing.py b/release/scripts/io/netrender/balancing.py index f093815d8a8..d8951b1e2e8 100644 --- a/release/scripts/io/netrender/balancing.py +++ b/release/scripts/io/netrender/balancing.py @@ -72,7 +72,8 @@ class Balancer: def balance(self, jobs): if jobs: - jobs.sort(key=self.sortKey) + # use inline copy to make sure the list is still accessible while sorting + jobs[:] = sorted(jobs, key=self.sortKey) return jobs[0] else: return None @@ -80,11 +81,33 @@ class Balancer: # ========================== class RatingUsage(RatingRule): + def __str__(self): + return "Usage rating" + def rate(self, job): # less usage is better return job.usage / job.priority +class RatingUsageByCategory(RatingRule): + def __str__(self): + return "Usage per category rating" + + def __init__(self, get_jobs): + self.getJobs = get_jobs + def rate(self, job): + total_category_usage = sum([j.usage for j in self.getJobs() if j.category == job.category]) + maximum_priority = max([j.priority for j in self.getJobs() if j.category == job.category]) + + # less usage is better + return total_category_usage / maximum_priority + class NewJobPriority(PriorityRule): + def str_limit(self): + return "less than %i frame%s done" % (self.limit, "s" if self.limit > 1 else "") + + def __str__(self): + return "Priority to new jobs" + def __init__(self, limit = 1): self.limit = limit @@ -92,6 +115,12 @@ class NewJobPriority(PriorityRule): return job.countFrames(status = DONE) < self.limit class MinimumTimeBetweenDispatchPriority(PriorityRule): + def str_limit(self): + return "more than %i minute%s since last" % (self.limit, "s" if self.limit > 1 else "") + + def __str__(self): + return "Priority to jobs that haven't been dispatched recently" + def __init__(self, limit = 10): self.limit = limit @@ -99,10 +128,19 @@ class MinimumTimeBetweenDispatchPriority(PriorityRule): return job.countFrames(status = DISPATCHED) == 0 and (time.time() - job.last_dispatched) / 60 > self.limit class ExcludeQueuedEmptyJob(ExclusionRule): + def __str__(self): + return "Exclude queued and empty jobs" + def test(self, job): return job.status != JOB_QUEUED or job.countFrames(status = QUEUED) == 0 class ExcludeSlavesLimit(ExclusionRule): + def str_limit(self): + return "more than %.0f%% of all slaves" % (self.limit * 100) + + def __str__(self): + return "Exclude jobs that would use too many slaves" + def __init__(self, count_jobs, count_slaves, limit = 0.75): self.count_jobs = count_jobs self.count_slaves = count_slaves diff --git a/release/scripts/io/netrender/client.py b/release/scripts/io/netrender/client.py index f39beadfe57..bbbb9f26051 100644 --- a/release/scripts/io/netrender/client.py +++ b/release/scripts/io/netrender/client.py @@ -106,7 +106,6 @@ def clientSendJob(conn, scene, anim = False): job_name = netsettings.job_name path, name = os.path.split(filename) - path += os.sep if job_name == "[default]": job_name = name @@ -147,9 +146,10 @@ def clientSendJob(conn, scene, anim = False): for psys in object.particle_systems: addPointCache(job, object, psys.point_cache, default_path) - # print(job.files) + #print(job.files) job.name = job_name + job.category = netsettings.job_category for slave in netrender.blacklist: job.blacklist.append(slave.id) @@ -165,18 +165,18 @@ def clientSendJob(conn, scene, anim = False): # if not ACCEPTED (but not processed), send files if response.status == http.client.ACCEPTED: - for filepath, start, end in job.files: - f = open(filepath, "rb") - conn.request("PUT", "/file", f, headers={"job-id": job_id, "job-file": filepath}) + for rfile in job.files: + f = open(rfile.filepath, "rb") + conn.request("PUT", fileURL(job_id, rfile.index), f) f.close() response = conn.getresponse() - # server will reply with NOT_FOUD until all files are found + # server will reply with ACCEPTED until all files are found return job_id def requestResult(conn, job_id, frame): - conn.request("GET", "/render", headers={"job-id": job_id, "job-frame":str(frame)}) + conn.request("GET", renderURL(job_id, frame)) @rnaType class NetworkRenderEngine(bpy.types.RenderEngine): @@ -215,6 +215,8 @@ class NetworkRenderEngine(bpy.types.RenderEngine): self.update_stats("", "Network render exporting") + new_job = False + job_id = netsettings.job_id # reading back result @@ -225,14 +227,25 @@ class NetworkRenderEngine(bpy.types.RenderEngine): response = conn.getresponse() if response.status == http.client.NO_CONTENT: + new_job = True netsettings.job_id = clientSendJob(conn, scene) + job_id = netsettings.job_id + requestResult(conn, job_id, scene.current_frame) + response = conn.getresponse() while response.status == http.client.ACCEPTED and not self.test_break(): time.sleep(1) requestResult(conn, job_id, scene.current_frame) response = conn.getresponse() + # cancel new jobs (animate on network) on break + if self.test_break() and new_job: + conn.request("POST", cancelURL(job_id)) + response = conn.getresponse() + print( response.status, response.reason ) + netsettings.job_id = 0 + if response.status != http.client.OK: conn.close() return diff --git a/release/scripts/io/netrender/master.py b/release/scripts/io/netrender/master.py index 7abca023e50..83980c95da7 100644 --- a/release/scripts/io/netrender/master.py +++ b/release/scripts/io/netrender/master.py @@ -25,11 +25,9 @@ import netrender.model import netrender.balancing import netrender.master_html -class MRenderFile: - def __init__(self, filepath, start, end): - self.filepath = filepath - self.start = start - self.end = end +class MRenderFile(netrender.model.RenderFile): + def __init__(self, filepath, index, start, end): + super().__init__(filepath, index, start, end) self.found = False def test(self): @@ -60,37 +58,41 @@ class MRenderSlave(netrender.model.RenderSlave): self.job = None class MRenderJob(netrender.model.RenderJob): - def __init__(self, job_id, job_type, name, files, chunks = 1, priority = 1, blacklist = []): - super().__init__() + def __init__(self, job_id, job_info): + super().__init__(job_info) self.id = job_id - self.type = job_type - self.name = name - self.files = files - self.frames = [] - self.chunks = chunks - self.priority = priority - self.usage = 0.0 - self.blacklist = blacklist self.last_dispatched = time.time() # force one chunk for process jobs if self.type == netrender.model.JOB_PROCESS: self.chunks = 1 + # Force WAITING status on creation + self.status = JOB_WAITING + # special server properties self.last_update = 0 self.save_path = "" - self.files_map = {path: MRenderFile(path, start, end) for path, start, end in files} - self.status = JOB_WAITING + self.files = [MRenderFile(rfile.filepath, rfile.index, rfile.start, rfile.end) for rfile in job_info.files] def save(self): if self.save_path: f = open(self.save_path + "job.txt", "w") f.write(repr(self.serialize())) f.close() + + def edit(self, info_map): + if "status" in info_map: + self.status = info_map["status"] + + if "priority" in info_map: + self.priority = info_map["priority"] + + if "chunks" in info_map: + self.chunks = info_map["chunks"] def testStart(self): - for f in self.files_map.values(): + for f in self.files: if not f.test(): return False @@ -149,6 +151,7 @@ class MRenderFrame(netrender.model.RenderFrame): def reset(self, all): if all or self.status == ERROR: + self.log_path = None self.slave = None self.time = 0 self.status = QUEUED @@ -158,6 +161,12 @@ class MRenderFrame(netrender.model.RenderFrame): # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +file_pattern = re.compile("/file_([a-zA-Z0-9]+)_([0-9]+)") +render_pattern = re.compile("/render_([a-zA-Z0-9]+)_([0-9]+).exr") +log_pattern = re.compile("/log_([a-zA-Z0-9]+)_([0-9]+).log") +reset_pattern = re.compile("/reset(all|)_([a-zA-Z0-9]+)_([0-9]+)") +cancel_pattern = re.compile("/cancel_([a-zA-Z0-9]+)") +edit_pattern = re.compile("/edit_([a-zA-Z0-9]+)") class RenderHandler(http.server.BaseHTTPRequestHandler): def send_head(self, code = http.client.OK, headers = {}, content = "application/octet-stream"): @@ -202,62 +211,74 @@ class RenderHandler(http.server.BaseHTTPRequestHandler): self.server.stats("", "Version check") self.wfile.write(VERSION) # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - elif self.path == "/render": - job_id = self.headers['job-id'] - job_frame = int(self.headers['job-frame']) + elif self.path.startswith("/render"): + match = render_pattern.match(self.path) - job = self.server.getJobID(job_id) + if match: + job_id = match.groups()[0] + frame_number = int(match.groups()[1]) - if job: - frame = job[job_frame] + job = self.server.getJobID(job_id) - if frame: - if frame.status in (QUEUED, DISPATCHED): - self.send_head(http.client.ACCEPTED) - elif frame.status == DONE: - self.server.stats("", "Sending result to client") - f = open(job.save_path + "%04d" % job_frame + ".exr", 'rb') - - self.send_head() - - shutil.copyfileobj(f, self.wfile) - - f.close() - elif frame.status == ERROR: - self.send_head(http.client.PARTIAL_CONTENT) + if job: + frame = job[frame_number] + + if frame: + if frame.status in (QUEUED, DISPATCHED): + self.send_head(http.client.ACCEPTED) + elif frame.status == DONE: + self.server.stats("", "Sending result to client") + f = open(job.save_path + "%04d" % frame_number + ".exr", 'rb') + + self.send_head() + + shutil.copyfileobj(f, self.wfile) + + f.close() + elif frame.status == ERROR: + self.send_head(http.client.PARTIAL_CONTENT) + else: + # no such frame + self.send_head(http.client.NO_CONTENT) else: - # no such frame + # no such job id self.send_head(http.client.NO_CONTENT) else: - # no such job id + # invalid url self.send_head(http.client.NO_CONTENT) # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - elif self.path == "/log": - job_id = self.headers['job-id'] - job_frame = int(self.headers['job-frame']) + elif self.path.startswith("/log"): + match = log_pattern.match(self.path) - job = self.server.getJobID(job_id) - - if job: - frame = job[job_frame] + if match: + job_id = match.groups()[0] + frame_number = int(match.groups()[1]) - if frame: - if not frame.log_path or frame.status in (QUEUED, DISPATCHED): - self.send_head(http.client.PROCESSING) + job = self.server.getJobID(job_id) + + if job: + frame = job[frame_number] + + if frame: + if not frame.log_path or frame.status in (QUEUED, DISPATCHED): + self.send_head(http.client.PROCESSING) + else: + self.server.stats("", "Sending log to client") + f = open(frame.log_path, 'rb') + + self.send_head(content = "text/plain") + + shutil.copyfileobj(f, self.wfile) + + f.close() else: - self.server.stats("", "Sending log to client") - f = open(frame.log_path, 'rb') - - self.send_head() - - shutil.copyfileobj(f, self.wfile) - - f.close() + # no such frame + self.send_head(http.client.NO_CONTENT) else: - # no such frame + # no such job id self.send_head(http.client.NO_CONTENT) else: - # no such job id + # invalid URL self.send_head(http.client.NO_CONTENT) # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- elif self.path == "/status": @@ -330,19 +351,24 @@ class RenderHandler(http.server.BaseHTTPRequestHandler): else: # invalid slave id self.send_head(http.client.NO_CONTENT) # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - elif self.path == "/file": - slave_id = self.headers['slave-id'] + elif self.path.startswith("/file"): + match = file_pattern.match(self.path) - slave = self.server.getSeenSlave(slave_id) - - if slave: # only if slave id is valid - job_id = self.headers['job-id'] - job_file = self.headers['job-file'] + if match: + slave_id = self.headers['slave-id'] + slave = self.server.getSeenSlave(slave_id) + + if not slave: + # invalid slave id + print("invalid slave id") + + job_id = match.groups()[0] + file_index = int(match.groups()[1]) job = self.server.getJobID(job_id) if job: - render_file = job.files_map.get(job_file, None) + render_file = job.files[file_index] if render_file: self.server.stats("", "Sending file to slave") @@ -358,7 +384,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler): else: # no such job id self.send_head(http.client.NO_CONTENT) - else: # invalid slave id + else: # invalid url self.send_head(http.client.NO_CONTENT) # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- elif self.path == "/slaves": @@ -393,7 +419,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler): job_id = self.server.nextJobID() - job = MRenderJob(job_id, job_info.type, job_info.name, job_info.files, chunks = job_info.chunks, priority = job_info.priority, blacklist = job_info.blacklist) + job = MRenderJob(job_id, job_info) for frame in job_info.frames: frame = job.addFrame(frame.number, frame.command) @@ -403,23 +429,50 @@ class RenderHandler(http.server.BaseHTTPRequestHandler): headers={"job-id": job_id} if job.testStart(): - self.server.stats("", "New job, missing files") + self.server.stats("", "New job, started") self.send_head(headers=headers) else: - self.server.stats("", "New job, started") + self.server.stats("", "New job, missing files (%i total)" % len(job.files)) self.send_head(http.client.ACCEPTED, headers=headers) # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - elif self.path == "/cancel": - job_id = self.headers.get('job-id', "") + elif self.path.startswith("/edit"): + match = edit_pattern.match(self.path) + + if match: + job_id = match.groups()[0] - job = self.server.getJobID(job_id) - - if job: - self.server.stats("", "Cancelling job") - self.server.removeJob(job) - self.send_head() + job = self.server.getJobID(job_id) + + if job: + length = int(self.headers['content-length']) + info_map = eval(str(self.rfile.read(length), encoding='utf8')) + + job.edit(info_map) + self.send_head() + else: + # no such job id + self.send_head(http.client.NO_CONTENT) else: - # no such job id + # invalid url + self.send_head(http.client.NO_CONTENT) + # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + elif self.path.startswith("/cancel"): + match = cancel_pattern.match(self.path) + + if match: + job_id = match.groups()[0] + + job = self.server.getJobID(job_id) + + if job: + self.server.stats("", "Cancelling job") + self.server.removeJob(job) + self.send_head() + else: + # no such job id + self.send_head(http.client.NO_CONTENT) + else: + # invalid url self.send_head(http.client.NO_CONTENT) # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- @@ -430,31 +483,36 @@ class RenderHandler(http.server.BaseHTTPRequestHandler): self.send_head() # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - elif self.path == "/reset": - job_id = self.headers.get('job-id', "") - job_frame = int(self.headers.get('job-frame', "-1")) - all = bool(self.headers.get('reset-all', "False")) + elif self.path.startswith("/reset"): + match = reset_pattern.match(self.path) - job = self.server.getJobID(job_id) - - if job: - if job_frame != -1: - - frame = job[job_frame] - if frame: - self.server.stats("", "Reset job frame") - frame.reset(all) - self.send_head() - else: - # no such frame - self.send_head(http.client.NO_CONTENT) + if match: + all = match.groups()[0] == 'all' + job_id = match.groups()[1] + job_frame = int(match.groups()[2]) + + job = self.server.getJobID(job_id) + + if job: + if job_frame != 0: - else: - self.server.stats("", "Reset job") - job.reset(all) - self.send_head() - - else: # job not found + frame = job[job_frame] + if frame: + self.server.stats("", "Reset job frame") + frame.reset(all) + self.send_head() + else: + # no such frame + self.send_head(http.client.NO_CONTENT) + + else: + self.server.stats("", "Reset job") + job.reset(all) + self.send_head() + + else: # job not found + self.send_head(http.client.NO_CONTENT) + else: # invalid url self.send_head(http.client.NO_CONTENT) # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- elif self.path == "/slave": @@ -463,22 +521,22 @@ class RenderHandler(http.server.BaseHTTPRequestHandler): self.server.stats("", "New slave connected") - slave_info = netrender.model.RenderSlave.materialize(eval(str(self.rfile.read(length), encoding='utf8'))) + slave_info = netrender.model.RenderSlave.materialize(eval(str(self.rfile.read(length), encoding='utf8')), cache = False) slave_id = self.server.addSlave(slave_info.name, self.client_address, slave_info.stats) self.send_head(headers = {"slave-id": slave_id}) # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- elif self.path == "/log": - slave_id = self.headers['slave-id'] + length = int(self.headers['content-length']) + + log_info = netrender.model.LogFile.materialize(eval(str(self.rfile.read(length), encoding='utf8'))) + + slave_id = log_info.slave_id slave = self.server.getSeenSlave(slave_id) if slave: # only if slave id is valid - length = int(self.headers['content-length']) - - log_info = netrender.model.LogFile.materialize(eval(str(self.rfile.read(length), encoding='utf8'))) - job = self.server.getJobID(log_info.job_id) if job: @@ -498,53 +556,64 @@ class RenderHandler(http.server.BaseHTTPRequestHandler): def do_PUT(self): # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - if self.path == "/file": - self.server.stats("", "Receiving job") + if self.path.startswith("/file"): + match = file_pattern.match(self.path) - length = int(self.headers['content-length']) - job_id = self.headers['job-id'] - job_file = self.headers['job-file'] + if match: + self.server.stats("", "Receiving job") + + length = int(self.headers['content-length']) + job_id = match.groups()[0] + file_index = int(match.groups()[1]) - job = self.server.getJobID(job_id) - - if job: + job = self.server.getJobID(job_id) - render_file = job.files_map.get(job_file, None) - - if render_file: - main_file = job.files[0][0] # filename of the first file + if job: - main_path, main_name = os.path.split(main_file) + render_file = job.files[file_index] - if job_file != main_file: - file_path = prefixPath(job.save_path, job_file, main_path) - else: - file_path = job.save_path + main_name - - buf = self.rfile.read(length) - - # add same temp file + renames as slave - - f = open(file_path, "wb") - f.write(buf) - f.close() - del buf - - render_file.filepath = file_path # set the new path - - if job.testStart(): - self.server.stats("", "File upload, starting job") - self.send_head(http.client.OK) - else: - self.server.stats("", "File upload, file missings") - self.send_head(http.client.ACCEPTED) - else: # invalid file + if render_file: + main_file = job.files[0].filepath # filename of the first file + + main_path, main_name = os.path.split(main_file) + + if file_index > 0: + file_path = prefixPath(job.save_path, render_file.filepath, main_path) + else: + file_path = job.save_path + main_name + + buf = self.rfile.read(length) + + # add same temp file + renames as slave + + f = open(file_path, "wb") + f.write(buf) + f.close() + del buf + + render_file.filepath = file_path # set the new path + + if job.testStart(): + self.server.stats("", "File upload, starting job") + self.send_head(http.client.OK) + else: + self.server.stats("", "File upload, file missings") + self.send_head(http.client.ACCEPTED) + else: # invalid file + print("file not found", job_id, file_index) + self.send_head(http.client.NO_CONTENT) + else: # job not found + print("job not found", job_id, file_index) self.send_head(http.client.NO_CONTENT) - else: # job not found + else: # invalid url + print("no match") self.send_head(http.client.NO_CONTENT) # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- elif self.path == "/render": self.server.stats("", "Receiving render result") + + # need some message content here or the slave doesn't like it + self.wfile.write(bytes("foo", encoding='utf8')) slave_id = self.headers['slave-id'] @@ -574,7 +643,9 @@ class RenderHandler(http.server.BaseHTTPRequestHandler): del buf elif job_result == ERROR: # blacklist slave on this job on error - job.blacklist.append(slave.id) + # slaves might already be in blacklist if errors on the whole chunk + if not slave.id in job.blacklist: + job.blacklist.append(slave.id) self.server.stats("", "Receiving result") @@ -593,33 +664,38 @@ class RenderHandler(http.server.BaseHTTPRequestHandler): else: # invalid slave id self.send_head(http.client.NO_CONTENT) # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - elif self.path == "/log": + elif self.path.startswith("/log"): self.server.stats("", "Receiving log file") + + match = log_pattern.match(self.path) - job_id = self.headers['job-id'] - - job = self.server.getJobID(job_id) - - if job: - job_frame = int(self.headers['job-frame']) + if match: + job_id = match.groups()[0] - frame = job[job_frame] + job = self.server.getJobID(job_id) - if frame and frame.log_path: - length = int(self.headers['content-length']) - buf = self.rfile.read(length) - f = open(frame.log_path, 'ab') - f.write(buf) - f.close() + if job: + job_frame = int(match.groups()[1]) + + frame = job[job_frame] + + if frame and frame.log_path: + length = int(self.headers['content-length']) + buf = self.rfile.read(length) + f = open(frame.log_path, 'ab') + f.write(buf) + f.close() + + del buf - del buf - - self.server.getSeenSlave(self.headers['slave-id']) - - self.send_head() - else: # frame not found + self.server.getSeenSlave(self.headers['slave-id']) + + self.send_head() + else: # frame not found + self.send_head(http.client.NO_CONTENT) + else: # job not found self.send_head(http.client.NO_CONTENT) - else: # job not found + else: # invalid url self.send_head(http.client.NO_CONTENT) class RenderMasterServer(http.server.HTTPServer): @@ -632,9 +708,10 @@ class RenderMasterServer(http.server.HTTPServer): self.job_id = 0 self.path = path + "master_" + str(os.getpid()) + os.sep - self.slave_timeout = 2 + self.slave_timeout = 30 # 30 mins: need a parameter for that self.balancer = netrender.balancing.Balancer() + self.balancer.addRule(netrender.balancing.RatingUsageByCategory(self.getJobs)) self.balancer.addRule(netrender.balancing.RatingUsage()) self.balancer.addException(netrender.balancing.ExcludeQueuedEmptyJob()) self.balancer.addException(netrender.balancing.ExcludeSlavesLimit(self.countJobs, self.countSlaves, limit = 0.9)) @@ -707,6 +784,9 @@ class RenderMasterServer(http.server.HTTPServer): def balance(self): self.balancer.balance(self.jobs) + def getJobs(self): + return self.jobs + def countJobs(self, status = JOB_QUEUED): total = 0 for j in self.jobs: @@ -776,3 +856,5 @@ def runMaster(address, broadcast, path, update_stats, test_break): print("broadcasting address") s.sendto(bytes("%i" % address[1], encoding='utf8'), 0, ('', 8000)) start_time = time.time() + + httpd.server_close() diff --git a/release/scripts/io/netrender/master_html.py b/release/scripts/io/netrender/master_html.py index 2fc6cd66f93..1f530efa7c6 100644 --- a/release/scripts/io/netrender/master_html.py +++ b/release/scripts/io/netrender/master_html.py @@ -16,20 +16,40 @@ # # ##### END GPL LICENSE BLOCK ##### +import os import re - +import shutil from netrender.utils import * +src_folder = os.path.split(__file__)[0] def get(handler): def output(text): handler.wfile.write(bytes(text, encoding='utf8')) + + def head(title): + output("") + output("") +# output("") + output("") + output(title) + output("") + output("") + def link(text, url): return "%s" % (url, text) - def startTable(border=1): - output("" % border) + def startTable(border=1, class_style = None, caption = None): + output("
") + + if caption: + output("" % caption) def headerTable(*headers): output("") @@ -39,8 +59,19 @@ def get(handler): output("") - def rowTable(*data): - output("") + def rowTable(*data, id = None, class_style = None, extra = None): + output("") for c in data: output("") @@ -50,12 +81,43 @@ def get(handler): def endTable(): output("
%s
" + str(c) + "
") - if handler.path == "/html" or handler.path == "/": + if handler.path == "/html/netrender.js": + f = open(os.path.join(src_folder, "netrender.js"), 'rb') + + handler.send_head(content = "text/javascript") + shutil.copyfileobj(f, handler.wfile) + + f.close() + elif handler.path == "/html/netrender.css": + f = open(os.path.join(src_folder, "netrender.css"), 'rb') + + handler.send_head(content = "text/css") + shutil.copyfileobj(f, handler.wfile) + + f.close() + elif handler.path == "/html" or handler.path == "/": handler.send_head(content = "text/html") - output("NetRender") + head("NetRender") output("

Master

") - + + output("""""") + + startTable(caption = "Rules", class_style = "rules") + + headerTable("type", "description", "limit") + + for rule in handler.server.balancer.rules: + rowTable("rating", rule, rule.str_limit() if hasattr(rule, "limit") else " ") + + for rule in handler.server.balancer.priorities: + rowTable("priority", rule, rule.str_limit() if hasattr(rule, "limit") else " ") + + for rule in handler.server.balancer.exceptions: + rowTable("exception", rule, rule.str_limit() if hasattr(rule, "limit") else " ") + + endTable() + output("

Slaves

") startTable() @@ -70,10 +132,15 @@ def get(handler): startTable() headerTable( + " ", + "id", "name", + "category", + "chunks", "priority", "usage", "wait", + "status", "length", "done", "dispatched", @@ -87,14 +154,25 @@ def get(handler): for job in handler.server.jobs: results = job.framesStatus() rowTable( + """""" % job.id + + """""" % job.id, + job.id, link(job.name, "/html/job" + job.id), - job.priority, + job.category if job.category else "None", + str(job.chunks) + + """""" % (job.id, job.chunks + 1) + + """""" % (job.id, job.chunks - 1, "disabled=True" if job.chunks == 1 else ""), + str(job.priority) + + """""" % (job.id, job.priority + 1) + + """""" % (job.id, job.priority - 1, "disabled=True" if job.priority == 1 else ""), "%0.1f%%" % (job.usage * 100), "%is" % int(time.time() - job.last_dispatched), + job.statusText(), len(job), results[DONE], results[DISPATCHED], - results[ERROR], + str(results[ERROR]) + + """""" % (job.id, "disabled=True" if not results[ERROR] else ""), handler.server.balancer.applyPriorities(job), handler.server.balancer.applyExceptions(job) ) @@ -106,48 +184,66 @@ def get(handler): handler.send_head(content = "text/html") job_id = handler.path[9:] - output("NetRender") + head("NetRender") job = handler.server.getJobID(job_id) if job: + output("

Files

") + + startTable() + headerTable("path") + + tot_cache = 0 + tot_fluid = 0 + + for file in job.files: + if file.filepath.endswith(".bphys"): + tot_cache += 1 + elif file.filepath.endswith(".bobj.gz") or file.filepath.endswith(".bvel.gz"): + tot_fluid += 1 + else: + rowTable(file.filepath) + + if tot_cache > 0: + rowTable("%i physic cache files" % tot_cache, class_style = "toggle", extra = "onclick='toggleDisplay(".cache", "none", "table-row")'") + for file in job.files: + if file.filepath.endswith(".bphys"): + rowTable(os.path.split(file.filepath)[1], class_style = "cache") + + if tot_fluid > 0: + rowTable("%i fluid bake files" % tot_fluid, class_style = "toggle", extra = "onclick='toggleDisplay(".fluid", "none", "table-row")'") + for file in job.files: + if file.filepath.endswith(".bobj.gz") or file.filepath.endswith(".bvel.gz"): + rowTable(os.path.split(file.filepath)[1], class_style = "fluid") + + endTable() + + output("

Blacklist

") + + if job.blacklist: + startTable() + headerTable("name", "address") + + for slave_id in job.blacklist: + slave = handler.server.slaves_map[slave_id] + rowTable(slave.name, slave.address[0]) + + endTable() + else: + output("Empty") + output("

Frames

") startTable() - headerTable("no", "status", "render time", "slave", "log") + headerTable("no", "status", "render time", "slave", "log", "result") for frame in job.frames: - rowTable(frame.number, frame.statusText(), "%.1fs" % frame.time, frame.slave.name if frame.slave else " ", link("view log", "/html/log%s_%i" % (job_id, frame.number)) if frame.log_path else " ") + rowTable(frame.number, frame.statusText(), "%.1fs" % frame.time, frame.slave.name if frame.slave else " ", link("view log", logURL(job_id, frame.number)) if frame.log_path else " ", link("view result", renderURL(job_id, frame.number)) if frame.status == DONE else " ") endTable() else: output("no such job") output("") - - elif handler.path.startswith("/html/log"): - handler.send_head(content = "text/plain") - pattern = re.compile("([a-zA-Z0-9]+)_([0-9]+)") - - match = pattern.match(handler.path[9:]) - if match: - job_id = match.groups()[0] - frame_number = int(match.groups()[1]) - - job = handler.server.getJobID(job_id) - - if job: - frame = job[frame_number] - - if frame: - f = open(frame.log_path, 'rb') - - shutil.copyfileobj(f, handler.wfile) - - f.close() - else: - output("no such frame") - else: - output("no such job") - else: - output("malformed url") + diff --git a/release/scripts/io/netrender/model.py b/release/scripts/io/netrender/model.py index cf13fe1e1fa..f541b0c5e1a 100644 --- a/release/scripts/io/netrender/model.py +++ b/release/scripts/io/netrender/model.py @@ -23,13 +23,15 @@ import subprocess, shutil, time, hashlib from netrender.utils import * class LogFile: - def __init__(self, job_id = 0, frames = []): + def __init__(self, job_id = 0, slave_id = 0, frames = []): self.job_id = job_id + self.slave_id = slave_id self.frames = frames def serialize(self): return { "job_id": self.job_id, + "slave_id": self.slave_id, "frames": self.frames } @@ -40,6 +42,7 @@ class LogFile: logfile = LogFile() logfile.job_id = data["job_id"] + logfile.slave_id = data["slave_id"] logfile.frames = data["frames"] return logfile @@ -68,27 +71,28 @@ class RenderSlave: } @staticmethod - def materialize(data): + def materialize(data, cache = True): if not data: return None slave_id = data["id"] - - if slave_id in RenderSlave._slave_map: + + if cache and slave_id in RenderSlave._slave_map: return RenderSlave._slave_map[slave_id] - else: - slave = RenderSlave() - slave.id = slave_id - slave.name = data["name"] - slave.address = data["address"] - slave.stats = data["stats"] - slave.total_done = data["total_done"] - slave.total_error = data["total_error"] - slave.last_seen = data["last_seen"] - + + slave = RenderSlave() + slave.id = slave_id + slave.name = data["name"] + slave.address = data["address"] + slave.stats = data["stats"] + slave.total_done = data["total_done"] + slave.total_error = data["total_error"] + slave.last_seen = data["last_seen"] + + if cache: RenderSlave._slave_map[slave_id] = slave - return slave + return slave JOB_BLENDER = 1 JOB_PROCESS = 2 @@ -98,21 +102,58 @@ JOB_TYPES = { JOB_PROCESS: "Process" } +class RenderFile: + def __init__(self, filepath = "", index = 0, start = -1, end = -1): + self.filepath = filepath + self.index = index + self.start = start + self.end = end + + def serialize(self): + return { + "filepath": self.filepath, + "index": self.index, + "start": self.start, + "end": self.end + } + + @staticmethod + def materialize(data): + if not data: + return None + + rfile = RenderFile(data["filepath"], data["index"], data["start"], data["end"]) + + return rfile + class RenderJob: - def __init__(self): + def __init__(self, job_info = None): self.id = "" self.type = JOB_BLENDER self.name = "" + self.category = "None" + self.status = JOB_WAITING self.files = [] - self.frames = [] self.chunks = 0 self.priority = 0 - self.usage = 0.0 self.blacklist = [] + + self.usage = 0.0 self.last_dispatched = 0.0 - + self.frames = [] + + if job_info: + self.type = job_info.type + self.name = job_info.name + self.category = job_info.category + self.status = job_info.status + self.files = job_info.files + self.chunks = job_info.chunks + self.priority = job_info.priority + self.blacklist = job_info.blacklist + def addFile(self, file_path, start=-1, end=-1): - self.files.append((file_path, start, end)) + self.files.append(RenderFile(file_path, len(self.files), start, end)) def addFrame(self, frame_number, command = ""): frame = RenderFrame(frame_number, command) @@ -133,6 +174,9 @@ class RenderJob: def countSlaves(self): return len(set((frame.slave for frame in self.frames if frame.status == DISPATCHED))) + def statusText(self): + return JOB_STATUS_TEXT[self.status] + def framesStatus(self): results = { QUEUED: 0, @@ -167,7 +211,9 @@ class RenderJob: "id": self.id, "type": self.type, "name": self.name, - "files": [f for f in self.files if f[1] == -1 or not frames or (f[1] <= max_frame and f[2] >= min_frame)], + "category": self.category, + "status": self.status, + "files": [f.serialize() for f in self.files if f.start == -1 or not frames or (f.start <= max_frame and f.end >= min_frame)], "frames": [f.serialize() for f in self.frames if not frames or f in frames], "chunks": self.chunks, "priority": self.priority, @@ -185,7 +231,9 @@ class RenderJob: job.id = data["id"] job.type = data["type"] job.name = data["name"] - job.files = data["files"] + job.category = data["category"] + job.status = data["status"] + job.files = [RenderFile.materialize(f) for f in data["files"]] job.frames = [RenderFrame.materialize(f) for f in data["frames"]] job.chunks = data["chunks"] job.priority = data["priority"] @@ -204,7 +252,7 @@ class RenderFrame: self.command = command def statusText(self): - return STATUS_TEXT[self.status] + return FRAME_STATUS_TEXT[self.status] def serialize(self): return { diff --git a/release/scripts/io/netrender/netrender.css b/release/scripts/io/netrender/netrender.css new file mode 100644 index 00000000000..87de1083315 --- /dev/null +++ b/release/scripts/io/netrender/netrender.css @@ -0,0 +1,75 @@ +body { + background-color:#eee; + font-size:12px; + font-family: "Lucida Sans","Lucida Sans Unicode","Lucida Grande",Lucida,sans-serif; + +} +a { + /*text-decoration:none;*/ + color:#666; +} +a:hover { + color:#000; +} +h2 { + background-color:#ddd; + font-size:120%; + padding:5px; +} + +h2 { + background-color:#ddd; + font-size:110%; + padding:5px; +} + +table { + text-align:center; + border:0; + background-color:#ddd; + padding: 0px; + margin: 0px; +} +thead{ + font-size:90%; + color:#555; + background-color:#ccc; +} +td { + border:0; + padding:2px; + padding-left:10px; + padding-right:10px; + margin-left:20px; + background-color:#ddd; +} +td:hover { + background-color:#ccc; +} +tr { + border:0; +} +button { + color: #111; + width: auto; + height: auto; +} + +.toggle { + text-decoration: underline; + cursor: pointer; +} + + +.cache { + display: none; +} + +.fluid { + display: none; +} + +.rules { + width: 60em; + text-align: left; +} \ No newline at end of file diff --git a/release/scripts/io/netrender/netrender.js b/release/scripts/io/netrender/netrender.js new file mode 100644 index 00000000000..23f9f25c763 --- /dev/null +++ b/release/scripts/io/netrender/netrender.js @@ -0,0 +1,43 @@ +function request(url, data) +{ + xmlhttp = new XMLHttpRequest(); + xmlhttp.open("POST", url, false); + xmlhttp.send(data); + window.location.reload() +} + +function edit(id, info) +{ + request("/edit_" + id, info) +} + +function returnObjById( id ) +{ + if (document.getElementById) + var returnVar = document.getElementById(id); + else if (document.all) + var returnVar = document.all[id]; + else if (document.layers) + var returnVar = document.layers[id]; + return returnVar; +} + +function toggleDisplay( className, value1, value2 ) +{ + style = getStyle(className) + + if (style.style["display"] == value1) { + style.style["display"] = value2; + } else { + style.style["display"] = value1; + } +} + +function getStyle(className) { + var classes = document.styleSheets[0].rules || document.styleSheets[0].cssRules + for(var x=0;x 0: while(len(netsettings.slaves) > 0): @@ -140,11 +152,13 @@ class RENDER_PT_network_slaves(RenderButtonsPanel): @rnaType class RENDER_PT_network_slaves_blacklist(RenderButtonsPanel): bl_label = "Slaves Blacklist" - COMPAT_ENGINES = set(['NET_RENDER']) + COMPAT_ENGINES = {'NET_RENDER'} def poll(self, context): scene = context.scene - return super().poll(context) and scene.network_render.mode == "RENDER_CLIENT" + return (super().poll(context) + and scene.network_render.mode == "RENDER_CLIENT" + and scene.network_render.server_address != "[default]") def draw(self, context): layout = self.layout @@ -156,7 +170,7 @@ class RENDER_PT_network_slaves_blacklist(RenderButtonsPanel): row.template_list(netsettings, "slaves_blacklist", netsettings, "active_blacklisted_slave_index", rows=2) sub = row.column(align=True) - sub.operator("render.netclientwhitelistslave", icon="ICON_ZOOMOUT", text="") + sub.operator("render.netclientwhitelistslave", icon='ZOOMOUT', text="") if len(netrender.blacklist) == 0 and len(netsettings.slaves_blacklist) > 0: while(len(netsettings.slaves_blacklist) > 0): @@ -175,11 +189,13 @@ class RENDER_PT_network_slaves_blacklist(RenderButtonsPanel): @rnaType class RENDER_PT_network_jobs(RenderButtonsPanel): bl_label = "Jobs" - COMPAT_ENGINES = set(['NET_RENDER']) + COMPAT_ENGINES = {'NET_RENDER'} def poll(self, context): scene = context.scene - return super().poll(context) and scene.network_render.mode == "RENDER_CLIENT" + return (super().poll(context) + and scene.network_render.mode == "RENDER_CLIENT" + and scene.network_render.server_address != "[default]") def draw(self, context): layout = self.layout @@ -191,10 +207,10 @@ class RENDER_PT_network_jobs(RenderButtonsPanel): row.template_list(netsettings, "jobs", netsettings, "active_job_index", rows=2) sub = row.column(align=True) - sub.operator("render.netclientstatus", icon="ICON_FILE_REFRESH", text="") - sub.operator("render.netclientcancel", icon="ICON_ZOOMOUT", text="") - sub.operator("render.netclientcancelall", icon="ICON_PANEL_CLOSE", text="") - sub.operator("render.netclientdownload", icon='ICON_RENDER_ANIMATION', text="") + sub.operator("render.netclientstatus", icon='FILE_REFRESH', text="") + sub.operator("render.netclientcancel", icon='ZOOMOUT', text="") + sub.operator("render.netclientcancelall", icon='PANEL_CLOSE', text="") + sub.operator("render.netclientdownload", icon='RENDER_ANIMATION', text="") if len(netrender.jobs) == 0 and len(netsettings.jobs) > 0: while(len(netsettings.jobs) > 0): @@ -264,6 +280,12 @@ NetRenderSettings.StringProperty( attr="job_name", maxlen = 128, default = "[default]") +NetRenderSettings.StringProperty( attr="job_category", + name="Job category", + description="Category of the job", + maxlen = 128, + default = "") + NetRenderSettings.IntProperty( attr="chunks", name="Chunks", description="Number of frame to dispatch to each slave in one chunk", diff --git a/release/scripts/io/netrender/utils.py b/release/scripts/io/netrender/utils.py index e549e872398..3da15a33b65 100644 --- a/release/scripts/io/netrender/utils.py +++ b/release/scripts/io/netrender/utils.py @@ -28,7 +28,7 @@ try: except: bpy = None -VERSION = b"0.5" +VERSION = bytes("0.7", encoding='utf8') # Jobs status JOB_WAITING = 0 # before all data has been entered @@ -36,13 +36,21 @@ JOB_PAUSED = 1 # paused by user JOB_FINISHED = 2 # finished rendering JOB_QUEUED = 3 # ready to be dispatched +JOB_STATUS_TEXT = { + JOB_WAITING: "Waiting", + JOB_PAUSED: "Paused", + JOB_FINISHED: "Finished", + JOB_QUEUED: "Queued" + } + + # Frames status QUEUED = 0 DISPATCHED = 1 DONE = 2 ERROR = 3 -STATUS_TEXT = { +FRAME_STATUS_TEXT = { QUEUED: "Queued", DISPATCHED: "Dispatched", DONE: "Done", @@ -57,40 +65,66 @@ def rnaOperator(rna_op): if bpy: bpy.ops.add(rna_op) return rna_op -def clientScan(): - try: - s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) - s.settimeout(30) +def reporting(report, message, errorType = None): + if errorType: + t = 'ERROR' + else: + t = 'INFO' + + if report: + report(t, message) + return None + elif errorType: + raise errorType(message) + else: + return None - s.bind(('', 8000)) - - buf, address = s.recvfrom(64) - - print("received:", buf) - - address = address[0] - port = int(str(buf, encoding='utf8')) - return (address, port) - except socket.timeout: - print("no server info") - return ("", 8000) # return default values +def clientScan(report = None): + try: + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) + s.settimeout(30) -def clientConnection(address, port): - if address == "[default]": + s.bind(('', 8000)) + + buf, address = s.recvfrom(64) + + address = address[0] + port = int(str(buf, encoding='utf8')) + + reporting(report, "Master server found") + + return (address, port) + except socket.timeout: + reporting(report, "No master server on network", IOError) + + return ("", 8000) # return default values + +def clientConnection(address, port, report = None): + if address == "[default]": # calling operator from python is fucked, scene isn't in context # if bpy: # bpy.ops.render.netclientscan() # else: - address, port = clientScan() - - conn = http.client.HTTPConnection(address, port) - - if clientVerifyVersion(conn): - return conn - else: - conn.close() - return None + address, port = clientScan() + if address == "": + return None + + try: + conn = http.client.HTTPConnection(address, port) + + if conn: + if clientVerifyVersion(conn): + return conn + else: + conn.close() + reporting(report, "Incorrect master version", ValueError) + except Exception as err: + if report: + report('ERROR', str(err)) + return None + else: + raise def clientVerifyVersion(conn): conn.request("GET", "/version") @@ -104,11 +138,23 @@ def clientVerifyVersion(conn): if server_version != VERSION: print("Incorrect server version!") - print("expected", VERSION, "received", server_version) + print("expected", str(VERSION, encoding='utf8'), "received", str(server_version, encoding='utf8')) return False return True +def fileURL(job_id, file_index): + return "/file_%s_%i" % (job_id, file_index) + +def logURL(job_id, frame_number): + return "/log_%s_%i.log" % (job_id, frame_number) + +def renderURL(job_id, frame_number): + return "/render_%s_%i.exr" % (job_id, frame_number) + +def cancelURL(job_id): + return "/cancel_%s" % (job_id) + def prefixPath(prefix_directory, file_path, prefix_path): if os.path.isabs(file_path): # if an absolute path, make sure path exists, if it doesn't, use relative local path diff --git a/release/scripts/modules/bpy/__init__.py b/release/scripts/modules/bpy/__init__.py index 7dfa403a54f..8e7e74e2743 100644 --- a/release/scripts/modules/bpy/__init__.py +++ b/release/scripts/modules/bpy/__init__.py @@ -36,6 +36,7 @@ ops = _ops_module.ops_fake_module import sys DEBUG = ("-d" in sys.argv) + def load_scripts(reload_scripts=False): import os import traceback @@ -47,7 +48,7 @@ def load_scripts(reload_scripts=False): def test_import(module_name): try: t = time.time() - ret= __import__(module_name) + ret = __import__(module_name) if DEBUG: print("time %s %.4f" % (module_name, time.time() - t)) return ret @@ -78,6 +79,7 @@ def load_scripts(reload_scripts=False): if DEBUG: print("Time %.4f" % (time.time() - t_main)) + def _main(): # a bit nasty but this prevents help() and input() from locking blender @@ -99,5 +101,3 @@ def _main(): load_scripts() _main() - - diff --git a/release/scripts/modules/bpy/ops.py b/release/scripts/modules/bpy/ops.py index c8ca9bc77fc..93c0d719580 100644 --- a/release/scripts/modules/bpy/ops.py +++ b/release/scripts/modules/bpy/ops.py @@ -134,7 +134,6 @@ class bpy_ops_submodule_op(object): __keys__ = ('module', 'func') - def _get_doc(self): return op_as_string(self.idname()) diff --git a/release/scripts/modules/bpy/utils.py b/release/scripts/modules/bpy/utils.py index 76e8b011628..1948a28a726 100644 --- a/release/scripts/modules/bpy/utils.py +++ b/release/scripts/modules/bpy/utils.py @@ -21,6 +21,7 @@ import bpy import os + def expandpath(path): if path.startswith("//"): return os.path.join(os.path.dirname(bpy.data.filename), path[2:]) @@ -44,20 +45,40 @@ _unclean_chars = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, \ _unclean_chars = ''.join([chr(i) for i in _unclean_chars]) + def clean_name(name, replace="_"): ''' All characters besides A-Z/a-z, 0-9 are replaced with "_" or the replace argumet if defined. ''' for ch in _unclean_chars: - name = name.replace(ch, replace) + name = name.replace(ch, replace) return name +def display_name(name): + ''' + Only capitalize all lowercase names, mixed case use them as is. + should work with filenames and module names. + ''' + name_base = os.path.splitext(name)[0] + + # string replacements + name_base = name_base.replace("_colon_", ":") + + name_base = name_base.replace("_", " ") + + if name_base.lower() == name_base: + return ' '.join([w[0].upper() + w[1:] for w in name_base.split()]) + else: + return name_base + + # base scripts _scripts = os.path.join(os.path.dirname(__file__), os.path.pardir, os.path.pardir) _scripts = (os.path.normpath(_scripts), ) + def script_paths(*args): scripts = list(_scripts) @@ -88,6 +109,7 @@ def script_paths(*args): _presets = os.path.join(_scripts[0], "presets") # FIXME - multiple paths + def preset_paths(subdir): ''' Returns a list of paths for a spesific preset. diff --git a/release/scripts/modules/bpy_types.py b/release/scripts/modules/bpy_types.py index 9e4f3c9f836..2351fa8b091 100644 --- a/release/scripts/modules/bpy_types.py +++ b/release/scripts/modules/bpy_types.py @@ -76,7 +76,8 @@ class _GenericBone: @property def basename(self): - return self.name.rsplit(".", 1)[0] + #return self.name.rsplit(".", 1)[0] + return self.name.split(".")[0] @property def parent_recursive(self): @@ -93,13 +94,17 @@ class _GenericBone: @property def length(self): - return (self.head - self.tail).length + return self.vector.length @length.setter def length(self, value): """The distance from head to tail""" self.tail = self.head + ((self.tail - self.head).normalize() * value) + @property + def vector(self): + return (self.tail - self.head) + @property def children(self): return [child for child in self._other_bones if child.parent == self] @@ -171,6 +176,15 @@ class Bone(StructRNA, _GenericBone): class EditBone(StructRNA, _GenericBone): __slots__ = () + def align_orientation(self, other): + ''' + Align this bone to another by moving its tail and settings its roll + the length of the other bone is not used. + ''' + vec = other.vector.normalize() * self.length + self.tail = self.head + vec + self.roll = other.roll + def ord_ind(i1, i2): if i1 < i2: @@ -229,6 +243,82 @@ class Mesh(bpy_types.ID): edge_face_count_dict = self.edge_face_count_dict return [edge_face_count_dict.get(ed.key, 0) for ed in mesh.edges] + def edge_loops(self, faces=None, seams=()): + ''' + Edge loops defined by faces + + Takes me.faces or a list of faces and returns the edge loops + These edge loops are the edges that sit between quads, so they dont touch + 1 quad, note: not connected will make 2 edge loops, both only containing 2 edges. + + return a list of edge key lists + [ [(0,1), (4, 8), (3,8)], ...] + + optionaly, seams are edge keys that will be removed + ''' + + OTHER_INDEX = 2,3,0,1 # opposite face index + + if faces is None: + faces= self.faces + + edges = {} + + for f in faces: +# if len(f) == 4: + if f.verts_raw[3] != 0: + edge_keys = f.edge_keys + for i, edkey in enumerate(f.edge_keys): + edges.setdefault(edkey, []).append(edge_keys[OTHER_INDEX[i]]) + + for edkey in seams: + edges[edkey] = [] + + # Collect edge loops here + edge_loops = [] + + for edkey, ed_adj in edges.items(): + if 0 . +# + """Package for console specific modules.""" diff --git a/release/scripts/modules/console/complete_calltip.py b/release/scripts/modules/console/complete_calltip.py index 486f9469d60..c4687b4f10b 100644 --- a/release/scripts/modules/console/complete_calltip.py +++ b/release/scripts/modules/console/complete_calltip.py @@ -13,6 +13,8 @@ # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . +# + import inspect import re diff --git a/release/scripts/modules/console/complete_import.py b/release/scripts/modules/console/complete_import.py index 9166dee2bb2..875c557f497 100644 --- a/release/scripts/modules/console/complete_import.py +++ b/release/scripts/modules/console/complete_import.py @@ -21,6 +21,8 @@ # the file COPYING, distributed as part of this software. #***************************************************************************** +# + """Completer for import statements Original code was from IPython/Extensions/ipy_completers.py. The following @@ -69,10 +71,13 @@ def get_root_modules(): modules += sys.builtin_module_names + # needed for modules defined in C + modules += sys.modules.keys() + modules = list(set(modules)) if '__init__' in modules: modules.remove('__init__') - modules = sorted(set(modules)) + modules = sorted(modules) if store: ROOT_MODULES = modules return modules diff --git a/release/scripts/modules/console/complete_namespace.py b/release/scripts/modules/console/complete_namespace.py index 4aa0de558f2..7a9fd331e49 100644 --- a/release/scripts/modules/console/complete_namespace.py +++ b/release/scripts/modules/console/complete_namespace.py @@ -13,6 +13,8 @@ # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . +# + """Autocomplete with the standard library""" import re diff --git a/release/scripts/modules/console/intellisense.py b/release/scripts/modules/console/intellisense.py index 686b3e7294b..96896d5fd0e 100644 --- a/release/scripts/modules/console/intellisense.py +++ b/release/scripts/modules/console/intellisense.py @@ -13,6 +13,8 @@ # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . +# + """This module provides intellisense features such as: * autocompletion diff --git a/release/scripts/modules/graphviz_export.py b/release/scripts/modules/graphviz_export.py index 8f9f2c01ad5..f39095b9eba 100644 --- a/release/scripts/modules/graphviz_export.py +++ b/release/scripts/modules/graphviz_export.py @@ -48,10 +48,10 @@ def compat_str(text, line_length=0): #text = text.replace(']', ']\n') text = text.replace("\n", "\\n") text = text.replace('"', '\\"') - return "* " + text + return text -def graph_armature(obj, path, FAKE_PARENT=True, CONSTRAINTS=True, DRIVERS=True, XTRA_INFO=False): +def graph_armature(obj, path, FAKE_PARENT=True, CONSTRAINTS=True, DRIVERS=True, XTRA_INFO=True): CONSTRAINTS = DRIVERS = True fileobject = open(path, "w") @@ -131,7 +131,7 @@ def graph_armature(obj, path, FAKE_PARENT=True, CONSTRAINTS=True, DRIVERS=True, if XTRA_INFO: label = "%s\n%s" % (constraint.type, constraint.name) opts.append('label="%s"' % compat_str(label)) - fw('"%s" -> "%s" [%s] ;\n' % (subtarget, pbone.name, ','.join(opts))) + fw('"%s" -> "%s" [%s] ;\n' % (pbone.name, subtarget, ','.join(opts))) # Drivers if DRIVERS: @@ -150,16 +150,16 @@ def graph_armature(obj, path, FAKE_PARENT=True, CONSTRAINTS=True, DRIVERS=True, if animation_data: fcurve_drivers = [fcurve_driver for fcurve_driver in animation_data.drivers] - fcurve_drivers.sort(key=lambda fcurve_driver: fcurve_driver.rna_path) + fcurve_drivers.sort(key=lambda fcurve_driver: fcurve_driver.data_path) for fcurve_driver in fcurve_drivers: - rna_path = fcurve_driver.rna_path + rna_path = fcurve_driver.data_path pbone = rna_path_as_pbone(rna_path) if pbone: for target in fcurve_driver.driver.targets: - pbone_target = rna_path_as_pbone(target.rna_path) - rna_path_target = target.rna_path + pbone_target = rna_path_as_pbone(target.data_path) + rna_path_target = target.data_path if pbone_target: opts = ['dir=forward', "weight=1", "arrowhead=normal", "arrowtail=none", "constraint=false", 'color="blue"', "labelfontsize=4"] # , display_source = rna_path.replace("pose.bones", "") diff --git a/release/scripts/modules/retopo.py b/release/scripts/modules/retopo.py index e554881c87b..15c4c504b32 100644 --- a/release/scripts/modules/retopo.py +++ b/release/scripts/modules/retopo.py @@ -99,11 +99,11 @@ class Hub(object): return True for i, l_a in enumerate(self.links): - links_a = set([l.index for l in l_a.links]) + links_a = {l.index for l in l_a.links} for j in range(i): l_b = self.links[j] - links_b = set([l.index for l in l_b.links]) + links_b = {l.index for l in l_b.links} isect = links_a.intersection(links_b) if len(isect) == 2: diff --git a/release/scripts/modules/rigify/__init__.py b/release/scripts/modules/rigify/__init__.py index c67af38df8a..95ae2fed76c 100644 --- a/release/scripts/modules/rigify/__init__.py +++ b/release/scripts/modules/rigify/__init__.py @@ -23,373 +23,162 @@ from Mathutils import Vector # TODO, have these in a more general module from rna_prop_ui import rna_idprop_ui_prop_get - -empty_layer = [False] * 32 +SPECIAL_TYPES = "root", +LAYER_TYPES = "main", "extra", "ik", "fk" -def auto_class(slots, name="ContainerClass", class_dict=None): +class RigifyError(Exception): + """Exception raised for errors in the metarig. + """ - if class_dict: - class_dict = class_dict.copy() - else: - class_dict = {} + def __init__(self, message): + self.message = message - class_dict["__slots__"] = tuple(slots) - - return type(name, (object,), class_dict) + def __str__(self): + return repr(self.message) -def auto_class_instance(slots, name="ContainerClass", class_dict=None): - return auto_class(slots, name, class_dict)() +def submodule_func_from_type(bone_type): + type_pair = bone_type.split(".") + + # 'leg.ik' will look for an ik function in the leg module + # 'leg' will look up leg.main + if len(type_pair) == 1: + type_pair = type_pair[0], "main" + + type_name, func_name = type_pair + + # from rigify import leg + try: + submod = __import__(name="%s.%s" % (__package__, type_name), fromlist=[type_name]) + except ImportError: + raise RigifyError("python module for type '%s' not found" % type_name) + + reload(submod) + return type_name, submod, getattr(submod, func_name) -def _bone_class_instance_update(self): - ''' Re-Assigns bones from the blender data +def get_submodule_types(): + import os + submodules = [] + files = os.listdir(os.path.dirname(__file__)) + for f in files: + if not f.startswith("_") and f.endswith(".py"): + submodules.append(f[:-3]) + + return sorted(submodules) + + +def get_bone_type_options(pbone, type_name): + options = {} + bone_name = pbone.name + for key, value in pbone.items(): + key_pair = key.split(".") + if key_pair[0] == type_name: + if len(key_pair) != 2: + raise RigifyError("option error for bone '%s', property name was not a pair '%s'" % (bone_name, key_pair)) + options[key_pair[1]] = value + + return options + + +def get_layer_dict(options): ''' - arm = self.obj.data - bbones = arm.bones - pbones = self.obj.pose.bones - ebones = arm.edit_bones - - for member in self.attr_names: - name = getattr(self, member, None) - if name is not None: - setattr(self, member + "_b", bbones.get(name, None)) - setattr(self, member + "_p", pbones.get(name, None)) - setattr(self, member + "_e", ebones.get(name, None)) - - -def _bone_class_instance_rename(self, attr, new_name): - ''' Rename bones, editmode only + Extracts layer info from a bone options dict + defaulting to the layer index if not set. ''' - - if self.obj.mode != 'EDIT': - raise Exception("Only rename in editmode supported") - - ebone = getattr(self, attr + "_e") - ebone.name = new_name - - # we may not get what is asked for so get the name from the editbone - setattr(self, attr, ebone.name) + layer_default = [False] * 32 + result = {} + for i, layer_type in enumerate(LAYER_TYPES): + # no matter if its not defined + layer_index = options.get("layer_" + layer_type, i + 2) + layer = layer_default[:] + layer[layer_index-1] = True + result[layer_type] = layer + return result -def _bone_class_instance_copy(self, from_prefix="", to_prefix=""): - from_name_ls = [] - new_name_ls = [] - new_slot_ls = [] +def validate_rig(context, obj): + ''' + Makes no changes + only runs the metarig definitions and reports errors + ''' + type_found = False - for attr in self.attr_names: - bone_name_orig = getattr(self, attr) - ebone = getattr(self, attr + "_e") - # orig_names[attr] = bone_name_orig + for pbone in obj.pose.bones: + bone_name = pbone.name + bone_type = pbone.get("type", "") - # insert prefix - if from_prefix: - bone_name = from_prefix + bone_name_orig - ebone.name = bone_name - bone_name = ebone.name # cant be sure we get what we ask for + if bone_type: + bone_type_list = [bt for bt in bone_type.replace(",", " ").split()] else: - bone_name = bone_name_orig + bone_type_list = [] - setattr(self, attr, bone_name) + for bone_type in bone_type_list: + if bone_type.split(".")[0] in SPECIAL_TYPES: + continue - new_slot_ls.append(attr) - from_name_ls.append(bone_name) - bone_name_orig = bone_name_orig.replace("ORG-", "") # XXX - we need a better way to do this - new_name_ls.append(to_prefix + bone_name_orig) + type_name, submod, type_func = submodule_func_from_type(bone_type) + reload(submod) + submod.metarig_definition(obj, bone_name) + type_found = True - new_bones = copy_bone_simple_list(self.obj.data, from_name_ls, new_name_ls, True) - new_bc = bone_class_instance(self.obj, new_slot_ls) + get_bone_type_options(pbone, bone_type) - for i, attr in enumerate(new_slot_ls): - ebone = new_bones[i] - setattr(new_bc, attr + "_e", ebone) - setattr(new_bc, attr, ebone.name) + # missing, - check for duplicate root bone. - return new_bc + if not type_found: + raise RigifyError("This rig has no 'type' properties defined on any pose bones, nothing to do") -def _bone_class_instance_names(self): - return [getattr(self, attr) for attr in self.attr_names] - - -def _bone_class_instance_blend(self, from_bc, to_bc, target_bone=None, target_prop="blend"): +def generate_rig(context, obj_orig, prefix="ORG-", META_DEF=True): ''' - Use for blending bone chains. - - blend_target = (bone_name, bone_property) - default to the last bone, blend prop - - XXX - toggles editmode, need to re-validate all editbones :( + Main function for generating ''' - - if self.attr_names != from_bc.attr_names or self.attr_names != to_bc.attr_names: - raise Exception("can only blend between matching chains") - - apply_bones = [getattr(self, attr) for attr in self.attr_names] - from_bones = [getattr(from_bc, attr) for attr in from_bc.attr_names] - to_bones = [getattr(to_bc, attr) for attr in to_bc.attr_names] - - blend_bone_list(self.obj, apply_bones, from_bones, to_bones, target_bone, target_prop) - - -def bone_class_instance(obj, slots, name="BoneContainer"): - attr_names = tuple(slots) # dont modify the original - slots = list(slots) # dont modify the original - for i in range(len(slots)): - member = slots[i] - slots.append(member + "_b") # bone bone - slots.append(member + "_p") # pose bone - slots.append(member + "_e") # edit bone - - class_dict = { \ - "obj": obj, \ - "attr_names": attr_names, \ - "update": _bone_class_instance_update, \ - "rename": _bone_class_instance_rename, \ - "names": _bone_class_instance_names, \ - "copy": _bone_class_instance_copy, \ - "blend": _bone_class_instance_blend, \ - } - - instance = auto_class_instance(slots, name, class_dict) - return instance - - -def get_bone_data(obj, bone_name): - arm = obj.data - pbone = obj.pose.bones[bone_name] - if obj.mode == 'EDIT': - bone = arm.edit_bones[bone_name] - else: - bone = arm.bones[bone_name] - - return arm, pbone, bone - - -def copy_bone_simple(arm, from_bone, name, parent=False): - ebone = arm.edit_bones[from_bone] - ebone_new = arm.edit_bones.new(name) - - if parent: - ebone_new.connected = ebone.connected - ebone_new.parent = ebone.parent - - ebone_new.head = ebone.head - ebone_new.tail = ebone.tail - ebone_new.roll = ebone.roll - return ebone_new - - -def copy_bone_simple_list(arm, from_bones, to_bones, parent=False): - - if len(from_bones) != len(to_bones): - raise Exception("bone list sizes must match") - - copy_bones = [copy_bone_simple(arm, bone_name, to_bones[i], True) for i, bone_name in enumerate(from_bones)] - - # now we need to re-parent - for ebone in copy_bones: - parent = ebone.parent - if parent: - try: - i = from_bones.index(parent.name) - except: - i = -1 - - if i == -1: - ebone.parent = None - else: - ebone.parent = copy_bones[i] - - return copy_bones - - -def blend_bone_list(obj, apply_bones, from_bones, to_bones, target_bone=None, target_prop="blend"): - - if obj.mode == 'EDIT': - raise Exception("blending cant be called in editmode") - - # setup the blend property - if target_bone is None: - target_bone = apply_bones[-1] # default to the last bone - - prop_pbone = obj.pose.bones[target_bone] - if prop_pbone.get(target_bone, None) is None: - prop = rna_idprop_ui_prop_get(prop_pbone, target_prop, create=True) - prop_pbone[target_prop] = 0.5 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - - driver_path = prop_pbone.path_to_id() + ('["%s"]' % target_prop) - - def blend_target(driver): - tar = driver.targets.new() - tar.name = target_bone - tar.id_type = 'OBJECT' - tar.id = obj - tar.rna_path = driver_path - - def blend_location(new_pbone, from_bone_name, to_bone_name): - con = new_pbone.constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = from_bone_name - - con = new_pbone.constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = to_bone_name - - fcurve = con.driver_add("influence", 0) - driver = fcurve.driver - driver.type = 'AVERAGE' - fcurve.modifiers.remove(0) # grr dont need a modifier - - blend_target(driver) - - def blend_rotation(new_pbone, from_bone_name, to_bone_name): - con = new_pbone.constraints.new('COPY_ROTATION') - con.target = obj - con.subtarget = from_bone_name - - con = new_pbone.constraints.new('COPY_ROTATION') - con.target = obj - con.subtarget = to_bone_name - - fcurve = con.driver_add("influence", 0) - driver = fcurve.driver - driver.type = 'AVERAGE' - fcurve.modifiers.remove(0) # grr dont need a modifier - - blend_target(driver) - - for i, new_bone_name in enumerate(apply_bones): - from_bone_name = from_bones[i] - to_bone_name = to_bones[i] - - # allow skipping some bones by having None in the list - if None in (new_bone_name, from_bone_name, to_bone_name): - continue - - new_pbone = obj.pose.bones[new_bone_name] - - if not new_pbone.bone.connected: - blend_location(new_pbone, from_bone_name, to_bone_name) - - blend_rotation(new_pbone, from_bone_name, to_bone_name) - - -def add_stretch_to(obj, from_name, to_name, name): - ''' - Adds a bone that stretches from one to another - ''' - - mode_orig = obj.mode - bpy.ops.object.mode_set(mode='EDIT') - - arm = obj.data - stretch_ebone = arm.edit_bones.new(name) - stretch_name = stretch_ebone.name - del name - - head = stretch_ebone.head = arm.edit_bones[from_name].head.copy() - #tail = stretch_ebone.tail = arm.edit_bones[to_name].head.copy() - - # annoying exception for zero length bones, since its using stretch_to the rest pose doesnt really matter - #if (head - tail).length < 0.1: - if 1: - tail = stretch_ebone.tail = arm.edit_bones[from_name].tail.copy() - - - # Now for the constraint - bpy.ops.object.mode_set(mode='OBJECT') - - stretch_pbone = obj.pose.bones[stretch_name] - - con = stretch_pbone.constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = from_name - - con = stretch_pbone.constraints.new('STRETCH_TO') - con.target = obj - con.subtarget = to_name - con.original_length = (head - tail).length - con.keep_axis = 'PLANE_X' - con.volume = 'NO_VOLUME' - - bpy.ops.object.mode_set(mode=mode_orig) - - -def add_pole_target_bone(obj, base_name, name, mode='CROSS'): - ''' - Does not actually create a poll target, just the bone to use as a poll target - ''' - mode_orig = obj.mode - bpy.ops.object.mode_set(mode='EDIT') - - arm = obj.data - - poll_ebone = arm.edit_bones.new(base_name + "_poll") - base_ebone = arm.edit_bones[base_name] - poll_name = poll_ebone.name - parent_ebone = base_ebone.parent - - base_head = base_ebone.head.copy() - base_tail = base_ebone.tail.copy() - base_dir = base_head - base_tail - - parent_head = parent_ebone.head.copy() - parent_tail = parent_ebone.tail.copy() - parent_dir = parent_head - parent_tail - - distance = (base_dir.length + parent_dir.length) - - if mode == 'CROSS': - offset = base_dir.copy().normalize() - parent_dir.copy().normalize() - offset.length = distance - else: - offset = Vector(0, 0, 0) - if mode[0] == "+": - val = distance - else: - val = - distance - - setattr(offset, mode[1].lower(), val) - - poll_ebone.head = base_head + offset - poll_ebone.tail = base_head + (offset * (1.0 - (1.0 / 4.0))) - - bpy.ops.object.mode_set(mode=mode_orig) - - return poll_name - - -def generate_rig(context, obj_orig, prefix="ORG-"): from collections import OrderedDict + import rigify_utils + reload(rigify_utils) + + # Not needed but catches any errors before duplicating + validate_rig(context, obj_orig) global_undo = context.user_preferences.edit.global_undo context.user_preferences.edit.global_undo = False + mode_orig = context.mode + rest_backup = obj_orig.data.pose_position + obj_orig.data.pose_position = 'REST' + bpy.ops.object.mode_set(mode='OBJECT') + scene = context.scene # copy object and data obj_orig.selected = False obj = obj_orig.copy() obj.data = obj_orig.data.copy() - scene = context.scene scene.objects.link(obj) scene.objects.active = obj obj.selected = True + if META_DEF: + obj_def = obj_orig.copy() + obj_def.data = obj_orig.data.copy() + scene.objects.link(obj_def) + arm = obj.data # original name mapping base_names = {} + # add all new parentless children to this bone + root_bone = None + bpy.ops.object.mode_set(mode='EDIT') for bone in arm.edit_bones: bone_name = bone.name - bone.name = prefix + bone_name + if obj.pose.bones[bone_name].get("type", "") != "root": + bone.name = prefix + bone_name base_names[bone.name] = bone_name # new -> old mapping bpy.ops.object.mode_set(mode='OBJECT') @@ -404,43 +193,53 @@ def generate_rig(context, obj_orig, prefix="ORG-"): # each function is from the module. eg leg.ik, arm.main bone_typeinfos = {} + # key: bone name + # value: [new_bone_name, ...] + # where each bone with a 'type' stores a list of bones that it created + # ...needed so we can override the root parent + bone_genesis = {} + + # inspect all bones and assign their definitions before modifying for pbone in obj.pose.bones: bone_name = pbone.name - bone_type = obj.pose.bones[bone_name].get("type", "") - bone_type_list = [bt for bt in bone_type.replace(",", " ").split()] + bone_type = pbone.get("type", "") + if bone_type: + bone_type_list = [bt for bt in bone_type.replace(",", " ").split()] + + # not essential but means running autorig again wont do anything + del pbone["type"] + else: + bone_type_list = [] + + if bone_type_list == ["root"]: # special case! + if root_bone: + raise RigifyError("cant have more then 1 root bone, found '%s' and '%s' to have type==root" % (root_bone, bone_name)) + root_bone = bone_name + bone_type_list[:] = [] for bone_type in bone_type_list: - type_pair = bone_type.split(".") - - # 'leg.ik' will look for an ik function in the leg module - # 'leg' will look up leg.main - if len(type_pair) == 1: - type_pair = type_pair[0], "main" - - submod_name, func_name = type_pair - - # from rigify import leg - submod = __import__(name="%s.%s" % (__package__, submod_name), fromlist=[submod_name]) + type_name, submod, type_func = submodule_func_from_type(bone_type) reload(submod) bone_def_dict = bone_definitions.setdefault(bone_name, {}) # Only calculate bone definitions once - if submod_name not in bone_def_dict: - metarig_definition_func = getattr(submod, "metarig_definition") - bone_def_dict[submod_name] = metarig_definition_func(obj, bone_name) - + if type_name not in bone_def_dict: + bone_def_dict[type_name] = submod.metarig_definition(obj, bone_name) bone_typeinfo = bone_typeinfos.setdefault(bone_name, []) + bone_typeinfo.append((type_name, type_func)) - type_func = getattr(submod, func_name) - bone_typeinfo.append((submod_name, type_func)) + # sort bones, not needed but gives more pradictable execution which may be useful in rare cases + bones_sorted = obj.pose.bones.values() + bones_sorted.sort(key=lambda pbone: pbone.name) # first sort by names + bones_sorted.sort(key=lambda pbone: len(pbone.parent_recursive)) # parents before children # now we have all the info about bones we can start operating on them - - for pbone in obj.pose.bones: + # for pbone in obj.pose.bones: + for pbone in bones_sorted: bone_name = pbone.name if bone_name not in bone_typeinfos: @@ -452,101 +251,119 @@ def generate_rig(context, obj_orig, prefix="ORG-"): # leg.ik and arm.fk could not be blended. results = OrderedDict() - for submod_name, type_func in bone_typeinfos[bone_name]: + bone_names_pre = {bone.name for bone in arm.bones} + + for type_name, type_func in bone_typeinfos[bone_name]: # this bones definition of the current typeinfo - definition = bone_def_dict[submod_name] + definition = bone_def_dict[type_name] + options = get_bone_type_options(pbone, type_name) bpy.ops.object.mode_set(mode='EDIT') - ret = type_func(obj, definition, base_names) + ret = type_func(obj, definition, base_names, options) bpy.ops.object.mode_set(mode='OBJECT') if ret: - result_submod = results.setdefault(submod_name, []) + result_submod = results.setdefault(type_name, []) if result_submod and len(result_submod[-1]) != len(ret): - raise Exception("bone lists not compatible: %s, %s" % (result_submod[-1], ret)) + raise RigifyError("bone lists not compatible: %s, %s" % (result_submod[-1], ret)) result_submod.append(ret) for result_submod in results.values(): # blend 2 chains - definition = bone_def_dict[submod_name] + definition = bone_def_dict[type_name] if len(result_submod) == 2: - blend_bone_list(obj, definition, result_submod[0], result_submod[1]) + blend_bone_list(obj, definition, result_submod[0], result_submod[1], target_bone=bone_name) - # needed to update driver deps - # context.scene.update() + + bone_names_post = {bone.name for bone in arm.bones} + + # Store which bones were created from this one + bone_genesis[bone_name] = list(bone_names_post - bone_names_pre) + + # need a reverse lookup on bone_genesis so as to know immediately + # where a bone comes from + bone_genesis_reverse = {} + for bone_name, bone_children in bone_genesis.items(): + for bone_child_name in bone_children: + bone_genesis_reverse[bone_child_name] = bone_name + + + if root_bone: + # assign all new parentless bones to this + + bpy.ops.object.mode_set(mode='EDIT') + root_ebone = arm.edit_bones[root_bone] + for ebone in arm.edit_bones: + bone_name = ebone.name + if ebone.parent is None and bone_name not in base_names: + # check for override + bone_creator = bone_genesis_reverse[bone_name] + pbone_creator = obj.pose.bones[bone_creator] + root_bone_override = pbone_creator.get("root", "") + + if root_bone_override: + root_ebone_tmp = arm.edit_bones[root_bone_override] + else: + root_ebone_tmp = root_ebone + + ebone.connected = False + ebone.parent = root_ebone_tmp + + bpy.ops.object.mode_set(mode='OBJECT') + + + if META_DEF: + # for pbone in obj_def.pose.bones: + for bone_name, bone_name_new in base_names.items(): + #pbone_from = bone_name + pbone = obj_def.pose.bones[bone_name_new] + + con = pbone.constraints.new('COPY_ROTATION') + con.target = obj + con.subtarget = bone_name + + if not pbone.bone.connected: + con = pbone.constraints.new('COPY_LOCATION') + con.target = obj + con.subtarget = bone_name + + # would be 'REST' from when copied + obj_def.data.pose_position = 'POSE' + + # todo - make a more generic system? + layer_tot = [False] * 32 + layer_last = layer_tot[:] + layer_last[31] = True + layer_second_last = layer_tot[:] + layer_second_last[30] = True + + for bone_name, bone in arm.bones.items(): + if bone_name.startswith(prefix): + bone.layer = layer_last + elif bone_name.startswith("MCH"): # XXX fixme + bone.layer = layer_second_last + + layer_tot[:] = [max(lay) for lay in zip(layer_tot, bone.layer)] # Only for demo'ing + arm.layer = layer_tot + # obj.restrict_view = True obj.data.draw_axes = False + bpy.ops.object.mode_set(mode=mode_orig) + obj_orig.data.pose_position = rest_backup + obj.data.pose_position = 'POSE' context.user_preferences.edit.global_undo = global_undo return obj -def write_meta_rig(obj, func_name="metarig_template"): - ''' Must be in editmode - ''' - code = [] - - code.append("def %s():" % func_name) - code.append(" # generated by rigify.write_meta_rig") - bpy.ops.object.mode_set(mode='EDIT') - code.append(" bpy.ops.object.mode_set(mode='EDIT')") - - code.append(" obj = bpy.context.object") - code.append(" arm = obj.data") - - arm = obj.data - # write parents first - bones = [(len(bone.parent_recursive), bone.name) for bone in arm.edit_bones] - bones.sort(key=lambda item: item[0]) - bones = [item[1] for item in bones] - - - for bone_name in bones: - bone = arm.edit_bones[bone_name] - code.append(" bone = arm.edit_bones.new('%s')" % bone.name) - code.append(" bone.head[:] = %.4f, %.4f, %.4f" % bone.head.toTuple(4)) - code.append(" bone.tail[:] = %.4f, %.4f, %.4f" % bone.tail.toTuple(4)) - code.append(" bone.roll = %.4f" % bone.roll) - code.append(" bone.connected = %s" % str(bone.connected)) - if bone.parent: - code.append(" bone.parent = arm.edit_bones['%s']" % bone.parent.name) - - bpy.ops.object.mode_set(mode='OBJECT') - code.append("") - code.append(" bpy.ops.object.mode_set(mode='OBJECT')") - - for bone_name in bones: - pbone = obj.pose.bones[bone_name] - pbone_written = False - - # Only 1 level of props, simple types supported - for key, value in pbone.items(): - if key.startswith("_"): - continue - - if type(value) not in (float, str, int): - print("Unsupported ID Prop:", str((key, value))) - continue - - if type(value) == str: - value = "'" + value + "'" - - if not pbone_written: # only write bones we need - code.append(" pbone = obj.pose.bones['%s']" % bone_name) - - code.append(" pbone['%s'] = %s" % (key, value)) - - return "\n".join(code) - - -def generate_test(context): +def generate_test(context, metarig_type="", GENERATE_FINAL=True): import os new_objects = [] @@ -558,53 +375,62 @@ def generate_test(context): obj_new.data = armature scene.objects.link(obj_new) scene.objects.active = obj_new + for obj in scene.objects: + obj.selected = False + obj_new.selected = True - files = os.listdir(os.path.dirname(__file__)) - for f in files: - if f.startswith("_"): + for module_name in get_submodule_types(): + if (metarig_type and module_name != metarig_type): continue - if not f.endswith(".py"): + # XXX workaround!, problem with updating the pose matrix. + if module_name == "delta": continue - module_name = f[:-3] - submodule = __import__(name="%s.%s" % (__package__, module_name), fromlist=[module_name]) + type_name, submodule, func = submodule_func_from_type(module_name) metarig_template = getattr(submodule, "metarig_template", None) if metarig_template: create_empty_armature("meta_" + module_name) # sets active metarig_template() - obj = context.object - obj_new = generate_rig(context, obj) + obj = context.active_object + obj.location = scene.cursor_location - new_objects.append((obj, obj_new)) + if GENERATE_FINAL: + obj_new = generate_rig(context, obj) + new_objects.append((obj, obj_new)) + else: + new_objects.append((obj, None)) else: print("note: rig type '%s' has no metarig_template(), can't test this", module_name) return new_objects -def generate_test_all(context): +def generate_test_all(context, GRAPH=False): import rigify + import rigify_utils import graphviz_export import os reload(rigify) + reload(rigify_utils) reload(graphviz_export) new_objects = rigify.generate_test(context) - base_name = os.path.splitext(bpy.data.filename)[0] - for obj, obj_new in new_objects: - for obj in (obj, obj_new): - fn = base_name + "-" + bpy.utils.clean_name(obj.name) + if GRAPH: + base_name = os.path.splitext(bpy.data.filename)[0] + for obj, obj_new in new_objects: + for obj in (obj, obj_new): + fn = base_name + "-" + bpy.utils.clean_name(obj.name) - path_dot = fn + ".dot" - path_png = fn + ".png" - saved = graphviz_export.graph_armature(obj, path_dot, CONSTRAINTS=True, DRIVERS=True) + path_dot = fn + ".dot" + path_png = fn + ".png" + saved = graphviz_export.graph_armature(obj, path_dot, CONSTRAINTS=True, DRIVERS=True) - #if saved: - # os.system("dot -Tpng %s > %s; eog %s" % (path_dot, path_png, path_png)) + #if saved: + # os.system("dot -Tpng %s > %s; eog %s" % (path_dot, path_png, path_png)) i = 0 for obj, obj_new in new_objects: @@ -617,4 +443,4 @@ def generate_test_all(context): if __name__ == "__main__": - generate_rig(bpy.context, bpy.context.object) + generate_rig(bpy.context, bpy.context.active_object) diff --git a/release/scripts/modules/rigify/arm.py b/release/scripts/modules/rigify/arm.py deleted file mode 100644 index 4e0d8642831..00000000000 --- a/release/scripts/modules/rigify/arm.py +++ /dev/null @@ -1,349 +0,0 @@ -# ##### 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify import bone_class_instance, copy_bone_simple, add_pole_target_bone, add_stretch_to -from rna_prop_ui import rna_idprop_ui_prop_get - -METARIG_NAMES = "shoulder", "arm", "forearm", "hand" - - -def metarig_template(): - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.object - arm = obj.data - bone = arm.edit_bones.new('shoulder') - bone.head[:] = 0.0000, -0.4515, 0.0000 - bone.tail[:] = 1.0000, -0.0794, 0.3540 - bone.roll = -0.2227 - bone.connected = False - bone = arm.edit_bones.new('upper_arm') - bone.head[:] = 1.1319, -0.0808, -0.0101 - bone.tail[:] = 3.0319, 0.2191, -0.1101 - bone.roll = 1.6152 - bone.connected = False - bone.parent = arm.edit_bones['shoulder'] - bone = arm.edit_bones.new('forearm') - bone.head[:] = 3.0319, 0.2191, -0.1101 - bone.tail[:] = 4.8319, -0.0809, -0.0242 - bone.roll = 1.5153 - bone.connected = True - bone.parent = arm.edit_bones['upper_arm'] - bone = arm.edit_bones.new('hand') - bone.head[:] = 4.8319, -0.0809, -0.0242 - bone.tail[:] = 5.7590, -0.1553, -0.1392 - bone.roll = -3.0083 - bone.connected = True - bone.parent = arm.edit_bones['forearm'] - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['upper_arm'] - pbone['type'] = 'arm' - - -def metarig_definition(obj, orig_bone_name): - mt = bone_class_instance(obj, METARIG_NAMES) # meta - mt.arm = orig_bone_name - mt.update() - - mt.shoulder_p = mt.arm_p.parent - mt.shoulder = mt.shoulder_p.name - - if not mt.shoulder_p: - raise Exception("could not find 'arm' parent, skipping:", orig_bone_name) - - # We could have some bones attached, find the bone that has this as its 2nd parent - hands = [] - for pbone in obj.pose.bones: - index = pbone.parent_index(mt.arm_p) - if index == 2: - hands.append(pbone) - - if len(hands) > 1: - raise Exception("more then 1 hand found on:", orig_bone_name) - - # first add the 2 new bones - mt.hand_p = hands[0] - mt.hand = mt.hand_p.name - - mt.forearm_p = mt.hand_p.parent - mt.forearm = mt.forearm_p.name - - return mt.names() - - -def main(obj, definitions, base_names): - """ - the bone with the 'arm' property is the upper arm, this assumes a chain as follows. - [shoulder, upper_arm, forearm, hand] - ...where this bone is 'upper_arm' - - there are 3 chains - - Original - - IK, MCH-%s_ik - - IKSwitch, MCH-%s () - - - """ - - # Since there are 3 chains, this gets confusing so divide into 3 chains - # Initialize container classes for convenience - mt = bone_class_instance(obj, METARIG_NAMES) # meta - mt.shoulder, mt.arm, mt.forearm, mt.hand = definitions - - ik = bone_class_instance(obj, ["arm", "forearm", "pole", "hand"]) # ik - sw = bone_class_instance(obj, ["socket", "shoulder", "arm", "forearm", "hand"]) # hinge - ex = bone_class_instance(obj, ["arm_hinge"]) # hinge & extras - - arm = obj.data - - def chain_ik(prefix="MCH-%s_ik"): - - mt.update() - - # Add the edit bones - ik.hand_e = copy_bone_simple(arm, mt.hand, prefix % mt.hand) - ik.hand = ik.hand_e.name - - ik.arm_e = copy_bone_simple(arm, mt.arm, prefix % mt.arm) - ik.arm = ik.arm_e.name - - ik.forearm_e = copy_bone_simple(arm, mt.forearm, prefix % mt.forearm) - ik.forearm = ik.forearm_e.name - - ik.arm_e.parent = mt.arm_e.parent - ik.forearm_e.connected = mt.arm_e.connected - - ik.forearm_e.parent = ik.arm_e - ik.forearm_e.connected = True - - - # Add the bone used for the arms poll target - ik.pole = add_pole_target_bone(obj, mt.forearm, "elbow_poll", mode='+Z') - - bpy.ops.object.mode_set(mode='OBJECT') - - ik.update() - - con = ik.forearm_p.constraints.new('IK') - con.target = obj - con.subtarget = ik.hand - con.pole_target = obj - con.pole_subtarget = ik.pole - - con.use_tail = True - con.use_stretch = True - con.use_target = True - con.use_rotation = False - con.chain_length = 2 - con.pole_angle = -90.0 # XXX, RAD2DEG - - # ID Propery on the hand for IK/FK switch - - prop = rna_idprop_ui_prop_get(ik.hand_p, "ik", create=True) - ik.hand_p["ik"] = 0.5 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - - bpy.ops.object.mode_set(mode='EDIT') - - ik.arm = ik.arm - ik.forearm = ik.forearm - ik.hand = ik.hand - ik.pole = ik.pole - - def chain_switch(prefix="MCH-%s"): - - sw.update() - mt.update() - - sw.shoulder_e = copy_bone_simple(arm, mt.shoulder, prefix % mt.shoulder) - sw.shoulder = sw.shoulder_e.name - sw.shoulder_e.parent = mt.shoulder_e.parent - sw.shoulder_e.connected = mt.shoulder_e.connected - - sw.arm_e = copy_bone_simple(arm, mt.arm, prefix % mt.arm) - sw.arm = sw.arm_e.name - sw.arm_e.parent = sw.shoulder_e - sw.arm_e.connected = arm.edit_bones[mt.shoulder].connected - - sw.forearm_e = copy_bone_simple(arm, mt.forearm, prefix % mt.forearm) - sw.forearm = sw.forearm_e.name - sw.forearm_e.parent = sw.arm_e - sw.forearm_e.connected = arm.edit_bones[mt.forearm].connected - - sw.hand_e = copy_bone_simple(arm, mt.hand, prefix % mt.hand) - sw.hand = sw.hand_e.name - sw.hand_e.parent = sw.forearm_e - sw.hand_e.connected = arm.edit_bones[mt.hand].connected - - # The sw.hand_e needs to own all the children on the metarig's hand - for child in mt.hand_e.children: - child.parent = sw.hand_e - - - # These are made the children of sw.shoulder_e - - - bpy.ops.object.mode_set(mode='OBJECT') - - # Add constraints - sw.update() - - #dummy, ik.arm, ik.forearm, ik.hand, ik.pole = ik_chain_tuple - - ik_driver_path = obj.pose.bones[ik.hand].path_to_id() + '["ik"]' - - def ik_fk_driver(con): - ''' - 3 bones use this for ik/fk switching - ''' - fcurve = con.driver_add("influence", 0) - driver = fcurve.driver - tar = driver.targets.new() - driver.type = 'AVERAGE' - tar.name = "ik" - tar.id_type = 'OBJECT' - tar.id = obj - tar.rna_path = ik_driver_path - - # *********** - con = sw.arm_p.constraints.new('COPY_ROTATION') - con.name = "FK" - con.target = obj - con.subtarget = mt.arm - - con = sw.arm_p.constraints.new('COPY_ROTATION') - - con.target = obj - con.subtarget = ik.arm - con.influence = 0.5 - ik_fk_driver(con) - - # *********** - con = sw.forearm_p.constraints.new('COPY_ROTATION') - con.name = "FK" - con.target = obj - con.subtarget = mt.forearm - - con = sw.forearm_p.constraints.new('COPY_ROTATION') - con.name = "IK" - con.target = obj - con.subtarget = ik.forearm - con.influence = 0.5 - ik_fk_driver(con) - - # *********** - con = sw.hand_p.constraints.new('COPY_ROTATION') - con.name = "FK" - con.target = obj - con.subtarget = mt.hand - - con = sw.hand_p.constraints.new('COPY_ROTATION') - con.name = "IK" - con.target = obj - con.subtarget = ik.hand - con.influence = 0.5 - ik_fk_driver(con) - - - add_stretch_to(obj, sw.forearm, ik.pole, "VIS-elbow_ik_poll") - add_stretch_to(obj, sw.hand, ik.hand, "VIS-hand_ik") - - bpy.ops.object.mode_set(mode='EDIT') - - def chain_shoulder(prefix="MCH-%s"): - - sw.socket_e = copy_bone_simple(arm, mt.arm, (prefix % mt.arm) + "_socket") - sw.socket = sw.socket_e.name - sw.socket_e.tail = arm.edit_bones[mt.shoulder].tail - - - # Set the shoulder as parent - ik.update() - sw.update() - mt.update() - - sw.socket_e.parent = sw.shoulder_e - ik.arm_e.parent = sw.shoulder_e - - - # ***** add the shoulder hinge - # yes this is correct, the shoulder copy gets the arm's name - ex.arm_hinge_e = copy_bone_simple(arm, mt.shoulder, (prefix % mt.arm) + "_hinge") - ex.arm_hinge = ex.arm_hinge_e.name - offset = ex.arm_hinge_e.length / 2.0 - - ex.arm_hinge_e.head.y += offset - ex.arm_hinge_e.tail.y += offset - - # Note: meta arm becomes child of hinge - mt.arm_e.parent = ex.arm_hinge_e - - - bpy.ops.object.mode_set(mode='OBJECT') - - ex.update() - - con = mt.arm_p.constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = sw.socket - - - # Hinge constraint & driver - con = ex.arm_hinge_p.constraints.new('COPY_ROTATION') - con.name = "hinge" - con.target = obj - con.subtarget = sw.shoulder - driver_fcurve = con.driver_add("influence", 0) - driver = driver_fcurve.driver - - - controller_path = mt.arm_p.path_to_id() - # add custom prop - mt.arm_p["hinge"] = 0.0 - prop = rna_idprop_ui_prop_get(mt.arm_p, "hinge", create=True) - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - - - # ***** - driver = driver_fcurve.driver - driver.type = 'AVERAGE' - - tar = driver.targets.new() - tar.name = "hinge" - tar.id_type = 'OBJECT' - tar.id = obj - tar.rna_path = controller_path + '["hinge"]' - - - bpy.ops.object.mode_set(mode='EDIT') - - # remove the shoulder and re-parent - - chain_ik() - chain_switch() - chain_shoulder() - - # Shoulder with its delta and hinge. - - # TODO - return a list for fk and IK - return None diff --git a/release/scripts/modules/rigify/arm_biped_generic.py b/release/scripts/modules/rigify/arm_biped_generic.py new file mode 100644 index 00000000000..509f1bb7aef --- /dev/null +++ b/release/scripts/modules/rigify/arm_biped_generic.py @@ -0,0 +1,291 @@ +# ##### 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +# + +import bpy +from math import radians +from rigify import RigifyError, get_layer_dict +from rigify_utils import bone_class_instance, copy_bone_simple, add_pole_target_bone, add_stretch_to, blend_bone_list, get_side_name, get_base_name +from rna_prop_ui import rna_idprop_ui_prop_get +from Mathutils import Vector + +METARIG_NAMES = "shoulder", "arm", "forearm", "hand" + + +def metarig_template(): + # generated by rigify.write_meta_rig + bpy.ops.object.mode_set(mode='EDIT') + obj = bpy.context.active_object + arm = obj.data + bone = arm.edit_bones.new('shoulder') + bone.head[:] = 0.0000, -0.0425, 0.0000 + bone.tail[:] = 0.0942, -0.0075, 0.0333 + bone.roll = -0.2227 + bone.connected = False + bone = arm.edit_bones.new('upper_arm') + bone.head[:] = 0.1066, -0.0076, -0.0010 + bone.tail[:] = 0.2855, 0.0206, -0.0104 + bone.roll = 1.6152 + bone.connected = False + bone.parent = arm.edit_bones['shoulder'] + bone = arm.edit_bones.new('forearm') + bone.head[:] = 0.2855, 0.0206, -0.0104 + bone.tail[:] = 0.4550, -0.0076, -0.0023 + bone.roll = 1.5153 + bone.connected = True + bone.parent = arm.edit_bones['upper_arm'] + bone = arm.edit_bones.new('hand') + bone.head[:] = 0.4550, -0.0076, -0.0023 + bone.tail[:] = 0.5423, -0.0146, -0.0131 + bone.roll = -3.0083 + bone.connected = True + bone.parent = arm.edit_bones['forearm'] + + bpy.ops.object.mode_set(mode='OBJECT') + pbone = obj.pose.bones['upper_arm'] + pbone['type'] = 'arm_biped_generic' + + +def metarig_definition(obj, orig_bone_name): + mt = bone_class_instance(obj, METARIG_NAMES) # meta + mt.arm = orig_bone_name + mt.update() + + mt.shoulder_p = mt.arm_p.parent + + if not mt.shoulder_p: + raise RigifyError("could not find '%s' parent, skipping:" % orig_bone_name) + + mt.shoulder = mt.shoulder_p.name + + # We could have some bones attached, find the bone that has this as its 2nd parent + hands = [] + for pbone in obj.pose.bones: + index = pbone.parent_index(mt.arm_p) + if index == 2 and pbone.bone.connected and pbone.bone.parent.connected: + hands.append(pbone) + + if len(hands) != 1: + raise RigifyError("Found %s possible hands attached to this arm, expected 1 from bone: %s" % ([pbone.name for pbone in hands], orig_bone_name)) + + # first add the 2 new bones + mt.hand_p = hands[0] + mt.hand = mt.hand_p.name + + mt.forearm_p = mt.hand_p.parent + mt.forearm = mt.forearm_p.name + + return mt.names() + + +def ik(obj, definitions, base_names, options): + + arm = obj.data + + mt = bone_class_instance(obj, METARIG_NAMES) + mt.shoulder, mt.arm, mt.forearm, mt.hand = definitions + mt.update() + + ik = bone_class_instance(obj, ["pole", "pole_vis", "hand_vis"]) + ik_chain = mt.copy(to_fmt="MCH-%s_ik", base_names=base_names, exclude_attrs=["shoulder"]) + + # IK needs no parent_index + ik_chain.hand_e.connected = False + ik_chain.hand_e.parent = None + ik_chain.hand_e.local_location = False + ik_chain.rename("hand", get_base_name(base_names[mt.hand]) + "_ik" + get_side_name(mt.hand)) + + ik_chain.arm_e.connected = False + ik_chain.arm_e.parent = mt.shoulder_e + + # Add the bone used for the arms poll target + #ik.pole = add_pole_target_bone(obj, mt.forearm, get_base_name(base_names[mt.forearm]) + "_target" + get_side_name(mt.forearm), mode='ZAVERAGE') + ik.pole = add_pole_target_bone(obj, mt.forearm, "elbow_target" + get_side_name(mt.forearm), mode='ZAVERAGE') + + ik.update() + ik.pole_e.local_location = False + + # option: elbow_parent + elbow_parent_name = options.get("elbow_parent", "") + + if elbow_parent_name: + try: + elbow_parent_e = arm.edit_bones[elbow_parent_name] + except: + # TODO, old/new parent mapping + raise RigifyError("parent bone from property 'arm_biped_generic.elbow_parent' not found '%s'" % elbow_parent_name) + ik.pole_e.parent = elbow_parent_e + + # update bones after this! + ik.hand_vis = add_stretch_to(obj, mt.hand, ik_chain.hand, "VIS-%s_ik" % base_names[mt.hand]) + ik.pole_vis = add_stretch_to(obj, mt.forearm, ik.pole, "VIS-%s_ik" % base_names[mt.forearm]) + + ik.update() + ik.hand_vis_e.restrict_select = True + ik.pole_vis_e.restrict_select = True + + bpy.ops.object.mode_set(mode='OBJECT') + + mt.update() + ik.update() + ik_chain.update() + + # Set IK dof + ik_chain.forearm_p.ik_dof_x = True + ik_chain.forearm_p.ik_dof_y = False + ik_chain.forearm_p.ik_dof_z = False + + con = ik_chain.forearm_p.constraints.new('IK') + con.target = obj + con.subtarget = ik_chain.hand + con.pole_target = obj + con.pole_subtarget = ik.pole + + con.use_tail = True + con.use_stretch = True + con.use_target = True + con.use_rotation = False + con.chain_length = 2 + con.pole_angle = -90.0 # XXX, RAD2DEG + + # last step setup layers + layers = get_layer_dict(options) + lay = layers["ik"] + for attr in ik_chain.attr_names: + getattr(ik_chain, attr + "_b").layer = lay + for attr in ik.attr_names: + getattr(ik, attr + "_b").layer = lay + + + bpy.ops.object.mode_set(mode='EDIT') + # don't blend the shoulder + return [None] + ik_chain.names() + + +def fk(obj, definitions, base_names, options): + + arm = obj.data + + mt = bone_class_instance(obj, METARIG_NAMES) + mt.shoulder, mt.arm, mt.forearm, mt.hand = definitions + mt.update() + + ex = bone_class_instance(obj, ["socket", "hand_delta"]) + fk_chain = mt.copy(base_names=base_names) + + # shoulder is used as a hinge + fk_chain.rename("shoulder", "MCH-%s_hinge" % base_names[mt.arm]) + fk_chain.shoulder_e.translate(Vector(0.0, fk_chain.shoulder_e.length / 2, 0.0)) + + # upper arm constrains to this. + ex.socket_e = copy_bone_simple(arm, mt.arm, "MCH-%s_socket" % base_names[mt.arm]) + ex.socket = ex.socket_e.name + ex.socket_e.connected = False + ex.socket_e.parent = mt.shoulder_e + ex.socket_e.length *= 0.5 + + # insert the 'DLT-hand', between the forearm and the hand + # copies forarm rotation + ex.hand_delta_e = copy_bone_simple(arm, fk_chain.hand, "DLT-%s" % base_names[mt.hand], parent=True) + ex.hand_delta = ex.hand_delta_e.name + ex.hand_delta_e.length *= 0.5 + ex.hand_delta_e.connected = False + if "hand_roll" in options: + ex.hand_delta_e.roll += radians(options["hand_roll"]) + + fk_chain.hand_e.connected = False + fk_chain.hand_e.parent = ex.hand_delta_e + + bpy.ops.object.mode_set(mode='OBJECT') + + mt.update() + ex.update() + fk_chain.update() + + # Set rotation modes and axis locks + fk_chain.forearm_p.rotation_mode = 'XYZ' + fk_chain.forearm_p.lock_rotation = (False, True, True) + fk_chain.hand_p.rotation_mode = 'ZXY' + + con = fk_chain.arm_p.constraints.new('COPY_LOCATION') + con.target = obj + con.subtarget = ex.socket + + fk_chain.hand_p.lock_location = True, True, True + con = ex.hand_delta_p.constraints.new('COPY_ROTATION') + con.target = obj + con.subtarget = fk_chain.forearm + + def hinge_setup(): + # Hinge constraint & driver + con = fk_chain.shoulder_p.constraints.new('COPY_ROTATION') + con.name = "hinge" + con.target = obj + con.subtarget = mt.shoulder + driver_fcurve = con.driver_add("influence", 0) + driver = driver_fcurve.driver + + + controller_path = fk_chain.arm_p.path_to_id() + # add custom prop + fk_chain.arm_p["hinge"] = 0.0 + prop = rna_idprop_ui_prop_get(fk_chain.arm_p, "hinge", create=True) + prop["soft_min"] = 0.0 + prop["soft_max"] = 1.0 + + + # ***** + driver = driver_fcurve.driver + driver.type = 'AVERAGE' + + tar = driver.targets.new() + tar.name = "hinge" + tar.id_type = 'OBJECT' + tar.id = obj + tar.data_path = controller_path + '["hinge"]' + + mod = driver_fcurve.modifiers[0] + mod.poly_order = 1 + mod.coefficients[0] = 1.0 + mod.coefficients[1] = -1.0 + + hinge_setup() + + + # last step setup layers + layers = get_layer_dict(options) + lay = layers["fk"] + for attr in fk_chain.attr_names: + getattr(fk_chain, attr + "_b").layer = lay + + lay = layers["extra"] + for attr in ex.attr_names: + getattr(ex, attr + "_b").layer = lay + + + bpy.ops.object.mode_set(mode='EDIT') + return None, fk_chain.arm, fk_chain.forearm, fk_chain.hand + + +def main(obj, bone_definition, base_names, options): + bones_fk = fk(obj, bone_definition, base_names, options) + bones_ik = ik(obj, bone_definition, base_names, options) + + bpy.ops.object.mode_set(mode='OBJECT') + blend_bone_list(obj, bone_definition, bones_fk, bones_ik, target_bone=bones_fk[1], blend_default=1.0) diff --git a/release/scripts/modules/rigify/copy.py b/release/scripts/modules/rigify/copy.py new file mode 100644 index 00000000000..11c16d2d197 --- /dev/null +++ b/release/scripts/modules/rigify/copy.py @@ -0,0 +1,87 @@ +# ##### 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +# + +import bpy +from rigify import get_layer_dict +from rigify_utils import bone_class_instance, copy_bone_simple + +METARIG_NAMES = ("cpy",) + + +def metarig_template(): + # generated by rigify.write_meta_rig + bpy.ops.object.mode_set(mode='EDIT') + obj = bpy.context.active_object + arm = obj.data + bone = arm.edit_bones.new('Bone') + bone.head[:] = 0.0000, 0.0000, 0.0000 + bone.tail[:] = 0.0000, 0.0000, 1.0000 + bone.roll = 0.0000 + bone.connected = False + + bpy.ops.object.mode_set(mode='OBJECT') + pbone = obj.pose.bones['Bone'] + pbone['type'] = 'copy' + + +def metarig_definition(obj, orig_bone_name): + return [orig_bone_name] + + +def main(obj, bone_definition, base_names, options): + arm = obj.data + mt = bone_class_instance(obj, METARIG_NAMES) + mt.cpy = bone_definition[0] + mt.update() + cp = bone_class_instance(obj, ["cpy"]) + cp.cpy_e = copy_bone_simple(arm, mt.cpy, base_names[mt.cpy], parent=True) + cp.cpy = cp.cpy_e.name + + bpy.ops.object.mode_set(mode='OBJECT') + + cp.update() + mt.update() + + if not cp.cpy_b.connected: + con = mt.cpy_p.constraints.new('COPY_LOCATION') + con.target = obj + con.subtarget = cp.cpy + + con = mt.cpy_p.constraints.new('COPY_ROTATION') + con.target = obj + con.subtarget = cp.cpy + + con = mt.cpy_p.constraints.new('COPY_SCALE') + con.target = obj + con.subtarget = cp.cpy + + # Rotation mode and axis locks + cp.cpy_p.rotation_mode = mt.cpy_p.rotation_mode + cp.cpy_p.lock_location = tuple(mt.cpy_p.lock_location) + cp.cpy_p.lock_rotations_4d = mt.cpy_p.lock_rotations_4d + cp.cpy_p.lock_rotation = tuple(mt.cpy_p.lock_rotation) + cp.cpy_p.lock_rotation_w = mt.cpy_p.lock_rotation_w + cp.cpy_p.lock_scale = tuple(mt.cpy_p.lock_scale) + + # setup layers last + layers = get_layer_dict(options) + cp.cpy_b.layer = layers["main"] + + return [mt.cpy] diff --git a/release/scripts/modules/rigify/delta.py b/release/scripts/modules/rigify/delta.py index b26a8ebac1e..475c64ab317 100644 --- a/release/scripts/modules/rigify/delta.py +++ b/release/scripts/modules/rigify/delta.py @@ -19,12 +19,40 @@ # import bpy -from rigify import get_bone_data +from rigify import RigifyError # not used, defined for completeness METARIG_NAMES = tuple() +def metarig_template(): + # generated by rigify.write_meta_rig + bpy.ops.object.mode_set(mode='EDIT') + obj = bpy.context.active_object + arm = obj.data + bone = arm.edit_bones.new('bonesker') + bone.head[:] = 0.0000, 0.0000, 0.0000 + bone.tail[:] = -0.0000, 0.7382, 0.1895 + bone.roll = -0.0000 + bone.connected = False + bone = arm.edit_bones.new('delta') + bone.head[:] = -0.0497, 0.8414, 0.3530 + bone.tail[:] = -0.2511, 1.1588, 0.9653 + bone.roll = 2.6044 + bone.connected = False + bone.parent = arm.edit_bones['bonesker'] + bone = arm.edit_bones.new('boney') + bone.head[:] = 0.7940, 2.5592, 0.4134 + bone.tail[:] = 0.7940, 3.3975, 0.4890 + bone.roll = 3.1416 + bone.connected = False + bone.parent = arm.edit_bones['delta'] + + bpy.ops.object.mode_set(mode='OBJECT') + pbone = obj.pose.bones['delta'] + pbone['type'] = 'delta' + + def metarig_definition(obj, orig_bone_name): ''' The bone given is the head, its parent is the body, @@ -37,18 +65,20 @@ def metarig_definition(obj, orig_bone_name): children = delta.children if len(children) != 1: - print("only 1 child supported for delta") + raise RigifyError("only 1 child supported for delta on bone '%s'" % delta.name) + + if delta.connected: + raise RigifyError("bone cannot be connected to its parent '%s'" % delta.name) bone_definition = [delta.name, children[0].name] return bone_definition -def main(obj, bone_definition, base_names): +def main(obj, bone_definition, base_names, options): ''' Use this bone to define a delta thats applied to its child in pose mode. ''' - mode_orig = obj.mode bpy.ops.object.mode_set(mode='OBJECT') @@ -56,7 +86,8 @@ def main(obj, bone_definition, base_names): delta_pbone = obj.pose.bones[delta_name] - arm, child_pbone, child_bone = get_bone_data(obj, child_name) + arm = obj.data + child_pbone = obj.pose.bones[child_name] delta_phead = delta_pbone.head.copy() delta_ptail = delta_pbone.tail.copy() @@ -77,28 +108,29 @@ def main(obj, bone_definition, base_names): delta_head = delta_ebone.head.copy() delta_tail = delta_ebone.tail.copy() - # arm, parent_pbone, parent_bone = get_bone_data(obj, delta_name) child_head = child_ebone.head.copy() child_tail = child_ebone.tail.copy() - arm.edit_bones.remove(delta_ebone) - del delta_ebone # cant use this + #arm.edit_bones.remove(delta_ebone) + #del delta_ebone # cant use this + del child_pbone bpy.ops.object.mode_set(mode='OBJECT') # Move the child bone to the deltas location obj.animation_data_create() - child_pbone = obj.pose.bones[child_name] + delta_pbone = obj.pose.bones[delta_name] + # child_pbone = obj.pose.bones[child_name] # ------------------- drivers - child_pbone.rotation_mode = 'XYZ' + delta_pbone.rotation_mode = 'XYZ' rot = delta_pmatrix.invert().rotationPart() * child_pmatrix.rotationPart() rot = rot.invert().toEuler() - fcurve_drivers = child_pbone.driver_add("rotation_euler", -1) + fcurve_drivers = delta_pbone.driver_add("rotation_euler", -1) for i, fcurve_driver in enumerate(fcurve_drivers): driver = fcurve_driver.driver driver.type = 'AVERAGE' @@ -111,7 +143,7 @@ def main(obj, bone_definition, base_names): # tricky, find the transform to drive the bone to this location. delta_head_offset = child_pmatrix.rotationPart() * (delta_phead - child_phead) - fcurve_drivers = child_pbone.driver_add("location", -1) + fcurve_drivers = delta_pbone.driver_add("location", -1) for i, fcurve_driver in enumerate(fcurve_drivers): driver = fcurve_driver.driver driver.type = 'AVERAGE' @@ -122,7 +154,6 @@ def main(obj, bone_definition, base_names): mod.coefficients[1] = 0.0 - # arm, parent_pbone, parent_bone = get_bone_data(obj, delta_name) bpy.ops.object.mode_set(mode='EDIT') bpy.ops.object.mode_set(mode=mode_orig) diff --git a/release/scripts/modules/rigify/finger.py b/release/scripts/modules/rigify/finger_curl.py similarity index 78% rename from release/scripts/modules/rigify/finger.py rename to release/scripts/modules/rigify/finger_curl.py index baa9ed49041..a4688ee8b5b 100644 --- a/release/scripts/modules/rigify/finger.py +++ b/release/scripts/modules/rigify/finger_curl.py @@ -19,7 +19,8 @@ # import bpy -from rigify import get_bone_data, empty_layer, copy_bone_simple +from rigify import RigifyError, get_layer_dict +from rigify_utils import copy_bone_simple, get_side_name from rna_prop_ui import rna_idprop_ui_prop_get from functools import reduce @@ -27,30 +28,31 @@ METARIG_NAMES = "finger_01", "finger_02", "finger_03" def metarig_template(): + # generated by rigify.write_meta_rig bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.object + obj = bpy.context.active_object arm = obj.data bone = arm.edit_bones.new('finger.01') bone.head[:] = 0.0000, 0.0000, 0.0000 - bone.tail[:] = 0.8788, -0.4584, -0.1327 + bone.tail[:] = 0.0353, -0.0184, -0.0053 bone.roll = -2.8722 bone.connected = False bone = arm.edit_bones.new('finger.02') - bone.head[:] = 0.8788, -0.4584, -0.1327 - bone.tail[:] = 1.7483, -0.9059, -0.3643 + bone.head[:] = 0.0353, -0.0184, -0.0053 + bone.tail[:] = 0.0702, -0.0364, -0.0146 bone.roll = -2.7099 bone.connected = True bone.parent = arm.edit_bones['finger.01'] bone = arm.edit_bones.new('finger.03') - bone.head[:] = 1.7483, -0.9059, -0.3643 - bone.tail[:] = 2.2478, -1.1483, -0.7408 + bone.head[:] = 0.0702, -0.0364, -0.0146 + bone.tail[:] = 0.0903, -0.0461, -0.0298 bone.roll = -2.1709 bone.connected = True bone.parent = arm.edit_bones['finger.02'] bpy.ops.object.mode_set(mode='OBJECT') pbone = obj.pose.bones['finger.01'] - pbone['type'] = 'finger' + pbone['type'] = 'finger_curl' def metarig_definition(obj, orig_bone_name): @@ -73,36 +75,35 @@ def metarig_definition(obj, orig_bone_name): children = bone.children if len(children) != 1: - raise Exception("expected the chain to have 2 children without a fork") + raise RigifyError("expected the chain to have 2 children from bone '%s' without a fork" % orig_bone_name) bone = children[0] bone_definition.append(bone.name) # finger_02, finger_03 chain += 1 if len(bone_definition) != len(METARIG_NAMES): - raise Exception("internal problem, expected %d bones" % len(METARIG_NAMES)) + raise RigifyError("internal problem, expected %d bones" % len(METARIG_NAMES)) return bone_definition -def main(obj, bone_definition, base_names): - +def main(obj, bone_definition, base_names, options): # *** EDITMODE # get assosiated data - arm, orig_pbone, orig_ebone = get_bone_data(obj, bone_definition[0]) + arm = obj.data + orig_ebone = arm.edit_bones[bone_definition[0]] obj.animation_data_create() # needed if its a new armature with no keys - arm.layer[0] = arm.layer[8] = True + children = orig_ebone.children_recursive + tot_len = reduce(lambda f, ebone: f + ebone.length, children, orig_ebone.length) - children = orig_pbone.children_recursive - tot_len = reduce(lambda f, pbone: f + pbone.bone.length, children, orig_pbone.bone.length) - - base_name = base_names[bone_definition[0]].rsplit(".", 1)[0] + # FIXME, the line below is far too arbitrary + base_name = base_names[bone_definition[0]].rsplit(".", 2)[0] # first make a new bone at the location of the finger #control_ebone = arm.edit_bones.new(base_name) - control_ebone = copy_bone_simple(arm, bone_definition[0], base_name) + control_ebone = copy_bone_simple(arm, bone_definition[0], base_name + get_side_name(base_names[bone_definition[0]]), parent=True) control_bone_name = control_ebone.name # we dont know if we get the name requested control_ebone.connected = orig_ebone.connected @@ -112,12 +113,7 @@ def main(obj, bone_definition, base_names): # now add bones inbetween this and its children recursively # switching modes so store names only! - children = [pbone.name for pbone in children] - - # set an alternate layer for driver bones - other_layer = empty_layer[:] - other_layer[8] = True - + children = [ebone.name for ebone in children] driver_bone_pairs = [] @@ -130,7 +126,6 @@ def main(obj, bone_definition, base_names): driver_ebone = copy_bone_simple(arm, child_ebone.name, driver_bone_name) driver_ebone.length *= 0.5 - driver_ebone.layer = other_layer # Insert driver_ebone in the chain without connected parents driver_ebone.connected = False @@ -197,14 +192,14 @@ def main(obj, bone_definition, base_names): tar.name = "scale" tar.id_type = 'OBJECT' tar.id = obj - tar.rna_path = controller_path + '.scale[1]' + tar.data_path = controller_path + '.scale[1]' # bend target tar = driver.targets.new() tar.name = "br" tar.id_type = 'OBJECT' tar.id = obj - tar.rna_path = controller_path + '["bend_ratio"]' + tar.data_path = controller_path + '["bend_ratio"]' # XXX - todo, any number if i == 0: @@ -219,5 +214,15 @@ def main(obj, bone_definition, base_names): i += 1 + + # last step setup layers + layers = get_layer_dict(options) + lay = layers["extra"] + for child_bone_name, driver_bone_name in driver_bone_pairs: + arm.bones[driver_bone_name].layer = lay + + lay = layers["main"] + arm.bones[control_bone_name].layer = lay + # no blending the result of this return None diff --git a/release/scripts/modules/rigify/leg.py b/release/scripts/modules/rigify/leg_biped_generic.py similarity index 68% rename from release/scripts/modules/rigify/leg.py rename to release/scripts/modules/rigify/leg_biped_generic.py index 92bce0f3c2c..745ee49cbfe 100644 --- a/release/scripts/modules/rigify/leg.py +++ b/release/scripts/modules/rigify/leg_biped_generic.py @@ -19,7 +19,8 @@ # import bpy -from rigify import bone_class_instance, copy_bone_simple, blend_bone_list +from rigify import RigifyError, get_layer_dict +from rigify_utils import bone_class_instance, copy_bone_simple, blend_bone_list, get_side_name, get_base_name from rna_prop_ui import rna_idprop_ui_prop_get METARIG_NAMES = "hips", "thigh", "shin", "foot", "toe", "heel" @@ -28,47 +29,47 @@ METARIG_NAMES = "hips", "thigh", "shin", "foot", "toe", "heel" def metarig_template(): # generated by rigify.write_meta_rig bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.object + obj = bpy.context.active_object arm = obj.data bone = arm.edit_bones.new('hips') bone.head[:] = 0.0000, 0.0000, 0.0000 - bone.tail[:] = 0.0000, 0.0000, 1.0000 + bone.tail[:] = 0.0000, 0.0000, 0.2506 bone.roll = 0.0000 bone.connected = False bone = arm.edit_bones.new('thigh') - bone.head[:] = 0.5000, 0.0000, 0.0000 - bone.tail[:] = 0.3000, -0.1000, -1.7000 + bone.head[:] = 0.1253, 0.0000, -0.0000 + bone.tail[:] = 0.0752, -0.0251, -0.4260 bone.roll = 0.1171 bone.connected = False bone.parent = arm.edit_bones['hips'] bone = arm.edit_bones.new('shin') - bone.head[:] = 0.3000, -0.1000, -1.7000 - bone.tail[:] = 0.3000, 0.0000, -3.5000 - bone.roll = -0.0000 + bone.head[:] = 0.0752, -0.0251, -0.4260 + bone.tail[:] = 0.0752, 0.0000, -0.8771 + bone.roll = 0.0000 bone.connected = True bone.parent = arm.edit_bones['thigh'] bone = arm.edit_bones.new('foot') - bone.head[:] = 0.3000, 0.0000, -3.5000 - bone.tail[:] = 0.4042, -0.5909, -3.9000 + bone.head[:] = 0.0752, 0.0000, -0.8771 + bone.tail[:] = 0.1013, -0.1481, -0.9773 bone.roll = -0.4662 bone.connected = True bone.parent = arm.edit_bones['shin'] bone = arm.edit_bones.new('toe') - bone.head[:] = 0.4042, -0.5909, -3.9000 - bone.tail[:] = 0.4391, -0.9894, -3.9000 - bone.roll = -3.1416 + bone.head[:] = 0.1013, -0.1481, -0.9773 + bone.tail[:] = 0.1100, -0.2479, -0.9773 + bone.roll = 3.1416 bone.connected = True bone.parent = arm.edit_bones['foot'] bone = arm.edit_bones.new('heel') - bone.head[:] = 0.2600, 0.2000, -4.0000 - bone.tail[:] = 0.3700, -0.4000, -4.0000 + bone.head[:] = 0.0652, 0.0501, -1.0024 + bone.tail[:] = 0.0927, -0.1002, -1.0024 bone.roll = 0.0000 bone.connected = False bone.parent = arm.edit_bones['foot'] bpy.ops.object.mode_set(mode='OBJECT') pbone = obj.pose.bones['thigh'] - pbone['type'] = 'leg' + pbone['type'] = 'leg_biped_generic' def metarig_definition(obj, orig_bone_name): @@ -85,7 +86,7 @@ def metarig_definition(obj, orig_bone_name): orig_bone_parent = orig_bone.parent if orig_bone_parent is None: - raise Exception("expected the thigh bone to have a parent hip bone") + raise RigifyError("expected the thigh bone to have a parent hip bone") bone_definition.append(orig_bone_parent.name) bone_definition.append(orig_bone.name) @@ -97,7 +98,7 @@ def metarig_definition(obj, orig_bone_name): children = bone.children if len(children) != 1: - raise Exception("expected the thigh bone to have 3 children without a fork") + raise RigifyError("expected the thigh bone to have 3 children without a fork") bone = children[0] bone_definition.append(bone.name) # shin, foot chain += 1 @@ -105,10 +106,10 @@ def metarig_definition(obj, orig_bone_name): children = bone.children # Now there must be 2 children, only one connected if len(children) != 2: - raise Exception("expected the foot to have 2 children") + raise RigifyError("expected the foot bone:'%s' to have 2 children" % bone.name) if children[0].connected == children[1].connected: - raise Exception("expected one bone to be connected") + raise RigifyError("expected one bone to be connected") toe, heel = children if heel.connected: @@ -119,50 +120,46 @@ def metarig_definition(obj, orig_bone_name): bone_definition.append(heel.name) if len(bone_definition) != len(METARIG_NAMES): - raise Exception("internal problem, expected %d bones" % len(METARIG_NAMES)) + raise RigifyError("internal problem, expected %d bones" % len(METARIG_NAMES)) return bone_definition -def ik(obj, bone_definition, base_names): +def ik(obj, bone_definition, base_names, options): arm = obj.data - # setup the existing bones + # setup the existing bones, use names from METARIG_NAMES mt_chain = bone_class_instance(obj, ["thigh", "shin", "foot", "toe"]) mt = bone_class_instance(obj, ["hips", "heel"]) - #ex = bone_class_instance(obj, [""]) - ex = bone_class_instance(obj, ["thigh_socket", "thigh_hinge", "foot_roll_1", "foot_roll_2", "foot_roll_3"]) + + mt.attr_initialize(METARIG_NAMES, bone_definition) + mt_chain.attr_initialize(METARIG_NAMES, bone_definition) + # children of ik_foot ik = bone_class_instance(obj, ["foot", "foot_roll", "foot_roll_01", "foot_roll_02", "knee_target"]) - # XXX - duplicate below - for bone_class in (mt, mt_chain): - for attr in bone_class.attr_names: - i = METARIG_NAMES.index(attr) - ebone = arm.edit_bones[bone_definition[i]] - setattr(bone_class, attr, ebone.name) - bone_class.update() - # XXX - end dupe - - - # Make a new chain, ORG are the original bones renamed. - ik_chain = mt_chain.copy(to_prefix="MCH-") + # Make a new chain + ik_chain = mt_chain.copy(to_fmt="MCH-%s", base_names=base_names) # simple rename ik_chain.rename("thigh", ik_chain.thigh + "_ik") ik_chain.rename("shin", ik_chain.shin + "_ik") - # ik foot, no parents - base_foot_name = base_names[mt_chain.foot] # whatever the foot is called, use that!, XXX - ORG! - ik.foot_e = copy_bone_simple(arm, mt_chain.foot, "%s_ik" % base_foot_name) + # make sure leg is child of hips + ik_chain.thigh_e.parent = mt.hips_e + + # ik foot: no parents + base_foot_name = get_base_name(base_names[mt_chain.foot]) + ik.foot_e = copy_bone_simple(arm, mt_chain.foot, base_foot_name + "_ik" + get_side_name(base_names[mt_chain.foot])) ik.foot = ik.foot_e.name ik.foot_e.tail.z = ik.foot_e.head.z ik.foot_e.roll = 0.0 + ik.foot_e.local_location = False - # heel pointing backwards, half length - ik.foot_roll_e = copy_bone_simple(arm, mt.heel, "%s_roll" % base_foot_name) + # foot roll: heel pointing backwards, half length + ik.foot_roll_e = copy_bone_simple(arm, mt.heel, base_foot_name + "_roll" + get_side_name(base_names[mt_chain.foot])) ik.foot_roll = ik.foot_roll_e.name - ik.foot_roll_e.tail = ik.foot_roll_e.head + (ik.foot_roll_e.head - ik.foot_roll_e.tail) / 2.0 + ik.foot_roll_e.tail = ik.foot_roll_e.head + ik.foot_roll_e.vector / 2.0 ik.foot_roll_e.parent = ik.foot_e # heel is disconnected # heel pointing forwards to the toe base, parent of the following 2 bones @@ -182,7 +179,7 @@ def ik(obj, bone_definition, base_names): # rename 'MCH-toe' --> to 'toe_ik' and make the child of ik.foot_roll_01 # ------------------ FK or IK? - ik_chain.rename("toe", base_names[mt_chain.toe] + "_ik") + ik_chain.rename("toe", get_base_name(base_names[mt_chain.toe]) + "_ik" + get_side_name(base_names[mt_chain.toe])) ik_chain.toe_e.connected = False ik_chain.toe_e.parent = ik.foot_roll_01_e @@ -201,18 +198,29 @@ def ik(obj, bone_definition, base_names): ik.knee_target_e.translate(offset) ik.knee_target_e.length *= 0.5 ik.knee_target_e.parent = ik.foot_e + ik.knee_target_e.local_location = False # roll the bone to point up... could also point in the same direction as ik.foot_roll # ik.foot_roll_02_e.matrix * Vector(0.0, 0.0, 1.0) # ACK!, no rest matrix in editmode - ik.foot_roll_01_e.align((0.0, 0.0, -1.0)) + ik.foot_roll_01_e.align_roll((0.0, 0.0, -1.0)) bpy.ops.object.mode_set(mode='OBJECT') ik.update() - ex.update() mt_chain.update() ik_chain.update() + # Set IK dof + ik_chain.shin_p.ik_dof_x = True + ik_chain.shin_p.ik_dof_y = False + ik_chain.shin_p.ik_dof_z = False + + # Set rotation modes and axis locks + ik.foot_roll_p.rotation_mode = 'XYZ' + ik.foot_roll_p.lock_rotation = False, True, True + ik_chain.toe_p.rotation_mode = 'YXZ' + ik_chain.toe_p.lock_rotation = False, True, True + # IK con = ik_chain.shin_p.constraints.new('IK') con.chain_length = 2 @@ -225,7 +233,7 @@ def ik(obj, bone_definition, base_names): con.weight = 1.0 con.target = obj - con.subtarget = ik.foot + con.subtarget = ik_chain.foot con.pole_target = obj con.pole_subtarget = ik.knee_target @@ -252,12 +260,21 @@ def ik(obj, bone_definition, base_names): con.minimum_x = -180.0 # XXX -deg con.maximum_x = 0.0 + + # last step setup layers + layers = get_layer_dict(options) + lay = layers["ik"] + for attr in ik_chain.attr_names: + getattr(ik_chain, attr + "_b").layer = lay + for attr in ik.attr_names: + getattr(ik, attr + "_b").layer = lay + bpy.ops.object.mode_set(mode='EDIT') return None, ik_chain.thigh, ik_chain.shin, ik_chain.foot, ik_chain.toe, None -def fk(obj, bone_definition, base_names): +def fk(obj, bone_definition, base_names, options): from Mathutils import Vector arm = obj.data @@ -279,13 +296,10 @@ def fk(obj, bone_definition, base_names): ex.thigh_socket = ex.thigh_socket_e.name ex.thigh_socket_e.tail = ex.thigh_socket_e.head + Vector(0.0, 0.0, ex.thigh_socket_e.length / 4.0) - ex.thigh_hinge_e = copy_bone_simple(arm, mt_chain.thigh, "MCH-%s_hinge" % base_names[mt_chain.thigh], parent=True) + ex.thigh_hinge_e = copy_bone_simple(arm, mt.hips, "MCH-%s_hinge" % base_names[mt_chain.thigh], parent=False) ex.thigh_hinge = ex.thigh_hinge_e.name - ex.thigh_hinge_e.tail = ex.thigh_hinge_e.head + Vector(0.0, 0.0, mt_chain.thigh_e.head.length) - ex.thigh_hinge_e.translate(Vector( - (mt.hips_e.head.x - mt_chain.thigh_e.head.x), 0.0, 0.0)) - ex.thigh_hinge_e.length = mt.hips_e.length - fk_chain = mt_chain.copy() # fk has no prefix! + fk_chain = mt_chain.copy(base_names=base_names) # fk has no prefix! fk_chain.thigh_e.connected = False fk_chain.thigh_e.parent = ex.thigh_hinge_e @@ -296,6 +310,13 @@ def fk(obj, bone_definition, base_names): mt_chain.update() fk_chain.update() + # Set rotation modes and axis locks + fk_chain.shin_p.rotation_mode = 'XYZ' + fk_chain.shin_p.lock_rotation = False, True, True + fk_chain.foot_p.rotation_mode = 'YXZ' + fk_chain.toe_p.rotation_mode = 'YXZ' + fk_chain.toe_p.lock_rotation = False, True, True + con = fk_chain.thigh_p.constraints.new('COPY_LOCATION') con.target = obj con.subtarget = ex.thigh_socket @@ -320,22 +341,34 @@ def fk(obj, bone_definition, base_names): tar.name = "var" tar.id_type = 'OBJECT' tar.id = obj - tar.rna_path = hinge_driver_path + tar.data_path = hinge_driver_path mod = fcurve.modifiers[0] mod.poly_order = 1 mod.coefficients[0] = 1.0 mod.coefficients[1] = -1.0 + + # last step setup layers + layers = get_layer_dict(options) + lay = layers["fk"] + for attr in fk_chain.attr_names: + getattr(fk_chain, attr + "_b").layer = lay + + lay = layers["extra"] + for attr in ex.attr_names: + getattr(ex, attr + "_b").layer = lay + + bpy.ops.object.mode_set(mode='EDIT') # dont blend the hips or heel return None, fk_chain.thigh, fk_chain.shin, fk_chain.foot, fk_chain.toe, None -def main(obj, bone_definition, base_names): - bones_ik = ik(obj, bone_definition, base_names) - bones_fk = fk(obj, bone_definition, base_names) +def main(obj, bone_definition, base_names, options): + bones_fk = fk(obj, bone_definition, base_names, options) + bones_ik = ik(obj, bone_definition, base_names, options) bpy.ops.object.mode_set(mode='OBJECT') - blend_bone_list(obj, bone_definition, bones_ik, bones_fk) + blend_bone_list(obj, bone_definition, bones_fk, bones_ik, target_bone=bones_ik[1], blend_default=0.0) diff --git a/release/scripts/modules/rigify/leg_quadruped_generic.py b/release/scripts/modules/rigify/leg_quadruped_generic.py new file mode 100644 index 00000000000..3f7275e48c0 --- /dev/null +++ b/release/scripts/modules/rigify/leg_quadruped_generic.py @@ -0,0 +1,225 @@ +# ##### 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +# + +import bpy +from rigify import RigifyError, get_layer_dict +from rigify_utils import bone_class_instance, copy_bone_simple, blend_bone_list, get_side_name, get_base_name, add_pole_target_bone +from rna_prop_ui import rna_idprop_ui_prop_get +from Mathutils import Vector + +METARIG_NAMES = "hips", "thigh", "shin", "foot", "toe" + + +def metarig_template(): + # generated by rigify.write_meta_rig + bpy.ops.object.mode_set(mode='EDIT') + obj = bpy.context.active_object + arm = obj.data + bone = arm.edit_bones.new('body') + bone.head[:] = -0.0728, -0.2427, 0.0000 + bone.tail[:] = -0.0728, -0.2427, 0.2427 + bone.roll = 0.0000 + bone.connected = False + bone = arm.edit_bones.new('thigh') + bone.head[:] = 0.0000, 0.0000, -0.0000 + bone.tail[:] = 0.0813, -0.2109, -0.3374 + bone.roll = -0.4656 + bone.connected = False + bone.parent = arm.edit_bones['body'] + bone = arm.edit_bones.new('shin') + bone.head[:] = 0.0813, -0.2109, -0.3374 + bone.tail[:] = 0.0714, -0.0043, -0.5830 + bone.roll = -0.2024 + bone.connected = True + bone.parent = arm.edit_bones['thigh'] + bone = arm.edit_bones.new('foot') + bone.head[:] = 0.0714, -0.0043, -0.5830 + bone.tail[:] = 0.0929, -0.0484, -0.7652 + bone.roll = -0.3766 + bone.connected = True + bone.parent = arm.edit_bones['shin'] + bone = arm.edit_bones.new('toe') + bone.head[:] = 0.0929, -0.0484, -0.7652 + bone.tail[:] = 0.1146, -0.1244, -0.7652 + bone.roll = -0.0000 + bone.connected = True + bone.parent = arm.edit_bones['foot'] + + bpy.ops.object.mode_set(mode='OBJECT') + pbone = obj.pose.bones['thigh'] + pbone['type'] = 'leg_quadruped_generic' + + +def metarig_definition(obj, orig_bone_name): + ''' + The bone given is the first in a chain + Expects a chain of at least 3 children. + eg. + thigh -> shin -> foot -> [toe, heel] + ''' + + bone_definition = [] + + orig_bone = obj.data.bones[orig_bone_name] + orig_bone_parent = orig_bone.parent + + if orig_bone_parent is None: + raise RigifyError("expected the thigh bone to have a parent hip bone") + + bone_definition.append(orig_bone_parent.name) + bone_definition.append(orig_bone.name) + + + bone = orig_bone + chain = 0 + while chain < 3: # first 2 bones only have 1 child + children = bone.children + + if len(children) != 1: + raise RigifyError("expected the thigh bone to have 3 children without a fork") + bone = children[0] + bone_definition.append(bone.name) # shin, foot + chain += 1 + + if len(bone_definition) != len(METARIG_NAMES): + raise RigifyError("internal problem, expected %d bones" % len(METARIG_NAMES)) + + return bone_definition + + +def ik(obj, bone_definition, base_names, options): + arm = obj.data + + # setup the existing bones, use names from METARIG_NAMES + mt = bone_class_instance(obj, ["hips"]) + mt_chain = bone_class_instance(obj, ["thigh", "shin", "foot", "toe"]) + + mt.attr_initialize(METARIG_NAMES, bone_definition) + mt_chain.attr_initialize(METARIG_NAMES, bone_definition) + + ik_chain = mt_chain.copy(to_fmt="%s", base_names=base_names) + + ik_chain.thigh_e.connected = False + ik_chain.thigh_e.parent = mt.hips_e + + ik_chain.foot_e.parent = None + ik_chain.rename("foot", ik_chain.foot + "_ik") + + # keep the foot_ik as the parent + ik_chain.toe_e.connected = False + + # must be after disconnecting the toe + ik_chain.foot_e.align_orientation(mt_chain.toe_e) + + # children of ik_foot + ik = bone_class_instance(obj, ["foot", "foot_roll", "foot_roll_01", "foot_roll_02", "knee_target", "foot_target"]) + + ik.knee_target = add_pole_target_bone(obj, mt_chain.shin, "knee_target") #XXX - pick a better name + ik.update() + ik.knee_target_e.parent = mt.hips_e + + # foot roll is an interesting one! + # plot a vector from the toe bones head, bactwards to the length of the foot + # then align it with the foot but reverse direction. + ik.foot_roll_e = copy_bone_simple(arm, mt_chain.toe, base_names[mt_chain.foot] + "_roll") + ik.foot_roll = ik.foot_roll_e.name + ik.foot_roll_e.parent = ik_chain.foot_e + ik.foot_roll_e.translate(- (mt_chain.toe_e.vector.normalize() * mt_chain.foot_e.length)) + ik.foot_roll_e.align_orientation(mt_chain.foot_e) + ik.foot_roll_e.tail = ik.foot_roll_e.head - ik.foot_roll_e.vector # flip + ik.foot_roll_e.align_roll(mt_chain.foot_e.matrix.rotationPart() * Vector(0.0, 0.0, -1.0)) + + # MCH-foot + ik.foot_roll_01_e = copy_bone_simple(arm, mt_chain.foot, "MCH-" + base_names[mt_chain.foot]) + ik.foot_roll_01 = ik.foot_roll_01_e.name + ik.foot_roll_01_e.parent = ik_chain.foot_e + ik.foot_roll_01_e.head, ik.foot_roll_01_e.tail = mt_chain.foot_e.tail, mt_chain.foot_e.head + ik.foot_roll_01_e.roll = ik.foot_roll_e.roll + + # ik_target, child of MCH-foot + ik.foot_target_e = copy_bone_simple(arm, mt_chain.foot, base_names[mt_chain.foot] + "_ik_target") + ik.foot_target = ik.foot_target_e.name + ik.foot_target_e.parent = ik.foot_roll_01_e + ik.foot_target_e.align_orientation(ik_chain.foot_e) + ik.foot_target_e.length = ik_chain.foot_e.length / 2.0 + ik.foot_target_e.connected = True + + # MCH-foot.02 child of MCH-foot + ik.foot_roll_02_e = copy_bone_simple(arm, mt_chain.foot, "MCH-%s_02" % base_names[mt_chain.foot]) + ik.foot_roll_02 = ik.foot_roll_02_e.name + ik.foot_roll_02_e.parent = ik.foot_roll_01_e + + + bpy.ops.object.mode_set(mode='OBJECT') + + mt.update() + mt_chain.update() + ik.update() + ik_chain.update() + + # simple constraining of orig bones + con = mt_chain.thigh_p.constraints.new('COPY_ROTATION') + con.target = obj + con.subtarget = ik_chain.thigh + + con = mt_chain.shin_p.constraints.new('COPY_ROTATION') + con.target = obj + con.subtarget = ik_chain.shin + + con = mt_chain.foot_p.constraints.new('COPY_ROTATION') + con.target = obj + con.subtarget = ik.foot_roll_02 + + con = mt_chain.toe_p.constraints.new('COPY_ROTATION') + con.target = obj + con.subtarget = ik_chain.toe + + # others... + con = ik.foot_roll_01_p.constraints.new('COPY_ROTATION') + con.target = obj + con.subtarget = ik.foot_roll + + + # IK + con = ik_chain.shin_p.constraints.new('IK') + con.chain_length = 2 + con.iterations = 500 + con.pole_angle = -90.0 # XXX - in deg! + con.use_tail = True + con.use_stretch = True + con.use_target = True + con.use_rotation = False + con.weight = 1.0 + + con.target = obj + con.subtarget = ik.foot_target + + con.pole_target = obj + con.pole_subtarget = ik.knee_target + + + bpy.ops.object.mode_set(mode='EDIT') + + return None, ik_chain.thigh, ik_chain.shin, ik_chain.foot, ik_chain.toe + + +def main(obj, bone_definition, base_names, options): + bones_ik = ik(obj, bone_definition, base_names, options) + return bones_ik diff --git a/release/scripts/modules/rigify/neck.py b/release/scripts/modules/rigify/neck_flex.py similarity index 59% rename from release/scripts/modules/rigify/neck.py rename to release/scripts/modules/rigify/neck_flex.py index 9a07f524a21..c52230ed30a 100644 --- a/release/scripts/modules/rigify/neck.py +++ b/release/scripts/modules/rigify/neck_flex.py @@ -19,7 +19,8 @@ # import bpy -from rigify import bone_class_instance, copy_bone_simple +from rigify import RigifyError, get_layer_dict +from rigify_utils import bone_class_instance, copy_bone_simple from rna_prop_ui import rna_idprop_ui_prop_get # not used, defined for completeness @@ -27,54 +28,55 @@ METARIG_NAMES = ("body", "head") def metarig_template(): + # generated by rigify.write_meta_rig bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.object + obj = bpy.context.active_object arm = obj.data bone = arm.edit_bones.new('body') - bone.head[:] = -0.0000, -0.2771, -1.3345 - bone.tail[:] = -0.0000, -0.1708, -0.3984 + bone.head[:] = 0.0000, -0.0276, -0.1328 + bone.tail[:] = 0.0000, -0.0170, -0.0197 bone.roll = 0.0000 bone.connected = False bone = arm.edit_bones.new('head') - bone.head[:] = -0.0000, -0.1708, -0.1984 - bone.tail[:] = 0.0000, -0.1708, 1.6016 - bone.roll = -0.0000 - bone.connected = False + bone.head[:] = 0.0000, -0.0170, -0.0197 + bone.tail[:] = 0.0000, 0.0726, 0.1354 + bone.roll = 0.0000 + bone.connected = True bone.parent = arm.edit_bones['body'] bone = arm.edit_bones.new('neck.01') - bone.head[:] = 0.0000, -0.1708, -0.1984 - bone.tail[:] = -0.0000, -0.0994, 0.1470 - bone.roll = -0.0000 + bone.head[:] = 0.0000, -0.0170, -0.0197 + bone.tail[:] = 0.0000, -0.0099, 0.0146 + bone.roll = 0.0000 bone.connected = False bone.parent = arm.edit_bones['head'] bone = arm.edit_bones.new('neck.02') - bone.head[:] = -0.0000, -0.0994, 0.1470 - bone.tail[:] = 0.0000, -0.2428, 0.5162 - bone.roll = -0.0000 + bone.head[:] = 0.0000, -0.0099, 0.0146 + bone.tail[:] = 0.0000, -0.0242, 0.0514 + bone.roll = 0.0000 bone.connected = True bone.parent = arm.edit_bones['neck.01'] bone = arm.edit_bones.new('neck.03') - bone.head[:] = 0.0000, -0.2428, 0.5162 - bone.tail[:] = 0.0000, -0.4190, 0.8722 - bone.roll = -0.0000 + bone.head[:] = 0.0000, -0.0242, 0.0514 + bone.tail[:] = 0.0000, -0.0417, 0.0868 + bone.roll = 0.0000 bone.connected = True bone.parent = arm.edit_bones['neck.02'] bone = arm.edit_bones.new('neck.04') - bone.head[:] = 0.0000, -0.4190, 0.8722 - bone.tail[:] = 0.0000, -0.5111, 1.1956 + bone.head[:] = 0.0000, -0.0417, 0.0868 + bone.tail[:] = 0.0000, -0.0509, 0.1190 bone.roll = 0.0000 bone.connected = True bone.parent = arm.edit_bones['neck.03'] bone = arm.edit_bones.new('neck.05') - bone.head[:] = 0.0000, -0.5111, 1.1956 - bone.tail[:] = 0.0000, -0.5391, 1.6081 + bone.head[:] = 0.0000, -0.0509, 0.1190 + bone.tail[:] = 0.0000, -0.0537, 0.1600 bone.roll = 0.0000 bone.connected = True bone.parent = arm.edit_bones['neck.04'] bpy.ops.object.mode_set(mode='OBJECT') pbone = obj.pose.bones['head'] - pbone['type'] = 'neck' + pbone['type'] = 'neck_flex' def metarig_definition(obj, orig_bone_name): @@ -90,7 +92,7 @@ def metarig_definition(obj, orig_bone_name): children = head.children if len(children) != 1: - print("expected the head to have only 1 child.") + raise RigifyError("expected the head bone '%s' to have only 1 child." % orig_bone_name) child = children[0] bone_definition = [body.name, head.name, child.name] @@ -98,7 +100,7 @@ def metarig_definition(obj, orig_bone_name): return bone_definition -def main(obj, bone_definition, base_names): +def main(obj, bone_definition, base_names, options): from Mathutils import Vector arm = obj.data @@ -116,16 +118,21 @@ def main(obj, bone_definition, base_names): setattr(mt_chain, attr, neck_chain[i]) mt_chain.update() - neck_chain_basename = mt_chain.neck_01_e.basename + neck_chain_basename = base_names[mt_chain.neck_01_e.name].split(".")[0] neck_chain_segment_length = mt_chain.neck_01_e.length - ex = bone_class_instance(obj, ["body", "head", "head_hinge", "neck_socket"]) # hinge & extras + ex = bone_class_instance(obj, ["head", "head_hinge", "neck_socket", "head_ctrl"]) # hinge & extras # Add the head hinge at the bodys location, becomes the parent of the original head + # apply everything to this copy of the chain + ex_chain = mt_chain.copy(base_names=base_names) + ex_chain.neck_01_e.parent = mt_chain.neck_01_e.parent + # Copy the head bone and offset - ex.head_e = copy_bone_simple(arm, mt.head, "MCH_%s" % mt.head, parent=True) + ex.head_e = copy_bone_simple(arm, mt.head, "MCH_%s" % base_names[mt.head], parent=True) + ex.head_e.connected = False ex.head = ex.head_e.name # offset head_length = ex.head_e.length @@ -133,34 +140,35 @@ def main(obj, bone_definition, base_names): ex.head_e.tail.y += head_length / 2.0 # Yes, use the body bone but call it a head hinge - ex.head_hinge_e = copy_bone_simple(arm, mt.body, "MCH_%s_hinge" % mt.head, parent=True) + ex.head_hinge_e = copy_bone_simple(arm, mt.body, "MCH_%s_hinge" % base_names[mt.head], parent=False) + ex.head_hinge_e.connected = False ex.head_hinge = ex.head_hinge_e.name ex.head_hinge_e.head.y += head_length / 4.0 ex.head_hinge_e.tail.y += head_length / 4.0 - # reparent the head, assume its not connected - mt.head_e.parent = ex.head_hinge_e - # Insert the neck socket, the head copys this loation ex.neck_socket_e = arm.edit_bones.new("MCH-%s_socked" % neck_chain_basename) ex.neck_socket = ex.neck_socket_e.name + ex.neck_socket_e.connected = False ex.neck_socket_e.parent = mt.body_e ex.neck_socket_e.head = mt.head_e.head ex.neck_socket_e.tail = mt.head_e.head - Vector(0.0, neck_chain_segment_length / 2.0, 0.0) ex.neck_socket_e.roll = 0.0 - # offset the head, not really needed since it has a copyloc constraint - mt.head_e.head.y += head_length / 4.0 - mt.head_e.tail.y += head_length / 4.0 - for i, attr in enumerate(mt_chain.attr_names): - neck_e = getattr(mt_chain, attr + "_e") + # copy of the head for controling + ex.head_ctrl_e = copy_bone_simple(arm, mt.head, base_names[mt.head]) + ex.head_ctrl = ex.head_ctrl_e.name + ex.head_ctrl_e.parent = ex.head_hinge_e + + for i, attr in enumerate(ex_chain.attr_names): + neck_e = getattr(ex_chain, attr + "_e") # dont store parent names, re-reference as each chain bones parent. - neck_e_parent = arm.edit_bones.new("MCH-rot_%s" % neck_e.name) + neck_e_parent = arm.edit_bones.new("MCH-rot_%s" % base_names[getattr(mt_chain, attr)]) neck_e_parent.head = neck_e.head - neck_e_parent.tail = neck_e.head + Vector(0.0, 0.0, neck_chain_segment_length / 2.0) - neck_e_parent.roll = 0.0 + neck_e_parent.tail = neck_e.head + (mt.head_e.vector.normalize() * neck_chain_segment_length / 2.0) + neck_e_parent.roll = mt.head_e.roll orig_parent = neck_e.parent neck_e.connected = False @@ -177,20 +185,21 @@ def main(obj, bone_definition, base_names): mt.update() mt_chain.update() + ex_chain.update() ex.update() # Simple one off constraints, no drivers - con = mt.head_p.constraints.new('COPY_LOCATION') + con = ex.head_ctrl_p.constraints.new('COPY_LOCATION') con.target = obj con.subtarget = ex.neck_socket con = ex.head_p.constraints.new('COPY_ROTATION') con.target = obj - con.subtarget = mt.head + con.subtarget = ex.head_ctrl # driven hinge - prop = rna_idprop_ui_prop_get(mt.head_p, "hinge", create=True) - mt.head_p["hinge"] = 0.0 + prop = rna_idprop_ui_prop_get(ex.head_ctrl_p, "hinge", create=True) + ex.head_ctrl_p["hinge"] = 0.0 prop["soft_min"] = 0.0 prop["soft_max"] = 1.0 @@ -200,7 +209,7 @@ def main(obj, bone_definition, base_names): con.subtarget = mt.body # add driver - hinge_driver_path = mt.head_p.path_to_id() + '["hinge"]' + hinge_driver_path = ex.head_ctrl_p.path_to_id() + '["hinge"]' fcurve = con.driver_add("influence", 0) driver = fcurve.driver @@ -209,7 +218,7 @@ def main(obj, bone_definition, base_names): tar.name = "var" tar.id_type = 'OBJECT' tar.id = obj - tar.rna_path = hinge_driver_path + tar.data_path = hinge_driver_path #mod = fcurve_driver.modifiers.new('GENERATOR') mod = fcurve.modifiers[0] @@ -217,23 +226,34 @@ def main(obj, bone_definition, base_names): mod.coefficients[0] = 1.0 mod.coefficients[1] = -1.0 - head_driver_path = mt.head_p.path_to_id() + head_driver_path = ex.head_ctrl_p.path_to_id() - # b01/max(0.001,b01+b02+b03+b04+b05) target_names = [("b%.2d" % (i + 1)) for i in range(len(neck_chain))] - expression_suffix = "/max(0.001,%s)" % "+".join(target_names) + + ex.head_ctrl_p["bend_tot"] = 0.0 + fcurve = ex.head_ctrl_p.driver_add('["bend_tot"]', 0) + driver = fcurve.driver + driver.type = 'SUM' + fcurve.modifiers.remove(0) # grr dont need a modifier + + for i in range(len(neck_chain)): + tar = driver.targets.new() + tar.name = target_names[i] + tar.id_type = 'OBJECT' + tar.id = obj + tar.data_path = head_driver_path + ('["bend_%.2d"]' % (i + 1)) - for i, attr in enumerate(mt_chain.attr_names): - neck_p = getattr(mt_chain, attr + "_p") + for i, attr in enumerate(ex_chain.attr_names): + neck_p = getattr(ex_chain, attr + "_p") neck_p.lock_location = True, True, True neck_p.lock_location = True, True, True neck_p.lock_rotations_4d = True # Add bend prop prop_name = "bend_%.2d" % (i + 1) - prop = rna_idprop_ui_prop_get(mt.head_p, prop_name, create=True) - mt.head_p[prop_name] = 1.0 + prop = rna_idprop_ui_prop_get(ex.head_ctrl_p, prop_name, create=True) + ex.head_ctrl_p[prop_name] = 1.0 prop["soft_min"] = 0.0 prop["soft_max"] = 1.0 @@ -251,16 +271,40 @@ def main(obj, bone_definition, base_names): fcurve = con.driver_add("influence", 0) driver = fcurve.driver driver.type = 'SCRIPTED' - # b01/max(0.001,b01+b02+b03+b04+b05) - driver.expression = target_names[i] + expression_suffix + driver.expression = "bend/bend_tot" + fcurve.modifiers.remove(0) # grr dont need a modifier - for j in range(len(neck_chain)): - tar = driver.targets.new() - tar.name = target_names[j] - tar.id_type = 'OBJECT' - tar.id = obj - tar.rna_path = head_driver_path + ('["bend_%.2d"]' % (j + 1)) + + # add target + tar = driver.targets.new() + tar.name = "bend_tot" + tar.id_type = 'OBJECT' + tar.id = obj + tar.data_path = head_driver_path + ('["bend_tot"]') + + tar = driver.targets.new() + tar.name = "bend" + tar.id_type = 'OBJECT' + tar.id = obj + tar.data_path = head_driver_path + ('["%s"]' % prop_name) + + + # finally constrain the original bone to this one + orig_neck_p = getattr(mt_chain, attr + "_p") + con = orig_neck_p.constraints.new('COPY_ROTATION') + con.target = obj + con.subtarget = neck_p.name + + + # last step setup layers + layers = get_layer_dict(options) + lay = layers["extra"] + for attr in ex_chain.attr_names: + getattr(ex_chain, attr + "_b").layer = lay + for attr in ex.attr_names: + getattr(ex, attr + "_b").layer = lay + # no blending the result of this return None diff --git a/release/scripts/modules/rigify/palm.py b/release/scripts/modules/rigify/palm_curl.py similarity index 60% rename from release/scripts/modules/rigify/palm.py rename to release/scripts/modules/rigify/palm_curl.py index 861655dae5d..f2ddcca6d59 100644 --- a/release/scripts/modules/rigify/palm.py +++ b/release/scripts/modules/rigify/palm_curl.py @@ -19,7 +19,8 @@ # import bpy -from rigify import get_bone_data, copy_bone_simple +from rigify import get_layer_dict +from rigify_utils import copy_bone_simple, get_side_name from rna_prop_ui import rna_idprop_ui_prop_get # not used, defined for completeness @@ -27,76 +28,79 @@ METARIG_NAMES = tuple() def metarig_template(): + # generated by rigify.write_meta_rig bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.object + obj = bpy.context.active_object arm = obj.data bone = arm.edit_bones.new('hand') - bone.head[:] = 0.0082, -1.2492, 0.0000 - bone.tail[:] = 0.0423, -0.4150, 0.0000 + bone.head[:] = 0.0004, -0.0629, 0.0000 + bone.tail[:] = 0.0021, -0.0209, 0.0000 bone.roll = 0.0000 bone.connected = False bone = arm.edit_bones.new('palm.03') - bone.head[:] = 0.0000, 0.0000, -0.0000 - bone.tail[:] = 0.0506, 1.2781, -0.1299 + bone.head[:] = -0.0000, 0.0000, 0.0000 + bone.tail[:] = 0.0025, 0.0644, -0.0065 bone.roll = -3.1396 bone.connected = False bone.parent = arm.edit_bones['hand'] - bone = arm.edit_bones.new('palm.04') - bone.head[:] = 0.5000, -0.0000, 0.0000 - bone.tail[:] = 0.6433, 1.2444, -0.1299 + bone = arm.edit_bones.new('palm.02') + bone.head[:] = 0.0252, -0.0000, 0.0000 + bone.tail[:] = 0.0324, 0.0627, -0.0065 bone.roll = -3.1357 bone.connected = False bone.parent = arm.edit_bones['hand'] - bone = arm.edit_bones.new('palm.05') - bone.head[:] = 1.0000, 0.0000, 0.0000 - bone.tail[:] = 1.3961, 1.0084, -0.1299 + bone = arm.edit_bones.new('palm.01') + bone.head[:] = 0.0504, 0.0000, 0.0000 + bone.tail[:] = 0.0703, 0.0508, -0.0065 bone.roll = -3.1190 bone.connected = False bone.parent = arm.edit_bones['hand'] - bone = arm.edit_bones.new('palm.02') - bone.head[:] = -0.5000, 0.0000, -0.0000 - bone.tail[:] = -0.5674, 1.2022, -0.1299 + bone = arm.edit_bones.new('palm.04') + bone.head[:] = -0.0252, 0.0000, 0.0000 + bone.tail[:] = -0.0286, 0.0606, -0.0065 bone.roll = 3.1386 bone.connected = False bone.parent = arm.edit_bones['hand'] - bone = arm.edit_bones.new('palm.01') - bone.head[:] = -1.0000, 0.0000, -0.0000 - bone.tail[:] = -1.3286, 1.0590, -0.1299 + bone = arm.edit_bones.new('palm.05') + bone.head[:] = -0.0504, 0.0000, 0.0000 + bone.tail[:] = -0.0669, 0.0534, -0.0065 bone.roll = 3.1239 bone.connected = False bone.parent = arm.edit_bones['hand'] - bone = arm.edit_bones.new('palm.06') - bone.head[:] = 1.3536, -0.2941, 0.0000 - bone.tail[:] = 2.1109, 0.4807, -0.1299 + bone = arm.edit_bones.new('thumb') + bone.head[:] = 0.0682, -0.0148, 0.0000 + bone.tail[:] = 0.1063, 0.0242, -0.0065 bone.roll = -3.0929 bone.connected = False bone.parent = arm.edit_bones['hand'] bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['hand'] - pbone['type'] = 'palm' + pbone = obj.pose.bones['palm.01'] + pbone['type'] = 'palm_curl' def metarig_definition(obj, orig_bone_name): ''' - The bone given is the first in a chain - Expects an array of children sorted with the little finger lowest. + The bone given is the first in an array of siblings with a matching basename + sorted with pointer first, little finger last. eg. - parent -> [pinky, ring... etc] + [pointer, middle, ring, pinky... ] # any number of fingers ''' arm = obj.data - bone_definition = [orig_bone_name] - palm_ebone = arm.bones[orig_bone_name] - children = [ebone.name for ebone in palm_ebone.children] - children.sort() # simply assume the pinky has the lowest name - bone_definition.extend(children) + palm_bone = arm.bones[orig_bone_name] + palm_parent = palm_bone.parent + palm_base = palm_bone.basename + bone_definition = [bone.name for bone in palm_parent.children if bone.basename == palm_base] + bone_definition.sort() + bone_definition.reverse() - return bone_definition + return [palm_parent.name] + bone_definition -def main(obj, bone_definition, base_names): - arm, palm_pbone, palm_ebone = get_bone_data(obj, bone_definition[0]) +def main(obj, bone_definition, base_names, options): + arm = obj.data + children = bone_definition[1:] # Make a copy of the pinky @@ -104,7 +108,10 @@ def main(obj, bone_definition, base_names): pinky_ebone = arm.edit_bones[children[0]] ring_ebone = arm.edit_bones[children[1]] - control_ebone = copy_bone_simple(arm, pinky_ebone.name, "palm_control", parent=True) + # FIXME, why split the second one? + base_name = base_names[pinky_ebone.name].rsplit('.', 2)[0] + + control_ebone = copy_bone_simple(arm, pinky_ebone.name, base_name + get_side_name(base_names[pinky_ebone.name]), parent=True) control_name = control_ebone.name offset = (pinky_ebone.head - ring_ebone.head) @@ -113,9 +120,9 @@ def main(obj, bone_definition, base_names): bpy.ops.object.mode_set(mode='OBJECT') - - arm, control_pbone, control_ebone = get_bone_data(obj, control_name) - arm, pinky_pbone, pinky_ebone = get_bone_data(obj, children[0]) + arm = obj.data + control_pbone = obj.pose.bones[control_name] + pinky_pbone = obj.pose.bones[children[0]] control_pbone.rotation_mode = 'YZX' control_pbone.lock_rotation = False, True, True @@ -140,7 +147,7 @@ def main(obj, bone_definition, base_names): tar.name = "x" tar.id_type = 'OBJECT' tar.id = obj - tar.rna_path = controller_path + ".rotation_euler[0]" + tar.data_path = controller_path + ".rotation_euler[0]" # ***** @@ -151,23 +158,27 @@ def main(obj, bone_definition, base_names): tar.name = "x" tar.id_type = 'OBJECT' tar.id = obj - tar.rna_path = controller_path + ".rotation_euler[0]" + tar.data_path = controller_path + ".rotation_euler[0]" # ***** driver = driver_fcurves[2].driver driver.expression = "(1.0-cos(x))-s" + + for fcurve in driver_fcurves: + fcurve.modifiers.remove(0) # grr dont need a modifier + tar = driver.targets.new() tar.name = "x" tar.id_type = 'OBJECT' tar.id = obj - tar.rna_path = controller_path + ".rotation_euler[0]" + tar.data_path = controller_path + ".rotation_euler[0]" tar = driver.targets.new() tar.name = "s" tar.id_type = 'OBJECT' tar.id = obj - tar.rna_path = controller_path + '["spread"]' + tar.data_path = controller_path + '["spread"]' for i, child_name in enumerate(children): @@ -204,5 +215,29 @@ def main(obj, bone_definition, base_names): child_pbone = obj.pose.bones[children[-1]] child_pbone.rotation_mode = 'QUATERNION' + # fix at the end since there is some trouble with tx info not being updated otherwise + def x_direction(): + # NOTE: the direction of the Z rotation depends on which side the palm is on. + # we could do a simple side-of-x test but better to work out the direction + # the hand is facing. + from Mathutils import Vector, AngleBetweenVecs + from math import degrees + child_pbone_01 = obj.pose.bones[children[0]].bone + child_pbone_02 = obj.pose.bones[children[1]].bone + + rel_vec = child_pbone_01.head - child_pbone_02.head + x_vec = child_pbone_01.matrix.rotationPart() * Vector(1.0, 0.0, 0.0) + + return degrees(AngleBetweenVecs(rel_vec, x_vec)) > 90.0 + + if x_direction(): # flip + driver.expression = "-(%s)" % driver.expression + + + # last step setup layers + layers = get_layer_dict(options) + arm.bones[control_name].layer = layers["extra"] + + # no blending the result of this return None diff --git a/release/scripts/modules/rigify/spine.py b/release/scripts/modules/rigify/spine_pivot_flex.py similarity index 71% rename from release/scripts/modules/rigify/spine.py rename to release/scripts/modules/rigify/spine_pivot_flex.py index 16cd4067eca..7f74028ddfb 100644 --- a/release/scripts/modules/rigify/spine.py +++ b/release/scripts/modules/rigify/spine_pivot_flex.py @@ -19,7 +19,8 @@ # import bpy -from rigify import bone_class_instance, copy_bone_simple +from rigify import get_layer_dict +from rigify_utils import bone_class_instance, copy_bone_simple from rna_prop_ui import rna_idprop_ui_prop_get # not used, defined for completeness @@ -27,67 +28,67 @@ METARIG_NAMES = ("pelvis", "ribcage") def metarig_template(): + # generated by rigify.write_meta_rig bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.object + obj = bpy.context.active_object arm = obj.data bone = arm.edit_bones.new('pelvis') - bone.head[:] = -0.0000, -0.2559, 0.8673 - bone.tail[:] = -0.0000, -0.2559, -0.1327 + bone.head[:] = 0.0000, -0.0306, 0.1039 + bone.tail[:] = 0.0000, -0.0306, -0.0159 bone.roll = 0.0000 bone.connected = False bone = arm.edit_bones.new('rib_cage') - bone.head[:] = -0.0000, -0.2559, 0.8673 - bone.tail[:] = -0.0000, -0.2559, 1.8673 + bone.head[:] = 0.0000, -0.0306, 0.1039 + bone.tail[:] = 0.0000, -0.0306, 0.2236 bone.roll = -0.0000 bone.connected = False bone.parent = arm.edit_bones['pelvis'] bone = arm.edit_bones.new('spine.01') - bone.head[:] = -0.0000, -0.0000, 0.0000 - bone.tail[:] = -0.0000, -0.2559, 0.8673 + bone.head[:] = 0.0000, 0.0000, -0.0000 + bone.tail[:] = 0.0000, -0.0306, 0.1039 bone.roll = -0.0000 bone.connected = False bone.parent = arm.edit_bones['rib_cage'] bone = arm.edit_bones.new('spine.02') - bone.head[:] = -0.0000, -0.2559, 0.8673 - bone.tail[:] = -0.0000, -0.3321, 1.7080 + bone.head[:] = 0.0000, -0.0306, 0.1039 + bone.tail[:] = -0.0000, -0.0398, 0.2045 bone.roll = -0.0000 bone.connected = True bone.parent = arm.edit_bones['spine.01'] bone = arm.edit_bones.new('spine.03') - bone.head[:] = -0.0000, -0.3321, 1.7080 - bone.tail[:] = -0.0000, -0.0787, 2.4160 - bone.roll = 0.0000 + bone.head[:] = -0.0000, -0.0398, 0.2045 + bone.tail[:] = -0.0000, -0.0094, 0.2893 + bone.roll = -0.0000 bone.connected = True bone.parent = arm.edit_bones['spine.02'] bone = arm.edit_bones.new('spine.04') - bone.head[:] = -0.0000, -0.0787, 2.4160 - bone.tail[:] = -0.0000, 0.2797, 3.0016 - bone.roll = 0.0000 + bone.head[:] = -0.0000, -0.0094, 0.2893 + bone.tail[:] = -0.0000, 0.0335, 0.3595 + bone.roll = -0.0000 bone.connected = True bone.parent = arm.edit_bones['spine.03'] bone = arm.edit_bones.new('spine.05') - bone.head[:] = -0.0000, 0.2797, 3.0016 - bone.tail[:] = -0.0000, 0.4633, 3.6135 - bone.roll = 0.0000 + bone.head[:] = -0.0000, 0.0335, 0.3595 + bone.tail[:] = -0.0000, 0.0555, 0.4327 + bone.roll = -0.0000 bone.connected = True bone.parent = arm.edit_bones['spine.04'] bone = arm.edit_bones.new('spine.06') - bone.head[:] = -0.0000, 0.4633, 3.6135 - bone.tail[:] = -0.0000, 0.3671, 4.3477 + bone.head[:] = -0.0000, 0.0555, 0.4327 + bone.tail[:] = -0.0000, 0.0440, 0.5207 bone.roll = -0.0000 bone.connected = True bone.parent = arm.edit_bones['spine.05'] bone = arm.edit_bones.new('spine.07') - bone.head[:] = -0.0000, 0.3671, 4.3477 - bone.tail[:] = -0.0000, 0.0175, 5.0033 + bone.head[:] = -0.0000, 0.0440, 0.5207 + bone.tail[:] = -0.0000, 0.0021, 0.5992 bone.roll = -0.0000 bone.connected = True bone.parent = arm.edit_bones['spine.06'] bpy.ops.object.mode_set(mode='OBJECT') pbone = obj.pose.bones['rib_cage'] - pbone['type'] = 'spine' - + pbone['type'] = 'spine_pivot_flex' def metarig_definition(obj, orig_bone_name): ''' @@ -102,11 +103,15 @@ def metarig_definition(obj, orig_bone_name): ribcage = arm.bones[orig_bone_name] pelvis = ribcage.parent + if pelvis is None: + raise RigifyError("expected the ribcage bone:'%s' to have a parent (ribcage)." % ribcage.name) + children = ribcage.children if len(children) != 1: - print("expected the ribcage to have only 1 child.") + raise RigifyError("expected the ribcage to have only 1 child.") child = children[0] + bone_definition = [pelvis.name, ribcage.name, child.name] bone_definition.extend([child.name for child in child.children_recursive_basename]) return bone_definition @@ -116,7 +121,7 @@ def fk(*args): main(*args) -def main(obj, bone_definition, base_names): +def main(obj, bone_definition, base_names, options): from Mathutils import Vector, RotationMatrix from math import radians, pi @@ -132,60 +137,56 @@ def main(obj, bone_definition, base_names): spine_chain = [arm.edit_bones[child_name] for child_name in spine_chain_orig] spine_chain_basename = base_names[spine_chain[0].name].rsplit(".", 1)[0] # probably 'ORG-spine.01' -> 'spine' spine_chain_len = len(spine_chain_orig) - print(spine_chain_orig) - print(spine_chain_len) - - ''' - children = mt.ribcage_e.children - child = children[0] # validate checks for 1 only. - spine_chain_basename = child.basename # probably 'spine' - spine_chain_segment_length = child.length - spine_chain = [child] + child.children_recursive_basename - spine_chain_orig = [child.name for child in spine_chain] - ''' child = spine_chain[0] spine_chain_segment_length = child.length - child.parent = mt.pelvis_e # was mt.ribcage + #child.parent = mt.pelvis_e # was mt.ribcage # The first bone in the chain happens to be the basis of others, create them now - ex = bone_class_instance(obj, ["pelvis", "ribcage", "ribcage_hinge", "spine_rotate"]) + ex = bone_class_instance(obj, ["pelvis", "pelvis_copy", "ribcage", "ribcage_hinge", "ribcage_copy", "spine_rotate"]) df = bone_class_instance(obj, ["pelvis", "ribcage"]) # DEF-wgt_pelvis, DEF-wgt_rib_cage + ex.pelvis_copy_e = copy_bone_simple(arm, mt.pelvis, base_names[mt.pelvis]) # no parent + ex.pelvis_copy = ex.pelvis_copy_e.name + ex.pelvis_copy_e.local_location = False # copy the pelvis, offset to make MCH-spine_rotate and MCH-ribcage_hinge - ex.ribcage_hinge_e = copy_bone_simple(arm, mt.pelvis, "MCH-%s_hinge" % mt.ribcage) + ex.ribcage_hinge_e = copy_bone_simple(arm, mt.pelvis, "MCH-%s_hinge" % base_names[mt.ribcage]) ex.ribcage_hinge = ex.ribcage_hinge_e.name ex.ribcage_hinge_e.translate(Vector(0.0, spine_chain_segment_length / 4.0, 0.0)) - mt.ribcage_e.parent = ex.ribcage_hinge_e - ex.spine_rotate_e = copy_bone_simple(arm, mt.pelvis, "MCH-%s_rotate" % spine_chain_basename) + ex.spine_rotate_e = copy_bone_simple(arm, mt.ribcage, "MCH-%s_rotate" % spine_chain_basename) ex.spine_rotate = ex.spine_rotate_e.name ex.spine_rotate_e.translate(Vector(0.0, spine_chain_segment_length / 2.0, 0.0)) - # swap head/tail - ex.spine_rotate_e.head, ex.spine_rotate_e.tail = ex.spine_rotate_e.tail.copy(), ex.spine_rotate_e.head.copy() - ex.spine_rotate_e.parent = mt.pelvis_e + ex.spine_rotate_e.connected = False + ex.spine_rotate_e.parent = ex.pelvis_copy_e - df.pelvis_e = copy_bone_simple(arm, child.name, "DEF-wgt_%s" % mt.pelvis) + df.pelvis_e = copy_bone_simple(arm, child.name, "DEF-wgt_%s" % base_names[mt.pelvis]) df.pelvis = df.pelvis_e.name df.pelvis_e.translate(Vector(spine_chain_segment_length * 2.0, - spine_chain_segment_length, 0.0)) - ex.pelvis_e = copy_bone_simple(arm, child.name, "MCH-wgt_%s" % mt.pelvis) + ex.pelvis_e = copy_bone_simple(arm, child.name, "MCH-wgt_%s" % base_names[mt.pelvis]) ex.pelvis = ex.pelvis_e.name ex.pelvis_e.translate(Vector(0.0, - spine_chain_segment_length, 0.0)) - ex.pelvis_e.parent = mt.pelvis_e + ex.pelvis_e.connected = False + ex.pelvis_e.parent = ex.pelvis_copy_e # Copy the last bone now child = spine_chain[-1] - df.ribcage_e = copy_bone_simple(arm, child.name, "DEF-wgt_%s" % mt.ribcage) + df.ribcage_e = copy_bone_simple(arm, child.name, "DEF-wgt_%s" % base_names[mt.ribcage]) df.ribcage = df.ribcage_e.name df.ribcage_e.translate(Vector(spine_chain_segment_length * 2.0, - df.ribcage_e.length / 2.0, 0.0)) - ex.ribcage_e = copy_bone_simple(arm, child.name, "MCH-wgt_%s" % mt.ribcage) + ex.ribcage_copy_e = copy_bone_simple(arm, mt.ribcage, base_names[mt.ribcage]) + ex.ribcage_copy = ex.ribcage_copy_e.name + ex.ribcage_copy_e.connected = False + ex.ribcage_copy_e.parent = ex.ribcage_hinge_e + + ex.ribcage_e = copy_bone_simple(arm, child.name, "MCH-wgt_%s" % base_names[mt.ribcage]) ex.ribcage = ex.ribcage_e.name ex.ribcage_e.translate(Vector(0.0, - ex.ribcage_e.length / 2.0, 0.0)) - ex.ribcage_e.parent = mt.ribcage_e + ex.ribcage_e.parent = ex.ribcage_copy_e spine_chain = [child.name for child in spine_chain] @@ -221,28 +222,30 @@ def main(obj, bone_definition, base_names): # Now we need to re-parent these chains for i, child_name in enumerate(spine_chain_orig): attr = ex_chain.attr_names[i] + "_e" - + ebone = getattr(ex_chain, attr) if i == 0: - getattr(ex_chain, attr).parent = mt.pelvis_e + ebone.connected = False + ebone.parent = ex.pelvis_copy_e else: - attr_parent = ex_chain.attr_names[i-1] + "_e" - getattr(ex_chain, attr).parent = getattr(ex_chain, attr_parent) + attr_parent = ex_chain.attr_names[i - 1] + "_e" + ebone.parent = getattr(ex_chain, attr_parent) # intentional! get the parent from the other paralelle chain member - getattr(rv_chain, attr).parent = getattr(ex_chain, attr) + getattr(rv_chain, attr).parent = ebone # ex_chain needs to interlace bones! # Note, skip the first bone for i in range(1, spine_chain_len): # similar to neck - child_name_orig = spine_chain_orig[i] + child_name_orig = base_names[spine_chain_orig[i]] spine_e = getattr(mt_chain, mt_chain.attr_names[i] + "_e") # dont store parent names, re-reference as each chain bones parent. spine_e_parent = arm.edit_bones.new("MCH-rot_%s" % child_name_orig) spine_e_parent.head = spine_e.head - spine_e_parent.tail = spine_e.head + Vector(0.0, 0.0, spine_chain_segment_length / 2.0) - spine_e_parent.roll = 0.0 + spine_e_parent.tail = spine_e.head + (mt.ribcage_e.vector.normalize() * spine_chain_segment_length / 2.0) + spine_e_parent.roll = mt.ribcage_e.roll + spine_e = getattr(ex_chain, ex_chain.attr_names[i] + "_e") orig_parent = spine_e.parent @@ -290,6 +293,8 @@ def main(obj, bone_definition, base_names): con.target_space = 'LOCAL' # df.ribcage_p / DEF-wgt_rib_cage + df.ribcage_p.lock_location = True, True, True + con = df.ribcage_p.constraints.new('COPY_ROTATION') con.target = obj con.subtarget = ex.ribcage @@ -305,11 +310,9 @@ def main(obj, bone_definition, base_names): con = ex.ribcage_hinge_p.constraints.new('COPY_ROTATION') con.name = "hinge" con.target = obj - con.subtarget = mt.pelvis + con.subtarget = ex.pelvis_copy # add driver - hinge_driver_path = mt.ribcage_p.path_to_id() + '["hinge"]' - fcurve = con.driver_add("influence", 0) driver = fcurve.driver tar = driver.targets.new() @@ -317,7 +320,7 @@ def main(obj, bone_definition, base_names): tar.name = "var" tar.id_type = 'OBJECT' tar.id = obj - tar.rna_path = hinge_driver_path + tar.data_path = ex.ribcage_copy_p.path_to_id() + '["hinge"]' mod = fcurve.modifiers[0] mod.poly_order = 1 @@ -327,7 +330,7 @@ def main(obj, bone_definition, base_names): con = ex.spine_rotate_p.constraints.new('COPY_ROTATION') con.target = obj - con.subtarget = mt.ribcage + con.subtarget = ex.ribcage_copy # ex.pelvis_p / MCH-wgt_pelvis @@ -353,29 +356,23 @@ def main(obj, bone_definition, base_names): con.target = obj con.subtarget = getattr(mt_chain, mt_chain.attr_names[-1]) - # mt.pelvis_p / rib_cage - con = mt.ribcage_p.constraints.new('COPY_LOCATION') + # ex.pelvis_copy_p / rib_cage + con = ex.ribcage_copy_p.constraints.new('COPY_LOCATION') con.target = obj - con.subtarget = mt.pelvis + con.subtarget = ex.pelvis_copy con.head_tail = 0.0 # This stores all important ID props - prop = rna_idprop_ui_prop_get(mt.ribcage_p, "hinge", create=True) - mt.ribcage_p["hinge"] = 1.0 + prop = rna_idprop_ui_prop_get(ex.ribcage_copy_p, "hinge", create=True) + ex.ribcage_copy_p["hinge"] = 1.0 prop["soft_min"] = 0.0 prop["soft_max"] = 1.0 - prop = rna_idprop_ui_prop_get(mt.ribcage_p, "pivot_slide", create=True) - mt.ribcage_p["pivot_slide"] = 0.5 + prop = rna_idprop_ui_prop_get(ex.ribcage_copy_p, "pivot_slide", create=True) + ex.ribcage_copy_p["pivot_slide"] = 1.0 / spine_chain_len prop["soft_min"] = 1.0 / spine_chain_len prop["soft_max"] = 1.0 - for i in range(spine_chain_len - 1): - prop_name = "bend_%.2d" % (i + 1) - prop = rna_idprop_ui_prop_get(mt.ribcage_p, prop_name, create=True) - mt.ribcage_p[prop_name] = 1.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 # Create a fake connected parent/child relationship with bone location constraints # positioned at the tip. @@ -393,15 +390,31 @@ def main(obj, bone_definition, base_names): # Constrain 'inbetween' bones - - # b01/max(0.001,b01+b02+b03+b04+b05) target_names = [("b%.2d" % (i + 1)) for i in range(spine_chain_len - 1)] - expression_suffix = "/max(0.001,%s)" % "+".join(target_names) + rib_driver_path = ex.ribcage_copy_p.path_to_id() - rib_driver_path = mt.ribcage_p.path_to_id() + ex.ribcage_copy_p["bend_tot"] = 0.0 + fcurve = ex.ribcage_copy_p.driver_add('["bend_tot"]', 0) + driver = fcurve.driver + driver.type = 'SUM' + fcurve.modifiers.remove(0) # grr dont need a modifier + + for i in range(spine_chain_len - 1): + tar = driver.targets.new() + tar.name = target_names[i] + tar.id_type = 'OBJECT' + tar.id = obj + tar.data_path = rib_driver_path + ('["bend_%.2d"]' % (i + 1)) for i in range(1, spine_chain_len): + # Add bend prop + prop_name = "bend_%.2d" % i + prop = rna_idprop_ui_prop_get(ex.ribcage_copy_p, prop_name, create=True) + ex.ribcage_copy_p[prop_name] = 1.0 + prop["soft_min"] = 0.0 + prop["soft_max"] = 1.0 + spine_p = getattr(ex_chain, ex_chain.attr_names[i] + "_p") spine_p_parent = spine_p.parent # interlaced bone @@ -416,16 +429,24 @@ def main(obj, bone_definition, base_names): fcurve = con.driver_add("influence", 0) driver = fcurve.driver driver.type = 'SCRIPTED' - # b01/max(0.001,b01+b02+b03+b04+b05) - driver.expression = target_names[i - 1] + expression_suffix + driver.expression = "bend/bend_tot" + fcurve.modifiers.remove(0) # grr dont need a modifier - for j in range(spine_chain_len - 1): - tar = driver.targets.new() - tar.name = target_names[j] - tar.id_type = 'OBJECT' - tar.id = obj - tar.rna_path = rib_driver_path + ('["bend_%.2d"]' % (j + 1)) + + # add target + tar = driver.targets.new() + tar.name = "bend_tot" + tar.id_type = 'OBJECT' + tar.id = obj + tar.data_path = rib_driver_path + ('["bend_tot"]') + + tar = driver.targets.new() + tar.name = "bend" + tar.id_type = 'OBJECT' + tar.id = obj + tar.data_path = rib_driver_path + ('["%s"]' % prop_name) + # original bone drivers @@ -467,12 +488,27 @@ def main(obj, bone_definition, base_names): tar.name = "var" tar.id_type = 'OBJECT' tar.id = obj - tar.rna_path = rib_driver_path + '["pivot_slide"]' + tar.data_path = rib_driver_path + '["pivot_slide"]' mod = fcurve.modifiers[0] mod.poly_order = 1 mod.coefficients[0] = - (i - 1) mod.coefficients[1] = spine_chain_len + + # last step setup layers + layers = get_layer_dict(options) + lay = layers["extra"] + for attr in ex.attr_names: + getattr(ex, attr + "_b").layer = lay + for attr in ex_chain.attr_names: + getattr(ex_chain, attr + "_b").layer = lay + + lay = layers["main"] + for attr in df.attr_names: + getattr(df, attr + "_b").layer = lay + for attr in rv_chain.attr_names: + getattr(rv_chain, attr + "_b").layer = lay + # no support for blending chains return None diff --git a/release/scripts/modules/rigify_utils.py b/release/scripts/modules/rigify_utils.py new file mode 100644 index 00000000000..371792a3633 --- /dev/null +++ b/release/scripts/modules/rigify_utils.py @@ -0,0 +1,486 @@ +# ##### 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +# + +# rigify its self does not depend on this module, however some of the +# rigify templates use these utility functions. +# +# So even though this can be for general purpose use, this module was created +# for rigify so in some cases seemingly generic functions make assumptions +# that a generic function would need to check for. + +import bpy +from Mathutils import Vector +from rna_prop_ui import rna_idprop_ui_prop_get + +DELIMITER = '-._' +EMPTY_LAYER = [False] * 32 + + +def add_stretch_to(obj, from_name, to_name, name): + ''' + Adds a bone that stretches from one to another + ''' + + mode_orig = obj.mode + bpy.ops.object.mode_set(mode='EDIT') + + arm = obj.data + stretch_ebone = arm.edit_bones.new(name) + stretch_name = stretch_ebone.name + del name + + head = stretch_ebone.head = arm.edit_bones[from_name].head.copy() + #tail = stretch_ebone.tail = arm.edit_bones[to_name].head.copy() + + # annoying exception for zero length bones, since its using stretch_to the rest pose doesnt really matter + #if (head - tail).length < 0.1: + if 1: + tail = stretch_ebone.tail = arm.edit_bones[from_name].tail.copy() + + + # Now for the constraint + bpy.ops.object.mode_set(mode='OBJECT') + + stretch_pbone = obj.pose.bones[stretch_name] + + con = stretch_pbone.constraints.new('COPY_LOCATION') + con.target = obj + con.subtarget = from_name + + con = stretch_pbone.constraints.new('STRETCH_TO') + con.target = obj + con.subtarget = to_name + con.original_length = (head - tail).length + con.keep_axis = 'PLANE_X' + con.volume = 'NO_VOLUME' + + bpy.ops.object.mode_set(mode=mode_orig) + + return stretch_name + + +def copy_bone_simple(arm, from_bone, name, parent=False): + ebone = arm.edit_bones[from_bone] + ebone_new = arm.edit_bones.new(name) + + if parent: + ebone_new.connected = ebone.connected + ebone_new.parent = ebone.parent + + ebone_new.head = ebone.head + ebone_new.tail = ebone.tail + ebone_new.roll = ebone.roll + return ebone_new + + +def copy_bone_simple_list(arm, from_bones, to_bones, parent=False): + + if len(from_bones) != len(to_bones): + raise Exception("bone list sizes must match") + + copy_bones = [copy_bone_simple(arm, bone_name, to_bones[i], True) for i, bone_name in enumerate(from_bones)] + + # now we need to re-parent + for ebone in copy_bones: + parent = ebone.parent + if parent: + try: + i = from_bones.index(parent.name) + except: + i = -1 + + if i == -1: + ebone.parent = None + else: + ebone.parent = copy_bones[i] + + return copy_bones + + +def blend_bone_list(obj, apply_bones, from_bones, to_bones, target_bone=None, target_prop="blend", blend_default=0.5): + + if obj.mode == 'EDIT': + raise Exception("blending cant be called in editmode") + + if len(apply_bones) != len(from_bones): + raise Exception("lists differ in length (from -> apply): \n\t%s\n\t%s" % (from_bones, apply_bones)) + if len(apply_bones) != len(to_bones): + raise Exception("lists differ in length (to -> apply): \n\t%s\n\t%s" % (to_bones, apply_bones)) + + # setup the blend property + if target_bone is None: + target_bone = apply_bones[-1] # default to the last bone + + prop_pbone = obj.pose.bones[target_bone] + if prop_pbone.get(target_bone, None) is None: + prop = rna_idprop_ui_prop_get(prop_pbone, target_prop, create=True) + prop_pbone[target_prop] = blend_default + prop["soft_min"] = 0.0 + prop["soft_max"] = 1.0 + + driver_path = prop_pbone.path_to_id() + ('["%s"]' % target_prop) + + def blend_target(driver): + tar = driver.targets.new() + tar.name = target_bone + tar.id_type = 'OBJECT' + tar.id = obj + tar.data_path = driver_path + + def blend_location(new_pbone, from_bone_name, to_bone_name): + con = new_pbone.constraints.new('COPY_LOCATION') + con.target = obj + con.subtarget = from_bone_name + + con = new_pbone.constraints.new('COPY_LOCATION') + con.target = obj + con.subtarget = to_bone_name + + fcurve = con.driver_add("influence", 0) + driver = fcurve.driver + driver.type = 'AVERAGE' + fcurve.modifiers.remove(0) # grr dont need a modifier + + blend_target(driver) + + def blend_rotation(new_pbone, from_bone_name, to_bone_name): + con = new_pbone.constraints.new('COPY_ROTATION') + con.target = obj + con.subtarget = from_bone_name + + con = new_pbone.constraints.new('COPY_ROTATION') + con.target = obj + con.subtarget = to_bone_name + + fcurve = con.driver_add("influence", 0) + driver = fcurve.driver + driver.type = 'AVERAGE' + fcurve.modifiers.remove(0) # grr dont need a modifier + + blend_target(driver) + + for i, new_bone_name in enumerate(apply_bones): + from_bone_name = from_bones[i] + to_bone_name = to_bones[i] + + # allow skipping some bones by having None in the list + if None in (new_bone_name, from_bone_name, to_bone_name): + continue + + new_pbone = obj.pose.bones[new_bone_name] + + # if the bone is connected or its location is totally locked then dont add location blending. + if not (new_pbone.bone.connected or (False not in new_pbone.lock_location)): + blend_location(new_pbone, from_bone_name, to_bone_name) + + if not (False not in new_pbone.lock_rotation): # TODO. 4D chech? + blend_rotation(new_pbone, from_bone_name, to_bone_name) + + +def add_pole_target_bone(obj, base_bone_name, name, mode='CROSS'): + ''' + Does not actually create a poll target, just the bone to use as a poll target + ''' + mode_orig = obj.mode + bpy.ops.object.mode_set(mode='EDIT') + + arm = obj.data + + poll_ebone = arm.edit_bones.new(name) + base_ebone = arm.edit_bones[base_bone_name] + poll_name = poll_ebone.name + parent_ebone = base_ebone.parent + + base_head = base_ebone.head.copy() + base_tail = base_ebone.tail.copy() + base_dir = base_head - base_tail + + parent_head = parent_ebone.head.copy() + parent_tail = parent_ebone.tail.copy() + parent_dir = parent_head - parent_tail + + distance = (base_dir.length + parent_dir.length) + + if mode == 'CROSS': + # direction from the angle of the joint + offset = base_dir.copy().normalize() - parent_dir.copy().normalize() + offset.length = distance + elif mode == 'ZAVERAGE': + # between both bones Z axis + z_axis_a = base_ebone.matrix.copy().rotationPart() * Vector(0.0, 0.0, -1.0) + z_axis_b = parent_ebone.matrix.copy().rotationPart() * Vector(0.0, 0.0, -1.0) + offset = (z_axis_a + z_axis_b).normalize() * distance + else: + # preset axis + offset = Vector(0, 0, 0) + if mode[0] == "+": + val = distance + else: + val = - distance + + setattr(offset, mode[1].lower(), val) + + poll_ebone.head = base_head + offset + poll_ebone.tail = base_head + (offset * (1.0 - (1.0 / 4.0))) + + bpy.ops.object.mode_set(mode=mode_orig) + + return poll_name + + +def get_side_name(name): + ''' + Returns the last part of a string (typically a bone's name) indicating + whether it is a a left or right (or center, or whatever) bone. + Returns an empty string if nothing is found. + ''' + if name[-2] in DELIMITER: + return name[-2:] + else: + return "" + + +def get_base_name(name): + ''' + Returns the part of a string (typically a bone's name) corresponding to it's + base name (no sidedness, no ORG prefix). + ''' + if name[-2] in DELIMITER: + return name[:-2] + else: + return name + + +def write_meta_rig(obj, func_name="metarig_template"): + ''' + Write a metarig as a python script, this rig is to have all info needed for + generating the real rig with rigify. + ''' + code = [] + + code.append("def %s():" % func_name) + code.append(" # generated by rigify.write_meta_rig") + bpy.ops.object.mode_set(mode='EDIT') + code.append(" bpy.ops.object.mode_set(mode='EDIT')") + + code.append(" obj = bpy.context.active_object") + code.append(" arm = obj.data") + + arm = obj.data + # write parents first + bones = [(len(bone.parent_recursive), bone.name) for bone in arm.edit_bones] + bones.sort(key=lambda item: item[0]) + bones = [item[1] for item in bones] + + + for bone_name in bones: + bone = arm.edit_bones[bone_name] + code.append(" bone = arm.edit_bones.new('%s')" % bone.name) + code.append(" bone.head[:] = %.4f, %.4f, %.4f" % bone.head.toTuple(4)) + code.append(" bone.tail[:] = %.4f, %.4f, %.4f" % bone.tail.toTuple(4)) + code.append(" bone.roll = %.4f" % bone.roll) + code.append(" bone.connected = %s" % str(bone.connected)) + if bone.parent: + code.append(" bone.parent = arm.edit_bones['%s']" % bone.parent.name) + + bpy.ops.object.mode_set(mode='OBJECT') + code.append("") + code.append(" bpy.ops.object.mode_set(mode='OBJECT')") + + for bone_name in bones: + pbone = obj.pose.bones[bone_name] + pbone_written = False + + # Only 1 level of props, simple types supported + for key, value in pbone.items(): + if key.startswith("_"): + continue + + if type(value) not in (float, str, int): + print("Unsupported ID Prop:", str((key, value))) + continue + + if type(value) == str: + value = "'" + value + "'" + + if not pbone_written: # only write bones we need + code.append(" pbone = obj.pose.bones['%s']" % bone_name) + + code.append(" pbone['%s'] = %s" % (key, value)) + + return "\n".join(code) + + +# *** bone class collection *** + + +def bone_class_instance(obj, slots, name="BoneContainer"): + ''' + bone collection utility class to help manage cases with + edit/pose/bone bones where switching modes can invalidate some of the members. + + there are also utility functions for manipulating all members. + ''' + + if len(slots) != len(set(slots)): + raise Exception("duplicate entries found %s" % attr_names) + + attr_names = tuple(slots) # dont modify the original + slots = list(slots) # dont modify the original + for i in range(len(slots)): + member = slots[i] + slots.append(member + "_b") # bone bone + slots.append(member + "_p") # pose bone + slots.append(member + "_e") # edit bone + + class_dict = { \ + "obj": obj, \ + "attr_names": attr_names, \ + "attr_initialize": _bone_class_instance_attr_initialize, \ + "update": _bone_class_instance_update, \ + "rename": _bone_class_instance_rename, \ + "names": _bone_class_instance_names, \ + "copy": _bone_class_instance_copy, \ + "blend": _bone_class_instance_blend, \ + } + + instance = auto_class_instance(slots, name, class_dict) + return instance + + +def auto_class(slots, name="ContainerClass", class_dict=None): + + if class_dict: + class_dict = class_dict.copy() + else: + class_dict = {} + + class_dict["__slots__"] = tuple(slots) + + return type(name, (object,), class_dict) + + +def auto_class_instance(slots, name="ContainerClass", class_dict=None): + return auto_class(slots, name, class_dict)() + + +def _bone_class_instance_attr_initialize(self, attr_names, bone_names): + ''' Initializes attributes, both lists must be aligned + ''' + for attr in self.attr_names: + i = attr_names.index(attr) + setattr(self, attr, bone_names[i]) + + self.update() + + +def _bone_class_instance_update(self): + ''' Re-Assigns bones from the blender data + ''' + arm = self.obj.data + bbones = arm.bones + pbones = self.obj.pose.bones + ebones = arm.edit_bones + + for member in self.attr_names: + name = getattr(self, member, None) + if name is not None: + setattr(self, member + "_b", bbones.get(name, None)) + setattr(self, member + "_p", pbones.get(name, None)) + setattr(self, member + "_e", ebones.get(name, None)) + + +def _bone_class_instance_rename(self, attr, new_name): + ''' Rename bones, editmode only + ''' + + if self.obj.mode != 'EDIT': + raise Exception("Only rename in editmode supported") + + ebone = getattr(self, attr + "_e") + ebone.name = new_name + + # we may not get what is asked for so get the name from the editbone + setattr(self, attr, ebone.name) + + +def _bone_class_instance_copy(self, from_fmt="%s", to_fmt="%s", exclude_attrs=(), base_names=None): + from_name_ls = [] + new_name_ls = [] + new_slot_ls = [] + + for attr in self.attr_names: + + if attr in exclude_attrs: + continue + + bone_name_orig = getattr(self, attr) + ebone = getattr(self, attr + "_e") + # orig_names[attr] = bone_name_orig + + # insert formatting + if from_fmt != "%s": + bone_name = from_fmt % bone_name_orig + ebone.name = bone_name + bone_name = ebone.name # cant be sure we get what we ask for + else: + bone_name = bone_name_orig + + setattr(self, attr, bone_name) + + new_slot_ls.append(attr) + from_name_ls.append(bone_name) + if base_names: + bone_name_orig = base_names[bone_name_orig] + new_name_ls.append(to_fmt % bone_name_orig) + + new_bones = copy_bone_simple_list(self.obj.data, from_name_ls, new_name_ls, True) + new_bc = bone_class_instance(self.obj, new_slot_ls) + + for i, attr in enumerate(new_slot_ls): + ebone = new_bones[i] + setattr(new_bc, attr + "_e", ebone) + setattr(new_bc, attr, ebone.name) + + return new_bc + + +def _bone_class_instance_names(self): + return [getattr(self, attr) for attr in self.attr_names] + + +def _bone_class_instance_blend(self, from_bc, to_bc, target_bone=None, target_prop="blend"): + ''' + Use for blending bone chains. + + blend_target = (bone_name, bone_property) + default to the last bone, blend prop + + XXX - toggles editmode, need to re-validate all editbones :( + ''' + + if self.attr_names != from_bc.attr_names or self.attr_names != to_bc.attr_names: + raise Exception("can only blend between matching chains") + + apply_bones = [getattr(self, attr) for attr in self.attr_names] + from_bones = [getattr(from_bc, attr) for attr in from_bc.attr_names] + to_bones = [getattr(to_bc, attr) for attr in to_bc.attr_names] + + blend_bone_list(self.obj, apply_bones, from_bones, to_bones, target_bone, target_prop) diff --git a/release/scripts/modules/rna_info.py b/release/scripts/modules/rna_info.py new file mode 100644 index 00000000000..8e1d16a46cd --- /dev/null +++ b/release/scripts/modules/rna_info.py @@ -0,0 +1,355 @@ +# ##### 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +# classes for extracting info from blenders internal classes + +import bpy + + +class InfoStructRNA: + global_lookup = {} + def __init__(self, rna_type): + self.bl_rna = rna_type + + self.identifier = rna_type.identifier + self.name = rna_type.name + self.description = rna_type.description.strip() + + # set later + self.base = None + self.nested = None + self.full_path = "" + + self.functions = [] + self.children = [] + self.references = [] + self.properties = [] + + def build(self): + rna_type = self.bl_rna + parent_id = self.identifier + self.properties[:] = [GetInfoPropertyRNA(rna_prop, parent_id) for rna_prop in rna_type.properties.values()] + self.functions[:] = [GetInfoFunctionRNA(rna_prop, parent_id) for rna_prop in rna_type.functions.values()] + + def getNestedProperties(self, ls = None): + if not ls: + ls = self.properties[:] + + if self.nested: + self.nested.getNestedProperties(ls) + + return ls + + def __repr__(self): + + txt = '' + txt += self.identifier + if self.base: + txt += '(%s)' % self.base.identifier + txt += ': ' + self.description + '\n' + + for prop in self.properties: + txt += prop.__repr__() + '\n' + + for func in self.functions: + txt += func.__repr__() + '\n' + + return txt + + +class InfoPropertyRNA: + global_lookup = {} + def __init__(self, rna_prop): + self.bl_prop = rna_prop + self.identifier = rna_prop.identifier + self.name = rna_prop.name + self.description = rna_prop.description.strip() + + def build(self): + rna_prop = self.bl_prop + + self.enum_items = [] + self.min = -1 + self.max = -1 + self.array_length = getattr(rna_prop, "array_length", 0) + + self.type = rna_prop.type.lower() + self.fixed_type = GetInfoStructRNA(rna_prop.fixed_type) # valid for pointer/collections + self.srna = GetInfoStructRNA(rna_prop.srna) # valid for pointer/collections + + def __repr__(self): + txt = '' + txt += ' * ' + self.identifier + ': ' + self.description + + return txt + +class InfoFunctionRNA: + global_lookup = {} + def __init__(self, rna_func): + self.bl_func = rna_func + self.identifier = rna_func.identifier + # self.name = rna_func.name # functions have no name! + self.description = rna_func.description.strip() + + self.args = [] # todo + self.return_value = None # todo + + def build(self): + rna_prop = self.bl_prop + pass + + def __repr__(self): + txt = '' + txt += ' * ' + self.identifier + '(' + + for arg in self.args: + txt += arg.identifier + ', ' + txt += '): ' + self.description + return txt + + +def _GetInfoRNA(bl_rna, cls, parent_id=''): + + if bl_rna == None: + return None + + key = parent_id, bl_rna.identifier + try: + return cls.global_lookup[key] + except: + instance = cls.global_lookup[key] = cls(bl_rna) + return instance + + +def GetInfoStructRNA(bl_rna): + return _GetInfoRNA(bl_rna, InfoStructRNA) + +def GetInfoPropertyRNA(bl_rna, parent_id): + return _GetInfoRNA(bl_rna, InfoPropertyRNA, parent_id) + +def GetInfoFunctionRNA(bl_rna, parent_id): + return _GetInfoRNA(bl_rna, InfoFunctionRNA, parent_id) + + +def BuildRNAInfo(): + # Use for faster lookups + # use rna_struct.identifier as the key for each dict + rna_struct_dict = {} # store identifier:rna lookups + rna_full_path_dict = {} # store the result of full_rna_struct_path(rna_struct) + rna_children_dict = {} # store all rna_structs nested from here + rna_references_dict = {} # store a list of rna path strings that reference this type + rna_functions_dict = {} # store all functions directly in this type (not inherited) + rna_words = set() + + def rna_id_ignore(rna_id): + if rna_id == "rna_type": + return True + + if "_OT_" in rna_id: + return True + if "_MT_" in rna_id: + return True + if "_PT_" in rna_id: + return True + + return False + + def full_rna_struct_path(rna_struct): + ''' + Needed when referencing one struct from another + ''' + nested = rna_struct.nested + if nested: + return "%s.%s" % (full_rna_struct_path(nested), rna_struct.identifier) + else: + return rna_struct.identifier + + # def write_func(rna_func, ident): + def base_id(rna_struct): + try: return rna_struct.base.identifier + except: return '' # invalid id + + #structs = [(base_id(rna_struct), rna_struct.identifier, rna_struct) for rna_struct in bpy.doc.structs.values()] + ''' + structs = [] + for rna_struct in bpy.doc.structs.values(): + structs.append( (base_id(rna_struct), rna_struct.identifier, rna_struct) ) + ''' + structs = [] + for rna_type_name in dir(bpy.types): + rna_type = getattr(bpy.types, rna_type_name) + + try: rna_struct = rna_type.bl_rna + except: rna_struct = None + + if rna_struct: + #if not rna_type_name.startswith('__'): + + identifier = rna_struct.identifier + + if not rna_id_ignore(identifier): + structs.append( (base_id(rna_struct), identifier, rna_struct) ) + + # Simple lookup + rna_struct_dict[identifier] = rna_struct + + # Store full rna path 'GameObjectSettings' -> 'Object.GameObjectSettings' + rna_full_path_dict[identifier] = full_rna_struct_path(rna_struct) + + # Store a list of functions, remove inherited later + rna_functions_dict[identifier]= list(rna_struct.functions) + + + # fill in these later + rna_children_dict[identifier]= [] + rna_references_dict[identifier]= [] + + + else: + print("Ignoring", rna_type_name) + + + # Sucks but we need to copy this so we can check original parent functions + rna_functions_dict__copy = {} + for key, val in rna_functions_dict.items(): + rna_functions_dict__copy[key] = val[:] + + + structs.sort() # not needed but speeds up sort below, setting items without an inheritance first + + # Arrange so classes are always defined in the correct order + deps_ok = False + while deps_ok == False: + deps_ok = True + rna_done = set() + + for i, (rna_base, identifier, rna_struct) in enumerate(structs): + + rna_done.add(identifier) + + if rna_base and rna_base not in rna_done: + deps_ok = False + data = structs.pop(i) + ok = False + while i < len(structs): + if structs[i][1]==rna_base: + structs.insert(i+1, data) # insert after the item we depend on. + ok = True + break + i+=1 + + if not ok: + print('Dependancy "%s" could not be found for "%s"' % (identifier, rna_base)) + + break + + # Done ordering structs + + + # precalc vars to avoid a lot of looping + for (rna_base, identifier, rna_struct) in structs: + + if rna_base: + rna_base_prop_keys = rna_struct_dict[rna_base].properties.keys() # could cache + rna_base_func_keys = [f.identifier for f in rna_struct_dict[rna_base].functions] + else: + rna_base_prop_keys = [] + rna_base_func_keys= [] + + # rna_struct_path = full_rna_struct_path(rna_struct) + rna_struct_path = rna_full_path_dict[identifier] + + for rna_prop_identifier, rna_prop in rna_struct.properties.items(): + + if rna_prop_identifier=='RNA': continue + if rna_id_ignore(rna_prop_identifier): continue + if rna_prop_identifier in rna_base_prop_keys: continue + + + for rna_prop_ptr in (getattr(rna_prop, "fixed_type", None), getattr(rna_prop, "srna", None)): + # Does this property point to me? + if rna_prop_ptr: + rna_references_dict[rna_prop_ptr.identifier].append( "%s.%s" % (rna_struct_path, rna_prop_identifier) ) + + for rna_func in rna_struct.functions: + for rna_prop_identifier, rna_prop in rna_func.parameters.items(): + + if rna_prop_identifier=='RNA': continue + if rna_id_ignore(rna_prop_identifier): continue + if rna_prop_identifier in rna_base_func_keys: continue + + + try: rna_prop_ptr = rna_prop.fixed_type + except: rna_prop_ptr = None + + # Does this property point to me? + if rna_prop_ptr: + rna_references_dict[rna_prop_ptr.identifier].append( "%s.%s" % (rna_struct_path, rna_func.identifier) ) + + + # Store nested children + nested = rna_struct.nested + if nested: + rna_children_dict[nested.identifier].append(rna_struct) + + + if rna_base: + rna_funcs = rna_functions_dict[identifier] + if rna_funcs: + # Remove inherited functions if we have any + rna_base_funcs = rna_functions_dict__copy[rna_base] + rna_funcs[:] = [f for f in rna_funcs if f not in rna_base_funcs] + + rna_functions_dict__copy.clear() + del rna_functions_dict__copy + + # Sort the refs, just reads nicer + for rna_refs in rna_references_dict.values(): + rna_refs.sort() + + + info_structs = [] + for (rna_base, identifier, rna_struct) in structs: + #if rna_struct.nested: + # continue + + #write_struct(rna_struct, '') + info_struct= GetInfoStructRNA(rna_struct) + if rna_base: + info_struct.base = GetInfoStructRNA(rna_struct_dict[rna_base]) + info_struct.nested = GetInfoStructRNA(rna_struct.nested) + info_struct.children[:] = rna_children_dict[identifier] + info_struct.references[:] = rna_references_dict[identifier] + info_struct.full_path = rna_full_path_dict[identifier] + + info_structs.append(info_struct) + + for rna_info_prop in InfoPropertyRNA.global_lookup.values(): + rna_info_prop.build() + + for rna_info_prop in InfoFunctionRNA.global_lookup.values(): + rna_info_prop.build() + + for rna_info in InfoStructRNA.global_lookup.values(): + rna_info.build() + + for rna_info in InfoStructRNA.global_lookup.values(): + print(rna_info) + + return InfoStructRNA.global_lookup, InfoFunctionRNA.global_lookup, InfoPropertyRNA.global_lookup + diff --git a/release/scripts/modules/rna_prop_ui.py b/release/scripts/modules/rna_prop_ui.py index 51281c480b9..0aa62bb5960 100644 --- a/release/scripts/modules/rna_prop_ui.py +++ b/release/scripts/modules/rna_prop_ui.py @@ -120,7 +120,7 @@ def draw(layout, context, context_member, use_edit=True): prop = row.operator("wm.properties_edit", text="edit") assign_props(prop, val_draw, key) - prop = row.operator("wm.properties_remove", text="", icon='ICON_ZOOMOUT') + prop = row.operator("wm.properties_remove", text="", icon='ZOOMOUT') assign_props(prop, val_draw, key) @@ -212,6 +212,9 @@ class WM_OT_properties_edit(bpy.types.Operator): self.properties.description = prop_ui.get("description", "") wm = context.manager + # This crashes, TODO - fix + #return wm.invoke_props_popup(self, event) + wm.invoke_props_popup(self, event) return ('RUNNING_MODAL',) diff --git a/release/scripts/op/add_armature_human.py b/release/scripts/op/add_armature_human.py new file mode 100644 index 00000000000..264f290f271 --- /dev/null +++ b/release/scripts/op/add_armature_human.py @@ -0,0 +1,623 @@ +# ##### 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +# +import bpy +import Mathutils +from math import cos, sin, pi + +# could this be stored elsewhere? + +def metarig_template(): + # generated by rigify.write_meta_rig + bpy.ops.object.mode_set(mode='EDIT') + obj = bpy.context.active_object + arm = obj.data + bone = arm.edit_bones.new('root') + bone.head[:] = 0.0000, 0.0000, 0.0000 + bone.tail[:] = 0.0000, 0.4000, 0.0000 + bone.roll = 0.0000 + bone.connected = False + bone = arm.edit_bones.new('pelvis') + bone.head[:] = -0.0000, -0.0145, 1.1263 + bone.tail[:] = -0.0000, -0.0145, 0.9563 + bone.roll = 3.1416 + bone.connected = False + bone.parent = arm.edit_bones['root'] + bone = arm.edit_bones.new('torso') + bone.head[:] = -0.0000, -0.0145, 1.1263 + bone.tail[:] = -0.0000, -0.0145, 1.2863 + bone.roll = 3.1416 + bone.connected = False + bone.parent = arm.edit_bones['pelvis'] + bone = arm.edit_bones.new('spine.01') + bone.head[:] = 0.0000, 0.0394, 0.9688 + bone.tail[:] = -0.0000, -0.0145, 1.1263 + bone.roll = 0.0000 + bone.connected = False + bone.parent = arm.edit_bones['torso'] + bone = arm.edit_bones.new('spine.02') + bone.head[:] = -0.0000, -0.0145, 1.1263 + bone.tail[:] = -0.0000, -0.0213, 1.2884 + bone.roll = -0.0000 + bone.connected = True + bone.parent = arm.edit_bones['spine.01'] + bone = arm.edit_bones.new('thigh.L') + bone.head[:] = 0.0933, -0.0421, 1.0434 + bone.tail[:] = 0.0933, -0.0516, 0.5848 + bone.roll = 0.0000 + bone.connected = False + bone.parent = arm.edit_bones['spine.01'] + bone = arm.edit_bones.new('thigh.R') + bone.head[:] = -0.0933, -0.0421, 1.0434 + bone.tail[:] = -0.0933, -0.0516, 0.5848 + bone.roll = -0.0000 + bone.connected = False + bone.parent = arm.edit_bones['spine.01'] + bone = arm.edit_bones.new('spine.03') + bone.head[:] = -0.0000, -0.0213, 1.2884 + bone.tail[:] = -0.0000, 0.0160, 1.3705 + bone.roll = -0.0000 + bone.connected = True + bone.parent = arm.edit_bones['spine.02'] + bone = arm.edit_bones.new('shin.L') + bone.head[:] = 0.0933, -0.0516, 0.5848 + bone.tail[:] = 0.0915, 0.0100, 0.1374 + bone.roll = 0.0034 + bone.connected = True + bone.parent = arm.edit_bones['thigh.L'] + bone = arm.edit_bones.new('shin.R') + bone.head[:] = -0.0933, -0.0516, 0.5848 + bone.tail[:] = -0.0915, 0.0100, 0.1374 + bone.roll = -0.0034 + bone.connected = True + bone.parent = arm.edit_bones['thigh.R'] + bone = arm.edit_bones.new('spine.04') + bone.head[:] = -0.0000, 0.0160, 1.3705 + bone.tail[:] = -0.0000, 0.0590, 1.4497 + bone.roll = -0.0000 + bone.connected = True + bone.parent = arm.edit_bones['spine.03'] + bone = arm.edit_bones.new('foot.L') + bone.head[:] = 0.0915, 0.0100, 0.1374 + bone.tail[:] = 0.1033, -0.0968, 0.0510 + bone.roll = 2.8964 + bone.connected = True + bone.parent = arm.edit_bones['shin.L'] + bone = arm.edit_bones.new('foot.R') + bone.head[:] = -0.0915, 0.0100, 0.1374 + bone.tail[:] = -0.1033, -0.0968, 0.0510 + bone.roll = -2.8793 + bone.connected = True + bone.parent = arm.edit_bones['shin.R'] + bone = arm.edit_bones.new('neck_base') + bone.head[:] = -0.0000, 0.0590, 1.4497 + bone.tail[:] = -0.0000, 0.0401, 1.5389 + bone.roll = -0.0000 + bone.connected = True + bone.parent = arm.edit_bones['spine.04'] + bone = arm.edit_bones.new('toe.L') + bone.head[:] = 0.1033, -0.0968, 0.0510 + bone.tail[:] = 0.1136, -0.1848, 0.0510 + bone.roll = 0.0001 + bone.connected = True + bone.parent = arm.edit_bones['foot.L'] + bone = arm.edit_bones.new('heel.L') + bone.head[:] = 0.0809, 0.0969, -0.0000 + bone.tail[:] = 0.1020, -0.0846, -0.0000 + bone.roll = -0.0001 + bone.connected = False + bone.parent = arm.edit_bones['foot.L'] + bone = arm.edit_bones.new('toe.R') + bone.head[:] = -0.1033, -0.0968, 0.0510 + bone.tail[:] = -0.1136, -0.1848, 0.0510 + bone.roll = -0.0002 + bone.connected = True + bone.parent = arm.edit_bones['foot.R'] + bone = arm.edit_bones.new('heel.R') + bone.head[:] = -0.0809, 0.0969, -0.0000 + bone.tail[:] = -0.1020, -0.0846, -0.0000 + bone.roll = -0.0000 + bone.connected = False + bone.parent = arm.edit_bones['foot.R'] + bone = arm.edit_bones.new('head') + bone.head[:] = -0.0000, 0.0401, 1.5389 + bone.tail[:] = -0.0000, 0.0401, 1.5979 + bone.roll = 3.1416 + bone.connected = True + bone.parent = arm.edit_bones['neck_base'] + bone = arm.edit_bones.new('DLT-shoulder.L') + bone.head[:] = 0.0141, -0.0346, 1.4991 + bone.tail[:] = 0.1226, 0.0054, 1.4991 + bone.roll = 0.0005 + bone.connected = False + bone.parent = arm.edit_bones['neck_base'] + bone = arm.edit_bones.new('DLT-shoulder.R') + bone.head[:] = -0.0141, -0.0346, 1.4991 + bone.tail[:] = -0.1226, 0.0054, 1.4991 + bone.roll = -0.0005 + bone.connected = False + bone.parent = arm.edit_bones['neck_base'] + bone = arm.edit_bones.new('neck.01') + bone.head[:] = -0.0000, 0.0401, 1.5389 + bone.tail[:] = -0.0000, 0.0176, 1.5916 + bone.roll = 0.0000 + bone.connected = False + bone.parent = arm.edit_bones['head'] + bone = arm.edit_bones.new('shoulder.L') + bone.head[:] = 0.0141, -0.0346, 1.4991 + bone.tail[:] = 0.1226, 0.0216, 1.5270 + bone.roll = -0.1225 + bone.connected = False + bone.parent = arm.edit_bones['DLT-shoulder.L'] + bone = arm.edit_bones.new('shoulder.R') + bone.head[:] = -0.0141, -0.0346, 1.4991 + bone.tail[:] = -0.1226, 0.0216, 1.5270 + bone.roll = 0.0849 + bone.connected = False + bone.parent = arm.edit_bones['DLT-shoulder.R'] + bone = arm.edit_bones.new('neck.02') + bone.head[:] = -0.0000, 0.0176, 1.5916 + bone.tail[:] = -0.0000, 0.0001, 1.6499 + bone.roll = 0.0000 + bone.connected = True + bone.parent = arm.edit_bones['neck.01'] + bone = arm.edit_bones.new('DLT-upper_arm.L') + bone.head[:] = 0.1482, 0.0483, 1.4943 + bone.tail[:] = 0.2586, 0.1057, 1.5124 + bone.roll = 1.4969 + bone.connected = False + bone.parent = arm.edit_bones['shoulder.L'] + bone = arm.edit_bones.new('DLT-upper_arm.R') + bone.head[:] = -0.1482, 0.0483, 1.4943 + bone.tail[:] = -0.2586, 0.1057, 1.5124 + bone.roll = -1.4482 + bone.connected = False + bone.parent = arm.edit_bones['shoulder.R'] + bone = arm.edit_bones.new('neck.03') + bone.head[:] = -0.0000, 0.0001, 1.6499 + bone.tail[:] = -0.0000, 0.0001, 1.8522 + bone.roll = 0.0000 + bone.connected = True + bone.parent = arm.edit_bones['neck.02'] + bone = arm.edit_bones.new('upper_arm.L') + bone.head[:] = 0.1482, 0.0483, 1.4943 + bone.tail[:] = 0.3929, 0.0522, 1.4801 + bone.roll = 1.6281 + bone.connected = False + bone.parent = arm.edit_bones['DLT-upper_arm.L'] + bone = arm.edit_bones.new('upper_arm.R') + bone.head[:] = -0.1482, 0.0483, 1.4943 + bone.tail[:] = -0.3929, 0.0522, 1.4801 + bone.roll = -1.6281 + bone.connected = False + bone.parent = arm.edit_bones['DLT-upper_arm.R'] + bone = arm.edit_bones.new('forearm.L') + bone.head[:] = 0.3929, 0.0522, 1.4801 + bone.tail[:] = 0.6198, 0.0364, 1.4906 + bone.roll = 1.5240 + bone.connected = True + bone.parent = arm.edit_bones['upper_arm.L'] + bone = arm.edit_bones.new('forearm.R') + bone.head[:] = -0.3929, 0.0522, 1.4801 + bone.tail[:] = -0.6198, 0.0364, 1.4906 + bone.roll = -1.5219 + bone.connected = True + bone.parent = arm.edit_bones['upper_arm.R'] + bone = arm.edit_bones.new('hand.L') + bone.head[:] = 0.6198, 0.0364, 1.4906 + bone.tail[:] = 0.6592, 0.0364, 1.4853 + bone.roll = -3.0065 + bone.connected = True + bone.parent = arm.edit_bones['forearm.L'] + bone = arm.edit_bones.new('hand.R') + bone.head[:] = -0.6198, 0.0364, 1.4906 + bone.tail[:] = -0.6592, 0.0364, 1.4853 + bone.roll = 3.0065 + bone.connected = True + bone.parent = arm.edit_bones['forearm.R'] + bone = arm.edit_bones.new('palm.04.L') + bone.head[:] = 0.6514, 0.0658, 1.4906 + bone.tail[:] = 0.7287, 0.0810, 1.4747 + bone.roll = -3.0715 + bone.connected = False + bone.parent = arm.edit_bones['hand.L'] + bone = arm.edit_bones.new('palm.03.L') + bone.head[:] = 0.6533, 0.0481, 1.4943 + bone.tail[:] = 0.7386, 0.0553, 1.4781 + bone.roll = -3.0290 + bone.connected = False + bone.parent = arm.edit_bones['hand.L'] + bone = arm.edit_bones.new('palm.02.L') + bone.head[:] = 0.6539, 0.0305, 1.4967 + bone.tail[:] = 0.7420, 0.0250, 1.4835 + bone.roll = -3.0669 + bone.connected = False + bone.parent = arm.edit_bones['hand.L'] + bone = arm.edit_bones.new('palm.01.L') + bone.head[:] = 0.6514, 0.0116, 1.4961 + bone.tail[:] = 0.7361, -0.0074, 1.4823 + bone.roll = -2.9422 + bone.connected = False + bone.parent = arm.edit_bones['hand.L'] + bone = arm.edit_bones.new('thumb.01.L') + bone.head[:] = 0.6380, -0.0005, 1.4848 + bone.tail[:] = 0.6757, -0.0408, 1.4538 + bone.roll = -0.7041 + bone.connected = False + bone.parent = arm.edit_bones['hand.L'] + bone = arm.edit_bones.new('palm.04.R') + bone.head[:] = -0.6514, 0.0658, 1.4906 + bone.tail[:] = -0.7287, 0.0810, 1.4747 + bone.roll = 3.0715 + bone.connected = False + bone.parent = arm.edit_bones['hand.R'] + bone = arm.edit_bones.new('palm.03.R') + bone.head[:] = -0.6533, 0.0481, 1.4943 + bone.tail[:] = -0.7386, 0.0553, 1.4781 + bone.roll = 3.0290 + bone.connected = False + bone.parent = arm.edit_bones['hand.R'] + bone = arm.edit_bones.new('palm.02.R') + bone.head[:] = -0.6539, 0.0305, 1.4967 + bone.tail[:] = -0.7420, 0.0250, 1.4835 + bone.roll = 3.0669 + bone.connected = False + bone.parent = arm.edit_bones['hand.R'] + bone = arm.edit_bones.new('thumb.01.R') + bone.head[:] = -0.6380, -0.0005, 1.4848 + bone.tail[:] = -0.6757, -0.0408, 1.4538 + bone.roll = 0.7041 + bone.connected = False + bone.parent = arm.edit_bones['hand.R'] + bone = arm.edit_bones.new('palm.01.R') + bone.head[:] = -0.6514, 0.0116, 1.4961 + bone.tail[:] = -0.7361, -0.0074, 1.4823 + bone.roll = 2.9332 + bone.connected = False + bone.parent = arm.edit_bones['hand.R'] + bone = arm.edit_bones.new('finger_pinky.01.L') + bone.head[:] = 0.7287, 0.0810, 1.4747 + bone.tail[:] = 0.7698, 0.0947, 1.4635 + bone.roll = -3.0949 + bone.connected = True + bone.parent = arm.edit_bones['palm.04.L'] + bone = arm.edit_bones.new('finger_ring.01.L') + bone.head[:] = 0.7386, 0.0553, 1.4781 + bone.tail[:] = 0.7890, 0.0615, 1.4667 + bone.roll = -3.0081 + bone.connected = True + bone.parent = arm.edit_bones['palm.03.L'] + bone = arm.edit_bones.new('finger_middle.01.L') + bone.head[:] = 0.7420, 0.0250, 1.4835 + bone.tail[:] = 0.7975, 0.0221, 1.4712 + bone.roll = -2.9982 + bone.connected = True + bone.parent = arm.edit_bones['palm.02.L'] + bone = arm.edit_bones.new('finger_index.01.L') + bone.head[:] = 0.7361, -0.0074, 1.4823 + bone.tail[:] = 0.7843, -0.0204, 1.4718 + bone.roll = -3.0021 + bone.connected = True + bone.parent = arm.edit_bones['palm.01.L'] + bone = arm.edit_bones.new('thumb.02.L') + bone.head[:] = 0.6757, -0.0408, 1.4538 + bone.tail[:] = 0.6958, -0.0568, 1.4376 + bone.roll = -0.6963 + bone.connected = True + bone.parent = arm.edit_bones['thumb.01.L'] + bone = arm.edit_bones.new('finger_pinky.01.R') + bone.head[:] = -0.7287, 0.0810, 1.4747 + bone.tail[:] = -0.7698, 0.0947, 1.4635 + bone.roll = 3.0949 + bone.connected = True + bone.parent = arm.edit_bones['palm.04.R'] + bone = arm.edit_bones.new('finger_ring.01.R') + bone.head[:] = -0.7386, 0.0553, 1.4781 + bone.tail[:] = -0.7890, 0.0615, 1.4667 + bone.roll = 2.9892 + bone.connected = True + bone.parent = arm.edit_bones['palm.03.R'] + bone = arm.edit_bones.new('finger_middle.01.R') + bone.head[:] = -0.7420, 0.0250, 1.4835 + bone.tail[:] = -0.7975, 0.0221, 1.4712 + bone.roll = 2.9816 + bone.connected = True + bone.parent = arm.edit_bones['palm.02.R'] + bone = arm.edit_bones.new('thumb.02.R') + bone.head[:] = -0.6757, -0.0408, 1.4538 + bone.tail[:] = -0.6958, -0.0568, 1.4376 + bone.roll = 0.6963 + bone.connected = True + bone.parent = arm.edit_bones['thumb.01.R'] + bone = arm.edit_bones.new('finger_index.01.R') + bone.head[:] = -0.7361, -0.0074, 1.4823 + bone.tail[:] = -0.7843, -0.0204, 1.4718 + bone.roll = 2.9498 + bone.connected = True + bone.parent = arm.edit_bones['palm.01.R'] + bone = arm.edit_bones.new('finger_pinky.02.L') + bone.head[:] = 0.7698, 0.0947, 1.4635 + bone.tail[:] = 0.7910, 0.1018, 1.4577 + bone.roll = -3.0949 + bone.connected = True + bone.parent = arm.edit_bones['finger_pinky.01.L'] + bone = arm.edit_bones.new('finger_ring.02.L') + bone.head[:] = 0.7890, 0.0615, 1.4667 + bone.tail[:] = 0.8177, 0.0650, 1.4600 + bone.roll = -3.0006 + bone.connected = True + bone.parent = arm.edit_bones['finger_ring.01.L'] + bone = arm.edit_bones.new('finger_middle.02.L') + bone.head[:] = 0.7975, 0.0221, 1.4712 + bone.tail[:] = 0.8289, 0.0206, 1.4643 + bone.roll = -2.9995 + bone.connected = True + bone.parent = arm.edit_bones['finger_middle.01.L'] + bone = arm.edit_bones.new('finger_index.02.L') + bone.head[:] = 0.7843, -0.0204, 1.4718 + bone.tail[:] = 0.8117, -0.0275, 1.4660 + bone.roll = -3.0064 + bone.connected = True + bone.parent = arm.edit_bones['finger_index.01.L'] + bone = arm.edit_bones.new('thumb.03.L') + bone.head[:] = 0.6958, -0.0568, 1.4376 + bone.tail[:] = 0.7196, -0.0671, 1.4210 + bone.roll = -0.8072 + bone.connected = True + bone.parent = arm.edit_bones['thumb.02.L'] + bone = arm.edit_bones.new('finger_pinky.02.R') + bone.head[:] = -0.7698, 0.0947, 1.4635 + bone.tail[:] = -0.7910, 0.1018, 1.4577 + bone.roll = 3.0949 + bone.connected = True + bone.parent = arm.edit_bones['finger_pinky.01.R'] + bone = arm.edit_bones.new('finger_ring.02.R') + bone.head[:] = -0.7890, 0.0615, 1.4667 + bone.tail[:] = -0.8177, 0.0650, 1.4600 + bone.roll = 3.0341 + bone.connected = True + bone.parent = arm.edit_bones['finger_ring.01.R'] + bone = arm.edit_bones.new('finger_middle.02.R') + bone.head[:] = -0.7975, 0.0221, 1.4712 + bone.tail[:] = -0.8289, 0.0206, 1.4643 + bone.roll = 3.0291 + bone.connected = True + bone.parent = arm.edit_bones['finger_middle.01.R'] + bone = arm.edit_bones.new('thumb.03.R') + bone.head[:] = -0.6958, -0.0568, 1.4376 + bone.tail[:] = -0.7196, -0.0671, 1.4210 + bone.roll = 0.8072 + bone.connected = True + bone.parent = arm.edit_bones['thumb.02.R'] + bone = arm.edit_bones.new('finger_index.02.R') + bone.head[:] = -0.7843, -0.0204, 1.4718 + bone.tail[:] = -0.8117, -0.0275, 1.4660 + bone.roll = 3.0705 + bone.connected = True + bone.parent = arm.edit_bones['finger_index.01.R'] + bone = arm.edit_bones.new('finger_pinky.03.L') + bone.head[:] = 0.7910, 0.1018, 1.4577 + bone.tail[:] = 0.8109, 0.1085, 1.4523 + bone.roll = -3.0949 + bone.connected = True + bone.parent = arm.edit_bones['finger_pinky.02.L'] + bone = arm.edit_bones.new('finger_ring.03.L') + bone.head[:] = 0.8177, 0.0650, 1.4600 + bone.tail[:] = 0.8396, 0.0677, 1.4544 + bone.roll = -2.9819 + bone.connected = True + bone.parent = arm.edit_bones['finger_ring.02.L'] + bone = arm.edit_bones.new('finger_middle.03.L') + bone.head[:] = 0.8289, 0.0206, 1.4643 + bone.tail[:] = 0.8534, 0.0193, 1.4589 + bone.roll = -3.0004 + bone.connected = True + bone.parent = arm.edit_bones['finger_middle.02.L'] + bone = arm.edit_bones.new('finger_index.03.L') + bone.head[:] = 0.8117, -0.0275, 1.4660 + bone.tail[:] = 0.8331, -0.0333, 1.4615 + bone.roll = -3.0103 + bone.connected = True + bone.parent = arm.edit_bones['finger_index.02.L'] + bone = arm.edit_bones.new('finger_pinky.03.R') + bone.head[:] = -0.7910, 0.1018, 1.4577 + bone.tail[:] = -0.8109, 0.1085, 1.4523 + bone.roll = 3.0949 + bone.connected = True + bone.parent = arm.edit_bones['finger_pinky.02.R'] + bone = arm.edit_bones.new('finger_ring.03.R') + bone.head[:] = -0.8177, 0.0650, 1.4600 + bone.tail[:] = -0.8396, 0.0677, 1.4544 + bone.roll = 2.9819 + bone.connected = True + bone.parent = arm.edit_bones['finger_ring.02.R'] + bone = arm.edit_bones.new('finger_middle.03.R') + bone.head[:] = -0.8289, 0.0206, 1.4643 + bone.tail[:] = -0.8534, 0.0193, 1.4589 + bone.roll = 3.0004 + bone.connected = True + bone.parent = arm.edit_bones['finger_middle.02.R'] + bone = arm.edit_bones.new('finger_index.03.R') + bone.head[:] = -0.8117, -0.0275, 1.4660 + bone.tail[:] = -0.8331, -0.0333, 1.4615 + bone.roll = 2.9917 + bone.connected = True + bone.parent = arm.edit_bones['finger_index.02.R'] + + bpy.ops.object.mode_set(mode='OBJECT') + pbone = obj.pose.bones['root'] + pbone['type'] = 'root' + pbone = obj.pose.bones['root'] + pbone['root.layer'] = 16 + pbone = obj.pose.bones['torso'] + pbone['type'] = 'spine_pivot_flex' + pbone = obj.pose.bones['torso'] + pbone['spine_pivot_flex.later_main'] = 1 + pbone = obj.pose.bones['torso'] + pbone['spine_pivot_flex.layer_extra'] = 2 + pbone = obj.pose.bones['thigh.L'] + pbone['type'] = 'leg_biped_generic' + pbone = obj.pose.bones['thigh.L'] + pbone['leg_biped_generic.layer_ik'] = 12 + pbone = obj.pose.bones['thigh.L'] + pbone['leg_biped_generic.layer_fk'] = 11 + pbone = obj.pose.bones['thigh.R'] + pbone['type'] = 'leg_biped_generic' + pbone = obj.pose.bones['thigh.R'] + pbone['leg_biped_generic.layer_ik'] = 14 + pbone = obj.pose.bones['thigh.R'] + pbone['leg_biped_generic.layer_fk'] = 13 + pbone = obj.pose.bones['head'] + pbone['type'] = 'neck_flex' + pbone = obj.pose.bones['head'] + pbone['neck_flex.layer_extra'] = 4 + pbone = obj.pose.bones['head'] + pbone['neck_flex.layer_main'] = 3 + pbone = obj.pose.bones['DLT-shoulder.L'] + pbone['type'] = 'delta' + pbone = obj.pose.bones['DLT-shoulder.R'] + pbone['type'] = 'delta' + pbone = obj.pose.bones['shoulder.L'] + pbone['type'] = 'copy' + pbone = obj.pose.bones['shoulder.L'] + pbone['copy.layer'] = 1 + pbone = obj.pose.bones['shoulder.R'] + pbone['type'] = 'copy' + pbone = obj.pose.bones['shoulder.R'] + pbone['copy.layer'] = 1 + pbone = obj.pose.bones['DLT-upper_arm.L'] + pbone['type'] = 'delta' + pbone = obj.pose.bones['DLT-upper_arm.R'] + pbone['type'] = 'delta' + pbone = obj.pose.bones['upper_arm.L'] + pbone['type'] = 'arm_biped_generic' + pbone = obj.pose.bones['upper_arm.L'] + pbone['arm_biped_generic.elbow_parent'] = 'spine.04' + pbone = obj.pose.bones['upper_arm.L'] + pbone['arm_biped_generic.layer_fk'] = 7 + pbone = obj.pose.bones['upper_arm.L'] + pbone['arm_biped_generic.layer_ik'] = 8 + pbone = obj.pose.bones['upper_arm.R'] + pbone['type'] = 'arm_biped_generic' + pbone = obj.pose.bones['upper_arm.R'] + pbone['arm_biped_generic.layer_fk'] = 9 + pbone = obj.pose.bones['upper_arm.R'] + pbone['arm_biped_generic.layer_ik'] = 10 + pbone = obj.pose.bones['upper_arm.R'] + pbone['arm_biped_generic.elbow_parent'] = 'spine.04' + pbone = obj.pose.bones['palm.01.L'] + pbone['type'] = 'palm_curl' + pbone = obj.pose.bones['palm.01.L'] + pbone['palm_curl.layer'] = 5 + pbone = obj.pose.bones['thumb.01.L'] + pbone['type'] = 'finger_curl' + pbone = obj.pose.bones['thumb.01.L'] + pbone['finger_curl.layer_main'] = 5 + pbone = obj.pose.bones['thumb.01.L'] + pbone['finger_curl.layer_extra'] = 6 + pbone = obj.pose.bones['thumb.01.R'] + pbone['type'] = 'finger_curl' + pbone = obj.pose.bones['thumb.01.R'] + pbone['finger_curl.layer_main'] = 5 + pbone = obj.pose.bones['thumb.01.R'] + pbone['finger_curl.layer_extra'] = 6 + pbone = obj.pose.bones['palm.01.R'] + pbone['type'] = 'palm_curl' + pbone = obj.pose.bones['palm.01.R'] + pbone['palm_curl.layer'] = 5 + pbone = obj.pose.bones['finger_pinky.01.L'] + pbone['type'] = 'finger_curl' + pbone = obj.pose.bones['finger_pinky.01.L'] + pbone['finger_curl.layer_main'] = 5 + pbone = obj.pose.bones['finger_pinky.01.L'] + pbone['finger_curl.layer_extra'] = 6 + pbone = obj.pose.bones['finger_ring.01.L'] + pbone['type'] = 'finger_curl' + pbone = obj.pose.bones['finger_ring.01.L'] + pbone['finger_curl.layer_main'] = 5 + pbone = obj.pose.bones['finger_ring.01.L'] + pbone['finger_curl.layer_extra'] = 6 + pbone = obj.pose.bones['finger_middle.01.L'] + pbone['type'] = 'finger_curl' + pbone = obj.pose.bones['finger_middle.01.L'] + pbone['finger_curl.layer_main'] = 5 + pbone = obj.pose.bones['finger_middle.01.L'] + pbone['finger_curl.layer_extra'] = 6 + pbone = obj.pose.bones['finger_index.01.L'] + pbone['type'] = 'finger_curl' + pbone = obj.pose.bones['finger_index.01.L'] + pbone['finger_curl.layer_main'] = 5 + pbone = obj.pose.bones['finger_index.01.L'] + pbone['finger_curl.layer_extra'] = 6 + pbone = obj.pose.bones['finger_pinky.01.R'] + pbone['type'] = 'finger_curl' + pbone = obj.pose.bones['finger_pinky.01.R'] + pbone['finger_curl.layer_main'] = 5 + pbone = obj.pose.bones['finger_pinky.01.R'] + pbone['finger_curl.layer_extra'] = 6 + pbone = obj.pose.bones['finger_ring.01.R'] + pbone['type'] = 'finger_curl' + pbone = obj.pose.bones['finger_ring.01.R'] + pbone['finger_curl.layer_main'] = 5 + pbone = obj.pose.bones['finger_ring.01.R'] + pbone['finger_curl.layer_extra'] = 6 + pbone = obj.pose.bones['finger_middle.01.R'] + pbone['type'] = 'finger_curl' + pbone = obj.pose.bones['finger_middle.01.R'] + pbone['finger_curl.layer_main'] = 5 + pbone = obj.pose.bones['finger_middle.01.R'] + pbone['finger_curl.layer_extra'] = 6 + pbone = obj.pose.bones['finger_index.01.R'] + pbone['type'] = 'finger_curl' + pbone = obj.pose.bones['finger_index.01.R'] + pbone['finger_curl.layer_main'] = 5 + pbone = obj.pose.bones['finger_index.01.R'] + pbone['finger_curl.layer_extra'] = 6 + + +class AddHuman(bpy.types.Operator): + '''Add an advanced human metarig base.''' + bl_idname = "object.armature_human_advanced_add" + bl_label = "Add Humanoid (advanced metarig)" + bl_register = True + bl_undo = True + + def execute(self, context): + bpy.ops.object.armature_add() + obj = context.active_object + mode_orig = obj.mode + bpy.ops.object.mode_set(mode='EDIT') # grr, remove bone + bones = context.active_object.data.edit_bones + bones.remove(bones[0]) + metarig_template() + bpy.ops.object.mode_set(mode=mode_orig) + return ('FINISHED',) + +# Register the operator +bpy.ops.add(AddHuman) + +# Add to a menu +import dynamic_menu + +menu_func = (lambda self, context: self.layout.operator(AddHuman.bl_idname, icon='OUTLINER_OB_ARMATURE', text="Human (Meta-Rig)")) + +menu_item = dynamic_menu.add(bpy.types.INFO_MT_armature_add, menu_func) + +if __name__ == "__main__": + bpy.ops.mesh.armature_human_advanced_add() diff --git a/release/scripts/op/add_mesh_torus.py b/release/scripts/op/add_mesh_torus.py index fe8feecf43d..7e3b28b628e 100644 --- a/release/scripts/op/add_mesh_torus.py +++ b/release/scripts/op/add_mesh_torus.py @@ -131,7 +131,7 @@ bpy.ops.add(AddTorus) import dynamic_menu menu_func = (lambda self, context: self.layout.operator(AddTorus.bl_idname, - text="Torus", icon='ICON_MESH_DONUT')) + text="Torus", icon='MESH_DONUT')) menu_item = dynamic_menu.add(bpy.types.INFO_MT_mesh_add, menu_func) diff --git a/release/scripts/op/console_shell.py b/release/scripts/op/console_shell.py index 7dec9477f51..bdb4a746d95 100644 --- a/release/scripts/op/console_shell.py +++ b/release/scripts/op/console_shell.py @@ -17,12 +17,9 @@ # ##### END GPL LICENSE BLOCK ##### # -import sys import os - import bpy - language_id = 'shell' diff --git a/release/scripts/op/mesh.py b/release/scripts/op/mesh.py index 0e57bc440d1..1de06963c7a 100644 --- a/release/scripts/op/mesh.py +++ b/release/scripts/op/mesh.py @@ -16,12 +16,15 @@ # # ##### END GPL LICENSE BLOCK ##### +# + import bpy + def main(context): ob = context.active_object bpy.ops.mesh.selection_type(type='FACE') - is_editmode = (ob.mode=='EDIT') + is_editmode = (ob.mode == 'EDIT') if is_editmode: bpy.ops.object.mode_set(mode='OBJECT', toggle=False) @@ -47,6 +50,7 @@ def main(context): if is_editmode: bpy.ops.object.mode_set(mode='EDIT', toggle=False) + class MeshSelectInteriorFaces(bpy.types.Operator): '''Select faces where all edges have more then 2 face users.''' diff --git a/release/scripts/op/mesh_skin.py b/release/scripts/op/mesh_skin.py index 5cf526cc23e..436cd21c9ee 100644 --- a/release/scripts/op/mesh_skin.py +++ b/release/scripts/op/mesh_skin.py @@ -16,6 +16,8 @@ # # ##### END GPL LICENSE BLOCK ##### +# + # import Blender import time, functools import bpy diff --git a/release/scripts/op/object.py b/release/scripts/op/object.py index db50412464b..6a7b735e04b 100644 --- a/release/scripts/op/object.py +++ b/release/scripts/op/object.py @@ -61,6 +61,7 @@ class SelectPattern(bpy.types.Operator): def invoke(self, context, event): wm = context.manager + # return wm.invoke_props_popup(self, event) wm.invoke_props_popup(self, event) return ('RUNNING_MODAL',) @@ -74,16 +75,16 @@ class SelectPattern(bpy.types.Operator): row.prop(props, "extend") -class SubsurfSet(bpy.types.Operator): +class SubdivisionSet(bpy.types.Operator): '''Sets a Subdivision Surface Level (1-5)''' - bl_idname = "object.subsurf_set" - bl_label = "Subsurf Set" + bl_idname = "object.subdivision_set" + bl_label = "Subdivision Set" bl_register = True bl_undo = True level = IntProperty(name="Level", - default=1, min=0, max=6) + default=1, min=0, max=100, soft_min=0, soft_max=6) def poll(self, context): ob = context.active_object @@ -91,16 +92,28 @@ class SubsurfSet(bpy.types.Operator): def execute(self, context): level = self.properties.level - ob = context.active_object - for mod in ob.modifiers: - if mod.type == 'SUBSURF': - if mod.levels != level: - mod.levels = level - return ('FINISHED',) - # adda new modifier - mod = ob.modifiers.new("Subsurf", 'SUBSURF') - mod.levels = level + def set_object_subd(obj): + for mod in obj.modifiers: + if mod.type == 'MULTIRES': + if level < mod.total_levels: + if obj.mode == 'SCULPT' and mod.sculpt_levels != level: + mod.sculpt_levels = level + elif obj.mode == 'OBJECT' and mod.levels != level: + mod.levels = level + return + elif mod.type == 'SUBSURF': + if mod.levels != level: + mod.levels = level + return + + # adda new modifier + mod = obj.modifiers.new("Subsurf", 'SUBSURF') + mod.levels = level + + for obj in context.selected_editable_objects: + set_object_subd(obj) + return ('FINISHED',) @@ -119,5 +132,5 @@ class Retopo(bpy.types.Operator): bpy.ops.add(SelectPattern) -bpy.ops.add(SubsurfSet) +bpy.ops.add(SubdivisionSet) bpy.ops.add(Retopo) diff --git a/release/scripts/op/presets.py b/release/scripts/op/presets.py index 84a60765fa4..0f6d5e11b5c 100644 --- a/release/scripts/op/presets.py +++ b/release/scripts/op/presets.py @@ -16,9 +16,12 @@ # # ##### END GPL LICENSE BLOCK ##### +# + import bpy import os + class AddPresetBase(bpy.types.Operator): '''Base preset class, only for subclassing subclasses must define @@ -27,7 +30,7 @@ class AddPresetBase(bpy.types.Operator): bl_idname = "render.preset_add" bl_label = "Add Render Preset" - name = bpy.props.StringProperty(name="Name", description="Name of the preset, used to make the path name", maxlen= 64, default= "") + name = bpy.props.StringProperty(name="Name", description="Name of the preset, used to make the path name", maxlen=64, default="") def _as_filename(self, name): # could reuse for other presets for char in " !@#$%^&*(){}:\";'[]<>,./?": @@ -54,6 +57,9 @@ class AddPresetBase(bpy.types.Operator): def invoke(self, context, event): wm = context.manager + #crashes, TODO - fix + #return wm.invoke_props_popup(self, event) + wm.invoke_props_popup(self, event) return ('RUNNING_MODAL',) @@ -101,6 +107,7 @@ class AddPresetSSS(AddPresetBase): preset_subdir = "sss" + class AddPresetCloth(AddPresetBase): '''Add a Cloth Preset.''' bl_idname = "cloth.preset_add" @@ -121,4 +128,3 @@ class AddPresetCloth(AddPresetBase): bpy.ops.add(AddPresetRender) bpy.ops.add(AddPresetSSS) bpy.ops.add(AddPresetCloth) - diff --git a/release/scripts/op/screen_play_rendered_anim.py b/release/scripts/op/screen_play_rendered_anim.py new file mode 100644 index 00000000000..a1401304c08 --- /dev/null +++ b/release/scripts/op/screen_play_rendered_anim.py @@ -0,0 +1,149 @@ +# ***** BEGIN GPL LICENSE BLOCK ***** +# +# Script copyright (C) Campbell J Barton +# +# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ***** END GPL LICENCE BLOCK ***** +# -------------------------------------------------------------------------- + +# History +# +# Originally written by Matt Ebb + +import bpy +import subprocess, os, platform + +# from BKE_add_image_extension() +img_format_exts = { + 'IRIS':'.rgb', + 'RADHDR':'.hdr', + 'PNG':'png', + 'TARGA':'tga', + 'RAWTARGA':'tga', + 'BMP':'bmp', + 'TIFF':'tif', + 'OPENEXR':'exr', + 'MULTILAYER':'exr', + 'CINEON':'cin', + 'DPX':'dpx', + 'JPEG':'jpg', + 'JPEG2000':'jp2', + 'QUICKTIME_QTKIT':'mov', + 'QUICKTIME_CARBON':'mov', + 'AVIRAW':'avi', + 'AVIJPEG':'avi', + 'AVICODEC':'avi', + 'XVID':'avi', + 'THEORA':'ogg', + } + +movie_formats = ('QUICKTIME_QTKIT', + 'QUICKTIME_CARBONTKIT', + 'AVIRAW', + 'AVIJPEG', + 'AVICODEC', + 'XVID', + 'THEORA' + ) + +def guess_player_path(preset): + if preset == 'BLENDER24': + player_path = 'blender' + + if platform.system() == 'Darwin': + test_path = '/Applications/blender 2.49.app/Contents/MacOS/blender' + elif platform.system() == 'Windows': + test_path = '/Program Files/Blender Foundation/Blender/blender.exe' + + if os.path.exists(test_path): + player_path = test_path + + elif preset == 'DJV': + player_path = 'djv_view' + + if platform.system() == 'Darwin': + test_path = '/Applications/djv-0.8.2.app/Contents/Resources/bin/djv_view' + if os.path.exists(test_path): + player_path = test_path + + elif preset == 'FRAMECYCLER': + player_path = 'framecycler' + + elif preset == 'RV': + player_path = 'rv' + + + return player_path + + +class PlayRenderedAnim(bpy.types.Operator): + '''Plays back rendered frames/movies using an external player.''' + bl_idname = "screen.play_rendered_anim" + bl_label = "Play Rendered Animation" + bl_register = True + bl_undo = False + + def execute(self, context): + sce = context.scene + rd = sce.render_data + prefs = context.user_preferences + + preset = prefs.filepaths.animation_player_preset + player_path = prefs.filepaths.animation_player + file_path = bpy.utils.expandpath(rd.output_path) + + # try and guess a command line if it doesn't exist + if player_path == '': + player_path = guess_player_path(preset) + + # doesn't support ### frame notation yet + if rd.file_format in movie_formats: + file = "%s%04d_%04d" % (file_path, sce.start_frame, sce.end_frame) + elif preset in ('BLENDER24', 'DJV', 'CUSTOM'): + file = "%s%04d" % (file_path, sce.start_frame) + elif preset in ('FRAMECYCLER', 'RV'): + file = "%s#" % file_path + + if rd.file_extensions: + file += '.' + img_format_exts[rd.file_format] + + cmd = [player_path] + # extra options, fps controls etc. + if preset == 'BLENDER24': + opts = ["-a", "-f", str(rd.fps), str(rd.fps_base), file] + cmd.extend(opts) + elif preset == 'DJV': + opts = [file, "-playback_speed", str(rd.fps)] + cmd.extend(opts) + elif preset == 'FRAMECYCLER': + opts = [file, "%d-%d" % (sce.start_frame, sce.end_frame)] + cmd.extend(opts) + elif preset == 'RV': + opts = ["-fps", str(rd.fps), "-play", "[ %s ]" % file] + cmd.extend(opts) + else: # 'CUSTOM' + cmd.append(file) + + # launch it + try: + process = subprocess.Popen(cmd) + except: + pass + #raise OSError("Couldn't find an external animation player.") + + return('FINISHED',) + +bpy.ops.add(PlayRenderedAnim) diff --git a/release/scripts/op/uvcalc_follow_active.py b/release/scripts/op/uvcalc_follow_active.py new file mode 100644 index 00000000000..f2dcaec4728 --- /dev/null +++ b/release/scripts/op/uvcalc_follow_active.py @@ -0,0 +1,272 @@ +# ##### 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +# + +#for full docs see... +# http://mediawiki.blender.org/index.php/Scripts/Manual/UV_Calculate/Follow_active_quads + +import bpy + + +def extend(obj, operator, EXTEND_MODE): + me = obj.data + me_verts = me.verts + # script will fail without UVs + if not me.active_uv_texture: + me.add_uv_texture() + + + # Toggle Edit mode + is_editmode = (obj.mode == 'EDIT') + if is_editmode: + bpy.ops.object.mode_set(mode='OBJECT') + + #t = sys.time() + edge_average_lengths = {} + + OTHER_INDEX = 2, 3, 0, 1 + FAST_INDICIES = 0, 2, 1, 3 # order is faster + + def extend_uvs(face_source, face_target, edge_key): + ''' + Takes 2 faces, + Projects its extends its UV coords onto the face next to it. + Both faces must share an edge. + ''' + + def face_edge_vs(vi): + # assume a quad + return [(vi[0], vi[1]), (vi[1], vi[2]), (vi[2], vi[3]), (vi[3], vi[0])] + + vidx_source = face_source.verts + vidx_target = face_target.verts + + faceUVsource = me.active_uv_texture.data[face_source.index] + uvs_source = [faceUVsource.uv1, faceUVsource.uv2, faceUVsource.uv3, faceUVsource.uv4] + + faceUVtarget = me.active_uv_texture.data[face_target.index] + uvs_target = [faceUVtarget.uv1, faceUVtarget.uv2, faceUVtarget.uv3, faceUVtarget.uv4] + + # vertex index is the key, uv is the value + + uvs_vhash_source = dict([(vindex, uvs_source[i]) for i, vindex in enumerate(vidx_source)]) + + uvs_vhash_target = dict([(vindex, uvs_target[i]) for i, vindex in enumerate(vidx_target)]) + + edge_idxs_source = face_edge_vs(vidx_source) + edge_idxs_target = face_edge_vs(vidx_target) + + source_matching_edge = -1 + target_matching_edge = -1 + + edge_key_swap = edge_key[1], edge_key[0] + + try: + source_matching_edge = edge_idxs_source.index(edge_key) + except: + source_matching_edge = edge_idxs_source.index(edge_key_swap) + try: + target_matching_edge = edge_idxs_target.index(edge_key) + except: + target_matching_edge = edge_idxs_target.index(edge_key_swap) + + + edgepair_inner_source = edge_idxs_source[source_matching_edge] + edgepair_inner_target = edge_idxs_target[target_matching_edge] + edgepair_outer_source = edge_idxs_source[OTHER_INDEX[source_matching_edge]] + edgepair_outer_target = edge_idxs_target[OTHER_INDEX[target_matching_edge]] + + if edge_idxs_source[source_matching_edge] == edge_idxs_target[target_matching_edge]: + iA = 0 # Flipped, most common + iB = 1 + else: # The normals of these faces must be different + iA = 1 + iB = 0 + + + # Set the target UV's touching source face, no tricky calc needed, + uvs_vhash_target[edgepair_inner_target[0]][:] = uvs_vhash_source[edgepair_inner_source[iA]] + uvs_vhash_target[edgepair_inner_target[1]][:] = uvs_vhash_source[edgepair_inner_source[iB]] + + + # Set the 2 UV's on the target face that are not touching + # for this we need to do basic expaning on the source faces UV's + if EXTEND_MODE == 'LENGTH': + + try: # divide by zero is possible + ''' + measure the length of each face from the middle of each edge to the opposite + allong the axis we are copying, use this + ''' + i1a = edgepair_outer_target[iB] + i2a = edgepair_inner_target[iA] + if i1a > i2a: + i1a, i2a = i2a, i1a + + i1b = edgepair_outer_source[iB] + i2b = edgepair_inner_source[iA] + if i1b > i2b: + i1b, i2b = i2b, i1b + # print edge_average_lengths + factor = edge_average_lengths[i1a, i2a][0] / edge_average_lengths[i1b, i2b][0] + except: + # Div By Zero? + factor = 1.0 + + uvs_vhash_target[edgepair_outer_target[iB]][:] = uvs_vhash_source[edgepair_inner_source[0]] + factor * (uvs_vhash_source[edgepair_inner_source[0]] - uvs_vhash_source[edgepair_outer_source[1]]) + uvs_vhash_target[edgepair_outer_target[iA]][:] = uvs_vhash_source[edgepair_inner_source[1]] + factor * (uvs_vhash_source[edgepair_inner_source[1]] - uvs_vhash_source[edgepair_outer_source[0]]) + + else: + # same as above but with no factors + uvs_vhash_target[edgepair_outer_target[iB]][:] = uvs_vhash_source[edgepair_inner_source[0]] + (uvs_vhash_source[edgepair_inner_source[0]] - uvs_vhash_source[edgepair_outer_source[1]]) + uvs_vhash_target[edgepair_outer_target[iA]][:] = uvs_vhash_source[edgepair_inner_source[1]] + (uvs_vhash_source[edgepair_inner_source[1]] - uvs_vhash_source[edgepair_outer_source[0]]) + + + if me.active_uv_texture == None: + me.add_uv_texture + + face_act = me.faces.active + if face_act == -1: + operator.report({'ERROR'}, "No active face.") + return + + face_sel = [f for f in me.faces if len(f.verts) == 4 and f.selected] + + face_act_local_index = -1 + for i, f in enumerate(face_sel): + if f.index == face_act: + face_act_local_index = i + break + + if face_act_local_index == -1: + operator.report({'ERROR'}, "Active face not selected.") + return + + + + # Modes + # 0 unsearched + # 1:mapped, use search from this face. - removed!! + # 2:all siblings have been searched. dont search again. + face_modes = [0] * len(face_sel) + face_modes[face_act_local_index] = 1 # extend UV's from this face. + + + # Edge connectivty + edge_faces = {} + for i, f in enumerate(face_sel): + for edkey in f.edge_keys: + try: + edge_faces[edkey].append(i) + except: + edge_faces[edkey] = [i] + + #SEAM = me.edges.seam + + if EXTEND_MODE == 'LENGTH': + edge_loops = me.edge_loops(face_sel, [ed.key for ed in me.edges if ed.seam]) + me_verts = me.verts + for loop in edge_loops: + looplen = [0.0] + for ed in loop: + edge_average_lengths[ed] = looplen + looplen[0] += (me_verts[ed[0]].co - me_verts[ed[1]].co).length + looplen[0] = looplen[0] / len(loop) + + + # remove seams, so we dont map accross seams. + for ed in me.edges: + if ed.seam: + # remove the edge pair if we can + try: + del edge_faces[ed.key] + except: + pass + # Done finding seams + + + # face connectivity - faces around each face + # only store a list of indicies for each face. + face_faces = [[] for i in range(len(face_sel))] + + for edge_key, faces in edge_faces.items(): + if len(faces) == 2: # Only do edges with 2 face users for now + face_faces[faces[0]].append((faces[1], edge_key)) + face_faces[faces[1]].append((faces[0], edge_key)) + + + # Now we know what face is connected to what other face, map them by connectivity + ok = True + while ok: + ok = False + for i in range(len(face_sel)): + if face_modes[i] == 1: # searchable + for f_sibling, edge_key in face_faces[i]: + if face_modes[f_sibling] == 0: + face_modes[f_sibling] = 1 # mapped and search from. + extend_uvs(face_sel[i], face_sel[f_sibling], edge_key) + face_modes[i] = 1 # we can map from this one now. + ok = True # keep searching + + face_modes[i] = 2 # dont search again + + if is_editmode: + bpy.ops.object.mode_set(mode='EDIT') + else: + me.update() + + +def main(context, operator): + obj = context.active_object + + extend(obj, operator, operator.properties.mode) + + +class FollowActiveQuads(bpy.types.Operator): + '''Follow UVs from active quads along continuous face loops.''' + bl_idname = "uv.follow_active_quads" + bl_label = "Follow Active Quads" + + bl_register = True + bl_undo = True + + mode = bpy.props.EnumProperty(items=(("EVEN", "Client", "Space all UVs evently"), ("LENGTH", "Length", "Average space UVs edge length of each loop.")), + name="Edge Length Mode", + description="Method to space UV edge loops", + default="LENGTH") + + def poll(self, context): + obj = context.active_object + return (obj is not None and obj.type == 'MESH') + + def execute(self, context): + main(context, self) + return ('FINISHED',) + +bpy.ops.add(FollowActiveQuads) + +# Add to a menu +import dynamic_menu + +menu_func = (lambda self, context: self.layout.operator(FollowActiveQuads.bl_idname)) + +menu_item = dynamic_menu.add(bpy.types.VIEW3D_MT_uv_map, menu_func) + +if __name__ == '__main__': + bpy.ops.uv.follow_active_quads() diff --git a/release/scripts/op/uvcalc_smart_project.py b/release/scripts/op/uvcalc_smart_project.py index 2da7174ed99..f3c8f7ed7dd 100644 --- a/release/scripts/op/uvcalc_smart_project.py +++ b/release/scripts/op/uvcalc_smart_project.py @@ -20,13 +20,14 @@ # ***** END GPL LICENCE BLOCK ***** # -------------------------------------------------------------------------- +# #from Blender import Object, Draw, Window, sys, Mesh, Geometry from Mathutils import Matrix, Vector, RotationMatrix import time import Geometry import bpy -from math import cos, degrees, radians +from math import cos, radians DEG_TO_RAD = 0.017453292519943295 # pi/180.0 SMALL_NUM = 0.000000001 diff --git a/release/scripts/op/vertexpaint_dirt.py b/release/scripts/op/vertexpaint_dirt.py index 585a2231e21..a521c24e06c 100644 --- a/release/scripts/op/vertexpaint_dirt.py +++ b/release/scripts/op/vertexpaint_dirt.py @@ -19,6 +19,8 @@ # ***** END GPL LICENCE BLOCK ***** # -------------------------------------------------------------------------- +# + # History # # Originally written by Campbell Barton aka ideasman42 @@ -29,13 +31,13 @@ # import bpy -import Mathutils import math import time from Mathutils import Vector from bpy.props import * + def applyVertexDirt(me, blur_iterations, blur_strength, clamp_dirt, clamp_clean, dirt_only): ## Window.WaitCursor(1) @@ -43,8 +45,8 @@ def applyVertexDirt(me, blur_iterations, blur_strength, clamp_dirt, clamp_clean, vert_tone = [0.0] * len(me.verts) - min_tone =180.0 - max_tone =0.0 + min_tone = 180.0 + max_tone = 0.0 # create lookup table for each vertex's connected vertices (via edges) con = [] @@ -100,7 +102,7 @@ def applyVertexDirt(me, blur_iterations, blur_strength, clamp_dirt, clamp_clean, # print(clamp_clean) # print(clamp_dirt) - tone_range = max_tone-min_tone + tone_range = max_tone - min_tone if not tone_range: return @@ -129,18 +131,19 @@ def applyVertexDirt(me, blur_iterations, blur_strength, clamp_dirt, clamp_clean, for j, v in enumerate(f.verts): col = f_col[j] tone = vert_tone[me.verts[v].index] - tone = (tone-min_tone)/tone_range + tone = (tone - min_tone) / tone_range if dirt_only: tone = min(tone, 0.5) tone *= 2 - col[0] = tone*col[0] - col[1] = tone*col[1] - col[2] = tone*col[2] + col[0] = tone * col[0] + col[1] = tone * col[1] + col[2] = tone * col[2] ## Window.WaitCursor(0) + class VertexPaintDirt(bpy.types.Operator): bl_idname = "mesh.vertex_paint_dirt" @@ -148,11 +151,11 @@ class VertexPaintDirt(bpy.types.Operator): bl_register = True bl_undo = True - blur_strength = FloatProperty(name = "Blur Strength", description = "Blur strength per iteration", default = 1.0, min = 0.01, max = 1.0) - blur_iterations = IntProperty(name = "Blur Iterations", description = "Number times to blur the colors. (higher blurs more)", default = 1, min = 0, max = 40) - clean_angle = FloatProperty(name = "Highlight Angle", description = "Less then 90 limits the angle used in the tonal range", default = 180.0, min = 0.0, max = 180.0) - dirt_angle = FloatProperty(name = "Dirt Angle", description = "Less then 90 limits the angle used in the tonal range", default = 0.0, min = 0.0, max = 180.0) - dirt_only = BoolProperty(name= "Dirt Only", description = "Dont calculate cleans for convex areas", default = False) + blur_strength = FloatProperty(name="Blur Strength", description="Blur strength per iteration", default=1.0, min=0.01, max=1.0) + blur_iterations = IntProperty(name="Blur Iterations", description="Number times to blur the colors. (higher blurs more)", default=1, min=0, max=40) + clean_angle = FloatProperty(name="Highlight Angle", description="Less then 90 limits the angle used in the tonal range", default=180.0, min=0.0, max=180.0) + dirt_angle = FloatProperty(name="Dirt Angle", description="Less then 90 limits the angle used in the tonal range", default=0.0, min=0.0, max=180.0) + dirt_only = BoolProperty(name="Dirt Only", description="Dont calculate cleans for convex areas", default=False) def execute(self, context): sce = context.scene @@ -168,7 +171,7 @@ class VertexPaintDirt(bpy.types.Operator): applyVertexDirt(me, self.properties.blur_iterations, self.properties.blur_strength, math.radians(self.properties.dirt_angle), math.radians(self.properties.clean_angle), self.properties.dirt_only) - print('Dirt calculated in %.6f' % (time.time()-t)) + print('Dirt calculated in %.6f' % (time.time() - t)) return('FINISHED',) diff --git a/release/scripts/op/wm.py b/release/scripts/op/wm.py index c5fc18964bf..5069d206a3f 100644 --- a/release/scripts/op/wm.py +++ b/release/scripts/op/wm.py @@ -19,10 +19,10 @@ # import bpy -import os from bpy.props import * + class MESH_OT_delete_edgeloop(bpy.types.Operator): '''Export a single object as a stanford PLY with normals, colours and texture coordinates.''' @@ -30,7 +30,7 @@ class MESH_OT_delete_edgeloop(bpy.types.Operator): bl_label = "Delete Edge Loop" def execute(self, context): - bpy.ops.tfm.edge_slide(value=1.0) + bpy.ops.transform.edge_slide(value=1.0) bpy.ops.mesh.select_more() bpy.ops.mesh.remove_doubles() @@ -42,9 +42,6 @@ rna_path_prop = StringProperty(name="Context Attributes", rna_reverse_prop = BoolProperty(name="Reverse", description="Cycle backwards", default=False) -class NullPathMember: - pass - def context_path_validate(context, path): import sys @@ -53,7 +50,7 @@ def context_path_validate(context, path): except AttributeError: if "'NoneType'" in str(sys.exc_info()[1]): # One of the items in the rna path is None, just ignore this - value = NullPathMember + value = Ellipsis else: # We have a real error in the rna path, dont ignore that raise @@ -62,7 +59,7 @@ def context_path_validate(context, path): def execute_context_assign(self, context): - if context_path_validate(context, self.properties.path) == NullPathMember: + if context_path_validate(context, self.properties.path) is Ellipsis: return ('PASS_THROUGH',) exec("context.%s=self.properties.value" % self.properties.path) return ('FINISHED',) @@ -136,10 +133,12 @@ class WM_OT_context_toggle(bpy.types.Operator): def execute(self, context): - if context_path_validate(context, self.properties.path) == NullPathMember: + if context_path_validate(context, self.properties.path) is Ellipsis: return ('PASS_THROUGH',) - exec("context.%s=not (context.%s)" % (self.properties.path, self.properties.path)) + exec("context.%s=not (context.%s)" % + (self.properties.path, self.properties.path)) + return ('FINISHED',) @@ -157,11 +156,13 @@ class WM_OT_context_toggle_enum(bpy.types.Operator): def execute(self, context): - if context_path_validate(context, self.properties.path) == NullPathMember: + if context_path_validate(context, self.properties.path) is Ellipsis: return ('PASS_THROUGH',) exec("context.%s = ['%s', '%s'][context.%s!='%s']" % \ - (self.properties.path, self.properties.value_1, self.properties.value_2, self.properties.path, self.properties.value_2)) + (self.properties.path, self.properties.value_1,\ + self.properties.value_2, self.properties.path, + self.properties.value_2)) return ('FINISHED',) @@ -177,7 +178,7 @@ class WM_OT_context_cycle_int(bpy.types.Operator): def execute(self, context): value = context_path_validate(context, self.properties.path) - if value == NullPathMember: + if value is Ellipsis: return ('PASS_THROUGH',) self.properties.value = value @@ -209,7 +210,7 @@ class WM_OT_context_cycle_enum(bpy.types.Operator): def execute(self, context): value = context_path_validate(context, self.properties.path) - if value == NullPathMember: + if value is Ellipsis: return ('PASS_THROUGH',) orig_value = value @@ -318,9 +319,12 @@ class WM_OT_doc_edit(bpy.types.Operator): def execute(self, context): - class_name, class_prop = self.properties.doc_id.split('.') + doc_id = self.properties.doc_id + doc_new = self.properties.doc_new - if not self.properties.doc_new: + class_name, class_prop = doc_id.split('.') + + if not doc_new: return ('RUNNING_MODAL',) # check if this is an operator @@ -333,25 +337,25 @@ class WM_OT_doc_edit(bpy.types.Operator): if op_class: rna = op_class.bl_rna doc_orig = rna.description - if doc_orig == self.properties.doc_new: + if doc_orig == doc_new: return ('RUNNING_MODAL',) - print("op - old:'%s' -> new:'%s'" % (doc_orig, self.properties.doc_new)) - upload["title"] = 'OPERATOR %s:%s' % (self.properties.doc_id, doc_orig) - upload["description"] = self.properties.doc_new + print("op - old:'%s' -> new:'%s'" % (doc_orig, doc_new)) + upload["title"] = 'OPERATOR %s:%s' % (doc_id, doc_orig) + upload["description"] = doc_new self._send_xmlrpc(upload) else: rna = getattr(bpy.types, class_name).bl_rna doc_orig = rna.properties[class_prop].description - if doc_orig == self.properties.doc_new: + if doc_orig == doc_new: return ('RUNNING_MODAL',) - print("rna - old:'%s' -> new:'%s'" % (doc_orig, self.properties.doc_new)) - upload["title"] = 'RNA %s:%s' % (self.properties.doc_id, doc_orig) + print("rna - old:'%s' -> new:'%s'" % (doc_orig, doc_new)) + upload["title"] = 'RNA %s:%s' % (doc_id, doc_orig) - upload["description"] = self.properties.doc_new + upload["description"] = doc_new self._send_xmlrpc(upload) @@ -359,8 +363,7 @@ class WM_OT_doc_edit(bpy.types.Operator): def invoke(self, context, event): wm = context.manager - wm.invoke_props_popup(self, event) - return ('RUNNING_MODAL',) + return wm.invoke_props_popup(self, event) class WM_OT_reload_scripts(bpy.types.Operator): @@ -370,27 +373,7 @@ class WM_OT_reload_scripts(bpy.types.Operator): def execute(self, context): MOD = type(bpy) - import sys bpy.load_scripts(True) - ''' - prefix = bpy.base_path - items = list(sys.modules.items()) - items.sort() - items.reverse() - for mod_name, mod in items: - mod_file = getattr(mod, "__file__", "") - if mod_file.startswith(prefix) and "__init__" not in mod_file: - print(mod_file) - reload(mod) - """ - for submod_name in dir(mod): - submod = getattr(mod, submod_name) - if isinstance(submod, MOD): - reload(submod) - """ - else: - print("Ignoring:", mod, mod_file) - ''' return ('FINISHED',) diff --git a/release/scripts/templates/operator.py b/release/scripts/templates/operator.py index 5e8a2f33cb7..72a6ae53f5f 100644 --- a/release/scripts/templates/operator.py +++ b/release/scripts/templates/operator.py @@ -41,8 +41,7 @@ class ExportSomeData(bpy.types.Operator): return ('RUNNING_MODAL',) elif 0: # Redo popup - wm.invoke_props_popup(self, event) # - return ('RUNNING_MODAL',) + return wm.invoke_props_popup(self, event) # elif 0: return self.execute(context) diff --git a/release/scripts/ui/properties_data_armature.py b/release/scripts/ui/properties_data_armature.py index 1024ddc7836..3b1ea8cc34c 100644 --- a/release/scripts/ui/properties_data_armature.py +++ b/release/scripts/ui/properties_data_armature.py @@ -128,8 +128,8 @@ class DATA_PT_bone_groups(DataButtonsPanel): col = row.column(align=True) col.active = (ob.proxy is None) - col.operator("pose.group_add", icon='ICON_ZOOMIN', text="") - col.operator("pose.group_remove", icon='ICON_ZOOMOUT', text="") + col.operator("pose.group_add", icon='ZOOMIN', text="") + col.operator("pose.group_remove", icon='ZOOMOUT', text="") group = pose.active_bone_group if group: @@ -235,9 +235,65 @@ class DATA_PT_ghost(DataButtonsPanel): col.label(text="Display:") col.prop(arm, "ghost_only_selected", text="Selected Only") + +class DATA_PT_iksolver_itasc(DataButtonsPanel): + bl_label = "iTaSC parameters" + bl_default_closed = True + + def poll(self, context): + ob = context.object + return (ob and ob.pose) + + def draw(self, context): + layout = self.layout + + ob = context.object + + itasc = ob.pose.ik_param + wide_ui = (context.region.width > narrowui) + + row = layout.row() + row.prop(ob.pose, "ik_solver") + + if itasc: + layout.prop(itasc, "mode", expand=True) + simulation = (itasc.mode == 'SIMULATION') + if simulation: + layout.label(text="Reiteration:") + layout.prop(itasc, "reiteration", expand=True) + + split = layout.split() + split.active = not simulation or itasc.reiteration != 'NEVER' + col = split.column() + col.prop(itasc, "precision") + + if wide_ui: + col = split.column() + col.prop(itasc, "num_iter") + + + if simulation: + layout.prop(itasc, "auto_step") + row = layout.row() + if itasc.auto_step: + row.prop(itasc, "min_step", text="Min") + row.prop(itasc, "max_step", text="Max") + else: + row.prop(itasc, "num_step") + + layout.prop(itasc, "solver") + if simulation: + layout.prop(itasc, "feedback") + layout.prop(itasc, "max_velocity") + if itasc.solver == 'DLS': + row = layout.row() + row.prop(itasc, "dampmax", text="Damp", slider=True) + row.prop(itasc, "dampeps", text="Eps", slider=True) + bpy.types.register(DATA_PT_context_arm) bpy.types.register(DATA_PT_skeleton) bpy.types.register(DATA_PT_display) bpy.types.register(DATA_PT_bone_groups) bpy.types.register(DATA_PT_paths) bpy.types.register(DATA_PT_ghost) +bpy.types.register(DATA_PT_iksolver_itasc) diff --git a/release/scripts/ui/properties_data_armature_rigify.py b/release/scripts/ui/properties_data_armature_rigify.py new file mode 100644 index 00000000000..9d04afe22b5 --- /dev/null +++ b/release/scripts/ui/properties_data_armature_rigify.py @@ -0,0 +1,353 @@ +# ##### 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +# +import bpy + +narrowui = 180 + + +class PoseTemplateSettings(bpy.types.IDPropertyGroup): + pass + + +class PoseTemplate(bpy.types.IDPropertyGroup): + pass + +PoseTemplate.StringProperty(attr="name", + name="Name of the slave", + description="", + maxlen=64, + default="") + + +PoseTemplateSettings.CollectionProperty(attr="templates", type=PoseTemplate, name="Templates", description="") +PoseTemplateSettings.IntProperty(attr="active_template_index", + name="Index of the active slave", + description="", + default=-1, + min=-1, + max=65535) + +PoseTemplateSettings.BoolProperty(attr="generate_def_rig", + name="Create Deform Rig", + description="Create a copy of the metarig, constrainted by the generated rig", + default=False) + +bpy.types.Scene.PointerProperty(attr="pose_templates", type=PoseTemplateSettings, name="Network Render", description="Network Render Settings") + + +def metarig_templates(): + import rigify + return rigify.get_submodule_types() + + +class DATA_PT_template(bpy.types.Panel): + bl_label = "Meta-Rig Templates" + bl_space_type = 'PROPERTIES' + bl_region_type = 'WINDOW' + bl_context = "data" + bl_default_closed = True + + templates = [] + + def poll(self, context): + if not context.armature: + return False + obj = context.object + if obj: + return (obj.mode in ('POSE', 'OBJECT')) + return False + + def draw(self, context): + layout = self.layout + try: + active_type = context.active_pose_bone["type"] + except: + active_type = None + + scene = context.scene + pose_templates = scene.pose_templates + + if pose_templates.active_template_index == -1: + pose_templates.active_template_index = 0 + + if not self.templates: + self.templates[:] = metarig_templates() + + while(len(pose_templates.templates) < len(self.templates)): + pose_templates.templates.add() + while(len(pose_templates.templates) > len(self.templates)): + pose_templates.templates.remove(0) + + for i, template_name in enumerate(self.templates): + template = pose_templates.templates[i] + if active_type == template_name: + template.name = "<%s>" % template_name.replace("_", " ") + else: + template.name = " %s " % template_name.replace("_", " ") + + row = layout.row() + row.operator("pose.metarig_generate", text="Generate") + row.operator("pose.metarig_validate", text="Check") + row.operator("pose.metarig_graph", text="Graph") + row = layout.row() + row.prop(pose_templates, "generate_def_rig") + + row = layout.row() + col = row.column() + col.template_list(pose_templates, "templates", pose_templates, "active_template_index", rows=1) + + subrow = col.split(percentage=0.5, align=True) + subsubrow = subrow.row(align=True) + subsubrow.operator("pose.metarig_assign", text="Assign") + subsubrow.operator("pose.metarig_clear", text="Clear") + + subsubrow = subrow.split(percentage=0.8) + subsubrow.operator("pose.metarig_sample_add", text="Sample").metarig_type = self.templates[pose_templates.active_template_index] + subsubrow.operator("pose.metarig_sample_add", text="All").metarig_type = "" # self.templates[pose_templates.active_template_index] + + sub = row.column(align=True) + sub.operator("pose.metarig_reload", icon="FILE_REFRESH", text="") + + +# operators +from bpy.props import StringProperty + + +class Reload(bpy.types.Operator): + '''Re-Scan the metarig package directory for scripts''' + + bl_idname = "pose.metarig_reload" + bl_label = "Re-Scan the list of metarig types" + + def execute(self, context): + DATA_PT_template.templates[:] = metarig_templates() + return ('FINISHED',) + + +def rigify_report_exception(operator, exception): + import traceback + import sys + import os + # find the module name where the error happened + # hint, this is the metarig type! + exceptionType, exceptionValue, exceptionTraceback = sys.exc_info() + fn = traceback.extract_tb(exceptionTraceback)[-1][0] + fn = os.path.basename(fn) + fn = os.path.splitext(fn)[0] + message = [] + if fn.startswith("__"): + message.append("Incorrect armature...") + else: + message.append("Incorrect armature for type '%s'" % fn) + message.append(exception.message) + + message.reverse() # XXX - stupid! menu's are upside down! + + operator.report(set(['INFO']), '\n'.join(message)) + + +class Generate(bpy.types.Operator): + '''Generates a metarig from the active armature''' + + bl_idname = "pose.metarig_generate" + bl_label = "Generate Metarig" + + def execute(self, context): + import rigify + reload(rigify) + + meta_def = context.scene.pose_templates.generate_def_rig + + try: + rigify.generate_rig(context, context.object, META_DEF=meta_def) + except rigify.RigifyError as rig_exception: + rigify_report_exception(self, rig_exception) + + return ('FINISHED',) + + +class Validate(bpy.types.Operator): + '''Validate a metarig from the active armature''' + + bl_idname = "pose.metarig_validate" + bl_label = "Validate Metarig" + + def execute(self, context): + import rigify + reload(rigify) + try: + rigify.validate_rig(context, context.object) + except rigify.RigifyError as rig_exception: + rigify_report_exception(self, rig_exception) + return ('FINISHED',) + + +class Sample(bpy.types.Operator): + '''Create a sample metarig to be modified before generating the final rig.''' + + bl_idname = "pose.metarig_sample_add" + bl_label = "Re-Scan Metarig Scripts" + + metarig_type = StringProperty(name="Type", description="Name of the rig type to generate a sample of, a blank string for all", maxlen=128, default="") + + def execute(self, context): + import rigify + reload(rigify) + final = (self.properties.metarig_type == "") + objects = rigify.generate_test(context, metarig_type=self.properties.metarig_type, GENERATE_FINAL=final) + + if len(objects) > 1: + for i, (obj_meta, obj_gen) in enumerate(objects): + obj_meta.location.x = i * 1.0 + if obj_gen: + obj_gen.location.x = i * 1.0 + + return ('FINISHED',) + + +class Graph(bpy.types.Operator): + '''Create a graph from the active armature through graphviz''' + + bl_idname = "pose.metarig_graph" + bl_label = "Pose Graph" + + def execute(self, context): + import os + import graphviz_export + import bpy + reload(graphviz_export) + obj = bpy.context.object + path = os.path.splitext(bpy.data.filename)[0] + "-" + bpy.utils.clean_name(obj.name) + path_dot = path + ".dot" + path_png = path + ".png" + saved = graphviz_export.graph_armature(bpy.context.object, path_dot, CONSTRAINTS=False, DRIVERS=False) + + if saved: + # if we seriously want this working everywhere we'll need some new approach + os.system("dot -Tpng %s > %s; gnome-open %s &" % (path_dot, path_png, path_png)) + #os.system("python /b/xdot.py '%s' &" % path_dot) + + return ('FINISHED',) + + +class AsScript(bpy.types.Operator): + '''Write the edit armature out as a python script''' + + bl_idname = "pose.metarig_to_script" + bl_label = "Write Metarig to Script" + bl_register = True + bl_undo = True + + path = StringProperty(name="File Path", description="File path used for exporting the Armature file", maxlen=1024, default="") + + def execute(self, context): + import rigify_utils + reload(rigify_utils) + obj = context.object + code = rigify_utils.write_meta_rig(obj) + path = self.properties.path + file = open(path, "w") + file.write(code) + file.close() + + return ('FINISHED',) + + def invoke(self, context, event): + import os + obj = context.object + self.properties.path = os.path.splitext(bpy.data.filename)[0] + "-" + bpy.utils.clean_name(obj.name) + ".py" + wm = context.manager + wm.add_fileselect(self) + return ('RUNNING_MODAL',) + + +# operators that use the GUI +class ActiveAssign(bpy.types.Operator): + '''Assign to the active posebone''' + + bl_idname = "pose.metarig_assign" + bl_label = "Assign to the active posebone" + + def poll(self, context): + bone = context.active_pose_bone + return bool(bone and bone.id_data.mode == 'POSE') + + def execute(self, context): + scene = context.scene + pose_templates = scene.pose_templates + template_name = DATA_PT_template.templates[pose_templates.active_template_index] + context.active_pose_bone["type"] = template_name + return ('FINISHED',) + + +class ActiveClear(bpy.types.Operator): + '''Clear type from the active posebone''' + + bl_idname = "pose.metarig_clear" + bl_label = "Metarig Clear Type" + + def poll(self, context): + bone = context.active_pose_bone + return bool(bone and bone.id_data.mode == 'POSE') + + def execute(self, context): + scene = context.scene + del context.active_pose_bone["type"] + return ('FINISHED',) + + +import space_info +import dynamic_menu + + +class INFO_MT_armature_metarig_add(dynamic_menu.DynMenu): + bl_idname = "INFO_MT_armature_metarig_add" + bl_label = "Meta-Rig" + + def draw(self, context): + import rigify + + layout = self.layout + layout.operator_context = 'INVOKE_REGION_WIN' + + for submodule_type in rigify.get_submodule_types(): + text = bpy.utils.display_name(submodule_type) + layout.operator("pose.metarig_sample_add", text=text, icon='OUTLINER_OB_ARMATURE').metarig_type = submodule_type + +bpy.types.register(DATA_PT_template) + +bpy.types.register(PoseTemplateSettings) +bpy.types.register(PoseTemplate) + +bpy.ops.add(Reload) +bpy.ops.add(Generate) +bpy.ops.add(Validate) +bpy.ops.add(Sample) +bpy.ops.add(Graph) +bpy.ops.add(AsScript) + +bpy.ops.add(ActiveAssign) +bpy.ops.add(ActiveClear) + + +bpy.types.register(INFO_MT_armature_metarig_add) + +menu_func = (lambda self, context: self.layout.menu("INFO_MT_armature_metarig_add", icon='OUTLINER_OB_ARMATURE')) +menu_item = dynamic_menu.add(bpy.types.INFO_MT_armature_add, menu_func) diff --git a/release/scripts/ui/properties_data_bone.py b/release/scripts/ui/properties_data_bone.py index 4a10ff80a32..3369adab5a8 100644 --- a/release/scripts/ui/properties_data_bone.py +++ b/release/scripts/ui/properties_data_bone.py @@ -43,7 +43,7 @@ class BONE_PT_context_bone(BoneButtonsPanel): bone = context.edit_bone row = layout.row() - row.label(text="", icon='ICON_BONE_DATA') + row.label(text="", icon='BONE_DATA') row.prop(bone, "name", text="") @@ -227,6 +227,101 @@ class BONE_PT_display(BoneButtonsPanel): col.prop(pchan, "custom_shape", text="") +class BONE_PT_inverse_kinematics(BoneButtonsPanel): + bl_label = "Inverse Kinematics" + bl_default_closed = True + + def poll(self, context): + return context.active_pose_bone + + def draw(self, context): + layout = self.layout + + ob = context.object + bone = context.bone + pchan = ob.pose.bones[bone.name] + wide_ui = context.region.width > narrowui + + split = layout.split(percentage=0.25) + split.prop(pchan, "ik_dof_x", text="X") + split.active = pchan.has_ik + row = split.row() + row.prop(pchan, "ik_stiffness_x", text="Stiffness", slider=True) + row.active = pchan.ik_dof_x and pchan.has_ik + + if wide_ui: + split = layout.split(percentage=0.25) + sub = split.row() + else: + sub = layout.column(align=True) + sub.prop(pchan, "ik_limit_x", text="Limit") + sub.active = pchan.ik_dof_x and pchan.has_ik + if wide_ui: + sub = split.row(align=True) + sub.prop(pchan, "ik_min_x", text="") + sub.prop(pchan, "ik_max_x", text="") + sub.active = pchan.ik_dof_x and pchan.ik_limit_x and pchan.has_ik + + split = layout.split(percentage=0.25) + split.prop(pchan, "ik_dof_y", text="Y") + split.active = pchan.has_ik and pchan.has_ik + row = split.row() + row.prop(pchan, "ik_stiffness_y", text="Stiffness", slider=True) + row.active = pchan.ik_dof_y and pchan.has_ik + + if wide_ui: + split = layout.split(percentage=0.25) + sub = split.row() + else: + sub = layout.column(align=True) + sub.prop(pchan, "ik_limit_y", text="Limit") + sub.active = pchan.ik_dof_y and pchan.has_ik + if wide_ui: + sub = split.row(align=True) + sub.prop(pchan, "ik_min_y", text="") + sub.prop(pchan, "ik_max_y", text="") + sub.active = pchan.ik_dof_y and pchan.ik_limit_y and pchan.has_ik + + split = layout.split(percentage=0.25) + split.prop(pchan, "ik_dof_z", text="Z") + split.active = pchan.has_ik and pchan.has_ik + sub = split.row() + sub.prop(pchan, "ik_stiffness_z", text="Stiffness", slider=True) + sub.active = pchan.ik_dof_z and pchan.has_ik + + if wide_ui: + split = layout.split(percentage=0.25) + sub = split.row() + else: + sub = layout.column(align=True) + sub.prop(pchan, "ik_limit_z", text="Limit") + sub.active = pchan.ik_dof_z and pchan.has_ik + if wide_ui: + sub = split.row(align=True) + sub.prop(pchan, "ik_min_z", text="") + sub.prop(pchan, "ik_max_z", text="") + sub.active = pchan.ik_dof_z and pchan.ik_limit_z and pchan.has_ik + split = layout.split() + split.prop(pchan, "ik_stretch", text="Stretch", slider=True) + if wide_ui: + split.label() + split.active = pchan.has_ik + + if ob.pose.ik_solver == 'ITASC': + split = layout.split() + col = split.column() + col.prop(pchan, "ik_rot_control", text="Control Rotation") + col.active = pchan.has_ik + if wide_ui: + col = split.column() + col.prop(pchan, "ik_rot_weight", text="Weight", slider=True) + col.active = pchan.has_ik + # not supported yet + #row = layout.row() + #row.prop(pchan, "ik_lin_control", text="Joint Size") + #row.prop(pchan, "ik_lin_weight", text="Weight", slider=True) + + class BONE_PT_deform(BoneButtonsPanel): bl_label = "Deform" bl_default_closed = True @@ -298,5 +393,6 @@ bpy.types.register(BONE_PT_transform) bpy.types.register(BONE_PT_transform_locks) bpy.types.register(BONE_PT_relations) bpy.types.register(BONE_PT_display) +bpy.types.register(BONE_PT_inverse_kinematics) bpy.types.register(BONE_PT_deform) bpy.types.register(BONE_PT_properties) diff --git a/release/scripts/ui/properties_data_mesh.py b/release/scripts/ui/properties_data_mesh.py index 46866a89671..d6cdcfc2de9 100644 --- a/release/scripts/ui/properties_data_mesh.py +++ b/release/scripts/ui/properties_data_mesh.py @@ -114,12 +114,12 @@ class DATA_PT_vertex_groups(DataButtonsPanel): row.template_list(ob, "vertex_groups", ob, "active_vertex_group_index", rows=rows) col = row.column(align=True) - col.operator("object.vertex_group_add", icon='ICON_ZOOMIN', text="") - col.operator("object.vertex_group_remove", icon='ICON_ZOOMOUT', text="") + col.operator("object.vertex_group_add", icon='ZOOMIN', text="") + col.operator("object.vertex_group_remove", icon='ZOOMOUT', text="") - col.operator("object.vertex_group_copy", icon='ICON_COPY_ID', text="") + col.operator("object.vertex_group_copy", icon='COPY_ID', text="") if ob.data.users > 1: - col.operator("object.vertex_group_copy_to_linked", icon='ICON_LINK_AREA', text="") + col.operator("object.vertex_group_copy_to_linked", icon='LINK_AREA', text="") if group: row = layout.row() @@ -170,15 +170,15 @@ class DATA_PT_shape_keys(DataButtonsPanel): col = row.column() sub = col.column(align=True) - sub.operator("object.shape_key_add", icon='ICON_ZOOMIN', text="") - sub.operator("object.shape_key_remove", icon='ICON_ZOOMOUT', text="") + sub.operator("object.shape_key_add", icon='ZOOMIN', text="") + sub.operator("object.shape_key_remove", icon='ZOOMOUT', text="") if kb: col.separator() sub = col.column(align=True) - sub.operator("object.shape_key_move", icon='ICON_TRIA_UP', text="").type = 'UP' - sub.operator("object.shape_key_move", icon='ICON_TRIA_DOWN', text="").type = 'DOWN' + sub.operator("object.shape_key_move", icon='TRIA_UP', text="").type = 'UP' + sub.operator("object.shape_key_move", icon='TRIA_DOWN', text="").type = 'DOWN' split = layout.split(percentage=0.4) row = split.row() @@ -198,18 +198,18 @@ class DATA_PT_shape_keys(DataButtonsPanel): subsub = sub.row(align=True) subsub.active = enable_edit_value if ob.shape_key_lock: - subsub.prop(ob, "shape_key_lock", icon='ICON_PINNED', text="") + subsub.prop(ob, "shape_key_lock", icon='PINNED', text="") else: - subsub.prop(ob, "shape_key_lock", icon='ICON_UNPINNED', text="") + subsub.prop(ob, "shape_key_lock", icon='UNPINNED', text="") if kb.mute: - subsub.prop(kb, "mute", icon='ICON_MUTE_IPO_ON', text="") + subsub.prop(kb, "mute", icon='MUTE_IPO_ON', text="") else: - subsub.prop(kb, "mute", icon='ICON_MUTE_IPO_OFF', text="") + subsub.prop(kb, "mute", icon='MUTE_IPO_OFF', text="") sub.prop(ob, "shape_key_edit_mode", text="") sub = row.row(align=True) - sub.operator("object.shape_key_mirror", icon='ICON_ARROW_LEFTRIGHT', text="") - sub.operator("object.shape_key_clear", icon='ICON_X', text="") + sub.operator("object.shape_key_mirror", icon='ARROW_LEFTRIGHT', text="") + sub.operator("object.shape_key_clear", icon='X', text="") row = layout.row() @@ -256,8 +256,8 @@ class DATA_PT_uv_texture(DataButtonsPanel): col.template_list(me, "uv_textures", me, "active_uv_texture_index", rows=2) col = row.column(align=True) - col.operator("mesh.uv_texture_add", icon='ICON_ZOOMIN', text="") - col.operator("mesh.uv_texture_remove", icon='ICON_ZOOMOUT', text="") + col.operator("mesh.uv_texture_add", icon='ZOOMIN', text="") + col.operator("mesh.uv_texture_remove", icon='ZOOMOUT', text="") lay = me.active_uv_texture if lay: @@ -278,8 +278,8 @@ class DATA_PT_vertex_colors(DataButtonsPanel): col.template_list(me, "vertex_colors", me, "active_vertex_color_index", rows=2) col = row.column(align=True) - col.operator("mesh.vertex_color_add", icon='ICON_ZOOMIN', text="") - col.operator("mesh.vertex_color_remove", icon='ICON_ZOOMOUT', text="") + col.operator("mesh.vertex_color_add", icon='ZOOMIN', text="") + col.operator("mesh.vertex_color_remove", icon='ZOOMOUT', text="") lay = me.active_vertex_color if lay: diff --git a/release/scripts/ui/properties_data_modifier.py b/release/scripts/ui/properties_data_modifier.py index c43dbd9c90a..0de819b0537 100644 --- a/release/scripts/ui/properties_data_modifier.py +++ b/release/scripts/ui/properties_data_modifier.py @@ -432,16 +432,34 @@ class DATA_PT_modifiers(DataButtonsPanel): layout.row().prop(md, "subdivision_type", expand=True) else: layout.row().prop(md, "subdivision_type", text="") - layout.prop(md, "level") split = layout.split() - col = split.column() - col.operator("object.multires_subdivide", text="Subdivide") + col.prop(md, "levels", text="Preview") + col.prop(md, "sculpt_levels", text="Sculpt") + col.prop(md, "render_levels", text="Render") if wide_ui: col = split.column() + + col.enabled = ob.mode != 'EDIT' + col.operator("object.multires_subdivide", text="Subdivide") col.operator("object.multires_higher_levels_delete", text="Delete Higher") + col.operator("object.multires_reshape", text="Reshape") + col.prop(md, "optimal_display") + + layout.separator() + + col = layout.column() + row = col.row() + if md.external: + row.operator("object.multires_pack_external", text="Pack External") + row.label() + row = col.row() + row.prop(md, "filename", text="") + else: + row.operator("object.multires_save_external", text="Save External...") + row.label() def PARTICLE_INSTANCE(self, layout, ob, md, wide_ui): layout.prop(md, "object") @@ -583,6 +601,20 @@ class DATA_PT_modifiers(DataButtonsPanel): def SOFT_BODY(self, layout, ob, md, wide_ui): layout.label(text="See Soft Body panel.") + def SOLIDIFY(self, layout, ob, md, wide_ui): + split = layout.split() + + col = split.column() + col.prop(md, "offset") + col.prop(md, "use_rim") + col.prop(md, "use_even_offset") + col.prop(md, "use_quality_normals") + col.prop(md, "edge_crease_inner") + col.prop(md, "edge_crease_outer") + col.prop(md, "edge_crease_rim") + # col.label(text="Vertex Group:") + # col.prop_object(md, "vertex_group", ob, "vertex_groups", text="") + def SUBSURF(self, layout, ob, md, wide_ui): if wide_ui: layout.row().prop(md, "subdivision_type", expand=True) @@ -598,8 +630,7 @@ class DATA_PT_modifiers(DataButtonsPanel): if wide_ui: col = split.column() col.label(text="Options:") - col.prop(md, "optimal_draw", text="Optimal Display") - col.prop(md, "subsurf_uv") + col.prop(md, "optimal_display") def SURFACE(self, layout, ob, md, wide_ui): layout.label(text="See Fields panel.") diff --git a/release/scripts/ui/properties_material.py b/release/scripts/ui/properties_material.py index 50fc0a7ded9..a48b3b1a30a 100644 --- a/release/scripts/ui/properties_material.py +++ b/release/scripts/ui/properties_material.py @@ -56,7 +56,7 @@ class MaterialButtonsPanel(bpy.types.Panel): class MATERIAL_PT_preview(MaterialButtonsPanel): bl_label = "Preview" - COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME']) + COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'} def draw(self, context): self.layout.template_preview(context.material) @@ -65,7 +65,7 @@ class MATERIAL_PT_preview(MaterialButtonsPanel): class MATERIAL_PT_context_material(MaterialButtonsPanel): bl_label = "" bl_show_header = False - COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME']) + COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'} def poll(self, context): # An exception, dont call the parent poll func because @@ -89,9 +89,9 @@ class MATERIAL_PT_context_material(MaterialButtonsPanel): row.template_list(ob, "materials", ob, "active_material_index", rows=2) col = row.column(align=True) - col.operator("object.material_slot_add", icon='ICON_ZOOMIN', text="") - col.operator("object.material_slot_remove", icon='ICON_ZOOMOUT', text="") - col.operator("object.material_slot_copy", icon='ICON_COPY_ID', text="") + col.operator("object.material_slot_add", icon='ZOOMIN', text="") + col.operator("object.material_slot_remove", icon='ZOOMOUT', text="") + col.operator("object.material_slot_copy", icon='COPY_ID', text="") if ob.mode == 'EDIT': row = layout.row(align=True) @@ -127,7 +127,7 @@ class MATERIAL_PT_context_material(MaterialButtonsPanel): class MATERIAL_PT_shading(MaterialButtonsPanel): bl_label = "Shading" - COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME']) + COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'} def poll(self, context): mat = active_node_mat(context.material) @@ -166,7 +166,7 @@ class MATERIAL_PT_shading(MaterialButtonsPanel): class MATERIAL_PT_strand(MaterialButtonsPanel): bl_label = "Strand" bl_default_closed = True - COMPAT_ENGINES = set(['BLENDER_RENDER']) + COMPAT_ENGINES = {'BLENDER_RENDER'} def poll(self, context): mat = context.material @@ -214,7 +214,7 @@ class MATERIAL_PT_strand(MaterialButtonsPanel): class MATERIAL_PT_physics(MaterialButtonsPanel): bl_label = "Physics" - COMPAT_ENGINES = set(['BLENDER_GAME']) + COMPAT_ENGINES = {'BLENDER_GAME'} def draw(self, context): layout = self.layout @@ -238,7 +238,7 @@ class MATERIAL_PT_physics(MaterialButtonsPanel): class MATERIAL_PT_options(MaterialButtonsPanel): bl_label = "Options" - COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME']) + COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'} def poll(self, context): mat = active_node_mat(context.material) @@ -284,7 +284,7 @@ class MATERIAL_PT_options(MaterialButtonsPanel): class MATERIAL_PT_shadow(MaterialButtonsPanel): bl_label = "Shadow" bl_default_closed = True - COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME']) + COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'} def poll(self, context): mat = active_node_mat(context.material) @@ -320,7 +320,7 @@ class MATERIAL_PT_shadow(MaterialButtonsPanel): class MATERIAL_PT_diffuse(MaterialButtonsPanel): bl_label = "Diffuse" - COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME']) + COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'} def poll(self, context): mat = active_node_mat(context.material) @@ -391,7 +391,7 @@ class MATERIAL_PT_diffuse(MaterialButtonsPanel): class MATERIAL_PT_specular(MaterialButtonsPanel): bl_label = "Specular" - COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME']) + COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'} def poll(self, context): mat = active_node_mat(context.material) @@ -461,7 +461,7 @@ class MATERIAL_PT_specular(MaterialButtonsPanel): class MATERIAL_PT_sss(MaterialButtonsPanel): bl_label = "Subsurface Scattering" bl_default_closed = True - COMPAT_ENGINES = set(['BLENDER_RENDER']) + COMPAT_ENGINES = {'BLENDER_RENDER'} def poll(self, context): mat = active_node_mat(context.material) @@ -513,7 +513,7 @@ class MATERIAL_PT_sss(MaterialButtonsPanel): class MATERIAL_PT_mirror(MaterialButtonsPanel): bl_label = "Mirror" bl_default_closed = True - COMPAT_ENGINES = set(['BLENDER_RENDER']) + COMPAT_ENGINES = {'BLENDER_RENDER'} def poll(self, context): mat = active_node_mat(context.material) @@ -572,7 +572,7 @@ class MATERIAL_PT_mirror(MaterialButtonsPanel): class MATERIAL_PT_transp(MaterialButtonsPanel): bl_label = "Transparency" bl_default_closed = True - COMPAT_ENGINES = set(['BLENDER_RENDER']) + COMPAT_ENGINES = {'BLENDER_RENDER'} def poll(self, context): mat = active_node_mat(context.material) @@ -638,7 +638,7 @@ class MATERIAL_PT_transp(MaterialButtonsPanel): class MATERIAL_PT_halo(MaterialButtonsPanel): bl_label = "Halo" - COMPAT_ENGINES = set(['BLENDER_RENDER']) + COMPAT_ENGINES = {'BLENDER_RENDER'} def poll(self, context): mat = context.material @@ -688,7 +688,7 @@ class MATERIAL_PT_halo(MaterialButtonsPanel): class MATERIAL_PT_flare(MaterialButtonsPanel): bl_label = "Flare" - COMPAT_ENGINES = set(['BLENDER_RENDER']) + COMPAT_ENGINES = {'BLENDER_RENDER'} def poll(self, context): mat = context.material @@ -750,7 +750,7 @@ class VolumeButtonsPanel(bpy.types.Panel): class MATERIAL_PT_volume_density(VolumeButtonsPanel): bl_label = "Density" bl_default_closed = False - COMPAT_ENGINES = set(['BLENDER_RENDER']) + COMPAT_ENGINES = {'BLENDER_RENDER'} def draw(self, context): layout = self.layout @@ -770,7 +770,7 @@ class MATERIAL_PT_volume_density(VolumeButtonsPanel): class MATERIAL_PT_volume_shading(VolumeButtonsPanel): bl_label = "Shading" bl_default_closed = False - COMPAT_ENGINES = set(['BLENDER_RENDER']) + COMPAT_ENGINES = {'BLENDER_RENDER'} def draw(self, context): layout = self.layout @@ -798,7 +798,7 @@ class MATERIAL_PT_volume_shading(VolumeButtonsPanel): class MATERIAL_PT_volume_lighting(VolumeButtonsPanel): bl_label = "Lighting" bl_default_closed = False - COMPAT_ENGINES = set(['BLENDER_RENDER']) + COMPAT_ENGINES = {'BLENDER_RENDER'} def draw(self, context): layout = self.layout @@ -835,7 +835,7 @@ class MATERIAL_PT_volume_lighting(VolumeButtonsPanel): class MATERIAL_PT_volume_transp(VolumeButtonsPanel): bl_label = "Transparency" - COMPAT_ENGINES = set(['BLENDER_RENDER']) + COMPAT_ENGINES = {'BLENDER_RENDER'} def draw(self, context): layout = self.layout @@ -852,7 +852,7 @@ class MATERIAL_PT_volume_transp(VolumeButtonsPanel): class MATERIAL_PT_volume_integration(VolumeButtonsPanel): bl_label = "Integration" bl_default_closed = False - COMPAT_ENGINES = set(['BLENDER_RENDER']) + COMPAT_ENGINES = {'BLENDER_RENDER'} def draw(self, context): layout = self.layout diff --git a/release/scripts/ui/properties_object.py b/release/scripts/ui/properties_object.py index c7c1ce24d59..ff7e15cde58 100644 --- a/release/scripts/ui/properties_object.py +++ b/release/scripts/ui/properties_object.py @@ -38,7 +38,7 @@ class OBJECT_PT_context_object(ObjectButtonsPanel): ob = context.object row = layout.row() - row.label(text="", icon='ICON_OBJECT_DATA') + row.label(text="", icon='OBJECT_DATA') row.prop(ob, "name", text="") @@ -162,7 +162,7 @@ class OBJECT_PT_groups(ObjectButtonsPanel): row = col.box().row() row.prop(group, "name", text="") - row.operator("object.group_remove", text="", icon='ICON_X') + row.operator("object.group_remove", text="", icon='X') split = col.box().split() diff --git a/release/scripts/ui/properties_object_constraint.py b/release/scripts/ui/properties_object_constraint.py index d6552585191..12a12ff40dc 100644 --- a/release/scripts/ui/properties_object_constraint.py +++ b/release/scripts/ui/properties_object_constraint.py @@ -59,7 +59,7 @@ class ConstraintButtonsPanel(bpy.types.Panel): if wide_ui: if target and owner: - row.label(icon='ICON_ARROW_LEFTRIGHT') + row.label(icon='ARROW_LEFTRIGHT') else: row = layout.row() if owner: @@ -736,163 +736,6 @@ class OBJECT_PT_constraints(ConstraintButtonsPanel): self.draw_constraint(context, con) -class BONE_PT_inverse_kinematics(ConstraintButtonsPanel): - bl_label = "Inverse Kinematics" - bl_default_closed = True - bl_context = "bone_constraint" - - def poll(self, context): - ob = context.object - bone = context.bone - - if ob and bone: - pchan = ob.pose.bones[bone.name] - return pchan.has_ik - - return False - - def draw(self, context): - layout = self.layout - - ob = context.object - bone = context.bone - pchan = ob.pose.bones[bone.name] - wide_ui = context.region.width > narrowui - - row = layout.row() - row.prop(ob.pose, "ik_solver") - - split = layout.split(percentage=0.25) - split.prop(pchan, "ik_dof_x", text="X") - row = split.row() - row.prop(pchan, "ik_stiffness_x", text="Stiffness", slider=True) - row.active = pchan.ik_dof_x - - if wide_ui: - split = layout.split(percentage=0.25) - sub = split.row() - else: - sub = layout.column(align=True) - sub.prop(pchan, "ik_limit_x", text="Limit") - sub.active = pchan.ik_dof_x - if wide_ui: - sub = split.row(align=True) - sub.prop(pchan, "ik_min_x", text="") - sub.prop(pchan, "ik_max_x", text="") - sub.active = pchan.ik_dof_x and pchan.ik_limit_x - - split = layout.split(percentage=0.25) - split.prop(pchan, "ik_dof_y", text="Y") - row = split.row() - row.prop(pchan, "ik_stiffness_y", text="Stiffness", slider=True) - row.active = pchan.ik_dof_y - - if wide_ui: - split = layout.split(percentage=0.25) - sub = split.row() - else: - sub = layout.column(align=True) - sub.prop(pchan, "ik_limit_y", text="Limit") - sub.active = pchan.ik_dof_y - if wide_ui: - sub = split.row(align=True) - sub.prop(pchan, "ik_min_y", text="") - sub.prop(pchan, "ik_max_y", text="") - sub.active = pchan.ik_dof_y and pchan.ik_limit_y - - split = layout.split(percentage=0.25) - split.prop(pchan, "ik_dof_z", text="Z") - sub = split.row() - sub.prop(pchan, "ik_stiffness_z", text="Stiffness", slider=True) - sub.active = pchan.ik_dof_z - - if wide_ui: - split = layout.split(percentage=0.25) - sub = split.row() - else: - sub = layout.column(align=True) - sub.prop(pchan, "ik_limit_z", text="Limit") - sub.active = pchan.ik_dof_z - if wide_ui: - sub = split.row(align=True) - sub.prop(pchan, "ik_min_z", text="") - sub.prop(pchan, "ik_max_z", text="") - sub.active = pchan.ik_dof_z and pchan.ik_limit_z - split = layout.split() - split.prop(pchan, "ik_stretch", text="Stretch", slider=True) - if wide_ui: - split.label() - - if ob.pose.ik_solver == 'ITASC': - split = layout.split() - col = split.column() - col.prop(pchan, "ik_rot_control", text="Control Rotation") - if wide_ui: - col = split.column() - col.prop(pchan, "ik_rot_weight", text="Weight", slider=True) - # not supported yet - #row = layout.row() - #row.prop(pchan, "ik_lin_control", text="Joint Size") - #row.prop(pchan, "ik_lin_weight", text="Weight", slider=True) - - -class BONE_PT_iksolver_itasc(ConstraintButtonsPanel): - bl_label = "iTaSC parameters" - bl_default_closed = True - bl_context = "bone_constraint" - - def poll(self, context): - ob = context.object - bone = context.bone - - if ob and bone: - pchan = ob.pose.bones[bone.name] - return pchan.has_ik and ob.pose.ik_solver == 'ITASC' and ob.pose.ik_param - - return False - - def draw(self, context): - layout = self.layout - - ob = context.object - itasc = ob.pose.ik_param - wide_ui = context.region.width > narrowui - - layout.prop(itasc, "mode", expand=True) - simulation = itasc.mode == 'SIMULATION' - if simulation: - layout.label(text="Reiteration:") - layout.prop(itasc, "reiteration", expand=True) - - split = layout.split() - split.active = not simulation or itasc.reiteration != 'NEVER' - col = split.column() - col.prop(itasc, "precision") - - if wide_ui: - col = split.column() - col.prop(itasc, "num_iter") - - - if simulation: - layout.prop(itasc, "auto_step") - row = layout.row() - if itasc.auto_step: - row.prop(itasc, "min_step", text="Min") - row.prop(itasc, "max_step", text="Max") - else: - row.prop(itasc, "num_step") - - layout.prop(itasc, "solver") - if simulation: - layout.prop(itasc, "feedback") - layout.prop(itasc, "max_velocity") - if itasc.solver == 'DLS': - row = layout.row() - row.prop(itasc, "dampmax", text="Damp", slider=True) - row.prop(itasc, "dampeps", text="Eps", slider=True) - - class BONE_PT_constraints(ConstraintButtonsPanel): bl_label = "Bone Constraints" bl_context = "bone_constraint" @@ -917,6 +760,4 @@ class BONE_PT_constraints(ConstraintButtonsPanel): self.draw_constraint(context, con) bpy.types.register(OBJECT_PT_constraints) -bpy.types.register(BONE_PT_iksolver_itasc) -bpy.types.register(BONE_PT_inverse_kinematics) bpy.types.register(BONE_PT_constraints) diff --git a/release/scripts/ui/properties_particle.py b/release/scripts/ui/properties_particle.py index d95455f7c10..a33a1a12f1b 100644 --- a/release/scripts/ui/properties_particle.py +++ b/release/scripts/ui/properties_particle.py @@ -66,8 +66,8 @@ class PARTICLE_PT_particles(ParticleButtonsPanel): row.template_list(ob, "particle_systems", ob, "active_particle_system_index", rows=2) col = row.column(align=True) - col.operator("object.particle_system_add", icon='ICON_ZOOMIN', text="") - col.operator("object.particle_system_remove", icon='ICON_ZOOMOUT', text="") + col.operator("object.particle_system_add", icon='ZOOMIN', text="") + col.operator("object.particle_system_remove", icon='ZOOMOUT', text="") if psys and not psys.settings: split = layout.split(percentage=0.32) @@ -208,6 +208,10 @@ class PARTICLE_PT_hair_dynamics(ParticleButtonsPanel): layout = self.layout psys = context.particle_system + + if not psys.cloth: + return + #part = psys.settings cloth = psys.cloth.settings @@ -298,8 +302,8 @@ class PARTICLE_PT_velocity(ParticleButtonsPanel): sub.prop(part, "random_factor") #if part.type=='REACTOR': - # sub.prop(part, "reactor_factor") - # sub.prop(part, "reaction_shape", slider=True) + # sub.prop(part, "reactor_factor") + # sub.prop(part, "reaction_shape", slider=True) class PARTICLE_PT_rotation(ParticleButtonsPanel): @@ -453,12 +457,12 @@ class PARTICLE_PT_physics(ParticleButtonsPanel): col = row.column() sub = col.row() subsub = sub.column(align=True) - subsub.operator("particle.new_target", icon='ICON_ZOOMIN', text="") - subsub.operator("particle.target_remove", icon='ICON_ZOOMOUT', text="") + subsub.operator("particle.new_target", icon='ZOOMIN', text="") + subsub.operator("particle.target_remove", icon='ZOOMOUT', text="") sub = col.row() subsub = sub.column(align=True) - subsub.operator("particle.target_move_up", icon='VICON_MOVE_UP', text="") - subsub.operator("particle.target_move_down", icon='VICON_MOVE_DOWN', text="") + subsub.operator("particle.target_move_up", icon='MOVE_UP_VEC', text="") + subsub.operator("particle.target_move_down", icon='MOVE_DOWN_VEC', text="") key = psys.active_particle_target if key: @@ -508,11 +512,11 @@ class PARTICLE_PT_boidbrain(ParticleButtonsPanel): #row.template_list(boids, "states", boids, "active_boid_state_index", compact="True") #col = row.row() #sub = col.row(align=True) - #sub.operator("boid.state_add", icon='ICON_ZOOMIN', text="") - #sub.operator("boid.state_del", icon='ICON_ZOOMOUT', text="") + #sub.operator("boid.state_add", icon='ZOOMIN', text="") + #sub.operator("boid.state_del", icon='ZOOMOUT', text="") #sub = row.row(align=True) - #sub.operator("boid.state_move_up", icon='VICON_MOVE_UP', text="") - #sub.operator("boid.state_move_down", icon='VICON_MOVE_DOWN', text="") + #sub.operator("boid.state_move_up", icon='MOVE_UP_VEC', text="") + #sub.operator("boid.state_move_down", icon='MOVE_DOWN_VEC', text="") state = boids.active_boid_state @@ -531,12 +535,12 @@ class PARTICLE_PT_boidbrain(ParticleButtonsPanel): col = row.column() sub = col.row() subsub = sub.column(align=True) - subsub.operator_menu_enum("boid.rule_add", "type", icon='ICON_ZOOMIN', text="") - subsub.operator("boid.rule_del", icon='ICON_ZOOMOUT', text="") + subsub.operator_menu_enum("boid.rule_add", "type", icon='ZOOMIN', text="") + subsub.operator("boid.rule_del", icon='ZOOMOUT', text="") sub = col.row() subsub = sub.column(align=True) - subsub.operator("boid.rule_move_up", icon='VICON_MOVE_UP', text="") - subsub.operator("boid.rule_move_down", icon='VICON_MOVE_DOWN', text="") + subsub.operator("boid.rule_move_up", icon='MOVE_UP_VEC', text="") + subsub.operator("boid.rule_move_down", icon='MOVE_DOWN_VEC', text="") rule = state.active_boid_rule @@ -544,8 +548,8 @@ class PARTICLE_PT_boidbrain(ParticleButtonsPanel): row = layout.row() row.prop(rule, "name", text="") #somebody make nice icons for boids here please! -jahka - row.prop(rule, "in_air", icon='VICON_MOVE_UP', text="") - row.prop(rule, "on_land", icon='VICON_MOVE_DOWN', text="") + row.prop(rule, "in_air", icon='MOVE_UP_VEC', text="") + row.prop(rule, "on_land", icon='MOVE_DOWN_VEC', text="") row = layout.row() @@ -691,10 +695,10 @@ class PARTICLE_PT_render(ParticleButtonsPanel): col = row.column() sub = col.row() subsub = sub.column(align=True) - subsub.operator("particle.dupliob_copy", icon='ICON_ZOOMIN', text="") - subsub.operator("particle.dupliob_remove", icon='ICON_ZOOMOUT', text="") - subsub.operator("particle.dupliob_move_up", icon='VICON_MOVE_UP', text="") - subsub.operator("particle.dupliob_move_down", icon='VICON_MOVE_DOWN', text="") + subsub.operator("particle.dupliob_copy", icon='ZOOMIN', text="") + subsub.operator("particle.dupliob_remove", icon='ZOOMOUT', text="") + subsub.operator("particle.dupliob_move_up", icon='MOVE_UP_VEC', text="") + subsub.operator("particle.dupliob_move_down", icon='MOVE_DOWN_VEC', text="") weight = part.active_dupliweight if weight: diff --git a/release/scripts/ui/properties_physics_common.py b/release/scripts/ui/properties_physics_common.py index 7c1d71302ec..24c822f9ca9 100644 --- a/release/scripts/ui/properties_physics_common.py +++ b/release/scripts/ui/properties_physics_common.py @@ -30,8 +30,8 @@ def point_cache_ui(self, context, cache, enabled, particles, smoke): row = layout.row() row.template_list(cache, "point_cache_list", cache, "active_point_cache_index", rows=2) col = row.column(align=True) - col.operator("ptcache.add", icon='ICON_ZOOMIN', text="") - col.operator("ptcache.remove", icon='ICON_ZOOMOUT', text="") + col.operator("ptcache.add", icon='ZOOMIN', text="") + col.operator("ptcache.remove", icon='ZOOMOUT', text="") row = layout.row() row.label(text="File Name:") @@ -150,6 +150,7 @@ def basic_force_field_settings_ui(self, context, field): col.prop(field, "flow") elif field.type == 'HARMONIC': col.prop(field, "harmonic_damping", text="Damping") + col.prop(field, "rest_length") elif field.type == 'VORTEX' and field.shape != 'POINT': col.prop(field, "inflow") elif field.type == 'DRAG': @@ -163,6 +164,8 @@ def basic_force_field_settings_ui(self, context, field): col.prop(field, "seed") if field.type == 'TURBULENCE': col.prop(field, "global_coordinates", text="Global") + elif field.type == 'HARMONIC': + col.prop(field, "multiple_springs") split = layout.split() diff --git a/release/scripts/ui/properties_physics_fluid.py b/release/scripts/ui/properties_physics_fluid.py index a126002c211..66a2d454ca1 100644 --- a/release/scripts/ui/properties_physics_fluid.py +++ b/release/scripts/ui/properties_physics_fluid.py @@ -72,7 +72,7 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel): layout.prop(fluid, "type", text="") if fluid.type == 'DOMAIN': - layout.operator("fluid.bake", text="Bake Fluid Simulation", icon='ICON_MOD_FLUIDSIM') + layout.operator("fluid.bake", text="Bake Fluid Simulation", icon='MOD_FLUIDSIM') split = layout.split() col = split.column() diff --git a/release/scripts/ui/properties_render.py b/release/scripts/ui/properties_render.py index b3fb33534a8..e436ee8a8d4 100644 --- a/release/scripts/ui/properties_render.py +++ b/release/scripts/ui/properties_render.py @@ -42,7 +42,7 @@ class RenderButtonsPanel(bpy.types.Panel): class RENDER_PT_render(RenderButtonsPanel): bl_label = "Render" - COMPAT_ENGINES = set(['BLENDER_RENDER']) + COMPAT_ENGINES = {'BLENDER_RENDER'} def draw(self, context): layout = self.layout @@ -53,11 +53,11 @@ class RENDER_PT_render(RenderButtonsPanel): split = layout.split() col = split.column() - col.operator("screen.render", text="Image", icon='ICON_RENDER_STILL') + col.operator("screen.render", text="Image", icon='RENDER_STILL') if wide_ui: col = split.column() - col.operator("screen.render", text="Animation", icon='ICON_RENDER_ANIMATION').animation = True + col.operator("screen.render", text="Animation", icon='RENDER_ANIMATION').animation = True layout.prop(rd, "display_mode", text="Display") @@ -65,7 +65,7 @@ class RENDER_PT_render(RenderButtonsPanel): class RENDER_PT_layers(RenderButtonsPanel): bl_label = "Layers" bl_default_closed = True - COMPAT_ENGINES = set(['BLENDER_RENDER']) + COMPAT_ENGINES = {'BLENDER_RENDER'} def draw(self, context): layout = self.layout @@ -78,8 +78,8 @@ class RENDER_PT_layers(RenderButtonsPanel): row.template_list(rd, "layers", rd, "active_layer_index", rows=2) col = row.column(align=True) - col.operator("scene.render_layer_add", icon='ICON_ZOOMIN', text="") - col.operator("scene.render_layer_remove", icon='ICON_ZOOMOUT', text="") + col.operator("scene.render_layer_add", icon='ZOOMIN', text="") + col.operator("scene.render_layer_remove", icon='ZOOMOUT', text="") rl = rd.layers[rd.active_layer_index] @@ -146,19 +146,19 @@ class RENDER_PT_layers(RenderButtonsPanel): col.prop(rl, "pass_diffuse") row = col.row() row.prop(rl, "pass_specular") - row.prop(rl, "pass_specular_exclude", text="", icon='ICON_X') + row.prop(rl, "pass_specular_exclude", text="", icon='X') row = col.row() row.prop(rl, "pass_shadow") - row.prop(rl, "pass_shadow_exclude", text="", icon='ICON_X') + row.prop(rl, "pass_shadow_exclude", text="", icon='X') row = col.row() row.prop(rl, "pass_ao") - row.prop(rl, "pass_ao_exclude", text="", icon='ICON_X') + row.prop(rl, "pass_ao_exclude", text="", icon='X') row = col.row() row.prop(rl, "pass_reflection") - row.prop(rl, "pass_reflection_exclude", text="", icon='ICON_X') + row.prop(rl, "pass_reflection_exclude", text="", icon='X') row = col.row() row.prop(rl, "pass_refraction") - row.prop(rl, "pass_refraction_exclude", text="", icon='ICON_X') + row.prop(rl, "pass_refraction_exclude", text="", icon='X') if rl.freestyle: layout.separator() @@ -181,16 +181,16 @@ class RENDER_PT_layers(RenderButtonsPanel): row = box.row(align=True) row.prop(module, "is_displayed", text="") row.prop(module, "module_path", text="") - row.operator("scene.freestyle_module_remove", icon='ICON_X', text="") - props = row.operator("scene.freestyle_module_move_up", icon='VICON_MOVE_UP', text="") + row.operator("scene.freestyle_module_remove", icon='X', text="") + props = row.operator("scene.freestyle_module_move_up", icon='MOVE_UP_VEC', text="") props.active = (i > 0) - props = row.operator("scene.freestyle_module_move_down", icon='VICON_MOVE_DOWN', text="") + props = row.operator("scene.freestyle_module_move_down", icon='MOVE_DOWN_VEC', text="") props.active = (i < len(freestyle.modules) - 1) class RENDER_PT_shading(RenderButtonsPanel): bl_label = "Shading" - COMPAT_ENGINES = set(['BLENDER_RENDER']) + COMPAT_ENGINES = {'BLENDER_RENDER'} def draw(self, context): layout = self.layout @@ -216,7 +216,7 @@ class RENDER_PT_shading(RenderButtonsPanel): class RENDER_PT_performance(RenderButtonsPanel): bl_label = "Performance" bl_default_closed = True - COMPAT_ENGINES = set(['BLENDER_RENDER']) + COMPAT_ENGINES = {'BLENDER_RENDER'} def draw(self, context): layout = self.layout @@ -260,7 +260,7 @@ class RENDER_PT_performance(RenderButtonsPanel): class RENDER_PT_post_processing(RenderButtonsPanel): bl_label = "Post Processing" bl_default_closed = True - COMPAT_ENGINES = set(['BLENDER_RENDER']) + COMPAT_ENGINES = {'BLENDER_RENDER'} def draw(self, context): layout = self.layout @@ -309,7 +309,7 @@ class RENDER_PT_post_processing(RenderButtonsPanel): class RENDER_PT_output(RenderButtonsPanel): bl_label = "Output" - COMPAT_ENGINES = set(['BLENDER_RENDER']) + COMPAT_ENGINES = {'BLENDER_RENDER'} def draw(self, context): layout = self.layout @@ -392,7 +392,7 @@ class RENDER_PT_output(RenderButtonsPanel): class RENDER_PT_encoding(RenderButtonsPanel): bl_label = "Encoding" bl_default_closed = True - COMPAT_ENGINES = set(['BLENDER_RENDER']) + COMPAT_ENGINES = {'BLENDER_RENDER'} def poll(self, context): rd = context.scene.render_data @@ -461,7 +461,7 @@ class RENDER_PT_encoding(RenderButtonsPanel): class RENDER_PT_antialiasing(RenderButtonsPanel): bl_label = "Anti-Aliasing" - COMPAT_ENGINES = set(['BLENDER_RENDER']) + COMPAT_ENGINES = {'BLENDER_RENDER'} def draw_header(self, context): rd = context.scene.render_data @@ -489,7 +489,7 @@ class RENDER_PT_antialiasing(RenderButtonsPanel): class RENDER_PT_dimensions(RenderButtonsPanel): bl_label = "Dimensions" - COMPAT_ENGINES = set(['BLENDER_RENDER']) + COMPAT_ENGINES = {'BLENDER_RENDER'} def draw(self, context): layout = self.layout @@ -538,7 +538,7 @@ class RENDER_PT_dimensions(RenderButtonsPanel): class RENDER_PT_stamp(RenderButtonsPanel): bl_label = "Stamp" bl_default_closed = True - COMPAT_ENGINES = set(['BLENDER_RENDER']) + COMPAT_ENGINES = {'BLENDER_RENDER'} def draw_header(self, context): rd = context.scene.render_data @@ -564,7 +564,7 @@ class RENDER_PT_stamp(RenderButtonsPanel): col.prop(rd, "stamp_camera", text="Camera") col.prop(rd, "stamp_filename", text="Filename") col.prop(rd, "stamp_marker", text="Marker") - col.prop(rd, "stamp_sequence_strip", text="Seq. Strip") + col.prop(rd, "stamp_sequencer_strip", text="Seq. Strip") if wide_ui: col = split.column() diff --git a/release/scripts/ui/properties_scene.py b/release/scripts/ui/properties_scene.py index 8325889e644..c059339c14e 100644 --- a/release/scripts/ui/properties_scene.py +++ b/release/scripts/ui/properties_scene.py @@ -33,7 +33,7 @@ class SceneButtonsPanel(bpy.types.Panel): class SCENE_PT_scene(SceneButtonsPanel): bl_label = "Scene" - COMPAT_ENGINES = set(['BLENDER_RENDER']) + COMPAT_ENGINES = {'BLENDER_RENDER'} def draw(self, context): layout = self.layout @@ -50,7 +50,7 @@ class SCENE_PT_scene(SceneButtonsPanel): class SCENE_PT_unit(SceneButtonsPanel): bl_label = "Units" - COMPAT_ENGINES = set(['BLENDER_RENDER']) + COMPAT_ENGINES = {'BLENDER_RENDER'} def draw(self, context): layout = self.layout @@ -85,8 +85,8 @@ class SCENE_PT_keying_sets(SceneButtonsPanel): col.template_list(scene, "keying_sets", scene, "active_keying_set_index", rows=2) col = row.column(align=True) - col.operator("anim.keying_set_add", icon='ICON_ZOOMIN', text="") - col.operator("anim.keying_set_remove", icon='ICON_ZOOMOUT', text="") + col.operator("anim.keying_set_add", icon='ZOOMIN', text="") + col.operator("anim.keying_set_remove", icon='ZOOMOUT', text="") ks = scene.active_keying_set if ks: @@ -101,6 +101,7 @@ class SCENE_PT_keying_sets(SceneButtonsPanel): col.label(text="Keyframing Settings:") col.prop(ks, "insertkey_needed", text="Needed") col.prop(ks, "insertkey_visual", text="Visual") + col.prop(ks, "insertkey_xyz_to_rgb", text="XYZ to RGB") class SCENE_PT_keying_set_paths(SceneButtonsPanel): @@ -125,15 +126,15 @@ class SCENE_PT_keying_set_paths(SceneButtonsPanel): col.template_list(ks, "paths", ks, "active_path_index", rows=2) col = row.column(align=True) - col.operator("anim.keying_set_path_add", icon='ICON_ZOOMIN', text="") - col.operator("anim.keying_set_path_remove", icon='ICON_ZOOMOUT', text="") + col.operator("anim.keying_set_path_add", icon='ZOOMIN', text="") + col.operator("anim.keying_set_path_remove", icon='ZOOMOUT', text="") ksp = ks.active_path if ksp: col = layout.column() col.label(text="Target:") col.template_any_ID(ksp, "id", "id_type") - col.template_path_builder(ksp, "rna_path", ksp.id) + col.template_path_builder(ksp, "data_path", ksp.id) row = layout.row() @@ -154,7 +155,7 @@ class SCENE_PT_keying_set_paths(SceneButtonsPanel): class SCENE_PT_physics(SceneButtonsPanel): bl_label = "Gravity" - COMPAT_ENGINES = set(['BLENDER_RENDER']) + COMPAT_ENGINES = {'BLENDER_RENDER'} def draw_header(self, context): self.layout.prop(context.scene, "use_gravity", text="") diff --git a/release/scripts/ui/properties_texture.py b/release/scripts/ui/properties_texture.py index 1844599e957..4471f6f9644 100644 --- a/release/scripts/ui/properties_texture.py +++ b/release/scripts/ui/properties_texture.py @@ -99,8 +99,8 @@ class TEXTURE_PT_context_texture(TextureButtonsPanel): row.template_list(idblock, "textures", idblock, "active_texture_index", rows=2) col = row.column(align=True) - col.operator("texture.slot_move", text="", icon='ICON_TRIA_UP').type = 'UP' - col.operator("texture.slot_move", text="", icon='ICON_TRIA_DOWN').type = 'DOWN' + col.operator("texture.slot_move", text="", icon='TRIA_UP').type = 'UP' + col.operator("texture.slot_move", text="", icon='TRIA_DOWN').type = 'DOWN' if wide_ui: diff --git a/release/scripts/ui/properties_world.py b/release/scripts/ui/properties_world.py index 9adc8d0bad4..b23a0dffbad 100644 --- a/release/scripts/ui/properties_world.py +++ b/release/scripts/ui/properties_world.py @@ -35,7 +35,7 @@ class WorldButtonsPanel(bpy.types.Panel): class WORLD_PT_preview(WorldButtonsPanel): bl_label = "Preview" - COMPAT_ENGINES = set(['BLENDER_RENDER']) + COMPAT_ENGINES = {'BLENDER_RENDER'} def draw(self, context): self.layout.template_preview(context.world) @@ -44,7 +44,7 @@ class WORLD_PT_preview(WorldButtonsPanel): class WORLD_PT_context_world(WorldButtonsPanel): bl_label = "" bl_show_header = False - COMPAT_ENGINES = set(['BLENDER_RENDER']) + COMPAT_ENGINES = {'BLENDER_RENDER'} def poll(self, context): rd = context.scene.render_data @@ -71,7 +71,7 @@ class WORLD_PT_context_world(WorldButtonsPanel): class WORLD_PT_world(WorldButtonsPanel): bl_label = "World" - COMPAT_ENGINES = set(['BLENDER_RENDER']) + COMPAT_ENGINES = {'BLENDER_RENDER'} def draw(self, context): layout = self.layout @@ -99,7 +99,7 @@ class WORLD_PT_world(WorldButtonsPanel): class WORLD_PT_mist(WorldButtonsPanel): bl_label = "Mist" - COMPAT_ENGINES = set(['BLENDER_RENDER']) + COMPAT_ENGINES = {'BLENDER_RENDER'} def draw_header(self, context): world = context.world @@ -129,7 +129,7 @@ class WORLD_PT_mist(WorldButtonsPanel): class WORLD_PT_stars(WorldButtonsPanel): bl_label = "Stars" - COMPAT_ENGINES = set(['BLENDER_RENDER']) + COMPAT_ENGINES = {'BLENDER_RENDER'} def draw_header(self, context): world = context.world @@ -157,7 +157,7 @@ class WORLD_PT_stars(WorldButtonsPanel): class WORLD_PT_ambient_occlusion(WorldButtonsPanel): bl_label = "Ambient Occlusion" - COMPAT_ENGINES = set(['BLENDER_RENDER']) + COMPAT_ENGINES = {'BLENDER_RENDER'} def draw_header(self, context): world = context.world diff --git a/release/scripts/ui/space_dopesheet.py b/release/scripts/ui/space_dopesheet.py new file mode 100644 index 00000000000..4710d9de3aa --- /dev/null +++ b/release/scripts/ui/space_dopesheet.py @@ -0,0 +1,193 @@ +# ##### 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +# + +import bpy + + +class DOPESHEET_HT_header(bpy.types.Header): + bl_space_type = 'DOPESHEET_EDITOR' + + def draw(self, context): + layout = self.layout + + st = context.space_data + + row = layout.row(align=True) + row.template_header() + + if context.area.show_menus: + sub = row.row(align=True) + + sub.menu("DOPESHEET_MT_view") + sub.menu("DOPESHEET_MT_select") + + if st.mode == 'DOPESHEET' or (st.mode == 'ACTION' and st.action != None): + sub.menu("DOPESHEET_MT_channel") + elif st.mode == 'GPENCIL': + # gpencil Channel menu + pass + + if st.mode != 'GPENCIL': + sub.menu("DOPESHEET_MT_key") + + layout.prop(st, "mode", text="") + layout.prop(st.dopesheet, "display_summary", text="Summary") + + if st.mode == 'DOPESHEET': + layout.template_dopesheet_filter(st.dopesheet) + elif st.mode == 'ACTION': + layout.template_ID(st, "action", new="action.new") + + if st.mode != 'GPENCIL': + layout.prop(st, "autosnap", text="") + + row = layout.row(align=True) + row.operator("action.copy", text="", icon='COPYDOWN') + row.operator("action.paste", text="", icon='PASTEDOWN') + + +class DOPESHEET_MT_view(bpy.types.Menu): + bl_label = "View" + + def draw(self, context): + layout = self.layout + + st = context.space_data + + layout.column() + + layout.prop(st, "show_cframe_indicator") + layout.prop(st, "show_sliders") + layout.prop(st, "automerge_keyframes") + + if st.show_seconds: + layout.operator("anim.time_toggle", text="Show Frames") + else: + layout.operator("anim.time_toggle", text="Show Seconds") + + layout.separator() + layout.operator("anim.previewrange_set") + layout.operator("anim.previewrange_clear") + layout.operator("action.previewrange_set") + + layout.separator() + layout.operator("action.frame_jump") + layout.operator("action.view_all") + + layout.separator() + layout.operator("screen.area_dupli") + layout.operator("screen.screen_full_area") + + +class DOPESHEET_MT_select(bpy.types.Menu): + bl_label = "Select" + + def draw(self, context): + layout = self.layout + + layout.column() + # This is a bit misleading as the operator's default text is "Select All" while it actually *toggles* All/None + layout.operator("action.select_all_toggle") + layout.operator("action.select_all_toggle", text="Invert Selection").invert = True + + layout.separator() + layout.operator("action.select_border") + layout.operator("action.select_border", text="Border Axis Range").axis_range = True + + layout.separator() + layout.operator("action.select_column", text="Columns on Selected Keys").mode = 'KEYS' + layout.operator("action.select_column", text="Column on Current Frame").mode = 'CFRA' + + layout.operator("action.select_column", text="Columns on Selected Markers").mode = 'MARKERS_COLUMN' + layout.operator("action.select_column", text="Between Selected Markers").mode = 'MARKERS_BETWEEN' + + +class DOPESHEET_MT_channel(bpy.types.Menu): + bl_label = "Channel" + + def draw(self, context): + layout = self.layout + + layout.column() + layout.operator("anim.channels_setting_toggle") + layout.operator("anim.channels_setting_enable") + layout.operator("anim.channels_setting_disable") + + layout.separator() + layout.operator("anim.channels_editable_toggle") + + layout.separator() + layout.operator("anim.channels_expand") + layout.operator("anim.channels_collapse") + + +class DOPESHEET_MT_key(bpy.types.Menu): + bl_label = "Key" + + def draw(self, context): + layout = self.layout + + layout.column() + layout.menu("DOPESHEET_MT_key_transform", text="Transform") + + layout.operator_menu_enum("action.snap", property="type", text="Snap") + layout.operator_menu_enum("action.mirror", property="type", text="Mirror") + + layout.separator() + # Inconsistent naming? act/action + layout.operator("act.keyframe_insert") + + layout.separator() + layout.operator("action.duplicate") + layout.operator("action.delete") + + layout.separator() + layout.operator_menu_enum("action.keyframe_type", property="type", text="Keyframe Type") + layout.operator_menu_enum("action.handle_type", property="type", text="Handle Type") + layout.operator_menu_enum("action.interpolation_type", property="type", text="Interpolation Mode") + layout.operator_menu_enum("action.extrapolation_type", property="type", text="Extrapolation Mode") + + layout.separator() + layout.operator("action.clean") + layout.operator("action.sample") + + layout.separator() + layout.operator("action.copy") + layout.operator("action.paste") + + +class DOPESHEET_MT_key_transform(bpy.types.Menu): + bl_label = "Transform" + + def draw(self, context): + layout = self.layout + + layout.column() + layout.operator("transform.translate", text="Grab/Move") + layout.operator("transform.transform", text="Extend").mode = 'TIME_EXTEND' + layout.operator("transform.resize", text="Scale") + + +bpy.types.register(DOPESHEET_HT_header) # header/menu classes +bpy.types.register(DOPESHEET_MT_view) +bpy.types.register(DOPESHEET_MT_select) +bpy.types.register(DOPESHEET_MT_channel) +bpy.types.register(DOPESHEET_MT_key) +bpy.types.register(DOPESHEET_MT_key_transform) diff --git a/release/scripts/ui/space_filebrowser.py b/release/scripts/ui/space_filebrowser.py index 3b8734bdb21..47272b9aa32 100644 --- a/release/scripts/ui/space_filebrowser.py +++ b/release/scripts/ui/space_filebrowser.py @@ -35,22 +35,22 @@ class FILEBROWSER_HT_header(bpy.types.Header): row.separator() row = layout.row(align=True) - row.operator("file.previous", text="", icon='ICON_BACK') - row.operator("file.next", text="", icon='ICON_FORWARD') - row.operator("file.parent", text="", icon='ICON_FILE_PARENT') - row.operator("file.refresh", text="", icon='ICON_FILE_REFRESH') + row.operator("file.previous", text="", icon='BACK') + row.operator("file.next", text="", icon='FORWARD') + row.operator("file.parent", text="", icon='FILE_PARENT') + row.operator("file.refresh", text="", icon='FILE_REFRESH') row = layout.row() row.separator() row = layout.row(align=True) - row.operator("file.directory_new", text="", icon='ICON_NEWFOLDER') + row.operator("file.directory_new", text="", icon='NEWFOLDER') layout.prop(params, "display", expand=True, text="") layout.prop(params, "sort", expand=True, text="") layout.prop(params, "hide_dot", text="Hide Invisible") - layout.prop(params, "do_filter", text="", icon='ICON_FILTER') + layout.prop(params, "do_filter", text="", icon='FILTER') row = layout.row(align=True) row.active = params.do_filter diff --git a/release/scripts/ui/space_graph.py b/release/scripts/ui/space_graph.py new file mode 100644 index 00000000000..d97fa2bfeed --- /dev/null +++ b/release/scripts/ui/space_graph.py @@ -0,0 +1,197 @@ +# ##### 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +# + +import bpy + + +class GRAPH_HT_header(bpy.types.Header): + bl_space_type = 'GRAPH_EDITOR' + + def draw(self, context): + layout = self.layout + + st = context.space_data + + row = layout.row(align=True) + row.template_header() + + if context.area.show_menus: + sub = row.row(align=True) + + sub.menu("GRAPH_MT_view") + sub.menu("GRAPH_MT_select") + sub.menu("GRAPH_MT_channel") + sub.menu("GRAPH_MT_key") + + layout.prop(st, "mode", text="") + + layout.template_dopesheet_filter(st.dopesheet) + + layout.prop(st, "autosnap", text="") + layout.prop(st, "pivot_point", text="", icon_only=True) + + row = layout.row(align=True) + row.operator("graph.copy", text="", icon='COPYDOWN') + row.operator("graph.paste", text="", icon='PASTEDOWN') + + row = layout.row(align=True) + if st.has_ghost_curves: + row.operator("graph.ghost_curves_clear", text="", icon='GHOST_DISABLED') + else: + row.operator("graph.ghost_curves_create", text="", icon='GHOST_ENABLED') + + +class GRAPH_MT_view(bpy.types.Menu): + bl_label = "View" + + def draw(self, context): + layout = self.layout + + st = context.space_data + + layout.column() + + layout.separator() + layout.operator("graph.properties", icon='MENU_PANEL') + + layout.prop(st, "show_cframe_indicator") + layout.prop(st, "show_cursor") + layout.prop(st, "show_sliders") + layout.prop(st, "automerge_keyframes") + + layout.separator() + if st.show_handles: + layout.operator("graph.handles_view_toggle", icon='CHECKBOX_HLT', text="Show All Handles") + else: + layout.operator("graph.handles_view_toggle", icon='CHECKBOX_DEHLT', text="Show All Handles") + layout.prop(st, "only_selected_curves_handles") + layout.prop(st, "only_selected_keyframe_handles") + layout.operator("anim.time_toggle") + + layout.separator() + layout.operator("anim.previewrange_set") + layout.operator("anim.previewrange_clear") + layout.operator("graph.previewrange_set") + + layout.separator() + layout.operator("graph.frame_jump") + layout.operator("graph.view_all") + + layout.separator() + layout.operator("screen.area_dupli") + layout.operator("screen.screen_full_area") + + +class GRAPH_MT_select(bpy.types.Menu): + bl_label = "Select" + + def draw(self, context): + layout = self.layout + + layout.column() + # This is a bit misleading as the operator's default text is "Select All" while it actually *toggles* All/None + layout.operator("graph.select_all_toggle") + layout.operator("graph.select_all_toggle", text="Invert Selection").invert = True + + layout.separator() + layout.operator("graph.select_border") + layout.operator("graph.select_border", text="Border Axis Range").axis_range = True + + layout.separator() + layout.operator("graph.select_column", text="Columns on Selected Keys").mode = 'KEYS' + layout.operator("graph.select_column", text="Column on Current Frame").mode = 'CFRA' + + layout.operator("graph.select_column", text="Columns on Selected Markers").mode = 'MARKERS_COLUMN' + layout.operator("graph.select_column", text="Between Selected Markers").mode = 'MARKERS_BETWEEN' + + +class GRAPH_MT_channel(bpy.types.Menu): + bl_label = "Channel" + + def draw(self, context): + layout = self.layout + + layout.column() + layout.operator("anim.channels_setting_toggle") + layout.operator("anim.channels_setting_enable") + layout.operator("anim.channels_setting_disable") + + layout.separator() + layout.operator("anim.channels_editable_toggle") + + layout.separator() + layout.operator("anim.channels_expand") + layout.operator("anim.channels_collapse") + + +class GRAPH_MT_key(bpy.types.Menu): + bl_label = "Key" + + def draw(self, context): + layout = self.layout + + layout.column() + layout.menu("GRAPH_MT_key_transform", text="Transform") + + layout.operator_menu_enum("graph.snap", property="type", text="Snap") + layout.operator_menu_enum("graph.mirror", property="type", text="Mirror") + + layout.separator() + layout.operator("graph.keyframe_insert") + layout.operator("graph.fmodifier_add") + + layout.separator() + layout.operator("graph.duplicate") + layout.operator("graph.delete") + + layout.separator() + layout.operator_menu_enum("graph.handle_type", property="type", text="Handle Type") + layout.operator_menu_enum("graph.interpolation_type", property="type", text="Interpolation Mode") + layout.operator_menu_enum("graph.extrapolation_type", property="type", text="Extrapolation Mode") + + layout.separator() + layout.operator("graph.clean") + layout.operator("graph.sample") + layout.operator("graph.bake") + + layout.separator() + layout.operator("graph.copy") + layout.operator("graph.paste") + + +class GRAPH_MT_key_transform(bpy.types.Menu): + bl_label = "Transform" + + def draw(self, context): + layout = self.layout + + layout.column() + layout.operator("transform.translate", text="Grab/Move") + layout.operator("transform.transform", text="Extend").mode = 'TIME_EXTEND' + layout.operator("transform.rotate", text="Rotate") + layout.operator("transform.resize", text="Scale") + + +bpy.types.register(GRAPH_HT_header) # header/menu classes +bpy.types.register(GRAPH_MT_view) +bpy.types.register(GRAPH_MT_select) +bpy.types.register(GRAPH_MT_channel) +bpy.types.register(GRAPH_MT_key) +bpy.types.register(GRAPH_MT_key_transform) diff --git a/release/scripts/ui/space_image.py b/release/scripts/ui/space_image.py index 5714a3d2548..27d0aa91349 100644 --- a/release/scripts/ui/space_image.py +++ b/release/scripts/ui/space_image.py @@ -34,7 +34,7 @@ class IMAGE_MT_view(bpy.types.Menu): show_uvedit = sima.show_uvedit - layout.operator("image.properties", icon='ICON_MENU_PANEL') + layout.operator("image.properties", icon='MENU_PANEL') layout.separator() @@ -150,9 +150,9 @@ class IMAGE_MT_uvs_transform(bpy.types.Menu): def draw(self, context): layout = self.layout - layout.operator("tfm.translate") - layout.operator("tfm.rotate") - layout.operator("tfm.resize") + layout.operator("transform.translate") + layout.operator("transform.rotate") + layout.operator("transform.resize") class IMAGE_MT_uvs_snap(bpy.types.Menu): @@ -179,8 +179,8 @@ class IMAGE_MT_uvs_mirror(bpy.types.Menu): layout = self.layout layout.operator_context = 'EXEC_REGION_WIN' - layout.operator("tfm.mirror", text="X Axis").constraint_axis[0] = True - layout.operator("tfm.mirror", text="Y Axis").constraint_axis[1] = True + layout.operator("transform.mirror", text="X Axis").constraint_axis[0] = True + layout.operator("transform.mirror", text="Y Axis").constraint_axis[1] = True class IMAGE_MT_uvs_weldalign(bpy.types.Menu): @@ -286,10 +286,14 @@ class IMAGE_HT_header(bpy.types.Header): layout.prop(settings, "uv_selection_mode", text="", expand=True) layout.prop(uvedit, "sticky_selection_mode", text="", icon_only=True) + row = layout.row(align=True) + row.prop(settings, "proportional_editing", text="", icon_only=True) + if settings.proportional_editing != 'DISABLED': + row.prop(settings, "proportional_editing_falloff", text="", icon_only=True) + row = layout.row(align=True) row.prop(settings, "snap", text="") - if settings.snap: - row.prop(settings, "snap_mode", text="") + row.prop(settings, "snap_element", text="", icon_only=True) # mesh = context.edit_object.data # row.prop_object(mesh, "active_uv_layer", mesh, "uv_textures") @@ -307,12 +311,12 @@ class IMAGE_HT_header(bpy.types.Header): row = layout.row(align=True) if ima.type == 'COMPOSITE': - row.operator("image.record_composite", icon='ICON_REC') + row.operator("image.record_composite", icon='REC') if ima.type == 'COMPOSITE' and ima.source in ('MOVIE', 'SEQUENCE'): - row.operator("image.play_composite", icon='ICON_PLAY') + row.operator("image.play_composite", icon='PLAY') if show_uvedit or sima.image_painting: - layout.prop(sima, "update_automatically", text="") + layout.prop(sima, "update_automatically", text="", icon_only=True, icon='LOCKED') class IMAGE_PT_image_properties(bpy.types.Panel): diff --git a/release/scripts/ui/space_info.py b/release/scripts/ui/space_info.py index ad94bdd0beb..56509a6e099 100644 --- a/release/scripts/ui/space_info.py +++ b/release/scripts/ui/space_info.py @@ -29,6 +29,7 @@ class INFO_HT_header(bpy.types.Header): def draw(self, context): layout = self.layout + window = context.window scene = context.scene rd = scene.render_data @@ -45,7 +46,12 @@ class INFO_HT_header(bpy.types.Header): sub.menu("INFO_MT_render") sub.menu("INFO_MT_help") - layout.template_ID(context.window, "screen", new="screen.new", unlink="screen.delete") + if window.screen.fullscreen: + layout.operator("screen.back_to_previous", icon='SCREEN_BACK', text="Back to Previous") + layout.separator() + else: + layout.template_ID(context.window, "screen", new="screen.new", unlink="screen.delete") + layout.template_ID(context.screen, "scene", new="scene.new", unlink="scene.delete") layout.separator() @@ -60,7 +66,7 @@ class INFO_HT_header(bpy.types.Header): layout.label(text=scene.statistics()) - layout.operator("wm.window_fullscreen_toggle", icon='ICON_FULLSCREEN_ENTER', text="") + layout.operator("wm.window_fullscreen_toggle", icon='FULLSCREEN_ENTER', text="") class INFO_MT_file(bpy.types.Menu): @@ -70,23 +76,23 @@ class INFO_MT_file(bpy.types.Menu): layout = self.layout layout.operator_context = 'EXEC_AREA' - layout.operator("wm.read_homefile", text="New", icon='ICON_NEW') + layout.operator("wm.read_homefile", text="New", icon='NEW') layout.operator_context = 'INVOKE_AREA' - layout.operator("wm.open_mainfile", text="Open...", icon='ICON_FILE_FOLDER') + layout.operator("wm.open_mainfile", text="Open...", icon='FILE_FOLDER') layout.operator_menu_enum("wm.open_recentfile", "file", text="Open Recent") layout.operator("wm.recover_last_session") layout.operator("wm.recover_auto_save", text="Recover Auto Save...") layout.separator() - layout.operator_context = 'EXEC_AREA' - layout.operator("wm.save_mainfile", text="Save", icon='ICON_FILE_TICK') + layout.operator_context = 'INVOKE_AREA' + layout.operator("wm.save_mainfile", text="Save", icon='FILE_TICK') layout.operator_context = 'INVOKE_AREA' layout.operator("wm.save_as_mainfile", text="Save As...") layout.separator() - layout.operator("screen.userpref_show", text="User Preferences...", icon='ICON_PREFERENCES') + layout.operator("screen.userpref_show", text="User Preferences...", icon='PREFERENCES') layout.operator("wm.read_homefile", text="Load Factory Settings").factory = True layout.separator() @@ -107,7 +113,7 @@ class INFO_MT_file(bpy.types.Menu): layout.separator() layout.operator_context = 'EXEC_AREA' - layout.operator("wm.exit_blender", text="Quit", icon='ICON_QUIT') + layout.operator("wm.exit_blender", text="Quit", icon='QUIT') # test for expanding menus ''' @@ -165,16 +171,26 @@ class INFO_MT_mesh_add(dynamic_menu.DynMenu): def draw(self, context): layout = self.layout layout.operator_context = 'INVOKE_REGION_WIN' - layout.operator("mesh.primitive_plane_add", icon='ICON_MESH_PLANE', text="Plane") - layout.operator("mesh.primitive_cube_add", icon='ICON_MESH_CUBE', text="Cube") - layout.operator("mesh.primitive_circle_add", icon='ICON_MESH_CIRCLE', text="Circle") - layout.operator("mesh.primitive_uv_sphere_add", icon='ICON_MESH_UVSPHERE', text="UV Sphere") - layout.operator("mesh.primitive_ico_sphere_add", icon='ICON_MESH_ICOSPHERE', text="Icosphere") - layout.operator("mesh.primitive_tube_add", icon='ICON_MESH_TUBE', text="Tube") - layout.operator("mesh.primitive_cone_add", icon='ICON_MESH_CONE', text="Cone") + layout.operator("mesh.primitive_plane_add", icon='MESH_PLANE', text="Plane") + layout.operator("mesh.primitive_cube_add", icon='MESH_CUBE', text="Cube") + layout.operator("mesh.primitive_circle_add", icon='MESH_CIRCLE', text="Circle") + layout.operator("mesh.primitive_uv_sphere_add", icon='MESH_UVSPHERE', text="UV Sphere") + layout.operator("mesh.primitive_ico_sphere_add", icon='MESH_ICOSPHERE', text="Icosphere") + layout.operator("mesh.primitive_tube_add", icon='MESH_TUBE', text="Tube") + layout.operator("mesh.primitive_cone_add", icon='MESH_CONE', text="Cone") layout.separator() - layout.operator("mesh.primitive_grid_add", icon='ICON_MESH_GRID', text="Grid") - layout.operator("mesh.primitive_monkey_add", icon='ICON_MESH_MONKEY', text="Monkey") + layout.operator("mesh.primitive_grid_add", icon='MESH_GRID', text="Grid") + layout.operator("mesh.primitive_monkey_add", icon='MESH_MONKEY', text="Monkey") + + +class INFO_MT_armature_add(dynamic_menu.DynMenu): + bl_idname = "INFO_MT_armature_add" + bl_label = "Armature" + + def draw(self, context): + layout = self.layout + layout.operator_context = 'INVOKE_REGION_WIN' + layout.operator("object.armature_add", text="Single Bone", icon='BONE_DATA') class INFO_MT_add(bpy.types.Menu): @@ -185,37 +201,30 @@ class INFO_MT_add(bpy.types.Menu): layout.operator_context = 'EXEC_SCREEN' - #layout.operator_menu_enum("object.mesh_add", "type", text="Mesh", icon='ICON_OUTLINER_OB_MESH') - layout.menu("INFO_MT_mesh_add", icon='ICON_OUTLINER_OB_MESH') - - layout.operator_menu_enum("object.curve_add", "type", text="Curve", icon='ICON_OUTLINER_OB_CURVE') - layout.operator_menu_enum("object.surface_add", "type", text="Surface", icon='ICON_OUTLINER_OB_SURFACE') - layout.operator_menu_enum("object.metaball_add", "type", 'META', text="Metaball", icon='ICON_OUTLINER_OB_META') - layout.operator("object.text_add", text="Text", icon='ICON_OUTLINER_OB_FONT') + #layout.operator_menu_enum("object.mesh_add", "type", text="Mesh", icon='OUTLINER_OB_MESH') + layout.menu("INFO_MT_mesh_add", icon='OUTLINER_OB_MESH') + layout.operator_menu_enum("object.curve_add", "type", text="Curve", icon='OUTLINER_OB_CURVE') + layout.operator_menu_enum("object.surface_add", "type", text="Surface", icon='OUTLINER_OB_SURFACE') + layout.operator_menu_enum("object.metaball_add", "type", 'META', text="Metaball", icon='OUTLINER_OB_META') + layout.operator("object.text_add", text="Text", icon='OUTLINER_OB_FONT') layout.separator() layout.operator_context = 'INVOKE_REGION_WIN' - - layout.operator("object.armature_add", text="Armature", icon='ICON_OUTLINER_OB_ARMATURE') - layout.operator("object.add", text="Lattice", icon='ICON_OUTLINER_OB_LATTICE').type = 'LATTICE' - layout.operator("object.add", text="Empty", icon='ICON_OUTLINER_OB_EMPTY').type = 'EMPTY' - + layout.menu("INFO_MT_armature_add", icon='OUTLINER_OB_ARMATURE') + layout.operator("object.add", text="Lattice", icon='OUTLINER_OB_LATTICE').type = 'LATTICE' + layout.operator("object.add", text="Empty", icon='OUTLINER_OB_EMPTY').type = 'EMPTY' layout.separator() - layout.operator("object.add", text="Camera", icon='ICON_OUTLINER_OB_CAMERA').type = 'CAMERA' - + layout.operator("object.add", text="Camera", icon='OUTLINER_OB_CAMERA').type = 'CAMERA' layout.operator_context = 'EXEC_SCREEN' - - layout.operator_menu_enum("object.lamp_add", "type", 'LAMP', text="Lamp", icon='ICON_OUTLINER_OB_LAMP') - + layout.operator_menu_enum("object.lamp_add", "type", 'LAMP', text="Lamp", icon='OUTLINER_OB_LAMP') layout.separator() - layout.operator_menu_enum("object.effector_add", "type", 'EMPTY', text="Force Field", icon='ICON_OUTLINER_OB_EMPTY') - + layout.operator_menu_enum("object.effector_add", "type", 'EMPTY', text="Force Field", icon='OUTLINER_OB_EMPTY') layout.separator() - layout.operator_menu_enum("object.group_instance_add", "type", text="Group Instance", icon='ICON_OUTLINER_OB_EMPTY') + layout.operator_menu_enum("object.group_instance_add", "type", text="Group Instance", icon='OUTLINER_OB_EMPTY') class INFO_MT_game(bpy.types.Menu): @@ -244,8 +253,8 @@ class INFO_MT_render(bpy.types.Menu): # rd = context.scene.render_data - layout.operator("screen.render", text="Render Image", icon='ICON_RENDER_STILL') - layout.operator("screen.render", text="Render Animation", icon='ICON_RENDER_ANIMATION').animation = True + layout.operator("screen.render", text="Render Image", icon='RENDER_STILL') + layout.operator("screen.render", text="Render Animation", icon='RENDER_ANIMATION').animation = True layout.separator() @@ -255,6 +264,7 @@ class INFO_MT_render(bpy.types.Menu): layout.separator() layout.operator("screen.render_view_show") + layout.operator("screen.play_rendered_anim") class INFO_MT_help(bpy.types.Menu): @@ -263,19 +273,19 @@ class INFO_MT_help(bpy.types.Menu): def draw(self, context): layout = self.layout - layout.operator("help.manual", icon='ICON_HELP') - layout.operator("help.release_logs", icon='ICON_URL') + layout.operator("help.manual", icon='HELP') + layout.operator("help.release_logs", icon='URL') layout.separator() - layout.operator("help.blender_website", icon='ICON_URL') - layout.operator("help.blender_eshop", icon='ICON_URL') - layout.operator("help.developer_community", icon='ICON_URL') - layout.operator("help.user_community", icon='ICON_URL') + layout.operator("help.blender_website", icon='URL') + layout.operator("help.blender_eshop", icon='URL') + layout.operator("help.developer_community", icon='URL') + layout.operator("help.user_community", icon='URL') layout.separator() - layout.operator("help.report_bug", icon='ICON_URL') + layout.operator("help.report_bug", icon='URL') layout.separator() - layout.operator("help.python_api", icon='ICON_URL') + layout.operator("help.python_api", icon='URL') layout.operator("help.operator_cheat_sheet") bpy.types.register(INFO_HT_header) @@ -285,6 +295,7 @@ bpy.types.register(INFO_MT_file_export) bpy.types.register(INFO_MT_file_external_data) bpy.types.register(INFO_MT_add) bpy.types.register(INFO_MT_mesh_add) +bpy.types.register(INFO_MT_armature_add) bpy.types.register(INFO_MT_game) bpy.types.register(INFO_MT_render) bpy.types.register(INFO_MT_help) diff --git a/release/scripts/ui/space_logic.py b/release/scripts/ui/space_logic.py index e547da6bb8f..f2fdbd3a15a 100644 --- a/release/scripts/ui/space_logic.py +++ b/release/scripts/ui/space_logic.py @@ -43,7 +43,7 @@ class LOGIC_PT_properties(bpy.types.Panel): row.prop(prop, "name", text="") row.prop(prop, "type", text="") row.prop(prop, "value", text="", toggle=True) # we dont care about the type. rna will display correctly - row.prop(prop, "debug", text="", toggle=True, icon='ICON_INFO') - row.operator("object.game_property_remove", text="", icon='ICON_X').index = i + row.prop(prop, "debug", text="", toggle=True, icon='INFO') + row.operator("object.game_property_remove", text="", icon='X').index = i bpy.types.register(LOGIC_PT_properties) diff --git a/release/scripts/ui/space_nla.py b/release/scripts/ui/space_nla.py new file mode 100644 index 00000000000..285ada5f46e --- /dev/null +++ b/release/scripts/ui/space_nla.py @@ -0,0 +1,168 @@ +# ##### 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +# + +import bpy + + +class NLA_HT_header(bpy.types.Header): + bl_space_type = 'NLA_EDITOR' + + def draw(self, context): + layout = self.layout + + st = context.space_data + + row = layout.row(align=True) + row.template_header() + + if context.area.show_menus: + sub = row.row(align=True) + + sub.menu("NLA_MT_view") + sub.menu("NLA_MT_select") + sub.menu("NLA_MT_edit") + sub.menu("NLA_MT_add") + + layout.template_dopesheet_filter(st.dopesheet) + + layout.prop(st, "autosnap", text="") + + +class NLA_MT_view(bpy.types.Menu): + bl_label = "View" + + def draw(self, context): + layout = self.layout + + st = context.space_data + + layout.column() + + layout.operator("nla.properties", icon='MENU_PANEL') + + layout.separator() + layout.prop(st, "show_cframe_indicator") + + if st.show_seconds: + layout.operator("anim.time_toggle", text="Show Frames") + else: + layout.operator("anim.time_toggle", text="Show Seconds") + + layout.prop(st, "show_strip_curves") + + layout.separator() + layout.operator("anim.previewrange_set") + layout.operator("anim.previewrange_clear") + + layout.separator() + layout.operator("screen.area_dupli") + layout.operator("screen.screen_full_area") + + +class NLA_MT_select(bpy.types.Menu): + bl_label = "Select" + + def draw(self, context): + layout = self.layout + + layout.column() + # This is a bit misleading as the operator's default text is "Select All" while it actually *toggles* All/None + layout.operator("nla.select_all_toggle") + layout.operator("nla.select_all_toggle", text="Invert Selection").invert = True + + layout.separator() + layout.operator("nla.select_border") + layout.operator("nla.select_border", text="Border Axis Range").axis_range = True + + +class NLA_MT_edit(bpy.types.Menu): + bl_label = "Edit" + + def draw(self, context): + layout = self.layout + + scene = context.scene + + layout.column() + layout.menu("NLA_MT_edit_transform", text="Transform") + + layout.operator_menu_enum("nla.snap", property="type", text="Snap") + + layout.separator() + layout.operator("nla.duplicate") + layout.operator("nla.split") + layout.operator("nla.delete") + + layout.separator() + layout.operator("nla.mute_toggle") + + layout.separator() + layout.operator("nla.apply_scale") + layout.operator("nla.clear_scale") + + layout.separator() + layout.operator("nla.move_up") + layout.operator("nla.move_down") + + layout.separator() + # TODO: names of these tools for 'tweakmode' need changing? + if scene.nla_tweakmode_on: + layout.operator("nla.tweakmode_exit", text="Stop Tweaking Strip Actions") + else: + layout.operator("nla.tweakmode_enter", text="Start Tweaking Strip Actions") + + +class NLA_MT_add(bpy.types.Menu): + bl_label = "Add" + + def draw(self, context): + layout = self.layout + + layout.column() + layout.operator("nla.actionclip_add") + layout.operator("nla.transition_add") + + layout.separator() + layout.operator("nla.meta_add") + layout.operator("nla.meta_remove") + + layout.separator() + layout.operator("nla.tracks_add") + layout.operator("nla.tracks_add", text="Add Tracks Above Selected").above_selected = True + + +class NLA_MT_edit_transform(bpy.types.Menu): + bl_label = "Transform" + + def draw(self, context): + layout = self.layout + + layout.column() + layout.operator("transform.translate", text="Grab/Move") + layout.operator("transform.transform", text="Extend").mode = 'TIME_EXTEND' + layout.operator("transform.resize", text="Scale") + + +bpy.types.register(NLA_HT_header) # header/menu classes +bpy.types.register(NLA_MT_view) +bpy.types.register(NLA_MT_select) +bpy.types.register(NLA_MT_edit) +bpy.types.register(NLA_MT_add) +bpy.types.register(NLA_MT_edit_transform) diff --git a/release/scripts/ui/space_node.py b/release/scripts/ui/space_node.py index c05ab767f85..9cf0a0c5ef3 100644 --- a/release/scripts/ui/space_node.py +++ b/release/scripts/ui/space_node.py @@ -73,7 +73,7 @@ class NODE_MT_view(bpy.types.Menu): def draw(self, context): layout = self.layout - layout.operator("node.properties", icon='ICON_MENU_PANEL') + layout.operator("node.properties", icon='MENU_PANEL') layout.separator() layout.operator("view2d.zoom_in") @@ -109,9 +109,9 @@ class NODE_MT_node(bpy.types.Menu): def draw(self, context): layout = self.layout - layout.operator("tfm.translate") - layout.operator("tfm.rotate") - layout.operator("tfm.resize") + layout.operator("transform.translate") + layout.operator("transform.rotate") + layout.operator("transform.resize") layout.separator() diff --git a/release/scripts/ui/space_outliner.py b/release/scripts/ui/space_outliner.py index cc2c6a633ae..f60cb3299b4 100644 --- a/release/scripts/ui/space_outliner.py +++ b/release/scripts/ui/space_outliner.py @@ -45,16 +45,16 @@ class OUTLINER_HT_header(bpy.types.Header): if space.display_mode == 'DATABLOCKS': row = layout.row(align=True) - row.operator("outliner.keyingset_add_selected", icon='ICON_ZOOMIN', text="") - row.operator("outliner.keyingset_remove_selected", icon='ICON_ZOOMOUT', text="") + row.operator("outliner.keyingset_add_selected", icon='ZOOMIN', text="") + row.operator("outliner.keyingset_remove_selected", icon='ZOOMOUT', text="") if ks: row = layout.row(align=False) row.prop_object(scene, "active_keying_set", scene, "keying_sets", text="") row = layout.row(align=True) - row.operator("anim.keyframe_insert", text="", icon='ICON_KEY_HLT') - row.operator("anim.keyframe_delete", text="", icon='ICON_KEY_DEHLT') + row.operator("anim.keyframe_insert", text="", icon='KEY_HLT') + row.operator("anim.keyframe_delete", text="", icon='KEY_DEHLT') else: row = layout.row(align=False) row.label(text="No Keying Set active") diff --git a/release/scripts/ui/space_sequencer.py b/release/scripts/ui/space_sequencer.py index b2bd017262f..8edadb96de3 100644 --- a/release/scripts/ui/space_sequencer.py +++ b/release/scripts/ui/space_sequencer.py @@ -44,21 +44,43 @@ class SEQUENCER_HT_header(bpy.types.Header): row.separator() - if st.display_mode == 'SEQUENCER': + if (st.view_type == 'SEQUENCER') or (st.view_type == 'SEQUENCER_PREVIEW'): sub.menu("SEQUENCER_MT_select") sub.menu("SEQUENCER_MT_marker") sub.menu("SEQUENCER_MT_add") sub.menu("SEQUENCER_MT_strip") - layout.prop(st, "display_mode", text="") + layout.prop(st, "view_type", text="") + + if (st.view_type == 'PREVIEW') or (st.view_type == 'SEQUENCER_PREVIEW'): + layout.prop(st, "display_mode", text="") + + if (st.view_type == 'SEQUENCER'): + row = layout.row(align=True) + row.operator("sequencer.copy", text="", icon='COPYDOWN') + row.operator("sequencer.paste", text="", icon='PASTEDOWN') - if st.display_mode == 'SEQUENCER': layout.separator() layout.operator("sequencer.refresh_all") + elif (st.view_type == 'SEQUENCER_PREVIEW'): + layout.separator() + layout.operator("sequencer.refresh_all") + layout.prop(st, "display_channel", text="Channel") else: layout.prop(st, "display_channel", text="Channel") +class SEQUENCER_MT_view_toggle(bpy.types.Menu): + bl_label = "View Type" + + def draw(self, context): + layout = self.layout + + layout.operator("sequencer.view_toggle").type = 'SEQUENCER' + layout.operator("sequencer.view_toggle").type = 'PREVIEW' + layout.operator("sequencer.view_toggle").type = 'SEQUENCER_PREVIEW' + + class SEQUENCER_MT_view(bpy.types.Menu): bl_label = "View" @@ -98,7 +120,10 @@ class SEQUENCER_MT_view(bpy.types.Menu): """ layout.separator() - layout.operator("sequencer.view_all") + if (st.view_type == 'SEQUENCER') or (st.view_type == 'SEQUENCER_PREVIEW'): + layout.operator("sequencer.view_all", text='View all Sequences') + if (st.view_type == 'PREVIEW') or (st.view_type == 'SEQUENCER_PREVIEW'): + layout.operator("sequencer.view_all_preview", text='Fit preview in window') layout.operator("sequencer.view_selected") layout.prop(st, "draw_frames") @@ -134,7 +159,7 @@ class SEQUENCER_MT_select(bpy.types.Menu): class SEQUENCER_MT_marker(bpy.types.Menu): - bl_label = "Marker (TODO)" + bl_label = "Marker" def draw(self, context): layout = self.layout @@ -178,6 +203,7 @@ class SEQUENCER_MT_add_effect(bpy.types.Menu): layout.operator("sequencer.effect_strip_add", text="Subtract").type = 'SUBTRACT' layout.operator("sequencer.effect_strip_add", text="Alpha Over").type = 'ALPHA_OVER' layout.operator("sequencer.effect_strip_add", text="Alpha Under").type = 'ALPHA_UNDER' + layout.operator("sequencer.effect_strip_add", text="Cross").type = 'CROSS' layout.operator("sequencer.effect_strip_add", text="Gamma Cross").type = 'GAMMA_CROSS' layout.operator("sequencer.effect_strip_add", text="Multiply").type = 'MULTIPLY' layout.operator("sequencer.effect_strip_add", text="Over Drop").type = 'OVER_DROP' @@ -198,8 +224,8 @@ class SEQUENCER_MT_strip(bpy.types.Menu): layout.operator_context = 'INVOKE_REGION_WIN' layout.column() - layout.operator("tfm.transform", text="Grab/Move").mode = 'TRANSLATION' - layout.operator("tfm.transform", text="Grab/Extend from frame").mode = 'TIME_EXTEND' + layout.operator("transform.transform", text="Grab/Move").mode = 'TRANSLATION' + layout.operator("transform.transform", text="Grab/Extend from frame").mode = 'TIME_EXTEND' # uiItemO(layout, NULL, 0, "sequencer.strip_snap"); // TODO - add this operator layout.separator() @@ -222,7 +248,7 @@ class SEQUENCER_MT_strip(bpy.types.Menu): layout.operator("sequencer.effect_reassign_inputs") elif stype == 'IMAGE': layout.separator() - layout.operator("sequencer.image_change") + # layout.operator("sequencer.image_change") layout.operator("sequencer.rendersize") elif stype == 'SCENE': layout.separator() @@ -254,24 +280,29 @@ class SEQUENCER_MT_strip(bpy.types.Menu): layout.operator("sequencer.snap") - layout.operator("sequencer.swap_right") - layout.operator("sequencer.swap_left") + layout.operator_menu_enum("sequencer.swap", "side") class SequencerButtonsPanel(bpy.types.Panel): bl_space_type = 'SEQUENCE_EDITOR' bl_region_type = 'UI' + def has_sequencer(self, context): + return (context.space_data.view_type == 'SEQUENCER') or (context.space_data.view_type == 'SEQUENCER_PREVIEW') + def poll(self, context): - return (context.space_data.display_mode == 'SEQUENCER') and (act_strip(context) is not None) + return self.has_sequencer(context) and (act_strip(context) is not None) class SequencerButtonsPanel_Output(bpy.types.Panel): bl_space_type = 'SEQUENCE_EDITOR' bl_region_type = 'UI' + def has_preview(self, context): + return (context.space_data.view_type == 'PREVIEW') or (context.space_data.view_type == 'SEQUENCER_PREVIEW') + def poll(self, context): - return context.space_data.display_mode != 'SEQUENCER' + return self.has_preview(context) class SEQUENCER_PT_edit(SequencerButtonsPanel): @@ -296,9 +327,9 @@ class SEQUENCER_PT_edit(SequencerButtonsPanel): row = layout.row() if strip.mute == True: - row.prop(strip, "mute", toggle=True, icon='ICON_RESTRICT_VIEW_ON', text="") + row.prop(strip, "mute", toggle=True, icon='RESTRICT_VIEW_ON', text="") elif strip.mute is False: - row.prop(strip, "mute", toggle=True, icon='ICON_RESTRICT_VIEW_OFF', text="") + row.prop(strip, "mute", toggle=True, icon='RESTRICT_VIEW_OFF', text="") sub = row.row() sub.active = (not strip.mute) @@ -330,7 +361,7 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel): bl_label = "Effect Strip" def poll(self, context): - if context.space_data.display_mode != 'SEQUENCER': + if not self.has_sequencer(context): return False strip = act_strip(context) @@ -338,7 +369,7 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel): return False return strip.type in ('ADD', 'SUBTRACT', 'ALPHA_OVER', 'ALPHA_UNDER', - 'GAMMA_CROSS', 'MULTIPLY', 'OVER_DROP', + 'CROSS', 'GAMMA_CROSS', 'MULTIPLY', 'OVER_DROP', 'PLUGIN', 'WIPE', 'GLOW', 'TRANSFORM', 'COLOR', 'SPEED') @@ -382,54 +413,53 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel): flow.prop(strip, "frame_blending") elif strip.type == 'TRANSFORM': + self.draw_panel_transform(strip) - col = layout.column() - col.prop(strip, "interpolation") - col.prop(strip, "translation_unit") - - col = layout.column(align=True) - col.label(text="Position X:") - col.prop(strip, "translate_start_x", text="Start") - col.prop(strip, "translate_end_x", text="End") - - col = layout.column(align=True) - col.label(text="Position Y:") - col.prop(strip, "translate_start_y", text="Start") - col.prop(strip, "translate_end_y", text="End") - - layout.separator() - - col = layout.column(align=True) - col.label(text="Scale X:") - col.prop(strip, "scale_start_x", text="Start") - col.prop(strip, "scale_end_x", text="End") - - col = layout.column(align=True) - col.label(text="Scale Y:") - col.prop(strip, "scale_start_y", text="Start") - col.prop(strip, "scale_end_y", text="End") - - layout.separator() - - col = layout.column(align=True) - col.label(text="Rotation:") - col.prop(strip, "rotation_start", text="Start") - col.prop(strip, "rotation_end", text="End") col = layout.column(align=True) if strip.type == 'SPEED': col.prop(strip, "speed_fader", text="Speed fader") + elif strip.type in ('CROSS', 'GAMMA_CROSS', 'PLUGIN', 'WIPE'): + col.prop(strip, "use_effect_default_fade", "Default fade") + if not strip.use_effect_default_fade: + col.prop(strip, "effect_fader", text="Effect fader") + + def draw_panel_transform(self, strip): + layout = self.layout + col = layout.column() + + col.prop(strip, "interpolation") + col.prop(strip, "translation_unit") + col = layout.column(align=True) + col.label(text="Position:") + col.prop(strip, "translate_start_x", text="X") + col.prop(strip, "translate_start_y", text="Y") + + layout.separator() + + col = layout.column(align=True) + col.prop(strip, "uniform_scale") + if (strip.uniform_scale): + col = layout.column(align=True) + col.prop(strip, "scale_start_x", text="Scale") else: - col.prop(strip, "use_effect_default_fade", "Default fade") - if not strip.use_effect_default_fade: - col.prop(strip, "effect_fader", text="Effect fader") + col = layout.column(align=True) + col.label(text="Scale:") + col.prop(strip, "scale_start_x", text="X") + col.prop(strip, "scale_start_y", text="Y") + + layout.separator() + + col = layout.column(align=True) + col.label(text="Rotation:") + col.prop(strip, "rotation_start", text="Rotation") class SEQUENCER_PT_input(SequencerButtonsPanel): bl_label = "Strip Input" def poll(self, context): - if context.space_data.display_mode != 'SEQUENCER': + if not self.has_sequencer(context): return False strip = act_strip(context) @@ -485,7 +515,7 @@ class SEQUENCER_PT_sound(SequencerButtonsPanel): bl_label = "Sound" def poll(self, context): - if context.space_data.display_mode != 'SEQUENCER': + if not self.has_sequencer(context): return False strip = act_strip(context) @@ -506,9 +536,9 @@ class SEQUENCER_PT_sound(SequencerButtonsPanel): row = layout.row() if strip.sound.packed_file: - row.operator("sound.unpack", icon='ICON_PACKAGE', text="Unpack") + row.operator("sound.unpack", icon='PACKAGE', text="Unpack") else: - row.operator("sound.pack", icon='ICON_UGLYPACKAGE', text="Pack") + row.operator("sound.pack", icon='UGLYPACKAGE', text="Pack") row.prop(strip.sound, "caching") @@ -519,7 +549,7 @@ class SEQUENCER_PT_scene(SequencerButtonsPanel): bl_label = "Scene" def poll(self, context): - if context.space_data.display_mode != 'SEQUENCER': + if not self.has_sequencer(context): return False strip = act_strip(context) @@ -540,7 +570,7 @@ class SEQUENCER_PT_filter(SequencerButtonsPanel): bl_label = "Filter" def poll(self, context): - if context.space_data.display_mode != 'SEQUENCER': + if not self.has_sequencer(context): return False strip = act_strip(context) @@ -590,7 +620,7 @@ class SEQUENCER_PT_proxy(SequencerButtonsPanel): bl_label = "Proxy" def poll(self, context): - if context.space_data.display_mode != 'SEQUENCER': + if not self.has_sequencer(context): return False strip = act_strip(context) @@ -630,6 +660,7 @@ class SEQUENCER_PT_view(SequencerButtonsPanel_Output): bpy.types.register(SEQUENCER_HT_header) # header/menu classes bpy.types.register(SEQUENCER_MT_view) +bpy.types.register(SEQUENCER_MT_view_toggle) bpy.types.register(SEQUENCER_MT_select) bpy.types.register(SEQUENCER_MT_marker) bpy.types.register(SEQUENCER_MT_add) diff --git a/release/scripts/ui/space_text.py b/release/scripts/ui/space_text.py index 95175e9ce41..5df937aacde 100644 --- a/release/scripts/ui/space_text.py +++ b/release/scripts/ui/space_text.py @@ -42,7 +42,7 @@ class TEXT_HT_header(bpy.types.Header): if text and text.modified: row = layout.row() # row.color(redalert) - row.operator("text.resolve_conflict", text="", icon='ICON_HELP') + row.operator("text.resolve_conflict", text="", icon='HELP') layout.template_ID(st, "text", new="text.new", unlink="text.unlink") @@ -104,14 +104,14 @@ class TEXT_PT_find(bpy.types.Panel): col = layout.column(align=True) row = col.row() row.prop(st, "find_text", text="") - row.operator("text.find_set_selected", text="", icon='ICON_TEXT') + row.operator("text.find_set_selected", text="", icon='TEXT') col.operator("text.find") # replace col = layout.column(align=True) row = col.row() row.prop(st, "replace_text", text="") - row.operator("text.replace_set_selected", text="", icon='ICON_TEXT') + row.operator("text.replace_set_selected", text="", icon='TEXT') col.operator("text.replace") # mark @@ -156,7 +156,7 @@ class TEXT_MT_text(bpy.types.Menu): layout.separator() - layout.operator("text.properties", icon='ICON_MENU_PANEL') + layout.operator("text.properties", icon='MENU_PANEL') layout.menu("TEXT_MT_templates") diff --git a/release/scripts/ui/space_time.py b/release/scripts/ui/space_time.py index 4c1111cee47..e328fa9e31b 100644 --- a/release/scripts/ui/space_time.py +++ b/release/scripts/ui/space_time.py @@ -54,32 +54,32 @@ class TIME_HT_header(bpy.types.Header): layout.separator() row = layout.row(align=True) - row.operator("screen.frame_jump", text="", icon='ICON_REW').end = False - row.operator("screen.keyframe_jump", text="", icon='ICON_PREV_KEYFRAME').next = False + row.operator("screen.frame_jump", text="", icon='REW').end = False + row.operator("screen.keyframe_jump", text="", icon='PREV_KEYFRAME').next = False if not screen.animation_playing: - row.operator("screen.animation_play", text="", icon='ICON_PLAY_REVERSE').reverse = True - row.operator("screen.animation_play", text="", icon='ICON_PLAY') + row.operator("screen.animation_play", text="", icon='PLAY_REVERSE').reverse = True + row.operator("screen.animation_play", text="", icon='PLAY') else: sub = row.row() sub.scale_x = 2.0 - sub.operator("screen.animation_play", text="", icon='ICON_PAUSE') - row.operator("screen.keyframe_jump", text="", icon='ICON_NEXT_KEYFRAME').next = True - row.operator("screen.frame_jump", text="", icon='ICON_FF').end = True + sub.operator("screen.animation_play", text="", icon='PAUSE') + row.operator("screen.keyframe_jump", text="", icon='NEXT_KEYFRAME').next = True + row.operator("screen.frame_jump", text="", icon='FF').end = True row = layout.row(align=True) - row.prop(tools, "enable_auto_key", text="", toggle=True, icon='ICON_REC') + row.prop(tools, "enable_auto_key", text="", toggle=True, icon='REC') if screen.animation_playing and tools.enable_auto_key: subsub = row.row() subsub.prop(tools, "record_with_nla", toggle=True) - layout.prop(scene, "sync_audio", text="Realtime", toggle=True, icon='ICON_SPEAKER') + layout.prop(scene, "sync_audio", text="Realtime", toggle=True, icon='SPEAKER') layout.separator() row = layout.row(align=True) row.prop_object(scene, "active_keying_set", scene, "keying_sets", text="") - row.operator("anim.keyframe_insert", text="", icon='ICON_KEY_HLT') - row.operator("anim.keyframe_delete", text="", icon='ICON_KEY_DEHLT') + row.operator("anim.keyframe_insert", text="", icon='KEY_HLT') + row.operator("anim.keyframe_delete", text="", icon='KEY_DEHLT') class TIME_MT_view(bpy.types.Menu): @@ -95,8 +95,12 @@ class TIME_MT_view(bpy.types.Menu): layout.separator() + layout.prop(st, "show_cframe_indicator") layout.prop(st, "only_selected") + layout.separator() + + layout.operator("marker.camera_bind") class TIME_MT_frame(bpy.types.Menu): bl_label = "Frame" @@ -142,11 +146,7 @@ class TIME_MT_playback(bpy.types.Menu): layout.separator() - layout.prop(st, "continue_physics") - - layout.separator() - - layout.prop(scene, "sync_audio", text="Realtime Playback", icon='ICON_SPEAKER') + layout.prop(scene, "sync_audio", text="Realtime Playback", icon='SPEAKER') layout.prop(scene, "mute_audio") layout.prop(scene, "scrub_audio") diff --git a/release/scripts/ui/space_userpref.py b/release/scripts/ui/space_userpref.py index 5a8dbf9ee80..e33ac91435d 100644 --- a/release/scripts/ui/space_userpref.py +++ b/release/scripts/ui/space_userpref.py @@ -19,6 +19,83 @@ # import bpy +KM_HIERARCHY = [ + ('Window', 'EMPTY', 'WINDOW', []), # file save, window change, exit + ('Screen Editing', 'EMPTY', 'WINDOW', []), # resizing, action corners + ('Screen', 'EMPTY', 'WINDOW', []), # full screen, undo, screenshot + + ('View2D', 'EMPTY', 'WINDOW', []), # view 2d navigation (per region) + ('Frames', 'EMPTY', 'WINDOW', []), # frame navigation (per region) + ('Header', 'EMPTY', 'WINDOW', []), # header stuff (per region) + ('Markers', 'EMPTY', 'WINDOW', []), # markers (per region) + ('Animation', 'EMPTY', 'WINDOW', []), # frame change on click, preview range (per region) + ('Grease Pencil', 'EMPTY', 'WINDOW', []), # grease pencil stuff (per region) + + ('View2D Buttons List', 'EMPTY', 'WINDOW', []), # view 2d with buttons navigation + ('Animation_Channels', 'EMPTY', 'WINDOW', []), + + ('Buttons Generic', 'PROPERTIES', 'WINDOW', []), # align context menu + ('TimeLine', 'TIMELINE', 'WINDOW', []), + ('Outliner', 'OUTLINER', 'WINDOW', []), + + ('View3D', 'VIEW_3D', 'WINDOW', [ # view 3d navigation and generic stuff (select, transform) + ('Pose', 'EMPTY', 'WINDOW', []), + ('Object Mode', 'EMPTY', 'WINDOW', []), + ('Vertex Paint', 'EMPTY', 'WINDOW', []), + ('Weight Paint', 'EMPTY', 'WINDOW', []), + ('Face Mask', 'EMPTY', 'WINDOW', []), + ('Sculpt', 'EMPTY', 'WINDOW', []), + ('EditMesh', 'EMPTY', 'WINDOW', []), + ('Curve', 'EMPTY', 'WINDOW', []), + ('Armature', 'EMPTY', 'WINDOW', []), + ('Metaball', 'EMPTY', 'WINDOW', []), + ('Lattice', 'EMPTY', 'WINDOW', []), + ('Armature_Sketch', 'EMPTY', 'WINDOW', []), + ('Particle', 'EMPTY', 'WINDOW', []), + ('Font', 'EMPTY', 'WINDOW', []), + ('Object Non-modal', 'EMPTY', 'WINDOW', []), # mode change + ('Image Paint', 'EMPTY', 'WINDOW', []), # image and view3d + ('View3D Generic', 'VIEW_3D', 'WINDOW', []) # toolbar and properties + ]), + ('GraphEdit Keys', 'GRAPH_EDITOR', 'WINDOW', [ + ('GraphEdit Generic', 'GRAPH_EDITOR', 'WINDOW', []) + ]), + + ('Image', 'IMAGE_EDITOR', 'WINDOW', [ + ('UVEdit', 'EMPTY', 'WINDOW', []), # image (reverse order, UVEdit before Image + ('Image Paint', 'EMPTY', 'WINDOW', []), # image and view3d + ('Image Generic', 'IMAGE_EDITOR', 'WINDOW', []) + ]), + + ('Node Generic', 'NODE_EDITOR', 'WINDOW', [ + ('Node', 'NODE_EDITOR', 'WINDOW', []) + ]), + ('File', 'FILE_BROWSER', 'WINDOW', [ + ('FileMain', 'FILE_BROWSER', 'WINDOW', []), + ('FileButtons', 'FILE_BROWSER', 'WINDOW', []) + ]), + ('Action_Keys', 'DOPESHEET_EDITOR', 'WINDOW', []), + ('NLA Generic', 'NLA_EDITOR', 'WINDOW', [ + ('NLA Channels', 'NLA_EDITOR', 'WINDOW', []), + ('NLA Data', 'NLA_EDITOR', 'WINDOW', []) + ]), + ('Script', 'SCRIPTS_WINDOW', 'WINDOW', []), + ('Text', 'TEXT_EDITOR', 'WINDOW', []), + ('Sequencer', 'SEQUENCE_EDITOR', 'WINDOW', []), + ('Logic Generic', 'LOGIC_EDITOR', 'WINDOW', []), + ('Console', 'CONSOLE', 'WINDOW', []), + + + ('View3D Gesture Circle', 'EMPTY', 'WINDOW', []), + ('Gesture Border', 'EMPTY', 'WINDOW', []), + ('Standard Modal Map', 'EMPTY', 'WINDOW', []), + ('Transform Modal Map', 'EMPTY', 'WINDOW', []), + ('View3D Fly Modal', 'EMPTY', 'WINDOW', []), + ('View3D Rotate Modal', 'EMPTY', 'WINDOW', []), + ('View3D Move Modal', 'EMPTY', 'WINDOW', []), + ('View3D Zoom Modal', 'EMPTY', 'WINDOW', []), + ] + class USERPREF_HT_header(bpy.types.Header): bl_space_type = 'USER_PREFERENCES' @@ -37,13 +114,6 @@ class USERPREF_HT_header(bpy.types.Header): layout.operator("wm.keyconfig_export", "Export Key Configuration...").path = "keymap.py" -class USERPREF_MT_view(bpy.types.Menu): - bl_label = "View" - - def draw(self, context): - pass # layout = self.layout - - class USERPREF_PT_tabs(bpy.types.Panel): bl_label = "" bl_space_type = 'USER_PREFERENCES' @@ -74,74 +144,73 @@ class USERPREF_PT_interface(bpy.types.Panel): userpref = context.user_preferences view = userpref.view - split = layout.split() - - col = split.column() - sub = col.split(percentage=0.85) - - sub1 = sub.column() - sub1.label(text="Display:") - sub1.prop(view, "tooltips") - sub1.prop(view, "display_object_info", text="Object Info") - sub1.prop(view, "use_large_cursors") - sub1.prop(view, "show_view_name", text="View Name") - sub1.prop(view, "show_playback_fps", text="Playback FPS") - sub1.prop(view, "global_scene") - sub1.prop(view, "pin_floating_panels") - sub1.prop(view, "object_origin_size") - sub1.separator() - sub1.separator() - sub1.separator() - sub1.prop(view, "show_mini_axis", text="Display Mini Axis") - sub2 = sub1.column() - sub2.enabled = view.show_mini_axis - sub2.prop(view, "mini_axis_size", text="Size") - sub2.prop(view, "mini_axis_brightness", text="Brightness") - - col = split.column() - sub = col.split(percentage=0.85) - - sub1 = sub.column() - sub1.label(text="View Manipulation:") - sub1.prop(view, "auto_depth") - sub1.prop(view, "global_pivot") - sub1.prop(view, "zoom_to_mouse") - sub1.prop(view, "rotate_around_selection") - sub1.separator() + row = layout.row() - sub1.prop(view, "auto_perspective") - sub1.prop(view, "smooth_view") - sub1.prop(view, "rotation_angle") + col = row.column() + col.label(text="Display:") + col.prop(view, "tooltips") + col.prop(view, "display_object_info", text="Object Info") + col.prop(view, "use_large_cursors") + col.prop(view, "show_view_name", text="View Name") + col.prop(view, "show_playback_fps", text="Playback FPS") + col.prop(view, "global_scene") + col.prop(view, "pin_floating_panels") + col.prop(view, "object_origin_size") - col = split.column() - sub = col.split(percentage=0.85) - sub1 = sub.column() + col.separator() + col.separator() + col.separator() -#Toolbox doesn't exist yet -# sub1.label(text="Toolbox:") -# sub1.prop(view, "use_column_layout") -# sub1.label(text="Open Toolbox Delay:") -# sub1.prop(view, "open_left_mouse_delay", text="Hold LMB") -# sub1.prop(view, "open_right_mouse_delay", text="Hold RMB") + col.prop(view, "show_mini_axis", text="Display Mini Axis") + sub = col.column() + sub.enabled = view.show_mini_axis + sub.prop(view, "mini_axis_size", text="Size") + sub.prop(view, "mini_axis_brightness", text="Brightness") - #manipulator - sub1.prop(view, "use_manipulator") - sub2 = sub1.column() - sub2.enabled = view.use_manipulator - sub2.prop(view, "manipulator_size", text="Size") - sub2.prop(view, "manipulator_handle_size", text="Handle Size") - sub2.prop(view, "manipulator_hotspot", text="Hotspot") - sub1.separator() - sub1.separator() - sub1.separator() + row.separator() + row.separator() - sub1.label(text="Menus:") - sub1.prop(view, "open_mouse_over") - sub1.label(text="Menu Open Delay:") - sub1.prop(view, "open_toplevel_delay", text="Top Level") - sub1.prop(view, "open_sublevel_delay", text="Sub Level") + col = row.column() + col.label(text="View Manipulation:") + col.prop(view, "auto_depth") + col.prop(view, "global_pivot") + col.prop(view, "zoom_to_mouse") + col.prop(view, "rotate_around_selection") + + col.separator() + + col.prop(view, "auto_perspective") + col.prop(view, "smooth_view") + col.prop(view, "rotation_angle") + + row.separator() + row.separator() + + col = row.column() + #Toolbox doesn't exist yet + #col.label(text="Toolbox:") + #col.prop(view, "use_column_layout") + #col.label(text="Open Toolbox Delay:") + #col.prop(view, "open_left_mouse_delay", text="Hold LMB") + #col.prop(view, "open_right_mouse_delay", text="Hold RMB") + col.prop(view, "use_manipulator") + sub = col.column() + sub.enabled = view.use_manipulator + sub.prop(view, "manipulator_size", text="Size") + sub.prop(view, "manipulator_handle_size", text="Handle Size") + sub.prop(view, "manipulator_hotspot", text="Hotspot") + + col.separator() + col.separator() + col.separator() + + col.label(text="Menus:") + col.prop(view, "open_mouse_over") + col.label(text="Menu Open Delay:") + col.prop(view, "open_toplevel_delay", text="Top Level") + col.prop(view, "open_sublevel_delay", text="Sub Level") class USERPREF_PT_edit(bpy.types.Panel): @@ -160,93 +229,104 @@ class USERPREF_PT_edit(bpy.types.Panel): userpref = context.user_preferences edit = userpref.edit - split = layout.split() - col = split.column() - sub = col.split(percentage=0.85) + row = layout.row() - sub1 = sub.column() - sub1.label(text="Link Materials To:") - sub1.row().prop(edit, "material_link", expand=True) - sub1.separator() - sub1.separator() - sub1.separator() - sub1.label(text="New Objects:") - sub1.prop(edit, "enter_edit_mode") - sub1.label(text="Align To:") - sub1.row().prop(edit, "object_align", expand=True) - sub1.separator() - sub1.separator() - sub1.separator() - sub1.label(text="Undo:") - sub1.prop(edit, "global_undo") - sub1.prop(edit, "undo_steps", text="Steps") - sub1.prop(edit, "undo_memory_limit", text="Memory Limit") + col = row.column() + col.label(text="Link Materials To:") + col.row().prop(edit, "material_link", expand=True) - col = split.column() - sub = col.split(percentage=0.85) + col.separator() + col.separator() + col.separator() - sub1 = sub.column() - sub1.label(text="Snap:") - sub1.prop(edit, "snap_translate", text="Translate") - sub1.prop(edit, "snap_rotate", text="Rotate") - sub1.prop(edit, "snap_scale", text="Scale") - sub1.separator() - sub1.separator() - sub1.separator() - sub1.label(text="Grease Pencil:") - sub1.prop(edit, "grease_pencil_manhattan_distance", text="Manhattan Distance") - sub1.prop(edit, "grease_pencil_euclidean_distance", text="Euclidean Distance") - # sub1.prop(edit, "grease_pencil_simplify_stroke", text="Simplify Stroke") - sub1.prop(edit, "grease_pencil_eraser_radius", text="Eraser Radius") - sub1.prop(edit, "grease_pencil_smooth_stroke", text="Smooth Stroke") + col.label(text="New Objects:") + col.prop(edit, "enter_edit_mode") + col.label(text="Align To:") + col.row().prop(edit, "object_align", expand=True) - col = split.column() - sub = col.split(percentage=0.85) + col.separator() + col.separator() + col.separator() - sub1 = sub.column() - sub1.label(text="Keyframing:") - sub1.prop(edit, "use_visual_keying") - sub1.prop(edit, "keyframe_insert_needed", text="Only Insert Needed") - sub1.separator() - sub1.label(text="New F-Curve Defaults:") - sub1.prop(edit, "new_interpolation_type", text="Interpolation") - sub1.separator() - sub1.prop(edit, "auto_keying_enable", text="Auto Keyframing:") - sub2 = sub1.column() - sub2.active = edit.auto_keying_enable - sub2.prop(edit, "auto_keyframe_insert_keyingset", text="Only Insert for Keying Set") - sub2.prop(edit, "auto_keyframe_insert_available", text="Only Insert Available") + col.label(text="Undo:") + col.prop(edit, "global_undo") + col.prop(edit, "undo_steps", text="Steps") + col.prop(edit, "undo_memory_limit", text="Memory Limit") - sub1.separator() - sub1.separator() - sub1.separator() - sub1.label(text="Transform:") - sub1.prop(edit, "drag_immediately") + row.separator() + row.separator() - sub1.separator() - sub1.separator() - sub1.separator() - col = split.column() - sub = col.split(percentage=0.85) + col = row.column() + col.label(text="Snap:") + col.prop(edit, "snap_translate", text="Translate") + col.prop(edit, "snap_rotate", text="Rotate") + col.prop(edit, "snap_scale", text="Scale") + col.separator() + col.separator() + col.separator() + col.label(text="Grease Pencil:") + col.prop(edit, "grease_pencil_manhattan_distance", text="Manhattan Distance") + col.prop(edit, "grease_pencil_euclidean_distance", text="Euclidean Distance") + #col.prop(edit, "grease_pencil_simplify_stroke", text="Simplify Stroke") + col.prop(edit, "grease_pencil_eraser_radius", text="Eraser Radius") + col.prop(edit, "grease_pencil_smooth_stroke", text="Smooth Stroke") - sub1 = sub.column() - sub1.label(text="Duplicate Data:") - sub1.prop(edit, "duplicate_mesh", text="Mesh") - sub1.prop(edit, "duplicate_surface", text="Surface") - sub1.prop(edit, "duplicate_curve", text="Curve") - sub1.prop(edit, "duplicate_text", text="Text") - sub1.prop(edit, "duplicate_metaball", text="Metaball") - sub1.prop(edit, "duplicate_armature", text="Armature") - sub1.prop(edit, "duplicate_lamp", text="Lamp") - sub1.prop(edit, "duplicate_material", text="Material") - sub1.prop(edit, "duplicate_texture", text="Texture") - sub1.prop(edit, "duplicate_fcurve", text="F-Curve") - sub1.prop(edit, "duplicate_action", text="Action") - sub1.prop(edit, "duplicate_particle", text="Particle") + + row.separator() + row.separator() + + + col = row.column() + col.label(text="Keyframing:") + col.prop(edit, "use_visual_keying") + col.prop(edit, "keyframe_insert_needed", text="Only Insert Needed") + + col.separator() + + col.label(text="New F-Curve Defaults:") + col.prop(edit, "new_interpolation_type", text="Interpolation") + col.prop(edit, "insertkey_xyz_to_rgb", text="XYZ to RGB") + + col.separator() + + col.prop(edit, "auto_keying_enable", text="Auto Keyframing:") + + sub = col.column() + + sub.active = edit.auto_keying_enable + sub.prop(edit, "auto_keyframe_insert_keyingset", text="Only Insert for Keying Set") + sub.prop(edit, "auto_keyframe_insert_available", text="Only Insert Available") + + col.separator() + col.separator() + col.separator() + + col.label(text="Transform:") + col.prop(edit, "drag_immediately") + + + row.separator() + row.separator() + + + col = row.column() + col.label(text="Duplicate Data:") + col.prop(edit, "duplicate_mesh", text="Mesh") + col.prop(edit, "duplicate_surface", text="Surface") + col.prop(edit, "duplicate_curve", text="Curve") + col.prop(edit, "duplicate_text", text="Text") + col.prop(edit, "duplicate_metaball", text="Metaball") + col.prop(edit, "duplicate_armature", text="Armature") + col.prop(edit, "duplicate_lamp", text="Lamp") + col.prop(edit, "duplicate_material", text="Material") + col.prop(edit, "duplicate_texture", text="Texture") + col.prop(edit, "duplicate_fcurve", text="F-Curve") + col.prop(edit, "duplicate_action", text="Action") + col.prop(edit, "duplicate_particle", text="Particle") class USERPREF_PT_system(bpy.types.Panel): @@ -270,106 +350,159 @@ class USERPREF_PT_system(bpy.types.Panel): split = layout.split() - col = split.column() - sub = col.split(percentage=0.9) + column = split.column() + colsplit = column.split(percentage=0.85) - sub1 = sub.column() - sub1.label(text="General:") - sub1.prop(system, "dpi") - sub1.prop(system, "frame_server_port") - sub1.prop(system, "scrollback", text="Console Scrollback") - sub1.prop(system, "auto_run_python_scripts") + col = colsplit.column() + col.label(text="General:") + col.prop(system, "dpi") + col.prop(system, "frame_server_port") + col.prop(system, "scrollback", text="Console Scrollback") + col.prop(system, "auto_run_python_scripts") - sub1.separator() - sub1.separator() - sub1.separator() + col.separator() + col.separator() + col.separator() - sub1.label(text="Sound:") - sub1.row().prop(system, "audio_device", expand=True) - sub2 = sub1.column() - sub2.active = system.audio_device != 'NONE' - sub2.prop(system, "enable_all_codecs") - sub2.prop(system, "game_sound") - sub2.prop(system, "audio_channels", text="Channels") - sub2.prop(system, "audio_mixing_buffer", text="Mixing Buffer") - sub2.prop(system, "audio_sample_rate", text="Sample Rate") - sub2.prop(system, "audio_sample_format", text="Sample Format") + col.label(text="Sound:") + col.row().prop(system, "audio_device", expand=True) + sub = col.column() + sub.active = system.audio_device != 'NONE' + #sub.prop(system, "enable_all_codecs") + sub.prop(system, "game_sound") + sub.prop(system, "audio_channels", text="Channels") + sub.prop(system, "audio_mixing_buffer", text="Mixing Buffer") + sub.prop(system, "audio_sample_rate", text="Sample Rate") + sub.prop(system, "audio_sample_format", text="Sample Format") + + col.separator() + col.separator() + col.separator() + + + + #column = split.column() + #colsplit = column.split(percentage=0.85) + + # No translation in 2.5 yet + #col.prop(system, "language") + #col.label(text="Translate:") + #col.prop(system, "translate_tooltips", text="Tooltips") + #col.prop(system, "translate_buttons", text="Labels") + #col.prop(system, "translate_toolbox", text="Toolbox") + + #col.separator() + + #col.prop(system, "use_textured_fonts") + + column = split.column() + colsplit = column.split(percentage=0.85) + + col = colsplit.column() + col.label(text="OpenGL:") + col.prop(system, "clip_alpha", slider=True) + col.prop(system, "use_mipmaps") + col.prop(system, "use_vbos") + col.label(text="Window Draw Method:") + col.row().prop(system, "window_draw_method", expand=True) + col.label(text="Textures:") + col.prop(system, "gl_texture_limit", text="Limit Size") + col.prop(system, "texture_time_out", text="Time Out") + col.prop(system, "texture_collection_rate", text="Collection Rate") + + col.separator() + col.separator() + col.separator() + + col.label(text="Sequencer:") + col.prop(system, "prefetch_frames") + col.prop(system, "memory_cache_limit") + + column = split.column() + + column.label(text="Solid OpenGL lights:") + + split = column.split(percentage=0.1) + split.label() + split.label(text="Colors:") + split.label(text="Direction:") + + + split = column.split(percentage=0.1) + + if lamp0.enabled == True: + split.prop(lamp0, "enabled", text="", icon='OUTLINER_OB_LAMP') + else: + split.prop(lamp0, "enabled", text="", icon='LAMP_DATA') col = split.column() - sub = col.split(percentage=0.9) - - sub1 = sub .column() - sub1.label(text="Weight Colors:") - sub1.prop(system, "use_weight_color_range", text="Use Custom Range") - sub2 = sub1.column() - sub2.active = system.use_weight_color_range - sub2.template_color_ramp(system, "weight_color_range", expand=True) - - sub1.separator() - sub1.separator() - sub1.separator() - - sub1.prop(system, "language") - sub1.label(text="Translate:") - sub1.prop(system, "translate_tooltips", text="Tooltips") - sub1.prop(system, "translate_buttons", text="Labels") - sub1.prop(system, "translate_toolbox", text="Toolbox") - - sub1.separator() - - sub1.prop(system, "use_textured_fonts") + col.active = lamp0.enabled + row = col.row() + row.label(text="Diffuse:") + row.prop(lamp0, "diffuse_color", text="") + row = col.row() + row.label(text="Specular:") + row.prop(lamp0, "specular_color", text="") col = split.column() - sub = col.split(percentage=0.9) + col.active = lamp0.enabled + col.prop(lamp0, "direction", text="") - sub1 = sub.column() - sub1.label(text="Solid OpenGL lights:") + split = column.split(percentage=0.1) - sub2 = sub1.split() + if lamp1.enabled == True: + split.prop(lamp1, "enabled", text="", icon='OUTLINER_OB_LAMP') + else: + split.prop(lamp1, "enabled", text="", icon='LAMP_DATA') - col = sub2.column() - col.prop(lamp0, "enabled") + col = split.column() + col.active = lamp1.enabled + row = col.row() + row.label(text="Diffuse:") + row.prop(lamp1, "diffuse_color", text="") + row = col.row() + row.label(text="Specular:") + row.prop(lamp1, "specular_color", text="") + + col = split.column() + col.active = lamp1.enabled + col.prop(lamp1, "direction", text="") + + + split = column.split(percentage=0.1) + + if lamp2.enabled == True: + split.prop(lamp2, "enabled", text="", icon='OUTLINER_OB_LAMP') + else: + split.prop(lamp2, "enabled", text="", icon='LAMP_DATA') + + col = split.column() + col.active = lamp2.enabled + row = col.row() + row.label(text="Diffuse:") + row.prop(lamp2, "diffuse_color", text="") + row = col.row() + row.label(text="Specular:") + row.prop(lamp2, "specular_color", text="") + + col = split.column() + col.active = lamp2.enabled + col.prop(lamp2, "direction", text="") + + + column.separator() + column.separator() + column.separator() + + col = column.column() + + col.prop(system, "use_weight_color_range", text="Custom Weight Paint Range") sub = col.column() - sub.active = lamp0.enabled - sub.prop(lamp0, "diffuse_color") - sub.prop(lamp0, "specular_color") - sub.prop(lamp0, "direction") + sub.active = system.use_weight_color_range + sub.template_color_ramp(system, "weight_color_range", expand=True) - col = sub2.column() - col.prop(lamp1, "enabled") - sub = col.column() - sub.active = lamp1.enabled - sub.prop(lamp1, "diffuse_color") - sub.prop(lamp1, "specular_color") - sub.prop(lamp1, "direction") - col = sub2.column() - col.prop(lamp2, "enabled") - sub = col.column() - sub.active = lamp2.enabled - sub.prop(lamp2, "diffuse_color") - sub.prop(lamp2, "specular_color") - sub.prop(lamp2, "direction") - - sub1.label(text="OpenGL:") - sub1.prop(system, "clip_alpha", slider=True) - sub1.prop(system, "use_mipmaps") - sub1.prop(system, "use_vbos") - sub1.label(text="Window Draw Method:") - sub1.row().prop(system, "window_draw_method", expand=True) - sub1.label(text="Textures:") - sub1.prop(system, "gl_texture_limit", text="Limit Size") - sub1.prop(system, "texture_time_out", text="Time Out") - sub1.prop(system, "texture_collection_rate", text="Collection Rate") - - sub1.separator() - sub1.separator() - sub1.separator() - - sub1.label(text="Sequencer:") - sub1.prop(system, "prefetch_frames") - sub1.prop(system, "memory_cache_limit") class USERPREF_PT_theme(bpy.types.Panel): @@ -380,7 +513,6 @@ class USERPREF_PT_theme(bpy.types.Panel): def poll(self, context): userpref = context.user_preferences - return (userpref.active_section == 'THEMES') def draw(self, context): @@ -388,7 +520,6 @@ class USERPREF_PT_theme(bpy.types.Panel): theme = context.user_preferences.themes[0] - split = layout.split(percentage=0.33) split.prop(theme, "active_theme", text="") @@ -413,7 +544,6 @@ class USERPREF_PT_theme(bpy.types.Panel): col.prop(v3d, "editmesh_active", slider=True) col = split.column() - col.prop(v3d, "object_selected") col.prop(v3d, "object_active") col.prop(v3d, "object_grouped") @@ -426,327 +556,326 @@ class USERPREF_PT_theme(bpy.types.Panel): col.prop(v3d, "normal") col.prop(v3d, "bone_solid") col.prop(v3d, "bone_pose") + #col.prop(v3d, "edge") Doesn't seem to work -# col.prop(v3d, "edge") Doesn't seem to work elif theme.active_theme == 'USER_INTERFACE': - ui = theme.user_interface.wcol_regular - layout.label(text="Regular:") - sub = layout.row() - sub1 = sub.column() - sub1.prop(ui, "outline") - sub1.prop(ui, "item", slider=True) - sub1 = sub.column() - sub1.prop(ui, "inner", slider=True) - sub1.prop(ui, "inner_sel", slider=True) - sub1 = sub.column() - sub1.prop(ui, "text") - sub1.prop(ui, "text_sel") - sub1 = sub.column() - sub1.prop(ui, "shaded") - sub2 = sub1.column(align=True) - sub2.active = ui.shaded - sub2.prop(ui, "shadetop") - sub2.prop(ui, "shadedown") + row = layout.row() + sub = row.column() + sub.prop(ui, "outline") + sub.prop(ui, "item", slider=True) + sub = row.column() + sub.prop(ui, "inner", slider=True) + sub.prop(ui, "inner_sel", slider=True) + sub = row.column() + sub.prop(ui, "text") + sub.prop(ui, "text_sel") + sub = row.column() + sub.prop(ui, "shaded") + subsub = sub.column(align=True) + subsub.active = ui.shaded + subsub.prop(ui, "shadetop") + subsub.prop(ui, "shadedown") + layout.separator() ui = theme.user_interface.wcol_tool layout.label(text="Tool:") - sub = layout.row() - sub1 = sub.column() - sub1.prop(ui, "outline") - sub1.prop(ui, "item", slider=True) - sub1 = sub.column() - sub1.prop(ui, "inner", slider=True) - sub1.prop(ui, "inner_sel", slider=True) - sub1 = sub.column() - sub1.prop(ui, "text") - sub1.prop(ui, "text_sel") - sub1 = sub.column() - sub1.prop(ui, "shaded") - sub2 = sub1.column(align=True) - sub2.active = ui.shaded - sub2.prop(ui, "shadetop") - sub2.prop(ui, "shadedown") + row = layout.row() + sub = row.column() + sub.prop(ui, "outline") + sub.prop(ui, "item", slider=True) + sub = row.column() + sub.prop(ui, "inner", slider=True) + sub.prop(ui, "inner_sel", slider=True) + sub = row.column() + sub.prop(ui, "text") + sub.prop(ui, "text_sel") + sub = row.column() + sub.prop(ui, "shaded") + subsub = sub.column(align=True) + subsub.active = ui.shaded + subsub.prop(ui, "shadetop") + subsub.prop(ui, "shadedown") ui = theme.user_interface.wcol_radio layout.label(text="Radio Buttons:") - sub = layout.row() - sub1 = sub.column() - sub1.prop(ui, "outline") - sub1.prop(ui, "item", slider=True) - sub1 = sub.column() - sub1.prop(ui, "inner", slider=True) - sub1.prop(ui, "inner_sel", slider=True) - sub1 = sub.column() - sub1.prop(ui, "text") - sub1.prop(ui, "text_sel") - sub1 = sub.column() - sub1.prop(ui, "shaded") - sub2 = sub1.column(align=True) - sub2.active = ui.shaded - sub2.prop(ui, "shadetop") - sub2.prop(ui, "shadedown") + row = layout.row() + sub = row.column() + sub.prop(ui, "outline") + sub.prop(ui, "item", slider=True) + sub = row.column() + sub.prop(ui, "inner", slider=True) + sub.prop(ui, "inner_sel", slider=True) + sub = row.column() + sub.prop(ui, "text") + sub.prop(ui, "text_sel") + sub = row.column() + sub.prop(ui, "shaded") + subsub = sub.column(align=True) + subsub.active = ui.shaded + subsub.prop(ui, "shadetop") + subsub.prop(ui, "shadedown") ui = theme.user_interface.wcol_text layout.label(text="Text:") - sub = layout.row() - sub1 = sub.column() - sub1.prop(ui, "outline") - sub1.prop(ui, "item", slider=True) - sub1 = sub.column() - sub1.prop(ui, "inner", slider=True) - sub1.prop(ui, "inner_sel", slider=True) - sub1 = sub.column() - sub1.prop(ui, "text") - sub1.prop(ui, "text_sel") - sub1 = sub.column() - sub1.prop(ui, "shaded") - sub2 = sub1.column(align=True) - sub2.active = ui.shaded - sub2.prop(ui, "shadetop") - sub2.prop(ui, "shadedown") + row = layout.row() + sub = row.column() + sub.prop(ui, "outline") + sub.prop(ui, "item", slider=True) + sub = row.column() + sub.prop(ui, "inner", slider=True) + sub.prop(ui, "inner_sel", slider=True) + sub = row.column() + sub.prop(ui, "text") + sub.prop(ui, "text_sel") + sub = row.column() + sub.prop(ui, "shaded") + subsub = sub.column(align=True) + subsub.active = ui.shaded + subsub.prop(ui, "shadetop") + subsub.prop(ui, "shadedown") ui = theme.user_interface.wcol_option layout.label(text="Option:") - sub = layout.row() - sub1 = sub.column() - sub1.prop(ui, "outline") - sub1.prop(ui, "item", slider=True) - sub1 = sub.column() - sub1.prop(ui, "inner", slider=True) - sub1.prop(ui, "inner_sel", slider=True) - sub1 = sub.column() - sub1.prop(ui, "text") - sub1.prop(ui, "text_sel") - sub1 = sub.column() - sub1.prop(ui, "shaded") - sub2 = sub1.column(align=True) - sub2.active = ui.shaded - sub2.prop(ui, "shadetop") - sub2.prop(ui, "shadedown") + row = layout.row() + sub = row.column() + sub.prop(ui, "outline") + sub.prop(ui, "item", slider=True) + sub = row.column() + sub.prop(ui, "inner", slider=True) + sub.prop(ui, "inner_sel", slider=True) + sub = row.column() + sub.prop(ui, "text") + sub.prop(ui, "text_sel") + sub = row.column() + sub.prop(ui, "shaded") + subsub = sub.column(align=True) + subsub.active = ui.shaded + subsub.prop(ui, "shadetop") + subsub.prop(ui, "shadedown") ui = theme.user_interface.wcol_toggle layout.label(text="Toggle:") - sub = layout.row() - sub1 = sub.column() - sub1.prop(ui, "outline") - sub1.prop(ui, "item", slider=True) - sub1 = sub.column() - sub1.prop(ui, "inner", slider=True) - sub1.prop(ui, "inner_sel", slider=True) - sub1 = sub.column() - sub1.prop(ui, "text") - sub1.prop(ui, "text_sel") - sub1 = sub.column() - sub1.prop(ui, "shaded") - sub2 = sub1.column(align=True) - sub2.active = ui.shaded - sub2.prop(ui, "shadetop") - sub2.prop(ui, "shadedown") + row = layout.row() + sub = row.column() + sub.prop(ui, "outline") + sub.prop(ui, "item", slider=True) + sub = row.column() + sub.prop(ui, "inner", slider=True) + sub.prop(ui, "inner_sel", slider=True) + sub = row.column() + sub.prop(ui, "text") + sub.prop(ui, "text_sel") + sub = row.column() + sub.prop(ui, "shaded") + subsub = sub.column(align=True) + subsub.active = ui.shaded + subsub.prop(ui, "shadetop") + subsub.prop(ui, "shadedown") ui = theme.user_interface.wcol_num layout.label(text="Number Field:") - sub = layout.row() - sub1 = sub.column() - sub1.prop(ui, "outline") - sub1.prop(ui, "item", slider=True) - sub1 = sub.column() - sub1.prop(ui, "inner", slider=True) - sub1.prop(ui, "inner_sel", slider=True) - sub1 = sub.column() - sub1.prop(ui, "text") - sub1.prop(ui, "text_sel") - sub1 = sub.column() - sub1.prop(ui, "shaded") - sub2 = sub1.column(align=True) - sub2.active = ui.shaded - sub2.prop(ui, "shadetop") - sub2.prop(ui, "shadedown") + row = layout.row() + sub = row.column() + sub.prop(ui, "outline") + sub.prop(ui, "item", slider=True) + sub = row.column() + sub.prop(ui, "inner", slider=True) + sub.prop(ui, "inner_sel", slider=True) + sub = row.column() + sub.prop(ui, "text") + sub.prop(ui, "text_sel") + sub = row.column() + sub.prop(ui, "shaded") + subsub = sub.column(align=True) + subsub.active = ui.shaded + subsub.prop(ui, "shadetop") + subsub.prop(ui, "shadedown") ui = theme.user_interface.wcol_numslider layout.label(text="Value Slider:") - sub = layout.row() - sub1 = sub.column() - sub1.prop(ui, "outline") - sub1.prop(ui, "item", slider=True) - sub1 = sub.column() - sub1.prop(ui, "inner", slider=True) - sub1.prop(ui, "inner_sel", slider=True) - sub1 = sub.column() - sub1.prop(ui, "text") - sub1.prop(ui, "text_sel") - sub1 = sub.column() - sub1.prop(ui, "shaded") - sub2 = sub1.column(align=True) - sub2.active = ui.shaded - sub2.prop(ui, "shadetop") - sub2.prop(ui, "shadedown") + row = layout.row() + sub = row.column() + sub.prop(ui, "outline") + sub.prop(ui, "item", slider=True) + sub = row.column() + sub.prop(ui, "inner", slider=True) + sub.prop(ui, "inner_sel", slider=True) + sub = row.column() + sub.prop(ui, "text") + sub.prop(ui, "text_sel") + sub = row.column() + sub.prop(ui, "shaded") + subsub = sub.column(align=True) + subsub.active = ui.shaded + subsub.prop(ui, "shadetop") + subsub.prop(ui, "shadedown") ui = theme.user_interface.wcol_box layout.label(text="Box:") - sub = layout.row() - sub1 = sub.column() - sub1.prop(ui, "outline") - sub1.prop(ui, "item", slider=True) - sub1 = sub.column() - sub1.prop(ui, "inner", slider=True) - sub1.prop(ui, "inner_sel", slider=True) - sub1 = sub.column() - sub1.prop(ui, "text") - sub1.prop(ui, "text_sel") - sub1 = sub.column() - sub1.prop(ui, "shaded") - sub2 = sub1.column(align=True) - sub2.active = ui.shaded - sub2.prop(ui, "shadetop") - sub2.prop(ui, "shadedown") + row = layout.row() + sub = row.column() + sub.prop(ui, "outline") + sub.prop(ui, "item", slider=True) + sub = row.column() + sub.prop(ui, "inner", slider=True) + sub.prop(ui, "inner_sel", slider=True) + sub = row.column() + sub.prop(ui, "text") + sub.prop(ui, "text_sel") + sub = row.column() + sub.prop(ui, "shaded") + subsub = sub.column(align=True) + subsub.active = ui.shaded + subsub.prop(ui, "shadetop") + subsub.prop(ui, "shadedown") ui = theme.user_interface.wcol_menu layout.label(text="Menu:") - sub = layout.row() - sub1 = sub.column() - sub1.prop(ui, "outline") - sub1.prop(ui, "item", slider=True) - sub1 = sub.column() - sub1.prop(ui, "inner", slider=True) - sub1.prop(ui, "inner_sel", slider=True) - sub1 = sub.column() - sub1.prop(ui, "text") - sub1.prop(ui, "text_sel") - sub1 = sub.column() - sub1.prop(ui, "shaded") - sub2 = sub1.column(align=True) - sub2.active = ui.shaded - sub2.prop(ui, "shadetop") - sub2.prop(ui, "shadedown") + row = layout.row() + sub = row.column() + sub.prop(ui, "outline") + sub.prop(ui, "item", slider=True) + sub = row.column() + sub.prop(ui, "inner", slider=True) + sub.prop(ui, "inner_sel", slider=True) + sub = row.column() + sub.prop(ui, "text") + sub.prop(ui, "text_sel") + sub = row.column() + sub.prop(ui, "shaded") + subsub = sub.column(align=True) + subsub.active = ui.shaded + subsub.prop(ui, "shadetop") + subsub.prop(ui, "shadedown") ui = theme.user_interface.wcol_pulldown layout.label(text="Pulldown:") - sub = layout.row() - sub1 = sub.column() - sub1.prop(ui, "outline") - sub1.prop(ui, "item", slider=True) - sub1 = sub.column() - sub1.prop(ui, "inner", slider=True) - sub1.prop(ui, "inner_sel", slider=True) - sub1 = sub.column() - sub1.prop(ui, "text") - sub1.prop(ui, "text_sel") - sub1 = sub.column() - sub1.prop(ui, "shaded") - sub2 = sub1.column(align=True) - sub2.active = ui.shaded - sub2.prop(ui, "shadetop") - sub2.prop(ui, "shadedown") + row = layout.row() + sub = row.column() + sub.prop(ui, "outline") + sub.prop(ui, "item", slider=True) + sub = row.column() + sub.prop(ui, "inner", slider=True) + sub.prop(ui, "inner_sel", slider=True) + sub = row.column() + sub.prop(ui, "text") + sub.prop(ui, "text_sel") + sub = row.column() + sub.prop(ui, "shaded") + subsub = sub.column(align=True) + subsub.active = ui.shaded + subsub.prop(ui, "shadetop") + subsub.prop(ui, "shadedown") ui = theme.user_interface.wcol_menu_back layout.label(text="Menu Back:") - sub = layout.row() - sub1 = sub.column() - sub1.prop(ui, "outline") - sub1.prop(ui, "item", slider=True) - sub1 = sub.column() - sub1.prop(ui, "inner", slider=True) - sub1.prop(ui, "inner_sel", slider=True) - sub1 = sub.column() - sub1.prop(ui, "text") - sub1.prop(ui, "text_sel") - sub1 = sub.column() - sub1.prop(ui, "shaded") - sub2 = sub1.column(align=True) - sub2.active = ui.shaded - sub2.prop(ui, "shadetop") - sub2.prop(ui, "shadedown") + row = layout.row() + sub = row.column() + sub.prop(ui, "outline") + sub.prop(ui, "item", slider=True) + sub = row.column() + sub.prop(ui, "inner", slider=True) + sub.prop(ui, "inner_sel", slider=True) + sub = row.column() + sub.prop(ui, "text") + sub.prop(ui, "text_sel") + sub = row.column() + sub.prop(ui, "shaded") + subsub = sub.column(align=True) + subsub.active = ui.shaded + subsub.prop(ui, "shadetop") + subsub.prop(ui, "shadedown") ui = theme.user_interface.wcol_menu_item layout.label(text="Menu Item:") - sub = layout.row() - sub1 = sub.column() - sub1.prop(ui, "outline") - sub1.prop(ui, "item", slider=True) - sub1 = sub.column() - sub1.prop(ui, "inner", slider=True) - sub1.prop(ui, "inner_sel", slider=True) - sub1 = sub.column() - sub1.prop(ui, "text") - sub1.prop(ui, "text_sel") - sub1 = sub.column() - sub1.prop(ui, "shaded") - sub2 = sub1.column(align=True) - sub2.active = ui.shaded - sub2.prop(ui, "shadetop") - sub2.prop(ui, "shadedown") + row = layout.row() + sub = row.column() + sub.prop(ui, "outline") + sub.prop(ui, "item", slider=True) + sub = row.column() + sub.prop(ui, "inner", slider=True) + sub.prop(ui, "inner_sel", slider=True) + sub = row.column() + sub.prop(ui, "text") + sub.prop(ui, "text_sel") + sub = row.column() + sub.prop(ui, "shaded") + subsub = sub.column(align=True) + subsub.active = ui.shaded + subsub.prop(ui, "shadetop") + subsub.prop(ui, "shadedown") ui = theme.user_interface.wcol_scroll layout.label(text="Scroll Bar:") - sub = layout.row() - sub1 = sub.column() - sub1.prop(ui, "outline") - sub1.prop(ui, "item", slider=True) - sub1 = sub.column() - sub1.prop(ui, "inner", slider=True) - sub1.prop(ui, "inner_sel", slider=True) - sub1 = sub.column() - sub1.prop(ui, "text") - sub1.prop(ui, "text_sel") - sub1 = sub.column() - sub1.prop(ui, "shaded") - sub2 = sub1.column(align=True) - sub2.active = ui.shaded - sub2.prop(ui, "shadetop") - sub2.prop(ui, "shadedown") + row = layout.row() + sub = row.column() + sub.prop(ui, "outline") + sub.prop(ui, "item", slider=True) + sub = row.column() + sub.prop(ui, "inner", slider=True) + sub.prop(ui, "inner_sel", slider=True) + sub = row.column() + sub.prop(ui, "text") + sub.prop(ui, "text_sel") + sub = row.column() + sub.prop(ui, "shaded") + subsub = sub.column(align=True) + subsub.active = ui.shaded + subsub.prop(ui, "shadetop") + subsub.prop(ui, "shadedown") ui = theme.user_interface.wcol_list_item layout.label(text="List Item:") - sub = layout.row() - sub1 = sub.column() - sub1.prop(ui, "outline") - sub1.prop(ui, "item", slider=True) - sub1 = sub.column() - sub1.prop(ui, "inner", slider=True) - sub1.prop(ui, "inner_sel", slider=True) - sub1 = sub.column() - sub1.prop(ui, "text") - sub1.prop(ui, "text_sel") - sub1 = sub.column() - sub1.prop(ui, "shaded") - sub2 = sub1.column(align=True) - sub2.active = ui.shaded - sub2.prop(ui, "shadetop") - sub2.prop(ui, "shadedown") + row = layout.row() + sub = row.column() + sub.prop(ui, "outline") + sub.prop(ui, "item", slider=True) + sub = row.column() + sub.prop(ui, "inner", slider=True) + sub.prop(ui, "inner_sel", slider=True) + sub = row.column() + sub.prop(ui, "text") + sub.prop(ui, "text_sel") + sub = row.column() + sub.prop(ui, "shaded") + subsub = sub.column(align=True) + subsub.active = ui.shaded + subsub.prop(ui, "shadetop") + subsub.prop(ui, "shadedown") ui = theme.user_interface.wcol_state layout.label(text="State:") - sub = layout.row() - sub1 = sub.column() - sub1.prop(ui, "inner_anim") - sub1.prop(ui, "inner_anim_sel") - sub1 = sub.column() - sub1.prop(ui, "inner_driven") - sub1.prop(ui, "inner_driven_sel") - sub1 = sub.column() - sub1.prop(ui, "inner_key") - sub1.prop(ui, "inner_key_sel") - sub1 = sub.column() - sub1.prop(ui, "blend") + row = layout.row() + sub = row.column() + sub.prop(ui, "inner_anim") + sub.prop(ui, "inner_anim_sel") + sub = row.column() + sub.prop(ui, "inner_driven") + sub.prop(ui, "inner_driven_sel") + sub = row.column() + sub.prop(ui, "inner_key") + sub.prop(ui, "inner_key_sel") + sub = row.column() + sub.prop(ui, "blend") ui = theme.user_interface layout.separator() @@ -966,7 +1095,6 @@ class USERPREF_PT_theme(bpy.types.Panel): col.prop(node, "button_title") col.prop(node, "button_text") - col = split.column() col.prop(node, "text") col.prop(node, "text_hi") @@ -1063,56 +1191,57 @@ class USERPREF_PT_file(bpy.types.Panel): userpref = context.user_preferences paths = userpref.filepaths - split = layout.split(percentage=0.6) + split = layout.split(percentage=0.7) col = split.column() col.label(text="File Paths:") - sub = col.split(percentage=0.3) + colsplit = col.split(percentage=0.95) + col1 = colsplit.split(percentage=0.3) + + sub = col1.column() sub.label(text="Fonts:") - sub.prop(paths, "fonts_directory", text="") - sub = col.split(percentage=0.3) sub.label(text="Textures:") - sub.prop(paths, "textures_directory", text="") - sub = col.split(percentage=0.3) sub.label(text="Texture Plugins:") - sub.prop(paths, "texture_plugin_directory", text="") - sub = col.split(percentage=0.3) sub.label(text="Sequence Plugins:") - sub.prop(paths, "sequence_plugin_directory", text="") - sub = col.split(percentage=0.3) sub.label(text="Render Output:") - sub.prop(paths, "render_output_directory", text="") - sub = col.split(percentage=0.3) sub.label(text="Scripts:") - sub.prop(paths, "python_scripts_directory", text="") - sub = col.split(percentage=0.3) sub.label(text="Sounds:") - sub.prop(paths, "sounds_directory", text="") - sub = col.split(percentage=0.3) sub.label(text="Temp:") + sub.label(text="Animation Player:") + + sub = col1.column() + sub.prop(paths, "fonts_directory", text="") + sub.prop(paths, "textures_directory", text="") + sub.prop(paths, "texture_plugin_directory", text="") + sub.prop(paths, "sequence_plugin_directory", text="") + sub.prop(paths, "render_output_directory", text="") + sub.prop(paths, "python_scripts_directory", text="") + sub.prop(paths, "sounds_directory", text="") sub.prop(paths, "temporary_directory", text="") + subsplit = sub.split(percentage=0.3) + subsplit.prop(paths, "animation_player_preset", text="") + subsplit.prop(paths, "animation_player", text="") col = split.column() - sub = col.split(percentage=0.2) - sub.column() # sub1, unused - sub2 = sub.column() - sub2.label(text="Save & Load:") - sub2.prop(paths, "use_relative_paths") - sub2.prop(paths, "compress_file") - sub2.prop(paths, "load_ui") - sub2.prop(paths, "filter_file_extensions") - sub2.prop(paths, "hide_dot_files_datablocks") - sub2.separator() - sub2.separator() - sub2.label(text="Auto Save:") - sub2.prop(paths, "save_version") - sub2.prop(paths, "recent_files") - sub2.prop(paths, "save_preview_images") - sub2.prop(paths, "auto_save_temporary_files") - sub3 = sub2.column() - sub3.enabled = paths.auto_save_temporary_files - sub3.prop(paths, "auto_save_time", text="Timer (mins)") + col.label(text="Save & Load:") + col.prop(paths, "use_relative_paths") + col.prop(paths, "compress_file") + col.prop(paths, "load_ui") + col.prop(paths, "filter_file_extensions") + col.prop(paths, "hide_dot_files_datablocks") + + col.separator() + col.separator() + + col.label(text="Auto Save:") + col.prop(paths, "save_version") + col.prop(paths, "recent_files") + col.prop(paths, "save_preview_images") + col.prop(paths, "auto_save_temporary_files") + sub = col.column() + sub.enabled = paths.auto_save_temporary_files + sub.prop(paths, "auto_save_time", text="Timer (mins)") class USERPREF_PT_input(bpy.types.Panel): @@ -1125,27 +1254,172 @@ class USERPREF_PT_input(bpy.types.Panel): userpref = context.user_preferences return (userpref.active_section == 'INPUT') - def draw(self, context): - layout = self.layout + def draw_entry(self, kc, entry, col, level = 0): + idname, spaceid, regionid, children = entry - userpref = context.user_preferences - wm = context.manager - #input = userpref.input - #input = userpref - inputs = userpref.inputs + km = kc.find_keymap(idname, space_type = spaceid, region_type = regionid) - split = layout.split(percentage=0.25) + if km: + self.draw_km(kc, km, children, col, level) - # General settings + def indented_layout(self, layout, level): + indentpx = 16 + if level == 0: + level = 0.0001 # Tweak so that a percentage of 0 won't split by half + indent = level*indentpx / bpy.context.region.width + + split=layout.split(percentage=indent) + col = split.column() + col = split.column() + return col + + def draw_km(self, kc, km, children, layout, level): + km = km.active() + + layout.set_context_pointer("keymap", km) + + col = self.indented_layout(layout, level) + + row = col.row() + row.prop(km, "children_expanded", text="", no_bg=True) + row.label(text=km.name) + + row.label() + row.label() + + if km.user_defined: + row.operator("wm.keymap_restore", text="Restore") + else: + row.operator("wm.keymap_edit", text="Edit") + + if km.children_expanded: + if children: + # Put the Parent key map's entries in a 'global' sub-category + # equal in hierarchy to the other children categories + subcol = self.indented_layout(col, level + 1) + subrow = subcol.row() + subrow.prop(km, "items_expanded", text="", no_bg=True) + subrow.label(text="%s (Global)" % km.name) + else: + km.items_expanded = True + + # Key Map items + if km.items_expanded: + for kmi in km.items: + self.draw_kmi(kc, km, kmi, col, level + 1) + + # "Add New" at end of keymap item list + col = self.indented_layout(col, level+1) + subcol = col.split(percentage=0.2).column() + subcol.active = km.user_defined + subcol.operator("wm.keyitem_add", text="Add New", icon='ZOOMIN') + + col.separator() + + # Child key maps + if children: + subcol = col.column() + row = subcol.row() + + for entry in children: + self.draw_entry(kc, entry, col, level + 1) + + + def draw_kmi(self, kc, km, kmi, layout, level): + layout.set_context_pointer("keyitem", kmi) + + col = self.indented_layout(layout, level) + + col.enabled = km.user_defined + + if km.user_defined: + col = col.column(align=True) + box = col.box() + else: + box = col.column() + + split = box.split(percentage=0.4) + + # header bar row = split.row() + row.prop(kmi, "expanded", text="", no_bg=True) + row.prop(kmi, "active", text="", no_bg=True) + + if km.modal: + row.prop(kmi, "propvalue", text="") + else: + row.label(text=kmi.name) + + row = split.row() + row.prop(kmi, "map_type", text="") + if kmi.map_type == 'KEYBOARD': + row.prop(kmi, "type", text="", full_event=True) + elif kmi.map_type == 'MOUSE': + row.prop(kmi, "type", text="", full_event=True) + elif kmi.map_type == 'TWEAK': + subrow = row.row() + subrow.prop(kmi, "type", text="") + subrow.prop(kmi, "value", text="") + elif kmi.map_type == 'TIMER': + row.prop(kmi, "type", text="") + else: + row.label() + + row.operator("wm.keyitem_restore", text="", icon='BACK') + row.operator("wm.keyitem_remove", text="", icon='X') + + # Expanded, additional event settings + if kmi.expanded: + box = col.box() + + if kmi.map_type not in ('TEXTINPUT', 'TIMER'): + split = box.split(percentage=0.4) + sub = split.row() + + if km.modal: + sub.prop(kmi, "propvalue", text="") + else: + sub.prop(kmi, "idname", text="") + + sub = split.column() + subrow = sub.row(align=True) + + if kmi.map_type == 'KEYBOARD': + subrow.prop(kmi, "type", text="", event=True) + subrow.prop(kmi, "value", text="") + elif kmi.map_type == 'MOUSE': + subrow.prop(kmi, "type", text="") + subrow.prop(kmi, "value", text="") + + subrow = sub.row() + subrow.scale_x = 0.75 + subrow.prop(kmi, "any") + subrow.prop(kmi, "shift") + subrow.prop(kmi, "ctrl") + subrow.prop(kmi, "alt") + subrow.prop(kmi, "oskey", text="Cmd") + subrow.prop(kmi, "key_modifier", text="", event=True) + + # Operator properties + props = kmi.properties + if props is not None: + box.separator() + flow = box.column_flow(columns=2) + for pname in dir(props): + if not props.is_property_hidden(pname): + flow.prop(props, pname) + + # Modal key maps attached to this operator + if not km.modal: + kmm = kc.find_keymap_modal(kmi.idname) + if kmm: + self.draw_km(kc, kmm, None, layout, level + 1) + + def draw_input_prefs(self, inputs, layout): + # General settings + row = layout.row() col = row.column() - sub = col.column() - sub.label(text="Configuration:") - sub.prop_object(wm, "active_keyconfig", wm, "keyconfigs", text="") - - col.separator() - sub = col.column() sub.label(text="Mouse:") sub1 = sub.column() @@ -1156,6 +1430,10 @@ class USERPREF_PT_input(bpy.types.Panel): sub.label(text="Select With:") sub.row().prop(inputs, "select_mouse", expand=True) + sub = col.column() + sub.label(text="Double Click:") + sub.prop(inputs, "double_click_time", text="Speed") + sub.separator() sub.prop(inputs, "emulate_numpad") @@ -1188,113 +1466,70 @@ class USERPREF_PT_input(bpy.types.Panel): row.separator() + def draw_filtered(self, kc, layout): + filter = kc.filter.lower() + + for km in kc.keymaps: + filtered_items = [kmi for kmi in km.items if filter in kmi.name.lower()] + + if len(filtered_items) != 0: + km = km.active() + + col = layout.column() + col.set_context_pointer("keymap", km) + row = col.row() + row.label(text=km.name, icon="DOT") + + row.label() + row.label() + + if km.user_defined: + row.operator("wm.keymap_restore", text="Restore") + else: + row.operator("wm.keymap_edit", text="Edit") + + for kmi in filtered_items: + self.draw_kmi(kc, km, kmi, col, 1) + + def draw_hierarchy(self, defkc, layout): + for entry in KM_HIERARCHY: + self.draw_entry(defkc, entry, layout) + + def draw(self, context): + layout = self.layout + + userpref = context.user_preferences + wm = context.manager + + inputs = userpref.inputs + + split = layout.split(percentage=0.25) + + # Input settings + self.draw_input_prefs(inputs, split) + # Keymap Settings col = split.column() - # kc = wm.active_keyconfig - defkc = wm.default_keyconfig - km = wm.active_keymap + kc = wm.default_keyconfig - subsplit = col.split() - subsplit.prop_object(wm, "active_keymap", defkc, "keymaps", text="Map:") - if km.user_defined: - row = subsplit.row() - row.operator("WM_OT_keymap_restore", text="Restore") - row.operator("WM_OT_keymap_restore", text="Restore All").all = True - else: - row = subsplit.row() - row.operator("WM_OT_keymap_edit", text="Edit") - row.label() + sub = col.column() + + subsplit = sub.split() + subcol = subsplit.column() + subcol.prop_object(wm, "active_keyconfig", wm, "keyconfigs", text="Configuration:") + + subcol = subsplit.column() + subcol.prop(kc, "filter", icon="VIEWZOOM") col.separator() - for kmi in km.items: - subcol = col.column() - subcol.set_context_pointer("keyitem", kmi) - - row = subcol.row() - - if kmi.expanded: - row.prop(kmi, "expanded", text="", icon='ICON_TRIA_DOWN') - else: - row.prop(kmi, "expanded", text="", icon='ICON_TRIA_RIGHT') - - itemrow = row.row() - itemrow.enabled = km.user_defined - if kmi.active: - itemrow.prop(kmi, "active", text="", icon='ICON_CHECKBOX_HLT') - else: - itemrow.prop(kmi, "active", text="", icon='ICON_CHECKBOX_DEHLT') - - itemcol = itemrow.column() - itemcol.active = kmi.active - row = itemcol.row() - - if km.modal: - row.prop(kmi, "propvalue", text="") - else: - row.prop(kmi, "idname", text="") - - sub = row.row() - sub.scale_x = 0.6 - sub.prop(kmi, "map_type", text="") - - sub = row.row(align=True) - if kmi.map_type == 'KEYBOARD': - sub.prop(kmi, "type", text="", full_event=True) - elif kmi.map_type == 'MOUSE': - sub.prop(kmi, "type", text="", full_event=True) - elif kmi.map_type == 'TWEAK': - sub.scale_x = 0.5 - sub.prop(kmi, "type", text="") - sub.prop(kmi, "value", text="") - elif kmi.map_type == 'TIMER': - sub.prop(kmi, "type", text="") - else: - sub.label() - - if kmi.expanded: - if kmi.map_type not in ('TEXTINPUT', 'TIMER'): - sub = itemcol.row(align=True) - - if kmi.map_type == 'KEYBOARD': - sub.prop(kmi, "type", text="", event=True) - sub.prop(kmi, "value", text="") - elif kmi.map_type == 'MOUSE': - sub.prop(kmi, "type", text="") - sub.prop(kmi, "value", text="") - else: - sub.label() - sub.label() - - subrow = sub.row() - subrow.scale_x = 0.75 - subrow.prop(kmi, "any") - subrow.prop(kmi, "shift") - subrow.prop(kmi, "ctrl") - subrow.prop(kmi, "alt") - subrow.prop(kmi, "oskey", text="Cmd") - sub.prop(kmi, "key_modifier", text="", event=True) - - flow = itemcol.column_flow(columns=2) - props = kmi.properties - - if props is not None: - for pname in dir(props): - if not props.is_property_hidden(pname): - flow.prop(props, pname) - - itemcol.separator() - - itemrow.operator("wm.keyitem_remove", text="", icon='ICON_ZOOMOUT') - - itemrow = col.row() - itemrow.label() - itemrow.operator("wm.keyitem_add", text="", icon='ICON_ZOOMIN') - itemrow.enabled = km.user_defined + if kc.filter != "": + self.draw_filtered(kc, col) + else: + self.draw_hierarchy(kc, col) bpy.types.register(USERPREF_HT_header) -bpy.types.register(USERPREF_MT_view) bpy.types.register(USERPREF_PT_tabs) bpy.types.register(USERPREF_PT_interface) bpy.types.register(USERPREF_PT_theme) @@ -1305,7 +1540,133 @@ bpy.types.register(USERPREF_PT_input) from bpy.props import * +class WM_OT_keyconfig_test(bpy.types.Operator): + "Test keyconfig for conflicts." + bl_idname = "wm.keyconfig_test" + bl_label = "Test Key Configuration for Conflicts" + + def testEntry(self, kc, entry, src = None, parent = None): + result = False + def kmistr(kmi): + if km.modal: + s = ["kmi = km.add_modal_item(\'%s\', \'%s\', \'%s\'" % (kmi.propvalue, kmi.type, kmi.value)] + else: + s = ["kmi = km.add_item(\'%s\', \'%s\', \'%s\'" % (kmi.idname, kmi.type, kmi.value)] + if kmi.any: + s.append(", any=True") + else: + if kmi.shift: + s.append(", shift=True") + if kmi.ctrl: + s.append(", ctrl=True") + if kmi.alt: + s.append(", alt=True") + if kmi.oskey: + s.append(", oskey=True") + if kmi.key_modifier and kmi.key_modifier != 'NONE': + s.append(", key_modifier=\'%s\'" % kmi.key_modifier) + + s.append(")\n") + + props = kmi.properties + + if props is not None: + for pname in dir(props): + if props.is_property_set(pname) and not props.is_property_hidden(pname): + value = eval("props.%s" % pname) + value = _string_value(value) + if value != "": + s.append("kmi.properties.%s = %s\n" % (pname, value)) + + return "".join(s).strip() + + idname, spaceid, regionid, children = entry + + km = kc.find_keymap(idname, space_type = spaceid, region_type = regionid) + + if km: + km = km.active() + + if src: + for item in km.items: + if src.compare(item): + print("===========") + print(parent.name) + print(kmistr(src)) + print(km.name) + print(kmistr(item)) + result = True + + for child in children: + if self.testEntry(kc, child, src, parent): + result = True + else: + for i in range(len(km.items)): + src = km.items[i] + + for child in children: + if self.testEntry(kc, child, src, km): + result = True + + for j in range(len(km.items) - i - 1): + item = km.items[j + i + 1] + if src.compare(item): + print("===========") + print(km.name) + print(kmistr(src)) + print(kmistr(item)) + result = True + + for child in children: + if self.testEntry(kc, child): + result = True + + return result + + def testConfig(self, kc): + result = False + for entry in KM_HIERARCHY: + if self.testEntry(kc, entry): + result = True + return result + + def execute(self, context): + wm = context.manager + kc = wm.default_keyconfig + + if self.testConfig(kc): + print("CONFLICT") + + return ('FINISHED',) + +def _string_value(value): + result = "" + if isinstance(value, str): + if value != "": + result = "\'%s\'" % value + elif isinstance(value, bool): + if value: + result = "True" + else: + result = "False" + elif isinstance(value, float): + result = "%.10f" % value + elif isinstance(value, int): + result = "%d" % value + elif getattr(value, '__len__', False): + if len(value): + result = "[" + for i in range(0, len(value)): + result += _string_value(value[i]) + if i != len(value)-1: + result += ", " + result += "]" + else: + print("Export key configuration: can't write ", value) + + return result + class WM_OT_keyconfig_export(bpy.types.Operator): "Export key configuration to a python script." bl_idname = "wm.keyconfig_export" @@ -1313,33 +1674,6 @@ class WM_OT_keyconfig_export(bpy.types.Operator): path = bpy.props.StringProperty(name="File Path", description="File path to write file to.") - def _string_value(self, value): - result = "" - if isinstance(value, str): - if value != "": - result = "\'%s\'" % value - elif isinstance(value, bool): - if value: - result = "True" - else: - result = "False" - elif isinstance(value, float): - result = "%.10f" % value - elif isinstance(value, int): - result = "%d" % value - elif getattr(value, '__len__', False): - if len(value): - result = "[" - for i in range(0, len(value)): - result += self._string_value(value[i]) - if i != len(value)-1: - result += ", " - result += "]" - else: - print("Export key configuration: can't write ", value) - - return result - def execute(self, context): if not self.properties.path: raise Exception("File path not set.") @@ -1386,7 +1720,7 @@ class WM_OT_keyconfig_export(bpy.types.Operator): for pname in dir(props): if props.is_property_set(pname) and not props.is_property_hidden(pname): value = eval("props.%s" % pname) - value = self._string_value(value) + value = _string_value(value) if value != "": f.write("kmi.properties.%s = %s\n" % (pname, value)) @@ -1409,7 +1743,7 @@ class WM_OT_keymap_edit(bpy.types.Operator): def execute(self, context): wm = context.manager - km = wm.active_keymap + km = context.keymap km.copy_to_user() return ('FINISHED',) @@ -1428,12 +1762,30 @@ class WM_OT_keymap_restore(bpy.types.Operator): for km in wm.default_keyconfig.keymaps: km.restore_to_default() else: - km = wm.active_keymap + km = context.keymap km.restore_to_default() return ('FINISHED',) +class WM_OT_keyitem_restore(bpy.types.Operator): + "Restore key map item." + bl_idname = "wm.keyitem_restore" + bl_label = "Restore Key Map Item" + def poll(self, context): + kmi = context.keyitem + km = context.keymap + return km and kmi and kmi.id != 0 + + def execute(self, context): + wm = context.manager + kmi = context.keyitem + km = context.keymap + + km.restore_item_to_default(kmi) + + return ('FINISHED',) + class WM_OT_keyitem_add(bpy.types.Operator): "Add key map item." bl_idname = "wm.keyitem_add" @@ -1441,7 +1793,7 @@ class WM_OT_keyitem_add(bpy.types.Operator): def execute(self, context): wm = context.manager - km = wm.active_keymap + km = context.keymap if km.modal: km.add_modal_item("", 'A', 'PRESS') # kmi else: @@ -1457,12 +1809,14 @@ class WM_OT_keyitem_remove(bpy.types.Operator): def execute(self, context): wm = context.manager kmi = context.keyitem - km = wm.active_keymap + km = context.keymap km.remove_item(kmi) return ('FINISHED',) bpy.ops.add(WM_OT_keyconfig_export) +bpy.ops.add(WM_OT_keyconfig_test) bpy.ops.add(WM_OT_keymap_edit) bpy.ops.add(WM_OT_keymap_restore) bpy.ops.add(WM_OT_keyitem_add) bpy.ops.add(WM_OT_keyitem_remove) +bpy.ops.add(WM_OT_keyitem_restore) diff --git a/release/scripts/ui/space_view3d.py b/release/scripts/ui/space_view3d.py index af722c7f4d7..fa0a6a8c5fa 100644 --- a/release/scripts/ui/space_view3d.py +++ b/release/scripts/ui/space_view3d.py @@ -50,7 +50,7 @@ class VIEW3D_HT_header(bpy.types.Header): if edit_object: sub.menu("VIEW3D_MT_edit_%s" % edit_object.type.lower()) elif obj: - if mode_string not in ('PAINT_WEIGHT'): + if mode_string not in ('PAINT_WEIGHT', 'PAINT_TEXTURE'): sub.menu("VIEW3D_MT_%s" % mode_string.lower()) else: sub.menu("VIEW3D_MT_object") @@ -87,16 +87,16 @@ class VIEW3D_HT_header(bpy.types.Header): # OpenGL render row = layout.row(align=True) - row.operator("screen.opengl_render", text="", icon='ICON_RENDER_STILL') - props = row.operator("screen.opengl_render", text="", icon='ICON_RENDER_ANIMATION') + row.operator("screen.opengl_render", text="", icon='RENDER_STILL') + props = row.operator("screen.opengl_render", text="", icon='RENDER_ANIMATION') props.animation = True # Pose if obj and obj.mode == 'POSE': row = layout.row(align=True) - row.operator("pose.copy", text="", icon='ICON_COPYDOWN') - row.operator("pose.paste", text="", icon='ICON_PASTEDOWN') - props = row.operator("pose.paste", text="", icon='ICON_PASTEFLIPDOWN') + row.operator("pose.copy", text="", icon='COPYDOWN') + row.operator("pose.paste", text="", icon='PASTEDOWN') + props = row.operator("pose.paste", text="", icon='PASTEFLIPDOWN') props.flipped = 1 @@ -124,24 +124,24 @@ class VIEW3D_MT_transform(bpy.types.Menu): def draw(self, context): layout = self.layout - layout.operator("tfm.translate", text="Grab/Move") + layout.operator("transform.translate", text="Grab/Move") # TODO: sub-menu for grab per axis - layout.operator("tfm.rotate", text="Rotate") + layout.operator("transform.rotate", text="Rotate") # TODO: sub-menu for rot per axis - layout.operator("tfm.resize", text="Scale") + layout.operator("transform.resize", text="Scale") # TODO: sub-menu for scale per axis layout.separator() - layout.operator("tfm.tosphere", text="To Sphere") - layout.operator("tfm.shear", text="Shear") - layout.operator("tfm.warp", text="Warp") - layout.operator("tfm.transform", text="Push/Pull").mode = 'PUSHPULL' + layout.operator("transform.tosphere", text="To Sphere") + layout.operator("transform.shear", text="Shear") + layout.operator("transform.warp", text="Warp") + layout.operator("transform.transform", text="Push/Pull").mode = 'PUSHPULL' if context.edit_object and context.edit_object.type == 'ARMATURE': layout.operator("armature.align") else: layout.operator_context = 'EXEC_REGION_WIN' - layout.operator("tfm.transform", text="Align to Transform Orientation").mode = 'ALIGN' # XXX see alignmenu() in edit.c of b2.4x to get this working + layout.operator("transform.transform", text="Align to Transform Orientation").mode = 'ALIGN' # XXX see alignmenu() in edit.c of b2.4x to get this working layout.separator() @@ -158,32 +158,32 @@ class VIEW3D_MT_mirror(bpy.types.Menu): def draw(self, context): layout = self.layout - layout.operator("tfm.mirror", text="Interactive Mirror") + layout.operator("transform.mirror", text="Interactive Mirror") layout.separator() layout.operator_context = 'INVOKE_REGION_WIN' - props = layout.operator("tfm.mirror", text="X Global") + props = layout.operator("transform.mirror", text="X Global") props.constraint_axis = (True, False, False) props.constraint_orientation = 'GLOBAL' - props = layout.operator("tfm.mirror", text="Y Global") + props = layout.operator("transform.mirror", text="Y Global") props.constraint_axis = (False, True, False) props.constraint_orientation = 'GLOBAL' - props = layout.operator("tfm.mirror", text="Z Global") + props = layout.operator("transform.mirror", text="Z Global") props.constraint_axis = (False, False, True) props.constraint_orientation = 'GLOBAL' if context.edit_object: layout.separator() - props = layout.operator("tfm.mirror", text="X Local") + props = layout.operator("transform.mirror", text="X Local") props.constraint_axis = (True, False, False) props.constraint_orientation = 'LOCAL' - props = layout.operator("tfm.mirror", text="Y Local") + props = layout.operator("transform.mirror", text="Y Local") props.constraint_axis = (False, True, False) props.constraint_orientation = 'LOCAL' - props = layout.operator("tfm.mirror", text="Z Local") + props = layout.operator("transform.mirror", text="Z Local") props.constraint_axis = (False, False, True) props.constraint_orientation = 'LOCAL' @@ -216,6 +216,7 @@ class VIEW3D_MT_uv_map(dynamic_menu.DynMenu): layout.operator("uv.cylinder_project") layout.operator("uv.sphere_project") layout.operator("uv.project_from_view") + layout.operator("uv.project_from_view", text="Project from View (Bounds)").scale_to_bounds = True layout.separator() @@ -230,8 +231,8 @@ class VIEW3D_MT_view(bpy.types.Menu): def draw(self, context): layout = self.layout - layout.operator("view3d.properties", icon='ICON_MENU_PANEL') - layout.operator("view3d.toolbar", icon='ICON_MENU_PANEL') + layout.operator("view3d.properties", icon='MENU_PANEL') + layout.operator("view3d.toolbar", icon='MENU_PANEL') layout.separator() @@ -293,8 +294,8 @@ class VIEW3D_MT_view_navigation(bpy.types.Menu): layout.separator() - layout.operator("view3d.zoom", text="Zoom In").delta = 1.0 - layout.operator("view3d.zoom", text="Zoom Out").delta = -1.0 + layout.operator("view3d.zoom", text="Zoom In").delta = 1 + layout.operator("view3d.zoom", text="Zoom Out").delta = -1 layout.separator() @@ -918,7 +919,7 @@ class VIEW3D_MT_pose(bpy.types.Menu): layout.menu("VIEW3D_MT_transform") layout.menu("VIEW3D_MT_snap") if arm.drawtype in ('BBONE', 'ENVELOPE'): - layout.operator("tfm.transform", text="Scale Envelope Distance").mode = 'BONESIZE' + layout.operator("transform.transform", text="Scale Envelope Distance").mode = 'BONESIZE' layout.menu("VIEW3D_MT_pose_transform") @@ -1177,7 +1178,7 @@ class VIEW3D_MT_edit_mesh_edges(bpy.types.Menu): layout.separator() - layout.operator("TFM_OT_edge_slide", text="Edge Slide") + layout.operator("TRANSFORM_OT_edge_slide", text="Edge Slide") layout.operator("mesh.loop_multi_select", text="Edge Loop") # uiItemO(layout, "Loopcut", 0, "mesh.loop_cut"); // CutEdgeloop(em, 1); @@ -1202,6 +1203,7 @@ class VIEW3D_MT_edit_mesh_faces(dynamic_menu.DynMenu): layout.operator("mesh.edge_face_add") layout.operator("mesh.fill") layout.operator("mesh.beauty_fill") + layout.operator("mesh.solidify") layout.separator() @@ -1298,7 +1300,7 @@ class VIEW3D_MT_edit_curve_ctrlpoints(bpy.types.Menu): edit_object = context.edit_object if edit_object.type == 'CURVE': - layout.operator("tfm.transform").mode = 'TILT' + layout.operator("transform.transform").mode = 'TILT' layout.operator("curve.tilt_clear") layout.operator("curve.separate") @@ -1458,9 +1460,9 @@ class VIEW3D_MT_edit_armature(bpy.types.Menu): layout.menu("VIEW3D_MT_edit_armature_roll") if arm.drawtype == 'ENVELOPE': - layout.operator("tfm.transform", text="Scale Envelope Distance").mode = 'BONESIZE' + layout.operator("transform.transform", text="Scale Envelope Distance").mode = 'BONESIZE' else: - layout.operator("tfm.transform", text="Scale B-Bone Width").mode = 'BONESIZE' + layout.operator("transform.transform", text="Scale B-Bone Width").mode = 'BONESIZE' layout.separator() @@ -1544,7 +1546,7 @@ class VIEW3D_MT_edit_armature_roll(bpy.types.Menu): layout.separator() - layout.operator("tfm.transform", text="Set Roll").mode = 'BONE_ROLL' + layout.operator("transform.transform", text="Set Roll").mode = 'BONE_ROLL' # ********** Panel ********** @@ -1594,14 +1596,14 @@ class VIEW3D_PT_3dview_name(bpy.types.Panel): ob = context.active_object row = layout.row() - row.label(text="", icon='ICON_OBJECT_DATA') + row.label(text="", icon='OBJECT_DATA') row.prop(ob, "name", text="") if ob.type == 'ARMATURE' and ob.mode in ('EDIT', 'POSE'): bone = context.active_bone if bone: row = layout.row() - row.label(text="", icon='ICON_BONE_DATA') + row.label(text="", icon='BONE_DATA') row.prop(bone, "name", text="") @@ -1769,13 +1771,13 @@ class VIEW3D_PT_transform_orientations(bpy.types.Panel): col = layout.column() col.prop(view, "transform_orientation") - col.operator("tfm.create_orientation", text="Create") + col.operator("transform.create_orientation", text="Create") orientation = view.current_orientation if orientation: col.prop(orientation, "name") - col.operator("tfm.delete_orientation", text="Delete") + col.operator("transform.delete_orientation", text="Delete") class VIEW3D_PT_etch_a_ton(bpy.types.Panel): diff --git a/release/scripts/ui/space_view3d_toolbar.py b/release/scripts/ui/space_view3d_toolbar.py index 61707b60631..2c959e640ea 100644 --- a/release/scripts/ui/space_view3d_toolbar.py +++ b/release/scripts/ui/space_view3d_toolbar.py @@ -37,9 +37,9 @@ class VIEW3D_PT_tools_objectmode(View3DPanel): col = layout.column(align=True) col.label(text="Transform:") - col.operator("tfm.translate") - col.operator("tfm.rotate") - col.operator("tfm.resize", text="Scale") + col.operator("transform.translate") + col.operator("transform.rotate") + col.operator("transform.resize", text="Scale") col = layout.column(align=True) col.label(text="Object:") @@ -84,15 +84,15 @@ class VIEW3D_PT_tools_meshedit(View3DPanel): col = layout.column(align=True) col.label(text="Transform:") - col.operator("tfm.translate") - col.operator("tfm.rotate") - col.operator("tfm.resize", text="Scale") - col.operator("tfm.shrink_fatten", text="Along Normal") + col.operator("transform.translate") + col.operator("transform.rotate") + col.operator("transform.resize", text="Scale") + col.operator("transform.shrink_fatten", text="Along Normal") col = layout.column(align=True) col.label(text="Deform:") - col.operator("tfm.edge_slide") + col.operator("transform.edge_slide") col.operator("mesh.rip_move") col.operator("mesh.vertices_smooth") @@ -168,13 +168,13 @@ class VIEW3D_PT_tools_curveedit(View3DPanel): col = layout.column(align=True) col.label(text="Transform:") - col.operator("tfm.translate") - col.operator("tfm.rotate") - col.operator("tfm.resize", text="Scale") + col.operator("transform.translate") + col.operator("transform.rotate") + col.operator("transform.resize", text="Scale") col = layout.column(align=True) - col.operator("tfm.transform", text="Tilt").mode = 'TILT' - col.operator("tfm.transform", text="Shrink/Fatten").mode = 'CURVE_SHRINKFATTEN' + col.operator("transform.transform", text="Tilt").mode = 'TILT' + col.operator("transform.transform", text="Shrink/Fatten").mode = 'CURVE_SHRINKFATTEN' col = layout.column(align=True) col.label(text="Curve:") @@ -222,9 +222,9 @@ class VIEW3D_PT_tools_surfaceedit(View3DPanel): col = layout.column(align=True) col.label(text="Transform:") - col.operator("tfm.translate") - col.operator("tfm.rotate") - col.operator("tfm.resize", text="Scale") + col.operator("transform.translate") + col.operator("transform.rotate") + col.operator("transform.resize", text="Scale") col = layout.column(align=True) col.label(text="Curve:") @@ -295,9 +295,9 @@ class VIEW3D_PT_tools_armatureedit(View3DPanel): col = layout.column(align=True) col.label(text="Transform:") - col.operator("tfm.translate") - col.operator("tfm.rotate") - col.operator("tfm.resize", text="Scale") + col.operator("transform.translate") + col.operator("transform.rotate") + col.operator("transform.resize", text="Scale") col = layout.column(align=True) col.label(text="Bones:") @@ -347,9 +347,9 @@ class VIEW3D_PT_tools_mballedit(View3DPanel): col = layout.column(align=True) col.label(text="Transform:") - col.operator("tfm.translate") - col.operator("tfm.rotate") - col.operator("tfm.resize", text="Scale") + col.operator("transform.translate") + col.operator("transform.rotate") + col.operator("transform.resize", text="Scale") col = layout.column(align=True) col.label(text="Repeat:") @@ -375,9 +375,9 @@ class VIEW3D_PT_tools_latticeedit(View3DPanel): col = layout.column(align=True) col.label(text="Transform:") - col.operator("tfm.translate") - col.operator("tfm.rotate") - col.operator("tfm.resize", text="Scale") + col.operator("transform.translate") + col.operator("transform.rotate") + col.operator("transform.resize", text="Scale") col = layout.column(align=True) col.operator("lattice.make_regular") @@ -407,9 +407,9 @@ class VIEW3D_PT_tools_posemode(View3DPanel): col = layout.column(align=True) col.label(text="Transform:") - col.operator("tfm.translate") - col.operator("tfm.rotate") - col.operator("tfm.resize", text="Scale") + col.operator("transform.translate") + col.operator("transform.rotate") + col.operator("transform.resize", text="Scale") col = layout.column(align=True) col.label(text="In-Between:") @@ -553,6 +553,9 @@ class VIEW3D_PT_tools_brush(PaintPanel): if brush.sculpt_tool in ('DRAW', 'PINCH', 'INFLATE', 'LAYER', 'CLAY'): col.row().prop(brush, "direction", expand=True) + if brush.sculpt_tool in ('DRAW', 'INFLATE', 'LAYER'): + col.prop(brush, "use_accumulate") + if brush.sculpt_tool == 'LAYER': col.prop(brush, "use_persistent") col.operator("sculpt.set_persistent_base") @@ -695,8 +698,8 @@ class VIEW3D_PT_sculpt_options(PaintPanel): sculpt = context.tool_settings.sculpt col = layout.column() - col.prop(sculpt, "partial_redraw", text="Partial Refresh") col.prop(sculpt, "show_brush") + col.prop(sculpt, "fast_navigate") split = self.layout.split() diff --git a/release/test/pep8.py b/release/test/pep8.py new file mode 100644 index 00000000000..68d09c2ee76 --- /dev/null +++ b/release/test/pep8.py @@ -0,0 +1,98 @@ +# ##### 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +# + +import os + +# depends on pep8, pyflakes, pylint +# for ubuntu +# +# sudo apt-get install pylint pyflakes +# +# sudo apt-get install python-setuptools python-pip +# sudo pip install pep8 +# +# in debian install pylint pyflakes pep8 with apt-get/aptitude/etc +# +# on *nix run +# python release/test/pep8.py > pep8_error.txt 2>&1 + +# how many lines to read into the file, pep8 comment +# should be directly after the licence header, ~20 in most cases +PEP8_SEEK_COMMENT = 40 +SKIP_PREFIX = "./tools", "./config", "./scons", "./extern" + + +def file_list_py(path): + for dirpath, dirnames, filenames in os.walk(path): + for filename in filenames: + if filename.endswith(".py"): + yield os.path.join(dirpath, filename) + + +def is_pep8(path): + f = open(path, 'r') + for i in range(PEP8_SEEK_COMMENT): + line = f.readline() + if line.startswith("# "): + return 1 + elif line.startswith("# "): + return 2 + f.close() + return 0 + + +def main(): + files = [] + files_skip = [] + for f in file_list_py("."): + pep8_type = is_pep8(f) + + if pep8_type: + # so we can batch them for each tool. + files.append((os.path.abspath(f), pep8_type)) + else: + if not [None for prefix in SKIP_PREFIX if f.startswith(prefix)]: + files_skip.append(f) + + print("\nSkipping...") + for f in files_skip: + print(" %s" % f) + + # pyflakes + print("\n\n\n# running pep8...") + for f, pep8_type in files: + if pep8_type == 1: + # E501:80 line length + os.system("pep8 --repeat --ignore=E501 '%s'" % (f)) + else: + os.system("pep8 --repeat '%s'" % (f)) + + print("\n\n\n# running pyflakes...") + for f, pep8_type in files: + os.system("pyflakes '%s'" % f) + + print("\n\n\n# running pylint...") + for f, pep8_type in files: + # let pep8 complain about line length + os.system("pylint --reports=n --max-line-length=1000 '%s'" % f) + +if __name__ == "__main__": + main() diff --git a/release/test/rna_array.py b/release/test/rna_array.py index 08aea1c7967..6c6539f5509 100644 --- a/release/test/rna_array.py +++ b/release/test/rna_array.py @@ -16,6 +16,8 @@ # # ##### END GPL LICENSE BLOCK ##### +# + import unittest import random @@ -29,269 +31,269 @@ test= bpy.data.test # same as above for other types except that the first letter is "i" for int and "b" for bool class TestArray(unittest.TestCase): - # test that assignment works by: assign -> test value - # - rvalue = list of float - # - rvalue = list of numbers - # test.object - # bpy.data.test.farr[3], iarr[3], barr[...], fmarr, imarr, bmarr + # test that assignment works by: assign -> test value + # - rvalue = list of float + # - rvalue = list of numbers + # test.object + # bpy.data.test.farr[3], iarr[3], barr[...], fmarr, imarr, bmarr - def setUp(self): - test.farr= (1.0, 2.0, 3.0) - test.iarr= (7, 8, 9) - test.barr= (False, True, False) - - # test access - # test slice access, negative indices - def test_access(self): - rvals= ([1.0, 2.0, 3.0], [7, 8, 9], [False, True, False]) - for arr, rval in zip((test.farr, test.iarr, test.barr), rvals): - self.assertEqual(prop_to_list(arr), rval) - self.assertEqual(arr[0:3], rval) - self.assertEqual(arr[1:2], rval[1:2]) - self.assertEqual(arr[-1], arr[2]) - self.assertEqual(arr[-2], arr[1]) - self.assertEqual(arr[-3], arr[0]) + def setUp(self): + test.farr= (1.0, 2.0, 3.0) + test.iarr= (7, 8, 9) + test.barr= (False, True, False) + + # test access + # test slice access, negative indices + def test_access(self): + rvals= ([1.0, 2.0, 3.0], [7, 8, 9], [False, True, False]) + for arr, rval in zip((test.farr, test.iarr, test.barr), rvals): + self.assertEqual(prop_to_list(arr), rval) + self.assertEqual(arr[0:3], rval) + self.assertEqual(arr[1:2], rval[1:2]) + self.assertEqual(arr[-1], arr[2]) + self.assertEqual(arr[-2], arr[1]) + self.assertEqual(arr[-3], arr[0]) - # fail when index out of bounds - def test_access_fail(self): - for arr in (test.farr, test.iarr, test.barr): - self.assertRaises(IndexError, lambda : arr[4]) - - # test assignment of a whole array - def test_assign_array(self): - # should accept int as float - test.farr= (1, 2, 3) + # fail when index out of bounds + def test_access_fail(self): + for arr in (test.farr, test.iarr, test.barr): + self.assertRaises(IndexError, lambda : arr[4]) + + # test assignment of a whole array + def test_assign_array(self): + # should accept int as float + test.farr= (1, 2, 3) - # fail when: unexpected no. of items, invalid item type - def test_assign_array_fail(self): - def assign_empty_list(arr): - setattr(test, arr, ()) + # fail when: unexpected no. of items, invalid item type + def test_assign_array_fail(self): + def assign_empty_list(arr): + setattr(test, arr, ()) - for arr in ("farr", "iarr", "barr"): - self.assertRaises(ValueError, assign_empty_list, arr) + for arr in ("farr", "iarr", "barr"): + self.assertRaises(ValueError, assign_empty_list, arr) - def assign_invalid_float(): - test.farr= (1.0, 2.0, "3.0") + def assign_invalid_float(): + test.farr= (1.0, 2.0, "3.0") - def assign_invalid_int(): - test.iarr= ("1", 2, 3) + def assign_invalid_int(): + test.iarr= ("1", 2, 3) - def assign_invalid_bool(): - test.barr= (True, 0.123, False) + def assign_invalid_bool(): + test.barr= (True, 0.123, False) - for func in [assign_invalid_float, assign_invalid_int, assign_invalid_bool]: - self.assertRaises(TypeError, func) + for func in [assign_invalid_float, assign_invalid_int, assign_invalid_bool]: + self.assertRaises(TypeError, func) - # shouldn't accept float as int - def assign_float_as_int(): - test.iarr= (1, 2, 3.0) - self.assertRaises(TypeError, assign_float_as_int) + # shouldn't accept float as int + def assign_float_as_int(): + test.iarr= (1, 2, 3.0) + self.assertRaises(TypeError, assign_float_as_int) - # non-dynamic arrays cannot change size - def assign_different_size(arr, val): - setattr(test, arr, val) - for arr, val in zip(("iarr", "farr", "barr"), ((1, 2), (1.0, 2.0), (True, False))): - self.assertRaises(ValueError, assign_different_size, arr, val) + # non-dynamic arrays cannot change size + def assign_different_size(arr, val): + setattr(test, arr, val) + for arr, val in zip(("iarr", "farr", "barr"), ((1, 2), (1.0, 2.0), (True, False))): + self.assertRaises(ValueError, assign_different_size, arr, val) - # test assignment of specific items - def test_assign_item(self): - for arr, rand_func in zip((test.farr, test.iarr, test.barr), (rand_float, rand_int, rand_bool)): - for i in range(len(arr)): - val= rand_func() - arr[i]= val - - self.assertEqual(arr[i], val) + # test assignment of specific items + def test_assign_item(self): + for arr, rand_func in zip((test.farr, test.iarr, test.barr), (rand_float, rand_int, rand_bool)): + for i in range(len(arr)): + val= rand_func() + arr[i]= val + + self.assertEqual(arr[i], val) - # float prop should accept also int - for i in range(len(test.farr)): - val= rand_int() - test.farr[i]= val - self.assertEqual(test.farr[i], float(val)) + # float prop should accept also int + for i in range(len(test.farr)): + val= rand_int() + test.farr[i]= val + self.assertEqual(test.farr[i], float(val)) - # + # - def test_assign_item_fail(self): - def assign_bad_index(arr): - arr[4] = 1.0 + def test_assign_item_fail(self): + def assign_bad_index(arr): + arr[4] = 1.0 - def assign_bad_type(arr): - arr[1]= "123" - - for arr in [test.farr, test.iarr, test.barr]: - self.assertRaises(IndexError, assign_bad_index, arr) + def assign_bad_type(arr): + arr[1]= "123" + + for arr in [test.farr, test.iarr, test.barr]: + self.assertRaises(IndexError, assign_bad_index, arr) - # not testing bool because bool allows not only (True|False) - for arr in [test.farr, test.iarr]: - self.assertRaises(TypeError, assign_bad_type, arr) + # not testing bool because bool allows not only (True|False) + for arr in [test.farr, test.iarr]: + self.assertRaises(TypeError, assign_bad_type, arr) - def test_dynamic_assign_array(self): - # test various lengths here - for arr, rand_func in zip(("fdarr", "idarr", "bdarr"), (rand_float, rand_int, rand_bool)): - for length in range(1, 64): - rval= make_random_array(length, rand_func) - setattr(test, arr, rval) - self.assertEqual(prop_to_list(getattr(test, arr)), rval) + def test_dynamic_assign_array(self): + # test various lengths here + for arr, rand_func in zip(("fdarr", "idarr", "bdarr"), (rand_float, rand_int, rand_bool)): + for length in range(1, 64): + rval= make_random_array(length, rand_func) + setattr(test, arr, rval) + self.assertEqual(prop_to_list(getattr(test, arr)), rval) - def test_dynamic_assign_array_fail(self): - # could also test too big length here - - def assign_empty_list(arr): - setattr(test, arr, ()) + def test_dynamic_assign_array_fail(self): + # could also test too big length here + + def assign_empty_list(arr): + setattr(test, arr, ()) - for arr in ("fdarr", "idarr", "bdarr"): - self.assertRaises(ValueError, assign_empty_list, arr) + for arr in ("fdarr", "idarr", "bdarr"): + self.assertRaises(ValueError, assign_empty_list, arr) class TestMArray(unittest.TestCase): - def setUp(self): - # reset dynamic array sizes - for arr, func in zip(("fdmarr", "idmarr", "bdmarr"), (rand_float, rand_int, rand_bool)): - setattr(test, arr, make_random_3d_array((3, 4, 5), func)) + def setUp(self): + # reset dynamic array sizes + for arr, func in zip(("fdmarr", "idmarr", "bdmarr"), (rand_float, rand_int, rand_bool)): + setattr(test, arr, make_random_3d_array((3, 4, 5), func)) - # test assignment - def test_assign_array(self): - for arr, func in zip(("fmarr", "imarr", "bmarr"), (rand_float, rand_int, rand_bool)): - # assignment of [3][4][5] - rval= make_random_3d_array((3, 4, 5), func) - setattr(test, arr, rval) - self.assertEqual(prop_to_list(getattr(test, arr)), rval) + # test assignment + def test_assign_array(self): + for arr, func in zip(("fmarr", "imarr", "bmarr"), (rand_float, rand_int, rand_bool)): + # assignment of [3][4][5] + rval= make_random_3d_array((3, 4, 5), func) + setattr(test, arr, rval) + self.assertEqual(prop_to_list(getattr(test, arr)), rval) - # test assignment of [2][4][5], [1][4][5] should work on dynamic arrays + # test assignment of [2][4][5], [1][4][5] should work on dynamic arrays - def test_assign_array_fail(self): - def assign_empty_array(): - test.fmarr= () - self.assertRaises(ValueError, assign_empty_array) + def test_assign_array_fail(self): + def assign_empty_array(): + test.fmarr= () + self.assertRaises(ValueError, assign_empty_array) - def assign_invalid_size(arr, rval): - setattr(test, arr, rval) + def assign_invalid_size(arr, rval): + setattr(test, arr, rval) - # assignment of 3,4,4 or 3,3,5 should raise ex - for arr, func in zip(("fmarr", "imarr", "bmarr"), (rand_float, rand_int, rand_bool)): - rval= make_random_3d_array((3, 4, 4), func) - self.assertRaises(ValueError, assign_invalid_size, arr, rval) + # assignment of 3,4,4 or 3,3,5 should raise ex + for arr, func in zip(("fmarr", "imarr", "bmarr"), (rand_float, rand_int, rand_bool)): + rval= make_random_3d_array((3, 4, 4), func) + self.assertRaises(ValueError, assign_invalid_size, arr, rval) - rval= make_random_3d_array((3, 3, 5), func) - self.assertRaises(ValueError, assign_invalid_size, arr, rval) + rval= make_random_3d_array((3, 3, 5), func) + self.assertRaises(ValueError, assign_invalid_size, arr, rval) - rval= make_random_3d_array((3, 3, 3), func) - self.assertRaises(ValueError, assign_invalid_size, arr, rval) + rval= make_random_3d_array((3, 3, 3), func) + self.assertRaises(ValueError, assign_invalid_size, arr, rval) - def test_assign_item(self): - # arr[i] = x - for arr, func in zip(("fmarr", "imarr", "bmarr", "fdmarr", "idmarr", "bdmarr"), (rand_float, rand_int, rand_bool) * 2): - rval= make_random_2d_array((4, 5), func) + def test_assign_item(self): + # arr[i] = x + for arr, func in zip(("fmarr", "imarr", "bmarr", "fdmarr", "idmarr", "bdmarr"), (rand_float, rand_int, rand_bool) * 2): + rval= make_random_2d_array((4, 5), func) - for i in range(3): - getattr(test, arr)[i]= rval - self.assertEqual(prop_to_list(getattr(test, arr)[i]), rval) + for i in range(3): + getattr(test, arr)[i]= rval + self.assertEqual(prop_to_list(getattr(test, arr)[i]), rval) - # arr[i][j] = x - for arr, func in zip(("fmarr", "imarr", "bmarr", "fdmarr", "idmarr", "bdmarr"), (rand_float, rand_int, rand_bool) * 2): + # arr[i][j] = x + for arr, func in zip(("fmarr", "imarr", "bmarr", "fdmarr", "idmarr", "bdmarr"), (rand_float, rand_int, rand_bool) * 2): - arr= getattr(test, arr) - rval= make_random_array(5, func) + arr= getattr(test, arr) + rval= make_random_array(5, func) - for i in range(3): - for j in range(4): - arr[i][j]= rval - self.assertEqual(prop_to_list(arr[i][j]), rval) + for i in range(3): + for j in range(4): + arr[i][j]= rval + self.assertEqual(prop_to_list(arr[i][j]), rval) - def test_assign_item_fail(self): - def assign_wrong_size(arr, i, rval): - getattr(test, arr)[i]= rval + def test_assign_item_fail(self): + def assign_wrong_size(arr, i, rval): + getattr(test, arr)[i]= rval - # assign wrong size at level 2 - for arr, func in zip(("fmarr", "imarr", "bmarr"), (rand_float, rand_int, rand_bool)): - rval1= make_random_2d_array((3, 5), func) - rval2= make_random_2d_array((4, 3), func) + # assign wrong size at level 2 + for arr, func in zip(("fmarr", "imarr", "bmarr"), (rand_float, rand_int, rand_bool)): + rval1= make_random_2d_array((3, 5), func) + rval2= make_random_2d_array((4, 3), func) - for i in range(3): - self.assertRaises(ValueError, assign_wrong_size, arr, i, rval1) - self.assertRaises(ValueError, assign_wrong_size, arr, i, rval2) + for i in range(3): + self.assertRaises(ValueError, assign_wrong_size, arr, i, rval1) + self.assertRaises(ValueError, assign_wrong_size, arr, i, rval2) - def test_dynamic_assign_array(self): - for arr, func in zip(("fdmarr", "idmarr", "bdmarr"), (rand_float, rand_int, rand_bool)): - # assignment of [3][4][5] - rval= make_random_3d_array((3, 4, 5), func) - setattr(test, arr, rval) - self.assertEqual(prop_to_list(getattr(test, arr)), rval) + def test_dynamic_assign_array(self): + for arr, func in zip(("fdmarr", "idmarr", "bdmarr"), (rand_float, rand_int, rand_bool)): + # assignment of [3][4][5] + rval= make_random_3d_array((3, 4, 5), func) + setattr(test, arr, rval) + self.assertEqual(prop_to_list(getattr(test, arr)), rval) - # [2][4][5] - rval= make_random_3d_array((2, 4, 5), func) - setattr(test, arr, rval) - self.assertEqual(prop_to_list(getattr(test, arr)), rval) + # [2][4][5] + rval= make_random_3d_array((2, 4, 5), func) + setattr(test, arr, rval) + self.assertEqual(prop_to_list(getattr(test, arr)), rval) - # [1][4][5] - rval= make_random_3d_array((1, 4, 5), func) - setattr(test, arr, rval) - self.assertEqual(prop_to_list(getattr(test, arr)), rval) + # [1][4][5] + rval= make_random_3d_array((1, 4, 5), func) + setattr(test, arr, rval) + self.assertEqual(prop_to_list(getattr(test, arr)), rval) - # test access - def test_access(self): - pass + # test access + def test_access(self): + pass - # test slice access, negative indices - def test_access_fail(self): - pass + # test slice access, negative indices + def test_access_fail(self): + pass random.seed() def rand_int(): - return random.randint(-1000, 1000) + return random.randint(-1000, 1000) def rand_float(): - return float(rand_int()) + return float(rand_int()) def rand_bool(): - return bool(random.randint(0, 1)) + return bool(random.randint(0, 1)) def make_random_array(len, rand_func): - arr= [] - for i in range(len): - arr.append(rand_func()) - - return arr + arr= [] + for i in range(len): + arr.append(rand_func()) + + return arr def make_random_2d_array(dimsize, rand_func): - marr= [] - for i in range(dimsize[0]): - marr.append([]) + marr= [] + for i in range(dimsize[0]): + marr.append([]) - for j in range(dimsize[1]): - marr[-1].append(rand_func()) + for j in range(dimsize[1]): + marr[-1].append(rand_func()) - return marr + return marr def make_random_3d_array(dimsize, rand_func): - marr= [] - for i in range(dimsize[0]): - marr.append([]) + marr= [] + for i in range(dimsize[0]): + marr.append([]) - for j in range(dimsize[1]): - marr[-1].append([]) + for j in range(dimsize[1]): + marr[-1].append([]) - for k in range(dimsize[2]): - marr[-1][-1].append(rand_func()) + for k in range(dimsize[2]): + marr[-1][-1].append(rand_func()) - return marr + return marr def prop_to_list(prop): - ret= [] + ret= [] - for x in prop: - if type(x) not in (bool, int, float): - ret.append(prop_to_list(x)) - else: - ret.append(x) + for x in prop: + if type(x) not in (bool, int, float): + ret.append(prop_to_list(x)) + else: + ret.append(x) - return ret + return ret def suite(): - return unittest.TestSuite([unittest.TestLoader().loadTestsFromTestCase(TestArray), unittest.TestLoader().loadTestsFromTestCase(TestMArray)]) + return unittest.TestSuite([unittest.TestLoader().loadTestsFromTestCase(TestArray), unittest.TestLoader().loadTestsFromTestCase(TestMArray)]) if __name__ == "__main__": - unittest.TextTestRunner(verbosity=2).run(suite()) + unittest.TextTestRunner(verbosity=2).run(suite()) diff --git a/source/Makefile b/source/Makefile index a106e655e78..37b528f4aed 100644 --- a/source/Makefile +++ b/source/Makefile @@ -118,6 +118,7 @@ COMLIB += $(NAN_LZO)/lib/$(DEBUG_DIR)libminilzo.a COMLIB += $(NAN_LZMA)/lib/$(DEBUG_DIR)liblzma.a COMLIB += $(NAN_BSP)/lib/$(DEBUG_DIR)libbsp.a COMLIB += $(NAN_BOOLOP)/lib/$(DEBUG_DIR)libboolop.a +COMLIB += $(NAN_MOTO)/lib/$(DEBUG_DIR)libmoto.a COMLIB += $(NAN_DECIMATION)/lib/$(DEBUG_DIR)libdecimation.a ifeq ($(WITH_FFMPEG),true) @@ -177,6 +178,7 @@ COMLIB += $(OCGDIR)/blender/makesdna/$(DEBUG_DIR)libdna.a COMLIB += $(NAN_GUARDEDALLOC)/lib/libguardedalloc.a COMLIB += $(NAN_MEMUTIL)/lib/libmemutil.a COMLIB += $(NAN_PNG)/lib/libpng.a +COMLIB += $(OCGDIR)/blender/python/$(DEBUG_DIR)libpython.a # This was a PULIB up to circa r25248 COMLIB += $(OCGDIR)/blender/gen_python/$(DEBUG_DIR)libgen_python.a ifeq ($(WITH_QUICKTIME), true) @@ -276,13 +278,12 @@ PULIB += $(OCGDIR)/blender/ed_userpref/$(DEBUG_DIR)libed_userpref.a PULIB += $(OCGDIR)/blender/ed_gpencil/$(DEBUG_DIR)libed_gpencil.a PULIB += $(OCGDIR)/blender/ed_opsound/$(DEBUG_DIR)libed_opsound.a PULIB += $(OCGDIR)/blender/windowmanager/$(DEBUG_DIR)libwindowmanager.a -PULIB += $(OCGDIR)/blender/python/$(DEBUG_DIR)libpython.a PULIB += $(OCGDIR)/blender/makesrna/$(DEBUG_DIR)librna.a # note, no idea but it suddenly doesn't compile :( PULIB += $(OCGDIR)/blender/blenlib/$(DEBUG_DIR)libblenlib.a PULIB += $(NAN_OPENNL)/lib/$(DEBUG_DIR)libopennl.a PULIB += $(NAN_ELBEEM)/lib/$(DEBUG_DIR)libelbeem.a -PULIB += $(NAN_SMOKE)/lib/$(DEBUG_DIR)/libsmoke.a +PULIB += $(NAN_SMOKE)/lib/$(DEBUG_DIR)libsmoke.a ifeq ($(NAN_NO_KETSJI),true) PULIB += $(NAN_MOTO)/lib/$(DEBUG_DIR)libmoto.a @@ -378,11 +379,6 @@ ifeq ($(WITH_BF_WEBPLUGIN), true) endif endif -ifeq ($(OS),solaris) - PULIB += $(NAN_ZLIB)/lib/libz.a - SPLIB += $(NAN_ZLIB)/lib/libz.a -endif - ifeq ($(WITH_OPENAL),true) ifeq ($(OS),$(findstring $(OS), "freebsd linux windows")) ifeq ($(CPU),$(findstring $(CPU), "i386 powerpc x86_64 parisc64")) diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h index 514411e137d..a3a1ead3924 100644 --- a/source/blender/blenkernel/BKE_DerivedMesh.h +++ b/source/blender/blenkernel/BKE_DerivedMesh.h @@ -60,12 +60,24 @@ struct MCol; struct ColorBand; struct GPUVertexAttribs; struct GPUDrawObject; +struct ListBase; +struct PBVH; /* number of sub-elements each mesh element has (for interpolation) */ #define SUB_ELEMS_VERT 0 #define SUB_ELEMS_EDGE 2 #define SUB_ELEMS_FACE 4 +typedef struct DMGridData { + float co[3]; + float no[3]; +} DMGridData; + +typedef struct DMGridAdjacency { + int index[4]; + int rotation[4]; +} DMGridAdjacency; + typedef struct DerivedMesh DerivedMesh; struct DerivedMesh { /* Private DerivedMesh data, only for internal DerivedMesh use */ @@ -133,6 +145,13 @@ struct DerivedMesh { void *(*getEdgeDataArray)(DerivedMesh *dm, int type); void *(*getFaceDataArray)(DerivedMesh *dm, int type); + /* optional grid access for subsurf */ + int (*getNumGrids)(DerivedMesh *dm); + int (*getGridSize)(DerivedMesh *dm); + DMGridData **(*getGridData)(DerivedMesh *dm); + DMGridAdjacency *(*getGridAdjacency)(DerivedMesh *dm); + int *(*getGridOffset)(DerivedMesh *dm); + /* Iterate over each mapped vertex in the derived mesh, calling the * given function with the original vert and the mapped vert's new * coordinate and normal. For historical reasons the normal can be @@ -181,6 +200,14 @@ struct DerivedMesh { /* Get vertex normal, undefined if index is not valid */ void (*getVertNo)(DerivedMesh *dm, int index, float no_r[3]); + /* Get a map of vertices to faces + */ + struct ListBase *(*getFaceMap)(DerivedMesh *dm); + + /* Get the BVH used for paint modes + */ + struct PBVH *(*getPBVH)(struct Object *ob, DerivedMesh *dm); + /* Drawing Operations */ /* Draw all vertices as bgl points (no options) */ @@ -205,8 +232,8 @@ struct DerivedMesh { * * Also called for *final* editmode DerivedMeshes */ - void (*drawFacesSolid)(DerivedMesh *dm, - int (*setMaterial)(int, void *attribs)); + void (*drawFacesSolid)(DerivedMesh *dm, float (*partial_redraw_planes)[4], + int fast, int (*setMaterial)(int, void *attribs)); /* Draw all faces * o If useTwoSided, draw front and back using col arrays diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h index 7bbcb63a7f5..8e7e698a986 100644 --- a/source/blender/blenkernel/BKE_blender.h +++ b/source/blender/blenkernel/BKE_blender.h @@ -43,7 +43,7 @@ struct bContext; struct ReportList; #define BLENDER_VERSION 250 -#define BLENDER_SUBVERSION 8 +#define BLENDER_SUBVERSION 11 #define BLENDER_MINVERSION 250 #define BLENDER_MINSUBVERSION 0 diff --git a/source/blender/blenkernel/BKE_customdata.h b/source/blender/blenkernel/BKE_customdata.h index 95ee918a888..5f13e702343 100644 --- a/source/blender/blenkernel/BKE_customdata.h +++ b/source/blender/blenkernel/BKE_customdata.h @@ -32,6 +32,7 @@ #ifndef BKE_CUSTOMDATA_H #define BKE_CUSTOMDATA_H +struct ID; struct CustomData; struct CustomDataLayer; typedef unsigned int CustomDataMask; @@ -278,4 +279,19 @@ int CustomData_verify_versions(struct CustomData *data, int index); void CustomData_to_bmeshpoly(struct CustomData *fdata, struct CustomData *pdata, struct CustomData *ldata); void CustomData_from_bmeshpoly(struct CustomData *fdata, struct CustomData *pdata, struct CustomData *ldata, int total); void CustomData_bmesh_init_pool(struct CustomData *data, int allocsize); + +/* External file storage */ + +void CustomData_external_add(struct CustomData *data, + struct ID *id, int type, int totelem, const char *filename); +void CustomData_external_remove(struct CustomData *data, + struct ID *id, int type, int totelem); +int CustomData_external_test(struct CustomData *data, int type); + +void CustomData_external_write(struct CustomData *data, + struct ID *id, CustomDataMask mask, int totelem, int free); +void CustomData_external_read(struct CustomData *data, + struct ID *id, CustomDataMask mask, int totelem); + #endif + diff --git a/source/blender/blenkernel/BKE_customdata_file.h b/source/blender/blenkernel/BKE_customdata_file.h new file mode 100644 index 00000000000..5cbff193cd3 --- /dev/null +++ b/source/blender/blenkernel/BKE_customdata_file.h @@ -0,0 +1,59 @@ +/* + * $Id$ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#ifndef BKE_CUSTOMDATA_FILE_H +#define BKE_CUSTOMDATA_FILE_H + +#define CDF_TYPE_IMAGE 0 +#define CDF_TYPE_MESH 1 + +#define CDF_LAYER_NAME_MAX 64 + +typedef struct CDataFile CDataFile; +typedef struct CDataFileLayer CDataFileLayer; + +/* Create/Free */ + +CDataFile *cdf_create(int type); +void cdf_free(CDataFile *cdf); + +/* File read/write/remove */ + +int cdf_read_open(CDataFile *cdf, char *filename); +int cdf_read_layer(CDataFile *cdf, CDataFileLayer *blay); +int cdf_read_data(CDataFile *cdf, int size, void *data); +void cdf_read_close(CDataFile *cdf); + +int cdf_write_open(CDataFile *cdf, char *filename); +int cdf_write_layer(CDataFile *cdf, CDataFileLayer *blay); +int cdf_write_data(CDataFile *cdf, int size, void *data); +void cdf_write_close(CDataFile *cdf); + +void cdf_remove(char *filename); + +/* Layers */ + +CDataFileLayer *cdf_layer_find(CDataFile *cdf, int type, char *name); +CDataFileLayer *cdf_layer_add(CDataFile *cdf, int type, char *name, size_t datasize); + +#endif /* BKE_CUSTOMDATA_FILE_H */ + diff --git a/source/blender/blenkernel/BKE_modifier.h b/source/blender/blenkernel/BKE_modifier.h index c30bfa3e247..dd5f391cc5c 100644 --- a/source/blender/blenkernel/BKE_modifier.h +++ b/source/blender/blenkernel/BKE_modifier.h @@ -228,7 +228,7 @@ typedef struct ModifierTypeInfo { * * This function is optional (assumes never disabled if not present). */ - int (*isDisabled)(struct ModifierData *md); + int (*isDisabled)(struct ModifierData *md, int userRenderParams); /* Add the appropriate relations to the DEP graph depending on the * modifier data. @@ -280,7 +280,7 @@ void modifier_copyData(struct ModifierData *md, struct ModifierData *ta int modifier_dependsOnTime(struct ModifierData *md); int modifier_supportsMapping(struct ModifierData *md); int modifier_couldBeCage(struct ModifierData *md); -int modifier_isDeformer(struct ModifierData *md); +int modifier_isCorrectableDeformed(struct ModifierData *md); int modifier_sameTopology(ModifierData *md); int modifier_isEnabled(struct ModifierData *md, int required_mode); void modifier_setError(struct ModifierData *md, char *format, ...); @@ -303,7 +303,7 @@ int modifiers_isParticleEnabled(struct Object *ob); struct Object *modifiers_isDeformedByArmature(struct Object *ob); struct Object *modifiers_isDeformedByLattice(struct Object *ob); int modifiers_usesArmature(struct Object *ob, struct bArmature *arm); -int modifiers_isDeformed(struct Scene *scene, struct Object *ob); +int modifiers_isCorrectableDeformed(struct Scene *scene, struct Object *ob); void modifier_freeTemporaryData(struct ModifierData *md); int modifiers_indexInObject(struct Object *ob, struct ModifierData *md); diff --git a/source/blender/blenkernel/BKE_multires.h b/source/blender/blenkernel/BKE_multires.h index a331479cad1..2f372f80957 100644 --- a/source/blender/blenkernel/BKE_multires.h +++ b/source/blender/blenkernel/BKE_multires.h @@ -27,51 +27,36 @@ * ***** END GPL LICENSE BLOCK ***** */ +#ifndef BKE_MULTIRES_H +#define BKE_MULTIRES_H + struct DerivedMesh; struct Mesh; struct MFace; +struct Multires; struct MultiresModifierData; struct Object; -typedef struct MultiresSubsurf { - struct MultiresModifierData *mmd; - struct Object *ob; - int local_mmd; -} MultiresSubsurf; - -/* MultiresDM */ -struct Object *MultiresDM_get_object(struct DerivedMesh *dm); -struct Mesh *MultiresDM_get_mesh(struct DerivedMesh *dm); -struct DerivedMesh *MultiresDM_new(struct MultiresSubsurf *, struct DerivedMesh*, int, int, int); -void *MultiresDM_get_vertnorm(struct DerivedMesh *); -void *MultiresDM_get_orco(struct DerivedMesh *); -struct MVert *MultiresDM_get_subco(struct DerivedMesh *); -struct ListBase *MultiresDM_get_vert_face_map(struct DerivedMesh *); -struct ListBase *MultiresDM_get_vert_edge_map(struct DerivedMesh *); -int *MultiresDM_get_face_offsets(struct DerivedMesh *); -int MultiresDM_get_totlvl(struct DerivedMesh *); -int MultiresDM_get_lvl(struct DerivedMesh *); -void MultiresDM_set_update(struct DerivedMesh *, void (*)(struct DerivedMesh*)); - -/* The displacements will only be updated when - the MultiresDM has been marked as modified */ -void MultiresDM_mark_as_modified(struct DerivedMesh *); void multires_mark_as_modified(struct Object *ob); void multires_force_update(struct Object *ob); -struct DerivedMesh *multires_dm_create_from_derived(struct MultiresModifierData*, int local_mmd, struct DerivedMesh*, - struct Object *, int, int); +struct DerivedMesh *multires_dm_create_from_derived(struct MultiresModifierData*, + int local_mmd, struct DerivedMesh*, struct Object *, int, int); struct MultiresModifierData *find_multires_modifier(struct Object *ob); -int multiresModifier_switch_level(struct Object *, const int); void multiresModifier_join(struct Object *); void multiresModifier_del_levels(struct MultiresModifierData *, struct Object *, int direction); -void multiresModifier_subdivide(struct MultiresModifierData *mmd, struct Object *ob, int distance, +void multiresModifier_subdivide(struct MultiresModifierData *mmd, struct Object *ob, int updateblock, int simple); int multiresModifier_reshape(struct MultiresModifierData *mmd, struct Object *dst, struct Object *src); +void multires_stitch_grids(struct Object *); + /* Related to the old multires */ -struct Multires; -void multires_load_old(struct DerivedMesh *, struct Multires *); -void multires_free(struct Multires*); +void multires_free(struct Multires *mr); +void multires_load_old(struct Object *ob, struct Mesh *me); +void multires_load_old_250(struct Mesh *); + +#endif + diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h index f9130e24a08..3ed9ab8778e 100644 --- a/source/blender/blenkernel/BKE_node.h +++ b/source/blender/blenkernel/BKE_node.h @@ -175,6 +175,7 @@ struct bNode *nodeCopyNode(struct bNodeTree *ntree, struct bNode *node, int inte struct bNodeLink *nodeAddLink(struct bNodeTree *ntree, struct bNode *fromnode, struct bNodeSocket *fromsock, struct bNode *tonode, struct bNodeSocket *tosock); void nodeRemLink(struct bNodeTree *ntree, struct bNodeLink *link); +struct bNode *nodeFindNodebyName(struct bNodeTree *ntree, const char *name); int nodeFindNode(struct bNodeTree *ntree, struct bNodeSocket *sock, struct bNode **nodep, int *sockindex); struct bNodeLink *nodeFindLink(struct bNodeTree *ntree, struct bNodeSocket *from, struct bNodeSocket *to); diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h index aeb33cd3628..3e239e91453 100644 --- a/source/blender/blenkernel/BKE_object.h +++ b/source/blender/blenkernel/BKE_object.h @@ -93,8 +93,10 @@ void disable_speed_curve(int val); float bsystem_time(struct Scene *scene, struct Object *ob, float cfra, float ofs); void object_scale_to_mat3(struct Object *ob, float mat[][3]); void object_rot_to_mat3(struct Object *ob, float mat[][3]); +void object_mat3_to_rot(struct Object *ob, float mat[][3], int use_compat); void object_to_mat3(struct Object *ob, float mat[][3]); void object_to_mat4(struct Object *ob, float mat[][4]); +void object_apply_mat4(struct Object *ob, float mat[][4]); void set_no_parent_ipo(int val); diff --git a/source/blender/blenkernel/BKE_paint.h b/source/blender/blenkernel/BKE_paint.h index b532b0820d7..1688ecb3492 100644 --- a/source/blender/blenkernel/BKE_paint.h +++ b/source/blender/blenkernel/BKE_paint.h @@ -34,6 +34,7 @@ struct MultireModifierData; struct MVert; struct Object; struct Paint; +struct PBVH; struct Scene; struct StrokeCache; @@ -68,25 +69,24 @@ typedef struct SculptSession { struct MFace *mface; int totvert, totface; float *face_normals; - + struct PBVH *tree; struct Object *ob; struct KeyBlock *kb, *refkb; /* Mesh connectivity */ struct ListBase *fmap; - struct IndexNode *fmap_mem; - int fmap_size; /* Used temporarily per-stroke */ float *vertexcosnos; - ListBase damaged_rects; - ListBase damaged_verts; + + /* Partial redraw */ + int partial_redraw; /* Used to cache the render of the active texture */ unsigned int texcache_side, *texcache, texcache_actual; /* Layer brush persistence between strokes */ - float (*mesh_co_orig)[3]; /* Copy of the mesh vertices' locations */ + float (*layer_co)[3]; /* Copy of the mesh vertices' locations */ float *layer_disps; /* Displacements for each vertex */ struct SculptStroke *stroke; diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h index 686fc265de0..c372004bd19 100644 --- a/source/blender/blenkernel/BKE_scene.h +++ b/source/blender/blenkernel/BKE_scene.h @@ -66,6 +66,7 @@ void unlink_scene(struct Main *bmain, struct Scene *sce, struct Scene *newsce); int next_object(struct Scene *scene, int val, struct Base **base, struct Object **ob); struct Object *scene_find_camera(struct Scene *sc); +struct Object *scene_find_camera_switch(struct Scene *scene); // DURIAN_CAMERA_SWITCH struct Base *scene_add_base(struct Scene *sce, struct Object *ob); void scene_deselect_all(struct Scene *sce); @@ -74,6 +75,7 @@ void scene_select_base(struct Scene *sce, struct Base *selbase); /* checks for cycle, returns 1 if it's all OK */ int scene_check_setscene(struct Scene *sce); +void scene_update_tagged(struct Scene *sce); void scene_update_for_newframe(struct Scene *sce, unsigned int lay); void scene_add_render_layer(struct Scene *sce); diff --git a/source/blender/blenkernel/BKE_sequence.h b/source/blender/blenkernel/BKE_sequencer.h similarity index 87% rename from source/blender/blenkernel/BKE_sequence.h rename to source/blender/blenkernel/BKE_sequencer.h index 2f7526d524c..070d98ce25f 100644 --- a/source/blender/blenkernel/BKE_sequence.h +++ b/source/blender/blenkernel/BKE_sequencer.h @@ -60,17 +60,17 @@ void seq_next(SeqIterator *iter); void seq_end(SeqIterator *iter); void seq_array(struct Editing *ed, struct Sequence ***seqarray, int *tot, int use_pointer); -#define SEQP_BEGIN(ed, seq) \ +#define SEQP_BEGIN(ed, _seq) \ { \ SeqIterator iter;\ for(seq_begin(ed, &iter, 1); iter.valid; seq_next(&iter)) { \ - seq= iter.seq; + _seq= iter.seq; -#define SEQ_BEGIN(ed, seq) \ +#define SEQ_BEGIN(ed, _seq) \ { \ SeqIterator iter;\ for(seq_begin(ed, &iter, 0); iter.valid; seq_next(&iter)) { \ - seq= iter.seq; + _seq= iter.seq; #define SEQ_END \ } \ @@ -125,7 +125,7 @@ struct SeqEffectHandle { float-rects or byte-rects (mixed cases are handled one layer up...) */ - void (*execute)(struct Sequence *seq, int cfra, + void (*execute)(struct Scene *scene, struct Sequence *seq, int cfra, float facf0, float facf1, int x, int y, struct ImBuf *ibuf1, struct ImBuf *ibuf2, @@ -137,10 +137,15 @@ struct SeqEffectHandle { /* sequence.c */ void printf_strip(struct Sequence *seq); +/* apply functions recursively */ +void seqbase_recursive_apply(struct ListBase *seqbase, int (*apply_func)(struct Sequence *seq, void *), void *arg); +void seq_recursive_apply(struct Sequence *seq, int (*apply_func)(struct Sequence *, void *), void *arg); + // extern void seq_free_sequence(struct Scene *scene, struct Sequence *seq); void seq_free_strip(struct Strip *strip); void seq_free_editing(struct Scene *scene); +void seq_free_clipboard(void); struct Editing *seq_give_editing(struct Scene *scene, int alloc); char *give_seqname(struct Sequence *seq); struct ImBuf *give_ibuf_seq(struct Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size); @@ -178,17 +183,23 @@ void seq_tx_set_final_left(struct Sequence *seq, int val); void seq_tx_set_final_right(struct Sequence *seq, int val); void seq_tx_handle_xlimits(struct Sequence *seq, int leftflag, int rightflag); int seq_tx_test(struct Sequence * seq); -int check_single_seq(struct Sequence *seq); -void fix_single_seq(struct Sequence *seq); +int seq_single_check(struct Sequence *seq); +void seq_single_fix(struct Sequence *seq); int seq_test_overlap(struct ListBase * seqbasep, struct Sequence *test); -int shuffle_seq(struct ListBase * seqbasep, struct Sequence *test); -int shuffle_seq_time(ListBase * seqbasep); +struct ListBase *seq_seqbase(struct ListBase *seqbase, struct Sequence *seq); +void seq_offset_animdata(struct Scene *scene, struct Sequence *seq, int ofs); +int shuffle_seq(struct ListBase * seqbasep, struct Sequence *test, struct Scene *evil_scene); +int shuffle_seq_time(ListBase * seqbasep, struct Scene *evil_scene); +int seqbase_isolated_sel_check(struct ListBase *seqbase); void free_imbuf_seq(struct Scene *scene, struct ListBase * seqbasep, int check_mem_usage); void seq_update_sound(struct Sequence *seq); +void seq_update_muting(struct Editing *ed); void clear_scene_in_allseqs(struct Scene *sce); +struct Sequence *get_seq_by_name(struct ListBase *seqbase, const char *name, int recursive); + struct Sequence *active_seq_get(struct Scene *scene); void active_seq_set(struct Scene *scene, struct Sequence *seq); @@ -224,3 +235,6 @@ struct Sequence *sequencer_add_image_strip(struct bContext *C, ListBase *seqbase struct Sequence *sequencer_add_sound_strip(struct bContext *C, ListBase *seqbasep, struct SeqLoadInfo *seq_load); struct Sequence *sequencer_add_movie_strip(struct bContext *C, ListBase *seqbasep, struct SeqLoadInfo *seq_load); +/* copy/paste */ +extern ListBase seqbase_clipboard; +extern int seqbase_clipboard_frame; diff --git a/source/blender/blenkernel/BKE_sound.h b/source/blender/blenkernel/BKE_sound.h index cbce4663d6f..64ce1983e7d 100644 --- a/source/blender/blenkernel/BKE_sound.h +++ b/source/blender/blenkernel/BKE_sound.h @@ -41,6 +41,8 @@ void sound_init(); void sound_exit(); +void sound_disable(); + struct bSound* sound_new_file(struct Main *main, char* filename); // XXX unused currently diff --git a/source/blender/blenkernel/BKE_subsurf.h b/source/blender/blenkernel/BKE_subsurf.h index f6dc22f650a..0a18850e3b7 100644 --- a/source/blender/blenkernel/BKE_subsurf.h +++ b/source/blender/blenkernel/BKE_subsurf.h @@ -34,6 +34,15 @@ struct DerivedMesh; struct EditMesh; struct MultiresSubsurf; struct SubsurfModifierData; +struct _CCGSubsurf; +struct _CCGVert; +struct _CCGEdge; +struct _CCGFace; +struct PBVH; +struct DMGridData; +struct DMGridAdjacency; + +/**************************** External *****************************/ struct DerivedMesh *subsurf_make_derived_from_derived( struct DerivedMesh *dm, @@ -41,14 +50,45 @@ struct DerivedMesh *subsurf_make_derived_from_derived( int useRenderParams, float (*vertCos)[3], int isFinalCalc, int editMode); -struct DerivedMesh *subsurf_make_derived_from_derived_with_multires( - struct DerivedMesh *dm, - struct SubsurfModifierData *smd, - struct MultiresSubsurf *ms, - int useRenderParams, float (*vertCos)[3], - int isFinalCalc, int editMode); - void subsurf_calculate_limit_positions(Mesh *me, float (*positions_r)[3]); +/**************************** Internal *****************************/ + +typedef struct CCGDerivedMesh { + DerivedMesh dm; + + struct _CCGSubSurf *ss; + int freeSS; + int drawInteriorEdges, useSubsurfUv; + + struct {int startVert; struct _CCGVert *vert;} *vertMap; + struct {int startVert; int startEdge; struct _CCGEdge *edge;} *edgeMap; + struct {int startVert; int startEdge; + int startFace; struct _CCGFace *face;} *faceMap; + + short *edgeFlags; + char *faceFlags; + + struct PBVH *pbvh; + + struct DMGridData **gridData; + struct DMGridAdjacency *gridAdjacency; + int *gridOffset; + struct _CCGFace **gridFaces; + + struct { + struct MultiresModifierData *mmd; + int local_mmd; + + int lvl, totlvl; + float (*orco)[3]; + + Object *ob; + int modified; + + void (*update)(DerivedMesh*); + } multires; +} CCGDerivedMesh; + #endif diff --git a/source/blender/blenkernel/BKE_utildefines.h b/source/blender/blenkernel/BKE_utildefines.h index c0ed8430177..c052af775f2 100644 --- a/source/blender/blenkernel/BKE_utildefines.h +++ b/source/blender/blenkernel/BKE_utildefines.h @@ -168,7 +168,15 @@ #define ENDB MAKE_ID('E','N','D','B') -/* This one rotates the bytes in an int */ +/* This one rotates the bytes in an int64, int (32) and short (16) */ +#define SWITCH_INT64(a) { \ + char s_i, *p_i; \ + p_i= (char *)&(a); \ + s_i=p_i[0]; p_i[0]=p_i[7]; p_i[7]=s_i; \ + s_i=p_i[1]; p_i[1]=p_i[6]; p_i[6]=s_i; \ + s_i=p_i[2]; p_i[2]=p_i[5]; p_i[5]=s_i; \ + s_i=p_i[3]; p_i[3]=p_i[4]; p_i[4]=s_i; } + #define SWITCH_INT(a) { \ char s_i, *p_i; \ p_i= (char *)&(a); \ diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt index d2a6587336a..69d43317013 100644 --- a/source/blender/blenkernel/CMakeLists.txt +++ b/source/blender/blenkernel/CMakeLists.txt @@ -34,6 +34,7 @@ SET(INC ../nodes ../../../extern/glew/include ../gpu ../makesrna ../../../intern/smoke/extern ../../../intern/bsp/extern ../blenfont ../../../intern/audaspace/intern + ../../../source/blender/windowmanager # XXX - BAD LEVEL CALL WM_api.h ${ZLIB_INC} ) diff --git a/source/blender/blenkernel/SConscript b/source/blender/blenkernel/SConscript index fdd3a9e5276..d8201c277f7 100644 --- a/source/blender/blenkernel/SConscript +++ b/source/blender/blenkernel/SConscript @@ -3,7 +3,8 @@ Import ('env') sources = env.Glob('intern/*.c') -incs = '. #/intern/guardedalloc #/intern/memutil ../editors/include ../blenlib ../blenfont ../makesdna' +incs = '. #/intern/guardedalloc #/intern/memutil ../editors/include' +incs += ' ../blenlib ../blenfont ../makesdna ../windowmanager' incs += ' ../render/extern/include #/intern/decimation/extern ../makesrna' incs += ' ../imbuf ../ikplugin ../avi #/intern/elbeem/extern ../nodes' incs += ' #/intern/iksolver/extern ../blenloader ../freestyle' diff --git a/source/blender/blenkernel/intern/CCGSubSurf.c b/source/blender/blenkernel/intern/CCGSubSurf.c index 355ea70b178..dc863869ad8 100644 --- a/source/blender/blenkernel/intern/CCGSubSurf.c +++ b/source/blender/blenkernel/intern/CCGSubSurf.c @@ -8,6 +8,12 @@ #include "BLO_sys_types.h" // for intptr_t support +#ifdef _MSC_VER +#define CCG_INLINE __inline +#else +#define CCG_INLINE inline +#endif + /* used for normalize_v3 in BLI_math_vector * float.h's FLT_EPSILON causes trouble with subsurf normals - campbell */ #define EPSILON (1.0e-35f) @@ -523,19 +529,19 @@ static CCGFace *_face_new(CCGFaceHDL fHDL, CCGVert **verts, CCGEdge **edges, int return f; } -static void *_face_getIECo(CCGFace *f, int lvl, int S, int x, int levels, int dataSize) { +static CCG_INLINE void *_face_getIECo(CCGFace *f, int lvl, int S, int x, int levels, int dataSize) { int maxGridSize = 1 + (1<<(levels-1)); int spacing = 1<<(levels-lvl); byte *gridBase = FACE_getCenterData(f) + dataSize*(1 + S*(maxGridSize + maxGridSize*maxGridSize)); return &gridBase[dataSize*x*spacing]; } -static void *_face_getIFCo(CCGFace *f, int lvl, int S, int x, int y, int levels, int dataSize) { +static CCG_INLINE void *_face_getIFCo(CCGFace *f, int lvl, int S, int x, int y, int levels, int dataSize) { int maxGridSize = 1 + (1<<(levels-1)); int spacing = 1<<(levels-lvl); byte *gridBase = FACE_getCenterData(f) + dataSize*(1 + S*(maxGridSize + maxGridSize*maxGridSize)); return &gridBase[dataSize*(maxGridSize + (y*maxGridSize + x)*spacing)]; } -static float *_face_getIFNo(CCGFace *f, int lvl, int S, int x, int y, int levels, int dataSize, int normalDataOffset) { +static CCG_INLINE float *_face_getIFNo(CCGFace *f, int lvl, int S, int x, int y, int levels, int dataSize, int normalDataOffset) { int maxGridSize = 1 + (1<<(levels-1)); int spacing = 1<<(levels-lvl); byte *gridBase = FACE_getCenterData(f) + dataSize*(1 + S*(maxGridSize + maxGridSize*maxGridSize)); @@ -548,7 +554,7 @@ static int _face_getVertIndex(CCGFace *f, CCGVert *v) { return i; return -1; } -static void *_face_getIFCoEdge(CCGFace *f, CCGEdge *e, int lvl, int eX, int eY, int levels, int dataSize) { +static CCG_INLINE void *_face_getIFCoEdge(CCGFace *f, CCGEdge *e, int lvl, int eX, int eY, int levels, int dataSize) { int maxGridSize = 1 + (1<<(levels-1)); int spacing = 1<<(levels-lvl); int S, x, y, cx, cy; @@ -1133,6 +1139,666 @@ CCGError ccgSubSurf_processSync(CCGSubSurf *ss) { return eCCGError_None; } +#define FACE_getIFNo(f, lvl, S, x, y) _face_getIFNo(f, lvl, S, x, y, subdivLevels, vertDataSize, normalDataOffset) +#define FACE_calcIFNo(f, lvl, S, x, y, no) _face_calcIFNo(f, lvl, S, x, y, no, subdivLevels, vertDataSize) +static void ccgSubSurf__calcVertNormals(CCGSubSurf *ss, + CCGVert **effectedV, CCGEdge **effectedE, CCGFace **effectedF, + int numEffectedV, int numEffectedE, int numEffectedF) { + int i,ptrIdx; + int subdivLevels = ss->subdivLevels; + int lvl = ss->subdivLevels; + int edgeSize = 1 + (1<normalDataOffset; + int vertDataSize = ss->meshIFC.vertDataSize; + + #pragma omp parallel for private(ptrIdx) schedule(static) + for (ptrIdx=0; ptrIdxnumVerts; S++) { + for (y=0; ynumVerts)%f->numVerts]->flags&Edge_eEffected) + for (x=0; xflags&Edge_eEffected) + for (y=0; yflags&Vert_eEffected) + NormZero(FACE_getIFNo(f, lvl, S, gridSize-1, gridSize-1)); + } + + for (S=0; SnumVerts; S++) { + int yLimit = !(FACE_getEdges(f)[(S-1+f->numVerts)%f->numVerts]->flags&Edge_eEffected); + int xLimit = !(FACE_getEdges(f)[S]->flags&Edge_eEffected); + int yLimitNext = xLimit; + int xLimitPrev = yLimit; + + for (y=0; yflags&Vert_eEffected) { + NormAdd(FACE_getIFNo(f, lvl, S, x+1, y+1), no); + } + } + + if (x==0 && y==0) { + int K; + + if (!yLimitNext || 1numVerts, 0, 1), no); + if (!xLimitPrev || 1numVerts)%f->numVerts, 1, 0), no); + + for (K=0; KnumVerts; K++) { + if (K!=S) { + NormAdd(FACE_getIFNo(f, lvl, K, 0, 0), no); + } + } + } else if (y==0) { + NormAdd(FACE_getIFNo(f, lvl, (S+1)%f->numVerts, 0, x), no); + if (!yLimitNext || xnumVerts, 0, x+1), no); + } else if (x==0) { + NormAdd(FACE_getIFNo(f, lvl, (S-1+f->numVerts)%f->numVerts, y, 0), no); + if (!xLimitPrev || ynumVerts)%f->numVerts, y+1, 0), no); + } + } + } + } + } + // XXX can I reduce the number of normalisations here? + for (ptrIdx=0; ptrIdxnumFaces; i++) { + CCGFace *f = v->faces[i]; + NormAdd(no, FACE_getIFNo(f, lvl, _face_getVertIndex(f,v), gridSize-1, gridSize-1)); + } + + length = sqrt(no[0]*no[0] + no[1]*no[1] + no[2]*no[2]); + + if (length>EPSILON) { + float invLength = 1.0f/length; + no[0] *= invLength; + no[1] *= invLength; + no[2] *= invLength; + } else { + NormZero(no); + } + + for (i=0; inumFaces; i++) { + CCGFace *f = v->faces[i]; + NormCopy(FACE_getIFNo(f, lvl, _face_getVertIndex(f,v), gridSize-1, gridSize-1), no); + } + } + for (ptrIdx=0; ptrIdxnumFaces) { + CCGFace *fLast = e->faces[e->numFaces-1]; + int x; + + for (i=0; inumFaces-1; i++) { + CCGFace *f = e->faces[i]; + + for (x=1; xnumFaces-1; i++) { + CCGFace *f = e->faces[i]; + + for (x=1; xnumVerts; S++) { + NormCopy(FACE_getIFNo(f, lvl, (S+1)%f->numVerts, 0, gridSize-1), + FACE_getIFNo(f, lvl, S, gridSize-1, 0)); + } + + for (S=0; SnumVerts; S++) { + for (y=0; yEPSILON) { + float invLength = 1.0f/length; + no[0] *= invLength; + no[1] *= invLength; + no[2] *= invLength; + } else { + NormZero(no); + } + } + } + } + } +} +#undef FACE_getIFNo + +#define VERT_getCo(v, lvl) _vert_getCo(v, lvl, vertDataSize) +#define EDGE_getCo(e, lvl, x) _edge_getCo(e, lvl, x, vertDataSize) +#define FACE_getIECo(f, lvl, S, x) _face_getIECo(f, lvl, S, x, subdivLevels, vertDataSize) +#define FACE_getIFCo(f, lvl, S, x, y) _face_getIFCo(f, lvl, S, x, y, subdivLevels, vertDataSize) +static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss, + CCGVert **effectedV, CCGEdge **effectedE, CCGFace **effectedF, + int numEffectedV, int numEffectedE, int numEffectedF, int curLvl) { + int subdivLevels = ss->subdivLevels; + int edgeSize = 1 + (1<meshIFC.vertDataSize; + void *q = ss->q, *r = ss->r; + + #pragma omp parallel for private(ptrIdx) schedule(static) + for (ptrIdx=0; ptrIdxnumVerts; S++) { + for (y=0; ynumVerts; S++) { + for (x=0; xnumVerts, 1, fx); + void *co3 = FACE_getIFCo(f, nextLvl, S, fx, 1); + void *co = FACE_getIECo(f, nextLvl, S, fx); + + VertDataAvg4(co, co0, co1, co2, co3); + } + + /* interior face interior edge midpoints + * o old interior face points + * o new interior face midpoints + */ + + /* vertical */ + for (x=1; x1.0) { + for (x=0; xnumFaces; j++) { + CCGFace *f = e->faces[j]; + VertDataAdd(q, _face_getIFCoEdge(f, e, nextLvl, fx, 1, subdivLevels, vertDataSize)); + numFaces++; + } + + VertDataMulN(q, 1.0f/(2.0f+numFaces)); + + VertDataCopy(r, co0); + VertDataAdd(r, co1); + VertDataMulN(r, 0.5); + + VertDataCopy(co, q); + VertDataSub(r, q); + VertDataMulN(r, sharpness); + VertDataAdd(co, r); + } + } + } + + /* exterior vertex shift + * o old vertex points (shifting) + * o old exterior edge points + * o new interior face midpoints + */ + for (ptrIdx=0; ptrIdxnumEdges; j++) { + CCGEdge *e = v->edges[j]; + float sharpness = EDGE_getSharpness(e, curLvl); + + if (seam && _edge_isBoundary(e)) + seamEdges++; + + if (sharpness!=0.0f) { + sharpCount++; + avgSharpness += sharpness; + } else { + allSharp = 0; + } + } + + if(sharpCount) { + avgSharpness /= sharpCount; + if (avgSharpness>1.0) { + avgSharpness = 1.0; + } + } + + if (seam && seamEdges < 2) + seam = 0; + + if (!v->numEdges) { + VertDataCopy(nCo, co); + } else if (_vert_isBoundary(v)) { + int numBoundary = 0; + + VertDataZero(r); + for (j=0; jnumEdges; j++) { + CCGEdge *e = v->edges[j]; + if (_edge_isBoundary(e)) { + VertDataAdd(r, _edge_getCoVert(e, v, curLvl, 1, vertDataSize)); + numBoundary++; + } + } + + VertDataCopy(nCo, co); + VertDataMulN(nCo, 0.75); + VertDataMulN(r, 0.25f/numBoundary); + VertDataAdd(nCo, r); + } else { + int cornerIdx = (1 + (1<<(curLvl))) - 2; + int numEdges = 0, numFaces = 0; + + VertDataZero(q); + for (j=0; jnumFaces; j++) { + CCGFace *f = v->faces[j]; + VertDataAdd(q, FACE_getIFCo(f, nextLvl, _face_getVertIndex(f,v), cornerIdx, cornerIdx)); + numFaces++; + } + VertDataMulN(q, 1.0f/numFaces); + VertDataZero(r); + for (j=0; jnumEdges; j++) { + CCGEdge *e = v->edges[j]; + VertDataAdd(r, _edge_getCoVert(e, v, curLvl, 1,vertDataSize)); + numEdges++; + } + VertDataMulN(r, 1.0f/numEdges); + + VertDataCopy(nCo, co); + VertDataMulN(nCo, numEdges-2.0f); + VertDataAdd(nCo, q); + VertDataAdd(nCo, r); + VertDataMulN(nCo, 1.0f/numEdges); + } + + if ((sharpCount>1 && v->numFaces) || seam) { + VertDataZero(q); + + if (seam) { + avgSharpness = 1.0f; + sharpCount = seamEdges; + allSharp = 1; + } + + for (j=0; jnumEdges; j++) { + CCGEdge *e = v->edges[j]; + float sharpness = EDGE_getSharpness(e, curLvl); + + if (seam) { + if (_edge_isBoundary(e)) + VertDataAdd(q, _edge_getCoVert(e, v, curLvl, 1, vertDataSize)); + } else if (sharpness != 0.0) { + VertDataAdd(q, _edge_getCoVert(e, v, curLvl, 1, vertDataSize)); + } + } + + VertDataMulN(q, (float) 1/sharpCount); + + if (sharpCount!=2 || allSharp) { + // q = q + (co-q)*avgSharpness + VertDataCopy(r, co); + VertDataSub(r, q); + VertDataMulN(r, avgSharpness); + VertDataAdd(q, r); + } + + // r = co*.75 + q*.25 + VertDataCopy(r, co); + VertDataMulN(r, .75); + VertDataMulN(q, .25); + VertDataAdd(r, q); + + // nCo = nCo + (r-nCo)*avgSharpness + VertDataSub(r, nCo); + VertDataMulN(r, avgSharpness); + VertDataAdd(nCo, r); + } + } + + /* exterior edge interior shift + * o old exterior edge midpoints (shifting) + * o old exterior edge midpoints + * o new interior face midpoints + */ + for (ptrIdx=0; ptrIdx1.0) { + avgSharpness = 1.0; + } + } else { + sharpCount = 0; + avgSharpness = 0; + } + + if (_edge_isBoundary(e) && (!e->numFaces || sharpCount<2)) { + for (x=1; xnumFaces; j++) { + CCGFace *f = e->faces[j]; + VertDataAdd(q, _face_getIFCoEdge(f, e, nextLvl, fx-1, 1, subdivLevels, vertDataSize)); + VertDataAdd(q, _face_getIFCoEdge(f, e, nextLvl, fx+1, 1, subdivLevels, vertDataSize)); + + VertDataAdd(r, _face_getIFCoEdge(f, e, curLvl, x, 1, subdivLevels, vertDataSize)); + numFaces++; + } + VertDataMulN(q, 1.0/(numFaces*2.0f)); + VertDataMulN(r, 1.0/(2.0f + numFaces)); + + VertDataCopy(nCo, co); + VertDataMulN(nCo, (float) numFaces); + VertDataAdd(nCo, q); + VertDataAdd(nCo, r); + VertDataMulN(nCo, 1.0f/(2+numFaces)); + + if (sharpCount==2) { + VertDataCopy(q, co); + VertDataMulN(q, 6.0f); + VertDataAdd(q, EDGE_getCo(e, curLvl, x-1)); + VertDataAdd(q, EDGE_getCo(e, curLvl, x+1)); + VertDataMulN(q, 1/8.0f); + + VertDataSub(q, nCo); + VertDataMulN(q, avgSharpness); + VertDataAdd(nCo, q); + } + } + } + } + + #pragma omp parallel private(ptrIdx) + { + void *q, *r; + + #pragma omp critical + { + q = CCGSUBSURF_alloc(ss, ss->meshIFC.vertDataSize); + r = CCGSUBSURF_alloc(ss, ss->meshIFC.vertDataSize); + } + + #pragma omp for schedule(static) + for (ptrIdx=0; ptrIdxnumVerts; S++) { + VertDataAdd(q, FACE_getIFCo(f, nextLvl, S, 1, 1)); + } + VertDataMulN(q, 1.0f/f->numVerts); + VertDataZero(r); + for (S=0; SnumVerts; S++) { + VertDataAdd(r, FACE_getIECo(f, curLvl, S, 1)); + } + VertDataMulN(r, 1.0f/f->numVerts); + + VertDataMulN(FACE_getCenterData(f), f->numVerts-2.0f); + VertDataAdd(FACE_getCenterData(f), q); + VertDataAdd(FACE_getCenterData(f), r); + VertDataMulN(FACE_getCenterData(f), 1.0f/f->numVerts); + + for (S=0; SnumVerts; S++) { + /* interior face shift + * o old interior face point (shifting) + * o new interior edge midpoints + * o new interior face midpoints + */ + for (x=1; xnumVerts, 1, fx-1), + FACE_getIFCo(f, nextLvl, (S+1)%f->numVerts, 1, fx+1), + FACE_getIFCo(f, nextLvl, S, fx+1, +1), + FACE_getIFCo(f, nextLvl, S, fx-1, +1)); + + VertDataAvg4(r, FACE_getIECo(f, nextLvl, S, fx-1), + FACE_getIECo(f, nextLvl, S, fx+1), + FACE_getIFCo(f, nextLvl, (S+1)%f->numVerts, 1, fx), + FACE_getIFCo(f, nextLvl, S, fx, 1)); + + VertDataCopy(nCo, co); + VertDataSub(nCo, q); + VertDataMulN(nCo, 0.25f); + VertDataAdd(nCo, r); + } + } + } + + #pragma omp critical + { + CCGSUBSURF_free(ss, q); + CCGSUBSURF_free(ss, r); + } + } + + /* copy down */ + edgeSize = 1 + (1<<(nextLvl)); + gridSize = 1 + (1<<((nextLvl)-1)); + cornerIdx = gridSize-1; + + #pragma omp parallel for private(i) schedule(static) + for (i=0; iv0, nextLvl)); + VertDataCopy(EDGE_getCo(e, nextLvl, edgeSize-1), VERT_getCo(e->v1, nextLvl)); + } + + #pragma omp parallel for private(i) schedule(static) + for (i=0; inumVerts; S++) { + CCGEdge *e = FACE_getEdges(f)[S]; + CCGEdge *prevE = FACE_getEdges(f)[(S+f->numVerts-1)%f->numVerts]; + + VertDataCopy(FACE_getIFCo(f, nextLvl, S, 0, 0), FACE_getCenterData(f)); + VertDataCopy(FACE_getIECo(f, nextLvl, S, 0), FACE_getCenterData(f)); + VertDataCopy(FACE_getIFCo(f, nextLvl, S, cornerIdx, cornerIdx), VERT_getCo(FACE_getVerts(f)[S], nextLvl)); + VertDataCopy(FACE_getIECo(f, nextLvl, S, cornerIdx), EDGE_getCo(FACE_getEdges(f)[S], nextLvl, cornerIdx)); + for (x=1; xnumVerts, 0, x), co); + } + for (x=0; xsubdivLevels; int vertDataSize = ss->meshIFC.vertDataSize; - int i,ptrIdx,cornerIdx; - int S,x,y; - void *q = ss->q, *r = ss->r; + int i, j, ptrIdx, S; int curLvl, nextLvl; - int j; + void *q = ss->q, *r = ss->r; effectedV = CCGSUBSURF_alloc(ss, sizeof(*effectedV)*ss->vMap->numEntries); effectedE = CCGSUBSURF_alloc(ss, sizeof(*effectedE)*ss->eMap->numEntries); @@ -1175,10 +1839,6 @@ static void ccgSubSurf__sync(CCGSubSurf *ss) { } } -#define VERT_getCo(v, lvl) _vert_getCo(v, lvl, vertDataSize) -#define EDGE_getCo(e, lvl, x) _edge_getCo(e, lvl, x, vertDataSize) -#define FACE_getIECo(f, lvl, S, x) _face_getIECo(f, lvl, S, x, subdivLevels, vertDataSize) -#define FACE_getIFCo(f, lvl, S, x, y) _face_getIFCo(f, lvl, S, x, y, subdivLevels, vertDataSize) curLvl = 0; nextLvl = curLvl+1; @@ -1391,625 +2051,15 @@ static void ccgSubSurf__sync(CCGSubSurf *ss) { } for (curLvl=1; curLvlnumVerts; S++) { - for (y=0; ynumVerts; S++) { - for (x=0; xnumVerts, 1, fx); - void *co3 = FACE_getIFCo(f, nextLvl, S, fx, 1); - void *co = FACE_getIECo(f, nextLvl, S, fx); - - VertDataAvg4(co, co0, co1, co2, co3); - } - - /* interior face interior edge midpoints - * o old interior face points - * o new interior face midpoints - */ - - /* vertical */ - for (x=1; x1.0) { - for (x=0; xnumFaces; i++) { - CCGFace *f = e->faces[i]; - VertDataAdd(q, _face_getIFCoEdge(f, e, nextLvl, fx, 1, subdivLevels, vertDataSize)); - numFaces++; - } - - VertDataMulN(q, 1.0f/(2.0f+numFaces)); - - VertDataCopy(r, co0); - VertDataAdd(r, co1); - VertDataMulN(r, 0.5); - - VertDataCopy(co, q); - VertDataSub(r, q); - VertDataMulN(r, sharpness); - VertDataAdd(co, r); - } - } - } - - /* exterior vertex shift - * o old vertex points (shifting) - * o old exterior edge points - * o new interior face midpoints - */ - for (ptrIdx=0; ptrIdxnumEdges; i++) { - CCGEdge *e = v->edges[i]; - float sharpness = EDGE_getSharpness(e, curLvl); - - if (seam && _edge_isBoundary(e)) - seamEdges++; - - if (sharpness!=0.0f) { - sharpCount++; - avgSharpness += sharpness; - } else { - allSharp = 0; - } - } - - if(sharpCount) { - avgSharpness /= sharpCount; - if (avgSharpness>1.0) { - avgSharpness = 1.0; - } - } - - if (seam && seamEdges < 2) - seam = 0; - - if (!v->numEdges) { - VertDataCopy(nCo, co); - } else if (_vert_isBoundary(v)) { - int numBoundary = 0; - - VertDataZero(r); - for (i=0; inumEdges; i++) { - CCGEdge *e = v->edges[i]; - if (_edge_isBoundary(e)) { - VertDataAdd(r, _edge_getCoVert(e, v, curLvl, 1, vertDataSize)); - numBoundary++; - } - } - - VertDataCopy(nCo, co); - VertDataMulN(nCo, 0.75); - VertDataMulN(r, 0.25f/numBoundary); - VertDataAdd(nCo, r); - } else { - int cornerIdx = (1 + (1<<(curLvl))) - 2; - int numEdges = 0, numFaces = 0; - - VertDataZero(q); - for (i=0; inumFaces; i++) { - CCGFace *f = v->faces[i]; - VertDataAdd(q, FACE_getIFCo(f, nextLvl, _face_getVertIndex(f,v), cornerIdx, cornerIdx)); - numFaces++; - } - VertDataMulN(q, 1.0f/numFaces); - VertDataZero(r); - for (i=0; inumEdges; i++) { - CCGEdge *e = v->edges[i]; - VertDataAdd(r, _edge_getCoVert(e, v, curLvl, 1,vertDataSize)); - numEdges++; - } - VertDataMulN(r, 1.0f/numEdges); - - VertDataCopy(nCo, co); - VertDataMulN(nCo, numEdges-2.0f); - VertDataAdd(nCo, q); - VertDataAdd(nCo, r); - VertDataMulN(nCo, 1.0f/numEdges); - } - - if ((sharpCount>1 && v->numFaces) || seam) { - VertDataZero(q); - - if (seam) { - avgSharpness = 1.0f; - sharpCount = seamEdges; - allSharp = 1; - } - - for (i=0; inumEdges; i++) { - CCGEdge *e = v->edges[i]; - float sharpness = EDGE_getSharpness(e, curLvl); - - if (seam) { - if (_edge_isBoundary(e)) - VertDataAdd(q, _edge_getCoVert(e, v, curLvl, 1, vertDataSize)); - } else if (sharpness != 0.0) { - VertDataAdd(q, _edge_getCoVert(e, v, curLvl, 1, vertDataSize)); - } - } - - VertDataMulN(q, (float) 1/sharpCount); - - if (sharpCount!=2 || allSharp) { - // q = q + (co-q)*avgSharpness - VertDataCopy(r, co); - VertDataSub(r, q); - VertDataMulN(r, avgSharpness); - VertDataAdd(q, r); - } - - // r = co*.75 + q*.25 - VertDataCopy(r, co); - VertDataMulN(r, .75); - VertDataMulN(q, .25); - VertDataAdd(r, q); - - // nCo = nCo + (r-nCo)*avgSharpness - VertDataSub(r, nCo); - VertDataMulN(r, avgSharpness); - VertDataAdd(nCo, r); - } - } - - /* exterior edge interior shift - * o old exterior edge midpoints (shifting) - * o old exterior edge midpoints - * o new interior face midpoints - */ - for (ptrIdx=0; ptrIdx1.0) { - avgSharpness = 1.0; - } - } else { - sharpCount = 0; - avgSharpness = 0; - } - - if (_edge_isBoundary(e) && (!e->numFaces || sharpCount<2)) { - for (x=1; xnumFaces; i++) { - CCGFace *f = e->faces[i]; - VertDataAdd(q, _face_getIFCoEdge(f, e, nextLvl, fx-1, 1, subdivLevels, vertDataSize)); - VertDataAdd(q, _face_getIFCoEdge(f, e, nextLvl, fx+1, 1, subdivLevels, vertDataSize)); - - VertDataAdd(r, _face_getIFCoEdge(f, e, curLvl, x, 1, subdivLevels, vertDataSize)); - numFaces++; - } - VertDataMulN(q, 1.0/(numFaces*2.0f)); - VertDataMulN(r, 1.0/(2.0f + numFaces)); - - VertDataCopy(nCo, co); - VertDataMulN(nCo, (float) numFaces); - VertDataAdd(nCo, q); - VertDataAdd(nCo, r); - VertDataMulN(nCo, 1.0f/(2+numFaces)); - - if (sharpCount==2) { - VertDataCopy(q, co); - VertDataMulN(q, 6.0f); - VertDataAdd(q, EDGE_getCo(e, curLvl, x-1)); - VertDataAdd(q, EDGE_getCo(e, curLvl, x+1)); - VertDataMulN(q, 1/8.0f); - - VertDataSub(q, nCo); - VertDataMulN(q, avgSharpness); - VertDataAdd(nCo, q); - } - } - } - } - - for (ptrIdx=0; ptrIdxnumVerts; S++) { - VertDataAdd(q, FACE_getIFCo(f, nextLvl, S, 1, 1)); - } - VertDataMulN(q, 1.0f/f->numVerts); - VertDataZero(r); - for (S=0; SnumVerts; S++) { - VertDataAdd(r, FACE_getIECo(f, curLvl, S, 1)); - } - VertDataMulN(r, 1.0f/f->numVerts); - - VertDataMulN(FACE_getCenterData(f), f->numVerts-2.0f); - VertDataAdd(FACE_getCenterData(f), q); - VertDataAdd(FACE_getCenterData(f), r); - VertDataMulN(FACE_getCenterData(f), 1.0f/f->numVerts); - - for (S=0; SnumVerts; S++) { - /* interior face shift - * o old interior face point (shifting) - * o new interior edge midpoints - * o new interior face midpoints - */ - for (x=1; xnumVerts, 1, fx-1), - FACE_getIFCo(f, nextLvl, (S+1)%f->numVerts, 1, fx+1), - FACE_getIFCo(f, nextLvl, S, fx+1, +1), - FACE_getIFCo(f, nextLvl, S, fx-1, +1)); - - VertDataAvg4(r, FACE_getIECo(f, nextLvl, S, fx-1), - FACE_getIECo(f, nextLvl, S, fx+1), - FACE_getIFCo(f, nextLvl, (S+1)%f->numVerts, 1, fx), - FACE_getIFCo(f, nextLvl, S, fx, 1)); - - VertDataCopy(nCo, co); - VertDataSub(nCo, q); - VertDataMulN(nCo, 0.25f); - VertDataAdd(nCo, r); - } - } - } - - /* copy down */ - edgeSize = 1 + (1<<(nextLvl)); - gridSize = 1 + (1<<((nextLvl)-1)); - cornerIdx = gridSize-1; - for (i=0; iv0, nextLvl)); - VertDataCopy(EDGE_getCo(e, nextLvl, edgeSize-1), VERT_getCo(e->v1, nextLvl)); - } - for (i=0; inumVerts; S++) { - CCGEdge *e = FACE_getEdges(f)[S]; - CCGEdge *prevE = FACE_getEdges(f)[(S+f->numVerts-1)%f->numVerts]; - - VertDataCopy(FACE_getIFCo(f, nextLvl, S, 0, 0), FACE_getCenterData(f)); - VertDataCopy(FACE_getIECo(f, nextLvl, S, 0), FACE_getCenterData(f)); - VertDataCopy(FACE_getIFCo(f, nextLvl, S, cornerIdx, cornerIdx), VERT_getCo(FACE_getVerts(f)[S], nextLvl)); - VertDataCopy(FACE_getIECo(f, nextLvl, S, cornerIdx), EDGE_getCo(FACE_getEdges(f)[S], nextLvl, cornerIdx)); - for (x=1; xnumVerts, 0, x), co); - } - for (x=0; xcalcVertNormals) { - int lvl = ss->subdivLevels; - int edgeSize = 1 + (1<normalDataOffset; - - for (ptrIdx=0; ptrIdxnumVerts; S++) { - for (y=0; ynumVerts)%f->numVerts]->flags&Edge_eEffected) - for (x=0; xflags&Edge_eEffected) - for (y=0; yflags&Vert_eEffected) - NormZero(FACE_getIFNo(f, lvl, S, gridSize-1, gridSize-1)); - } - } - - for (ptrIdx=0; ptrIdxnumVerts; S++) { - int yLimit = !(FACE_getEdges(f)[(S-1+f->numVerts)%f->numVerts]->flags&Edge_eEffected); - int xLimit = !(FACE_getEdges(f)[S]->flags&Edge_eEffected); - int yLimitNext = xLimit; - int xLimitPrev = yLimit; - - for (y=0; yflags&Vert_eEffected) { - NormAdd(FACE_getIFNo(f, lvl, S, x+1, y+1), no); - } - } - - if (x==0 && y==0) { - int K; - - if (!yLimitNext || 1numVerts, 0, 1), no); - if (!xLimitPrev || 1numVerts)%f->numVerts, 1, 0), no); - - for (K=0; KnumVerts; K++) { - if (K!=S) { - NormAdd(FACE_getIFNo(f, lvl, K, 0, 0), no); - } - } - } else if (y==0) { - NormAdd(FACE_getIFNo(f, lvl, (S+1)%f->numVerts, 0, x), no); - if (!yLimitNext || xnumVerts, 0, x+1), no); - } else if (x==0) { - NormAdd(FACE_getIFNo(f, lvl, (S-1+f->numVerts)%f->numVerts, y, 0), no); - if (!xLimitPrev || ynumVerts)%f->numVerts, y+1, 0), no); - } - } - } - } - } - // XXX can I reduce the number of normalisations here? - for (ptrIdx=0; ptrIdxnumFaces; i++) { - CCGFace *f = v->faces[i]; - NormAdd(no, FACE_getIFNo(f, lvl, _face_getVertIndex(f,v), gridSize-1, gridSize-1)); - } - - length = sqrt(no[0]*no[0] + no[1]*no[1] + no[2]*no[2]); - - if (length>EPSILON) { - float invLength = 1.0f/length; - no[0] *= invLength; - no[1] *= invLength; - no[2] *= invLength; - } else { - NormZero(no); - } - - for (i=0; inumFaces; i++) { - CCGFace *f = v->faces[i]; - NormCopy(FACE_getIFNo(f, lvl, _face_getVertIndex(f,v), gridSize-1, gridSize-1), no); - } - } - for (ptrIdx=0; ptrIdxnumFaces) { - CCGFace *fLast = e->faces[e->numFaces-1]; - int x; - - for (i=0; inumFaces-1; i++) { - CCGFace *f = e->faces[i]; - - for (x=1; xnumFaces-1; i++) { - CCGFace *f = e->faces[i]; - - for (x=1; xnumVerts; S++) { - NormCopy(FACE_getIFNo(f, lvl, (S+1)%f->numVerts, 0, gridSize-1), - FACE_getIFNo(f, lvl, S, gridSize-1, 0)); - } - } - for (ptrIdx=0; ptrIdxnumVerts; S++) { - for (y=0; yEPSILON) { - float invLength = 1.0f/length; - no[0] *= invLength; - no[1] *= invLength; - no[2] *= invLength; - } else { - NormZero(no); - } - } - } - } - } - } -#undef FACE_getIFNo + if (ss->calcVertNormals) + ccgSubSurf__calcVertNormals(ss, + effectedV, effectedE, effectedF, + numEffectedV, numEffectedE, numEffectedF); for (ptrIdx=0; ptrIdxflags = 0; } -#undef VERT_getCo -#undef EDGE_getCo -#undef FACE_getIECo -#undef FACE_getIFCo - CCGSUBSURF_free(ss, effectedF); CCGSUBSURF_free(ss, effectedE); CCGSUBSURF_free(ss, effectedV); } +static void ccgSubSurf__allFaces(CCGSubSurf *ss, CCGFace ***faces, int *numFaces, int *freeFaces) +{ + CCGFace **array; + int i, num; + + if(!*faces) { + array = CCGSUBSURF_alloc(ss, sizeof(*array)*ss->fMap->numEntries); + num = 0; + for (i=0; ifMap->curSize; i++) { + CCGFace *f = (CCGFace*) ss->fMap->buckets[i]; + + for (; f; f = f->next) + array[num++] = f; + } + + *faces = array; + *numFaces = num; + *freeFaces= 1; + } + else + *freeFaces= 0; +} + +static void ccgSubSurf__effectedFaceNeighbours(CCGSubSurf *ss, CCGFace **faces, int numFaces, CCGVert ***verts, int *numVerts, CCGEdge ***edges, int *numEdges) +{ + CCGVert **arrayV; + CCGEdge **arrayE; + int numV, numE, i, j; + + arrayV = CCGSUBSURF_alloc(ss, sizeof(*arrayV)*ss->vMap->numEntries); + arrayE = CCGSUBSURF_alloc(ss, sizeof(*arrayE)*ss->eMap->numEntries); + numV = numE = 0; + + for (i=0; iflags |= Face_eEffected; + } + + for (i=0; ivMap->curSize; i++) { + CCGVert *v = (CCGVert*) ss->vMap->buckets[i]; + + for (; v; v = v->next) { + for(j=0; jnumFaces; j++) + if(!(v->faces[j]->flags & Face_eEffected)) + break; + + if(j == v->numFaces) { + arrayV[numV++] = v; + v->flags |= Vert_eEffected; + } + } + } + + for (i=0; ieMap->curSize; i++) { + CCGEdge *e = (CCGEdge*) ss->eMap->buckets[i]; + + for (; e; e = e->next) { + for(j=0; jnumFaces; j++) + if(!(e->faces[j]->flags & Face_eEffected)) + break; + + if(j == e->numFaces) { + e->flags |= Edge_eEffected; + arrayE[numE++] = e; + } + } + } + + *verts = arrayV; + *numVerts = numV; + *edges = arrayE; + *numEdges = numE; +} + +/* copy face grid coordinates to other places */ +CCGError ccgSubSurf_updateFromFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF) +{ + int i, S, x, gridSize, cornerIdx, subdivLevels; + int vertDataSize = ss->meshIFC.vertDataSize, freeF; + + subdivLevels = ss->subdivLevels; + lvl = (lvl)? lvl: subdivLevels; + gridSize = 1 + (1<<(lvl-1)); + cornerIdx = gridSize-1; + + ccgSubSurf__allFaces(ss, &effectedF, &numEffectedF, &freeF); + + for (i=0; inumVerts; S++) { + CCGEdge *e = FACE_getEdges(f)[S]; + CCGEdge *prevE = FACE_getEdges(f)[(S+f->numVerts-1)%f->numVerts]; + + VertDataCopy(FACE_getCenterData(f), FACE_getIFCo(f, lvl, S, 0, 0)); + VertDataCopy(VERT_getCo(FACE_getVerts(f)[S], lvl), FACE_getIFCo(f, lvl, S, cornerIdx, cornerIdx)); + + for (x=0; xmeshIFC.vertDataSize, freeF; + + subdivLevels = ss->subdivLevels; + lvl = (lvl)? lvl: subdivLevels; + gridSize = 1 + (1<<(lvl-1)); + cornerIdx = gridSize-1; + + ccgSubSurf__allFaces(ss, &effectedF, &numEffectedF, &freeF); + + for (i=0; inumVerts; S++) { + int prevS = (S+f->numVerts-1)%f->numVerts; + CCGEdge *e = FACE_getEdges(f)[S]; + CCGEdge *prevE = FACE_getEdges(f)[prevS]; + + for (x=0; xmeshIFC.vertDataSize; + + subdivLevels = ss->subdivLevels; + lvl = (lvl)? lvl: subdivLevels; + gridSize = 1 + (1<<(lvl-1)); + edgeSize = 1 + (1<numVerts; S++) + if (FACE_getEdges(f)[S]->flags&Edge_eEffected) + for (x=0; xnumVerts; S++) { + int prevS = (S+f->numVerts-1)%f->numVerts; + CCGEdge *e = FACE_getEdges(f)[S]; + CCGEdge *prevE = FACE_getEdges(f)[prevS]; + + VertDataAdd(FACE_getCenterData(f), FACE_getIFCo(f, lvl, S, 0, 0)); + if (FACE_getVerts(f)[S]->flags&Vert_eEffected) + VertDataAdd(VERT_getCo(FACE_getVerts(f)[S], lvl), FACE_getIFCo(f, lvl, S, cornerIdx, cornerIdx)); + + for (x=1; xflags&Edge_eEffected) + VertDataAdd(FACE_getIECo(f, lvl, S, x), FACE_getIFCo(f, lvl, S, x, 0)); + if (FACE_getEdges(f)[prevS]->flags&Edge_eEffected) + VertDataAdd(FACE_getIECo(f, lvl, prevS, x), FACE_getIFCo(f, lvl, S, 0, x)); + } + + for (x=0; xflags&Edge_eEffected) + VertDataAdd(_edge_getCoVert(e, FACE_getVerts(f)[S], lvl, eI,vertDataSize), FACE_getIFCo(f, lvl, S, cornerIdx, x)); + if (FACE_getEdges(f)[prevS]->flags&Edge_eEffected) + if(x != 0) + VertDataAdd(_edge_getCoVert(prevE, FACE_getVerts(f)[S], lvl, eI,vertDataSize), FACE_getIFCo(f, lvl, S, x, cornerIdx)); + } + } + } + + /* average */ + for (i=0; inumFaces); + } + + for (i=0; iv0, lvl)); + VertDataCopy(EDGE_getCo(e, lvl, edgeSize-1), VERT_getCo(e->v1, lvl)); + + for (x=1; xnumFaces); + } + + /* copy */ + for (i=0; inumVerts); + + for (S=0; SnumVerts; S++) + if (FACE_getEdges(f)[S]->flags&Edge_eEffected) + for (x=1; xnumVerts; S++) { + int prevS = (S+f->numVerts-1)%f->numVerts; + CCGEdge *e = FACE_getEdges(f)[S]; + CCGEdge *prevE = FACE_getEdges(f)[prevS]; + + VertDataCopy(FACE_getIFCo(f, lvl, S, 0, 0), FACE_getCenterData(f)); + VertDataCopy(FACE_getIFCo(f, lvl, S, cornerIdx, cornerIdx), VERT_getCo(FACE_getVerts(f)[S], lvl)); + + for (x=1; xflags = 0; + for (i=0; iflags = 0; + for (i=0; iflags = 0; + + CCGSUBSURF_free(ss, effectedE); + CCGSUBSURF_free(ss, effectedV); + if(freeF) CCGSUBSURF_free(ss, effectedF); + + return eCCGError_None; +} + +/* update normals for specified faces */ +CCGError ccgSubSurf_updateNormals(CCGSubSurf *ss, CCGFace **effectedF, int numEffectedF) { + CCGVert **effectedV; + CCGEdge **effectedE; + int i, numEffectedV, numEffectedE, freeF; + + ccgSubSurf__allFaces(ss, &effectedF, &numEffectedF, &freeF); + ccgSubSurf__effectedFaceNeighbours(ss, effectedF, numEffectedF, + &effectedV, &numEffectedV, &effectedE, &numEffectedE); + + if (ss->calcVertNormals) + ccgSubSurf__calcVertNormals(ss, + effectedV, effectedE, effectedF, + numEffectedV, numEffectedE, numEffectedF); + + for (i=0; iflags = 0; + for (i=0; iflags = 0; + for (i=0; iflags = 0; + + CCGSUBSURF_free(ss, effectedE); + CCGSUBSURF_free(ss, effectedV); + if(freeF) CCGSUBSURF_free(ss, effectedF); + + return eCCGError_None; +} + +/* compute subdivision levels from a given starting point, used by + multires subdivide/propagate, by filling in coordinates at a + certain level, and then subdividing that up to the highest level */ +CCGError ccgSubSurf_updateLevels(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF) +{ + CCGVert **effectedV; + CCGEdge **effectedE; + int numEffectedV, numEffectedE, freeF, i; + int curLvl, subdivLevels = ss->subdivLevels; + + ccgSubSurf__allFaces(ss, &effectedF, &numEffectedF, &freeF); + ccgSubSurf__effectedFaceNeighbours(ss, effectedF, numEffectedF, + &effectedV, &numEffectedV, &effectedE, &numEffectedE); + + for (curLvl=lvl; curLvlflags = 0; + for (i=0; iflags = 0; + for (i=0; iflags = 0; + + CCGSUBSURF_free(ss, effectedE); + CCGSUBSURF_free(ss, effectedV); + if(freeF) CCGSUBSURF_free(ss, effectedF); + + return eCCGError_None; +} + +#undef VERT_getCo +#undef EDGE_getCo +#undef FACE_getIECo +#undef FACE_getIFCo + /*** External API accessor functions ***/ int ccgSubSurf_getNumVerts(CCGSubSurf *ss) { diff --git a/source/blender/blenkernel/intern/CCGSubSurf.h b/source/blender/blenkernel/intern/CCGSubSurf.h index fbd0aecc0a5..12212c7a37b 100644 --- a/source/blender/blenkernel/intern/CCGSubSurf.h +++ b/source/blender/blenkernel/intern/CCGSubSurf.h @@ -59,6 +59,12 @@ CCGError ccgSubSurf_syncFaceDel (CCGSubSurf *ss, CCGFaceHDL fHDL); CCGError ccgSubSurf_processSync (CCGSubSurf *ss); +CCGError ccgSubSurf_updateFromFaces(CCGSubSurf *ss, int lvl, CCGFace **faces, int numFaces); +CCGError ccgSubSurf_updateToFaces(CCGSubSurf *ss, int lvl, CCGFace **faces, int numFaces); +CCGError ccgSubSurf_updateNormals(CCGSubSurf *ss, CCGFace **faces, int numFaces); +CCGError ccgSubSurf_updateLevels(CCGSubSurf *ss, int lvl, CCGFace **faces, int numFaces); +CCGError ccgSubSurf_stitchFaces(CCGSubSurf *ss, int lvl, CCGFace **faces, int numFaces); + CCGError ccgSubSurf_setSubdivisionLevels (CCGSubSurf *ss, int subdivisionLevels); CCGError ccgSubSurf_setAllowEdgeCreation (CCGSubSurf *ss, int allowEdgeCreation, float defaultCreaseValue, void *defaultUserData); diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index 209e4610c6a..a614404dc5e 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -1555,7 +1555,7 @@ DerivedMesh *mesh_create_derived_for_modifier(Scene *scene, Object *ob, Modifier md->scene= scene; if (!(md->mode&eModifierMode_Realtime)) return NULL; - if (mti->isDisabled && mti->isDisabled(md)) return NULL; + if (mti->isDisabled && mti->isDisabled(md, 0)) return NULL; if (mti->type==eModifierTypeType_OnlyDeform) { int numVerts; @@ -1906,7 +1906,7 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos mask &= ~CD_MASK_ORCO; DM_set_only_copy(orcodm, mask); - ndm = mti->applyModifier(md, ob, orcodm, useRenderParams, !inputVertexCos); + ndm = mti->applyModifier(md, ob, orcodm, useRenderParams, 0); if(ndm) { /* if the modifier returned a new dm, release the old one */ @@ -2513,7 +2513,7 @@ int editmesh_get_first_deform_matrices(Object *ob, EditMesh *em, float (**deform } for(; md && i <= cageIndex; md = md->next, i++) - if(editmesh_modifier_is_enabled(md, dm) && modifier_isDeformer(md)) + if(editmesh_modifier_is_enabled(md, dm) && modifier_isCorrectableDeformed(md)) numleft++; if(dm) diff --git a/source/blender/blenkernel/intern/Makefile b/source/blender/blenkernel/intern/Makefile index 26b9b9ef0dd..95c82d31890 100644 --- a/source/blender/blenkernel/intern/Makefile +++ b/source/blender/blenkernel/intern/Makefile @@ -53,6 +53,8 @@ CPPFLAGS += -I../../blenlib CPPFLAGS += -I../../blenloader CPPFLAGS += -I../../python CPPFLAGS += -I../../blenfont +# This is bad level, remove eventually +CPPFLAGS += -I../../windowmanager # also avi is used CPPFLAGS += -I../../avi CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c index ace1292f813..303cd208b7c 100644 --- a/source/blender/blenkernel/intern/action.c +++ b/source/blender/blenkernel/intern/action.c @@ -254,101 +254,68 @@ void set_active_action_group (bAction *act, bActionGroup *agrp, short select) * - always adds at the end of the group */ void action_groups_add_channel (bAction *act, bActionGroup *agrp, FCurve *fcurve) -{ - FCurve *fcu; - short done=0; - +{ /* sanity checks */ if (ELEM3(NULL, act, agrp, fcurve)) return; - /* if no channels, just add to two lists at the same time */ + /* if no channels anywhere, just add to two lists at the same time */ if (act->curves.first == NULL) { fcurve->next = fcurve->prev = NULL; agrp->channels.first = agrp->channels.last = fcurve; act->curves.first = act->curves.last = fcurve; - - fcurve->grp= agrp; - return; } - /* try to find a channel to slot this in before/after */ - for (fcu= act->curves.first; fcu; fcu= fcu->next) { - /* if channel has no group, then we have ungrouped channels, which should always occur after groups */ - if (fcu->grp == NULL) { - BLI_insertlinkbefore(&act->curves, fcu, fcurve); + /* if the group already has channels, the F-Curve can simply be added to the list + * (i.e. as the last channel in the group) + */ + else if (agrp->channels.first) { + /* if the group's last F-Curve is the action's last F-Curve too, + * then set the F-Curve as the last for the action first so that + * the lists will be in sync after linking + */ + if (agrp->channels.last == act->curves.last) + act->curves.last= fcurve; - if (agrp->channels.first == NULL) - agrp->channels.first= fcurve; - agrp->channels.last= fcurve; - - done= 1; - break; - } - - /* if channel has group after current, we can now insert (otherwise we have gone too far) */ - else if (fcu->grp == agrp->next) { - BLI_insertlinkbefore(&act->curves, fcu, fcurve); - - if (agrp->channels.first == NULL) - agrp->channels.first= fcurve; - agrp->channels.last= fcurve; - - done= 1; - break; - } - - /* if channel has group we're targeting, check whether it is the last one of these */ - else if (fcu->grp == agrp) { - if ((fcu->next) && (fcu->next->grp != agrp)) { - BLI_insertlinkafter(&act->curves, fcu, fcurve); - agrp->channels.last= fcurve; - done= 1; - break; - } - else if (fcu->next == NULL) { - BLI_addtail(&act->curves, fcurve); - agrp->channels.last= fcurve; - done= 1; - break; - } - } - - /* if channel has group before target, check whether the next one is something after target */ - else if (fcu->grp == agrp->prev) { - if (fcu->next) { - if ((fcu->next->grp != fcu->grp) && (fcu->next->grp != agrp)) { - BLI_insertlinkafter(&act->curves, fcu, fcurve); - - agrp->channels.first= fcurve; - agrp->channels.last= fcurve; - - done= 1; - break; - } - } - else { - BLI_insertlinkafter(&act->curves, fcu, fcurve); - - agrp->channels.first= fcurve; - agrp->channels.last= fcurve; - - done= 1; - break; - } - } + /* link in the given F-Curve after the last F-Curve in the group, + * which means that it should be able to fit in with the rest of the + * list seamlessly + */ + BLI_insertlinkafter(&agrp->channels, agrp->channels.last, fcurve); } - /* only if added, set channel as belonging to this group */ - if (done) { - //printf("FCurve added to group \n"); - fcurve->grp= agrp; - } + /* otherwise, need to find the nearest F-Curve in group before/after current to link with */ else { - printf("Error: FCurve '%s' couldn't be added to Group '%s' \n", fcurve->rna_path, agrp->name); - BLI_addtail(&act->curves, fcurve); + bActionGroup *grp; + + /* firstly, link this F-Curve to the group */ + agrp->channels.first = agrp->channels.last = fcurve; + + /* step through the groups preceeding this one, finding the F-Curve there to attach this one after */ + for (grp= agrp->prev; grp; grp= grp->prev) { + /* if this group has F-Curves, we want weave the given one in right after the last channel there, + * but via the Action's list not this group's list + * - this is so that the F-Curve is in the right place in the Action, + * but won't be included in the previous group + */ + if (grp->channels.last) { + /* once we've added, break here since we don't need to search any further... */ + BLI_insertlinkafter(&act->curves, grp->channels.last, fcurve); + break; + } + } + + /* if grp is NULL, that means we fell through, and this F-Curve should be added as the new first + * since group is (effectively) the first group. Thus, the existing first F-Curve becomes the + * second in the chain, etc. etc. + */ + if (grp == NULL) + BLI_insertlinkbefore(&act->curves, act->curves.first, fcurve); } + + /* set the F-Curve's new group */ + fcurve->grp= agrp; } /* Remove the given channel from all groups */ diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c index 418c9f00596..e53e4a1155b 100644 --- a/source/blender/blenkernel/intern/armature.c +++ b/source/blender/blenkernel/intern/armature.c @@ -184,6 +184,9 @@ static void copy_bonechildren (Bone* newBone, Bone* oldBone, Bone* actBone, Bone if(oldBone == actBone) *newActBone= newBone; + if(oldBone->prop) + newBone->prop= IDP_CopyProperty(oldBone->prop); + /* Copy this bone's list*/ BLI_duplicatelist(&newBone->childbase, &oldBone->childbase); diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c index 8391ebdebb7..6181712f1be 100644 --- a/source/blender/blenkernel/intern/blender.c +++ b/source/blender/blenkernel/intern/blender.c @@ -83,7 +83,7 @@ #include "BKE_report.h" #include "BKE_scene.h" #include "BKE_screen.h" -#include "BKE_sequence.h" +#include "BKE_sequencer.h" #include "BKE_sound.h" #include "BLI_editVert.h" @@ -94,6 +94,8 @@ #include "BKE_utildefines.h" // O_BINARY FALSE +#include "WM_api.h" // XXXXX BAD, very BAD dependency (bad level call) - remove asap, elubie + Global G; UserDef U; ListBase WMlist= {NULL, NULL}; diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c index a9d72d93091..09d73f20b9a 100644 --- a/source/blender/blenkernel/intern/brush.c +++ b/source/blender/blenkernel/intern/brush.c @@ -75,13 +75,14 @@ Brush *add_brush(const char *name) brush->rgb[2]= 1.0f; brush->alpha= 0.2f; brush->size= 25; - brush->spacing= 10.0f; + brush->spacing= 7.5f; brush->smooth_stroke_radius= 75; brush->smooth_stroke_factor= 0.9; brush->rate= 0.1f; brush->jitter= 0.0f; brush->clone.alpha= 0.5; brush->sculpt_tool = SCULPT_TOOL_DRAW; + brush->flag |= BRUSH_SPACE; brush_curve_preset(brush, BRUSH_PRESET_SMOOTH); diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c index 30d1b65cc8b..66c39c6571a 100644 --- a/source/blender/blenkernel/intern/cdderivedmesh.c +++ b/source/blender/blenkernel/intern/cdderivedmesh.c @@ -49,7 +49,7 @@ #include "BLI_blenlib.h" #include "BLI_edgehash.h" #include "BLI_editVert.h" -#include "BLI_ghash.h" +#include "BLI_pbvh.h" #include "DNA_mesh_types.h" #include "DNA_meshdata_types.h" @@ -77,6 +77,12 @@ typedef struct { MVert *mvert; MEdge *medge; MFace *mface; + + /* Cached */ + struct PBVH *pbvh; + /* Mesh connectivity */ + struct ListBase *fmap; + struct IndexNode *fmap_mem; } CDDerivedMesh; /**************** DerivedMesh interface functions ****************/ @@ -171,6 +177,33 @@ static void cdDM_getVertNo(DerivedMesh *dm, int index, float no_r[3]) no_r[2] = no[2]/32767.f; } +static ListBase *cdDM_getFaceMap(DerivedMesh *dm) +{ + CDDerivedMesh *cddm = (CDDerivedMesh*) dm; + + if(!cddm->fmap) { + create_vert_face_map(&cddm->fmap, &cddm->fmap_mem, cddm->mface, + dm->getNumVerts(dm), dm->getNumFaces(dm)); + } + + return cddm->fmap; +} + +static struct PBVH *cdDM_getPBVH(Object *ob, DerivedMesh *dm) +{ + CDDerivedMesh *cddm = (CDDerivedMesh*) dm; + + if(!cddm->pbvh && ob->type == OB_MESH) { + Mesh *me= ob->data; + + cddm->pbvh = BLI_pbvh_new(); + BLI_pbvh_build_mesh(cddm->pbvh, me->mface, me->mvert, + me->totface, me->totvert); + } + + return cddm->pbvh; +} + static void cdDM_drawVerts(DerivedMesh *dm) { CDDerivedMesh *cddm = (CDDerivedMesh*) dm; @@ -360,7 +393,9 @@ static void cdDM_drawLooseEdges(DerivedMesh *dm) } } -static void cdDM_drawFacesSolid(DerivedMesh *dm, int (*setMaterial)(int, void *attribs)) +static void cdDM_drawFacesSolid(DerivedMesh *dm, + float (*partial_redraw_planes)[4], + int fast, int (*setMaterial)(int, void *attribs)) { CDDerivedMesh *cddm = (CDDerivedMesh*) dm; MVert *mvert = cddm->mvert; @@ -376,6 +411,20 @@ static void cdDM_drawFacesSolid(DerivedMesh *dm, int (*setMaterial)(int, void *a glVertex3fv(mvert[index].co); \ } + if(cddm->pbvh) { + float (*face_nors)[3] = CustomData_get_layer(&dm->faceData, CD_NORMAL); + + /* should be per face */ + if(dm->numFaceData && mface->flag & ME_SMOOTH) + glShadeModel(GL_SMOOTH); + + BLI_pbvh_draw(cddm->pbvh, partial_redraw_planes, face_nors); + + glShadeModel(GL_FLAT); + + return; + } + if( GPU_buffer_legacy(dm) ) { DEBUG_VBO( "Using legacy code. cdDM_drawFacesSolid\n" ); glBegin(glmode = GL_QUADS); @@ -712,7 +761,6 @@ static void cdDM_drawMappedFaces(DerivedMesh *dm, int (*setDrawOptions)(void *us float *nors= dm->getFaceDataArray(dm, CD_NORMAL); int i, orig, *index = DM_get_face_data_layer(dm, CD_ORIGINDEX); - mc = DM_get_face_data_layer(dm, CD_ID_MCOL); if(!mc) mc = DM_get_face_data_layer(dm, CD_WEIGHT_MCOL); @@ -886,7 +934,7 @@ static void cdDM_drawMappedFacesGLSL(DerivedMesh *dm, int (*setMaterial)(int, vo continue; } else if(setDrawOptions) { - orig = index[a]; + orig = (index)? index[a]: a; if(orig == ORIGINDEX_NONE) continue; @@ -1275,12 +1323,21 @@ static void cdDM_foreachMappedFaceCenter( } } +static void cdDM_free_internal(CDDerivedMesh *cddm) +{ + if(cddm->pbvh) BLI_pbvh_free(cddm->pbvh); + if(cddm->fmap) MEM_freeN(cddm->fmap); + if(cddm->fmap_mem) MEM_freeN(cddm->fmap_mem); +} + static void cdDM_release(DerivedMesh *dm) { CDDerivedMesh *cddm = (CDDerivedMesh*)dm; - if (DM_release(dm)) + if (DM_release(dm)) { + cdDM_free_internal(cddm); MEM_freeN(cddm); + } } /**************** CDDM interface functions ****************/ @@ -1315,6 +1372,9 @@ static CDDerivedMesh *cdDM_create(const char *desc) dm->getVertCo = cdDM_getVertCo; dm->getVertNo = cdDM_getVertNo; + dm->getPBVH = cdDM_getPBVH; + dm->getFaceMap = cdDM_getFaceMap; + dm->drawVerts = cdDM_drawVerts; dm->drawUVEdges = cdDM_drawUVEdges; @@ -1366,17 +1426,12 @@ DerivedMesh *CDDM_from_mesh(Mesh *mesh, Object *ob) CDDerivedMesh *cddm = cdDM_create("CDDM_from_mesh dm"); DerivedMesh *dm = &cddm->dm; CustomDataMask mask = CD_MASK_MESH & (~CD_MASK_MDISPS); - int i, *index, alloctype; + int alloctype; - /* this does a referenced copy, the only new layers being ORIGINDEX, - * with an exception for fluidsim */ + /* this does a referenced copy, with an exception for fluidsim */ DM_init(dm, mesh->totvert, mesh->totedge, mesh->totface); - CustomData_add_layer(&dm->vertData, CD_ORIGINDEX, CD_CALLOC, NULL, mesh->totvert); - CustomData_add_layer(&dm->edgeData, CD_ORIGINDEX, CD_CALLOC, NULL, mesh->totedge); - CustomData_add_layer(&dm->faceData, CD_ORIGINDEX, CD_CALLOC, NULL, mesh->totface); - dm->deformedOnly = 1; alloctype= CD_REFERENCE; @@ -1392,18 +1447,6 @@ DerivedMesh *CDDM_from_mesh(Mesh *mesh, Object *ob) cddm->medge = CustomData_get_layer(&dm->edgeData, CD_MEDGE); cddm->mface = CustomData_get_layer(&dm->faceData, CD_MFACE); - index = CustomData_get_layer(&dm->vertData, CD_ORIGINDEX); - for(i = 0; i < mesh->totvert; ++i, ++index) - *index = i; - - index = CustomData_get_layer(&dm->edgeData, CD_ORIGINDEX); - for(i = 0; i < mesh->totedge; ++i, ++index) - *index = i; - - index = CustomData_get_layer(&dm->faceData, CD_ORIGINDEX); - for(i = 0; i < mesh->totface; ++i, ++index) - *index = i; - return dm; } @@ -1514,6 +1557,11 @@ DerivedMesh *CDDM_copy(DerivedMesh *source) int numEdges = source->numEdgeData; int numFaces = source->numFaceData; + /* ensure these are created if they are made on demand */ + source->getVertDataArray(source, CD_ORIGINDEX); + source->getEdgeDataArray(source, CD_ORIGINDEX); + source->getFaceDataArray(source, CD_ORIGINDEX); + /* this initializes dm, and copies all non mvert/medge/mface layers */ DM_from_template(dm, source, numVerts, numEdges, numFaces); dm->deformedOnly = source->deformedOnly; @@ -1548,6 +1596,13 @@ DerivedMesh *CDDM_from_template(DerivedMesh *source, CustomData_add_layer(&dm->edgeData, CD_MEDGE, CD_CALLOC, NULL, numEdges); CustomData_add_layer(&dm->faceData, CD_MFACE, CD_CALLOC, NULL, numFaces); + if(!CustomData_get_layer(&dm->vertData, CD_ORIGINDEX)) + CustomData_add_layer(&dm->vertData, CD_ORIGINDEX, CD_CALLOC, NULL, numVerts); + if(!CustomData_get_layer(&dm->edgeData, CD_ORIGINDEX)) + CustomData_add_layer(&dm->edgeData, CD_ORIGINDEX, CD_CALLOC, NULL, numEdges); + if(!CustomData_get_layer(&dm->faceData, CD_ORIGINDEX)) + CustomData_add_layer(&dm->faceData, CD_ORIGINDEX, CD_CALLOC, NULL, numFaces); + cddm->mvert = CustomData_get_layer(&dm->vertData, CD_MVERT); cddm->medge = CustomData_get_layer(&dm->edgeData, CD_MEDGE); cddm->mface = CustomData_get_layer(&dm->faceData, CD_MFACE); @@ -1754,207 +1809,3 @@ MFace *CDDM_get_faces(DerivedMesh *dm) return ((CDDerivedMesh*)dm)->mface; } -/* Multires DerivedMesh, extends CDDM */ -typedef struct MultiresDM { - CDDerivedMesh cddm; - - MultiresModifierData *mmd; - int local_mmd; - - int lvl, totlvl; - float (*orco)[3]; - MVert *subco; - - ListBase *vert_face_map, *vert_edge_map; - IndexNode *vert_face_map_mem, *vert_edge_map_mem; - int *face_offsets; - - Object *ob; - int modified; - - void (*update)(DerivedMesh*); -} MultiresDM; - -static void MultiresDM_release(DerivedMesh *dm) -{ - MultiresDM *mrdm = (MultiresDM*)dm; - int mvert_layer; - - /* Before freeing, need to update the displacement map */ - if(dm->needsFree && mrdm->modified) { - /* Check that mmd still exists */ - if(!mrdm->local_mmd && BLI_findindex(&mrdm->ob->modifiers, mrdm->mmd) < 0) - mrdm->mmd = NULL; - if(mrdm->mmd) - mrdm->update(dm); - } - - /* If the MVert data is being used as the sculpt undo store, don't free it */ - mvert_layer = CustomData_get_layer_index(&dm->vertData, CD_MVERT); - if(mvert_layer != -1) { - CustomDataLayer *cd = &dm->vertData.layers[mvert_layer]; - if(mrdm->mmd && cd->data == mrdm->mmd->undo_verts) - cd->flag |= CD_FLAG_NOFREE; - } - - if(DM_release(dm)) { - MEM_freeN(mrdm->subco); - MEM_freeN(mrdm->orco); - if(mrdm->vert_face_map) - MEM_freeN(mrdm->vert_face_map); - if(mrdm->vert_face_map_mem) - MEM_freeN(mrdm->vert_face_map_mem); - if(mrdm->vert_edge_map) - MEM_freeN(mrdm->vert_edge_map); - if(mrdm->vert_edge_map_mem) - MEM_freeN(mrdm->vert_edge_map_mem); - if(mrdm->face_offsets) - MEM_freeN(mrdm->face_offsets); - MEM_freeN(mrdm); - } -} - -DerivedMesh *MultiresDM_new(MultiresSubsurf *ms, DerivedMesh *orig, int numVerts, int numEdges, int numFaces) -{ - MultiresDM *mrdm = MEM_callocN(sizeof(MultiresDM), "MultiresDM"); - CDDerivedMesh *cddm = cdDM_create("MultiresDM CDDM"); - DerivedMesh *dm = NULL; - - mrdm->cddm = *cddm; - MEM_freeN(cddm); - dm = &mrdm->cddm.dm; - - mrdm->mmd = ms->mmd; - mrdm->ob = ms->ob; - mrdm->local_mmd = ms->local_mmd; - - if(dm) { - MDisps *disps; - MVert *mvert; - int i; - - DM_from_template(dm, orig, numVerts, numEdges, numFaces); - CustomData_free_layers(&dm->faceData, CD_MDISPS, numFaces); - - disps = CustomData_get_layer(&orig->faceData, CD_MDISPS); - if(disps) - CustomData_add_layer(&dm->faceData, CD_MDISPS, CD_REFERENCE, disps, numFaces); - - - mvert = CustomData_get_layer(&orig->vertData, CD_MVERT); - mrdm->orco = MEM_callocN(sizeof(float) * 3 * orig->getNumVerts(orig), "multires orco"); - for(i = 0; i < orig->getNumVerts(orig); ++i) - copy_v3_v3(mrdm->orco[i], mvert[i].co); - } - else - DM_init(dm, numVerts, numEdges, numFaces); - - CustomData_add_layer(&dm->vertData, CD_MVERT, CD_CALLOC, NULL, numVerts); - CustomData_add_layer(&dm->edgeData, CD_MEDGE, CD_CALLOC, NULL, numEdges); - CustomData_add_layer(&dm->faceData, CD_MFACE, CD_CALLOC, NULL, numFaces); - - mrdm->cddm.mvert = CustomData_get_layer(&dm->vertData, CD_MVERT); - mrdm->cddm.medge = CustomData_get_layer(&dm->edgeData, CD_MEDGE); - mrdm->cddm.mface = CustomData_get_layer(&dm->faceData, CD_MFACE); - - mrdm->lvl = ms->mmd->lvl; - mrdm->totlvl = ms->mmd->totlvl; - mrdm->subco = MEM_callocN(sizeof(MVert)*numVerts, "multires subdivided verts"); - mrdm->modified = 0; - - dm->release = MultiresDM_release; - - return dm; -} - -Mesh *MultiresDM_get_mesh(DerivedMesh *dm) -{ - return get_mesh(((MultiresDM*)dm)->ob); -} - -Object *MultiresDM_get_object(DerivedMesh *dm) -{ - return ((MultiresDM*)dm)->ob; -} - -void *MultiresDM_get_orco(DerivedMesh *dm) -{ - return ((MultiresDM*)dm)->orco; - -} - -MVert *MultiresDM_get_subco(DerivedMesh *dm) -{ - return ((MultiresDM*)dm)->subco; -} - -int MultiresDM_get_totlvl(DerivedMesh *dm) -{ - return ((MultiresDM*)dm)->totlvl; -} - -int MultiresDM_get_lvl(DerivedMesh *dm) -{ - return ((MultiresDM*)dm)->lvl; -} - -void MultiresDM_set_orco(DerivedMesh *dm, float (*orco)[3]) -{ - ((MultiresDM*)dm)->orco = orco; -} - -void MultiresDM_set_update(DerivedMesh *dm, void (*update)(DerivedMesh*)) -{ - ((MultiresDM*)dm)->update = update; -} - -ListBase *MultiresDM_get_vert_face_map(DerivedMesh *dm) -{ - MultiresDM *mrdm = (MultiresDM*)dm; - Mesh *me = mrdm->ob->data; - - if(!mrdm->vert_face_map) - create_vert_face_map(&mrdm->vert_face_map, &mrdm->vert_face_map_mem, me->mface, - me->totvert, me->totface); - - return mrdm->vert_face_map; -} - -ListBase *MultiresDM_get_vert_edge_map(DerivedMesh *dm) -{ - MultiresDM *mrdm = (MultiresDM*)dm; - Mesh *me = mrdm->ob->data; - - if(!mrdm->vert_edge_map) - create_vert_edge_map(&mrdm->vert_edge_map, &mrdm->vert_edge_map_mem, me->medge, - me->totvert, me->totedge); - - return mrdm->vert_edge_map; -} - -int *MultiresDM_get_face_offsets(DerivedMesh *dm) -{ - MultiresDM *mrdm = (MultiresDM*)dm; - Mesh *me = mrdm->ob->data; - int i, accum = 0; - - if(!mrdm->face_offsets) { - int len = (int)pow(2, mrdm->lvl - 2) - 1; - int area = len * len; - int t = 1 + len * 3 + area * 3, q = t + len + area; - - mrdm->face_offsets = MEM_callocN(sizeof(int) * me->totface, "mrdm face offsets"); - for(i = 0; i < me->totface; ++i) { - mrdm->face_offsets[i] = accum; - - accum += (me->mface[i].v4 ? q : t); - } - } - - return mrdm->face_offsets; -} - -void MultiresDM_mark_as_modified(DerivedMesh *dm) -{ - ((MultiresDM*)dm)->modified = 1; -} diff --git a/source/blender/blenkernel/intern/cloth.c b/source/blender/blenkernel/intern/cloth.c index 6c4c7daea7f..dc9a70f2767 100644 --- a/source/blender/blenkernel/intern/cloth.c +++ b/source/blender/blenkernel/intern/cloth.c @@ -154,6 +154,7 @@ void cloth_init ( ClothModifierData *clmd ) clmd->sim_parms->defgoal = 0.0f; clmd->sim_parms->goalspring = 1.0f; clmd->sim_parms->goalfrict = 0.0f; + clmd->sim_parms->velocity_smooth = 0.0f; if(!clmd->sim_parms->effector_weights) clmd->sim_parms->effector_weights = BKE_add_effector_weights(NULL); diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c index 0f3213cbc5d..797fe8f7324 100644 --- a/source/blender/blenkernel/intern/constraint.c +++ b/source/blender/blenkernel/intern/constraint.c @@ -440,15 +440,14 @@ static void contarget_get_mesh_mat (Scene *scene, Object *ob, char *substring, f /* only continue if there's a valid DerivedMesh */ if (dm) { MDeformVert *dvert = dm->getVertDataArray(dm, CD_MDEFORMVERT); - int *index = (int *)dm->getVertDataArray(dm, CD_ORIGINDEX); int numVerts = dm->getNumVerts(dm); int i, j, count = 0; float co[3], nor[3]; - /* check that dvert and index are valid pointers (just in case) */ - if (dvert && index) { + /* check that dvert is a valid pointers (just in case) */ + if (dvert) { /* get the average of all verts with that are in the vertex-group */ - for (i = 0; i < numVerts; i++, index++) { + for (i = 0; i < numVerts; i++) { for (j = 0; j < dvert[i].totweight; j++) { /* does this vertex belong to nominated vertex group? */ if (dvert[i].dw[j].def_nr == dgroup) { @@ -1192,17 +1191,17 @@ static void followpath_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstr if ((data->followflag & FOLLOWPATH_STATIC) == 0) { /* animated position along curve depending on time */ if (cob->scene) - curvetime= bsystem_time(cob->scene, ct->tar, ctime, 0.0) - data->offset; + curvetime= bsystem_time(cob->scene, ct->tar, cu->ctime, 0.0) - data->offset; else - curvetime= ctime - data->offset; + curvetime= cu->ctime - data->offset; /* ctime is now a proper var setting of Curve which gets set by Animato like any other var that's animated, * but this will only work if it actually is animated... * - * we firstly calculate the modulus of cu->ctime/cu->pathlen to clamp ctime within the 0.0 to 1.0 times pathlen - * range, then divide this (the modulus) by pathlen to get a value between 0.0 and 1.0 + * we divide the curvetime calculated in the previous step by the length of the path, to get a time + * factor, which then gets clamped to lie within 0.0 - 1.0 range */ - curvetime= fmod(cu->ctime, cu->pathlen) / cu->pathlen; + curvetime /= cu->pathlen; CLAMP(curvetime, 0.0, 1.0); } else { @@ -1212,7 +1211,7 @@ static void followpath_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstr if ( where_on_path(ct->tar, curvetime, vec, dir, NULL, &radius) ) { if (data->followflag & FOLLOWPATH_FOLLOW) { - vec_to_quat( quat,dir, (short) data->trackflag, (short) data->upflag); + vec_to_quat(quat, dir, (short)data->trackflag, (short)data->upflag); normalize_v3(dir); q[0]= (float)cos(0.5*vec[3]); @@ -1222,7 +1221,7 @@ static void followpath_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstr q[3]= -x1*dir[2]; mul_qt_qtqt(quat, q, quat); - quat_to_mat4( totmat,quat); + quat_to_mat4(totmat, quat); } if (data->followflag & FOLLOWPATH_RADIUS) { @@ -1252,12 +1251,12 @@ static void followpath_evaluate (bConstraint *con, bConstraintOb *cob, ListBase float size[3]; bFollowPathConstraint *data= con->data; - /* get Object local transform (loc/rot/size) to determine transformation from path */ - //object_to_mat4(ob, obmat); - copy_m4_m4(obmat, cob->matrix); // FIXME!!! + /* get Object transform (loc/rot/size) to determine transformation from path */ + // TODO: this used to be local at one point, but is probably more useful as-is + copy_m4_m4(obmat, cob->matrix); /* get scaling of object before applying constraint */ - mat4_to_size( size,cob->matrix); + mat4_to_size(size, cob->matrix); /* apply targetmat - containing location on path, and rotation */ mul_serie_m4(cob->matrix, ct->matrix, obmat, NULL, NULL, NULL, NULL, NULL, NULL); diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c index 7b754025b6c..d9e85d5d412 100644 --- a/source/blender/blenkernel/intern/customdata.c +++ b/source/blender/blenkernel/intern/customdata.c @@ -32,21 +32,26 @@ * */ -#include "BKE_customdata.h" -#include "BKE_utildefines.h" // CLAMP -#include "BLI_math.h" -#include "BLI_blenlib.h" -#include "BLI_linklist.h" -#include "BLI_mempool.h" +#include +#include + +#include "MEM_guardedalloc.h" #include "DNA_customdata_types.h" #include "DNA_listBase.h" #include "DNA_meshdata_types.h" +#include "DNA_ID.h" -#include "MEM_guardedalloc.h" +#include "BLI_blenlib.h" +#include "BLI_linklist.h" +#include "BLI_math.h" +#include "BLI_mempool.h" +#include "BLI_string.h" -#include -#include +#include "BKE_customdata.h" +#include "BKE_customdata_file.h" +#include "BKE_global.h" +#include "BKE_utildefines.h" /* number of layers to add when growing a CustomData object */ #define CUSTOMDATA_GROW 5 @@ -89,6 +94,15 @@ typedef struct LayerTypeInfo { /* a function to set a layer's data to default values. if NULL, the default is assumed to be all zeros */ void (*set_default)(void *data, int count); + + /* a function to read data from a cdf file */ + int (*read)(CDataFile *cdf, void *data, int count); + + /* a function to write data to a cdf file */ + int (*write)(CDataFile *cdf, void *data, int count); + + /* a function to determine file size */ + size_t (*filesize)(CDataFile *cdf, void *data, int count); } LayerTypeInfo; static void layerCopy_mdeformvert(const void *source, void *dest, @@ -381,6 +395,7 @@ static void layerDefault_origspace_face(void *data, int count) osf[i] = default_osf; } +#if 0 /* Adapted from sculptmode.c */ static void mdisps_bilinear(float out[3], float (*disps)[3], int st, float u, float v) { @@ -426,23 +441,28 @@ static void mdisps_bilinear(float out[3], float (*disps)[3], int st, float u, fl add_v3_v3v3(out, d2[0], d2[1]); } +#endif + +static int mdisp_corners(MDisps *s) +{ + /* silly trick because we don't get it from callback */ + return (s->totdisp % (3*3) == 0)? 3: 4; +} static void layerSwap_mdisps(void *data, int *ci) { MDisps *s = data; float (*d)[3] = NULL; - int x, y, st; + int corners, cornersize, S; - if(!(ci[0] == 2 && ci[1] == 3 && ci[2] == 0 && ci[3] == 1)) return; + /* this function is untested .. */ + corners = mdisp_corners(s); + cornersize = s->totdisp/corners; d = MEM_callocN(sizeof(float) * 3 * s->totdisp, "mdisps swap"); - st = sqrt(s->totdisp); - for(y = 0; y < st; ++y) { - for(x = 0; x < st; ++x) { - copy_v3_v3(d[(st - y - 1) * st + (st - x - 1)], s->disps[y * st + x]); - } - } + for(S = 0; S < corners; S++) + memcpy(d + cornersize*S, s->disps + cornersize*ci[S], cornersize*3*sizeof(float)); if(s->disps) MEM_freeN(s->disps); @@ -452,6 +472,8 @@ static void layerSwap_mdisps(void *data, int *ci) static void layerInterp_mdisps(void **sources, float *weights, float *sub_weights, int count, void *dest) { + // XXX +#if 0 MDisps *d = dest; MDisps *s = NULL; int st, stl; @@ -496,6 +518,7 @@ static void layerInterp_mdisps(void **sources, float *weights, float *sub_weight copy_v3_v3(d->disps[y * st + x], srcdisp); } } +#endif } static void layerCopy_mdisps(const void *source, void *dest, int count) @@ -530,6 +553,51 @@ static void layerFree_mdisps(void *data, int count, int size) } } +static int layerRead_mdisps(CDataFile *cdf, void *data, int count) +{ + MDisps *d = data; + int i; + + for(i = 0; i < count; ++i) { + if(!d[i].disps) + d[i].disps = MEM_callocN(sizeof(float)*3*d[i].totdisp, "mdisps read"); + + if(!cdf_read_data(cdf, d[i].totdisp*3*sizeof(float), d[i].disps)) { + printf("failed to read %d/%d %d\n", i, count, d[i].totdisp); + return 0; + } + } + + return 1; +} + +static int layerWrite_mdisps(CDataFile *cdf, void *data, int count) +{ + MDisps *d = data; + int i; + + for(i = 0; i < count; ++i) { + if(!cdf_write_data(cdf, d[i].totdisp*3*sizeof(float), d[i].disps)) { + printf("failed to write %d/%d %d\n", i, count, d[i].totdisp); + return 0; + } + } + + return 1; +} + +static size_t layerFilesize_mdisps(CDataFile *cdf, void *data, int count) +{ + MDisps *d = data; + size_t size = 0; + int i; + + for(i = 0; i < count; ++i) + size += d[i].totdisp*3*sizeof(float); + + return size; +} + /* --------- */ static void layerDefault_mloopcol(void *data, int count) @@ -723,7 +791,7 @@ const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = { {sizeof(MLoopCol), "MLoopCol", 1, "Col", NULL, NULL, layerInterp_mloopcol, NULL, layerDefault_mloopcol}, {sizeof(float)*3*4, "", 0, NULL, NULL, NULL, NULL, NULL, NULL}, {sizeof(MDisps), "MDisps", 1, NULL, layerCopy_mdisps, - layerFree_mdisps, layerInterp_mdisps, layerSwap_mdisps, NULL}, + layerFree_mdisps, layerInterp_mdisps, layerSwap_mdisps, NULL, layerRead_mdisps, layerWrite_mdisps, layerFilesize_mdisps}, {sizeof(MCol)*4, "MCol", 4, "WeightCol", NULL, NULL, layerInterp_mcol, layerSwap_mcol, layerDefault_mcol}, {sizeof(MCol)*4, "MCol", 4, "IDCol", NULL, NULL, layerInterp_mcol, @@ -845,6 +913,14 @@ static void customData_free_layer__internal(CustomDataLayer *layer, int totelem) } } +static void CustomData_external_free(CustomData *data) +{ + if(data->external) { + MEM_freeN(data->external); + data->external= NULL; + } +} + void CustomData_free(CustomData *data, int totelem) { int i; @@ -855,6 +931,8 @@ void CustomData_free(CustomData *data, int totelem) if(data->layers) MEM_freeN(data->layers); + CustomData_external_free(data); + memset(data, 0, sizeof(*data)); } @@ -2230,3 +2308,236 @@ int CustomData_verify_versions(struct CustomData *data, int index) return keeplayer; } +/****************************** External Files *******************************/ + +static void customdata_external_filename(char filename[FILE_MAX], ID *id, CustomDataExternal *external) +{ + char *path = (id->lib)? id->lib->filename: G.sce; + + BLI_strncpy(filename, external->filename, FILE_MAX); + BLI_convertstringcode(filename, path); +} + +void CustomData_external_read(CustomData *data, ID *id, CustomDataMask mask, int totelem) +{ + CustomDataExternal *external= data->external; + CustomDataLayer *layer; + CDataFile *cdf; + CDataFileLayer *blay; + char filename[FILE_MAX]; + const LayerTypeInfo *typeInfo; + int i, update = 0; + + if(!external) + return; + + for(i=0; itotlayer; i++) { + layer = &data->layers[i]; + typeInfo = layerType_getInfo(layer->type); + + if(!(mask & (1<type))); + else if(layer->flag & CD_FLAG_IN_MEMORY); + else if((layer->flag & CD_FLAG_EXTERNAL) && typeInfo->read) + update= 1; + } + + if(!update) + return; + + customdata_external_filename(filename, id, external); + + cdf= cdf_create(CDF_TYPE_MESH); + if(!cdf_read_open(cdf, filename)) + return; + + for(i=0; itotlayer; i++) { + layer = &data->layers[i]; + typeInfo = layerType_getInfo(layer->type); + + if(!(mask & (1<type))); + else if(layer->flag & CD_FLAG_IN_MEMORY); + else if((layer->flag & CD_FLAG_EXTERNAL) && typeInfo->read) { + blay= cdf_layer_find(cdf, layer->type, layer->name); + + if(blay) { + if(cdf_read_layer(cdf, blay)) { + if(typeInfo->read(cdf, layer->data, totelem)); + else break; + layer->flag |= CD_FLAG_IN_MEMORY; + } + else + break; + } + } + } + + cdf_read_close(cdf); + cdf_free(cdf); +} + +void CustomData_external_write(CustomData *data, ID *id, CustomDataMask mask, int totelem, int free) +{ + CustomDataExternal *external= data->external; + CustomDataLayer *layer; + CDataFile *cdf; + CDataFileLayer *blay; + const LayerTypeInfo *typeInfo; + int i, update = 0; + char filename[FILE_MAX]; + + if(!external) + return; + + for(i=0; itotlayer; i++) { + layer = &data->layers[i]; + typeInfo = layerType_getInfo(layer->type); + + if(!(mask & (1<type))); + else if((layer->flag & CD_FLAG_EXTERNAL) && typeInfo->write) + update= 1; + } + + if(!update) + return; + + CustomData_external_read(data, id, mask, totelem); + + cdf= cdf_create(CDF_TYPE_MESH); + + for(i=0; itotlayer; i++) { + layer = &data->layers[i]; + typeInfo = layerType_getInfo(layer->type); + + if((layer->flag & CD_FLAG_EXTERNAL) && typeInfo->filesize) + cdf_layer_add(cdf, layer->type, layer->name, + typeInfo->filesize(cdf, layer->data, totelem)); + } + + customdata_external_filename(filename, id, external); + if(!cdf_write_open(cdf, filename)) + return; + + for(i=0; itotlayer; i++) { + layer = &data->layers[i]; + typeInfo = layerType_getInfo(layer->type); + + if((layer->flag & CD_FLAG_EXTERNAL) && typeInfo->write) { + blay= cdf_layer_find(cdf, layer->type, layer->name); + + if(cdf_write_layer(cdf, blay)) { + if(typeInfo->write(cdf, layer->data, totelem)); + else break; + } + else + break; + } + } + + if(i != data->totlayer) { + cdf_free(cdf); + return; + } + + for(i=0; itotlayer; i++) { + layer = &data->layers[i]; + typeInfo = layerType_getInfo(layer->type); + + if((layer->flag & CD_FLAG_EXTERNAL) && typeInfo->write) { + if(free) { + if(typeInfo->free) + typeInfo->free(layer->data, totelem, typeInfo->size); + layer->flag &= ~CD_FLAG_IN_MEMORY; + } + } + } + + cdf_write_close(cdf); + cdf_free(cdf); +} + +void CustomData_external_add(CustomData *data, ID *id, int type, int totelem, const char *filename) +{ + CustomDataExternal *external= data->external; + CustomDataLayer *layer; + int layer_index; + + layer_index = CustomData_get_active_layer_index(data, type); + if(layer_index < 0) return; + + layer = &data->layers[layer_index]; + + if(layer->flag & CD_FLAG_EXTERNAL) + return; + + if(!external) { + external= MEM_callocN(sizeof(CustomDataExternal), "CustomDataExternal"); + BLI_strncpy(external->filename, filename, sizeof(external->filename)); + data->external= external; + } + + layer->flag |= CD_FLAG_EXTERNAL|CD_FLAG_IN_MEMORY; +} + +void CustomData_external_remove(CustomData *data, ID *id, int type, int totelem) +{ + CustomDataExternal *external= data->external; + CustomDataLayer *layer; + //char filename[FILE_MAX]; + int layer_index; // i, remove_file; + + layer_index = CustomData_get_active_layer_index(data, type); + if(layer_index < 0) return; + + layer = &data->layers[layer_index]; + + if(!external) + return; + + if(layer->flag & CD_FLAG_EXTERNAL) { + if(!(layer->flag & CD_FLAG_IN_MEMORY)) + CustomData_external_read(data, id, (1<type), totelem); + + layer->flag &= ~CD_FLAG_EXTERNAL; + +#if 0 + remove_file= 1; + for(i=0; itotlayer; i++) + if(data->layers[i].flag & CD_FLAG_EXTERNAL) + remove_file= 0; + + if(remove_file) { + customdata_external_filename(filename, id, external); + cdf_remove(filename); + CustomData_external_free(data); + } +#endif + } +} + +int CustomData_external_test(CustomData *data, int type) +{ + CustomDataLayer *layer; + int layer_index; + + layer_index = CustomData_get_active_layer_index(data, type); + if(layer_index < 0) return 0; + + layer = &data->layers[layer_index]; + return (layer->flag & CD_FLAG_EXTERNAL); +} + +#if 0 +void CustomData_external_remove_object(CustomData *data, ID *id) +{ + CustomDataExternal *external= data->external; + char filename[FILE_MAX]; + + if(!external) + return; + + customdata_external_filename(filename, id, external); + cdf_remove(filename); + CustomData_external_free(data); +} +#endif + diff --git a/source/blender/blenkernel/intern/customdata_file.c b/source/blender/blenkernel/intern/customdata_file.c new file mode 100644 index 00000000000..b58ada878de --- /dev/null +++ b/source/blender/blenkernel/intern/customdata_file.c @@ -0,0 +1,446 @@ +/* + * $Id$ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include +#include +#include + +#include "MEM_guardedalloc.h" + +#include "BLI_fileops.h" +#include "BLI_string.h" + +#include "BKE_customdata_file.h" +#include "BKE_global.h" +#include "BKE_utildefines.h" + +/************************* File Format Definitions ***************************/ + +#define CDF_ENDIAN_LITTLE 0 +#define CDF_ENDIAN_BIG 1 + +#define CDF_DATA_FLOAT 0 + +typedef struct CDataFileHeader { + char ID[4]; /* "BCDF" */ + char endian; /* little, big */ + char version; /* non-compatible versions */ + char subversion; /* compatible sub versions */ + char pad; /* padding */ + + int structbytes; /* size of this struct in bytes */ + int type; /* image, mesh */ + int totlayer; /* number of layers in the file */ +} CDataFileHeader; + +typedef struct CDataFileImageHeader { + int structbytes; /* size of this struct in bytes */ + int width; /* image width */ + int height; /* image height */ + int tile_size; /* tile size (required power of 2) */ +} CDataFileImageHeader; + +typedef struct CDataFileMeshHeader { + int structbytes; /* size of this struct in bytes */ +} CDataFileMeshHeader; + +struct CDataFileLayer { + int structbytes; /* size of this struct in bytes */ + int datatype; /* only float for now */ + uint64_t datasize; /* size of data in layer */ + int type; /* layer type */ + char name[CDF_LAYER_NAME_MAX]; /* layer name */ +}; + +/**************************** Other Definitions ******************************/ + +#define CDF_VERSION 0 +#define CDF_SUBVERSION 0 +#define CDF_TILE_SIZE 64 + +struct CDataFile { + int type; + + CDataFileHeader header; + union { + CDataFileImageHeader image; + CDataFileMeshHeader mesh; + } btype; + + CDataFileLayer *layer; + int totlayer; + + FILE *readf; + FILE *writef; + int switchendian; + size_t dataoffset; +}; + +/********************************* Create/Free *******************************/ + +static int cdf_endian(void) +{ + if(ENDIAN_ORDER == L_ENDIAN) + return CDF_ENDIAN_LITTLE; + else + return CDF_ENDIAN_BIG; +} + +/*static int cdf_data_type_size(int datatype) +{ + if(datatype == CDF_DATA_FLOAT) + return sizeof(float); + + return 0; +}*/ + +CDataFile *cdf_create(int type) +{ + CDataFile *cdf= MEM_callocN(sizeof(CDataFile), "CDataFile"); + + cdf->type= type; + + return cdf; +} + +void cdf_free(CDataFile *cdf) +{ + cdf_read_close(cdf); + cdf_write_close(cdf); + + if(cdf->layer) + MEM_freeN(cdf->layer); + + MEM_freeN(cdf); +} + +/********************************* Read/Write ********************************/ + +static int cdf_read_header(CDataFile *cdf) +{ + CDataFileHeader *header; + CDataFileImageHeader *image; + CDataFileMeshHeader *mesh; + CDataFileLayer *layer; + FILE *f= cdf->readf; + size_t offset = 0; + int a; + + header= &cdf->header; + + if(!fread(header, sizeof(CDataFileHeader), 1, cdf->readf)) + return 0; + + if(memcmp(header->ID, "BCDF", sizeof(header->ID)) != 0) + return 0; + if(header->version > CDF_VERSION) + return 0; + + cdf->switchendian= header->endian != cdf_endian(); + header->endian= cdf_endian(); + + if(cdf->switchendian) { + SWITCH_INT(header->type); + SWITCH_INT(header->totlayer); + SWITCH_INT(header->structbytes); + } + + if(!ELEM(header->type, CDF_TYPE_IMAGE, CDF_TYPE_MESH)) + return 0; + + offset += header->structbytes; + header->structbytes= sizeof(CDataFileHeader); + + if(fseek(f, offset, SEEK_SET) != 0) + return 0; + + if(header->type == CDF_TYPE_IMAGE) { + image= &cdf->btype.image; + if(!fread(image, sizeof(CDataFileImageHeader), 1, f)) + return 0; + + if(cdf->switchendian) { + SWITCH_INT(image->width); + SWITCH_INT(image->height); + SWITCH_INT(image->tile_size); + SWITCH_INT(image->structbytes); + } + + offset += image->structbytes; + image->structbytes= sizeof(CDataFileImageHeader); + } + else if(header->type == CDF_TYPE_MESH) { + mesh= &cdf->btype.mesh; + if(!fread(mesh, sizeof(CDataFileMeshHeader), 1, f)) + return 0; + + if(cdf->switchendian) + SWITCH_INT(mesh->structbytes); + + offset += mesh->structbytes; + mesh->structbytes= sizeof(CDataFileMeshHeader); + } + + if(fseek(f, offset, SEEK_SET) != 0) + return 0; + + cdf->layer= MEM_callocN(sizeof(CDataFileLayer)*header->totlayer, "CDataFileLayer"); + cdf->totlayer= header->totlayer; + + for(a=0; atotlayer; a++) { + layer= &cdf->layer[a]; + + if(!fread(layer, sizeof(CDataFileLayer), 1, f)) + return 0; + + if(cdf->switchendian) { + SWITCH_INT(layer->type); + SWITCH_INT(layer->datatype); + SWITCH_INT64(layer->datasize); + SWITCH_INT(layer->structbytes); + } + + if(layer->datatype != CDF_DATA_FLOAT) + return 0; + + offset += layer->structbytes; + layer->structbytes= sizeof(CDataFileLayer); + + if(fseek(f, offset, SEEK_SET) != 0) + return 0; + } + + cdf->dataoffset= offset; + + return 1; +} + +static int cdf_write_header(CDataFile *cdf) +{ + CDataFileHeader *header; + CDataFileImageHeader *image; + CDataFileMeshHeader *mesh; + CDataFileLayer *layer; + FILE *f= cdf->writef; + int a; + + header= &cdf->header; + + if(!fwrite(header, sizeof(CDataFileHeader), 1, f)) + return 0; + + if(header->type == CDF_TYPE_IMAGE) { + image= &cdf->btype.image; + if(!fwrite(image, sizeof(CDataFileImageHeader), 1, f)) + return 0; + } + else if(header->type == CDF_TYPE_MESH) { + mesh= &cdf->btype.mesh; + if(!fwrite(mesh, sizeof(CDataFileMeshHeader), 1, f)) + return 0; + } + + for(a=0; atotlayer; a++) { + layer= &cdf->layer[a]; + + if(!fwrite(layer, sizeof(CDataFileLayer), 1, f)) + return 0; + } + + return 1; +} + +int cdf_read_open(CDataFile *cdf, char *filename) +{ + FILE *f; + + f= fopen(filename, "rb"); + if(!f) + return 0; + + cdf->readf= f; + + if(!cdf_read_header(cdf)) { + cdf_read_close(cdf); + return 0; + } + + if(cdf->header.type != cdf->type) { + cdf_read_close(cdf); + return 0; + } + + return 1; +} + +int cdf_read_layer(CDataFile *cdf, CDataFileLayer *blay) +{ + size_t offset; + int a; + + /* seek to right location in file */ + offset= cdf->dataoffset; + for(a=0; atotlayer; a++) { + if(&cdf->layer[a] == blay) + break; + else + offset += cdf->layer[a].datasize; + } + + return (fseek(cdf->readf, offset, SEEK_SET) == 0); +} + +int cdf_read_data(CDataFile *cdf, int size, void *data) +{ + float *fdata; + int a; + + /* read data */ + if(!fread(data, size, 1, cdf->readf)) + return 0; + + /* switch endian if necessary */ + if(cdf->switchendian) { + fdata= data; + + for(a=0; areadf) { + fclose(cdf->readf); + cdf->readf= NULL; + } +} + +int cdf_write_open(CDataFile *cdf, char *filename) +{ + CDataFileHeader *header; + CDataFileImageHeader *image; + CDataFileMeshHeader *mesh; + FILE *f; + + f= fopen(filename, "wb"); + if(!f) + return 0; + + cdf->writef= f; + + /* fill header */ + header= &cdf->header; + strcpy(header->ID, "BCDF"); + header->endian= cdf_endian(); + header->version= CDF_VERSION; + header->subversion= CDF_SUBVERSION; + + header->structbytes= sizeof(CDataFileHeader); + header->type= cdf->type; + header->totlayer= cdf->totlayer; + + if(cdf->type == CDF_TYPE_IMAGE) { + /* fill image header */ + image= &cdf->btype.image; + image->structbytes= sizeof(CDataFileImageHeader); + image->tile_size= CDF_TILE_SIZE; + } + else if(cdf->type == CDF_TYPE_MESH) { + /* fill mesh header */ + mesh= &cdf->btype.mesh; + mesh->structbytes= sizeof(CDataFileMeshHeader); + } + + cdf_write_header(cdf); + + return 1; +} + +int cdf_write_layer(CDataFile *cdf, CDataFileLayer *blay) +{ + return 1; +} + +int cdf_write_data(CDataFile *cdf, int size, void *data) +{ + /* write data */ + if(!fwrite(data, size, 1, cdf->writef)) + return 0; + + return 1; +} + +void cdf_write_close(CDataFile *cdf) +{ + if(cdf->writef) { + fclose(cdf->writef); + cdf->writef= NULL; + } +} + +void cdf_remove(char *filename) +{ + BLI_delete(filename, 0, 0); +} + +/********************************** Layers ***********************************/ + +CDataFileLayer *cdf_layer_find(CDataFile *cdf, int type, char *name) +{ + CDataFileLayer *layer; + int a; + + for(a=0; atotlayer; a++) { + layer= &cdf->layer[a]; + + if(layer->type == type && strcmp(layer->name, name) == 0) + return layer; + } + + return NULL; +} + +CDataFileLayer *cdf_layer_add(CDataFile *cdf, int type, char *name, size_t datasize) +{ + CDataFileLayer *newlayer, *layer; + + /* expand array */ + newlayer= MEM_callocN(sizeof(CDataFileLayer)*(cdf->totlayer+1), "CDataFileLayer"); + memcpy(newlayer, cdf->layer, sizeof(CDataFileLayer)*cdf->totlayer); + cdf->layer= newlayer; + + cdf->totlayer++; + + /* fill in new layer */ + layer= &cdf->layer[cdf->totlayer-1]; + layer->structbytes= sizeof(CDataFileLayer); + layer->datatype= CDF_DATA_FLOAT; + layer->datasize= datasize; + layer->type= type; + BLI_strncpy(layer->name, name, CDF_LAYER_NAME_MAX); + + return layer; +} + diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c index 48fb283c404..b35cf917895 100644 --- a/source/blender/blenkernel/intern/displist.c +++ b/source/blender/blenkernel/intern/displist.c @@ -1225,7 +1225,7 @@ static ModifierData *curve_get_tesselate_point(Object *ob, int forRender, int ed ModifierTypeInfo *mti = modifierType_getInfo(md->type); if ((md->mode & required_mode) != required_mode) continue; - if (mti->isDisabled && mti->isDisabled(md)) continue; + if (mti->isDisabled && mti->isDisabled(md, forRender)) continue; if (ELEM3(md->type, eModifierType_Hook, eModifierType_Softbody, eModifierType_MeshDeform)) { preTesselatePoint = md; @@ -1275,7 +1275,7 @@ static void curve_calc_modifiers_pre(Scene *scene, Object *ob, int forRender, fl md->scene= scene; if ((md->mode & required_mode) != required_mode) continue; - if (mti->isDisabled && mti->isDisabled(md)) continue; + if (mti->isDisabled && mti->isDisabled(md, forRender)) continue; if (mti->type!=eModifierTypeType_OnlyDeform) continue; if (!deformedVerts) { @@ -1330,7 +1330,7 @@ static void curve_calc_modifiers_post(Scene *scene, Object *ob, ListBase *dispba md->scene= scene; if ((md->mode & required_mode) != required_mode) continue; - if (mti->isDisabled && mti->isDisabled(md)) continue; + if (mti->isDisabled && mti->isDisabled(md, forRender)) continue; if (mti->type!=eModifierTypeType_OnlyDeform && mti->type!=eModifierTypeType_DeformOrConstruct) continue; /* need to put all verts in 1 block for curve deform */ diff --git a/source/blender/blenkernel/intern/effect.c b/source/blender/blenkernel/intern/effect.c index 6d63553396d..83f63c9ffb2 100644 --- a/source/blender/blenkernel/intern/effect.c +++ b/source/blender/blenkernel/intern/effect.c @@ -128,7 +128,6 @@ PartDeflect *object_add_collision_fields(int type) pd->seed = ((unsigned int)(ceil(PIL_check_seconds_timer()))+1) % 128; pd->f_strength = 1.0f; pd->f_damp = 1.0f; - pd->f_size = 1.0f; /* set sensible defaults based on type */ switch(type) { @@ -139,6 +138,9 @@ PartDeflect *object_add_collision_fields(int type) pd->shape = PFIELD_SHAPE_PLANE; pd->f_flow = 1.0f; /* realistic wind behavior */ break; + case PFIELD_TEXTURE: + pd->f_size = 1.0f; + break; } pd->flag = PFIELD_DO_LOCATION|PFIELD_DO_ROTATION; @@ -693,6 +695,10 @@ int get_effector_data(EffectorCache *eff, EffectorData *efd, EffectedPoint *poin sub_v3_v3v3(efd->vec_to_point, point->loc, efd->loc); efd->distance = len_v3(efd->vec_to_point); + /* rest length for harmonic effector, will have to see later if this could be extended to other effectors */ + if(eff->pd->forcefield == PFIELD_HARMONIC && eff->pd->f_size) + mul_v3_fl(efd->vec_to_point, (efd->distance-eff->pd->f_size)/efd->distance); + if(eff->flag & PE_USE_NORMAL_DATA) { VECCOPY(efd->vec_to_point2, efd->vec_to_point); VECCOPY(efd->nor2, efd->nor); @@ -735,7 +741,7 @@ static void get_effector_tot(EffectorCache *eff, EffectorData *efd, EffectedPoin */ efd->charge = eff->pd->f_strength; } - else if(eff->pd->forcefield == PFIELD_HARMONIC) { + else if(eff->pd->forcefield == PFIELD_HARMONIC && (eff->pd->flag & PFIELD_MULTIPLE_SPRINGS)==0) { /* every particle is mapped to only one harmonic effector particle */ *p= point->index % eff->psys->totpart; *tot= *p + 1; diff --git a/source/blender/blenkernel/intern/exotic.c b/source/blender/blenkernel/intern/exotic.c index 48a05c2f6a7..2a0759e6c36 100644 --- a/source/blender/blenkernel/intern/exotic.c +++ b/source/blender/blenkernel/intern/exotic.c @@ -4050,7 +4050,7 @@ static void dxf_read(Scene *scene, char *filename) ob->type= OB_MESH; - ob->dt= OB_SHADED; + ob->dt= OB_TEXTURE; ob->trackflag= OB_POSY; ob->upflag= OB_POSZ; diff --git a/source/blender/blenkernel/intern/fcurve.c b/source/blender/blenkernel/intern/fcurve.c index 0623a5cbe5e..b5f3d0a4be0 100644 --- a/source/blender/blenkernel/intern/fcurve.c +++ b/source/blender/blenkernel/intern/fcurve.c @@ -758,7 +758,12 @@ void fcurve_free_driver(FCurve *fcu) dtarn= dtar->next; driver_free_target(driver, dtar); } - + +#ifndef DISABLE_PYTHON + if(driver->expr_comp) + BPY_DECREF(driver->expr_comp); +#endif + /* free driver itself, then set F-Curve's point to this to NULL (as the curve may still be used) */ MEM_freeN(driver); fcu->driver= NULL; @@ -823,6 +828,10 @@ float driver_get_target_value (ChannelDriver *driver, DriverTarget *dtar) /* get property to read from, and get value as appropriate */ if (RNA_path_resolve_full(&id_ptr, path, &ptr, &prop, &index)) { + /* for now, if there is no valid index, fall back to the array-index specified separately */ + if (index == -1) + index= dtar->array_index; + switch (RNA_property_type(prop)) { case PROP_BOOLEAN: if (RNA_property_array_length(&ptr, prop)) @@ -910,6 +919,7 @@ static float evaluate_driver (ChannelDriver *driver, float evaltime) // TODO: the flags for individual targets need to be used too for more fine-grained support... switch (driver->type) { case DRIVER_TYPE_AVERAGE: /* average values of driver targets */ + case DRIVER_TYPE_SUM: /* sum values of driver targets */ { /* check how many targets there are first (i.e. just one?) */ if (driver->targets.first == driver->targets.last) { @@ -924,16 +934,19 @@ static float evaluate_driver (ChannelDriver *driver, float evaltime) /* loop through targets, adding (hopefully we don't get any overflow!) */ for (dtar= driver->targets.first; dtar; dtar=dtar->next) { - value += driver_get_target_value(driver, dtar); + value += driver_get_target_value(driver, dtar); tot++; } /* return the average of these */ - return (value / (float)tot); + if (driver->type == DRIVER_TYPE_AVERAGE) + return (value / (float)tot); + else + return value; + } } break; - case DRIVER_TYPE_PYTHON: /* expression */ { #ifndef DISABLE_PYTHON diff --git a/source/blender/blenkernel/intern/font.c b/source/blender/blenkernel/intern/font.c index e2dccf02b40..1a63f97e310 100644 --- a/source/blender/blenkernel/intern/font.c +++ b/source/blender/blenkernel/intern/font.c @@ -705,10 +705,10 @@ struct chartrans *BKE_text_to_curve(Scene *scene, Object *ob, int mode) /* We assume the worst case: 1 character per line (is freed at end anyway) */ - linedata= MEM_mallocN(sizeof(float)*(slen+2),"buildtext2"); - linedata2= MEM_mallocN(sizeof(float)*(slen+2),"buildtext3"); - linedata3= MEM_callocN(sizeof(float)*(slen+2),"buildtext4"); - linedata4= MEM_callocN(sizeof(float)*(slen+2),"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/group.c b/source/blender/blenkernel/intern/group.c index 3ab02a576d0..f35a0a96bb4 100644 --- a/source/blender/blenkernel/intern/group.c +++ b/source/blender/blenkernel/intern/group.c @@ -217,8 +217,8 @@ static int rem_from_group_internal(Group *group, Object *ob) int rem_from_group(Group *group, Object *object, Scene *scene, Base *base) { if(rem_from_group_internal(group, object)) { - - if(find_group(object, NULL) == NULL) { + /* object can be NULL */ + if(object && find_group(object, NULL) == NULL) { if(scene && base==NULL) base= object_in_scene(object, scene); diff --git a/source/blender/blenkernel/intern/lattice.c b/source/blender/blenkernel/intern/lattice.c index dc548edbb25..e963b2e9fb6 100644 --- a/source/blender/blenkernel/intern/lattice.c +++ b/source/blender/blenkernel/intern/lattice.c @@ -1002,7 +1002,7 @@ void lattice_calc_modifiers(Scene *scene, Object *ob) if (!(md->mode&eModifierMode_Realtime)) continue; if (editmode && !(md->mode&eModifierMode_Editmode)) continue; - if (mti->isDisabled && mti->isDisabled(md)) continue; + if (mti->isDisabled && mti->isDisabled(md, 0)) continue; if (mti->type!=eModifierTypeType_OnlyDeform) continue; if (!vertexCos) vertexCos = lattice_getVertexCos(ob, &numVerts); diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c index 56aab7d2ba9..e0640a76f43 100644 --- a/source/blender/blenkernel/intern/modifier.c +++ b/source/blender/blenkernel/intern/modifier.c @@ -187,7 +187,7 @@ static DerivedMesh *get_original_dm(Scene *scene, Object *ob, float (*vertexCos) /***/ -static int noneModifier_isDisabled(ModifierData *md) +static int noneModifier_isDisabled(ModifierData *md, int userRenderParams) { return 1; } @@ -222,7 +222,7 @@ static CustomDataMask curveModifier_requiredDataMask(Object *ob, ModifierData *m return dataMask; } -static int curveModifier_isDisabled(ModifierData *md) +static int curveModifier_isDisabled(ModifierData *md, int userRenderParams) { CurveModifierData *cmd = (CurveModifierData*) md; @@ -298,7 +298,7 @@ static CustomDataMask latticeModifier_requiredDataMask(Object *ob, ModifierData return dataMask; } -static int latticeModifier_isDisabled(ModifierData *md) +static int latticeModifier_isDisabled(ModifierData *md, int userRenderParams) { LatticeModifierData *lmd = (LatticeModifierData*) md; @@ -402,6 +402,13 @@ static void subsurfModifier_freeData(ModifierData *md) } } +static int subsurfModifier_isDisabled(ModifierData *md, int useRenderParams) +{ + SubsurfModifierData *smd = (SubsurfModifierData*) md; + + return (useRenderParams)? (smd->renderLevels == 0): (smd->levels == 0); +} + static DerivedMesh *subsurfModifier_applyModifier( ModifierData *md, Object *ob, DerivedMesh *derivedData, int useRenderParams, int isFinalCalc) @@ -410,8 +417,13 @@ static DerivedMesh *subsurfModifier_applyModifier( DerivedMesh *result; result = subsurf_make_derived_from_derived(derivedData, smd, - useRenderParams, NULL, - isFinalCalc, 0); + useRenderParams, NULL, isFinalCalc, 0); + + if(useRenderParams || !isFinalCalc) { + DerivedMesh *cddm= CDDM_copy(result); + result->release(result); + result= cddm; + } return result; } @@ -3524,7 +3536,7 @@ static void displaceModifier_foreachIDLink(ModifierData *md, Object *ob, displaceModifier_foreachObjectLink(md, ob, (ObjectWalkFunc)walk, userData); } -static int displaceModifier_isDisabled(ModifierData *md) +static int displaceModifier_isDisabled(ModifierData *md, int useRenderParams) { DisplaceModifierData *dmd = (DisplaceModifierData*) md; @@ -4268,7 +4280,7 @@ static void smoothModifier_copyData(ModifierData *md, ModifierData *target) strncpy(tsmd->defgrp_name, smd->defgrp_name, 32); } -static int smoothModifier_isDisabled(ModifierData *md) +static int smoothModifier_isDisabled(ModifierData *md, int useRenderParams) { SmoothModifierData *smd = (SmoothModifierData*) md; short flag; @@ -4498,7 +4510,7 @@ static void castModifier_copyData(ModifierData *md, ModifierData *target) strncpy(tcmd->defgrp_name, cmd->defgrp_name, 32); } -static int castModifier_isDisabled(ModifierData *md) +static int castModifier_isDisabled(ModifierData *md, int useRenderParams) { CastModifierData *cmd = (CastModifierData*) md; short flag; @@ -5487,7 +5499,7 @@ static CustomDataMask armatureModifier_requiredDataMask(Object *ob, ModifierData return dataMask; } -static int armatureModifier_isDisabled(ModifierData *md) +static int armatureModifier_isDisabled(ModifierData *md, int useRenderParams) { ArmatureModifierData *amd = (ArmatureModifierData*) md; @@ -5610,7 +5622,7 @@ static void hookModifier_freeData(ModifierData *md) if (hmd->indexar) MEM_freeN(hmd->indexar); } -static int hookModifier_isDisabled(ModifierData *md) +static int hookModifier_isDisabled(ModifierData *md, int useRenderParams) { HookModifierData *hmd = (HookModifierData*) md; @@ -5682,7 +5694,7 @@ static void hookModifier_deformVerts( /* if DerivedMesh is present and has original index data, * use it */ - if(dm && dm->getVertData(dm, 0, CD_ORIGINDEX)) { + if(dm && dm->getVertDataArray(dm, CD_ORIGINDEX)) { int j; int orig_index; for(j = 0; j < numVerts; ++j) { @@ -5795,6 +5807,463 @@ static int softbodyModifier_dependsOnTime(ModifierData *md) return 1; } +/* Solidify */ + + +typedef struct EdgeFaceRef { + int f1; /* init as -1 */ + int f2; +} EdgeFaceRef; + +static void dm_calc_normal(DerivedMesh *dm, float (*temp_nors)[3]) +{ + int i, numVerts, numEdges, numFaces; + MFace *mface, *mf; + MVert *mvert, *mv; + + float (*face_nors)[3]; + float *f_no; + int calc_face_nors= 0; + + numVerts = dm->getNumVerts(dm); + numEdges = dm->getNumEdges(dm); + numFaces = dm->getNumFaces(dm); + mface = dm->getFaceArray(dm); + mvert = dm->getVertArray(dm); + + /* we don't want to overwrite any referenced layers */ + + /* + Dosnt work here! + mv = CustomData_duplicate_referenced_layer(&dm->vertData, CD_MVERT); + cddm->mvert = mv; + */ + + face_nors = CustomData_get_layer(&dm->faceData, CD_NORMAL); + if(!face_nors) { + calc_face_nors = 1; + face_nors = CustomData_add_layer(&dm->faceData, CD_NORMAL, CD_CALLOC, NULL, numFaces); + } + + mv = mvert; + mf = mface; + + { + EdgeHash *edge_hash = BLI_edgehash_new(); + EdgeHashIterator *edge_iter; + int edge_ref_count = 0; + int ed_v1, ed_v2; /* use when getting the key */ + EdgeFaceRef *edge_ref_array = MEM_callocN(numEdges * sizeof(EdgeFaceRef), "Edge Connectivity"); + EdgeFaceRef *edge_ref; + float edge_normal[3]; + + /* This function adds an edge hash if its not there, and adds the face index */ +#define NOCALC_EDGEWEIGHT_ADD_EDGEREF_FACE(EDV1, EDV2); \ + edge_ref = (EdgeFaceRef *)BLI_edgehash_lookup(edge_hash, EDV1, EDV2); \ + if (!edge_ref) { \ + edge_ref = &edge_ref_array[edge_ref_count]; edge_ref_count++; \ + edge_ref->f1=i; \ + edge_ref->f2=-1; \ + BLI_edgehash_insert(edge_hash, EDV1, EDV2, edge_ref); \ + } else { \ + edge_ref->f2=i; \ + } + + for(i = 0; i < numFaces; i++, mf++) { + f_no = face_nors[i]; + + if(mf->v4) { + if(calc_face_nors) + normal_quad_v3(f_no, mv[mf->v1].co, mv[mf->v2].co, mv[mf->v3].co, mv[mf->v4].co); + + NOCALC_EDGEWEIGHT_ADD_EDGEREF_FACE(mf->v1, mf->v2); + NOCALC_EDGEWEIGHT_ADD_EDGEREF_FACE(mf->v2, mf->v3); + NOCALC_EDGEWEIGHT_ADD_EDGEREF_FACE(mf->v3, mf->v4); + NOCALC_EDGEWEIGHT_ADD_EDGEREF_FACE(mf->v4, mf->v1); + } else { + if(calc_face_nors) + normal_tri_v3(f_no, mv[mf->v1].co, mv[mf->v2].co, mv[mf->v3].co); + + NOCALC_EDGEWEIGHT_ADD_EDGEREF_FACE(mf->v1, mf->v2); + NOCALC_EDGEWEIGHT_ADD_EDGEREF_FACE(mf->v2, mf->v3); + NOCALC_EDGEWEIGHT_ADD_EDGEREF_FACE(mf->v3, mf->v1); + } + } + + for(edge_iter = BLI_edgehashIterator_new(edge_hash); !BLI_edgehashIterator_isDone(edge_iter); BLI_edgehashIterator_step(edge_iter)) { + /* Get the edge vert indicies, and edge value (the face indicies that use it)*/ + BLI_edgehashIterator_getKey(edge_iter, (int*)&ed_v1, (int*)&ed_v2); + edge_ref = BLI_edgehashIterator_getValue(edge_iter); + + if (edge_ref->f2 != -1) { + /* We have 2 faces using this edge, calculate the edges normal + * using the angle between the 2 faces as a weighting */ + add_v3_v3v3(edge_normal, face_nors[edge_ref->f1], face_nors[edge_ref->f2]); + normalize_v3(edge_normal); + mul_v3_fl(edge_normal, angle_normalized_v3v3(face_nors[edge_ref->f1], face_nors[edge_ref->f2])); + } else { + /* only one face attached to that edge */ + /* an edge without another attached- the weight on this is + * undefined, M_PI/2 is 90d in radians and that seems good enough */ + VECCOPY(edge_normal, face_nors[edge_ref->f1]) + mul_v3_fl(edge_normal, M_PI/2); + } + add_v3_v3(temp_nors[ed_v1], edge_normal); + add_v3_v3(temp_nors[ed_v2], edge_normal); + } + BLI_edgehashIterator_free(edge_iter); + BLI_edgehash_free(edge_hash, NULL); + MEM_freeN(edge_ref_array); + } + + /* normalize vertex normals and assign */ + for(i = 0; i < numVerts; i++, mv++) { + if(normalize_v3(temp_nors[i]) == 0.0f) { + normal_short_to_float_v3(temp_nors[i], mv->no); + } + } +} + +static void solidifyModifier_initData(ModifierData *md) +{ + SolidifyModifierData *smd = (SolidifyModifierData*) md; + smd->offset = 0.01f; + smd->flag = MOD_SOLIDIFY_EVEN | MOD_SOLIDIFY_RIM | MOD_SOLIDIFY_NORMAL_CALC; +} + +static void solidifyModifier_copyData(ModifierData *md, ModifierData *target) +{ + SolidifyModifierData *smd = (SolidifyModifierData*) md; + SolidifyModifierData *tsmd = (SolidifyModifierData*) target; + tsmd->offset = smd->offset; + tsmd->crease_inner = smd->crease_inner; + tsmd->crease_outer = smd->crease_outer; + tsmd->crease_rim = smd->crease_rim; + strcpy(tsmd->vgroup, smd->vgroup); +} + +static DerivedMesh *solidifyModifier_applyModifier(ModifierData *md, + Object *ob, + DerivedMesh *dm, + int useRenderParams, + int isFinalCalc) +{ + int i; + DerivedMesh *result; + SolidifyModifierData *smd = (SolidifyModifierData*) md; + + MFace *mf, *mface, *orig_mface; + MEdge *ed, *medge, *orig_medge; + MVert *mv, *mvert, *orig_mvert; + + int numVerts = dm->getNumVerts(dm); + int numEdges = dm->getNumEdges(dm); + int numFaces = dm->getNumFaces(dm); + + /* use for edges */ + int *new_vert_arr= NULL; + int newFaces = 0; + + int *new_edge_arr= NULL; + int newEdges = 0; + + int *edge_users= NULL; + char *edge_order= NULL; + + float (*vert_nors)[3]= NULL; + + orig_mface = dm->getFaceArray(dm); + orig_medge = dm->getEdgeArray(dm); + orig_mvert = dm->getVertArray(dm); + + if(smd->flag & MOD_SOLIDIFY_RIM) { + EdgeHash *edgehash = BLI_edgehash_new(); + EdgeHashIterator *ehi; + int v1, v2; + int eidx; + + for(i=0, mv=orig_mvert; iflag &= ~ME_VERT_TMP_TAG; + } + + for(i=0, ed=orig_medge; iv1, ed->v2, SET_INT_IN_POINTER(i)); + } + +#define INVALID_UNUSED -1 +#define INVALID_PAIR -2 + +#define ADD_EDGE_USER(_v1, _v2, edge_ord) \ + eidx= GET_INT_FROM_POINTER(BLI_edgehash_lookup(edgehash, _v1, _v2)); \ + if(edge_users[eidx] == INVALID_UNUSED) { \ + edge_users[eidx]= (_v1 < _v2) ? i:(i+numFaces); \ + edge_order[eidx]= edge_ord; \ + } else { \ + edge_users[eidx]= INVALID_PAIR; \ + } \ + + + edge_users= MEM_mallocN(sizeof(int) * numEdges, "solid_mod edges"); + edge_order= MEM_mallocN(sizeof(char) * numEdges, "solid_mod eorder"); + memset(edge_users, INVALID_UNUSED, sizeof(int) * numEdges); + + for(i=0, mf=orig_mface; iv4) { + ADD_EDGE_USER(mf->v1, mf->v2, 0); + ADD_EDGE_USER(mf->v2, mf->v3, 1); + ADD_EDGE_USER(mf->v3, mf->v4, 2); + ADD_EDGE_USER(mf->v4, mf->v1, 3); + } + else { + ADD_EDGE_USER(mf->v1, mf->v2, 0); + ADD_EDGE_USER(mf->v2, mf->v3, 1); + ADD_EDGE_USER(mf->v3, mf->v1, 2); + } + } + +#undef ADD_EDGE_USER +#undef INVALID_UNUSED +#undef INVALID_PAIR + + + new_edge_arr= MEM_callocN(sizeof(int) * numEdges, "solid_mod arr"); + + ehi= BLI_edgehashIterator_new(edgehash); + for(; !BLI_edgehashIterator_isDone(ehi); BLI_edgehashIterator_step(ehi)) { + int eidx= GET_INT_FROM_POINTER(BLI_edgehashIterator_getValue(ehi)); + if(edge_users[eidx] >= 0) { + BLI_edgehashIterator_getKey(ehi, &v1, &v2); + orig_mvert[v1].flag |= ME_VERT_TMP_TAG; + orig_mvert[v2].flag |= ME_VERT_TMP_TAG; + new_edge_arr[newFaces]= eidx; + newFaces++; + } + } + BLI_edgehashIterator_free(ehi); + + + + new_vert_arr= MEM_callocN(sizeof(int) * numVerts, "solid_mod new_varr"); + for(i=0, mv=orig_mvert; iflag & ME_VERT_TMP_TAG) { + new_vert_arr[newEdges] = i; + newEdges++; + + mv->flag &= ~ME_VERT_TMP_TAG; + } + } + + BLI_edgehash_free(edgehash, NULL); + } + + if(smd->flag & MOD_SOLIDIFY_NORMAL_CALC) { + vert_nors= MEM_callocN(sizeof(float) * numVerts * 3, "mod_solid_vno_hq"); + dm_calc_normal(dm, vert_nors); + } + + result = CDDM_from_template(dm, numVerts * 2, (numEdges * 2) + newEdges, (numFaces * 2) + newFaces); + + mface = result->getFaceArray(result); + medge = result->getEdgeArray(result); + mvert = result->getVertArray(result); + + DM_copy_face_data(dm, result, 0, 0, numFaces); + DM_copy_face_data(dm, result, 0, numFaces, numFaces); + + DM_copy_edge_data(dm, result, 0, 0, numEdges); + DM_copy_edge_data(dm, result, 0, numEdges, numEdges); + + DM_copy_vert_data(dm, result, 0, 0, numVerts); + DM_copy_vert_data(dm, result, 0, numVerts, numVerts); + + { + static int corner_indices[4] = {2, 1, 0, 3}; + int is_quad; + + for(i=0, mf=mface+numFaces; iv1 += numVerts; + mf->v2 += numVerts; + mf->v3 += numVerts; + if(mf->v4) + mf->v4 += numVerts; + + /* Flip face normal */ + { + is_quad = mf->v4; + SWAP(int, mf->v1, mf->v3); + DM_swap_face_data(result, i+numFaces, corner_indices); + test_index_face(mf, &result->faceData, numFaces, is_quad ? 4:3); + } + } + } + + for(i=0, ed=medge+numEdges; iv1 += numVerts; + ed->v2 += numVerts; + } + + if((smd->flag & MOD_SOLIDIFY_EVEN) == 0) { + /* no even thickness, very simple */ + float scalar_short = smd->offset / 32767.0f; + + if(smd->offset < 0.0f) mv= mvert+numVerts; + else mv= mvert; + + for(i=0; ico[0] += mv->no[0] * scalar_short; + mv->co[1] += mv->no[1] * scalar_short; + mv->co[2] += mv->no[2] * scalar_short; + } + } + else { + /* make a face normal layer if not present */ + float (*face_nors)[3]; + int face_nors_calc= 0; + + /* same as EM_solidify() in editmesh_lib.c */ + float *vert_angles= MEM_callocN(sizeof(float) * numVerts * 2, "mod_solid_pair"); /* 2 in 1 */ + float *vert_accum= vert_angles + numVerts; + float face_angles[4]; + int i, j, vidx; + + face_nors = CustomData_get_layer(&dm->faceData, CD_NORMAL); + if(!face_nors) { + face_nors = CustomData_add_layer(&dm->faceData, CD_NORMAL, CD_CALLOC, NULL, dm->numFaceData); + face_nors_calc= 1; + } + + if(vert_nors==NULL) { + vert_nors= MEM_mallocN(sizeof(float) * numVerts * 3, "mod_solid_vno"); + for(i=0, mv=mvert; ino); + } + } + + for(i=0, mf=mface; iv4) + normal_quad_v3(face_nors[i], mvert[mf->v1].co, mvert[mf->v2].co, mvert[mf->v3].co, mvert[mf->v4].co); + else + normal_tri_v3(face_nors[i] , mvert[mf->v1].co, mvert[mf->v2].co, mvert[mf->v3].co); + } + + if(mf->v4) { + angle_quad_v3(face_angles, mvert[mf->v1].co, mvert[mf->v2].co, mvert[mf->v3].co, mvert[mf->v4].co); + j= 3; + } + else { + angle_tri_v3(face_angles, mvert[mf->v1].co, mvert[mf->v2].co, mvert[mf->v3].co); + j= 2; + } + + for(; j>=0; j--) { + vidx = *(&mf->v1 + j); + vert_accum[vidx] += face_angles[j]; + vert_angles[vidx]+= shell_angle_to_dist(angle_normalized_v3v3(vert_nors[vidx], face_nors[i])) * face_angles[j]; + } + } + + if(smd->offset < 0.0f) mv= mvert+numVerts; + else mv= mvert; + + for(i=0; ico, vert_nors[i], smd->offset * (vert_angles[i] / vert_accum[i])); + } + } + + MEM_freeN(vert_angles); + } + + if(vert_nors) + MEM_freeN(vert_nors); + + if(smd->flag & MOD_SOLIDIFY_RIM) { + + static int edge_indices[4][4] = { + {1, 0, 0, 1}, + {2, 1, 1, 2}, + {3, 2, 2, 3}, + {0, 3, 3, 0}}; + + /* add faces & edges */ + ed= medge + (numEdges * 2); + for(i=0; iv1= new_vert_arr[i]; + ed->v2= new_vert_arr[i] + numVerts; + ed->flag |= ME_EDGEDRAW; + + if(smd->crease_rim) + ed->crease= smd->crease_rim * 255.0f; + } + + /* faces */ + mf= mface + (numFaces * 2); + for(i=0; i= numFaces) { + fidx -= numFaces; + flip= 1; + } + else { + flip= 0; + } + + ed= medge + eidx; + + /* copy most of the face settings */ + DM_copy_face_data(dm, result, fidx, (numFaces * 2) + i, 1); + + if(flip) { + DM_swap_face_data(result, (numFaces * 2) + i, edge_indices[edge_order[eidx]]); + + mf->v1= ed->v1; + mf->v2= ed->v2; + mf->v3= ed->v2 + numVerts; + mf->v4= ed->v1 + numVerts; + } + else { + DM_swap_face_data(result, (numFaces * 2) + i, edge_indices[edge_order[eidx]]); + + mf->v1= ed->v2; + mf->v2= ed->v1; + mf->v3= ed->v1 + numVerts; + mf->v4= ed->v2 + numVerts; + + + } + + if(smd->crease_outer > 0.0f) + ed->crease= smd->crease_outer * 255.0f; + + if(smd->crease_inner > 0.0f) { + ed= medge + (numEdges + eidx); + ed->crease= smd->crease_inner * 255.0f; + } + } + + MEM_freeN(new_vert_arr); + MEM_freeN(new_edge_arr); + MEM_freeN(edge_users); + MEM_freeN(edge_order); + } + + return result; +} + +static DerivedMesh *solidifyModifier_applyModifierEM(ModifierData *md, + Object *ob, + EditMesh *editData, + DerivedMesh *derivedData) +{ + return solidifyModifier_applyModifier(md, ob, derivedData, 0, 1); +} + /* Smoke */ static void smokeModifier_initData(ModifierData *md) @@ -6308,7 +6777,7 @@ static void booleanModifier_copyData(ModifierData *md, ModifierData *target) tbmd->operation = bmd->operation; } -static int booleanModifier_isDisabled(ModifierData *md) +static int booleanModifier_isDisabled(ModifierData *md, int useRenderParams) { BooleanModifierData *bmd = (BooleanModifierData*) md; @@ -6558,6 +7027,7 @@ static void particleInstanceModifier_copyData(ModifierData *md, ModifierData *ta tpimd->ob = pimd->ob; tpimd->psys = pimd->psys; tpimd->flag = pimd->flag; + tpimd->axis = pimd->axis; tpimd->position = pimd->position; tpimd->random_position = pimd->random_position; } @@ -7757,7 +8227,7 @@ static CustomDataMask meshdeformModifier_requiredDataMask(Object *ob, ModifierDa return dataMask; } -static int meshdeformModifier_isDisabled(ModifierData *md) +static int meshdeformModifier_isDisabled(ModifierData *md, int useRenderParams) { MeshDeformModifierData *mmd = (MeshDeformModifierData*) md; @@ -8047,15 +8517,10 @@ static void multiresModifier_initData(ModifierData *md) { MultiresModifierData *mmd = (MultiresModifierData*)md; - mmd->lvl = mmd->totlvl = 1; -} - -static void multiresModifier_freeData(ModifierData *md) -{ - MultiresModifierData *mmd = (MultiresModifierData*)md; - - if(mmd->undo_verts) - MEM_freeN(mmd->undo_verts); + mmd->lvl = 0; + mmd->sculptlvl = 0; + mmd->renderlvl = 0; + mmd->totlvl = 0; } static void multiresModifier_copyData(ModifierData *md, ModifierData *target) @@ -8063,37 +8528,35 @@ static void multiresModifier_copyData(ModifierData *md, ModifierData *target) MultiresModifierData *mmd = (MultiresModifierData*) md; MultiresModifierData *tmmd = (MultiresModifierData*) target; - tmmd->totlvl = mmd->totlvl; tmmd->lvl = mmd->lvl; + tmmd->sculptlvl = mmd->sculptlvl; + tmmd->renderlvl = mmd->renderlvl; + tmmd->totlvl = mmd->totlvl; } static DerivedMesh *multiresModifier_applyModifier(ModifierData *md, Object *ob, DerivedMesh *dm, int useRenderParams, int isFinalCalc) { MultiresModifierData *mmd = (MultiresModifierData*)md; - DerivedMesh *final; + DerivedMesh *result; - /* TODO: for now just skip a level1 mesh */ - if(mmd->lvl == 1) + result = multires_dm_create_from_derived(mmd, 0, dm, ob, useRenderParams, isFinalCalc); + + if(result == dm) return dm; - final = multires_dm_create_from_derived(mmd, 0, dm, ob, useRenderParams, isFinalCalc); - if(mmd->undo_signal && mmd->undo_verts && mmd->undo_verts_tot == final->getNumVerts(final)) { - int i; - MVert *dst = CDDM_get_verts(final); - for(i = 0; i < mmd->undo_verts_tot; ++i) { - copy_v3_v3(dst[i].co, mmd->undo_verts[i].co); - } - CDDM_calc_normals(final); - - MultiresDM_mark_as_modified(final); - - MEM_freeN(mmd->undo_verts); - mmd->undo_signal = 0; - mmd->undo_verts = NULL; + if(useRenderParams || !isFinalCalc) { + DerivedMesh *cddm= CDDM_copy(result); + result->release(result); + result= cddm; + } + else if(ob->mode & OB_MODE_SCULPT) { + /* would be created on the fly too, just nicer this + way on first stroke after e.g. switching levels */ + result->getPBVH(ob, result); } - return final; + return result; } /* Shrinkwrap */ @@ -8142,7 +8605,7 @@ static CustomDataMask shrinkwrapModifier_requiredDataMask(Object *ob, ModifierDa return dataMask; } -static int shrinkwrapModifier_isDisabled(ModifierData *md) +static int shrinkwrapModifier_isDisabled(ModifierData *md, int useRenderParams) { ShrinkwrapModifierData *smd = (ShrinkwrapModifierData*) md; return !smd->target; @@ -8438,6 +8901,7 @@ ModifierTypeInfo *modifierType_getInfo(ModifierType type) mti->initData = subsurfModifier_initData; mti->copyData = subsurfModifier_copyData; mti->freeData = subsurfModifier_freeData; + mti->isDisabled = subsurfModifier_isDisabled; mti->applyModifier = subsurfModifier_applyModifier; mti->applyModifierEM = subsurfModifier_applyModifierEM; @@ -8770,7 +9234,6 @@ ModifierTypeInfo *modifierType_getInfo(ModifierType type) mti->type = eModifierTypeType_Constructive; mti->flags = eModifierTypeFlag_AcceptsMesh | eModifierTypeFlag_RequiresOriginalData; mti->initData = multiresModifier_initData; - mti->freeData = multiresModifier_freeData; mti->copyData = multiresModifier_copyData; mti->applyModifier = multiresModifier_applyModifier; @@ -8782,6 +9245,16 @@ ModifierTypeInfo *modifierType_getInfo(ModifierType type) mti->deformVertsEM = shapekeyModifier_deformVertsEM; mti->deformMatricesEM = shapekeyModifier_deformMatricesEM; + mti = INIT_TYPE(Solidify); + mti->type = eModifierTypeType_Constructive; + mti->flags = eModifierTypeFlag_AcceptsMesh + //| eModifierTypeFlag_SupportsMapping + | eModifierTypeFlag_SupportsEditmode + | eModifierTypeFlag_EnableInEditmode; + mti->initData = solidifyModifier_initData; + mti->copyData = solidifyModifier_copyData; + mti->applyModifier = solidifyModifier_applyModifier; + mti->applyModifierEM = solidifyModifier_applyModifierEM; typeArrInit = 0; #undef INIT_TYPE } @@ -8920,7 +9393,7 @@ int modifier_couldBeCage(ModifierData *md) return ( (md->mode & eModifierMode_Realtime) && (md->mode & eModifierMode_Editmode) && - (!mti->isDisabled || !mti->isDisabled(md)) && + (!mti->isDisabled || !mti->isDisabled(md, 0)) && modifier_supportsMapping(md)); } @@ -8963,7 +9436,7 @@ int modifiers_getCageIndex(Object *ob, int *lastPossibleCageIndex_r, int virtual if (!(md->mode & eModifierMode_Realtime)) continue; if (!(md->mode & eModifierMode_Editmode)) continue; - if (mti->isDisabled && mti->isDisabled(md)) continue; + if (mti->isDisabled && mti->isDisabled(md, 0)) continue; if (!(mti->flags & eModifierTypeFlag_SupportsEditmode)) continue; if (md->mode & eModifierMode_DisableTemporary) continue; @@ -9005,7 +9478,7 @@ int modifier_isEnabled(ModifierData *md, int required_mode) ModifierTypeInfo *mti = modifierType_getInfo(md->type); if((md->mode & required_mode) != required_mode) return 0; - if(mti->isDisabled && mti->isDisabled(md)) return 0; + if(mti->isDisabled && mti->isDisabled(md, required_mode == eModifierMode_Render)) return 0; if(md->mode & eModifierMode_DisableTemporary) return 0; if(required_mode & eModifierMode_Editmode) if(!(mti->flags & eModifierTypeFlag_SupportsEditmode)) return 0; @@ -9151,15 +9624,15 @@ Object *modifiers_isDeformedByArmature(Object *ob) } /* Takes an object and returns its first selected lattice, else just its -* armature -* This should work for multiple armatures per object +* lattice +* This should work for multiple lattics per object */ Object *modifiers_isDeformedByLattice(Object *ob) { ModifierData *md = modifiers_getVirtualModifierList(ob); LatticeModifierData *lmd= NULL; - /* return the first selected armature, this lets us use multiple armatures + /* return the first selected lattice, this lets us use multiple lattices */ for (; md; md=md->next) { if (md->type==eModifierType_Lattice) { @@ -9192,28 +9665,24 @@ int modifiers_usesArmature(Object *ob, bArmature *arm) return 0; } -int modifier_isDeformer(ModifierData *md) +int modifier_isCorrectableDeformed(ModifierData *md) { if (md->type==eModifierType_Armature) return 1; - if (md->type==eModifierType_Curve) - return 1; - if (md->type==eModifierType_Lattice) - return 1; if (md->type==eModifierType_ShapeKey) return 1; return 0; } -int modifiers_isDeformed(Scene *scene, Object *ob) +int modifiers_isCorrectableDeformed(Scene *scene, Object *ob) { ModifierData *md = modifiers_getVirtualModifierList(ob); for (; md; md=md->next) { if(ob->mode==OB_MODE_EDIT && (md->mode & eModifierMode_Editmode)==0); else - if(modifier_isDeformer(md)) + if(modifier_isCorrectableDeformed(md)) return 1; } return 0; diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c index 47b2914b0f5..f5414567da8 100644 --- a/source/blender/blenkernel/intern/multires.c +++ b/source/blender/blenkernel/intern/multires.c @@ -39,6 +39,7 @@ #include "BLI_math.h" #include "BLI_blenlib.h" +#include "BLI_pbvh.h" #include "BKE_cdderivedmesh.h" #include "BKE_customdata.h" @@ -50,14 +51,20 @@ #include "BKE_multires.h" #include "BKE_object.h" #include "BKE_subsurf.h" +#include "BKE_utildefines.h" + +#include "CCGSubSurf.h" #include #include /* MULTIRES MODIFIER */ static const int multires_max_levels = 13; -static const int multires_quad_tot[] = {4, 9, 25, 81, 289, 1089, 4225, 16641, 66049, 263169, 1050625, 4198401, 16785409}; -static const int multires_side_tot[] = {2, 3, 5, 9, 17, 33, 65, 129, 257, 513, 1025, 2049, 4097}; +static const int multires_grid_tot[] = {0, 4, 9, 25, 81, 289, 1089, 4225, 16641, 66049, 263169, 1050625, 4198401, 16785409}; +static const int multires_side_tot[] = {0, 2, 3, 5, 9, 17, 33, 65, 129, 257, 513, 1025, 2049, 4097}; + +static void multires_mvert_to_ss(DerivedMesh *dm, MVert *mvert); +static void multiresModifier_disp_run(DerivedMesh *dm, Mesh *me, int invert, int add, DMGridData **oldGridData, int totlvl); MultiresModifierData *find_multires_modifier(Object *ob) { @@ -72,23 +79,53 @@ MultiresModifierData *find_multires_modifier(Object *ob) } return mmd; - } -int multiresModifier_switch_level(Object *ob, const int distance) +static int multires_get_level(Object *ob, MultiresModifierData *mmd, int render) { - MultiresModifierData *mmd = find_multires_modifier(ob); - - if(mmd) { - mmd->lvl += distance; - if(mmd->lvl < 1) mmd->lvl = 1; - else if(mmd->lvl > mmd->totlvl) mmd->lvl = mmd->totlvl; - /* XXX: DAG_id_flush_update(&ob->id, OB_RECALC_DATA); - object_handle_update(ob);*/ - return 1; - } + if(render) + return mmd->renderlvl; + else if(ob->mode == OB_MODE_SCULPT) + return mmd->sculptlvl; else - return 0; + return mmd->lvl; +} + +static void multires_set_tot_level(Object *ob, MultiresModifierData *mmd, int lvl) +{ + mmd->totlvl = lvl; + + if(ob->mode != OB_MODE_SCULPT) { + mmd->lvl = MAX2(mmd->lvl, lvl); + CLAMP(mmd->lvl, 0, mmd->totlvl); + } + + mmd->sculptlvl = MAX2(mmd->sculptlvl, lvl); + CLAMP(mmd->sculptlvl, 0, mmd->totlvl); + + mmd->renderlvl = MAX2(mmd->renderlvl, lvl); + CLAMP(mmd->renderlvl, 0, mmd->totlvl); +} + +static void multires_dm_mark_as_modified(DerivedMesh *dm) +{ + CCGDerivedMesh *ccgdm = (CCGDerivedMesh*)dm; + ccgdm->multires.modified = 1; +} + +void multires_mark_as_modified(Object *ob) +{ + if(ob && ob->derivedFinal) + multires_dm_mark_as_modified(ob->derivedFinal); +} + +void multires_force_update(Object *ob) +{ + if(ob && ob->derivedFinal) { + ob->derivedFinal->needsFree =1; + ob->derivedFinal->release(ob->derivedFinal); + ob->derivedFinal = NULL; + } } /* XXX */ @@ -153,338 +190,160 @@ void multiresModifier_join(Object *ob) } #endif -/* Returns 0 on success, 1 if the src's totvert doesn't match */ +/* Returns 1 on success, 0 if the src's totvert doesn't match */ int multiresModifier_reshape(MultiresModifierData *mmd, Object *dst, Object *src) { - Mesh *src_me = get_mesh(src); + DerivedMesh *srcdm = src->derivedFinal; DerivedMesh *mrdm = dst->derivedFinal; - if(mrdm && mrdm->getNumVerts(mrdm) == src_me->totvert) { - MVert *mvert = CDDM_get_verts(mrdm); - int i; + if(mrdm && srcdm && mrdm->getNumVerts(mrdm) == srcdm->getNumVerts(srcdm)) { + multires_mvert_to_ss(mrdm, srcdm->getVertArray(srcdm)); - for(i = 0; i < src_me->totvert; ++i) - copy_v3_v3(mvert[i].co, src_me->mvert[i].co); - mrdm->needsFree = 1; - MultiresDM_mark_as_modified(mrdm); - mrdm->release(mrdm); - dst->derivedFinal = NULL; + multires_dm_mark_as_modified(mrdm); + multires_force_update(dst); - return 0; + return 1; } - return 1; + return 0; } -static void Mat3FromColVecs(float mat[][3], float v1[3], float v2[3], float v3[3]) +static void column_vectors_to_mat3(float mat[][3], float v1[3], float v2[3], float v3[3]) { copy_v3_v3(mat[0], v1); copy_v3_v3(mat[1], v2); copy_v3_v3(mat[2], v3); } -static DerivedMesh *multires_subdisp_pre(DerivedMesh *mrdm, int distance, int simple) +static void multires_copy_grid(float (*gridA)[3], float (*gridB)[3], int sizeA, int sizeB) { - DerivedMesh *final; - SubsurfModifierData smd; + int x, y, j, skip; - memset(&smd, 0, sizeof(SubsurfModifierData)); - smd.levels = distance; - if(simple) - smd.subdivType = ME_SIMPLE_SUBSURF; + if(sizeA > sizeB) { + skip = (sizeA-1)/(sizeB-1); - final = subsurf_make_derived_from_derived_with_multires(mrdm, &smd, NULL, 0, NULL, 0, 0); + for(j = 0, y = 0; y < sizeB; y++) + for(x = 0; x < sizeB; x++, j++) + copy_v3_v3(gridA[y*skip*sizeA + x*skip], gridB[j]); + } + else { + skip = (sizeB-1)/(sizeA-1); - return final; + for(j = 0, y = 0; y < sizeA; y++) + for(x = 0; x < sizeA; x++, j++) + copy_v3_v3(gridA[j], gridB[y*skip*sizeB + x*skip]); + } } -static void VecAddUf(float a[3], float b[3]) +static void multires_copy_dm_grid(DMGridData *gridA, DMGridData *gridB, int sizeA, int sizeB) { - a[0] += b[0]; - a[1] += b[1]; - a[2] += b[2]; -} + int x, y, j, skip; -static void multires_subdisp(DerivedMesh *orig, Object *ob, DerivedMesh *final, int lvl, int totlvl, - int totsubvert, int totsubedge, int totsubface, int addverts) -{ - DerivedMesh *mrdm; - Mesh *me = ob->data; - MultiresModifierData mmd_sub; - MVert *mvs = CDDM_get_verts(final); - MVert *mvd, *mvd_f1, *mvs_f1, *mvd_f3, *mvd_f4; - MVert *mvd_f2, *mvs_f2, *mvs_e1, *mvd_e1, *mvs_e2; - int totvert; - int slo1 = multires_side_tot[lvl - 1]; - int sll = slo1 / 2; - int slo2 = multires_side_tot[totlvl - 2]; - int shi2 = multires_side_tot[totlvl - 1]; - int skip = multires_side_tot[totlvl - lvl] - 1; - int i, j, k; + if(sizeA > sizeB) { + skip = (sizeA-1)/(sizeB-1); - memset(&mmd_sub, 0, sizeof(MultiresModifierData)); - mmd_sub.lvl = mmd_sub.totlvl = totlvl; - mrdm = multires_dm_create_from_derived(&mmd_sub, 1, orig, ob, 0, 0); - - mvd = CDDM_get_verts(mrdm); - /* Need to map from ccg to mrdm */ - totvert = mrdm->getNumVerts(mrdm); - - if(!addverts) { - for(i = 0; i < totvert; ++i) { - float z[3] = {0,0,0}; - copy_v3_v3(mvd[i].co, z); - } + for(j = 0, y = 0; y < sizeB; y++) + for(x = 0; x < sizeB; x++, j++) + copy_v3_v3(gridA[y*skip*sizeA + x*skip].co, gridB[j].co); } + else { + skip = (sizeB-1)/(sizeA-1); - /* Load base verts */ - for(i = 0; i < me->totvert; ++i) - VecAddUf(mvd[totvert - me->totvert + i].co, mvs[totvert - me->totvert + i].co); - - mvd_f1 = mvd; - mvs_f1 = mvs; - mvd_f2 = mvd; - mvs_f2 = mvs + totvert - totsubvert; - mvs_e1 = mvs + totsubface * (skip-1) * (skip-1); - - for(i = 0; i < me->totface; ++i) { - const int end = me->mface[i].v4 ? 4 : 3; - int x, y, x2, y2, mov= 0; - - mvd_f1 += 1 + end * (slo2-2); //center+edgecross - mvd_f3 = mvd_f4 = mvd_f1; - - for(j = 0; j < end; ++j) { - mvd_f1 += (skip/2 - 1) * (slo2 - 2) + (skip/2 - 1); - /* Update sub faces */ - for(y = 0; y < sll; ++y) { - for(x = 0; x < sll; ++x) { - /* Face center */ - VecAddUf(mvd_f1->co, mvs_f1->co); - mvs_f1 += 1; - - /* Now we hold the center of the subface at mvd_f1 - and offset it to the edge cross and face verts */ - - /* Edge cross */ - for(k = 0; k < 4; ++k) { - if(k == 0) mov = -1; - else if(k == 1) mov = slo2 - 2; - else if(k == 2) mov = 1; - else if(k == 3) mov = -(slo2 - 2); - - for(x2 = 1; x2 < skip/2; ++x2) { - VecAddUf((mvd_f1 + mov * x2)->co, mvs_f1->co); - ++mvs_f1; - } - } - - /* Main face verts */ - for(k = 0; k < 4; ++k) { - int movx= 0, movy= 0; - - if(k == 0) { movx = -1; movy = -(slo2 - 2); } - else if(k == 1) { movx = slo2 - 2; movy = -1; } - else if(k == 2) { movx = 1; movy = slo2 - 2; } - else if(k == 3) { movx = -(slo2 - 2); movy = 1; } - - for(y2 = 1; y2 < skip/2; ++y2) { - for(x2 = 1; x2 < skip/2; ++x2) { - VecAddUf((mvd_f1 + movy * y2 + movx * x2)->co, mvs_f1->co); - ++mvs_f1; - } - } - } - - mvd_f1 += skip; - } - mvd_f1 += (skip - 1) * (slo2 - 2) - 1; - } - mvd_f1 -= (skip - 1) * (slo2 - 2) - 1 + skip; - mvd_f1 += (slo2 - 2) * (skip/2-1) + skip/2-1 + 1; - } - - /* update face center verts */ - VecAddUf(mvd_f2->co, mvs_f2->co); - - mvd_f2 += 1; - mvs_f2 += 1; - - /* update face edge verts */ - for(j = 0; j < end; ++j) { - MVert *restore; - - /* Super-face edge cross */ - for(k = 0; k < skip-1; ++k) { - VecAddUf(mvd_f2->co, mvs_e1->co); - mvd_f2++; - mvs_e1++; - } - for(x = 1; x < sll; ++x) { - VecAddUf(mvd_f2->co, mvs_f2->co); - mvd_f2++; - mvs_f2++; - - for(k = 0; k < skip-1; ++k) { - VecAddUf(mvd_f2->co, mvs_e1->co); - mvd_f2++; - mvs_e1++; - } - } - - restore = mvs_e1; - for(y = 0; y < sll - 1; ++y) { - for(x = 0; x < sll; ++x) { - for(k = 0; k < skip - 1; ++k) { - VecAddUf(mvd_f3[(skip-1)+(y*skip) + (x*skip+k)*(slo2-2)].co, - mvs_e1->co); - ++mvs_e1; - } - mvs_e1 += skip-1; - } - } - - mvs_e1 = restore + skip - 1; - for(y = 0; y < sll - 1; ++y) { - for(x = 0; x < sll; ++x) { - for(k = 0; k < skip - 1; ++k) { - VecAddUf(mvd_f3[(slo2-2)*(skip-1)+(x*skip)+k + y*skip*(slo2-2)].co, - mvs_e1->co); - ++mvs_e1; - } - mvs_e1 += skip - 1; - } - } - - mvd_f3 += (slo2-2)*(slo2-2); - mvs_e1 -= skip - 1; - } - - /* update base (2) face verts */ - for(j = 0; j < end; ++j) { - mvd_f2 += (slo2 - 1) * (skip - 1); - for(y = 0; y < sll - 1; ++y) { - for(x = 0; x < sll - 1; ++x) { - VecAddUf(mvd_f2->co, mvs_f2->co); - mvd_f2 += skip; - ++mvs_f2; - } - mvd_f2 += (slo2 - 1) * (skip - 1); - } - mvd_f2 -= (skip - 1); - } + for(j = 0, y = 0; y < sizeA; y++) + for(x = 0; x < sizeA; x++, j++) + copy_v3_v3(gridA[j].co, gridB[y*skip*sizeB + x*skip].co); } - - /* edges */ - mvd_e1 = mvd + totvert - me->totvert - me->totedge * (shi2-2); - mvs_e2 = mvs + totvert - me->totvert - me->totedge * (slo1-2); - for(i = 0; i < me->totedge; ++i) { - for(j = 0; j < skip - 1; ++j) { - VecAddUf(mvd_e1->co, mvs_e1->co); - mvd_e1++; - mvs_e1++; - } - for(j = 0; j < slo1 - 2; j++) { - VecAddUf(mvd_e1->co, mvs_e2->co); - mvd_e1++; - mvs_e2++; - - for(k = 0; k < skip - 1; ++k) { - VecAddUf(mvd_e1->co, mvs_e1->co); - mvd_e1++; - mvs_e1++; - } - } - } - - final->needsFree = 1; - final->release(final); - mrdm->needsFree = 1; - MultiresDM_mark_as_modified(mrdm); - mrdm->release(mrdm); } /* direction=1 for delete higher, direction=0 for lower (not implemented yet) */ -void multiresModifier_del_levels(struct MultiresModifierData *mmd, struct Object *ob, int direction) +void multiresModifier_del_levels(MultiresModifierData *mmd, Object *ob, int direction) { Mesh *me = get_mesh(ob); - int distance = mmd->totlvl - mmd->lvl; - MDisps *mdisps = CustomData_get_layer(&me->fdata, CD_MDISPS); + int lvl = multires_get_level(ob, mmd, 0); + int levels = mmd->totlvl - lvl; + MDisps *mdisps; + + CustomData_external_read(&me->fdata, &me->id, CD_MASK_MDISPS, me->totface); + mdisps= CustomData_get_layer(&me->fdata, CD_MDISPS); multires_force_update(ob); - if(mdisps && distance > 0 && direction == 1) { - int skip = multires_side_tot[distance] - 1; - int st = multires_side_tot[mmd->totlvl - 1]; - int totdisp = multires_quad_tot[mmd->lvl - 1]; - int i, j, x, y; + if(mdisps && levels > 0 && direction == 1) { + if(lvl > 0) { + int nsize = multires_side_tot[lvl]; + int hsize = multires_side_tot[mmd->totlvl]; + int i; - for(i = 0; i < me->totface; ++i) { - float (*disps)[3] = MEM_callocN(sizeof(float) * 3 * totdisp, "multires del disps"); - - for(j = 0, y = 0; y < st; y += skip) { - for(x = 0; x < st; x += skip) { - copy_v3_v3(disps[j], mdisps[i].disps[y * st + x]); - ++j; + for(i = 0; i < me->totface; ++i) { + MDisps *mdisp= &mdisps[i]; + float (*disps)[3], (*ndisps)[3], (*hdisps)[3]; + int nvert = (me->mface[i].v4)? 4: 3; + int totdisp = multires_grid_tot[lvl]*nvert; + int S; + + disps = MEM_callocN(sizeof(float) * 3 * totdisp, "multires disps"); + + ndisps = disps; + hdisps = mdisp->disps; + + for(S = 0; S < nvert; S++) { + multires_copy_grid(ndisps, hdisps, nsize, hsize); + + ndisps += nsize*nsize; + hdisps += hsize*hsize; } - } - MEM_freeN(mdisps[i].disps); - mdisps[i].disps = disps; - mdisps[i].totdisp = totdisp; + MEM_freeN(mdisp->disps); + mdisp->disps = disps; + mdisp->totdisp = totdisp; + } + } + else { + CustomData_external_remove(&me->fdata, &me->id, CD_MDISPS, me->totface); + CustomData_free_layer_active(&me->fdata, CD_MDISPS, me->totface); } } - mmd->totlvl = mmd->lvl; + multires_set_tot_level(ob, mmd, lvl); } -void multiresModifier_subdivide(MultiresModifierData *mmd, Object *ob, int distance, int updateblock, int simple) +static DerivedMesh *multires_dm_create_local(Object *ob, DerivedMesh *dm, int lvl, int totlvl, int simple) +{ + MultiresModifierData mmd; + + memset(&mmd, 0, sizeof(MultiresModifierData)); + mmd.lvl = lvl; + mmd.sculptlvl = lvl; + mmd.renderlvl = lvl; + mmd.totlvl = totlvl; + mmd.simple = simple; + + return multires_dm_create_from_derived(&mmd, 1, dm, ob, 0, 0); +} + +static DerivedMesh *subsurf_dm_create_local(Object *ob, DerivedMesh *dm, int lvl, int simple, int optimal) +{ + SubsurfModifierData smd; + + memset(&smd, 0, sizeof(SubsurfModifierData)); + smd.levels = smd.renderLevels = lvl; + smd.flags |= eSubsurfModifierFlag_SubsurfUv; + if(simple) + smd.subdivType = ME_SIMPLE_SUBSURF; + if(optimal) + smd.flags |= eSubsurfModifierFlag_ControlEdges; + + return subsurf_make_derived_from_derived(dm, &smd, 0, NULL, 0, 0); +} + +static void multires_reallocate_mdisps(Mesh *me, MDisps *mdisps, int lvl) { - DerivedMesh *final = NULL; - int totsubvert = 0, totsubface = 0, totsubedge = 0; - Mesh *me = get_mesh(ob); - MDisps *mdisps; int i; - if(distance == 0) - return; - - if(mmd->totlvl > multires_max_levels) - mmd->totlvl = multires_max_levels; - if(mmd->lvl > multires_max_levels) - mmd->lvl = multires_max_levels; - - multires_force_update(ob); - - mmd->lvl = mmd->totlvl; - mmd->totlvl += distance; - - mdisps = CustomData_get_layer(&me->fdata, CD_MDISPS); - if(!mdisps) - mdisps = CustomData_add_layer(&me->fdata, CD_MDISPS, CD_DEFAULT, NULL, me->totface); - - if(mdisps->disps && !updateblock && mmd->totlvl > 2) { - DerivedMesh *orig, *mrdm; - MultiresModifierData mmd_sub; - - orig = CDDM_from_mesh(me, NULL); - memset(&mmd_sub, 0, sizeof(MultiresModifierData)); - mmd_sub.lvl = mmd_sub.totlvl = mmd->lvl; - mmd_sub.simple = simple; - mrdm = multires_dm_create_from_derived(&mmd_sub, 1, orig, ob, 0, 0); - totsubvert = mrdm->getNumVerts(mrdm); - totsubedge = mrdm->getNumEdges(mrdm); - totsubface = mrdm->getNumFaces(mrdm); - orig->needsFree = 1; - orig->release(orig); - - final = multires_subdisp_pre(mrdm, distance, simple); - mrdm->needsFree = 1; - mrdm->release(mrdm); - } - + /* reallocate displacements to be filled in */ for(i = 0; i < me->totface; ++i) { - const int totdisp = multires_quad_tot[mmd->totlvl - 1]; + int nvert = (me->mface[i].v4)? 4: 3; + int totdisp = multires_grid_tot[lvl]*nvert; float (*disps)[3] = MEM_callocN(sizeof(float) * 3 * totdisp, "multires disps"); if(mdisps[i].disps) @@ -493,765 +352,353 @@ void multiresModifier_subdivide(MultiresModifierData *mmd, Object *ob, int dista mdisps[i].disps = disps; mdisps[i].totdisp = totdisp; } - - - if(final) { - DerivedMesh *orig; - - orig = CDDM_from_mesh(me, NULL); - - multires_subdisp(orig, ob, final, mmd->lvl, mmd->totlvl, totsubvert, totsubedge, totsubface, 0); - - orig->needsFree = 1; - orig->release(orig); - } - - mmd->lvl = mmd->totlvl; } -typedef struct DisplacerEdges { - /* DerivedMesh index at the start of each edge (using face x/y directions to define the start) */ - int base[4]; - /* 1 if edge moves in the positive x or y direction, -1 otherwise */ - int dir[4]; -} DisplacerEdges; - -typedef struct DisplacerSpill { - /* Index of face (in base mesh), -1 for none */ - int face; - - /* Spill flag */ - /* 1 = Negative variable axis */ - /* 2 = Near fixed axis */ - /* 4 = Flip axes */ - int f; - - /* Neighboring edges */ - DisplacerEdges edges; -} DisplacerSpill; - -typedef struct MultiresDisplacer { - Mesh *me; - MDisps *grid; - MFace *face; - - int dm_first_base_vert_index; - - int spacing; - int sidetot, interior_st, disp_st; - int sidendx; - int type; - int invert; - MVert *subco; - int subco_index, face_index; - float weight; - - /* Valence for each corner */ - int valence[4]; - - /* Neighboring edges for current face */ - DisplacerEdges edges_primary; - - /* Neighboring faces */ - DisplacerSpill spill_x, spill_y; - - int *face_offsets; - - int x, y, ax, ay; -} MultiresDisplacer; - -static int mface_v(MFace *f, int v) +void multiresModifier_subdivide(MultiresModifierData *mmd, Object *ob, int updateblock, int simple) { - return v == 0 ? f->v1 : v == 1 ? f->v2 : v == 2 ? f->v3 : v == 3 ? f->v4 : -1; -} + Mesh *me = ob->data; + MDisps *mdisps; + int lvl= mmd->totlvl; + int totlvl= mmd->totlvl+1; -/* Get the edges (and their directions) */ -static void find_displacer_edges(MultiresDisplacer *d, DerivedMesh *dm, DisplacerEdges *de, MFace *f) -{ - ListBase *emap = MultiresDM_get_vert_edge_map(dm); - IndexNode *n; - int i, end = f->v4 ? 4 : 3; - int offset = dm->getNumVerts(dm) - d->me->totvert - d->me->totedge * d->interior_st; + if(totlvl > multires_max_levels) + return; - for(i = 0; i < end; ++i) { - int vcur = mface_v(f, i); - int vnext = mface_v(f, i == end - 1 ? 0 : i + 1); + multires_force_update(ob); - de->dir[i] = 1; - - for(n = emap[vcur].first; n; n = n->next) { - MEdge *e = &d->me->medge[n->index]; - - if(e->v1 == vnext || e->v2 == vnext) { - de->base[i] = n->index * d->interior_st; - if(((i == 0 || i == 1) && e->v1 == vnext) || - ((i == 2 || i == 3) && e->v2 == vnext)) { - de->dir[i] = -1; - de->base[i] += d->interior_st - 1; - } - de->base[i] += offset; - break; - } + mdisps = CustomData_get_layer(&me->fdata, CD_MDISPS); + if(!mdisps) + mdisps = CustomData_add_layer(&me->fdata, CD_MDISPS, CD_DEFAULT, NULL, me->totface); + + if(mdisps->disps && !updateblock && totlvl > 1) { + /* upsample */ + DerivedMesh *lowdm, *cddm, *highdm; + DMGridData **highGridData, **lowGridData, **subGridData; + CCGSubSurf *ss; + int i, numGrids, highGridSize, lowGridSize; + + /* create subsurf DM from original mesh at high level */ + cddm = CDDM_from_mesh(me, NULL); + highdm = subsurf_dm_create_local(ob, cddm, totlvl, simple, 0); + + /* create multires DM from original mesh at low level */ + lowdm = multires_dm_create_local(ob, cddm, lvl, lvl, simple); + cddm->release(cddm); + + /* copy subsurf grids and replace them with low displaced grids */ + numGrids = highdm->getNumGrids(highdm); + highGridSize = highdm->getGridSize(highdm); + highGridData = highdm->getGridData(highdm); + lowGridSize = lowdm->getGridSize(lowdm); + lowGridData = lowdm->getGridData(lowdm); + + subGridData = MEM_callocN(sizeof(float*)*numGrids, "subGridData*"); + + for(i = 0; i < numGrids; ++i) { + /* backup subsurf grids */ + subGridData[i] = MEM_callocN(sizeof(DMGridData)*highGridSize*highGridSize, "subGridData"); + memcpy(subGridData[i], highGridData[i], sizeof(DMGridData)*highGridSize*highGridSize); + + /* overwrite with current displaced grids */ + multires_copy_dm_grid(highGridData[i], lowGridData[i], highGridSize, lowGridSize); } - } -} -/* Returns in out the corners [0-3] that use v1 and v2 */ -static void find_face_corners(MFace *f, int v1, int v2, int out[2]) -{ - int i, end = f->v4 ? 4 : 3; + /* low lower level dm no longer needed at this point */ + lowdm->release(lowdm); - for(i = 0; i < end; ++i) { - int corner = mface_v(f, i); - if(corner == v1) - out[0] = i; - if(corner == v2) - out[1] = i; - } -} + /* subsurf higher levels again with displaced data */ + ss= ((CCGDerivedMesh*)highdm)->ss; + ccgSubSurf_updateFromFaces(ss, lvl, NULL, 0); + ccgSubSurf_updateLevels(ss, lvl, NULL, 0); -static void multires_displacer_get_spill_faces(MultiresDisplacer *d, DerivedMesh *dm, MFace *mface) -{ - ListBase *map = MultiresDM_get_vert_face_map(dm); - IndexNode *n1, *n2; - int v4 = d->face->v4 ? d->face->v4 : d->face->v1; - int crn[2], lv; + /* reallocate displacements */ + multires_reallocate_mdisps(me, mdisps, totlvl); - memset(&d->spill_x, 0, sizeof(DisplacerSpill)); - memset(&d->spill_y, 0, sizeof(DisplacerSpill)); - d->spill_x.face = d->spill_y.face = -1; + /* compute displacements */ + multiresModifier_disp_run(highdm, me, 1, 0, subGridData, totlvl); - for(n1 = map[d->face->v3].first; n1; n1 = n1->next) { - if(n1->index == d->face_index) - continue; - - for(n2 = map[d->face->v2].first; n2; n2 = n2->next) { - if(n1->index == n2->index) - d->spill_x.face = n1->index; - } - for(n2 = map[v4].first; n2; n2 = n2->next) { - if(n1->index == n2->index) - d->spill_y.face = n1->index; - } - } - - if(d->spill_x.face != -1) { - /* Neighbor of v2/v3 found, find flip and orientation */ - find_face_corners(&mface[d->spill_x.face], d->face->v2, d->face->v3, crn); - lv = mface[d->spill_x.face].v4 ? 3 : 2; - - if(crn[0] == 0 && crn[1] == lv) - d->spill_x.f = 0+2+0; - else if(crn[0] == lv && crn[1] == 0) - d->spill_x.f = 1+2+0; - else if(crn[0] == 1 && crn[1] == 0) - d->spill_x.f = 1+2+4; - else if(crn[0] == 0 && crn[1] == 1) - d->spill_x.f = 0+2+4; - else if(crn[0] == 2 && crn[1] == 1) - d->spill_x.f = 1+0+0; - else if(crn[0] == 1 && crn[1] == 2) - d->spill_x.f = 0+0+0; - else if(crn[0] == 3 && crn[1] == 2) - d->spill_x.f = 0+0+4; - else if(crn[0] == 2 && crn[1] == 3) - d->spill_x.f = 1+0+4; - - find_displacer_edges(d, dm, &d->spill_x.edges, &mface[d->spill_x.face]); - } - - if(d->spill_y.face != -1) { - /* Neighbor of v3/v4 found, find flip and orientation */ - find_face_corners(&mface[d->spill_y.face], d->face->v3, v4, crn); - lv = mface[d->spill_y.face].v4 ? 3 : 2; - - if(crn[0] == 1 && crn[1] == 0) - d->spill_y.f = 1+2+0; - else if(crn[0] == 0 && crn[1] == 1) - d->spill_y.f = 0+2+0; - else if(crn[0] == 2 && crn[1] == 1) - d->spill_y.f = 1+0+4; - else if(crn[0] == 1 && crn[1] == 2) - d->spill_y.f = 0+0+4; - else if(crn[0] == 3 && crn[1] == 2) - d->spill_y.f = 0+0+0; - else if(crn[0] == 2 && crn[1] == 3) - d->spill_y.f = 1+0+0; - else if(crn[0] == 0 && crn[1] == lv) - d->spill_y.f = 0+2+4; - else if(crn[0] == lv && crn[1] == 0) - d->spill_y.f = 1+2+4; - - find_displacer_edges(d, dm, &d->spill_y.edges, &mface[d->spill_y.face]); - } -} - -static void find_corner_valences(MultiresDisplacer *d, DerivedMesh *dm) -{ - int i; - - d->valence[3] = -1; - - /* Set the vertex valence for the corners */ - for(i = 0; i < (d->face->v4 ? 4 : 3); ++i) - d->valence[i] = BLI_countlist(&MultiresDM_get_vert_edge_map(dm)[mface_v(d->face, i)]); -} - -static void multires_displacer_init(MultiresDisplacer *d, DerivedMesh *dm, - const int face_index, const int invert) -{ - Mesh *me = MultiresDM_get_mesh(dm); - - d->me = me; - d->face = me->mface + face_index; - d->face_index = face_index; - d->face_offsets = MultiresDM_get_face_offsets(dm); - /* Get the multires grid from customdata */ - d->grid = CustomData_get_layer(&me->fdata, CD_MDISPS); - if(d->grid) - d->grid += face_index; - - d->spacing = pow(2, MultiresDM_get_totlvl(dm) - MultiresDM_get_lvl(dm)); - d->sidetot = multires_side_tot[MultiresDM_get_lvl(dm) - 1]; - d->interior_st = d->sidetot - 2; - d->disp_st = multires_side_tot[MultiresDM_get_totlvl(dm) - 1]; - d->invert = invert; - - multires_displacer_get_spill_faces(d, dm, me->mface); - find_displacer_edges(d, dm, &d->edges_primary, d->face); - find_corner_valences(d, dm); - - d->dm_first_base_vert_index = dm->getNumVerts(dm) - me->totvert; -} - -static void multires_displacer_weight(MultiresDisplacer *d, const float w) -{ - d->weight = w; -} - -static void multires_displacer_anchor(MultiresDisplacer *d, const int type, const int side_index) -{ - d->sidendx = side_index; - d->x = d->y = d->sidetot / 2; - d->type = type; - - if(type == 2) { - if(side_index == 0) - d->y -= 1; - else if(side_index == 1) - d->x += 1; - else if(side_index == 2) - d->y += 1; - else if(side_index == 3) - d->x -= 1; - } - else if(type == 3) { - if(side_index == 0) { - d->x -= 1; - d->y -= 1; - } - else if(side_index == 1) { - d->x += 1; - d->y -= 1; - } - else if(side_index == 2) { - d->x += 1; - d->y += 1; - } - else if(side_index == 3) { - d->x -= 1; - d->y += 1; - } - } - - d->ax = d->x; - d->ay = d->y; -} - -static void multires_displacer_anchor_edge(MultiresDisplacer *d, int v1, int v2, int x) -{ - d->type = 4; - - if(v1 == d->face->v1) { - d->x = 0; - d->y = 0; - if(v2 == d->face->v2) - d->x += x; - else if(v2 == d->face->v3) { - if(x < d->sidetot / 2) - d->y = x; - else { - d->x = x; - d->y = d->sidetot - 1; - } - } - else - d->y += x; - } - else if(v1 == d->face->v2) { - d->x = d->sidetot - 1; - d->y = 0; - if(v2 == d->face->v1) - d->x -= x; - else - d->y += x; - } - else if(v1 == d->face->v3) { - d->x = d->sidetot - 1; - d->y = d->sidetot - 1; - if(v2 == d->face->v2) - d->y -= x; - else if(v2 == d->face->v1) { - if(x < d->sidetot / 2) - d->x -= x; - else { - d->x = 0; - d->y -= x; - } - } - else - d->x -= x; - } - else if(v1 == d->face->v4) { - d->x = 0; - d->y = d->sidetot - 1; - if(v2 == d->face->v3) - d->x += x; - else - d->y -= x; - } -} - -static void multires_displacer_anchor_vert(MultiresDisplacer *d, const int v) -{ - const int e = d->sidetot - 1; - - d->type = 5; - - d->x = d->y = 0; - if(v == d->face->v2) - d->x = e; - else if(v == d->face->v3) - d->x = d->y = e; - else if(v == d->face->v4) - d->y = e; -} - -static void multires_displacer_jump(MultiresDisplacer *d) -{ - if(d->sidendx == 0) { - d->x -= 1; - d->y = d->ay; - } - else if(d->sidendx == 1) { - d->x = d->ax; - d->y -= 1; - } - else if(d->sidendx == 2) { - d->x += 1; - d->y = d->ay; - } - else if(d->sidendx == 3) { - d->x = d->ax; - d->y += 1; - } -} - -/* Treating v1 as (0,0) and v3 as (st-1,st-1), - returns the index of the vertex at (x,y). - If x or y is >= st, wraps over to the adjacent face, - or if there is no adjacent face, returns -2. */ -static int multires_index_at_loc(int face_index, int x, int y, MultiresDisplacer *d, DisplacerEdges *de) -{ - int coord_edge = d->sidetot - 1; /* Max value of x/y at edge of grid */ - int mid = d->sidetot / 2; - int lim = mid - 1; - int qtot = lim * lim; - int base = d->face_offsets[face_index]; - - /* Edge spillover */ - if(x == d->sidetot || y == d->sidetot) { - int flags, v_axis, f_axis, lx, ly; - - if(x == d->sidetot && d->spill_x.face != -1) { - flags = d->spill_x.f; - - /* Handle triangle seam between v1 and v3 */ - if(!d->me->mface[d->spill_x.face].v4 && - ((flags == 2 && y >= mid) || (flags == 3 && y < mid))) - flags += 2; - - v_axis = (flags & 1) ? d->sidetot - 1 - y : y; - f_axis = (flags & 2) ? 1 : d->sidetot - 2; - lx = f_axis, ly = v_axis; - - if(flags & 4) { - lx = v_axis; - ly = f_axis; - } - - return multires_index_at_loc(d->spill_x.face, lx, ly, d, &d->spill_x.edges); - } - else if(y == d->sidetot && d->spill_y.face != -1) { - flags = d->spill_y.f; - - /* Handle triangle seam between v1 and v3 */ - if(!d->me->mface[d->spill_y.face].v4 && - ((flags == 6 && x >= mid) || (flags == 7 && x < mid))) - flags = ~flags; - - v_axis = (flags & 1) ? x : d->sidetot - 1 - x; - f_axis = (flags & 2) ? 1 : d->sidetot - 2; - lx = v_axis, ly = f_axis; - - if(flags & 4) { - lx = f_axis; - ly = v_axis; - } - - return multires_index_at_loc(d->spill_y.face, lx, ly, d, &d->spill_y.edges); - } - else - return -2; - } - /* Corners */ - else if(x == 0 && y == 0) - return d->dm_first_base_vert_index + d->face->v1; - else if(x == coord_edge && y == 0) - return d->dm_first_base_vert_index + d->face->v2; - else if(x == coord_edge && y == coord_edge) - return d->dm_first_base_vert_index + d->face->v3; - else if(x == 0 && y == coord_edge) - return d->dm_first_base_vert_index + d->face->v4; - /* Edges */ - else if(x == 0) { - if(d->face->v4) - return de->base[3] + de->dir[3] * (y - 1); - else - return de->base[2] + de->dir[2] * (y - 1); - } - else if(y == 0) - return de->base[0] + de->dir[0] * (x - 1); - else if(x == d->sidetot - 1) - return de->base[1] + de->dir[1] * (y - 1); - else if(y == d->sidetot - 1) - return de->base[2] + de->dir[2] * (x - 1); - /* Face center */ - else if(x == mid && y == mid) - return base; - /* Cross */ - else if(x == mid && y < mid) - return base + (mid - y); - else if(y == mid && x > mid) - return base + lim + (x - mid); - else if(x == mid && y > mid) - return base + lim*2 + (y - mid); - else if(y == mid && x < mid) { - if(d->face->v4) - return base + lim*3 + (mid - x); - else - return base + lim*2 + (mid - x); - } - /* Quarters */ - else { - int offset = base + lim * (d->face->v4 ? 4 : 3); - if(x < mid && y < mid) - return offset + ((mid - x - 1)*lim + (mid - y)); - else if(x > mid && y < mid) - return offset + qtot + ((mid - y - 1)*lim + (x - mid)); - else if(x > mid && y > mid) - return offset + qtot*2 + ((x - mid - 1)*lim + (y - mid)); - else if(x < mid && y > mid) - return offset + qtot*3 + ((y - mid - 1)*lim + (mid - x)); - } - - return -1; -} - -/* Calculate the TS matrix used for applying displacements. - Uses the undisplaced subdivided mesh's curvature to find a - smoothly normal and tangents. */ -static void calc_disp_mat(MultiresDisplacer *d, float mat[3][3]) -{ - int u = multires_index_at_loc(d->face_index, d->x + 1, d->y, d, &d->edges_primary); - int v = multires_index_at_loc(d->face_index, d->x, d->y + 1, d, &d->edges_primary); - float norm[3], t1[3], t2[3], inv[3][3]; - MVert *base = d->subco + d->subco_index; - - //printf("f=%d, x=%d, y=%d, i=%d, u=%d, v=%d ", d->face_index, d->x, d->y, d->subco_index, u, v); - - norm[0] = base->no[0] / 32767.0f; - norm[1] = base->no[1] / 32767.0f; - norm[2] = base->no[2] / 32767.0f; - - /* Special handling for vertices of valence 3 */ - if(d->valence[1] == 3 && d->x == d->sidetot - 1 && d->y == 0) - u = -1; - else if(d->valence[2] == 3 && d->x == d->sidetot - 1 && d->y == d->sidetot - 1) - u = v = -1; - else if(d->valence[3] == 3 && d->x == 0 && d->y == d->sidetot - 1) - v = -1; - - /* If either u or v is -2, it's on a boundary. In this - case, back up by one row/column and use the same - vector as the preceeding sub-edge. */ - - if(u < 0) { - u = multires_index_at_loc(d->face_index, d->x - 1, d->y, d, &d->edges_primary); - sub_v3_v3v3(t1, base->co, d->subco[u].co); - } - else - sub_v3_v3v3(t1, d->subco[u].co, base->co); - - if(v < 0) { - v = multires_index_at_loc(d->face_index, d->x, d->y - 1, d, &d->edges_primary); - sub_v3_v3v3(t2, base->co, d->subco[v].co); - } - else - sub_v3_v3v3(t2, d->subco[v].co, base->co); - - //printf("uu=%d, vv=%d\n", u, v); - - normalize_v3(t1); - normalize_v3(t2); - Mat3FromColVecs(mat, t1, t2, norm); - - if(d->invert) { - invert_m3_m3(inv, mat); - copy_m3_m3(mat, inv); - } -} - -static void multires_displace(MultiresDisplacer *d, float co[3]) -{ - float disp[3], mat[3][3]; - float *data; - MVert *subco = &d->subco[d->subco_index]; - - if(!d->grid || !d->grid->disps) return; - - data = d->grid->disps[(d->y * d->spacing) * d->disp_st + (d->x * d->spacing)]; - - if(d->invert) - sub_v3_v3v3(disp, co, subco->co); - else - copy_v3_v3(disp, data); - - - /* Apply ts matrix to displacement */ - calc_disp_mat(d, mat); - mul_m3_v3(mat, disp); - - if(d->invert) { - copy_v3_v3(data, disp); - + /* free */ + highdm->release(highdm); + for(i = 0; i < numGrids; ++i) + MEM_freeN(subGridData[i]); + MEM_freeN(subGridData); } else { - if(d->type == 4 || d->type == 5) - mul_v3_fl(disp, d->weight); - add_v3_v3v3(co, co, disp); + /* only reallocate, nothing to upsample */ + multires_reallocate_mdisps(me, mdisps, totlvl); } - if(d->type == 2) { - if(d->sidendx == 0) - d->y -= 1; - else if(d->sidendx == 1) - d->x += 1; - else if(d->sidendx == 2) - d->y += 1; - else if(d->sidendx == 3) - d->x -= 1; + multires_set_tot_level(ob, mmd, totlvl); +} + +static void grid_tangent(int gridSize, int index, int x, int y, int axis, DMGridData **gridData, float t[3]) +{ + if(axis == 0) { + if(x == gridSize - 1) { + if(y == gridSize - 1) + sub_v3_v3v3(t, gridData[index][x + gridSize*(y - 1)].co, gridData[index][x - 1 + gridSize*(y - 1)].co); + else + sub_v3_v3v3(t, gridData[index][x + gridSize*y].co, gridData[index][x - 1 + gridSize*y].co); + } + else + sub_v3_v3v3(t, gridData[index][x + 1 + gridSize*y].co, gridData[index][x + gridSize*y].co); } - else if(d->type == 3) { - if(d->sidendx == 0) - d->y -= 1; - else if(d->sidendx == 1) - d->x += 1; - else if(d->sidendx == 2) - d->y += 1; - else if(d->sidendx == 3) - d->x -= 1; + else if(axis == 1) { + if(y == gridSize - 1) { + if(x == gridSize - 1) + sub_v3_v3v3(t, gridData[index][x - 1 + gridSize*y].co, gridData[index][x - 1 + gridSize*(y - 1)].co); + else + sub_v3_v3v3(t, gridData[index][x + gridSize*y].co, gridData[index][x + gridSize*(y - 1)].co); + } + else + sub_v3_v3v3(t, gridData[index][x + gridSize*(y + 1)].co, gridData[index][x + gridSize*y].co); } } -static void multiresModifier_disp_run(DerivedMesh *dm, MVert *subco, int invert) +static void multiresModifier_disp_run(DerivedMesh *dm, Mesh *me, int invert, int add, DMGridData **oldGridData, int totlvl) { - const int lvl = MultiresDM_get_lvl(dm); - const int gridFaces = multires_side_tot[lvl - 2] - 1; - const int edgeSize = multires_side_tot[lvl - 1] - 1; - MVert *mvert = CDDM_get_verts(dm); - MEdge *medge = MultiresDM_get_mesh(dm)->medge; - MFace *mface = MultiresDM_get_mesh(dm)->mface; - ListBase *map = MultiresDM_get_vert_face_map(dm); - Mesh *me = MultiresDM_get_mesh(dm); - MultiresDisplacer d; - int i, S, x, y; + CCGDerivedMesh *ccgdm = (CCGDerivedMesh*)dm; + DMGridData **gridData, **subGridData; + MFace *mface = me->mface; + MDisps *mdisps = CustomData_get_layer(&me->fdata, CD_MDISPS); + int *gridOffset; + int i, numGrids, gridSize, dGridSize, dSkip; - d.subco = subco; - d.subco_index = 0; + if(!mdisps) { + if(invert) + mdisps = CustomData_add_layer(&me->fdata, CD_MDISPS, CD_DEFAULT, NULL, me->totface); + else + return; + } + numGrids = dm->getNumGrids(dm); + gridSize = dm->getGridSize(dm); + gridData = dm->getGridData(dm); + gridOffset = dm->getGridOffset(dm); + subGridData = (oldGridData)? oldGridData: gridData; + + dGridSize = multires_side_tot[totlvl]; + dSkip = (dGridSize-1)/(gridSize-1); + + #pragma omp parallel for private(i) schedule(static) for(i = 0; i < me->totface; ++i) { const int numVerts = mface[i].v4 ? 4 : 3; - - /* Center */ - multires_displacer_init(&d, dm, i, invert); - multires_displacer_anchor(&d, 1, 0); - multires_displace(&d, mvert->co); - ++mvert; - ++d.subco_index; + MDisps *mdisp = &mdisps[i]; + int S, x, y, gIndex = gridOffset[i]; - /* Cross */ - for(S = 0; S < numVerts; ++S) { - multires_displacer_anchor(&d, 2, S); - for(x = 1; x < gridFaces; ++x) { - multires_displace(&d, mvert->co); - ++mvert; - ++d.subco_index; - } + /* when adding new faces in edit mode, need to allocate disps */ + if(!mdisp->disps) + #pragma omp critical + { + multires_reallocate_mdisps(me, mdisps, totlvl); } - /* Quarters */ - for(S = 0; S < numVerts; S++) { - multires_displacer_anchor(&d, 3, S); - for(y = 1; y < gridFaces; y++) { - for(x = 1; x < gridFaces; x++) { - multires_displace(&d, mvert->co); - ++mvert; - ++d.subco_index; - } - multires_displacer_jump(&d); - } - } - } + for(S = 0; S < numVerts; ++S, ++gIndex) { + DMGridData *grid = gridData[gIndex]; + DMGridData *subgrid = subGridData[gIndex]; + float (*dispgrid)[3] = &mdisp->disps[S*dGridSize*dGridSize]; - for(i = 0; i < me->totedge; ++i) { - const MEdge *e = &medge[i]; - for(x = 1; x < edgeSize; ++x) { - IndexNode *n1, *n2; - int numFaces = 0; - for(n1 = map[e->v1].first; n1; n1 = n1->next) { - for(n2 = map[e->v2].first; n2; n2 = n2->next) { - if(n1->index == n2->index) - ++numFaces; - } - } - multires_displacer_weight(&d, 1.0f / numFaces); - /* TODO: Better to have these loops outside the x loop */ - for(n1 = map[e->v1].first; n1; n1 = n1->next) { - for(n2 = map[e->v2].first; n2; n2 = n2->next) { - if(n1->index == n2->index) { - multires_displacer_init(&d, dm, n1->index, invert); - multires_displacer_anchor_edge(&d, e->v1, e->v2, x); - multires_displace(&d, mvert->co); + for(y = 0; y < gridSize; y++) { + for(x = 0; x < gridSize; x++) { + float *co = grid[x + y*gridSize].co; + float *sco = subgrid[x + y*gridSize].co; + float *no = subgrid[x + y*gridSize].no; + float *data = dispgrid[dGridSize*y*dSkip + x*dSkip]; + float mat[3][3], tx[3], ty[3], disp[3], d[3]; + + /* construct tangent space matrix */ + grid_tangent(gridSize, gIndex, x, y, 0, subGridData, tx); + normalize_v3(tx); + + grid_tangent(gridSize, gIndex, x, y, 1, subGridData, ty); + normalize_v3(ty); + + //mul_v3_fl(tx, 1.0f/(gridSize-1)); + //mul_v3_fl(ty, 1.0f/(gridSize-1)); + //cross_v3_v3v3(no, tx, ty); + + column_vectors_to_mat3(mat, tx, ty, no); + + if(!invert) { + /* convert to object space and add */ + mul_v3_m3v3(disp, mat, data); + add_v3_v3v3(co, sco, disp); + } + else if(!add) { + /* convert difference to tangent space */ + sub_v3_v3v3(disp, co, sco); + invert_m3(mat); + mul_v3_m3v3(data, mat, disp); + } + else { + /* convert difference to tangent space */ + invert_m3(mat); + mul_v3_m3v3(d, mat, co); + add_v3_v3(data, d); } } } - ++mvert; - ++d.subco_index; } } - - for(i = 0; i < me->totvert; ++i) { - IndexNode *n; - multires_displacer_weight(&d, 1.0f / BLI_countlist(&map[i])); - for(n = map[i].first; n; n = n->next) { - multires_displacer_init(&d, dm, n->index, invert); - multires_displacer_anchor_vert(&d, i); - multires_displace(&d, mvert->co); - } - ++mvert; - ++d.subco_index; - } - if(!invert) - CDDM_calc_normals(dm); + if(!invert) { + ccgSubSurf_stitchFaces(ccgdm->ss, 0, NULL, 0); + ccgSubSurf_updateNormals(ccgdm->ss, NULL, 0); + } } static void multiresModifier_update(DerivedMesh *dm) { + CCGDerivedMesh *ccgdm= (CCGDerivedMesh*)dm; Object *ob; Mesh *me; MDisps *mdisps; + MultiresModifierData *mmd; - ob = MultiresDM_get_object(dm); - me = MultiresDM_get_mesh(dm); + ob = ccgdm->multires.ob; + me = ccgdm->multires.ob->data; + mmd = ccgdm->multires.mmd; + CustomData_external_read(&me->fdata, &me->id, CD_MASK_MDISPS, me->totface); mdisps = CustomData_get_layer(&me->fdata, CD_MDISPS); if(mdisps) { - const int lvl = MultiresDM_get_lvl(dm); - const int totlvl = MultiresDM_get_totlvl(dm); + int lvl = ccgdm->multires.lvl; + int totlvl = ccgdm->multires.totlvl; if(lvl < totlvl) { - /* Propagate disps upwards */ - DerivedMesh *final, *subco_dm, *orig; - MVert *verts_new = NULL, *cur_lvl_orig_verts = NULL; - MultiresModifierData mmd; - int i; + Mesh *me = ob->data; + DerivedMesh *lowdm, *cddm, *highdm; + DMGridData **highGridData, **lowGridData, **subGridData, **gridData, *diffGrid; + CCGSubSurf *ss; + int i, j, numGrids, highGridSize, lowGridSize; - orig = CDDM_from_mesh(me, NULL); - - /* Regenerate the current level's vertex coordinates - (includes older displacements but not new sculpts) */ - mmd.totlvl = totlvl; - mmd.lvl = lvl; - subco_dm = multires_dm_create_from_derived(&mmd, 1, orig, ob, 0, 0); - cur_lvl_orig_verts = CDDM_get_verts(subco_dm); + /* create subsurf DM from original mesh at high level */ + cddm = CDDM_from_mesh(me, NULL); + highdm = subsurf_dm_create_local(ob, cddm, totlvl, mmd->simple, 0); - /* Subtract the original vertex cos from the new vertex cos */ - verts_new = CDDM_get_verts(dm); - for(i = 0; i < dm->getNumVerts(dm); ++i) - sub_v3_v3v3(verts_new[i].co, verts_new[i].co, cur_lvl_orig_verts[i].co); + /* create multires DM from original mesh and displacements */ + lowdm = multires_dm_create_local(ob, cddm, lvl, totlvl, mmd->simple); + cddm->release(cddm); - final = multires_subdisp_pre(dm, totlvl - lvl, 0); + /* gather grid data */ + numGrids = highdm->getNumGrids(highdm); + highGridSize = highdm->getGridSize(highdm); + highGridData = highdm->getGridData(highdm); + lowGridSize = lowdm->getGridSize(lowdm); + lowGridData = lowdm->getGridData(lowdm); + gridData = dm->getGridData(dm); - multires_subdisp(orig, ob, final, lvl, totlvl, dm->getNumVerts(dm), dm->getNumEdges(dm), - dm->getNumFaces(dm), 1); + subGridData = MEM_callocN(sizeof(DMGridData*)*numGrids, "subGridData*"); + diffGrid = MEM_callocN(sizeof(DMGridData)*lowGridSize*lowGridSize, "diff"); - subco_dm->release(subco_dm); - orig->release(orig); + for(i = 0; i < numGrids; ++i) { + /* backup subsurf grids */ + subGridData[i] = MEM_callocN(sizeof(DMGridData)*highGridSize*highGridSize, "subGridData"); + memcpy(subGridData[i], highGridData[i], sizeof(DMGridData)*highGridSize*highGridSize); + + /* write difference of subsurf and displaced low level into high subsurf */ + for(j = 0; j < lowGridSize*lowGridSize; ++j) + sub_v3_v3v3(diffGrid[j].co, gridData[i][j].co, lowGridData[i][j].co); + + multires_copy_dm_grid(highGridData[i], diffGrid, highGridSize, lowGridSize); + } + + /* lower level dm no longer needed at this point */ + MEM_freeN(diffGrid); + lowdm->release(lowdm); + + /* subsurf higher levels again with difference of coordinates */ + ss= ((CCGDerivedMesh*)highdm)->ss; + ccgSubSurf_updateFromFaces(ss, lvl, NULL, 0); + ccgSubSurf_updateLevels(ss, lvl, NULL, 0); + + /* add to displacements */ + multiresModifier_disp_run(highdm, me, 1, 1, subGridData, mmd->totlvl); + + /* free */ + highdm->release(highdm); + for(i = 0; i < numGrids; ++i) + MEM_freeN(subGridData[i]); + MEM_freeN(subGridData); + } + else { + DerivedMesh *cddm, *subdm; + + cddm = CDDM_from_mesh(me, NULL); + subdm = subsurf_dm_create_local(ob, cddm, mmd->totlvl, mmd->simple, 0); + cddm->release(cddm); + + multiresModifier_disp_run(dm, me, 1, 0, subdm->getGridData(subdm), mmd->totlvl); + + subdm->release(subdm); } - else - multiresModifier_disp_run(dm, MultiresDM_get_subco(dm), 1); } } -void multires_mark_as_modified(struct Object *ob) +void multires_stitch_grids(Object *ob) { + /* utility for smooth brush */ if(ob && ob->derivedFinal) { - MultiresDM_mark_as_modified(ob->derivedFinal); + CCGDerivedMesh *ccgdm = (CCGDerivedMesh*)ob->derivedFinal; + CCGFace **faces; + int totface; + + if(ccgdm->pbvh) { + BLI_pbvh_get_grid_updates(ccgdm->pbvh, 0, (void***)&faces, &totface); + + if(totface) { + ccgSubSurf_stitchFaces(ccgdm->ss, 0, faces, totface); + MEM_freeN(faces); + } + } } } -void multires_force_update(Object *ob) -{ - if(ob && ob->derivedFinal) { - ob->derivedFinal->needsFree =1; - ob->derivedFinal->release(ob->derivedFinal); - ob->derivedFinal = NULL; - } -} - -struct DerivedMesh *multires_dm_create_from_derived(MultiresModifierData *mmd, int local_mmd, DerivedMesh *dm, Object *ob, +DerivedMesh *multires_dm_create_from_derived(MultiresModifierData *mmd, int local_mmd, DerivedMesh *dm, Object *ob, int useRenderParams, int isFinalCalc) { - SubsurfModifierData smd; - MultiresSubsurf ms; + Mesh *me= ob->data; DerivedMesh *result; - int i; + CCGDerivedMesh *ccgdm; + DMGridData **gridData, **subGridData; + int lvl= multires_get_level(ob, mmd, useRenderParams); + int i, gridSize, numGrids; - ms.mmd = mmd; - ms.ob = ob; - ms.local_mmd = local_mmd; + if(lvl == 0) + return dm; - memset(&smd, 0, sizeof(SubsurfModifierData)); - smd.levels = smd.renderLevels = mmd->lvl - 1; - smd.flags |= eSubsurfModifierFlag_SubsurfUv; + result = subsurf_dm_create_local(ob, dm, lvl, + mmd->simple, mmd->flags & eMultiresModifierFlag_ControlEdges); - result = subsurf_make_derived_from_derived_with_multires(dm, &smd, &ms, useRenderParams, NULL, isFinalCalc, 0); - for(i = 0; i < result->getNumVerts(result); ++i) - MultiresDM_get_subco(result)[i] = CDDM_get_verts(result)[i]; - multiresModifier_disp_run(result, MultiresDM_get_subco(result), 0); - MultiresDM_set_update(result, multiresModifier_update); + if(!local_mmd) { + ccgdm = (CCGDerivedMesh*)result; + + ccgdm->multires.ob = ob; + ccgdm->multires.mmd = mmd; + ccgdm->multires.local_mmd = local_mmd; + ccgdm->multires.lvl = lvl; + ccgdm->multires.totlvl = mmd->totlvl; + ccgdm->multires.modified = 0; + ccgdm->multires.update = multiresModifier_update; + } + + numGrids = result->getNumGrids(result); + gridSize = result->getGridSize(result); + gridData = result->getGridData(result); + + subGridData = MEM_callocN(sizeof(DMGridData*)*numGrids, "subGridData*"); + + for(i = 0; i < numGrids; i++) { + subGridData[i] = MEM_callocN(sizeof(DMGridData)*gridSize*gridSize, "subGridData"); + memcpy(subGridData[i], gridData[i], sizeof(DMGridData)*gridSize*gridSize); + } + + CustomData_external_read(&me->fdata, &me->id, CD_MASK_MDISPS, me->totface); + multiresModifier_disp_run(result, ob->data, 0, 0, subGridData, mmd->totlvl); + + for(i = 0; i < numGrids; i++) + MEM_freeN(subGridData[i]); + MEM_freeN(subGridData); return result; } @@ -1259,6 +706,106 @@ struct DerivedMesh *multires_dm_create_from_derived(MultiresModifierData *mmd, i /**** Old Multires code **** ***************************/ +/* Adapted from sculptmode.c */ +static void old_mdisps_bilinear(float out[3], float (*disps)[3], int st, float u, float v) +{ + int x, y, x2, y2; + const int st_max = st - 1; + float urat, vrat, uopp; + float d[4][3], d2[2][3]; + + if(u < 0) + u = 0; + else if(u >= st) + u = st_max; + if(v < 0) + v = 0; + else if(v >= st) + v = st_max; + + x = floor(u); + y = floor(v); + x2 = x + 1; + y2 = y + 1; + + if(x2 >= st) x2 = st_max; + if(y2 >= st) y2 = st_max; + + urat = u - x; + vrat = v - y; + uopp = 1 - urat; + + mul_v3_v3fl(d[0], disps[y * st + x], uopp); + mul_v3_v3fl(d[1], disps[y * st + x2], urat); + mul_v3_v3fl(d[2], disps[y2 * st + x], uopp); + mul_v3_v3fl(d[3], disps[y2 * st + x2], urat); + + add_v3_v3v3(d2[0], d[0], d[1]); + add_v3_v3v3(d2[1], d[2], d[3]); + mul_v3_fl(d2[0], 1 - vrat); + mul_v3_fl(d2[1], vrat); + + add_v3_v3v3(out, d2[0], d2[1]); +} + +static void old_mdisps_rotate(int S, int newside, int oldside, int x, int y, float *u, float *v) +{ + float offset = oldside*0.5f - 0.5f; + + if(S == 1) { *u= offset + x; *v = offset - y; } + if(S == 2) { *u= offset + y; *v = offset + x; } + if(S == 3) { *u= offset - x; *v = offset + y; } + if(S == 0) { *u= offset - y; *v = offset - x; } +} + +static void old_mdisps_convert(MFace *mface, MDisps *mdisp) +{ + int newlvl = log(sqrt(mdisp->totdisp)-1)/log(2); + int oldlvl = newlvl+1; + int oldside = multires_side_tot[oldlvl]; + int newside = multires_side_tot[newlvl]; + int nvert = (mface->v4)? 4: 3; + int newtotdisp = multires_grid_tot[newlvl]*nvert; + int x, y, S; + float (*disps)[3], (*out)[3], u, v; + + disps = MEM_callocN(sizeof(float) * 3 * newtotdisp, "multires disps"); + + out = disps; + for(S = 0; S < nvert; S++) { + for(y = 0; y < newside; ++y) { + for(x = 0; x < newside; ++x, ++out) { + old_mdisps_rotate(S, newside, oldside, x, y, &u, &v); + old_mdisps_bilinear(*out, mdisp->disps, oldside, u, v); + + if(S == 1) { (*out)[1]= -(*out)[1]; } + else if(S == 2) { SWAP(float, (*out)[0], (*out)[1]); } + else if(S == 3) { (*out)[0]= -(*out)[0]; } + else if(S == 0) { SWAP(float, (*out)[0], (*out)[1]); (*out)[0]= -(*out)[0]; (*out)[1]= -(*out)[1]; }; + } + } + } + + MEM_freeN(mdisp->disps); + + mdisp->totdisp= newtotdisp; + mdisp->disps= disps; +} + +void multires_load_old_250(Mesh *me) +{ + MDisps *mdisps; + int a; + + mdisps= CustomData_get_layer(&me->fdata, CD_MDISPS); + + if(mdisps) { + for(a=0; atotface; a++) + if(mdisps[a].totdisp) + old_mdisps_convert(&me->mface[a], &mdisps[a]); + } +} + /* Does not actually free lvl itself */ static void multires_free_level(MultiresLevel *lvl) { @@ -1419,15 +966,75 @@ static void multires_load_old_faces(ListBase **fmap, ListBase **emap, MultiresLe } } +static void multires_mvert_to_ss(DerivedMesh *dm, MVert *mvert) +{ + CCGDerivedMesh *ccgdm = (CCGDerivedMesh*) dm; + CCGSubSurf *ss = ccgdm->ss; + DMGridData *vd; + int index; + int totvert, totedge, totface; + int gridSize = ccgSubSurf_getGridSize(ss); + int edgeSize = ccgSubSurf_getEdgeSize(ss); + int i = 0; + + totface = ccgSubSurf_getNumFaces(ss); + for(index = 0; index < totface; index++) { + CCGFace *f = ccgdm->faceMap[index].face; + int x, y, S, numVerts = ccgSubSurf_getFaceNumVerts(f); + + vd= ccgSubSurf_getFaceCenterData(f); + copy_v3_v3(vd->co, mvert[i].co); + i++; + + for(S = 0; S < numVerts; S++) { + for(x = 1; x < gridSize - 1; x++, i++) { + vd= ccgSubSurf_getFaceGridEdgeData(ss, f, S, x); + copy_v3_v3(vd->co, mvert[i].co); + } + } + + for(S = 0; S < numVerts; S++) { + for(y = 1; y < gridSize - 1; y++) { + for(x = 1; x < gridSize - 1; x++, i++) { + vd= ccgSubSurf_getFaceGridData(ss, f, S, x, y); + copy_v3_v3(vd->co, mvert[i].co); + } + } + } + } + + totedge = ccgSubSurf_getNumEdges(ss); + for(index = 0; index < totedge; index++) { + CCGEdge *e = ccgdm->edgeMap[index].edge; + int x; + + for(x = 1; x < edgeSize - 1; x++, i++) { + vd= ccgSubSurf_getEdgeData(ss, e, x); + copy_v3_v3(vd->co, mvert[i].co); + } + } + + totvert = ccgSubSurf_getNumVerts(ss); + for(index = 0; index < totvert; index++) { + CCGVert *v = ccgdm->vertMap[index].vert; + + vd= ccgSubSurf_getVertData(ss, v); + copy_v3_v3(vd->co, mvert[i].co); + i++; + } + + ccgSubSurf_updateToFaces(ss, 0, NULL, 0); +} + /* Loads a multires object stored in the old Multires struct into the new format */ -void multires_load_old(DerivedMesh *dm, Multires *mr) +static void multires_load_old_dm(DerivedMesh *dm, Mesh *me, int totlvl) { MultiresLevel *lvl, *lvl1; + Multires *mr= me->mr; MVert *vsrc, *vdst; int src, dst; - int totlvl = MultiresDM_get_totlvl(dm); - int st = multires_side_tot[totlvl - 2] - 1; - int extedgelen = multires_side_tot[totlvl - 1] - 2; + int st = multires_side_tot[totlvl - 1] - 1; + int extedgelen = multires_side_tot[totlvl] - 2; int *vvmap; // inorder for dst, map to src int crossedgelen; int i, j, s, x, totvert, tottri, totquad; @@ -1435,7 +1042,7 @@ void multires_load_old(DerivedMesh *dm, Multires *mr) src = 0; dst = 0; vsrc = mr->verts; - vdst = CDDM_get_verts(dm); + vdst = dm->getVertArray(dm); totvert = dm->getNumVerts(dm); vvmap = MEM_callocN(sizeof(int) * totvert, "multires vvmap"); @@ -1454,9 +1061,9 @@ void multires_load_old(DerivedMesh *dm, Multires *mr) lvl = lvl1->next; for(j = 2; j <= mr->level_count; ++j) { - int base = multires_side_tot[totlvl - j] - 2; - int skip = multires_side_tot[totlvl - j + 1] - 1; - int st = multires_side_tot[j - 2] - 1; + int base = multires_side_tot[totlvl - j + 1] - 2; + int skip = multires_side_tot[totlvl - j + 2] - 1; + int st = multires_side_tot[j - 1] - 1; for(x = 0; x < st; ++x) vvmap[ldst + base + x * skip] = lsrc + st * i + x; @@ -1483,7 +1090,7 @@ void multires_load_old(DerivedMesh *dm, Multires *mr) /* Face edge cross */ tottri = totquad = 0; - crossedgelen = multires_side_tot[totlvl - 2] - 2; + crossedgelen = multires_side_tot[totlvl - 1] - 2; dst = 0; for(i = 0; i < lvl1->totface; ++i) { int sides = lvl1->faces[i].v[3] ? 4 : 3; @@ -1492,8 +1099,8 @@ void multires_load_old(DerivedMesh *dm, Multires *mr) ++dst; for(j = 3; j <= mr->level_count; ++j) { - int base = multires_side_tot[totlvl - j] - 2; - int skip = multires_side_tot[totlvl - j + 1] - 1; + int base = multires_side_tot[totlvl - j + 1] - 2; + int skip = multires_side_tot[totlvl - j + 2] - 1; int st = pow(2, j - 2); int st2 = pow(2, j - 3); int lsrc = lvl->prev->totvert; @@ -1541,8 +1148,8 @@ void multires_load_old(DerivedMesh *dm, Multires *mr) int ldst = dst + 1 + sides * (st - 1); for(s = 0; s < sides; ++s) { - int st2 = multires_side_tot[totlvl - 2] - 2; - int st3 = multires_side_tot[totlvl - 3] - 2; + int st2 = multires_side_tot[totlvl - 1] - 2; + int st3 = multires_side_tot[totlvl - 2] - 2; int st4 = st3 == 0 ? 1 : (st3 + 1) / 2; int mid = ldst + st2 * st3 + st3; int cv = lvl1->faces[j].v[s]; @@ -1582,4 +1189,64 @@ void multires_load_old(DerivedMesh *dm, Multires *mr) copy_v3_v3(vdst[i].co, vsrc[vvmap[i]].co); MEM_freeN(vvmap); + + multires_mvert_to_ss(dm, vdst); } + + +void multires_load_old(Object *ob, Mesh *me) +{ + MultiresLevel *lvl; + ModifierData *md; + MultiresModifierData *mmd; + DerivedMesh *dm, *orig; + int i; + + /* Load original level into the mesh */ + lvl = me->mr->levels.first; + CustomData_free_layers(&me->vdata, CD_MVERT, lvl->totvert); + CustomData_free_layers(&me->edata, CD_MEDGE, lvl->totedge); + CustomData_free_layers(&me->fdata, CD_MFACE, lvl->totface); + me->totvert = lvl->totvert; + me->totedge = lvl->totedge; + me->totface = lvl->totface; + me->mvert = CustomData_add_layer(&me->vdata, CD_MVERT, CD_CALLOC, NULL, me->totvert); + me->medge = CustomData_add_layer(&me->edata, CD_MEDGE, CD_CALLOC, NULL, me->totedge); + me->mface = CustomData_add_layer(&me->fdata, CD_MFACE, CD_CALLOC, NULL, me->totface); + memcpy(me->mvert, me->mr->verts, sizeof(MVert) * me->totvert); + for(i = 0; i < me->totedge; ++i) { + me->medge[i].v1 = lvl->edges[i].v[0]; + me->medge[i].v2 = lvl->edges[i].v[1]; + } + for(i = 0; i < me->totface; ++i) { + me->mface[i].v1 = lvl->faces[i].v[0]; + me->mface[i].v2 = lvl->faces[i].v[1]; + me->mface[i].v3 = lvl->faces[i].v[2]; + me->mface[i].v4 = lvl->faces[i].v[3]; + } + + /* Add a multires modifier to the object */ + md = ob->modifiers.first; + while(md && modifierType_getInfo(md->type)->type == eModifierTypeType_OnlyDeform) + md = md->next; + mmd = (MultiresModifierData*)modifier_new(eModifierType_Multires); + BLI_insertlinkbefore(&ob->modifiers, md, mmd); + + for(i = 0; i < me->mr->level_count - 1; ++i) + multiresModifier_subdivide(mmd, ob, 1, 0); + + mmd->lvl = mmd->totlvl; + orig = CDDM_from_mesh(me, NULL); + dm = multires_dm_create_from_derived(mmd, 0, orig, ob, 0, 0); + + multires_load_old_dm(dm, me, mmd->totlvl+1); + + multires_dm_mark_as_modified(dm); + dm->release(dm); + orig->release(orig); + + /* Remove the old multires */ + multires_free(me->mr); + me->mr= NULL; +} + diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index a27c3b6494b..84ef4fb6d1c 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -767,6 +767,17 @@ void nodeGroupSocketUseFlags(bNodeTree *ngroup) } } +/* finds a node based on its name */ +bNode *nodeFindNodebyName(bNodeTree *ntree, const char *name) +{ + bNode *node=NULL; + + for(node= ntree->nodes.first; node; node= node->next) { + if (strcmp(name, node->name) == 0) + break; + } + return node; +} /* finds a node based on given socket */ int nodeFindNode(bNodeTree *ntree, bNodeSocket *sock, bNode **nodep, int *sockindex) diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 41255415b67..676ab081533 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -228,14 +228,6 @@ void free_sculptsession(SculptSession **ssp) { if(ssp && *ssp) { SculptSession *ss = *ssp; - if(ss->projverts) - MEM_freeN(ss->projverts); - - if(ss->fmap) - MEM_freeN(ss->fmap); - - if(ss->fmap_mem) - MEM_freeN(ss->fmap_mem); if(ss->texcache) MEM_freeN(ss->texcache); @@ -243,8 +235,8 @@ void free_sculptsession(SculptSession **ssp) if(ss->layer_disps) MEM_freeN(ss->layer_disps); - if(ss->mesh_co_orig) - MEM_freeN(ss->mesh_co_orig); + if(ss->layer_co) + MEM_freeN(ss->layer_co); MEM_freeN(ss); @@ -562,6 +554,17 @@ void unlink_object(Scene *scene, Object *ob) if(sce->id.lib==NULL) { if(sce->camera==ob) sce->camera= NULL; if(sce->toolsettings->skgen_template==ob) sce->toolsettings->skgen_template = NULL; + +#ifdef DURIAN_CAMERA_SWITCH + { + TimeMarker *m; + + for (m= sce->markers.first; m; m= m->next) { + if(m->camera==ob) + m->camera= NULL; + } + } +#endif } sce= sce->id.next; } @@ -741,12 +744,12 @@ float dof_camera(Object *ob) if (cam->dof_ob) { /* too simple, better to return the distance on the view axis only * return len_v3v3(ob->obmat[3], cam->dof_ob->obmat[3]); */ - float mat[4][4], obmat[4][4]; + float mat[4][4], imat[4][4], obmat[4][4]; copy_m4_m4(obmat, ob->obmat); normalize_m4(obmat); - invert_m4_m4(ob->imat, obmat); - mul_m4_m4m4(mat, cam->dof_ob->obmat, ob->imat); + invert_m4_m4(imat, obmat); + mul_m4_m4m4(mat, cam->dof_ob->obmat, imat); return (float)fabs(mat[3][2]); } return cam->YF_dofdist; @@ -982,7 +985,7 @@ Object *add_only_object(int type, char *name) unit_m4(ob->constinv); unit_m4(ob->parentinv); unit_m4(ob->obmat); - ob->dt= OB_SHADED; + ob->dt= OB_TEXTURE; ob->empty_drawtype= OB_ARROWS; ob->empty_drawsize= 1.0; @@ -1615,6 +1618,32 @@ void object_rot_to_mat3(Object *ob, float mat[][3]) mul_m3_m3m3(mat, dmat, rmat); } +void object_mat3_to_rot(Object *ob, float mat[][3], int use_compat) +{ + if (ob->rotmode == ROT_MODE_QUAT) + mat3_to_quat(ob->quat, mat); + else if (ob->rotmode == ROT_MODE_AXISANGLE) + mat3_to_axis_angle(ob->rotAxis, &ob->rotAngle, mat); + else { + if(use_compat) { + float eul[3]; + VECCOPY(eul, ob->rot); + mat3_to_compatible_eulO(ob->rot, eul, ob->rotmode, mat); + } + else + mat3_to_eulO(ob->rot, ob->rotmode, mat); + } +} + +void object_apply_mat4(Object *ob, float mat[][4]) +{ + float mat3[3][3]; + VECCOPY(ob->loc, mat[3]); + mat4_to_size(ob->size, mat); + copy_m3_m4(mat3, mat); + object_mat3_to_rot(ob, mat3, 0); +} + void object_to_mat3(Object *ob, float mat[][3]) /* no parent */ { float smat[3][3]; @@ -1672,10 +1701,10 @@ static void ob_parcurve(Scene *scene, Object *ob, Object *par, float mat[][4]) /* ctime is now a proper var setting of Curve which gets set by Animato like any other var that's animated, * but this will only work if it actually is animated... * - * we firstly calculate the modulus of cu->ctime/cu->pathlen to clamp ctime within the 0.0 to 1.0 times pathlen - * range, then divide this (the modulus) by pathlen to get a value between 0.0 and 1.0 + * we divide the curvetime calculated in the previous step by the length of the path, to get a time + * factor, which then gets clamped to lie within 0.0 - 1.0 range */ - ctime= fmod(cu->ctime, cu->pathlen) / cu->pathlen; + ctime= cu->ctime / cu->pathlen; CLAMP(ctime, 0.0, 1.0); } else { @@ -1777,13 +1806,15 @@ static void give_parvert(Object *par, int nr, float *vec) DerivedMesh *dm = par->derivedFinal; if(dm) { - int i, count = 0, numVerts = dm->getNumVerts(dm); + int i, count = 0, vindex, numVerts = dm->getNumVerts(dm); int *index = (int *)dm->getVertDataArray(dm, CD_ORIGINDEX); float co[3]; /* get the average of all verts with (original index == nr) */ - for(i = 0; i < numVerts; ++i, ++index) { - if(*index == nr) { + for(i = 0; i < numVerts; ++i) { + vindex= (index)? *index: i; + + if(vindex == nr) { dm->getVertCo(dm, i, co); add_v3_v3v3(vec, vec, co); count++; diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c index 27fcfa8b9cb..4fe63a966be 100644 --- a/source/blender/blenkernel/intern/paint.c +++ b/source/blender/blenkernel/intern/paint.c @@ -175,6 +175,8 @@ void paint_init(Paint *p, const char col[3]) memcpy(p->paint_cursor_col, col, 3); p->paint_cursor_col[3] = 128; + + p->flags |= PAINT_SHOW_BRUSH; } void free_paint(Paint *paint) diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c index bb2f4128891..1968673e568 100644 --- a/source/blender/blenkernel/intern/particle.c +++ b/source/blender/blenkernel/intern/particle.c @@ -790,7 +790,7 @@ int psys_render_simplify_distribution(ParticleThreadContext *ctx, int tot) totface= dm->getNumFaces(dm); totorigface= me->totface; - if(totface == 0 || totorigface == 0 || origindex == NULL) + if(totface == 0 || totorigface == 0) return tot; facearea= MEM_callocN(sizeof(float)*totorigface, "SimplifyFaceArea"); @@ -807,14 +807,14 @@ int psys_render_simplify_distribution(ParticleThreadContext *ctx, int tot) /* compute number of children per original face */ for(a=0; aindex[a]]; + b= (origindex)? origindex[ctx->index[a]]: ctx->index[a]; if(b != -1) elems[b].totchild++; } /* compute areas and centers of original faces */ for(mf=mface, a=0; av1].co); @@ -910,7 +910,7 @@ int psys_render_simplify_distribution(ParticleThreadContext *ctx, int tot) skipped= 0; for(a=0, newtot=0; aindex[a]]; + b= (origindex)? origindex[ctx->index[a]]: ctx->index[a]; if(b != -1) { if(elems[b].curchild++ < ceil(elems[b].lambda*elems[b].totchild)) { ctx->index[newtot]= ctx->index[a]; @@ -943,7 +943,7 @@ int psys_render_simplify_params(ParticleSystem *psys, ChildParticle *cpa, float if(!data->dosimplify) return 0; - b= data->origindex[cpa->num]; + b= (data->origindex)? data->origindex[cpa->num]: cpa->num; if(b == -1) return 0; @@ -2332,6 +2332,7 @@ static int psys_threads_init_path(ParticleThread *threads, Scene *scene, float c ctx->totparent= totparent; ctx->parent_pass= 0; ctx->cfra= cfra; + ctx->editupdate= editupdate; psys->lattice = psys_get_lattice(&ctx->sim); @@ -2615,6 +2616,9 @@ static void psys_thread_create_path(ParticleThread *thread, struct ChildParticle get_strand_normal(ctx->ma, ornor, cur_length, (state-1)->vel); } + if(k == ctx->steps) + VECSUB(state->vel,state->co,(state-1)->co); + /* check if path needs to be cut before actual end of data points */ if(k){ VECSUB(dvec,state->co,(state-1)->co); diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c index dbe6fbd6dde..ce595bb280d 100644 --- a/source/blender/blenkernel/intern/particle_system.c +++ b/source/blender/blenkernel/intern/particle_system.c @@ -287,12 +287,12 @@ void psys_calc_dmcache(Object *ob, DerivedMesh *dm, ParticleSystem *psys) if(psys->part->from == PART_FROM_VERT) { totdmelem= dm->getNumVerts(dm); totelem= me->totvert; - origindex= DM_get_vert_data_layer(dm, CD_ORIGINDEX); + origindex= dm->getVertDataArray(dm, CD_ORIGINDEX); } else { /* FROM_FACE/FROM_VOLUME */ totdmelem= dm->getNumFaces(dm); totelem= me->totface; - origindex= DM_get_face_data_layer(dm, CD_ORIGINDEX); + origindex= dm->getFaceDataArray(dm, CD_ORIGINDEX); } nodedmelem= MEM_callocN(sizeof(LinkNode)*totdmelem, "psys node elems"); @@ -948,7 +948,8 @@ static int psys_threads_init_distribution(ParticleThread *threads, Scene *scene, if(totpart==0) return 0; - if (!finaldm->deformedOnly && !CustomData_has_layer( &finaldm->faceData, CD_ORIGINDEX ) ) { + if (!finaldm->deformedOnly && !finaldm->getFaceDataArray(finaldm, CD_ORIGINDEX)) { + printf("Can't create particles with the current modifier stack, disable destructive modifiers\n"); // XXX error("Can't paint with the current modifier stack, disable destructive modifiers"); return 0; } @@ -2925,6 +2926,8 @@ static void psys_update_path_cache(ParticleSimulationData *sim, float cfra) psys_find_parents(sim); } } + else + psys_free_children(psys); } if((part->type==PART_HAIR || psys->flag&PSYS_KEYED || psys->pointcache->flag & PTCACHE_BAKED)==0) diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index 53841426728..956de02b15b 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -29,6 +29,7 @@ * ***** END GPL LICENSE BLOCK ***** */ +#include #include #include @@ -77,8 +78,9 @@ #include "BKE_node.h" #include "BKE_object.h" #include "BKE_paint.h" +#include "BKE_pointcache.h" #include "BKE_scene.h" -#include "BKE_sequence.h" +#include "BKE_sequencer.h" #include "BKE_world.h" #include "BKE_utildefines.h" @@ -355,7 +357,7 @@ Scene *add_scene(char *name) sce->r.bake_normal_space= R_BAKE_SPACE_TANGENT; sce->r.scemode= R_DOCOMP|R_DOSEQ|R_EXTENSION; - sce->r.stamp= R_STAMP_TIME|R_STAMP_FRAME|R_STAMP_DATE|R_STAMP_SCENE|R_STAMP_CAMERA; + sce->r.stamp= R_STAMP_TIME|R_STAMP_FRAME|R_STAMP_DATE|R_STAMP_SCENE|R_STAMP_CAMERA|R_STAMP_RENDERTIME; sce->r.threads= 1; @@ -703,6 +705,47 @@ Object *scene_find_camera(Scene *sc) return NULL; } +#ifdef DURIAN_CAMERA_SWITCH +Object *scene_find_camera_switch(Scene *scene) +{ + TimeMarker *m; + int cfra = scene->r.cfra; + int frame = -(MAXFRAME + 1); + Object *camera= NULL; + + for (m= scene->markers.first; m; m= m->next) { + if(m->camera && (m->frame <= cfra) && (m->frame > frame)) { + camera= m->camera; + frame= m->frame; + + if(frame == cfra) + break; + + } + } + return camera; +} +#endif + +static char *get_cfra_marker_name(Scene *scene) +{ + ListBase *markers= &scene->markers; + TimeMarker *m1, *m2; + + /* search through markers for match */ + for (m1=markers->first, m2=markers->last; m1 && m2; m1=m1->next, m2=m2->prev) { + if (m1->frame==CFRA) + return m1->name; + + if (m1 == m2) + break; + + if (m2->frame==CFRA) + return m2->name; + } + + return NULL; +} Base *scene_add_base(Scene *sce, Object *ob) { @@ -779,7 +822,7 @@ float frame_to_float (Scene *scene, int cfra) /* see also bsystem_time in objec return ctime; } -static void scene_update(Scene *sce, unsigned int lay) +static void scene_update_newframe(Scene *sce, unsigned int lay) { Base *base; Object *ob; @@ -811,6 +854,40 @@ static void scene_update(Scene *sce, unsigned int lay) } } +/* this is called in main loop, doing tagged updates before redraw */ +void scene_update_tagged(Scene *scene) +{ + Scene *sce; + Base *base; + float ctime = frame_to_float(scene, scene->r.cfra); + + /* update all objects: drivers, matrices, displists, etc. flags set + by depgraph or manual, no layer check here, gets correct flushed */ + + /* sets first, we allow per definition current scene to have + dependencies on sets, but not the other way around. */ + if(scene->set) { + for(SETLOOPER(scene->set, base)) + object_handle_update(scene, base->object); + } + + for(base= scene->base.first; base; base= base->next) { + object_handle_update(scene, base->object); + } + + /* recalc scene animation data here (for sequencer) */ + { + AnimData *adt= BKE_animdata_from_id(&scene->id); + + if(adt && (adt->recalc & ADT_RECALC_ANIM)) + BKE_animsys_evaluate_animdata(&scene->id, adt, ctime, 0); + } + + BKE_ptcache_quick_cache_all(scene); + + /* in the future this should handle updates for all datablocks, not + only objects and scenes. - brecht */ +} /* applies changes right away, does all sets too */ void scene_update_for_newframe(Scene *sce, unsigned int lay) @@ -822,19 +899,20 @@ void scene_update_for_newframe(Scene *sce, unsigned int lay) /* sets first, we allow per definition current scene to have dependencies on sets */ for(sce= sce->set; sce; sce= sce->set) - scene_update(sce, lay); + scene_update_newframe(sce, lay); - scene_update(scene, lay); + scene_update_newframe(scene, lay); } /* return default layer, also used to patch old files */ void scene_add_render_layer(Scene *sce) { SceneRenderLayer *srl; - int tot= 1 + BLI_countlist(&sce->r.layers); +// int tot= 1 + BLI_countlist(&sce->r.layers); srl= MEM_callocN(sizeof(SceneRenderLayer), "new render layer"); - sprintf(srl->name, "%d RenderLayer", tot); + sprintf(srl->name, "RenderLayer"); + BLI_uniquename(&sce->r.layers, srl, "RenderLayer", '.', offsetof(SceneRenderLayer, name), 32); BLI_addtail(&sce->r.layers, srl); /* note, this is also in render, pipeline.c, to make layer when scenedata doesnt have it */ diff --git a/source/blender/blenkernel/intern/seqeffects.c b/source/blender/blenkernel/intern/seqeffects.c index a1f81bf6166..2c532bfed1c 100644 --- a/source/blender/blenkernel/intern/seqeffects.c +++ b/source/blender/blenkernel/intern/seqeffects.c @@ -44,7 +44,7 @@ #include "BKE_global.h" #include "BKE_fcurve.h" #include "BKE_plugin_types.h" -#include "BKE_sequence.h" +#include "BKE_sequencer.h" #include "BKE_texture.h" #include "BKE_utildefines.h" @@ -231,7 +231,7 @@ static ImBuf * IMB_cast_away_list(ImBuf * i) return (ImBuf*) (((void**) i) + 2); } -static void do_plugin_effect(Sequence * seq,int cfra, +static void do_plugin_effect(Scene *scene, Sequence *seq, int cfra, float facf0, float facf1, int x, int y, struct ImBuf *ibuf1, struct ImBuf *ibuf2, struct ImBuf *ibuf3, struct ImBuf *out) @@ -477,7 +477,7 @@ static void do_alphaover_effect_float(float facf0, float facf1, int x, int y, } } -static void do_alphaover_effect(Sequence * seq,int cfra, +static void do_alphaover_effect(Scene *scene, Sequence *seq, int cfra, float facf0, float facf1, int x, int y, struct ImBuf *ibuf1, struct ImBuf *ibuf2, struct ImBuf *ibuf3, struct ImBuf *out) @@ -644,7 +644,7 @@ static void do_alphaunder_effect_float(float facf0, float facf1, int x, int y, } } -static void do_alphaunder_effect(Sequence * seq,int cfra, +static void do_alphaunder_effect(Scene *scene, Sequence *seq, int cfra, float facf0, float facf1, int x, int y, struct ImBuf *ibuf1, struct ImBuf *ibuf2, struct ImBuf *ibuf3, struct ImBuf *out) @@ -764,7 +764,7 @@ void do_cross_effect_float(float facf0, float facf1, int x, int y, /* carefull: also used by speed effect! */ -static void do_cross_effect(Sequence * seq,int cfra, +static void do_cross_effect(Scene *scene, Sequence *seq, int cfra, float facf0, float facf1, int x, int y, struct ImBuf *ibuf1, struct ImBuf *ibuf2, struct ImBuf *ibuf3, struct ImBuf *out) @@ -1026,7 +1026,7 @@ static void do_gammacross_effect_float(float facf0, float facf1, } } -static void do_gammacross_effect(Sequence * seq,int cfra, +static void do_gammacross_effect(Scene *scene, Sequence *seq, int cfra, float facf0, float facf1, int x, int y, struct ImBuf *ibuf1, struct ImBuf *ibuf2, struct ImBuf *ibuf3, struct ImBuf *out) @@ -1140,7 +1140,7 @@ static void do_add_effect_float(float facf0, float facf1, int x, int y, } } -static void do_add_effect(Sequence * seq,int cfra, +static void do_add_effect(Scene *scene, Sequence *seq, int cfra, float facf0, float facf1, int x, int y, struct ImBuf *ibuf1, struct ImBuf *ibuf2, struct ImBuf *ibuf3, struct ImBuf *out) @@ -1252,7 +1252,7 @@ static void do_sub_effect_float(float facf0, float facf1, int x, int y, } } -static void do_sub_effect(Sequence * seq,int cfra, +static void do_sub_effect(Scene *scene, Sequence *seq, int cfra, float facf0, float facf1, int x, int y, struct ImBuf *ibuf1, struct ImBuf *ibuf2, struct ImBuf *ibuf3, struct ImBuf *out) @@ -1360,7 +1360,7 @@ static void do_drop_effect_float(float facf0, float facf1, int x, int y, } -static void do_drop_effect(Sequence * seq,int cfra, +static void do_drop_effect(Scene *scene, Sequence *seq, int cfra, float facf0, float facf1, int x, int y, struct ImBuf *ibuf1, struct ImBuf *ibuf2, struct ImBuf * ibuf3, @@ -1481,7 +1481,7 @@ static void do_mul_effect_float(float facf0, float facf1, int x, int y, } } -static void do_mul_effect(Sequence * seq,int cfra, +static void do_mul_effect(Scene *scene, Sequence *seq, int cfra, float facf0, float facf1, int x, int y, struct ImBuf *ibuf1, struct ImBuf *ibuf2, struct ImBuf *ibuf3, struct ImBuf *out) @@ -1931,7 +1931,7 @@ static void do_wipe_effect_float(Sequence *seq, float facf0, float facf1, } } -static void do_wipe_effect(Sequence * seq,int cfra, +static void do_wipe_effect(Scene *scene, Sequence *seq, int cfra, float facf0, float facf1, int x, int y, struct ImBuf *ibuf1, struct ImBuf *ibuf2, struct ImBuf *ibuf3, struct ImBuf *out) @@ -1953,27 +1953,29 @@ static void do_wipe_effect(Sequence * seq,int cfra, ********************************************************************** */ static void init_transform_effect(Sequence *seq) { - TransformVars *scale; + TransformVars *transform; if(seq->effectdata)MEM_freeN(seq->effectdata); seq->effectdata = MEM_callocN(sizeof(struct TransformVars), "transformvars"); - scale = (TransformVars *)seq->effectdata; - scale->ScalexIni = 1; - scale->ScaleyIni = 1; - scale->ScalexFin = 1; - scale->ScaleyFin = 1; + transform = (TransformVars *)seq->effectdata; + + transform->ScalexIni = 1.0f; + transform->ScaleyIni = 1.0f; + transform->ScalexFin = 1.0f; + transform->ScalexFin = 1.0f; + + transform->xIni=0.0f; + transform->xFin=0.0f; + transform->yIni=0.0f; + transform->yFin=0.0f; + + transform->rotIni=0.0f; + transform->rotFin=0.0f; - scale->xIni=0; - scale->xFin=0; - scale->yIni=0; - scale->yFin=0; - - scale->rotIni=0; - scale->rotFin=0; - - scale->interpolation=1; - scale->percent=1; + transform->interpolation=1; + transform->percent=1; + transform->uniform_scale=0; } static int num_inputs_transform() @@ -1992,82 +1994,94 @@ static void copy_transform_effect(Sequence *dst, Sequence *src) dst->effectdata = MEM_dupallocN(src->effectdata); } -static void do_transform(Sequence * seq,float facf0, int x, int y, - struct ImBuf *ibuf1,struct ImBuf *out) +static void transform_image(int x, int y, struct ImBuf *ibuf1, struct ImBuf *out, + float scale_x, float scale_y, float translate_x, float translate_y, + float rotate, int interpolation) { int xo, yo, xi, yi; - float xs,ys,factxScale,factyScale,tx,ty,rad,s,c,xaux,yaux,factRot,px,py; - TransformVars *scale; - - // XXX struct RenderData *rd = NULL; // 2.5 global: &G.scene->r; + float xt, yt, xr, yr; + float s,c; - - scale = (TransformVars *)seq->effectdata; xo = x; yo = y; - - //factor scale - factxScale = scale->ScalexIni + (scale->ScalexFin - scale->ScalexIni) * facf0; - factyScale = scale->ScaleyIni + (scale->ScaleyFin - scale->ScaleyIni) * facf0; - - //Factor translate - if(!scale->percent){ - float rd_s = 0.0f; // XXX 2.5 global: (rd->size / 100.0f); - - tx = scale->xIni * rd_s+(xo / 2.0f) + (scale->xFin * rd_s -(xo / 2.0f) - scale->xIni * rd_s +(xo / 2.0f)) * facf0; - ty = scale->yIni * rd_s+(yo / 2.0f) + (scale->yFin * rd_s -(yo / 2.0f) - scale->yIni * rd_s +(yo / 2.0f)) * facf0; - }else{ - tx = xo*(scale->xIni/100.0f)+(xo / 2.0f) + (xo*(scale->xFin/100.0f)-(xo / 2.0f) - xo*(scale->xIni/100.0f)+(xo / 2.0f)) * facf0; - ty = yo*(scale->yIni/100.0f)+(yo / 2.0f) + (yo*(scale->yFin/100.0f)-(yo / 2.0f) - yo*(scale->yIni/100.0f)+(yo / 2.0f)) * facf0; - } - - //factor Rotate - factRot = scale->rotIni + (scale->rotFin - scale->rotIni) * facf0; - rad = (M_PI * factRot) / 180.0f; - s= sin(rad); - c= cos(rad); - + + // Rotate + s= sin(rotate); + c= cos(rotate); for (yi = 0; yi < yo; yi++) { for (xi = 0; xi < xo; xi++) { - //tranlate point - px = xi-tx; - py = yi-ty; + + //translate point + xt = xi-translate_x; + yt = yi-translate_y; //rotate point with center ref - xaux = c*px + py*s ; - yaux = -s*px + c*py; + xr = c*xt + s*yt; + yr = -s*xt + c*yt; //scale point with center ref - xs = xaux / factxScale; - ys = yaux / factyScale; + xt = xr / scale_x; + yt = yr / scale_y; //undo reference center point - xs += (xo / 2.0f); - ys += (yo / 2.0f); + xt += (xo / 2.0f); + yt += (yo / 2.0f); //interpolate - switch(scale->interpolation) { + switch(interpolation) { case 0: - neareast_interpolation(ibuf1,out, xs,ys,xi,yi); + neareast_interpolation(ibuf1,out, xt,yt,xi,yi); break; case 1: - bilinear_interpolation(ibuf1,out, xs,ys,xi,yi); + bilinear_interpolation(ibuf1,out, xt,yt,xi,yi); break; case 2: - bicubic_interpolation(ibuf1,out, xs,ys,xi,yi); + bicubic_interpolation(ibuf1,out, xt,yt,xi,yi); break; } } - } - + } } -static void do_transform_effect(Sequence * seq,int cfra, + +static void do_transform(Scene *scene, Sequence *seq, float facf0, int x, int y, + struct ImBuf *ibuf1,struct ImBuf *out) +{ + TransformVars *transform = (TransformVars *)seq->effectdata; + float scale_x, scale_y, translate_x, translate_y, rotate_radians; + + // Scale + if (transform->uniform_scale) { + scale_x = scale_y = transform->ScalexIni; + } else { + scale_x = transform->ScalexIni; + scale_y = transform->ScaleyIni; + } + + // Translate + if(!transform->percent){ + float rd_s = (scene->r.size/100.0f); + + translate_x = transform->xIni*rd_s+(x/2.0f); + translate_y = transform->yIni*rd_s+(y/2.0f); + }else{ + translate_x = x*(transform->xIni/100.0f)+(x/2.0f); + translate_y = y*(transform->yIni/100.0f)+(y/2.0f); + } + + // Rotate + rotate_radians = (M_PI*transform->rotIni)/180.0f; + + transform_image(x,y, ibuf1, out, scale_x, scale_y, translate_x, translate_y, rotate_radians, transform->interpolation); +} + + +static void do_transform_effect(Scene *scene, Sequence *seq,int cfra, float facf0, float facf1, int x, int y, struct ImBuf *ibuf1, struct ImBuf *ibuf2, struct ImBuf *ibuf3, struct ImBuf *out) { - do_transform(seq, facf0, x, y, ibuf1, out); + do_transform(scene, seq, facf0, x, y, ibuf1, out); } @@ -2574,7 +2588,7 @@ static void do_glow_effect_float(Sequence *seq, float facf0, float facf1, RVAddBitmaps_float (inbuf , outbuf, outbuf, x, y); } -static void do_glow_effect(Sequence * seq,int cfra, +static void do_glow_effect(Scene *scene, Sequence *seq, int cfra, float facf0, float facf1, int x, int y, struct ImBuf *ibuf1, struct ImBuf *ibuf2, struct ImBuf *ibuf3, struct ImBuf *out) @@ -2629,7 +2643,7 @@ static int early_out_color(struct Sequence *seq, return -1; } -static void do_solid_color(Sequence * seq,int cfra, +static void do_solid_color(Scene *scene, Sequence *seq, int cfra, float facf0, float facf1, int x, int y, struct ImBuf *ibuf1, struct ImBuf *ibuf2, struct ImBuf *ibuf3, struct ImBuf *out) @@ -2992,16 +3006,16 @@ static void get_default_fac_fade(struct Sequence *seq, int cfra, *facf1 /= seq->len; } -static void do_overdrop_effect(struct Sequence * seq, int cfra, +static void do_overdrop_effect(Scene *scene, Sequence *seq, int cfra, float fac, float facf, int x, int y, struct ImBuf * ibuf1, struct ImBuf * ibuf2, struct ImBuf * ibuf3, struct ImBuf * out) { - do_drop_effect(seq, cfra, fac, facf, x, y, + do_drop_effect(scene, seq, cfra, fac, facf, x, y, ibuf1, ibuf2, ibuf3, out); - do_alphaover_effect(seq, cfra, fac, facf, x, y, + do_alphaover_effect(scene, seq, cfra, fac, facf, x, y, ibuf1, ibuf2, ibuf3, out); } diff --git a/source/blender/blenkernel/intern/sequence.c b/source/blender/blenkernel/intern/sequencer.c similarity index 92% rename from source/blender/blenkernel/intern/sequence.c rename to source/blender/blenkernel/intern/sequencer.c index 39b911d1c37..aa81cea79f5 100644 --- a/source/blender/blenkernel/intern/sequence.c +++ b/source/blender/blenkernel/intern/sequencer.c @@ -43,20 +43,23 @@ #include "BKE_global.h" #include "BKE_image.h" #include "BKE_main.h" -#include "BKE_sequence.h" +#include "BKE_sequencer.h" #include "BKE_fcurve.h" #include "BKE_utildefines.h" #include "RNA_access.h" #include "RE_pipeline.h" -#include "BLI_blenlib.h" -#include "BLI_util.h" +#include "BLI_fileops.h" +#include "BLI_listbase.h" +#include "BLI_path_util.h" +#include "BLI_string.h" +#include "BLI_threads.h" +#include #include "IMB_imbuf.h" #include "IMB_imbuf_types.h" -#include "BLI_threads.h" -#include + #include "BKE_context.h" #include "BKE_sound.h" @@ -73,7 +76,9 @@ static int seqrecty= 0; //static int blender_test_break() {return 0;} /* **** XXX ******** */ - +#define SELECT 1 +ListBase seqbase_clipboard; +int seqbase_clipboard_frame; void printf_strip(Sequence *seq) { @@ -82,6 +87,20 @@ void printf_strip(Sequence *seq) fprintf(stderr, "\tseq_tx_set_final_left: %d %d\n\n", seq_tx_get_final_left(seq, 0), seq_tx_get_final_right(seq, 0)); } +void seqbase_recursive_apply(ListBase *seqbase, int (*apply_func)(Sequence *seq, void *), void *arg) +{ + Sequence *iseq; + for(iseq= seqbase->first; iseq; iseq= iseq->next) { + seq_recursive_apply(iseq, apply_func, arg); + } +} + +void seq_recursive_apply(Sequence *seq, int (*apply_func)(Sequence *, void *), void *arg) +{ + if(apply_func(seq, arg) && seq->seqbase.first) + seqbase_recursive_apply(&seq->seqbase, apply_func, arg); +} + /* ********************************************************************** alloc / free functions ********************************************************************** */ @@ -197,23 +216,26 @@ void seq_free_strip(Strip *strip) void seq_free_sequence(Scene *scene, Sequence *seq) { - Editing *ed = scene->ed; - if(seq->strip) seq_free_strip(seq->strip); if(seq->anim) IMB_free_anim(seq->anim); - if(seq->sound_handle) - sound_delete_handle(scene, seq->sound_handle); - if (seq->type & SEQ_EFFECT) { struct SeqEffectHandle sh = get_sequence_effect(seq); sh.free(seq); } - if (ed->act_seq==seq) - ed->act_seq= NULL; + /* clipboard has no scene and will never have a sound handle or be active */ + if(scene) { + Editing *ed = scene->ed; + + if (ed->act_seq==seq) + ed->act_seq= NULL; + + if(seq->sound_handle) + sound_delete_handle(scene, seq->sound_handle); + } MEM_freeN(seq); } @@ -229,6 +251,17 @@ Editing *seq_give_editing(Scene *scene, int alloc) return scene->ed; } +void seq_free_clipboard(void) +{ + Sequence *seq, *nseq; + + for(seq= seqbase_clipboard.first; seq; seq= nseq) { + nseq= seq->next; + seq_free_sequence(NULL, seq); + } + seqbase_clipboard.first= seqbase_clipboard.last= NULL; +} + void seq_free_editing(Scene *scene) { Editing *ed = scene->ed; @@ -670,28 +703,22 @@ void sort_seq(Scene *scene) } -void clear_scene_in_allseqs(Scene *sce) +static int clear_scene_in_allseqs_cb(Sequence *seq, void *arg_pt) { - Scene *sce1; - Editing *ed; - Sequence *seq; + if(seq->scene==(Scene *)arg_pt) + seq->scene= NULL; + return 1; +} + +void clear_scene_in_allseqs(Scene *scene) +{ + Scene *scene_iter; /* when a scene is deleted: test all seqs */ - - sce1= G.main->scene.first; - while(sce1) { - if(sce1!=sce && sce1->ed) { - ed= sce1->ed; - - SEQ_BEGIN(ed, seq) { - - if(seq->scene==sce) seq->scene= 0; - - } - SEQ_END + for(scene_iter= G.main->scene.first; scene_iter; scene_iter= scene_iter->id.next) { + if(scene_iter != scene && scene_iter->ed) { + seqbase_recursive_apply(&scene_iter->ed->seqbase, clear_scene_in_allseqs_cb, scene); } - - sce1= sce1->id.next; } } @@ -839,7 +866,7 @@ static void do_effect(Scene *scene, int cfra, Sequence *seq, TStripElem * se) early_out = sh.early_out(seq, fac, facf); if (early_out == -1) { /* no input needed */ - sh.execute(seq, cfra, fac, facf, + sh.execute(scene, seq, cfra, fac, facf, se->ibuf->x, se->ibuf->y, 0, 0, 0, se->ibuf); return; @@ -928,7 +955,7 @@ static void do_effect(Scene *scene, int cfra, Sequence *seq, TStripElem * se) IMB_rect_from_float(se3->ibuf); } - sh.execute(seq, cfra, fac, facf, x, y, se1->ibuf, se2->ibuf, se3->ibuf, + sh.execute(scene, seq, cfra, fac, facf, x, y, se1->ibuf, se2->ibuf, se3->ibuf, se->ibuf); } @@ -2014,9 +2041,14 @@ static void do_build_seq_ibuf(Scene *scene, Sequence * seq, TStripElem *se, int Render *re; RenderResult rres; char scenename[64]; - int have_seq= (sce->r.scemode & R_DOSEQ) && sce->ed && sce->ed->seqbase.first; - int sce_valid =sce && (sce->camera || have_seq); - + int have_seq= FALSE; + int sce_valid= FALSE; + + if(sce) { + have_seq= (sce->r.scemode & R_DOSEQ) && sce->ed && sce->ed->seqbase.first; + sce_valid= (sce->camera || have_seq); + } + if (se->ibuf == NULL && sce_valid && !build_proxy_run) { se->ibuf = seq_proxy_fetch(scene, seq, cfra, render_size); if (se->ibuf) { @@ -2276,7 +2308,7 @@ static TStripElem* do_handle_speed_effect(Scene *scene, Sequence * seq, int cfra } else { sh = get_sequence_effect(seq); - sh.execute(seq, cfra, + sh.execute(scene, seq, cfra, f_cfra - (float) cfra_left, f_cfra - (float) cfra_left, se->ibuf->x, se->ibuf->y, @@ -2510,12 +2542,12 @@ static TStripElem* do_build_seq_array_recursively(Scene *scene, } if (swap_input) { - sh.execute(seq, cfra, + sh.execute(scene, seq, cfra, facf, facf, x, y, se2->ibuf, se1->ibuf_comp, 0, se2->ibuf_comp); } else { - sh.execute(seq, cfra, + sh.execute(scene, seq, cfra, facf, facf, x, y, se1->ibuf_comp, se2->ibuf, 0, se2->ibuf_comp); @@ -3198,6 +3230,23 @@ static void free_imbuf_seq_with_ipo(Scene *scene, struct Ipo *ipo) } #endif +static int seq_sound_reload_cb(Sequence *seq, void *arg_pt) +{ + if (seq->type==SEQ_SOUND && seq->sound) { + Scene *scene= (Scene *)arg_pt; + if(seq->sound_handle) + sound_delete_handle(scene, seq->sound_handle); + + seq->sound_handle = sound_new_handle(scene, seq->sound, seq->start, seq->start + seq->strip->len, 0); + return 0; + } + return 1; /* recurse meta's */ +} +void seqbase_sound_reload(Scene *scene, ListBase *seqbase) +{ + seqbase_recursive_apply(seqbase, seq_sound_reload_cb, (void *)scene); +} + /* seq funcs's for transforming internally notice the difference between start/end and left/right. @@ -3256,7 +3305,7 @@ void seq_tx_set_final_right(Sequence *seq, int val) /* used so we can do a quick check for single image seq since they work a bit differently to normal image seq's (during transform) */ -int check_single_seq(Sequence *seq) +int seq_single_check(Sequence *seq) { if ( seq->len==1 && (seq->type == SEQ_IMAGE || seq->type == SEQ_COLOR)) return 1; @@ -3264,6 +3313,42 @@ int check_single_seq(Sequence *seq) return 0; } +/* check if the selected seq's reference unselected seq's */ +int seqbase_isolated_sel_check(ListBase *seqbase) +{ + Sequence *seq; + /* is there more than 1 select */ + int ok= FALSE; + + for(seq= seqbase->first; seq; seq= seq->next) { + if(seq->flag & SELECT) { + ok= TRUE; + break; + } + } + + if(ok == FALSE) + return FALSE; + + /* test relationships */ + for(seq= seqbase->first; seq; seq= seq->next) { + if(seq->flag & SELECT) { + if(seq->type & SEQ_EFFECT) { + if(seq->seq1 && (seq->seq1->flag & SELECT)==0) return FALSE; + if(seq->seq2 && (seq->seq2->flag & SELECT)==0) return FALSE; + if(seq->seq3 && (seq->seq3->flag & SELECT)==0) return FALSE; + } + } + else if(seq->type & SEQ_EFFECT) { + if(seq->seq1 && (seq->seq1->flag & SELECT)) return FALSE; + if(seq->seq2 && (seq->seq2->flag & SELECT)) return FALSE; + if(seq->seq3 && (seq->seq3->flag & SELECT)) return FALSE; + } + } + + return TRUE; +} + /* use to impose limits when dragging/extending - so impossible situations dont happen * Cant use the SEQ_LEFTSEL and SEQ_LEFTSEL directly because the strip may be in a metastrip */ void seq_tx_handle_xlimits(Sequence *seq, int leftflag, int rightflag) @@ -3273,7 +3358,7 @@ void seq_tx_handle_xlimits(Sequence *seq, int leftflag, int rightflag) seq_tx_set_final_left(seq, seq_tx_get_final_right(seq, 0)-1); } - if (check_single_seq(seq)==0) { + if (seq_single_check(seq)==0) { if (seq_tx_get_final_left(seq, 0) >= seq_tx_get_end(seq)) { seq_tx_set_final_left(seq, seq_tx_get_end(seq)-1); } @@ -3295,7 +3380,7 @@ void seq_tx_handle_xlimits(Sequence *seq, int leftflag, int rightflag) seq_tx_set_final_right(seq, seq_tx_get_final_left(seq, 0)+1); } - if (check_single_seq(seq)==0) { + if (seq_single_check(seq)==0) { if (seq_tx_get_final_right(seq, 0) <= seq_tx_get_start(seq)) { seq_tx_set_final_right(seq, seq_tx_get_start(seq)+1); } @@ -3309,10 +3394,10 @@ void seq_tx_handle_xlimits(Sequence *seq, int leftflag, int rightflag) } } -void fix_single_seq(Sequence *seq) +void seq_single_fix(Sequence *seq) { int left, start, offset; - if (!check_single_seq(seq)) + if (!seq_single_check(seq)) return; /* make sure the image is always at the start since there is only one, @@ -3357,13 +3442,15 @@ int seq_test_overlap(ListBase * seqbasep, Sequence *test) } -static void seq_translate(Sequence *seq, int delta) +static void seq_translate(Scene *evil_scene, Sequence *seq, int delta) { + seq_offset_animdata(evil_scene, seq, delta); seq->start += delta; + if(seq->type==SEQ_META) { Sequence *seq_child; for(seq_child= seq->seqbase.first; seq_child; seq_child= seq_child->next) { - seq_translate(seq_child, delta); + seq_translate(evil_scene, seq_child, delta); } } @@ -3371,7 +3458,7 @@ static void seq_translate(Sequence *seq, int delta) } /* return 0 if there werent enough space */ -int shuffle_seq(ListBase * seqbasep, Sequence *test) +int shuffle_seq(ListBase * seqbasep, Sequence *test, Scene *evil_scene) { int orig_machine= test->machine; test->machine++; @@ -3399,7 +3486,7 @@ int shuffle_seq(ListBase * seqbasep, Sequence *test) test->machine= orig_machine; new_frame = new_frame + (test->start-test->startdisp); /* adjust by the startdisp */ - seq_translate(test, new_frame - test->start); + seq_translate(evil_scene, test, new_frame - test->start); calc_sequence(test); return 0; @@ -3455,7 +3542,7 @@ static int shuffle_seq_time_offset(ListBase * seqbasep, char dir) return tot_ofs; } -int shuffle_seq_time(ListBase * seqbasep) +int shuffle_seq_time(ListBase * seqbasep, Scene *evil_scene) { /* note: seq->tmp is used to tag strips to move */ @@ -3468,7 +3555,7 @@ int shuffle_seq_time(ListBase * seqbasep) if(offset) { for(seq= seqbasep->first; seq; seq= seq->next) { if(seq->tmp) { - seq_translate(seq, offset); + seq_translate(evil_scene, seq, offset); seq->flag &= ~SEQ_OVERLAP; } } @@ -3477,19 +3564,118 @@ int shuffle_seq_time(ListBase * seqbasep) return offset? 0:1; } - -void seq_update_sound(struct Sequence *seq) +void seq_update_sound(Sequence *seq) { - if(seq->type == SEQ_SOUND) + if(seq->type == SEQ_SOUND && seq->sound_handle) { seq->sound_handle->startframe = seq->startdisp; seq->sound_handle->endframe = seq->enddisp; seq->sound_handle->frameskip = seq->startofs + seq->anim_startofs; - seq->sound_handle->mute = seq->flag & SEQ_MUTE ? 1 : 0; seq->sound_handle->changed = -1; + /* mute is set in seq_update_muting_recursive */ } } +static void seq_update_muting_recursive(ListBase *seqbasep, Sequence *metaseq, int mute) +{ + Sequence *seq; + int seqmute; + + /* for sound we go over full meta tree to update muted state, + since sound is played outside of evaluating the imbufs, */ + for(seq=seqbasep->first; seq; seq=seq->next) { + seqmute= (mute || (seq->flag & SEQ_MUTE)); + + if(seq->type == SEQ_META) { + /* if this is the current meta sequence, unmute because + all sequences above this were set to mute */ + if(seq == metaseq) + seqmute= 0; + + seq_update_muting_recursive(&seq->seqbase, metaseq, seqmute); + } + else if(seq->type == SEQ_SOUND) { + if(seq->sound_handle && seqmute != seq->sound_handle->mute) { + seq->sound_handle->mute = seqmute; + seq->sound_handle->changed = -1; + } + } + } +} + +void seq_update_muting(Editing *ed) +{ + if(ed) { + /* mute all sounds up to current metastack list */ + MetaStack *ms= ed->metastack.last; + + if(ms) + seq_update_muting_recursive(&ed->seqbase, ms->parseq, 1); + else + seq_update_muting_recursive(&ed->seqbase, NULL, 0); + } +} + +/* in cases where we done know the sequence's listbase */ +ListBase *seq_seqbase(ListBase *seqbase, Sequence *seq) +{ + Sequence *iseq; + ListBase *lb= NULL; + + for(iseq= seqbase->first; iseq; iseq= iseq->next) { + if(seq==iseq) { + return seqbase; + } + else if(iseq->seqbase.first && (lb= seq_seqbase(&iseq->seqbase, seq))) { + return lb; + } + } + + return NULL; +} + +/* XXX - hackish function needed for transforming strips! TODO - have some better solution */ +void seq_offset_animdata(Scene *scene, Sequence *seq, int ofs) +{ + char str[32]; + FCurve *fcu; + + if(scene->adt==NULL || ofs==0) + return; + + sprintf(str, "[\"%s\"]", seq->name+2); + + for (fcu= scene->adt->action->curves.first; fcu; fcu= fcu->next) { + if(strstr(fcu->rna_path, "sequence_editor.sequences_all[") && strstr(fcu->rna_path, str)) { + int i; + for (i = 0; i < fcu->totvert; i++) { + BezTriple *bezt= &fcu->bezt[i]; + bezt->vec[0][0] += ofs; + bezt->vec[1][0] += ofs; + bezt->vec[2][0] += ofs; + } + } + } +} + + +Sequence *get_seq_by_name(ListBase *seqbase, const char *name, int recursive) +{ + Sequence *iseq=NULL; + Sequence *rseq=NULL; + + for (iseq=seqbase->first; iseq; iseq=iseq->next) { + if (strcmp(name, iseq->name+2) == 0) + return iseq; + else if(recursive && (iseq->seqbase.first) && (rseq=get_seq_by_name(&iseq->seqbase, name, 1))) { + return rseq; + } + } + + return NULL; +} + + Sequence *active_seq_get(Scene *scene) { Editing *ed= seq_give_editing(scene, FALSE); @@ -3518,7 +3704,7 @@ void seq_load_apply(Scene *scene, Sequence *seq, SeqLoadInfo *seq_load) } if(seq_load->flag & SEQ_LOAD_REPLACE_SEL) { - seq_load->flag |= 1; /* SELECT */ + seq_load->flag |= SELECT; active_seq_set(scene, seq); } @@ -3544,7 +3730,7 @@ Sequence *alloc_sequence(ListBase *lb, int cfra, int machine) *( (short *)seq->name )= ID_SEQ; seq->name[2]= 0; - seq->flag= 1; /* SELECT */ + seq->flag= SELECT; seq->start= cfra; seq->machine= machine; seq->mul= 1.0; diff --git a/source/blender/blenkernel/intern/sound.c b/source/blender/blenkernel/intern/sound.c index d8950c7dace..74c6afdc018 100644 --- a/source/blender/blenkernel/intern/sound.c +++ b/source/blender/blenkernel/intern/sound.c @@ -31,6 +31,13 @@ #include #endif +static int sound_disabled = 0; + +void sound_disable() +{ + sound_disabled = 1; +} + void sound_init() { AUD_Specs specs; @@ -42,6 +49,9 @@ void sound_init() specs.format = U.audioformat; specs.rate = U.audiorate; + if (sound_disabled) + device = 0; + if(buffersize < 128) buffersize = AUD_DEFAULT_BUFFER_SIZE; diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c index cb2e2c437bf..072a665e0e9 100644 --- a/source/blender/blenkernel/intern/subsurf_ccg.c +++ b/source/blender/blenkernel/intern/subsurf_ccg.c @@ -53,11 +53,12 @@ #include "BKE_subsurf.h" #include "BLI_blenlib.h" -#include "BLI_editVert.h" -#include "BLI_math.h" -#include "BLI_linklist.h" -#include "BLI_memarena.h" #include "BLI_edgehash.h" +#include "BLI_editVert.h" +#include "BLI_linklist.h" +#include "BLI_math.h" +#include "BLI_memarena.h" +#include "BLI_pbvh.h" #include "BIF_gl.h" #include "BIF_glutil.h" @@ -68,25 +69,6 @@ #include "CCGSubSurf.h" -typedef struct _VertData { - float co[3]; - float no[3]; -} VertData; - -struct CCGDerivedMesh { - DerivedMesh dm; - - CCGSubSurf *ss; - int drawInteriorEdges, useSubsurfUv; - - struct {int startVert; CCGVert *vert;} *vertMap; - struct {int startVert; int startEdge; CCGEdge *edge;} *edgeMap; - struct {int startVert; int startEdge; - int startFace; CCGFace *face;} *faceMap; -}; - -typedef struct CCGDerivedMesh CCGDerivedMesh; - static int ccgDM_getVertMapIndex(CCGSubSurf *ss, CCGVert *v); static int ccgDM_getEdgeMapIndex(CCGSubSurf *ss, CCGEdge *e); static int ccgDM_getFaceMapIndex(CCGSubSurf *ss, CCGFace *f); @@ -136,7 +118,7 @@ static CCGSubSurf *_getSubSurf(CCGSubSurf *prevSS, int subdivLevels, int useAgin } else { ifc.vertUserSize = ifc.edgeUserSize = ifc.faceUserSize = 8; } - ifc.vertDataSize = sizeof(VertData); + ifc.vertDataSize = sizeof(DMGridData); if (useArena) { CCGAllocatorIFC allocatorIFC; @@ -156,7 +138,7 @@ static CCGSubSurf *_getSubSurf(CCGSubSurf *prevSS, int subdivLevels, int useAgin ccgSubSurf_setUseAgeCounts(ccgSS, 1, 8, 8, 8); } - ccgSubSurf_setCalcVertexNormals(ccgSS, 1, BLI_STRUCT_OFFSET(VertData, no)); + ccgSubSurf_setCalcVertexNormals(ccgSS, 1, BLI_STRUCT_OFFSET(DMGridData, no)); return ccgSS; } @@ -340,7 +322,7 @@ static void set_subsurf_uv(CCGSubSurf *ss, DerivedMesh *dm, DerivedMesh *result, if(!dmtface || !tface) return; - /* create a CCGSubsurf from uv's */ + /* create a CCGSubSurf from uv's */ uvss = _getSubSurf(NULL, ccgSubSurf_getSubdivisionLevels(ss), 0, 1, 0); if(!ss_sync_from_uv(uvss, ss, dm, dmtface)) { @@ -348,7 +330,7 @@ static void set_subsurf_uv(CCGSubSurf *ss, DerivedMesh *dm, DerivedMesh *result, return; } - /* get some info from CCGSubsurf */ + /* get some info from CCGSubSurf */ totface = ccgSubSurf_getNumFaces(uvss); edgeSize = ccgSubSurf_getEdgeSize(uvss); gridSize = ccgSubSurf_getGridSize(uvss); @@ -372,7 +354,7 @@ static void set_subsurf_uv(CCGSubSurf *ss, DerivedMesh *dm, DerivedMesh *result, int numVerts = ccgSubSurf_getFaceNumVerts(f); for (S=0; Sseam) { - flags |= ME_SEAM; - } - } else { - if (edgeIdx!=-1) { - MEdge *origMed = &medge[edgeIdx]; - - if (dlm) { - flags |= origMed->flag&~ME_EDGE_STEPINDEX; - } else { - flags |= (origMed->flag&ME_SEAM)|ME_EDGEDRAW|ME_EDGERENDER; - } - } - } - - return flags; -} -#endif - /* face weighting */ static void calc_ss_weights(int gridFaces, FaceVertWeight **qweight, FaceVertWeight **tweight) @@ -471,360 +422,6 @@ static void calc_ss_weights(int gridFaces, } } -static DerivedMesh *ss_to_cdderivedmesh(CCGSubSurf *ss, int ssFromEditmesh, - int drawInteriorEdges, int useSubsurfUv, - DerivedMesh *dm, MultiresSubsurf *ms) -{ - DerivedMesh *result; - int edgeSize = ccgSubSurf_getEdgeSize(ss); - int gridSize = ccgSubSurf_getGridSize(ss); - int gridFaces = gridSize - 1; - int edgeBase, faceBase; - int i, j, k, S, x, y, index; - CCGVertIterator *vi; - CCGEdgeIterator *ei; - CCGFaceIterator *fi; - CCGFace **faceMap2; - CCGEdge **edgeMap2; - CCGVert **vertMap2; - int totvert, totedge, totface; - MVert *mvert; - MEdge *med; - MFace *mf; - int *origIndex; - FaceVertWeight *qweight, *tweight; - - calc_ss_weights(gridFaces, &qweight, &tweight); - - /* vert map */ - totvert = ccgSubSurf_getNumVerts(ss); - vertMap2 = MEM_mallocN(totvert*sizeof(*vertMap2), "vertmap"); - vi = ccgSubSurf_getVertIterator(ss); - for(; !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) { - CCGVert *v = ccgVertIterator_getCurrent(vi); - - vertMap2[GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v))] = v; - } - ccgVertIterator_free(vi); - - totedge = ccgSubSurf_getNumEdges(ss); - edgeMap2 = MEM_mallocN(totedge*sizeof(*edgeMap2), "edgemap"); - ei = ccgSubSurf_getEdgeIterator(ss); - for(; !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) { - CCGEdge *e = ccgEdgeIterator_getCurrent(ei); - - edgeMap2[GET_INT_FROM_POINTER(ccgSubSurf_getEdgeEdgeHandle(e))] = e; - } - - totface = ccgSubSurf_getNumFaces(ss); - faceMap2 = MEM_mallocN(totface*sizeof(*faceMap2), "facemap"); - fi = ccgSubSurf_getFaceIterator(ss); - for(; !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) { - CCGFace *f = ccgFaceIterator_getCurrent(fi); - - faceMap2[GET_INT_FROM_POINTER(ccgSubSurf_getFaceFaceHandle(ss, f))] = f; - } - ccgFaceIterator_free(fi); - - if(ms) { - result = MultiresDM_new(ms, dm, ccgSubSurf_getNumFinalVerts(ss), - ccgSubSurf_getNumFinalEdges(ss), - ccgSubSurf_getNumFinalFaces(ss)); - } - else { - if(dm) { - result = CDDM_from_template(dm, ccgSubSurf_getNumFinalVerts(ss), - ccgSubSurf_getNumFinalEdges(ss), - ccgSubSurf_getNumFinalFaces(ss)); - } else { - result = CDDM_new(ccgSubSurf_getNumFinalVerts(ss), - ccgSubSurf_getNumFinalEdges(ss), - ccgSubSurf_getNumFinalFaces(ss)); - } - } - - // load verts - faceBase = i = 0; - mvert = CDDM_get_verts(result); - origIndex = result->getVertData(result, 0, CD_ORIGINDEX); - - for(index = 0; index < totface; index++) { - CCGFace *f = faceMap2[index]; - int x, y, S, numVerts = ccgSubSurf_getFaceNumVerts(f); - FaceVertWeight *weight = (numVerts == 4) ? qweight : tweight; - int vertIdx[4]; - - for(S = 0; S < numVerts; S++) { - CCGVert *v = ccgSubSurf_getFaceVert(ss, f, S); - - vertIdx[S] = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v)); - } - - DM_interp_vert_data(dm, result, vertIdx, weight[0][0], numVerts, i); - copy_v3_v3(mvert->co, ccgSubSurf_getFaceCenterData(f)); - *origIndex = ORIGINDEX_NONE; - ++mvert; - ++origIndex; - i++; - - for(S = 0; S < numVerts; S++) { - int prevS = (S - 1 + numVerts) % numVerts; - int nextS = (S + 1) % numVerts; - int otherS = (numVerts == 4) ? (S + 2) % numVerts : 3; - - for(x = 1; x < gridFaces; x++) { - float w[4]; - w[prevS] = weight[x][0][0]; - w[S] = weight[x][0][1]; - w[nextS] = weight[x][0][2]; - w[otherS] = weight[x][0][3]; - DM_interp_vert_data(dm, result, vertIdx, w, numVerts, i); - copy_v3_v3(mvert->co, - ccgSubSurf_getFaceGridEdgeData(ss, f, S, x)); - - *origIndex = ORIGINDEX_NONE; - ++mvert; - ++origIndex; - i++; - } - } - - for(S = 0; S < numVerts; S++) { - int prevS = (S - 1 + numVerts) % numVerts; - int nextS = (S + 1) % numVerts; - int otherS = (numVerts == 4) ? (S + 2) % numVerts : 3; - - for(y = 1; y < gridFaces; y++) { - for(x = 1; x < gridFaces; x++) { - float w[4]; - w[prevS] = weight[y * gridFaces + x][0][0]; - w[S] = weight[y * gridFaces + x][0][1]; - w[nextS] = weight[y * gridFaces + x][0][2]; - w[otherS] = weight[y * gridFaces + x][0][3]; - DM_interp_vert_data(dm, result, vertIdx, w, numVerts, i); - copy_v3_v3(mvert->co, - ccgSubSurf_getFaceGridData(ss, f, S, x, y)); - *origIndex = ORIGINDEX_NONE; - ++mvert; - ++origIndex; - i++; - } - } - } - - *((int*)ccgSubSurf_getFaceUserData(ss, f)) = faceBase; - faceBase += 1 + numVerts * ((gridSize-2) + (gridSize-2) * (gridSize-2)); - } - - edgeBase = i; - for(index = 0; index < totedge; index++) { - CCGEdge *e = edgeMap2[index]; - int x; - int vertIdx[2]; - - CCGVert *v; - v = ccgSubSurf_getEdgeVert0(e); - vertIdx[0] = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v)); - v = ccgSubSurf_getEdgeVert1(e); - vertIdx[1] = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v)); - - for(x = 1; x < edgeSize - 1; x++) { - float w[2]; - w[1] = (float) x / (edgeSize - 1); - w[0] = 1 - w[1]; - DM_interp_vert_data(dm, result, vertIdx, w, 2, i); - copy_v3_v3(mvert->co, ccgSubSurf_getEdgeData(ss, e, x)); - *origIndex = ORIGINDEX_NONE; - ++mvert; - ++origIndex; - i++; - } - - *((int*)ccgSubSurf_getEdgeUserData(ss, e)) = edgeBase; - edgeBase += edgeSize-2; - } - - for(index = 0; index < totvert; index++) { - CCGVert *v = vertMap2[index]; - int vertIdx; - - vertIdx = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v)); - - DM_copy_vert_data(dm, result, vertIdx, i, 1); - copy_v3_v3(mvert->co, ccgSubSurf_getVertData(ss, v)); - - *((int*)ccgSubSurf_getVertUserData(ss, v)) = i; - *origIndex = ccgDM_getVertMapIndex(ss, v); - ++mvert; - ++origIndex; - i++; - } - - // load edges - i = 0; - med = CDDM_get_edges(result); - origIndex = result->getEdgeData(result, 0, CD_ORIGINDEX); - - for(index = 0; index < totface; index++) { - CCGFace *f = faceMap2[index]; - int numVerts = ccgSubSurf_getFaceNumVerts(f); - - for(k = 0; k < numVerts; k++) { - for(x = 0; x < gridFaces; x++) { - if(drawInteriorEdges) med->flag = ME_EDGEDRAW | ME_EDGERENDER; - med->v1 = getFaceIndex(ss, f, k, x, 0, edgeSize, gridSize); - med->v2 = getFaceIndex(ss, f, k, x+1, 0, edgeSize, gridSize); - *origIndex = ORIGINDEX_NONE; - ++med; - ++origIndex; - i++; - } - - for(x = 1; x < gridFaces; x++) { - for(y = 0; y < gridFaces; y++) { - if(drawInteriorEdges) - med->flag = ME_EDGEDRAW | ME_EDGERENDER; - med->v1 = getFaceIndex(ss, f, k, x, y, edgeSize, gridSize); - med->v2 = getFaceIndex(ss, f, k, x, y + 1, - edgeSize, gridSize); - *origIndex = ORIGINDEX_NONE; - ++med; - ++origIndex; - i++; - - if(drawInteriorEdges) - med->flag = ME_EDGEDRAW | ME_EDGERENDER; - med->v1 = getFaceIndex(ss, f, k, y, x, edgeSize, gridSize); - med->v2 = getFaceIndex(ss, f, k, y + 1, x, - edgeSize, gridSize); - *origIndex = ORIGINDEX_NONE; - ++med; - ++origIndex; - i++; - } - } - } - } - - for(index = 0; index < totedge; index++) { - CCGEdge *e = edgeMap2[index]; - unsigned int flags = 0; - char bweight = 0; - int edgeIdx = GET_INT_FROM_POINTER(ccgSubSurf_getEdgeEdgeHandle(e)); - - if(!ccgSubSurf_getEdgeNumFaces(e)) flags |= ME_LOOSEEDGE; - - - if(edgeIdx != -1 && dm) { - MEdge origMed; - dm->getEdge(dm, edgeIdx, &origMed); - - flags |= origMed.flag; - bweight = origMed.bweight; - } - - for(x = 0; x < edgeSize - 1; x++) { - med->v1 = getEdgeIndex(ss, e, x, edgeSize); - med->v2 = getEdgeIndex(ss, e, x + 1, edgeSize); - med->flag = flags; - med->bweight = bweight; - *origIndex = ccgDM_getEdgeMapIndex(ss, e); - ++med; - ++origIndex; - i++; - } - } - - // load faces - i = 0; - mf = CDDM_get_faces(result); - origIndex = result->getFaceData(result, 0, CD_ORIGINDEX); - - for(index = 0; index < totface; index++) { - CCGFace *f = faceMap2[index]; - int numVerts = ccgSubSurf_getFaceNumVerts(f); - int mat_nr; - int flag; - int mapIndex = ccgDM_getFaceMapIndex(ss, f); - int faceIdx = GET_INT_FROM_POINTER(ccgSubSurf_getFaceFaceHandle(ss, f)); - - if(!ssFromEditmesh) { - MFace origMFace; - dm->getFace(dm, faceIdx, &origMFace); - - mat_nr = origMFace.mat_nr; - flag = origMFace.flag; - } else { - EditFace *ef = ccgSubSurf_getFaceFaceHandle(ss, f); - mat_nr = ef->mat_nr; - flag = ef->flag; - } - - for(S = 0; S < numVerts; S++) { - FaceVertWeight *weight = (numVerts == 4) ? qweight : tweight; - - for(y = 0; y < gridFaces; y++) { - for(x = 0; x < gridFaces; x++) { - mf->v1 = getFaceIndex(ss, f, S, x + 0, y + 0, - edgeSize, gridSize); - mf->v2 = getFaceIndex(ss, f, S, x + 0, y + 1, - edgeSize, gridSize); - mf->v3 = getFaceIndex(ss, f, S, x + 1, y + 1, - edgeSize, gridSize); - mf->v4 = getFaceIndex(ss, f, S, x + 1, y + 0, - edgeSize, gridSize); - mf->mat_nr = mat_nr; - mf->flag = flag; - - if(dm) { - int prevS = (S - 1 + numVerts) % numVerts; - int nextS = (S + 1) % numVerts; - int otherS = (numVerts == 4) ? (S + 2) % numVerts : 3; - FaceVertWeight w; - - for(j = 0; j < 4; ++j) { - w[j][prevS] = (*weight)[j][0]; - w[j][S] = (*weight)[j][1]; - w[j][nextS] = (*weight)[j][2]; - w[j][otherS] = (*weight)[j][3]; - } - - DM_interp_face_data(dm, result, &faceIdx, NULL, - &w, 1, i); - weight++; - } - - *origIndex = mapIndex; - ++mf; - ++origIndex; - i++; - } - } - } - } - - MEM_freeN(faceMap2); - MEM_freeN(edgeMap2); - MEM_freeN(vertMap2); - - MEM_freeN(tweight); - MEM_freeN(qweight); - - if(useSubsurfUv) { - CustomData *fdata = &result->faceData; - CustomData *dmfdata = &dm->faceData; - int numlayer = CustomData_number_of_layers(fdata, CD_MTFACE); - int dmnumlayer = CustomData_number_of_layers(dmfdata, CD_MTFACE); - - for (i=0; igetVertDataArray(dm, CD_ORIGINDEX); - for(i = 0; i < totvert; i++, mv++, index++) { + for(i = 0; i < totvert; i++, mv++) { CCGVert *v; if(vertexCos) { @@ -855,12 +452,12 @@ static void ss_sync_from_derivedmesh(CCGSubSurf *ss, DerivedMesh *dm, ccgSubSurf_syncVert(ss, SET_INT_IN_POINTER(i), mv->co, 0, &v); } - ((int*)ccgSubSurf_getVertUserData(ss, v))[1] = *index; + ((int*)ccgSubSurf_getVertUserData(ss, v))[1] = (index)? *index++: i; } me = medge; index = (int *)dm->getEdgeDataArray(dm, CD_ORIGINDEX); - for(i = 0; i < totedge; i++, me++, index++) { + for(i = 0; i < totedge; i++, me++) { CCGEdge *e; float crease; @@ -870,12 +467,12 @@ static void ss_sync_from_derivedmesh(CCGSubSurf *ss, DerivedMesh *dm, ccgSubSurf_syncEdge(ss, SET_INT_IN_POINTER(i), SET_INT_IN_POINTER(me->v1), SET_INT_IN_POINTER(me->v2), crease, &e); - ((int*)ccgSubSurf_getEdgeUserData(ss, e))[1] = *index; + ((int*)ccgSubSurf_getEdgeUserData(ss, e))[1] = (index)? *index++: i; } mf = mface; index = (int *)dm->getFaceDataArray(dm, CD_ORIGINDEX); - for (i = 0; i < totface; i++, mf++, index++) { + for (i = 0; i < totface; i++, mf++) { CCGFace *f; fVerts[0] = SET_INT_IN_POINTER(mf->v1); @@ -901,7 +498,7 @@ static void ss_sync_from_derivedmesh(CCGSubSurf *ss, DerivedMesh *dm, return; } - ((int*)ccgSubSurf_getFaceUserData(ss, f))[1] = *index; + ((int*)ccgSubSurf_getFaceUserData(ss, f))[1] = (index)? *index++: i; } ccgSubSurf_processSync(ss); @@ -942,7 +539,7 @@ static void ccgDM_getMinMax(DerivedMesh *dm, float min_r[3], float max_r[3]) { for (; !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) { CCGEdge *e = ccgEdgeIterator_getCurrent(ei); - VertData *edgeData = ccgSubSurf_getEdgeDataArray(ss, e); + DMGridData *edgeData = ccgSubSurf_getEdgeDataArray(ss, e); for (i=0; iedgeMap[0].startEdge) / (edgeSize - 1); @@ -1121,7 +719,7 @@ static void ccgDM_getFinalEdge(DerivedMesh *dm, int edgeNum, MEdge *med) med->v1 = getEdgeIndex(ss, e, x, edgeSize); med->v2 = getEdgeIndex(ss, e, x+1, edgeSize); - edgeFlag = dm->getEdgeData(dm, edgeNum, CD_FLAGS); + edgeFlag = (ccgdm->edgeFlags)? &ccgdm->edgeFlags[i]: NULL; if(edgeFlag) flags |= (*edgeFlag & (ME_SEAM | ME_SHARP)) | ME_EDGEDRAW | ME_EDGERENDER; @@ -1147,7 +745,7 @@ static void ccgDM_getFinalFace(DerivedMesh *dm, int faceNum, MFace *mf) int grid; int x, y; int lastface = ccgSubSurf_getNumFaces(ss) - 1; - char *faceFlags = dm->getFaceDataArray(dm, CD_FLAGS); + char *faceFlags = ccgdm->faceFlags; memset(mf, 0, sizeof(*mf)); @@ -1169,7 +767,7 @@ static void ccgDM_getFinalFace(DerivedMesh *dm, int faceNum, MFace *mf) mf->v3 = getFaceIndex(ss, f, grid, x+1, y+1, edgeSize, gridSize); mf->v4 = getFaceIndex(ss, f, grid, x+1, y+0, edgeSize, gridSize); - if(faceFlags) mf->flag = faceFlags[i*4]; + if(faceFlags) mf->flag = faceFlags[i*2]; else mf->flag = ME_SMOOTH; } @@ -1177,6 +775,7 @@ static void ccgDM_copyFinalVertArray(DerivedMesh *dm, MVert *mvert) { CCGDerivedMesh *ccgdm = (CCGDerivedMesh*) dm; CCGSubSurf *ss = ccgdm->ss; + DMGridData *vd; int index; int totvert, totedge, totface; int gridSize = ccgSubSurf_getGridSize(ss); @@ -1188,20 +787,25 @@ static void ccgDM_copyFinalVertArray(DerivedMesh *dm, MVert *mvert) CCGFace *f = ccgdm->faceMap[index].face; int x, y, S, numVerts = ccgSubSurf_getFaceNumVerts(f); - copy_v3_v3(mvert[i++].co, ccgSubSurf_getFaceCenterData(f)); + vd= ccgSubSurf_getFaceCenterData(f); + copy_v3_v3(mvert[i].co, vd->co); + normal_float_to_short_v3(mvert[i].no, vd->no); + i++; for(S = 0; S < numVerts; S++) { - for(x = 1; x < gridSize - 1; x++) { - copy_v3_v3(mvert[i++].co, - ccgSubSurf_getFaceGridEdgeData(ss, f, S, x)); + for(x = 1; x < gridSize - 1; x++, i++) { + vd= ccgSubSurf_getFaceGridEdgeData(ss, f, S, x); + copy_v3_v3(mvert[i].co, vd->co); + normal_float_to_short_v3(mvert[i].no, vd->no); } } for(S = 0; S < numVerts; S++) { for(y = 1; y < gridSize - 1; y++) { - for(x = 1; x < gridSize - 1; x++) { - copy_v3_v3(mvert[i++].co, - ccgSubSurf_getFaceGridData(ss, f, S, x, y)); + for(x = 1; x < gridSize - 1; x++, i++) { + vd= ccgSubSurf_getFaceGridData(ss, f, S, x, y); + copy_v3_v3(mvert[i].co, vd->co); + normal_float_to_short_v3(mvert[i].no, vd->no); } } } @@ -1212,8 +816,11 @@ static void ccgDM_copyFinalVertArray(DerivedMesh *dm, MVert *mvert) CCGEdge *e = ccgdm->edgeMap[index].edge; int x; - for(x = 1; x < edgeSize - 1; x++) { - copy_v3_v3(mvert[i++].co, ccgSubSurf_getEdgeData(ss, e, x)); + for(x = 1; x < edgeSize - 1; x++, i++) { + vd= ccgSubSurf_getEdgeData(ss, e, x); + copy_v3_v3(mvert[i].co, vd->co); + /* TODO CCGSubsurf does not set these */ + normal_float_to_short_v3(mvert[i].no, vd->no); } } @@ -1221,8 +828,9 @@ static void ccgDM_copyFinalVertArray(DerivedMesh *dm, MVert *mvert) for(index = 0; index < totvert; index++) { CCGVert *v = ccgdm->vertMap[index].vert; - copy_v3_v3(mvert[i].co, ccgSubSurf_getVertData(ss, v)); - + vd= ccgSubSurf_getVertData(ss, v); + copy_v3_v3(mvert[i].co, vd->co); + normal_float_to_short_v3(mvert[i].no, vd->no); i++; } } @@ -1236,7 +844,7 @@ static void ccgDM_copyFinalEdgeArray(DerivedMesh *dm, MEdge *medge) int gridSize = ccgSubSurf_getGridSize(ss); int edgeSize = ccgSubSurf_getEdgeSize(ss); int i = 0; - int *edgeFlags = dm->getEdgeDataArray(dm, CD_FLAGS); + short *edgeFlags = ccgdm->edgeFlags; totface = ccgSubSurf_getNumFaces(ss); for(index = 0; index < totface; index++) { @@ -1291,7 +899,7 @@ static void ccgDM_copyFinalEdgeArray(DerivedMesh *dm, MEdge *medge) if(edgeFlags) { if(edgeIdx != -1) { - flags |= (edgeFlags[i] & (ME_SEAM | ME_SHARP)) + flags |= (edgeFlags[index] & (ME_SEAM | ME_SHARP)) | ME_EDGEDRAW | ME_EDGERENDER; } } else { @@ -1317,14 +925,14 @@ static void ccgDM_copyFinalFaceArray(DerivedMesh *dm, MFace *mface) int gridSize = ccgSubSurf_getGridSize(ss); int edgeSize = ccgSubSurf_getEdgeSize(ss); int i = 0; - char *faceFlags = dm->getFaceDataArray(dm, CD_FLAGS); + char *faceFlags = ccgdm->faceFlags; totface = ccgSubSurf_getNumFaces(ss); for(index = 0; index < totface; index++) { CCGFace *f = ccgdm->faceMap[index].face; int x, y, S, numVerts = ccgSubSurf_getFaceNumVerts(f); - int mat_nr = 0; - int flag = ME_SMOOTH; /* assume face is smooth by default */ + int flag = (faceFlags)? faceFlags[index*2]: ME_SMOOTH; + int mat_nr = (faceFlags)? faceFlags[index*2+1]: 0; for(S = 0; S < numVerts; S++) { for(y = 0; y < gridSize - 1; y++) { @@ -1339,8 +947,7 @@ static void ccgDM_copyFinalFaceArray(DerivedMesh *dm, MFace *mface) mf->v4 = getFaceIndex(ss, f, S, x + 1, y + 0, edgeSize, gridSize); mf->mat_nr = mat_nr; - if(faceFlags) mf->flag = faceFlags[index*4]; - else mf->flag = flag; + mf->flag = flag; i++; } @@ -1438,7 +1045,7 @@ static void ccgDM_foreachMappedVert(DerivedMesh *dm, void (*func)(void *userData for (; !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) { CCGVert *v = ccgVertIterator_getCurrent(vi); - VertData *vd = ccgSubSurf_getVertData(ccgdm->ss, v); + DMGridData *vd = ccgSubSurf_getVertData(ccgdm->ss, v); int index = ccgDM_getVertMapIndex(ccgdm->ss, v); if (index!=-1) @@ -1455,7 +1062,7 @@ static void ccgDM_foreachMappedEdge(DerivedMesh *dm, void (*func)(void *userData for (; !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) { CCGEdge *e = ccgEdgeIterator_getCurrent(ei); - VertData *edgeData = ccgSubSurf_getEdgeDataArray(ss, e); + DMGridData *edgeData = ccgSubSurf_getEdgeDataArray(ss, e); int index = ccgDM_getEdgeMapIndex(ss, e); if (index!=-1) { @@ -1524,7 +1131,7 @@ static void ccgDM_drawEdges(DerivedMesh *dm, int drawLooseEdges) { for (; !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) { CCGEdge *e = ccgEdgeIterator_getCurrent(ei); - VertData *edgeData = ccgSubSurf_getEdgeDataArray(ss, e); + DMGridData *edgeData = ccgSubSurf_getEdgeDataArray(ss, e); if (!drawLooseEdges && !ccgSubSurf_getEdgeNumFaces(e)) continue; @@ -1552,7 +1159,7 @@ static void ccgDM_drawEdges(DerivedMesh *dm, int drawLooseEdges) { int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(f); for (S=0; Sss; - CCGFaceIterator *fi = ccgSubSurf_getFaceIterator(ss); + CCGFaceIterator *fi; int gridSize = ccgSubSurf_getGridSize(ss); - char *faceFlags = DM_get_face_data_layer(dm, CD_FLAGS); + char *faceFlags = ccgdm->faceFlags; + int step = (fast)? gridSize-1: 1; + if(ccgdm->pbvh && ccgdm->multires.mmd && !fast) { + CCGFace **faces; + int totface; + + BLI_pbvh_get_grid_updates(ccgdm->pbvh, 1, (void***)&faces, &totface); + if(totface) { + ccgSubSurf_updateFromFaces(ss, 0, faces, totface); + ccgSubSurf_updateNormals(ss, faces, totface); + MEM_freeN(faces); + } + + /* should be per face */ + if(faceFlags && faceFlags[0] & ME_SMOOTH) + glShadeModel(GL_SMOOTH); + + BLI_pbvh_draw(ccgdm->pbvh, partial_redraw_planes, NULL); + + glShadeModel(GL_FLAT); + + return; + } + + fi = ccgSubSurf_getFaceIterator(ss); for (; !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) { CCGFace *f = ccgFaceIterator_getCurrent(fi); int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(f); @@ -1629,8 +1260,8 @@ static void ccgDM_drawFacesSolid(DerivedMesh *dm, int (*setMaterial)(int, void * int drawSmooth, mat_nr; if(faceFlags) { - drawSmooth = (faceFlags[index*4] & ME_SMOOTH); - mat_nr= faceFlags[index*4 + 1]; + drawSmooth = (faceFlags[index*2] & ME_SMOOTH); + mat_nr= faceFlags[index*2 + 1]; } else { drawSmooth = 1; @@ -1642,14 +1273,14 @@ static void ccgDM_drawFacesSolid(DerivedMesh *dm, int (*setMaterial)(int, void * glShadeModel(drawSmooth? GL_SMOOTH: GL_FLAT); for (S=0; Sno); glVertex3fv(a->co); @@ -1660,12 +1291,12 @@ static void ccgDM_drawFacesSolid(DerivedMesh *dm, int (*setMaterial)(int, void * } } else { glBegin(GL_QUADS); - for (y=0; yfaceFlags; int a, b, i, doDraw, numVerts, matnr, new_matnr, totface; doDraw = 0; @@ -1737,8 +1368,8 @@ static void ccgDM_drawMappedFacesGLSL(DerivedMesh *dm, int (*setMaterial)(int, v numVerts = ccgSubSurf_getFaceNumVerts(f); if(faceFlags) { - drawSmooth = (faceFlags[index*4] & ME_SMOOTH); - new_matnr= faceFlags[index*4 + 1] + 1; + drawSmooth = (faceFlags[index*2] & ME_SMOOTH); + new_matnr= faceFlags[index*2 + 1] + 1; } else { drawSmooth = 1; @@ -1770,8 +1401,8 @@ static void ccgDM_drawMappedFacesGLSL(DerivedMesh *dm, int (*setMaterial)(int, v glShadeModel(drawSmooth? GL_SMOOTH: GL_FLAT); for (S=0; Sss; - MCol *mcol = DM_get_face_data_layer(dm, CD_MCOL); + MCol *mcol = dm->getFaceDataArray(dm, CD_WEIGHT_MCOL); MTFace *tf = DM_get_face_data_layer(dm, CD_MTFACE); - char *faceFlags = DM_get_face_data_layer(dm, CD_FLAGS); + char *faceFlags = ccgdm->faceFlags; int i, totface, flag, gridSize = ccgSubSurf_getGridSize(ss); int gridFaces = gridSize - 1; + if(!mcol) + mcol = dm->getFaceDataArray(dm, CD_MCOL); + totface = ccgSubSurf_getNumFaces(ss); for(i = 0; i < totface; i++) { CCGFace *f = ccgdm->faceMap[i].face; @@ -1932,8 +1566,8 @@ static void ccgDM_drawFacesTex_common(DerivedMesh *dm, int mat_nr; if(faceFlags) { - drawSmooth = (faceFlags[origIndex*4] & ME_SMOOTH); - mat_nr= faceFlags[origIndex*4 + 1]; + drawSmooth = (faceFlags[origIndex*2] & ME_SMOOTH); + mat_nr= faceFlags[origIndex*2 + 1]; } else { drawSmooth = 1; @@ -1958,8 +1592,8 @@ static void ccgDM_drawFacesTex_common(DerivedMesh *dm, } for (S=0; Sss; - CCGFaceIterator *fi = ccgSubSurf_getFaceIterator(ss); + MCol *mcol= NULL; int i, gridSize = ccgSubSurf_getGridSize(ss); - char *faceFlags = dm->getFaceDataArray(dm, CD_FLAGS); + char *faceFlags = ccgdm->faceFlags; + int gridFaces = gridSize - 1, totface; - for (i=0; !ccgFaceIterator_isStopped(fi); i++,ccgFaceIterator_next(fi)) { - CCGFace *f = ccgFaceIterator_getCurrent(fi); + if(useColors) { + mcol = dm->getFaceDataArray(dm, CD_WEIGHT_MCOL); + if(!mcol) + mcol = dm->getFaceDataArray(dm, CD_MCOL); + } + + totface = ccgSubSurf_getNumFaces(ss); + for(i = 0; i < totface; i++) { + CCGFace *f = ccgdm->faceMap[i].face; int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(f); int drawSmooth, index = ccgDM_getFaceMapIndex(ss, f); int origIndex; + unsigned char *cp= NULL; origIndex = GET_INT_FROM_POINTER(ccgSubSurf_getFaceFaceHandle(ss, f)); - if(faceFlags) drawSmooth = (faceFlags[origIndex*4] & ME_SMOOTH); + if(faceFlags) drawSmooth = (faceFlags[origIndex*2] & ME_SMOOTH); else drawSmooth = 1; - + + if(mcol) { + cp= (unsigned char*)mcol; + mcol += gridFaces*gridFaces*numVerts*4; + } + if (index!=-1) { int draw; draw = setDrawOptions==NULL ? 1 : setDrawOptions(userData, index, &drawSmooth); @@ -2113,44 +1761,64 @@ static void ccgDM_drawMappedFaces(DerivedMesh *dm, int (*setDrawOptions)(void *u } for (S=0; Sno); glVertex3fv(a->co); + if(cp) glColor3ub(cp[7], cp[6], cp[5]); glNormal3fv(b->no); glVertex3fv(b->co); + + if(x != gridFaces-1) { + if(cp) cp += 16; + } } + + a = &faceGridData[(y+0)*gridSize + x]; + b = &faceGridData[(y+1)*gridSize + x]; + + if(cp) glColor3ub(cp[15], cp[14], cp[13]); + glNormal3fv(a->no); + glVertex3fv(a->co); + if(cp) glColor3ub(cp[11], cp[10], cp[9]); + glNormal3fv(b->no); + glVertex3fv(b->co); + + if(cp) cp += 16; + glEnd(); } } else { glShadeModel(GL_FLAT); glBegin(GL_QUADS); - for (y=0; yco, vd->no); } @@ -2249,6 +1915,23 @@ static void ccgDM_release(DerivedMesh *dm) { CCGDerivedMesh *ccgdm = (CCGDerivedMesh*) dm; if (DM_release(dm)) { + /* Before freeing, need to update the displacement map */ + if(ccgdm->multires.modified) { + /* Check that mmd still exists */ + if(!ccgdm->multires.local_mmd && BLI_findindex(&ccgdm->multires.ob->modifiers, ccgdm->multires.mmd) < 0) + ccgdm->multires.mmd = NULL; + if(ccgdm->multires.mmd) + ccgdm->multires.update(dm); + } + + if(ccgdm->pbvh) BLI_pbvh_free(ccgdm->pbvh); + if(ccgdm->gridFaces) MEM_freeN(ccgdm->gridFaces); + if(ccgdm->gridData) MEM_freeN(ccgdm->gridData); + if(ccgdm->gridAdjacency) MEM_freeN(ccgdm->gridAdjacency); + if(ccgdm->gridOffset) MEM_freeN(ccgdm->gridOffset); + if(ccgdm->freeSS) ccgSubSurf_free(ccgdm->ss); + MEM_freeN(ccgdm->edgeFlags); + MEM_freeN(ccgdm->faceFlags); MEM_freeN(ccgdm->vertMap); MEM_freeN(ccgdm->edgeMap); MEM_freeN(ccgdm->faceMap); @@ -2256,6 +1939,270 @@ static void ccgDM_release(DerivedMesh *dm) { } } +static void *ccgDM_get_vert_data_layer(DerivedMesh *dm, int type) +{ + if(type == CD_ORIGINDEX) { + /* create origindex on demand to save memory */ + CCGDerivedMesh *ccgdm= (CCGDerivedMesh*)dm; + CCGSubSurf *ss= ccgdm->ss; + int *origindex; + int a, index, totnone, totorig; + + DM_add_vert_layer(dm, CD_ORIGINDEX, CD_CALLOC, NULL); + origindex= DM_get_vert_data_layer(dm, CD_ORIGINDEX); + + totorig = ccgSubSurf_getNumVerts(ss); + totnone= dm->numVertData - totorig; + + /* original vertices are at the end */ + for(a=0; avertMap[index].vert; + origindex[a] = ccgDM_getVertMapIndex(ccgdm->ss, v); + } + + return origindex; + } + + return DM_get_vert_data_layer(dm, type); +} + +static void *ccgDM_get_edge_data_layer(DerivedMesh *dm, int type) +{ + if(type == CD_ORIGINDEX) { + /* create origindex on demand to save memory */ + CCGDerivedMesh *ccgdm= (CCGDerivedMesh*)dm; + CCGSubSurf *ss= ccgdm->ss; + int *origindex; + int a, i, index, totnone, totorig, totedge; + int edgeSize= ccgSubSurf_getEdgeSize(ss); + + DM_add_edge_layer(dm, CD_ORIGINDEX, CD_CALLOC, NULL); + origindex= DM_get_edge_data_layer(dm, CD_ORIGINDEX); + + totedge= ccgSubSurf_getNumEdges(ss); + totorig= totedge*(edgeSize - 1); + totnone= dm->numEdgeData - totorig; + + /* original edges are at the end */ + for(a=0; aedgeMap[index].edge; + int mapIndex= ccgDM_getEdgeMapIndex(ss, e); + + for(i = 0; i < edgeSize - 1; i++, a++) + origindex[a]= mapIndex; + } + + return origindex; + } + + return DM_get_edge_data_layer(dm, type); +} + +static void *ccgDM_get_face_data_layer(DerivedMesh *dm, int type) +{ + if(type == CD_ORIGINDEX) { + /* create origindex on demand to save memory */ + CCGDerivedMesh *ccgdm= (CCGDerivedMesh*)dm; + CCGSubSurf *ss= ccgdm->ss; + int *origindex; + int a, i, index, totface; + int gridFaces = ccgSubSurf_getGridSize(ss) - 1; + + DM_add_face_layer(dm, CD_ORIGINDEX, CD_CALLOC, NULL); + origindex= DM_get_face_data_layer(dm, CD_ORIGINDEX); + + totface= ccgSubSurf_getNumFaces(ss); + + for(a=0, index=0; indexfaceMap[index].face; + int numVerts = ccgSubSurf_getFaceNumVerts(f); + int mapIndex = ccgDM_getFaceMapIndex(ss, f); + + for(i=0; iss); + numGrids= 0; + + for(index=0; indexfaceMap[index].face; + numGrids += ccgSubSurf_getFaceNumVerts(f); + } + + return numGrids; +} + +static int ccgDM_getGridSize(DerivedMesh *dm) +{ + CCGDerivedMesh *ccgdm= (CCGDerivedMesh*)dm; + return ccgSubSurf_getGridSize(ccgdm->ss); +} + +static int ccgdm_adjacent_grid(CCGSubSurf *ss, int *gridOffset, CCGFace *f, int S, int offset) +{ + CCGFace *adjf; + CCGEdge *e; + int i, j= 0, numFaces, fIndex, numEdges= 0; + + e = ccgSubSurf_getFaceEdge(ss, f, S); + numFaces = ccgSubSurf_getEdgeNumFaces(e); + + if(numFaces != 2) + return -1; + + for(i = 0; i < numFaces; i++) { + adjf = ccgSubSurf_getEdgeFace(e, i); + + if(adjf != f) { + numEdges = ccgSubSurf_getFaceNumVerts(adjf); + for(j = 0; j < numEdges; j++) + if(ccgSubSurf_getFaceEdge(ss, adjf, j) == e) + break; + + if(j != numEdges) + break; + } + } + + fIndex = GET_INT_FROM_POINTER(ccgSubSurf_getFaceFaceHandle(ss, adjf)); + + return gridOffset[fIndex] + (j + offset)%numEdges; +} + +static void ccgdm_create_grids(DerivedMesh *dm) +{ + CCGDerivedMesh *ccgdm= (CCGDerivedMesh*)dm; + CCGSubSurf *ss= ccgdm->ss; + DMGridData **gridData; + DMGridAdjacency *gridAdjacency, *adj; + CCGFace **gridFaces; + int *gridOffset; + int index, numFaces, numGrids, S, gIndex, gridSize; + + if(ccgdm->gridData) + return; + + numGrids = ccgDM_getNumGrids(dm); + numFaces = ccgSubSurf_getNumFaces(ss); + gridSize = ccgDM_getGridSize(dm); + + /* compute offset into grid array for each face */ + gridOffset = MEM_mallocN(sizeof(int)*numFaces, "ccgdm.gridOffset"); + + for(gIndex = 0, index = 0; index < numFaces; index++) { + CCGFace *f = ccgdm->faceMap[index].face; + int numVerts = ccgSubSurf_getFaceNumVerts(f); + + gridOffset[index] = gIndex; + gIndex += numVerts; + } + + /* compute grid data */ + gridData = MEM_mallocN(sizeof(DMGridData*)*numGrids, "ccgdm.gridData"); + gridAdjacency = MEM_mallocN(sizeof(DMGridAdjacency)*numGrids, "ccgdm.gridAdjacency"); + gridFaces = MEM_mallocN(sizeof(CCGFace*)*numGrids, "ccgdm.gridFaces"); + + for(gIndex = 0, index = 0; index < numFaces; index++) { + CCGFace *f = ccgdm->faceMap[index].face; + int numVerts = ccgSubSurf_getFaceNumVerts(f); + + for(S = 0; S < numVerts; S++, gIndex++) { + int prevS = (S - 1 + numVerts) % numVerts; + int nextS = (S + 1 + numVerts) % numVerts; + + gridData[gIndex] = ccgSubSurf_getFaceGridDataArray(ss, f, S); + gridFaces[gIndex] = f; + + adj = &gridAdjacency[gIndex]; + + adj->index[0] = gIndex - S + nextS; + adj->rotation[0] = 3; + adj->index[1] = ccgdm_adjacent_grid(ss, gridOffset, f, prevS, 0); + adj->rotation[1] = 1; + adj->index[2] = ccgdm_adjacent_grid(ss, gridOffset, f, S, 1); + adj->rotation[2] = 3; + adj->index[3] = gIndex - S + prevS; + adj->rotation[3] = 1; + } + } + + ccgdm->gridData = gridData; + ccgdm->gridFaces = gridFaces; + ccgdm->gridAdjacency = gridAdjacency; + ccgdm->gridOffset = gridOffset; +} + +static DMGridData **ccgDM_getGridData(DerivedMesh *dm) +{ + CCGDerivedMesh *ccgdm= (CCGDerivedMesh*)dm; + + ccgdm_create_grids(dm); + return ccgdm->gridData; +} + +static DMGridAdjacency *ccgDM_getGridAdjacency(DerivedMesh *dm) +{ + CCGDerivedMesh *ccgdm= (CCGDerivedMesh*)dm; + + ccgdm_create_grids(dm); + return ccgdm->gridAdjacency; +} + +static int *ccgDM_getGridOffset(DerivedMesh *dm) +{ + CCGDerivedMesh *ccgdm= (CCGDerivedMesh*)dm; + + ccgdm_create_grids(dm); + return ccgdm->gridOffset; +} + +static struct PBVH *ccgDM_getPBVH(Object *ob, DerivedMesh *dm) +{ + CCGDerivedMesh *ccgdm= (CCGDerivedMesh*)dm; + int gridSize, numGrids; + + if(ccgdm->pbvh) + return ccgdm->pbvh; + + if(ccgdm->multires.mmd) { + ccgdm_create_grids(dm); + + gridSize = ccgDM_getGridSize(dm); + numGrids = ccgDM_getNumGrids(dm); + + ccgdm->pbvh = BLI_pbvh_new(); + BLI_pbvh_build_grids(ccgdm->pbvh, ccgdm->gridData, ccgdm->gridAdjacency, + numGrids, gridSize, (void**)ccgdm->gridFaces); + } + else if(ob->type == OB_MESH) { + Mesh *me= ob->data; + + ccgdm->pbvh = BLI_pbvh_new(); + BLI_pbvh_build_mesh(ccgdm->pbvh, me->mface, me->mvert, + me->totface, me->totvert); + } + + return ccgdm->pbvh; +} + static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss, int drawInteriorEdges, int useSubsurfUv, @@ -2268,17 +2215,14 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss, int index, totvert, totedge, totface; int i; int vertNum, edgeNum, faceNum; - int *vertOrigIndex, *faceOrigIndex; /* *edgeOrigIndex - as yet, unused */ - int *edgeFlags; + short *edgeFlags; char *faceFlags; int edgeSize; int gridSize; int gridFaces; int gridSideVerts; - /*int gridInternalVerts; - as yet unused */ int gridSideEdges; int gridInternalEdges; - /* MVert *mvert = NULL; - as yet unused */ MEdge *medge = NULL; MFace *mface = NULL; FaceVertWeight *qweight, *tweight; @@ -2286,11 +2230,6 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss, DM_from_template(&ccgdm->dm, dm, ccgSubSurf_getNumFinalVerts(ss), ccgSubSurf_getNumFinalEdges(ss), ccgSubSurf_getNumFinalFaces(ss)); - DM_add_face_layer(&ccgdm->dm, CD_FLAGS, CD_CALLOC, NULL); - DM_add_edge_layer(&ccgdm->dm, CD_FLAGS, CD_CALLOC, NULL); - - CustomData_set_layer_flag(&ccgdm->dm.faceData, CD_FLAGS, CD_FLAG_NOCOPY); - CustomData_set_layer_flag(&ccgdm->dm.edgeData, CD_FLAGS, CD_FLAG_NOCOPY); ccgdm->dm.getMinMax = ccgDM_getMinMax; ccgdm->dm.getNumVerts = ccgDM_getNumVerts; @@ -2306,9 +2245,15 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss, ccgdm->dm.getVertData = DM_get_vert_data; ccgdm->dm.getEdgeData = DM_get_edge_data; ccgdm->dm.getFaceData = DM_get_face_data; - ccgdm->dm.getVertDataArray = DM_get_vert_data_layer; - ccgdm->dm.getEdgeDataArray = DM_get_edge_data_layer; - ccgdm->dm.getFaceDataArray = DM_get_face_data_layer; + ccgdm->dm.getVertDataArray = ccgDM_get_vert_data_layer; + ccgdm->dm.getEdgeDataArray = ccgDM_get_edge_data_layer; + ccgdm->dm.getFaceDataArray = ccgDM_get_face_data_layer; + ccgdm->dm.getNumGrids = ccgDM_getNumGrids; + ccgdm->dm.getGridSize = ccgDM_getGridSize; + ccgdm->dm.getGridData = ccgDM_getGridData; + ccgdm->dm.getGridAdjacency = ccgDM_getGridAdjacency; + ccgdm->dm.getGridOffset = ccgDM_getGridOffset; + ccgdm->dm.getPBVH = ccgDM_getPBVH; ccgdm->dm.getVertCos = ccgdm_getVertCos; ccgdm->dm.foreachMappedVert = ccgDM_foreachMappedVert; @@ -2383,17 +2328,12 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss, medge = dm->getEdgeArray(dm); mface = dm->getFaceArray(dm); - vertOrigIndex = DM_get_vert_data_layer(&ccgdm->dm, CD_ORIGINDEX); - /*edgeOrigIndex = DM_get_edge_data_layer(&ccgdm->dm, CD_ORIGINDEX);*/ - faceOrigIndex = DM_get_face_data_layer(&ccgdm->dm, CD_ORIGINDEX); - - faceFlags = DM_get_face_data_layer(&ccgdm->dm, CD_FLAGS); + faceFlags = ccgdm->faceFlags = MEM_callocN(sizeof(char)*2*totface, "faceFlags"); for(index = 0; index < totface; ++index) { CCGFace *f = ccgdm->faceMap[index].face; int numVerts = ccgSubSurf_getFaceNumVerts(f); int numFinalEdges = numVerts * (gridSideEdges + gridInternalEdges); - int mapIndex = ccgDM_getFaceMapIndex(ss, f); int origIndex = GET_INT_FROM_POINTER(ccgSubSurf_getFaceFaceHandle(ss, f)); FaceVertWeight *weight = (numVerts == 4) ? qweight : tweight; int S, x, y; @@ -2414,8 +2354,6 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss, DM_interp_vert_data(dm, &ccgdm->dm, vertIdx, weight[0][0], numVerts, vertNum); - *vertOrigIndex = ORIGINDEX_NONE; - ++vertOrigIndex; ++vertNum; for(S = 0; S < numVerts; S++) { @@ -2430,8 +2368,6 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss, w[otherS] = weight[x][0][3]; DM_interp_vert_data(dm, &ccgdm->dm, vertIdx, w, numVerts, vertNum); - *vertOrigIndex = ORIGINDEX_NONE; - ++vertOrigIndex; ++vertNum; } } @@ -2449,17 +2385,11 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss, w[otherS] = weight[y * gridFaces + x][0][3]; DM_interp_vert_data(dm, &ccgdm->dm, vertIdx, w, numVerts, vertNum); - *vertOrigIndex = ORIGINDEX_NONE; - ++vertOrigIndex; ++vertNum; } } } - for(i = 0; i < numFinalEdges; ++i) - *(int *)DM_get_edge_data(&ccgdm->dm, edgeNum + i, - CD_ORIGINDEX) = ORIGINDEX_NONE; - for(S = 0; S < numVerts; S++) { int prevS = (S - 1 + numVerts) % numVerts; int nextS = (S + 1) % numVerts; @@ -2483,16 +2413,13 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss, &w, 1, faceNum); weight++; - *faceOrigIndex = mapIndex; - - ++faceOrigIndex; ++faceNum; } } } - faceFlags[index*4] = mface[origIndex].flag; - faceFlags[index*4 + 1] = mface[origIndex].mat_nr; + faceFlags[index*2] = mface[origIndex].flag; + faceFlags[index*2 + 1] = mface[origIndex].mat_nr; edgeNum += numFinalEdges; } @@ -2507,12 +2434,11 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss, set_subsurf_uv(ss, dm, &ccgdm->dm, i); } - edgeFlags = DM_get_edge_data_layer(&ccgdm->dm, CD_FLAGS); + edgeFlags = ccgdm->edgeFlags = MEM_callocN(sizeof(short)*totedge, "edgeFlags"); for(index = 0; index < totedge; ++index) { CCGEdge *e = ccgdm->edgeMap[index].edge; int numFinalEdges = edgeSize - 1; - int mapIndex = ccgDM_getEdgeMapIndex(ss, e); int x; int vertIdx[2]; int edgeIdx = GET_INT_FROM_POINTER(ccgSubSurf_getEdgeEdgeHandle(e)); @@ -2534,25 +2460,16 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss, w[1] = (float) x / (edgeSize - 1); w[0] = 1 - w[1]; DM_interp_vert_data(dm, &ccgdm->dm, vertIdx, w, 2, vertNum); - *vertOrigIndex = ORIGINDEX_NONE; - ++vertOrigIndex; ++vertNum; } - for(i = 0; i < numFinalEdges; ++i) { - if(edgeIdx >= 0 && edgeFlags) - edgeFlags[edgeNum + i] = medge[edgeIdx].flag; - - *(int *)DM_get_edge_data(&ccgdm->dm, edgeNum + i, - CD_ORIGINDEX) = mapIndex; - } + edgeFlags[index]= medge[edgeIdx].flag; edgeNum += numFinalEdges; } for(index = 0; index < totvert; ++index) { CCGVert *v = ccgdm->vertMap[index].vert; - int mapIndex = ccgDM_getVertMapIndex(ccgdm->ss, v); int vertIdx; vertIdx = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v)); @@ -2564,8 +2481,6 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss, DM_copy_vert_data(dm, &ccgdm->dm, vertIdx, vertNum, 1); - *vertOrigIndex = mapIndex; - ++vertOrigIndex; ++vertNum; } @@ -2577,10 +2492,9 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss, /***/ -struct DerivedMesh *subsurf_make_derived_from_derived_with_multires( +struct DerivedMesh *subsurf_make_derived_from_derived( struct DerivedMesh *dm, struct SubsurfModifierData *smd, - struct MultiresSubsurf *ms, int useRenderParams, float (*vertCos)[3], int isFinalCalc, int editMode) { @@ -2588,16 +2502,16 @@ struct DerivedMesh *subsurf_make_derived_from_derived_with_multires( int useAging = smd->flags & eSubsurfModifierFlag_DebugIncr; int useSubsurfUv = smd->flags & eSubsurfModifierFlag_SubsurfUv; int drawInteriorEdges = !(smd->flags & eSubsurfModifierFlag_ControlEdges); - DerivedMesh *result; + CCGDerivedMesh *result; if(editMode) { smd->emCache = _getSubSurf(smd->emCache, smd->levels, useAging, 0, useSimple); ss_sync_from_derivedmesh(smd->emCache, dm, vertCos, useSimple); - return (DerivedMesh *)getCCGDerivedMesh(smd->emCache, - drawInteriorEdges, - useSubsurfUv, dm); + result = getCCGDerivedMesh(smd->emCache, + drawInteriorEdges, + useSubsurfUv, dm); } else if(useRenderParams) { /* Do not use cache in render mode. */ CCGSubSurf *ss; @@ -2611,12 +2525,10 @@ struct DerivedMesh *subsurf_make_derived_from_derived_with_multires( ss_sync_from_derivedmesh(ss, dm, vertCos, useSimple); - result = ss_to_cdderivedmesh(ss, 0, drawInteriorEdges, - useSubsurfUv, dm, ms); + result = getCCGDerivedMesh(ss, + drawInteriorEdges, useSubsurfUv, dm); - ccgSubSurf_free(ss); - - return result; + result->freeSS = 1; } else { int useIncremental = (smd->flags & eSubsurfModifierFlag_Incremental); int useAging = smd->flags & eSubsurfModifierFlag_DebugIncr; @@ -2641,13 +2553,9 @@ struct DerivedMesh *subsurf_make_derived_from_derived_with_multires( ss_sync_from_derivedmesh(ss, dm, vertCos, useSimple); - - return ss_to_cdderivedmesh(ss, 0, drawInteriorEdges, - useSubsurfUv, dm, ms); - - /*return (DerivedMesh *)getCCGDerivedMesh(smd->mCache, - drawInteriorEdges, - useSubsurfUv, dm);*/ + result = getCCGDerivedMesh(smd->mCache, + drawInteriorEdges, + useSubsurfUv, dm); } else { if (smd->mCache && isFinalCalc) { ccgSubSurf_free(smd->mCache); @@ -2657,28 +2565,16 @@ struct DerivedMesh *subsurf_make_derived_from_derived_with_multires( ss = _getSubSurf(NULL, smd->levels, 0, 1, useSimple); ss_sync_from_derivedmesh(ss, dm, vertCos, useSimple); - /*smd->mCache = ss; - result = (DerivedMesh *)getCCGDerivedMesh(smd->mCache, - drawInteriorEdges, - useSubsurfUv, dm);*/ + result = getCCGDerivedMesh(ss, drawInteriorEdges, useSubsurfUv, dm); - result = ss_to_cdderivedmesh(ss, 0, drawInteriorEdges, - useSubsurfUv, dm, ms); - - ccgSubSurf_free(ss); - - return result; + if(isFinalCalc) + smd->mCache = ss; + else + result->freeSS = 1; } } -} -struct DerivedMesh *subsurf_make_derived_from_derived( - struct DerivedMesh *dm, - struct SubsurfModifierData *smd, - int useRenderParams, float (*vertCos)[3], - int isFinalCalc, int editMode) -{ - return subsurf_make_derived_from_derived_with_multires(dm, smd, NULL, useRenderParams, vertCos, isFinalCalc, editMode); + return (DerivedMesh*)result; } void subsurf_calculate_limit_positions(Mesh *me, float (*positions_r)[3]) diff --git a/source/blender/blenlib/BLI_blenlib.h b/source/blender/blenlib/BLI_blenlib.h index cb5f68ed1e0..70f15f0f3af 100644 --- a/source/blender/blenlib/BLI_blenlib.h +++ b/source/blender/blenlib/BLI_blenlib.h @@ -78,7 +78,7 @@ extern "C" { #include "BLI_string.h" -#include "BLI_util.h" +#include "BLI_path_util.h" #include "BLI_storage.h" diff --git a/source/blender/blenlib/BLI_math_geom.h b/source/blender/blenlib/BLI_math_geom.h index c50d9caade0..49d335f6c5c 100644 --- a/source/blender/blenlib/BLI_math_geom.h +++ b/source/blender/blenlib/BLI_math_geom.h @@ -85,6 +85,8 @@ int isect_ray_tri_v3(float p1[3], float d[3], float v0[3], float v1[3], float v2[3], float *lambda, float *uv); int isect_ray_tri_threshold_v3(float p1[3], float d[3], float v0[3], float v1[3], float v2[3], float *lambda, float *uv, float threshold); +int isect_ray_tri_epsilon_v3(float p1[3], float d[3], + float v0[3], float v1[3], float v2[3], float *lambda, float *uv, float epsilon); /* point in polygon */ int isect_point_tri_v2(float p[2], float a[2], float b[2], float c[2]); diff --git a/source/blender/blenlib/BLI_math_vector.h b/source/blender/blenlib/BLI_math_vector.h index 399c234a108..e915a9a85f3 100644 --- a/source/blender/blenlib/BLI_math_vector.h +++ b/source/blender/blenlib/BLI_math_vector.h @@ -131,6 +131,8 @@ float angle_normalized_v2v2(float a[2], float b[2]); float angle_v3v3(float a[2], float b[2]); float angle_v3v3v3(float a[2], float b[2], float c[2]); float angle_normalized_v3v3(float a[3], float b[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]); /********************************* Geometry **********************************/ diff --git a/source/blender/blenlib/BLI_util.h b/source/blender/blenlib/BLI_path_util.h similarity index 100% rename from source/blender/blenlib/BLI_util.h rename to source/blender/blenlib/BLI_path_util.h diff --git a/source/blender/blenlib/BLI_pbvh.h b/source/blender/blenlib/BLI_pbvh.h new file mode 100644 index 00000000000..148d9507c14 --- /dev/null +++ b/source/blender/blenlib/BLI_pbvh.h @@ -0,0 +1,219 @@ +/** + * A BVH for high poly meshes. + * + * $Id$ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#ifndef BLI_PBVH_H +#define BLI_PBVH_H + +struct MFace; +struct MVert; +struct DMGridAdjacency; +struct DMGridData; +struct PBVH; +struct PBVHNode; +struct ListBase; + +typedef struct PBVH PBVH; +typedef struct PBVHNode PBVHNode; + +/* Callbacks */ + +/* returns 1 if the search should continue from this node, 0 otherwise */ +typedef int (*BLI_pbvh_SearchCallback)(PBVHNode *node, void *data); + +typedef void (*BLI_pbvh_HitCallback)(PBVHNode *node, void *data); + +/* Building */ + +PBVH *BLI_pbvh_new(void); +void BLI_pbvh_build_mesh(PBVH *bvh, struct MFace *faces, struct MVert *verts, + int totface, int totvert); +void BLI_pbvh_build_grids(PBVH *bvh, struct DMGridData **grids, + struct DMGridAdjacency *gridadj, int totgrid, + int gridsize, void **gridfaces); +void BLI_pbvh_free(PBVH *bvh); + +/* Hierarchical Search in the BVH, two methods: + * for each hit calling a callback + * gather nodes in an array (easy to multithread) */ + +void BLI_pbvh_search_callback(PBVH *bvh, + BLI_pbvh_SearchCallback scb, void *search_data, + BLI_pbvh_HitCallback hcb, void *hit_data); + +void BLI_pbvh_search_gather(PBVH *bvh, + BLI_pbvh_SearchCallback scb, void *search_data, + PBVHNode ***array, int *tot); + +/* Raycast + the hit callback is called for all leaf nodes intersecting the ray; + it's up to the callback to find the primitive within the leaves that is + hit first */ + +void BLI_pbvh_raycast(PBVH *bvh, BLI_pbvh_HitCallback cb, void *data, + float ray_start[3], float ray_normal[3], int original); +int BLI_pbvh_node_raycast(PBVH *bvh, PBVHNode *node, float (*origco)[3], + float ray_start[3], float ray_normal[3], float *dist); + +/* Drawing */ + +void BLI_pbvh_node_draw(PBVHNode *node, void *data); +int BLI_pbvh_node_planes_contain_AABB(PBVHNode *node, void *data); +void BLI_pbvh_draw(PBVH *bvh, float (*planes)[4], float (*face_nors)[3]); + +/* Node Access */ + +typedef enum { + PBVH_Leaf = 1, + + PBVH_UpdateNormals = 2, + PBVH_UpdateBB = 4, + PBVH_UpdateOriginalBB = 8, + PBVH_UpdateDrawBuffers = 16, + PBVH_UpdateRedraw = 32 +} PBVHNodeFlags; + +void BLI_pbvh_node_mark_update(PBVHNode *node); + +void BLI_pbvh_node_get_grids(PBVH *bvh, PBVHNode *node, + int **grid_indices, int *totgrid, int *maxgrid, int *gridsize, + struct DMGridData ***griddata, struct DMGridAdjacency **gridadj); +void BLI_pbvh_node_num_verts(PBVH *bvh, PBVHNode *node, + int *uniquevert, int *totvert); +void BLI_pbvh_node_get_verts(PBVH *bvh, PBVHNode *node, + int **vert_indices, struct MVert **verts); + +void BLI_pbvh_node_get_BB(PBVHNode *node, float bb_min[3], float bb_max[3]); +void BLI_pbvh_node_get_original_BB(PBVHNode *node, float bb_min[3], float bb_max[3]); + +/* Update Normals/Bounding Box/Draw Buffers/Redraw and clear flags */ + +void BLI_pbvh_update(PBVH *bvh, int flags, float (*face_nors)[3]); +void BLI_pbvh_redraw_BB(PBVH *bvh, float bb_min[3], float bb_max[3]); +void BLI_pbvh_get_grid_updates(PBVH *bvh, int clear, void ***gridfaces, int *totface); + +/* Vertex Iterator */ + +/* this iterator has quite a lot of code, but it's designed to: + - allow the compiler to eliminate dead code and variables + - spend most of the time in the relatively simple inner loop */ + +#define PBVH_ITER_ALL 0 +#define PBVH_ITER_UNIQUE 1 + +typedef struct PBVHVertexIter { + /* iteration */ + int g; + int width; + int height; + int skip; + int gx; + int gy; + int i; + + /* grid */ + struct DMGridData **grids; + struct DMGridData *grid; + int *grid_indices; + int totgrid; + int gridsize; + + /* mesh */ + struct MVert *mverts; + int totvert; + int *vert_indices; + + /* result: these are all computed in the macro, but we assume + that compiler optimizations will skip the ones we don't use */ + struct MVert *mvert; + float *co; + short *no; + float *fno; +} PBVHVertexIter; + +#define BLI_pbvh_vertex_iter_begin(bvh, node, vi, mode) \ + { \ + struct DMGridData **grids; \ + struct MVert *verts; \ + int *grid_indices, totgrid, gridsize, *vert_indices, uniq_verts, totvert; \ + \ + memset(&vi, 0, sizeof(PBVHVertexIter)); \ + \ + BLI_pbvh_node_get_grids(bvh, node, &grid_indices, &totgrid, NULL, &gridsize, &grids, NULL); \ + BLI_pbvh_node_num_verts(bvh, node, &uniq_verts, &totvert); \ + BLI_pbvh_node_get_verts(bvh, node, &vert_indices, &verts); \ + \ + vi.grids= grids; \ + vi.grid_indices= grid_indices; \ + vi.totgrid= (grids)? totgrid: 1; \ + vi.gridsize= gridsize; \ + \ + if(mode == PBVH_ITER_ALL) \ + vi.totvert = totvert; \ + else \ + vi.totvert= uniq_verts; \ + vi.vert_indices= vert_indices; \ + vi.mverts= verts; \ + }\ + \ + for(vi.i=0, vi.g=0; vi.ggrid.offset; \ + vi.skip= subm->grid.skip; \ + vi.grid -= skip; \ + }*/ \ + } \ + else { \ + vi.width= vi.totvert; \ + vi.height= 1; \ + } \ + \ + for(vi.gy=0; vi.gyco; \ + vi.fno= vi.grid->no; \ + vi.grid++; \ + } \ + else { \ + vi.mvert= &vi.mverts[vi.vert_indices[vi.gx]]; \ + vi.co= vi.mvert->co; \ + vi.no= vi.mvert->no; \ + } \ + +#define BLI_pbvh_vertex_iter_end \ + } \ + } \ + } + + +#endif /* BLI_PBVH_H */ + diff --git a/source/blender/blenlib/CMakeLists.txt b/source/blender/blenlib/CMakeLists.txt index 4ed9eb4b007..00a5440bc75 100644 --- a/source/blender/blenlib/CMakeLists.txt +++ b/source/blender/blenlib/CMakeLists.txt @@ -28,6 +28,7 @@ FILE(GLOB SRC intern/*.c) SET(INC . ../makesdna ../blenkernel ../../../intern/guardedalloc ../include + ../gpu ${FREETYPE_INCLUDE_DIRS} ${ZLIB_INC} ) diff --git a/source/blender/blenlib/SConscript b/source/blender/blenlib/SConscript index fc586de5085..bca9399bc27 100644 --- a/source/blender/blenlib/SConscript +++ b/source/blender/blenlib/SConscript @@ -4,7 +4,7 @@ Import ('env') sources = env.Glob('intern/*.c') cflags='' -incs = '. ../makesdna ../blenkernel #/intern/guardedalloc ../editors/include' +incs = '. ../makesdna ../blenkernel #/intern/guardedalloc ../editors/include ../gpu' incs += ' ' + env['BF_FREETYPE_INC'] incs += ' ' + env['BF_ZLIB_INC'] defs = '' diff --git a/source/blender/blenlib/intern/BLI_bfile.c b/source/blender/blenlib/intern/BLI_bfile.c index d9f6c8ad96f..8e3235bbf23 100644 --- a/source/blender/blenlib/intern/BLI_bfile.c +++ b/source/blender/blenlib/intern/BLI_bfile.c @@ -41,7 +41,7 @@ #include "MEM_guardedalloc.h" #include "BKE_utildefines.h" #include "BKE_blender.h" -#include "BLI_util.h" +#include "BLI_path_util.h" #include "BLI_fileops.h" #include "BLI_storage.h" #include "BLI_bfile.h" diff --git a/source/blender/blenlib/intern/Makefile b/source/blender/blenlib/intern/Makefile index f729a4e3fe0..d8aed3ac0ed 100644 --- a/source/blender/blenlib/intern/Makefile +++ b/source/blender/blenlib/intern/Makefile @@ -50,6 +50,8 @@ CPPFLAGS += -I../../editors/include/ # path to zlib CPPFLAGS += -I$(NAN_ZLIB)/include +CPPFLAGS += -I../../gpu + ifdef NAN_PTHREADS CPPFLAGS += -I$(NAN_PTHREADS)/include endif diff --git a/source/blender/blenlib/intern/bpath.c b/source/blender/blenlib/intern/bpath.c index cadf8d2bdd1..0df9d9b8db3 100644 --- a/source/blender/blenlib/intern/bpath.c +++ b/source/blender/blenlib/intern/bpath.c @@ -60,7 +60,7 @@ #include "BKE_global.h" #include "BKE_image.h" /* so we can check the image's type */ #include "BKE_main.h" /* so we can access G.main->*.first */ -#include "BKE_sequence.h" +#include "BKE_sequencer.h" #include "BKE_text.h" /* for writing to a textblock */ #include "BKE_utildefines.h" diff --git a/source/blender/blenlib/intern/math_base.c b/source/blender/blenlib/intern/math_base.c index c5d0a1090b3..3b63b033342 100644 --- a/source/blender/blenlib/intern/math_base.c +++ b/source/blender/blenlib/intern/math_base.c @@ -100,7 +100,7 @@ float interpf(float target, float origin, float fac) * the distance gets very high, 180d would be inf, but this case isn't valid */ float shell_angle_to_dist(const float angle) { - return (angle < SMALL_NUMBER) ? 1.0f : fabsf(1.0f / cosf(angle * (M_PI/180.0f))); + return (angle < SMALL_NUMBER) ? 1.0f : fabsf(1.0f / cosf(angle)); } /* used for zoom values*/ diff --git a/source/blender/blenlib/intern/math_geom.c b/source/blender/blenlib/intern/math_geom.c index efa5876e1b0..3e714b384a7 100644 --- a/source/blender/blenlib/intern/math_geom.c +++ b/source/blender/blenlib/intern/math_geom.c @@ -458,6 +458,40 @@ int isect_ray_tri_v3(float p1[3], float d[3], float v0[3], float v1[3], float v2 return 1; } +int isect_ray_tri_epsilon_v3(float p1[3], float d[3], float v0[3], float v1[3], float v2[3], float *lambda, float *uv, float epsilon) +{ + float p[3], s[3], e1[3], e2[3], q[3]; + float a, f, u, v; + + sub_v3_v3v3(e1, v1, v0); + sub_v3_v3v3(e2, v2, v0); + + cross_v3_v3v3(p, d, e2); + a = dot_v3v3(e1, p); + if (a == 0.0f) return 0; + f = 1.0f/a; + + sub_v3_v3v3(s, p1, v0); + + cross_v3_v3v3(q, s, e1); + + u = f * dot_v3v3(s, p); + if ((u < -epsilon)||(u > 1.0f+epsilon)) return 0; + + v = f * dot_v3v3(d, q); + if ((v < -epsilon)||((u + v) > 1.0f+epsilon)) return 0; + + *lambda = f * dot_v3v3(e2, q); + if ((*lambda < 0.0f)) return 0; + + if(uv) { + uv[0]= u; + uv[1]= v; + } + + return 1; +} + int isect_ray_tri_threshold_v3(float p1[3], float d[3], float v0[3], float v1[3], float v2[3], float *lambda, float *uv, float threshold) { float p[3], s[3], e1[3], e2[3], q[3]; diff --git a/source/blender/blenlib/intern/math_vector.c b/source/blender/blenlib/intern/math_vector.c index 289d8818753..2ce4a069a48 100644 --- a/source/blender/blenlib/intern/math_vector.c +++ b/source/blender/blenlib/intern/math_vector.c @@ -205,6 +205,44 @@ float angle_normalized_v2v2(float *v1, float *v2) return 2.0f*(float)saasin(len_v2v2(v2, v1)/2.0f); } +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]; + + sub_v3_v3v3(ed1, v3, v1); + sub_v3_v3v3(ed2, v1, v2); + sub_v3_v3v3(ed3, v2, v3); + + normalize_v3(ed1); + normalize_v3(ed2); + normalize_v3(ed3); + + angles[0]= M_PI - angle_normalized_v3v3(ed1, ed2); + angles[1]= M_PI - angle_normalized_v3v3(ed2, ed3); + // face_angles[2] = M_PI - angle_normalized_v3v3(ed3, ed1); + angles[2]= M_PI - (angles[0] + angles[1]); +} + +void angle_quad_v3(float angles[4], const float v1[3], const float v2[3], const float v3[3], const float v4[3]) +{ + float ed1[3], ed2[3], ed3[3], ed4[3]; + + sub_v3_v3v3(ed1, v4, v1); + sub_v3_v3v3(ed2, v1, v2); + sub_v3_v3v3(ed3, v2, v3); + sub_v3_v3v3(ed4, v3, v4); + + normalize_v3(ed1); + normalize_v3(ed2); + normalize_v3(ed3); + normalize_v3(ed4); + + angles[0]= M_PI - angle_normalized_v3v3(ed1, ed2); + angles[1]= M_PI - angle_normalized_v3v3(ed2, ed3); + angles[2]= M_PI - angle_normalized_v3v3(ed3, ed4); + angles[3]= M_PI - angle_normalized_v3v3(ed4, ed1); +} + /********************************* Geometry **********************************/ /* Project v1 on v2 */ diff --git a/source/blender/blenlib/intern/util.c b/source/blender/blenlib/intern/path_util.c similarity index 99% rename from source/blender/blenlib/intern/util.c rename to source/blender/blenlib/intern/path_util.c index 5ff4dfe4e96..4f987fcd31e 100644 --- a/source/blender/blenlib/intern/util.c +++ b/source/blender/blenlib/intern/path_util.c @@ -1,9 +1,5 @@ -/* util.c - * - * various string, file, list operations. - * - * - * $Id$ +/** + * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** * @@ -29,7 +25,8 @@ * Contributor(s): none yet. * * ***** END GPL LICENSE BLOCK ***** - * + * + * various string, file, list operations. */ #include @@ -45,12 +42,13 @@ #include "DNA_listBase.h" #include "DNA_userdef_types.h" -#include "BLI_blenlib.h" +#include "BLI_dynamiclist.h" +#include "BLI_fileops.h" +#include "BLI_path_util.h" +#include "BLI_string.h" #include "BLI_storage.h" #include "BLI_storage_types.h" -#include "BLI_dynamiclist.h" -#include "BLI_util.h" #include "BKE_utildefines.h" diff --git a/source/blender/blenlib/intern/pbvh.c b/source/blender/blenlib/intern/pbvh.c new file mode 100644 index 00000000000..6f33fab2571 --- /dev/null +++ b/source/blender/blenlib/intern/pbvh.c @@ -0,0 +1,1303 @@ +/** + * $Id$ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include +#include +#include + +#include "MEM_guardedalloc.h" + +#include "DNA_meshdata_types.h" + +#include "BLI_math.h" +#include "BLI_ghash.h" +#include "BLI_pbvh.h" + +#include "BKE_DerivedMesh.h" +#include "BKE_mesh.h" +#include "BKE_utildefines.h" + +#include "gpu_buffers.h" + +#define LEAF_LIMIT 10000 + +//#define PERFCNTRS + +/* Bitmap */ +typedef char* BLI_bitmap; + +BLI_bitmap BLI_bitmap_new(int tot) +{ + return MEM_callocN((tot >> 3) + 1, "BLI bitmap"); +} + +int BLI_bitmap_get(BLI_bitmap b, int index) +{ + return b[index >> 3] & (1 << (index & 7)); +} + +void BLI_bitmap_set(BLI_bitmap b, int index) +{ + b[index >> 3] |= (1 << (index & 7)); +} + +void BLI_bitmap_clear(BLI_bitmap b, int index) +{ + b[index >> 3] &= ~(1 << (index & 7)); +} + +/* Axis-aligned bounding box */ +typedef struct { + float bmin[3], bmax[3]; +} BB; + +/* Axis-aligned bounding box with centroid */ +typedef struct { + float bmin[3], bmax[3], bcentroid[3]; +} BBC; + +struct PBVHNode { + /* Opaque handle for drawing code */ + void *draw_buffers; + + int *vert_indices; + + /* Voxel bounds */ + BB vb; + BB orig_vb; + + /* For internal nodes */ + int children_offset; + + /* Pointer into bvh prim_indices */ + int *prim_indices; + int *face_vert_indices; + + unsigned int totprim; + unsigned int uniq_verts, face_verts; + + char flag; +}; + +struct PBVH { + PBVHNode *nodes; + int node_mem_count, totnode; + + int *prim_indices; + int totprim; + int totvert; + + int leaf_limit; + + /* Mesh data */ + MVert *verts; + MFace *faces; + + /* Grid Data */ + DMGridData **grids; + DMGridAdjacency *gridadj; + void **gridfaces; + int totgrid; + int gridsize; + + /* Only used during BVH build and update, + don't need to remain valid after */ + BLI_bitmap vert_bitmap; + +#ifdef PERFCNTRS + int perf_modified; +#endif +}; + +#define STACK_FIXED_DEPTH 100 + +typedef struct PBVHStack { + PBVHNode *node; + int revisiting; +} PBVHStack; + +typedef struct PBVHIter { + PBVH *bvh; + BLI_pbvh_SearchCallback scb; + void *search_data; + + PBVHStack *stack; + int stacksize; + + PBVHStack stackfixed[STACK_FIXED_DEPTH]; + int stackspace; +} PBVHIter; + +static void BB_reset(BB *bb) +{ + bb->bmin[0] = bb->bmin[1] = bb->bmin[2] = FLT_MAX; + bb->bmax[0] = bb->bmax[1] = bb->bmax[2] = -FLT_MAX; +} + +/* Expand the bounding box to include a new coordinate */ +static void BB_expand(BB *bb, float co[3]) +{ + int i; + for(i = 0; i < 3; ++i) { + bb->bmin[i] = MIN2(bb->bmin[i], co[i]); + bb->bmax[i] = MAX2(bb->bmax[i], co[i]); + } +} + +/* Expand the bounding box to include another bounding box */ +static void BB_expand_with_bb(BB *bb, BB *bb2) +{ + int i; + for(i = 0; i < 3; ++i) { + bb->bmin[i] = MIN2(bb->bmin[i], bb2->bmin[i]); + bb->bmax[i] = MAX2(bb->bmax[i], bb2->bmax[i]); + } +} + +/* Return 0, 1, or 2 to indicate the widest axis of the bounding box */ +static int BB_widest_axis(BB *bb) +{ + float dim[3]; + int i; + + for(i = 0; i < 3; ++i) + dim[i] = bb->bmax[i] - bb->bmin[i]; + + if(dim[0] > dim[1]) { + if(dim[0] > dim[2]) + return 0; + else + return 2; + } + else { + if(dim[1] > dim[2]) + return 1; + else + return 2; + } +} + +static void BBC_update_centroid(BBC *bbc) +{ + int i; + for(i = 0; i < 3; ++i) + bbc->bcentroid[i] = (bbc->bmin[i] + bbc->bmax[i]) * 0.5f; +} + +/* Not recursive */ +static void update_node_vb(PBVH *bvh, PBVHNode *node) +{ + BB vb; + + BB_reset(&vb); + + if(node->flag & PBVH_Leaf) { + PBVHVertexIter vd; + + BLI_pbvh_vertex_iter_begin(bvh, node, vd, PBVH_ITER_ALL) { + BB_expand(&vb, vd.co); + } + BLI_pbvh_vertex_iter_end; + } + else { + BB_expand_with_bb(&vb, + &bvh->nodes[node->children_offset].vb); + BB_expand_with_bb(&vb, + &bvh->nodes[node->children_offset + 1].vb); + } + + node->vb= vb; +} + +/* Adapted from BLI_kdopbvh.c */ +/* Returns the index of the first element on the right of the partition */ +static int partition_indices(int *prim_indices, int lo, int hi, int axis, + float mid, BBC *prim_bbc) +{ + int i=lo, j=hi; + for(;;) { + for(; prim_bbc[prim_indices[i]].bcentroid[axis] < mid; i++); + for(; mid < prim_bbc[prim_indices[j]].bcentroid[axis]; j--); + + if(!(i < j)) + return i; + + SWAP(int, prim_indices[i], prim_indices[j]); + i++; + } +} + +void check_partitioning(int *prim_indices, int lo, int hi, int axis, + float mid, BBC *prim_bbc, int index_of_2nd_partition) +{ + int i; + for(i = lo; i <= hi; ++i) { + const float c = prim_bbc[prim_indices[i]].bcentroid[axis]; + + if((i < index_of_2nd_partition && c > mid) || + (i > index_of_2nd_partition && c < mid)) { + printf("fail\n"); + } + } +} + +static void grow_nodes(PBVH *bvh, int totnode) +{ + if(totnode > bvh->node_mem_count) { + PBVHNode *prev = bvh->nodes; + bvh->node_mem_count *= 1.33; + if(bvh->node_mem_count < totnode) + bvh->node_mem_count = totnode; + bvh->nodes = MEM_callocN(sizeof(PBVHNode) * bvh->node_mem_count, + "bvh nodes"); + memcpy(bvh->nodes, prev, bvh->totnode * sizeof(PBVHNode)); + MEM_freeN(prev); + } + + bvh->totnode = totnode; +} + +/* Add a vertex to the map, with a positive value for unique vertices and + a negative value for additional vertices */ +static int map_insert_vert(PBVH *bvh, GHash *map, + unsigned int *face_verts, + unsigned int *uniq_verts, int vertex) +{ + void *value, *key = SET_INT_IN_POINTER(vertex); + + if(!BLI_ghash_haskey(map, key)) { + if(BLI_bitmap_get(bvh->vert_bitmap, vertex)) { + value = SET_INT_IN_POINTER(-(*face_verts) - 1); + ++(*face_verts); + } + else { + BLI_bitmap_set(bvh->vert_bitmap, vertex); + value = SET_INT_IN_POINTER(*uniq_verts); + ++(*uniq_verts); + } + + BLI_ghash_insert(map, key, value); + return GET_INT_FROM_POINTER(value); + } + else + return GET_INT_FROM_POINTER(BLI_ghash_lookup(map, key)); +} + +/* Find vertices used by the faces in this node and update the draw buffers */ +static void build_mesh_leaf_node(PBVH *bvh, PBVHNode *node) +{ + GHashIterator *iter; + GHash *map; + int i, j, totface; + + map = BLI_ghash_new(BLI_ghashutil_inthash, BLI_ghashutil_intcmp); + + node->uniq_verts = node->face_verts = 0; + totface= node->totprim; + + node->face_vert_indices = MEM_callocN(sizeof(int) * + 4*totface, "bvh node face vert indices"); + + for(i = 0; i < totface; ++i) { + MFace *f = bvh->faces + node->prim_indices[i]; + int sides = f->v4 ? 4 : 3; + + for(j = 0; j < sides; ++j) { + node->face_vert_indices[i*4 + j]= + map_insert_vert(bvh, map, &node->face_verts, + &node->uniq_verts, (&f->v1)[j]); + } + } + + node->vert_indices = MEM_callocN(sizeof(int) * + (node->uniq_verts + node->face_verts), + "bvh node vert indices"); + + /* Build the vertex list, unique verts first */ + for(iter = BLI_ghashIterator_new(map), i = 0; + !BLI_ghashIterator_isDone(iter); + BLI_ghashIterator_step(iter), ++i) { + void *value = BLI_ghashIterator_getValue(iter); + int ndx = GET_INT_FROM_POINTER(value); + + if(ndx < 0) + ndx = -ndx + node->uniq_verts - 1; + + node->vert_indices[ndx] = + GET_INT_FROM_POINTER(BLI_ghashIterator_getKey(iter)); + } + + for(i = 0; i < totface*4; ++i) + if(node->face_vert_indices[i] < 0) + node->face_vert_indices[i]= -node->face_vert_indices[i] + node->uniq_verts - 1; + + node->draw_buffers = + GPU_build_mesh_buffers(map, bvh->verts, bvh->faces, + node->prim_indices, + node->totprim, node->vert_indices, + node->uniq_verts, + node->uniq_verts + node->face_verts); + + BLI_ghash_free(map, NULL, NULL); +} + +static void build_grids_leaf_node(PBVH *bvh, PBVHNode *node) +{ + node->draw_buffers = + GPU_build_grid_buffers(bvh->grids, node->prim_indices, + node->totprim, bvh->gridsize); +} + +/* Recursively build a node in the tree + + vb is the voxel box around all of the primitives contained in + this node. + + cb is the bounding box around all the centroids of the primitives + contained in this node + + offset and start indicate a range in the array of primitive indices +*/ + +void build_sub(PBVH *bvh, int node_index, BB *cb, BBC *prim_bbc, + int offset, int count) +{ + int i, axis, end; + BB cb_backing; + + /* Decide whether this is a leaf or not */ + // XXX adapt leaf limit for grids + if(count <= bvh->leaf_limit) { + bvh->nodes[node_index].flag |= PBVH_Leaf; + + bvh->nodes[node_index].prim_indices = bvh->prim_indices + offset; + bvh->nodes[node_index].totprim = count; + + /* Still need vb for searches */ + BB_reset(&bvh->nodes[node_index].vb); + for(i = offset + count - 1; i >= offset; --i) { + BB_expand_with_bb(&bvh->nodes[node_index].vb, + (BB*)(prim_bbc + + bvh->prim_indices[i])); + } + + if(bvh->faces) + build_mesh_leaf_node(bvh, bvh->nodes + node_index); + else + build_grids_leaf_node(bvh, bvh->nodes + node_index); + bvh->nodes[node_index].orig_vb= bvh->nodes[node_index].vb; + + /* Done with this subtree */ + return; + } + else { + BB_reset(&bvh->nodes[node_index].vb); + bvh->nodes[node_index].children_offset = bvh->totnode; + grow_nodes(bvh, bvh->totnode + 2); + + if(!cb) { + cb = &cb_backing; + BB_reset(cb); + for(i = offset + count - 1; i >= offset; --i) + BB_expand(cb, prim_bbc[bvh->prim_indices[i]].bcentroid); + } + } + + axis = BB_widest_axis(cb); + + for(i = offset + count - 1; i >= offset; --i) { + BB_expand_with_bb(&bvh->nodes[node_index].vb, + (BB*)(prim_bbc + bvh->prim_indices[i])); + } + + bvh->nodes[node_index].orig_vb= bvh->nodes[node_index].vb; + + end = partition_indices(bvh->prim_indices, offset, offset + count - 1, + axis, + (cb->bmax[axis] + cb->bmin[axis]) * 0.5f, + prim_bbc); + check_partitioning(bvh->prim_indices, offset, offset + count - 1, + axis, + (cb->bmax[axis] + cb->bmin[axis]) * 0.5f, + prim_bbc, end); + + build_sub(bvh, bvh->nodes[node_index].children_offset, NULL, + prim_bbc, offset, end - offset); + build_sub(bvh, bvh->nodes[node_index].children_offset + 1, NULL, + prim_bbc, end, offset + count - end); +} + +static void pbvh_build(PBVH *bvh, BB *cb, BBC *prim_bbc, int totprim) +{ + int i; + + if(totprim != bvh->totprim) { + bvh->totprim = totprim; + if(bvh->nodes) MEM_freeN(bvh->nodes); + if(bvh->prim_indices) MEM_freeN(bvh->prim_indices); + bvh->prim_indices = MEM_callocN(sizeof(int) * totprim, + "bvh prim indices"); + for(i = 0; i < totprim; ++i) + bvh->prim_indices[i] = i; + bvh->totnode = 0; + if(bvh->node_mem_count < 100) { + bvh->node_mem_count = 100; + bvh->nodes = MEM_callocN(sizeof(PBVHNode) * + bvh->node_mem_count, + "bvh initial nodes"); + } + } + + bvh->totnode = 1; + build_sub(bvh, 0, cb, prim_bbc, 0, totprim); +} + +/* Do a full rebuild with on Mesh data structure */ +void BLI_pbvh_build_mesh(PBVH *bvh, MFace *faces, MVert *verts, int totface, int totvert) +{ + BBC *prim_bbc = NULL; + BB cb; + int i, j; + + bvh->faces = faces; + bvh->verts = verts; + bvh->vert_bitmap = BLI_bitmap_new(totvert); + bvh->totvert = totvert; + bvh->leaf_limit = LEAF_LIMIT; + + BB_reset(&cb); + + /* For each face, store the AABB and the AABB centroid */ + prim_bbc = MEM_mallocN(sizeof(BBC) * totface, "prim_bbc"); + + for(i = 0; i < totface; ++i) { + MFace *f = faces + i; + const int sides = f->v4 ? 4 : 3; + BBC *bbc = prim_bbc + i; + + BB_reset((BB*)bbc); + + for(j = 0; j < sides; ++j) + BB_expand((BB*)bbc, verts[(&f->v1)[j]].co); + + BBC_update_centroid(bbc); + + BB_expand(&cb, bbc->bcentroid); + } + + if(totface) + pbvh_build(bvh, &cb, prim_bbc, totface); + + MEM_freeN(prim_bbc); + MEM_freeN(bvh->vert_bitmap); +} + +/* Do a full rebuild with on Grids data structure */ +void BLI_pbvh_build_grids(PBVH *bvh, DMGridData **grids, DMGridAdjacency *gridadj, + int totgrid, int gridsize, void **gridfaces) +{ + BBC *prim_bbc = NULL; + BB cb; + int i, j; + + bvh->grids= grids; + bvh->gridadj= gridadj; + bvh->gridfaces= gridfaces; + bvh->totgrid= totgrid; + bvh->gridsize= gridsize; + bvh->leaf_limit = MAX2(LEAF_LIMIT/((gridsize-1)*(gridsize-1)), 1); + + BB_reset(&cb); + + /* For each grid, store the AABB and the AABB centroid */ + prim_bbc = MEM_mallocN(sizeof(BBC) * totgrid, "prim_bbc"); + + for(i = 0; i < totgrid; ++i) { + DMGridData *grid= grids[i]; + BBC *bbc = prim_bbc + i; + + BB_reset((BB*)bbc); + + for(j = 0; j < gridsize*gridsize; ++j) + BB_expand((BB*)bbc, grid[j].co); + + BBC_update_centroid(bbc); + + BB_expand(&cb, bbc->bcentroid); + } + + if(totgrid) + pbvh_build(bvh, &cb, prim_bbc, totgrid); + + MEM_freeN(prim_bbc); +} + +PBVH *BLI_pbvh_new(void) +{ + PBVH *bvh = MEM_callocN(sizeof(PBVH), "pbvh"); + + return bvh; +} + +void BLI_pbvh_free(PBVH *bvh) +{ + PBVHNode *node; + int i; + + for(i = 0; i < bvh->totnode; ++i) { + node= &bvh->nodes[i]; + + if(node->flag & PBVH_Leaf) { + if(node->draw_buffers) + GPU_free_buffers(node->draw_buffers); + if(node->vert_indices) + MEM_freeN(node->vert_indices); + if(node->face_vert_indices) + MEM_freeN(node->face_vert_indices); + } + } + + MEM_freeN(bvh->nodes); + MEM_freeN(bvh->prim_indices); + MEM_freeN(bvh); +} + +static void pbvh_iter_begin(PBVHIter *iter, PBVH *bvh, BLI_pbvh_SearchCallback scb, void *search_data) +{ + iter->bvh= bvh; + iter->scb= scb; + iter->search_data= search_data; + + iter->stack= iter->stackfixed; + iter->stackspace= STACK_FIXED_DEPTH; + + iter->stack[0].node= bvh->nodes; + iter->stack[0].revisiting= 0; + iter->stacksize= 1; +} + +static void pbvh_iter_end(PBVHIter *iter) +{ + if(iter->stackspace > STACK_FIXED_DEPTH) + MEM_freeN(iter->stack); +} + +static void pbvh_stack_push(PBVHIter *iter, PBVHNode *node, int revisiting) +{ + if(iter->stacksize == iter->stackspace) { + PBVHStack *newstack; + + iter->stackspace *= 2; + newstack= MEM_callocN(sizeof(PBVHStack)*iter->stackspace, "PBVHStack"); + memcpy(newstack, iter->stack, sizeof(PBVHStack)*iter->stacksize); + + if(iter->stackspace > STACK_FIXED_DEPTH) + MEM_freeN(iter->stack); + iter->stack= newstack; + } + + iter->stack[iter->stacksize].node= node; + iter->stack[iter->stacksize].revisiting= revisiting; + iter->stacksize++; +} + +static PBVHNode *pbvh_iter_next(PBVHIter *iter) +{ + PBVHNode *node; + int revisiting; + void *search_data; + + /* purpose here is to traverse tree, visiting child nodes before their + parents, this order is necessary for e.g. computing bounding boxes */ + + while(iter->stacksize) { + /* pop node */ + iter->stacksize--; + node= iter->stack[iter->stacksize].node; + revisiting= iter->stack[iter->stacksize].revisiting; + + /* revisiting node already checked */ + if(revisiting) + return node; + + /* check search callback */ + search_data= iter->search_data; + + if(iter->scb && !iter->scb(node, search_data)) + continue; /* don't traverse, outside of search zone */ + + if(node->flag & PBVH_Leaf) { + /* immediately hit leaf node */ + return node; + } + else { + /* come back later when children are done */ + pbvh_stack_push(iter, node, 1); + + /* push two child nodes on the stack */ + pbvh_stack_push(iter, iter->bvh->nodes+node->children_offset+1, 0); + pbvh_stack_push(iter, iter->bvh->nodes+node->children_offset, 0); + } + } + + return NULL; +} + +void BLI_pbvh_search_gather(PBVH *bvh, + BLI_pbvh_SearchCallback scb, void *search_data, + PBVHNode ***r_array, int *r_tot) +{ + PBVHIter iter; + PBVHNode **array= NULL, **newarray, *node; + int tot= 0, space= 0; + + pbvh_iter_begin(&iter, bvh, scb, search_data); + + while((node=pbvh_iter_next(&iter))) { + if(node->flag & PBVH_Leaf) { + if(tot == space) { + /* resize array if needed */ + space= (tot == 0)? 32: space*2; + newarray= MEM_callocN(sizeof(PBVHNode)*space, "PBVHNodeSearch"); + + if(array) { + memcpy(newarray, array, sizeof(PBVHNode)*tot); + MEM_freeN(array); + } + + array= newarray; + } + + array[tot]= node; + tot++; + } + } + + pbvh_iter_end(&iter); + + *r_array= array; + *r_tot= tot; +} + +void BLI_pbvh_search_callback(PBVH *bvh, + BLI_pbvh_SearchCallback scb, void *search_data, + BLI_pbvh_HitCallback hcb, void *hit_data) +{ + PBVHIter iter; + PBVHNode *node; + + pbvh_iter_begin(&iter, bvh, scb, search_data); + + while((node=pbvh_iter_next(&iter))) + if(node->flag & PBVH_Leaf) + hcb(node, hit_data); + + pbvh_iter_end(&iter); +} + +static int update_search_cb(PBVHNode *node, void *data_v) +{ + int flag= GET_INT_FROM_POINTER(data_v); + + if(node->flag & PBVH_Leaf) + return (node->flag & flag); + + return 1; +} + +static void pbvh_update_normals(PBVH *bvh, PBVHNode **nodes, + int totnode, float (*face_nors)[3]) +{ + float (*vnor)[3]; + int n; + + if(bvh->grids) + return; + + /* could be per node to save some memory, but also means + 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. + */ + + #pragma omp parallel for private(n) schedule(static) + for(n = 0; n < totnode; n++) { + PBVHNode *node= nodes[n]; + + if((node->flag & PBVH_UpdateNormals)) { + int i, j, totface, *faces; + + faces= node->prim_indices; + totface= node->totprim; + + for(i = 0; i < totface; ++i) { + MFace *f= bvh->faces + faces[i]; + float fn[3]; + unsigned int *fv = &f->v1; + int sides= (f->v4)? 4: 3; + + if(f->v4) + normal_quad_v3(fn, bvh->verts[f->v1].co, bvh->verts[f->v2].co, + bvh->verts[f->v3].co, bvh->verts[f->v4].co); + else + normal_tri_v3(fn, bvh->verts[f->v1].co, bvh->verts[f->v2].co, + bvh->verts[f->v3].co); + + for(j = 0; j < sides; ++j) { + int v= fv[j]; + + if(bvh->verts[v].flag & ME_VERT_PBVH_UPDATE) { + /* this seems like it could be very slow but profile + does not show this, so just leave it for now? */ + #pragma omp atomic + vnor[v][0] += fn[0]; + #pragma omp atomic + vnor[v][1] += fn[1]; + #pragma omp atomic + vnor[v][2] += fn[2]; + } + } + + if(face_nors) + copy_v3_v3(face_nors[faces[i]], fn); + } + } + } + + #pragma omp parallel for private(n) schedule(static) + for(n = 0; n < totnode; n++) { + PBVHNode *node= nodes[n]; + + if(node->flag & PBVH_UpdateNormals) { + int i, *verts, totvert; + + verts= node->vert_indices; + totvert= node->uniq_verts; + + for(i = 0; i < totvert; ++i) { + const int v = verts[i]; + MVert *mvert= &bvh->verts[v]; + + if(mvert->flag & ME_VERT_PBVH_UPDATE) { + float no[3]; + + copy_v3_v3(no, vnor[v]); + normalize_v3(no); + + mvert->no[0] = (short)(no[0]*32767.0f); + mvert->no[1] = (short)(no[1]*32767.0f); + mvert->no[2] = (short)(no[2]*32767.0f); + + mvert->flag &= ~ME_VERT_PBVH_UPDATE; + } + } + + node->flag &= ~PBVH_UpdateNormals; + } + } + + MEM_freeN(vnor); +} + +static void pbvh_update_BB_redraw(PBVH *bvh, PBVHNode **nodes, + int totnode, int flag) +{ + int n; + + /* update BB, redraw flag */ + #pragma omp parallel for private(n) schedule(static) + for(n = 0; n < totnode; n++) { + PBVHNode *node= nodes[n]; + + if((flag & PBVH_UpdateBB) && (node->flag & PBVH_UpdateBB)) + /* don't clear flag yet, leave it for flushing later */ + update_node_vb(bvh, node); + + if((flag & PBVH_UpdateOriginalBB) && (node->flag & PBVH_UpdateOriginalBB)) + node->orig_vb= node->vb; + + if((flag & PBVH_UpdateRedraw) && (node->flag & PBVH_UpdateRedraw)) + node->flag &= ~PBVH_UpdateRedraw; + } +} + +static void pbvh_update_draw_buffers(PBVH *bvh, PBVHNode **nodes, int totnode) +{ + PBVHNode *node; + int n; + + /* can't be done in parallel with OpenGL */ + for(n = 0; n < totnode; n++) { + node= nodes[n]; + + if(node->flag & PBVH_UpdateDrawBuffers) { + if(bvh->grids) { + GPU_update_grid_buffers(node->draw_buffers, + bvh->grids, + node->prim_indices, + node->totprim, + bvh->gridsize); + } + else { + GPU_update_mesh_buffers(node->draw_buffers, + bvh->verts, + node->vert_indices, + node->uniq_verts + + node->face_verts); + } + + node->flag &= ~PBVH_UpdateDrawBuffers; + } + } +} + +static int pbvh_flush_bb(PBVH *bvh, PBVHNode *node, int flag) +{ + int update= 0; + + /* difficult to multithread well, we just do single threaded recursive */ + if(node->flag & PBVH_Leaf) { + if(flag & PBVH_UpdateBB) { + update |= (node->flag & PBVH_UpdateBB); + node->flag &= ~PBVH_UpdateBB; + } + + if(flag & PBVH_UpdateOriginalBB) { + update |= (node->flag & PBVH_UpdateOriginalBB); + node->flag &= ~PBVH_UpdateOriginalBB; + } + + return update; + } + else { + update |= pbvh_flush_bb(bvh, bvh->nodes + node->children_offset, flag); + update |= pbvh_flush_bb(bvh, bvh->nodes + node->children_offset + 1, flag); + + if(update & PBVH_UpdateBB) + update_node_vb(bvh, node); + if(update & PBVH_UpdateOriginalBB) + node->orig_vb= node->vb; + } + + return update; +} + +void BLI_pbvh_update(PBVH *bvh, int flag, float (*face_nors)[3]) +{ + PBVHNode **nodes; + int totnode; + + BLI_pbvh_search_gather(bvh, update_search_cb, SET_INT_IN_POINTER(flag), + &nodes, &totnode); + + if(flag & PBVH_UpdateNormals) + pbvh_update_normals(bvh, nodes, totnode, face_nors); + + if(flag & (PBVH_UpdateBB|PBVH_UpdateOriginalBB|PBVH_UpdateRedraw)) + pbvh_update_BB_redraw(bvh, nodes, totnode, flag); + + if(flag & PBVH_UpdateDrawBuffers) + pbvh_update_draw_buffers(bvh, nodes, totnode); + + if(flag & (PBVH_UpdateBB|PBVH_UpdateOriginalBB)) + pbvh_flush_bb(bvh, bvh->nodes, flag); + + if(nodes) MEM_freeN(nodes); +} + +void BLI_pbvh_redraw_BB(PBVH *bvh, float bb_min[3], float bb_max[3]) +{ + PBVHIter iter; + PBVHNode *node; + BB bb; + + BB_reset(&bb); + + pbvh_iter_begin(&iter, bvh, NULL, NULL); + + while((node=pbvh_iter_next(&iter))) + if(node->flag & PBVH_UpdateRedraw) + BB_expand_with_bb(&bb, &node->vb); + + pbvh_iter_end(&iter); + + copy_v3_v3(bb_min, bb.bmin); + copy_v3_v3(bb_max, bb.bmax); +} + +void BLI_pbvh_get_grid_updates(PBVH *bvh, int clear, void ***gridfaces, int *totface) +{ + PBVHIter iter; + PBVHNode *node; + GHashIterator *hiter; + GHash *map; + void *face, **faces; + int i, tot; + + map = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp); + + pbvh_iter_begin(&iter, bvh, NULL, NULL); + + while((node=pbvh_iter_next(&iter))) { + if(node->flag & PBVH_UpdateNormals) { + for(i = 0; i < node->totprim; ++i) { + face= bvh->gridfaces[node->prim_indices[i]]; + if(!BLI_ghash_lookup(map, face)) + BLI_ghash_insert(map, face, face); + } + + if(clear) + node->flag &= ~PBVH_UpdateNormals; + } + } + + pbvh_iter_end(&iter); + + tot= BLI_ghash_size(map); + if(tot == 0) { + *totface= 0; + *gridfaces= NULL; + BLI_ghash_free(map, NULL, NULL); + return; + } + + faces= MEM_callocN(sizeof(void*)*tot, "PBVH Grid Faces"); + + for(hiter = BLI_ghashIterator_new(map), i = 0; + !BLI_ghashIterator_isDone(hiter); + BLI_ghashIterator_step(hiter), ++i) + faces[i]= BLI_ghashIterator_getKey(hiter); + + BLI_ghash_free(map, NULL, NULL); + + *totface= tot; + *gridfaces= faces; +} + +/***************************** Node Access ***********************************/ + +void BLI_pbvh_node_mark_update(PBVHNode *node) +{ + node->flag |= PBVH_UpdateNormals|PBVH_UpdateBB|PBVH_UpdateOriginalBB|PBVH_UpdateDrawBuffers|PBVH_UpdateRedraw; +} + +void BLI_pbvh_node_get_verts(PBVH *bvh, PBVHNode *node, int **vert_indices, MVert **verts) +{ + if(vert_indices) *vert_indices= node->vert_indices; + if(verts) *verts= bvh->verts; +} + +void BLI_pbvh_node_num_verts(PBVH *bvh, PBVHNode *node, int *uniquevert, int *totvert) +{ + if(bvh->grids) { + if(totvert) *totvert= node->totprim*bvh->gridsize*bvh->gridsize; + if(uniquevert) *uniquevert= *totvert; + } + else { + if(totvert) *totvert= node->uniq_verts + node->face_verts; + if(uniquevert) *uniquevert= node->uniq_verts; + } +} + +void BLI_pbvh_node_get_grids(PBVH *bvh, PBVHNode *node, int **grid_indices, int *totgrid, int *maxgrid, int *gridsize, DMGridData ***griddata, DMGridAdjacency **gridadj) +{ + if(bvh->grids) { + if(grid_indices) *grid_indices= node->prim_indices; + if(totgrid) *totgrid= node->totprim; + if(maxgrid) *maxgrid= bvh->totgrid; + if(gridsize) *gridsize= bvh->gridsize; + if(griddata) *griddata= bvh->grids; + if(gridadj) *gridadj= bvh->gridadj; + } + else { + if(grid_indices) *grid_indices= NULL; + if(totgrid) *totgrid= 0; + if(maxgrid) *maxgrid= 0; + if(gridsize) *gridsize= 0; + if(griddata) *griddata= NULL; + if(gridadj) *gridadj= NULL; + } +} + +void BLI_pbvh_node_get_BB(PBVHNode *node, float bb_min[3], float bb_max[3]) +{ + copy_v3_v3(bb_min, node->vb.bmin); + copy_v3_v3(bb_max, node->vb.bmax); +} + +void BLI_pbvh_node_get_original_BB(PBVHNode *node, float bb_min[3], float bb_max[3]) +{ + copy_v3_v3(bb_min, node->orig_vb.bmin); + copy_v3_v3(bb_max, node->orig_vb.bmax); +} + +/********************************* Raycast ***********************************/ + +typedef struct { + /* Ray */ + float start[3]; + int sign[3]; + float inv_dir[3]; + int original; +} RaycastData; + +/* Adapted from here: http://www.gamedev.net/community/forums/topic.asp?topic_id=459973 */ +static int ray_aabb_intersect(PBVHNode *node, void *data_v) +{ + RaycastData *ray = data_v; + float bb_min[3], bb_max[3], bbox[2][3]; + float tmin, tmax, tymin, tymax, tzmin, tzmax; + + if(ray->original) + BLI_pbvh_node_get_original_BB(node, bb_min, bb_max); + else + BLI_pbvh_node_get_BB(node, bb_min, bb_max); + + copy_v3_v3(bbox[0], bb_min); + copy_v3_v3(bbox[1], bb_max); + + tmin = (bbox[ray->sign[0]][0] - ray->start[0]) * ray->inv_dir[0]; + tmax = (bbox[1-ray->sign[0]][0] - ray->start[0]) * ray->inv_dir[0]; + + tymin = (bbox[ray->sign[1]][1] - ray->start[1]) * ray->inv_dir[1]; + tymax = (bbox[1-ray->sign[1]][1] - ray->start[1]) * ray->inv_dir[1]; + + if((tmin > tymax) || (tymin > tmax)) + return 0; + if(tymin > tmin) + tmin = tymin; + if(tymax < tmax) + tmax = tymax; + + tzmin = (bbox[ray->sign[2]][2] - ray->start[2]) * ray->inv_dir[2]; + tzmax = (bbox[1-ray->sign[2]][2] - ray->start[2]) * ray->inv_dir[2]; + + if((tmin > tzmax) || (tzmin > tmax)) + return 0; + + return 1; + + /* XXX: Not sure about this? + if(tzmin > tmin) + tmin = tzmin; + if(tzmax < tmax) + tmax = tzmax; + return ((tmin < t1) && (tmax > t0)); + */ + +} + +void BLI_pbvh_raycast(PBVH *bvh, BLI_pbvh_HitCallback cb, void *data, + float ray_start[3], float ray_normal[3], int original) +{ + RaycastData rcd; + + copy_v3_v3(rcd.start, ray_start); + rcd.inv_dir[0] = 1.0f / ray_normal[0]; + rcd.inv_dir[1] = 1.0f / ray_normal[1]; + rcd.inv_dir[2] = 1.0f / ray_normal[2]; + rcd.sign[0] = rcd.inv_dir[0] < 0; + rcd.sign[1] = rcd.inv_dir[1] < 0; + rcd.sign[2] = rcd.inv_dir[2] < 0; + rcd.original = original; + + BLI_pbvh_search_callback(bvh, ray_aabb_intersect, &rcd, cb, data); +} + +/* XXX: Code largely copied from bvhutils.c, could be unified */ +/* Returns 1 if a better intersection has been found */ +static int ray_face_intersection(float ray_start[3], float ray_normal[3], + float *t0, float *t1, float *t2, float *t3, + float *fdist) +{ + int hit = 0; + + do + { + float dist = FLT_MAX; + + if(!isect_ray_tri_epsilon_v3(ray_start, ray_normal, t0, t1, t2, + &dist, NULL, 0.1f)) + dist = FLT_MAX; + + if(dist >= 0 && dist < *fdist) { + hit = 1; + *fdist = dist; + } + + t1 = t2; + t2 = t3; + t3 = NULL; + + } while(t2); + + return hit; +} + +int BLI_pbvh_node_raycast(PBVH *bvh, PBVHNode *node, float (*origco)[3], + float ray_start[3], float ray_normal[3], float *dist) +{ + int hit= 0; + + if(bvh->faces) { + MVert *vert = bvh->verts; + int *faces= node->prim_indices; + int *face_verts= node->face_vert_indices; + int totface= node->totprim; + int i; + + for(i = 0; i < totface; ++i) { + MFace *f = bvh->faces + faces[i]; + + if(origco) { + /* intersect with backuped original coordinates */ + hit |= ray_face_intersection(ray_start, ray_normal, + origco[face_verts[i*4+0]], + origco[face_verts[i*4+1]], + origco[face_verts[i*4+2]], + f->v4? origco[face_verts[i*4+3]]: NULL, + dist); + } + else { + /* intersect with current coordinates */ + hit |= ray_face_intersection(ray_start, ray_normal, + vert[f->v1].co, + vert[f->v2].co, + vert[f->v3].co, + f->v4 ? vert[f->v4].co : NULL, + dist); + } + } + } + else { + int totgrid= node->totprim; + int gridsize= bvh->gridsize; + int i, x, y; + + for(i = 0; i < totgrid; ++i) { + DMGridData *grid= bvh->grids[node->prim_indices[i]]; + + for(y = 0; y < gridsize-1; ++y) { + for(x = 0; x < gridsize-1; ++x) { + if(origco) { + hit |= ray_face_intersection(ray_start, ray_normal, + origco[y*gridsize + x], + origco[y*gridsize + x+1], + origco[(y+1)*gridsize + x+1], + origco[(y+1)*gridsize + x], + dist); + } + else { + hit |= ray_face_intersection(ray_start, ray_normal, + grid[y*gridsize + x].co, + grid[y*gridsize + x+1].co, + grid[(y+1)*gridsize + x+1].co, + grid[(y+1)*gridsize + x].co, + dist); + } + } + } + + if(origco) + origco += gridsize*gridsize; + } + } + + return hit; +} + +//#include + +void BLI_pbvh_node_draw(PBVHNode *node, void *data) +{ +#if 0 + /* XXX: Just some quick code to show leaf nodes in different colors */ + float col[3]; int i; + + if(0) { //is_partial) { + col[0] = (rand() / (float)RAND_MAX); col[1] = col[2] = 0.6; + } + else { + srand((long long)node); + for(i = 0; i < 3; ++i) + col[i] = (rand() / (float)RAND_MAX) * 0.3 + 0.7; + } + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, col); + + glColor3f(1, 0, 0); +#endif + GPU_draw_buffers(node->draw_buffers); +} + +/* Adapted from: + http://www.gamedev.net/community/forums/topic.asp?topic_id=512123 + Returns true if the AABB is at least partially within the frustum + (ok, not a real frustum), false otherwise. +*/ +int BLI_pbvh_node_planes_contain_AABB(PBVHNode *node, void *data) +{ + float (*planes)[4] = data; + int i, axis; + float vmin[3], vmax[3], bb_min[3], bb_max[3]; + + BLI_pbvh_node_get_BB(node, bb_min, bb_max); + + for(i = 0; i < 4; ++i) { + for(axis = 0; axis < 3; ++axis) { + if(planes[i][axis] > 0) { + vmin[axis] = bb_min[axis]; + vmax[axis] = bb_max[axis]; + } + else { + vmin[axis] = bb_max[axis]; + vmax[axis] = bb_min[axis]; + } + } + + if(dot_v3v3(planes[i], vmin) + planes[i][3] > 0) + return 0; + } + + return 1; +} + +void BLI_pbvh_draw(PBVH *bvh, float (*planes)[4], float (*face_nors)[3]) +{ + BLI_pbvh_update(bvh, PBVH_UpdateNormals|PBVH_UpdateDrawBuffers, face_nors); + + if(planes) { + BLI_pbvh_search_callback(bvh, BLI_pbvh_node_planes_contain_AABB, + planes, BLI_pbvh_node_draw, NULL); + } + else { + BLI_pbvh_search_callback(bvh, NULL, NULL, BLI_pbvh_node_draw, NULL); + } +} + diff --git a/source/blender/blenlib/intern/scanfill.c b/source/blender/blenlib/intern/scanfill.c index e54382c9392..32e1c7c810e 100644 --- a/source/blender/blenlib/intern/scanfill.c +++ b/source/blender/blenlib/intern/scanfill.c @@ -34,12 +34,11 @@ #include "MEM_guardedalloc.h" -#include "BLI_blenlib.h" - -#include "BLI_util.h" #include "DNA_listBase.h" #include "DNA_mesh_types.h" + #include "BLI_editVert.h" +#include "BLI_listbase.h" #include "BLI_math.h" #include "BLI_scanfill.h" #include "BLI_callbacks.h" diff --git a/source/blender/blenlib/intern/storage.c b/source/blender/blenlib/intern/storage.c index dbf1f5100a6..c830e5fc2c8 100644 --- a/source/blender/blenlib/intern/storage.c +++ b/source/blender/blenlib/intern/storage.c @@ -87,13 +87,13 @@ #include "MEM_guardedalloc.h" #include "DNA_listBase.h" -#include "BLI_blenlib.h" + +#include "BLI_listbase.h" +#include "BLI_linklist.h" +#include "BLI_path_util.h" #include "BLI_storage.h" #include "BLI_storage_types.h" - -#include "BLI_util.h" -#include "BLI_linklist.h" - +#include "BLI_string.h" #include "BKE_utildefines.h" /* vars: */ diff --git a/source/blender/blenlib/intern/winstuff.c b/source/blender/blenlib/intern/winstuff.c index 16295fc2680..107ece8ebed 100644 --- a/source/blender/blenlib/intern/winstuff.c +++ b/source/blender/blenlib/intern/winstuff.c @@ -39,8 +39,8 @@ #include "MEM_guardedalloc.h" -#include "BLI_blenlib.h" -#include "BLI_util.h" +#include "BLI_path_util.h" +#include "BLI_string.h" #define WIN32_SKIP_HKEY_PROTECTION // need to use HKEY #include "BLI_winstuff.h" diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 79b791c898f..a81dc3a2ff0 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -139,9 +139,10 @@ #include "BKE_report.h" #include "BKE_sca.h" // for init_actuator #include "BKE_scene.h" +#include "BKE_screen.h" #include "BKE_softbody.h" // sbNew() #include "BKE_bullet.h" // bsbNew() -#include "BKE_sequence.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_idprop.h" @@ -3070,6 +3071,12 @@ static void direct_link_pointcache_list(FileData *fd, ListBase *ptcaches, PointC } } +void lib_link_partdeflect(FileData *fd, ID *id, PartDeflect *pd) +{ + if(pd && pd->tex) + pd->tex=newlibadr_us(fd, id->lib, pd->tex); +} + static void lib_link_particlesettings(FileData *fd, Main *main) { ParticleSettings *part; @@ -3086,6 +3093,9 @@ static void lib_link_particlesettings(FileData *fd, Main *main) part->eff_group = newlibadr(fd, part->id.lib, part->eff_group); part->bb_ob = newlibadr(fd, part->id.lib, part->bb_ob); + lib_link_partdeflect(fd, &part->id, part->pd); + lib_link_partdeflect(fd, &part->id, part->pd2); + if(part->effector_weights) part->effector_weights->group = newlibadr(fd, part->id.lib, part->effector_weights->group); @@ -3122,15 +3132,22 @@ static void lib_link_particlesettings(FileData *fd, Main *main) } } +static void direct_link_partdeflect(PartDeflect *pd) +{ + if(pd) pd->rng=NULL; +} + static void direct_link_particlesettings(FileData *fd, ParticleSettings *part) { part->adt= newdataadr(fd, part->adt); part->pd= newdataadr(fd, part->pd); part->pd2= newdataadr(fd, part->pd2); - if(part->effector_weights) - part->effector_weights = newdataadr(fd, part->effector_weights); - else + direct_link_partdeflect(part->pd); + direct_link_partdeflect(part->pd2); + + part->effector_weights = newdataadr(fd, part->effector_weights); + if(!part->effector_weights) part->effector_weights = BKE_add_effector_weights(part->eff_group); link_list(fd, &part->dupliweights); @@ -3325,14 +3342,14 @@ static void direct_link_dverts(FileData *fd, int count, MDeformVert *mdverts) } } -static void direct_link_mdisps(FileData *fd, int count, MDisps *mdisps) +static void direct_link_mdisps(FileData *fd, int count, MDisps *mdisps, int external) { if(mdisps) { int i; for(i = 0; i < count; ++i) { mdisps[i].disps = newdataadr(fd, mdisps[i].disps); - if(!mdisps[i].disps) + if(!external && !mdisps[i].disps) mdisps[i].totdisp = 0; } } @@ -3343,14 +3360,18 @@ static void direct_link_customdata(FileData *fd, CustomData *data, int count) int i = 0; data->layers= newdataadr(fd, data->layers); + data->external= newdataadr(fd, data->external); while (i < data->totlayer) { CustomDataLayer *layer = &data->layers[i]; + if(layer->flag & CD_FLAG_EXTERNAL) + layer->flag &= ~CD_FLAG_IN_MEMORY; + if (CustomData_verify_versions(data, i)) { layer->data = newdataadr(fd, layer->data); if(layer->type == CD_MDISPS) - direct_link_mdisps(fd, count, layer->data); + direct_link_mdisps(fd, count, layer->data, layer->flag & CD_FLAG_EXTERNAL); i++; } } @@ -3711,8 +3732,7 @@ static void lib_link_object(FileData *fd, Main *main) /* texture field */ if(ob->pd) - if(ob->pd->tex) - ob->pd->tex=newlibadr_us(fd, ob->id.lib, ob->pd->tex); + lib_link_partdeflect(fd, &ob->id, ob->pd); if(ob->soft) ob->soft->effector_weights->group = newlibadr(fd, ob->id.lib, ob->soft->effector_weights->group); @@ -3799,9 +3819,8 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb) clmd->sim_parms->reset = 0; } - if(clmd->sim_parms->effector_weights) - clmd->sim_parms->effector_weights = newdataadr(fd, clmd->sim_parms->effector_weights); - else + clmd->sim_parms->effector_weights = newdataadr(fd, clmd->sim_parms->effector_weights); + if(!clmd->sim_parms->effector_weights) clmd->sim_parms->effector_weights = BKE_add_effector_weights(NULL); } @@ -3828,9 +3847,8 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb) smd->domain->tex_shadow = NULL; smd->domain->tex_wt = NULL; - if(smd->domain->effector_weights) - smd->domain->effector_weights = newdataadr(fd, smd->domain->effector_weights); - else + smd->domain->effector_weights = newdataadr(fd, smd->domain->effector_weights); + if(!smd->domain->effector_weights) smd->domain->effector_weights = BKE_add_effector_weights(NULL); direct_link_pointcache_list(fd, &(smd->domain->ptcaches[0]), &(smd->domain->point_cache[0])); @@ -3938,12 +3956,6 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb) SWITCH_INT(mmd->dynverts[a]) } } - else if (md->type==eModifierType_Multires) { - MultiresModifierData *mmd = (MultiresModifierData*) md; - - mmd->undo_verts = newdataadr(fd, mmd->undo_verts); - mmd->undo_signal = !!mmd->undo_verts; - } } } @@ -4035,8 +4047,7 @@ static void direct_link_object(FileData *fd, Object *ob) } ob->pd= newdataadr(fd, ob->pd); - if(ob->pd) - ob->pd->rng=NULL; + direct_link_partdeflect(ob->pd); ob->soft= newdataadr(fd, ob->soft); if(ob->soft) { SoftBody *sb= ob->soft; @@ -4054,9 +4065,8 @@ static void direct_link_object(FileData *fd, Object *ob) } } - if(sb->effector_weights) - sb->effector_weights = newdataadr(fd, sb->effector_weights); - else + sb->effector_weights = newdataadr(fd, sb->effector_weights); + if(!sb->effector_weights) sb->effector_weights = BKE_add_effector_weights(NULL); direct_link_pointcache_list(fd, &sb->ptcaches, &sb->pointcache); @@ -4180,6 +4190,7 @@ static void lib_link_scene(FileData *fd, Main *main) Base *base, *next; Sequence *seq; SceneRenderLayer *srl; + TimeMarker *marker; sce= main->scene.first; while(sce) { @@ -4222,6 +4233,7 @@ static void lib_link_scene(FileData *fd, Main *main) if(seq->ipo) seq->ipo= newlibadr_us(fd, sce->id.lib, seq->ipo); if(seq->scene) seq->scene= newlibadr(fd, sce->id.lib, seq->scene); if(seq->sound) { + seq->sound_handle= NULL; if(seq->type == SEQ_HD_SOUND) seq->type = SEQ_SOUND; else @@ -4234,6 +4246,17 @@ static void lib_link_scene(FileData *fd, Main *main) seq->anim= 0; } SEQ_END + +#ifdef DURIAN_CAMERA_SWITCH + for(marker= sce->markers.first; marker; marker= marker->next) { + if(marker->camera) { + marker->camera= newlibadr(fd, sce->id.lib, marker->camera); + } + } +#endif + + if(sce->ed) + seq_update_muting(sce->ed); if(sce->nodetree) { lib_link_ntree(fd, &sce->id, sce->nodetree); @@ -4268,10 +4291,13 @@ static void link_recurs_seq(FileData *fd, ListBase *lb) static void direct_link_paint(FileData *fd, Paint **paint) { - (*paint)= newdataadr(fd, (*paint)); - if(*paint) { - (*paint)->paint_cursor= NULL; - (*paint)->brushes= newdataadr(fd, (*paint)->brushes); + Paint *p; + + p= (*paint)= newdataadr(fd, (*paint)); + if(p) { + p->paint_cursor= NULL; + p->brushes= newdataadr(fd, p->brushes); + test_pointer_array(fd, (void**)&p->brushes); } } @@ -4309,6 +4335,7 @@ static void direct_link_scene(FileData *fd, Scene *sce) direct_link_paint(fd, (Paint**)&sce->toolsettings->wpaint); sce->toolsettings->imapaint.paint.brushes= newdataadr(fd, sce->toolsettings->imapaint.paint.brushes); + test_pointer_array(fd, (void**)&sce->toolsettings->imapaint.paint.brushes); sce->toolsettings->imapaint.paintcursor= NULL; sce->toolsettings->particle.paintcursor= NULL; @@ -4451,7 +4478,7 @@ static void direct_link_scene(FileData *fd, Scene *sce) link_list(fd, &(sce->markers)); link_list(fd, &(sce->transform_spaces)); link_list(fd, &(sce->r.layers)); - + for(srl= sce->r.layers.first; srl; srl= srl->next) { link_list(fd, &(srl->freestyleConfig.modules)); } @@ -5054,6 +5081,7 @@ static void direct_link_screen(FileData *fd, bScreen *sc) if (sl->spacetype==SPACE_VIEW3D) { View3D *v3d= (View3D*) sl; v3d->bgpic= newdataadr(fd, v3d->bgpic); + v3d->flag |= V3D_INVALID_BACKBUF; if(v3d->bgpic) v3d->bgpic->iuser.ok= 1; if(v3d->gpd) { @@ -5948,7 +5976,8 @@ static void area_add_header_region(ScrArea *sa, ListBase *lb) 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) { @@ -6007,12 +6036,24 @@ static void area_add_window_regions(ScrArea *sa, SpaceLink *sl, ListBase *lb) 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); + ar->regiontype= RGN_TYPE_PREVIEW; + ar->alignment= RGN_ALIGN_TOP; + ar->flag |= RGN_FLAG_HIDDEN; + break; case SPACE_VIEW3D: /* toolbar */ ar= MEM_callocN(sizeof(ARegion), "toolbar for view3d"); BLI_addtail(lb, ar); - ar->regiontype= RGN_TYPE_UI; + ar->regiontype= RGN_TYPE_TOOLS; ar->alignment= RGN_ALIGN_LEFT; ar->flag = RGN_FLAG_HIDDEN; @@ -6020,7 +6061,7 @@ static void area_add_window_regions(ScrArea *sa, SpaceLink *sl, ListBase *lb) ar= MEM_callocN(sizeof(ARegion), "tool properties for view3d"); BLI_addtail(lb, ar); - ar->regiontype= RGN_TYPE_UI; + ar->regiontype= RGN_TYPE_TOOL_PROPS; ar->alignment= RGN_ALIGN_BOTTOM|RGN_SPLIT_PREV; ar->flag = RGN_FLAG_HIDDEN; @@ -9637,7 +9678,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) ToolSettings *ts; //PTCacheID *pid; //ListBase pidlist; - int i, a; + int a; for(ob = main->object.first; ob; ob = ob->id.next) { //BKE_ptcache_ids_from_object(&pidlist, ob); @@ -9654,58 +9695,8 @@ static void do_versions(FileData *fd, Library *lib, Main *main) void *olddata = ob->data; ob->data = me; - if(me && me->id.lib==NULL && me->mr) { /* XXX - library meshes crash on loading most yoFrankie levels, the multires pointer gets invalid - Campbell */ - MultiresLevel *lvl; - ModifierData *md; - MultiresModifierData *mmd; - DerivedMesh *dm, *orig; - - /* Load original level into the mesh */ - lvl = me->mr->levels.first; - CustomData_free_layers(&me->vdata, CD_MVERT, lvl->totvert); - CustomData_free_layers(&me->edata, CD_MEDGE, lvl->totedge); - CustomData_free_layers(&me->fdata, CD_MFACE, lvl->totface); - me->totvert = lvl->totvert; - me->totedge = lvl->totedge; - me->totface = lvl->totface; - me->mvert = CustomData_add_layer(&me->vdata, CD_MVERT, CD_CALLOC, NULL, me->totvert); - me->medge = CustomData_add_layer(&me->edata, CD_MEDGE, CD_CALLOC, NULL, me->totedge); - me->mface = CustomData_add_layer(&me->fdata, CD_MFACE, CD_CALLOC, NULL, me->totface); - memcpy(me->mvert, me->mr->verts, sizeof(MVert) * me->totvert); - for(i = 0; i < me->totedge; ++i) { - me->medge[i].v1 = lvl->edges[i].v[0]; - me->medge[i].v2 = lvl->edges[i].v[1]; - } - for(i = 0; i < me->totface; ++i) { - me->mface[i].v1 = lvl->faces[i].v[0]; - me->mface[i].v2 = lvl->faces[i].v[1]; - me->mface[i].v3 = lvl->faces[i].v[2]; - me->mface[i].v4 = lvl->faces[i].v[3]; - } - - /* Add a multires modifier to the object */ - md = ob->modifiers.first; - while(md && modifierType_getInfo(md->type)->type == eModifierTypeType_OnlyDeform) - md = md->next; - mmd = (MultiresModifierData*)modifier_new(eModifierType_Multires); - BLI_insertlinkbefore(&ob->modifiers, md, mmd); - - multiresModifier_subdivide(mmd, ob, me->mr->level_count - 1, 1, 0); - - mmd->lvl = mmd->totlvl; - orig = CDDM_from_mesh(me, NULL); - dm = multires_dm_create_from_derived(mmd, 0, orig, ob, 0, 0); - - multires_load_old(dm, me->mr); - - MultiresDM_mark_as_modified(dm); - dm->release(dm); - orig->release(orig); - - /* Remove the old multires */ - multires_free(me->mr); - me->mr = NULL; - } + if(me && me->id.lib==NULL && me->mr) /* XXX - library meshes crash on loading most yoFrankie levels, the multires pointer gets invalid - Campbell */ + multires_load_old(ob, me); ob->data = olddata; } @@ -10167,10 +10158,163 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } } } + /* clear hanging 'temp' screens from older 2.5 files*/ + if (main->versionfile == 250) { + bScreen *screen, *nextscreen; + wmWindowManager *wm; + wmWindow *win, *nextwin; + + for(screen= main->screen.first; screen; screen= nextscreen) { + nextscreen= screen->id.next; + + if (screen->full == SCREENTEMP) { + /* remove corresponding windows */ + for(wm= main->wm.first; wm; wm=wm->id.next) { + for(win= wm->windows.first; win; win=nextwin) { + nextwin= win->next; + + if(newlibadr(fd, wm->id.lib, win->screen) == screen) + BLI_freelinkN(&wm->windows, win); + } + } + + /* remove screen itself */ + free_libblock(&main->screen, screen); + } + } + } } + 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 initialise 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) { + 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); + ar->regiontype= RGN_TYPE_PREVIEW; + ar->alignment= RGN_ALIGN_TOP; + ar->flag |= RGN_FLAG_HIDDEN; + } + } + } + } + } + } + /* put 2.50 compatibility code here until next subversion bump */ - + /* WATCH IT!!!: pointers from libdata have not been converted yet here! */ /* WATCH IT 2!: Userdef struct init has to be in src/usiblender.c! */ @@ -11205,6 +11349,28 @@ static void expand_scene(FileData *fd, Main *mainvar, Scene *sce) if(sce->gpd) expand_doit(fd, mainvar, sce->gpd); + + if(sce->ed) { + Sequence *seq; + + SEQ_BEGIN(sce->ed, seq) { + if(seq->scene) expand_doit(fd, mainvar, seq->scene); + if(seq->sound) expand_doit(fd, mainvar, seq->sound); + } + SEQ_END + } + +#ifdef DURIAN_CAMERA_SWITCH + { + TimeMarker *marker; + + for(marker= sce->markers.first; marker; marker= marker->next) { + if(marker->camera) { + expand_doit(fd, mainvar, marker->camera); + } + } + } +#endif } static void expand_camera(FileData *fd, Main *mainvar, Camera *ca) diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index 62f2c0a7e8d..c5365195d06 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -160,7 +160,7 @@ Any case: direct data is ALWAYS after the lib block #include "BKE_pointcache.h" #include "BKE_report.h" #include "BKE_screen.h" // for waitcursor -#include "BKE_sequence.h" +#include "BKE_sequencer.h" #include "BKE_sound.h" /* ... and for samples */ #include "BKE_utildefines.h" // for defines #include "BKE_modifier.h" @@ -934,8 +934,14 @@ static void write_fcurves(WriteData *wd, ListBase *fcurves) ChannelDriver *driver= fcu->driver; DriverTarget *dtar; + /* don't save compiled python bytecode */ + void *expr_comp= driver->expr_comp; + driver->expr_comp= NULL; + writestruct(wd, DATA, "ChannelDriver", 1, driver); + driver->expr_comp= expr_comp; /* restore */ + /* targets */ for (dtar= driver->targets.first; dtar; dtar= dtar->next) { writestruct(wd, DATA, "DriverTarget", 1, dtar); @@ -1216,12 +1222,6 @@ static void write_modifiers(WriteData *wd, ListBase *modbase) writestruct(wd, DATA, "MDefInfluence", mmd->totinfluence, mmd->dyninfluences); writedata(wd, DATA, sizeof(int)*mmd->totvert, mmd->dynverts); } - else if (md->type==eModifierType_Multires) { - MultiresModifierData *mmd = (MultiresModifierData*) md; - - if(mmd->undo_verts) - writestruct(wd, DATA, "MVert", mmd->undo_verts_tot, mmd->undo_verts); - } } } @@ -1442,23 +1442,29 @@ static void write_dverts(WriteData *wd, int count, MDeformVert *dvlist) } } -static void write_mdisps(WriteData *wd, int count, MDisps *mdlist) +static void write_mdisps(WriteData *wd, int count, MDisps *mdlist, int external) { if(mdlist) { int i; writestruct(wd, DATA, "MDisps", count, mdlist); - for(i = 0; i < count; ++i) { - if(mdlist[i].disps) - writedata(wd, DATA, sizeof(float)*3*mdlist[i].totdisp, mdlist[i].disps); + if(!external) { + for(i = 0; i < count; ++i) { + if(mdlist[i].disps) + writedata(wd, DATA, sizeof(float)*3*mdlist[i].totdisp, mdlist[i].disps); + } } } } -static void write_customdata(WriteData *wd, int count, CustomData *data, int partial_type, int partial_count) +static void write_customdata(WriteData *wd, ID *id, int count, CustomData *data, int partial_type, int partial_count) { int i; + /* write external customdata (not for undo) */ + if(data->external && !wd->current) + CustomData_external_write(data, id, CD_MASK_MESH, count, 0); + writestruct(wd, DATA, "CustomDataLayer", data->maxlayer, data->layers); for (i=0; itotlayer; i++) { @@ -1471,7 +1477,7 @@ static void write_customdata(WriteData *wd, int count, CustomData *data, int par write_dverts(wd, count, layer->data); } else if (layer->type == CD_MDISPS) { - write_mdisps(wd, count, layer->data); + write_mdisps(wd, count, layer->data, layer->flag & CD_FLAG_EXTERNAL); } else { CustomData_file_write_info(layer->type, &structname, &structnum); @@ -1488,6 +1494,9 @@ static void write_customdata(WriteData *wd, int count, CustomData *data, int par printf("error: this CustomDataLayer must not be written to file\n"); } } + + if(data->external) + writestruct(wd, DATA, "CustomDataExternal", 1, data->external); } static void write_meshs(WriteData *wd, ListBase *idbase) @@ -1506,16 +1515,16 @@ static void write_meshs(WriteData *wd, ListBase *idbase) writedata(wd, DATA, sizeof(void *)*mesh->totcol, mesh->mat); if(mesh->pv) { - write_customdata(wd, mesh->pv->totvert, &mesh->vdata, -1, 0); - write_customdata(wd, mesh->pv->totedge, &mesh->edata, + write_customdata(wd, &mesh->id, mesh->pv->totvert, &mesh->vdata, -1, 0); + write_customdata(wd, &mesh->id, mesh->pv->totedge, &mesh->edata, CD_MEDGE, mesh->totedge); - write_customdata(wd, mesh->pv->totface, &mesh->fdata, + write_customdata(wd, &mesh->id, mesh->pv->totface, &mesh->fdata, CD_MFACE, mesh->totface); } else { - write_customdata(wd, mesh->totvert, &mesh->vdata, -1, 0); - write_customdata(wd, mesh->totedge, &mesh->edata, -1, 0); - write_customdata(wd, mesh->totface, &mesh->fdata, -1, 0); + write_customdata(wd, &mesh->id, mesh->totvert, &mesh->vdata, -1, 0); + write_customdata(wd, &mesh->id, mesh->totedge, &mesh->edata, -1, 0); + write_customdata(wd, &mesh->id, mesh->totface, &mesh->fdata, -1, 0); } /* PMV data */ diff --git a/source/blender/collada/DocumentExporter.cpp b/source/blender/collada/DocumentExporter.cpp index c3550dfd408..d2543423097 100644 --- a/source/blender/collada/DocumentExporter.cpp +++ b/source/blender/collada/DocumentExporter.cpp @@ -21,7 +21,7 @@ extern "C" { #include "BKE_DerivedMesh.h" #include "BKE_fcurve.h" -#include "BLI_util.h" +#include "BLI_path_util.h" #include "BLI_fileops.h" #include "ED_keyframing.h" } diff --git a/source/blender/collada/DocumentImporter.cpp b/source/blender/collada/DocumentImporter.cpp index 9ebcc8b191f..575160ff84e 100644 --- a/source/blender/collada/DocumentImporter.cpp +++ b/source/blender/collada/DocumentImporter.cpp @@ -52,7 +52,7 @@ extern "C" #include "BKE_texture.h" #include "BKE_fcurve.h" #include "BKE_depsgraph.h" -#include "BLI_util.h" +#include "BLI_path_util.h" #include "BKE_displist.h" #include "BLI_math.h" #include "BKE_scene.h" diff --git a/source/blender/editors/CMakeLists.txt b/source/blender/editors/CMakeLists.txt index 71623093bfc..b9027578482 100644 --- a/source/blender/editors/CMakeLists.txt +++ b/source/blender/editors/CMakeLists.txt @@ -72,6 +72,10 @@ IF(WITH_FFMPEG) ADD_DEFINITIONS(-DWITH_FFMPEG) ENDIF(WITH_FFMPEG) +IF(WITH_OPENMP) + ADD_DEFINITIONS(-DPARALLEL=1) +ENDIF(WITH_OPENMP) + IF(NOT WITH_ELBEEM) ADD_DEFINITIONS(-DDISABLE_ELBEEM) ENDIF(NOT WITH_ELBEEM) diff --git a/source/blender/editors/animation/anim_channels_defines.c b/source/blender/editors/animation/anim_channels_defines.c index c3044e03a2f..0a71f79f132 100644 --- a/source/blender/editors/animation/anim_channels_defines.c +++ b/source/blender/editors/animation/anim_channels_defines.c @@ -2395,13 +2395,7 @@ static void achannel_setting_slider_cb(bContext *C, void *id_poin, void *fcu_poi cfra= (float)CFRA; /* get flags for keyframing */ - if (IS_AUTOKEY_FLAG(INSERTNEEDED)) - flag |= INSERTKEY_NEEDED; - if (IS_AUTOKEY_FLAG(AUTOMATKEY)) - flag |= INSERTKEY_MATRIX; - if (IS_AUTOKEY_MODE(scene, EDITKEYS)) - flag |= INSERTKEY_REPLACE; - + flag = ANIM_get_keyframing_flags(scene, 1); /* get RNA pointer, and resolve the path */ RNA_id_pointer_create(id, &id_ptr); @@ -2438,13 +2432,7 @@ static void achannel_setting_slider_shapekey_cb(bContext *C, void *key_poin, voi cfra= (float)CFRA; /* get flags for keyframing */ - if (IS_AUTOKEY_FLAG(INSERTNEEDED)) - flag |= INSERTKEY_NEEDED; - if (IS_AUTOKEY_FLAG(AUTOMATKEY)) - flag |= INSERTKEY_MATRIX; - if (IS_AUTOKEY_MODE(scene, EDITKEYS)) - flag |= INSERTKEY_REPLACE; - + flag = ANIM_get_keyframing_flags(scene, 1); /* get RNA pointer, and resolve the path */ RNA_id_pointer_create((ID *)key, &id_ptr); diff --git a/source/blender/editors/animation/anim_channels_edit.c b/source/blender/editors/animation/anim_channels_edit.c index 4be9cb2cd9d..c919b164a05 100644 --- a/source/blender/editors/animation/anim_channels_edit.c +++ b/source/blender/editors/animation/anim_channels_edit.c @@ -1916,6 +1916,7 @@ void ED_keymap_animchannels(wmKeyConfig *keyconf) /* borderselect */ WM_keymap_add_item(keymap, "ANIM_OT_channels_select_border", BKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "ANIM_OT_channels_select_border", EVT_TWEAK_L, KM_ANY, 0, 0); /* delete */ WM_keymap_add_item(keymap, "ANIM_OT_channels_delete", XKEY, KM_PRESS, 0, 0); diff --git a/source/blender/editors/animation/anim_deps.c b/source/blender/editors/animation/anim_deps.c index 7a96c3b32a3..1d7483d661f 100644 --- a/source/blender/editors/animation/anim_deps.c +++ b/source/blender/editors/animation/anim_deps.c @@ -27,22 +27,30 @@ */ #include +#include #include #include "MEM_guardedalloc.h" +#include "DNA_anim_types.h" #include "DNA_action_types.h" #include "DNA_armature_types.h" #include "DNA_object_types.h" +#include "DNA_node_types.h" #include "DNA_scene_types.h" +#include "DNA_sequence_types.h" #include "BLI_blenlib.h" +#include "BKE_animsys.h" #include "BKE_action.h" #include "BKE_context.h" #include "BKE_depsgraph.h" +#include "BKE_global.h" #include "BKE_main.h" +#include "BKE_node.h" #include "BKE_scene.h" +#include "BKE_sequencer.h" #include "BKE_screen.h" #include "BKE_utildefines.h" @@ -55,103 +63,220 @@ #include "WM_api.h" #include "WM_types.h" -/* **************************** pose <-> action syncing ******************************** */ -/* Summary of what needs to be synced between poses and actions: - * 1) Flags - * a) Visibility (only for pose to action) - * b) Selection status (both ways) - * 2) Group settings (only for pose to action) - do we also need to make sure same groups exist? - * 3) Grouping (only for pose to action for now) - */ +/* **************************** depsgraph tagging ******************************** */ - -/* Notifier from Action/Dopesheet (this may be extended to include other things such as Python...) - * Channels in action changed, so update pose channels/groups to reflect changes. - * - * An object (usually 'active' Object) needs to be supplied, so that its Pose-Channels can be synced with - * the channels in its active Action. +/* tags the given anim list element for refreshes (if applicable) + * due to Animation Editor editing */ -void ANIM_action_to_pose_sync (Object *ob) +void ANIM_list_elem_update(Scene *scene, bAnimListElem *ale) { -#if 0 - AnimData *adt= ob->adt; - bAction *act= adt->act; + ID *id; FCurve *fcu; - bPoseChannel *pchan; - - /* error checking */ - if (ELEM3(NULL, ob, ob->adt, ob->pose) || (ob->type != OB_ARMATURE)) + AnimData *adt; + + id= ale->id; + if (!id) return; - /* 1b) loop through all Action-Channels (there should be fewer channels to search through here in general) */ - for (achan= act->chanbase.first; achan; achan= achan->next) { - /* find matching pose-channel */ - pchan= get_pose_channel(ob->pose, achan->name); + /* tag AnimData for refresh so that other views will update in realtime with these changes */ + adt= BKE_animdata_from_id(id); + if (adt) + adt->recalc |= ADT_RECALC_ANIM; + + /* update data */ + fcu= (ale->datatype == ALE_FCURVE)? ale->key_data: NULL; - /* sync active and selected flags */ - if (pchan && pchan->bone) { - /* selection */ - if (achan->flag & ACHAN_SELECTED) - pchan->bone->flag |= BONE_SELECTED; - else - pchan->bone->flag &= ~BONE_SELECTED; + if (fcu && fcu->rna_path) { + /* if we have an fcurve, call the update for the property we + are editing, this is then expected to do the proper redraws + and depsgraph updates */ + PointerRNA id_ptr, ptr; + PropertyRNA *prop; + + RNA_id_pointer_create(id, &id_ptr); - /* active */ - if (achan->flag & ACHAN_HILIGHTED) - pchan->bone->flag |= BONE_ACTIVE; - else - pchan->bone->flag &= ~BONE_ACTIVE; - } + if(RNA_path_resolve(&id_ptr, fcu->rna_path, &ptr, &prop)) + RNA_property_update_main(G.main, scene, &ptr, prop); } - - // TODO: add grouping changes too? For now, these tools aren't exposed to users in animation editors yet... -#endif -} - -/* Notifier from 3D-View/Outliner (this is likely to include other sources too...) - * Pose channels/groups changed, so update action channels - * - * An object (usually 'active' Object) needs to be supplied, so that its Pose-Channels can be synced with - * the channels in its active Action. - */ -void ANIM_pose_to_action_sync (Object *ob, ScrArea *sa) + else { + /* in other case we do standard depsgaph update, ideally + we'd be calling property update functions here too ... */ + DAG_id_flush_update(id, OB_RECALC); // XXX or do we want something more restrictive? + } +} + +/* tags the given ID block for refreshes (if applicable) due to + * Animation Editor editing */ +void ANIM_id_update(Scene *scene, ID *id) { -#if 0 // XXX old animation system - SpaceAction *saction= (SpaceAction *)sa->spacedata.first; - bArmature *arm= (bArmature *)ob->data; - bAction *act= (bAction *)ob->action; - bActionChannel *achan; - //bActionGroup *agrp, *bgrp; - bPoseChannel *pchan; + if (id) { + AnimData *adt= BKE_animdata_from_id(id); + + /* tag AnimData for refresh so that other views will update in realtime with these changes */ + if (adt) + adt->recalc |= ADT_RECALC_ANIM; + + /* set recalc flags */ + DAG_id_flush_update(id, OB_RECALC); // XXX or do we want something more restrictive? + } +} + +/* **************************** animation data <-> data syncing ******************************** */ +/* This code here is used to synchronise the + * - selection (to find selected data easier) + * - ... (insert other relevant items here later) + * status in relevant Blender data with the status stored in animation channels. + * + * This should be called in the refresh() callbacks for various editors in + * response to appropriate notifiers. + */ + +/* perform syncing updates for Action Groups */ +static void animchan_sync_group (bAnimContext *ac, bAnimListElem *ale) +{ + bActionGroup *agrp= (bActionGroup *)ale->data; + ID *owner_id= ale->id; - /* error checking */ - if ((ob == NULL) || (ob->type != OB_ARMATURE) || ELEM3(NULL, arm, act, ob->pose)) + /* major priority is selection status + * so we need both a group and an owner + */ + if (ELEM(NULL, agrp, owner_id)) return; - /* 1) loop through all Action-Channels (there should be fewer channels to search through here in general) */ - for (achan= act->chanbase.first; achan; achan= achan->next) { - /* find matching pose-channel */ - pchan= get_pose_channel(ob->pose, achan->name); + /* for standard Objects, check if group is the name of some bone */ + if (GS(owner_id->name) == ID_OB) { + Object *ob= (Object *)owner_id; - /* sync selection and visibility settings */ - if (pchan && pchan->bone) { - /* visibility - if layer is hidden, or if bone itself is hidden */ - if (!(saction->flag & SACTION_NOHIDE) && !(saction->pin)) { - if (!(pchan->bone->layer & arm->layer) || (pchan->bone->flag & BONE_HIDDEN_P)) - achan->flag |= ACHAN_HIDDEN; + /* check if there are bones, and whether the name matches any + * NOTE: this feature will only really work if groups by default contain the F-Curves for a single bone + */ + if (ob->pose) { + bPoseChannel *pchan= get_pose_channel(ob->pose, agrp->name); + + /* if one matches, sync the selection status */ + if (pchan) { + if (pchan->bone->flag & BONE_SELECTED) + agrp->flag |= AGRP_SELECTED; else - achan->flag &= ~ACHAN_HIDDEN; + agrp->flag &= ~AGRP_SELECTED; } - - /* selection */ - if (pchan->bone->flag & BONE_SELECTED) - achan->flag |= ACHAN_SELECTED; - else - achan->flag &= ~ACHAN_SELECTED; + } + } +} + +/* perform syncing updates for F-Curves */ +static void animchan_sync_fcurve (bAnimContext *ac, bAnimListElem *ale) +{ + FCurve *fcu= (FCurve *)ale->data; + ID *owner_id= ale->id; + + /* major priority is selection status, so refer to the checks done in anim_filter.c + * skip_fcurve_selected_data() for reference about what's going on here... + */ + if (ELEM3(NULL, fcu, fcu->rna_path, owner_id)) + return; + + if (GS(owner_id->name) == ID_OB) { + Object *ob= (Object *)owner_id; + + /* only affect if F-Curve involves pose.bones */ + if ((fcu->rna_path) && strstr(fcu->rna_path, "pose.bones")) { + bPoseChannel *pchan; + char *bone_name; + + /* get bone-name, and check if this bone is selected */ + bone_name= BLI_getQuotedStr(fcu->rna_path, "pose.bones["); + pchan= get_pose_channel(ob->pose, bone_name); + if (bone_name) MEM_freeN(bone_name); + + /* F-Curve selection depends on whether the bone is selected */ + if ((pchan) && (pchan->bone)) { + if (pchan->bone->flag & BONE_SELECTED) + fcu->flag |= FCURVE_SELECTED; + else + fcu->flag &= ~FCURVE_SELECTED; + } + } + } + else if (GS(owner_id->name) == ID_SCE) { + Scene *scene = (Scene *)owner_id; + + /* only affect if F-Curve involves sequence_editor.sequences */ + if ((fcu->rna_path) && strstr(fcu->rna_path, "sequences_all")) { + Editing *ed= seq_give_editing(scene, FALSE); + Sequence *seq; + char *seq_name; + + /* get strip name, and check if this strip is selected */ + seq_name= BLI_getQuotedStr(fcu->rna_path, "sequences_all["); + seq = get_seq_by_name(ed->seqbasep, seq_name, FALSE); + if (seq_name) MEM_freeN(seq_name); + + /* can only add this F-Curve if it is selected */ + if (seq) { + if (seq->flag & SELECT) + fcu->flag |= FCURVE_SELECTED; + else + fcu->flag &= ~FCURVE_SELECTED; + } + } + } + else if (GS(owner_id->name) == ID_NT) { + bNodeTree *ntree = (bNodeTree *)owner_id; + + /* check for selected nodes */ + if ((fcu->rna_path) && strstr(fcu->rna_path, "nodes")) { + bNode *node; + char *node_name; + + /* get strip name, and check if this strip is selected */ + node_name= BLI_getQuotedStr(fcu->rna_path, "nodes["); + node = nodeFindNodebyName(ntree, node_name); + if (node_name) MEM_freeN(node_name); + + /* can only add this F-Curve if it is selected */ + if (node) { + if (node->flag & NODE_SELECT) + fcu->flag |= FCURVE_SELECTED; + else + fcu->flag &= ~FCURVE_SELECTED; + } + } + } +} + +/* ---------------- */ + +/* Main call to be exported to animation editors */ +void ANIM_sync_animchannels_to_data (const bContext *C) +{ + bAnimContext ac; + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + + /* get animation context info for filtering the channels */ + // TODO: check on whether we need to set the area specially instead, since active area might not be ok? + if (ANIM_animdata_get_context(C, &ac) == 0) + return; + + /* filter data */ + /* NOTE: we want all channels, since we want to be able to set selection status on some of them even when collapsed */ + filter= ANIMFILTER_CHANNELS; + ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + + /* flush settings as appropriate depending on the types of the channels */ + for (ale= anim_data.first; ale; ale= ale->next) { + switch (ale->type) { + case ANIMTYPE_GROUP: + animchan_sync_group(&ac, ale); + break; + + case ANIMTYPE_FCURVE: + animchan_sync_fcurve(&ac, ale); + break; } } - // XXX step 2 needs to be coded still... currently missing action/bone group API to do any more work here... - // XXX step 3 needs to be coded still... it's a messy case to deal with (we'll use the temp indices for this?) -#endif // XXX old animation system + BLI_freelistN(&anim_data); } diff --git a/source/blender/editors/animation/anim_draw.c b/source/blender/editors/animation/anim_draw.c index 3afe2bfad57..60242d3e837 100644 --- a/source/blender/editors/animation/anim_draw.c +++ b/source/blender/editors/animation/anim_draw.c @@ -315,64 +315,6 @@ void ANIM_nla_mapping_apply_fcurve (AnimData *adt, FCurve *fcu, short restore, s /* apply to F-Curve */ ANIM_fcurve_keys_bezier_loop(&bed, fcu, NULL, map_cb, NULL); -} - -/* *************************************************** */ -/* ANIMATION EDITOR UI-WIDGETS */ - -/* ui button event */ -#define B_REDR 1 - -/* standard header buttons for Animation Editors */ -short ANIM_headerUI_standard_buttons (const bContext *C, bDopeSheet *ads, uiBlock *block, short xco, short yco) -{ - Main *mainptr= CTX_data_main(C); - ScrArea *sa= CTX_wm_area(C); - short nlaActive= ((sa) && (sa->spacetype==SPACE_NLA)); - - /* check if the DopeSheet data exists, just in case... */ - if (ads) { - /* more 'generic' filtering options */ - if (nlaActive) uiBlockBeginAlign(block); - uiDefIconButBitI(block, TOG, ADS_FILTER_ONLYSEL, B_REDR, ICON_RESTRICT_SELECT_OFF, (short)(xco+=XIC),yco,XIC,YIC, &(ads->filterflag), 0, 0, 0, 0, "Only display selected Objects"); - if (nlaActive) uiDefIconButBitI(block, TOGN, ADS_FILTER_NLA_NOACT, B_REDR, ICON_ACTION, (short)(xco+=XIC),yco,XIC,YIC, &(ads->filterflag), 0, 0, 0, 0, "Include AnimData blocks with no NLA Data"); - if (nlaActive) uiBlockEndAlign(block); - xco += 5; - - /* datatype based - only available datatypes are shown */ - uiBlockBeginAlign(block); - uiDefIconButBitI(block, TOGN, ADS_FILTER_NOSCE, B_REDR, ICON_SCENE_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(ads->filterflag), 0, 0, 0, 0, "Display Scene Animation"); - uiDefIconButBitI(block, TOGN, ADS_FILTER_NOWOR, B_REDR, ICON_WORLD_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(ads->filterflag), 0, 0, 0, 0, "Display World Animation"); - uiDefIconButBitI(block, TOGN, ADS_FILTER_NONTREE, B_REDR, ICON_NODETREE, (short)(xco+=XIC),yco,XIC,YIC, &(ads->filterflag), 0, 0, 0, 0, "Display Node Tree Animation"); - if (mainptr && mainptr->key.first) - uiDefIconButBitI(block, TOGN, ADS_FILTER_NOSHAPEKEYS, B_REDR, ICON_SHAPEKEY_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(ads->filterflag), 0, 0, 0, 0, "Display ShapeKeys"); - if (mainptr && mainptr->mat.first) - uiDefIconButBitI(block, TOGN, ADS_FILTER_NOMAT, B_REDR, ICON_MATERIAL_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(ads->filterflag), 0, 0, 0, 0, "Display Material Data"); - if (mainptr && mainptr->lamp.first) - uiDefIconButBitI(block, TOGN, ADS_FILTER_NOLAM, B_REDR, ICON_LAMP_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(ads->filterflag), 0, 0, 0, 0, "Display Lamp Data"); - if (mainptr && mainptr->camera.first) - uiDefIconButBitI(block, TOGN, ADS_FILTER_NOCAM, B_REDR, ICON_CAMERA_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(ads->filterflag), 0, 0, 0, 0, "Display Camera Data"); - if (mainptr && mainptr->curve.first) - uiDefIconButBitI(block, TOGN, ADS_FILTER_NOCUR, B_REDR, ICON_CURVE_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(ads->filterflag), 0, 0, 0, 0, "Display Curve Data"); - if (mainptr && mainptr->mball.first) - uiDefIconButBitI(block, TOGN, ADS_FILTER_NOMBA, B_REDR, ICON_META_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(ads->filterflag), 0, 0, 0, 0, "Display MetaBall Data"); - if (mainptr && mainptr->armature.first) - uiDefIconButBitI(block, TOGN, ADS_FILTER_NOARM, B_REDR, ICON_ARMATURE_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(ads->filterflag), 0, 0, 0, 0, "Display Armature Data"); - if (mainptr && mainptr->particle.first) - uiDefIconButBitI(block, TOGN, ADS_FILTER_NOPART, B_REDR, ICON_PARTICLE_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(ads->filterflag), 0, 0, 0, 0, "Display Particle Data"); - uiBlockEndAlign(block); - xco += 30; - } - else { - // XXX this case shouldn't happen at all... for now, just pad out same amount of space - printf("ERROR: dopesheet data not available when drawing Animation Editor header \n"); - xco += 11*XIC + 30; - } - - // TODO: include auto-snapping menu here too... - - /* return the width of the buttons */ - return xco; } /* *************************************************** */ diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c index 544157c4030..89f9511688f 100644 --- a/source/blender/editors/animation/anim_filter.c +++ b/source/blender/editors/animation/anim_filter.c @@ -68,6 +68,7 @@ #include "DNA_object_types.h" #include "DNA_particle_types.h" #include "DNA_space_types.h" +#include "DNA_sequence_types.h" #include "DNA_scene_types.h" #include "DNA_screen_types.h" #include "DNA_windowmanager_types.h" @@ -85,6 +86,8 @@ #include "BKE_key.h" #include "BKE_object.h" #include "BKE_material.h" +#include "BKE_node.h" +#include "BKE_sequencer.h" #include "BKE_screen.h" #include "BKE_utildefines.h" @@ -754,6 +757,66 @@ bAnimListElem *make_new_animlistelem (void *data, short datatype, void *owner, s /* ----------------------------------------- */ +static int skip_fcurve_selected_data(FCurve *fcu, ID *owner_id) +{ + if (GS(owner_id->name) == ID_OB) { + Object *ob= (Object *)owner_id; + + /* only consider if F-Curve involves pose.bones */ + if ((fcu->rna_path) && strstr(fcu->rna_path, "pose.bones")) { + bPoseChannel *pchan; + char *bone_name; + + /* get bone-name, and check if this bone is selected */ + bone_name= BLI_getQuotedStr(fcu->rna_path, "pose.bones["); + pchan= get_pose_channel(ob->pose, bone_name); + if (bone_name) MEM_freeN(bone_name); + + /* can only add this F-Curve if it is selected */ + if ((pchan) && (pchan->bone) && (pchan->bone->flag & BONE_SELECTED)==0) + return 1; + } + } + else if (GS(owner_id->name) == ID_SCE) { + Scene *scene = (Scene *)owner_id; + + /* only consider if F-Curve involves sequence_editor.sequences */ + if ((fcu->rna_path) && strstr(fcu->rna_path, "sequences_all")) { + Editing *ed= seq_give_editing(scene, FALSE); + Sequence *seq; + char *seq_name; + + /* get strip name, and check if this strip is selected */ + seq_name= BLI_getQuotedStr(fcu->rna_path, "sequences_all["); + seq = get_seq_by_name(ed->seqbasep, seq_name, FALSE); + 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; + } + } + else if (GS(owner_id->name) == ID_NT) { + bNodeTree *ntree = (bNodeTree *)owner_id; + + /* check for selected nodes */ + if ((fcu->rna_path) && strstr(fcu->rna_path, "nodes")) { + bNode *node; + char *node_name; + + /* get strip name, and check if this strip is selected */ + node_name= BLI_getQuotedStr(fcu->rna_path, "nodes["); + node = nodeFindNodebyName(ntree, node_name); + 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; + } + } + return 0; +} + /* find the next F-Curve that is usable for inclusion */ static FCurve *animdata_filter_fcurve_next (bDopeSheet *ads, FCurve *first, bActionGroup *grp, int filter_mode, ID *owner_id) { @@ -771,27 +834,11 @@ static FCurve *animdata_filter_fcurve_next (bDopeSheet *ads, FCurve *first, bAct * 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) && (GS(owner_id->name) == ID_OB)) ) - { - Object *ob= (Object *)owner_id; - - /* only consider if F-Curve involves pose.bones */ - if ((fcu->rna_path) && strstr(fcu->rna_path, "bones")) { - bPoseChannel *pchan; - char *bone_name; - - /* get bone-name, and check if this bone is selected */ - bone_name= BLI_getQuotedStr(fcu->rna_path, "bones["); - pchan= get_pose_channel(ob->pose, bone_name); - if (bone_name) MEM_freeN(bone_name); - - /* can only add this F-Curve if it is selected */ - if ((pchan) && (pchan->bone) && (pchan->bone->flag & BONE_SELECTED)==0) - continue; - } + if ( ((ads) && (ads->filterflag & ADS_FILTER_ONLYSEL)) && (owner_id) ) { + if (skip_fcurve_selected_data(fcu, owner_id)) + continue; } - + /* only include if visible (Graph Editor check, not channels check) */ if (!(filter_mode & ANIMFILTER_CURVEVISIBLE) || (fcu->flag & FCURVE_VISIBLE)) { /* only work with this channel and its subchannels if it is editable */ diff --git a/source/blender/editors/animation/anim_intern.h b/source/blender/editors/animation/anim_intern.h index bc4f528d43f..2d363a52248 100644 --- a/source/blender/editors/animation/anim_intern.h +++ b/source/blender/editors/animation/anim_intern.h @@ -79,6 +79,4 @@ void ANIM_OT_driver_button_remove(struct wmOperatorType *ot); void ANIM_OT_copy_driver_button(struct wmOperatorType *ot); void ANIM_OT_paste_driver_button(struct wmOperatorType *ot); -void ANIM_OT_copy_clipboard_button(struct wmOperatorType *ot); - #endif // ANIM_INTERN_H diff --git a/source/blender/editors/animation/anim_ipo_utils.c b/source/blender/editors/animation/anim_ipo_utils.c index 200c4eb3590..9e698d18105 100644 --- a/source/blender/editors/animation/anim_ipo_utils.c +++ b/source/blender/editors/animation/anim_ipo_utils.c @@ -181,39 +181,12 @@ int getname_anim_fcurve(char *name, ID *id, FCurve *fcu) /* ------------------------------- Color Codes for F-Curve Channels ---------------------------- */ -#if 0 -/* used for FCURVE_COLOR_AUTO_RAINBOW */ -// XXX this still doesn't work too great when there are more than 32 curves (which happens most of the time) -void ipo_rainbow (int cur, int tot, float *out) -{ - float dfac, fac, sat; - - dfac= (float)(1.0/( (float)tot+1.0)); - - /* this calculation makes 2 or 4 different cycles of rainbow colors */ - // 2 different cycles - for hue - if(cur< tot/2) fac= (float)(cur*2.0f*dfac); - else fac= (float)((cur-tot/2)*2.0f*dfac +dfac); - - // third cycle with altered hue - if(tot > 32) fac= fac*1.95f; - // clamping for excessive ranges - if(fac>1.0f) fac-= 1.0f; - - // saturation adjustments for more visible range - if(fac>0.5f && fac<0.8f) sat= 0.5f; - else sat= 0.6f; - - hsv_to_rgb(fac, sat, 1.0f, out, out+1, out+2); -} -#endif - /* step between the major distinguishable color bands of the primary colors */ #define HSV_BANDWIDTH 0.3f -/* testbed for FCURVE_COLOR_AUTO_RAINBOW determination methods */ +/* used to determine the colour of F-Curves with FCURVE_COLOR_AUTO_RAINBOW set */ //void fcurve_rainbow (unsigned int cur, unsigned int tot, float *out) -void ipo_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 721fa928e44..4cc3a8d343f 100644 --- a/source/blender/editors/animation/anim_markers.c +++ b/source/blender/editors/animation/anim_markers.c @@ -240,15 +240,19 @@ static void draw_marker(View2D *v2d, TimeMarker *marker, int cfra, int flag) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); /* vertical line - dotted */ - // NOTE: currently only used for sequencer + // NOTE: currently only used for sequencer +#ifdef DURIAN_CAMERA_SWITCH + if (marker->camera || flag & DRAW_MARKERS_LINES) { +#else if (flag & DRAW_MARKERS_LINES) { +#endif setlinestyle(3); if (marker->flag & SELECT) glColor4ub(255, 255, 255, 96); else glColor4ub(0, 0, 0, 96); - + glBegin(GL_LINES); glVertex2f((xpos*xscale)+0.5f, 12.0f); glVertex2f((xpos*xscale)+0.5f, 34.0f*yscale); /* a bit lazy but we know it cant be greater then 34 strips high */ @@ -672,6 +676,10 @@ static void ed_marker_duplicate_apply(bContext *C, wmOperator *op) newmarker->frame= marker->frame; BLI_strncpy(newmarker->name, marker->name, sizeof(marker->name)); +#ifdef DURIAN_CAMERA_SWITCH + newmarker->camera= marker->camera; +#endif + /* new marker is added to the begining of list */ BLI_addhead(markers, newmarker); } @@ -978,6 +986,48 @@ static void MARKER_OT_delete(wmOperatorType *ot) } +#ifdef DURIAN_CAMERA_SWITCH +/* ******************************* camera bind marker ***************** */ + +/* remove selected TimeMarkers */ +static int ed_marker_camera_bind_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + ListBase *markers= context_get_markers(C); + TimeMarker *marker; + short changed= 0; + + if(markers == NULL) + return OPERATOR_CANCELLED; + + for(marker= markers->first; marker; marker= marker->next) { + if(marker->flag & SELECT) { + marker->camera= scene->camera; + } + } + + if (changed) + WM_event_add_notifier(C, NC_SCENE|ND_MARKERS, NULL); + + return OPERATOR_FINISHED; +} + +static void MARKER_OT_camera_bind(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Bind Camera to Markers"; + ot->description= "Bind the active camera to selected markers(s)."; + ot->idname= "MARKER_OT_camera_bind"; + + /* api callbacks */ + ot->exec= ed_marker_camera_bind_exec; + ot->poll= ED_operator_areaactive; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} +#endif + /* ************************** registration **********************************/ /* called in screen_ops.c:ED_operatortypes_screen() */ @@ -990,6 +1040,9 @@ void ED_operatortypes_marker(void) WM_operatortype_append(MARKER_OT_select_border); WM_operatortype_append(MARKER_OT_select_all); WM_operatortype_append(MARKER_OT_delete); +#ifdef DURIAN_CAMERA_SWITCH + WM_operatortype_append(MARKER_OT_camera_bind); +#endif } /* called in screen_ops.c:ED_keymap_screen() */ @@ -1008,5 +1061,7 @@ void ED_marker_keymap(wmKeyConfig *keyconf) WM_keymap_verify_item(keymap, "MARKER_OT_delete", DELKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "MARKER_OT_move", GKEY, KM_PRESS, 0, 0); - +#ifdef DURIAN_CAMERA_SWITCH + WM_keymap_add_item(keymap, "MARKER_OT_camera_bind", BKEY, KM_PRESS, KM_CTRL, 0); +#endif } diff --git a/source/blender/editors/animation/anim_ops.c b/source/blender/editors/animation/anim_ops.c index 6c8a982b323..9544bb70855 100644 --- a/source/blender/editors/animation/anim_ops.c +++ b/source/blender/editors/animation/anim_ops.c @@ -74,25 +74,6 @@ static int change_frame_poll(bContext *C) return ((curarea) && (curarea->spacetype != SPACE_IPO)); } -/* Set any flags that are necessary to indicate modal time-changing operation */ -static int change_frame_init(bContext *C, wmOperator *op) -{ - ScrArea *curarea= CTX_wm_area(C); - - if (curarea == NULL) - return 0; - - if (curarea->spacetype == SPACE_TIME) { - SpaceTime *stime= CTX_wm_space_time(C); - - /* timeline displays frame number only when dragging indicator */ - // XXX make this more in line with other anim editors? - stime->flag |= TIME_CFRA_NUM; - } - - return 1; -} - /* Set the new frame number */ static void change_frame_apply(bContext *C, wmOperator *op) { @@ -106,33 +87,12 @@ static void change_frame_apply(bContext *C, wmOperator *op) WM_event_add_notifier(C, NC_SCENE|ND_FRAME, scene); } -/* Clear any temp flags */ -static void change_frame_exit(bContext *C, wmOperator *op) -{ - ScrArea *curarea= CTX_wm_area(C); - - if (curarea == NULL) - return; - - if (curarea->spacetype == SPACE_TIME) { - SpaceTime *stime= CTX_wm_space_time(C); - - /* timeline displays frame number only when dragging indicator */ - // XXX make this more in line with other anim editors? - stime->flag &= ~TIME_CFRA_NUM; - } -} - /* ---- */ /* Non-modal callback for running operator without user input */ static int change_frame_exec(bContext *C, wmOperator *op) { - if (!change_frame_init(C, op)) - return OPERATOR_CANCELLED; - change_frame_apply(C, op); - change_frame_exit(C, op); return OPERATOR_FINISHED; } @@ -166,7 +126,6 @@ static int change_frame_invoke(bContext *C, wmOperator *op, wmEvent *event) */ RNA_int_set(op->ptr, "frame", frame_from_event(C, event)); - change_frame_init(C, op); change_frame_apply(C, op); /* add temp handler */ @@ -175,20 +134,12 @@ static int change_frame_invoke(bContext *C, wmOperator *op, wmEvent *event) return OPERATOR_RUNNING_MODAL; } -/* In case modal operator is cancelled */ -static int change_frame_cancel(bContext *C, wmOperator *op) -{ - change_frame_exit(C, op); - return OPERATOR_CANCELLED; -} - /* Modal event handling of frame changing */ static int change_frame_modal(bContext *C, wmOperator *op, wmEvent *event) { /* execute the events */ switch (event->type) { case ESCKEY: - change_frame_exit(C, op); return OPERATOR_FINISHED; case MOUSEMOVE: @@ -201,10 +152,8 @@ static int change_frame_modal(bContext *C, wmOperator *op, wmEvent *event) /* we check for either mouse-button to end, as checking for ACTIONMOUSE (which is used to init * the modal op) doesn't work for some reason */ - if (event->val==KM_RELEASE) { - change_frame_exit(C, op); + if (event->val==KM_RELEASE) return OPERATOR_FINISHED; - } break; } @@ -221,7 +170,6 @@ void ANIM_OT_change_frame(wmOperatorType *ot) /* api callbacks */ ot->exec= change_frame_exec; ot->invoke= change_frame_invoke; - ot->cancel= change_frame_cancel; ot->modal= change_frame_modal; ot->poll= change_frame_poll; @@ -414,8 +362,6 @@ void ED_operatortypes_anim(void) WM_operatortype_append(ANIM_OT_driver_button_remove); WM_operatortype_append(ANIM_OT_copy_driver_button); WM_operatortype_append(ANIM_OT_paste_driver_button); - - WM_operatortype_append(ANIM_OT_copy_clipboard_button); WM_operatortype_append(ANIM_OT_keyingset_button_add); diff --git a/source/blender/editors/animation/drivers.c b/source/blender/editors/animation/drivers.c index bc7005b82c4..59e52c0d489 100644 --- a/source/blender/editors/animation/drivers.c +++ b/source/blender/editors/animation/drivers.c @@ -581,47 +581,4 @@ void ANIM_OT_paste_driver_button (wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } - -/* Copy to Clipboard Button Operator ------------------------ */ - -static int copy_clipboard_button_exec(bContext *C, wmOperator *op) -{ - PointerRNA ptr; - PropertyRNA *prop= NULL; - char *path; - short success= 0; - int index; - - /* try to create driver using property retrieved from UI */ - memset(&ptr, 0, sizeof(PointerRNA)); - uiAnimContextProperty(C, &ptr, &prop, &index); - - if (ptr.data && prop) { - path= RNA_path_from_ID_to_property(&ptr, prop); - - if (path) { - WM_clipboard_text_set(path, FALSE); - MEM_freeN(path); - } - } - - /* since we're just copying, we don't really need to do anything else...*/ - return (success)? OPERATOR_FINISHED: OPERATOR_CANCELLED; -} - -void ANIM_OT_copy_clipboard_button(wmOperatorType *ot) -{ - /* identifiers */ - ot->name= "Copy Data Path"; - ot->idname= "ANIM_OT_copy_clipboard_button"; - ot->description= "Copy the RNA data path for this property to the clipboard."; - - /* callbacks */ - ot->exec= copy_clipboard_button_exec; - //op->poll= ??? // TODO: need to have some valid property before this can be done - - /* flags */ - ot->flag= OPTYPE_REGISTER; -} - /* ************************************************** */ diff --git a/source/blender/editors/animation/fmodifier_ui.c b/source/blender/editors/animation/fmodifier_ui.c index 35f7f424f85..ebddcd45a8b 100644 --- a/source/blender/editors/animation/fmodifier_ui.c +++ b/source/blender/editors/animation/fmodifier_ui.c @@ -276,7 +276,7 @@ static void draw_modifier__cycles(uiLayout *layout, ID *id, FModifier *fcm, shor /* split into 2 columns * NOTE: the mode comboboxes shouldn't get labels, otherwise there isn't enough room */ - split= uiLayoutSplit(layout, 0.5f); + split= uiLayoutSplit(layout, 0.5f, 0); /* before range */ col= uiLayoutColumn(split, 1); @@ -306,7 +306,7 @@ static void draw_modifier__noise(uiLayout *layout, ID *id, FModifier *fcm, short uiItemR(layout, NULL, 0, &ptr, "modification", 0); /* split into 2 columns */ - split= uiLayoutSplit(layout, 0.5f); + split= uiLayoutSplit(layout, 0.5f, 0); /* col 1 */ col= uiLayoutColumn(split, 0); @@ -560,7 +560,7 @@ static void draw_modifier__envelope(uiLayout *layout, ID *id, FModifier *fcm, sh block= uiLayoutGetBlock(row); uiBlockBeginAlign(block); - but=uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Fra:", 0, 0, 90, 20, &fed->time, -UI_FLT_MAX, UI_FLT_MAX, 10, 1, "Frame that envelope point occurs"); + but=uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Fra:", 0, 0, 90, 20, &fed->time, -MAXFRAMEF, MAXFRAMEF, 10, 1, "Frame that envelope point occurs"); uiButSetFunc(but, validate_fmodifier_cb, fcm, NULL); uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Min:", 0, 0, 100, 20, &fed->min, -UI_FLT_MAX, UI_FLT_MAX, 10, 2, "Minimum bound of envelope at this point"); @@ -588,7 +588,7 @@ static void draw_modifier__limits(uiLayout *layout, ID *id, FModifier *fcm, shor row= uiLayoutRow(layout, 0); /* split into 2 columns */ - split= uiLayoutSplit(layout, 0.5f); + split= uiLayoutSplit(layout, 0.5f, 0); /* x-minimum */ col= uiLayoutColumn(split, 1); @@ -606,7 +606,7 @@ static void draw_modifier__limits(uiLayout *layout, ID *id, FModifier *fcm, shor row= uiLayoutRow(layout, 0); /* split into 2 columns */ - split= uiLayoutSplit(layout, 0.5f); + split= uiLayoutSplit(layout, 0.5f, 0); /* x-minimum */ col= uiLayoutColumn(split, 1); diff --git a/source/blender/editors/animation/keyframes_draw.c b/source/blender/editors/animation/keyframes_draw.c index 15ca0fab35f..b19ee5d1dab 100644 --- a/source/blender/editors/animation/keyframes_draw.c +++ b/source/blender/editors/animation/keyframes_draw.c @@ -170,6 +170,9 @@ static void add_bezt_to_keycolumns_list(DLRBT_Tree *keys, BezTriple *bezt) /* ActBeztColumns (Helpers for Long Keyframes) ------------------------------ */ +/* maximum size of default buffer for BezTriple columns */ +#define MAX_ABK_BUFSIZE 4 + /* BezTriple Container Node */ // NOTE: only used internally while building Long Keyframes for now, but may be useful externally? typedef struct ActBeztColumn { @@ -187,7 +190,7 @@ typedef struct ActBeztColumn { short numBezts; /* number of BezTriples on this frame */ float cfra; /* frame that the BezTriples occur on */ - BezTriple *bezts[4]; /* buffer of pointers to BezTriples on the same frame */ + BezTriple *bezts[MAX_ABK_BUFSIZE]; /* buffer of pointers to BezTriples on the same frame */ //BezTriple **bezts_extra; /* secondary buffer of pointers if need be */ } ActBeztColumn; @@ -227,11 +230,11 @@ static void nupdate_abk_bezt (void *node, void *data) BezTriple *bezt= (BezTriple *)data; /* just add the BezTriple to the buffer if there's space, or allocate a new one */ - if (abk->numBezts >= sizeof(abk->bezts)/sizeof(BezTriple)) { + if (abk->numBezts >= MAX_ABK_BUFSIZE) { // TODO: need to allocate new array to cater... - // FIXME: urgent... is a problem when working with duplicate keyframes //bezts_extra= MEM_callocN(...); - printf("FIXME: nupdate_abk_bezt() missing case for too many overlapping BezTriples \n"); + if(G.f & G_DEBUG) + printf("FIXME: nupdate_abk_bezt() missing case for too many overlapping BezTriples \n"); } else { /* just store an extra one */ diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c index 3bfb8bdc867..6d8938d9545 100644 --- a/source/blender/editors/animation/keyframing.c +++ b/source/blender/editors/animation/keyframing.c @@ -80,6 +80,40 @@ #include "anim_intern.h" +/* ************************************************** */ +/* 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 flag = 0; + + /* standard flags */ + { + /* visual keying */ + if (IS_AUTOKEY_FLAG(AUTOMATKEY)) + flag |= INSERTKEY_MATRIX; + + /* only needed */ + if (IS_AUTOKEY_FLAG(INSERTNEEDED)) + flag |= INSERTKEY_NEEDED; + + /* default F-Curve color mode - RGB from XYZ indicies */ + if (IS_AUTOKEY_FLAG(XYZ2RGB)) + flag |= INSERTKEY_XYZ2RGB; + } + + /* only if including settings from the autokeying mode... */ + if (incl_mode) + { + /* keyframing mode - only replace existing keyframes */ + if (IS_AUTOKEY_MODE(scene, EDITKEYS)) + flag |= INSERTKEY_REPLACE; + } + + return flag; +} + /* ******************************************* */ /* Animation Data Validation */ @@ -274,6 +308,7 @@ int insert_vert_fcurve (FCurve *fcu, float x, float y, short flag) beztr.ipo= U.ipo_new; /* use default interpolation mode here... */ beztr.f1= beztr.f2= beztr.f3= SELECT; beztr.h1= beztr.h2= HD_AUTO; // XXX what about when we replace an old one? + //BEZKEYTYPE(&beztr)= scene->keytype; /* default keyframe type */ /* add temp beztriple to keyframes */ a= insert_bezt_fcurve(fcu, &beztr, flag); @@ -809,13 +844,18 @@ short insert_keyframe (ID *id, bAction *act, const char group[], const char rna_ return 0; } - /* get F-Curve - if no action is provided, keyframe to the default one attached to this ID-block */ + /* if no action is provided, keyframe to the default one attached to this ID-block */ if (act == NULL) { AnimData *adt= BKE_animdata_from_id(id); /* get action to add F-Curve+keyframe to */ act= verify_adt_action(id, 1); + if(act==NULL) { + printf("Insert Key: Could not insert keyframe, as this type does not support animation data (ID = %s, Path = %s)\n", id->name, rna_path); + return 0; + } + /* apply NLA-mapping to frame to use (if applicable) */ cfra= BKE_nla_tweakedit_remap(adt, cfra, NLATIME_CONVERT_UNMAP); } @@ -837,13 +877,24 @@ short insert_keyframe (ID *id, bAction *act, const char group[], const char rna_ /* key entire array convenience method */ if (array_index == -1) { array_index= 0; - array_index_max= RNA_property_array_length(&ptr, prop) + 1; + array_index_max= RNA_property_array_length(&ptr, prop); } /* will only loop once unless the array index was -1 */ for (; array_index < array_index_max; array_index++) { + /* make sure the F-Curve exists */ fcu= verify_fcurve(act, group, rna_path, array_index, 1); + /* set color mode if the F-Curve is new (i.e. without any keyframes) */ + if ((fcu->totvert == 0) && (flag & INSERTKEY_XYZ2RGB)) { + /* for Loc/Rot/Scale and also Color F-Curves, the color of the F-Curve in the Graph Editor, + * is determined by the array index for the F-Curve + */ + if (ELEM4(RNA_property_subtype(prop), PROP_TRANSLATION, PROP_XYZ, PROP_EULER, PROP_COLOR)) { + fcu->color_mode= FCURVE_COLOR_AUTO_RGB; + } + } + /* insert keyframe */ ret += insert_keyframe_direct(ptr, prop, fcu, cfra, flag); } @@ -1314,12 +1365,7 @@ static int insert_key_button_exec (bContext *C, wmOperator *op) short flag = 0; /* flags for inserting keyframes */ - if (IS_AUTOKEY_FLAG(AUTOMATKEY)) - flag |= INSERTKEY_MATRIX; - if (IS_AUTOKEY_FLAG(INSERTNEEDED)) - flag |= INSERTKEY_NEEDED; - if (IS_AUTOKEY_MODE(scene, EDITKEYS)) - flag |= INSERTKEY_REPLACE; + flag = ANIM_get_keyframing_flags(scene, 1); /* try to insert keyframe using property retrieved from UI */ memset(&ptr, 0, sizeof(PointerRNA)); diff --git a/source/blender/editors/animation/keyingsets.c b/source/blender/editors/animation/keyingsets.c index c3606a03d1e..d5624b8bc5b 100644 --- a/source/blender/editors/animation/keyingsets.c +++ b/source/blender/editors/animation/keyingsets.c @@ -133,11 +133,9 @@ static int add_default_keyingset_exec (bContext *C, wmOperator *op) */ flag |= KEYINGSET_ABSOLUTE; - if (IS_AUTOKEY_FLAG(AUTOMATKEY)) - keyingflag |= INSERTKEY_MATRIX; - if (IS_AUTOKEY_FLAG(INSERTNEEDED)) - keyingflag |= INSERTKEY_NEEDED; - + /* 2nd arg is 0 to indicate that we don't want to include autokeying mode related settings */ + keyingflag = ANIM_get_keyframing_flags(scene, 0); + /* call the API func, and set the active keyingset index */ BKE_keyingset_add(&scene->keyingsets, NULL, flag, keyingflag); @@ -326,6 +324,8 @@ static int add_keyingset_button_exec (bContext *C, wmOperator *op) keyingflag |= INSERTKEY_MATRIX; if (IS_AUTOKEY_FLAG(INSERTNEEDED)) keyingflag |= INSERTKEY_NEEDED; + if (IS_AUTOKEY_FLAG(XYZ2RGB)) + keyingflag |= INSERTKEY_XYZ2RGB; /* call the API func, and set the active keyingset index */ ks= BKE_keyingset_add(&scene->keyingsets, "ButtonKeyingSet", flag, keyingflag); @@ -1305,9 +1305,7 @@ int modify_keyframes (Scene *scene, ListBase *dsources, bAction *act, KeyingSet kflag= ks->keyingflag; /* suppliment with info from the context */ - if (IS_AUTOKEY_FLAG(AUTOMATKEY)) kflag |= INSERTKEY_MATRIX; - if (IS_AUTOKEY_FLAG(INSERTNEEDED)) kflag |= INSERTKEY_NEEDED; - if (IS_AUTOKEY_MODE(scene, EDITKEYS)) kflag |= INSERTKEY_REPLACE; + kflag |= ANIM_get_keyframing_flags(scene, 1); } else if (mode == MODIFYKEY_MODE_DELETE) kflag= 0; @@ -1354,9 +1352,9 @@ int modify_keyframes (Scene *scene, ListBase *dsources, bAction *act, KeyingSet for (; i < arraylen; i++) { /* action to take depends on mode */ if (mode == MODIFYKEY_MODE_INSERT) - success+= insert_keyframe(ksp->id, act, groupname, ksp->rna_path, i, cfra, kflag); + success += insert_keyframe(ksp->id, act, groupname, ksp->rna_path, i, cfra, kflag); else if (mode == MODIFYKEY_MODE_DELETE) - success+= delete_keyframe(ksp->id, act, groupname, ksp->rna_path, i, cfra, kflag); + success += delete_keyframe(ksp->id, act, groupname, ksp->rna_path, i, cfra, kflag); } /* set recalc-flags */ diff --git a/source/blender/editors/armature/armature_ops.c b/source/blender/editors/armature/armature_ops.c index 7caadf532e5..a3c35413680 100644 --- a/source/blender/editors/armature/armature_ops.c +++ b/source/blender/editors/armature/armature_ops.c @@ -164,13 +164,13 @@ void ED_operatormacros_armature(void) ot= WM_operatortype_append_macro("ARMATURE_OT_duplicate_move", "Duplicate", OPTYPE_UNDO|OPTYPE_REGISTER); WM_operatortype_macro_define(ot, "ARMATURE_OT_duplicate"); - otmacro= WM_operatortype_macro_define(ot, "TFM_OT_translate"); + otmacro= WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate"); RNA_enum_set(otmacro->ptr, "proportional", 0); ot= WM_operatortype_append_macro("ARMATURE_OT_extrude_move", "Extrude", OPTYPE_UNDO|OPTYPE_REGISTER); otmacro=WM_operatortype_macro_define(ot, "ARMATURE_OT_extrude"); RNA_enum_set(otmacro->ptr, "forked", 0); - otmacro= WM_operatortype_macro_define(ot, "TFM_OT_translate"); + otmacro= WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate"); RNA_enum_set(otmacro->ptr, "proportional", 0); // XXX would it be nicer to just be able to have standard extrude_move, but set the forked property separate? @@ -178,7 +178,7 @@ void ED_operatormacros_armature(void) ot= WM_operatortype_append_macro("ARMATURE_OT_extrude_forked", "Extrude Forked", OPTYPE_UNDO|OPTYPE_REGISTER); otmacro=WM_operatortype_macro_define(ot, "ARMATURE_OT_extrude"); RNA_enum_set(otmacro->ptr, "forked", 1); - otmacro= WM_operatortype_macro_define(ot, "TFM_OT_translate"); + otmacro= WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate"); RNA_enum_set(otmacro->ptr, "proportional", 0); } @@ -261,10 +261,10 @@ void ED_keymap_armature(wmKeyConfig *keyconf) /* special transforms: */ /* 1) envelope/b-bone size */ - kmi= WM_keymap_add_item(keymap, "TFM_OT_transform", SKEY, KM_PRESS, KM_ALT, 0); + kmi= WM_keymap_add_item(keymap, "TRANSFORM_OT_transform", SKEY, KM_PRESS, KM_ALT, 0); RNA_enum_set(kmi->ptr, "mode", TFM_BONESIZE); /* 2) set roll */ - kmi= WM_keymap_add_item(keymap, "TFM_OT_transform", RKEY, KM_PRESS, KM_CTRL, 0); + kmi= WM_keymap_add_item(keymap, "TRANSFORM_OT_transform", RKEY, KM_PRESS, KM_CTRL, 0); RNA_enum_set(kmi->ptr, "mode", TFM_BONE_ROLL); /* menus */ @@ -335,7 +335,7 @@ void ED_keymap_armature(wmKeyConfig *keyconf) /* special transforms: */ /* 1) envelope/b-bone size */ - kmi= WM_keymap_add_item(keymap, "TFM_OT_transform", SKEY, KM_PRESS, KM_ALT, 0); + kmi= WM_keymap_add_item(keymap, "TRANSFORM_OT_transform", SKEY, KM_PRESS, KM_ALT, 0); RNA_enum_set(kmi->ptr, "mode", TFM_BONESIZE); // XXX this should probably be in screen instead... here for testing purposes in the meantime... - Aligorith diff --git a/source/blender/editors/curve/curve_ops.c b/source/blender/editors/curve/curve_ops.c index c54739902d0..be52952b474 100644 --- a/source/blender/editors/curve/curve_ops.c +++ b/source/blender/editors/curve/curve_ops.c @@ -238,8 +238,8 @@ void ED_keymap_curve(wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "CURVE_OT_delete", DELKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "CURVE_OT_tilt_clear", TKEY, KM_PRESS, KM_ALT, 0); - RNA_enum_set(WM_keymap_add_item(keymap, "TFM_OT_transform", TKEY, KM_PRESS, KM_CTRL, 0)->ptr, "mode", TFM_TILT); - RNA_enum_set(WM_keymap_add_item(keymap, "TFM_OT_transform", SKEY, KM_PRESS, KM_ALT, 0)->ptr, "mode", TFM_CURVE_SHRINKFATTEN); + WM_keymap_add_item(keymap, "TRANSFORM_OT_tilt", TKEY, KM_PRESS, KM_CTRL, 0); + RNA_enum_set(WM_keymap_add_item(keymap, "TRANSFORM_OT_transform", SKEY, KM_PRESS, KM_ALT, 0)->ptr, "mode", TFM_CURVE_SHRINKFATTEN); RNA_enum_set(WM_keymap_add_item(keymap, "CURVE_OT_handle_type_set", HKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "type", 1); RNA_enum_set(WM_keymap_add_item(keymap, "CURVE_OT_handle_type_set", HKEY, KM_PRESS, 0, 0)->ptr, "type", 3); RNA_enum_set(WM_keymap_add_item(keymap, "CURVE_OT_handle_type_set", VKEY, KM_PRESS, 0, 0)->ptr, "type", 2); diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c index a139a75f844..a109e9149cf 100644 --- a/source/blender/editors/curve/editcurve.c +++ b/source/blender/editors/curve/editcurve.c @@ -3539,7 +3539,7 @@ static int extrude_invoke(bContext *C, wmOperator *op, wmEvent *event) { if(extrude_exec(C, op) == OPERATOR_FINISHED) { RNA_int_set(op->ptr, "mode", TFM_TRANSLATION); - WM_operator_name_call(C, "TFM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr); + WM_operator_name_call(C, "TRANSFORM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr); return OPERATOR_FINISHED; } @@ -4294,7 +4294,7 @@ static int duplicate_invoke(bContext *C, wmOperator *op, wmEvent *event) duplicate_exec(C, op); RNA_int_set(op->ptr, "mode", TFM_TRANSLATION); - WM_operator_name_call(C, "TFM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr); + WM_operator_name_call(C, "TRANSFORM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr); return OPERATOR_FINISHED; } @@ -5285,42 +5285,3 @@ void undo_push_curve(bContext *C, char *name) { undo_editmode_push(C, name, get_data, free_undoCurve, undoCurve_to_editCurve, editCurve_to_undoCurve, NULL); } - -/***************** XXX old cruft ********************/ - -void default_curve_ipo(Scene *scene, Curve *cu) -{ -#if 0 // XXX old animation system - IpoCurve *icu; - BezTriple *bezt; - - if(cu->ipo) return; - - cu->ipo= add_ipo(scene, "CurveIpo", ID_CU); - - icu= MEM_callocN(sizeof(IpoCurve), "ipocurve"); - - icu->blocktype= ID_CU; - icu->adrcode= CU_SPEED; - icu->flag= IPO_VISIBLE|IPO_SELECT|IPO_AUTO_HORIZ; - set_icu_vars(icu); - - BLI_addtail( &(cu->ipo->curve), icu); - - icu->bezt= bezt= MEM_callocN(2*sizeof(BezTriple), "defaultipo"); - icu->totvert= 2; - - bezt->hide= IPO_BEZ; - bezt->f1=bezt->f2= bezt->f3= SELECT; - bezt->h1= bezt->h2= HD_AUTO; - bezt++; - bezt->vec[1][0]= 100.0; - bezt->vec[1][1]= 1.0; - bezt->hide= IPO_BEZ; - bezt->f1=bezt->f2= bezt->f3= SELECT; - bezt->h1= bezt->h2= HD_AUTO; - - calchandles_ipocurve(icu); -#endif // XXX old animation system -} - diff --git a/source/blender/editors/datafiles/B.blend.c b/source/blender/editors/datafiles/B.blend.c index 9ee3b8d72fa..a3b4798fd5e 100644 --- a/source/blender/editors/datafiles/B.blend.c +++ b/source/blender/editors/datafiles/B.blend.c @@ -1,1832 +1,787 @@ /* DataToC output of file */ -int datatoc_B_blend_size= 320428; +int datatoc_B_blend_size= 320520; char datatoc_B_blend[]= { - 66, 76, 69, 78, 68, 69, 82, 45,118, 50, 53, 48, - 82, 69, 78, 68, 32, 0, 0, 0,224,237,191, 95,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, 24, 1, 0, 0, -240,236,191, 95,255,127, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 32, 32, 32, 56, 8, 0, 0, 0,250, 0, 0, 0, 1, 0, 0, 1, -208, 30,165, 29, 1, 0, 0, 0, 48,180, 4, 28, 1, 0, 0, 0, 0, 16, 0, 0,128, 32, 4, 0, 60,109,101,109,111,114,121, 50, - 62, 0, 0, 0, 0, 0, 0, 0, 34,239, 28, 1, 1, 0, 0, 0, 40, 0, 0, 0, 48, 0, 0, 0, 32,238,191, 95,255,127, 0, 0, - 80,237,191, 95,255,127, 0, 0,208,198,223, 28, 32, 0, 0, 0,224,237,191, 95,255,127, 0, 0, 48,147,201, 20, 1, 0, 0, 0, - 45, 0, 0, 0, 0, 0, 0, 0,118, 0, 0, 0, 0, 0, 0, 0,192,237,191, 95,255,127, 0, 0,245, 3, 94, 0, 1, 0, 0, 0, -160,237,191, 95,255,127, 0, 0,224,237,191, 95,255,127, 0, 0, 32, 0, 0, 0, 82, 69, 78, 68, 48,147,201, 20, 1, 0, 0, 0, - 82, 69, 78, 68, 32, 0, 0, 0,224,237,191, 95,255,127, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 16,238,191, 95,255,127, 0, 0, - 16,238,191, 95,255,127, 0, 0,187, 10, 94, 0, 1, 0, 0, 0, 48,102, 4, 28, 1, 0, 0, 0, 48,147,201, 20, 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, -208, 30,165, 29, 1, 0, 0, 0, 87, 77, 0, 0, 8, 1, 0, 0,144, 6,163, 29, 1, 0, 0, 0, 98, 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, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,208, 7,163, 29, 1, 0, 0, 0,208, 7,163, 29, 1, 0, 0, 0,208, 7,163, 29, 1, 0, 0, 0, -208, 7,163, 29, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 16,158,162, 21, 1, 0, 0, 0, 64, 69,200, 20, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,116,160, 21, 1, 0, 0, 0, 32, 73,200, 20, 1, 0, 0, 0, - 2, 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, 48,220,195, 20, 1, 0, 0, 0, 48,220,195, 20, 1, 0, 0, 0, - 48,220,195, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,125,140, 27, 1, 0, 0, 0, 80,125,140, 27, 1, 0, 0, 0, - 80,125,140, 27, 1, 0, 0, 0, 68, 65, 84, 65,224, 0, 0, 0,208, 7,163, 29, 1, 0, 0, 0, 99, 1, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,235,195, 20, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, -208, 30,165, 29, 1, 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,128, 7,128, 4, 0, 0, 0, 0, 1, 0,238, 3, - 0, 0, 1, 0,255,255, 0, 0, 96,160,160, 21, 1, 0, 0, 0, 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,165,164, 21, 1, 0, 0, 0,240,165,201, 20, 1, 0, 0, 0,240,165,201, 20, 1, 0, 0, 0, -240,125,140, 27, 1, 0, 0, 0,176,126,140, 27, 1, 0, 0, 0,112,127,140, 27, 1, 0, 0, 0,112,127,140, 27, 1, 0, 0, 0, - 96,103,164, 21, 1, 0, 0, 0, 80,237,200, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 78, 0, 0,208, 0, 0, 0,112,122,163, 29, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,208,190,163, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 65,110,105,109, 97,116, -105,111,110, 0, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -224,182,162, 29, 1, 0, 0, 0, 16,176, 20, 27, 1, 0, 0, 0, 80,148, 21, 27, 1, 0, 0, 0, 32,132,163, 29, 1, 0, 0, 0, -128,132,163, 29, 1, 0, 0, 0,144, 0,164, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48,180, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 48, 21, 0, 1, 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,224,182,162, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, -240, 77,162, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,240, 77,162, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,112, 2,160, 29, 1, 0, 0, 0, -224,182,162, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -112, 2,160, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,160, 41,161, 29, 1, 0, 0, 0,240, 77,162, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 7,128, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,160, 41,161, 29, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,208,140,162, 21, 1, 0, 0, 0,112, 2,160, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,208,140,162, 21, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, -144,246,142, 27, 1, 0, 0, 0,160, 41,161, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 4, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,144,246,142, 27, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 64,141,160, 21, 1, 0, 0, 0, -208,140,162, 21, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,100, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, - 64,141,160, 21, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 32, 31,142, 27, 1, 0, 0, 0,144,246,142, 27, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 32, 31,142, 27, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,160,237,142, 27, 1, 0, 0, 0, 64,141,160, 21, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 6,100, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,160,237,142, 27, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, - 0, 62,142, 27, 1, 0, 0, 0, 32, 31,142, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 6,228, 1, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 0, 62,142, 27, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,240,185,140, 27, 1, 0, 0, 0, -160,237,142, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,228, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -240,185,140, 27, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 64,242,142, 27, 1, 0, 0, 0, 0, 62,142, 27, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 64,242,142, 27, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,240,143, 21, 27, 1, 0, 0, 0,240,185,140, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 6,128, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,240,143, 21, 27, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, - 96, 4,162, 29, 1, 0, 0, 0, 64,242,142, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,156, 2,128, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 96, 4,162, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 32,142,160, 21, 1, 0, 0, 0, -240,143, 21, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,156, 2,100, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, - 32,142,160, 21, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 80,164, 21, 27, 1, 0, 0, 0, 96, 4,162, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 1, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 80,164, 21, 27, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,176, 5,143, 27, 1, 0, 0, 0, 32,142,160, 21, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -156, 2,148, 1, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,176, 5,143, 27, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, - 16,176, 20, 27, 1, 0, 0, 0, 80,164, 21, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 6,116, 3, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 16,176, 20, 27, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, 5,143, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,116, 3, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 80,148, 21, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 48,194, 20, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, 2,160, 29, 1, 0, 0, 0,240, 77,162, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 48,194, 20, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,224,154, 21, 27, 1, 0, 0, 0, 80,148, 21, 27, 1, 0, 0, 0, -208,140,162, 21, 1, 0, 0, 0,240, 77,162, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -224,154, 21, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 3,162, 29, 1, 0, 0, 0, 48,194, 20, 27, 1, 0, 0, 0, -144,246,142, 27, 1, 0, 0, 0,112, 2,160, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 0, 3,162, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 16,162, 29, 1, 0, 0, 0,224,154, 21, 27, 1, 0, 0, 0, -208,140,162, 21, 1, 0, 0, 0,144,246,142, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 0, 16,162, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,128,123,163, 29, 1, 0, 0, 0, 0, 3,162, 29, 1, 0, 0, 0, - 64,141,160, 21, 1, 0, 0, 0,224,182,162, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -128,123,163, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,224,123,163, 29, 1, 0, 0, 0, 0, 16,162, 29, 1, 0, 0, 0, - 64,141,160, 21, 1, 0, 0, 0,160, 41,161, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -224,123,163, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 64,124,163, 29, 1, 0, 0, 0,128,123,163, 29, 1, 0, 0, 0, - 32, 31,142, 27, 1, 0, 0, 0,144,246,142, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 64,124,163, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,160,124,163, 29, 1, 0, 0, 0,224,123,163, 29, 1, 0, 0, 0, - 64,141,160, 21, 1, 0, 0, 0,160,237,142, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -160,124,163, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0,125,163, 29, 1, 0, 0, 0, 64,124,163, 29, 1, 0, 0, 0, - 0, 62,142, 27, 1, 0, 0, 0,160, 41,161, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 0,125,163, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 96,125,163, 29, 1, 0, 0, 0,160,124,163, 29, 1, 0, 0, 0, - 0, 62,142, 27, 1, 0, 0, 0,160,237,142, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 96,125,163, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,192,125,163, 29, 1, 0, 0, 0, 0,125,163, 29, 1, 0, 0, 0, -240,185,140, 27, 1, 0, 0, 0,224,182,162, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -192,125,163, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 32,126,163, 29, 1, 0, 0, 0, 96,125,163, 29, 1, 0, 0, 0, - 32, 31,142, 27, 1, 0, 0, 0, 64,242,142, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 32,126,163, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,128,126,163, 29, 1, 0, 0, 0,192,125,163, 29, 1, 0, 0, 0, - 64,141,160, 21, 1, 0, 0, 0, 64,242,142, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -128,126,163, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,224,126,163, 29, 1, 0, 0, 0, 32,126,163, 29, 1, 0, 0, 0, -240,185,140, 27, 1, 0, 0, 0, 64,242,142, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -224,126,163, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 64,127,163, 29, 1, 0, 0, 0,128,126,163, 29, 1, 0, 0, 0, -240,143, 21, 27, 1, 0, 0, 0,240,185,140, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 64,127,163, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,160,127,163, 29, 1, 0, 0, 0,224,126,163, 29, 1, 0, 0, 0, -240,143, 21, 27, 1, 0, 0, 0, 64,242,142, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -160,127,163, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0,128,163, 29, 1, 0, 0, 0, 64,127,163, 29, 1, 0, 0, 0, -208,140,162, 21, 1, 0, 0, 0, 96, 4,162, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 0,128,163, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 96,128,163, 29, 1, 0, 0, 0,160,127,163, 29, 1, 0, 0, 0, - 32, 31,142, 27, 1, 0, 0, 0, 96, 4,162, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 96,128,163, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,192,128,163, 29, 1, 0, 0, 0, 0,128,163, 29, 1, 0, 0, 0, -240,143, 21, 27, 1, 0, 0, 0, 96, 4,162, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -192,128,163, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 32,129,163, 29, 1, 0, 0, 0, 96,128,163, 29, 1, 0, 0, 0, - 32,142,160, 21, 1, 0, 0, 0,240,185,140, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 32,129,163, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,128,129,163, 29, 1, 0, 0, 0,192,128,163, 29, 1, 0, 0, 0, -240,143, 21, 27, 1, 0, 0, 0, 80,164, 21, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -128,129,163, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,224,129,163, 29, 1, 0, 0, 0, 32,129,163, 29, 1, 0, 0, 0, - 32,142,160, 21, 1, 0, 0, 0, 80,164, 21, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -224,129,163, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 64,130,163, 29, 1, 0, 0, 0,128,129,163, 29, 1, 0, 0, 0, -160,237,142, 27, 1, 0, 0, 0,176, 5,143, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 64,130,163, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,160,130,163, 29, 1, 0, 0, 0,224,129,163, 29, 1, 0, 0, 0, - 32, 31,142, 27, 1, 0, 0, 0,176, 5,143, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -160,130,163, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0,131,163, 29, 1, 0, 0, 0, 64,130,163, 29, 1, 0, 0, 0, - 16,176, 20, 27, 1, 0, 0, 0,144,246,142, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 0,131,163, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 96,131,163, 29, 1, 0, 0, 0,160,130,163, 29, 1, 0, 0, 0, - 16,176, 20, 27, 1, 0, 0, 0, 0, 62,142, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 96,131,163, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,192,131,163, 29, 1, 0, 0, 0, 0,131,163, 29, 1, 0, 0, 0, - 16,176, 20, 27, 1, 0, 0, 0,176, 5,143, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -192,131,163, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 32,132,163, 29, 1, 0, 0, 0, 96,131,163, 29, 1, 0, 0, 0, - 32,142,160, 21, 1, 0, 0, 0,208,140,162, 21, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 32,132,163, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,131,163, 29, 1, 0, 0, 0, - 80,164, 21, 27, 1, 0, 0, 0, 96, 4,162, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, -128,132,163, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 32,136,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208,140,162, 21, 1, 0, 0, 0,240, 77,162, 29, 1, 0, 0, 0,112, 2,160, 29, 1, 0, 0, 0,144,246,142, 27, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,101, 4, 0, 0,128, 4, 0, 0, 7, 7,129, 7, 28, 0, 1, 0, - 0, 0, 0, 0, 7, 0, 0, 0,208,144,217, 2, 1, 0, 0, 0,112,241,162, 29, 1, 0, 0, 0,112,241,162, 29, 1, 0, 0, 0, - 96,133,163, 29, 1, 0, 0, 0,192,134,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -160, 45,202, 20, 1, 0, 0, 0, 0, 25,200, 20, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 96,133,163, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0,192,134,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,162, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,240, 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,128, 7, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,129, 7, 26, 0,129, 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, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,101, 4, 0, 0,126, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,144,146,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,192,134,163, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,133,163, 29, 1, 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, 0, 63, 0, 0, 0, 64, - 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 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, 0, 0, 0, 0,128, 7, 0, 0,127, 4, 0, 0,128, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,176,145,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 32,136,163, 29, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 16,160,163, 29, 1, 0, 0, 0,128,132,163, 29, 1, 0, 0, 0, 64,141,160, 21, 1, 0, 0, 0, -160,237,142, 27, 1, 0, 0, 0, 0, 62,142, 27, 1, 0, 0, 0,160, 41,161, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 49, 6, 0, 0,128, 7, 0, 0, 0, 0, 0, 0,227, 1, 0, 0, 4, 4, 80, 1,228, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 64,141,217, 2, 1, 0, 0, 0,176,162,163, 29, 1, 0, 0, 0,176,166,163, 29, 1, 0, 0, 0, 0,137,163, 29, 1, 0, 0, 0, - 96,138,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,134,201, 20, 1, 0, 0, 0, - 0,224,200, 20, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0,137,163, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 96,138,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0,168, 67, 0, 0, 0, 0, 0, 0,248, 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, 1, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, - 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0, 80, 1, 31, 0, 80, 1, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 49, 6, 0, 0,128, 7, 0, 0,197, 1, 0, 0,227, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80, 1, 31, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240,143,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 96,138,163, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0,137,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0,128,159, 67, 0, 64, 68,196, 0, 0, 0, 0, - 0, 0, 0, 0, 1,128,159, 67, 1,128,217,195, 0, 0, 0, 0, 63, 1, 0, 0, 80, 1, 0, 0, 18, 0, 0, 0,196, 1, 0, 0, - 0, 0, 0, 0, 62, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 62, 1, 0, 0, 18, 0, 0, 0,196, 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, 4, 6, 0, 80, 1,197, 1, 63, 1,179, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,129,160, 21, 1, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 49, 6, 0, 0,128, 7, 0, 0, 0, 0, 0, 0,196, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,197, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 32,142,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,139,163, 29, 1, 0, 0, 0, - 32,161,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,192,139,163, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, - 80,141,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143,217, 2, 1, 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, 63, 1, 36, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, - 80,141,163, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,224,142,163, 29, 1, 0, 0, 0,192,139,163, 29, 1, 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, 63, 1, 61, 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, + 66, 76, 69, 78, 68, 69, 82, 45, +118, 50, 53, 48, 82, 69, 78, 68, 32, 0, 0, 0,224,237,191, 95,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, + 24, 1, 0, 0,240,236,191, 95,255,127, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 32, 32, 32, 56, 8, 0, 0, 0,250, 0, 0, 0, + 1, 0, 0, 1, 32,158,131, 29, 1, 0, 0, 0, 48, 66,136, 27, 1, 0, 0, 0, 0, 16, 0, 0,128, 32, 4, 0, 60,109,101,109, +111,114,121, 50, 62, 0, 0, 0, 0, 0, 0, 0,178, 38, 29, 1, 1, 0, 0, 0, 40, 0, 0, 0, 48, 0, 0, 0, 32,238,191, 95, +255,127, 0, 0, 80,237,191, 95,255,127, 0, 0,208,230, 29, 29, 32, 0, 0, 0,224,237,191, 95,255,127, 0, 0,208, 78,111, 27, + 1, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0,118, 0, 0, 0, 0, 0, 0, 0,192,237,191, 95,255,127, 0, 0, 13,241, 93, 0, + 1, 0, 0, 0,160,237,191, 95,255,127, 0, 0,224,237,191, 95,255,127, 0, 0, 32, 0, 0, 0, 82, 69, 78, 68,208, 78,111, 27, + 1, 0, 0, 0, 82, 69, 78, 68, 32, 0, 0, 0,224,237,191, 95,255,127, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 16,238,191, 95, +255,127, 0, 0, 16,238,191, 95,255,127, 0, 0,211,247, 93, 0, 1, 0, 0, 0, 48, 88,131, 27, 1, 0, 0, 0,208, 78,111, 27, + 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, 32,158,131, 29, 1, 0, 0, 0, 87, 77, 0, 0, 8, 1, 0, 0,208, 87,128, 29, 1, 0, 0, 0, 98, 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, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 89,128, 29, 1, 0, 0, 0, 16, 89,128, 29, 1, 0, 0, 0, 16, 89,128, 29, + 1, 0, 0, 0, 16, 89,128, 29, 1, 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, 2, 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,192,200,129, 29, 1, 0, 0, 0,192,200,129, 29, + 1, 0, 0, 0,192,200,129, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 85,107, 27, 1, 0, 0, 0, 48, 85,107, 27, + 1, 0, 0, 0, 48, 85,107, 27, 1, 0, 0, 0, 68, 65, 84, 65,232, 0, 0, 0, 16, 89,128, 29, 1, 0, 0, 0, 99, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,254,195, 20, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 32,158,131, 29, 1, 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,128, 7,128, 4, 0, 0, 0, 0, + 1, 0,238, 3, 0, 0, 1, 0,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,181,176, 21, 1, 0, 0, 0, 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,178,178, 21, 1, 0, 0, 0, 64,117,129, 29, + 1, 0, 0, 0, 64,117,129, 29, 1, 0, 0, 0,208, 85,107, 27, 1, 0, 0, 0,144, 86,107, 27, 1, 0, 0, 0, 80, 87,107, 27, + 1, 0, 0, 0, 80, 87,107, 27, 1, 0, 0, 0,128, 2,128, 29, 1, 0, 0, 0,240, 54,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0,208, 0, 0, 0, 48, 90,128, 29, 1, 0, 0, 0,191, 0, 0, 0, + 1, 0, 0, 0,240,200,110, 27, 1, 0, 0, 0, 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, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,242,129, 29, 1, 0, 0, 0, 0,160,129, 29, 1, 0, 0, 0, 0, 9,130, 29, + 1, 0, 0, 0,192, 92,128, 29, 1, 0, 0, 0, 32, 93,128, 29, 1, 0, 0, 0, 32,189,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 66,136, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 96,242,129, 29, + 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 48,240,107, 27, 1, 0, 0, 0, 0, 0, 0, 0, 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, 48,240,107, 27, 1, 0, 0, 0,192, 0, 0, 0, + 1, 0, 0, 0,160, 55,130, 29, 1, 0, 0, 0, 96,242,129, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 4, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,160, 55,130, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 16,244,129, 29, + 1, 0, 0, 0, 48,240,107, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,128, 4, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0, 16,244,129, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,112,176,129, 29, 1, 0, 0, 0,160, 55,130, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,112,176,129, 29, + 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0, 61,131, 29, 1, 0, 0, 0, 16,244,129, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,100, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 0, 61,131, 29, 1, 0, 0, 0,192, 0, 0, 0, + 1, 0, 0, 0,240, 39,245, 26, 1, 0, 0, 0,112,176,129, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,100, 4, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,240, 39,245, 26, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,160, 56,130, 29, + 1, 0, 0, 0, 0, 61,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0,160, 56,130, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0,252,130, 29, 1, 0, 0, 0,240, 39,245, 26, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 6,100, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 0,252,130, 29, + 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,160,201,129, 29, 1, 0, 0, 0,160, 56,130, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 6,228, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,160,201,129, 29, 1, 0, 0, 0,192, 0, 0, 0, + 1, 0, 0, 0,144,239,129, 29, 1, 0, 0, 0, 0,252,130, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,228, 1, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,144,239,129, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,192,227,179, 21, + 1, 0, 0, 0,160,201,129, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0,192,227,179, 21, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,144, 35,245, 26, 1, 0, 0, 0,144,239,129, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 6,128, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,144, 35,245, 26, + 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,160, 78,129, 29, 1, 0, 0, 0,192,227,179, 21, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,156, 2,128, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,160, 78,129, 29, 1, 0, 0, 0,192, 0, 0, 0, + 1, 0, 0, 0,128, 65,129, 29, 1, 0, 0, 0,144, 35,245, 26, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,156, 2,100, 4, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,128, 65,129, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,208, 40,108, 27, + 1, 0, 0, 0,160, 78,129, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 1, 1, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0,208, 40,108, 27, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 32,106,130, 29, 1, 0, 0, 0,128, 65,129, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,156, 2,148, 1, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 32,106,130, 29, + 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0,160,129, 29, 1, 0, 0, 0,208, 40,108, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 6,116, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 0,160,129, 29, 1, 0, 0, 0,192, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,106,130, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,116, 3, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 0, 9,130, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,208, 50,130, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,240,107, 27, 1, 0, 0, 0,160, 55,130, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,208, 50,130, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,240, 42,131, 29, + 1, 0, 0, 0, 0, 9,130, 29, 1, 0, 0, 0, 48,240,107, 27, 1, 0, 0, 0,112,176,129, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,240, 42,131, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,224, 89,244, 26, + 1, 0, 0, 0,208, 50,130, 29, 1, 0, 0, 0,160, 55,130, 29, 1, 0, 0, 0, 0, 61,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,224, 89,244, 26, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 16,110,129, 29, + 1, 0, 0, 0,240, 42,131, 29, 1, 0, 0, 0,112,176,129, 29, 1, 0, 0, 0, 0, 61,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 16,110,129, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,160,184,130, 29, + 1, 0, 0, 0,224, 89,244, 26, 1, 0, 0, 0,240, 39,245, 26, 1, 0, 0, 0, 96,242,129, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,160,184,130, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,160,243,130, 29, + 1, 0, 0, 0, 16,110,129, 29, 1, 0, 0, 0,240, 39,245, 26, 1, 0, 0, 0, 16,244,129, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,160,243,130, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 32,223,129, 29, + 1, 0, 0, 0,160,184,130, 29, 1, 0, 0, 0,160, 56,130, 29, 1, 0, 0, 0, 0, 61,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 32,223,129, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 64, 45,244, 26, + 1, 0, 0, 0,160,243,130, 29, 1, 0, 0, 0,240, 39,245, 26, 1, 0, 0, 0, 0,252,130, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 64, 45,244, 26, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,128,171,129, 29, + 1, 0, 0, 0, 32,223,129, 29, 1, 0, 0, 0,160,201,129, 29, 1, 0, 0, 0, 16,244,129, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,128,171,129, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,160,199,129, 29, + 1, 0, 0, 0, 64, 45,244, 26, 1, 0, 0, 0,160,201,129, 29, 1, 0, 0, 0, 0,252,130, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,160,199,129, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 80, 79,129, 29, + 1, 0, 0, 0,128,171,129, 29, 1, 0, 0, 0,144,239,129, 29, 1, 0, 0, 0, 96,242,129, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 80, 79,129, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 32, 66,129, 29, + 1, 0, 0, 0,160,199,129, 29, 1, 0, 0, 0,192,227,179, 21, 1, 0, 0, 0,160, 56,130, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 32, 66,129, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 16, 47,130, 29, + 1, 0, 0, 0, 80, 79,129, 29, 1, 0, 0, 0,192,227,179, 21, 1, 0, 0, 0,240, 39,245, 26, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 16, 47,130, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,192,184,109, 27, + 1, 0, 0, 0, 32, 66,129, 29, 1, 0, 0, 0,192,227,179, 21, 1, 0, 0, 0,144,239,129, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,192,184,109, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,144, 56,131, 29, + 1, 0, 0, 0, 16, 47,130, 29, 1, 0, 0, 0,144, 35,245, 26, 1, 0, 0, 0,144,239,129, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,144, 56,131, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 96,108,129, 29, + 1, 0, 0, 0,192,184,109, 27, 1, 0, 0, 0,192,227,179, 21, 1, 0, 0, 0,144, 35,245, 26, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 96,108,129, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 32,150,129, 29, + 1, 0, 0, 0,144, 56,131, 29, 1, 0, 0, 0,160, 78,129, 29, 1, 0, 0, 0,112,176,129, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 32,150,129, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,128, 41,108, 27, + 1, 0, 0, 0, 96,108,129, 29, 1, 0, 0, 0,160, 78,129, 29, 1, 0, 0, 0,160, 56,130, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,128, 41,108, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 16,195,129, 29, + 1, 0, 0, 0, 32,150,129, 29, 1, 0, 0, 0,144, 35,245, 26, 1, 0, 0, 0,160, 78,129, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 16,195,129, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,160,242,108, 27, + 1, 0, 0, 0,128, 41,108, 27, 1, 0, 0, 0,128, 65,129, 29, 1, 0, 0, 0,144,239,129, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,160,242,108, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 64, 20,130, 29, + 1, 0, 0, 0, 16,195,129, 29, 1, 0, 0, 0,144, 35,245, 26, 1, 0, 0, 0,208, 40,108, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 64, 20,130, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 96,185,129, 29, + 1, 0, 0, 0,160,242,108, 27, 1, 0, 0, 0,208, 40,108, 27, 1, 0, 0, 0,128, 65,129, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 96,185,129, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 48,177,176, 21, + 1, 0, 0, 0, 64, 20,130, 29, 1, 0, 0, 0, 32,106,130, 29, 1, 0, 0, 0, 0,252,130, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 48,177,176, 21, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 64, 91,128, 29, + 1, 0, 0, 0, 96,185,129, 29, 1, 0, 0, 0,160, 56,130, 29, 1, 0, 0, 0, 32,106,130, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 64, 91,128, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,160, 91,128, 29, + 1, 0, 0, 0, 48,177,176, 21, 1, 0, 0, 0, 0,160,129, 29, 1, 0, 0, 0, 0, 61,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,160, 91,128, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 92,128, 29, + 1, 0, 0, 0, 64, 91,128, 29, 1, 0, 0, 0, 0,160,129, 29, 1, 0, 0, 0,160,201,129, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 0, 92,128, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 96, 92,128, 29, + 1, 0, 0, 0,160, 91,128, 29, 1, 0, 0, 0, 0,160,129, 29, 1, 0, 0, 0, 32,106,130, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 96, 92,128, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,192, 92,128, 29, + 1, 0, 0, 0, 0, 92,128, 29, 1, 0, 0, 0,128, 65,129, 29, 1, 0, 0, 0,112,176,129, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,192, 92,128, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 96, 92,128, 29, 1, 0, 0, 0,208, 40,108, 27, 1, 0, 0, 0,160, 78,129, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 32, 93,128, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,192, 96,128, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,176,129, 29, 1, 0, 0, 0, 48,240,107, 27, 1, 0, 0, 0,160, 55,130, 29, + 1, 0, 0, 0, 0, 61,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,101, 4, 0, 0, +128, 4, 0, 0, 7, 7,129, 7, 28, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,200,110, 27, + 1, 0, 0, 0,112,200,110, 27, 1, 0, 0, 0, 0, 94,128, 29, 1, 0, 0, 0, 96, 95,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0, 0, 94,128, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 96, 95,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,224,162, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,240, 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,128, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,129, 7, 26, 0,129, 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, 0, 0, 0, 0, 0, 0, 0, 0, +128, 7, 0, 0,101, 4, 0, 0,126, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 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, 68, 65, 84, 65, + 40, 1, 0, 0, 96, 95,128, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94,128, 29, + 1, 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, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 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, 0, 0, 0, 0, +128, 7, 0, 0,127, 4, 0, 0,128, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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,192, 96,128, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,160,127,128, 29, 1, 0, 0, 0, 32, 93,128, 29, + 1, 0, 0, 0,240, 39,245, 26, 1, 0, 0, 0, 0,252,130, 29, 1, 0, 0, 0,160,201,129, 29, 1, 0, 0, 0, 16,244,129, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 6, 0, 0,128, 7, 0, 0, 0, 0, 0, 0,227, 1, 0, 0, 4, 4, 80, 1, +228, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,122,128, 29, 1, 0, 0, 0, 64,126,128, 29, + 1, 0, 0, 0,160, 97,128, 29, 1, 0, 0, 0, 0, 99,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160, 97,128, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 99,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,205, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,168, 67, 0, 0, 0, 0, 0, 0,248, 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, 1, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 80, 1, 31, 0, 80, 1, 31, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 6, 0, 0,128, 7, 0, 0,197, 1, 0, 0, +227, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1, 31, 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, 68, 65, 84, 65, 40, 1, 0, 0, 0, 99,128, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 97,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0,128,159, 67, 0, 64, 68,196, 0, 0, 0, 0, 0, 0, 0, 0, 1,128,159, 67, 1,128,217,195, 0, 0, 0, 0, 63, 1, 0, 0, + 80, 1, 0, 0, 18, 0, 0, 0,196, 1, 0, 0, 0, 0, 0, 0, 62, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, + 62, 1, 0, 0, 18, 0, 0, 0,196, 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, 4, 6, 0, 80, 1,197, 1, 63, 1,179, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 6, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, +196, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,197, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 96,100,128, 29, 1, 0, 0, 0,176,120,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 96,100,128, 29, + 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,240,101,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 63, 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,240,101,128, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,128,103,128, 29, + 1, 0, 0, 0, 96,100,128, 29, 1, 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, + 63, 1, 61, 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,128,103,128, 29, + 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 16,105,128, 29, 1, 0, 0, 0,240,101,128, 29, 1, 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, 50,255, 63, 1, 61, 0, 0, 0, 0, 0, 0, 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, 88, 1, 0, 0, 16,105,128, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,160,106,128, 29, + 1, 0, 0, 0,128,103,128, 29, 1, 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,213,254, + 63, 1, 69, 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, 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,160,106,128, 29, + 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 48,108,128, 29, 1, 0, 0, 0, 16,105,128, 29, 1, 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,153,254, 63, 1, 36, 0, 20, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 88, 1, 0, 0,224,142,163, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, -112,144,163, 29, 1, 0, 0, 0, 80,141,163, 29, 1, 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, 68, 65, 84, 65, 88, 1, 0, 0, 48,108,128, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,192,109,128, 29, + 1, 0, 0, 0,160,106,128, 29, 1, 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, + 63, 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, - 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, 50,255, 63, 1, 61, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 88, 1, 0, 0,192,109,128, 29, + 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 80,111,128, 29, 1, 0, 0, 0, 48,108,128, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -112,144,163, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0,146,163, 29, 1, 0, 0, 0,224,142,163, 29, 1, 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, 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, 0, 0, 0, 0,213,254, 63, 1, 69, 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, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255, 63, 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, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 0,146,163, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, -144,147,163, 29, 1, 0, 0, 0,112,144,163, 29, 1, 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, 68, 65, 84, 65, 88, 1, 0, 0, 80,111,128, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,224,112,128, 29, + 1, 0, 0, 0,192,109,128, 29, 1, 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, + 63, 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, - 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, 68, 65, 84, 65, 88, 1, 0, 0,224,112,128, 29, + 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,112,114,128, 29, 1, 0, 0, 0, 80,111,128, 29, 1, 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,153,254, 63, 1, 36, 0, 20, 0, 0, 0, 0, 0, 0, 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, -144,147,163, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 32,149,163, 29, 1, 0, 0, 0, 0,146,163, 29, 1, 0, 0, 0, - 32,198, 17, 27, 1, 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, 63, 1, 61, 0, 0, 0, 0, 0, 0, 0, 2, 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, 32,149,163, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, -176,150,163, 29, 1, 0, 0, 0,144,147,163, 29, 1, 0, 0, 0, 0,200, 17, 27, 1, 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, 63, 1, 0, 0, 0, 0, 0, 0, 4, 0, 2, 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, -176,150,163, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 64,152,163, 29, 1, 0, 0, 0, 32,149,163, 29, 1, 0, 0, 0, - 96,202, 17, 27, 1, 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, 63, 1,203, 0, 0, 0, 0, 0, 0, 0, 10, 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, 64,152,163, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, -208,153,163, 29, 1, 0, 0, 0,176,150,163, 29, 1, 0, 0, 0,192,204, 17, 27, 1, 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, 63, 1, 58, 0, 20, 0, 0, 0, 0, 0, 2, 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, -208,153,163, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 96,155,163, 29, 1, 0, 0, 0, 64,152,163, 29, 1, 0, 0, 0, - 32,207, 17, 27, 1, 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,188,253, 63, 1,102, 0, 0, 0, 0, 0, 0, 0, 2, 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, 96,155,163, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, -240,156,163, 29, 1, 0, 0, 0,208,153,163, 29, 1, 0, 0, 0,128,209, 17, 27, 1, 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, 59,253, 63, 1,105, 0, 0, 0, 0, 0, 0, 0, 2, 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, -240,156,163, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,128,158,163, 29, 1, 0, 0, 0, 96,155,163, 29, 1, 0, 0, 0, - 16,142, 17, 27, 1, 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, 35,253, 63, 1, 0, 0, 0, 0, 0, 0, 4, 0, 2, 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,128,158,163, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, - 32,161,163, 29, 1, 0, 0, 0,240,156,163, 29, 1, 0, 0, 0, 48,215, 17, 27, 1, 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, 11,253, 63, 1, 0, 0, 0, 0, 0, 0, 4, 0, 2, 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, - 32,161,163, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,158,163, 29, 1, 0, 0, 0, -144,217, 17, 27, 1, 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,243,252, 63, 1, 0, 0, 20, 0, 0, 0, 4, 0, 3, 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, 0, 1, 0, 0,176,162,163, 29, 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, -176,166,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58,254, 63, 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,112,114,128, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0,116,128, 29, + 1, 0, 0, 0,224,112,128, 29, 1, 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,188,253, + 63, 1,102, 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, 0,116,128, 29, + 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,144,117,128, 29, 1, 0, 0, 0,112,114,128, 29, 1, 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, - 2, 0, 1, 0, 0, 0, 0, 0, 64,166,162, 21, 1, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,240,163,163, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 80,165,163, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 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, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, - 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, - 26, 0, 20, 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, 0, 0, 0, 0, - 89, 6, 0, 0,108, 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, - 20, 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, 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, - 68, 65, 84, 65, 40, 1, 0, 0, 80,165,163, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240,163,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59,253, 63, 1,105, 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,144,117,128, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 32,119,128, 29, + 1, 0, 0, 0, 0,116,128, 29, 1, 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, 35,253, + 63, 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, - 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 20, 1, 55, 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, 68, 65, 84, 65, 88, 1, 0, 0, 32,119,128, 29, + 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,176,120,128, 29, 1, 0, 0, 0,144,117,128, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 14, 4, 28, 1, 0, 0, 0, - 68, 65, 84, 65, 88, 3, 0, 0, 48, 14, 4, 28, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 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, - 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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, 32,193, 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, 32, 65, 0, 0,128, 63,103,212,136, 64, 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, - 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 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, 32,193, 0, 0,128, 63,103,212,136, 64, 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, - 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 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, 11,253, 63, 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,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 68, 65, 84, 65, 88, 1, 0, 0,176,120,128, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 32,119,128, 29, 1, 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,243,252, + 63, 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, 0, 1, 0, 0, 64,122,128, 29, + 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, 64,126,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0,176,166,163, 29, 1, 0, 0, 0, -158, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,162,163, 29, 1, 0, 0, 0,240,163,163, 29, 1, 0, 0, 0, - 80,165,163, 29, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, - 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 40, 1, 0, 0,128,123,128, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,224,124,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 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, 19, 1, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 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, 0, 0, 0, 0, 89, 6, 0, 0,108, 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, 20, 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, - 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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, 16,160,163, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -208,171,163, 29, 1, 0, 0, 0, 32,136,163, 29, 1, 0, 0, 0,224,182,162, 29, 1, 0, 0, 0,240,185,140, 27, 1, 0, 0, 0, - 64,242,142, 27, 1, 0, 0, 0, 64,141,160, 21, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0, - 0, 0, 0, 0,127, 0, 0, 0, 15, 15, 48, 6,128, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,109,217, 2, 1, 0, 0, 0, -208,170,163, 29, 1, 0, 0, 0,240,248,162, 29, 1, 0, 0, 0, 16,168,163, 29, 1, 0, 0, 0,112,169,163, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,255,199, 20, 1, 0, 0, 0,224, 25,200, 20, 1, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 16,168,163, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,112,169,163, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,136, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,198, 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, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, - 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 48, 6, - 26, 0, 48, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 47, 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, - 48, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,110,217, 2, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224,124,128, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,123,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,112,169,163, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16,168,163, 29, 1, 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, 47, 6, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0, 18, 0, 0, 0,101, 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, 48, 6, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 47, 6, 0, 0, 26, 0, 0, 0,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 6,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,200, 0, 0, 0,208,170,163, 29, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0,240,248,162, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 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, 48, 92,131, 27, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48, 92,131, 27, 1, 0, 0, 0,157, 0, 0, 0, + 1, 0, 0, 0,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, + 0, 0, 0,128, 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, 32,193, + 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, 32, 65, + 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, + 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67, +129,255, 71, 66, 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, 32,193, + 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, + 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 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, 1, 0, 0, 0, 6, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 48,246,162, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,144,247,162, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,203, 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, 87, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, - 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 88, 6, - 26, 0, 88, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 87, 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, - 88, 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, - 68, 65, 84, 65, 40, 1, 0, 0,144,247,162, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48,246,162, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 6, 0, 0, 26, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 88, 6, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 1, 0, 0, 64,126,128, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,122,128, 29, + 1, 0, 0, 0,128,123,128, 29, 1, 0, 0, 0,224,124,128, 29, 1, 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, + 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48, 68,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 18, 4, 28, 1, 0, 0, 0, - 68, 65, 84, 65, 88, 3, 0, 0, 48, 18, 4, 28, 1, 0, 0, 0,157, 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, 87,213,108, 66, 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,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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, 32,193, 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, 32, 65, 0, 0,128, 63, 0, 0,140, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, 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,184,175, 31, 65, 0, 0, 32, 65,161, 14,106, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 91,138, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 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, 32,193, 0, 0,128, 63, 0, 0,140, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, 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,184,175, 31, 65, 0, 0, 32, 65, 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, 0, 0, 0, 0, 8, 0, + 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, + 1, 0, 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, 0, 0, 0, 0, + 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,160,127,128, 29, + 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 96,136,128, 29, 1, 0, 0, 0,192, 96,128, 29, 1, 0, 0, 0, 96,242,129, 29, + 1, 0, 0, 0,144,239,129, 29, 1, 0, 0, 0,192,227,179, 21, 1, 0, 0, 0,240, 39,245, 26, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0, 0, 0, 0, 0,127, 0, 0, 0, 15, 15, 48, 6,128, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,131,128, 29, 1, 0, 0, 0, 0,135,128, 29, 1, 0, 0, 0,128,128,128, 29, + 1, 0, 0, 0,224,129,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128,128,128, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,224,129,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,136, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0,198, 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, 6, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 48, 6, 26, 0, 48, 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, 0, 0, 0, 0, 0, 0, 0, 0, 47, 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, 48, 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,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52,149,147, 58, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 68, 65, 84, 65, 40, 1, 0, 0,224,129,128, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,128, 29, 1, 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, 47, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0, 18, 0, 0, 0, +101, 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, 48, 6,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0, 26, 0, 0, 0,127, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 6,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0, 64,131,128, 29, 1, 0, 0, 0,173, 0, 0, 0, + 1, 0, 0, 0, 0,135,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64,132,128, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,160,133,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0,203, 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, 87, 6, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 88, 6, 26, 0, 88, 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, 0, 0, 0, 0, 0, 0, 0, 0, 87, 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, 88, 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, 68, 65, 84, 65, 32, 1, 0, 0,240,248,162, 29, 1, 0, 0, 0, -158, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,170,163, 29, 1, 0, 0, 0, 48,246,162, 29, 1, 0, 0, 0, -144,247,162, 29, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, - 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160,133,128, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,132,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,208,171,163, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -176,187,162, 29, 1, 0, 0, 0, 16,160,163, 29, 1, 0, 0, 0,160,237,142, 27, 1, 0, 0, 0,176, 5,143, 27, 1, 0, 0, 0, - 16,176, 20, 27, 1, 0, 0, 0, 0, 62,142, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 6, 0, 0,128, 7, 0, 0, -229, 1, 0, 0,115, 3, 0, 0, 3, 3, 80, 1,143, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,106,217, 2, 1, 0, 0, 0, - 16,253,162, 29, 1, 0, 0, 0, 80,186,162, 29, 1, 0, 0, 0, 80,250,162, 29, 1, 0, 0, 0,176,251,162, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 46,200, 20, 1, 0, 0, 0, 32, 66,201, 20, 1, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 80,250,162, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,176,251,162, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,163, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,168, 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, 79, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 66, 67, 0, 0,200, 65, - 0, 0, 66, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 80, 1, - 26, 0, 80, 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, 0, 0, 0, 0, - 49, 6, 0, 0,128, 7, 0, 0, 90, 3, 0, 0,115, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80, 1, 26, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,108,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,176,251,162, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80,250,162, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0,128,131, 67, 0, 0,228,194, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,159, 67, - 0,128,177,195, 0, 0, 0, 0, 63, 1, 0, 0, 80, 1, 0, 0, 18, 0, 0, 0,116, 1, 0, 0, 0, 0, 0, 0, 62, 1, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 62, 1, 0, 0, 18, 0, 0, 0,116, 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, 18, 0, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0, 80, 1, -117, 1, 63, 1, 99, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 49, 6, 0, 0,128, 7, 0, 0,229, 1, 0, 0, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80, 1,117, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,107,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 6, 0, 0, 26, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 6, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 16,253,162, 29, 1, 0, 0, 0,167, 0, 0, 0, 1, 0, 0, 0, 64, 2,163, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 48,192, 7, 3, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48,192, 7, 3, 1, 0, 0, 0,157, 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, 87,213,108, 66, 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,128, 0, 0, 0,128,226,215,163,188, + 0, 0, 0,128, 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, 32,193, + 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, 32, 65, + 0, 0,128, 63, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, 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,184,175, 31, 65, + 0, 0, 32, 65,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 91,138, 60, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67, +129,255, 71, 66, 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, 32,193, + 0, 0,128, 63, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, 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,184,175, 31, 65, + 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 52,149,147, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,176, 46,202, 20, 1, 0, 0, 0,176, 46,202, 20, 1, 0, 0, 0,160,254,161, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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,160,254,161, 29, 1, 0, 0, 0,219, 0, 0, 0, 1, 0, 0, 0, 13, 0, 0, 0, 13, 0, 0, 0, -112,254,162, 29, 1, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0,112,254,162, 29, 1, 0, 0, 0,218, 0, 0, 0, 13, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 48,180, 4, 28, 1, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0, 48,180, 4, 28, 1, 0, 0, 0, - 20, 0, 0, 0, 1, 0, 1, 0, 48,180, 4, 28, 1, 0, 0, 0, 21, 0, 1, 0, 1, 0, 1, 0, 48,180, 4, 28, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 48,192, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,208, 4, 28, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0,224, 93,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,220, 4, 28, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0,224, 91,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,214, 4, 28, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 48,188, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,202, 4, 28, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 64, 86,167, 29, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128,255,162, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0,224, 0,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 67, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 55, 0, 0, 67, 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,194, 0, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,195, 0, 26, 0,195, 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, 53, 4, 0, 0,247, 4, 0, 0, 69, 2, 0, 0, 94, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 0, 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, 68, 65, 84, 65, 40, 1, 0, 0,224, 0,163, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,255,162, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,150, 67, - 0,192,116,196, 0, 0, 0, 0, 0, 0, 0, 0,205, 85,150, 67,223,204, 35,196, 26, 85,207,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194, 0, 0, 0, - 0, 0, 0, 0,155, 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, - 0, 0, 0, 0, 1, 0, 3, 0, 2, 0, 0, 4, 6, 0,195, 0,156, 0,195, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 4, 0, 0,247, 4, 0, 0, 95, 2, 0, 0,250, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0,135,128, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,131,128, 29, + 1, 0, 0, 0, 64,132,128, 29, 1, 0, 0, 0,160,133,128, 29, 1, 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, + 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48, 68,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0, 64, 2,163, 29, 1, 0, 0, 0, -163, 0, 0, 0, 1, 0, 0, 0, 80,186,162, 29, 1, 0, 0, 0, 16,253,162, 29, 1, 0, 0, 0,128,255,162, 29, 1, 0, 0, 0, -224, 0,163, 29, 1, 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, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, + 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, + 1, 0, 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, 0, 0, 0, 0, + 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, 96,136,128, 29, + 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,144,150,128, 29, 1, 0, 0, 0,160,127,128, 29, 1, 0, 0, 0, 0,252,130, 29, + 1, 0, 0, 0, 32,106,130, 29, 1, 0, 0, 0, 0,160,129, 29, 1, 0, 0, 0,160,201,129, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 49, 6, 0, 0,128, 7, 0, 0,229, 1, 0, 0,115, 3, 0, 0, 3, 3, 80, 1,143, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,128, 29, 1, 0, 0, 0, 48,149,128, 29, 1, 0, 0, 0, 64,137,128, 29, + 1, 0, 0, 0,160,138,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64,137,128, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,160,138,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,163, 67, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0,168, 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, 79, 1, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0, 0, 66, 67, 0, 0,200, 65, 0, 0, 66, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 80, 1, 26, 0, 80, 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, 0, 0, 0, 0, 49, 6, 0, 0,128, 7, 0, 0, 90, 3, 0, 0,115, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 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, 68, 65, 84, 65, 40, 1, 0, 0,160,138,128, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,137,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0,128,131, 67, 0, 0,228,194, + 0, 0, 0, 0, 0, 0, 0, 0, 0,128,159, 67, 0,128,177,195, 0, 0, 0, 0, 63, 1, 0, 0, 80, 1, 0, 0, 18, 0, 0, 0, +116, 1, 0, 0, 0, 0, 0, 0, 62, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 62, 1, 0, 0, 18, 0, 0, 0, +116, 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, 18, 0, 0, 0, + 2, 0, 3, 3, 0, 0, 0, 4, 6, 0, 80, 1,117, 1, 63, 1, 99, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 6, 0, 0,128, 7, 0, 0,229, 1, 0, 0, 89, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,117, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 68, 65, 84, 65, 40, 1, 0, 0,144,183,162, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, -240,184,162, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0,138, 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, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 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, 0, 0, 0, 0, 89, 6, 0, 0,108, 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, 20, 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, 68, 65, 84, 65, 40, 1, 0, 0,240,184,162, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,144,183,162, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 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, - 48, 6, 5, 28, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48, 6, 5, 28, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, -103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, - 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, 32,193, 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, 32, 65, 0, 0,128, 63, -103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65, -237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, - 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, 32,193, 0, 0,128, 63, -103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 1, 0, 0, - 80,186,162, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 2,163, 29, 1, 0, 0, 0, -144,183,162, 29, 1, 0, 0, 0,240,184,162, 29, 1, 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, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 7, 0, 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, - 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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,176,187,162, 29, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,128,211,162, 29, 1, 0, 0, 0,208,171,163, 29, 1, 0, 0, 0,240,143, 21, 27, 1, 0, 0, 0, - 96, 4,162, 29, 1, 0, 0, 0, 32, 31,142, 27, 1, 0, 0, 0, 64,242,142, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -157, 2, 0, 0, 47, 6, 0, 0,129, 0, 0, 0, 99, 4, 0, 0, 1, 1,147, 3,227, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176,111,217, 2, 1, 0, 0, 0, 96,206,162, 29, 1, 0, 0, 0,128,210,162, 29, 1, 0, 0, 0,144,188,162, 29, 1, 0, 0, 0, - 0,205,162, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,176,160, 21, 1, 0, 0, 0, -160,112,201, 20, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144,188,162, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, -240,189,162, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,117, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0,192,100, 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,146, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,147, 3, 26, 0,147, 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, 0, 0, 0, 0,157, 2, 0, 0, 47, 6, 0, 0,129, 0, 0, 0,154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,147, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208,119,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,240,189,162, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 80,191,162, 29, 1, 0, 0, 0,144,188,162, 29, 1, 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, - 0, 0, 0, 0, 0, 0, 0, 0,157, 2, 0, 0,157, 2, 0, 0,155, 0, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,201, 3, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 48,116,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 80,191,162, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, -176,192,162, 29, 1, 0, 0, 0,240,189,162, 29, 1, 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, - 0, 0, 0, 0, 0, 0, 0, 0,157, 2, 0, 0, 47, 6, 0, 0,155, 0, 0, 0,155, 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, 1, 0, 0, 0, 0, 0, 0, 0, - 0,118,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,176,192,162, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0,205,162, 29, 1, 0, 0, 0, 80,191,162, 29, 1, 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, - 0, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0, 47, 6, 0, 0,155, 0, 0, 0, 99, 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, 1, 0, 0, 0, 0, 0, 0, 0, -112,113,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,194,162, 29, 1, 0, 0, 0, -112,203,162, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 16,194,162, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, -160,195,162, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,111, 98,106,101, 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, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,111, 98,106,101, 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, - 84,114, 97,110,115,102,111,114,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,254,163, 0,110, 1, 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, -160,195,162, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 48,197,162, 29, 1, 0, 0, 0, 16,194,162, 29, 1, 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,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, 86, 73, 69, 87, 51, 68, 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, 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, 81,252,163, 0, 58, 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, 48,197,162, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, -192,198,162, 29, 1, 0, 0, 0,160,195,162, 29, 1, 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, 51,100,118,105,101,119, 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, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, 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, - 86,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,235,252,163, 0, 59, 1, 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, 88, 1, 0, 0, -192,198,162, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 80,200,162, 29, 1, 0, 0, 0, 48,197,162, 29, 1, 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, 51,100,118,105,101,119, - 95,100,105,115,112,108, 97,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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, - 95,100,105,115,112,108, 97,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, 68,105,115,112,108, 97,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,211,252,163, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0,140,128, 29, 1, 0, 0, 0,167, 0, 0, 0, + 1, 0, 0, 0, 48,145,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 80,200,162, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, -224,201,162, 29, 1, 0, 0, 0,192,198,162, 29, 1, 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, 98, 97, 99,107,103,114,111,117,110,100, 95,105,109, 97,103,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, 98, 97, 99,107,103,114,111,117,110,100, 95,105,109, 97,103,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, - 66, 97, 99,107,103,114,111,117,110,100, 32, 73,109, 97,103,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,187,252,163, 0, 0, 0, 20, 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,176,238,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,176,238,109, 27, 1, 0, 0, 0,219, 0, 0, 0, + 1, 0, 0, 0, 13, 0, 0, 0, 13, 0, 0, 0, 96,141,128, 29, 1, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0, 96,141,128, 29, + 1, 0, 0, 0,218, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 48, 66,136, 27, 1, 0, 0, 0, 19, 0, 0, 0, + 1, 0, 1, 0, 48, 66,136, 27, 1, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0, 48, 66,136, 27, 1, 0, 0, 0, 21, 0, 1, 0, + 1, 0, 1, 0, 48, 66,136, 27, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48, 58,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 48, 74,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,171,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 48, 86,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 64,198,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 48, 80,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48, 54,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 48, 68,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 32,163,176, 21, 1, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0,112,142,128, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,208,143,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 55, 0, 0, 67, 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,194, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,195, 0, 26, 0,195, 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, 53, 4, 0, 0, +247, 4, 0, 0, 69, 2, 0, 0, 94, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 0, 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, 68, 65, 84, 65, 88, 1, 0, 0, -224,201,162, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,112,203,162, 29, 1, 0, 0, 0, 80,200,162, 29, 1, 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,114, 97,110,115,102, -111,114,109, 95,111,114,105,101,110,116, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,114, 97,110,115,102, -111,114,109, 95,111,114,105,101,110,116, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114,109, 32, 79,114,105,101,110,116, - 97,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,163,252,163, 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, 68, 65, 84, 65, + 40, 1, 0, 0,208,143,128, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,142,128, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,150, 67, 0,192,116,196, 0, 0, 0, 0, 0, 0, 0, 0,205, 85,150, 67,223,204, 35,196, + 26, 85,207,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, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0,155, 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, 0, 0, 0, 0, 1, 0, 3, 0, 2, 0, 0, 4, 6, 0,195, 0,156, 0,195, 0, +156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 4, 0, 0, +247, 4, 0, 0, 95, 2, 0, 0,250, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,112,203,162, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,224,201,162, 29, 1, 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, 51,100,118,105,101,119, 95,110, 97,109,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, 68, 65, 84, 65, + 0, 1, 0, 0, 48,145,128, 29, 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, 48,149,128, 29, 1, 0, 0, 0, 0,140,128, 29, + 1, 0, 0, 0,112,142,128, 29, 1, 0, 0, 0,208,143,128, 29, 1, 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, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, 95,110, 97,109,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, - 73,116,101,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,163, 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, - 0,205,162, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,192,162, 29, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 40, 1, 0, 0,112,146,128, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,208,147,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 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, + 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 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, 0, 0, 0, 0, 89, 6, 0, 0,108, 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, 20, 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, 68, 65, 84, 65, 40, 1, 0, 0,208,147,128, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,146,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,157, 2, 0, 0, 47, 6, 0, 0, -155, 0, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,147, 3,201, 3, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,112,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 10, 5, 28, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, - 48, 10, 5, 28, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 38, 67,148, 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,128, 0, 0, 0,128, 74,215, 76,190, 0, 0, 0,128, 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,200, 42,243, 62,208,249,224,190, 48,180, 81,191,184,158, 81,191, - 49, 54,135, 63,140,225, 88, 62, 26, 63,185, 62, 35, 44,185, 62,222,187,123,188,206,156,122, 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, 88, 62,181, 62, 47,143, 73, 63,144,162, 59,188, 0, 0, 96,179, -191, 15,188,190,128, 75, 53, 62,217,125, 81, 63, 0, 0, 96,178, 67,108,117,194,185,204,216, 65,104,156, 5,194,212,247,159,192, -235, 62,114, 66, 61,254,213,193,157,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,200, 42,243, 62,208,249,224,190, 48,180, 81,191,184,158, 81,191, - 49, 54,135, 63,140,225, 88, 62, 26, 63,185, 62, 35, 44,185, 62,222,187,123,188,206,156,122, 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,124,197, 7, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,124,197, 7, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124,197, 7, 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,149, 87,247, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, + 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 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, 48,196, 7, 3, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48,196, 7, 3, + 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, + 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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, 32,193, 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, 32, 65, 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, + 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, + 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 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, 32,193, 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, + 0, 0, 0, 0,184,175, 31, 65, 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, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 96,206,162, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, -128,210,162, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, -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, - 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0,255,255, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,192,207,162, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 32,209,162, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 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,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, - 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, - 26, 0,152, 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, 0, 0, 0, 0, - 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, 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, - 68, 65, 84, 65, 40, 1, 0, 0, 32,209,162, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192,207,162, 29, 1, 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,151, 4, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 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,152, 4, -122, 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,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, 4,122, 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, 68, 65, 84, 65, 32, 1, 0, 0, 48,149,128, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48,145,128, 29, 1, 0, 0, 0,112,146,128, 29, 1, 0, 0, 0,208,147,128, 29, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48, 68,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,200, 0, 0, 0,128,210,162, 29, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96,206,162, 29, 1, 0, 0, 0,192,207,162, 29, 1, 0, 0, 0, 32,209,162, 29, 1, 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, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, + 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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,144,150,128, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 96,174,128, 29, 1, 0, 0, 0, 96,136,128, 29, + 1, 0, 0, 0,144, 35,245, 26, 1, 0, 0, 0,160, 78,129, 29, 1, 0, 0, 0,160, 56,130, 29, 1, 0, 0, 0,192,227,179, 21, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,157, 2, 0, 0, 47, 6, 0, 0,129, 0, 0, 0, 99, 4, 0, 0, 1, 1,147, 3, +227, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,169,128, 29, 1, 0, 0, 0, 96,173,128, 29, + 1, 0, 0, 0,112,151,128, 29, 1, 0, 0, 0,224,167,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112,151,128, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,208,152,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,128,117, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,192,100, 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, +146, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,147, 3, 26, 0,147, 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, 0, 0, 0, 0,157, 2, 0, 0, 47, 6, 0, 0,129, 0, 0, 0, +154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,147, 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, 68, 65, 84, 65, 40, 1, 0, 0,208,152,128, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 48,154,128, 29, 1, 0, 0, 0,112,151,128, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,157, 2, 0, 0,157, 2, 0, 0,155, 0, 0, 0, + 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,201, 3, 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, 1, 0, 0, 0, 6, 0, 0, 0, - 68, 65, 84, 65,160, 0, 0, 0,128,211,162, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,112,236,162, 29, 1, 0, 0, 0, -176,187,162, 29, 1, 0, 0, 0,240,185,140, 27, 1, 0, 0, 0, 32,142,160, 21, 1, 0, 0, 0, 80,164, 21, 27, 1, 0, 0, 0, -240,143, 21, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,155, 2, 0, 0,129, 0, 0, 0,147, 1, 0, 0, - 2, 2,156, 2, 19, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,120,217, 2, 1, 0, 0, 0,224,217,162, 29, 1, 0, 0, 0, -112,235,162, 29, 1, 0, 0, 0, 96,212,162, 29, 1, 0, 0, 0,128,216,162, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80, 41,201, 20, 1, 0, 0, 0, 96, 61,202, 20, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 96,212,162, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,192,213,162, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,128, 83, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 39, 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,155, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,103, 68, 0, 0,200, 65, 0,192,103, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,156, 2, 26, 0,156, 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, 0, 0, 0, 0, 0, 0, 0, 0,155, 2, 0, 0, -129, 0, 0, 0,154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,156, 2, 26, 0, 0, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,122,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48,154,128, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,144,155,128, 29, 1, 0, 0, 0,208,152,128, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,157, 2, 0, 0, 47, 6, 0, 0,155, 0, 0, 0, +155, 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, 68, 65, 84, 65, 40, 1, 0, 0, -192,213,162, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 32,215,162, 29, 1, 0, 0, 0, 96,212,162, 29, 1, 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,103,195, 0, 0, 0, 0, -200, 0, 0, 0,217, 0, 0, 0, 18, 0, 0, 0,248, 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,248, 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, 0, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0,217, 0,249, 0,200, 0,231, 0, 0, 0, - 0, 0, 0, 0, 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, 0, 0, 0, -155, 0, 0, 0,147, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,217, 0,249, 0, 0, 0, 2, 0, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,123,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, - 32,215,162, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,128,216,162, 29, 1, 0, 0, 0,192,213,162, 29, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144,155,128, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,224,167,128, 29, 1, 0, 0, 0, 48,154,128, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0, 47, 6, 0, 0,155, 0, 0, 0, + 99, 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, 0, 0, 0, 0, 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,156,128, 29, 1, 0, 0, 0, 80,166,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,240,156,128, 29, + 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,128,158,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,111, 98,106,101, 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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,111, 98,106,101, 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, 84,114, 97,110,115,102,111,114,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,155, 2, 0, 0,155, 2, 0, 0, -155, 0, 0, 0,147, 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, 1, 0, 0, 0, 0, 0, 0, 0, 48,124,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,254,163, 0,110, 1, 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, 68, 65, 84, 65, 40, 1, 0, 0, -128,216,162, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,215,162, 29, 1, 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,248, 0, 0, 0, 18, 0, 0, 0,194, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 18, 0, 0, 0,194, 1, 0, 0, 18, 0, 0, 0,248, 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,195, 1,249, 0, 0, 0, 0, 0, 0, 0, - 0, 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,155, 2, 0, 0, -155, 0, 0, 0,147, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 1,249, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,121,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, -224,217,162, 29, 1, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0,144,223,162, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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,128,158,128, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 16,160,128, 29, + 1, 0, 0, 0,240,156,128, 29, 1, 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,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, 86, 73, 69, 87, + 51, 68, 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, 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, 81,252, +163, 0, 58, 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, 16,160,128, 29, + 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,160,161,128, 29, 1, 0, 0, 0,128,158,128, 29, 1, 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, 51,100,118,105,101,119, 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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, 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, 86,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,219,162, 29, 1, 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, 68, 65, 84, 65, 32, 0, 0, 0, 16,219,162, 29, 1, 0, 0, 0, 21, 1, 0, 0, 1, 0, 0, 0, - 48,180, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,112,219,162, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,208,220,162, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,202, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,104, 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,159, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 41, 68, 0, 0,200, 65, - 0,192, 41, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,160, 3, - 26, 0,160, 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, 0, 0, 0, 0, - 0, 0, 0, 0,159, 3, 0, 0, 85, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -160, 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, - 68, 65, 84, 65, 40, 1, 0, 0,208,220,162, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 48,222,162, 29, 1, 0, 0, 0, -112,219,162, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 67, 0,128,100,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 67, - 0,128,100,196, 0, 0, 0, 0,172, 0, 0, 0,189, 0, 0, 0, 18, 0, 0, 0,163, 3, 0, 0, 0, 0, 0, 0,171, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,171, 0, 0, 0, 18, 0, 0, 0,163, 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,189, 0, -164, 3,172, 0,146, 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,111, 0, 0, 0, 18, 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, 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, - 68, 65, 84, 65, 40, 1, 0, 0, 48,222,162, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208,220,162, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67, 0, 0,168,191, 0, 0, 20, 64, - 0, 0,169,191, 0,128, 20, 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,160, 3, 0, 0, 0, 0, 0, 0,164, 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,159, 3, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -160, 3,164, 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, - 68, 65, 84, 65,168, 0, 0, 0,144,223,162, 29, 1, 0, 0, 0,168, 0, 0, 0, 1, 0, 0, 0, 80,231,162, 29, 1, 0, 0, 0, -224,217,162, 29, 1, 0, 0, 0,112,219,162, 29, 1, 0, 0, 0, 48,222,162, 29, 1, 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,100, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 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,128, 63, 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,112,224,162, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,208,225,162, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 42, 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,167, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, - 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,168, 2, - 26, 0,168, 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, 0, 0, 0, 0, - 0, 0, 0, 0,167, 2, 0, 0, 85, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, 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, - 68, 65, 84, 65, 40, 1, 0, 0,208,225,162, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 48,227,162, 29, 1, 0, 0, 0, -112,224,162, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0,164, 3, 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, - 68, 65, 84, 65, 40, 1, 0, 0, 48,227,162, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,144,228,162, 29, 1, 0, 0, 0, -208,225,162, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,167, 2, 0, 0,111, 0, 0, 0,111, 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, - 68, 65, 84, 65, 40, 1, 0, 0,144,228,162, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,240,229,162, 29, 1, 0, 0, 0, - 48,227,162, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, -167, 2, 0, 0,167, 2, 0, 0,111, 0, 0, 0, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,240,229,162, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -144,228,162, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,167, 2, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, 2,164, 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, 48, 14, 5, 28, 1, 0, 0, 0, - 68, 65, 84, 65, 88, 3, 0, 0, 48, 14, 5, 28, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,226,225,191, 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, - 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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,192, 90, 29, 63,208,249,224,190, -222,160, 81,191,184,158, 81,191,253,253,174, 63,140,225, 88, 62, 9, 46,185, 62, 35, 44,185, 62,232,229,162,188,206,156,122, 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,250, 8,140, 62,174,189, 27, 63, -224, 25, 17,188, 0, 64,153,181,195, 13,188,190,191, 73, 53, 62, 99,126, 81, 63, 0,128,163, 53,215,104, 25,196,134,132,135, 67, - 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68,159, 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,192, 90, 29, 63,208,249,224,190, -222,160, 81,191,184,158, 81,191,253,253,174, 63,140,225, 88, 62, 9, 46,185, 62, 35, 44,185, 62,232,229,162,188,206,156,122, 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, 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,172,148, 0, 59, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 80,231,162, 29, 1, 0, 0, 0, -158, 0, 0, 0, 1, 0, 0, 0,112,235,162, 29, 1, 0, 0, 0,144,223,162, 29, 1, 0, 0, 0,112,224,162, 29, 1, 0, 0, 0, -240,229,162, 29, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, - 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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,176,232,162, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 16,234,162, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0,147, 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,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 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, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,152, 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, 68, 65, 84, 65, 40, 1, 0, 0, 16,234,162, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,176,232,162, 29, 1, 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,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 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,152, 4,122, 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,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65,200, 0, 0, 0,112,235,162, 29, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80,231,162, 29, 1, 0, 0, 0,176,232,162, 29, 1, 0, 0, 0, 16,234,162, 29, 1, 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, - 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,112,236,162, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -144, 0,164, 29, 1, 0, 0, 0,128,211,162, 29, 1, 0, 0, 0, 32,142,160, 21, 1, 0, 0, 0,208,140,162, 21, 1, 0, 0, 0, - 96, 4,162, 29, 1, 0, 0, 0, 80,164, 21, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,155, 2, 0, 0, -149, 1, 0, 0, 99, 4, 0, 0, 12, 12,156, 2,207, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,159,217, 2, 1, 0, 0, 0, - 80,230,163, 29, 1, 0, 0, 0, 16,237,163, 29, 1, 0, 0, 0, 80,237,162, 29, 1, 0, 0, 0, 16,240,162, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,220,200, 20, 1, 0, 0, 0, 32,129,160, 21, 1, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 80,237,162, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,176,238,162, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 39, 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,155, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,103, 68, 0, 0,200, 65, - 0,192,103, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,156, 2, - 26, 0,156, 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, 0, 0, 0, 0, - 0, 0, 0, 0,155, 2, 0, 0,149, 1, 0, 0,174, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -156, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,160,217, 2, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,176,238,162, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 16,240,162, 29, 1, 0, 0, 0, - 80,237,162, 29, 1, 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,192, 40,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,199, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 18, 0, 0, 0,180, 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, 8, 0, 0, 0, 2, 0, 3, 3, 0, 0, 2, 4, 6, 0,200, 0, -181, 2,200, 0,163, 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,199, 0, 0, 0,175, 1, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -200, 0,181, 2, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,161,217, 2, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 16,240,162, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176,238,162, 29, 1, 0, 0, 0, 0, 0, 32,193, 0, 0,104, 68, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,104, 68, - 0,192, 40,196, 0, 0, 0, 0,195, 1, 0, 0,212, 1, 0, 0, 18, 0, 0, 0,180, 2, 0, 0, 0, 0, 0, 0,194, 1, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,194, 1, 0, 0, 18, 0, 0, 0,180, 2, 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,212, 1, -181, 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, -200, 0, 0, 0,155, 2, 0, 0,175, 1, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -212, 1,181, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,159,217, 2, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 80,230,163, 29, 1, 0, 0, 0, 22, 1, 0, 0, 1, 0, 0, 0,128,245,163, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 48,180, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,144,231,163, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 96,241,163, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 78, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,104, 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,159, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,103, 68, 0, 0,200, 65, - 0,192,103, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,160, 3, - 26, 0,160, 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, 0, 0, 0, 0, - 0, 0, 0, 0,159, 3, 0, 0, 49, 2, 0, 0, 74, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -160, 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, - 68, 65, 84, 65, 40, 1, 0, 0, 96,241,163, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,192,242,163, 29, 1, 0, 0, 0, -144,231,163, 29, 1, 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,219,195, 0, 0, 0, 0,200, 0, 0, 0,217, 0, 0, 0, 18, 0, 0, 0,199, 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,199, 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, 0, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0,217, 0, -200, 1,200, 0,182, 1, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 75, 2, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -217, 0,200, 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, - 68, 65, 84, 65, 40, 1, 0, 0,192,242,163, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 32,244,163, 29, 1, 0, 0, 0, - 96,241,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 3, 0, 0,159, 3, 0, 0, 75, 2, 0, 0, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 32,244,163, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192,242,163, 29, 1, 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,199, 1, 0, 0, 18, 0, 0, 0,198, 2, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,198, 2, 0, 0, 18, 0, 0, 0,199, 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,199, 2, -200, 1, 0, 0, 0, 0, 0, 0, 0, 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,159, 3, 0, 0, 75, 2, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -199, 2,200, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,128,245,163, 29, 1, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0, 80,221,163, 29, 1, 0, 0, 0, - 80,230,163, 29, 1, 0, 0, 0,144,231,163, 29, 1, 0, 0, 0, 32,244,163, 29, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,232,163, 29, 1, 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, 68, 65, 84, 65, 32, 0, 0, 0,240,232,163, 29, 1, 0, 0, 0, - 21, 1, 0, 0, 1, 0, 0, 0, 48,180, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112,223,163, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, -144,218,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,202, 67, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0,104, 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,159, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,192, 41, 68, 0, 0,200, 65, 0,192, 41, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,160, 3, 26, 0,160, 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, 0, 0, 0, 0, 0, 0, 0, 0,159, 3, 0, 0, 85, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,160, 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, 68, 65, 84, 65, 40, 1, 0, 0,144,218,163, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, -240,219,163, 29, 1, 0, 0, 0,112,223,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 67, 0,128,100,196, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 44, 67, 0,128,100,196, 0, 0, 0, 0,172, 0, 0, 0,189, 0, 0, 0, 18, 0, 0, 0,163, 3, 0, 0, - 0, 0, 0, 0,171, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,171, 0, 0, 0, 18, 0, 0, 0,163, 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,189, 0,164, 3,172, 0,146, 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,111, 0, 0, 0, 18, 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, 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, 68, 65, 84, 65, 40, 1, 0, 0,240,219,163, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,144,218,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67, - 0, 0,168,191, 0, 0, 20, 64, 0, 0,169,191, 0,128, 20, 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,160, 3, 0, 0, 0, 0, 0, 0,164, 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,159, 3, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,160, 3,164, 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, 68, 65, 84, 65,168, 0, 0, 0, 80,221,163, 29, 1, 0, 0, 0,168, 0, 0, 0, 1, 0, 0, 0, -112,174,163, 29, 1, 0, 0, 0,128,245,163, 29, 1, 0, 0, 0,112,223,163, 29, 1, 0, 0, 0,240,219,163, 29, 1, 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,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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,128, 63, 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, 80,234,163, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, -176,235,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0, 42, 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,167, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,168, 2, 26, 0,168, 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, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0, 85, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,168, 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, 68, 65, 84, 65, 40, 1, 0, 0,176,235,163, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, -208,253,163, 29, 1, 0, 0, 0, 80,234,163, 29, 1, 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, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,164, 3, 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, 68, 65, 84, 65, 40, 1, 0, 0,208,253,163, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 48,255,163, 29, 1, 0, 0, 0,176,235,163, 29, 1, 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, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0,111, 0, 0, 0,111, 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, 68, 65, 84, 65, 40, 1, 0, 0, 48,255,163, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 16,173,163, 29, 1, 0, 0, 0,208,253,163, 29, 1, 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, - 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0,167, 2, 0, 0,111, 0, 0, 0, 18, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 16,173,163, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48,255,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,168, 2,164, 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, - 48, 18, 5, 28, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48, 18, 5, 28, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, -226,225,191, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, - 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, -192, 90, 29, 63,208,249,224,190,222,160, 81,191,184,158, 81,191,253,253,174, 63,140,225, 88, 62, 9, 46,185, 62, 35, 44,185, 62, -232,229,162,188,206,156,122, 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, -250, 8,140, 62,174,189, 27, 63,224, 25, 17,188, 0, 64,153,181,195, 13,188,190,191, 73, 53, 62, 99,126, 81, 63, 0,128,163, 53, -215,104, 25,196,134,132,135, 67, 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68,159, 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, -192, 90, 29, 63,208,249,224,190,222,160, 81,191,184,158, 81,191,253,253,174, 63,140,225, 88, 62, 9, 46,185, 62, 35, 44,185, 62, -232,229,162,188,206,156,122, 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, - 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, -172,148, 0, 59, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 1, 0, 0, -112,174,163, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 16,237,163, 29, 1, 0, 0, 0, 80,221,163, 29, 1, 0, 0, 0, - 80,234,163, 29, 1, 0, 0, 0, 16,173,163, 29, 1, 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, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 7, 0, 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, - 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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,208,175,163, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 48,177,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 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,151, 4, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 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, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 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, 68, 65, 84, 65, 40, 1, 0, 0, 48,177,163, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,175,163, 29, 1, 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,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, - 18, 0, 0, 0,121, 2, 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,152, 4,122, 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,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65,200, 0, 0, 0, 16,237,163, 29, 1, 0, 0, 0, -173, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,174,163, 29, 1, 0, 0, 0,208,175,163, 29, 1, 0, 0, 0, - 48,177,163, 29, 1, 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, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,144, 0,164, 29, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,236,162, 29, 1, 0, 0, 0,176, 5,143, 27, 1, 0, 0, 0, - 32, 31,142, 27, 1, 0, 0, 0,144,246,142, 27, 1, 0, 0, 0, 16,176, 20, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 49, 6, 0, 0,128, 7, 0, 0,117, 3, 0, 0, 99, 4, 0, 0, 1, 1, 80, 1,239, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176,111,217, 2, 1, 0, 0, 0, 80,181,163, 29, 1, 0, 0, 0,144,189,163, 29, 1, 0, 0, 0,144,178,163, 29, 1, 0, 0, 0, -240,179,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 62,201, 20, 1, 0, 0, 0, -240, 0,202, 20, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144,178,163, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, -240,179,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0,194, 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,131, 1, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, - 0,128,237, 68, 0, 0,200, 65, 0,128,237, 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,132, 1, 24, 0,132, 1, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 49, 6, 0, 0,128, 7, 0, 0,117, 3, 0, 0,117, 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, 1, 0, 2, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, -208,119,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,240,179,163, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,144,178,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 49, 6, 0, 0,128, 7, 0, 0,117, 3, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -144,112,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 22, 5, 28, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48, 22, 5, 28, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, - 24,255, 13, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,160, 71, 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,128, 0, 0, 0,128, 72, 1, 77,190, 0, 0, 0,128, -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, - 3,201,194, 63, 30,108,125,191,244,250, 39,191, 8,165, 39,191,143,164,206, 63, 41,130,121, 63,180,164, 28, 63,149, 84, 28, 63, -179,153,196,188, 10,188, 50, 64, 8,108,228,190, 50,247,227,190, 82, 21, 64,191,118,101,150,191,216, 49, 49, 65,152, 9, 52, 65, -231, 70,158, 62, 23,234,167, 62,160,206,159,187, 0, 0,168,180, 27, 97,208,189, 70, 41,205, 61,173,247,146, 62, 0, 0,166, 51, -211,120, 21,194,145, 5, 2, 66, 9,136,213,193,193,214,159,192,219, 38, 19, 66,197,173,255,193,157,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, - 3,201,194, 63, 30,108,125,191,244,250, 39,191, 8,165, 39,191,143,164,206, 63, 41,130,121, 63,180,164, 28, 63,149, 84, 28, 63, -179,153,196,188, 10,188, 50, 64, 8,108,228,190, 50,247,227,190, 82, 21, 64,191,118,101,150,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, -241, 22, 72, 63, 78,162,246,190, 44, 8, 90,190, 3, 35,171,190, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107,210, 47, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, - 80,181,163, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0,112,185,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 7, 0, 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, - 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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,176,182,163, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 16,184,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,163, 67, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,194, 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,131, 1, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 66, 67, 0, 0,200, 65, 0, 0, 66, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,132, 1, 26, 0,132, 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, 0, 0, 0, 0,253, 5, 0, 0,128, 7, 0, 0,249, 3, 0, 0, 18, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,132, 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, 68, 65, 84, 65, 40, 1, 0, 0, 16,184,163, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,182,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0,128,131, 67, - 0, 0,228,194, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,185, 67, 0, 0, 62,195, 0, 0, 0, 0,115, 1, 0, 0,132, 1, 0, 0, - 18, 0, 0, 0,207, 0, 0, 0, 0, 0, 0, 0,114, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,114, 1, 0, 0, - 18, 0, 0, 0,207, 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, 0, 4, 6, 0,132, 1,208, 0,115, 1,190, 0, 0, 0, 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, 5, 0, 0,128, 7, 0, 0, 41, 3, 0, 0,248, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,132, 1,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,112,185,163, 29, 1, 0, 0, 0, -167, 0, 0, 0, 1, 0, 0, 0,144,189,163, 29, 1, 0, 0, 0, 80,181,163, 29, 1, 0, 0, 0,176,182,163, 29, 1, 0, 0, 0, - 16,184,163, 29, 1, 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, - 0, 0, 0, 0, 0, 0, 0, 0, 48,209,161, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 48,209,161, 29, 1, 0, 0, 0, -219, 0, 0, 0, 1, 0, 0, 0, 13, 0, 0, 0, 13, 0, 0, 0, 48,222,163, 29, 1, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0, - 48,222,163, 29, 1, 0, 0, 0,218, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 48,180, 4, 28, 1, 0, 0, 0, - 19, 0, 0, 0, 1, 0, 1, 0, 48,180, 4, 28, 1, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0, 48,180, 4, 28, 1, 0, 0, 0, - 21, 0, 1, 0, 1, 0, 1, 0, 48,180, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,192, 4, 28, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 48,208, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,224, 93,167, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 48,220, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,224, 91,167, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 48,214, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,188, 4, 28, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 64, 86,167, 29, 1, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,208,186,163, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 48,188,163, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 55, 0, 0, 67, 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,194, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, - 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,195, 0, - 26, 0,195, 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, - 53, 4, 0, 0,247, 4, 0, 0, 69, 2, 0, 0, 94, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, 0, 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, - 68, 65, 84, 65, 40, 1, 0, 0, 48,188,163, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208,186,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,150, 67, 0,192,116,196, 0, 0, 0, 0, 0, 0, 0, 0,205, 85,150, 67, -223,204, 35,196, 26, 85,207,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, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0,155, 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, 0, 0, 0, 0, 1, 0, 3, 0, 2, 0, 0, 4, 6, 0,195, 0, -156, 0,195, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 53, 4, 0, 0,247, 4, 0, 0, 95, 2, 0, 0,250, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 0, 1, 0, 0,144,189,163, 29, 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112,185,163, 29, 1, 0, 0, 0,208,186,163, 29, 1, 0, 0, 0, 48,188,163, 29, 1, 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, 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, 83, 78, 0, 0,208, 0, 0, 0, -208,190,163, 29, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,208, 30,165, 29, 1, 0, 0, 0,112,122,163, 29, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,224,163, 29, 1, 0, 0, 0, - 0,196,163, 29, 1, 0, 0, 0, 96,196,163, 29, 1, 0, 0, 0, 64,204,163, 29, 1, 0, 0, 0, 64,206,163, 29, 1, 0, 0, 0, - 0, 3,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,180, 4, 28, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,232, 48, 21, 0, 1, 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,208,224,163, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 48,225,163, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, - 48,225,163, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,224,191,163, 29, 1, 0, 0, 0,208,224,163, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,224,191,163, 29, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0, 64,192,163, 29, 1, 0, 0, 0, 48,225,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, 7,128, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 64,192,163, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, -160,192,163, 29, 1, 0, 0, 0,224,191,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,160,192,163, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0,193,163, 29, 1, 0, 0, 0, - 64,192,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, - 0,193,163, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 96,193,163, 29, 1, 0, 0, 0,160,192,163, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 7,100, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 96,193,163, 29, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,192,193,163, 29, 1, 0, 0, 0, 0,193,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 28, 6,100, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,192,193,163, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, - 32,194,163, 29, 1, 0, 0, 0, 96,193,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,100, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 32,194,163, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,128,194,163, 29, 1, 0, 0, 0, -192,193,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 6,100, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -128,194,163, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,224,194,163, 29, 1, 0, 0, 0, 32,194,163, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,180, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,224,194,163, 29, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0, 64,195,163, 29, 1, 0, 0, 0,128,194,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 28, 6,180, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 64,195,163, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, -160,195,163, 29, 1, 0, 0, 0,224,194,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,180, 1, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,160,195,163, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0,196,163, 29, 1, 0, 0, 0, - 64,195,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, - 0,196,163, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,195,163, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 28, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 96,196,163, 29, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,192,196,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,191,163, 29, 1, 0, 0, 0, - 48,225,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,192,196,163, 29, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 32,197,163, 29, 1, 0, 0, 0, 96,196,163, 29, 1, 0, 0, 0,160,192,163, 29, 1, 0, 0, 0, - 48,225,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 32,197,163, 29, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,128,197,163, 29, 1, 0, 0, 0,192,196,163, 29, 1, 0, 0, 0,224,191,163, 29, 1, 0, 0, 0, - 0,193,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,128,197,163, 29, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,224,197,163, 29, 1, 0, 0, 0, 32,197,163, 29, 1, 0, 0, 0,160,192,163, 29, 1, 0, 0, 0, - 0,193,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,224,197,163, 29, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 64,198,163, 29, 1, 0, 0, 0,128,197,163, 29, 1, 0, 0, 0, 64,192,163, 29, 1, 0, 0, 0, -192,193,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 64,198,163, 29, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,160,198,163, 29, 1, 0, 0, 0,224,197,163, 29, 1, 0, 0, 0, 96,193,163, 29, 1, 0, 0, 0, -192,193,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,160,198,163, 29, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 0,199,163, 29, 1, 0, 0, 0, 64,198,163, 29, 1, 0, 0, 0, 0,193,163, 29, 1, 0, 0, 0, - 32,194,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 0,199,163, 29, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 96,199,163, 29, 1, 0, 0, 0,160,198,163, 29, 1, 0, 0, 0,160,192,163, 29, 1, 0, 0, 0, - 32,194,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 96,199,163, 29, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,192,199,163, 29, 1, 0, 0, 0, 0,199,163, 29, 1, 0, 0, 0, 96,193,163, 29, 1, 0, 0, 0, - 32,194,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,192,199,163, 29, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 32,200,163, 29, 1, 0, 0, 0, 96,199,163, 29, 1, 0, 0, 0, 0,193,163, 29, 1, 0, 0, 0, -192,193,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 32,200,163, 29, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,128,200,163, 29, 1, 0, 0, 0,192,199,163, 29, 1, 0, 0, 0,160,192,163, 29, 1, 0, 0, 0, -128,194,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,128,200,163, 29, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,224,200,163, 29, 1, 0, 0, 0, 32,200,163, 29, 1, 0, 0, 0, 32,194,163, 29, 1, 0, 0, 0, -224,194,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,224,200,163, 29, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 64,201,163, 29, 1, 0, 0, 0,128,200,163, 29, 1, 0, 0, 0,128,194,163, 29, 1, 0, 0, 0, -224,194,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 64,201,163, 29, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,160,201,163, 29, 1, 0, 0, 0,224,200,163, 29, 1, 0, 0, 0,128,194,163, 29, 1, 0, 0, 0, - 64,195,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,160,201,163, 29, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 0,202,163, 29, 1, 0, 0, 0, 64,201,163, 29, 1, 0, 0, 0,224,194,163, 29, 1, 0, 0, 0, - 64,195,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 0,202,163, 29, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 96,202,163, 29, 1, 0, 0, 0,160,201,163, 29, 1, 0, 0, 0,160,195,163, 29, 1, 0, 0, 0, -208,224,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 96,202,163, 29, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,192,202,163, 29, 1, 0, 0, 0, 0,202,163, 29, 1, 0, 0, 0,160,195,163, 29, 1, 0, 0, 0, - 0,196,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,192,202,163, 29, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 32,203,163, 29, 1, 0, 0, 0, 96,202,163, 29, 1, 0, 0, 0, 64,192,163, 29, 1, 0, 0, 0, - 0,196,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 32,203,163, 29, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,128,203,163, 29, 1, 0, 0, 0,192,202,163, 29, 1, 0, 0, 0, 96,193,163, 29, 1, 0, 0, 0, - 0,196,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,128,203,163, 29, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0,224,203,163, 29, 1, 0, 0, 0, 32,203,163, 29, 1, 0, 0, 0, 64,195,163, 29, 1, 0, 0, 0, -160,195,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,224,203,163, 29, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 64,204,163, 29, 1, 0, 0, 0,128,203,163, 29, 1, 0, 0, 0,224,194,163, 29, 1, 0, 0, 0, - 0,196,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 64,204,163, 29, 1, 0, 0, 0, -193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,203,163, 29, 1, 0, 0, 0,128,194,163, 29, 1, 0, 0, 0, -208,224,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 64,206,163, 29, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,128,208,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,192,163, 29, 1, 0, 0, 0, - 48,225,163, 29, 1, 0, 0, 0,224,191,163, 29, 1, 0, 0, 0, 0,193,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,128, 7, 0, 0,101, 4, 0, 0,128, 4, 0, 0, 7, 7,129, 7, 28, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, -208,144,217, 2, 1, 0, 0, 0, 80, 30,165, 29, 1, 0, 0, 0, 80, 30,165, 29, 1, 0, 0, 0, 32,207,163, 29, 1, 0, 0, 0, -240, 9,164, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 69,201, 20, 1, 0, 0, 0, -208,112,160, 21, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32,207,163, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, -240, 9,164, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,162, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 32,240, 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,128, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,129, 7, 26, 0,129, 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, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,101, 4, 0, 0,126, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -144,146,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,240, 9,164, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 32,207,163, 29, 1, 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, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, - 18, 0, 0, 4, 6, 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, 0, 0, 0, 0,128, 7, 0, 0,127, 4, 0, 0,128, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176,145,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,128,208,163, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 16, 15,164, 29, 1, 0, 0, 0, 64,206,163, 29, 1, 0, 0, 0, 0,196,163, 29, 1, 0, 0, 0, 96,193,163, 29, 1, 0, 0, 0, -192,193,163, 29, 1, 0, 0, 0, 64,192,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 6, 0, 0,128, 7, 0, 0, - 0, 0, 0, 0, 99, 0, 0, 0, 15, 15,100, 1,100, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 16,109,217, 2, 1, 0, 0, 0, - 16, 14,164, 29, 1, 0, 0, 0, 0,173,164, 29, 1, 0, 0, 0, 80, 11,164, 29, 1, 0, 0, 0,176, 12,164, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,180,160, 21, 1, 0, 0, 0,240, 11,143, 27, 1, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 80, 11,164, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,176, 12,164, 29, 1, 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,221, 67, 0,128, 71, 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, 99, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, - 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,100, 1, - 26, 0,100, 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, 0, 0, 0, 0, - 29, 6, 0, 0,128, 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, -100, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,110,217, 2, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,176, 12,164, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80, 11,164, 29, 1, 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, 99, 1, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 99, 1, 0, 0, 18, 0, 0, 0, 73, 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,100, 1, - 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 29, 6, 0, 0,128, 7, 0, 0, 26, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 1, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109,217, 2, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,200, 0, 0, 0, 16, 14,164, 29, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0,173,164, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 6, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 64,170,164, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,160,171,164, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,203, 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, 87, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, - 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 88, 6, - 26, 0, 88, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 87, 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, - 88, 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, - 68, 65, 84, 65, 40, 1, 0, 0,160,171,164, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 64,170,164, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 6, 0, 0, 26, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 88, 6, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,208, 2, 28, 1, 0, 0, 0, - 68, 65, 84, 65, 88, 3, 0, 0, 48,208, 2, 28, 1, 0, 0, 0,157, 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, 87,213,108, 66, 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,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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, 32,193, 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, 32, 65, 0, 0,128, 63, 0, 0,140, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, 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,184,175, 31, 65, 0, 0, 32, 65,161, 14,106, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 91,138, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 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, 32,193, 0, 0,128, 63, 0, 0,140, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, 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,184,175, 31, 65, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52,149,147, 58, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0,173,164, 29, 1, 0, 0, 0, -158, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 14,164, 29, 1, 0, 0, 0, 64,170,164, 29, 1, 0, 0, 0, -160,171,164, 29, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, - 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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, 16, 15,164, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -112,203,164, 29, 1, 0, 0, 0,128,208,163, 29, 1, 0, 0, 0, 96,193,163, 29, 1, 0, 0, 0, 32,194,163, 29, 1, 0, 0, 0, - 0,193,163, 29, 1, 0, 0, 0,192,193,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 6, 0, 0,128, 7, 0, 0, -101, 0, 0, 0, 99, 4, 0, 0, 4, 4,100, 1,255, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,141,217, 2, 1, 0, 0, 0, -192,192,164, 29, 1, 0, 0, 0, 16,202,164, 29, 1, 0, 0, 0, 96,174,164, 29, 1, 0, 0, 0,192,175,164, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 13,201, 20, 1, 0, 0, 0, 16,117,160, 21, 1, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 96,174,164, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,192,175,164, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,178, 67, - 0, 0, 0, 0, 0, 0,248, 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, 99, 1, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, - 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,100, 1, - 31, 0,100, 1, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 29, 6, 0, 0,128, 7, 0, 0, 69, 4, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 1, 31, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,143,217, 2, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,192,175,164, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96,174,164, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,169, 67, 0, 64,115,196, 0, 0, 0, 0, 0, 0, 0, 0,255,127,169, 67, -254,127,115,196, 0, 0, 0, 0, 83, 1, 0, 0,100, 1, 0, 0, 18, 0, 0, 0,223, 3, 0, 0, 0, 0, 0, 0, 82, 1, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 82, 1, 0, 0, 18, 0, 0, 0,223, 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, 4, 6, 0,100, 1, -224, 3, 83, 1,206, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 78,201, 20, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 29, 6, 0, 0,128, 7, 0, 0,101, 0, 0, 0, 68, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 1,224, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,142,217, 2, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,177,164, 29, 1, 0, 0, 0, 48,191,164, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0, 32,177,164, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,176,178,164, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0,143,217, 2, 1, 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, 82, 1, 36, 0, - 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,176,178,164, 29, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0, 64,180,164, 29, 1, 0, 0, 0, 32,177,164, 29, 1, 0, 0, 0, 32,198, 17, 27, 1, 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, 82, 1, 61, 0, 0, 0, 0, 0, 0, 0, 2, 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, 64,180,164, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,208,181,164, 29, 1, 0, 0, 0, -176,178,164, 29, 1, 0, 0, 0, 0,200, 17, 27, 1, 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, 82, 1, 0, 0, - 0, 0, 0, 0, 4, 0, 2, 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,208,181,164, 29, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0, 96,183,164, 29, 1, 0, 0, 0, 64,180,164, 29, 1, 0, 0, 0, 96,202, 17, 27, 1, 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, 82, 1,203, 0, 0, 0, 0, 0, 0, 0, 10, 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, 96,183,164, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,240,184,164, 29, 1, 0, 0, 0, -208,181,164, 29, 1, 0, 0, 0,192,204, 17, 27, 1, 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, 82, 1, 58, 0, - 20, 0, 0, 0, 0, 0, 2, 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,240,184,164, 29, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0,128,186,164, 29, 1, 0, 0, 0, 96,183,164, 29, 1, 0, 0, 0, 32,207, 17, 27, 1, 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,188,253, 82, 1,102, 0, 0, 0, 0, 0, 0, 0, 2, 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,128,186,164, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 16,188,164, 29, 1, 0, 0, 0, -240,184,164, 29, 1, 0, 0, 0,128,209, 17, 27, 1, 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, 59,253, 82, 1,105, 0, - 0, 0, 0, 0, 0, 0, 2, 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, 16,188,164, 29, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0,160,189,164, 29, 1, 0, 0, 0,128,186,164, 29, 1, 0, 0, 0, 16,142, 17, 27, 1, 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, 35,253, 82, 1, 0, 0, 0, 0, 0, 0, 4, 0, 2, 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,160,189,164, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 48,191,164, 29, 1, 0, 0, 0, - 16,188,164, 29, 1, 0, 0, 0, 48,215, 17, 27, 1, 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, 11,253, 82, 1, 0, 0, - 0, 0, 0, 0, 4, 0, 2, 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, 48,191,164, 29, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,189,164, 29, 1, 0, 0, 0,144,217, 17, 27, 1, 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,243,252, 82, 1, 0, 0, 20, 0, 0, 0, 4, 0, 3, 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, 0, 1, 0, 0,192,192,164, 29, 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, 32,198,164, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, -160, 26,200, 20, 1, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 0,194,164, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 96,195,164, 29, 1, 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,216, 65, 0, 0, 0, 0, 0, 0,242, 67, 0, 0, 0, 0, 0, 0,216, 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,227, 1, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0,128,241, 67, 0, 0,208, 65, 0,128,241, 67, 0, 0,208, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,228, 1, 27, 0,228, 1, 27, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,157, 5, 0, 0,128, 7, 0, 0, - 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228, 1, 27, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,235,252,163, 0, 59, 1, 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, 68, 65, 84, 65, 40, 1, 0, 0, - 96,195,164, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,192,196,164, 29, 1, 0, 0, 0, 0,194,164, 29, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,160,161,128, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 48,163,128, 29, + 1, 0, 0, 0, 16,160,128, 29, 1, 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, 51,100,118,105,101,119, 95,100,105,115,112,108, 97,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, 86, 73, 69, 87, + 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, 95,100,105,115,112,108, 97,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, 68,105,115,112, +108, 97,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,211,252, +163, 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, 48,163,128, 29, + 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,192,164,128, 29, 1, 0, 0, 0,160,161,128, 29, 1, 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, 98, 97, 99,107,103,114,111,117,110,100, + 95,105,109, 97,103,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, 98, 97, 99,107,103,114,111,117,110,100, + 95,105,109, 97,103,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, 66, 97, 99,107,103,114,111,117,110,100, 32, 73,109, 97,103,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,187,252,163, 0, 0, 0, 20, 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,192,164,128, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 80,166,128, 29, + 1, 0, 0, 0, 48,163,128, 29, 1, 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,114, 97,110,115,102,111,114,109, 95,111,114,105,101,110,116, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, + 51, 68, 95, 80, 84, 95,116,114, 97,110,115,102,111,114,109, 95,111,114,105,101,110,116, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, 84,114, 97,110, +115,102,111,114,109, 32, 79,114,105,101,110,116, 97,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,163,252, +163, 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, 80,166,128, 29, + 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,164,128, 29, 1, 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, 51,100,118,105,101,119, 95,110, 97,109, +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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, 95,110, 97,109, +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, 73,116,101,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,163, 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,224,167,128, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,144,155,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 7, 0, 0,128, 7, 0, 0, -112, 0, 0, 0,235, 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,157, 2, 0, 0, 47, 6, 0, 0,155, 0, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,147, 3,201, 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, 68, 65, 84, 65, 40, 1, 0, 0, -192,196,164, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,195,164, 29, 1, 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,123, 1, 0, 0, 18, 0, 0, 0,227, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 18, 0, 0, 0,227, 1, 0, 0, 18, 0, 0, 0,123, 1, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 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,228, 1,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,157, 5, 0, 0,128, 7, 0, 0, -112, 0, 0, 0,235, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228, 1,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, - 32,198,164, 29, 1, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0, 16,202,164, 29, 1, 0, 0, 0,192,192,164, 29, 1, 0, 0, 0, - 0,194,164, 29, 1, 0, 0, 0,192,196,164, 29, 1, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 80,199,164, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,176,200,164, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 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, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, - 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, - 26, 0, 20, 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, 0, 0, 0, 0, - 89, 6, 0, 0,108, 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, - 20, 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, - 68, 65, 84, 65, 40, 1, 0, 0,176,200,164, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80,199,164, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 20, 1, 55, 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, 48,212, 2, 28, 1, 0, 0, 0, - 68, 65, 84, 65, 88, 3, 0, 0, 48,212, 2, 28, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 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, - 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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, 32,193, 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, 32, 65, 0, 0,128, 63,103,212,136, 64, 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, - 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 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, 32,193, 0, 0,128, 63,103,212,136, 64, 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, - 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 48,120,131, 27, + 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48,120,131, 27, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 38, 67,148, 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,128, 0, 0, 0,128, 74,215, 76,190, 0, 0, 0,128, 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,200, 42,243, 62, +208,249,224,190, 48,180, 81,191,184,158, 81,191, 49, 54,135, 63,140,225, 88, 62, 26, 63,185, 62, 35, 44,185, 62,222,187,123,188, +206,156,122, 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, 88, 62,181, 62, + 47,143, 73, 63,144,162, 59,188, 0, 0, 96,179,191, 15,188,190,128, 75, 53, 62,217,125, 81, 63, 0, 0, 96,178, 67,108,117,194, +185,204,216, 65,104,156, 5,194,212,247,159,192,235, 62,114, 66, 61,254,213,193,157,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,200, 42,243, 62, +208,249,224,190, 48,180, 81,191,184,158, 81,191, 49, 54,135, 63,140,225, 88, 62, 26, 63,185, 62, 35, 44,185, 62,222,187,123,188, +206,156,122, 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,124,197, 7, 64, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124,197, 7, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,124,197, 7, 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,149, 87,247, 58, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1835,2461 +790,2242 @@ char datatoc_B_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, 68, 65, 84, 65, 32, 1, 0, 0, 16,202,164, 29, 1, 0, 0, 0, -158, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,198,164, 29, 1, 0, 0, 0, 80,199,164, 29, 1, 0, 0, 0, -176,200,164, 29, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, - 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, 64,169,128, 29, + 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 96,173,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 1, 0, 0, 0, + 1, 0, 7, 0, 48, 68,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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,112,203,164, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -176,236,164, 29, 1, 0, 0, 0, 16, 15,164, 29, 1, 0, 0, 0,160,195,163, 29, 1, 0, 0, 0, 64,195,163, 29, 1, 0, 0, 0, -224,194,163, 29, 1, 0, 0, 0, 0,196,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 27, 6, 0, 0, - 0, 0, 0, 0,179, 1, 0, 0, 1, 1, 27, 3,180, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,111,217, 2, 1, 0, 0, 0, - 32,222,164, 29, 1, 0, 0, 0,176,235,164, 29, 1, 0, 0, 0, 80,204,164, 29, 1, 0, 0, 0,192,220,164, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,149,140, 27, 1, 0, 0, 0,240, 90,201, 20, 1, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 80,204,164, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,176,205,164, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,102, 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,237, 68, 0, 0,200, 65, - 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 3, 0, 0, 27, 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,208,119,217, 2, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,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, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0,255,255, + 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,160,170,128, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0,172,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 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,151, 4, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 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, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 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, - 68, 65, 84, 65, 40, 1, 0, 0,176,205,164, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 16,207,164, 29, 1, 0, 0, 0, - 80,204,164, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 3, 0, 0, 1, 3, 0, 0, 26, 0, 0, 0,179, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0,154, 1, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 48,116,217, 2, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0,172,128, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,170,128, 29, 1, 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,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0, +121, 2, 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,152, 4,122, 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,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 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, - 68, 65, 84, 65, 40, 1, 0, 0, 16,207,164, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,112,208,164, 29, 1, 0, 0, 0, -176,205,164, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 3, 0, 0, 27, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0,118,217, 2, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,112,208,164, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,192,220,164, 29, 1, 0, 0, 0, - 16,207,164, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 27, 6, 0, 0, 27, 6, 0, 0, 26, 0, 0, 0,179, 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, 1, 0, 0, 0, 0, 0, 0, 0,112,113,217, 2, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,209,164, 29, 1, 0, 0, 0, 48,219,164, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,208,209,164, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 96,211,164, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, - 84, 95,111, 98,106,101, 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, 86, 73, 69, 87, 51, 68, 95, 80, - 84, 95,111, 98,106,101, 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, 84,114, 97,110,115,102,111,114, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 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,254,163, 0,110, 1, - 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, 96,211,164, 29, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0,240,212,164, 29, 1, 0, 0, 0,208,209,164, 29, 1, 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,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, 86, 73, 69, 87, 51, 68, 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, 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,236,253,163, 0, 58, 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, 68, 65, 84, 65,200, 0, 0, 0, 96,173,128, 29, 1, 0, 0, 0,173, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,169,128, 29, 1, 0, 0, 0,160,170,128, 29, 1, 0, 0, 0, 0,172,128, 29, + 1, 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, - 68, 65, 84, 65, 88, 1, 0, 0,240,212,164, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,128,214,164, 29, 1, 0, 0, 0, - 96,211,164, 29, 1, 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, 51,100,118,105,101,119, 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, 86, 73, 69, 87, 51, 68, 95, 80, - 84, 95, 51,100,118,105,101,119, 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, 86,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153,252,163, 0, 59, 1, + 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 96,174,128, 29, 1, 0, 0, 0,195, 0, 0, 0, + 1, 0, 0, 0, 48,159,111, 27, 1, 0, 0, 0,144,150,128, 29, 1, 0, 0, 0,144,239,129, 29, 1, 0, 0, 0,128, 65,129, 29, + 1, 0, 0, 0,208, 40,108, 27, 1, 0, 0, 0,144, 35,245, 26, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +155, 2, 0, 0,129, 0, 0, 0,147, 1, 0, 0, 2, 2,156, 2, 19, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,183,110, 27, 1, 0, 0, 0, 48,158,111, 27, 1, 0, 0, 0, 64,175,128, 29, 1, 0, 0, 0, 96,179,128, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64,175,128, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,160,176,128, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 83, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0, 0, 39, 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,155, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,103, 68, + 0, 0,200, 65, 0,192,103, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, + 10, 0,156, 2, 26, 0,156, 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, + 0, 0, 0, 0, 0, 0, 0, 0,155, 2, 0, 0,129, 0, 0, 0,154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,156, 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, 68, 65, 84, 65, 40, 1, 0, 0,160,176,128, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0,178,128, 29, + 1, 0, 0, 0, 64,175,128, 29, 1, 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,103,195, 0, 0, 0, 0,200, 0, 0, 0,217, 0, 0, 0, 18, 0, 0, 0,248, 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,248, 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, 0, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, + 6, 0,217, 0,249, 0,200, 0,231, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0,155, 0, 0, 0,147, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,217, 0,249, 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, 68, 65, 84, 65, 40, 1, 0, 0, 0,178,128, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 96,179,128, 29, + 1, 0, 0, 0,160,176,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,155, 2, 0, 0,155, 2, 0, 0,155, 0, 0, 0,147, 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, 68, 65, 84, 65, 40, 1, 0, 0, 96,179,128, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,178,128, 29, 1, 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,248, 0, 0, 0, 18, 0, 0, 0, +194, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,194, 1, 0, 0, 18, 0, 0, 0,248, 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,195, 1,249, 0, 0, 0, 0, 0, 0, 0, 0, 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,155, 2, 0, 0,155, 0, 0, 0,147, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,195, 1,249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0,183,110, 27, 1, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0,128, 24,131, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,184,110, 27, 1, 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, 68, 65, 84, 65, 32, 0, 0, 0, 48,184,110, 27, + 1, 0, 0, 0, 21, 1, 0, 0, 1, 0, 0, 0, 48, 66,136, 27, 1, 0, 0, 0, 0, 0, 0, 0, 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,144,184,110, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 32, 23,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,202, 67, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0,104, 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,159, 3, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,192, 41, 68, 0, 0,200, 65, 0,192, 41, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,160, 3, 26, 0,160, 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, 0, 0, 0, 0, 0, 0, 0, 0,159, 3, 0, 0, 85, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 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, 68, 65, 84, 65, 40, 1, 0, 0, 32, 23,131, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,208,145,111, 27, 1, 0, 0, 0,144,184,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 67, 0,128,100,196, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 67, 0,128,100,196, 0, 0, 0, 0,172, 0, 0, 0,189, 0, 0, 0, 18, 0, 0, 0, +163, 3, 0, 0, 0, 0, 0, 0,171, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,171, 0, 0, 0, 18, 0, 0, 0, +163, 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,189, 0,164, 3,172, 0,146, 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,111, 0, 0, 0, 18, 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, 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, 68, 65, 84, 65, 40, 1, 0, 0,208,145,111, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 23,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, + 0, 0,128, 67, 0, 0,168,191, 0, 0, 20, 64, 0, 0,169,191, 0,128, 20, 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,160, 3, 0, 0, 0, 0, 0, 0, +164, 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,159, 3, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 3,164, 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, 68, 65, 84, 65,168, 0, 0, 0,128, 24,131, 29, 1, 0, 0, 0,168, 0, 0, 0, + 1, 0, 0, 0, 16,154,111, 27, 1, 0, 0, 0, 0,183,110, 27, 1, 0, 0, 0,144,184,110, 27, 1, 0, 0, 0,208,145,111, 27, + 1, 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,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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,128, 63, 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, 48,147,111, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,144,148,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 42, 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,167, 2, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,168, 2, 26, 0,168, 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, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0, 85, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 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, 68, 65, 84, 65, 40, 1, 0, 0,144,148,111, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,240,149,111, 27, 1, 0, 0, 0, 48,147,111, 27, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,164, 3, 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, 68, 65, 84, 65, 40, 1, 0, 0,240,149,111, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 80,151,111, 27, 1, 0, 0, 0,144,148,111, 27, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0,111, 0, 0, 0,111, 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, 68, 65, 84, 65, 40, 1, 0, 0, 80,151,111, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,176,152,111, 27, 1, 0, 0, 0,240,149,111, 27, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0,167, 2, 0, 0,111, 0, 0, 0, 18, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,176,152,111, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,151,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 2,164, 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, 48,124,131, 27, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48,124,131, 27, 1, 0, 0, 0,157, 0, 0, 0, + 1, 0, 0, 0,226,225,191, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, + 0, 0, 0,128, 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,192, 90, 29, 63,208,249,224,190,222,160, 81,191,184,158, 81,191,253,253,174, 63,140,225, 88, 62, 9, 46,185, 62, + 35, 44,185, 62,232,229,162,188,206,156,122, 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,250, 8,140, 62,174,189, 27, 63,224, 25, 17,188, 0, 64,153,181,195, 13,188,190,191, 73, 53, 62, 99,126, 81, 63, + 0,128,163, 53,215,104, 25,196,134,132,135, 67, 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68,159, 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,192, 90, 29, 63,208,249,224,190,222,160, 81,191,184,158, 81,191,253,253,174, 63,140,225, 88, 62, 9, 46,185, 62, + 35, 44,185, 62,232,229,162,188,206,156,122, 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, 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,172,148, 0, 59, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 16,154,111, 27, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 48,158,111, 27, 1, 0, 0, 0,128, 24,131, 29, + 1, 0, 0, 0, 48,147,111, 27, 1, 0, 0, 0,176,152,111, 27, 1, 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, + 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48, 68,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 8, + 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, + 1, 0, 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, 0, 0, 0, 0, + 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,112,155,111, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,208,156,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 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, +151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 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, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0, +126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 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, 68, 65, 84, 65, 40, 1, 0, 0,208,156,111, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,155,111, 27, 1, 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,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, +151, 4, 0, 0, 18, 0, 0, 0,121, 2, 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,152, 4,122, 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,151, 4, 0, 0,127, 0, 0, 0, +248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65,200, 0, 0, 0, 48,158,111, 27, + 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,154,111, 27, 1, 0, 0, 0,112,155,111, 27, + 1, 0, 0, 0,208,156,111, 27, 1, 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, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 48,159,111, 27, + 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 32,189,111, 27, 1, 0, 0, 0, 96,174,128, 29, 1, 0, 0, 0,128, 65,129, 29, + 1, 0, 0, 0,112,176,129, 29, 1, 0, 0, 0,160, 78,129, 29, 1, 0, 0, 0,208, 40,108, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,155, 2, 0, 0,149, 1, 0, 0, 99, 4, 0, 0, 12, 12,156, 2,207, 2, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,164,111, 27, 1, 0, 0, 0, 32,188,111, 27, 1, 0, 0, 0, 16,160,111, 27, + 1, 0, 0, 0,208,162,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 16,160,111, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,112,161,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 39, 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,155, 2, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,192,103, 68, 0, 0,200, 65, 0,192,103, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,156, 2, 26, 0,156, 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, 0, 0, 0, 0, 0, 0, 0, 0,155, 2, 0, 0,149, 1, 0, 0,174, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,156, 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, 68, 65, 84, 65, 40, 1, 0, 0,112,161,111, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,208,162,111, 27, 1, 0, 0, 0, 16,160,111, 27, 1, 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,192, 40,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,199, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 18, 0, 0, 0, +180, 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, 8, 0, 0, 0, + 2, 0, 3, 3, 0, 0, 2, 4, 6, 0,200, 0,181, 2,200, 0,163, 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,199, 0, 0, 0,175, 1, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 0,181, 2, 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, 68, 65, 84, 65, 40, 1, 0, 0,208,162,111, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,161,111, 27, 1, 0, 0, 0, 0, 0, 32,193, 0, 0,104, 68, 0, 0, 0,194, + 0, 0, 0, 0, 0, 0, 32,193, 0, 0,104, 68, 0,192, 40,196, 0, 0, 0, 0,195, 1, 0, 0,212, 1, 0, 0, 18, 0, 0, 0, +180, 2, 0, 0, 0, 0, 0, 0,194, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,194, 1, 0, 0, 18, 0, 0, 0, +180, 2, 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,212, 1,181, 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,200, 0, 0, 0,155, 2, 0, 0,175, 1, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,212, 1,181, 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, 68, 65, 84, 65, 8, 1, 0, 0, 48,164,111, 27, 1, 0, 0, 0, 22, 1, 0, 0, + 1, 0, 0, 0,240,170,111, 27, 1, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 48, 66,136, 27, + 1, 0, 0, 0, 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, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112,165,111, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,208,166,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 78, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0,104, 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,159, 3, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,192,103, 68, 0, 0,200, 65, 0,192,103, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,160, 3, 26, 0,160, 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, 0, 0, 0, 0, 0, 0, 0, 0,159, 3, 0, 0, 49, 2, 0, 0, 74, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 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, 68, 65, 84, 65, 40, 1, 0, 0,208,166,111, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 48,168,111, 27, 1, 0, 0, 0,112,165,111, 27, 1, 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,219,195, 0, 0, 0, 0,200, 0, 0, 0,217, 0, 0, 0, 18, 0, 0, 0, +199, 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, +199, 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, 0, 0, 0, + 2, 0, 3, 3, 0, 0, 0, 4, 6, 0,217, 0,200, 1,200, 0,182, 1, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 75, 2, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,217, 0,200, 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, 68, 65, 84, 65, 40, 1, 0, 0, 48,168,111, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,144,169,111, 27, 1, 0, 0, 0,208,166,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 3, 0, 0,159, 3, 0, 0, 75, 2, 0, 0, 18, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,144,169,111, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,168,111, 27, 1, 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, +199, 1, 0, 0, 18, 0, 0, 0,198, 2, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,198, 2, 0, 0, 18, 0, 0, 0, +199, 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,199, 2,200, 1, 0, 0, 0, 0, 0, 0, 0, 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,159, 3, 0, 0, 75, 2, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,199, 2,200, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,240,170,111, 27, 1, 0, 0, 0,162, 0, 0, 0, + 1, 0, 0, 0, 64,176,111, 27, 1, 0, 0, 0, 48,164,111, 27, 1, 0, 0, 0,112,165,111, 27, 1, 0, 0, 0,144,169,111, 27, + 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,185,110, 27, 1, 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, 68, 65, 84, 65, + 32, 0, 0, 0,240,185,110, 27, 1, 0, 0, 0, 21, 1, 0, 0, 1, 0, 0, 0, 48, 66,136, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 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, 32,172,111, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,128,173,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,202, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,104, 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, +159, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 41, 68, 0, 0,200, 65, 0,192, 41, 68, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,160, 3, 26, 0,160, 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, 0, 0, 0, 0, 0, 0, 0, 0,159, 3, 0, 0, 85, 0, 0, 0, +110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 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, 68, 65, 84, 65, 40, 1, 0, 0,128,173,111, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,224,174,111, 27, 1, 0, 0, 0, 32,172,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 44, 67, 0,128,100,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 67, 0,128,100,196, 0, 0, 0, 0,172, 0, 0, 0, +189, 0, 0, 0, 18, 0, 0, 0,163, 3, 0, 0, 0, 0, 0, 0,171, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, +171, 0, 0, 0, 18, 0, 0, 0,163, 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,189, 0,164, 3,172, 0,146, 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,111, 0, 0, 0, + 18, 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, 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, 68, 65, 84, 65, 40, 1, 0, 0,224,174,111, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,173,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67, 0, 0,168,191, 0, 0, 20, 64, 0, 0,169,191, 0,128, 20, 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, +160, 3, 0, 0, 0, 0, 0, 0,164, 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,159, 3, 0, 0,111, 0, 0, 0, + 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 3,164, 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, 68, 65, 84, 65,168, 0, 0, 0, 64,176,111, 27, + 1, 0, 0, 0,168, 0, 0, 0, 1, 0, 0, 0, 0,184,111, 27, 1, 0, 0, 0,240,170,111, 27, 1, 0, 0, 0, 32,172,111, 27, + 1, 0, 0, 0,224,174,111, 27, 1, 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,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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,128, 63, + 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, 32,177,111, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,128,178,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 42, 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, +167, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,168, 2, 26, 0,168, 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, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0, 85, 0, 0, 0, +110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 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, 68, 65, 84, 65, 40, 1, 0, 0,128,178,111, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,224,179,111, 27, 1, 0, 0, 0, 32,177,111, 27, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0, + 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,164, 3, 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, 68, 65, 84, 65, 40, 1, 0, 0,224,179,111, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 64,181,111, 27, 1, 0, 0, 0,128,178,111, 27, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0,111, 0, 0, 0, +111, 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, 68, 65, 84, 65, 40, 1, 0, 0, 64,181,111, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,160,182,111, 27, 1, 0, 0, 0,224,179,111, 27, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0,167, 2, 0, 0,111, 0, 0, 0, + 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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,160,182,111, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,181,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0,111, 0, 0, 0, + 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 2,164, 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, 48,128,131, 27, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48,128,131, 27, + 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,226,225,191, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, + 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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,192, 90, 29, 63,208,249,224,190,222,160, 81,191,184,158, 81,191,253,253,174, 63, +140,225, 88, 62, 9, 46,185, 62, 35, 44,185, 62,232,229,162,188,206,156,122, 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,250, 8,140, 62,174,189, 27, 63,224, 25, 17,188, 0, 64,153,181,195, 13,188,190, +191, 73, 53, 62, 99,126, 81, 63, 0,128,163, 53,215,104, 25,196,134,132,135, 67, 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68, +159, 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,192, 90, 29, 63,208,249,224,190,222,160, 81,191,184,158, 81,191,253,253,174, 63, +140,225, 88, 62, 9, 46,185, 62, 35, 44,185, 62,232,229,162,188,206,156,122, 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, 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,172,148, 0, 59, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0,184,111, 27, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 32,188,111, 27, + 1, 0, 0, 0, 64,176,111, 27, 1, 0, 0, 0, 32,177,111, 27, 1, 0, 0, 0,160,182,111, 27, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48, 68,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, + 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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, 96,185,111, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,192,186,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 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,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 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, 0, 0, 0, 0, 0, 0, 0, 0, +151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 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, 68, 65, 84, 65, + 40, 1, 0, 0,192,186,111, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,185,111, 27, + 1, 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,151, 4, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 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,152, 4,122, 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, +151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65, +200, 0, 0, 0, 32,188,111, 27, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,111, 27, + 1, 0, 0, 0, 96,185,111, 27, 1, 0, 0, 0,192,186,111, 27, 1, 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, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65, +160, 0, 0, 0, 32,189,111, 27, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,159,111, 27, + 1, 0, 0, 0, 32,106,130, 29, 1, 0, 0, 0,160, 56,130, 29, 1, 0, 0, 0, 0, 61,131, 29, 1, 0, 0, 0, 0,160,129, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 6, 0, 0,128, 7, 0, 0,117, 3, 0, 0, 99, 4, 0, 0, 1, 1, 80, 1, +239, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,192,110, 27, 1, 0, 0, 0, 96,191,111, 27, + 1, 0, 0, 0, 0,190,111, 27, 1, 0, 0, 0,176, 18,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0,190,111, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,176, 18,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,194, 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, +131, 1, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 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,132, 1, 24, 0,132, 1, 24, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 6, 0, 0,128, 7, 0, 0,117, 3, 0, 0, +117, 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, 1, 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, 0, 0, 0, 0, + 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,176, 18,131, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 6, 0, 0,128, 7, 0, 0,117, 3, 0, 0, + 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,239, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,240,133, 27, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48,240,133, 27, + 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 24,255, 13, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +120,160, 71, 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,128, + 0, 0, 0,128, 72, 1, 77,190, 0, 0, 0,128,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, 3,201,194, 63, 30,108,125,191,244,250, 39,191, 8,165, 39,191,143,164,206, 63, + 41,130,121, 63,180,164, 28, 63,149, 84, 28, 63,179,153,196,188, 10,188, 50, 64, 8,108,228,190, 50,247,227,190, 82, 21, 64,191, +118,101,150,191,216, 49, 49, 65,152, 9, 52, 65,231, 70,158, 62, 23,234,167, 62,160,206,159,187, 0, 0,168,180, 27, 97,208,189, + 70, 41,205, 61,173,247,146, 62, 0, 0,166, 51,211,120, 21,194,145, 5, 2, 66, 9,136,213,193,193,214,159,192,219, 38, 19, 66, +197,173,255,193,157,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, 3,201,194, 63, 30,108,125,191,244,250, 39,191, 8,165, 39,191,143,164,206, 63, + 41,130,121, 63,180,164, 28, 63,149, 84, 28, 63,179,153,196,188, 10,188, 50, 64, 8,108,228,190, 50,247,227,190, 82, 21, 64,191, +118,101,150,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,241, 22, 72, 63, 78,162,246,190, 44, 8, 90,190, 3, 35,171,190, 0, 0, 32, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,210, 47, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, 48,192,110, 27, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 80,196,110, 27, + 1, 0, 0, 0, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48, 68,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, + 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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,144,193,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,240,194,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,128,163, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,194, 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,131, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 66, 67, 0, 0,200, 65, 0, 0, 66, 67, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,132, 1, 26, 0,132, 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, 0, 0, 0, 0,253, 5, 0, 0, +128, 7, 0, 0,249, 3, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,132, 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, 68, 65, 84, 65, + 40, 1, 0, 0,240,194,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,193,110, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0,128,131, 67, 0, 0,228,194, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,185, 67, 0, 0, 62,195, + 0, 0, 0, 0,115, 1, 0, 0,132, 1, 0, 0, 18, 0, 0, 0,207, 0, 0, 0, 0, 0, 0, 0,114, 1, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0,114, 1, 0, 0, 18, 0, 0, 0,207, 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, 0, 4, 6, 0,132, 1,208, 0,115, 1, +190, 0, 0, 0, 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, 5, 0, 0, +128, 7, 0, 0, 41, 3, 0, 0,248, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,132, 1,208, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 80,196,110, 27, 1, 0, 0, 0,167, 0, 0, 0, 1, 0, 0, 0, 96,191,111, 27, 1, 0, 0, 0, 48,192,110, 27, + 1, 0, 0, 0,144,193,110, 27, 1, 0, 0, 0,240,194,110, 27, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 80,186,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 80,186,110, 27, 1, 0, 0, 0,219, 0, 0, 0, 1, 0, 0, 0, 13, 0, 0, 0, 13, 0, 0, 0, 16, 20,131, 29, + 1, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0, 16, 20,131, 29, 1, 0, 0, 0,218, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 48, 66,136, 27, 1, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0, 48, 66,136, 27, 1, 0, 0, 0, 20, 0, 0, 0, + 1, 0, 1, 0, 48, 66,136, 27, 1, 0, 0, 0, 21, 0, 1, 0, 1, 0, 1, 0, 48, 66,136, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 48, 58,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48, 74,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 48,171,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48, 86,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 64,198,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48, 80,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 48, 54,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48, 68,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 32,163,176, 21, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176,197,110, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 16,199,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 67, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 55, 0, 0, 67, 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,194, 0, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,195, 0, 26, 0,195, 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, 53, 4, 0, 0,247, 4, 0, 0, 69, 2, 0, 0, 94, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 0, 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, 68, 65, 84, 65, 40, 1, 0, 0, 16,199,110, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,197,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,150, 67, 0,192,116,196, + 0, 0, 0, 0, 0, 0, 0, 0,205, 85,150, 67,223,204, 35,196, 26, 85,207,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0, +155, 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, 0, 0, 0, 0, + 1, 0, 3, 0, 2, 0, 0, 4, 6, 0,195, 0,156, 0,195, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 4, 0, 0,247, 4, 0, 0, 95, 2, 0, 0,250, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0, 96,191,111, 27, 1, 0, 0, 0,163, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,196,110, 27, 1, 0, 0, 0,176,197,110, 27, 1, 0, 0, 0, 16,199,110, 27, + 1, 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, 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, 83, 78, 0, 0,208, 0, 0, 0,240,200,110, 27, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 32,158,131, 29, + 1, 0, 0, 0, 48, 90,128, 29, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,202,110, 27, 1, 0, 0, 0,224,206,110, 27, 1, 0, 0, 0, 64,207,110, 27, 1, 0, 0, 0, 32,215,110, 27, + 1, 0, 0, 0,128,215,110, 27, 1, 0, 0, 0, 96, 57,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 66,136, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0,202,110, 27, 1, 0, 0, 0,192, 0, 0, 0, + 1, 0, 0, 0, 96,202,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 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, 96,202,110, 27, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,192,202,110, 27, + 1, 0, 0, 0, 0,202,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 4, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0,192,202,110, 27, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 32,203,110, 27, 1, 0, 0, 0, 96,202,110, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,128, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 32,203,110, 27, + 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,128,203,110, 27, 1, 0, 0, 0,192,202,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,128,203,110, 27, 1, 0, 0, 0,192, 0, 0, 0, + 1, 0, 0, 0,224,203,110, 27, 1, 0, 0, 0, 32,203,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 4, + 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,224,203,110, 27, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 64,204,110, 27, + 1, 0, 0, 0,128,203,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,100, 4, 1, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0, 64,204,110, 27, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,160,204,110, 27, 1, 0, 0, 0,224,203,110, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 6,100, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,160,204,110, 27, + 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0,205,110, 27, 1, 0, 0, 0, 64,204,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,128, 7,100, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 0,205,110, 27, 1, 0, 0, 0,192, 0, 0, 0, + 1, 0, 0, 0, 96,205,110, 27, 1, 0, 0, 0,160,204,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 6,100, 4, + 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 96,205,110, 27, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,192,205,110, 27, + 1, 0, 0, 0, 0,205,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,180, 1, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0,192,205,110, 27, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 32,206,110, 27, 1, 0, 0, 0, 96,205,110, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 6,180, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 32,206,110, 27, + 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,128,206,110, 27, 1, 0, 0, 0,192,205,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3,180, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,128,206,110, 27, 1, 0, 0, 0,192, 0, 0, 0, + 1, 0, 0, 0,224,206,110, 27, 1, 0, 0, 0, 32,206,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,224,206,110, 27, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,128,206,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0, 64,207,110, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,160,207,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 96,202,110, 27, 1, 0, 0, 0,192,202,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,160,207,110, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0,208,110, 27, 1, 0, 0, 0, 64,207,110, 27, + 1, 0, 0, 0, 96,202,110, 27, 1, 0, 0, 0,128,203,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0, 0,208,110, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 96,208,110, 27, 1, 0, 0, 0,160,207,110, 27, + 1, 0, 0, 0,192,202,110, 27, 1, 0, 0, 0,224,203,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0, 96,208,110, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,192,208,110, 27, 1, 0, 0, 0, 0,208,110, 27, + 1, 0, 0, 0,128,203,110, 27, 1, 0, 0, 0,224,203,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,192,208,110, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 32,209,110, 27, 1, 0, 0, 0, 96,208,110, 27, + 1, 0, 0, 0, 32,203,110, 27, 1, 0, 0, 0,160,204,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0, 32,209,110, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,128,209,110, 27, 1, 0, 0, 0,192,208,110, 27, + 1, 0, 0, 0, 64,204,110, 27, 1, 0, 0, 0,160,204,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,128,209,110, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,224,209,110, 27, 1, 0, 0, 0, 32,209,110, 27, + 1, 0, 0, 0,224,203,110, 27, 1, 0, 0, 0, 0,205,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,224,209,110, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 64,210,110, 27, 1, 0, 0, 0,128,209,110, 27, + 1, 0, 0, 0,128,203,110, 27, 1, 0, 0, 0, 0,205,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0, 64,210,110, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,160,210,110, 27, 1, 0, 0, 0,224,209,110, 27, + 1, 0, 0, 0, 64,204,110, 27, 1, 0, 0, 0, 0,205,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,160,210,110, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0,211,110, 27, 1, 0, 0, 0, 64,210,110, 27, + 1, 0, 0, 0,224,203,110, 27, 1, 0, 0, 0,160,204,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0, 0,211,110, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 96,211,110, 27, 1, 0, 0, 0,160,210,110, 27, + 1, 0, 0, 0,128,203,110, 27, 1, 0, 0, 0, 96,205,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0, 96,211,110, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,192,211,110, 27, 1, 0, 0, 0, 0,211,110, 27, + 1, 0, 0, 0, 0,205,110, 27, 1, 0, 0, 0,192,205,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,192,211,110, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 32,212,110, 27, 1, 0, 0, 0, 96,211,110, 27, + 1, 0, 0, 0, 96,205,110, 27, 1, 0, 0, 0,192,205,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0, 32,212,110, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,128,212,110, 27, 1, 0, 0, 0,192,211,110, 27, + 1, 0, 0, 0, 96,205,110, 27, 1, 0, 0, 0, 32,206,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,128,212,110, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,224,212,110, 27, 1, 0, 0, 0, 32,212,110, 27, + 1, 0, 0, 0,192,205,110, 27, 1, 0, 0, 0, 32,206,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,224,212,110, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 64,213,110, 27, 1, 0, 0, 0,128,212,110, 27, + 1, 0, 0, 0, 0,202,110, 27, 1, 0, 0, 0,128,206,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0, 64,213,110, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,160,213,110, 27, 1, 0, 0, 0,224,212,110, 27, + 1, 0, 0, 0,128,206,110, 27, 1, 0, 0, 0,224,206,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,160,213,110, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0,214,110, 27, 1, 0, 0, 0, 64,213,110, 27, + 1, 0, 0, 0, 32,203,110, 27, 1, 0, 0, 0,224,206,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0, 0,214,110, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 96,214,110, 27, 1, 0, 0, 0,160,213,110, 27, + 1, 0, 0, 0, 64,204,110, 27, 1, 0, 0, 0,224,206,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0, 96,214,110, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,192,214,110, 27, 1, 0, 0, 0, 0,214,110, 27, + 1, 0, 0, 0, 32,206,110, 27, 1, 0, 0, 0,128,206,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,192,214,110, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 32,215,110, 27, 1, 0, 0, 0, 96,214,110, 27, + 1, 0, 0, 0,192,205,110, 27, 1, 0, 0, 0,224,206,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0, 32,215,110, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,214,110, 27, + 1, 0, 0, 0, 0,202,110, 27, 1, 0, 0, 0, 96,205,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +160, 0, 0, 0,128,215,110, 27, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 32,219,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,128,203,110, 27, 1, 0, 0, 0, 96,202,110, 27, 1, 0, 0, 0,192,202,110, 27, 1, 0, 0, 0,224,203,110, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,101, 4, 0, 0,128, 4, 0, 0, 7, 7,129, 7, + 28, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,142,111, 27, 1, 0, 0, 0, 80,142,111, 27, + 1, 0, 0, 0, 96,216,110, 27, 1, 0, 0, 0,192,217,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 96,216,110, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,192,217,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,224,162, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,240, 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, +128, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,129, 7, 26, 0,129, 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, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,101, 4, 0, 0, +126, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 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, 68, 65, 84, 65, 40, 1, 0, 0,192,217,110, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,216,110, 27, 1, 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, 0, 63, + 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 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, 0, 0, 0, 0,128, 7, 0, 0,127, 4, 0, 0, +128, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 32,219,110, 27, + 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,224,227,110, 27, 1, 0, 0, 0,128,215,110, 27, 1, 0, 0, 0,224,206,110, 27, + 1, 0, 0, 0, 64,204,110, 27, 1, 0, 0, 0,160,204,110, 27, 1, 0, 0, 0, 32,203,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 29, 6, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 15, 15,100, 1,100, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,222,110, 27, 1, 0, 0, 0,128,226,110, 27, 1, 0, 0, 0, 0,220,110, 27, + 1, 0, 0, 0, 96,221,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0,220,110, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 96,221,110, 27, 1, 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,221, 67, 0,128, 71, 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, 99, 1, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,100, 1, 26, 0,100, 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, 0, 0, 0, 0, 29, 6, 0, 0,128, 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,100, 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, 68, 65, 84, 65, 40, 1, 0, 0, 96,221,110, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,110, 27, 1, 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, 99, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 99, 1, 0, 0, 18, 0, 0, 0, + 73, 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,100, 1, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 6, 0, 0,128, 7, 0, 0, 26, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 1, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0,192,222,110, 27, 1, 0, 0, 0,173, 0, 0, 0, + 1, 0, 0, 0,128,226,110, 27, 1, 0, 0, 0, 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, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192,223,110, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 32,225,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0,203, 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, 87, 6, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 88, 6, 26, 0, 88, 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, 0, 0, 0, 0, 0, 0, 0, 0, 87, 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, 88, 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, 68, 65, 84, 65, 40, 1, 0, 0, 32,225,110, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,223,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 6, 0, 0, 26, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 6, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48,244,133, 27, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48,244,133, 27, 1, 0, 0, 0,157, 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, 87,213,108, 66, 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,128, 0, 0, 0,128,226,215,163,188, + 0, 0, 0,128, 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, 32,193, + 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, 32, 65, + 0, 0,128, 63, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, 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,184,175, 31, 65, + 0, 0, 32, 65,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 91,138, 60, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67, +129,255, 71, 66, 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, 32,193, + 0, 0,128, 63, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, 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,184,175, 31, 65, + 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 52,149,147, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,128,226,110, 27, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,222,110, 27, + 1, 0, 0, 0,192,223,110, 27, 1, 0, 0, 0, 32,225,110, 27, 1, 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, + 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48, 68,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 0, + 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, + 1, 0, 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, 0, 0, 0, 0, + 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,224,227,110, 27, + 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,208, 1,111, 27, 1, 0, 0, 0, 32,219,110, 27, 1, 0, 0, 0, 64,204,110, 27, + 1, 0, 0, 0, 0,205,110, 27, 1, 0, 0, 0,224,203,110, 27, 1, 0, 0, 0,160,204,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 29, 6, 0, 0,128, 7, 0, 0,101, 0, 0, 0, 99, 4, 0, 0, 4, 4,100, 1,255, 3, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,247,110, 27, 1, 0, 0, 0,112, 0,111, 27, 1, 0, 0, 0,192,228,110, 27, + 1, 0, 0, 0, 32,230,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,192,228,110, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 32,230,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0,178, 67, 0, 0, 0, 0, 0, 0,248, 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, 99, 1, 0, 0, 0, 0, 0, 0, + 30, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,100, 1, 31, 0,100, 1, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 6, 0, 0,128, 7, 0, 0, 69, 4, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 1, 31, 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, 68, 65, 84, 65, 40, 1, 0, 0, 32,230,110, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,228,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,169, 67, 0, 64,115,196, + 0, 0, 0, 0, 0, 0, 0, 0,255,127,169, 67,254,127,115,196, 0, 0, 0, 0, 83, 1, 0, 0,100, 1, 0, 0, 18, 0, 0, 0, +223, 3, 0, 0, 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 82, 1, 0, 0, 18, 0, 0, 0, +223, 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, 4, 6, 0,100, 1,224, 3, 83, 1,206, 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, 29, 6, 0, 0,128, 7, 0, 0,101, 0, 0, 0, 68, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 1,224, 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,128,231,110, 27, + 1, 0, 0, 0,144,245,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,128,231,110, 27, 1, 0, 0, 0,194, 0, 0, 0, + 1, 0, 0, 0, 16,233,110, 27, 1, 0, 0, 0, 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, 82, 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, 16,233,110, 27, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,160,234,110, 27, 1, 0, 0, 0,128,231,110, 27, + 1, 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, 82, 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,160,234,110, 27, 1, 0, 0, 0,194, 0, 0, 0, + 1, 0, 0, 0, 48,236,110, 27, 1, 0, 0, 0, 16,233,110, 27, 1, 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, 82, 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, 48,236,110, 27, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,192,237,110, 27, 1, 0, 0, 0,160,234,110, 27, + 1, 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, 82, 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,192,237,110, 27, 1, 0, 0, 0,194, 0, 0, 0, + 1, 0, 0, 0, 80,239,110, 27, 1, 0, 0, 0, 48,236,110, 27, 1, 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, 82, 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, 80,239,110, 27, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,224,240,110, 27, 1, 0, 0, 0,192,237,110, 27, + 1, 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,188,253, 82, 1,102, 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,224,240,110, 27, 1, 0, 0, 0,194, 0, 0, 0, + 1, 0, 0, 0,112,242,110, 27, 1, 0, 0, 0, 80,239,110, 27, 1, 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, 59,253, 82, 1,105, 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,112,242,110, 27, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0,244,110, 27, 1, 0, 0, 0,224,240,110, 27, + 1, 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, 35,253, 82, 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, 0,244,110, 27, 1, 0, 0, 0,194, 0, 0, 0, + 1, 0, 0, 0,144,245,110, 27, 1, 0, 0, 0,112,242,110, 27, 1, 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, 11,253, 82, 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,144,245,110, 27, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,244,110, 27, + 1, 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,243,252, 82, 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, 0, 1, 0, 0, 32,247,110, 27, 1, 0, 0, 0,163, 0, 0, 0, + 1, 0, 0, 0,128,252,110, 27, 1, 0, 0, 0, 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, 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, 68, 65, 84, 65, 40, 1, 0, 0, 96,248,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,192,249,110, 27, + 1, 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,216, 65, 0, 0, 0, 0, + 0, 0,242, 67, 0, 0, 0, 0, 0, 0,216, 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,227, 1, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0,128,241, 67, + 0, 0,208, 65, 0,128,241, 67, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, + 10, 0,228, 1, 27, 0,228, 1, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,157, 5, 0, 0,128, 7, 0, 0, 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,228, 1, 27, 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, 68, 65, 84, 65, 40, 1, 0, 0,192,249,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 32,251,110, 27, + 1, 0, 0, 0, 96,248,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 0, 0,128, 7, 0, 0,112, 0, 0, 0,235, 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, 68, 65, 84, 65, 40, 1, 0, 0, 32,251,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,192,249,110, 27, 1, 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,123, 1, 0, 0, 18, 0, 0, 0, +227, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,227, 1, 0, 0, 18, 0, 0, 0,123, 1, 0, 0, 0, 0, 32, 65, + 0, 0,128, 64, 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,228, 1,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,157, 5, 0, 0,128, 7, 0, 0,112, 0, 0, 0,235, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,228, 1,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,128,252,110, 27, 1, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0,112, 0,111, 27, + 1, 0, 0, 0, 32,247,110, 27, 1, 0, 0, 0, 96,248,110, 27, 1, 0, 0, 0, 32,251,110, 27, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176,253,110, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 16,255,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 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, 19, 1, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 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, 0, 0, 0, 0, 89, 6, 0, 0,108, 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, 20, 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, 68, 65, 84, 65, 40, 1, 0, 0, 16,255,110, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,253,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 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, 48,248,133, 27, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48,248,133, 27, 1, 0, 0, 0,157, 0, 0, 0, + 1, 0, 0, 0,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, + 0, 0, 0,128, 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, 32,193, + 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, 32, 65, + 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, + 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67, +129,255, 71, 66, 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, 32,193, + 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, + 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,112, 0,111, 27, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,252,110, 27, + 1, 0, 0, 0,176,253,110, 27, 1, 0, 0, 0, 16,255,110, 27, 1, 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, + 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48, 68,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 0, + 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, + 1, 0, 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, 0, 0, 0, 0, + 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,208, 1,111, 27, + 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 16, 35,111, 27, 1, 0, 0, 0,224,227,110, 27, 1, 0, 0, 0,128,206,110, 27, + 1, 0, 0, 0, 32,206,110, 27, 1, 0, 0, 0,192,205,110, 27, 1, 0, 0, 0,224,206,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 3, 0, 0, 27, 6, 0, 0, 0, 0, 0, 0,179, 1, 0, 0, 1, 1, 27, 3,180, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 20,111, 27, 1, 0, 0, 0, 16, 34,111, 27, 1, 0, 0, 0,176, 2,111, 27, + 1, 0, 0, 0, 32, 19,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,176, 2,111, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 16, 4,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,102, 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,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 27, 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, 68, 65, 84, 65, 40, 1, 0, 0, 16, 4,111, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,112, 5,111, 27, 1, 0, 0, 0,176, 2,111, 27, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 1, 3, 0, 0, 26, 0, 0, 0,179, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,154, 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, 68, 65, 84, 65, 40, 1, 0, 0,112, 5,111, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,208, 6,111, 27, 1, 0, 0, 0, 16, 4,111, 27, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 27, 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, 68, 65, 84, 65, 40, 1, 0, 0,208, 6,111, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 32, 19,111, 27, 1, 0, 0, 0,112, 5,111, 27, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 27, 6, 0, 0, 27, 6, 0, 0, 26, 0, 0, 0,179, 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, 48, 8,111, 27, + 1, 0, 0, 0,144, 17,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 48, 8,111, 27, 1, 0, 0, 0,194, 0, 0, 0, + 1, 0, 0, 0,192, 9,111, 27, 1, 0, 0, 0, 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,111, 98,106,101, 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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,111, 98,106,101, 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, 84,114, 97,110,115,102,111,114,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,254,163, 0,110, 1, 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,192, 9,111, 27, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 80, 11,111, 27, 1, 0, 0, 0, 48, 8,111, 27, + 1, 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,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, 86, 73, 69, 87, 51, 68, 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, 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,236,253,163, 0, 58, 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, 88, 1, 0, 0, 80, 11,111, 27, 1, 0, 0, 0,194, 0, 0, 0, + 1, 0, 0, 0,224, 12,111, 27, 1, 0, 0, 0,192, 9,111, 27, 1, 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, 51,100,118,105,101,119, 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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, 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, 86,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,153,252,163, 0, 59, 1, 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,224, 12,111, 27, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,112, 14,111, 27, 1, 0, 0, 0, 80, 11,111, 27, + 1, 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, 51,100, +118,105,101,119, 95,100,105,115,112,108, 97,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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100, +118,105,101,119, 95,100,105,115,112,108, 97,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, 68,105,115,112,108, 97,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,129,252,163, 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,112, 14,111, 27, 1, 0, 0, 0,194, 0, 0, 0, + 1, 0, 0, 0, 0, 16,111, 27, 1, 0, 0, 0,224, 12,111, 27, 1, 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, 98, 97, 99,107,103,114,111,117,110,100, 95,105,109, 97,103,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, 98, 97, 99,107,103,114,111,117,110,100, 95,105,109, 97,103,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, 66, 97, 99,107,103,114,111,117,110,100, 32, 73,109, 97,103,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,105,252,163, 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, 0, 16,111, 27, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,144, 17,111, 27, 1, 0, 0, 0,112, 14,111, 27, + 1, 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,114, + 97,110,115,102,111,114,109, 95,111,114,105,101,110,116, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,114, + 97,110,115,102,111,114,109, 95,111,114,105,101,110,116, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114,109, 32, 79,114, +105,101,110,116, 97,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, 81,252,163, 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,144, 17,111, 27, 1, 0, 0, 0,194, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,111, 27, 1, 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, 51,100,118,105,101,119, 95,110, 97,109,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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, 95,110, 97,109,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, 73,116,101,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,163, 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, 32, 19,111, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 6,111, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 3, 0, 0, + 27, 6, 0, 0, 26, 0, 0, 0,179, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 3,154, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,252,133, 27, 1, 0, 0, 0, 68, 65, 84, 65, + 88, 3, 0, 0, 48,252,133, 27, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 37,101,230, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240, 94, 95, 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,128, 0, 0, 0,128, 72, 1, 77,190, 0, 0, 0,128,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, 4, 6,158, 63, 79,200,141,191,244,250, 39,191, + 8,165, 39,191,170,164,167, 63,189,151,139, 63,180,164, 28, 63,149, 84, 28, 63, 1,127,159,188, 90,254, 71, 64, 8,108,228,190, + 50,247,227,190,222,212, 27,191,231, 72,168,191,216, 49, 49, 65,152, 9, 52, 65, 80, 25,195, 62,218,249,206, 62, 0,237,196,187, + 0, 0, 96,179,204, 58,186,189,131, 90,183, 61, 76, 88,131, 62, 0, 0,152, 50,254,120, 21,194,182, 5, 2, 66, 70,136,213,193, +239,214,159,192, 5, 39, 19, 66, 15,174,255,193,217,101,210, 65,219, 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, 4, 6,158, 63, 79,200,141,191,244,250, 39,191, + 8,165, 39,191,170,164,167, 63,189,151,139, 63,180,164, 28, 63,149, 84, 28, 63, 1,127,159,188, 90,254, 71, 64, 8,108,228,190, + 50,247,227,190,222,212, 27,191,231, 72,168,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,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,123, 49,183, 58, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 20, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, + 3,236,234,190, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,128, 20,111, 27, 1, 0, 0, 0,158, 0, 0, 0, + 1, 0, 0, 0,160, 24,111, 27, 1, 0, 0, 0, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48, 68,132, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0,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, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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,224, 21,111, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 64, 23,111, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0,192, 59, 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,238, 2, 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, 4, + 10, 0,239, 2, 26, 0,239, 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, + 0, 0, 0, 0, 1, 3, 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,239, 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, 68, 65, 84, 65, 40, 1, 0, 0, 64, 23,111, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,224, 21,111, 27, 1, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68, 40, 57, 61,194, +146,211, 11, 68,174,122,214, 66, 82, 97,202, 67,222, 2, 0, 0,239, 2, 0, 0, 18, 0, 0, 0,121, 1, 0, 0, 0, 0, 0, 0, +221, 2, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,221, 2, 0, 0, 18, 0, 0, 0,121, 1, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, + 0, 0,239, 2,122, 1,222, 2,104, 1, 0, 0, 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, 3, 0, 0,239, 5, 0, 0, 26, 0, 0, 0,147, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,239, 2,122, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,160, 24,111, 27, 1, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0, 32, 30,111, 27, + 1, 0, 0, 0,128, 20,111, 27, 1, 0, 0, 0,224, 21,111, 27, 1, 0, 0, 0, 64, 23,111, 27, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 66,136, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +242,199, 78, 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, 68, 65, 84, 65, + 40, 1, 0, 0, 0, 26,111, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 96, 27,111, 27, 1, 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,216, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, + 0, 0,216, 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, 26, 0, 0, 0, 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, + 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,240, 5, 27, 0,240, 5, + 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +239, 5, 0, 0, 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 27, 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, 68, 65, 84, 65, + 40, 1, 0, 0, 96, 27,111, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,192, 28,111, 27, 1, 0, 0, 0, 0, 26,111, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, +239, 5, 0, 0,112, 0, 0, 0, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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,192, 28,111, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 27,111, 27, + 1, 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,162, 3, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 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,240, 5,163, 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, +239, 5, 0, 0,112, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,163, 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, 68, 65, 84, 65, +240, 0, 0, 0, 32, 30,111, 27, 1, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0, 16, 34,111, 27, 1, 0, 0, 0,160, 24,111, 27, + 1, 0, 0, 0, 0, 26,111, 27, 1, 0, 0, 0,192, 28,111, 27, 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80, 31,111, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,176, 32,111, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0, 0,147, 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,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, + 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, + 10, 0,152, 4, 26, 0,152, 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, + 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,152, 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, 68, 65, 84, 65, 40, 1, 0, 0,176, 32,111, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 80, 31,111, 27, 1, 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, +151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 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,152, 4,122, 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,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65,200, 0, 0, 0, 16, 34,111, 27, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 32, 30,111, 27, 1, 0, 0, 0, 80, 31,111, 27, 1, 0, 0, 0,176, 32,111, 27, 1, 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, 1, 0, 0, 0, + 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 16, 35,111, 27, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 96, 57,111, 27, + 1, 0, 0, 0,208, 1,111, 27, 1, 0, 0, 0, 96,205,110, 27, 1, 0, 0, 0,128,203,110, 27, 1, 0, 0, 0, 0,205,110, 27, + 1, 0, 0, 0,192,205,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 6, 0, 0,181, 1, 0, 0, + 99, 4, 0, 0, 16, 16, 28, 6,175, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 38,111, 27, + 1, 0, 0, 0, 96, 56,111, 27, 1, 0, 0, 0,240, 35,111, 27, 1, 0, 0, 0, 80, 37,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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,240, 35,111, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 80, 37,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,195, 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, 27, 6, 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, 4, 10, 0, 28, 6, 26, 0, 28, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 27, 6, 0, 0,181, 1, 0, 0,206, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 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, 68, 65, 84, 65, + 40, 1, 0, 0, 80, 37,111, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 35,111, 27, + 1, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68, 84, 64,199,195, 42,160, 99, 68,240, 80,128,193, +136, 2, 4, 68, 11, 6, 0, 0, 28, 6, 0, 0, 18, 0, 0, 0,148, 2, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 18, 0, 0, 0,148, 2, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, + 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 28, 6,149, 2, 11, 6, +131, 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, + 27, 6, 0, 0,207, 1, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 6,149, 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, 68, 65, 84, 65, + 32, 1, 0, 0,176, 38,111, 27, 1, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0, 48, 44,111, 27, 1, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 66,136, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 66, 86, 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, 68, 65, 84, 65, 40, 1, 0, 0, 16, 40,111, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,112, 41,111, 27, 1, 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,216, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 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, 26, 0, 0, 0, 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,240, 5, 27, 0,240, 5, 27, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 85, 0, 0, 0, +111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 27, 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, 68, 65, 84, 65, 40, 1, 0, 0,112, 41,111, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,208, 42,111, 27, 1, 0, 0, 0, 16, 40,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,239, 5, 0, 0,112, 0, 0, 0, + 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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,208, 42,111, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 41,111, 27, 1, 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,162, 3, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, +239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 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,240, 5,163, 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,239, 5, 0, 0,112, 0, 0, 0, + 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,163, 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, 68, 65, 84, 65,240, 0, 0, 0, 48, 44,111, 27, + 1, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0, 64, 52,111, 27, 1, 0, 0, 0,176, 38,111, 27, 1, 0, 0, 0, 16, 40,111, 27, + 1, 0, 0, 0,208, 42,111, 27, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0, 96, 45,111, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,192, 46,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,157, 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,231, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,232, 4, 26, 0,232, 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, 0, 0, 0, 0,153, 2, 0, 0, +128, 7, 0, 0,225, 1, 0, 0,250, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 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, 68, 65, 84, 65, + 40, 1, 0, 0,192, 46,111, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 32, 48,111, 27, 1, 0, 0, 0, 96, 45,111, 27, + 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0, +153, 2, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 24, 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, 68, 65, 84, 65, + 40, 1, 0, 0, 32, 48,111, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,128, 49,111, 27, 1, 0, 0, 0,192, 46,111, 27, + 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0, +128, 7, 0, 0,251, 1, 0, 0,251, 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, 68, 65, 84, 65, + 40, 1, 0, 0,128, 49,111, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,224, 50,111, 27, 1, 0, 0, 0, 32, 48,111, 27, + 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, +128, 7, 0, 0,251, 1, 0, 0, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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,224, 50,111, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 49,111, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0, +128, 7, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 4, 24, 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, 48, 0,134, 27, 1, 0, 0, 0, 68, 65, 84, 65, + 88, 3, 0, 0, 48, 0,134, 27, 1, 0, 0, 0,157, 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,165, 7, 36, 64, 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,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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,180,157,229, 62,169,203,131,191,222,160, 81,191, +184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, 35, 44,185, 62,147,180,109,188,102,208, 18, 64,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,128, 32,182, 69,129, 32,190,250,186,154, 61,170,205,178, 62, 0, 64, 1, 53,215,104, 25,196,135,132,135, 67, 37, 9,167,195, +136,252, 71,194, 3, 54, 25, 68,160, 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,180,157,229, 62,169,203,131,191,222,160, 81,191, +184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, 35, 44,185, 62,147,180,109,188,102,208, 18, 64,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, 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,218,210,190, 58, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 64, 52,111, 27, 1, 0, 0, 0,158, 0, 0, 0, + 1, 0, 0, 0, 96, 56,111, 27, 1, 0, 0, 0, 48, 44,111, 27, 1, 0, 0, 0, 96, 45,111, 27, 1, 0, 0, 0,224, 50,111, 27, + 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48, 68,132, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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,160, 53,111, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 55,111, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0, 0,147, 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,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, + 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, + 10, 0,152, 4, 26, 0,152, 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, + 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,152, 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, 68, 65, 84, 65, 40, 1, 0, 0, 0, 55,111, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,160, 53,111, 27, 1, 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, +151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 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,152, 4,122, 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,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65,200, 0, 0, 0, 96, 56,111, 27, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 64, 52,111, 27, 1, 0, 0, 0,160, 53,111, 27, 1, 0, 0, 0, 0, 55,111, 27, 1, 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, 1, 0, 0, 0, + 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 96, 57,111, 27, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 35,111, 27, 1, 0, 0, 0, 0,202,110, 27, 1, 0, 0, 0, 96,205,110, 27, 1, 0, 0, 0, 32,206,110, 27, + 1, 0, 0, 0,128,206,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 2, 0, 0, 0, 0, 0, 0, +179, 1, 0, 0, 6, 6, 0, 3,180, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 62,111, 27, + 1, 0, 0, 0, 96,134,110, 27, 1, 0, 0, 0, 64, 58,111, 27, 1, 0, 0, 0, 0, 61,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 64, 58,111, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,160, 59,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,202, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 64, 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,255, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 63, 68, 0, 0,200, 65, 0,192, 63, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 0, 3, 26, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, +255, 2, 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, 0, 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, 68, 65, 84, 65, + 40, 1, 0, 0,160, 59,111, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 61,111, 27, 1, 0, 0, 0, 64, 58,111, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,179, 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, 68, 65, 84, 65, + 40, 1, 0, 0, 0, 61,111, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 59,111, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67, 0, 0,128,191, 0, 0, 0, 64, 0, 0,154,190, + 0,128,166, 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, 3, 0, 0, 0, 0, 0, 0,154, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0, 26, 0, 0, 0,179, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,154, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +168, 0, 0, 0, 96, 62,111, 27, 1, 0, 0, 0,168, 0, 0, 0, 1, 0, 0, 0, 0, 66,111, 27, 1, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 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, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0, 64, 63,111, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,160, 64,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 64, 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,255, 2, 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, 4, 10, 0, 0, 3, 26, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, +255, 2, 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, 0, 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, 68, 65, 84, 65, + 40, 1, 0, 0,160, 64,111, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 63,111, 27, + 1, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68,144, 82, 89,194, 41,149, 13, 68,176,122,214, 66, + 82, 97,202, 67,239, 2, 0, 0, 0, 3, 0, 0, 18, 0, 0, 0,121, 1, 0, 0, 0, 0, 0, 0,238, 2, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0,238, 2, 0, 0, 18, 0, 0, 0,121, 1, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, + 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 3,122, 1,239, 2, +104, 1, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0, 26, 0, 0, 0,147, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,122, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 66,111, 27, 1, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0, 16,129,110, 27, 1, 0, 0, 0, 96, 62,111, 27, + 1, 0, 0, 0, 64, 63,111, 27, 1, 0, 0, 0,160, 64,111, 27, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 66,136, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,227, 78, 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, 68, 65, 84, 65, 40, 1, 0, 0, 96, 67,111, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,192, 68,111, 27, 1, 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,216, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 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, 26, 0, 0, 0, 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,240, 5, 27, 0,240, 5, 27, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 85, 0, 0, 0, +111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 27, 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, 68, 65, 84, 65, 40, 1, 0, 0,192, 68,111, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,176,127,110, 27, 1, 0, 0, 0, 96, 67,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,239, 5, 0, 0,112, 0, 0, 0, + 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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,176,127,110, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 68,111, 27, 1, 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,162, 3, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, +239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 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,240, 5,163, 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,239, 5, 0, 0,112, 0, 0, 0, + 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,163, 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, 68, 65, 84, 65,240, 0, 0, 0, 16,129,110, 27, + 1, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0, 0,154,131, 29, 1, 0, 0, 0, 0, 66,111, 27, 1, 0, 0, 0, 96, 67,111, 27, + 1, 0, 0, 0,176,127,110, 27, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0, 64,130,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,160,131,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,157, 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,231, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,232, 4, 26, 0,232, 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, 0, 0, 0, 0,153, 2, 0, 0, +128, 7, 0, 0,225, 1, 0, 0,250, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 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, 68, 65, 84, 65, + 40, 1, 0, 0,160,131,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0,133,110, 27, 1, 0, 0, 0, 64,130,110, 27, + 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0, +153, 2, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 24, 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, 68, 65, 84, 65, + 40, 1, 0, 0, 0,133,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,240,140,111, 27, 1, 0, 0, 0,160,131,110, 27, + 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0, +128, 7, 0, 0,251, 1, 0, 0,251, 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, 68, 65, 84, 65, + 40, 1, 0, 0,240,140,111, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,160,152,131, 29, 1, 0, 0, 0, 0,133,110, 27, + 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, +128, 7, 0, 0,251, 1, 0, 0, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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,160,152,131, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,140,111, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0, +128, 7, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 4, 24, 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, 48, 4,134, 27, 1, 0, 0, 0, 68, 65, 84, 65, + 88, 3, 0, 0, 48, 4,134, 27, 1, 0, 0, 0,157, 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,165, 7, 36, 64, 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,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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,180,157,229, 62,169,203,131,191,222,160, 81,191, +184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, 35, 44,185, 62,147,180,109,188,102,208, 18, 64,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,128, 32,182, 69,129, 32,190,250,186,154, 61,170,205,178, 62, 0, 64, 1, 53,215,104, 25,196,135,132,135, 67, 37, 9,167,195, +136,252, 71,194, 3, 54, 25, 68,160, 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,180,157,229, 62,169,203,131,191,222,160, 81,191, +184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, 35, 44,185, 62,147,180,109,188,102,208, 18, 64,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, 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,218,210,190, 58, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0,154,131, 29, 1, 0, 0, 0,158, 0, 0, 0, + 1, 0, 0, 0, 96,134,110, 27, 1, 0, 0, 0, 16,129,110, 27, 1, 0, 0, 0, 64,130,110, 27, 1, 0, 0, 0,160,152,131, 29, + 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48, 68,132, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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, 96,155,131, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,192,156,131, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0, 0,147, 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,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, + 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, + 10, 0,152, 4, 26, 0,152, 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, + 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,152, 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, 68, 65, 84, 65, 40, 1, 0, 0,192,156,131, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 96,155,131, 29, 1, 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, +151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 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,152, 4,122, 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,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65,200, 0, 0, 0, 96,134,110, 27, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,154,131, 29, 1, 0, 0, 0, 96,155,131, 29, 1, 0, 0, 0,192,156,131, 29, 1, 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, 1, 0, 0, 0, + 6, 0, 0, 0, 83, 78, 0, 0,208, 0, 0, 0, 32,158,131, 29, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,240,254,131, 29, + 1, 0, 0, 0,240,200,110, 27, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,208,142,111, 27, 1, 0, 0, 0,240,162,131, 29, 1, 0, 0, 0, 80,163,131, 29, 1, 0, 0, 0,176,169,131, 29, + 1, 0, 0, 0, 16,170,131, 29, 1, 0, 0, 0, 64,221,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 66,136, 27, 1, 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, 1, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,113, 46, 21, 0, 1, 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,208,142,111, 27, 1, 0, 0, 0,192, 0, 0, 0, + 1, 0, 0, 0, 48,159,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 48,159,131, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,144,159,131, 29, + 1, 0, 0, 0,208,142,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 4, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0,144,159,131, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,240,159,131, 29, 1, 0, 0, 0, 48,159,131, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,128, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,240,159,131, 29, + 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 80,160,131, 29, 1, 0, 0, 0,144,159,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 80,160,131, 29, 1, 0, 0, 0,192, 0, 0, 0, + 1, 0, 0, 0,176,160,131, 29, 1, 0, 0, 0,240,159,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,101, 4, + 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,176,160,131, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 16,161,131, 29, + 1, 0, 0, 0, 80,160,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,101, 4, 1, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0, 16,161,131, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,112,161,131, 29, 1, 0, 0, 0,176,160,131, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,112,161,131, 29, + 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,208,161,131, 29, 1, 0, 0, 0, 16,161,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 36, 6,101, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,208,161,131, 29, 1, 0, 0, 0,192, 0, 0, 0, + 1, 0, 0, 0, 48,162,131, 29, 1, 0, 0, 0,112,161,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 6,116, 3, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 48,162,131, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,144,162,131, 29, + 1, 0, 0, 0,208,161,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,116, 3, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0,144,162,131, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,240,162,131, 29, 1, 0, 0, 0, 48,162,131, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,240,162,131, 29, + 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,162,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 36, 6,100, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 80,163,131, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,176,163,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,159,131, 29, 1, 0, 0, 0,144,159,131, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,176,163,131, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 16,164,131, 29, 1, 0, 0, 0, 80,163,131, 29, 1, 0, 0, 0, 48,159,131, 29, 1, 0, 0, 0, 80,160,131, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 16,164,131, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,112,164,131, 29, 1, 0, 0, 0,176,163,131, 29, 1, 0, 0, 0,144,159,131, 29, 1, 0, 0, 0,176,160,131, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,112,164,131, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,208,164,131, 29, 1, 0, 0, 0, 16,164,131, 29, 1, 0, 0, 0, 80,160,131, 29, 1, 0, 0, 0,176,160,131, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,208,164,131, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 48,165,131, 29, 1, 0, 0, 0,112,164,131, 29, 1, 0, 0, 0,208,142,111, 27, 1, 0, 0, 0, 16,161,131, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 48,165,131, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,144,165,131, 29, 1, 0, 0, 0,208,164,131, 29, 1, 0, 0, 0,240,159,131, 29, 1, 0, 0, 0, 16,161,131, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,144,165,131, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,240,165,131, 29, 1, 0, 0, 0, 48,165,131, 29, 1, 0, 0, 0, 80,160,131, 29, 1, 0, 0, 0,112,161,131, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,240,165,131, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 80,166,131, 29, 1, 0, 0, 0,144,165,131, 29, 1, 0, 0, 0,176,160,131, 29, 1, 0, 0, 0,112,161,131, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 80,166,131, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,176,166,131, 29, 1, 0, 0, 0,240,165,131, 29, 1, 0, 0, 0, 16,161,131, 29, 1, 0, 0, 0,208,161,131, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,176,166,131, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 16,167,131, 29, 1, 0, 0, 0, 80,166,131, 29, 1, 0, 0, 0,112,161,131, 29, 1, 0, 0, 0,208,161,131, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 16,167,131, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,112,167,131, 29, 1, 0, 0, 0,176,166,131, 29, 1, 0, 0, 0,176,160,131, 29, 1, 0, 0, 0, 48,162,131, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,112,167,131, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,208,167,131, 29, 1, 0, 0, 0, 16,167,131, 29, 1, 0, 0, 0,240,159,131, 29, 1, 0, 0, 0, 48,162,131, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,208,167,131, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 48,168,131, 29, 1, 0, 0, 0,112,167,131, 29, 1, 0, 0, 0,208,161,131, 29, 1, 0, 0, 0, 48,162,131, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 48,168,131, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,144,168,131, 29, 1, 0, 0, 0,208,167,131, 29, 1, 0, 0, 0,208,142,111, 27, 1, 0, 0, 0,144,162,131, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,144,168,131, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,240,168,131, 29, 1, 0, 0, 0, 48,168,131, 29, 1, 0, 0, 0, 80,160,131, 29, 1, 0, 0, 0,144,162,131, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,240,168,131, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 80,169,131, 29, 1, 0, 0, 0,144,168,131, 29, 1, 0, 0, 0,112,161,131, 29, 1, 0, 0, 0,240,162,131, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 80,169,131, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,176,169,131, 29, 1, 0, 0, 0,240,168,131, 29, 1, 0, 0, 0, 16,161,131, 29, 1, 0, 0, 0,240,162,131, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,176,169,131, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,169,131, 29, 1, 0, 0, 0,144,162,131, 29, 1, 0, 0, 0,240,162,131, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 16,170,131, 29, 1, 0, 0, 0,195, 0, 0, 0, + 1, 0, 0, 0,176,173,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,160,131, 29, 1, 0, 0, 0, 48,159,131, 29, + 1, 0, 0, 0,144,159,131, 29, 1, 0, 0, 0,176,160,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +128, 7, 0, 0,102, 4, 0, 0,128, 4, 0, 0, 7, 7,129, 7, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 16,162,217, 2, + 1, 0, 0, 0,112,254,131, 29, 1, 0, 0, 0,112,254,131, 29, 1, 0, 0, 0,240,170,131, 29, 1, 0, 0, 0, 80,172,131, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,205,129, 29, 1, 0, 0, 0,224,104,111, 27, + 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240,170,131, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 80,172,131, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,162, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0, 32,240, 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,128, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, + 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, + 10, 0,129, 7, 26, 0,129, 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, + 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,102, 4, 0, 0,127, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,129, 7, 26, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,163,217, 2, + 1, 0, 0, 0, 48,202,139, 27, 1, 0, 0, 0, 48,202,139, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 64, 5,128, 29, 1, 0, 0, 0,128, 7,128, 29, 1, 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, 80,172,131, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,240,170,131, 29, 1, 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, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, + 6, 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, 0, 0, 0, 0, 0, 0, 0, 0,128, 4, 0, 0,128, 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, 1, 0, 0, 0, 0, 0, 0, 0,240,162,217, 2, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,176,173,131, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 80,198,131, 29, + 1, 0, 0, 0, 16,170,131, 29, 1, 0, 0, 0, 16,161,131, 29, 1, 0, 0, 0,208,161,131, 29, 1, 0, 0, 0, 48,162,131, 29, + 1, 0, 0, 0,240,159,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 6, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, +115, 3, 0, 0, 4, 4, 92, 1,116, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,158,217, 2, 1, 0, 0, 0,240,192,131, 29, + 1, 0, 0, 0,240,196,131, 29, 1, 0, 0, 0,144,174,131, 29, 1, 0, 0, 0,240,175,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 9,128, 29, 1, 0, 0, 0,224,134,133, 29, 1, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0,144,174,131, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,240,175,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,174, 67, 0, 0, 0, 0, + 0, 0,248, 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, 91, 1, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 92, 1, 31, 0, 92, 1, + 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 6, 0, 0, +128, 7, 0, 0, 85, 3, 0, 0,115, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 1, 31, 0, + 3, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,161,217, 2, 1, 0, 0, 0, 48,182, 13, 3, + 1, 0, 0, 0, 48,182, 13, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 10,128, 29, + 1, 0, 0, 0, 48, 13,128, 29, 1, 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,240,175,131, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,174,131, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0,128,173, 67, 0, 0, 85,196, 0, 0, 0, 0, 0, 0, 0, 0,252,127,165, 67,251, 63, 85,196, + 0, 0, 0, 0, 75, 1, 0, 0, 92, 1, 0, 0, 0, 0, 0, 0, 84, 3, 0, 0, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 0, 0, 84, 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, 92, 1, 85, 3, 75, 1, + 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,183,129, 29, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 37, 6, 0, 0, +128, 7, 0, 0, 0, 0, 0, 0, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 1, 85, 3, + 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,159,217, 2, 1, 0, 0, 0, 48, 40,138, 27, + 1, 0, 0, 0, 48,102,139, 27, 1, 0, 0, 0, 80,177,131, 29, 1, 0, 0, 0, 96,191,131, 29, 1, 0, 0, 0, 80, 15,128, 29, + 1, 0, 0, 0,144, 17,128, 29, 1, 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, 80,177,131, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,224,178,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 64,160,217, 2, 1, 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, 74, 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,224,178,131, 29, 1, 0, 0, 0,194, 0, 0, 0, + 1, 0, 0, 0,112,180,131, 29, 1, 0, 0, 0, 80,177,131, 29, 1, 0, 0, 0,176, 12,241, 26, 1, 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, 74, 1, 61, 0, 0, 0, 0, 0, 0, 0, 6, 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,112,180,131, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0,182,131, 29, 1, 0, 0, 0,224,178,131, 29, + 1, 0, 0, 0,144, 14,241, 26, 1, 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,127,253, 74, 1,240, 1, 0, 0, 0, 0, + 4, 0, 6, 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, + 2, 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, 68, 65, 84, 65, 88, 1, 0, 0, 0,182,131, 29, 1, 0, 0, 0,194, 0, 0, 0, + 1, 0, 0, 0,144,183,131, 29, 1, 0, 0, 0,112,180,131, 29, 1, 0, 0, 0,240, 16,241, 26, 1, 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, 74, 1,203, 0, 0, 0, 0, 0, 0, 0, 6, 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,144,183,131, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 32,185,131, 29, 1, 0, 0, 0, 0,182,131, 29, + 1, 0, 0, 0, 80, 19,241, 26, 1, 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, 74, 1, 58, 0, 20, 0, 0, 0, + 0, 0, 6, 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, 32,185,131, 29, 1, 0, 0, 0,194, 0, 0, 0, + 1, 0, 0, 0,176,186,131, 29, 1, 0, 0, 0,144,183,131, 29, 1, 0, 0, 0,176, 21,241, 26, 1, 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,188,253, 74, 1,102, 0, 0, 0, 0, 0, 0, 0, 6, 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,176,186,131, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 64,188,131, 29, 1, 0, 0, 0, 32,185,131, 29, + 1, 0, 0, 0, 16, 24,241, 26, 1, 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, 59,253, 74, 1,105, 0, 0, 0, 0, 0, + 0, 0, 6, 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, 64,188,131, 29, 1, 0, 0, 0,194, 0, 0, 0, + 1, 0, 0, 0,208,189,131, 29, 1, 0, 0, 0,176,186,131, 29, 1, 0, 0, 0, 80,246,240, 26, 1, 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,123,252, 74, 1,168, 0, 0, 0, 0, 0, 4, 0, 6, 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,208,189,131, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 96,191,131, 29, 1, 0, 0, 0, 64,188,131, 29, + 1, 0, 0, 0,192, 29,241, 26, 1, 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, 11,253, 74, 1, 0, 0, 0, 0, 0, 0, + 4, 0, 6, 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, 96,191,131, 29, 1, 0, 0, 0,194, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,189,131, 29, 1, 0, 0, 0, 32, 32,241, 26, 1, 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,243,252, 74, 1, 0, 0, 20, 0, 0, 0, 4, 0, 7, 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, + 0, 1, 0, 0,240,192,131, 29, 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0,240,196,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0,160,149,176, 21, + 1, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48,194,131, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,144,195,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 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, + 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 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, 0, 0, 0, 0, 89, 6, 0, 0,108, 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, 20, 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, 68, 65, 84, 65, 40, 1, 0, 0,144,195,131, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,194,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, + 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 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, 48, 8,134, 27, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48, 8,134, 27, + 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, + 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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, 32,193, 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, 32, 65, 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, + 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, + 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 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, 32,193, 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, + 0, 0, 0, 0,184,175, 31, 65, 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, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,240,196,131, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,240,192,131, 29, 1, 0, 0, 0, 48,194,131, 29, 1, 0, 0, 0,144,195,131, 29, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48, 68,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, + 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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, 80,198,131, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 16,207,131, 29, 1, 0, 0, 0,176,173,131, 29, + 1, 0, 0, 0,208,142,111, 27, 1, 0, 0, 0,144,162,131, 29, 1, 0, 0, 0,240,162,131, 29, 1, 0, 0, 0, 16,161,131, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 6, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 15, 15, 36, 6, +100, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,126,217, 2, 1, 0, 0, 0,240,201,131, 29, 1, 0, 0, 0,176,205,131, 29, + 1, 0, 0, 0, 48,199,131, 29, 1, 0, 0, 0,144,200,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 19,128, 29, 1, 0, 0, 0, 32,165,201, 20, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48,199,131, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,144,200,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,128,136, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,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, + 35, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 36, 6, 26, 0, 36, 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, 0, 0, 0, 0, 0, 0, 0, 0, 35, 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, 36, 6, 26, 0, 5, 0, 1, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,128,217, 2, 1, 0, 0, 0, 48,244,136, 27, 1, 0, 0, 0, 48,244,136, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21,128, 29, 1, 0, 0, 0, 64, 23,128, 29, + 1, 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,144,200,131, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,199,131, 29, 1, 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, 35, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, + 35, 6, 0, 0, 18, 0, 0, 0, 73, 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, 36, 6, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 6, 0, 0, 26, 0, 0, 0, + 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 6, 74, 0, 6, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,127,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 25,128, 29, 1, 0, 0, 0, 96, 28,128, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0,240,201,131, 29, + 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0,176,205,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240,202,131, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 80,204,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,203, 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, + 87, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 88, 6, 26, 0, 88, 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, 0, 0, 0, 0, 0, 0, 0, 0, 87, 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, 88, 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, 68, 65, 84, 65, 40, 1, 0, 0, 80,204,131, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,202,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 6, 0, 0, 26, 0, 0, 0, + 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 6, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,230,135, 27, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48,230,135, 27, + 1, 0, 0, 0,157, 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, + 87,213,108, 66, 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,128, + 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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, 32,193, 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, 32, 65, 0, 0,128, 63, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 87,213,108, 66, 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,184,175, 31, 65, 0, 0, 32, 65,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +224, 91,138, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, + 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 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, 32,193, 0, 0,128, 63, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 87,213,108, 66, 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,184,175, 31, 65, 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, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52,149,147, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,176,205,131, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,240,201,131, 29, 1, 0, 0, 0,240,202,131, 29, 1, 0, 0, 0, 80,204,131, 29, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48, 68,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, + 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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, 16,207,131, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 64,221,131, 29, 1, 0, 0, 0, 80,198,131, 29, + 1, 0, 0, 0,208,161,131, 29, 1, 0, 0, 0,112,161,131, 29, 1, 0, 0, 0,176,160,131, 29, 1, 0, 0, 0, 48,162,131, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 6, 0, 0,128, 7, 0, 0,117, 3, 0, 0,100, 4, 0, 0, 3, 3, 92, 1, +240, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,123,217, 2, 1, 0, 0, 0,176,210,131, 29, 1, 0, 0, 0,224,219,131, 29, + 1, 0, 0, 0,240,207,131, 29, 1, 0, 0, 0, 80,209,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 30,128, 29, 1, 0, 0, 0, 48,121,129, 29, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240,207,131, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 80,209,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,128,163, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,174, 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, + 91, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 66, 67, 0, 0,200, 65, 0, 0, 66, 67, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 92, 1, 26, 0, 92, 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, 0, 0, 0, 0, 37, 6, 0, 0,128, 7, 0, 0, 75, 4, 0, 0, +100, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 1, 26, 0, 7, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,125,217, 2, 1, 0, 0, 0, 48,236,138, 27, 1, 0, 0, 0, 48,236,138, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 31,128, 29, 1, 0, 0, 0, 16, 34,128, 29, + 1, 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, 80,209,131, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,207,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0,128,131, 67, 0, 0,228,194, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,165, 67, 0, 0, 68,195, 0, 0, 0, 0, 75, 1, 0, 0, + 92, 1, 0, 0, 18, 0, 0, 0,213, 0, 0, 0, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, + 74, 1, 0, 0, 18, 0, 0, 0,213, 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, 0, 4, 6, 0, 92, 1,214, 0, 75, 1,196, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 6, 0, 0,128, 7, 0, 0,117, 3, 0, 0, + 74, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 1,214, 0, 8, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,124,217, 2, 1, 0, 0, 0, 48,150,132, 27, 1, 0, 0, 0, 48,150,132, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 36,128, 29, 1, 0, 0, 0,176, 37,128, 29, + 1, 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,176,210,131, 29, + 1, 0, 0, 0,167, 0, 0, 0, 1, 0, 0, 0,224,215,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,128,214,164, 29, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0, 16,216,164, 29, 1, 0, 0, 0,240,212,164, 29, 1, 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, 51,100,118,105,101,119, 95,100,105,115,112,108, 97,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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, 95,100,105,115,112,108, 97,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, 68,105,115,112,108, 97,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,144, 1,128, 29, + 1, 0, 0, 0,144, 1,128, 29, 1, 0, 0, 0, 32, 18,130, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129,252,163, 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, 1, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0, 32, 18,130, 29, + 1, 0, 0, 0,219, 0, 0, 0, 1, 0, 0, 0, 13, 0, 0, 0, 13, 0, 0, 0, 16,212,131, 29, 1, 0, 0, 0, 68, 65, 84, 65, +208, 0, 0, 0, 16,212,131, 29, 1, 0, 0, 0,218, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 48, 66,136, 27, + 1, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0, 48, 66,136, 27, 1, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0, 48, 66,136, 27, + 1, 0, 0, 0, 21, 0, 1, 0, 1, 0, 1, 0, 48, 66,136, 27, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48, 58,132, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48, 74,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,171,109, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48, 86,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 64,198,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48, 80,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48, 54,132, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48, 68,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 32,163,176, 21, + 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 32,213,131, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,128,214,131, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 55, + 0, 0, 67, 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,194, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,137, 67, + 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, + 10, 0,195, 0, 26, 0,195, 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, 53, 4, 0, 0,247, 4, 0, 0, 69, 2, 0, 0, 94, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,195, 0, 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, 68, 65, 84, 65, 40, 1, 0, 0,128,214,131, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 32,213,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,150, 67, 0,192,116,196, 0, 0, 0, 0, 0, 0, 0, 0, +205, 85,150, 67,223,204, 35,196, 26, 85,207,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0,155, 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, 0, 0, 0, 0, 1, 0, 3, 0, 2, 0, 0, 4, + 6, 0,195, 0,156, 0,195, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 53, 4, 0, 0,247, 4, 0, 0, 95, 2, 0, 0,250, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,195, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 16,216,164, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,160,217,164, 29, 1, 0, 0, 0, -128,214,164, 29, 1, 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, 98, 97, 99,107,103,114,111,117,110,100, 95,105,109, 97,103,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, 98, 97, 99,107,103,114,111,117,110,100, 95,105,109, 97,103,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, 66, 97, 99,107,103,114,111,117, -110,100, 32, 73,109, 97,103,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,105,252,163, 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, 68, 65, 84, 65, 0, 1, 0, 0,224,215,131, 29, 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0,224,219,131, 29, + 1, 0, 0, 0,176,210,131, 29, 1, 0, 0, 0, 32,213,131, 29, 1, 0, 0, 0,128,214,131, 29, 1, 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, 68, 65, 84, 65, 88, 1, 0, 0,160,217,164, 29, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0, 48,219,164, 29, 1, 0, 0, 0, 16,216,164, 29, 1, 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,114, 97,110,115,102,111,114,109, 95,111,114,105,101, -110,116, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,114, 97,110,115,102,111,114,109, 95,111,114,105,101, -110,116, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114,109, 32, 79,114,105,101,110,116, 97,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, 81,252,163, 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, 48,219,164, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -160,217,164, 29, 1, 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, 51,100,118,105,101,119, 95,110, 97,109,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, 86, 73, 69, 87, 51, 68, 95, 80, - 84, 95, 51,100,118,105,101,119, 95,110, 97,109,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, 73,116,101,109, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 68, 65, 84, 65, + 40, 1, 0, 0, 32,217,131, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,128,218,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 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, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 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, 0, 0, 0, 0, 89, 6, 0, 0, +108, 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, 20, 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,196,255,163, 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,192,220,164, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,208,164, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 3, 0, 0, 27, 6, 0, 0, 26, 0, 0, 0,179, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 3,154, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,144,112,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48,216, 2, 28, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48,216, 2, 28, 1, 0, 0, 0, -157, 0, 0, 0, 1, 0, 0, 0, 37,101,230, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 94, 95, 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,128, 0, 0, 0,128, - 72, 1, 77,190, 0, 0, 0,128,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, 4, 6,158, 63, 79,200,141,191,244,250, 39,191, 8,165, 39,191,170,164,167, 63,189,151,139, 63, -180,164, 28, 63,149, 84, 28, 63, 1,127,159,188, 90,254, 71, 64, 8,108,228,190, 50,247,227,190,222,212, 27,191,231, 72,168,191, -216, 49, 49, 65,152, 9, 52, 65, 80, 25,195, 62,218,249,206, 62, 0,237,196,187, 0, 0, 96,179,204, 58,186,189,131, 90,183, 61, - 76, 88,131, 62, 0, 0,152, 50,254,120, 21,194,182, 5, 2, 66, 70,136,213,193,239,214,159,192, 5, 39, 19, 66, 15,174,255,193, -217,101,210, 65,219, 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, 4, 6,158, 63, 79,200,141,191,244,250, 39,191, 8,165, 39,191,170,164,167, 63,189,151,139, 63, -180,164, 28, 63,149, 84, 28, 63, 1,127,159,188, 90,254, 71, 64, 8,108,228,190, 50,247,227,190,222,212, 27,191,231, 72,168,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,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,123, 49,183, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, 1, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 1, 0, 0, 32,222,164, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 64,226,164, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,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, 16, 0, 0, 0, 7, 0, 10, 0, - 0, 0, 0, 0, 1, 0, 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, - 0, 0, 0, 0, 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, -128,223,164, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,224,224,164, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,128, 37, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,192, 59, 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,238, 2, 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, 4, 10, 0,239, 2, 26, 0,239, 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, 0, 0, 0, 0, 1, 3, 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,239, 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, 68, 65, 84, 65, 40, 1, 0, 0, -224,224,164, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,223,164, 29, 1, 0, 0, 0, - 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68, 40, 57, 61,194,146,211, 11, 68,174,122,214, 66, 82, 97,202, 67, -222, 2, 0, 0,239, 2, 0, 0, 18, 0, 0, 0,121, 1, 0, 0, 0, 0, 0, 0,221, 2, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0,221, 2, 0, 0, 18, 0, 0, 0,121, 1, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70, -205,204, 76, 62, 72,225,154, 63, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0,239, 2,122, 1,222, 2,104, 1, 0, 0, - 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, 3, 0, 0,239, 5, 0, 0, - 26, 0, 0, 0,147, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 2,122, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 1, 0, 0, - 64,226,164, 29, 1, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0,192,231,164, 29, 1, 0, 0, 0, 32,222,164, 29, 1, 0, 0, 0, -128,223,164, 29, 1, 0, 0, 0,224,224,164, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48,180, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,242,199, 78, 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, 68, 65, 84, 65, 40, 1, 0, 0,160,227,164, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0,229,164, 29, 1, 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,216, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 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, 26, 0, 0, 0, 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,240, 5, 27, 0,240, 5, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 85, 0, 0, 0,111, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 27, 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, 68, 65, 84, 65, 40, 1, 0, 0, 0,229,164, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 96,230,164, 29, 1, 0, 0, 0,160,227,164, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,239, 5, 0, 0,112, 0, 0, 0, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 96,230,164, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,229,164, 29, 1, 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,162, 3, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, - 18, 0, 0, 0,162, 3, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 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,240, 5,163, 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,239, 5, 0, 0,112, 0, 0, 0, 18, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,163, 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, 68, 65, 84, 65,240, 0, 0, 0,192,231,164, 29, 1, 0, 0, 0, -164, 0, 0, 0, 1, 0, 0, 0,176,235,164, 29, 1, 0, 0, 0, 64,226,164, 29, 1, 0, 0, 0,160,227,164, 29, 1, 0, 0, 0, - 96,230,164, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -240,232,164, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 80,234,164, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 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,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 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, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, -101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 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, 68, 65, 84, 65, 40, 1, 0, 0, - 80,234,164, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,232,164, 29, 1, 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,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 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,152, 4,122, 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,151, 4, 0, 0, -127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65,200, 0, 0, 0, -176,235,164, 29, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,231,164, 29, 1, 0, 0, 0, -240,232,164, 29, 1, 0, 0, 0, 80,234,164, 29, 1, 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, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, -176,236,164, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 3,165, 29, 1, 0, 0, 0,112,203,164, 29, 1, 0, 0, 0, -128,194,163, 29, 1, 0, 0, 0,160,192,163, 29, 1, 0, 0, 0, 32,194,163, 29, 1, 0, 0, 0,224,194,163, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 6, 0, 0,181, 1, 0, 0, 99, 4, 0, 0, 16, 16, 28, 6,175, 2, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 32,135,217, 2, 1, 0, 0, 0, 80,240,164, 29, 1, 0, 0, 0, 0, 2,165, 29, 1, 0, 0, 0, -144,237,164, 29, 1, 0, 0, 0,240,238,164, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -144, 68,201, 20, 1, 0, 0, 0, 80,114,160, 21, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144,237,164, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0,240,238,164, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,195, 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, 27, 6, 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, 4, 10, 0, 28, 6, 26, 0, 28, 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, 0, 0, 0, 0, 0, 0, 0, 0, 27, 6, 0, 0,181, 1, 0, 0,206, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,224,136,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,240,238,164, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,237,164, 29, 1, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, - 0, 0, 32,193, 0, 0, 0, 68, 84, 64,199,195, 42,160, 99, 68,240, 80,128,193,136, 2, 4, 68, 11, 6, 0, 0, 28, 6, 0, 0, - 18, 0, 0, 0,148, 2, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, - 18, 0, 0, 0,148, 2, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, - 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 28, 6,149, 2, 11, 6,131, 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, 27, 6, 0, 0,207, 1, 0, 0, 99, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 6,149, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0,136,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 80,240,164, 29, 1, 0, 0, 0, -174, 0, 0, 0, 1, 0, 0, 0,208,245,164, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,180, 4, 28, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 66, 86, 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, 68, 65, 84, 65, 40, 1, 0, 0,176,241,164, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 16,243,164, 29, 1, 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,216, 65, - 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 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, 26, 0, 0, 0, - 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,240, 5, 27, 0,240, 5, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 27, 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, 68, 65, 84, 65, 40, 1, 0, 0, 16,243,164, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, -112,244,164, 29, 1, 0, 0, 0,176,241,164, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,239, 5, 0, 0,112, 0, 0, 0, 18, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,112,244,164, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16,243,164, 29, 1, 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,162, 3, 0, 0, - 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, - 0, 0, 32, 65, 0, 0,128, 64, 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,240, 5,163, 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,239, 5, 0, 0,112, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240, 5,163, 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, 68, 65, 84, 65,240, 0, 0, 0,208,245,164, 29, 1, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0, -224,253,164, 29, 1, 0, 0, 0, 80,240,164, 29, 1, 0, 0, 0,176,241,164, 29, 1, 0, 0, 0,112,244,164, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0,247,164, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 96,248,164, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,157, 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,231, 4, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,232, 4, 26, 0,232, 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, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0,225, 1, 0, 0,250, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 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, 68, 65, 84, 65, 40, 1, 0, 0, 96,248,164, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0,192,249,164, 29, 1, 0, 0, 0, 0,247,164, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,153, 2, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 24, 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, 68, 65, 84, 65, 40, 1, 0, 0,192,249,164, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 32,251,164, 29, 1, 0, 0, 0, 96,248,164, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0,251, 1, 0, 0,251, 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, 68, 65, 84, 65, 40, 1, 0, 0, 32,251,164, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0,128,252,164, 29, 1, 0, 0, 0,192,249,164, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,128, 7, 0, 0,251, 1, 0, 0, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,128,252,164, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,251,164, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 4, 24, 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, 48,220, 2, 28, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48,220, 2, 28, 1, 0, 0, 0, -157, 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,165, 7, 36, 64, - 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,128, 0, 0, 0,128, -226,215,163,188, 0, 0, 0,128, 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,180,157,229, 62,169,203,131,191,222,160, 81,191,184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, - 9, 46,185, 62, 35, 44,185, 62,147,180,109,188,102,208, 18, 64,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,128, 32,182, 69,129, 32,190,250,186,154, 61, -170,205,178, 62, 0, 64, 1, 53,215,104, 25,196,135,132,135, 67, 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68,160, 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,180,157,229, 62,169,203,131,191,222,160, 81,191,184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, - 9, 46,185, 62, 35, 44,185, 62,147,180,109,188,102,208, 18, 64,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, 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,218,210,190, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,224,253,164, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 0, 2,165, 29, 1, 0, 0, 0, -208,245,164, 29, 1, 0, 0, 0, 0,247,164, 29, 1, 0, 0, 0,128,252,164, 29, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, - 0, 0, 0, 0, 1, 0, 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, - 0, 0, 0, 0, 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, - 64,255,164, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,160, 0,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 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,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 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, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, -101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 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, 68, 65, 84, 65, 40, 1, 0, 0, -160, 0,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,255,164, 29, 1, 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,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 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,152, 4,122, 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,151, 4, 0, 0, -127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65,200, 0, 0, 0, - 0, 2,165, 29, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,253,164, 29, 1, 0, 0, 0, - 64,255,164, 29, 1, 0, 0, 0,160, 0,165, 29, 1, 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, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, - 0, 3,165, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,236,164, 29, 1, 0, 0, 0, -208,224,163, 29, 1, 0, 0, 0,128,194,163, 29, 1, 0, 0, 0, 64,195,163, 29, 1, 0, 0, 0,160,195,163, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 2, 0, 0, 0, 0, 0, 0,179, 1, 0, 0, 6, 6, 0, 3,180, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0,208,128,217, 2, 1, 0, 0, 0, 0, 8,165, 29, 1, 0, 0, 0, 80, 29,165, 29, 1, 0, 0, 0, -224, 3,165, 29, 1, 0, 0, 0,160, 6,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96, 36,201, 20, 1, 0, 0, 0,128, 85,201, 20, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224, 3,165, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 64, 5,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,202, 67, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 64, 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,255, 2, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 63, 68, 0, 0,200, 65, 0,192, 63, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 0, 3, 26, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0,255, 2, 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, 0, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 64,134,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 64, 5,165, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0,160, 6,165, 29, 1, 0, 0, 0,224, 3,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,179, 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, - 1, 0, 0, 0, 0, 0, 0, 0,144,130,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,160, 6,165, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 5,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, - 0, 0, 0, 0, 0, 0,128, 67, 0, 0,128,191, 0, 0, 0, 64, 0, 0,154,190, 0,128,166, 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, 3, 0, 0, - 0, 0, 0, 0,154, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0, 26, 0, 0, 0,179, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,154, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,176,129,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,168, 0, 0, 0, 0, 8,165, 29, 1, 0, 0, 0, -168, 0, 0, 0, 1, 0, 0, 0,160, 11,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48,180, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224, 8,165, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 64, 10,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 64, 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,255, 2, 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, 4, 10, 0, 0, 3, 26, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0,255, 2, 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, 0, 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, 68, 65, 84, 65, 40, 1, 0, 0, 64, 10,165, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 8,165, 29, 1, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, - 0, 0, 32,193, 0, 0, 0, 68,144, 82, 89,194, 41,149, 13, 68,176,122,214, 66, 82, 97,202, 67,239, 2, 0, 0, 0, 3, 0, 0, - 18, 0, 0, 0,121, 1, 0, 0, 0, 0, 0, 0,238, 2, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,238, 2, 0, 0, - 18, 0, 0, 0,121, 1, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, - 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 3,122, 1,239, 2,104, 1, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0, 26, 0, 0, 0,147, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,122, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,160, 11,165, 29, 1, 0, 0, 0, -174, 0, 0, 0, 1, 0, 0, 0, 32, 17,165, 29, 1, 0, 0, 0, 0, 8,165, 29, 1, 0, 0, 0,224, 8,165, 29, 1, 0, 0, 0, - 64, 10,165, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,180, 4, 28, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,227, 78, 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, 68, 65, 84, 65, 40, 1, 0, 0, 0, 13,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 96, 14,165, 29, 1, 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,216, 65, - 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 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, 26, 0, 0, 0, - 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,240, 5, 27, 0,240, 5, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 27, 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, 68, 65, 84, 65, 40, 1, 0, 0, 96, 14,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, -192, 15,165, 29, 1, 0, 0, 0, 0, 13,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,239, 5, 0, 0,112, 0, 0, 0, 18, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,192, 15,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 96, 14,165, 29, 1, 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,162, 3, 0, 0, - 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, - 0, 0, 32, 65, 0, 0,128, 64, 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,240, 5,163, 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,239, 5, 0, 0,112, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240, 5,163, 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, 68, 65, 84, 65,240, 0, 0, 0, 32, 17,165, 29, 1, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0, - 48, 25,165, 29, 1, 0, 0, 0,160, 11,165, 29, 1, 0, 0, 0, 0, 13,165, 29, 1, 0, 0, 0,192, 15,165, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80, 18,165, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0,176, 19,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,157, 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,231, 4, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,232, 4, 26, 0,232, 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, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0,225, 1, 0, 0,250, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 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, 68, 65, 84, 65, 40, 1, 0, 0,176, 19,165, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 16, 21,165, 29, 1, 0, 0, 0, 80, 18,165, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,153, 2, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 24, 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, 68, 65, 84, 65, 40, 1, 0, 0, 16, 21,165, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0,112, 22,165, 29, 1, 0, 0, 0,176, 19,165, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0,251, 1, 0, 0,251, 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, 68, 65, 84, 65, 40, 1, 0, 0,112, 22,165, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0,208, 23,165, 29, 1, 0, 0, 0, 16, 21,165, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,128, 7, 0, 0,251, 1, 0, 0, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,208, 23,165, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 22,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 4, 24, 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, 48,224, 2, 28, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48,224, 2, 28, 1, 0, 0, 0, -157, 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,165, 7, 36, 64, - 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,128, 0, 0, 0,128, -226,215,163,188, 0, 0, 0,128, 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,180,157,229, 62,169,203,131,191,222,160, 81,191,184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, - 9, 46,185, 62, 35, 44,185, 62,147,180,109,188,102,208, 18, 64,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,128, 32,182, 69,129, 32,190,250,186,154, 61, -170,205,178, 62, 0, 64, 1, 53,215,104, 25,196,135,132,135, 67, 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68,160, 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,180,157,229, 62,169,203,131,191,222,160, 81,191,184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, - 9, 46,185, 62, 35, 44,185, 62,147,180,109,188,102,208, 18, 64,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, 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,218,210,190, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 48, 25,165, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 80, 29,165, 29, 1, 0, 0, 0, - 32, 17,165, 29, 1, 0, 0, 0, 80, 18,165, 29, 1, 0, 0, 0,208, 23,165, 29, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, - 0, 0, 0, 0, 1, 0, 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, - 0, 0, 0, 0, 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, -144, 26,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,240, 27,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 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,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 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, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, -101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 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, 68, 65, 84, 65, 40, 1, 0, 0, -240, 27,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 26,165, 29, 1, 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,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 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,152, 4,122, 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,151, 4, 0, 0, -127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65,200, 0, 0, 0, - 80, 29,165, 29, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 25,165, 29, 1, 0, 0, 0, -144, 26,165, 29, 1, 0, 0, 0,240, 27,165, 29, 1, 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, 1, 0, 0, 0, 6, 0, 0, 0, 83, 78, 0, 0,208, 0, 0, 0, -208, 30,165, 29, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 64,127,165, 29, 1, 0, 0, 0,208,190,163, 29, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 15,164, 29, 1, 0, 0, 0, - 64, 35,165, 29, 1, 0, 0, 0,160, 35,165, 29, 1, 0, 0, 0, 0, 42,165, 29, 1, 0, 0, 0, 96, 42,165, 29, 1, 0, 0, 0, -144, 93,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,180, 4, 28, 1, 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, 1, 0, 13, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,232, 48, 21, 0, 1, 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,240, 15,164, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,160,204,163, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -160,204,163, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,224, 31,165, 29, 1, 0, 0, 0,240, 15,164, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,224, 31,165, 29, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0, 64, 32,165, 29, 1, 0, 0, 0,160,204,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, 7,128, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 64, 32,165, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, -160, 32,165, 29, 1, 0, 0, 0,224, 31,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,160, 32,165, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0, 33,165, 29, 1, 0, 0, 0, - 64, 32,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,101, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, - 0, 33,165, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 96, 33,165, 29, 1, 0, 0, 0,160, 32,165, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 7,101, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 96, 33,165, 29, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,192, 33,165, 29, 1, 0, 0, 0, 0, 33,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 36, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,192, 33,165, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, - 32, 34,165, 29, 1, 0, 0, 0, 96, 33,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 6,101, 4, 1, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 32, 34,165, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,128, 34,165, 29, 1, 0, 0, 0, -192, 33,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 6,116, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -128, 34,165, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,224, 34,165, 29, 1, 0, 0, 0, 32, 34,165, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 7,116, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,224, 34,165, 29, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0, 64, 35,165, 29, 1, 0, 0, 0,128, 34,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,100, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 64, 35,165, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,224, 34,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 6,100, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,160, 35,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 36,165, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,160,204,163, 29, 1, 0, 0, 0,224, 31,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 0, 36,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 96, 36,165, 29, 1, 0, 0, 0, -160, 35,165, 29, 1, 0, 0, 0,160,204,163, 29, 1, 0, 0, 0,160, 32,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 96, 36,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,192, 36,165, 29, 1, 0, 0, 0, - 0, 36,165, 29, 1, 0, 0, 0,224, 31,165, 29, 1, 0, 0, 0, 0, 33,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,192, 36,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 32, 37,165, 29, 1, 0, 0, 0, - 96, 36,165, 29, 1, 0, 0, 0,160, 32,165, 29, 1, 0, 0, 0, 0, 33,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 32, 37,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,128, 37,165, 29, 1, 0, 0, 0, -192, 36,165, 29, 1, 0, 0, 0,240, 15,164, 29, 1, 0, 0, 0, 96, 33,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,128, 37,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,224, 37,165, 29, 1, 0, 0, 0, - 32, 37,165, 29, 1, 0, 0, 0, 64, 32,165, 29, 1, 0, 0, 0, 96, 33,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,224, 37,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 64, 38,165, 29, 1, 0, 0, 0, -128, 37,165, 29, 1, 0, 0, 0,160, 32,165, 29, 1, 0, 0, 0,192, 33,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 64, 38,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,160, 38,165, 29, 1, 0, 0, 0, -224, 37,165, 29, 1, 0, 0, 0, 0, 33,165, 29, 1, 0, 0, 0,192, 33,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,160, 38,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 39,165, 29, 1, 0, 0, 0, - 64, 38,165, 29, 1, 0, 0, 0, 96, 33,165, 29, 1, 0, 0, 0, 32, 34,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 0, 39,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 96, 39,165, 29, 1, 0, 0, 0, -160, 38,165, 29, 1, 0, 0, 0,192, 33,165, 29, 1, 0, 0, 0, 32, 34,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 96, 39,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,192, 39,165, 29, 1, 0, 0, 0, - 0, 39,165, 29, 1, 0, 0, 0, 0, 33,165, 29, 1, 0, 0, 0,128, 34,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,192, 39,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 32, 40,165, 29, 1, 0, 0, 0, - 96, 39,165, 29, 1, 0, 0, 0, 64, 32,165, 29, 1, 0, 0, 0,128, 34,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 32, 40,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,128, 40,165, 29, 1, 0, 0, 0, -192, 39,165, 29, 1, 0, 0, 0, 32, 34,165, 29, 1, 0, 0, 0,128, 34,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,128, 40,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,224, 40,165, 29, 1, 0, 0, 0, - 32, 40,165, 29, 1, 0, 0, 0,240, 15,164, 29, 1, 0, 0, 0,224, 34,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,224, 40,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 64, 41,165, 29, 1, 0, 0, 0, -128, 40,165, 29, 1, 0, 0, 0,160, 32,165, 29, 1, 0, 0, 0,224, 34,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 64, 41,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,160, 41,165, 29, 1, 0, 0, 0, -224, 40,165, 29, 1, 0, 0, 0,192, 33,165, 29, 1, 0, 0, 0, 64, 35,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,160, 41,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 42,165, 29, 1, 0, 0, 0, - 64, 41,165, 29, 1, 0, 0, 0, 96, 33,165, 29, 1, 0, 0, 0, 64, 35,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 0, 42,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -160, 41,165, 29, 1, 0, 0, 0,224, 34,165, 29, 1, 0, 0, 0, 64, 35,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,160, 0, 0, 0, 96, 42,165, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 46,165, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,160, 32,165, 29, 1, 0, 0, 0,160,204,163, 29, 1, 0, 0, 0,224, 31,165, 29, 1, 0, 0, 0, - 0, 33,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,102, 4, 0, 0,128, 4, 0, 0, - 7, 7,129, 7, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0,208,144,217, 2, 1, 0, 0, 0,192,126,165, 29, 1, 0, 0, 0, -192,126,165, 29, 1, 0, 0, 0, 64, 43,165, 29, 1, 0, 0, 0,160, 44,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,160,128,140, 27, 1, 0, 0, 0,240, 63,201, 20, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 64, 43,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,160, 44,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,224,162, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,240, 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,128, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,129, 7, 26, 0,129, 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, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, -102, 4, 0, 0,127, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 26, 0, 2, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,146,217, 2, 1, 0, 0, 0, 48,210, 6, 3, 1, 0, 0, 0, - 48,210, 6, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,197,200, 20, 1, 0, 0, 0, -192, 22,143, 27, 1, 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, -160, 44,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 43,165, 29, 1, 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, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 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, 0, 0, 0, 0, 0, 0, 0, 0, -128, 4, 0, 0,128, 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, 1, 0, 0, 0, 0, 0, 0, 0,176,145,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,224,200, 20, 1, 0, 0, 0, - 80, 93,201, 20, 1, 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, - 0, 46,165, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,160, 70,165, 29, 1, 0, 0, 0, 96, 42,165, 29, 1, 0, 0, 0, - 96, 33,165, 29, 1, 0, 0, 0, 32, 34,165, 29, 1, 0, 0, 0,128, 34,165, 29, 1, 0, 0, 0, 64, 32,165, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 37, 6, 0, 0,128, 7, 0, 0, 0, 0, 0, 0,115, 3, 0, 0, 4, 4, 92, 1,116, 3, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 64,141,217, 2, 1, 0, 0, 0, 64, 65,165, 29, 1, 0, 0, 0, 64, 69,165, 29, 1, 0, 0, 0, -224, 46,165, 29, 1, 0, 0, 0, 64, 48,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, 4,201, 20, 1, 0, 0, 0, 32, 31,201, 20, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224, 46,165, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 64, 48,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,174, 67, 0, 0, 0, 0, 0, 0,248, 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, 91, 1, 0, 0, - 0, 0, 0, 0, 30, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 92, 1, 31, 0, 92, 1, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 6, 0, 0,128, 7, 0, 0, 85, 3, 0, 0,115, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 1, 31, 0, 4, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240,143,217, 2, 1, 0, 0, 0, 48,164, 6, 28, 1, 0, 0, 0, 48,164, 6, 28, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 40,201, 20, 1, 0, 0, 0,208,248,199, 20, 1, 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, 64, 48,165, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 46,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,165, 67, - 0,128, 80,196, 0, 0, 0, 0, 0, 0, 0, 0,252,127,165, 67,251,191, 80,196, 0, 0, 0, 0, 75, 1, 0, 0, 92, 1, 0, 0, - 18, 0, 0, 0, 84, 3, 0, 0, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 74, 1, 0, 0, - 18, 0, 0, 0, 84, 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, 4, 6, 0, 92, 1, 85, 3, 75, 1, 67, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128,168,164, 21, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 37, 6, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 84, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 1, 85, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 32,142,217, 2, 1, 0, 0, 0, 48,138, 23, 3, 1, 0, 0, 0, 48, 18, 7, 3, 1, 0, 0, 0, -160, 49,165, 29, 1, 0, 0, 0,176, 63,165, 29, 1, 0, 0, 0,144, 10,200, 20, 1, 0, 0, 0, 96, 3,160, 29, 1, 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,160, 49,165, 29, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0, 48, 51,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143,217, 2, 1, 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, 74, 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, 48, 51,165, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,192, 52,165, 29, 1, 0, 0, 0, -160, 49,165, 29, 1, 0, 0, 0, 32,198, 17, 27, 1, 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, 74, 1, 61, 0, - 0, 0, 0, 0, 0, 0, 6, 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,192, 52,165, 29, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0, 80, 54,165, 29, 1, 0, 0, 0, 48, 51,165, 29, 1, 0, 0, 0, 0,200, 17, 27, 1, 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, 74, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 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, 80, 54,165, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,224, 55,165, 29, 1, 0, 0, 0, -192, 52,165, 29, 1, 0, 0, 0, 96,202, 17, 27, 1, 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, 74, 1,203, 0, - 0, 0, 0, 0, 0, 0, 6, 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,224, 55,165, 29, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0,112, 57,165, 29, 1, 0, 0, 0, 80, 54,165, 29, 1, 0, 0, 0,192,204, 17, 27, 1, 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, 74, 1, 58, 0, 20, 0, 0, 0, 0, 0, 6, 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,112, 57,165, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 59,165, 29, 1, 0, 0, 0, -224, 55,165, 29, 1, 0, 0, 0, 32,207, 17, 27, 1, 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,188,253, 74, 1,102, 0, - 0, 0, 0, 0, 0, 0, 6, 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, 0, 59,165, 29, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0,144, 60,165, 29, 1, 0, 0, 0,112, 57,165, 29, 1, 0, 0, 0,128,209, 17, 27, 1, 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, 59,253, 74, 1,105, 0, 0, 0, 0, 0, 0, 0, 6, 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,144, 60,165, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 32, 62,165, 29, 1, 0, 0, 0, - 0, 59,165, 29, 1, 0, 0, 0, 16,142, 17, 27, 1, 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,123,252, 74, 1,168, 0, - 0, 0, 0, 0, 4, 0, 6, 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, 32, 62,165, 29, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0,176, 63,165, 29, 1, 0, 0, 0,144, 60,165, 29, 1, 0, 0, 0, 48,215, 17, 27, 1, 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, 11,253, 74, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 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,176, 63,165, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 32, 62,165, 29, 1, 0, 0, 0,144,217, 17, 27, 1, 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,243,252, 74, 1, 0, 0, - 20, 0, 0, 0, 4, 0, 7, 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, 0, 1, 0, 0, 64, 65,165, 29, 1, 0, 0, 0, -163, 0, 0, 0, 1, 0, 0, 0, 64, 69,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0,240,171,140, 27, 1, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128, 66,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, -224, 67,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0,138, 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, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 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, 0, 0, 0, 0, 89, 6, 0, 0,108, 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, 20, 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, 68, 65, 84, 65, 40, 1, 0, 0,224, 67,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 66,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 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, - 48,228, 2, 28, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48,228, 2, 28, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, -103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, - 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, 32,193, 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, 32, 65, 0, 0,128, 63, -103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65, -237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, - 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, 32,193, 0, 0,128, 63, -103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 1, 0, 0, - 64, 69,165, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65,165, 29, 1, 0, 0, 0, -128, 66,165, 29, 1, 0, 0, 0,224, 67,165, 29, 1, 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, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 7, 0, 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, - 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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,160, 70,165, 29, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 96, 79,165, 29, 1, 0, 0, 0, 0, 46,165, 29, 1, 0, 0, 0,240, 15,164, 29, 1, 0, 0, 0, -224, 34,165, 29, 1, 0, 0, 0, 64, 35,165, 29, 1, 0, 0, 0, 96, 33,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 35, 6, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 15, 15, 36, 6,100, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16,109,217, 2, 1, 0, 0, 0, 64, 74,165, 29, 1, 0, 0, 0, 0, 78,165, 29, 1, 0, 0, 0,128, 71,165, 29, 1, 0, 0, 0, -224, 72,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,149,140, 27, 1, 0, 0, 0, - 32,110,201, 20, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,128, 71,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, -224, 72,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,136, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0,128,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, 35, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0, 36, 6, 26, 0, 36, 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, 0, 0, 0, 0, 0, 0, 0, 0, 35, 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, 36, 6, 26, 0, 6, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208,110,217, 2, 1, 0, 0, 0, 48,250, 6, 3, 1, 0, 0, 0, 48,250, 6, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,192, 6,143, 27, 1, 0, 0, 0,240, 87,160, 21, 1, 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,224, 72,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 71,165, 29, 1, 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, 35, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 35, 6, 0, 0, 18, 0, 0, 0, 73, 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, 36, 6, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 6, 0, 0, 26, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 36, 6, 74, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240,109,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,208,154,162, 21, 1, 0, 0, 0,176,145,196, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0, 64, 74,165, 29, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, - 0, 78,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, - 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64, 75,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, -160, 76,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0,203, 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, 87, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0, 88, 6, 26, 0, 88, 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, 0, 0, 0, 0, 0, 0, 0, 0, 87, 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, 88, 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, 68, 65, 84, 65, 40, 1, 0, 0,160, 76,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 64, 75,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 6, 0, 0, 26, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 88, 6, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48,232, 2, 28, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48,232, 2, 28, 1, 0, 0, 0,157, 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, 87,213,108, 66, 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,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, - 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, 32,193, 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, 32, 65, 0, 0,128, 63, - 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, 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,184,175, 31, 65, 0, 0, 32, 65, -161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 91,138, 60, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, - 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, 32,193, 0, 0,128, 63, - 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, 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,184,175, 31, 65, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 52,149,147, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 1, 0, 0, - 0, 78,165, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 74,165, 29, 1, 0, 0, 0, - 64, 75,165, 29, 1, 0, 0, 0,160, 76,165, 29, 1, 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, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 7, 0, 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, - 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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, 96, 79,165, 29, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,144, 93,165, 29, 1, 0, 0, 0,160, 70,165, 29, 1, 0, 0, 0, 32, 34,165, 29, 1, 0, 0, 0, -192, 33,165, 29, 1, 0, 0, 0, 0, 33,165, 29, 1, 0, 0, 0,128, 34,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 37, 6, 0, 0,128, 7, 0, 0,117, 3, 0, 0,100, 4, 0, 0, 3, 3, 92, 1,240, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112,106,217, 2, 1, 0, 0, 0, 0, 83,165, 29, 1, 0, 0, 0, 48, 92,165, 29, 1, 0, 0, 0, 64, 80,165, 29, 1, 0, 0, 0, -160, 81,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 13,143, 27, 1, 0, 0, 0, - 16,150,162, 21, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64, 80,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, -160, 81,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,163, 67, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0,174, 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, 91, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0, 0, 66, 67, 0, 0,200, 65, 0, 0, 66, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0, 92, 1, 26, 0, 92, 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, 0, 0, 0, 0, 37, 6, 0, 0,128, 7, 0, 0, 75, 4, 0, 0,100, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 92, 1, 26, 0, 8, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48,108,217, 2, 1, 0, 0, 0, 48, 74, 10, 28, 1, 0, 0, 0, 48, 74, 10, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,112, 42,201, 20, 1, 0, 0, 0, 80,142,162, 21, 1, 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,160, 81,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 64, 80,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0,128,131, 67, 0, 0,228,194, 0, 0, 0, 0, - 0, 0, 0, 0, 0,128,165, 67, 0, 0, 68,195, 0, 0, 0, 0, 75, 1, 0, 0, 92, 1, 0, 0, 18, 0, 0, 0,213, 0, 0, 0, - 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 74, 1, 0, 0, 18, 0, 0, 0,213, 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, 0, 4, 6, 0, 92, 1,214, 0, 75, 1,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 37, 6, 0, 0,128, 7, 0, 0,117, 3, 0, 0, 74, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 92, 1,214, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80,107,217, 2, 1, 0, 0, 0, 48,144, 11, 28, 1, 0, 0, 0, 48,144, 11, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 21,201, 20, 1, 0, 0, 0,208, 62,202, 20, 1, 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, 0, 83,165, 29, 1, 0, 0, 0,167, 0, 0, 0, 1, 0, 0, 0, - 48, 88,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,192,102,164, 21, 1, 0, 0, 0,192,102,164, 21, 1, 0, 0, 0, -144, 39,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,144, 39,163, 29, 1, 0, 0, 0,219, 0, 0, 0, 1, 0, 0, 0, - 13, 0, 0, 0, 13, 0, 0, 0, 96, 84,165, 29, 1, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0, 96, 84,165, 29, 1, 0, 0, 0, -218, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 48,180, 4, 28, 1, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0, - 48,180, 4, 28, 1, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0, 48,180, 4, 28, 1, 0, 0, 0, 21, 0, 1, 0, 1, 0, 1, 0, - 48,180, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,192, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 48,208, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,224, 93,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 48,220, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,224, 91,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 48,214, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,188, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 64, 86,167, 29, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -112, 85,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,208, 86,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,240, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 55, 0, 0, 67, 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,194, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,195, 0, 26, 0,195, 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, 53, 4, 0, 0,247, 4, 0, 0, - 69, 2, 0, 0, 94, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 0, 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, 68, 65, 84, 65, 40, 1, 0, 0, -208, 86,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 85,165, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0,150, 67, 0,192,116,196, 0, 0, 0, 0, 0, 0, 0, 0,205, 85,150, 67,223,204, 35,196, 26, 85,207,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, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0,155, 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, 0, 0, 0, 0, 1, 0, 3, 0, 2, 0, 0, 4, 6, 0,195, 0,156, 0,195, 0,156, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 4, 0, 0,247, 4, 0, 0, - 95, 2, 0, 0,250, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 0,156, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0, - 48, 88,165, 29, 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, 48, 92,165, 29, 1, 0, 0, 0, 0, 83,165, 29, 1, 0, 0, 0, -112, 85,165, 29, 1, 0, 0, 0,208, 86,165, 29, 1, 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, - 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, 68, 65, 84, 65, 40, 1, 0, 0,112, 89,165, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0,208, 90,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 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, 19, 1, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 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, 0, 0, 0, 0, 89, 6, 0, 0,108, 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, 20, 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, 68, 65, 84, 65, 40, 1, 0, 0,208, 90,165, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 89,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 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, 48,236, 2, 28, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48,236, 2, 28, 1, 0, 0, 0, -157, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128, -226,215,163,188, 0, 0, 0,128, 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, 32,193, 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, 32, 65, 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, -184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, - 98,127,249, 67,129,255, 71, 66, 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, 32,193, 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, -184,175, 31, 65, 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, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 48, 92,165, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 88,165, 29, 1, 0, 0, 0,112, 89,165, 29, 1, 0, 0, 0,208, 90,165, 29, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, -159, 0, 0, 0, 1, 0, 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, - 0, 0, 0, 0, 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, -144, 93,165, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 79,165, 29, 1, 0, 0, 0, -224, 34,165, 29, 1, 0, 0, 0,160, 32,165, 29, 1, 0, 0, 0,192, 33,165, 29, 1, 0, 0, 0, 64, 35,165, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 6, 0, 0,101, 0, 0, 0,100, 4, 0, 0, 1, 1, 36, 6, 0, 4, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0,176,111,217, 2, 1, 0, 0, 0,160,121,165, 29, 1, 0, 0, 0,192,125,165, 29, 1, 0, 0, 0, -112, 94,165, 29, 1, 0, 0, 0, 64,120,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208,242,201, 20, 1, 0, 0, 0,176, 4,216, 2, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112, 94,165, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0,208, 95,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,117, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,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, 35, 6, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 36, 6, 26, 0, 36, 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, 0, 0, 0, 0, 0, 0, 0, 0, 35, 6, 0, 0,101, 0, 0, 0,126, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 6, 26, 0, 10, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,208,119,217, 2, 1, 0, 0, 0, 48, 10, 4, 28, 1, 0, 0, 0, 48, 10, 4, 28, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,107,164, 21, 1, 0, 0, 0, 96,173,140, 27, 1, 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,208, 95,165, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0,112,103,165, 29, 1, 0, 0, 0,112, 94,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, - 0, 0, 87,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 87,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, - 18, 0, 0, 0,109, 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,109, 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, 4, 6, 0,160, 0,110, 3,143, 0, 92, 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,159, 0, 0, 0,247, 0, 0, 0,100, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,110, 3, 11, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48,116,217, 2, 1, 0, 0, 0, 48,180, 11, 28, 1, 0, 0, 0, 48,254, 6, 3, 1, 0, 0, 0, - 48, 97,165, 29, 1, 0, 0, 0,224,101,165, 29, 1, 0, 0, 0,128, 28,202, 20, 1, 0, 0, 0, 96, 96,160, 21, 1, 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, 48, 97,165, 29, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0,192, 98,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,117,217, 2, 1, 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, 95,115,104,101,108,102, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108, 95,115,104,101,108,102, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 84,111,111,108, 32, 83,104,101,108,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,196,255,143, 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, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,192, 98,165, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 80,100,165, 29, 1, 0, 0, 0, - 48, 97,165, 29, 1, 0, 0, 0,144, 38, 21, 27, 1, 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, 7,254,143, 0,165, 1, - 0, 0, 0, 0, 0, 0, 7, 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, 80,100,165, 29, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0,224,101,165, 29, 1, 0, 0, 0,192, 98,165, 29, 1, 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,109,101,115,104,101,100,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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,109,101,115,104,101,100,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, 77,101,115,104, 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, 0, 0,184,252,143, 0,244, 2, 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,224,101,165, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80,100,165, 29, 1, 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,109,101,115,104,101,100,105,116, 95,111,112,116,105,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, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, - 84, 95,116,111,111,108,115, 95,109,101,115,104,101,100,105,116, 95,111,112,116,105,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, 0, 0, 0, 0, 0, 0, 0, 77,101,115,104, 32, 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,124,252,143, 0, 36, 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,112,103,165, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 96,106,165, 29, 1, 0, 0, 0,208, 95,165, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0,127, 0, 0, 0,246, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,120, 0, 12, 0, 6, 0, 34, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0,118,217, 2, 1, 0, 0, 0, 48,186, 10, 28, 1, 0, 0, 0, 48,186, 10, 28, 1, 0, 0, 0, -208,104,165, 29, 1, 0, 0, 0,208,104,165, 29, 1, 0, 0, 0,192,114,160, 21, 1, 0, 0, 0,192, 3,201, 20, 1, 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,208,104,165, 29, 1, 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,224,118,217, 2, 1, 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,116, 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, 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, 96,106,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 64,120,165, 29, 1, 0, 0, 0, -112,103,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,143,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, - 0,128,102,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,171, 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,171, 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, -172, 3,163, 0,154, 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, - 35, 6, 0, 0, 35, 6, 0, 0,127, 0, 0, 0,100, 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, 1, 0, 0, 0, 0, 0, 0, 0,112,113,217, 2, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,107,165, 29, 1, 0, 0, 0,176,118,165, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,192,107,165, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 80,109,165, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, - 84, 95,111, 98,106,101, 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, 86, 73, 69, 87, 51, 68, 95, 80, - 84, 95,111, 98,106,101, 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, 84,114, 97,110,115,102,111,114, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 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,254,163, 0,110, 1, - 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, 80,109,165, 29, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0,224,110,165, 29, 1, 0, 0, 0,192,107,165, 29, 1, 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,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, 86, 73, 69, 87, 51, 68, 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, 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, 78,251,163, 0, 58, 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,224,110,165, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,112,112,165, 29, 1, 0, 0, 0, - 80,109,165, 29, 1, 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, 51,100,118,105,101,119, 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, 86, 73, 69, 87, 51, 68, 95, 80, - 84, 95, 51,100,118,105,101,119, 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, 86,105,101,119, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,235,252,163, 0, 59, 1, - 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, 88, 1, 0, 0,112,112,165, 29, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0, 0,114,165, 29, 1, 0, 0, 0,224,110,165, 29, 1, 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, 51,100,118,105,101,119, 95,100,105,115,112,108, 97,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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, 95,100,105,115,112,108, 97,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, 68,105,115,112,108, 97,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,208,251,163, 0, 3, 1, 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, 0,114,165, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,144,115,165, 29, 1, 0, 0, 0, -112,112,165, 29, 1, 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, 98, 97, 99,107,103,114,111,117,110,100, 95,105,109, 97,103,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, 98, 97, 99,107,103,114,111,117,110,100, 95,105,109, 97,103,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, 66, 97, 99,107,103,114,111,117, -110,100, 32, 73,109, 97,103,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,184,251,163, 0, 0, 0, - 20, 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,144,115,165, 29, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0, 32,117,165, 29, 1, 0, 0, 0, 0,114,165, 29, 1, 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,114, 97,110,115,102,111,114,109, 95,111,114,105,101, -110,116, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,114, 97,110,115,102,111,114,109, 95,111,114,105,101, -110,116, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114,109, 32, 79,114,105,101,110,116, 97,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,160,251,163, 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, 32,117,165, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,176,118,165, 29, 1, 0, 0, 0, -144,115,165, 29, 1, 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, 51,100,118,105,101,119, 95,109,101,115,104,100,105,115,112,108, 97,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, 86, 73, 69, 87, 51, 68, 95, 80, - 84, 95, 51,100,118,105,101,119, 95,109,101,115,104,100,105,115,112,108, 97,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, 77,101,115,104, 32, 68,105,115, -112,108, 97,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, 23,252,163, 0,104, 1, - 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,176,118,165, 29, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,117,165, 29, 1, 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, 51,100,118,105,101,119, 95,110, 97,109,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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, 95,110, 97,109,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, 73,116,101,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,163, 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, 64,120,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96,106,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 35, 6, 0, 0,127, 0, 0, 0,100, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -132, 5,230, 3, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,112,217, 2, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -224, 34,201, 20, 1, 0, 0, 0, 80,120,201, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,240, 2, 28, 1, 0, 0, 0, - 68, 65, 84, 65, 88, 3, 0, 0, 48,240, 2, 28, 1, 0, 0, 0,157, 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,127, 19,198, 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,128, 0, 0, 0,128, 74,215, 76,190, 0, 0, 0,128, 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,180,157,229, 62,184, 38, 31,191, - 48,180, 81,191,184,158, 81,191,118, 90,127, 63,197,108,153, 62, 26, 63,185, 62, 35, 44,185, 62,147,180,109,188,122, 73,177, 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, - 48,185, 70,188, 0, 0, 78,180,246,235,132,190,156, 35, 0, 62,130, 17, 20, 63, 0, 0,192,178, 67,108,117,194,185,204,216, 65, -105,156, 5,194,213,247,159,192,235, 62,114, 66, 61,254,213,193,158,225, 3, 66, 56, 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,180,157,229, 62,184, 38, 31,191, - 48,180, 81,191,184,158, 81,191,118, 90,127, 63,197,108,153, 62, 26, 63,185, 62, 35, 44,185, 62,147,180,109,188,122, 73,177, 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, 97, 89,186, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 89,186, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 97, 89,186, 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,214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0,188,189,169, 58, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,160,121,165, 29, 1, 0, 0, 0, -158, 0, 0, 0, 1, 0, 0, 0,192,125,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, - 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0,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, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0,255,255, 25, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0,123,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 96,124,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0,147, 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,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 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, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,152, 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, 68, 65, 84, 65, 40, 1, 0, 0, 96,124,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0,123,165, 29, 1, 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,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 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,152, 4,122, 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,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65,200, 0, 0, 0,192,125,165, 29, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,160,121,165, 29, 1, 0, 0, 0, 0,123,165, 29, 1, 0, 0, 0, 96,124,165, 29, 1, 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, - 1, 0, 0, 0, 6, 0, 0, 0, 83, 78, 0, 0,208, 0, 0, 0, 64,127,165, 29, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, - 0, 36,166, 29, 1, 0, 0, 0,208, 30,165, 29, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80,128,165, 29, 1, 0, 0, 0, 48,133,165, 29, 1, 0, 0, 0,144,133,165, 29, 1, 0, 0, 0, - 16,141,165, 29, 1, 0, 0, 0,112,141,165, 29, 1, 0, 0, 0, 0, 8,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48,180, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 48, 21, 0, 1, 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, 80,128,165, 29, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,176,128,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,176,128,165, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, - 16,129,165, 29, 1, 0, 0, 0, 80,128,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 4, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 16,129,165, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,112,129,165, 29, 1, 0, 0, 0, -176,128,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,128, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -112,129,165, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,208,129,165, 29, 1, 0, 0, 0, 16,129,165, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,208,129,165, 29, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0, 48,130,165, 29, 1, 0, 0, 0,112,129,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,100, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 48,130,165, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, -144,130,165, 29, 1, 0, 0, 0,208,129,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,100, 4, 1, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,144,130,165, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,240,130,165, 29, 1, 0, 0, 0, - 48,130,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,180, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -240,130,165, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 80,131,165, 29, 1, 0, 0, 0,144,130,165, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 32, 6,180, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 80,131,165, 29, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,176,131,165, 29, 1, 0, 0, 0,240,130,165, 29, 1, 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,176,131,165, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, - 16,132,165, 29, 1, 0, 0, 0, 80,131,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,180, 1, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 16,132,165, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,112,132,165, 29, 1, 0, 0, 0, -176,131,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 5,180, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -112,132,165, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,208,132,165, 29, 1, 0, 0, 0, 16,132,165, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 56, 5,100, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,208,132,165, 29, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0, 48,133,165, 29, 1, 0, 0, 0,112,132,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 60, 1,180, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 48,133,165, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,208,132,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 1,100, 4, 1, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,144,133,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,240,133,165, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,176,128,165, 29, 1, 0, 0, 0, 16,129,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,240,133,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 80,134,165, 29, 1, 0, 0, 0, -144,133,165, 29, 1, 0, 0, 0,176,128,165, 29, 1, 0, 0, 0,208,129,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 80,134,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,176,134,165, 29, 1, 0, 0, 0, -240,133,165, 29, 1, 0, 0, 0, 16,129,165, 29, 1, 0, 0, 0, 48,130,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,176,134,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 16,135,165, 29, 1, 0, 0, 0, - 80,134,165, 29, 1, 0, 0, 0,208,129,165, 29, 1, 0, 0, 0, 48,130,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 16,135,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,112,135,165, 29, 1, 0, 0, 0, -176,134,165, 29, 1, 0, 0, 0,208,129,165, 29, 1, 0, 0, 0,144,130,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,112,135,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,208,135,165, 29, 1, 0, 0, 0, - 16,135,165, 29, 1, 0, 0, 0,144,130,165, 29, 1, 0, 0, 0,240,130,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,208,135,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 48,136,165, 29, 1, 0, 0, 0, -112,135,165, 29, 1, 0, 0, 0,112,129,165, 29, 1, 0, 0, 0, 80,131,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 48,136,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,144,136,165, 29, 1, 0, 0, 0, -208,135,165, 29, 1, 0, 0, 0,240,130,165, 29, 1, 0, 0, 0, 80,131,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,144,136,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,240,136,165, 29, 1, 0, 0, 0, - 48,136,165, 29, 1, 0, 0, 0, 80,128,165, 29, 1, 0, 0, 0,144,130,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,240,136,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 80,137,165, 29, 1, 0, 0, 0, -144,136,165, 29, 1, 0, 0, 0, 80,128,165, 29, 1, 0, 0, 0, 80,131,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 80,137,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,176,137,165, 29, 1, 0, 0, 0, -240,136,165, 29, 1, 0, 0, 0, 48,130,165, 29, 1, 0, 0, 0,176,131,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,176,137,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 16,138,165, 29, 1, 0, 0, 0, - 80,137,165, 29, 1, 0, 0, 0,112,129,165, 29, 1, 0, 0, 0,176,131,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 16,138,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,112,138,165, 29, 1, 0, 0, 0, -176,137,165, 29, 1, 0, 0, 0,240,130,165, 29, 1, 0, 0, 0,176,131,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,112,138,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,208,138,165, 29, 1, 0, 0, 0, - 16,138,165, 29, 1, 0, 0, 0, 16,132,165, 29, 1, 0, 0, 0,112,132,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,208,138,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 48,139,165, 29, 1, 0, 0, 0, -112,138,165, 29, 1, 0, 0, 0, 48,130,165, 29, 1, 0, 0, 0,112,132,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 48,139,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,144,139,165, 29, 1, 0, 0, 0, -208,138,165, 29, 1, 0, 0, 0,176,131,165, 29, 1, 0, 0, 0, 16,132,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,144,139,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,240,139,165, 29, 1, 0, 0, 0, - 48,139,165, 29, 1, 0, 0, 0,144,130,165, 29, 1, 0, 0, 0,208,132,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,240,139,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 80,140,165, 29, 1, 0, 0, 0, -144,139,165, 29, 1, 0, 0, 0, 16,132,165, 29, 1, 0, 0, 0,208,132,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 80,140,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,176,140,165, 29, 1, 0, 0, 0, -240,139,165, 29, 1, 0, 0, 0,208,129,165, 29, 1, 0, 0, 0, 48,133,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,176,140,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 16,141,165, 29, 1, 0, 0, 0, - 80,140,165, 29, 1, 0, 0, 0,112,132,165, 29, 1, 0, 0, 0, 48,133,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 16,141,165, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176,140,165, 29, 1, 0, 0, 0,208,132,165, 29, 1, 0, 0, 0, 48,133,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,160, 0, 0, 0,112,141,165, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 16,145,165, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,208,129,165, 29, 1, 0, 0, 0,176,128,165, 29, 1, 0, 0, 0, 16,129,165, 29, 1, 0, 0, 0, - 48,130,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,101, 4, 0, 0,128, 4, 0, 0, - 7, 7,129, 7, 28, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0,208,144,217, 2, 1, 0, 0, 0,128, 35,166, 29, 1, 0, 0, 0, -128, 35,166, 29, 1, 0, 0, 0, 80,142,165, 29, 1, 0, 0, 0,176,143,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,192, 14,201, 20, 1, 0, 0, 0,240,153,162, 21, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 80,142,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,176,143,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,224,162, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,240, 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,128, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,129, 7, 26, 0,129, 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, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, -101, 4, 0, 0,126, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 26, 0, 0, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,146,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, -176,143,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,142,165, 29, 1, 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, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 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, 0, 0, 0, 0,128, 7, 0, 0, -127, 4, 0, 0,128, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 2, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,145,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, - 16,145,165, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0,175,165, 29, 1, 0, 0, 0,112,141,165, 29, 1, 0, 0, 0, - 80,131,165, 29, 1, 0, 0, 0,240,130,165, 29, 1, 0, 0, 0,176,131,165, 29, 1, 0, 0, 0,112,129,165, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,128, 7, 0, 0, 0, 0, 0, 0,179, 1, 0, 0, 4, 4, 96, 1,180, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 64,141,217, 2, 1, 0, 0, 0, 80,164,165, 29, 1, 0, 0, 0,160,173,165, 29, 1, 0, 0, 0, -240,145,165, 29, 1, 0, 0, 0, 80,147,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 49,161, 29, 1, 0, 0, 0,112,188,142, 27, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,240,145,165, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 80,147,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,176, 67, 0, 0, 0, 0, 0, 0,248, 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, 95, 1, 0, 0, - 0, 0, 0, 0, 30, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 96, 1, 31, 0, 96, 1, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,128, 7, 0, 0,149, 1, 0, 0,179, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 1, 31, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240,143,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 80,147,165, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,145,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 67, - 0, 64, 68,196, 0, 0, 0, 0, 0, 0, 0, 0,255,127,167, 67,254,127,193,195, 0, 0, 0, 0, 79, 1, 0, 0, 96, 1, 0, 0, - 18, 0, 0, 0,148, 1, 0, 0, 0, 0, 0, 0, 78, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 78, 1, 0, 0, - 18, 0, 0, 0,148, 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, 4, 6, 0, 96, 1,149, 1, 79, 1,131, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112,203,200, 20, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,128, 7, 0, 0, 0, 0, 0, 0,148, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 1,149, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 32,142,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176,148,165, 29, 1, 0, 0, 0,192,162,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,176,148,165, 29, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0, 64,150,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143,217, 2, 1, 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, 78, 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, 64,150,165, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,208,151,165, 29, 1, 0, 0, 0, -176,148,165, 29, 1, 0, 0, 0, 32,198, 17, 27, 1, 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, 78, 1, 61, 0, - 0, 0, 0, 0, 0, 0, 6, 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,208,151,165, 29, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0, 96,153,165, 29, 1, 0, 0, 0, 64,150,165, 29, 1, 0, 0, 0, 0,200, 17, 27, 1, 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, 78, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 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, 96,153,165, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,240,154,165, 29, 1, 0, 0, 0, -208,151,165, 29, 1, 0, 0, 0, 96,202, 17, 27, 1, 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, 78, 1,203, 0, - 0, 0, 0, 0, 0, 0, 6, 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,240,154,165, 29, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0,128,156,165, 29, 1, 0, 0, 0, 96,153,165, 29, 1, 0, 0, 0,192,204, 17, 27, 1, 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, 78, 1, 58, 0, 20, 0, 0, 0, 0, 0, 6, 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,128,156,165, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 16,158,165, 29, 1, 0, 0, 0, -240,154,165, 29, 1, 0, 0, 0, 32,207, 17, 27, 1, 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,188,253, 78, 1,102, 0, - 0, 0, 0, 0, 0, 0, 6, 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, 16,158,165, 29, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0,160,159,165, 29, 1, 0, 0, 0,128,156,165, 29, 1, 0, 0, 0,128,209, 17, 27, 1, 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, 59,253, 78, 1,105, 0, 0, 0, 0, 0, 0, 0, 6, 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,160,159,165, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 48,161,165, 29, 1, 0, 0, 0, - 16,158,165, 29, 1, 0, 0, 0, 16,142, 17, 27, 1, 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, 35,253, 78, 1, 0, 0, - 0, 0, 0, 0, 4, 0, 6, 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, 48,161,165, 29, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0,192,162,165, 29, 1, 0, 0, 0,160,159,165, 29, 1, 0, 0, 0, 48,215, 17, 27, 1, 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, 11,253, 78, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 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,192,162,165, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48,161,165, 29, 1, 0, 0, 0,144,217, 17, 27, 1, 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,243,252, 78, 1, 0, 0, - 20, 0, 0, 0, 4, 0, 7, 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, 0, 1, 0, 0, 80,164,165, 29, 1, 0, 0, 0, -163, 0, 0, 0, 1, 0, 0, 0,176,169,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0,112, 33,201, 20, 1, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144,165,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, -240,166,165, 29, 1, 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,216, 65, - 0, 0, 0, 0, 0, 0,242, 67, 0, 0, 0, 0, 0, 0,216, 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,227, 1, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, - 0,128,241, 67, 0, 0,208, 65, 0,128,241, 67, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,228, 1, 27, 0,228, 1, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,157, 5, 0, 0,128, 7, 0, 0, 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,228, 1, 27, 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, 68, 65, 84, 65, 40, 1, 0, 0,240,166,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 80,168,165, 29, 1, 0, 0, 0,144,165,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 0, 0,128, 7, 0, 0,112, 0, 0, 0,235, 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, 68, 65, 84, 65, 40, 1, 0, 0, 80,168,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240,166,165, 29, 1, 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,123, 1, 0, 0, - 18, 0, 0, 0,227, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,227, 1, 0, 0, 18, 0, 0, 0,123, 1, 0, 0, - 0, 0, 32, 65, 0, 0,128, 64, 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,228, 1,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,157, 5, 0, 0,128, 7, 0, 0,112, 0, 0, 0,235, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,228, 1,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,176,169,165, 29, 1, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0, -160,173,165, 29, 1, 0, 0, 0, 80,164,165, 29, 1, 0, 0, 0,144,165,165, 29, 1, 0, 0, 0, 80,168,165, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224,170,165, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 64,172,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 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, 19, 1, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 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, 0, 0, 0, 0, 89, 6, 0, 0,108, 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, 20, 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, 68, 65, 84, 65, 40, 1, 0, 0, 64,172,165, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,170,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 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, 48,244, 2, 28, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48,244, 2, 28, 1, 0, 0, 0, -157, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128, -226,215,163,188, 0, 0, 0,128, 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, 32,193, 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, 32, 65, 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, -184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, - 98,127,249, 67,129,255, 71, 66, 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, 32,193, 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, -184,175, 31, 65, 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, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,160,173,165, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176,169,165, 29, 1, 0, 0, 0,224,170,165, 29, 1, 0, 0, 0, 64,172,165, 29, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, -159, 0, 0, 0, 1, 0, 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, - 0, 0, 0, 0, 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, - 0,175,165, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,128,208,165, 29, 1, 0, 0, 0, 16,145,165, 29, 1, 0, 0, 0, - 80,128,165, 29, 1, 0, 0, 0,144,130,165, 29, 1, 0, 0, 0,240,130,165, 29, 1, 0, 0, 0, 80,131,165, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0,179, 1, 0, 0, 17, 17, 32, 6,180, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48,182,217, 2, 1, 0, 0, 0,144,181,165, 29, 1, 0, 0, 0,128,207,165, 29, 1, 0, 0, 0, -224,175,165, 29, 1, 0, 0, 0, 48,180,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, 67,200, 20, 1, 0, 0, 0,224, 61,200, 20, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224,175,165, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 64,177,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,150, 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, 31, 6, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 63, 68, 0, 0,200, 65, 0,192, 63, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 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, 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,208,184,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 64,177,165, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 48,180,165, 29, 1, 0, 0, 0,224,175,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, - 0, 0,196,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, 0, 0,196,195, 0, 0, 0, 0,203, 0, 0, 0,220, 0, 0, 0, - 18, 0, 0, 0,153, 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, - 18, 0, 0, 0,153, 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, 4, 6, 0,220, 0,154, 1,203, 0,136, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,219, 0, 0, 0, 26, 0, 0, 0,179, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0,154, 1, 0, 0, 4, 0, 3, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240,183,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -160,178,165, 29, 1, 0, 0, 0,160,178,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,160,178,165, 29, 1, 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,128, 4, 19, 27, 1, 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, 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, 48,180,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 64,177,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 68, 0, 0, 0, 0, 0, 0,112, 67,228, 46, 44,195,220,133,181, 68, -162,102,238,194,168,153,179, 67, 51, 5, 0, 0, 68, 5, 0, 0, 18, 0, 0, 0,153, 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,153, 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, -154, 1, 51, 5,136, 1, 0, 0, 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, 31, 6, 0, 0, 26, 0, 0, 0,179, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 5,154, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,183,217, 2, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,144,181,165, 29, 1, 0, 0, 0,175, 0, 0, 0, 1, 0, 0, 0, 48,186,165, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 40, 1, 0, 0, 16,182,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,112,183,165, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,202, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 64, 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,255, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 63, 68, 0, 0,200, 65, - 0,192, 63, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 0, 3, - 26, 0, 0, 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, 0, 0, 0, 0, - 0, 0, 0, 0,255, 2, 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, - 0, 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, - 68, 65, 84, 65, 40, 1, 0, 0,112,183,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,208,184,165, 29, 1, 0, 0, 0, - 16,182,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,147, 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, - 68, 65, 84, 65, 40, 1, 0, 0,208,184,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112,183,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67, 0, 0,128,191, 0, 0, 0, 64, - 0, 0,116,190, 0,128,158, 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, 3, 0, 0, 0, 0, 0, 0,122, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0, 26, 0, 0, 0,147, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3,122, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,168, 0, 0, 0, 48,186,165, 29, 1, 0, 0, 0,168, 0, 0, 0, 1, 0, 0, 0,208,189,165, 29, 1, 0, 0, 0, -144,181,165, 29, 1, 0, 0, 0, 16,182,165, 29, 1, 0, 0, 0,208,184,165, 29, 1, 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,100, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 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,128, 63, 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, 16,187,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,112,188,165, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 64, 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,255, 2, 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, 4, 10, 0, 0, 3, - 26, 0, 0, 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, 0, 0, 0, 0, - 0, 0, 0, 0,255, 2, 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, - 0, 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, - 68, 65, 84, 65, 40, 1, 0, 0,112,188,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16,187,165, 29, 1, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68,144, 82, 89,194, 41,149, 13, 68, -176,122,214, 66, 82, 97,202, 67,239, 2, 0, 0, 0, 3, 0, 0, 18, 0, 0, 0,121, 1, 0, 0, 0, 0, 0, 0,238, 2, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,238, 2, 0, 0, 18, 0, 0, 0,121, 1, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,250, 70, 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 3, -122, 1,239, 2,104, 1, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0, 26, 0, 0, 0,147, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3,122, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,208,189,165, 29, 1, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0, 80,195,165, 29, 1, 0, 0, 0, - 48,186,165, 29, 1, 0, 0, 0, 16,187,165, 29, 1, 0, 0, 0,112,188,165, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48,180, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,227, 78, 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, 68, 65, 84, 65, 40, 1, 0, 0, - 48,191,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,144,192,165, 29, 1, 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,216, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 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, 26, 0, 0, 0, 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,240, 5, 27, 0,240, 5, 27, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, - 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 27, 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, 68, 65, 84, 65, 40, 1, 0, 0, -144,192,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,240,193,165, 29, 1, 0, 0, 0, 48,191,165, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,239, 5, 0, 0, -112, 0, 0, 0, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, -240,193,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,192,165, 29, 1, 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,162, 3, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 18, 0, 0, 0,239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 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,240, 5,163, 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,239, 5, 0, 0, -112, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,163, 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, 68, 65, 84, 65,240, 0, 0, 0, - 80,195,165, 29, 1, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0, 96,203,165, 29, 1, 0, 0, 0,208,189,165, 29, 1, 0, 0, 0, - 48,191,165, 29, 1, 0, 0, 0,240,193,165, 29, 1, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,128,196,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,224,197,165, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,157, 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,231, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, - 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,232, 4, - 26, 0,232, 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, 0, 0, 0, 0, -153, 2, 0, 0,128, 7, 0, 0,225, 1, 0, 0,250, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -232, 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, - 68, 65, 84, 65, 40, 1, 0, 0,224,197,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 64,199,165, 29, 1, 0, 0, 0, -128,196,165, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, -153, 2, 0, 0,153, 2, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 24, 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, - 68, 65, 84, 65, 40, 1, 0, 0, 64,199,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,160,200,165, 29, 1, 0, 0, 0, -224,197,165, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, -153, 2, 0, 0,128, 7, 0, 0,251, 1, 0, 0,251, 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, - 68, 65, 84, 65, 40, 1, 0, 0,160,200,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0,202,165, 29, 1, 0, 0, 0, - 64,199,165, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, -128, 7, 0, 0,128, 7, 0, 0,251, 1, 0, 0, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0,202,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -160,200,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, 2, 0, 0,128, 7, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -232, 4, 24, 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, 48,248, 2, 28, 1, 0, 0, 0, - 68, 65, 84, 65, 88, 3, 0, 0, 48,248, 2, 28, 1, 0, 0, 0,157, 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,165, 7, 36, 64, 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,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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,180,157,229, 62,169,203,131,191, -222,160, 81,191,184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, 35, 44,185, 62,147,180,109,188,102,208, 18, 64, -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,128, 32,182, 69,129, 32,190,250,186,154, 61,170,205,178, 62, 0, 64, 1, 53,215,104, 25,196,135,132,135, 67, - 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68,160, 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,180,157,229, 62,169,203,131,191, -222,160, 81,191,184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, 35, 44,185, 62,147,180,109,188,102,208, 18, 64, -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, 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,218,210,190, 58, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 96,203,165, 29, 1, 0, 0, 0, -158, 0, 0, 0, 1, 0, 0, 0,128,207,165, 29, 1, 0, 0, 0, 80,195,165, 29, 1, 0, 0, 0,128,196,165, 29, 1, 0, 0, 0, - 0,202,165, 29, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, - 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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,192,204,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 32,206,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0,147, 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,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 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, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,152, 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, 68, 65, 84, 65, 40, 1, 0, 0, 32,206,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,192,204,165, 29, 1, 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,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 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,152, 4,122, 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,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65,200, 0, 0, 0,128,207,165, 29, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 96,203,165, 29, 1, 0, 0, 0,192,204,165, 29, 1, 0, 0, 0, 32,206,165, 29, 1, 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, - 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,128,208,165, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, -192,230,165, 29, 1, 0, 0, 0, 0,175,165, 29, 1, 0, 0, 0, 16,132,165, 29, 1, 0, 0, 0,112,132,165, 29, 1, 0, 0, 0, - 48,130,165, 29, 1, 0, 0, 0,176,131,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 5, 0, 0,128, 7, 0, 0, -181, 1, 0, 0, 99, 4, 0, 0, 9, 9, 72, 2,175, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,175,217, 2, 1, 0, 0, 0, - 48,252, 2, 28, 1, 0, 0, 0, 96,229,165, 29, 1, 0, 0, 0, 96,209,165, 29, 1, 0, 0, 0,192,210,165, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,145,162, 21, 1, 0, 0, 0, 48, 10,201, 20, 1, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 96,209,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,192,210,165, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 18, 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, 71, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,181, 67, 0, 0,200, 65, - 0,128,181, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 72, 2, - 26, 0, 72, 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, 0, 0, 0, 0, - 57, 5, 0, 0,128, 7, 0, 0,181, 1, 0, 0,206, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 72, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,177,217, 2, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,192,210,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96,209,165, 29, 1, 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,120, 27, 19, 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, 71, 2, 0, 0, 0, 0, 0, 0,148, 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, 72, 2, -149, 2, 72, 2,149, 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, - 57, 5, 0, 0,128, 7, 0, 0,207, 1, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 72, 2,149, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,176,217, 2, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0, 48,252, 2, 28, 1, 0, 0, 0,170, 0, 0, 0, 1, 0, 0, 0,224,214,165, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 32,212,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, -128,213,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,163, 67, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0,182, 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,107, 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, 4, 10, 0,108, 1, 26, 0,108, 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, 0, 0, 0, 0, 53, 4, 0, 0,160, 5, 0, 0, 41, 1, 0, 0, 66, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,108, 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, 68, 65, 84, 65, 40, 1, 0, 0,128,213,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 32,212,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0,128,131, 67, 0, 0,228,194, 0, 0, 0, 0, - 0, 0, 0, 0, 0,128,173, 67, 0, 0,210,195, 0, 0, 0, 0, 91, 1, 0, 0,108, 1, 0, 0, 18, 0, 0, 0,181, 1, 0, 0, - 0, 0, 0, 0, 90, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 90, 1, 0, 0, 18, 0, 0, 0,181, 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, 18, 0, 0, 0, 2, 0, 3, 3, - 0, 0, 0, 4, 6, 0,108, 1,182, 1, 91, 1,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, 53, 4, 0, 0,160, 5, 0, 0, 67, 1, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,108, 1,182, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,224,214,165, 29, 1, 0, 0, 0,167, 0, 0, 0, 1, 0, 0, 0, - 16,220,165, 29, 1, 0, 0, 0, 48,252, 2, 28, 1, 0, 0, 0, 32,212,165, 29, 1, 0, 0, 0,128,213,165, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, -224, 54,160, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,224, 54,160, 29, 1, 0, 0, 0,219, 0, 0, 0, 1, 0, 0, 0, - 13, 0, 0, 0, 13, 0, 0, 0, 64,216,165, 29, 1, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0, 64,216,165, 29, 1, 0, 0, 0, -218, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 48,180, 4, 28, 1, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0, - 48,180, 4, 28, 1, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0, 48,180, 4, 28, 1, 0, 0, 0, 21, 0, 1, 0, 1, 0, 1, 0, - 48,180, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,192, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 48,208, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,224, 93,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 48,220, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,224, 91,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 48,214, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,188, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 64, 86,167, 29, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 80,217,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,176,218,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,162, 67, 0, 0, 0, 0, 0, 0,240, 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, 29, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 68, 1, 30, 0, 68, 1, 30, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 6, 0, 0,128, 7, 0, 0, -252, 3, 0, 0, 25, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 1, 30, 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, 68, 65, 84, 65, + 40, 1, 0, 0,128,218,131, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,217,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, -176,218,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,217,165, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0,153, 67, 0, 0,137,196, 0, 0, 0, 0, 0, 0, 0, 0,254,127,153, 67,253,127,198,195, 0, 0, 0, 0, - 51, 1, 0, 0, 68, 1, 0, 0, 18, 0, 0, 0,158, 1, 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,158, 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, 4, 6, 0, 68, 1,159, 1, 51, 1,141, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 6, 0, 0,128, 7, 0, 0, - 93, 2, 0, 0,251, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 1,159, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0, - 16,220,165, 29, 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0,112,225,165, 29, 1, 0, 0, 0,224,214,165, 29, 1, 0, 0, 0, - 80,217,165, 29, 1, 0, 0, 0,176,218,165, 29, 1, 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, 89, 6, 0, 0, +108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 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, 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, 68, 65, 84, 65, 40, 1, 0, 0, 80,221,165, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0,176,222,165, 29, 1, 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,216, 65, 0, 0, 0, 0, 0, 0,242, 67, 0, 0, 0, 0, 0, 0,216, 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,227, 1, 0, 0, - 0, 0, 0, 0, 26, 0, 0, 0, 0,128,241, 67, 0, 0,208, 65, 0,128,241, 67, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,228, 1, 27, 0,228, 1, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,157, 5, 0, 0,128, 7, 0, 0, 85, 0, 0, 0,111, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228, 1, 27, 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, 68, 65, 84, 65, 40, 1, 0, 0,176,222,165, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 16,224,165, 29, 1, 0, 0, 0, 80,221,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 0, 0,128, 7, 0, 0,112, 0, 0, 0,235, 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, 68, 65, 84, 65, 40, 1, 0, 0, 16,224,165, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,222,165, 29, 1, 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,123, 1, 0, 0, 18, 0, 0, 0,227, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,227, 1, 0, 0, - 18, 0, 0, 0,123, 1, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 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,228, 1,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,157, 5, 0, 0,128, 7, 0, 0,112, 0, 0, 0,235, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228, 1,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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,112,225,165, 29, 1, 0, 0, 0, -164, 0, 0, 0, 1, 0, 0, 0, 96,229,165, 29, 1, 0, 0, 0, 16,220,165, 29, 1, 0, 0, 0, 80,221,165, 29, 1, 0, 0, 0, - 16,224,165, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -160,226,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0,228,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 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, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 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, 0, 0, 0, 0, 89, 6, 0, 0,108, 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, 20, 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, 68, 65, 84, 65, 40, 1, 0, 0, - 0,228,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,226,165, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, - 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 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, 48, 0, 3, 28, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, - 48, 0, 3, 28, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, - 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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, 32,193, 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, 32, 65, 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, - 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, - 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 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, 32,193, 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, - 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 96,229,165, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,112,225,165, 29, 1, 0, 0, 0,160,226,165, 29, 1, 0, 0, 0, 0,228,165, 29, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,202, 4, 28, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 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, - 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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,192,230,165, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 8,166, 29, 1, 0, 0, 0, -128,208,165, 29, 1, 0, 0, 0,208,132,165, 29, 1, 0, 0, 0, 48,133,165, 29, 1, 0, 0, 0,112,132,165, 29, 1, 0, 0, 0, - 16,132,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 1, 0, 0, 55, 5, 0, 0,181, 1, 0, 0, 99, 4, 0, 0, - 1, 1,251, 3,175, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,111,217, 2, 1, 0, 0, 0,112,249,165, 29, 1, 0, 0, 0, - 0, 7,166, 29, 1, 0, 0, 0,160,231,165, 29, 1, 0, 0, 0, 16,248,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,112, 44,200, 20, 1, 0, 0, 0, 48, 7,200, 20, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -160,231,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0,233,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,128,102, 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,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, 61, 1, 0, 0, 55, 5, 0, 0, -181, 1, 0, 0,206, 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,208,119,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, - 0,233,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 96,234,165, 29, 1, 0, 0, 0,160,231,165, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 61, 1, 0, 0, 61, 1, 0, 0, -207, 1, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,149, 2, 0, 0, 5, 0, - 3, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 48,116,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, - 96,234,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,192,235,165, 29, 1, 0, 0, 0, 0,233,165, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 61, 1, 0, 0, 55, 5, 0, 0, -207, 1, 0, 0,207, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0,118,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, -192,235,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 16,248,165, 29, 1, 0, 0, 0, 96,234,165, 29, 1, 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,128, 23,196, 0, 0, 0, 0, -163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,111, 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,111, 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,112, 2,163, 0, 94, 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, 55, 5, 0, 0, 55, 5, 0, 0, -207, 1, 0, 0, 99, 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, 1, 0, 0, 0, 0, 0, 0, 0,112,113,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 32,237,165, 29, 1, 0, 0, 0,128,246,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, - 32,237,165, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,176,238,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,111, 98,106,101, 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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,111, 98,106,101, 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, 84,114, 97,110,115,102,111,114,109, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,254,163, 0,110, 1, 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,176,238,165, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, - 64,240,165, 29, 1, 0, 0, 0, 32,237,165, 29, 1, 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,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, - 86, 73, 69, 87, 51, 68, 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, - 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,236,253,163, 0, 58, 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, 88, 1, 0, 0, - 64,240,165, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,208,241,165, 29, 1, 0, 0, 0,176,238,165, 29, 1, 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, 51,100,118,105,101,119, - 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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, - 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, 86,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153,252,163, 0, 59, 1, 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,208,241,165, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, - 96,243,165, 29, 1, 0, 0, 0, 64,240,165, 29, 1, 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, 51,100,118,105,101,119, 95,100,105,115,112,108, 97,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, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, 95,100,105,115,112,108, 97,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, - 68,105,115,112,108, 97,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,129,252,163, 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, - 96,243,165, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,240,244,165, 29, 1, 0, 0, 0,208,241,165, 29, 1, 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, 98, 97, 99,107,103,114, -111,117,110,100, 95,105,109, 97,103,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, 98, 97, 99,107,103,114, -111,117,110,100, 95,105,109, 97,103,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, 66, 97, 99,107,103,114,111,117,110,100, 32, 73,109, 97,103,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,105,252,163, 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,240,244,165, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, -128,246,165, 29, 1, 0, 0, 0, 96,243,165, 29, 1, 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,114, 97,110,115,102,111,114,109, 95,111,114,105,101,110,116, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,114, 97,110,115,102,111,114,109, 95,111,114,105,101,110,116, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, - 84,114, 97,110,115,102,111,114,109, 32, 79,114,105,101,110,116, 97,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, 81,252,163, 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, -128,246,165, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,244,165, 29, 1, 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, 51,100,118,105,101,119, - 95,110, 97,109,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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, - 95,110, 97,109,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, 73,116,101,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,163, 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, 16,248,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,192,235,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 55, 5, 0, 0,207, 1, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,251, 3,149, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -144,112,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 4, 3, 28, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48, 4, 3, 28, 1, 0, 0, 0,157, 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,226,201,115, 61, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,128, 0, 0, 0,128,111, 18,131,187, 0, 0, 0,128, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,234,135, 27, 1, 0, 0, 0, 68, 65, 84, 65, + 88, 3, 0, 0, 48,234,135, 27, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 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, 80, 1,128,191, + 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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, 0, 0, 0, 0, 32,193, 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, -190, 35, 30, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,226,201,115, 61, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,111, 18,131,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, 90,105,134, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,255,255,121,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, 0, 0, 0, 0, 32, 65, 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, + 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195, +115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 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,226,201,115, 61, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,111, 18,131,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, 32,193, 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, + 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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,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, 20, 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, @@ -4297,3238 +3033,4502 @@ char datatoc_B_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, 0, 0, 0, 0, - 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, -112,249,165, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0,144,253,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 7, 0, 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, - 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,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, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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,208,250,165, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 48,252,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,195, 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, 6, 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, 4, 10, 0, 24, 6, 26, 0, 24, 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, 0, 0, 0, 0, 0, 0, 0, 0, 23, 6, 0, 0,149, 1, 0, 0,174, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 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, 68, 65, 84, 65, 40, 1, 0, 0, 48,252,165, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,250,165, 29, 1, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, - 0, 0, 32,193, 0, 0, 0, 68, 56,205,190,195,156,102, 95, 68,160,228,244, 64,110, 44,252, 67, 7, 6, 0, 0, 24, 6, 0, 0, - 18, 0, 0, 0,106, 2, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, - 18, 0, 0, 0,106, 2, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, - 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 24, 6,107, 2, 7, 6, 89, 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, 23, 6, 0, 0,175, 1, 0, 0, 25, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 6,107, 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, 68, 65, 84, 65, 32, 1, 0, 0,144,253,165, 29, 1, 0, 0, 0, -174, 0, 0, 0, 1, 0, 0, 0, 16, 3,166, 29, 1, 0, 0, 0,112,249,165, 29, 1, 0, 0, 0,208,250,165, 29, 1, 0, 0, 0, - 48,252,165, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,180, 4, 28, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 67, 81, 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, 68, 65, 84, 65, 40, 1, 0, 0,240,254,165, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 80, 0,166, 29, 1, 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,216, 65, - 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 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, 26, 0, 0, 0, - 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,240, 5, 27, 0,240, 5, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 27, 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, 68, 65, 84, 65, 40, 1, 0, 0, 80, 0,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, -176, 1,166, 29, 1, 0, 0, 0,240,254,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,239, 5, 0, 0,112, 0, 0, 0, 18, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,176, 1,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80, 0,166, 29, 1, 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,162, 3, 0, 0, - 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, - 0, 0, 32, 65, 0, 0,128, 64, 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,240, 5,163, 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,239, 5, 0, 0,112, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240, 5,163, 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, 68, 65, 84, 65,240, 0, 0, 0, 16, 3,166, 29, 1, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0, - 0, 7,166, 29, 1, 0, 0, 0,144,253,165, 29, 1, 0, 0, 0,240,254,165, 29, 1, 0, 0, 0,176, 1,166, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 64, 4,166, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0,160, 5,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 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,151, 4, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 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, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 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, 68, 65, 84, 65, 40, 1, 0, 0,160, 5,166, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 4,166, 29, 1, 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,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, - 18, 0, 0, 0,121, 2, 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,152, 4,122, 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,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65,200, 0, 0, 0, 0, 7,166, 29, 1, 0, 0, 0, -173, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 3,166, 29, 1, 0, 0, 0, 64, 4,166, 29, 1, 0, 0, 0, -160, 5,166, 29, 1, 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, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 0, 8,166, 29, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,230,165, 29, 1, 0, 0, 0,144,130,165, 29, 1, 0, 0, 0, -208,129,165, 29, 1, 0, 0, 0, 48,133,165, 29, 1, 0, 0, 0,208,132,165, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 59, 1, 0, 0,181, 1, 0, 0, 99, 4, 0, 0, 3, 3, 60, 1,175, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112,106,217, 2, 1, 0, 0, 0,160, 11,166, 29, 1, 0, 0, 0,128, 34,166, 29, 1, 0, 0, 0,224, 8,166, 29, 1, 0, 0, 0, - 64, 10,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,200, 20, 1, 0, 0, 0, - 96,111,160, 21, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,224, 8,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 64, 10,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,163, 67, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0,158, 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, 59, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0, 0, 83, 67, 0, 0,200, 65, 0, 0, 83, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0, 60, 1, 26, 0, 60, 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, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 0, 0,181, 1, 0, 0,206, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 60, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48,108,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 64, 10,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,224, 8,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0,128,131, 67, 0, 0,228,194, 0, 0, 0, 0, - 0, 0, 0, 0, 0,128,149, 67, 0,192, 32,196, 0, 0, 0, 0, 43, 1, 0, 0, 60, 1, 0, 0, 18, 0, 0, 0,148, 2, 0, 0, - 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 42, 1, 0, 0, 18, 0, 0, 0,148, 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, 0, 0, 0, 2, 0, 3, 3, - 0, 0, 0, 4, 6, 0, 60, 1,149, 2, 43, 1,131, 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, 59, 1, 0, 0,207, 1, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 60, 1,149, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80,107,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,160, 11,166, 29, 1, 0, 0, 0,167, 0, 0, 0, 1, 0, 0, 0, -240, 20,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,192, 57,201, 20, 1, 0, 0, 0,192, 57,201, 20, 1, 0, 0, 0, -224, 70,161, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,224, 70,161, 29, 1, 0, 0, 0,219, 0, 0, 0, 1, 0, 0, 0, - 13, 0, 0, 0, 13, 0, 0, 0, 0, 13,166, 29, 1, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0, 0, 13,166, 29, 1, 0, 0, 0, -218, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 48,180, 4, 28, 1, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0, - 48,180, 4, 28, 1, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0, 48,180, 4, 28, 1, 0, 0, 0, 21, 0, 1, 0, 1, 0, 1, 0, - 48,180, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,192, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 48,208, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,224, 93,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 48,220, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,224, 91,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 48,214, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,188, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 64, 86,167, 29, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 16, 14,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,112, 15,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,128, 68, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 84, 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,211, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,212, 0, 26, 0,212, 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,211, 0, 0, 0, - 41, 1, 0, 0, 66, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,212, 0, 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, 68, 65, 84, 65, 40, 1, 0, 0, -112, 15,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,208, 16,166, 29, 1, 0, 0, 0, 16, 14,166, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 67, 1, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,182, 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, 68, 65, 84, 65, 40, 1, 0, 0, -208, 16,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 48, 18,166, 29, 1, 0, 0, 0,112, 15,166, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,211, 0, 0, 0, - 67, 1, 0, 0, 67, 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, 68, 65, 84, 65, 40, 1, 0, 0, - 48, 18,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,144, 19,166, 29, 1, 0, 0, 0,208, 16,166, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,211, 0, 0, 0,211, 0, 0, 0, - 67, 1, 0, 0,248, 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, 68, 65, 84, 65, 40, 1, 0, 0, -144, 19,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 18,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,211, 0, 0, 0, - 67, 1, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,212, 0,182, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,120, 4, 28, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, - 48,120, 4, 28, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,121, 92,163, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,190, 35, 30, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,128,111, 18,131,187, 0, 0, 0,128, - 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, 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,121, 92,163, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,190, 35, 30, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 18,131,187, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 15,150, 72, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,149, 53,207, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,121,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,121, 92,163, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,190, 35, 30, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 18,131,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,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,159, 55,242, 61, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, - 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,240, 20,166, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, - 16, 25,166, 29, 1, 0, 0, 0,160, 11,166, 29, 1, 0, 0, 0, 16, 14,166, 29, 1, 0, 0, 0,144, 19,166, 29, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,202, 4, 28, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 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, - 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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, 80, 22,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,176, 23,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,195, 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, 6, 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, 4, 10, 0, 24, 6, - 26, 0, 24, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 23, 6, 0, 0,149, 1, 0, 0,174, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 24, 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, - 68, 65, 84, 65, 40, 1, 0, 0,176, 23,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80, 22,166, 29, 1, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68, 56,205,190,195,156,102, 95, 68, -160,228,244, 64,110, 44,252, 67, 7, 6, 0, 0, 24, 6, 0, 0, 18, 0, 0, 0,106, 2, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 18, 0, 0, 0,106, 2, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,250, 70, 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 24, 6, -107, 2, 7, 6, 89, 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, 23, 6, 0, 0,175, 1, 0, 0, 25, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 24, 6,107, 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, - 68, 65, 84, 65, 32, 1, 0, 0, 16, 25,166, 29, 1, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0,144, 30,166, 29, 1, 0, 0, 0, -240, 20,166, 29, 1, 0, 0, 0, 80, 22,166, 29, 1, 0, 0, 0,176, 23,166, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48,180, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 67, 81, 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, 68, 65, 84, 65, 40, 1, 0, 0, -112, 26,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,208, 27,166, 29, 1, 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,216, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 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, 26, 0, 0, 0, 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,240, 5, 27, 0,240, 5, 27, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, - 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 27, 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, 68, 65, 84, 65, 40, 1, 0, 0, -208, 27,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 48, 29,166, 29, 1, 0, 0, 0,112, 26,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,239, 5, 0, 0, -112, 0, 0, 0, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, - 48, 29,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 27,166, 29, 1, 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,162, 3, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 18, 0, 0, 0,239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 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,240, 5,163, 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,239, 5, 0, 0, -112, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,163, 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, 68, 65, 84, 65,240, 0, 0, 0, -144, 30,166, 29, 1, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0,128, 34,166, 29, 1, 0, 0, 0, 16, 25,166, 29, 1, 0, 0, 0, -112, 26,166, 29, 1, 0, 0, 0, 48, 29,166, 29, 1, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,192, 31,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 32, 33,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 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,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, - 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, - 26, 0,152, 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, 0, 0, 0, 0, - 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, 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, - 68, 65, 84, 65, 40, 1, 0, 0, 32, 33,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, 31,166, 29, 1, 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,151, 4, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 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,152, 4, -122, 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,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, 4,122, 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, - 68, 65, 84, 65,200, 0, 0, 0,128, 34,166, 29, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -144, 30,166, 29, 1, 0, 0, 0,192, 31,166, 29, 1, 0, 0, 0, 32, 33,166, 29, 1, 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, 1, 0, 0, 0, 6, 0, 0, 0, - 83, 78, 0, 0,208, 0, 0, 0, 0, 36,166, 29, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 80,188,166, 29, 1, 0, 0, 0, - 64,127,165, 29, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 37,166, 29, 1, 0, 0, 0,240, 41,166, 29, 1, 0, 0, 0, 80, 42,166, 29, 1, 0, 0, 0, 48, 50,166, 29, 1, 0, 0, 0, -144, 50,166, 29, 1, 0, 0, 0, 80,168,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48,180, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 48, 21, 0, 1, 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, 16, 37,166, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, -112, 37,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,112, 37,166, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,208, 37,166, 29, 1, 0, 0, 0, - 16, 37,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -208, 37,166, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 48, 38,166, 29, 1, 0, 0, 0,112, 37,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 7,128, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 48, 38,166, 29, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,144, 38,166, 29, 1, 0, 0, 0,208, 37,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,144, 38,166, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, -240, 38,166, 29, 1, 0, 0, 0, 48, 38,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 4, 1, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,240, 38,166, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 80, 39,166, 29, 1, 0, 0, 0, -144, 38,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,100, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, - 80, 39,166, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,176, 39,166, 29, 1, 0, 0, 0,240, 38,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240, 5,100, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,176, 39,166, 29, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0, 16, 40,166, 29, 1, 0, 0, 0, 80, 39,166, 29, 1, 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, 16, 40,166, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, -112, 40,166, 29, 1, 0, 0, 0,176, 39,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 1, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,112, 40,166, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,208, 40,166, 29, 1, 0, 0, 0, - 16, 40,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,192, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -208, 40,166, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 48, 41,166, 29, 1, 0, 0, 0,112, 40,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240, 2, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 48, 41,166, 29, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,144, 41,166, 29, 1, 0, 0, 0,208, 40,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240, 2,192, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,144, 41,166, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, -240, 41,166, 29, 1, 0, 0, 0, 48, 41,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 64, 3, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,240, 41,166, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -144, 41,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 64, 3, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 80, 42,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,176, 42,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, 37,166, 29, 1, 0, 0, 0,208, 37,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -176, 42,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 16, 43,166, 29, 1, 0, 0, 0, 80, 42,166, 29, 1, 0, 0, 0, -112, 37,166, 29, 1, 0, 0, 0,144, 38,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 16, 43,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,112, 43,166, 29, 1, 0, 0, 0,176, 42,166, 29, 1, 0, 0, 0, -208, 37,166, 29, 1, 0, 0, 0,240, 38,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -112, 43,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,208, 43,166, 29, 1, 0, 0, 0, 16, 43,166, 29, 1, 0, 0, 0, -144, 38,166, 29, 1, 0, 0, 0,240, 38,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -208, 43,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 48, 44,166, 29, 1, 0, 0, 0,112, 43,166, 29, 1, 0, 0, 0, -240, 38,166, 29, 1, 0, 0, 0, 80, 39,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 48, 44,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,144, 44,166, 29, 1, 0, 0, 0,208, 43,166, 29, 1, 0, 0, 0, -144, 38,166, 29, 1, 0, 0, 0, 80, 39,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -144, 44,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,240, 44,166, 29, 1, 0, 0, 0, 48, 44,166, 29, 1, 0, 0, 0, - 48, 38,166, 29, 1, 0, 0, 0,176, 39,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -240, 44,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 80, 45,166, 29, 1, 0, 0, 0,144, 44,166, 29, 1, 0, 0, 0, - 16, 37,166, 29, 1, 0, 0, 0, 16, 40,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 80, 45,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,176, 45,166, 29, 1, 0, 0, 0,240, 44,166, 29, 1, 0, 0, 0, -144, 38,166, 29, 1, 0, 0, 0, 16, 40,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -176, 45,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 16, 46,166, 29, 1, 0, 0, 0, 80, 45,166, 29, 1, 0, 0, 0, - 80, 39,166, 29, 1, 0, 0, 0,112, 40,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 16, 46,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,112, 46,166, 29, 1, 0, 0, 0,176, 45,166, 29, 1, 0, 0, 0, -176, 39,166, 29, 1, 0, 0, 0,112, 40,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -112, 46,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,208, 46,166, 29, 1, 0, 0, 0, 16, 46,166, 29, 1, 0, 0, 0, - 16, 40,166, 29, 1, 0, 0, 0,112, 40,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -208, 46,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 48, 47,166, 29, 1, 0, 0, 0,112, 46,166, 29, 1, 0, 0, 0, - 16, 37,166, 29, 1, 0, 0, 0,208, 40,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 48, 47,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,144, 47,166, 29, 1, 0, 0, 0,208, 46,166, 29, 1, 0, 0, 0, -176, 39,166, 29, 1, 0, 0, 0,208, 40,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -144, 47,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,240, 47,166, 29, 1, 0, 0, 0, 48, 47,166, 29, 1, 0, 0, 0, - 16, 40,166, 29, 1, 0, 0, 0, 48, 41,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -240, 47,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 80, 48,166, 29, 1, 0, 0, 0,144, 47,166, 29, 1, 0, 0, 0, -112, 40,166, 29, 1, 0, 0, 0, 48, 41,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 80, 48,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,176, 48,166, 29, 1, 0, 0, 0,240, 47,166, 29, 1, 0, 0, 0, -208, 40,166, 29, 1, 0, 0, 0, 48, 41,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -176, 48,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 16, 49,166, 29, 1, 0, 0, 0, 80, 48,166, 29, 1, 0, 0, 0, -176, 39,166, 29, 1, 0, 0, 0,144, 41,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 16, 49,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,112, 49,166, 29, 1, 0, 0, 0,176, 48,166, 29, 1, 0, 0, 0, - 80, 39,166, 29, 1, 0, 0, 0,144, 41,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -112, 49,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,208, 49,166, 29, 1, 0, 0, 0, 16, 49,166, 29, 1, 0, 0, 0, -240, 38,166, 29, 1, 0, 0, 0,240, 41,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -208, 49,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 48, 50,166, 29, 1, 0, 0, 0,112, 49,166, 29, 1, 0, 0, 0, - 48, 38,166, 29, 1, 0, 0, 0,240, 41,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 48, 50,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 49,166, 29, 1, 0, 0, 0, -144, 41,166, 29, 1, 0, 0, 0,240, 41,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, -144, 50,166, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 48, 54,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -144, 38,166, 29, 1, 0, 0, 0,112, 37,166, 29, 1, 0, 0, 0,208, 37,166, 29, 1, 0, 0, 0,240, 38,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,101, 4, 0, 0,128, 4, 0, 0, 7, 7,129, 7, 28, 0, 1, 0, - 0, 0, 0, 0, 7, 0, 0, 0,208,144,217, 2, 1, 0, 0, 0,208,187,166, 29, 1, 0, 0, 0,208,187,166, 29, 1, 0, 0, 0, -112, 51,166, 29, 1, 0, 0, 0,208, 52,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80,144,140, 27, 1, 0, 0, 0,208,252,201, 20, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,112, 51,166, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0,208, 52,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,162, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,240, 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,128, 7, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,129, 7, 26, 0,129, 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, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,101, 4, 0, 0,126, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,144,146,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,208, 52,166, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 51,166, 29, 1, 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, 0, 63, 0, 0, 0, 64, - 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 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, 0, 0, 0, 0,128, 7, 0, 0,127, 4, 0, 0,128, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,176,145,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 48, 54,166, 29, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0, 32, 84,166, 29, 1, 0, 0, 0,144, 50,166, 29, 1, 0, 0, 0,176, 39,166, 29, 1, 0, 0, 0, -144, 41,166, 29, 1, 0, 0, 0,240, 41,166, 29, 1, 0, 0, 0, 48, 38,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -241, 5, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 63, 3, 0, 0, 4, 4,144, 1, 64, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 64,141,217, 2, 1, 0, 0, 0,112, 73,166, 29, 1, 0, 0, 0,192, 82,166, 29, 1, 0, 0, 0, 16, 55,166, 29, 1, 0, 0, 0, -112, 56,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,108,141, 27, 1, 0, 0, 0, -192,123,164, 29, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16, 55,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, -112, 56,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0,200, 67, 0, 0, 0, 0, 0, 0,248, 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,143, 1, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, - 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,144, 1, 31, 0,144, 1, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,128, 7, 0, 0, 33, 3, 0, 0, 63, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,144, 1, 31, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240,143,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,112, 56,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16, 55,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 67, 0, 64, 68,196, 0, 0, 0, 0, - 0, 0, 0, 0,255,127,191, 67,255,191, 67,196, 0, 0, 0, 0,127, 1, 0, 0,144, 1, 0, 0, 18, 0, 0, 0, 32, 3, 0, 0, - 0, 0, 0, 0,126, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,126, 1, 0, 0, 18, 0, 0, 0, 32, 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, 4, 6, 0,144, 1, 33, 3,127, 1, 15, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,152,162, 21, 1, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 32, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,144, 1, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 32,142,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 57,166, 29, 1, 0, 0, 0, -224, 71,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,208, 57,166, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, - 96, 59,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143,217, 2, 1, 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,126, 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, - 96, 59,166, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,240, 60,166, 29, 1, 0, 0, 0,208, 57,166, 29, 1, 0, 0, 0, - 32,198, 17, 27, 1, 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,126, 1, 61, 0, 0, 0, 0, 0, 0, 0, 6, 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,240, 60,166, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, -128, 62,166, 29, 1, 0, 0, 0, 96, 59,166, 29, 1, 0, 0, 0, 0,200, 17, 27, 1, 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,126, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 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, -128, 62,166, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 16, 64,166, 29, 1, 0, 0, 0,240, 60,166, 29, 1, 0, 0, 0, - 96,202, 17, 27, 1, 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,126, 1,203, 0, 0, 0, 0, 0, 0, 0, 6, 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, 16, 64,166, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, -160, 65,166, 29, 1, 0, 0, 0,128, 62,166, 29, 1, 0, 0, 0,192,204, 17, 27, 1, 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,126, 1, 58, 0, 20, 0, 0, 0, 0, 0, 6, 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, -160, 65,166, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 48, 67,166, 29, 1, 0, 0, 0, 16, 64,166, 29, 1, 0, 0, 0, - 32,207, 17, 27, 1, 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,188,253,126, 1,102, 0, 0, 0, 0, 0, 0, 0, 6, 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, 48, 67,166, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, -192, 68,166, 29, 1, 0, 0, 0,160, 65,166, 29, 1, 0, 0, 0,128,209, 17, 27, 1, 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, 59,253,126, 1,105, 0, 0, 0, 0, 0, 0, 0, 6, 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, -192, 68,166, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 80, 70,166, 29, 1, 0, 0, 0, 48, 67,166, 29, 1, 0, 0, 0, - 16,142, 17, 27, 1, 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, 35,253,126, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 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, 80, 70,166, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, -224, 71,166, 29, 1, 0, 0, 0,192, 68,166, 29, 1, 0, 0, 0, 48,215, 17, 27, 1, 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, 11,253,126, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 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, -224, 71,166, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 70,166, 29, 1, 0, 0, 0, -144,217, 17, 27, 1, 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,243,252,126, 1, 0, 0, 20, 0, 0, 0, 4, 0, 7, 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, 0, 1, 0, 0,112, 73,166, 29, 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, -208, 78,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 0, 1, 0, 0, 0, 0, 0,160,108,160, 21, 1, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,176, 74,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 16, 76,166, 29, 1, 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,216, 65, 0, 0, 0, 0, 0, 0,242, 67, - 0, 0, 0, 0, 0, 0,216, 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,227, 1, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0,128,241, 67, 0, 0,208, 65, - 0,128,241, 67, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,228, 1, - 27, 0,228, 1, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -157, 5, 0, 0,128, 7, 0, 0, 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -228, 1, 27, 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, - 68, 65, 84, 65, 40, 1, 0, 0, 16, 76,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,112, 77,166, 29, 1, 0, 0, 0, -176, 74,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 0, 0,128, 7, 0, 0,112, 0, 0, 0,235, 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, - 68, 65, 84, 65, 40, 1, 0, 0,112, 77,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 76,166, 29, 1, 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,123, 1, 0, 0, 18, 0, 0, 0,227, 1, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,227, 1, 0, 0, 18, 0, 0, 0,123, 1, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, - 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,228, 1, -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, -157, 5, 0, 0,128, 7, 0, 0,112, 0, 0, 0,235, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -228, 1,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,208, 78,166, 29, 1, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0,192, 82,166, 29, 1, 0, 0, 0, -112, 73,166, 29, 1, 0, 0, 0,176, 74,166, 29, 1, 0, 0, 0,112, 77,166, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,128, 64, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0, 80,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 96, 81,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0,138, 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, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 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, 0, 0, 0, 0, 89, 6, 0, 0,108, 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, 20, 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, 68, 65, 84, 65, 40, 1, 0, 0, 96, 81,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 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, - 48,124, 4, 28, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48,124, 4, 28, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, -103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, - 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, 32,193, 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, 32, 65, 0, 0,128, 63, -103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65, -237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, - 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, 32,193, 0, 0,128, 63, -103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 1, 0, 0, -192, 82,166, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 78,166, 29, 1, 0, 0, 0, - 0, 80,166, 29, 1, 0, 0, 0, 96, 81,166, 29, 1, 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, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 7, 0, 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, - 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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, 32, 84,166, 29, 1, 0, 0, 0, -195, 0, 0, 0, 1, 0, 0, 0,176,113,166, 29, 1, 0, 0, 0, 48, 54,166, 29, 1, 0, 0, 0,208, 40,166, 29, 1, 0, 0, 0, - 48, 41,166, 29, 1, 0, 0, 0,112, 40,166, 29, 1, 0, 0, 0,176, 39,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -241, 2, 0, 0,239, 5, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 18, 18,255, 2,192, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176,185,217, 2, 1, 0, 0, 0,192, 87,166, 29, 1, 0, 0, 0,176,112,166, 29, 1, 0, 0, 0, 0, 85,166, 29, 1, 0, 0, 0, - 96, 86,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,148,140, 27, 1, 0, 0, 0, - 16, 25,162, 21, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0, 85,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 96, 86,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0,192, 63, 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,254, 2, 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, 4, 10, 0,255, 2, 26, 0,255, 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, 0, 0, 0, 0,241, 2, 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,255, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112,187,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 96, 86,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 85,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 68, 0, 0, 0, 0, 0, 0, 51, 67, - 0, 0, 0, 0, 0,128, 59, 68, 0, 0, 0, 0, 0, 0,211, 67,238, 2, 0, 0,255, 2, 0, 0, 0, 0, 0, 0,165, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,237, 2, 0, 0, 0, 0, 0, 0,165, 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, 0, 0, 0, 1, 0, 3, 3, - 2, 0, 0, 4, 10, 0,255, 2,166, 1,238, 2,166, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,241, 2, 0, 0,239, 5, 0, 0, 26, 0, 0, 0,191, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,255, 2,166, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -144,186,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,136, 1, 0, 0,192, 87,166, 29, 1, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, - 48,128, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 18, 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, 4, 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,144, 42,200, 20, 1, 0, 0, 0, -144, 42,200, 20, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,128, 89,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, -224, 90,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,251, 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, 4, 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, 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, 68, 65, 84, 65, 40, 1, 0, 0,224, 90,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 89,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0,224,189, 68, 0, 0, 0, 0, 0,128,192, 67, - 0, 6,188, 63,254,176,189, 68, 0, 0, 0, 0, 0,128,192, 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,239, 5, 0, 0, 0, 0, 0, 0,129, 1, 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,240, 5,130, 1,240, 5,130, 1, 0, 0, 0, 0, 0, 0, 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, 26, 0, 0, 0,155, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240, 5,130, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0, 48,128, 4, 28, 1, 0, 0, 0,170, 0, 0, 0, 1, 0, 0, 0, - 0, 95,166, 29, 1, 0, 0, 0,192, 87,166, 29, 1, 0, 0, 0,128, 89,166, 29, 1, 0, 0, 0,224, 90,166, 29, 1, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 64, 92,166, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0,160, 93,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, - 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, 4, 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, 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, 68, 65, 84, 65, 40, 1, 0, 0,160, 93,166, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 92,166, 29, 1, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, - 0, 0, 32,193, 0, 0, 0, 68,134,137,182,195,195, 68, 91, 68, 30,222,207, 66,116, 8,204, 67,223, 5, 0, 0,240, 5, 0, 0, - 18, 0, 0, 0,129, 1, 0, 0, 0, 0, 0, 0,222, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,222, 5, 0, 0, - 18, 0, 0, 0,129, 1, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, - 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0,240, 5,130, 1,223, 5,112, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 26, 0, 0, 0,155, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,130, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 95,166, 29, 1, 0, 0, 0, -174, 0, 0, 0, 1, 0, 0, 0,128,100,166, 29, 1, 0, 0, 0, 48,128, 4, 28, 1, 0, 0, 0, 64, 92,166, 29, 1, 0, 0, 0, -160, 93,166, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,180, 4, 28, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 52, 81, 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, 68, 65, 84, 65, 40, 1, 0, 0, 96, 96,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, -192, 97,166, 29, 1, 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,216, 65, - 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 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, 26, 0, 0, 0, - 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,240, 5, 27, 0,240, 5, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 27, 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, 68, 65, 84, 65, 40, 1, 0, 0,192, 97,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 32, 99,166, 29, 1, 0, 0, 0, 96, 96,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,239, 5, 0, 0,112, 0, 0, 0, 18, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 32, 99,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,192, 97,166, 29, 1, 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,162, 3, 0, 0, - 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, - 0, 0, 32, 65, 0, 0,128, 64, 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,240, 5,163, 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,239, 5, 0, 0,112, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240, 5,163, 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, 68, 65, 84, 65,240, 0, 0, 0,128,100,166, 29, 1, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0, -144,108,166, 29, 1, 0, 0, 0, 0, 95,166, 29, 1, 0, 0, 0, 96, 96,166, 29, 1, 0, 0, 0, 32, 99,166, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176,101,166, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 16,103,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,157, 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,231, 4, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,232, 4, 26, 0,232, 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, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0,225, 1, 0, 0,250, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 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, 68, 65, 84, 65, 40, 1, 0, 0, 16,103,166, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0,112,104,166, 29, 1, 0, 0, 0,176,101,166, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,153, 2, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 24, 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, 68, 65, 84, 65, 40, 1, 0, 0,112,104,166, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0,208,105,166, 29, 1, 0, 0, 0, 16,103,166, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0,251, 1, 0, 0,251, 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, 68, 65, 84, 65, 40, 1, 0, 0,208,105,166, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 48,107,166, 29, 1, 0, 0, 0,112,104,166, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,128, 7, 0, 0,251, 1, 0, 0, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 48,107,166, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,105,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 4, 24, 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, 48,132, 4, 28, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48,132, 4, 28, 1, 0, 0, 0, -157, 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,165, 7, 36, 64, - 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,128, 0, 0, 0,128, -226,215,163,188, 0, 0, 0,128, 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,180,157,229, 62,169,203,131,191,222,160, 81,191,184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, - 9, 46,185, 62, 35, 44,185, 62,147,180,109,188,102,208, 18, 64,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,128, 32,182, 69,129, 32,190,250,186,154, 61, -170,205,178, 62, 0, 64, 1, 53,215,104, 25,196,135,132,135, 67, 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68,160, 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,180,157,229, 62,169,203,131,191,222,160, 81,191,184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, - 9, 46,185, 62, 35, 44,185, 62,147,180,109,188,102,208, 18, 64,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, 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,218,210,190, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,144,108,166, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0,176,112,166, 29, 1, 0, 0, 0, -128,100,166, 29, 1, 0, 0, 0,176,101,166, 29, 1, 0, 0, 0, 48,107,166, 29, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, - 0, 0, 0, 0, 1, 0, 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, - 0, 0, 0, 0, 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, -240,109,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 80,111,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 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,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 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, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, -101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 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, 68, 65, 84, 65, 40, 1, 0, 0, - 80,111,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109,166, 29, 1, 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,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 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,152, 4,122, 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,151, 4, 0, 0, -127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65,200, 0, 0, 0, -176,112,166, 29, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,108,166, 29, 1, 0, 0, 0, -240,109,166, 29, 1, 0, 0, 0, 80,111,166, 29, 1, 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, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, -176,113,166, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,192,138,166, 29, 1, 0, 0, 0, 32, 84,166, 29, 1, 0, 0, 0, - 16, 40,166, 29, 1, 0, 0, 0,144, 38,166, 29, 1, 0, 0, 0, 80, 39,166, 29, 1, 0, 0, 0,112, 40,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0,193, 1, 0, 0, 99, 4, 0, 0, 9, 9,240, 5,163, 2, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48,175,217, 2, 1, 0, 0, 0, 48,136, 4, 28, 1, 0, 0, 0,192,137,166, 29, 1, 0, 0, 0, -144,114,166, 29, 1, 0, 0, 0,240,115,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -224,157,140, 27, 1, 0, 0, 0, 32,164,140, 27, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144,114,166, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0,240,115,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209, 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, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0,193, 1, 0, 0,218, 1, 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,208,177,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,240,115,166, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,114,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0,224,189, 68, - 0, 0, 0, 0, 0,192, 22, 68,168, 86,234, 67, 86, 74,131, 68,133, 83, 49, 67, 62,214,212, 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,239, 5, 0, 0, - 0, 0, 0, 0,136, 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,240, 5,137, 2,240, 5,137, 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,239, 5, 0, 0,219, 1, 0, 0, 99, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,137, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16,176,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0, 48,136, 4, 28, 1, 0, 0, 0, -170, 0, 0, 0, 1, 0, 0, 0, 16,120,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, - 80,117,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,176,118,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,128, 37, 68, 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, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, -157, 1, 0, 0,182, 1, 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, 68, 65, 84, 65, 40, 1, 0, 0, -176,118,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,117,166, 29, 1, 0, 0, 0, - 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68,132,137,182,195,194, 68, 91, 68,112,158, 93, 65, 8, 19,249, 67, -223, 5, 0, 0,240, 5, 0, 0, 18, 0, 0, 0, 91, 2, 0, 0, 0, 0, 0, 0,222, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0,222, 5, 0, 0, 18, 0, 0, 0, 91, 2, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70, -205,204, 76, 62, 72,225,154, 63, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0,240, 5, 92, 2,223, 5, 74, 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,239, 5, 0, 0, -183, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 92, 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, 68, 65, 84, 65, 32, 1, 0, 0, - 16,120,166, 29, 1, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0,144,125,166, 29, 1, 0, 0, 0, 48,136, 4, 28, 1, 0, 0, 0, - 80,117,166, 29, 1, 0, 0, 0,176,118,166, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48,180, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 52, 81, 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, 68, 65, 84, 65, 40, 1, 0, 0,112,121,166, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0,208,122,166, 29, 1, 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,216, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 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, 26, 0, 0, 0, 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,240, 5, 27, 0,240, 5, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 85, 0, 0, 0,111, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 27, 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, 68, 65, 84, 65, 40, 1, 0, 0,208,122,166, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 48,124,166, 29, 1, 0, 0, 0,112,121,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,239, 5, 0, 0,112, 0, 0, 0, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 48,124,166, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,122,166, 29, 1, 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,162, 3, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, - 18, 0, 0, 0,162, 3, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 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,240, 5,163, 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,239, 5, 0, 0,112, 0, 0, 0, 18, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,163, 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, 68, 65, 84, 65,240, 0, 0, 0,144,125,166, 29, 1, 0, 0, 0, -164, 0, 0, 0, 1, 0, 0, 0,160,133,166, 29, 1, 0, 0, 0, 16,120,166, 29, 1, 0, 0, 0,112,121,166, 29, 1, 0, 0, 0, - 48,124,166, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -192,126,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 32,128,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,157, 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,231, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,232, 4, 26, 0,232, 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, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0, -225, 1, 0, 0,250, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 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, 68, 65, 84, 65, 40, 1, 0, 0, - 32,128,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,128,129,166, 29, 1, 0, 0, 0,192,126,166, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,153, 2, 0, 0, -251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 24, 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, 68, 65, 84, 65, 40, 1, 0, 0, -128,129,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,224,130,166, 29, 1, 0, 0, 0, 32,128,166, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0, -251, 1, 0, 0,251, 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, 68, 65, 84, 65, 40, 1, 0, 0, -224,130,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 64,132,166, 29, 1, 0, 0, 0,128,129,166, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,128, 7, 0, 0, -251, 1, 0, 0, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, - 64,132,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,130,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0, -251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 4, 24, 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, 48,140, 4, 28, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, - 48,140, 4, 28, 1, 0, 0, 0,157, 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,165, 7, 36, 64, 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,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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,180,157,229, 62,169,203,131,191,222,160, 81,191,184,158, 81,191, -118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, 35, 44,185, 62,147,180,109,188,102,208, 18, 64,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,128, 32,182, - 69,129, 32,190,250,186,154, 61,170,205,178, 62, 0, 64, 1, 53,215,104, 25,196,135,132,135, 67, 37, 9,167,195,136,252, 71,194, - 3, 54, 25, 68,160, 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,180,157,229, 62,169,203,131,191,222,160, 81,191,184,158, 81,191, -118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, 35, 44,185, 62,147,180,109,188,102,208, 18, 64,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, 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,218,210,190, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,160,133,166, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, -192,137,166, 29, 1, 0, 0, 0,144,125,166, 29, 1, 0, 0, 0,192,126,166, 29, 1, 0, 0, 0, 64,132,166, 29, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,202, 4, 28, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 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, - 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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, 0,135,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 96,136,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 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,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, - 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, - 26, 0,152, 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, 0, 0, 0, 0, - 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, 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, - 68, 65, 84, 65, 40, 1, 0, 0, 96,136,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,135,166, 29, 1, 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,151, 4, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 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,152, 4, -122, 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,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, 4,122, 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, - 68, 65, 84, 65,200, 0, 0, 0,192,137,166, 29, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -160,133,166, 29, 1, 0, 0, 0, 0,135,166, 29, 1, 0, 0, 0, 96,136,166, 29, 1, 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, 1, 0, 0, 0, 6, 0, 0, 0, - 68, 65, 84, 65,160, 0, 0, 0,192,138,166, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 80,168,166, 29, 1, 0, 0, 0, -176,113,166, 29, 1, 0, 0, 0, 16, 37,166, 29, 1, 0, 0, 0, 16, 40,166, 29, 1, 0, 0, 0, 48, 41,166, 29, 1, 0, 0, 0, -208, 40,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 2, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, - 18, 18,240, 2,192, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,185,217, 2, 1, 0, 0, 0, 96,142,166, 29, 1, 0, 0, 0, - 80,167,166, 29, 1, 0, 0, 0,160,139,166, 29, 1, 0, 0, 0, 0,141,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 96,151,162, 21, 1, 0, 0, 0, 80, 11,200, 20, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -160,139,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0,141,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,128,231, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 60, 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, 2, 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, 4, 10, 0,240, 2, 26, 0,240, 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, 0, 0, 0, 0, 0, 0, 0, 0,239, 2, 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, 2, 26, 0, 0, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,187,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, - 0,141,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,139,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0,192, 59, 68, 0, 0, 0, 0, 0, 0, 51, 67, 0, 0, 0, 0, 0,192, 55, 68, 0, 0, 0, 0, 0, 0,211, 67, -223, 2, 0, 0,240, 2, 0, 0, 0, 0, 0, 0,165, 1, 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, 0, 0, 0, 0,165, 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, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,240, 2,166, 1,223, 2,166, 1, 0, 0, - 0, 0, 0, 0, 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, 2, 0, 0, - 26, 0, 0, 0,191, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 2,166, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,186,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,136, 1, 0, 0, - 96,142,166, 29, 1, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, 48,144, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 4, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0,224,107,160, 21, 1, 0, 0, 0, -240, 71,200, 20, 1, 0, 0, 0,176,104,160, 21, 1, 0, 0, 0,176,104,160, 21, 1, 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, 68, 65, 84, 65, 40, 1, 0, 0, - 32,144,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,128,145,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,128,251, 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, 4, 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, 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, 68, 65, 84, 65, 40, 1, 0, 0, -128,145,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,144,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0,224,189, 68, 0, 0, 0, 0, 0,128,192, 67, 0, 6,188, 63,254,176,189, 68, 0, 0, 0, 0, 0,128,192, 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,239, 5, 0, 0, 0, 0, 0, 0,129, 1, 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,240, 5,130, 1,240, 5,130, 1, 0, 0, - 0, 0, 0, 0, 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, - 26, 0, 0, 0,155, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,130, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 2, 0, 0, - 48,144, 4, 28, 1, 0, 0, 0,170, 0, 0, 0, 1, 0, 0, 0,160,149,166, 29, 1, 0, 0, 0, 96,142,166, 29, 1, 0, 0, 0, - 32,144,166, 29, 1, 0, 0, 0,128,145,166, 29, 1, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,224,146,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 64,148,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, 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, 4, 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, 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, - 68, 65, 84, 65, 40, 1, 0, 0, 64,148,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -224,146,166, 29, 1, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68,134,137,182,195,195, 68, 91, 68, - 30,222,207, 66,116, 8,204, 67,223, 5, 0, 0,240, 5, 0, 0, 18, 0, 0, 0,129, 1, 0, 0, 0, 0, 0, 0,222, 5, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,222, 5, 0, 0, 18, 0, 0, 0,129, 1, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,250, 70, 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0,240, 5, -130, 1,223, 5,112, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,239, 5, 0, 0, 26, 0, 0, 0,155, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240, 5,130, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,160,149,166, 29, 1, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0, 32,155,166, 29, 1, 0, 0, 0, - 48,144, 4, 28, 1, 0, 0, 0,224,146,166, 29, 1, 0, 0, 0, 64,148,166, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48,180, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 52, 81, 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, 68, 65, 84, 65, 40, 1, 0, 0, - 0,151,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 96,152,166, 29, 1, 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,216, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 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, 26, 0, 0, 0, 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,240, 5, 27, 0,240, 5, 27, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, - 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 27, 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, 68, 65, 84, 65, 40, 1, 0, 0, - 96,152,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,192,153,166, 29, 1, 0, 0, 0, 0,151,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,239, 5, 0, 0, -112, 0, 0, 0, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, -192,153,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,152,166, 29, 1, 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,162, 3, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 18, 0, 0, 0,239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 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,240, 5,163, 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,239, 5, 0, 0, -112, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,163, 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, 68, 65, 84, 65,240, 0, 0, 0, - 32,155,166, 29, 1, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0, 48,163,166, 29, 1, 0, 0, 0,160,149,166, 29, 1, 0, 0, 0, - 0,151,166, 29, 1, 0, 0, 0,192,153,166, 29, 1, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 80,156,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,176,157,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,157, 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,231, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, - 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,232, 4, - 26, 0,232, 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, 0, 0, 0, 0, -153, 2, 0, 0,128, 7, 0, 0,225, 1, 0, 0,250, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -232, 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, - 68, 65, 84, 65, 40, 1, 0, 0,176,157,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 16,159,166, 29, 1, 0, 0, 0, - 80,156,166, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, -153, 2, 0, 0,153, 2, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 24, 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, - 68, 65, 84, 65, 40, 1, 0, 0, 16,159,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,112,160,166, 29, 1, 0, 0, 0, -176,157,166, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, -153, 2, 0, 0,128, 7, 0, 0,251, 1, 0, 0,251, 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, - 68, 65, 84, 65, 40, 1, 0, 0,112,160,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,208,161,166, 29, 1, 0, 0, 0, - 16,159,166, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, -128, 7, 0, 0,128, 7, 0, 0,251, 1, 0, 0, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,208,161,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112,160,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, 2, 0, 0,128, 7, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -232, 4, 24, 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, 48,148, 4, 28, 1, 0, 0, 0, - 68, 65, 84, 65, 88, 3, 0, 0, 48,148, 4, 28, 1, 0, 0, 0,157, 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,165, 7, 36, 64, 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,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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,180,157,229, 62,169,203,131,191, -222,160, 81,191,184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, 35, 44,185, 62,147,180,109,188,102,208, 18, 64, -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,128, 32,182, 69,129, 32,190,250,186,154, 61,170,205,178, 62, 0, 64, 1, 53,215,104, 25,196,135,132,135, 67, - 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68,160, 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,180,157,229, 62,169,203,131,191, -222,160, 81,191,184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, 35, 44,185, 62,147,180,109,188,102,208, 18, 64, -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, 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,218,210,190, 58, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 48,163,166, 29, 1, 0, 0, 0, -158, 0, 0, 0, 1, 0, 0, 0, 80,167,166, 29, 1, 0, 0, 0, 32,155,166, 29, 1, 0, 0, 0, 80,156,166, 29, 1, 0, 0, 0, -208,161,166, 29, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, - 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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,144,164,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, -240,165,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0,147, 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,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 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, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,152, 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, 68, 65, 84, 65, 40, 1, 0, 0,240,165,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,144,164,166, 29, 1, 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,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 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,152, 4,122, 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,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65,200, 0, 0, 0, 80,167,166, 29, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48,163,166, 29, 1, 0, 0, 0,144,164,166, 29, 1, 0, 0, 0,240,165,166, 29, 1, 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, - 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 80,168,166, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,192,138,166, 29, 1, 0, 0, 0,144, 41,166, 29, 1, 0, 0, 0, 80, 39,166, 29, 1, 0, 0, 0, -240, 38,166, 29, 1, 0, 0, 0,240, 41,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,128, 7, 0, 0, - 65, 3, 0, 0, 99, 4, 0, 0, 3, 3,144, 1, 35, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,106,217, 2, 1, 0, 0, 0, -240,171,166, 29, 1, 0, 0, 0,112,186,166, 29, 1, 0, 0, 0, 48,169,166, 29, 1, 0, 0, 0,144,170,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,151,162, 21, 1, 0, 0, 0,176,251,201, 20, 1, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 48,169,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,144,170,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,163, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,200, 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,143, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,149, 67, 0, 0,200, 65, - 0,128,149, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,144, 1, - 26, 0,144, 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, 0, 0, 0, 0, -241, 5, 0, 0,128, 7, 0, 0, 65, 3, 0, 0, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -144, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,108,217, 2, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,144,170,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48,169,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0,128,131, 67, 0, 0,228,194, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,191, 67, - 0, 0,119,195, 0, 0, 0, 0,127, 1, 0, 0,144, 1, 0, 0, 18, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0,126, 1, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,126, 1, 0, 0, 18, 0, 0, 0, 8, 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, 18, 0, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0,144, 1, - 9, 1,127, 1,247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -241, 5, 0, 0,128, 7, 0, 0, 91, 3, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -144, 1, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,107,217, 2, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,240,171,166, 29, 1, 0, 0, 0,167, 0, 0, 0, 1, 0, 0, 0, 32,177,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,112,195,200, 20, 1, 0, 0, 0,112,195,200, 20, 1, 0, 0, 0,112, 61,160, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,224,219,131, 29, 1, 0, 0, 0,158, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,215,131, 29, 1, 0, 0, 0, 32,217,131, 29, 1, 0, 0, 0,128,218,131, 29, + 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48, 68,132, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,112, 61,160, 29, 1, 0, 0, 0,219, 0, 0, 0, 1, 0, 0, 0, 13, 0, 0, 0, 13, 0, 0, 0, - 80,173,166, 29, 1, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0, 80,173,166, 29, 1, 0, 0, 0,218, 0, 0, 0, 13, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 48,180, 4, 28, 1, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0, 48,180, 4, 28, 1, 0, 0, 0, - 20, 0, 0, 0, 1, 0, 1, 0, 48,180, 4, 28, 1, 0, 0, 0, 21, 0, 1, 0, 1, 0, 1, 0, 48,180, 4, 28, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 48,192, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,208, 4, 28, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0,224, 93,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,220, 4, 28, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0,224, 91,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,214, 4, 28, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 48,188, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,202, 4, 28, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 64, 86,167, 29, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 96,174,166, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0,192,175,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,150, 67, 0, 0, 0, 0, 0, 0,248, 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, 43, 1, 0, 0, - 0, 0, 0, 0, 30, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 44, 1, 31, 0, 44, 1, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,117, 4, 0, 0,160, 5, 0, 0,218, 2, 0, 0,248, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 1, 31, 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, 68, 65, 84, 65, 40, 1, 0, 0,192,175,166, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,174,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0,128,141, 67, - 0, 0, 62,196, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,141, 67, 0, 0,246,194, 0, 0, 0, 0, 27, 1, 0, 0, 44, 1, 0, 0, - 18, 0, 0, 0,140, 0, 0, 0, 0, 0, 0, 0, 26, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 26, 1, 0, 0, - 18, 0, 0, 0,140, 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, 44, 1,141, 0, 27, 1,123, 0, 0, 0, 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, 4, 0, 0,160, 5, 0, 0, 77, 2, 0, 0,217, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 1,141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0, 32,177,166, 29, 1, 0, 0, 0, -163, 0, 0, 0, 1, 0, 0, 0,128,182,166, 29, 1, 0, 0, 0,240,171,166, 29, 1, 0, 0, 0, 96,174,166, 29, 1, 0, 0, 0, -192,175,166, 29, 1, 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, 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, 68, 65, 84, 65, 40, 1, 0, 0, 96,178,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, -192,179,166, 29, 1, 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,216, 65, - 0, 0, 0, 0, 0, 0,242, 67, 0, 0, 0, 0, 0, 0,216, 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,227, 1, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, - 0,128,241, 67, 0, 0,208, 65, 0,128,241, 67, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,228, 1, 27, 0,228, 1, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,157, 5, 0, 0,128, 7, 0, 0, 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,228, 1, 27, 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, 68, 65, 84, 65, 40, 1, 0, 0,192,179,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 32,181,166, 29, 1, 0, 0, 0, 96,178,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 0, 0,128, 7, 0, 0,112, 0, 0, 0,235, 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, 68, 65, 84, 65, 40, 1, 0, 0, 32,181,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,192,179,166, 29, 1, 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,123, 1, 0, 0, - 18, 0, 0, 0,227, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,227, 1, 0, 0, 18, 0, 0, 0,123, 1, 0, 0, - 0, 0, 32, 65, 0, 0,128, 64, 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,228, 1,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,157, 5, 0, 0,128, 7, 0, 0,112, 0, 0, 0,235, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,228, 1,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,128,182,166, 29, 1, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0, -112,186,166, 29, 1, 0, 0, 0, 32,177,166, 29, 1, 0, 0, 0, 96,178,166, 29, 1, 0, 0, 0, 32,181,166, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176,183,166, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 16,185,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 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, 19, 1, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 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, 0, 0, 0, 0, 89, 6, 0, 0,108, 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, 20, 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, 68, 65, 84, 65, 40, 1, 0, 0, 16,185,166, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,183,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 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, 48,152, 4, 28, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48,152, 4, 28, 1, 0, 0, 0, -157, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128, -226,215,163,188, 0, 0, 0,128, 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, 32,193, 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, 32, 65, 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, -184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, - 98,127,249, 67,129,255, 71, 66, 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, 32,193, 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, -184,175, 31, 65, 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, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,112,186,166, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128,182,166, 29, 1, 0, 0, 0,176,183,166, 29, 1, 0, 0, 0, 16,185,166, 29, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, -159, 0, 0, 0, 1, 0, 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, - 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,208, 0, 0, 0, - 80,188,166, 29, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 0,247,166, 29, 1, 0, 0, 0, 0, 36,166, 29, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,189,166, 29, 1, 0, 0, 0, - 0,192,166, 29, 1, 0, 0, 0, 96,192,166, 29, 1, 0, 0, 0, 32,196,166, 29, 1, 0, 0, 0,128,196,166, 29, 1, 0, 0, 0, -144,219,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,180, 4, 28, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,232, 48, 21, 0, 1, 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, 96,189,166, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,192,189,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -192,189,166, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 32,190,166, 29, 1, 0, 0, 0, 96,189,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 32,190,166, 29, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,128,190,166, 29, 1, 0, 0, 0,192,189,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, 7,128, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,128,190,166, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, -224,190,166, 29, 1, 0, 0, 0, 32,190,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,224,190,166, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 64,191,166, 29, 1, 0, 0, 0, -128,190,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, - 64,191,166, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,160,191,166, 29, 1, 0, 0, 0,224,190,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 7,100, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,160,191,166, 29, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0, 0,192,166, 29, 1, 0, 0, 0, 64,191,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, 3,100, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 0,192,166, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,160,191,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,196, 3, 0, 0, 1, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 96,192,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,192,192,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,192,189,166, 29, 1, 0, 0, 0, 32,190,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,192,192,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 32,193,166, 29, 1, 0, 0, 0, - 96,192,166, 29, 1, 0, 0, 0,192,189,166, 29, 1, 0, 0, 0,224,190,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 32,193,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,128,193,166, 29, 1, 0, 0, 0, -192,192,166, 29, 1, 0, 0, 0, 32,190,166, 29, 1, 0, 0, 0, 64,191,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,128,193,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,224,193,166, 29, 1, 0, 0, 0, - 32,193,166, 29, 1, 0, 0, 0,224,190,166, 29, 1, 0, 0, 0, 64,191,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,224,193,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 64,194,166, 29, 1, 0, 0, 0, -128,193,166, 29, 1, 0, 0, 0,224,190,166, 29, 1, 0, 0, 0,160,191,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 64,194,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,160,194,166, 29, 1, 0, 0, 0, -224,193,166, 29, 1, 0, 0, 0, 96,189,166, 29, 1, 0, 0, 0, 0,192,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,160,194,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0,195,166, 29, 1, 0, 0, 0, - 64,194,166, 29, 1, 0, 0, 0, 96,189,166, 29, 1, 0, 0, 0,224,190,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 0,195,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 96,195,166, 29, 1, 0, 0, 0, -160,194,166, 29, 1, 0, 0, 0,160,191,166, 29, 1, 0, 0, 0, 0,192,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 96,195,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,192,195,166, 29, 1, 0, 0, 0, - 0,195,166, 29, 1, 0, 0, 0, 64,191,166, 29, 1, 0, 0, 0,160,191,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,192,195,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 32,196,166, 29, 1, 0, 0, 0, - 96,195,166, 29, 1, 0, 0, 0,128,190,166, 29, 1, 0, 0, 0, 0,192,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 32,196,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192,195,166, 29, 1, 0, 0, 0,128,190,166, 29, 1, 0, 0, 0, 64,191,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,160, 0, 0, 0,128,196,166, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 32,200,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,224,190,166, 29, 1, 0, 0, 0,192,189,166, 29, 1, 0, 0, 0, 32,190,166, 29, 1, 0, 0, 0, - 64,191,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,101, 4, 0, 0,128, 4, 0, 0, - 7, 7,129, 7, 28, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0,208,144,217, 2, 1, 0, 0, 0,128,246,166, 29, 1, 0, 0, 0, -128,246,166, 29, 1, 0, 0, 0, 96,197,166, 29, 1, 0, 0, 0,192,198,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 32,145,214, 2, 1, 0, 0, 0,192, 34,200, 20, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 96,197,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,192,198,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,224,162, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,240, 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,128, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,129, 7, 26, 0,129, 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, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, -101, 4, 0, 0,126, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 26, 0, 0, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,146,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, -192,198,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,197,166, 29, 1, 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, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 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, 0, 0, 0, 0,128, 7, 0, 0, -127, 4, 0, 0,128, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 2, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,145,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, - 32,200,166, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,144,219,166, 29, 1, 0, 0, 0,128,196,166, 29, 1, 0, 0, 0, - 96,189,166, 29, 1, 0, 0, 0,224,190,166, 29, 1, 0, 0, 0,160,191,166, 29, 1, 0, 0, 0, 0,192,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 3, 0, 0, 0, 0, 0, 0, 99, 4, 0, 0, 6, 6,196, 3,100, 4, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0,208,128,217, 2, 1, 0, 0, 0,176,206,166, 29, 1, 0, 0, 0,144,218,166, 29, 1, 0, 0, 0, - 0,201,166, 29, 1, 0, 0, 0, 80,205,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, 9,163, 29, 1, 0, 0, 0, 32,102,164, 21, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0,201,166, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 96,202,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,202, 67, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,113, 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,195, 3, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 41, 68, 0, 0,200, 65, 0,192, 41, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,196, 3, 26, 0,196, 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, 0, 0, 0, 0, 0, 0, 0, 0,195, 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,196, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 64,134,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 96,202,166, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 80,205,166, 29, 1, 0, 0, 0, 0,201,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 67, - 0,224,134,196, 0, 0, 0, 0, 0, 0, 0, 0,254,255, 74, 67,255,255,134,196, 0, 0, 0, 0,203, 0, 0, 0,220, 0, 0, 0, - 18, 0, 0, 0, 73, 4, 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, - 18, 0, 0, 0, 73, 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, 4, 6, 0,220, 0, 74, 4,203, 0, 56, 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,219, 0, 0, 0, 26, 0, 0, 0, 99, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0, 74, 4, 0, 0, 4, 0, 3, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,144,130,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192,203,166, 29, 1, 0, 0, 0,192,203,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,192,203,166, 29, 1, 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, 80,133,217, 2, 1, 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,196,255,202, 0, 36, 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, 80,205,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96,202,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67,154,153, 41,191,205,204,212, 63, -154,153,155,191,205,204, 13, 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,232, 2, 0, 0, 0, 0, 0, 0, 74, 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, -220, 0, 0, 0,195, 3, 0, 0, 26, 0, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -232, 2, 74, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,129,217, 2, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,168, 0, 0, 0,176,206,166, 29, 1, 0, 0, 0,168, 0, 0, 0, 1, 0, 0, 0,112,214,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,100, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,180, 4, 28, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,144,207,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,240,208,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 42, 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,167, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, - 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,168, 2, - 26, 0,168, 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, 0, 0, 0, 0, - 0, 0, 0, 0,167, 2, 0, 0, 85, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, 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, - 68, 65, 84, 65, 40, 1, 0, 0,240,208,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 80,210,166, 29, 1, 0, 0, 0, -144,207,166, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0,164, 3, 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, - 68, 65, 84, 65, 40, 1, 0, 0, 80,210,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,176,211,166, 29, 1, 0, 0, 0, -240,208,166, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,167, 2, 0, 0,111, 0, 0, 0,111, 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, - 68, 65, 84, 65, 40, 1, 0, 0,176,211,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 16,213,166, 29, 1, 0, 0, 0, - 80,210,166, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, -167, 2, 0, 0,167, 2, 0, 0,111, 0, 0, 0, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 16,213,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176,211,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,167, 2, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, 2,164, 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, 48,156, 4, 28, 1, 0, 0, 0, - 68, 65, 84, 65, 88, 3, 0, 0, 48,156, 4, 28, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,226,225,191, 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, - 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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,192, 90, 29, 63,208,249,224,190, -222,160, 81,191,184,158, 81,191,253,253,174, 63,140,225, 88, 62, 9, 46,185, 62, 35, 44,185, 62,232,229,162,188,206,156,122, 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,250, 8,140, 62,174,189, 27, 63, -224, 25, 17,188, 0, 64,153,181,195, 13,188,190,191, 73, 53, 62, 99,126, 81, 63, 0,128,163, 53,215,104, 25,196,134,132,135, 67, - 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68,159, 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,192, 90, 29, 63,208,249,224,190, -222,160, 81,191,184,158, 81,191,253,253,174, 63,140,225, 88, 62, 9, 46,185, 62, 35, 44,185, 62,232,229,162,188,206,156,122, 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, 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,172,148, 0, 59, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,112,214,166, 29, 1, 0, 0, 0, -158, 0, 0, 0, 1, 0, 0, 0,144,218,166, 29, 1, 0, 0, 0,176,206,166, 29, 1, 0, 0, 0,144,207,166, 29, 1, 0, 0, 0, - 16,213,166, 29, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, - 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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,208,215,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 48,217,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0,147, 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,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 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, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,152, 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, 68, 65, 84, 65, 40, 1, 0, 0, 48,217,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,208,215,166, 29, 1, 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,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 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,152, 4,122, 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,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65,200, 0, 0, 0,144,218,166, 29, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,112,214,166, 29, 1, 0, 0, 0,208,215,166, 29, 1, 0, 0, 0, 48,217,166, 29, 1, 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, - 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,144,219,166, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 32,200,166, 29, 1, 0, 0, 0, 0,192,166, 29, 1, 0, 0, 0,160,191,166, 29, 1, 0, 0, 0, - 64,191,166, 29, 1, 0, 0, 0,128,190,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,197, 3, 0, 0,128, 7, 0, 0, - 0, 0, 0, 0, 99, 4, 0, 0, 1, 1,188, 3,100, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,111,217, 2, 1, 0, 0, 0, - 96,241,166, 29, 1, 0, 0, 0,128,245,166, 29, 1, 0, 0, 0,112,220,166, 29, 1, 0, 0, 0, 0,240,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,249,201, 20, 1, 0, 0, 0,112, 1,162, 29, 1, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,112,220,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,208,221,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,102, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,111, 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,187, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, - 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,188, 3, - 26, 0,188, 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, 0, 0, 0, 0, -197, 3, 0, 0,128, 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, -188, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,119,217, 2, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,208,221,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 80,226,166, 29, 1, 0, 0, 0, -112,220,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0,112,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, - 0, 0,112,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,209, 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,209, 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, 4, 6, 0,160, 0, -210, 3,143, 0,192, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, 3, 0, 0,100, 4, 0, 0,146, 0, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -160, 0,210, 3, 0, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,116,217, 2, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,223,166, 29, 1, 0, 0, 0,192,224,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0, 48,223,166, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,192,224,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16,117,217, 2, 1, 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, 95,115,104,101,108,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, - 84, 95,116,111,111,108, 95,115,104,101,108,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,111,111,108, 32, 83,104,101, -108,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,196,255,143, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,192,224,166, 29, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,223,166, 29, 1, 0, 0, 0,144, 38, 21, 27, 1, 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, 7,254,143, 0,165, 1, 0, 0, 0, 0, 0, 0, 7, 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, 40, 1, 0, 0, 80,226,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 64,229,166, 29, 1, 0, 0, 0, -208,221,166, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, -197, 3, 0, 0,100, 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,118,217, 2, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,227,166, 29, 1, 0, 0, 0,176,227,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 88, 1, 0, 0,176,227,166, 29, 1, 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,224,118,217, 2, 1, 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, 97,121,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,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, 64,229,166, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0,240,166, 29, 1, 0, 0, 0, 80,226,166, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,128, 7, 0, 0, 26, 0, 0, 0, 99, 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, - 1, 0, 0, 0, 0, 0, 0, 0,112,113,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -160,230,166, 29, 1, 0, 0, 0,112,238,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,160,230,166, 29, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0, 48,232,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,111, 98,106,101, 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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,111, 98,106,101, 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, 84,114, 97,110,115,102,111,114,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122,254,163, 0,110, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 48,232,166, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,192,233,166, 29, 1, 0, 0, 0, -160,230,166, 29, 1, 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,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, 86, 73, 69, 87, 51, 68, 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, 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, 40,254,163, 0, 58, 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,192,233,166, 29, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0, 80,235,166, 29, 1, 0, 0, 0, 48,232,166, 29, 1, 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, 51,100,118,105,101,119, 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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, 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, 86,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,213,252,163, 0, 59, 1, 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, 88, 1, 0, 0, 80,235,166, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,224,236,166, 29, 1, 0, 0, 0, -192,233,166, 29, 1, 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, 51,100,118,105,101,119, 95,100,105,115,112,108, 97,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, 86, 73, 69, 87, 51, 68, 95, 80, - 84, 95, 51,100,118,105,101,119, 95,100,105,115,112,108, 97,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, 68,105,115,112,108, 97,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,189,252,163, 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,224,236,166, 29, 1, 0, 0, 0, -194, 0, 0, 0, 1, 0, 0, 0,112,238,166, 29, 1, 0, 0, 0, 80,235,166, 29, 1, 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, 98, 97, 99,107,103,114,111,117,110,100, 95,105,109, 97, -103,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, 98, 97, 99,107,103,114,111,117,110,100, 95,105,109, 97, -103,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, 66, 97, 99,107,103,114,111,117,110,100, 32, 73,109, 97,103,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,165,252,163, 0, 0, 0, 20, 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,112,238,166, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -224,236,166, 29, 1, 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,114, 97,110,115,102,111,114,109, 95,111,114,105,101,110,116, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, - 84, 95,116,114, 97,110,115,102,111,114,109, 95,111,114,105,101,110,116, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114, -109, 32, 79,114,105,101,110,116, 97,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,141,252,163, 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, 40, 1, 0, 0, 0,240,166, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,229,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,101, 4, 0, 0,128, 7, 0, 0, 26, 0, 0, 0, 99, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 3, 74, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,144,112,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48,160, 4, 28, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48,160, 4, 28, 1, 0, 0, 0, -157, 0, 0, 0, 1, 0, 0, 0,151, 29,193, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,139, 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,128, 0, 0, 0,128, - 74,215, 76,190, 0, 0, 0,128, 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,166, 93, 30, 63,206,249,224,190, 48,180, 81,191,184,158, 81,191,232, 29,176, 63,139,225, 88, 62, - 26, 63,185, 62, 35, 44,185, 62,237,241,163,188,204,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,227, 37,139, 62,171,190, 26, 63,112, 12, 16,188, 0, 0, 64, 51,195, 15,188,190,131, 75, 53, 62, -218,125, 81, 63, 0, 0,160,179,115, 77,100,193, 16,173,201, 64,182,148,248,192,203,247,159,192,233, 74, 87, 65,246, 46,190,192, - 89,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,166, 93, 30, 63,206,249,224,190, 48,180, 81,191,184,158, 81,191,232, 29,176, 63,139,225, 88, 62, - 26, 63,185, 62, 35, 44,185, 62,237,241,163,188,204,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, 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,104, 72,218, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 96,241,166, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0,128,245,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,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, 16, 0, 0, 0, 7, 0, 10, 0, - 0, 0, 0, 0, 1, 0, 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, - 0, 0, 0, 0, 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, -192,242,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 32,244,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 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,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 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, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, -101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 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, 68, 65, 84, 65, 40, 1, 0, 0, - 32,244,166, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,242,166, 29, 1, 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,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 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,152, 4,122, 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,151, 4, 0, 0, -127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65,200, 0, 0, 0, -128,245,166, 29, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,241,166, 29, 1, 0, 0, 0, -192,242,166, 29, 1, 0, 0, 0, 32,244,166, 29, 1, 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, 1, 0, 0, 0, 6, 0, 0, 0, 83, 78, 0, 0,208, 0, 0, 0, - 0,247,166, 29, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,188,166, 29, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,248,166, 29, 1, 0, 0, 0, - 48,252,166, 29, 1, 0, 0, 0,144,252,166, 29, 1, 0, 0, 0,240, 2,167, 29, 1, 0, 0, 0, 80, 3,167, 29, 1, 0, 0, 0, - 48, 64,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,180, 4, 28, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,232, 48, 21, 0, 1, 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, 16,248,166, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,112,248,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -112,248,166, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,208,248,166, 29, 1, 0, 0, 0, 16,248,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,208,248,166, 29, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0, 48,249,166, 29, 1, 0, 0, 0,112,248,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, 7,128, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 48,249,166, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, -144,249,166, 29, 1, 0, 0, 0,208,248,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,144,249,166, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,240,249,166, 29, 1, 0, 0, 0, - 48,249,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -240,249,166, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 80,250,166, 29, 1, 0, 0, 0,144,249,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 7,100, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 80,250,166, 29, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0,176,250,166, 29, 1, 0, 0, 0,240,249,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, 7, 24, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,176,250,166, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, - 16,251,166, 29, 1, 0, 0, 0, 80,250,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 16,251,166, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,112,251,166, 29, 1, 0, 0, 0, -176,250,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 3,100, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -112,251,166, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,208,251,166, 29, 1, 0, 0, 0, 16,251,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,208,251,166, 29, 1, 0, 0, 0, -192, 0, 0, 0, 1, 0, 0, 0, 48,252,166, 29, 1, 0, 0, 0,112,251,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80, 3, 24, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 48,252,166, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,208,251,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,100, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,144,252,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,240,252,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,112,248,166, 29, 1, 0, 0, 0,208,248,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,240,252,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 80,253,166, 29, 1, 0, 0, 0, -144,252,166, 29, 1, 0, 0, 0,112,248,166, 29, 1, 0, 0, 0,144,249,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 80,253,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,176,253,166, 29, 1, 0, 0, 0, -240,252,166, 29, 1, 0, 0, 0,208,248,166, 29, 1, 0, 0, 0,240,249,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,176,253,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 16,254,166, 29, 1, 0, 0, 0, - 80,253,166, 29, 1, 0, 0, 0,144,249,166, 29, 1, 0, 0, 0,240,249,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 16,254,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,112,254,166, 29, 1, 0, 0, 0, -176,253,166, 29, 1, 0, 0, 0,240,249,166, 29, 1, 0, 0, 0, 80,250,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,112,254,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,208,254,166, 29, 1, 0, 0, 0, - 16,254,166, 29, 1, 0, 0, 0, 16,248,166, 29, 1, 0, 0, 0,176,250,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,208,254,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 48,255,166, 29, 1, 0, 0, 0, -112,254,166, 29, 1, 0, 0, 0,144,249,166, 29, 1, 0, 0, 0, 16,251,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 48,255,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,144,255,166, 29, 1, 0, 0, 0, -208,254,166, 29, 1, 0, 0, 0,176,250,166, 29, 1, 0, 0, 0,112,251,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,144,255,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,240,255,166, 29, 1, 0, 0, 0, - 48,255,166, 29, 1, 0, 0, 0,112,251,166, 29, 1, 0, 0, 0,208,251,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,240,255,166, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 80, 0,167, 29, 1, 0, 0, 0, -144,255,166, 29, 1, 0, 0, 0, 16,251,166, 29, 1, 0, 0, 0,208,251,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 80, 0,167, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,176, 0,167, 29, 1, 0, 0, 0, -240,255,166, 29, 1, 0, 0, 0, 80,250,166, 29, 1, 0, 0, 0, 48,252,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,176, 0,167, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 16, 1,167, 29, 1, 0, 0, 0, - 80, 0,167, 29, 1, 0, 0, 0, 48,249,166, 29, 1, 0, 0, 0, 48,252,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 16, 1,167, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,112, 1,167, 29, 1, 0, 0, 0, -176, 0,167, 29, 1, 0, 0, 0,176,250,166, 29, 1, 0, 0, 0, 48,252,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,112, 1,167, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,208, 1,167, 29, 1, 0, 0, 0, - 16, 1,167, 29, 1, 0, 0, 0, 16,248,166, 29, 1, 0, 0, 0, 48,249,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,208, 1,167, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 48, 2,167, 29, 1, 0, 0, 0, -112, 1,167, 29, 1, 0, 0, 0,240,249,166, 29, 1, 0, 0, 0, 16,251,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 48, 2,167, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,144, 2,167, 29, 1, 0, 0, 0, -208, 1,167, 29, 1, 0, 0, 0, 80,250,166, 29, 1, 0, 0, 0,208,251,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,144, 2,167, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,240, 2,167, 29, 1, 0, 0, 0, - 48, 2,167, 29, 1, 0, 0, 0,144,249,166, 29, 1, 0, 0, 0,112,251,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,240, 2,167, 29, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -144, 2,167, 29, 1, 0, 0, 0, 80,250,166, 29, 1, 0, 0, 0,112,251,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,160, 0, 0, 0, 80, 3,167, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,240, 6,167, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,144,249,166, 29, 1, 0, 0, 0,112,248,166, 29, 1, 0, 0, 0,208,248,166, 29, 1, 0, 0, 0, -240,249,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,101, 4, 0, 0,128, 4, 0, 0, - 7, 7,129, 7, 28, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0,208,144,217, 2, 1, 0, 0, 0, 96, 82,167, 29, 1, 0, 0, 0, - 96, 82,167, 29, 1, 0, 0, 0, 48, 4,167, 29, 1, 0, 0, 0,144, 5,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128,146,140, 27, 1, 0, 0, 0,176,248,201, 20, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 48, 4,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,144, 5,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,224,162, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,240, 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,128, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,129, 7, 26, 0,129, 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, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, -101, 4, 0, 0,126, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 26, 0, 0, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,146,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, -144, 5,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 4,167, 29, 1, 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, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 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, 0, 0, 0, 0,128, 7, 0, 0, -127, 4, 0, 0,128, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 2, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,145,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, -240, 6,167, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,176, 15,167, 29, 1, 0, 0, 0, 80, 3,167, 29, 1, 0, 0, 0, - 16,248,166, 29, 1, 0, 0, 0,176,250,166, 29, 1, 0, 0, 0, 48,252,166, 29, 1, 0, 0, 0, 48,249,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 15, 15,129, 7,100, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16,109,217, 2, 1, 0, 0, 0,144, 10,167, 29, 1, 0, 0, 0, 80, 14,167, 29, 1, 0, 0, 0, -208, 7,167, 29, 1, 0, 0, 0, 48, 9,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -224,141,162, 21, 1, 0, 0, 0,176, 73,202, 20, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,208, 7,167, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 48, 9,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,136, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,240, 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,128, 7, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,129, 7, 26, 0,129, 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, 0, 0, 0, 0, 0, 0, 0, 0,128, 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,129, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,208,110,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 48, 9,167, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 7,167, 29, 1, 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,128, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, - 18, 0, 0, 0, 73, 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,129, 7, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 0, 0, 26, 0, 0, 0, 99, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240,109,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,200, 0, 0, 0,144, 10,167, 29, 1, 0, 0, 0, -173, 0, 0, 0, 1, 0, 0, 0, 80, 14,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144, 11,167, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0,240, 12,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,203, 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, 87, 6, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 88, 6, 26, 0, 88, 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, 0, 0, 0, 0, 0, 0, 0, 0, 87, 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, 88, 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, 68, 65, 84, 65, 40, 1, 0, 0,240, 12,167, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 11,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 6, 0, 0, 26, 0, 0, 0, 55, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 6, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48,164, 4, 28, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48,164, 4, 28, 1, 0, 0, 0, -157, 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, 87,213,108, 66, - 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,128, 0, 0, 0,128, -226,215,163,188, 0, 0, 0,128, 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, 32,193, 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, 32, 65, 0, 0,128, 63, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, - 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, -184,175, 31, 65, 0, 0, 32, 65,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 91,138, 60, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, - 98,127,249, 67,129,255, 71, 66, 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, 32,193, 0, 0,128, 63, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, - 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, -184,175, 31, 65, 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, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 52,149,147, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 80, 14,167, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -144, 10,167, 29, 1, 0, 0, 0,144, 11,167, 29, 1, 0, 0, 0,240, 12,167, 29, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, -159, 0, 0, 0, 1, 0, 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, - 0, 0, 0, 0, 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, -176, 15,167, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,224, 33,167, 29, 1, 0, 0, 0,240, 6,167, 29, 1, 0, 0, 0, -176,250,166, 29, 1, 0, 0, 0,112,251,166, 29, 1, 0, 0, 0, 80,250,166, 29, 1, 0, 0, 0, 48,252,166, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,101, 0, 0, 0, 23, 2, 0, 0, 8, 8,129, 7,179, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0,176,178,217, 2, 1, 0, 0, 0,176, 20,167, 29, 1, 0, 0, 0,224, 32,167, 29, 1, 0, 0, 0, -144, 16,167, 29, 1, 0, 0, 0, 80, 19,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, 67,201, 20, 1, 0, 0, 0,240,172,140, 27, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,144, 16,167, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0,240, 17,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 38, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,240, 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,128, 7, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0, 96,191, 68, 0, 0,200, 65, 0, 96,191, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,129, 7, 26, 0,129, 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, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,101, 0, 0, 0,126, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80,181,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,240, 17,167, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 80, 19,167, 29, 1, 0, 0, 0,144, 16,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, - 0,128,195,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, 0,128,195,195, 0, 0, 0, 0,203, 0, 0, 0,220, 0, 0, 0, - 18, 0, 0, 0,152, 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, - 18, 0, 0, 0,152, 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, 4, 6, 0,220, 0,153, 1,203, 0,135, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,165, 6, 0, 0,128, 7, 0, 0,127, 0, 0, 0, 23, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0,153, 1, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,112,180,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 80, 19,167, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 17,167, 29, 1, 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,152, 1, 0, 0, 18, 0, 0, 0,164, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,164, 6, 0, 0, - 18, 0, 0, 0,152, 1, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 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,165, 6,153, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,164, 6, 0, 0,127, 0, 0, 0, 23, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,165, 6,153, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,144,179,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,176, 20,167, 29, 1, 0, 0, 0, -164, 0, 0, 0, 1, 0, 0, 0,192, 28,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -224, 21,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 64, 23,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,191, 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,251, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,252, 5, 26, 0,252, 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, 0, 0, 0, 0, 0, 0, 0, 0,251, 5, 0, 0, - 85, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252, 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, 68, 65, 84, 65, 40, 1, 0, 0, - 64, 23,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,160, 24,167, 29, 1, 0, 0, 0,224, 21,167, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, 0, 0, 0,223, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,113, 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, 68, 65, 84, 65, 40, 1, 0, 0, -160, 24,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 26,167, 29, 1, 0, 0, 0, 64, 23,167, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251, 5, 0, 0, -111, 0, 0, 0,111, 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, 68, 65, 84, 65, 40, 1, 0, 0, - 0, 26,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 96, 27,167, 29, 1, 0, 0, 0,160, 24,167, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,251, 5, 0, 0,251, 5, 0, 0, -111, 0, 0, 0,223, 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, 68, 65, 84, 65, 40, 1, 0, 0, - 96, 27,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26,167, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251, 5, 0, 0, -111, 0, 0, 0,223, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252, 5,113, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,168, 4, 28, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, - 48,168, 4, 28, 1, 0, 0, 0,157, 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, 79,145, 64, 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,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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,241,130,233,191,222,160, 81,191,184,158, 81,191, -117, 90,127, 63, 14, 28, 97, 63, 9, 46,185, 62, 35, 44,185, 62,145,180,109,188,119, 15,130, 64,129, 63,228,190, 42, 61,228,190, - 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65,112,240,191, 62,108,116, 85, 63, 80,184, 70,188, 0, 0, 46,180, -159, 49,181,189,125,172, 46, 61, 7,213, 73, 62, 0, 64,143,180,182,107, 25,196, 13,135,135, 67, 70, 12,167,195, 71, 0, 72,194, -225, 56, 25, 68, 38, 90,135,195,237,212,166, 67, 84, 2, 72, 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,241,130,233,191,222,160, 81,191,184,158, 81,191, -117, 90,127, 63, 14, 28, 97, 63, 9, 46,185, 62, 35, 44,185, 62,145,180,109,188,119, 15,130, 64,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, 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, 13,114,156, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,192, 28,167, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, -224, 32,167, 29, 1, 0, 0, 0,176, 20,167, 29, 1, 0, 0, 0,224, 21,167, 29, 1, 0, 0, 0, 96, 27,167, 29, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48,202, 4, 28, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 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, - 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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, 32, 30,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,128, 31,167, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 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,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, - 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, - 26, 0,152, 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, 0, 0, 0, 0, - 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, 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, - 68, 65, 84, 65, 40, 1, 0, 0,128, 31,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 32, 30,167, 29, 1, 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,151, 4, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 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,152, 4, -122, 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,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, 4,122, 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, - 68, 65, 84, 65,200, 0, 0, 0,224, 32,167, 29, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, 28,167, 29, 1, 0, 0, 0, 32, 30,167, 29, 1, 0, 0, 0,128, 31,167, 29, 1, 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, 1, 0, 0, 0, 6, 0, 0, 0, - 68, 65, 84, 65,160, 0, 0, 0,224, 33,167, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 48, 64,167, 29, 1, 0, 0, 0, -176, 15,167, 29, 1, 0, 0, 0,112,251,166, 29, 1, 0, 0, 0,144,249,166, 29, 1, 0, 0, 0, 16,251,166, 29, 1, 0, 0, 0, -208,251,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 3, 0, 0, 25, 2, 0, 0, 99, 4, 0, 0, - 2, 2, 80, 3, 75, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,120,217, 2, 1, 0, 0, 0, 64, 40,167, 29, 1, 0, 0, 0, - 48, 63,167, 29, 1, 0, 0, 0,192, 34,167, 29, 1, 0, 0, 0,224, 38,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,224, 99,160, 21, 1, 0, 0, 0,208, 47,202, 20, 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -192, 34,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 32, 36,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,128, 83, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 84, 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, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,103, 68, 0, 0,200, 65, 0,192,103, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 80, 3, 26, 0, 80, 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, 0, 0, 0, 0, 0, 0, 0, 0, 79, 3, 0, 0, - 25, 2, 0, 0, 50, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 3, 26, 0, 0, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,122,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, - 32, 36,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,128, 37,167, 29, 1, 0, 0, 0,192, 34,167, 29, 1, 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,192, 7,196, 0, 0, 0, 0, -200, 0, 0, 0,217, 0, 0, 0, 18, 0, 0, 0, 48, 2, 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, 48, 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, 10, 0, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0,217, 0, 49, 2,200, 0, 31, 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,216, 0, 0, 0, - 51, 2, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,217, 0, 49, 2, 0, 0, 2, 0, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,123,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, -128, 37,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,224, 38,167, 29, 1, 0, 0, 0, 32, 36,167, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 3, 0, 0, 79, 3, 0, 0, - 51, 2, 0, 0, 99, 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, 1, 0, 0, 0, 0, 0, 0, 0, 48,124,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, -224, 38,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37,167, 29, 1, 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, 48, 2, 0, 0, 18, 0, 0, 0,118, 2, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 18, 0, 0, 0,118, 2, 0, 0, 18, 0, 0, 0, 48, 2, 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,119, 2, 49, 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,217, 0, 0, 0, 79, 3, 0, 0, - 51, 2, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,119, 2, 49, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,121,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, - 64, 40,167, 29, 1, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0,240, 45,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, 41,167, 29, 1, 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, 68, 65, 84, 65, 32, 0, 0, 0,112, 41,167, 29, 1, 0, 0, 0, 21, 1, 0, 0, 1, 0, 0, 0, - 48,180, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,208, 41,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 48, 43,167, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 38, 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,151, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,103, 68, 0, 0,200, 65, - 0,192,103, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 2, - 26, 0,152, 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, 0, 0, 0, 0, - 0, 0, 0, 0,151, 2, 0, 0,225, 1, 0, 0,250, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, 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, - 68, 65, 84, 65, 40, 1, 0, 0, 48, 43,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,144, 44,167, 29, 1, 0, 0, 0, -208, 41,167, 29, 1, 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, 53, 67, - 0,128, 4,196, 0, 0, 64,193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,180, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0, 23, 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, 8, 0, 0, 0, 2, 0, 3, 3, 0, 0, 2, 4, 6, 0,181, 0, - 24, 2,181, 0, 6, 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,180, 0, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -181, 0, 24, 2, 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, - 68, 65, 84, 65, 40, 1, 0, 0,144, 44,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 43,167, 29, 1, 0, 0, 0, 0, 0, 32,193, 0, 0,104, 68, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,104, 68, - 0,128, 4,196, 0, 0, 64,193,210, 1, 0, 0,227, 1, 0, 0, 18, 0, 0, 0, 23, 2, 0, 0, 0, 0, 0, 0,209, 1, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,209, 1, 0, 0, 18, 0, 0, 0, 23, 2, 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,227, 1, - 24, 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, -181, 0, 0, 0,151, 2, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -227, 1, 24, 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, - 68, 65, 84, 65, 8, 1, 0, 0,240, 45,167, 29, 1, 0, 0, 0, 22, 1, 0, 0, 1, 0, 0, 0, 80, 51,167, 29, 1, 0, 0, 0, - 64, 40,167, 29, 1, 0, 0, 0,208, 41,167, 29, 1, 0, 0, 0,144, 44,167, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 48,180, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 48, 47,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,144, 48,167, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,202, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,104, 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,159, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 41, 68, 0, 0,200, 65, - 0,192, 41, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,160, 3, - 26, 0,160, 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, 0, 0, 0, 0, - 0, 0, 0, 0,159, 3, 0, 0, 85, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -160, 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, - 68, 65, 84, 65, 40, 1, 0, 0,144, 48,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,240, 49,167, 29, 1, 0, 0, 0, - 48, 47,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 67, 0,128,100,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 67, - 0,128,100,196, 0, 0, 0, 0,172, 0, 0, 0,189, 0, 0, 0, 18, 0, 0, 0,163, 3, 0, 0, 0, 0, 0, 0,171, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,171, 0, 0, 0, 18, 0, 0, 0,163, 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,189, 0, -164, 3,172, 0,146, 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,111, 0, 0, 0, 18, 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, 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, - 68, 65, 84, 65, 40, 1, 0, 0,240, 49,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -144, 48,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67, 0, 0,168,191, 0, 0, 20, 64, - 0, 0,169,191, 0,128, 20, 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,160, 3, 0, 0, 0, 0, 0, 0,164, 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,159, 3, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -160, 3,164, 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, - 68, 65, 84, 65,168, 0, 0, 0, 80, 51,167, 29, 1, 0, 0, 0,168, 0, 0, 0, 1, 0, 0, 0, 16, 59,167, 29, 1, 0, 0, 0, -240, 45,167, 29, 1, 0, 0, 0, 48, 47,167, 29, 1, 0, 0, 0,240, 49,167, 29, 1, 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,100, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 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,128, 63, 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, 48, 52,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,144, 53,167, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 42, 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,167, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, - 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,168, 2, - 26, 0,168, 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, 0, 0, 0, 0, - 0, 0, 0, 0,167, 2, 0, 0, 85, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, 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, - 68, 65, 84, 65, 40, 1, 0, 0,144, 53,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,240, 54,167, 29, 1, 0, 0, 0, - 48, 52,167, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0,164, 3, 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, - 68, 65, 84, 65, 40, 1, 0, 0,240, 54,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 80, 56,167, 29, 1, 0, 0, 0, -144, 53,167, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,167, 2, 0, 0,111, 0, 0, 0,111, 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, - 68, 65, 84, 65, 40, 1, 0, 0, 80, 56,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,176, 57,167, 29, 1, 0, 0, 0, -240, 54,167, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, -167, 2, 0, 0,167, 2, 0, 0,111, 0, 0, 0, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,176, 57,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80, 56,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,167, 2, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, 2,164, 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, 48,172, 4, 28, 1, 0, 0, 0, - 68, 65, 84, 65, 88, 3, 0, 0, 48,172, 4, 28, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,226,225,191, 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, - 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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,192, 90, 29, 63,208,249,224,190, -222,160, 81,191,184,158, 81,191,253,253,174, 63,140,225, 88, 62, 9, 46,185, 62, 35, 44,185, 62,232,229,162,188,206,156,122, 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,250, 8,140, 62,174,189, 27, 63, -224, 25, 17,188, 0, 64,153,181,195, 13,188,190,191, 73, 53, 62, 99,126, 81, 63, 0,128,163, 53,215,104, 25,196,134,132,135, 67, - 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68,159, 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,192, 90, 29, 63,208,249,224,190, -222,160, 81,191,184,158, 81,191,253,253,174, 63,140,225, 88, 62, 9, 46,185, 62, 35, 44,185, 62,232,229,162,188,206,156,122, 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, 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,172,148, 0, 59, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 16, 59,167, 29, 1, 0, 0, 0, -158, 0, 0, 0, 1, 0, 0, 0, 48, 63,167, 29, 1, 0, 0, 0, 80, 51,167, 29, 1, 0, 0, 0, 48, 52,167, 29, 1, 0, 0, 0, -176, 57,167, 29, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, - 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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,112, 60,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, -208, 61,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0,147, 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,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 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, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,152, 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, 68, 65, 84, 65, 40, 1, 0, 0,208, 61,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,112, 60,167, 29, 1, 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,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 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,152, 4,122, 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,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65,200, 0, 0, 0, 48, 63,167, 29, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16, 59,167, 29, 1, 0, 0, 0,112, 60,167, 29, 1, 0, 0, 0,208, 61,167, 29, 1, 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, - 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 48, 64,167, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,224, 33,167, 29, 1, 0, 0, 0,208,251,166, 29, 1, 0, 0, 0, 16,251,166, 29, 1, 0, 0, 0, -240,249,166, 29, 1, 0, 0, 0, 80,250,166, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 3, 0, 0,128, 7, 0, 0, - 25, 2, 0, 0, 99, 4, 0, 0, 8, 8, 48, 4, 75, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,178,217, 2, 1, 0, 0, 0, - 48, 69,167, 29, 1, 0, 0, 0, 96, 81,167, 29, 1, 0, 0, 0, 16, 65,167, 29, 1, 0, 0, 0,208, 67,167, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,110,160, 21, 1, 0, 0, 0, 48, 43,201, 20, 1, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 16, 65,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,112, 66,167, 29, 1, 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,135, 68, - 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, 55, 4, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0,224,156, 68, 0, 0,200, 65, - 0,224,156, 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, 56, 4, - 24, 0, 56, 4, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 81, 3, 0, 0,128, 7, 0, 0, 25, 2, 0, 0, 25, 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, 1, 0, 0, 0, 0, 0, 0, 0, 80,181,217, 2, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,112, 66,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,208, 67,167, 29, 1, 0, 0, 0, - 16, 65,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 0, 0,128, 7, 0, 0, 25, 2, 0, 0, 99, 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, 1, 0, 0, 0, 0, 0, 0, 0,112,180,217, 2, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,208, 67,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, 66,167, 29, 1, 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, 74, 2, 0, 0, 18, 0, 0, 0, 47, 4, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 47, 4, 0, 0, 18, 0, 0, 0, 74, 2, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, - 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, 48, 4, - 75, 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, - 81, 3, 0, 0,128, 7, 0, 0, 25, 2, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 4, 75, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,179,217, 2, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 48, 69,167, 29, 1, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0, 64, 77,167, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 96, 70,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, -192, 71,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0,157, 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,231, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 4, 10, 0,232, 4, 26, 0,232, 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, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0,225, 1, 0, 0,250, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,232, 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, 68, 65, 84, 65, 40, 1, 0, 0,192, 71,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 32, 73,167, 29, 1, 0, 0, 0, 96, 70,167, 29, 1, 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, - 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,153, 2, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 24, 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, 68, 65, 84, 65, 40, 1, 0, 0, 32, 73,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, -128, 74,167, 29, 1, 0, 0, 0,192, 71,167, 29, 1, 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, - 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0,251, 1, 0, 0,251, 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, 68, 65, 84, 65, 40, 1, 0, 0,128, 74,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, -224, 75,167, 29, 1, 0, 0, 0, 32, 73,167, 29, 1, 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, - 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,128, 7, 0, 0,251, 1, 0, 0, 18, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,224, 75,167, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 74,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,232, 4, 24, 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, - 48,176, 4, 28, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48,176, 4, 28, 1, 0, 0, 0,157, 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,165, 7, 36, 64, 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,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, - 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, -180,157,229, 62,169,203,131,191,222,160, 81,191,184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, 35, 44,185, 62, -147,180,109,188,102,208, 18, 64,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,128, 32,182, 69,129, 32,190,250,186,154, 61,170,205,178, 62, 0, 64, 1, 53, -215,104, 25,196,135,132,135, 67, 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68,160, 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, -180,157,229, 62,169,203,131,191,222,160, 81,191,184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, 35, 44,185, 62, -147,180,109,188,102,208, 18, 64,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, - 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, -218,210,190, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 1, 0, 0, - 64, 77,167, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 96, 81,167, 29, 1, 0, 0, 0, 48, 69,167, 29, 1, 0, 0, 0, - 96, 70,167, 29, 1, 0, 0, 0,224, 75,167, 29, 1, 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, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 7, 0, 48,202, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, - 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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,160, 78,167, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 80,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 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,151, 4, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 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, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 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, 68, 65, 84, 65, 40, 1, 0, 0, 0, 80,167, 29, 1, 0, 0, 0, -196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 78,167, 29, 1, 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,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, - 18, 0, 0, 0,121, 2, 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,152, 4,122, 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,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65,200, 0, 0, 0, 96, 81,167, 29, 1, 0, 0, 0, -173, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 77,167, 29, 1, 0, 0, 0,160, 78,167, 29, 1, 0, 0, 0, - 0, 80,167, 29, 1, 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, 1, 0, 0, 0, 6, 0, 0, 0, 83, 67, 0, 0, 40, 6, 0, 0, 48,180, 4, 28, 1, 0, 0, 0, -155, 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, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,202, 4, 28, 1, 0, 0, 0, - 48,192, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 82,167, 29, 1, 0, 0, 0, -160, 83,167, 29, 1, 0, 0, 0,224, 82,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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, 64,221,131, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16,207,131, 29, 1, 0, 0, 0,144,162,131, 29, 1, 0, 0, 0, 80,160,131, 29, 1, 0, 0, 0,112,161,131, 29, + 1, 0, 0, 0,240,162,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 6, 0, 0,101, 0, 0, 0, +100, 4, 0, 0, 1, 1, 36, 6, 0, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,128,217, 2, 1, 0, 0, 0, 80,249,131, 29, + 1, 0, 0, 0,112,253,131, 29, 1, 0, 0, 0, 32,222,131, 29, 1, 0, 0, 0,240,247,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 40,128, 29, 1, 0, 0, 0, 48, 92,135, 29, 1, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0, 32,222,131, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,128,223,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,128,117, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,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, 35, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 36, 6, 26, 0, 36, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 35, 6, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 6, 26, 0, + 9, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,137,217, 2, 1, 0, 0, 0, 48,216,129, 27, + 1, 0, 0, 0, 48,216,129, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 42,128, 29, + 1, 0, 0, 0,112, 45,128, 29, 1, 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,128,223,131, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 32,231,131, 29, 1, 0, 0, 0, 32,222,131, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 67, 0,128, 91,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0,128, 91,196, + 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,109, 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,109, 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,160, 0,110, 3,143, 0, +110, 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, +159, 0, 0, 0,247, 0, 0, 0,100, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,110, 3, + 10, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,133,217, 2, 1, 0, 0, 0, 48, 6, 21, 3, + 1, 0, 0, 0, 48, 46, 21, 3, 1, 0, 0, 0,224,224,131, 29, 1, 0, 0, 0,144,229,131, 29, 1, 0, 0, 0,144, 47,128, 29, + 1, 0, 0, 0,208, 49,128, 29, 1, 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,224,224,131, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,112,226,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 80,134,217, 2, 1, 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, 95,115,104,101,108,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111, +111,108, 95,115,104,101,108,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,111,111,108, 32, 83,104,101,108,102, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,196,255,143, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,112,226,131, 29, 1, 0, 0, 0,194, 0, 0, 0, + 1, 0, 0, 0, 0,228,131, 29, 1, 0, 0, 0,224,224,131, 29, 1, 0, 0, 0, 16, 88,245, 26, 1, 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, 7,254,143, 0,165, 1, 0, 0, 0, 0, 0, 0, 7, 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, 0,228,131, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,144,229,131, 29, 1, 0, 0, 0,112,226,131, 29, + 1, 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,109,101,115,104,101,100,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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111, +111,108,115, 95,109,101,115,104,101,100,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, 77,101,115,104, 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, 0, 0,184,252,143, 0,244, 2, 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, 84,167, 29, 1, 0, 0, 0, 48,116, 22, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,100, 0, 0, 0, -100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 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, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 25, 0,141, 0,128, 7, 56, 4, 8, 0, - 8, 0, 0, 0, 24, 0, 17, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 23, 0, 33, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, 85,167, 29, 1, 0, 0, 0,176, 85,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,144,229,131, 29, 1, 0, 0, 0,194, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228,131, 29, 1, 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,109,101,115,104,101,100,105,116, 95,111,112,116, +105,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, 0, 0, 0, + 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,109,101,115,104,101,100,105,116, 95,111,112,116, +105,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, 0, 0, 0, + 0, 0, 0, 0, 77,101,115,104, 32, 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,124,252,143, 0, 36, 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, 32,231,131, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 16,234,131, 29, 1, 0, 0, 0,128,223,131, 29, + 1, 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, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, +159, 0, 0, 0,127, 0, 0, 0,246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,120, 0, + 11, 0, 6, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,135,217, 2, 1, 0, 0, 0, 48, 48,134, 27, + 1, 0, 0, 0, 48, 48,134, 27, 1, 0, 0, 0,128,232,131, 29, 1, 0, 0, 0,128,232,131, 29, 1, 0, 0, 0,240, 51,128, 29, + 1, 0, 0, 0, 48, 54,128, 29, 1, 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,128,232,131, 29, 1, 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, 32,136,217, 2, 1, 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,116, 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, 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, 16,234,131, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,240,247,131, 29, 1, 0, 0, 0, 32,231,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,143,196, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,102,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0, +171, 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, +171, 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,172, 3,163, 0,154, 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, 35, 6, 0, 0, 35, 6, 0, 0,127, 0, 0, 0,100, 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, 1, 0, 0, 0, + 0, 0, 0, 0,176,130,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,235,131, 29, + 1, 0, 0, 0, 96,246,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,112,235,131, 29, 1, 0, 0, 0,194, 0, 0, 0, + 1, 0, 0, 0, 0,237,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,111, 98,106,101, 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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,111, 98,106,101, 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, 84,114, 97,110,115,102,111,114,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,254,163, 0,110, 1, 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, 0,237,131, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,144,238,131, 29, 1, 0, 0, 0,112,235,131, 29, + 1, 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,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, 86, 73, 69, 87, 51, 68, 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, 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, 78,251,163, 0, 58, 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,144,238,131, 29, 1, 0, 0, 0,194, 0, 0, 0, + 1, 0, 0, 0, 32,240,131, 29, 1, 0, 0, 0, 0,237,131, 29, 1, 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, 51,100,118,105,101,119, 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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, 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, 86,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,235,252,163, 0, 59, 1, 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, + 88, 1, 0, 0, 32,240,131, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,176,241,131, 29, 1, 0, 0, 0,144,238,131, 29, + 1, 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, 51,100, +118,105,101,119, 95,100,105,115,112,108, 97,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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100, +118,105,101,119, 95,100,105,115,112,108, 97,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, 68,105,115,112,108, 97,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,208,251,163, 0, 3, 1, 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,176,241,131, 29, 1, 0, 0, 0,194, 0, 0, 0, + 1, 0, 0, 0, 64,243,131, 29, 1, 0, 0, 0, 32,240,131, 29, 1, 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, 98, 97, 99,107,103,114,111,117,110,100, 95,105,109, 97,103,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, 98, 97, 99,107,103,114,111,117,110,100, 95,105,109, 97,103,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, 66, 97, 99,107,103,114,111,117,110,100, 32, 73,109, 97,103,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,184,251,163, 0, 0, 0, 20, 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, 64,243,131, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,208,244,131, 29, 1, 0, 0, 0,176,241,131, 29, + 1, 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,114, + 97,110,115,102,111,114,109, 95,111,114,105,101,110,116, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,114, + 97,110,115,102,111,114,109, 95,111,114,105,101,110,116, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114,109, 32, 79,114, +105,101,110,116, 97,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,160,251,163, 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,208,244,131, 29, 1, 0, 0, 0,194, 0, 0, 0, + 1, 0, 0, 0, 96,246,131, 29, 1, 0, 0, 0, 64,243,131, 29, 1, 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, 51,100,118,105,101,119, 95,109,101,115,104,100,105,115,112,108, 97,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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, 95,109,101,115,104,100,105,115,112,108, 97,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, 77,101,115,104, 32, 68,105,115,112,108, 97,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, 23,252,163, 0,104, 1, 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, 96,246,131, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,244,131, 29, + 1, 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, 51,100, +118,105,101,119, 95,110, 97,109,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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100, +118,105,101,119, 95,110, 97,109,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, 73,116,101,109, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,163, 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, 0, 0, 0, 0, 47, 47, 98, 97, 99,107, 98,117,102, 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,240,247,131, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,234,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,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, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 6, 0, 0, 0, 16, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,109,203, 20, 1, 0, 0, 0, - 1, 0, 0, 0, 1, 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,205,204, 28, 65, 0, 0, 0, 0, 32, 0, 32, 0, 1, 0, 0, 0, - 0, 0, 0, 0,128, 0, 5, 0, 60, 0, 5, 0, 1, 0, 5, 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, 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,128, 7, 56, 4, 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, 68, 65, 84, 65, 40, 0, 0, 0,224, 82,167, 29, 1, 0, 0, 0, -131, 0, 0, 0, 1, 0, 0, 0, 64, 83,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, - 1, 0, 0, 0,194, 2,243, 1, 48,208, 4, 28, 1, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 64, 83,167, 29, 1, 0, 0, 0, -131, 0, 0, 0, 1, 0, 0, 0,160, 83,167, 29, 1, 0, 0, 0,224, 82,167, 29, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, - 0, 4, 0, 0,144, 3, 47, 3, 48,214, 4, 28, 1, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,160, 83,167, 29, 1, 0, 0, 0, -131, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 83,167, 29, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, - 0, 4, 0, 0,156, 0, 83, 2, 48,202, 4, 28, 1, 0, 0, 0, 68, 65, 84, 65,120, 1, 0, 0, 0, 84,167, 29, 1, 0, 0, 0, -151, 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,128, 63, 1, 0, 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0, 0, 0, 35, 6, 0, 0,127, 0, 0, 0,100, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,132, 5,230, 3, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,208,129,217, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 56,128, 29, 1, 0, 0, 0, 64, 71,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48,238,135, 27, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48,238,135, 27, 1, 0, 0, 0,157, 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,127, 19,198, 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,128, 0, 0, 0,128, 74,215, 76,190, + 0, 0, 0,128, 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,180,157,229, 62,184, 38, 31,191, 48,180, 81,191,184,158, 81,191,118, 90,127, 63,197,108,153, 62, 26, 63,185, 62, + 35, 44,185, 62,147,180,109,188,122, 73,177, 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, 48,185, 70,188, 0, 0, 78,180,246,235,132,190,156, 35, 0, 62,130, 17, 20, 63, + 0, 0,192,178, 67,108,117,194,185,204,216, 65,105,156, 5,194,213,247,159,192,235, 62,114, 66, 61,254,213,193,158,225, 3, 66, + 56, 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,180,157,229, 62,184, 38, 31,191, 48,180, 81,191,184,158, 81,191,118, 90,127, 63,197,108,153, 62, 26, 63,185, 62, + 35, 44,185, 62,147,180,109,188,122, 73,177, 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, 97, 89,186, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 89,186, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 89,186, 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,214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, + 0, 0, 0, 0,188,189,169, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 5, 0, 5, 0,255,255, - 50, 0, 50, 0, 10, 0, 0, 0, 50, 0,100, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, - 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 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, 0, 0, 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, 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, - 68, 65, 84, 65, 88, 0, 0, 0,176, 85,167, 29, 1, 0, 0, 0,137, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 49, 32, 82,101,110,100,101,114, 76, 97,121,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,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,152, 0, 0, 0, 64, 86,167, 29, 1, 0, 0, 0, - 29, 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, - 1, 0, 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, -145,137, 68, 66,205,204,204, 61, 0, 0,200, 66, 0, 0, 12, 66,161, 14,234, 64, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 76, 65, 0, 0,248, 1, 0, 0, 48,188, 4, 28, 1, 0, 0, 0, 41, 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, 83,112,111,116, 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, 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, 16, 87,167, 29, 1, 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, 0, 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, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 64, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 88,167, 29, 1, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 16, 87,167, 29, 1, 0, 0, 0, - 75, 1, 0, 0, 1, 0, 0, 0, 1, 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,144,118,161, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 80,249,131, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0,112,253,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48, 68,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 8, + 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,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, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 3, 0,255,255, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176,250,131, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 16,252,131, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 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, +151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 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, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0, +126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 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, 68, 65, 84, 65, 40, 1, 0, 0, 16,252,131, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,250,131, 29, 1, 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,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, +151, 4, 0, 0, 18, 0, 0, 0,121, 2, 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,152, 4,122, 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,151, 4, 0, 0,127, 0, 0, 0, +248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65,200, 0, 0, 0,112,253,131, 29, + 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,249,131, 29, 1, 0, 0, 0,176,250,131, 29, + 1, 0, 0, 0, 16,252,131, 29, 1, 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, 1, 0, 0, 0, 6, 0, 0, 0, 83, 78, 0, 0,208, 0, 0, 0,240,254,131, 29, + 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,240, 38,110, 27, 1, 0, 0, 0, 32,158,131, 29, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,132, 29, 1, 0, 0, 0,224, 4,132, 29, + 1, 0, 0, 0, 64, 5,132, 29, 1, 0, 0, 0,192, 12,132, 29, 1, 0, 0, 0, 32, 13,132, 29, 1, 0, 0, 0, 48, 16,110, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 66,136, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0,132, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 96, 0,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 96, 0,132, 29, + 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,192, 0,132, 29, 1, 0, 0, 0, 0, 0,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,192, 0,132, 29, 1, 0, 0, 0,192, 0, 0, 0, + 1, 0, 0, 0, 32, 1,132, 29, 1, 0, 0, 0, 96, 0,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,128, 4, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 32, 1,132, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,128, 1,132, 29, + 1, 0, 0, 0,192, 0,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0,128, 1,132, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,224, 1,132, 29, 1, 0, 0, 0, 32, 1,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,224, 1,132, 29, + 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 64, 2,132, 29, 1, 0, 0, 0,128, 1,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,128, 7,100, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 64, 2,132, 29, 1, 0, 0, 0,192, 0, 0, 0, + 1, 0, 0, 0,160, 2,132, 29, 1, 0, 0, 0,224, 1,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,180, 1, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,160, 2,132, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0, 3,132, 29, + 1, 0, 0, 0, 64, 2,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6,180, 1, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0, 0, 3,132, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 96, 3,132, 29, 1, 0, 0, 0,160, 2,132, 29, + 1, 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, 96, 3,132, 29, + 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,192, 3,132, 29, 1, 0, 0, 0, 0, 3,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,128, 7,180, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,192, 3,132, 29, 1, 0, 0, 0,192, 0, 0, 0, + 1, 0, 0, 0, 32, 4,132, 29, 1, 0, 0, 0, 96, 3,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 5,180, 1, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 32, 4,132, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,128, 4,132, 29, + 1, 0, 0, 0,192, 3,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 5,100, 4, 1, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0,128, 4,132, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,224, 4,132, 29, 1, 0, 0, 0, 32, 4,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 1,180, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,224, 4,132, 29, + 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 4,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 60, 1,100, 4, 1, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 64, 5,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,160, 5,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0,132, 29, 1, 0, 0, 0,192, 0,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,160, 5,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 0, 6,132, 29, 1, 0, 0, 0, 64, 5,132, 29, 1, 0, 0, 0, 96, 0,132, 29, 1, 0, 0, 0,128, 1,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 0, 6,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 96, 6,132, 29, 1, 0, 0, 0,160, 5,132, 29, 1, 0, 0, 0,192, 0,132, 29, 1, 0, 0, 0,224, 1,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 96, 6,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,192, 6,132, 29, 1, 0, 0, 0, 0, 6,132, 29, 1, 0, 0, 0,128, 1,132, 29, 1, 0, 0, 0,224, 1,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,192, 6,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 32, 7,132, 29, 1, 0, 0, 0, 96, 6,132, 29, 1, 0, 0, 0,128, 1,132, 29, 1, 0, 0, 0, 64, 2,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 32, 7,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,128, 7,132, 29, 1, 0, 0, 0,192, 6,132, 29, 1, 0, 0, 0, 64, 2,132, 29, 1, 0, 0, 0,160, 2,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,128, 7,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,224, 7,132, 29, 1, 0, 0, 0, 32, 7,132, 29, 1, 0, 0, 0, 32, 1,132, 29, 1, 0, 0, 0, 0, 3,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,224, 7,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 64, 8,132, 29, 1, 0, 0, 0,128, 7,132, 29, 1, 0, 0, 0,160, 2,132, 29, 1, 0, 0, 0, 0, 3,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 64, 8,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,160, 8,132, 29, 1, 0, 0, 0,224, 7,132, 29, 1, 0, 0, 0, 0, 0,132, 29, 1, 0, 0, 0, 64, 2,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,160, 8,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 0, 9,132, 29, 1, 0, 0, 0, 64, 8,132, 29, 1, 0, 0, 0, 0, 0,132, 29, 1, 0, 0, 0, 0, 3,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 0, 9,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 96, 9,132, 29, 1, 0, 0, 0,160, 8,132, 29, 1, 0, 0, 0,224, 1,132, 29, 1, 0, 0, 0, 96, 3,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 96, 9,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,192, 9,132, 29, 1, 0, 0, 0, 0, 9,132, 29, 1, 0, 0, 0, 32, 1,132, 29, 1, 0, 0, 0, 96, 3,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,192, 9,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 32, 10,132, 29, 1, 0, 0, 0, 96, 9,132, 29, 1, 0, 0, 0,160, 2,132, 29, 1, 0, 0, 0, 96, 3,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 32, 10,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,128, 10,132, 29, 1, 0, 0, 0,192, 9,132, 29, 1, 0, 0, 0,192, 3,132, 29, 1, 0, 0, 0, 32, 4,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,128, 10,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,224, 10,132, 29, 1, 0, 0, 0, 32, 10,132, 29, 1, 0, 0, 0,224, 1,132, 29, 1, 0, 0, 0, 32, 4,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,224, 10,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 64, 11,132, 29, 1, 0, 0, 0,128, 10,132, 29, 1, 0, 0, 0, 96, 3,132, 29, 1, 0, 0, 0,192, 3,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 64, 11,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,160, 11,132, 29, 1, 0, 0, 0,224, 10,132, 29, 1, 0, 0, 0, 64, 2,132, 29, 1, 0, 0, 0,128, 4,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,160, 11,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 0, 12,132, 29, 1, 0, 0, 0, 64, 11,132, 29, 1, 0, 0, 0,192, 3,132, 29, 1, 0, 0, 0,128, 4,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 0, 12,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 96, 12,132, 29, 1, 0, 0, 0,160, 11,132, 29, 1, 0, 0, 0,128, 1,132, 29, 1, 0, 0, 0,224, 4,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 96, 12,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,192, 12,132, 29, 1, 0, 0, 0, 0, 12,132, 29, 1, 0, 0, 0, 32, 4,132, 29, 1, 0, 0, 0,224, 4,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,192, 12,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 12,132, 29, 1, 0, 0, 0,128, 4,132, 29, 1, 0, 0, 0,224, 4,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 32, 13,132, 29, 1, 0, 0, 0,195, 0, 0, 0, + 1, 0, 0, 0,192, 16,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 1,132, 29, 1, 0, 0, 0, 96, 0,132, 29, + 1, 0, 0, 0,192, 0,132, 29, 1, 0, 0, 0,224, 1,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +128, 7, 0, 0,101, 4, 0, 0,128, 4, 0, 0, 7, 7,129, 7, 28, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,128,122,132, 29, 1, 0, 0, 0,128,122,132, 29, 1, 0, 0, 0, 0, 14,132, 29, 1, 0, 0, 0, 96, 15,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0, 14,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 96, 15,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,162, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0, 32,240, 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,128, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, + 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, + 10, 0,129, 7, 26, 0,129, 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, + 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,101, 4, 0, 0,126, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,129, 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, 68, 65, 84, 65, 40, 1, 0, 0, 96, 15,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 14,132, 29, 1, 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, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, + 6, 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, 0, 0, 0, 0,128, 7, 0, 0,127, 4, 0, 0,128, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,129, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,192, 16,132, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,176, 46,132, 29, + 1, 0, 0, 0, 32, 13,132, 29, 1, 0, 0, 0, 0, 3,132, 29, 1, 0, 0, 0,160, 2,132, 29, 1, 0, 0, 0, 96, 3,132, 29, + 1, 0, 0, 0, 32, 1,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, +179, 1, 0, 0, 4, 4, 96, 1,180, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36,132, 29, + 1, 0, 0, 0, 80, 45,132, 29, 1, 0, 0, 0,160, 17,132, 29, 1, 0, 0, 0, 0, 19,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0,160, 17,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 19,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,176, 67, 0, 0, 0, 0, + 0, 0,248, 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, 95, 1, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 96, 1, 31, 0, 96, 1, + 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0, +128, 7, 0, 0,149, 1, 0, 0,179, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 1, 31, 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, 68, 65, 84, 65, + 40, 1, 0, 0, 0, 19,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 17,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 67, 0, 64, 68,196, 0, 0, 0, 0, 0, 0, 0, 0,255,127,167, 67,254,127,193,195, + 0, 0, 0, 0, 79, 1, 0, 0, 96, 1, 0, 0, 18, 0, 0, 0,148, 1, 0, 0, 0, 0, 0, 0, 78, 1, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0, 78, 1, 0, 0, 18, 0, 0, 0,148, 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, 4, 6, 0, 96, 1,149, 1, 79, 1, +131, 1, 0, 0, 0, 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, +128, 7, 0, 0, 0, 0, 0, 0,148, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 1,149, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 20,132, 29, 1, 0, 0, 0,112, 34,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 88, 1, 0, 0, 96, 20,132, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,240, 21,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 78, 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,240, 21,132, 29, 1, 0, 0, 0,194, 0, 0, 0, + 1, 0, 0, 0,128, 23,132, 29, 1, 0, 0, 0, 96, 20,132, 29, 1, 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, 78, 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,128, 23,132, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 16, 25,132, 29, 1, 0, 0, 0,240, 21,132, 29, + 1, 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, 78, 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, 16, 25,132, 29, 1, 0, 0, 0,194, 0, 0, 0, + 1, 0, 0, 0,160, 26,132, 29, 1, 0, 0, 0,128, 23,132, 29, 1, 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, 78, 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,160, 26,132, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 48, 28,132, 29, 1, 0, 0, 0, 16, 25,132, 29, + 1, 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, 78, 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, 48, 28,132, 29, 1, 0, 0, 0,194, 0, 0, 0, + 1, 0, 0, 0,192, 29,132, 29, 1, 0, 0, 0,160, 26,132, 29, 1, 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,188,253, 78, 1,102, 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,192, 29,132, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 80, 31,132, 29, 1, 0, 0, 0, 48, 28,132, 29, + 1, 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, 59,253, 78, 1,105, 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, 80, 31,132, 29, 1, 0, 0, 0,194, 0, 0, 0, + 1, 0, 0, 0,224, 32,132, 29, 1, 0, 0, 0,192, 29,132, 29, 1, 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, 35,253, 78, 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,224, 32,132, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,112, 34,132, 29, 1, 0, 0, 0, 80, 31,132, 29, + 1, 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, 11,253, 78, 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,112, 34,132, 29, 1, 0, 0, 0,194, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 32,132, 29, 1, 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,243,252, 78, 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, + 0, 1, 0, 0, 0, 36,132, 29, 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, 96, 41,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 68, 65, 84, 65, 40, 1, 0, 0, 64, 37,132, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,160, 38,132, 29, 1, 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,216, 65, 0, 0, 0, 0, 0, 0,242, 67, 0, 0, 0, 0, 0, 0,216, 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, +227, 1, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0,128,241, 67, 0, 0,208, 65, 0,128,241, 67, 0, 0,208, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,228, 1, 27, 0,228, 1, 27, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,157, 5, 0, 0,128, 7, 0, 0, 85, 0, 0, 0, +111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228, 1, 27, 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, 68, 65, 84, 65, 40, 1, 0, 0,160, 38,132, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 40,132, 29, 1, 0, 0, 0, 64, 37,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 0, 0,128, 7, 0, 0,112, 0, 0, 0, +235, 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, 68, 65, 84, 65, 40, 1, 0, 0, 0, 40,132, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 38,132, 29, 1, 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,123, 1, 0, 0, 18, 0, 0, 0,227, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, +227, 1, 0, 0, 18, 0, 0, 0,123, 1, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 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,228, 1,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,157, 5, 0, 0,128, 7, 0, 0,112, 0, 0, 0, +235, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228, 1,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, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 96, 41,132, 29, + 1, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0, 80, 45,132, 29, 1, 0, 0, 0, 0, 36,132, 29, 1, 0, 0, 0, 64, 37,132, 29, + 1, 0, 0, 0, 0, 40,132, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0,144, 42,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,240, 43,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 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, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 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, 0, 0, 0, 0, 89, 6, 0, 0, +108, 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, 20, 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, 68, 65, 84, 65, + 40, 1, 0, 0,240, 43,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 42,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0, +108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 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, 48,242,135, 27, 1, 0, 0, 0, 68, 65, 84, 65, + 88, 3, 0, 0, 48,242,135, 27, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 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, 80, 1,128,191, + 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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, 32,193, 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, 32, 65, 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, + 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195, +115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 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, 32,193, 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, + 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 80, 45,132, 29, 1, 0, 0, 0,158, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 41,132, 29, 1, 0, 0, 0,144, 42,132, 29, 1, 0, 0, 0,240, 43,132, 29, + 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48, 68,132, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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,176, 46,132, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 48, 80,132, 29, + 1, 0, 0, 0,192, 16,132, 29, 1, 0, 0, 0, 0, 0,132, 29, 1, 0, 0, 0, 64, 2,132, 29, 1, 0, 0, 0,160, 2,132, 29, + 1, 0, 0, 0, 0, 3,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0, +179, 1, 0, 0, 17, 17, 32, 6,180, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 53,132, 29, + 1, 0, 0, 0, 48, 79,132, 29, 1, 0, 0, 0,144, 47,132, 29, 1, 0, 0, 0,224, 51,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0,144, 47,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,240, 48,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,150, 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, 31, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 63, 68, 0, 0,200, 65, 0,192, 63, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 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, 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, 68, 65, 84, 65, + 40, 1, 0, 0,240, 48,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,224, 51,132, 29, 1, 0, 0, 0,144, 47,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, 0, 0,196,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, 0, 0,196,195, + 0, 0, 0, 0,203, 0, 0, 0,220, 0, 0, 0, 18, 0, 0, 0,153, 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, 18, 0, 0, 0,153, 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, 4, 6, 0,220, 0,154, 1,203, 0, +136, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +219, 0, 0, 0, 26, 0, 0, 0,179, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0,154, 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, 80, 50,132, 29, 1, 0, 0, 0, 80, 50,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 88, 1, 0, 0, 80, 50,132, 29, 1, 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, 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,224, 51,132, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 48,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 68, 0, 0, 0, 0, + 0, 0,112, 67,228, 46, 44,195,220,133,181, 68,162,102,238,194,168,153,179, 67, 51, 5, 0, 0, 68, 5, 0, 0, 18, 0, 0, 0, +153, 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, +153, 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,154, 1, 51, 5,136, 1, 0, 0, 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, 31, 6, 0, 0, 26, 0, 0, 0,179, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 5,154, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 64, 53,132, 29, 1, 0, 0, 0,175, 0, 0, 0, + 1, 0, 0, 0,224, 57,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 40, 1, 0, 0,192, 53,132, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 32, 55,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,202, 67, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 64, 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,255, 2, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,192, 63, 68, 0, 0,200, 65, 0,192, 63, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 0, 3, 26, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0,255, 2, 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, 0, 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, 68, 65, 84, 65, 40, 1, 0, 0, 32, 55,132, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,128, 56,132, 29, 1, 0, 0, 0,192, 53,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,147, 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, 68, 65, 84, 65, 40, 1, 0, 0,128, 56,132, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 55,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, + 0, 0,128, 67, 0, 0,128,191, 0, 0, 0, 64, 0, 0,116,190, 0,128,158, 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, 3, 0, 0, 0, 0, 0, 0, +122, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0, 26, 0, 0, 0,147, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,122, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,168, 0, 0, 0,224, 57,132, 29, 1, 0, 0, 0,168, 0, 0, 0, + 1, 0, 0, 0,128, 61,132, 29, 1, 0, 0, 0, 64, 53,132, 29, 1, 0, 0, 0,192, 53,132, 29, 1, 0, 0, 0,128, 56,132, 29, + 1, 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,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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,128, 63, 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,192, 58,132, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 32, 60,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 64, 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,255, 2, 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, 4, 10, 0, 0, 3, 26, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0,255, 2, 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, 0, 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, 68, 65, 84, 65, 40, 1, 0, 0, 32, 60,132, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 58,132, 29, 1, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, + 0, 0, 0, 68,144, 82, 89,194, 41,149, 13, 68,176,122,214, 66, 82, 97,202, 67,239, 2, 0, 0, 0, 3, 0, 0, 18, 0, 0, 0, +121, 1, 0, 0, 0, 0, 0, 0,238, 2, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,238, 2, 0, 0, 18, 0, 0, 0, +121, 1, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, 10, 0, 0, 0, + 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 3,122, 1,239, 2,104, 1, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0, 26, 0, 0, 0,147, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,122, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,128, 61,132, 29, 1, 0, 0, 0,174, 0, 0, 0, + 1, 0, 0, 0, 0, 67,132, 29, 1, 0, 0, 0,224, 57,132, 29, 1, 0, 0, 0,192, 58,132, 29, 1, 0, 0, 0, 32, 60,132, 29, + 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 66,136, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 24,227, 78, 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, 68, 65, 84, 65, 40, 1, 0, 0,224, 62,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 64, 64,132, 29, + 1, 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,216, 65, 0, 0, 0, 0, + 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 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, 26, 0, 0, 0, 0,224,189, 68, + 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, + 10, 0,240, 5, 27, 0,240, 5, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,240, 5, 27, 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, 68, 65, 84, 65, 40, 1, 0, 0, 64, 64,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,160, 65,132, 29, + 1, 0, 0, 0,224, 62,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,239, 5, 0, 0,112, 0, 0, 0, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,160, 65,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 64, 64,132, 29, 1, 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,162, 3, 0, 0, 18, 0, 0, 0, +239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 0, 0, 32, 65, + 0, 0,128, 64, 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,240, 5,163, 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,239, 5, 0, 0,112, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,240, 5,163, 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, 68, 65, 84, 65,240, 0, 0, 0, 0, 67,132, 29, 1, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0, 16, 75,132, 29, + 1, 0, 0, 0,128, 61,132, 29, 1, 0, 0, 0,224, 62,132, 29, 1, 0, 0, 0,160, 65,132, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48, 68,132, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,144, 69,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0,157, 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,231, 4, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,232, 4, 26, 0,232, 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, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0,225, 1, 0, 0,250, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 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, 68, 65, 84, 65, 40, 1, 0, 0,144, 69,132, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,240, 70,132, 29, 1, 0, 0, 0, 48, 68,132, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,153, 2, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 24, 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, 68, 65, 84, 65, 40, 1, 0, 0,240, 70,132, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 80, 72,132, 29, 1, 0, 0, 0,144, 69,132, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0,251, 1, 0, 0,251, 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, 68, 65, 84, 65, 40, 1, 0, 0, 80, 72,132, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,176, 73,132, 29, 1, 0, 0, 0,240, 70,132, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,128, 7, 0, 0,251, 1, 0, 0, 18, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,176, 73,132, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 72,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 4, 24, 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, 48,246,135, 27, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48,246,135, 27, 1, 0, 0, 0,157, 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,165, 7, 36, 64, 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,128, 0, 0, 0,128,226,215,163,188, + 0, 0, 0,128, 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,180,157,229, 62,169,203,131,191,222,160, 81,191,184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, + 35, 44,185, 62,147,180,109,188,102,208, 18, 64,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,128, 32,182, 69,129, 32,190,250,186,154, 61,170,205,178, 62, + 0, 64, 1, 53,215,104, 25,196,135,132,135, 67, 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68,160, 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,180,157,229, 62,169,203,131,191,222,160, 81,191,184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, + 35, 44,185, 62,147,180,109,188,102,208, 18, 64,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, 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,218,210,190, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 16, 75,132, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 48, 79,132, 29, 1, 0, 0, 0, 0, 67,132, 29, + 1, 0, 0, 0, 48, 68,132, 29, 1, 0, 0, 0,176, 73,132, 29, 1, 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, + 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48, 68,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 8, + 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, + 1, 0, 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, 0, 0, 0, 0, + 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,112, 76,132, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,208, 77,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 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, +151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 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, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0, +126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 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, 68, 65, 84, 65, 40, 1, 0, 0,208, 77,132, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 76,132, 29, 1, 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,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, +151, 4, 0, 0, 18, 0, 0, 0,121, 2, 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,152, 4,122, 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,151, 4, 0, 0,127, 0, 0, 0, +248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65,200, 0, 0, 0, 48, 79,132, 29, + 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 75,132, 29, 1, 0, 0, 0,112, 76,132, 29, + 1, 0, 0, 0,208, 77,132, 29, 1, 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, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 48, 80,132, 29, + 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,112,102,132, 29, 1, 0, 0, 0,176, 46,132, 29, 1, 0, 0, 0,192, 3,132, 29, + 1, 0, 0, 0, 32, 4,132, 29, 1, 0, 0, 0,224, 1,132, 29, 1, 0, 0, 0, 96, 3,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 57, 5, 0, 0,128, 7, 0, 0,181, 1, 0, 0, 99, 4, 0, 0, 9, 9, 72, 2,175, 2, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,250,135, 27, 1, 0, 0, 0, 16,101,132, 29, 1, 0, 0, 0, 16, 81,132, 29, + 1, 0, 0, 0,112, 82,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16, 81,132, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,112, 82,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209, 67, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 18, 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, 71, 2, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,128,181, 67, 0, 0,200, 65, 0,128,181, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 72, 2, 26, 0, 72, 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, 0, 0, 0, 0, 57, 5, 0, 0,128, 7, 0, 0,181, 1, 0, 0,206, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 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, 68, 65, 84, 65, 40, 1, 0, 0,112, 82,132, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 81,132, 29, 1, 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,120, 27, 19, 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, 71, 2, 0, 0, 0, 0, 0, 0, +148, 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, 72, 2,149, 2, 72, 2,149, 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, 57, 5, 0, 0,128, 7, 0, 0,207, 1, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 2,149, 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, 68, 65, 84, 65,144, 2, 0, 0, 48,250,135, 27, 1, 0, 0, 0,170, 0, 0, 0, + 1, 0, 0, 0,144, 86,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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,208, 83,132, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 48, 85,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,128,163, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,182, 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, +107, 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, 4, 10, 0,108, 1, 26, 0,108, 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, 0, 0, 0, 0, 53, 4, 0, 0,160, 5, 0, 0, 41, 1, 0, 0, + 66, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,108, 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, 68, 65, 84, 65, 40, 1, 0, 0, 48, 85,132, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 83,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0,128,131, 67, 0, 0,228,194, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,173, 67, 0, 0,210,195, 0, 0, 0, 0, 91, 1, 0, 0, +108, 1, 0, 0, 18, 0, 0, 0,181, 1, 0, 0, 0, 0, 0, 0, 90, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, + 90, 1, 0, 0, 18, 0, 0, 0,181, 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, 18, 0, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0,108, 1,182, 1, 91, 1,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, 53, 4, 0, 0,160, 5, 0, 0, 67, 1, 0, 0, +248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,108, 1,182, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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,144, 86,132, 29, + 1, 0, 0, 0,167, 0, 0, 0, 1, 0, 0, 0,192, 91,132, 29, 1, 0, 0, 0, 48,250,135, 27, 1, 0, 0, 0,208, 83,132, 29, + 1, 0, 0, 0, 48, 85,132, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 80,203,107, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 80,203,107, 27, + 1, 0, 0, 0,219, 0, 0, 0, 1, 0, 0, 0, 13, 0, 0, 0, 13, 0, 0, 0,240, 87,132, 29, 1, 0, 0, 0, 68, 65, 84, 65, +208, 0, 0, 0,240, 87,132, 29, 1, 0, 0, 0,218, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 48, 66,136, 27, + 1, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0, 48, 66,136, 27, 1, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0, 48, 66,136, 27, + 1, 0, 0, 0, 21, 0, 1, 0, 1, 0, 1, 0, 48, 66,136, 27, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48, 58,132, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48, 74,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,171,109, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48, 86,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 64,198,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48, 80,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48, 54,132, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48, 68,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 32,163,176, 21, + 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0, 89,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 96, 90,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0, 0,162, 67, 0, 0, 0, 0, 0, 0,240, 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, 29, 0, 0, 0, 0,128,137, 67, + 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, + 10, 0, 68, 1, 30, 0, 68, 1, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 61, 6, 0, 0,128, 7, 0, 0,252, 3, 0, 0, 25, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 1, 30, 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, 68, 65, 84, 65, 40, 1, 0, 0, 96, 90,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 89,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,153, 67, 0, 0,137,196, 0, 0, 0, 0, 0, 0, 0, 0, +254,127,153, 67,253,127,198,195, 0, 0, 0, 0, 51, 1, 0, 0, 68, 1, 0, 0, 18, 0, 0, 0,158, 1, 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,158, 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, 4, + 6, 0, 68, 1,159, 1, 51, 1,141, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 61, 6, 0, 0,128, 7, 0, 0, 93, 2, 0, 0,251, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 1,159, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0,192, 91,132, 29, 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, 32, 97,132, 29, + 1, 0, 0, 0,144, 86,132, 29, 1, 0, 0, 0, 0, 89,132, 29, 1, 0, 0, 0, 96, 90,132, 29, 1, 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, 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, 68, 65, 84, 65, + 40, 1, 0, 0, 0, 93,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 96, 94,132, 29, 1, 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,216, 65, 0, 0, 0, 0, 0, 0,242, 67, 0, 0, 0, 0, + 0, 0,216, 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,227, 1, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0,128,241, 67, 0, 0,208, 65, 0,128,241, 67, + 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,228, 1, 27, 0,228, 1, + 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,157, 5, 0, 0, +128, 7, 0, 0, 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228, 1, 27, 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, 68, 65, 84, 65, + 40, 1, 0, 0, 96, 94,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,192, 95,132, 29, 1, 0, 0, 0, 0, 93,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 7, 0, 0, +128, 7, 0, 0,112, 0, 0, 0,235, 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, 68, 65, 84, 65, + 40, 1, 0, 0,192, 95,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 94,132, 29, + 1, 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,123, 1, 0, 0, 18, 0, 0, 0,227, 1, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 18, 0, 0, 0,227, 1, 0, 0, 18, 0, 0, 0,123, 1, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 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,228, 1,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,157, 5, 0, 0, +128, 7, 0, 0,112, 0, 0, 0,235, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228, 1,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 32, 97,132, 29, 1, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0, 16,101,132, 29, 1, 0, 0, 0,192, 91,132, 29, + 1, 0, 0, 0, 0, 93,132, 29, 1, 0, 0, 0,192, 95,132, 29, 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,128, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80, 98,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,176, 99,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0, 0,138, 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, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, + 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, + 10, 0, 20, 1, 26, 0, 20, 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, + 0, 0, 0, 0, 89, 6, 0, 0,108, 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, 20, 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, 68, 65, 84, 65, 40, 1, 0, 0,176, 99,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 80, 98,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 20, 1, 55, 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, 48,254,135, 27, + 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48,254,135, 27, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, + 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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, 32,193, 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, 32, 65, 0, 0,128, 63,103,212,136, 64, + 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 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, 32,193, 0, 0,128, 63,103,212,136, 64, + 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 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, 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,144,118,161, 29, 1, 0, 0, 0, 73, 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,128, 88,167, 29, 1, 0, 0, 0, - 19, 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,224, 1, 0, 0, 48,192, 4, 28, 1, 0, 0, 0, -130, 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, - 1, 0, 0, 0, 0, 0, 0, 0, 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, 99, 80, 61,114, 99, 80, 61,114, 99, 80, 61, 0, 0, 0, 0,199, 54, 36, 60,199, 54, 36, 60,199, 54, 36, 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,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0,205,204, 28, 65, 0, 0, 0, 0, 0, 0, 32, 0,128, 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, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 64, 0, 0, 0, 0, 0, 0,112, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, - 0, 0,128, 63,205,204, 76, 61, 0, 0, 5, 0, 0, 0, 0, 0, 10,215,163, 59, 0, 0, 0, 0, 0, 0,128, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0, 16,101,132, 29, + 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 97,132, 29, 1, 0, 0, 0, 80, 98,132, 29, + 1, 0, 0, 0,176, 99,132, 29, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, + 1, 0, 7, 0, 48, 68,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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,112,102,132, 29, 1, 0, 0, 0,195, 0, 0, 0, + 1, 0, 0, 0, 48, 16,110, 27, 1, 0, 0, 0, 48, 80,132, 29, 1, 0, 0, 0,128, 4,132, 29, 1, 0, 0, 0,224, 4,132, 29, + 1, 0, 0, 0, 32, 4,132, 29, 1, 0, 0, 0,192, 3,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 1, 0, 0, + 55, 5, 0, 0,181, 1, 0, 0, 99, 4, 0, 0, 1, 1,251, 3,175, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 32,121,132, 29, 1, 0, 0, 0,160,138,110, 27, 1, 0, 0, 0, 80,103,132, 29, 1, 0, 0, 0,192,119,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80,103,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,176,104,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,102, 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,237, 68, + 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, + 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, 0, 0, 0, 0, + 0, 0, 0, 0, 61, 1, 0, 0, 55, 5, 0, 0,181, 1, 0, 0,206, 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, 68, 65, 84, 65, 40, 1, 0, 0,176,104,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 16,106,132, 29, + 1, 0, 0, 0, 80,103,132, 29, 1, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 61, 1, 0, 0, 61, 1, 0, 0,207, 1, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0,149, 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, 68, 65, 84, 65, 40, 1, 0, 0, 16,106,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,112,107,132, 29, + 1, 0, 0, 0,176,104,132, 29, 1, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 61, 1, 0, 0, 55, 5, 0, 0,207, 1, 0, 0,207, 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, 68, 65, 84, 65, 40, 1, 0, 0,112,107,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,192,119,132, 29, + 1, 0, 0, 0, 16,106,132, 29, 1, 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,128, 23,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,111, 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,111, 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,112, 2,163, 0, 94, 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, 55, 5, 0, 0, 55, 5, 0, 0,207, 1, 0, 0, 99, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,108,132, 29, 1, 0, 0, 0, 48,118,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,208,108,132, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 96,110,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, + 51, 68, 95, 80, 84, 95,111, 98,106,101, 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, 86, 73, 69, 87, + 51, 68, 95, 80, 84, 95,111, 98,106,101, 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, 84,114, 97,110, +115,102,111,114,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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,254, +163, 0,110, 1, 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, 96,110,132, 29, + 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,240,111,132, 29, 1, 0, 0, 0,208,108,132, 29, 1, 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,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, 86, 73, 69, 87, 51, 68, 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, 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,236,253,163, 0, 58, 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, 88, 1, 0, 0,240,111,132, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,128,113,132, 29, + 1, 0, 0, 0, 96,110,132, 29, 1, 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, 51,100,118,105,101,119, 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, 86, 73, 69, 87, + 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, 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, 86,105,101,119, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153,252, +163, 0, 59, 1, 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,128,113,132, 29, + 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 16,115,132, 29, 1, 0, 0, 0,240,111,132, 29, 1, 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, 51,100,118,105,101,119, 95,100,105,115, +112,108, 97,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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, 95,100,105,115, +112,108, 97,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, 68,105,115,112,108, 97,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,129,252,163, 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, 16,115,132, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,160,116,132, 29, + 1, 0, 0, 0,128,113,132, 29, 1, 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, 98, 97, 99,107,103,114,111,117,110,100, 95,105,109, 97,103,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, 98, 97, 99,107,103,114,111,117,110,100, 95,105,109, 97,103,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, 66, 97, 99,107, +103,114,111,117,110,100, 32, 73,109, 97,103,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,105,252, +163, 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,160,116,132, 29, + 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 48,118,132, 29, 1, 0, 0, 0, 16,115,132, 29, 1, 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,114, 97,110,115,102,111,114,109, 95, +111,114,105,101,110,116, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,114, 97,110,115,102,111,114,109, 95, +111,114,105,101,110,116, 97,116,105,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, 0, 0, 0, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114,109, 32, 79,114,105,101,110,116, 97,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, 81,252,163, 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, 48,118,132, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,160,116,132, 29, 1, 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, 51,100,118,105,101,119, 95,110, 97,109,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, 86, 73, 69, 87, + 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, 95,110, 97,109,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, 73,116,101,109, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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, +163, 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,192,119,132, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,107,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 55, 5, 0, 0,207, 1, 0, 0, + 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251, 3,149, 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, 48, 2,136, 27, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48, 2,136, 27, + 1, 0, 0, 0,157, 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, +226,201,115, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,128,111, 18,131,187, 0, 0, 0,128, 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, 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, +226,201,115, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 18,131,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, + 90,105,134, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,121,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, +226,201,115, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 18,131,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,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, 20, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, 1, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, 32,121,132, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 32, 8,110, 27, + 1, 0, 0, 0, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48, 68,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,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, 16, 0, 0, 0, + 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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, 96, 5,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,192, 6,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,195, 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, 6, 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, 4, 10, 0, 24, 6, 26, 0, 24, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 23, 6, 0, 0,149, 1, 0, 0,174, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 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, 68, 65, 84, 65, + 40, 1, 0, 0,192, 6,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 5,110, 27, + 1, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68, 56,205,190,195,156,102, 95, 68,160,228,244, 64, +110, 44,252, 67, 7, 6, 0, 0, 24, 6, 0, 0, 18, 0, 0, 0,106, 2, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 18, 0, 0, 0,106, 2, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, + 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 24, 6,107, 2, 7, 6, + 89, 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, + 23, 6, 0, 0,175, 1, 0, 0, 25, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 6,107, 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, 68, 65, 84, 65, + 32, 1, 0, 0, 32, 8,110, 27, 1, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0,160, 13,110, 27, 1, 0, 0, 0, 32,121,132, 29, + 1, 0, 0, 0, 96, 5,110, 27, 1, 0, 0, 0,192, 6,110, 27, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 66,136, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 67, 81, 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, 68, 65, 84, 65, 40, 1, 0, 0,128, 9,110, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,224, 10,110, 27, 1, 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,216, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 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, 26, 0, 0, 0, 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,240, 5, 27, 0,240, 5, 27, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 85, 0, 0, 0, +111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 27, 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, 68, 65, 84, 65, 40, 1, 0, 0,224, 10,110, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 64, 12,110, 27, 1, 0, 0, 0,128, 9,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,239, 5, 0, 0,112, 0, 0, 0, + 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 64, 12,110, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 10,110, 27, 1, 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,162, 3, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, +239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 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,240, 5,163, 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,239, 5, 0, 0,112, 0, 0, 0, + 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,163, 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, 68, 65, 84, 65,240, 0, 0, 0,160, 13,110, 27, + 1, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0,160,138,110, 27, 1, 0, 0, 0, 32, 8,110, 27, 1, 0, 0, 0,128, 9,110, 27, + 1, 0, 0, 0, 64, 12,110, 27, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0,208, 14,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 64,137,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 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,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 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, 0, 0, 0, 0, 0, 0, 0, 0, +151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 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, 68, 65, 84, 65, + 40, 1, 0, 0, 64,137,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 14,110, 27, + 1, 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,151, 4, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 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,152, 4,122, 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, +151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65, +200, 0, 0, 0,160,138,110, 27, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 13,110, 27, + 1, 0, 0, 0,208, 14,110, 27, 1, 0, 0, 0, 64,137,110, 27, 1, 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, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65, +160, 0, 0, 0, 48, 16,110, 27, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,102,132, 29, + 1, 0, 0, 0, 64, 2,132, 29, 1, 0, 0, 0,128, 1,132, 29, 1, 0, 0, 0,224, 4,132, 29, 1, 0, 0, 0,128, 4,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 0, 0,181, 1, 0, 0, 99, 4, 0, 0, 3, 3, 60, 1, +175, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,142,110, 27, 1, 0, 0, 0,240, 37,110, 27, + 1, 0, 0, 0,160,139,110, 27, 1, 0, 0, 0, 0,141,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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,160,139,110, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0,141,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,128,163, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,158, 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, + 59, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 83, 67, 0, 0,200, 65, 0, 0, 83, 67, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 60, 1, 26, 0, 60, 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, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 0, 0,181, 1, 0, 0, +206, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 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, 68, 65, 84, 65, 40, 1, 0, 0, 0,141,110, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,139,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0,128,131, 67, 0, 0,228,194, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,149, 67, 0,192, 32,196, 0, 0, 0, 0, 43, 1, 0, 0, + 60, 1, 0, 0, 18, 0, 0, 0,148, 2, 0, 0, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, + 42, 1, 0, 0, 18, 0, 0, 0,148, 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, 0, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0, 60, 1,149, 2, 43, 1,131, 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, 59, 1, 0, 0,207, 1, 0, 0, + 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 1,149, 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, 68, 65, 84, 65, 40, 1, 0, 0, 96,142,110, 27, + 1, 0, 0, 0,167, 0, 0, 0, 1, 0, 0, 0, 96, 24,110, 27, 1, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0,160, 7,130, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,160, 7,130, 29, + 1, 0, 0, 0,219, 0, 0, 0, 1, 0, 0, 0, 13, 0, 0, 0, 13, 0, 0, 0,192,143,110, 27, 1, 0, 0, 0, 68, 65, 84, 65, +208, 0, 0, 0,192,143,110, 27, 1, 0, 0, 0,218, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 48, 66,136, 27, + 1, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0, 48, 66,136, 27, 1, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0, 48, 66,136, 27, + 1, 0, 0, 0, 21, 0, 1, 0, 1, 0, 1, 0, 48, 66,136, 27, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48, 58,132, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48, 74,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,171,109, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48, 86,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 64,198,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48, 80,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48, 54,132, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48, 68,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 32,163,176, 21, + 1, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,208,144,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 48,146,110, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 68, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0, 0, 84, 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,211, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, + 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, + 10, 0,212, 0, 26, 0,212, 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,211, 0, 0, 0, 41, 1, 0, 0, 66, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,212, 0, 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, 68, 65, 84, 65, 40, 1, 0, 0, 48,146,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,144,147,110, 27, + 1, 0, 0, 0,208,144,110, 27, 1, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 1, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0,182, 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, 68, 65, 84, 65, 40, 1, 0, 0,144,147,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,240,148,110, 27, + 1, 0, 0, 0, 48,146,110, 27, 1, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,211, 0, 0, 0, 67, 1, 0, 0, 67, 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, 68, 65, 84, 65, 40, 1, 0, 0,240,148,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 80,150,110, 27, + 1, 0, 0, 0,144,147,110, 27, 1, 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, 0, 0, 0, 0, + 0, 0, 0, 0,211, 0, 0, 0,211, 0, 0, 0, 67, 1, 0, 0,248, 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, 68, 65, 84, 65, 40, 1, 0, 0, 80,150,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,240,148,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,211, 0, 0, 0, 67, 1, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,212, 0,182, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 6,136, 27, + 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48, 6,136, 27, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,121, 92,163, 61, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190, 35, 30, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, + 0, 0, 0,128,111, 18,131,187, 0, 0, 0,128, 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, 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,121, 92,163, 61, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190, 35, 30, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,111, 18,131,187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 15,150, 72, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,149, 53,207, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,255,255,121,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,121, 92,163, 61, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190, 35, 30, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,111, 18,131,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,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,159, 55,242, 61, + 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, 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, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 62, 55, 63, + 56,186,224,190,237,203,148,190, 3,236,234,190, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0, 96, 24,110, 27, + 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0,128, 28,110, 27, 1, 0, 0, 0, 96,142,110, 27, 1, 0, 0, 0,208,144,110, 27, + 1, 0, 0, 0, 80,150,110, 27, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, + 1, 0, 7, 0, 48, 68,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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,192, 25,110, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 32, 27,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0,195, 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, 6, 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, 4, 10, 0, 24, 6, 26, 0, 24, 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, 0, 0, 0, 0, 0, 0, 0, 0, 23, 6, 0, 0,149, 1, 0, 0,174, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 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, 68, 65, 84, 65, 40, 1, 0, 0, 32, 27,110, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 25,110, 27, 1, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, + 0, 0, 0, 68, 56,205,190,195,156,102, 95, 68,160,228,244, 64,110, 44,252, 67, 7, 6, 0, 0, 24, 6, 0, 0, 18, 0, 0, 0, +106, 2, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 18, 0, 0, 0, +106, 2, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, 10, 0, 0, 0, + 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 24, 6,107, 2, 7, 6, 89, 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, 23, 6, 0, 0,175, 1, 0, 0, 25, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 6,107, 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, 68, 65, 84, 65, 32, 1, 0, 0,128, 28,110, 27, 1, 0, 0, 0,174, 0, 0, 0, + 1, 0, 0, 0, 0, 34,110, 27, 1, 0, 0, 0, 96, 24,110, 27, 1, 0, 0, 0,192, 25,110, 27, 1, 0, 0, 0, 32, 27,110, 27, + 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 66,136, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,193, 67, 81, 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, 68, 65, 84, 65, 40, 1, 0, 0,224, 29,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 64, 31,110, 27, + 1, 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,216, 65, 0, 0, 0, 0, + 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 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, 26, 0, 0, 0, 0,224,189, 68, + 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, + 10, 0,240, 5, 27, 0,240, 5, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,240, 5, 27, 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, 68, 65, 84, 65, 40, 1, 0, 0, 64, 31,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,160, 32,110, 27, + 1, 0, 0, 0,224, 29,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,239, 5, 0, 0,112, 0, 0, 0, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,160, 32,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 64, 31,110, 27, 1, 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,162, 3, 0, 0, 18, 0, 0, 0, +239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 0, 0, 32, 65, + 0, 0,128, 64, 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,240, 5,163, 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,239, 5, 0, 0,112, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,240, 5,163, 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, 68, 65, 84, 65,240, 0, 0, 0, 0, 34,110, 27, 1, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0,240, 37,110, 27, + 1, 0, 0, 0,128, 28,110, 27, 1, 0, 0, 0,224, 29,110, 27, 1, 0, 0, 0,160, 32,110, 27, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 48, 35,110, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,144, 36,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 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,151, 4, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 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, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 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, 68, 65, 84, 65, 40, 1, 0, 0,144, 36,110, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 35,110, 27, 1, 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,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0, +121, 2, 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,152, 4,122, 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,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65,200, 0, 0, 0,240, 37,110, 27, 1, 0, 0, 0,173, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,110, 27, 1, 0, 0, 0, 48, 35,110, 27, 1, 0, 0, 0,144, 36,110, 27, + 1, 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, 1, 0, 0, 0, 6, 0, 0, 0, 83, 78, 0, 0,208, 0, 0, 0,240, 38,110, 27, 1, 0, 0, 0,191, 0, 0, 0, + 1, 0, 0, 0,128, 74,111, 27, 1, 0, 0, 0,240,254,131, 29, 1, 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, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,151,110, 27, 1, 0, 0, 0,224,112,109, 27, 1, 0, 0, 0, 96, 45,109, 27, + 1, 0, 0, 0, 0, 42,110, 27, 1, 0, 0, 0, 96, 42,110, 27, 1, 0, 0, 0, 16,113,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 66,136, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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,176,151,110, 27, + 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 16,152,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 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, 16,152,110, 27, 1, 0, 0, 0,192, 0, 0, 0, + 1, 0, 0, 0,192,108,109, 27, 1, 0, 0, 0,176,151,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 4, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,192,108,109, 27, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 32,109,109, 27, + 1, 0, 0, 0, 16,152,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,128, 4, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0, 32,109,109, 27, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,128,109,109, 27, 1, 0, 0, 0,192,108,109, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,128,109,109, 27, + 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,224,109,109, 27, 1, 0, 0, 0, 32,109,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,100, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,224,109,109, 27, 1, 0, 0, 0,192, 0, 0, 0, + 1, 0, 0, 0, 64,110,109, 27, 1, 0, 0, 0,128,109,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,100, 4, + 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 64,110,109, 27, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,160,110,109, 27, + 1, 0, 0, 0,224,109,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,100, 4, 1, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0,160,110,109, 27, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0,111,109, 27, 1, 0, 0, 0, 64,110,109, 27, + 1, 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, 0,111,109, 27, + 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 96,111,109, 27, 1, 0, 0, 0,160,110,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,192, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 96,111,109, 27, 1, 0, 0, 0,192, 0, 0, 0, + 1, 0, 0, 0,192,111,109, 27, 1, 0, 0, 0, 0,111,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,192, 1, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,192,111,109, 27, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 32,112,109, 27, + 1, 0, 0, 0, 96,111,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 2, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0, 32,112,109, 27, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,128,112,109, 27, 1, 0, 0, 0,192,111,109, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 2,192, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,128,112,109, 27, + 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,224,112,109, 27, 1, 0, 0, 0, 32,112,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,240, 5, 64, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,224,112,109, 27, 1, 0, 0, 0,192, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,112,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 64, 3, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 96, 45,109, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,192, 45,109, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,108,109, 27, 1, 0, 0, 0, 16,152,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,192, 45,109, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 32, 46,109, 27, + 1, 0, 0, 0, 96, 45,109, 27, 1, 0, 0, 0,128,109,109, 27, 1, 0, 0, 0, 16,152,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 32, 46,109, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,128, 46,109, 27, + 1, 0, 0, 0,192, 45,109, 27, 1, 0, 0, 0,192,108,109, 27, 1, 0, 0, 0,224,109,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,128, 46,109, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,224, 46,109, 27, + 1, 0, 0, 0, 32, 46,109, 27, 1, 0, 0, 0,128,109,109, 27, 1, 0, 0, 0,224,109,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,224, 46,109, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 64, 47,109, 27, + 1, 0, 0, 0,128, 46,109, 27, 1, 0, 0, 0,224,109,109, 27, 1, 0, 0, 0, 64,110,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 64, 47,109, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,160, 47,109, 27, + 1, 0, 0, 0,224, 46,109, 27, 1, 0, 0, 0,128,109,109, 27, 1, 0, 0, 0, 64,110,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,160, 47,109, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 48,109, 27, + 1, 0, 0, 0, 64, 47,109, 27, 1, 0, 0, 0, 32,109,109, 27, 1, 0, 0, 0,160,110,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 0, 48,109, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 96, 48,109, 27, + 1, 0, 0, 0,160, 47,109, 27, 1, 0, 0, 0, 0,111,109, 27, 1, 0, 0, 0,176,151,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 96, 48,109, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,192, 48,109, 27, + 1, 0, 0, 0, 0, 48,109, 27, 1, 0, 0, 0,128,109,109, 27, 1, 0, 0, 0, 0,111,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,192, 48,109, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 32, 49,109, 27, + 1, 0, 0, 0, 96, 48,109, 27, 1, 0, 0, 0, 64,110,109, 27, 1, 0, 0, 0, 96,111,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 32, 49,109, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,128, 49,109, 27, + 1, 0, 0, 0,192, 48,109, 27, 1, 0, 0, 0,160,110,109, 27, 1, 0, 0, 0, 96,111,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,128, 49,109, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,224, 49,109, 27, + 1, 0, 0, 0, 32, 49,109, 27, 1, 0, 0, 0, 0,111,109, 27, 1, 0, 0, 0, 96,111,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,224, 49,109, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 64, 50,109, 27, + 1, 0, 0, 0,128, 49,109, 27, 1, 0, 0, 0,192,111,109, 27, 1, 0, 0, 0,176,151,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 64, 50,109, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,160, 50,109, 27, + 1, 0, 0, 0,224, 49,109, 27, 1, 0, 0, 0,160,110,109, 27, 1, 0, 0, 0,192,111,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,160, 50,109, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 51,109, 27, + 1, 0, 0, 0, 64, 50,109, 27, 1, 0, 0, 0, 0,111,109, 27, 1, 0, 0, 0, 32,112,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 0, 51,109, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 96, 51,109, 27, + 1, 0, 0, 0,160, 50,109, 27, 1, 0, 0, 0, 96,111,109, 27, 1, 0, 0, 0, 32,112,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 96, 51,109, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,192, 51,109, 27, + 1, 0, 0, 0, 0, 51,109, 27, 1, 0, 0, 0,192,111,109, 27, 1, 0, 0, 0, 32,112,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,192, 51,109, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 32, 52,109, 27, + 1, 0, 0, 0, 96, 51,109, 27, 1, 0, 0, 0,160,110,109, 27, 1, 0, 0, 0,128,112,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 32, 52,109, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 64, 41,110, 27, + 1, 0, 0, 0,192, 51,109, 27, 1, 0, 0, 0, 64,110,109, 27, 1, 0, 0, 0,128,112,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 64, 41,110, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,160, 41,110, 27, + 1, 0, 0, 0, 32, 52,109, 27, 1, 0, 0, 0,224,109,109, 27, 1, 0, 0, 0,224,112,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,160, 41,110, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 42,110, 27, + 1, 0, 0, 0, 64, 41,110, 27, 1, 0, 0, 0, 32,109,109, 27, 1, 0, 0, 0,224,112,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 0, 42,110, 27, 1, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,160, 41,110, 27, 1, 0, 0, 0,128,112,109, 27, 1, 0, 0, 0,224,112,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 96, 42,110, 27, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 46,110, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,109,109, 27, 1, 0, 0, 0, 16,152,110, 27, 1, 0, 0, 0,192,108,109, 27, + 1, 0, 0, 0,224,109,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,101, 4, 0, 0, +128, 4, 0, 0, 7, 7,129, 7, 28, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,132,111, 27, + 1, 0, 0, 0,144,132,111, 27, 1, 0, 0, 0, 64, 43,110, 27, 1, 0, 0, 0,160, 44,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 64, 43,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,160, 44,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,224,162, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,240, 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,128, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,129, 7, 26, 0,129, 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, 0, 0, 0, 0, 0, 0, 0, 0, +128, 7, 0, 0,101, 4, 0, 0,126, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 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, 68, 65, 84, 65, + 40, 1, 0, 0,160, 44,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 43,110, 27, + 1, 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, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 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, 0, 0, 0, 0, +128, 7, 0, 0,127, 4, 0, 0,128, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 46,110, 27, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,240, 75,110, 27, 1, 0, 0, 0, 96, 42,110, 27, + 1, 0, 0, 0,160,110,109, 27, 1, 0, 0, 0,128,112,109, 27, 1, 0, 0, 0,224,112,109, 27, 1, 0, 0, 0, 32,109,109, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 63, 3, 0, 0, 4, 4,144, 1, + 64, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65,110, 27, 1, 0, 0, 0,144, 74,110, 27, + 1, 0, 0, 0,224, 46,110, 27, 1, 0, 0, 0, 64, 48,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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,224, 46,110, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 64, 48,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,205, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,200, 67, 0, 0, 0, 0, 0, 0,248, 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, +143, 1, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,144, 1, 31, 0,144, 1, 31, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,128, 7, 0, 0, 33, 3, 0, 0, + 63, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 1, 31, 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, 68, 65, 84, 65, 40, 1, 0, 0, 64, 48,110, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 46,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0,191, 67, 0, 64, 68,196, 0, 0, 0, 0, 0, 0, 0, 0,255,127,191, 67,255,191, 67,196, 0, 0, 0, 0,127, 1, 0, 0, +144, 1, 0, 0, 18, 0, 0, 0, 32, 3, 0, 0, 0, 0, 0, 0,126, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, +126, 1, 0, 0, 18, 0, 0, 0, 32, 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, 4, 6, 0,144, 1, 33, 3,127, 1, 15, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, + 32, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 1, 33, 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,160, 49,110, 27, 1, 0, 0, 0,176, 63,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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,160, 49,110, 27, + 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 48, 51,110, 27, 1, 0, 0, 0, 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,126, 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, 48, 51,110, 27, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,192, 52,110, 27, + 1, 0, 0, 0,160, 49,110, 27, 1, 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, +126, 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,192, 52,110, 27, + 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 80, 54,110, 27, 1, 0, 0, 0, 48, 51,110, 27, 1, 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,126, 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, 80, 54,110, 27, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,224, 55,110, 27, + 1, 0, 0, 0,192, 52,110, 27, 1, 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, +126, 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,224, 55,110, 27, + 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,112, 57,110, 27, 1, 0, 0, 0, 80, 54,110, 27, 1, 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,126, 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,112, 57,110, 27, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 59,110, 27, + 1, 0, 0, 0,224, 55,110, 27, 1, 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,188,253, +126, 1,102, 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, 0, 59,110, 27, + 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,144, 60,110, 27, 1, 0, 0, 0,112, 57,110, 27, 1, 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, 59,253,126, 1,105, 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,144, 60,110, 27, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 32, 62,110, 27, + 1, 0, 0, 0, 0, 59,110, 27, 1, 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, 35,253, +126, 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, 32, 62,110, 27, + 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,176, 63,110, 27, 1, 0, 0, 0,144, 60,110, 27, 1, 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, 11,253,126, 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,176, 63,110, 27, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 32, 62,110, 27, 1, 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,243,252, +126, 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, 0, 1, 0, 0, 64, 65,110, 27, + 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0,160, 70,110, 27, 1, 0, 0, 0, 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, 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, 68, 65, 84, 65, 40, 1, 0, 0,128, 66,110, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,224, 67,110, 27, 1, 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,216, 65, 0, 0, 0, 0, 0, 0,242, 67, 0, 0, 0, 0, 0, 0,216, 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,227, 1, 0, 0, 0, 0, 0, 0, + 26, 0, 0, 0, 0,128,241, 67, 0, 0,208, 65, 0,128,241, 67, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,228, 1, 27, 0,228, 1, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,157, 5, 0, 0,128, 7, 0, 0, 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228, 1, 27, 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, 68, 65, 84, 65, 40, 1, 0, 0,224, 67,110, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 64, 69,110, 27, 1, 0, 0, 0,128, 66,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 0, 0,128, 7, 0, 0,112, 0, 0, 0,235, 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, 68, 65, 84, 65, 40, 1, 0, 0, 64, 69,110, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 67,110, 27, 1, 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, +123, 1, 0, 0, 18, 0, 0, 0,227, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,227, 1, 0, 0, 18, 0, 0, 0, +123, 1, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 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,228, 1,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,157, 5, 0, 0,128, 7, 0, 0,112, 0, 0, 0,235, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228, 1,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,160, 70,110, 27, 1, 0, 0, 0,164, 0, 0, 0, + 1, 0, 0, 0,144, 74,110, 27, 1, 0, 0, 0, 64, 65,110, 27, 1, 0, 0, 0,128, 66,110, 27, 1, 0, 0, 0, 64, 69,110, 27, + 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,208, 71,110, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 48, 73,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 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, + 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 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, 0, 0, 0, 0, 89, 6, 0, 0,108, 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, 20, 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, 68, 65, 84, 65, 40, 1, 0, 0, 48, 73,110, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 71,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0,108, 7, 0, 0, 26, 0, 0, 0, + 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 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, 48, 10,136, 27, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48, 10,136, 27, + 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, + 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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, 32,193, 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, 32, 65, 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, + 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195,115,253, 71,194, 0, 0, 0, 0, + 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 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, 32,193, 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, + 0, 0, 0, 0,184,175, 31, 65, 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, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,144, 74,110, 27, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,160, 70,110, 27, 1, 0, 0, 0,208, 71,110, 27, 1, 0, 0, 0, 48, 73,110, 27, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48, 68,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, + 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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,240, 75,110, 27, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,128,105,110, 27, 1, 0, 0, 0, 0, 46,110, 27, + 1, 0, 0, 0,192,111,109, 27, 1, 0, 0, 0, 32,112,109, 27, 1, 0, 0, 0, 96,111,109, 27, 1, 0, 0, 0,160,110,109, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 2, 0, 0,239, 5, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 18, 18,255, 2, +192, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 79,110, 27, 1, 0, 0, 0,128,104,110, 27, + 1, 0, 0, 0,208, 76,110, 27, 1, 0, 0, 0, 48, 78,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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,208, 76,110, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 48, 78,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,192, 63, 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, +254, 2, 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, 4, 10, 0,255, 2, 26, 0,255, 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, 0, 0, 0, 0,241, 2, 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,255, 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, 68, 65, 84, 65, 40, 1, 0, 0, 48, 78,110, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 76,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0,128, 63, 68, 0, 0, 0, 0, 0, 0, 51, 67, 0, 0, 0, 0, 0,128, 59, 68, 0, 0, 0, 0, 0, 0,211, 67,238, 2, 0, 0, +255, 2, 0, 0, 0, 0, 0, 0,165, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +237, 2, 0, 0, 0, 0, 0, 0,165, 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, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,255, 2,166, 1,238, 2,166, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 2, 0, 0,239, 5, 0, 0, 26, 0, 0, 0, +191, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 2,166, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,136, 1, 0, 0,144, 79,110, 27, + 1, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, 48, 14,136, 27, 1, 0, 0, 0, 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, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 80, 81,110, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,176, 82,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,128,251, 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, 4, 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, 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, 68, 65, 84, 65, 40, 1, 0, 0,176, 82,110, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 81,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0,224,189, 68, 0, 0, 0, 0, 0,128,192, 67, 0, 6,188, 63,254,176,189, 68, 0, 0, 0, 0, 0,128,192, 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, +239, 5, 0, 0, 0, 0, 0, 0,129, 1, 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,240, 5,130, 1,240, 5,130, 1, 0, 0, 0, 0, 0, 0, + 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, 26, 0, 0, 0, +155, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,130, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 2, 0, 0, 48, 14,136, 27, + 1, 0, 0, 0,170, 0, 0, 0, 1, 0, 0, 0,208, 86,110, 27, 1, 0, 0, 0,144, 79,110, 27, 1, 0, 0, 0, 80, 81,110, 27, + 1, 0, 0, 0,176, 82,110, 27, 1, 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, + 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 16, 84,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,112, 85,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, 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, 4, 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, 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, 68, 65, 84, 65, + 40, 1, 0, 0,112, 85,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 84,110, 27, + 1, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68,134,137,182,195,195, 68, 91, 68, 30,222,207, 66, +116, 8,204, 67,223, 5, 0, 0,240, 5, 0, 0, 18, 0, 0, 0,129, 1, 0, 0, 0, 0, 0, 0,222, 5, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0,222, 5, 0, 0, 18, 0, 0, 0,129, 1, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, + 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0,240, 5,130, 1,223, 5, +112, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +239, 5, 0, 0, 26, 0, 0, 0,155, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,130, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,208, 86,110, 27, 1, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0, 80, 92,110, 27, 1, 0, 0, 0, 48, 14,136, 27, + 1, 0, 0, 0, 16, 84,110, 27, 1, 0, 0, 0,112, 85,110, 27, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 66,136, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 52, 81, 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, 68, 65, 84, 65, 40, 1, 0, 0, 48, 88,110, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,144, 89,110, 27, 1, 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,216, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 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, 26, 0, 0, 0, 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,240, 5, 27, 0,240, 5, 27, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 85, 0, 0, 0, +111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 27, 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, 68, 65, 84, 65, 40, 1, 0, 0,144, 89,110, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,240, 90,110, 27, 1, 0, 0, 0, 48, 88,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,239, 5, 0, 0,112, 0, 0, 0, + 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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,240, 90,110, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 89,110, 27, 1, 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,162, 3, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, +239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 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,240, 5,163, 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,239, 5, 0, 0,112, 0, 0, 0, + 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,163, 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, 68, 65, 84, 65,240, 0, 0, 0, 80, 92,110, 27, + 1, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0, 96,100,110, 27, 1, 0, 0, 0,208, 86,110, 27, 1, 0, 0, 0, 48, 88,110, 27, + 1, 0, 0, 0,240, 90,110, 27, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0,128, 93,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,224, 94,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,157, 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,231, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,232, 4, 26, 0,232, 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, 0, 0, 0, 0,153, 2, 0, 0, +128, 7, 0, 0,225, 1, 0, 0,250, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 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, 68, 65, 84, 65, + 40, 1, 0, 0,224, 94,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 64, 96,110, 27, 1, 0, 0, 0,128, 93,110, 27, + 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0, +153, 2, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 24, 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, 68, 65, 84, 65, + 40, 1, 0, 0, 64, 96,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,160, 97,110, 27, 1, 0, 0, 0,224, 94,110, 27, + 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0, +128, 7, 0, 0,251, 1, 0, 0,251, 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, 68, 65, 84, 65, + 40, 1, 0, 0,160, 97,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 99,110, 27, 1, 0, 0, 0, 64, 96,110, 27, + 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, +128, 7, 0, 0,251, 1, 0, 0, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 99,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 97,110, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0, +128, 7, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 4, 24, 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, 48, 18,136, 27, 1, 0, 0, 0, 68, 65, 84, 65, + 88, 3, 0, 0, 48, 18,136, 27, 1, 0, 0, 0,157, 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,165, 7, 36, 64, 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,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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,180,157,229, 62,169,203,131,191,222,160, 81,191, +184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, 35, 44,185, 62,147,180,109,188,102,208, 18, 64,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,128, 32,182, 69,129, 32,190,250,186,154, 61,170,205,178, 62, 0, 64, 1, 53,215,104, 25,196,135,132,135, 67, 37, 9,167,195, +136,252, 71,194, 3, 54, 25, 68,160, 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,180,157,229, 62,169,203,131,191,222,160, 81,191, +184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, 35, 44,185, 62,147,180,109,188,102,208, 18, 64,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, 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,218,210,190, 58, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 96,100,110, 27, 1, 0, 0, 0,158, 0, 0, 0, + 1, 0, 0, 0,128,104,110, 27, 1, 0, 0, 0, 80, 92,110, 27, 1, 0, 0, 0,128, 93,110, 27, 1, 0, 0, 0, 0, 99,110, 27, + 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48, 68,132, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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,192,101,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 32,103,110, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0, 0,147, 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,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, + 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, + 10, 0,152, 4, 26, 0,152, 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, + 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,152, 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, 68, 65, 84, 65, 40, 1, 0, 0, 32,103,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,192,101,110, 27, 1, 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, +151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 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,152, 4,122, 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,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65,200, 0, 0, 0,128,104,110, 27, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 96,100,110, 27, 1, 0, 0, 0,192,101,110, 27, 1, 0, 0, 0, 32,103,110, 27, 1, 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, 1, 0, 0, 0, + 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,128,105,110, 27, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0,116,110, 27, + 1, 0, 0, 0,240, 75,110, 27, 1, 0, 0, 0, 0,111,109, 27, 1, 0, 0, 0,128,109,109, 27, 1, 0, 0, 0, 64,110,109, 27, + 1, 0, 0, 0, 96,111,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0,193, 1, 0, 0, + 99, 4, 0, 0, 9, 9,240, 5,163, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 22,136, 27, + 1, 0, 0, 0, 64,234,132, 29, 1, 0, 0, 0, 96,106,110, 27, 1, 0, 0, 0,192,107,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 96,106,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,192,107,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209, 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, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0, +239, 5, 0, 0,193, 1, 0, 0,218, 1, 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, 68, 65, 84, 65, + 40, 1, 0, 0,192,107,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,106,110, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0,224,189, 68, 0, 0, 0, 0, 0,192, 22, 68,168, 86,234, 67, 86, 74,131, 68,133, 83, 49, 67, + 62,214,212, 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,239, 5, 0, 0, 0, 0, 0, 0,136, 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,240, 5,137, 2,240, 5, +137, 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, +239, 5, 0, 0,219, 1, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,137, 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, 68, 65, 84, 65, +144, 2, 0, 0, 48, 22,136, 27, 1, 0, 0, 0,170, 0, 0, 0, 1, 0, 0, 0,224,111,110, 27, 1, 0, 0, 0, 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, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 32,109,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,128,110,110, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, 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, 4, + 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, + 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0,157, 1, 0, 0,182, 1, 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, 68, 65, 84, 65, 40, 1, 0, 0,128,110,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 32,109,110, 27, 1, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68,132,137,182,195, +194, 68, 91, 68,112,158, 93, 65, 8, 19,249, 67,223, 5, 0, 0,240, 5, 0, 0, 18, 0, 0, 0, 91, 2, 0, 0, 0, 0, 0, 0, +222, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,222, 5, 0, 0, 18, 0, 0, 0, 91, 2, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, + 0, 0,240, 5, 92, 2,223, 5, 74, 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,239, 5, 0, 0,183, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,240, 5, 92, 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, 68, 65, 84, 65, 32, 1, 0, 0,224,111,110, 27, 1, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0,144, 2,133, 29, + 1, 0, 0, 0, 48, 22,136, 27, 1, 0, 0, 0, 32,109,110, 27, 1, 0, 0, 0,128,110,110, 27, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 66,136, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 57, 52, 81, 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, 68, 65, 84, 65, + 40, 1, 0, 0, 64,113,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,160,114,110, 27, 1, 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,216, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, + 0, 0,216, 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, 26, 0, 0, 0, 0,224,189, 68, 0, 0,208, 65, 0,224,189, 68, + 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,240, 5, 27, 0,240, 5, + 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +239, 5, 0, 0, 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 27, 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, 68, 65, 84, 65, + 40, 1, 0, 0,160,114,110, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 48, 1,133, 29, 1, 0, 0, 0, 64,113,110, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, +239, 5, 0, 0,112, 0, 0, 0, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 48, 1,133, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,114,110, 27, + 1, 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,162, 3, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 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,240, 5,163, 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, +239, 5, 0, 0,112, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,163, 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, 68, 65, 84, 65, +240, 0, 0, 0,144, 2,133, 29, 1, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0,224,238,132, 29, 1, 0, 0, 0,224,111,110, 27, + 1, 0, 0, 0, 64,113,110, 27, 1, 0, 0, 0, 48, 1,133, 29, 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192, 3,133, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,128,231,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0, 0,157, 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,231, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, + 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, + 10, 0,232, 4, 26, 0,232, 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, + 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0,225, 1, 0, 0,250, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,232, 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, 68, 65, 84, 65, 40, 1, 0, 0,128,231,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,224,232,132, 29, + 1, 0, 0, 0,192, 3,133, 29, 1, 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, 0, 0, 0, 0, + 0, 0, 0, 0,153, 2, 0, 0,153, 2, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 24, 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, 68, 65, 84, 65, 40, 1, 0, 0,224,232,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 32,236,132, 29, + 1, 0, 0, 0,128,231,132, 29, 1, 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, 0, 0, 0, 0, + 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0,251, 1, 0, 0,251, 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, 68, 65, 84, 65, 40, 1, 0, 0, 32,236,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,128,237,132, 29, + 1, 0, 0, 0,224,232,132, 29, 1, 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, 0, 0, 0, 0, + 0, 0, 0, 0,128, 7, 0, 0,128, 7, 0, 0,251, 1, 0, 0, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,128,237,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 32,236,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,232, 4, 24, 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, 48, 26,136, 27, + 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48, 26,136, 27, 1, 0, 0, 0,157, 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,165, 7, 36, 64, 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,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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,180,157,229, 62, +169,203,131,191,222,160, 81,191,184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, 35, 44,185, 62,147,180,109,188, +102,208, 18, 64,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,128, 32,182, 69,129, 32,190,250,186,154, 61,170,205,178, 62, 0, 64, 1, 53,215,104, 25,196, +135,132,135, 67, 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68,160, 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,180,157,229, 62, +169,203,131,191,222,160, 81,191,184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, 35, 44,185, 62,147,180,109,188, +102,208, 18, 64,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, 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,218,210,190, 58, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0,224,238,132, 29, + 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 64,234,132, 29, 1, 0, 0, 0,144, 2,133, 29, 1, 0, 0, 0,192, 3,133, 29, + 1, 0, 0, 0,128,237,132, 29, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, + 1, 0, 7, 0, 48, 68,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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, 64,240,132, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,160,241,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 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,151, 4, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 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, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 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, 68, 65, 84, 65, 40, 1, 0, 0,160,241,132, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,240,132, 29, 1, 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,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0, +121, 2, 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,152, 4,122, 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,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65,200, 0, 0, 0, 64,234,132, 29, 1, 0, 0, 0,173, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,238,132, 29, 1, 0, 0, 0, 64,240,132, 29, 1, 0, 0, 0,160,241,132, 29, + 1, 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, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 0,116,110, 27, 1, 0, 0, 0,195, 0, 0, 0, + 1, 0, 0, 0, 16,113,111, 27, 1, 0, 0, 0,128,105,110, 27, 1, 0, 0, 0,176,151,110, 27, 1, 0, 0, 0, 0,111,109, 27, + 1, 0, 0, 0, 32,112,109, 27, 1, 0, 0, 0,192,111,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +239, 2, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 18, 18,240, 2,192, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,192,245,132, 29, 1, 0, 0, 0, 16,112,111, 27, 1, 0, 0, 0, 0,243,132, 29, 1, 0, 0, 0, 96,244,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0,243,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 96,244,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,231, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0, 0, 60, 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, 2, 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, 4, + 10, 0,240, 2, 26, 0,240, 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, + 0, 0, 0, 0, 0, 0, 0, 0,239, 2, 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, 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, 68, 65, 84, 65, 40, 1, 0, 0, 96,244,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,243,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 59, 68, 0, 0, 0, 0, 0, 0, 51, 67, 0, 0, 0, 0, + 0,192, 55, 68, 0, 0, 0, 0, 0, 0,211, 67,223, 2, 0, 0,240, 2, 0, 0, 0, 0, 0, 0,165, 1, 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, 0, 0, 0, 0,165, 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, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, + 10, 0,240, 2,166, 1,223, 2,166, 1, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0, 26, 0, 0, 0,191, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,240, 2,166, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,136, 1, 0, 0,192,245,132, 29, 1, 0, 0, 0,178, 0, 0, 0, 1, 0, 0, 0, 48, 30,136, 27, + 1, 0, 0, 0, 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, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, + 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 68, 65, 84, 65, 40, 1, 0, 0,128,247,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,224,248,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,251, 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, 4, + 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, + 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, 68, 65, 84, 65, 40, 1, 0, 0,224,248,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,128,247,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0,224,189, 68, 0, 0, 0, 0, 0,128,192, 67, 0, 6,188, 63, +254,176,189, 68, 0, 0, 0, 0, 0,128,192, 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,239, 5, 0, 0, 0, 0, 0, 0,129, 1, 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,240, 5,130, 1,240, 5,130, 1, 0, 0, 0, 0, 0, 0, 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, 26, 0, 0, 0,155, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,240, 5,130, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0, 48, 30,136, 27, 1, 0, 0, 0,170, 0, 0, 0, 1, 0, 0, 0,160,228,109, 27, + 1, 0, 0, 0,192,245,132, 29, 1, 0, 0, 0,128,247,132, 29, 1, 0, 0, 0,224,248,132, 29, 1, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 64,250,132, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,160,251,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68, 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, 4, 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, 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, 68, 65, 84, 65, 40, 1, 0, 0,160,251,132, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,250,132, 29, 1, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, + 0, 0, 0, 68,134,137,182,195,195, 68, 91, 68, 30,222,207, 66,116, 8,204, 67,223, 5, 0, 0,240, 5, 0, 0, 18, 0, 0, 0, +129, 1, 0, 0, 0, 0, 0, 0,222, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,222, 5, 0, 0, 18, 0, 0, 0, +129, 1, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70,205,204, 76, 62, 72,225,154, 63, 10, 0, 0, 0, + 0, 0, 3, 0, 0, 0, 0, 4, 0, 0,240, 5,130, 1,223, 5,112, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 26, 0, 0, 0,155, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,130, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,160,228,109, 27, 1, 0, 0, 0,174, 0, 0, 0, + 1, 0, 0, 0, 0,230,109, 27, 1, 0, 0, 0, 48, 30,136, 27, 1, 0, 0, 0, 64,250,132, 29, 1, 0, 0, 0,160,251,132, 29, + 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 66,136, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 58, 52, 81, 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, 68, 65, 84, 65, 40, 1, 0, 0, 64,136,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,160,137,132, 29, + 1, 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,216, 65, 0, 0, 0, 0, + 0, 0,190, 68, 0, 0, 0, 0, 0, 0,216, 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, 26, 0, 0, 0, 0,224,189, 68, + 0, 0,208, 65, 0,224,189, 68, 0, 0,208, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, + 10, 0,240, 5, 27, 0,240, 5, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,240, 5, 27, 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, 68, 65, 84, 65, 40, 1, 0, 0,160,137,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0,139,132, 29, + 1, 0, 0, 0, 64,136,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,239, 5, 0, 0,112, 0, 0, 0, 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0,139,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,160,137,132, 29, 1, 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,162, 3, 0, 0, 18, 0, 0, 0, +239, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,239, 5, 0, 0, 18, 0, 0, 0,162, 3, 0, 0, 0, 0, 32, 65, + 0, 0,128, 64, 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,240, 5,163, 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,239, 5, 0, 0,112, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,240, 5,163, 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, 68, 65, 84, 65,240, 0, 0, 0, 0,230,109, 27, 1, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0,240,107,111, 27, + 1, 0, 0, 0,160,228,109, 27, 1, 0, 0, 0, 64,136,132, 29, 1, 0, 0, 0, 0,139,132, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 96,140,132, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,192,141,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0,157, 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,231, 4, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,232, 4, 26, 0,232, 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, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0,225, 1, 0, 0,250, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 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, 68, 65, 84, 65, 40, 1, 0, 0,192,141,132, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 32,143,132, 29, 1, 0, 0, 0, 96,140,132, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,153, 2, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 24, 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, 68, 65, 84, 65, 40, 1, 0, 0, 32,143,132, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,128,144,132, 29, 1, 0, 0, 0,192,141,132, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0,251, 1, 0, 0,251, 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, 68, 65, 84, 65, 40, 1, 0, 0,128,144,132, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,224,145,132, 29, 1, 0, 0, 0, 32,143,132, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,128, 7, 0, 0,251, 1, 0, 0, 18, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,224,145,132, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,144,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 4, 24, 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, 48, 34,136, 27, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48, 34,136, 27, 1, 0, 0, 0,157, 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,165, 7, 36, 64, 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,128, 0, 0, 0,128,226,215,163,188, + 0, 0, 0,128, 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,180,157,229, 62,169,203,131,191,222,160, 81,191,184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, + 35, 44,185, 62,147,180,109,188,102,208, 18, 64,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,128, 32,182, 69,129, 32,190,250,186,154, 61,170,205,178, 62, + 0, 64, 1, 53,215,104, 25,196,135,132,135, 67, 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68,160, 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,180,157,229, 62,169,203,131,191,222,160, 81,191,184,158, 81,191,118, 90,127, 63, 95, 27,254, 62, 9, 46,185, 62, + 35, 44,185, 62,147,180,109,188,102,208, 18, 64,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, 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,218,210,190, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,240,107,111, 27, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 16,112,111, 27, 1, 0, 0, 0, 0,230,109, 27, + 1, 0, 0, 0, 96,140,132, 29, 1, 0, 0, 0,224,145,132, 29, 1, 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, + 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48, 68,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 8, + 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, + 1, 0, 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, 0, 0, 0, 0, + 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, 80,109,111, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,176,110,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 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, +151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 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, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0, +126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 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, 68, 65, 84, 65, 40, 1, 0, 0,176,110,111, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,109,111, 27, 1, 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,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, +151, 4, 0, 0, 18, 0, 0, 0,121, 2, 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,152, 4,122, 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,151, 4, 0, 0,127, 0, 0, 0, +248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65,200, 0, 0, 0, 16,112,111, 27, + 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,107,111, 27, 1, 0, 0, 0, 80,109,111, 27, + 1, 0, 0, 0,176,110,111, 27, 1, 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, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 16,113,111, 27, + 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,116,110, 27, 1, 0, 0, 0,128,112,109, 27, + 1, 0, 0, 0, 64,110,109, 27, 1, 0, 0, 0,224,109,109, 27, 1, 0, 0, 0,224,112,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,241, 5, 0, 0,128, 7, 0, 0, 65, 3, 0, 0, 99, 4, 0, 0, 3, 3,144, 1, 35, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,116,111, 27, 1, 0, 0, 0, 48,131,111, 27, 1, 0, 0, 0,240,113,111, 27, + 1, 0, 0, 0, 80,115,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,240,113,111, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 80,115,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,163, 67, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0,200, 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,143, 1, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,128,149, 67, 0, 0,200, 65, 0,128,149, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,144, 1, 26, 0,144, 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, 0, 0, 0, 0,241, 5, 0, 0,128, 7, 0, 0, 65, 3, 0, 0, 90, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 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, 68, 65, 84, 65, 40, 1, 0, 0, 80,115,111, 27, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,113,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0,128,131, 67, 0, 0,228,194, + 0, 0, 0, 0, 0, 0, 0, 0, 0,128,191, 67, 0, 0,119,195, 0, 0, 0, 0,127, 1, 0, 0,144, 1, 0, 0, 18, 0, 0, 0, + 8, 1, 0, 0, 0, 0, 0, 0,126, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,126, 1, 0, 0, 18, 0, 0, 0, + 8, 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, 18, 0, 0, 0, + 2, 0, 3, 3, 0, 0, 0, 4, 6, 0,144, 1, 9, 1,127, 1,247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,128, 7, 0, 0, 91, 3, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 1, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,176,116,111, 27, 1, 0, 0, 0,167, 0, 0, 0, + 1, 0, 0, 0,224,121,111, 27, 1, 0, 0, 0, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 64,113,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 64,113,109, 27, 1, 0, 0, 0,219, 0, 0, 0, + 1, 0, 0, 0, 13, 0, 0, 0, 13, 0, 0, 0, 16,118,111, 27, 1, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0, 16,118,111, 27, + 1, 0, 0, 0,218, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 48, 66,136, 27, 1, 0, 0, 0, 19, 0, 0, 0, + 1, 0, 1, 0, 48, 66,136, 27, 1, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0, 48, 66,136, 27, 1, 0, 0, 0, 21, 0, 1, 0, + 1, 0, 1, 0, 48, 66,136, 27, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48, 58,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 48, 74,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48,171,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 48, 86,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 64,198,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 48, 80,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 48, 54,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 48, 68,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 32,163,176, 21, 1, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0, 32,119,111, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,128,120,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,150, 67, 0, 0, 0, 0, + 0, 0,248, 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, 43, 1, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 44, 1, 31, 0, 44, 1, + 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,117, 4, 0, 0, +160, 5, 0, 0,218, 2, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 1, 31, 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, 68, 65, 84, 65, + 40, 1, 0, 0,128,120,111, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,119,111, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0,128,141, 67, 0, 0, 62,196, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,141, 67, 0, 0,246,194, + 0, 0, 0, 0, 27, 1, 0, 0, 44, 1, 0, 0, 18, 0, 0, 0,140, 0, 0, 0, 0, 0, 0, 0, 26, 1, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0, 26, 1, 0, 0, 18, 0, 0, 0,140, 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, 44, 1,141, 0, 27, 1, +123, 0, 0, 0, 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, 4, 0, 0, +160, 5, 0, 0, 77, 2, 0, 0,217, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 1,141, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 0, 1, 0, 0,224,121,111, 27, 1, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, 64,127,111, 27, 1, 0, 0, 0,176,116,111, 27, + 1, 0, 0, 0, 32,119,111, 27, 1, 0, 0, 0,128,120,111, 27, 1, 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, 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, 68, 65, 84, 65, 40, 1, 0, 0, 32,123,111, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,128,124,111, 27, 1, 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,216, 65, 0, 0, 0, 0, 0, 0,242, 67, 0, 0, 0, 0, 0, 0,216, 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, +227, 1, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0,128,241, 67, 0, 0,208, 65, 0,128,241, 67, 0, 0,208, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,228, 1, 27, 0,228, 1, 27, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,157, 5, 0, 0,128, 7, 0, 0, 85, 0, 0, 0, +111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228, 1, 27, 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, 68, 65, 84, 65, 40, 1, 0, 0,128,124,111, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,224,125,111, 27, 1, 0, 0, 0, 32,123,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 0, 0,128, 7, 0, 0,112, 0, 0, 0, +235, 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, 68, 65, 84, 65, 40, 1, 0, 0,224,125,111, 27, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,124,111, 27, 1, 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,123, 1, 0, 0, 18, 0, 0, 0,227, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, +227, 1, 0, 0, 18, 0, 0, 0,123, 1, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 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,228, 1,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,157, 5, 0, 0,128, 7, 0, 0,112, 0, 0, 0, +235, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228, 1,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, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 64,127,111, 27, + 1, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0, 48,131,111, 27, 1, 0, 0, 0,224,121,111, 27, 1, 0, 0, 0, 32,123,111, 27, + 1, 0, 0, 0,224,125,111, 27, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0,112,128,111, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,208,129,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,138, 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, 19, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 1, 26, 0, 20, 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, 0, 0, 0, 0, 89, 6, 0, 0, +108, 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, 20, 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, 68, 65, 84, 65, + 40, 1, 0, 0,208,129,111, 27, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,128,111, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 6, 0, 0, +108, 7, 0, 0, 26, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 55, 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, 48, 38,136, 27, 1, 0, 0, 0, 68, 65, 84, 65, + 88, 3, 0, 0, 48, 38,136, 27, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,103,212,136, 64, 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, 80, 1,128,191, + 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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, 32,193, 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, 32, 65, 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, + 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 0, 0, 32, 65,237,122,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195, +115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 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, 32,193, 0, 0,128, 63,103,212,136, 64, 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, 80, 1,128,191, + 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,184,175, 31, 65, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 32,222, 58, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 48,131,111, 27, 1, 0, 0, 0,158, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,127,111, 27, 1, 0, 0, 0,112,128,111, 27, 1, 0, 0, 0,208,129,111, 27, + 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48, 68,132, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 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, 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,208, 0, 0, 0,128, 74,111, 27, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0,192,159,176, 21, + 1, 0, 0, 0,240, 38,110, 27, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 64,147,132, 29, 1, 0, 0, 0, 16, 77,111, 27, 1, 0, 0, 0,112, 71,111, 27, 1, 0, 0, 0,208,203,132, 29, + 1, 0, 0, 0, 48,204,132, 29, 1, 0, 0, 0,224, 75,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 66,136, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 64,147,132, 29, 1, 0, 0, 0,192, 0, 0, 0, + 1, 0, 0, 0, 16,133,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, 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, 16,133,111, 27, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,112,133,111, 27, + 1, 0, 0, 0, 64,147,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 4, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0,112,133,111, 27, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,144, 75,111, 27, 1, 0, 0, 0, 16,133,111, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,128, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,144, 75,111, 27, + 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,240, 75,111, 27, 1, 0, 0, 0,112,133,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,240, 75,111, 27, 1, 0, 0, 0,192, 0, 0, 0, + 1, 0, 0, 0, 80, 76,111, 27, 1, 0, 0, 0,144, 75,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 4, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 80, 76,111, 27, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,176, 76,111, 27, + 1, 0, 0, 0,240, 75,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,100, 4, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0,176, 76,111, 27, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 16, 77,111, 27, 1, 0, 0, 0, 80, 76,111, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,196, 3,100, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 16, 77,111, 27, + 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 76,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,196, 3, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,112, 71,111, 27, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,208, 71,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,133,111, 27, 1, 0, 0, 0,112,133,111, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,208, 71,111, 27, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 48, 72,111, 27, 1, 0, 0, 0,112, 71,111, 27, 1, 0, 0, 0,240, 75,111, 27, 1, 0, 0, 0, 16,133,111, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 48, 72,111, 27, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,144, 72,111, 27, 1, 0, 0, 0,208, 71,111, 27, 1, 0, 0, 0, 80, 76,111, 27, 1, 0, 0, 0,112,133,111, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,144, 72,111, 27, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,240, 72,111, 27, 1, 0, 0, 0, 48, 72,111, 27, 1, 0, 0, 0,240, 75,111, 27, 1, 0, 0, 0, 80, 76,111, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,240, 72,111, 27, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 80, 73,111, 27, 1, 0, 0, 0,144, 72,111, 27, 1, 0, 0, 0,240, 75,111, 27, 1, 0, 0, 0,176, 76,111, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 80, 73,111, 27, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,176, 73,111, 27, 1, 0, 0, 0,240, 72,111, 27, 1, 0, 0, 0, 16, 77,111, 27, 1, 0, 0, 0, 64,147,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,176, 73,111, 27, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,176,202,132, 29, 1, 0, 0, 0, 80, 73,111, 27, 1, 0, 0, 0,240, 75,111, 27, 1, 0, 0, 0, 64,147,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,176,202,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 16,203,132, 29, 1, 0, 0, 0,176, 73,111, 27, 1, 0, 0, 0,176, 76,111, 27, 1, 0, 0, 0, 16, 77,111, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 16,203,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,112,203,132, 29, 1, 0, 0, 0,176,202,132, 29, 1, 0, 0, 0, 80, 76,111, 27, 1, 0, 0, 0,176, 76,111, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,112,203,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,208,203,132, 29, 1, 0, 0, 0, 16,203,132, 29, 1, 0, 0, 0,144, 75,111, 27, 1, 0, 0, 0, 16, 77,111, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,208,203,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,203,132, 29, 1, 0, 0, 0,144, 75,111, 27, 1, 0, 0, 0, 80, 76,111, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 48,204,132, 29, 1, 0, 0, 0,195, 0, 0, 0, + 1, 0, 0, 0, 16,205,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 75,111, 27, 1, 0, 0, 0, 16,133,111, 27, + 1, 0, 0, 0,112,133,111, 27, 1, 0, 0, 0, 80, 76,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +128, 7, 0, 0,101, 4, 0, 0,128, 4, 0, 0, 7, 7,129, 7, 28, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,125,132, 29, 1, 0, 0, 0, 0,125,132, 29, 1, 0, 0, 0, 80, 6,133, 29, 1, 0, 0, 0,176, 7,133, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 80, 6,133, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,176, 7,133, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,162, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0, 32,240, 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,128, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, + 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, + 10, 0,129, 7, 26, 0,129, 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, + 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,101, 4, 0, 0,126, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,129, 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, 68, 65, 84, 65, 40, 1, 0, 0,176, 7,133, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 80, 6,133, 29, 1, 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, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, + 6, 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, 0, 0, 0, 0,128, 7, 0, 0,127, 4, 0, 0,128, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,129, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 16,205,132, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,224, 75,133, 29, + 1, 0, 0, 0, 48,204,132, 29, 1, 0, 0, 0, 64,147,132, 29, 1, 0, 0, 0,240, 75,111, 27, 1, 0, 0, 0,176, 76,111, 27, + 1, 0, 0, 0, 16, 77,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 3, 0, 0, 0, 0, 0, 0, + 99, 4, 0, 0, 6, 6,196, 3,100, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,222,132, 29, + 1, 0, 0, 0,224, 74,133, 29, 1, 0, 0, 0, 16, 9,133, 29, 1, 0, 0, 0,208, 11,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0, 16, 9,133, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,112, 10,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,202, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,113, 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,195, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 41, 68, 0, 0,200, 65, 0,192, 41, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,196, 3, 26, 0,196, 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, 0, 0, 0, 0, 0, 0, 0, 0, +195, 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,196, 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, 68, 65, 84, 65, + 40, 1, 0, 0,112, 10,133, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,208, 11,133, 29, 1, 0, 0, 0, 16, 9,133, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 67, 0,224,134,196, 0, 0, 0, 0, 0, 0, 0, 0,254,255, 74, 67,255,255,134,196, + 0, 0, 0, 0,203, 0, 0, 0,220, 0, 0, 0, 18, 0, 0, 0, 73, 4, 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, 18, 0, 0, 0, 73, 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, 4, 6, 0,220, 0, 74, 4,203, 0, + 56, 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, +219, 0, 0, 0, 26, 0, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0, 74, 4, + 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, 96,221,132, 29, 1, 0, 0, 0, 96,221,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 88, 1, 0, 0, 96,221,132, 29, 1, 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, 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,196,255,202, 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,208, 11,133, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112, 10,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, + 0, 0,128, 67,154,153, 41,191,205,204,212, 63,154,153,155,191,205,204, 13, 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,232, 2, 0, 0, 0, 0, 0, 0, + 74, 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,220, 0, 0, 0,195, 3, 0, 0, 26, 0, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 2, 74, 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, 68, 65, 84, 65,168, 0, 0, 0,240,222,132, 29, 1, 0, 0, 0,168, 0, 0, 0, + 1, 0, 0, 0,192, 70,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,208,223,132, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 48,225,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 42, 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,167, 2, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,168, 2, 26, 0,168, 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, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0, 85, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 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, 68, 65, 84, 65, 40, 1, 0, 0, 48,225,132, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,144,226,132, 29, 1, 0, 0, 0,208,223,132, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,164, 3, 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, 68, 65, 84, 65, 40, 1, 0, 0,144,226,132, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,240,227,132, 29, 1, 0, 0, 0, 48,225,132, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0,111, 0, 0, 0,111, 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, 68, 65, 84, 65, 40, 1, 0, 0,240,227,132, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 80,229,132, 29, 1, 0, 0, 0,144,226,132, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0,167, 2, 0, 0,111, 0, 0, 0, 18, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 80,229,132, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,227,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 2,164, 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, 48, 42,136, 27, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48, 42,136, 27, 1, 0, 0, 0,157, 0, 0, 0, + 1, 0, 0, 0,226,225,191, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, + 0, 0, 0,128, 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,192, 90, 29, 63,208,249,224,190,222,160, 81,191,184,158, 81,191,253,253,174, 63,140,225, 88, 62, 9, 46,185, 62, + 35, 44,185, 62,232,229,162,188,206,156,122, 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,250, 8,140, 62,174,189, 27, 63,224, 25, 17,188, 0, 64,153,181,195, 13,188,190,191, 73, 53, 62, 99,126, 81, 63, + 0,128,163, 53,215,104, 25,196,134,132,135, 67, 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68,159, 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,192, 90, 29, 63,208,249,224,190,222,160, 81,191,184,158, 81,191,253,253,174, 63,140,225, 88, 62, 9, 46,185, 62, + 35, 44,185, 62,232,229,162,188,206,156,122, 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, 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,172,148, 0, 59, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,192, 70,133, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0,224, 74,133, 29, 1, 0, 0, 0,240,222,132, 29, + 1, 0, 0, 0,208,223,132, 29, 1, 0, 0, 0, 80,229,132, 29, 1, 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, + 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48, 68,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 8, + 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, + 1, 0, 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, 0, 0, 0, 0, + 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, 32, 72,133, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,128, 73,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 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, +151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 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, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0, +126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 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, 68, 65, 84, 65, 40, 1, 0, 0,128, 73,133, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 72,133, 29, 1, 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,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, +151, 4, 0, 0, 18, 0, 0, 0,121, 2, 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,152, 4,122, 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,151, 4, 0, 0,127, 0, 0, 0, +248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65,200, 0, 0, 0,224, 74,133, 29, + 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 70,133, 29, 1, 0, 0, 0, 32, 72,133, 29, + 1, 0, 0, 0,128, 73,133, 29, 1, 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, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,224, 75,133, 29, + 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,205,132, 29, 1, 0, 0, 0, 16, 77,111, 27, + 1, 0, 0, 0,176, 76,111, 27, 1, 0, 0, 0, 80, 76,111, 27, 1, 0, 0, 0,144, 75,111, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,197, 3, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 99, 4, 0, 0, 1, 1,188, 3,100, 4, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,218,132, 29, 1, 0, 0, 0, 0,220,132, 29, 1, 0, 0, 0,192, 76,133, 29, + 1, 0, 0, 0, 64,217,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192, 76,133, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 32, 78,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,102, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0,111, 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,187, 3, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,188, 3, 26, 0,188, 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, 0, 0, 0, 0,197, 3, 0, 0,128, 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,188, 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, 68, 65, 84, 65, 40, 1, 0, 0, 32, 78,133, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,160, 82,133, 29, 1, 0, 0, 0,192, 76,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0,112,196, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0,112,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, +209, 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, +209, 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, 4, 6, 0,160, 0,210, 3,143, 0,192, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,197, 3, 0, 0,100, 4, 0, 0,146, 0, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,210, 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,128, 79,133, 29, + 1, 0, 0, 0, 16, 81,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,128, 79,133, 29, 1, 0, 0, 0,194, 0, 0, 0, + 1, 0, 0, 0, 16, 81,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108, 95,115,104,101,108,102, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108, 95,115,104,101,108,102, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 84,111,111,108, 32, 83,104,101,108,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,196,255,143, 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, 16, 81,133, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 79,133, 29, + 1, 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, 7,254,143, 0,165, 1, 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, 40, 1, 0, 0,160, 82,133, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 84,133, 29, 1, 0, 0, 0, 32, 78,133, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,197, 3, 0, 0,100, 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,160,156,176, 21, + 1, 0, 0, 0,160,156,176, 21, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,160,156,176, 21, 1, 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, 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, 97,121,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,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 84,133, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 64,217,132, 29, 1, 0, 0, 0,160, 82,133, 29, + 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, +128, 7, 0, 0, 26, 0, 0, 0, 99, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,158,176, 21, 1, 0, 0, 0,112,123,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 88, 1, 0, 0, 48,158,176, 21, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,192,229,130, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,111, 98, +106,101, 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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,111, 98, +106,101, 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, 84,114, 97,110,115,102,111,114,109, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122,254,163, 0,110, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,192,229,130, 29, 1, 0, 0, 0,194, 0, 0, 0, + 1, 0, 0, 0,160,128,132, 29, 1, 0, 0, 0, 48,158,176, 21, 1, 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,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, 86, 73, 69, 87, 51, 68, 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, 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, 40,254,163, 0, 58, 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,160,128,132, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 48,130,132, 29, 1, 0, 0, 0,192,229,130, 29, + 1, 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, 51,100, +118,105,101,119, 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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100, +118,105,101,119, 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, 86,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,213,252,163, 0, 59, 1, 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, 88, 1, 0, 0, 48,130,132, 29, 1, 0, 0, 0,194, 0, 0, 0, + 1, 0, 0, 0,192,131,132, 29, 1, 0, 0, 0,160,128,132, 29, 1, 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, 51,100,118,105,101,119, 95,100,105,115,112,108, 97,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, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95, 51,100,118,105,101,119, 95,100,105,115,112,108, 97,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, 68,105,115,112,108, 97,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,189,252,163, 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,192,131,132, 29, 1, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,112,123,132, 29, 1, 0, 0, 0, 48,130,132, 29, + 1, 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, 98, 97, + 99,107,103,114,111,117,110,100, 95,105,109, 97,103,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, 98, 97, + 99,107,103,114,111,117,110,100, 95,105,109, 97,103,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, 66, 97, 99,107,103,114,111,117,110,100, 32, 73, +109, 97,103,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,165,252,163, 0, 0, 0, 20, 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,112,123,132, 29, 1, 0, 0, 0,194, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,131,132, 29, 1, 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,114, 97,110,115,102,111,114,109, 95,111,114,105,101,110,116, 97,116, +105,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, 0, 0, 0, + 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,114, 97,110,115,102,111,114,109, 95,111,114,105,101,110,116, 97,116, +105,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, 0, 0, 0, + 0, 0, 0, 0, 84,114, 97,110,115,102,111,114,109, 32, 79,114,105,101,110,116, 97,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,141,252,163, 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, + 40, 1, 0, 0, 64,217,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,133, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 88, 0, 0,176, 0, 0, 0,224, 88,167, 29, 1, 0, 0, 0, 27, 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,101, 4, 0, 0, +128, 7, 0, 0, 26, 0, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 3, 74, 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, - 84, 88, 84,101,120,116, 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, 7, 0, 0, 0, 1, 0, 0, 0,208, 89,167, 29, 1, 0, 0, 0, -208, 89,167, 29, 1, 0, 0, 0,208, 89,167, 29, 1, 0, 0, 0,208, 89,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,196, 4, 28, 1, 0, 0, 0,255,255,255,255, 0, 4, 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,208, 89,167, 29, 1, 0, 0, 0, - 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,209,163, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 82, 70, 68, 65, 84, 65, 4, 0, 0, 0, 96,209,163, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 79, 66, 0, 0,152, 4, 0, 0, 48,202, 4, 28, 1, 0, 0, 0,119, 0, 0, 0, - 1, 0, 0, 0, 48,208, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 79, 66, 67, 97,109,101,114, 97, 0, 97,109,101,114, 97, 46, 48, 48, 49, 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, 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, 48, 46,136, 27, 1, 0, 0, 0, 68, 65, 84, 65, + 88, 3, 0, 0, 48, 46,136, 27, 1, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,151, 29,193, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,255,255,139, 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,128, 0, 0, 0,128, 74,215, 76,190, 0, 0, 0,128, 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,166, 93, 30, 63,206,249,224,190, 48,180, 81,191, +184,158, 81,191,232, 29,176, 63,139,225, 88, 62, 26, 63,185, 62, 35, 44,185, 62,237,241,163,188,204,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,227, 37,139, 62,171,190, 26, 63,112, 12, 16,188, + 0, 0, 64, 51,195, 15,188,190,131, 75, 53, 62,218,125, 81, 63, 0, 0,160,179,115, 77,100,193, 16,173,201, 64,182,148,248,192, +203,247,159,192,233, 74, 87, 65,246, 46,190,192, 89,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,166, 93, 30, 63,206,249,224,190, 48,180, 81,191, +184,158, 81,191,232, 29,176, 63,139,225, 88, 62, 26, 63,185, 62, 35, 44,185, 62,237,241,163,188,204,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, 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,104, 72,218, 58, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 64, 86,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,110,101,239, 64,150, 62,208,192, 78,255,170, 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,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 42,254,141, 63,192, 57, 49, 60, 34,159, 80, 63, 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,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,222,149, 47, 63, 53, 70, 58, 63, -222, 56, 49,188, 0, 0, 0, 0, 86,126,162,190,227,251,159, 62, 55, 53,101, 63, 0, 0, 0, 0, 7,165, 39, 63,149, 84, 28,191, - 51,247,227, 62, 0, 0, 0, 0,110,101,239, 64,150, 62,208,192, 78,255,170, 64, 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, 1, 0,128, 63, 1, 0,128, 51, - 1, 0, 0,179, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0,128, 63, 1, 0,128, 51, 0, 0, 0, 0, 2, 0, 0,179, 2, 0, 0,167, - 1, 0,128, 63, 0, 0, 0, 0, 1, 0, 0, 53, 1, 0, 0, 41, 1, 0,128,168, 0, 0,128, 63, 0, 0,128, 63,157,190,215, 49, -167,170, 4, 52, 0, 0, 0,128,129,116,157,178, 1, 0,128, 63, 33, 69, 15, 51, 0, 0, 0,128, 73,254, 67, 51,243, 97,106, 49, - 0, 0,128, 63, 0, 0, 0,128, 3, 0, 64, 52,183,164,157, 39, 0, 0,128, 53, 0, 0,128, 63, 1, 0, 0, 0, 0, 4, 0, 0, - 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, -100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63,187,225, 16, 63, 0, 0,128, 63,205,204,204, 62,237, 54, 32, 63, - 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,160,218,132, 29, 1, 0, 0, 0,158, 0, 0, 0, + 1, 0, 0, 0, 0,220,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48, 68,132, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0,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, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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,128,165,196, 20, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,192,164,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0, 0,147, 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,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, + 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, + 10, 0,152, 4, 26, 0,152, 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, + 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,152, 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, 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, 68, 65, 84, 65, 40, 1, 0, 0,192,164,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,128,165,196, 20, 1, 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, +151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 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,152, 4,122, 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,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65,200, 0, 0, 0, 0,220,132, 29, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,160,218,132, 29, 1, 0, 0, 0,128,165,196, 20, 1, 0, 0, 0,192,164,132, 29, 1, 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, 1, 0, 0, 0, + 6, 0, 0, 0, 83, 78, 0, 0,208, 0, 0, 0,192,159,176, 21, 1, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,128, 74,111, 27, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 80,133,132, 29, 1, 0, 0, 0, 0,168,132, 29, 1, 0, 0, 0, 96,168,132, 29, 1, 0, 0, 0,192,174,132, 29, + 1, 0, 0, 0, 32,175,132, 29, 1, 0, 0, 0,224, 50,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 66,136, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 80,133,132, 29, 1, 0, 0, 0,192, 0, 0, 0, + 1, 0, 0, 0,176,133,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,176,133,132, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 80,231,130, 29, + 1, 0, 0, 0, 80,133,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 4, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0, 80,231,130, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,176,231,130, 29, 1, 0, 0, 0,176,133,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,128, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,176,231,130, 29, + 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,224,166,196, 20, 1, 0, 0, 0, 80,231,130, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,224,166,196, 20, 1, 0, 0, 0,192, 0, 0, 0, + 1, 0, 0, 0, 64,167,196, 20, 1, 0, 0, 0,176,231,130, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 4, + 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 64,167,196, 20, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 32,166,132, 29, + 1, 0, 0, 0,224,166,196, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,100, 4, 1, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0, 32,166,132, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,128,166,132, 29, 1, 0, 0, 0, 64,167,196, 20, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 24, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,128,166,132, 29, + 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,224,166,132, 29, 1, 0, 0, 0, 32,166,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,224,166,132, 29, 1, 0, 0, 0,192, 0, 0, 0, + 1, 0, 0, 0, 64,167,132, 29, 1, 0, 0, 0,128,166,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 3,100, 4, + 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 64,167,132, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0,160,167,132, 29, + 1, 0, 0, 0,224,166,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 2, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0,160,167,132, 29, 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0,168,132, 29, 1, 0, 0, 0, 64,167,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 3, 24, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 0,168,132, 29, + 1, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,167,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,128, 7,100, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 96,168,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,192,168,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,231,130, 29, 1, 0, 0, 0,176,133,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,192,168,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 32,169,132, 29, 1, 0, 0, 0, 96,168,132, 29, 1, 0, 0, 0,224,166,196, 20, 1, 0, 0, 0,176,133,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 32,169,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,128,169,132, 29, 1, 0, 0, 0,192,168,132, 29, 1, 0, 0, 0, 64,167,196, 20, 1, 0, 0, 0, 80,231,130, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,128,169,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,224,169,132, 29, 1, 0, 0, 0, 32,169,132, 29, 1, 0, 0, 0,224,166,196, 20, 1, 0, 0, 0, 64,167,196, 20, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,224,169,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 64,170,132, 29, 1, 0, 0, 0,128,169,132, 29, 1, 0, 0, 0, 64,167,196, 20, 1, 0, 0, 0, 32,166,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 64,170,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,160,170,132, 29, 1, 0, 0, 0,224,169,132, 29, 1, 0, 0, 0, 80,133,132, 29, 1, 0, 0, 0,128,166,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,160,170,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 0,171,132, 29, 1, 0, 0, 0, 64,170,132, 29, 1, 0, 0, 0,224,166,196, 20, 1, 0, 0, 0,224,166,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 0,171,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 96,171,132, 29, 1, 0, 0, 0,160,170,132, 29, 1, 0, 0, 0,128,166,132, 29, 1, 0, 0, 0, 64,167,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 96,171,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,192,171,132, 29, 1, 0, 0, 0, 0,171,132, 29, 1, 0, 0, 0, 64,167,132, 29, 1, 0, 0, 0,160,167,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,192,171,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 32,172,132, 29, 1, 0, 0, 0, 96,171,132, 29, 1, 0, 0, 0,224,166,132, 29, 1, 0, 0, 0,160,167,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 32,172,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,128,172,132, 29, 1, 0, 0, 0,192,171,132, 29, 1, 0, 0, 0, 32,166,132, 29, 1, 0, 0, 0, 0,168,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,128,172,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,224,172,132, 29, 1, 0, 0, 0, 32,172,132, 29, 1, 0, 0, 0,176,231,130, 29, 1, 0, 0, 0, 0,168,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,224,172,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 64,173,132, 29, 1, 0, 0, 0,128,172,132, 29, 1, 0, 0, 0,128,166,132, 29, 1, 0, 0, 0, 0,168,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 64,173,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,160,173,132, 29, 1, 0, 0, 0,224,172,132, 29, 1, 0, 0, 0,176,231,130, 29, 1, 0, 0, 0, 80,133,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,160,173,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 0,174,132, 29, 1, 0, 0, 0, 64,173,132, 29, 1, 0, 0, 0, 64,167,196, 20, 1, 0, 0, 0,224,166,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 0,174,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 96,174,132, 29, 1, 0, 0, 0,160,173,132, 29, 1, 0, 0, 0, 32,166,132, 29, 1, 0, 0, 0,160,167,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 96,174,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0,192,174,132, 29, 1, 0, 0, 0, 0,174,132, 29, 1, 0, 0, 0,224,166,196, 20, 1, 0, 0, 0, 64,167,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,192,174,132, 29, 1, 0, 0, 0,193, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,174,132, 29, 1, 0, 0, 0, 32,166,132, 29, 1, 0, 0, 0, 64,167,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 32,175,132, 29, 1, 0, 0, 0,195, 0, 0, 0, + 1, 0, 0, 0, 32,148,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,166,196, 20, 1, 0, 0, 0,176,133,132, 29, + 1, 0, 0, 0, 80,231,130, 29, 1, 0, 0, 0, 64,167,196, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +128, 7, 0, 0,101, 4, 0, 0,128, 4, 0, 0, 7, 7,129, 7, 28, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 96,177,132, 29, 1, 0, 0, 0, 96,177,132, 29, 1, 0, 0, 0, 0,176,132, 29, 1, 0, 0, 0, 32, 16,133, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 0,176,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 32, 16,133, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,162, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0, 32,240, 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,128, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, + 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, + 10, 0,129, 7, 26, 0,129, 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, + 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,101, 4, 0, 0,126, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,129, 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, 68, 65, 84, 65, 40, 1, 0, 0, 32, 16,133, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,176,132, 29, 1, 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, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, + 6, 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, 0, 0, 0, 0,128, 7, 0, 0,127, 4, 0, 0,128, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,129, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 32,148,132, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,224,156,132, 29, + 1, 0, 0, 0, 32,175,132, 29, 1, 0, 0, 0, 80,133,132, 29, 1, 0, 0, 0,128,166,132, 29, 1, 0, 0, 0, 0,168,132, 29, + 1, 0, 0, 0,176,231,130, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, + 99, 0, 0, 0, 15, 15,129, 7,100, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,151,132, 29, + 1, 0, 0, 0,128,155,132, 29, 1, 0, 0, 0, 0,149,132, 29, 1, 0, 0, 0, 96,150,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0, 0,149,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 96,150,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,128,136, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,240, 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,128, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,129, 7, 26, 0,129, 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, 0, 0, 0, 0, 0, 0, 0, 0, +128, 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,129, 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, 68, 65, 84, 65, + 40, 1, 0, 0, 96,150,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,149,132, 29, + 1, 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,128, 7, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 18, 0, 0, 0, 73, 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,129, 7, 74, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 0, 0, 26, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 74, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +200, 0, 0, 0,192,151,132, 29, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0,128,155,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0,192,152,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 32,154,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,203, 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, 87, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 88, 6, 26, 0, 88, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 87, 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, 88, 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, 68, 65, 84, 65, + 40, 1, 0, 0, 32,154,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,152,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 6, 0, 0, 26, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 6, 30, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 50,136, 27, 1, 0, 0, 0, 68, 65, 84, 65, + 88, 3, 0, 0, 48, 50,136, 27, 1, 0, 0, 0,157, 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, 87,213,108, 66, 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,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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, 32,193, 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, 32, 65, 0, 0,128, 63, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, 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,184,175, 31, 65, 0, 0, 32, 65,161, 14,106, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,224, 91,138, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252,249,195, +115,253, 71,194, 0, 0, 0, 0, 0, 0, 0, 0, 98,127,249, 67,129,255, 71, 66, 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, 32,193, 0, 0,128, 63, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 87,213,108, 66, 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,184,175, 31, 65, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52,149,147, 58, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,128,155,132, 29, 1, 0, 0, 0,158, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,151,132, 29, 1, 0, 0, 0,192,152,132, 29, 1, 0, 0, 0, 32,154,132, 29, + 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48, 68,132, 27, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0,159, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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,224,156,132, 29, 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,192,169,176, 21, + 1, 0, 0, 0, 32,148,132, 29, 1, 0, 0, 0,128,166,132, 29, 1, 0, 0, 0, 64,167,132, 29, 1, 0, 0, 0, 32,166,132, 29, + 1, 0, 0, 0, 0,168,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,101, 0, 0, 0, + 23, 2, 0, 0, 8, 8,129, 7,179, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,161,132, 29, + 1, 0, 0, 0, 16,215,132, 29, 1, 0, 0, 0,192,157,132, 29, 1, 0, 0, 0,128,160,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0,192,157,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 32,159,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 38, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,240, 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,128, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 96,191, 68, 0, 0,200, 65, 0, 96,191, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,129, 7, 26, 0,129, 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, 0, 0, 0, 0, 0, 0, 0, 0, +128, 7, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 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, 68, 65, 84, 65, + 40, 1, 0, 0, 32,159,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,128,160,132, 29, 1, 0, 0, 0,192,157,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, 0,128,195,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, 0,128,195,195, + 0, 0, 0, 0,203, 0, 0, 0,220, 0, 0, 0, 18, 0, 0, 0,152, 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, 18, 0, 0, 0,152, 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, 4, 6, 0,220, 0,153, 1,203, 0, +135, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,165, 6, 0, 0, +128, 7, 0, 0,127, 0, 0, 0, 23, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0,153, 1, + 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, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0,128,160,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,159,132, 29, + 1, 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,152, 1, 0, 0, 18, 0, 0, 0,164, 6, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 18, 0, 0, 0,164, 6, 0, 0, 18, 0, 0, 0,152, 1, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 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,165, 6,153, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +164, 6, 0, 0,127, 0, 0, 0, 23, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,165, 6,153, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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,224,161,132, 29, 1, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0, 96,168,176, 21, 1, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16,163,132, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,240, 85,133, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0,128,191, 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,251, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, + 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, + 10, 0,252, 5, 26, 0,252, 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, + 0, 0, 0, 0, 0, 0, 0, 0,251, 5, 0, 0, 85, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,252, 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, 68, 65, 84, 65, 40, 1, 0, 0,240, 85,133, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 80, 87,133, 29, + 1, 0, 0, 0, 16,163,132, 29, 1, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0,223, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0,113, 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, 68, 65, 84, 65, 40, 1, 0, 0, 80, 87,133, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,176, 88,133, 29, + 1, 0, 0, 0,240, 85,133, 29, 1, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,251, 5, 0, 0,111, 0, 0, 0,111, 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, 68, 65, 84, 65, 40, 1, 0, 0,176, 88,133, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0,167,176, 21, + 1, 0, 0, 0, 80, 87,133, 29, 1, 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, 0, 0, 0, 0, + 0, 0, 0, 0,251, 5, 0, 0,251, 5, 0, 0,111, 0, 0, 0,223, 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, 68, 65, 84, 65, 40, 1, 0, 0, 0,167,176, 21, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,176, 88,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,251, 5, 0, 0,111, 0, 0, 0,223, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,252, 5,113, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 54,136, 27, + 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48, 54,136, 27, 1, 0, 0, 0,157, 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, 79,145, 64, 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,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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, +241,130,233,191,222,160, 81,191,184,158, 81,191,117, 90,127, 63, 14, 28, 97, 63, 9, 46,185, 62, 35, 44,185, 62,145,180,109,188, +119, 15,130, 64,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65,112,240,191, 62, +108,116, 85, 63, 80,184, 70,188, 0, 0, 46,180,159, 49,181,189,125,172, 46, 61, 7,213, 73, 62, 0, 64,143,180,182,107, 25,196, + 13,135,135, 67, 70, 12,167,195, 71, 0, 72,194,225, 56, 25, 68, 38, 90,135,195,237,212,166, 67, 84, 2, 72, 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, +241,130,233,191,222,160, 81,191,184,158, 81,191,117, 90,127, 63, 14, 28, 97, 63, 9, 46,185, 62, 35, 44,185, 62,145,180,109,188, +119, 15,130, 64,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, 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, 13,114,156, 58, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0, 96,168,176, 21, + 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 16,215,132, 29, 1, 0, 0, 0,224,161,132, 29, 1, 0, 0, 0, 16,163,132, 29, + 1, 0, 0, 0, 0,167,176, 21, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, + 1, 0, 7, 0, 48, 68,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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, 80,212,132, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,176,213,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 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,151, 4, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 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, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 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, 68, 65, 84, 65, 40, 1, 0, 0,176,213,132, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,212,132, 29, 1, 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,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0, +121, 2, 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,152, 4,122, 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,151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65,200, 0, 0, 0, 16,215,132, 29, 1, 0, 0, 0,173, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,168,176, 21, 1, 0, 0, 0, 80,212,132, 29, 1, 0, 0, 0,176,213,132, 29, + 1, 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, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,192,169,176, 21, 1, 0, 0, 0,195, 0, 0, 0, + 1, 0, 0, 0,224, 50,133, 29, 1, 0, 0, 0,224,156,132, 29, 1, 0, 0, 0, 64,167,132, 29, 1, 0, 0, 0,224,166,196, 20, + 1, 0, 0, 0,224,166,132, 29, 1, 0, 0, 0,160,167,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 79, 3, 0, 0, 25, 2, 0, 0, 99, 4, 0, 0, 2, 2, 80, 3, 75, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 28,133, 29, 1, 0, 0, 0,224, 49,133, 29, 1, 0, 0, 0,176, 22,133, 29, 1, 0, 0, 0,208, 26,133, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,176, 22,133, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 16, 24,133, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 83, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0, 0, 84, 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, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,103, 68, + 0, 0,200, 65, 0,192,103, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, + 10, 0, 80, 3, 26, 0, 80, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 79, 3, 0, 0, 25, 2, 0, 0, 50, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 80, 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, 68, 65, 84, 65, 40, 1, 0, 0, 16, 24,133, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,112, 25,133, 29, + 1, 0, 0, 0,176, 22,133, 29, 1, 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,192, 7,196, 0, 0, 0, 0,200, 0, 0, 0,217, 0, 0, 0, 18, 0, 0, 0, 48, 2, 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, 48, 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, 10, 0, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, + 6, 0,217, 0, 49, 2,200, 0, 31, 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,216, 0, 0, 0, 51, 2, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,217, 0, 49, 2, 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, 68, 65, 84, 65, 40, 1, 0, 0,112, 25,133, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,208, 26,133, 29, + 1, 0, 0, 0, 16, 24,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 3, 0, 0, 79, 3, 0, 0, 51, 2, 0, 0, 99, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,208, 26,133, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,112, 25,133, 29, 1, 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, 48, 2, 0, 0, 18, 0, 0, 0, +118, 2, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,118, 2, 0, 0, 18, 0, 0, 0, 48, 2, 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,119, 2, 49, 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,217, 0, 0, 0, 79, 3, 0, 0, 51, 2, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,119, 2, 49, 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, 68, 65, 84, 65,248, 0, 0, 0, 48, 28,133, 29, 1, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0,128, 33,133, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 17,133, 29, 1, 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, 68, 65, 84, 65, 32, 0, 0, 0,128, 17,133, 29, + 1, 0, 0, 0, 21, 1, 0, 0, 1, 0, 0, 0, 48, 66,136, 27, 1, 0, 0, 0, 0, 0, 0, 0, 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, 96, 29,133, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,192, 30,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 38, 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,151, 2, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,192,103, 68, 0, 0,200, 65, 0,192,103, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 2, 26, 0,152, 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, 0, 0, 0, 0, 0, 0, 0, 0,151, 2, 0, 0,225, 1, 0, 0,250, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 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, 68, 65, 84, 65, 40, 1, 0, 0,192, 30,133, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 32, 32,133, 29, 1, 0, 0, 0, 96, 29,133, 29, 1, 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, 53, 67, 0,128, 4,196, 0, 0, 64,193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,180, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0, + 23, 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, 8, 0, 0, 0, + 2, 0, 3, 3, 0, 0, 2, 4, 6, 0,181, 0, 24, 2,181, 0, 6, 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,180, 0, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,181, 0, 24, 2, 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, 68, 65, 84, 65, 40, 1, 0, 0, 32, 32,133, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 30,133, 29, 1, 0, 0, 0, 0, 0, 32,193, 0, 0,104, 68, 0, 0, 0,194, + 0, 0, 0, 0, 0, 0, 32,193, 0, 0,104, 68, 0,128, 4,196, 0, 0, 64,193,210, 1, 0, 0,227, 1, 0, 0, 18, 0, 0, 0, + 23, 2, 0, 0, 0, 0, 0, 0,209, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,209, 1, 0, 0, 18, 0, 0, 0, + 23, 2, 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,227, 1, 24, 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,181, 0, 0, 0,151, 2, 0, 0,251, 1, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,227, 1, 24, 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, 68, 65, 84, 65, 8, 1, 0, 0,128, 33,133, 29, 1, 0, 0, 0, 22, 1, 0, 0, + 1, 0, 0, 0, 16,216,132, 29, 1, 0, 0, 0, 48, 28,133, 29, 1, 0, 0, 0, 96, 29,133, 29, 1, 0, 0, 0, 32, 32,133, 29, + 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 48, 66,136, 27, + 1, 0, 0, 0, 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, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192, 34,133, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 32, 36,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,202, 67, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0,104, 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,159, 3, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,192, 41, 68, 0, 0,200, 65, 0,192, 41, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,160, 3, 26, 0,160, 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, 0, 0, 0, 0, 0, 0, 0, 0,159, 3, 0, 0, 85, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 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, 68, 65, 84, 65, 40, 1, 0, 0, 32, 36,133, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,128, 37,133, 29, 1, 0, 0, 0,192, 34,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 67, 0,128,100,196, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 67, 0,128,100,196, 0, 0, 0, 0,172, 0, 0, 0,189, 0, 0, 0, 18, 0, 0, 0, +163, 3, 0, 0, 0, 0, 0, 0,171, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,171, 0, 0, 0, 18, 0, 0, 0, +163, 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,189, 0,164, 3,172, 0,146, 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,111, 0, 0, 0, 18, 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, 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, 68, 65, 84, 65, 40, 1, 0, 0,128, 37,133, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 36,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, + 0, 0,128, 67, 0, 0,168,191, 0, 0, 20, 64, 0, 0,169,191, 0,128, 20, 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,160, 3, 0, 0, 0, 0, 0, 0, +164, 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,159, 3, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 3,164, 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, 68, 65, 84, 65,168, 0, 0, 0, 16,216,132, 29, 1, 0, 0, 0,168, 0, 0, 0, + 1, 0, 0, 0,192, 45,133, 29, 1, 0, 0, 0,128, 33,133, 29, 1, 0, 0, 0,192, 34,133, 29, 1, 0, 0, 0,128, 37,133, 29, + 1, 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,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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,128, 63, 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,224, 38,133, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 64, 40,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 42, 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,167, 2, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,168, 2, 26, 0,168, 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, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0, 85, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 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, 68, 65, 84, 65, 40, 1, 0, 0, 64, 40,133, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,160, 41,133, 29, 1, 0, 0, 0,224, 38,133, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,164, 3, 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, 68, 65, 84, 65, 40, 1, 0, 0,160, 41,133, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 43,133, 29, 1, 0, 0, 0, 64, 40,133, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0,111, 0, 0, 0,111, 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, 68, 65, 84, 65, 40, 1, 0, 0, 0, 43,133, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 96, 44,133, 29, 1, 0, 0, 0,160, 41,133, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0,167, 2, 0, 0,111, 0, 0, 0, 18, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 96, 44,133, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 2, 0, 0,111, 0, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 2,164, 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, 48, 58,136, 27, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48, 58,136, 27, 1, 0, 0, 0,157, 0, 0, 0, + 1, 0, 0, 0,226,225,191, 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, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, + 0, 0, 0,128, 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,192, 90, 29, 63,208,249,224,190,222,160, 81,191,184,158, 81,191,253,253,174, 63,140,225, 88, 62, 9, 46,185, 62, + 35, 44,185, 62,232,229,162,188,206,156,122, 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,250, 8,140, 62,174,189, 27, 63,224, 25, 17,188, 0, 64,153,181,195, 13,188,190,191, 73, 53, 62, 99,126, 81, 63, + 0,128,163, 53,215,104, 25,196,134,132,135, 67, 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68,159, 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,192, 90, 29, 63,208,249,224,190,222,160, 81,191,184,158, 81,191,253,253,174, 63,140,225, 88, 62, 9, 46,185, 62, + 35, 44,185, 62,232,229,162,188,206,156,122, 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, 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,172,148, 0, 59, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,192, 45,133, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0,224, 49,133, 29, 1, 0, 0, 0, 16,216,132, 29, + 1, 0, 0, 0,224, 38,133, 29, 1, 0, 0, 0, 96, 44,133, 29, 1, 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, + 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48, 68,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 8, + 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, + 1, 0, 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, 0, 0, 0, 0, + 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, 32, 47,133, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,128, 48,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 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, +151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 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, 0, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0,101, 0, 0, 0, +126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 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, 68, 65, 84, 65, 40, 1, 0, 0,128, 48,133, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 47,133, 29, 1, 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,151, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, +151, 4, 0, 0, 18, 0, 0, 0,121, 2, 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,152, 4,122, 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,151, 4, 0, 0,127, 0, 0, 0, +248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65,200, 0, 0, 0,224, 49,133, 29, + 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 45,133, 29, 1, 0, 0, 0, 32, 47,133, 29, + 1, 0, 0, 0,128, 48,133, 29, 1, 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, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,224, 50,133, 29, + 1, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,169,176, 21, 1, 0, 0, 0,160,167,132, 29, + 1, 0, 0, 0,224,166,132, 29, 1, 0, 0, 0, 64,167,196, 20, 1, 0, 0, 0, 32,166,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 81, 3, 0, 0,128, 7, 0, 0, 25, 2, 0, 0, 99, 4, 0, 0, 8, 8, 48, 4, 75, 2, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 55,133, 29, 1, 0, 0, 0, 16, 68,133, 29, 1, 0, 0, 0,192, 51,133, 29, + 1, 0, 0, 0,128, 54,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,192, 51,133, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 32, 53,133, 29, 1, 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,135, 68, 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, 55, 4, 0, 0, 0, 0, 0, 0, + 23, 0, 0, 0, 0,224,156, 68, 0, 0,200, 65, 0,224,156, 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, 56, 4, 24, 0, 56, 4, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 3, 0, 0,128, 7, 0, 0, 25, 2, 0, 0, 25, 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, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 32, 53,133, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0,128, 54,133, 29, 1, 0, 0, 0,192, 51,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 0, 0,128, 7, 0, 0, 25, 2, 0, 0, 99, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,128, 54,133, 29, 1, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 53,133, 29, 1, 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, + 74, 2, 0, 0, 18, 0, 0, 0, 47, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 47, 4, 0, 0, 18, 0, 0, 0, + 74, 2, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 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, 48, 4, 75, 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, 81, 3, 0, 0,128, 7, 0, 0, 25, 2, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 4, 75, 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, 68, 65, 84, 65,240, 0, 0, 0,224, 55,133, 29, 1, 0, 0, 0,164, 0, 0, 0, + 1, 0, 0, 0,240, 63,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 16, 57,133, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,112, 58,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,157, 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, +231, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,232, 4, 26, 0,232, 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, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0,225, 1, 0, 0, +250, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 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, 68, 65, 84, 65, 40, 1, 0, 0,112, 58,133, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,208, 59,133, 29, 1, 0, 0, 0, 16, 57,133, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,153, 2, 0, 0,251, 1, 0, 0, + 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 24, 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, 68, 65, 84, 65, 40, 1, 0, 0,208, 59,133, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 48, 61,133, 29, 1, 0, 0, 0,112, 58,133, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0,251, 1, 0, 0, +251, 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, 68, 65, 84, 65, 40, 1, 0, 0, 48, 61,133, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,144, 62,133, 29, 1, 0, 0, 0,208, 59,133, 29, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,128, 7, 0, 0,251, 1, 0, 0, + 18, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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,144, 62,133, 29, + 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 61,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153, 2, 0, 0,128, 7, 0, 0,251, 1, 0, 0, + 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 4, 24, 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, 48, 62,136, 27, 1, 0, 0, 0, 68, 65, 84, 65, 88, 3, 0, 0, 48, 62,136, 27, + 1, 0, 0, 0,157, 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, +165, 7, 36, 64, 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,128, + 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 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,180,157,229, 62,169,203,131,191,222,160, 81,191,184,158, 81,191,118, 90,127, 63, + 95, 27,254, 62, 9, 46,185, 62, 35, 44,185, 62,147,180,109,188,102,208, 18, 64,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,128, 32,182, 69,129, 32,190, +250,186,154, 61,170,205,178, 62, 0, 64, 1, 53,215,104, 25,196,135,132,135, 67, 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68, +160, 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,180,157,229, 62,169,203,131,191,222,160, 81,191,184,158, 81,191,118, 90,127, 63, + 95, 27,254, 62, 9, 46,185, 62, 35, 44,185, 62,147,180,109,188,102,208, 18, 64,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, 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,218,210,190, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, -152, 4, 0, 0, 48,208, 4, 28, 1, 0, 0, 0,119, 0, 0, 0, 1, 0, 0, 0, 48,214, 4, 28, 1, 0, 0, 0, 48,202, 4, 28, - 1, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0,240, 63,133, 29, 1, 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0, 16, 68,133, 29, + 1, 0, 0, 0,224, 55,133, 29, 1, 0, 0, 0, 16, 57,133, 29, 1, 0, 0, 0,144, 62,133, 29, 1, 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, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 48, 68,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 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, 16, 0, 0, 0, + 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 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, 80, 65,133, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,176, 66,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,129, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,147, 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,151, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,152, 4, 26, 0,152, 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, 0, 0, 0, 0, 0, 0, 0, 0, +151, 4, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 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, 68, 65, 84, 65, + 40, 1, 0, 0,176, 66,133, 29, 1, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 65,133, 29, + 1, 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,151, 4, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0,151, 4, 0, 0, 18, 0, 0, 0,121, 2, 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,152, 4,122, 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, +151, 4, 0, 0,127, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4,122, 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, 68, 65, 84, 65, +200, 0, 0, 0, 16, 68,133, 29, 1, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 63,133, 29, + 1, 0, 0, 0, 80, 65,133, 29, 1, 0, 0, 0,176, 66,133, 29, 1, 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, 1, 0, 0, 0, 6, 0, 0, 0, 83, 67, 0, 0, + 40, 6, 0, 0, 48, 66,136, 27, 1, 0, 0, 0,155, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 68,132, 27, 1, 0, 0, 0, 48, 58,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,224, 17,133, 29, 1, 0, 0, 0,112, 69,133, 29, 1, 0, 0, 0,224, 17,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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,112,161,176, 21, 1, 0, 0, 0, 48, 26,139, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,100, 0, 0, 0,100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 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, 0, 0, 1, 0, 1, 0, 0, 0, + 6, 0, 25, 0,141, 0,128, 7, 56, 4, 8, 0, 8, 0, 0, 0, 24, 0, 17, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, + 81, 0, 0, 0, 23, 0, 33, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 69,133, 29, 1, 0, 0, 0,208, 69,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0,200, 66, 0, 0,200, 66, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 47, 98, 97, + 99,107, 98,117,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 6, 0, 0, 0, 16, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,174,135, 29, 1, 0, 0, 0, 1, 0, 0, 0, 1, 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,205,204, 28, 65, + 0, 0, 0, 0, 32, 0, 32, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 0, 5, 0, 60, 0, 5, 0, 1, 0, 5, 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, 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,128, 7, 56, 4, 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, 68, 65, 84, 65, + 40, 0, 0, 0,224, 17,133, 29, 1, 0, 0, 0,131, 0, 0, 0, 1, 0, 0, 0, 16, 69,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,194, 2,243, 1, 48, 74,132, 27, 1, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0, 16, 69,133, 29, 1, 0, 0, 0,131, 0, 0, 0, 1, 0, 0, 0,112, 69,133, 29, 1, 0, 0, 0,224, 17,133, 29, + 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 4, 0, 0,144, 3, 47, 3, 48, 80,132, 27, 1, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,112, 69,133, 29, 1, 0, 0, 0,131, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 69,133, 29, + 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0,156, 0, 83, 2, 48, 68,132, 27, 1, 0, 0, 0, 68, 65, 84, 65, +120, 1, 0, 0,112,161,176, 21, 1, 0, 0, 0,151, 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,128, 63, 1, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 80, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 0, 5, 0, 5, 0,255,255, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0,100, 0, 10, 0, 0, 0, 50, 0, 50, 0, + 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, + 10, 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, 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, 68, 65, 84, 65, 88, 0, 0, 0,208, 69,133, 29, 1, 0, 0, 0,137, 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,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, +152, 0, 0, 0, 32,163,176, 21, 1, 0, 0, 0, 29, 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, 1, 0, 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,145,137, 68, 66,205,204,204, 61, 0, 0,200, 66, 0, 0, 12, 66,161, 14,234, 64, + 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0,248, 1, 0, 0, 48, 54,132, 27, 1, 0, 0, 0, 41, 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, 83,112,111,116, 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, 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,240,163,176, 21, + 1, 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, 0, 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, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 64, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,165,176, 21, 1, 0, 0, 0, 68, 65, 84, 65, + 56, 1, 0, 0,240,163,176, 21, 1, 0, 0, 0, 75, 1, 0, 0, 1, 0, 0, 0, 1, 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,224,177,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,224,177,132, 29, 1, 0, 0, 0, 73, 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, 96,165,176, 21, 1, 0, 0, 0, 19, 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, +224, 1, 0, 0, 48, 58,132, 27, 1, 0, 0, 0,130, 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, 1, 0, 0, 0, 0, 0, 0, 0, 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, 99, 80, 61,114, 99, 80, 61,114, 99, 80, 61, 0, 0, 0, 0,199, 54, 36, 60, +199, 54, 36, 60,199, 54, 36, 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,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,205,204, 28, 65, 0, 0, 0, 0, 0, 0, 32, 0, +128, 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, 64, 0, 0, 0, 0, 0, 0,112, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0,128, 63,205,204, 76, 61, 0, 0, 5, 0, 0, 0, 0, 0, 10,215,163, 59, + 0, 0, 0, 0, 0, 0,128, 62, 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,240, 9,200, 20, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 93,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 6,163, 29, - 1, 0, 0, 0, 64,213,163, 29, 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, 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,128, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 88, 0, 0,176, 0, 0, 0, 0,196,132, 29, + 1, 0, 0, 0, 27, 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, 88, 84,101,120,116, 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, 7, 0, 0, 0, + 1, 0, 0, 0,192,165,176, 21, 1, 0, 0, 0,192,165,176, 21, 1, 0, 0, 0,192,165,176, 21, 1, 0, 0, 0,192,165,176, 21, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 62,132, 27, + 1, 0, 0, 0,255,255,255,255, 0, 4, 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,192,165,176, 21, 1, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 90,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 82, 70, 68, 65, 84, 65, + 4, 0, 0, 0, 16, 90,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 79, 66, 0, 0,152, 4, 0, 0, + 48, 68,132, 27, 1, 0, 0, 0,119, 0, 0, 0, 1, 0, 0, 0, 48, 74,132, 27, 1, 0, 0, 0, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,163,176, 21, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,110,101,239, 64,150, 62,208,192, 78,255,170, 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,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42,254,141, 63,192, 57, 49, 60, 34,159, 80, 63, 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,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,222,149, 47, 63, 53, 70, 58, 63,222, 56, 49,188, 0, 0, 0, 0, 86,126,162,190,227,251,159, 62, 55, 53,101, 63, + 0, 0, 0, 0, 7,165, 39, 63,149, 84, 28,191, 51,247,227, 62, 0, 0, 0, 0,110,101,239, 64,150, 62,208,192, 78,255,170, 64, + 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, 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, 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, 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,222,149, 47, 63, 52, 70, 58, 63,179, 56, 49,188, 0, 0, 0,128, 86,126,162,190,227,251,159, 62, - 56, 53,101, 63, 0, 0, 0,128, 7,165, 39, 63,149, 84, 28,191, 50,247,227, 62, 0, 0, 0,128,110,101,239, 64,151, 62,208,192, - 77,255,170, 64, 0, 0,128, 63, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 0, 0, - 7, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63, -169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,229,208, 34, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 5, 0, 1, 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,128, 63, 1, 0,128, 63, 1, 0,128, 51, 1, 0, 0,179, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0,128, 63, 1, 0,128, 51, + 0, 0, 0, 0, 2, 0, 0,179, 2, 0, 0,167, 1, 0,128, 63, 0, 0, 0, 0, 1, 0, 0, 53, 1, 0, 0, 41, 1, 0,128,168, + 0, 0,128, 63, 0, 0,128, 63,157,190,215, 49,167,170, 4, 52, 0, 0, 0,128,129,116,157,178, 1, 0,128, 63, 33, 69, 15, 51, + 0, 0, 0,128, 73,254, 67, 51,243, 97,106, 49, 0, 0,128, 63, 0, 0, 0,128, 3, 0, 64, 52,183,164,157, 39, 0, 0,128, 53, + 0, 0,128, 63, 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63,187,225, 16, 63, + 0, 0,128, 63,205,204,204, 62,237, 54, 32, 63, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 2, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 48,108, 5, 28, 1, 0, 0, 0, 48,112, 5, 28, 1, 0, 0, 0, 25, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 64, 6,163, 29, 1, 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, 64,213,163, 29, 1, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0,152, 4, 0, 0, 48,214, 4, 28, 1, 0, 0, 0,119, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48,208, 4, 28, 1, 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, 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, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0,152, 4, 0, 0, 48, 74,132, 27, 1, 0, 0, 0,119, 0, 0, 0, 1, 0, 0, 0, + 48, 80,132, 27, 1, 0, 0, 0, 48, 68,132, 27, 1, 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, 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, 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, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48,188, 4, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +112,118,133, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48,171,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,208,160,176, 21, 1, 0, 0, 0,128,125,132, 29, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154,112,130, 64,183,178,128, 63,112,236,188, 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,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,229,123, 38, 63, - 87, 43, 98, 61,229,229,238, 63, 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,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,128, 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,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, 54,236,148,190, 25,134,116, 63,236, 13, 98,189, - 0, 0, 0, 0,221,102, 69,191, 57,174, 76,190, 34,194, 26, 63, 0, 0, 0, 0, 37,255, 16, 63,241,161, 95, 62,164,111, 75, 63, - 0, 0, 0, 0,154,112,130, 64,183,178,128, 63,112,236,188, 64, 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,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, 1, 0,128, 50, 0, 0, 0,179, - 0, 0, 0, 0, 1, 0,128, 50, 1, 0,128, 63, 1, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 1, 0, 0, 39, 1, 0, 0, 52, 1, 0,128, 39, 0, 0,128, 63, 53,236,148,190,222,102, 69,191, 37,255, 16, 63, - 0, 0, 0,128, 24,134,116, 63, 57,174, 76,190,240,161, 95, 62, 0, 0, 0,128,235, 13, 98,189, 34,194, 26, 63,166,111, 75, 63, - 0, 0, 0,128,208, 19, 13, 63,234, 65,102,190, 10, 10,231,192, 0, 0,128, 63, 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, - 5, 0, 1, 0, 0, 0, 68, 0, 79, 66, 0, 0, 0, 0, 0, 0, 1, 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,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,222,149, 47, 63, 52, 70, 58, 63,179, 56, 49,188, + 0, 0, 0,128, 86,126,162,190,227,251,159, 62, 56, 53,101, 63, 0, 0, 0,128, 7,165, 39, 63,149, 84, 28,191, 50,247,227, 62, + 0, 0, 0,128,110,101,239, 64,151, 62,208,192, 77,255,170, 64, 0, 0,128, 63, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 2, 0, 0, 0, 68, 0, 79, 66, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63,169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,229,208, 34, 62, 0, 0, 0, 0, 143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 1, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,244,138, 27, 1, 0, 0, 0, 48,248,138, 27, 1, 0, 0, 0, + 25, 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, 68, 65, 84, 65, 8, 0, 0, 0, +208,160,176, 21, 1, 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, +128,125,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0,152, 4, 0, 0, 48, 80,132, 27, + 1, 0, 0, 0,119, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 74,132, 27, 1, 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, 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, + 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 65, 0, 0, 32, 3, 0, 0, - 48,220, 4, 28, 1, 0, 0, 0, 44, 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, 65, 77, 97,116,101,114,105, 97,108, 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, 1, 0,111,148, 26, 63,111,148, 26, 63,111,148, 26, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,205,204, 76, 63, 0, 0, 0, 63, 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,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, 10,215, 35, 60, 0, 0, 0, 0, - 0, 0, 8, 0, 1, 0, 50, 0,205,204, 76, 62, 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,160, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 2, 0, 50, 0, 0, 6, 0, 0,128, 63, - 0, 0,128, 63, 18, 0, 18, 0, 10,215,163, 59, 10,215,163, 59, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 3, - 67, 0, 0, 3, 1, 0, 4, 0, 12, 0, 4, 0, 0, 0, 0, 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,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, 48, 54,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154,112,130, 64,183,178,128, 63,112,236,188, 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,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,229,123, 38, 63, 87, 43, 98, 61,229,229,238, 63, 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,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, + 54,236,148,190, 25,134,116, 63,236, 13, 98,189, 0, 0, 0, 0,221,102, 69,191, 57,174, 76,190, 34,194, 26, 63, 0, 0, 0, 0, + 37,255, 16, 63,241,161, 95, 62,164,111, 75, 63, 0, 0, 0, 0,154,112,130, 64,183,178,128, 63,112,236,188, 64, 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, 1, 0,128, 50, 0, 0, 0,179, 0, 0, 0, 0, 1, 0,128, 50, 1, 0,128, 63, 1, 0, 0, 51, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 0, 39, 1, 0, 0, 52, 1, 0,128, 39, 0, 0,128, 63, + 53,236,148,190,222,102, 69,191, 37,255, 16, 63, 0, 0, 0,128, 24,134,116, 63, 57,174, 76,190,240,161, 95, 62, 0, 0, 0,128, +235, 13, 98,189, 34,194, 26, 63,166,111, 75, 63, 0, 0, 0,128,208, 19, 13, 63,234, 65,102,190, 10, 10,231,192, 0, 0,128, 63, + 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 68, 0, 79, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63,169, 19,208, 60, 0, 0,128, 63, +205,204,204, 62,229,208, 34, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, + 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 77, 65, 0, 0, 32, 3, 0, 0, 48, 86,132, 27, 1, 0, 0, 0, 44, 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, 65, 77, 97, +116,101,114,105, 97,108, 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, 1, 0,111,148, 26, 63,111,148, 26, 63,111,148, 26, 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,205,204, 76, 63, 0, 0, 0, 63, + 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,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, 10,215, 35, 60, 0, 0, 0, 0, 0, 0, 8, 0, 1, 0, 50, 0,205,204, 76, 62, 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,160, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 2, 0, 2, 0, 50, 0, 0, 6, 0, 0,128, 63, 0, 0,128, 63, 18, 0, 18, 0, 10,215,163, 59, 10,215,163, 59, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 3, 67, 0, 0, 3, 1, 0, 4, 0, 12, 0, 4, 0, 0, 0, 0, 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,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,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, 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, 48, 90,167, 29, 1, 0, 0, 0, + 0, 0,128, 63,240,196,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 91,167, 29, 1, 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, 16, 1, 0, 0, 48, 90,167, 29, 1, 0, 0, 0, - 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 91,167, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, -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, 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, 0, 63,205,204, 76, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,166,176, 21, 1, 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, + 16, 1, 0, 0,240,196,132, 29, 1, 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 64,198,132, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,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, 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, 0, 63,205,204, 76, 62, 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,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,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,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 40, 0, 0, 0, -128, 91,167, 29, 1, 0, 0, 0, 19, 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, 0, 0, 0, 0, 48, 28, 9, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 16, 0, 0, - 48, 28, 9, 28, 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, - 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 3, 51, 8, 8, 8,153, 11, 11, 11,204, - 13, 13, 13,255, 12, 12, 12,255, 12, 12, 12,255, 11, 11, 11,255, 10, 10, 10,255, 10, 10, 10,255, 9, 9, 9,255, 9, 9, 9,255, - 9, 9, 9,255, 4, 4, 4,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 3, 51, 10, 10, 10,153, 18, 18, 18,255, 20, 20, 20,255, 22, 22, 22,255, - 23, 23, 23,255, 22, 22, 22,255, 20, 20, 20,255, 19, 19, 19,255, 16, 16, 16,255, 14, 14, 14,255, 11, 11, 11,255, 10, 10, 10,255, - 9, 9, 9,255, 9, 9, 9,255, 9, 9, 9,255, 8, 8, 8,204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7,102, 19, 19, 19,204, 27, 27, 27,255, 31, 31, 31,255, 32, 32, 32,255, 33, 33, 33,255, - 33, 33, 33,255, 31, 31, 31,255, 30, 30, 30,255, 27, 27, 27,255, 25, 25, 25,255, 22, 22, 22,255, 19, 19, 19,255, 16, 16, 16,255, - 12, 12, 12,255, 10, 10, 10,255, 10, 10, 10,255, 10, 10, 10,255, 10, 10, 10,255, 4, 4, 4,102, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 13, 13, 13,153, 29, 29, 29,255, 37, 37, 37,255, 40, 40, 40,255, 42, 42, 42,255, 42, 42, 42,255, 43, 43, 43,255, - 41, 41, 41,255, 40, 40, 40,255, 38, 38, 38,255, 36, 36, 36,255, 33, 33, 33,255, 30, 30, 30,255, 27, 27, 27,255, 24, 24, 24,255, - 20, 20, 20,255, 16, 16, 16,255, 12, 12, 12,255, 10, 10, 10,255, 10, 10, 10,255, 10, 10, 10,255, 7, 7, 7,153, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 13, 13, 13,102, 37, 37, 37,255, 44, 44, 44,255, 48, 48, 48,255, 50, 50, 50,255, 51, 51, 51,255, 51, 51, 51,255, 50, 50, 50,255, - 49, 49, 49,255, 48, 48, 48,255, 45, 45, 45,255, 43, 43, 43,255, 41, 41, 41,255, 37, 37, 37,255, 34, 34, 34,255, 31, 31, 31,255, - 28, 28, 28,255, 24, 24, 24,255, 20, 20, 20,255, 15, 15, 15,255, 11, 11, 11,255, 10, 10, 10,255, 11, 11, 11,255, 7, 7, 7,153, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13,102, - 41, 41, 41,255, 50, 50, 50,255, 54, 54, 54,255, 57, 57, 57,255, 58, 58, 58,255, 59, 59, 59,255, 59, 59, 59,255, 58, 58, 58,255, - 57, 57, 57,255, 55, 55, 55,255, 53, 53, 53,255, 51, 51, 51,255, 48, 48, 48,255, 45, 45, 45,255, 41, 41, 41,255, 38, 38, 38,255, - 35, 35, 35,255, 31, 31, 31,255, 27, 27, 27,255, 23, 23, 23,255, 17, 17, 17,255, 12, 12, 12,255, 11, 11, 11,255, 11, 11, 11,255, - 5, 5, 5,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 36,204, - 53, 53, 53,255, 59, 59, 59,255, 63, 63, 63,255, 65, 65, 65,255, 66, 66, 66,255, 66, 66, 66,255, 66, 66, 66,255, 65, 65, 65,255, - 64, 64, 64,255, 62, 62, 62,255, 60, 60, 60,255, 57, 57, 57,255, 54, 54, 54,255, 51, 51, 51,255, 48, 48, 48,255, 44, 44, 44,255, - 41, 41, 41,255, 37, 37, 37,255, 33, 33, 33,255, 29, 29, 29,255, 24, 24, 24,255, 19, 19, 19,255, 13, 13, 13,255, 11, 11, 11,255, - 12, 12, 12,255, 3, 3, 3, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19,102, 56, 56, 56,255, - 64, 64, 64,255, 68, 68, 68,255, 71, 71, 71,255, 73, 73, 73,255, 74, 74, 74,255, 74, 74, 74,255, 73, 73, 73,255, 72, 72, 72,255, - 71, 71, 71,255, 69, 69, 69,255, 67, 67, 67,255, 64, 64, 64,255, 61, 61, 61,255, 58, 58, 58,255, 54, 54, 54,255, 50, 50, 50,255, - 47, 47, 47,255, 43, 43, 43,255, 39, 39, 39,255, 34, 34, 34,255, 30, 30, 30,255, 25, 25, 25,255, 19, 19, 19,255, 13, 13, 13,255, - 12, 12, 12,255, 10, 10, 10,204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54,255, 66, 66, 66,255, - 72, 72, 72,255, 77, 77, 77,255, 79, 79, 79,255, 81, 81, 81,255, 81, 81, 81,255, 81, 81, 81,255, 80, 80, 80,255, 79, 79, 79,255, - 77, 77, 77,255, 75, 75, 75,255, 73, 73, 73,255, 70, 70, 70,255, 67, 67, 67,255, 63, 63, 63,255, 60, 60, 60,255, 56, 56, 56,255, - 52, 52, 52,255, 49, 49, 49,255, 44, 44, 44,255, 40, 40, 40,255, 35, 35, 35,255, 30, 30, 30,255, 24, 24, 24,255, 18, 18, 18,255, - 12, 12, 12,255, 12, 12, 12,255, 6, 6, 6,102, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22,102, 67, 67, 67,255, 76, 76, 76,255, - 81, 81, 81,255, 84, 84, 84,255, 87, 87, 87,255, 88, 88, 88,255, 88, 88, 88,255, 88, 88, 88,255, 87, 87, 87,255, 86, 86, 86,255, - 84, 84, 84,255, 82, 82, 82,255, 79, 79, 79,255, 76, 76, 76,255, 73, 73, 73,255, 69, 69, 69,255, 65, 65, 65,255, 62, 62, 62,255, - 58, 58, 58,255, 54, 54, 54,255, 49, 49, 49,255, 45, 45, 45,255, 40, 40, 40,255, 35, 35, 35,255, 29, 29, 29,255, 23, 23, 23,255, - 16, 16, 16,255, 12, 12, 12,255, 12, 12, 12,204, 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49,204, 76, 76, 76,255, 84, 84, 84,255, - 89, 89, 89,255, 92, 92, 92,255, 94, 94, 94,255, 95, 95, 95,255, 95, 95, 95,255, 95, 95, 95,255, 94, 94, 94,255, 93, 93, 93,255, - 91, 91, 91,255, 88, 88, 88,255, 85, 85, 85,255, 82, 82, 82,255, 79, 79, 79,255, 75, 75, 75,255, 71, 71, 71,255, 67, 67, 67,255, - 63, 63, 63,255, 59, 59, 59,255, 55, 55, 55,255, 50, 50, 50,255, 45, 45, 45,255, 40, 40, 40,255, 34, 34, 34,255, 28, 28, 28,255, - 21, 21, 21,255, 13, 13, 13,255, 14, 14, 14,255, 0, 0, 0, 0, 14, 14, 14,102, 70, 70, 70,255, 85, 85, 85,255, 92, 92, 92,255, - 97, 97, 97,255,100,100,100,255,102,102,102,255,102,102,102,255,103,103,103,255,102,102,102,255,101,101,101,255, 99, 99, 99,255, - 97, 97, 97,255, 94, 94, 94,255, 91, 91, 91,255, 88, 88, 88,255, 84, 84, 84,255, 81, 81, 81,255, 77, 77, 77,255, 72, 72, 72,255, - 68, 68, 68,255, 64, 64, 64,255, 59, 59, 59,255, 55, 55, 55,255, 50, 50, 50,255, 44, 44, 44,255, 39, 39, 39,255, 32, 32, 32,255, - 25, 25, 25,255, 17, 17, 17,255, 13, 13, 13,255, 7, 7, 7,102, 24, 24, 24,102, 80, 80, 80,255, 93, 93, 93,255,100,100,100,255, -104,104,104,255,107,107,107,255,109,109,109,255,109,109,109,255,109,109,109,255,109,109,109,255,107,107,107,255,106,106,106,255, -103,103,103,255,100,100,100,255, 97, 97, 97,255, 94, 94, 94,255, 90, 90, 90,255, 86, 86, 86,255, 82, 82, 82,255, 77, 77, 77,255, - 73, 73, 73,255, 69, 69, 69,255, 64, 64, 64,255, 59, 59, 59,255, 54, 54, 54,255, 49, 49, 49,255, 43, 43, 43,255, 36, 36, 36,255, - 29, 29, 29,255, 21, 21, 21,255, 14, 14, 14,255, 10, 10, 10,153, 29, 29, 29,102, 89, 89, 89,255,100,100,100,255,107,107,107,255, -112,112,112,255,114,114,114,255,116,116,116,255,116,116,116,255,116,116,116,255,115,115,115,255,114,114,114,255,112,112,112,255, -110,110,110,255,107,107,107,255,104,104,104,255,100,100,100,255, 96, 96, 96,255, 92, 92, 92,255, 87, 87, 87,255, 83, 83, 83,255, - 78, 78, 78,255, 73, 73, 73,255, 68, 68, 68,255, 63, 63, 63,255, 58, 58, 58,255, 52, 52, 52,255, 46, 46, 46,255, 40, 40, 40,255, - 33, 33, 33,255, 24, 24, 24,255, 17, 17, 17,255, 13, 13, 13,204, 46, 46, 46,153, 95, 95, 95,255,107,107,107,255,114,114,114,255, -118,118,118,255,121,121,121,255,122,122,122,255,123,123,123,255,123,123,123,255,122,122,122,255,122,122,122,255,120,120,120,255, -118,118,118,255,114,114,114,255,110,110,110,255,106,106,106,255,101,101,101,255, 97, 97, 97,255, 92, 92, 92,255, 87, 87, 87,255, - 83, 83, 83,255, 78, 78, 78,255, 73, 73, 73,255, 68, 68, 68,255, 62, 62, 62,255, 56, 56, 56,255, 50, 50, 50,255, 44, 44, 44,255, - 36, 36, 36,255, 28, 28, 28,255, 19, 19, 19,255, 12, 12, 12,204, 47, 47, 47,153,101,101,101,255,113,113,113,255,120,120,120,255, -125,125,125,255,127,127,127,255,129,129,129,255,130,130,130,255,130,130,130,255,131,131,131,255,131,131,131,255,131,131,131,255, -129,129,129,255,125,125,125,255,120,120,120,255,113,113,113,255,108,108,108,255,103,103,103,255, 97, 97, 97,255, 92, 92, 92,255, - 87, 87, 87,255, 82, 82, 82,255, 77, 77, 77,255, 72, 72, 72,255, 66, 66, 66,255, 60, 60, 60,255, 54, 54, 54,255, 47, 47, 47,255, - 39, 39, 39,255, 31, 31, 31,255, 22, 22, 22,255, 12, 12, 12,204, 48, 48, 48,153,106,106,106,255,118,118,118,255,126,126,126,255, -131,131,131,255,134,134,134,255,135,135,135,255,137,137,137,255,138,138,138,255,142,142,142,255,147,147,147,255,149,149,149,255, -148,148,148,255,142,142,142,255,133,133,133,255,124,124,124,255,115,115,115,255,108,108,108,255,102,102,102,255, 97, 97, 97,255, - 92, 92, 92,255, 87, 87, 87,255, 81, 81, 81,255, 75, 75, 75,255, 69, 69, 69,255, 63, 63, 63,255, 57, 57, 57,255, 49, 49, 49,255, - 42, 42, 42,255, 33, 33, 33,255, 24, 24, 24,255, 9, 9, 9,153, 32, 32, 32,102,109,109,109,255,123,123,123,255,131,131,131,255, -136,136,136,255,140,140,140,255,142,142,142,255,144,144,144,255,148,148,148,255,156,156,156,255,168,168,168,255,176,176,176,255, -177,177,177,255,168,168,168,255,153,153,153,255,137,137,137,255,124,124,124,255,114,114,114,255,107,107,107,255,101,101,101,255, - 96, 96, 96,255, 90, 90, 90,255, 85, 85, 85,255, 79, 79, 79,255, 72, 72, 72,255, 66, 66, 66,255, 59, 59, 59,255, 52, 52, 52,255, - 44, 44, 44,255, 35, 35, 35,255, 26, 26, 26,255, 10, 10, 10,153, 17, 17, 17, 51,110,110,110,255,127,127,127,255,136,136,136,255, -142,142,142,255,145,145,145,255,148,148,148,255,151,151,151,255,159,159,159,255,174,174,174,255,195,195,195,255,212,212,212,255, -216,216,216,255,204,204,204,255,179,179,179,255,154,154,154,255,135,135,135,255,121,121,121,255,112,112,112,255,106,106,106,255, - 99, 99, 99,255, 94, 94, 94,255, 88, 88, 88,255, 82, 82, 82,255, 76, 76, 76,255, 69, 69, 69,255, 62, 62, 62,255, 54, 54, 54,255, - 46, 46, 46,255, 37, 37, 37,255, 26, 26, 26,255, 6, 6, 6,102, 0, 0, 0, 0,107,107,107,255,130,130,130,255,140,140,140,255, -146,146,146,255,150,150,150,255,153,153,153,255,158,158,158,255,169,169,169,255,191,191,191,255,219,219,219,255,246,246,246,255, -254,254,254,255,237,237,237,255,204,204,204,255,170,170,170,255,145,145,145,255,127,127,127,255,117,117,117,255,110,110,110,255, -103,103,103,255, 97, 97, 97,255, 91, 91, 91,255, 85, 85, 85,255, 78, 78, 78,255, 71, 71, 71,255, 64, 64, 64,255, 55, 55, 55,255, - 47, 47, 47,255, 37, 37, 37,255, 25, 25, 25,255, 3, 3, 3, 51, 0, 0, 0, 0, 65, 65, 65,153,129,129,129,255,142,142,142,255, -149,149,149,255,154,154,154,255,157,157,157,255,163,163,163,255,176,176,176,255,199,199,199,255,232,232,232,255,255,255,255,255, -255,255,255,255,255,255,255,255,220,220,220,255,181,181,181,255,151,151,151,255,132,132,132,255,121,121,121,255,113,113,113,255, -106,106,106,255,100,100,100,255, 94, 94, 94,255, 87, 87, 87,255, 80, 80, 80,255, 73, 73, 73,255, 65, 65, 65,255, 57, 57, 57,255, - 48, 48, 48,255, 38, 38, 38,255, 16, 16, 16,153, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 51,127,127,127,255,143,143,143,255, -152,152,152,255,157,157,157,255,161,161,161,255,165,165,165,255,177,177,177,255,198,198,198,255,227,227,227,255,253,253,253,255, -255,255,255,255,250,250,250,255,217,217,217,255,181,181,181,255,153,153,153,255,135,135,135,255,124,124,124,255,117,117,117,255, -110,110,110,255,103,103,103,255, 96, 96, 96,255, 89, 89, 89,255, 82, 82, 82,255, 74, 74, 74,255, 66, 66, 66,255, 57, 57, 57,255, - 48, 48, 48,255, 35, 35, 35,255, 10, 10, 10,153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 93, 93,204,141,141,141,255, -153,153,153,255,159,159,159,255,163,163,163,255,167,167,167,255,174,174,174,255,188,188,188,255,209,209,209,255,228,228,228,255, -234,234,234,255,224,224,224,255,200,200,200,255,173,173,173,255,151,151,151,255,136,136,136,255,127,127,127,255,119,119,119,255, -112,112,112,255,105,105,105,255, 98, 98, 98,255, 91, 91, 91,255, 83, 83, 83,255, 75, 75, 75,255, 66, 66, 66,255, 57, 57, 57,255, - 46, 46, 46,255, 24, 24, 24,204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20, 51,134,134,134,255, -151,151,151,255,160,160,160,255,164,164,164,255,167,167,167,255,171,171,171,255,178,178,178,255,189,189,189,255,200,200,200,255, -202,202,202,255,195,195,195,255,180,180,180,255,163,163,163,255,148,148,148,255,137,137,137,255,129,129,129,255,121,121,121,255, -114,114,114,255,107,107,107,255, 99, 99, 99,255, 91, 91, 91,255, 83, 83, 83,255, 74, 74, 74,255, 65, 65, 65,255, 55, 55, 55,255, - 41, 41, 41,255, 7, 7, 7, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49,102, -145,145,145,255,157,157,157,255,164,164,164,255,167,167,167,255,170,170,170,255,172,172,172,255,176,176,176,255,180,180,180,255, -179,179,179,255,174,174,174,255,165,165,165,255,155,155,155,255,145,145,145,255,137,137,137,255,130,130,130,255,122,122,122,255, -115,115,115,255,107,107,107,255, 99, 99, 99,255, 91, 91, 91,255, 82, 82, 82,255, 73, 73, 73,255, 63, 63, 63,255, 50, 50, 50,255, - 22, 22, 22,153, 0, 0, 0, 0, 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, 78, 78,153,149,149,149,255,160,160,160,255,166,166,166,255,168,168,168,255,169,169,169,255,170,170,170,255,169,169,169,255, -167,167,167,255,164,164,164,255,158,158,158,255,151,151,151,255,144,144,144,255,137,137,137,255,130,130,130,255,123,123,123,255, -115,115,115,255,106,106,106,255, 98, 98, 98,255, 89, 89, 89,255, 80, 80, 80,255, 70, 70, 70,255, 58, 58, 58,255, 27, 27, 27,153, - 3, 3, 3, 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, 80, 80, 80,153,150,150,150,255,160,160,160,255,165,165,165,255,167,167,167,255,167,167,167,255,166,166,166,255, -163,163,163,255,160,160,160,255,155,155,155,255,149,149,149,255,143,143,143,255,137,137,137,255,129,129,129,255,121,121,121,255, -113,113,113,255,105,105,105,255, 96, 96, 96,255, 86, 86, 86,255, 76, 76, 76,255, 63, 63, 63,255, 38, 38, 38,204, 7, 7, 7, 51, + 0, 0,128, 63, 68, 65, 84, 65, 40, 0, 0, 0, 32,166,176, 21, 1, 0, 0, 0, 19, 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, 0, 0, 0, 0, 48, 90,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 0, 16, 0, 0, 48, 90,132, 27, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 3, 51, 8, 8, 8,153, 11, 11, 11,204, 13, 13, 13,255, 12, 12, 12,255, 12, 12, 12,255, 11, 11, 11,255, 10, 10, 10,255, + 10, 10, 10,255, 9, 9, 9,255, 9, 9, 9,255, 9, 9, 9,255, 4, 4, 4,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 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, 3, 51, 10, 10, 10,153, + 18, 18, 18,255, 20, 20, 20,255, 22, 22, 22,255, 23, 23, 23,255, 22, 22, 22,255, 20, 20, 20,255, 19, 19, 19,255, 16, 16, 16,255, + 14, 14, 14,255, 11, 11, 11,255, 10, 10, 10,255, 9, 9, 9,255, 9, 9, 9,255, 9, 9, 9,255, 8, 8, 8,204, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7,102, 19, 19, 19,204, 27, 27, 27,255, + 31, 31, 31,255, 32, 32, 32,255, 33, 33, 33,255, 33, 33, 33,255, 31, 31, 31,255, 30, 30, 30,255, 27, 27, 27,255, 25, 25, 25,255, + 22, 22, 22,255, 19, 19, 19,255, 16, 16, 16,255, 12, 12, 12,255, 10, 10, 10,255, 10, 10, 10,255, 10, 10, 10,255, 10, 10, 10,255, + 4, 4, 4,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13,153, 29, 29, 29,255, 37, 37, 37,255, 40, 40, 40,255, + 42, 42, 42,255, 42, 42, 42,255, 43, 43, 43,255, 41, 41, 41,255, 40, 40, 40,255, 38, 38, 38,255, 36, 36, 36,255, 33, 33, 33,255, + 30, 30, 30,255, 27, 27, 27,255, 24, 24, 24,255, 20, 20, 20,255, 16, 16, 16,255, 12, 12, 12,255, 10, 10, 10,255, 10, 10, 10,255, + 10, 10, 10,255, 7, 7, 7,153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13,102, 37, 37, 37,255, 44, 44, 44,255, 48, 48, 48,255, 50, 50, 50,255, + 51, 51, 51,255, 51, 51, 51,255, 50, 50, 50,255, 49, 49, 49,255, 48, 48, 48,255, 45, 45, 45,255, 43, 43, 43,255, 41, 41, 41,255, + 37, 37, 37,255, 34, 34, 34,255, 31, 31, 31,255, 28, 28, 28,255, 24, 24, 24,255, 20, 20, 20,255, 15, 15, 15,255, 11, 11, 11,255, + 10, 10, 10,255, 11, 11, 11,255, 7, 7, 7,153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13,102, 41, 41, 41,255, 50, 50, 50,255, 54, 54, 54,255, 57, 57, 57,255, 58, 58, 58,255, + 59, 59, 59,255, 59, 59, 59,255, 58, 58, 58,255, 57, 57, 57,255, 55, 55, 55,255, 53, 53, 53,255, 51, 51, 51,255, 48, 48, 48,255, + 45, 45, 45,255, 41, 41, 41,255, 38, 38, 38,255, 35, 35, 35,255, 31, 31, 31,255, 27, 27, 27,255, 23, 23, 23,255, 17, 17, 17,255, + 12, 12, 12,255, 11, 11, 11,255, 11, 11, 11,255, 5, 5, 5,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 36,204, 53, 53, 53,255, 59, 59, 59,255, 63, 63, 63,255, 65, 65, 65,255, 66, 66, 66,255, + 66, 66, 66,255, 66, 66, 66,255, 65, 65, 65,255, 64, 64, 64,255, 62, 62, 62,255, 60, 60, 60,255, 57, 57, 57,255, 54, 54, 54,255, + 51, 51, 51,255, 48, 48, 48,255, 44, 44, 44,255, 41, 41, 41,255, 37, 37, 37,255, 33, 33, 33,255, 29, 29, 29,255, 24, 24, 24,255, + 19, 19, 19,255, 13, 13, 13,255, 11, 11, 11,255, 12, 12, 12,255, 3, 3, 3, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 19, 19, 19,102, 56, 56, 56,255, 64, 64, 64,255, 68, 68, 68,255, 71, 71, 71,255, 73, 73, 73,255, 74, 74, 74,255, + 74, 74, 74,255, 73, 73, 73,255, 72, 72, 72,255, 71, 71, 71,255, 69, 69, 69,255, 67, 67, 67,255, 64, 64, 64,255, 61, 61, 61,255, + 58, 58, 58,255, 54, 54, 54,255, 50, 50, 50,255, 47, 47, 47,255, 43, 43, 43,255, 39, 39, 39,255, 34, 34, 34,255, 30, 30, 30,255, + 25, 25, 25,255, 19, 19, 19,255, 13, 13, 13,255, 12, 12, 12,255, 10, 10, 10,204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 54, 54, 54,255, 66, 66, 66,255, 72, 72, 72,255, 77, 77, 77,255, 79, 79, 79,255, 81, 81, 81,255, 81, 81, 81,255, + 81, 81, 81,255, 80, 80, 80,255, 79, 79, 79,255, 77, 77, 77,255, 75, 75, 75,255, 73, 73, 73,255, 70, 70, 70,255, 67, 67, 67,255, + 63, 63, 63,255, 60, 60, 60,255, 56, 56, 56,255, 52, 52, 52,255, 49, 49, 49,255, 44, 44, 44,255, 40, 40, 40,255, 35, 35, 35,255, + 30, 30, 30,255, 24, 24, 24,255, 18, 18, 18,255, 12, 12, 12,255, 12, 12, 12,255, 6, 6, 6,102, 0, 0, 0, 0, 0, 0, 0, 0, + 22, 22, 22,102, 67, 67, 67,255, 76, 76, 76,255, 81, 81, 81,255, 84, 84, 84,255, 87, 87, 87,255, 88, 88, 88,255, 88, 88, 88,255, + 88, 88, 88,255, 87, 87, 87,255, 86, 86, 86,255, 84, 84, 84,255, 82, 82, 82,255, 79, 79, 79,255, 76, 76, 76,255, 73, 73, 73,255, + 69, 69, 69,255, 65, 65, 65,255, 62, 62, 62,255, 58, 58, 58,255, 54, 54, 54,255, 49, 49, 49,255, 45, 45, 45,255, 40, 40, 40,255, + 35, 35, 35,255, 29, 29, 29,255, 23, 23, 23,255, 16, 16, 16,255, 12, 12, 12,255, 12, 12, 12,204, 0, 0, 0, 0, 0, 0, 0, 0, + 49, 49, 49,204, 76, 76, 76,255, 84, 84, 84,255, 89, 89, 89,255, 92, 92, 92,255, 94, 94, 94,255, 95, 95, 95,255, 95, 95, 95,255, + 95, 95, 95,255, 94, 94, 94,255, 93, 93, 93,255, 91, 91, 91,255, 88, 88, 88,255, 85, 85, 85,255, 82, 82, 82,255, 79, 79, 79,255, + 75, 75, 75,255, 71, 71, 71,255, 67, 67, 67,255, 63, 63, 63,255, 59, 59, 59,255, 55, 55, 55,255, 50, 50, 50,255, 45, 45, 45,255, + 40, 40, 40,255, 34, 34, 34,255, 28, 28, 28,255, 21, 21, 21,255, 13, 13, 13,255, 14, 14, 14,255, 0, 0, 0, 0, 14, 14, 14,102, + 70, 70, 70,255, 85, 85, 85,255, 92, 92, 92,255, 97, 97, 97,255,100,100,100,255,102,102,102,255,102,102,102,255,103,103,103,255, +102,102,102,255,101,101,101,255, 99, 99, 99,255, 97, 97, 97,255, 94, 94, 94,255, 91, 91, 91,255, 88, 88, 88,255, 84, 84, 84,255, + 81, 81, 81,255, 77, 77, 77,255, 72, 72, 72,255, 68, 68, 68,255, 64, 64, 64,255, 59, 59, 59,255, 55, 55, 55,255, 50, 50, 50,255, + 44, 44, 44,255, 39, 39, 39,255, 32, 32, 32,255, 25, 25, 25,255, 17, 17, 17,255, 13, 13, 13,255, 7, 7, 7,102, 24, 24, 24,102, + 80, 80, 80,255, 93, 93, 93,255,100,100,100,255,104,104,104,255,107,107,107,255,109,109,109,255,109,109,109,255,109,109,109,255, +109,109,109,255,107,107,107,255,106,106,106,255,103,103,103,255,100,100,100,255, 97, 97, 97,255, 94, 94, 94,255, 90, 90, 90,255, + 86, 86, 86,255, 82, 82, 82,255, 77, 77, 77,255, 73, 73, 73,255, 69, 69, 69,255, 64, 64, 64,255, 59, 59, 59,255, 54, 54, 54,255, + 49, 49, 49,255, 43, 43, 43,255, 36, 36, 36,255, 29, 29, 29,255, 21, 21, 21,255, 14, 14, 14,255, 10, 10, 10,153, 29, 29, 29,102, + 89, 89, 89,255,100,100,100,255,107,107,107,255,112,112,112,255,114,114,114,255,116,116,116,255,116,116,116,255,116,116,116,255, +115,115,115,255,114,114,114,255,112,112,112,255,110,110,110,255,107,107,107,255,104,104,104,255,100,100,100,255, 96, 96, 96,255, + 92, 92, 92,255, 87, 87, 87,255, 83, 83, 83,255, 78, 78, 78,255, 73, 73, 73,255, 68, 68, 68,255, 63, 63, 63,255, 58, 58, 58,255, + 52, 52, 52,255, 46, 46, 46,255, 40, 40, 40,255, 33, 33, 33,255, 24, 24, 24,255, 17, 17, 17,255, 13, 13, 13,204, 46, 46, 46,153, + 95, 95, 95,255,107,107,107,255,114,114,114,255,118,118,118,255,121,121,121,255,122,122,122,255,123,123,123,255,123,123,123,255, +122,122,122,255,122,122,122,255,120,120,120,255,118,118,118,255,114,114,114,255,110,110,110,255,106,106,106,255,101,101,101,255, + 97, 97, 97,255, 92, 92, 92,255, 87, 87, 87,255, 83, 83, 83,255, 78, 78, 78,255, 73, 73, 73,255, 68, 68, 68,255, 62, 62, 62,255, + 56, 56, 56,255, 50, 50, 50,255, 44, 44, 44,255, 36, 36, 36,255, 28, 28, 28,255, 19, 19, 19,255, 12, 12, 12,204, 47, 47, 47,153, +101,101,101,255,113,113,113,255,120,120,120,255,125,125,125,255,127,127,127,255,129,129,129,255,130,130,130,255,130,130,130,255, +131,131,131,255,131,131,131,255,131,131,131,255,129,129,129,255,125,125,125,255,120,120,120,255,113,113,113,255,108,108,108,255, +103,103,103,255, 97, 97, 97,255, 92, 92, 92,255, 87, 87, 87,255, 82, 82, 82,255, 77, 77, 77,255, 72, 72, 72,255, 66, 66, 66,255, + 60, 60, 60,255, 54, 54, 54,255, 47, 47, 47,255, 39, 39, 39,255, 31, 31, 31,255, 22, 22, 22,255, 12, 12, 12,204, 48, 48, 48,153, +106,106,106,255,118,118,118,255,126,126,126,255,131,131,131,255,134,134,134,255,135,135,135,255,137,137,137,255,138,138,138,255, +142,142,142,255,147,147,147,255,149,149,149,255,148,148,148,255,142,142,142,255,133,133,133,255,124,124,124,255,115,115,115,255, +108,108,108,255,102,102,102,255, 97, 97, 97,255, 92, 92, 92,255, 87, 87, 87,255, 81, 81, 81,255, 75, 75, 75,255, 69, 69, 69,255, + 63, 63, 63,255, 57, 57, 57,255, 49, 49, 49,255, 42, 42, 42,255, 33, 33, 33,255, 24, 24, 24,255, 9, 9, 9,153, 32, 32, 32,102, +109,109,109,255,123,123,123,255,131,131,131,255,136,136,136,255,140,140,140,255,142,142,142,255,144,144,144,255,148,148,148,255, +156,156,156,255,168,168,168,255,176,176,176,255,177,177,177,255,168,168,168,255,153,153,153,255,137,137,137,255,124,124,124,255, +114,114,114,255,107,107,107,255,101,101,101,255, 96, 96, 96,255, 90, 90, 90,255, 85, 85, 85,255, 79, 79, 79,255, 72, 72, 72,255, + 66, 66, 66,255, 59, 59, 59,255, 52, 52, 52,255, 44, 44, 44,255, 35, 35, 35,255, 26, 26, 26,255, 10, 10, 10,153, 17, 17, 17, 51, +110,110,110,255,127,127,127,255,136,136,136,255,142,142,142,255,145,145,145,255,148,148,148,255,151,151,151,255,159,159,159,255, +174,174,174,255,195,195,195,255,212,212,212,255,216,216,216,255,204,204,204,255,179,179,179,255,154,154,154,255,135,135,135,255, +121,121,121,255,112,112,112,255,106,106,106,255, 99, 99, 99,255, 94, 94, 94,255, 88, 88, 88,255, 82, 82, 82,255, 76, 76, 76,255, + 69, 69, 69,255, 62, 62, 62,255, 54, 54, 54,255, 46, 46, 46,255, 37, 37, 37,255, 26, 26, 26,255, 6, 6, 6,102, 0, 0, 0, 0, +107,107,107,255,130,130,130,255,140,140,140,255,146,146,146,255,150,150,150,255,153,153,153,255,158,158,158,255,169,169,169,255, +191,191,191,255,219,219,219,255,246,246,246,255,254,254,254,255,237,237,237,255,204,204,204,255,170,170,170,255,145,145,145,255, +127,127,127,255,117,117,117,255,110,110,110,255,103,103,103,255, 97, 97, 97,255, 91, 91, 91,255, 85, 85, 85,255, 78, 78, 78,255, + 71, 71, 71,255, 64, 64, 64,255, 55, 55, 55,255, 47, 47, 47,255, 37, 37, 37,255, 25, 25, 25,255, 3, 3, 3, 51, 0, 0, 0, 0, + 65, 65, 65,153,129,129,129,255,142,142,142,255,149,149,149,255,154,154,154,255,157,157,157,255,163,163,163,255,176,176,176,255, +199,199,199,255,232,232,232,255,255,255,255,255,255,255,255,255,255,255,255,255,220,220,220,255,181,181,181,255,151,151,151,255, +132,132,132,255,121,121,121,255,113,113,113,255,106,106,106,255,100,100,100,255, 94, 94, 94,255, 87, 87, 87,255, 80, 80, 80,255, + 73, 73, 73,255, 65, 65, 65,255, 57, 57, 57,255, 48, 48, 48,255, 38, 38, 38,255, 16, 16, 16,153, 0, 0, 0, 0, 0, 0, 0, 0, + 21, 21, 21, 51,127,127,127,255,143,143,143,255,152,152,152,255,157,157,157,255,161,161,161,255,165,165,165,255,177,177,177,255, +198,198,198,255,227,227,227,255,253,253,253,255,255,255,255,255,250,250,250,255,217,217,217,255,181,181,181,255,153,153,153,255, +135,135,135,255,124,124,124,255,117,117,117,255,110,110,110,255,103,103,103,255, 96, 96, 96,255, 89, 89, 89,255, 82, 82, 82,255, + 74, 74, 74,255, 66, 66, 66,255, 57, 57, 57,255, 48, 48, 48,255, 35, 35, 35,255, 10, 10, 10,153, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 93, 93, 93,204,141,141,141,255,153,153,153,255,159,159,159,255,163,163,163,255,167,167,167,255,174,174,174,255, +188,188,188,255,209,209,209,255,228,228,228,255,234,234,234,255,224,224,224,255,200,200,200,255,173,173,173,255,151,151,151,255, +136,136,136,255,127,127,127,255,119,119,119,255,112,112,112,255,105,105,105,255, 98, 98, 98,255, 91, 91, 91,255, 83, 83, 83,255, + 75, 75, 75,255, 66, 66, 66,255, 57, 57, 57,255, 46, 46, 46,255, 24, 24, 24,204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 20, 20, 20, 51,134,134,134,255,151,151,151,255,160,160,160,255,164,164,164,255,167,167,167,255,171,171,171,255, +178,178,178,255,189,189,189,255,200,200,200,255,202,202,202,255,195,195,195,255,180,180,180,255,163,163,163,255,148,148,148,255, +137,137,137,255,129,129,129,255,121,121,121,255,114,114,114,255,107,107,107,255, 99, 99, 99,255, 91, 91, 91,255, 83, 83, 83,255, + 74, 74, 74,255, 65, 65, 65,255, 55, 55, 55,255, 41, 41, 41,255, 7, 7, 7, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49,102,145,145,145,255,157,157,157,255,164,164,164,255,167,167,167,255,170,170,170,255, +172,172,172,255,176,176,176,255,180,180,180,255,179,179,179,255,174,174,174,255,165,165,165,255,155,155,155,255,145,145,145,255, +137,137,137,255,130,130,130,255,122,122,122,255,115,115,115,255,107,107,107,255, 99, 99, 99,255, 91, 91, 91,255, 82, 82, 82,255, + 73, 73, 73,255, 63, 63, 63,255, 50, 50, 50,255, 22, 22, 22,153, 0, 0, 0, 0, 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, 78, 78,153,149,149,149,255,160,160,160,255,166,166,166,255,168,168,168,255, +169,169,169,255,170,170,170,255,169,169,169,255,167,167,167,255,164,164,164,255,158,158,158,255,151,151,151,255,144,144,144,255, +137,137,137,255,130,130,130,255,123,123,123,255,115,115,115,255,106,106,106,255, 98, 98, 98,255, 89, 89, 89,255, 80, 80, 80,255, + 70, 70, 70,255, 58, 58, 58,255, 27, 27, 27,153, 3, 3, 3, 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, 80, 80, 80,153,150,150,150,255,160,160,160,255,165,165,165,255, +167,167,167,255,167,167,167,255,166,166,166,255,163,163,163,255,160,160,160,255,155,155,155,255,149,149,149,255,143,143,143,255, +137,137,137,255,129,129,129,255,121,121,121,255,113,113,113,255,105,105,105,255, 96, 96, 96,255, 86, 86, 86,255, 76, 76, 76,255, + 63, 63, 63,255, 38, 38, 38,204, 7, 7, 7, 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, 78, 78, 78,153,147,147,147,255,157,157,157,255, +161,161,161,255,163,163,163,255,162,162,162,255,160,160,160,255,157,157,157,255,152,152,152,255,147,147,147,255,141,141,141,255, +135,135,135,255,127,127,127,255,119,119,119,255,110,110,110,255,101,101,101,255, 91, 91, 91,255, 80, 80, 80,255, 66, 66, 66,255, + 32, 32, 32,153, 7, 7, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0,134,134,134,255, +148,148,148,255,154,154,154,255,155,155,155,255,154,154,154,255,152,152,152,255,147,147,147,255,142,142,142,255,136,136,136,255, +130,130,130,255,122,122,122,255,114,114,114,255,104,104,104,255, 93, 93, 93,255, 81, 81, 81,255, 54, 54, 54,204, 22, 22, 22,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 78, 78, 78,153,147,147,147,255,157,157,157,255,161,161,161,255,163,163,163,255,162,162,162,255, -160,160,160,255,157,157,157,255,152,152,152,255,147,147,147,255,141,141,141,255,135,135,135,255,127,127,127,255,119,119,119,255, -110,110,110,255,101,101,101,255, 91, 91, 91,255, 80, 80, 80,255, 66, 66, 66,255, 32, 32, 32,153, 7, 7, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0,134,134,134,255,148,148,148,255,154,154,154,255,155,155,155,255, -154,154,154,255,152,152,152,255,147,147,147,255,142,142,142,255,136,136,136,255,130,130,130,255,122,122,122,255,114,114,114,255, -104,104,104,255, 93, 93, 93,255, 81, 81, 81,255, 54, 54, 54,204, 22, 22, 22,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 73, 73, 73,153,103,103,103,204,137,137,137,255,140,140,140,255,140,140,140,255,137,137,137,255,133,133,133,255,127,127,127,255, +120,120,120,255,113,113,113,255,102,102,102,255, 91, 91, 91,255, 64, 64, 64,204, 28, 28, 28,102, 6, 6, 6, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 73, 73,153,103,103,103,204,137,137,137,255, -140,140,140,255,140,140,140,255,137,137,137,255,133,133,133,255,127,127,127,255,120,120,120,255,113,113,113,255,102,102,102,255, - 91, 91, 91,255, 64, 64, 64,204, 28, 28, 28,102, 6, 6, 6, 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, 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, +104, 1, 0, 0, 64,198,132, 29, 1, 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, 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, 1, 0, 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,160, 64, 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, 64, 0, 0, 0, 64, 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, 0, 0, 32, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, + 5, 0, 8, 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, 8, 0, 0, 0, + 1, 0, 1, 0, 3, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 2, 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, - 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,104, 1, 0, 0,224, 91,167, 29, 1, 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, 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, - 1, 0, 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,160, 64, - 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, 64, - 0, 0, 0, 64, 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, 0, 0, 32, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 5, 0, 8, 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, 8, 0, 0, 0, 1, 0, 1, 0, 3, 0, 2, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 1, 0, 0, 0, 2, 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,128, 93,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,128, 93,167, 29, 1, 0, 0, 0, - 19, 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, 0, 0, 0, 0, - 48, 46, 9, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 16, 0, 0, 48, 46, 9, 28, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,199,132, 29, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,224,199,132, 29, 1, 0, 0, 0, 19, 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, 0, 0, 0, 0, 48,108,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 0, 16, 0, 0, 48,108,132, 27, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, @@ -7656,24 +7656,24 @@ char datatoc_B_blend[]= { 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, - 0, 0, 0,255, 0, 0, 0,255, 77, 69, 0, 0,144, 1, 0, 0,224, 93,167, 29, 1, 0, 0, 0, 54, 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, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,142,161, 29, 1, 0, 0, 0, 96,102,167, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 97,167, 29, 1, 0, 0, 0,240, 99,167, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 95,167, 29, 1, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, - 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 98,167, 29, 1, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, - 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,100,167, 29, 1, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, - 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 4, 0, 1, 0, 1, 0, 1, 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,112,142,161, 29, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 48,220, 4, 28, 1, 0, 0, 0, 68, 65, 84, 65,104, 1, 0, 0,176, 95,167, 29, 1, 0, 0, 0, - 78, 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,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 77, 69, 0, 0,144, 1, 0, 0, 48,171,109, 27, + 1, 0, 0, 0, 54, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,116,110, 27, + 1, 0, 0, 0,224,184,135, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,174,109, 27, + 1, 0, 0, 0, 64,177,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,173,109, 27, + 1, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,175,109, 27, + 1, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,178,109, 27, + 1, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, + 12, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 67, 0, 0, 0, + 30, 0, 4, 0, 1, 0, 1, 0, 1, 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,224,116,110, 27, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 48, 86,132, 27, 1, 0, 0, 0, 68, 65, 84, 65, +104, 1, 0, 0, 0,173,109, 27, 1, 0, 0, 0, 78, 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, 80, 97,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,174,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7682,17 +7682,17 @@ char datatoc_B_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, 68, 65, 84, 65,192, 0, 0, 0, 80, 97,167, 29, 1, 0, 0, 0, - 60, 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,255,127, 1, 0, 0, 0, - 0, 0,128, 63, 0, 0,128,191, 0, 0,128,191,230, 73, 26,182, 26,182,255,127, 1, 0, 0, 0, 1, 0,128,191,253,255,127,191, - 0, 0,128,191, 26,182, 26,182, 26,182,255,127, 1, 0, 0, 0,250,255,127,191, 3, 0,128, 63, 0, 0,128,191, 26,182,230, 73, - 26,182,255,127, 1, 0, 0, 0, 4, 0,128, 63,247,255,127, 63, 0, 0,128, 63,230, 73,230, 73,230, 73,255,127, 1, 0, 0, 0, -245,255,127, 63, 5, 0,128,191, 0, 0,128, 63,230, 73, 26,182,230, 73,255,127, 1, 0, 0, 0, 3, 0,128,191,250,255,127,191, - 0, 0,128, 63, 26,182, 26,182,230, 73,255,127, 1, 0, 0, 0,255,255,127,191, 0, 0,128, 63, 0, 0,128, 63, 26,182,230, 73, -230, 73,255,127, 1, 0, 0, 0, 68, 65, 84, 65,104, 1, 0, 0, 80, 98,167, 29, 1, 0, 0, 0, 78, 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, 68, 65, 84, 65, +192, 0, 0, 0,160,174,109, 27, 1, 0, 0, 0, 60, 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,255,127, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128,191, 0, 0,128,191,230, 73, 26,182, 26,182,255,127, + 1, 0, 0, 0, 1, 0,128,191,253,255,127,191, 0, 0,128,191, 26,182, 26,182, 26,182,255,127, 1, 0, 0, 0,250,255,127,191, + 3, 0,128, 63, 0, 0,128,191, 26,182,230, 73, 26,182,255,127, 1, 0, 0, 0, 4, 0,128, 63,247,255,127, 63, 0, 0,128, 63, +230, 73,230, 73,230, 73,255,127, 1, 0, 0, 0,245,255,127, 63, 5, 0,128,191, 0, 0,128, 63,230, 73, 26,182,230, 73,255,127, + 1, 0, 0, 0, 3, 0,128,191,250,255,127,191, 0, 0,128, 63, 26,182, 26,182,230, 73,255,127, 1, 0, 0, 0,255,255,127,191, + 0, 0,128, 63, 0, 0,128, 63, 26,182,230, 73,230, 73,255,127, 1, 0, 0, 0, 68, 65, 84, 65,104, 1, 0, 0,160,175,109, 27, + 1, 0, 0, 0, 78, 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, -240, 99,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,177,109, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7701,15 +7701,15 @@ char datatoc_B_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, 68, 65, 84, 65,144, 0, 0, 0,240, 99,167, 29, 1, 0, 0, 0, 57, 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,104, 1, 0, 0,192,100,167, 29, 1, 0, 0, 0, - 78, 1, 0, 0, 5, 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,144, 0, 0, 0, 64,177,109, 27, + 1, 0, 0, 0, 57, 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, +104, 1, 0, 0, 16,178,109, 27, 1, 0, 0, 0, 78, 1, 0, 0, 5, 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, 96,102,167, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,184,135, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7718,28 +7718,28 @@ char datatoc_B_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, 68, 65, 84, 65,120, 0, 0, 0, 96,102,167, 29, 1, 0, 0, 0, - 56, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, - 7, 0, 0, 0, 6, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 2, 1, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 6, 0, 0, 0, - 7, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 2, - 85, 83, 69, 82,160, 11, 0, 0, 96, 76,251, 1, 1, 0, 0, 0,190, 0, 0, 0, 1, 0, 0, 0, 33,152, 1, 0, 63, 2, 0, 0, - 5, 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, 68, 65, 84, 65, +120, 0, 0, 0,224,184,135, 29, 1, 0, 0, 0, 56, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, + 4, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 2, 2, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 2, 85, 83, 69, 82,160, 11, 0, 0,224,252,251, 1, 1, 0, 0, 0,190, 0, 0, 0, + 1, 0, 0, 0, 33,152, 1, 0, 63, 2, 0, 0, 5, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 47, 0, 85,115,101,114,115, 47,116,111,110, 47, 68,101,115,107,116,111,112, 47, 0, 45,112,111,119,101,114, -112, 99, 47, 98,105,110, 47, 98,108,101,110,100,101,114, 46, 97,112,112, 47, 67,111,110,116,101,110,116,115, 47, 82,101,115,111, -117,114, 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, 47, 47, 0, 85,115,101,114,115, 47,116,111,110, 47, 68,101,115, +107,116,111,112, 47, 0, 45,112,111,119,101,114,112, 99, 47, 98,105,110, 47, 98,108,101,110,100,101,114, 46, 97,112,112, 47, 67, +111,110,116,101,110,116,115, 47, 82,101,115,111,117,114, 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, 0, 0, 0, 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, 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, 47, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 47, 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, 0, 0, 0, @@ -7759,7 +7759,7 @@ char datatoc_B_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, 47, 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, 47, 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, 0, 0, 0, @@ -7769,20 +7769,20 @@ char datatoc_B_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, 2, 0, 0, 0, 8, 0, 0, 0, 3, 0, 0, 0, 48, 52, 6, 1, 0, 0, 0, 0, 5, 0, 2, 0, 0, 8, 0, 0, - 2, 0, 0, 0, 68,172, 0, 0, 36, 0, 0, 0, 2, 0, 0, 0,128, 0, 0, 0, 72, 0, 0, 0, 0, 0, 64, 0, 5, 0, 2, 0, - 48, 76, 9, 28, 1, 0, 0, 0, 48,100, 9, 28, 1, 0, 0, 0, 16, 91,160, 21, 1, 0, 0, 0, 16, 91,160, 21, 1, 0, 0, 0, - 96, 92,160, 21, 1, 0, 0, 0, 96, 92,160, 21, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 94, 1, 8, 0, 0, 0, 3, 0, 0, 0, 48, 52, 6, 1, + 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,128, 0, 0, 0, + 72, 0, 0, 0, 0, 0, 64, 0, 5, 0, 2, 0, 48, 98, 21, 3, 1, 0, 0, 0, 48,122, 21, 3, 1, 0, 0, 0, 0, 72,128, 29, + 1, 0, 0, 0, 0, 72,128, 29, 1, 0, 0, 0, 80, 73,128, 29, 1, 0, 0, 0, 80, 73,128, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0,128, 63, 30, 90,100,191,154,153,153, 62, -102,102,102, 63, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 31,250,254, 62, 9, 0, 0, 63,156,153, 25, 63, 0, 0, 0, 0, -205,204, 76, 62,205,204, 76, 62,205,204, 76, 62, 0, 0,128, 63, 44,135, 22, 63, 32,133,235, 62,184,243,125, 62, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,195, 73, 76, 63, 42,135, 86, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 43,135, 61, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 16, 47, 93, 62, 58,180,200,190, 24, 47, 93,190, 0, 0, 0, 0, 14, 0, 0, 0, 25, 0, 15, 0, -120, 0, 60, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,144, 31, 15, 0, 6, 0, 15, 0, 8, 0, 10, 0,250, 0, 0, 0, -100, 0,100, 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, 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, + 0, 0,128, 63, 30, 90,100,191,154,153,153, 62,102,102,102, 63, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 31,250,254, 62, + 9, 0, 0, 63,156,153, 25, 63, 0, 0, 0, 0,205,204, 76, 62,205,204, 76, 62,205,204, 76, 62, 0, 0,128, 63, 44,135, 22, 63, + 32,133,235, 62,184,243,125, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 73, 76, 63, 42,135, 86, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 43,135, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 16, 47, 93, 62, 58,180,200,190, 24, 47, 93,190, + 0, 0, 0, 0, 14, 0, 0, 0, 25, 0, 15, 0,120, 0, 60, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,144, 31, 15, 0, + 6, 0, 15, 0, 8, 0, 10, 0,250, 0, 0, 0,100, 0,100, 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, @@ -7792,2229 +7792,2232 @@ char datatoc_B_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, 2, 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,128, 63, - 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, 0, 0, - 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, - 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, - 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, - 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, - 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, - 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, - 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, - 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, - 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, - 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, - 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, - 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, - 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, - 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, - 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, - 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 21, 0, 0, - 48, 76, 9, 28, 1, 0, 0, 0,188, 0, 0, 0, 1, 0, 0, 0, 48,100, 9, 28, 1, 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, 25, 25, 25,255, 0, 0, 0,255,255,255,255,255, 1, 0, 15, 0,241,255, 0, 0, - 25, 25, 25,255,153,153,153,255,153,153,153,255, 90, 90, 90,255, 0, 0, 0,255,255,255,255,255, 1, 0, 0, 0, 25, 0, 0, 0, - 0, 0, 0,255, 70, 70, 70,255, 86,128,194,255,255,255,255,255,255,255,255,255, 0, 0, 0,255, 1, 0, 15, 0,241,255, 0, 0, - 0, 0, 0,255, 70, 70, 70,255, 70, 70, 70,255,255,255,255,255, 0, 0, 0,255,255,255,255,255, 1, 0, 15, 0,241,255, 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,180,180,180,255,153,153,153,255, 90, 90, 90,255, 0, 0, 0,255,255,255,255,255, 1, 0,236,255, 0, 0, 0, 0, - 25, 25, 25,255,180,180,180,255,153,153,153,255,128,128,128,255, 0, 0, 0,255,255,255,255,255, 1, 0,236,255, 0, 0, 0, 0, - 0, 0, 0,255, 70, 70, 70,255, 70, 70, 70,255,255,255,255,255,255,255,255,255,204,204,204,255, 1, 0, 15, 0,241,255, 0, 0, - 0, 0, 0,255, 63, 63, 63,255, 86,128,194,255,255,255,255,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 25, 0,236,255, 0, 0, - 0, 0, 0,255, 25, 25, 25,230, 45, 45, 45,230,100,100,100,255,160,160,160,255,255,255,255,255, 0, 0, 25, 0,236,255, 0, 0, - 0, 0, 0,255, 0, 0, 0, 0, 86,128,194,255,255,255,255,255,255,255,255,255, 0, 0, 0,255, 0, 0, 38, 0, 0, 0, 0, 0, - 25, 25, 25,255,128,128,128,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, - 50, 50, 50,180, 80, 80, 80,180,100,100,100,180,128,128,128,255, 0, 0, 0,255,255,255,255,255, 1, 0, 5, 0,251,255, 0, 0, - 0, 0, 0,255, 0, 0, 0, 0, 86,128,194,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, -115,190, 76,255, 90,166, 51,255,240,235,100,255,215,211, 75,255,180, 0,255,255,153, 0,230,255, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,114,114,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,130,130,130,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,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, -255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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, -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, 64, 64, 64,255, - 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,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,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60, -255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 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,255,255,255,128, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 76, 76,255, 0, 0, 0, 0,250,250,250,255, 15, 15, 15,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, -102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -160,160,160,100,127,112,112,100,255,140, 25,255,250,250,250,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,130,130,130,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, -255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250,250,250,255,250,250,250,255,250,250,250,255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107,107,107,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,102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -255,255,255,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,150,150,150,100,112,112,112,100, 96,192, 64,255, 94, 94, 94,255, - 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 79,101, 73,255,135,177,125,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,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60, -255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 82, 96,110,255, -124,137,150,255, 3, 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,255,255,255,128, - 0, 0, 0,255,255,133, 0,255, 3, 0, 0, 0, 0, 0, 0, 0,114,114,114,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,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, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,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, -255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114,114,114,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, -165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,173,173,173,255,127,112,112,100, 0, 0, 0, 0, 91, 91, 91,255, - 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,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,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60, -255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 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,255,255,255,128, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,107,107,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, -102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,255,255,255,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -150,150,150,100,112,112,112,100, 96,192, 64,255, 94, 94, 94,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, - 79,101, 73,255,135,177,125,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, -255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, - 12, 10, 10,128,255,140, 0,255, 96,192, 64,255, 82, 96,110,255,124,137,150,255, 3, 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,255,255,255,128, 0, 0, 0,255,255,133, 0,255, 3, 0, 0, 0, 0, 0, 0, 0, -107,107,107,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,102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -255,255,255,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,150,150,150,100,112,112,112,100, 96,192, 64,255, 94, 94, 94,255, - 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 79,101, 73,255,135,177,125,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,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60, -255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 12, 10, 10,128,255,140, 0,255, 96,192, 64,255, 82, 96,110,255, -124,137,150,255, 3, 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,255,255,255,128, - 0, 0, 0,255,255,133, 0,255, 3, 0, 0, 0, 0, 0, 0, 0,116,116,116,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,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, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,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, -255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81,105,135,255,109, 88,129,255, 78,152, 62,255, 46,143,143,255,169, 84,124,255, -126,126, 80,255,162, 95,111,255,109,145,131,255,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 53, 53, 53,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, -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, 64, 64, 64,255, - 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,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,255, 32, 32,255, 75, 75, 75,255,255,255,255, 10,255,133, 0, 60, -255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 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,255,255,255,128, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,110,110,110,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,132,132,132,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, - 94, 94, 94,255,172,172,172,255, 17, 27, 60,100, 94, 94, 94,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,195,195,195,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, -255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153,153,153,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, -165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,143,143,143,255,198,119,119,255,255, 0, 0,255, 64, 64, 64,255, - 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,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,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60, -255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 4, 0, 0,100, 0, 0,255, 0, 0,200,255,128, 0, 80,255, 95, 95, 0,255, 0,100, 50,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,255,255,255,128, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,114,114,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,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, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,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, -255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114,114,114,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, -165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,173,173,173,255,127,112,112,100, 0, 0, 0, 0, 91, 91, 91,255, - 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,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,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60, -255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 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,255,255,255,128, - 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,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, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,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,255,255,255,219, 37, 18,255, -255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0,155,155,155,160,100,100,100,255, -108,105,111,255,104,106,117,255,105,117,110,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,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100,100,100,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, -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, 64, 64, 64,255, - 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,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,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60, -255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 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,255,255,255,128, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,114,114,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,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, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,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, -255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, 0, 0,255,189, 17, 17,255,247, 10, 10,255, 0, 0, 0, 0,247, 64, 24,255,246,105, 19,255,250,153, 0,255, 0, 0, 0, 0, - 30,145, 9,255, 89,183, 11,255,131,239, 29,255, 0, 0, 0, 0, 10, 54,148,255, 54,103,223,255, 94,193,239,255, 0, 0, 0, 0, -169, 41, 78,255,193, 65,106,255,240, 93,145,255, 0, 0, 0, 0, 67, 12,120,255, 84, 58,163,255,135,100,213,255, 0, 0, 0, 0, - 36,120, 90,255, 60,149,121,255,111,182,171,255, 0, 0, 0, 0, 75,112,124,255,106,134,145,255,155,194,205,255, 0, 0, 0, 0, -244,201, 12,255,238,194, 54,255,243,255, 0,255, 0, 0, 0, 0, 30, 32, 36,255, 72, 76, 86,255,255,255,255,255, 0, 0, 0, 0, -111, 47,106,255,152, 69,190,255,211, 48,214,255, 0, 0, 0, 0,108,142, 34,255,127,176, 34,255,187,239, 91,255, 0, 0, 0, 0, -141,141,141,255,176,176,176,255,222,222,222,255, 0, 0, 0, 0,131, 67, 38,255,139, 88, 17,255,189,106, 17,255, 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, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 21, 0, 0, 48,100, 9, 28, 1, 0, 0, 0,188, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48, 76, 9, 28, 1, 0, 0, 0, 82,111,117,110,100,101,100, 0, 0,101,119, 32, 85,115,101,114, - 32, 84,104,101,109,101, 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, 25, 25, 25,255, - 0, 0, 0,255,255,255,255,255, 1, 0, 25, 0,231,255, 0, 0, 25, 25, 25,255,153,153,153,255,153,153,153,255, 90, 90, 90,255, - 0, 0, 0,255,255,255,255,255, 1, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0,255, 70, 70, 70,255, 86,128,194,255,255,255,255,255, -255,255,255,255, 0, 0, 0,255, 1, 0, 15, 0,241,255, 0, 0, 0, 0, 0,255, 70, 70, 70,255, 70, 70, 70,255,255,255,255,255, - 0, 0, 0,255,255,255,255,255, 1, 0, 15, 0,241,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, 25, 25, 25,255,180,180,180,255,153,153,153,255, 90, 90, 90,255, - 0, 0, 0,255,255,255,255,255, 1, 0,236,255, 0, 0, 0, 0, 25, 25, 25,255,180,180,180,255,153,153,153,255,128,128,128,255, - 0, 0, 0,255,255,255,255,255, 1, 0,236,255, 0, 0, 0, 0, 0, 0, 0,255, 70, 70, 70,255, 70, 70, 70,255,255,255,255,255, -255,255,255,255,204,204,204,255, 1, 0, 15, 0,241,255, 0, 0, 0, 0, 0,255, 63, 63, 63,255, 86,128,194,255,255,255,255,255, - 0, 0, 0,255, 0, 0, 0,255, 0, 0, 25, 0,236,255, 0, 0, 0, 0, 0,255, 25, 25, 25,230, 46,124,217,204,255,255,255,255, -255,255,255,255, 0, 0, 0,255, 0, 0, 25, 0,236,255, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 86,128,194,255,255,255,255,255, -255,255,255,255, 0, 0, 0,255, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -145,145,145,245, 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, -175,175,175, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, - 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, -255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, -107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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, 0, 0, 0, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -160,160,160,100,127,112,112,100, 0, 0, 0, 0,143,143,143,255, 0, 0, 0,255,217,217,217,255, 0, 0, 0, 40,255,255,255,255, - 16, 64, 16,255,102,255,102,255,255,130, 0,255, 0, 0, 0,255,255,130, 0,255, 0, 0, 0,255,255,255,255,255,230,150, 50,255, -255, 32, 32,255, 0, 0, 0, 0,255,255,255, 10,255,130, 0, 60,255,138, 48,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -145,145,145,245, 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, -165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100,255,130, 0,255, 88, 88, 88,255, - 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, -255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, -107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,107,107,107,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -107,107,107,100,143,143,143,100, 96,192, 64,255, 94, 94, 94,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, - 79,101, 73,255,135,177,125,255,255,255,255,255,255,255,255,255,255,130, 0,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 96,192, 64,255, 82, 96,110,255,124,137,150,255, 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,255,255,255,255,255,130, 0,255, 2, 0, 0, 0, 0, 0, 0, 0, -114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -145,145,145,245, 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, -165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, - 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, -255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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,158,158,158,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, -158,158,158,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -140,140,140,255,127,112,112,100, 0, 0, 0, 0,112,112, 96,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, - 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 96,192, 64,255, 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, -107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -145,145,145,245, 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, -165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,107,107,107,255,178,178,178,100,255,130, 0,100, 94, 94, 94,255, - 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 79,101, 73,255,135,177,125,255,255,255,255,255,255,112,255,255, -255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143,143,143,255,200,100,200, 60, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228,156,198,204,255,255,170,204, 96,192, 64,255, 82, 96,110,255, -124,137,150,255, 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,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, -143,143,143,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -107,107,107,255,178,178,178,100,255,130, 0,100, 94, 94, 94,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, - 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -228,156,198,255,255,255,170,255, 96,192, 64,255, 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, -107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -145,145,145,245, 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, -165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, - 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, -255,130, 0,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,200,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 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, 81,105,135,255, -109, 88,129,255, 78,152, 62,255, 46,143,143,255,169, 84,124,255,126,126, 80,255,162, 95,111,255,109,145,131,255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, -195,195,195,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, - 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 80,200,255,255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,195,195,195,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -145,145,145,245, 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, -165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,143,143,143,255,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, - 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, -255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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,153,153,153,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, -153,153,153,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -143,143,143,255,198,119,119,255,255, 0, 0,255, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, - 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 2, 0, 0, 0,100, 0, 0,255, 0, 0,200,255, -128, 0, 80,255, 95, 95, 0,255, 0,100, 50,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, -107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -145,145,145,245, 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, -165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, - 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255, -255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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,158,158,158,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, -158,158,158,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -140,140,140,255,127,112,112,100, 0, 0, 0, 0,112,112, 96,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, - 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 96,192, 64,255, 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, -107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -145,145,145,245, 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, - 0, 0, 0, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0,143,143,143,255, - 0, 0, 0,255,217,217,217,255, 0, 0, 0, 40,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,130, 0,255, 0, 0, 0,255, -255,130, 0,255, 0, 0, 0,255,255,255,255,255,230,150, 50,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255, 10,255,130, 0, 60, -255,138, 48,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 4, 0, 0,150,150,150,255,129,131,144,255,127,127,127,255,142,138,145,255,120,145,120,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,100,100,100,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, -107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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, 0, 0, 0, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -160,160,160,100,127,112,112,100, 0, 0, 0, 0,143,143,143,255, 0, 0, 0,255,217,217,217,255, 0, 0, 0, 40,255,255,255,255, - 16, 64, 16,255,102,255,102,255,255,130, 0,255, 0, 0, 0,255,255,130, 0,255, 0, 0, 0,255,255,255,255,255,230,150, 50,255, -255, 32, 32,255, 0, 0, 0, 0,255,255,255, 10,255,130, 0, 60,255,138, 48,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114,114,114,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, -145,145,145,245, 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, - 0, 0, 0, 0, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154, 0, 0,255,189, 17, 17,255,247, 10, 10,255, 0, 0, 0, 0, -247, 64, 24,255,246,105, 19,255,250,153, 0,255, 0, 0, 0, 0, 30,145, 9,255, 89,183, 11,255,131,239, 29,255, 0, 0, 0, 0, - 10, 54,148,255, 54,103,223,255, 94,193,239,255, 0, 0, 0, 0,169, 41, 78,255,193, 65,106,255,240, 93,145,255, 0, 0, 0, 0, - 67, 12,120,255, 84, 58,163,255,135,100,213,255, 0, 0, 0, 0, 36,120, 90,255, 60,149,121,255,111,182,171,255, 0, 0, 0, 0, - 75,112,124,255,106,134,145,255,155,194,205,255, 0, 0, 0, 0,244,201, 12,255,238,194, 54,255,243,255, 0,255, 0, 0, 0, 0, - 30, 32, 36,255, 72, 76, 86,255,255,255,255,255, 0, 0, 0, 0,111, 47,106,255,152, 69,190,255,211, 48,214,255, 0, 0, 0, 0, -108,142, 34,255,127,176, 34,255,187,239, 91,255, 0, 0, 0, 0,141,141,141,255,176,176,176,255,222,222,222,255, 0, 0, 0, 0, -131, 67, 38,255,139, 88, 17,255,189,106, 17,255, 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, 0, 0, 0, 0, 0, 0, 0, 0, 68, 78, 65, 49,216,230, 0, 0, - 48, 80,221, 28, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 83, 68, 78, 65, 78, 65, 77, 69, 63, 11, 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,119, 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, 97,103, - 0,110, 97,109,101, 91, 51, 50, 93, 0,115, 97,118,101,100, 0,100, 97,116, 97, 0,108,101,110, 0,116,111,116, 97,108,108,101, -110, 0, 42,110,101,119,105,100, 0, 42,108,105, 98, 0,110, 97,109,101, 91, 50, 52, 93, 0,117,115, 0,105, 99,111,110, 95,105, -100, 0, 42,112,114,111,112,101,114,116,105,101,115, 0,105,100, 0, 42,105,100, 98,108,111, 99,107, 0, 42,102,105,108,101,100, - 97,116, 97, 0,110, 97,109,101, 91, 50, 52, 48, 93, 0,102,105,108,101,110, 97,109,101, 91, 50, 52, 48, 93, 0,116,111,116, 0, -112, 97,100, 0, 42,112, 97,114,101,110,116, 0,119, 91, 50, 93, 0,104, 91, 50, 93, 0, 99,104, 97,110,103,101,100, 91, 50, 93, - 0,112, 97,100, 48, 0,112, 97,100, 49, 0, 42,114,101, 99,116, 91, 50, 93, 0, 42,111, 98, 0, 98,108,111, 99,107,116,121,112, -101, 0, 97,100,114, 99,111,100,101, 0,110, 97,109,101, 91, 49, 50, 56, 93, 0, 42, 98,112, 0, 42, 98,101,122,116, 0,109, 97, -120,114, 99,116, 0,116,111,116,114, 99,116, 0,118, 97,114,116,121,112,101, 0,116,111,116,118,101,114,116, 0,105,112,111, 0, -101,120,116,114, 97,112, 0,114,116, 0, 98,105,116,109, 97,115,107, 0,115,108,105,100,101, 95,109,105,110, 0,115,108,105,100, -101, 95,109, 97,120, 0, 99,117,114,118, 97,108, 0, 42,100,114,105,118,101,114, 0, 99,117,114,118,101, 0, 99,117,114, 0,115, -104,111,119,107,101,121, 0,109,117,116,101,105,112,111, 0,112,111,115, 0,114,101,108, 97,116,105,118,101, 0,116,111,116,101, -108,101,109, 0,112, 97,100, 50, 0, 42,119,101,105,103,104,116,115, 0,118,103,114,111,117,112, 91, 51, 50, 93, 0,115,108,105, -100,101,114,109,105,110, 0,115,108,105,100,101,114,109, 97,120, 0, 42, 97,100,116, 0, 42,114,101,102,107,101,121, 0,101,108, -101,109,115,116,114, 91, 51, 50, 93, 0,101,108,101,109,115,105,122,101, 0, 98,108,111, 99,107, 0, 42,105,112,111, 0, 42,102, -114,111,109, 0,116,111,116,107,101,121, 0,115,108,117,114,112,104, 0, 42,108,105,110,101, 0, 42,102,111,114,109, 97,116, 0, - 98,108,101,110, 0,108,105,110,101,110,111, 0,115,116, 97,114,116, 0,101,110,100, 0,102,108, 97,103,115, 0, 99,111,108,111, -114, 91, 52, 93, 0,112, 97,100, 91, 52, 93, 0, 42,110, 97,109,101, 0,110,108,105,110,101,115, 0,108,105,110,101,115, 0, 42, - 99,117,114,108, 0, 42,115,101,108,108, 0, 99,117,114, 99, 0,115,101,108, 99, 0,109, 97,114,107,101,114,115, 0, 42,117,110, -100,111, 95, 98,117,102, 0,117,110,100,111, 95,112,111,115, 0,117,110,100,111, 95,108,101,110, 0, 42, 99,111,109,112,105,108, -101,100, 0,109,116,105,109,101, 0,115,105,122,101, 0,115,101,101,107, 0,112, 97,115,115,101,112, 97,114,116, 97,108,112,104, - 97, 0, 97,110,103,108,101, 0, 99,108,105,112,115,116, 97, 0, 99,108,105,112,101,110,100, 0,108,101,110,115, 0,111,114,116, -104,111, 95,115, 99, 97,108,101, 0,100,114, 97,119,115,105,122,101, 0,115,104,105,102,116,120, 0,115,104,105,102,116,121, 0, - 89, 70, 95,100,111,102,100,105,115,116, 0, 89, 70, 95, 97,112,101,114,116,117,114,101, 0, 89, 70, 95, 98,107,104,116,121,112, -101, 0, 89, 70, 95, 98,107,104, 98,105, 97,115, 0, 89, 70, 95, 98,107,104,114,111,116, 0, 42,100,111,102, 95,111, 98, 0,102, -114, 97,109,101,110,114, 0,102,114, 97,109,101,115, 0,111,102,102,115,101,116, 0,115,102,114, 97, 0,102,105,101, 95,105,109, - 97, 0, 99,121, 99,108, 0,111,107, 0,109,117,108,116,105, 95,105,110,100,101,120, 0,108, 97,121,101,114, 0,112, 97,115,115, - 0,109,101,110,117,110,114, 0, 42,115, 99,101,110,101, 0,105, 98,117,102,115, 0, 42,103,112,117,116,101,120,116,117,114,101, - 0, 42, 97,110,105,109, 0, 42,114,114, 0,115,111,117,114, 99,101, 0,108, 97,115,116,102,114, 97,109,101, 0,116,112, 97,103, -101,102,108, 97,103, 0,116,111,116, 98,105,110,100, 0,120,114,101,112, 0,121,114,101,112, 0,116,119,115,116, 97, 0,116,119, -101,110,100, 0, 98,105,110,100, 99,111,100,101, 0, 42,114,101,112, 98,105,110,100, 0, 42,112, 97, 99,107,101,100,102,105,108, -101, 0, 42,112,114,101,118,105,101,119, 0, 42,114,101,110,100,101,114, 95,116,101,120,116, 0,108, 97,115,116,117,112,100, 97, -116,101, 0,108, 97,115,116,117,115,101,100, 0, 97,110,105,109,115,112,101,101,100, 0,103,101,110, 95,120, 0,103,101,110, 95, -121, 0,103,101,110, 95,116,121,112,101, 0, 97,115,112,120, 0, 97,115,112,121, 0,116,101,120, 99,111, 0,109, 97,112,116,111, - 0,109, 97,112,116,111,110,101,103, 0, 98,108,101,110,100,116,121,112,101, 0, 42,111, 98,106,101, 99,116, 0, 42,116,101,120, - 0,117,118,110, 97,109,101, 91, 51, 50, 93, 0,112,114,111,106,120, 0,112,114,111,106,121, 0,112,114,111,106,122, 0,109, 97, -112,112,105,110,103, 0,111,102,115, 91, 51, 93, 0,115,105,122,101, 91, 51, 93, 0,114,111,116, 0,116,101,120,102,108, 97,103, - 0, 99,111,108,111,114,109,111,100,101,108, 0,112,109, 97,112,116,111, 0,112,109, 97,112,116,111,110,101,103, 0,110,111,114, -109, 97,112,115,112, 97, 99,101, 0,119,104,105, 99,104, 95,111,117,116,112,117,116, 0, 98,114,117,115,104, 95,109, 97,112, 95, -109,111,100,101, 0,112, 97,100, 91, 55, 93, 0,114, 0,103, 0, 98, 0,107, 0,100,101,102, 95,118, 97,114, 0, 99,111,108,102, - 97, 99, 0,118, 97,114,102, 97, 99, 0,110,111,114,102, 97, 99, 0,100,105,115,112,102, 97, 99, 0,119, 97,114,112,102, 97, 99, - 0, 99,111,108,115,112,101, 99,102, 97, 99, 0,109,105,114,114,102, 97, 99, 0, 97,108,112,104, 97,102, 97, 99, 0,100,105,102, -102,102, 97, 99, 0,115,112,101, 99,102, 97, 99, 0,101,109,105,116,102, 97, 99, 0,104, 97,114,100,102, 97, 99, 0,114, 97,121, -109,105,114,114,102, 97, 99, 0,116,114, 97,110,115,108,102, 97, 99, 0, 97,109, 98,102, 97, 99, 0, 99,111,108,101,109,105,116, -102, 97, 99, 0, 99,111,108,114,101,102,108,102, 97, 99, 0, 99,111,108,116,114, 97,110,115,102, 97, 99, 0,100,101,110,115,102, - 97, 99, 0,115, 99, 97,116,116,101,114,102, 97, 99, 0,114,101,102,108,102, 97, 99, 0,116,105,109,101,102, 97, 99, 0,108,101, -110,103,116,104,102, 97, 99, 0, 99,108,117,109,112,102, 97, 99, 0,107,105,110,107,102, 97, 99, 0,114,111,117,103,104,102, 97, - 99, 0,112, 97,100,101,110,115,102, 97, 99, 0,108,105,102,101,102, 97, 99, 0,115,105,122,101,102, 97, 99, 0,105,118,101,108, -102, 97, 99, 0,112,118,101,108,102, 97, 99, 0,115,104, 97,100,111,119,102, 97, 99, 0,122,101,110,117,112,102, 97, 99, 0,122, -101,110,100,111,119,110,102, 97, 99, 0, 98,108,101,110,100,102, 97, 99, 0,110, 97,109,101, 91, 49, 54, 48, 93, 0, 42,104, 97, -110,100,108,101, 0, 42,112,110, 97,109,101, 0, 42,115,116,110, 97,109,101,115, 0,115,116,121,112,101,115, 0,118, 97,114,115, - 0, 42,118, 97,114,115,116,114, 0, 42,114,101,115,117,108,116, 0, 42, 99,102,114, 97, 0,100, 97,116, 97, 91, 51, 50, 93, 0, - 40, 42,100,111,105,116, 41, 40, 41, 0, 40, 42,105,110,115,116, 97,110, 99,101, 95,105,110,105,116, 41, 40, 41, 0, 40, 42, 99, - 97,108,108, 98, 97, 99,107, 41, 40, 41, 0,118,101,114,115,105,111,110, 0, 97, 0,105,112,111,116,121,112,101, 0, 42,105,109, - 97, 0, 42, 99,117, 98,101, 91, 54, 93, 0,105,109, 97,116, 91, 52, 93, 91, 52, 93, 0,111, 98,105,109, 97,116, 91, 51, 93, 91, - 51, 93, 0,115,116,121,112,101, 0,118,105,101,119,115, 99, 97,108,101, 0,110,111,116,108, 97,121, 0, 99,117, 98,101,114,101, -115, 0,100,101,112,116,104, 0,114,101, 99, 97,108, 99, 0,108, 97,115,116,115,105,122,101, 0,102, 97,108,108,111,102,102, 95, -116,121,112,101, 0,102, 97,108,108,111,102,102, 95,115,111,102,116,110,101,115,115, 0,114, 97,100,105,117,115, 0, 99,111,108, -111,114, 95,115,111,117,114, 99,101, 0,116,111,116,112,111,105,110,116,115, 0,112,100,112, 97,100, 0,112,115,121,115, 0,112, -115,121,115, 95, 99, 97, 99,104,101, 95,115,112, 97, 99,101, 0,111, 98, 95, 99, 97, 99,104,101, 95,115,112, 97, 99,101, 0, 42, -112,111,105,110,116, 95,116,114,101,101, 0, 42,112,111,105,110,116, 95,100, 97,116, 97, 0,110,111,105,115,101, 95,115,105,122, -101, 0,110,111,105,115,101, 95,100,101,112,116,104, 0,110,111,105,115,101, 95,105,110,102,108,117,101,110, 99,101, 0,110,111, -105,115,101, 95, 98, 97,115,105,115, 0,112,100,112, 97,100, 51, 91, 51, 93, 0,110,111,105,115,101, 95,102, 97, 99, 0,115,112, -101,101,100, 95,115, 99, 97,108,101, 0, 42, 99,111, 98, 97, 0,114,101,115,111,108, 91, 51, 93, 0,105,110,116,101,114,112, 95, -116,121,112,101, 0,102,105,108,101, 95,102,111,114,109, 97,116, 0,101,120,116,101,110,100, 0,105,110,116, 95,109,117,108,116, -105,112,108,105,101,114, 0,115,116,105,108,108, 95,102,114, 97,109,101, 0,115,111,117,114, 99,101, 95,112, 97,116,104, 91, 50, - 52, 48, 93, 0, 42,100, 97,116, 97,115,101,116, 0,110,111,105,115,101,115,105,122,101, 0,116,117,114, 98,117,108, 0, 98,114, -105,103,104,116, 0, 99,111,110,116,114, 97,115,116, 0,114,102, 97, 99, 0,103,102, 97, 99, 0, 98,102, 97, 99, 0,102,105,108, -116,101,114,115,105,122,101, 0,109,103, 95, 72, 0,109,103, 95,108, 97, 99,117,110, 97,114,105,116,121, 0,109,103, 95,111, 99, -116, 97,118,101,115, 0,109,103, 95,111,102,102,115,101,116, 0,109,103, 95,103, 97,105,110, 0,100,105,115,116, 95, 97,109,111, -117,110,116, 0,110,115, 95,111,117,116,115, 99, 97,108,101, 0,118,110, 95,119, 49, 0,118,110, 95,119, 50, 0,118,110, 95,119, - 51, 0,118,110, 95,119, 52, 0,118,110, 95,109,101,120,112, 0,118,110, 95,100,105,115,116,109, 0,118,110, 95, 99,111,108,116, -121,112,101, 0,110,111,105,115,101,100,101,112,116,104, 0,110,111,105,115,101,116,121,112,101, 0,110,111,105,115,101, 98, 97, -115,105,115, 0,110,111,105,115,101, 98, 97,115,105,115, 50, 0,105,109, 97,102,108, 97,103, 0, 99,114,111,112,120,109,105,110, - 0, 99,114,111,112,121,109,105,110, 0, 99,114,111,112,120,109, 97,120, 0, 99,114,111,112,121,109, 97,120, 0,116,101,120,102, -105,108,116,101,114, 0, 97,102,109, 97,120, 0,120,114,101,112,101, 97,116, 0,121,114,101,112,101, 97,116, 0, 99,104,101, 99, -107,101,114,100,105,115,116, 0,110, 97, 98,108, 97, 0,105,117,115,101,114, 0, 42,110,111,100,101,116,114,101,101, 0, 42,112, -108,117,103,105,110, 0, 42,101,110,118, 0, 42,112,100, 0, 42,118,100, 0,117,115,101, 95,110,111,100,101,115, 0,108,111, 99, - 91, 51, 93, 0,114,111,116, 91, 51, 93, 0,109, 97,116, 91, 52, 93, 91, 52, 93, 0,109,105,110, 91, 51, 93, 0,109, 97,120, 91, - 51, 93, 0,109,111,100,101, 0,116,111,116,101,120, 0,115,104,100,119,114, 0,115,104,100,119,103, 0,115,104,100,119, 98, 0, -115,104,100,119,112, 97,100, 0,101,110,101,114,103,121, 0,100,105,115,116, 0,115,112,111,116,115,105,122,101, 0,115,112,111, -116, 98,108,101,110,100, 0,104, 97,105,110,116, 0, 97,116,116, 49, 0, 97,116,116, 50, 0, 42, 99,117,114,102, 97,108,108,111, -102,102, 0,115,104, 97,100,115,112,111,116,115,105,122,101, 0, 98,105, 97,115, 0,115,111,102,116, 0, 99,111,109,112,114,101, -115,115,116,104,114,101,115,104, 0,112, 97,100, 53, 91, 51, 93, 0, 98,117,102,115,105,122,101, 0,115, 97,109,112, 0, 98,117, -102,102,101,114,115, 0,102,105,108,116,101,114,116,121,112,101, 0, 98,117,102,102,108, 97,103, 0, 98,117,102,116,121,112,101, - 0,114, 97,121, 95,115, 97,109,112, 0,114, 97,121, 95,115, 97,109,112,121, 0,114, 97,121, 95,115, 97,109,112,122, 0,114, 97, -121, 95,115, 97,109,112, 95,116,121,112,101, 0, 97,114,101, 97, 95,115,104, 97,112,101, 0, 97,114,101, 97, 95,115,105,122,101, - 0, 97,114,101, 97, 95,115,105,122,101,121, 0, 97,114,101, 97, 95,115,105,122,101,122, 0, 97,100, 97,112,116, 95,116,104,114, -101,115,104, 0,114, 97,121, 95,115, 97,109,112, 95,109,101,116,104,111,100, 0,116,101,120, 97, 99,116, 0,115,104, 97,100,104, - 97,108,111,115,116,101,112, 0,115,117,110, 95,101,102,102,101, 99,116, 95,116,121,112,101, 0,115,107,121, 98,108,101,110,100, -116,121,112,101, 0,104,111,114,105,122,111,110, 95, 98,114,105,103,104,116,110,101,115,115, 0,115,112,114,101, 97,100, 0,115, -117,110, 95, 98,114,105,103,104,116,110,101,115,115, 0,115,117,110, 95,115,105,122,101, 0, 98, 97, 99,107,115, 99, 97,116,116, -101,114,101,100, 95,108,105,103,104,116, 0,115,117,110, 95,105,110,116,101,110,115,105,116,121, 0, 97,116,109, 95,116,117,114, - 98,105,100,105,116,121, 0, 97,116,109, 95,105,110,115, 99, 97,116,116,101,114,105,110,103, 95,102, 97, 99,116,111,114, 0, 97, -116,109, 95,101,120,116,105,110, 99,116,105,111,110, 95,102, 97, 99,116,111,114, 0, 97,116,109, 95,100,105,115,116, 97,110, 99, -101, 95,102, 97, 99,116,111,114, 0,115,107,121, 98,108,101,110,100,102, 97, 99, 0,115,107,121, 95,101,120,112,111,115,117,114, -101, 0,115,107,121, 95, 99,111,108,111,114,115,112, 97, 99,101, 0,112, 97,100, 52, 0, 89, 70, 95,110,117,109,112,104,111,116, -111,110,115, 0, 89, 70, 95,110,117,109,115,101, 97,114, 99,104, 0, 89, 70, 95,112,104,100,101,112,116,104, 0, 89, 70, 95,117, -115,101,113,109, 99, 0, 89, 70, 95, 98,117,102,115,105,122,101, 0, 89, 70, 95,112, 97,100, 0, 89, 70, 95, 99, 97,117,115,116, -105, 99, 98,108,117,114, 0, 89, 70, 95,108,116,114, 97,100,105,117,115, 0, 89, 70, 95,103,108,111,119,105,110,116, 0, 89, 70, - 95,103,108,111,119,111,102,115, 0, 89, 70, 95,103,108,111,119,116,121,112,101, 0, 89, 70, 95,112, 97,100, 50, 0, 42,109,116, -101,120, 91, 49, 56, 93, 0,112,114, 95,116,101,120,116,117,114,101, 0,112, 97,100, 91, 51, 93, 0,100,101,110,115,105,116,121, - 0,101,109,105,115,115,105,111,110, 0,115, 99, 97,116,116,101,114,105,110,103, 0,114,101,102,108,101, 99,116,105,111,110, 0, -101,109,105,115,115,105,111,110, 95, 99,111,108, 91, 51, 93, 0,116,114, 97,110,115,109,105,115,115,105,111,110, 95, 99,111,108, - 91, 51, 93, 0,114,101,102,108,101, 99,116,105,111,110, 95, 99,111,108, 91, 51, 93, 0,100,101,110,115,105,116,121, 95,115, 99, - 97,108,101, 0,100,101,112,116,104, 95, 99,117,116,111,102,102, 0, 97,115,121,109,109,101,116,114,121, 0,115,116,101,112,115, -105,122,101, 95,116,121,112,101, 0,115,104, 97,100,101,102,108, 97,103, 0,115,104, 97,100,101, 95,116,121,112,101, 0,112,114, -101, 99, 97, 99,104,101, 95,114,101,115,111,108,117,116,105,111,110, 0,115,116,101,112,115,105,122,101, 0,109,115, 95,100,105, -102,102, 0,109,115, 95,105,110,116,101,110,115,105,116,121, 0,109,115, 95,115,116,101,112,115, 0,109, 97,116,101,114,105, 97, -108, 95,116,121,112,101, 0,115,112,101, 99,114, 0,115,112,101, 99,103, 0,115,112,101, 99, 98, 0,109,105,114,114, 0,109,105, -114,103, 0,109,105,114, 98, 0, 97,109, 98,114, 0, 97,109, 98, 98, 0, 97,109, 98,103, 0, 97,109, 98, 0,101,109,105,116, 0, - 97,110,103, 0,115,112,101, 99,116,114, 97, 0,114, 97,121, 95,109,105,114,114,111,114, 0, 97,108,112,104, 97, 0,114,101,102, - 0,115,112,101, 99, 0,122,111,102,102,115, 0, 97,100,100, 0,116,114, 97,110,115,108,117, 99,101,110, 99,121, 0,118,111,108, - 0,102,114,101,115,110,101,108, 95,109,105,114, 0,102,114,101,115,110,101,108, 95,109,105,114, 95,105, 0,102,114,101,115,110, -101,108, 95,116,114, 97, 0,102,114,101,115,110,101,108, 95,116,114, 97, 95,105, 0,102,105,108,116,101,114, 0,116,120, 95,108, -105,109,105,116, 0,116,120, 95,102, 97,108,108,111,102,102, 0,114, 97,121, 95,100,101,112,116,104, 0,114, 97,121, 95,100,101, -112,116,104, 95,116,114, 97, 0,104, 97,114, 0,115,101,101,100, 49, 0,115,101,101,100, 50, 0,103,108,111,115,115, 95,109,105, -114, 0,103,108,111,115,115, 95,116,114, 97, 0,115, 97,109,112, 95,103,108,111,115,115, 95,109,105,114, 0,115, 97,109,112, 95, -103,108,111,115,115, 95,116,114, 97, 0, 97,100, 97,112,116, 95,116,104,114,101,115,104, 95,109,105,114, 0, 97,100, 97,112,116, - 95,116,104,114,101,115,104, 95,116,114, 97, 0, 97,110,105,115,111, 95,103,108,111,115,115, 95,109,105,114, 0,100,105,115,116, - 95,109,105,114, 0,102, 97,100,101,116,111, 95,109,105,114, 0,115,104, 97,100,101, 95,102,108, 97,103, 0,109,111,100,101, 95, -108, 0,102,108, 97,114,101, 99, 0,115,116, 97,114, 99, 0,108,105,110,101, 99, 0,114,105,110,103, 99, 0,104, 97,115,105,122, -101, 0,102,108, 97,114,101,115,105,122,101, 0,115,117, 98,115,105,122,101, 0,102,108, 97,114,101, 98,111,111,115,116, 0,115, -116,114, 97,110,100, 95,115,116, 97, 0,115,116,114, 97,110,100, 95,101,110,100, 0,115,116,114, 97,110,100, 95,101, 97,115,101, - 0,115,116,114, 97,110,100, 95,115,117,114,102,110,111,114, 0,115,116,114, 97,110,100, 95,109,105,110, 0,115,116,114, 97,110, -100, 95,119,105,100,116,104,102, 97,100,101, 0,115,116,114, 97,110,100, 95,117,118,110, 97,109,101, 91, 51, 50, 93, 0,115, 98, -105, 97,115, 0,108, 98,105, 97,115, 0,115,104, 97,100, 95, 97,108,112,104, 97, 0,115,101,112,116,101,120, 0,114,103, 98,115, -101,108, 0,112,114, 95,116,121,112,101, 0,112,114, 95, 98, 97, 99,107, 0,112,114, 95,108, 97,109,112, 0,109,108, 95,102,108, - 97,103, 0,100,105,102,102, 95,115,104, 97,100,101,114, 0,115,112,101, 99, 95,115,104, 97,100,101,114, 0,114,111,117,103,104, -110,101,115,115, 0,114,101,102,114, 97, 99, 0,112, 97,114, 97,109, 91, 52, 93, 0,114,109,115, 0,100, 97,114,107,110,101,115, -115, 0, 42,114, 97,109,112, 95, 99,111,108, 0, 42,114, 97,109,112, 95,115,112,101, 99, 0,114, 97,109,112,105,110, 95, 99,111, -108, 0,114, 97,109,112,105,110, 95,115,112,101, 99, 0,114, 97,109,112, 98,108,101,110,100, 95, 99,111,108, 0,114, 97,109,112, - 98,108,101,110,100, 95,115,112,101, 99, 0,114, 97,109,112, 95,115,104,111,119, 0,112, 97,100, 51, 0,114, 97,109,112,102, 97, - 99, 95, 99,111,108, 0,114, 97,109,112,102, 97, 99, 95,115,112,101, 99, 0, 42,103,114,111,117,112, 0,102,114,105, 99,116,105, -111,110, 0,102,104, 0,114,101,102,108,101, 99,116, 0,102,104,100,105,115,116, 0,120,121,102,114,105, 99,116, 0,100,121,110, - 97,109,111,100,101, 0,115,115,115, 95,114, 97,100,105,117,115, 91, 51, 93, 0,115,115,115, 95, 99,111,108, 91, 51, 93, 0,115, -115,115, 95,101,114,114,111,114, 0,115,115,115, 95,115, 99, 97,108,101, 0,115,115,115, 95,105,111,114, 0,115,115,115, 95, 99, -111,108,102, 97, 99, 0,115,115,115, 95,116,101,120,102, 97, 99, 0,115,115,115, 95,102,114,111,110,116, 0,115,115,115, 95, 98, - 97, 99,107, 0,115,115,115, 95,102,108, 97,103, 0,115,115,115, 95,112,114,101,115,101,116, 0,109, 97,112,116,111, 95,116,101, -120,116,117,114,101,100, 0,103,112,117,109, 97,116,101,114,105, 97,108, 0,110, 97,109,101, 91, 50, 53, 54, 93, 0, 42, 98, 98, - 0,105, 49, 0,106, 49, 0,107, 49, 0,105, 50, 0,106, 50, 0,107, 50, 0,115,101,108, 99,111,108, 49, 0,115,101,108, 99,111, -108, 50, 0,113,117, 97,116, 91, 52, 93, 0,101,120,112,120, 0,101,120,112,121, 0,101,120,112,122, 0,114, 97,100, 0,114, 97, -100, 50, 0,115, 0, 42,109, 97,116, 0, 42,105,109, 97,116, 0,101,108,101,109,115, 0,100,105,115,112, 0, 42,101,100,105,116, -101,108,101,109,115, 0, 42, 42,109, 97,116, 0,102,108, 97,103, 50, 0,116,111,116, 99,111,108, 0,119,105,114,101,115,105,122, -101, 0,114,101,110,100,101,114,115,105,122,101, 0,116,104,114,101,115,104, 0, 42,108, 97,115,116,101,108,101,109, 0,118,101, - 99, 91, 51, 93, 91, 51, 93, 0, 97,108,102, 97, 0,119,101,105,103,104,116, 0,104, 49, 0,104, 50, 0,102, 49, 0,102, 50, 0, -102, 51, 0,104,105,100,101, 0,118,101, 99, 91, 52, 93, 0,109, 97,116, 95,110,114, 0,112,110,116,115,117, 0,112,110,116,115, -118, 0,114,101,115,111,108,117, 0,114,101,115,111,108,118, 0,111,114,100,101,114,117, 0,111,114,100,101,114,118, 0,102,108, - 97,103,117, 0,102,108, 97,103,118, 0, 42,107,110,111,116,115,117, 0, 42,107,110,111,116,115,118, 0,116,105,108,116, 95,105, -110,116,101,114,112, 0,114, 97,100,105,117,115, 95,105,110,116,101,114,112, 0, 99,104, 97,114,105,100,120, 0,107,101,114,110, - 0,104, 0,110,117,114, 98, 0, 42,101,100,105,116,110,117,114, 98, 0, 42, 98,101,118,111, 98,106, 0, 42,116, 97,112,101,114, -111, 98,106, 0, 42,116,101,120,116,111,110, 99,117,114,118,101, 0, 42,112, 97,116,104, 0, 42,107,101,121, 0, 98,101,118, 0, -100,114, 97,119,102,108, 97,103, 0,116,119,105,115,116, 95,109,111,100,101, 0,112, 97,100, 91, 50, 93, 0,116,119,105,115,116, - 95,115,109,111,111,116,104, 0,112, 97,116,104,108,101,110, 0, 98,101,118,114,101,115,111,108, 0,119,105,100,116,104, 0,101, -120,116, 49, 0,101,120,116, 50, 0,114,101,115,111,108,117, 95,114,101,110, 0,114,101,115,111,108,118, 95,114,101,110, 0, 97, - 99,116,110,117, 0, 42,108, 97,115,116,115,101,108, 98,112, 0,115,112, 97, 99,101,109,111,100,101, 0,115,112, 97, 99,105,110, -103, 0,108,105,110,101,100,105,115,116, 0,115,104,101, 97,114, 0,102,115,105,122,101, 0,119,111,114,100,115,112, 97, 99,101, - 0,117,108,112,111,115, 0,117,108,104,101,105,103,104,116, 0,120,111,102, 0,121,111,102, 0,108,105,110,101,119,105,100,116, -104, 0, 42,115,116,114, 0, 42,115,101,108, 98,111,120,101,115, 0, 42,101,100,105,116,102,111,110,116, 0,102, 97,109,105,108, -121, 91, 50, 52, 93, 0, 42,118,102,111,110,116, 0, 42,118,102,111,110,116, 98, 0, 42,118,102,111,110,116,105, 0, 42,118,102, -111,110,116, 98,105, 0,115,101,112, 99,104, 97,114, 0, 99,116,105,109,101, 0,116,111,116, 98,111,120, 0, 97, 99,116, 98,111, -120, 0, 42,116, 98, 0,115,101,108,115,116, 97,114,116, 0,115,101,108,101,110,100, 0, 42,115,116,114,105,110,102,111, 0, 99, -117,114,105,110,102,111, 0,101,102,102,101, 99,116, 0, 42,109,102, 97, 99,101, 0, 42,109,116,102, 97, 99,101, 0, 42,116,102, - 97, 99,101, 0, 42,109,118,101,114,116, 0, 42,109,101,100,103,101, 0, 42,100,118,101,114,116, 0, 42,109, 99,111,108, 0, 42, -109,115,116,105, 99,107,121, 0, 42,116,101,120, 99,111,109,101,115,104, 0, 42,109,115,101,108,101, 99,116, 0, 42,101,100,105, -116, 95,109,101,115,104, 0,118,100, 97,116, 97, 0,101,100, 97,116, 97, 0,102,100, 97,116, 97, 0,116,111,116,101,100,103,101, - 0,116,111,116,102, 97, 99,101, 0,116,111,116,115,101,108,101, 99,116, 0, 97, 99,116, 95,102, 97, 99,101, 0,101,100,105,116, -102,108, 97,103, 0, 99,117, 98,101,109, 97,112,115,105,122,101, 0,115,109,111,111,116,104,114,101,115,104, 0,115,117, 98,100, -105,118, 0,115,117, 98,100,105,118,114, 0,115,117, 98,115,117,114,102,116,121,112,101, 0, 42,109,114, 0, 42,112,118, 0, 42, -116,112, 97,103,101, 0,117,118, 91, 52, 93, 91, 50, 93, 0, 99,111,108, 91, 52, 93, 0,116,114, 97,110,115,112, 0,116,105,108, -101, 0,117,110,119,114, 97,112, 0,118, 49, 0,118, 50, 0,118, 51, 0,118, 52, 0,101,100, 99,111,100,101, 0, 99,114,101, 97, -115,101, 0, 98,119,101,105,103,104,116, 0,100,101,102, 95,110,114, 0, 42,100,119, 0,116,111,116,119,101,105,103,104,116, 0, - 99,111, 91, 51, 93, 0,110,111, 91, 51, 93, 0,117,118, 91, 50, 93, 0, 99,111, 91, 50, 93, 0,105,110,100,101,120, 0,102, 0, -105, 0,115, 91, 50, 53, 54, 93, 0,116,111,116,100,105,115,112, 0, 40, 42,100,105,115,112,115, 41, 40, 41, 0,118, 91, 52, 93, - 0,109,105,100, 0,118, 91, 50, 93, 0, 42,102, 97, 99,101,115, 0, 42, 99,111,108,102, 97, 99,101,115, 0, 42,101,100,103,101, -115, 0, 42,118,101,114,116,115, 0,108,101,118,101,108,115, 0,108,101,118,101,108, 95, 99,111,117,110,116, 0, 99,117,114,114, -101,110,116, 0,110,101,119,108,118,108, 0,101,100,103,101,108,118,108, 0,112,105,110,108,118,108, 0,114,101,110,100,101,114, -108,118,108, 0,117,115,101, 95, 99,111,108, 0, 42,101,100,103,101, 95,102,108, 97,103,115, 0, 42,101,100,103,101, 95, 99,114, -101, 97,115,101,115, 0, 42,118,101,114,116, 95,109, 97,112, 0, 42,101,100,103,101, 95,109, 97,112, 0, 42,111,108,100, 95,102, - 97, 99,101,115, 0, 42,111,108,100, 95,101,100,103,101,115, 0, 42,101,114,114,111,114, 0,109,111,100,105,102,105,101,114, 0, -115,117, 98,100,105,118, 84,121,112,101, 0,114,101,110,100,101,114, 76,101,118,101,108,115, 0, 42,101,109, 67, 97, 99,104,101, - 0, 42,109, 67, 97, 99,104,101, 0,100,101,102, 97,120,105,115, 0,112, 97,100, 91, 54, 93, 0,108,101,110,103,116,104, 0,114, - 97,110,100,111,109,105,122,101, 0,115,101,101,100, 0, 42,111, 98, 95, 97,114,109, 0, 42,115,116, 97,114,116, 95, 99, 97,112, - 0, 42,101,110,100, 95, 99, 97,112, 0, 42, 99,117,114,118,101, 95,111, 98, 0, 42,111,102,102,115,101,116, 95,111, 98, 0,111, -102,102,115,101,116, 91, 51, 93, 0,115, 99, 97,108,101, 91, 51, 93, 0,109,101,114,103,101, 95,100,105,115,116, 0,102,105,116, - 95,116,121,112,101, 0,111,102,102,115,101,116, 95,116,121,112,101, 0, 99,111,117,110,116, 0, 97,120,105,115, 0,116,111,108, -101,114, 97,110, 99,101, 0, 42,109,105,114,114,111,114, 95,111, 98, 0,115,112,108,105,116, 95, 97,110,103,108,101, 0,118, 97, -108,117,101, 0,114,101,115, 0,118, 97,108, 95,102,108, 97,103,115, 0,108,105,109, 95,102,108, 97,103,115, 0,101, 95,102,108, - 97,103,115, 0, 98,101,118,101,108, 95, 97,110,103,108,101, 0,100,101,102,103,114,112, 95,110, 97,109,101, 91, 51, 50, 93, 0, - 42,100,111,109, 97,105,110, 0, 42,102,108,111,119, 0, 42, 99,111,108,108, 0,116,105,109,101, 0, 42,116,101,120,116,117,114, -101, 0,115,116,114,101,110,103,116,104, 0,100,105,114,101, 99,116,105,111,110, 0,109,105,100,108,101,118,101,108, 0,116,101, -120,109, 97,112,112,105,110,103, 0, 42,109, 97,112, 95,111, 98,106,101, 99,116, 0,117,118,108, 97,121,101,114, 95,110, 97,109, -101, 91, 51, 50, 93, 0,117,118,108, 97,121,101,114, 95,116,109,112, 0, 42,112,114,111,106,101, 99,116,111,114,115, 91, 49, 48, - 93, 0, 42,105,109, 97,103,101, 0,110,117,109, 95,112,114,111,106,101, 99,116,111,114,115, 0, 97,115,112,101, 99,116,120, 0, - 97,115,112,101, 99,116,121, 0,112,101,114, 99,101,110,116, 0,102, 97, 99,101, 67,111,117,110,116, 0,102, 97, 99, 0,114,101, -112,101, 97,116, 0, 42,111, 98,106,101, 99,116, 99,101,110,116,101,114, 0,115,116, 97,114,116,120, 0,115,116, 97,114,116,121, - 0,104,101,105,103,104,116, 0,110, 97,114,114,111,119, 0,115,112,101,101,100, 0,100, 97,109,112, 0,102, 97,108,108,111,102, -102, 0,116,105,109,101,111,102,102,115, 0,108,105,102,101,116,105,109,101, 0,100,101,102,111,114,109,102,108, 97,103, 0,109, -117,108,116,105, 0, 42,112,114,101,118, 67,111,115, 0,115,117, 98,116, 97,114,103,101,116, 91, 51, 50, 93, 0,112, 97,114,101, -110,116,105,110,118, 91, 52, 93, 91, 52, 93, 0, 99,101,110,116, 91, 51, 93, 0, 42,105,110,100,101,120, 97,114, 0,116,111,116, -105,110,100,101,120, 0,102,111,114, 99,101, 0, 42, 99,108,111,116,104, 79, 98,106,101, 99,116, 0, 42,115,105,109, 95,112, 97, -114,109,115, 0, 42, 99,111,108,108, 95,112, 97,114,109,115, 0, 42,112,111,105,110,116, 95, 99, 97, 99,104,101, 0,112,116, 99, - 97, 99,104,101,115, 0, 42,120, 0, 42,120,110,101,119, 0, 42,120,111,108,100, 0, 42, 99,117,114,114,101,110,116, 95,120,110, -101,119, 0, 42, 99,117,114,114,101,110,116, 95,120, 0, 42, 99,117,114,114,101,110,116, 95,118, 0, 42,109,102, 97, 99,101,115, - 0,110,117,109,118,101,114,116,115, 0,110,117,109,102, 97, 99,101,115, 0, 42, 98,118,104,116,114,101,101, 0, 42,118, 0, 42, -100,109, 0, 99,102,114, 97, 0,111,112,101,114, 97,116,105,111,110, 0,118,101,114,116,101,120, 0,116,111,116,105,110,102,108, -117,101,110, 99,101, 0,103,114,105,100,115,105,122,101, 0, 42, 98,105,110,100,119,101,105,103,104,116,115, 0, 42, 98,105,110, -100, 99,111,115, 0,116,111,116, 99, 97,103,101,118,101,114,116, 0, 42,100,121,110,103,114,105,100, 0, 42,100,121,110,105,110, -102,108,117,101,110, 99,101,115, 0, 42,100,121,110,118,101,114,116,115, 0, 42,112, 97,100, 50, 0,100,121,110,103,114,105,100, -115,105,122,101, 0,100,121,110, 99,101,108,108,109,105,110, 91, 51, 93, 0,100,121,110, 99,101,108,108,119,105,100,116,104, 0, - 98,105,110,100,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 40, 42, 98,105,110,100,102,117,110, 99, 41, 40, 41, 0, 42,112,115,121, -115, 0,116,111,116,100,109,118,101,114,116, 0,116,111,116,100,109,101,100,103,101, 0,116,111,116,100,109,102, 97, 99,101, 0, -112,111,115,105,116,105,111,110, 0,114, 97,110,100,111,109, 95,112,111,115,105,116,105,111,110, 0, 42,102, 97, 99,101,112, 97, - 0,118,103,114,111,117,112, 0,112,114,111,116,101, 99,116, 0, 42,117,110,100,111, 95,118,101,114,116,115, 0,117,110,100,111, - 95,118,101,114,116,115, 95,116,111,116, 0,117,110,100,111, 95,115,105,103,110, 97,108, 0,108,118,108, 0,116,111,116,108,118, -108, 0,115,105,109,112,108,101, 0, 42,102,115,115, 0, 42,116, 97,114,103,101,116, 0, 42, 97,117,120, 84, 97,114,103,101,116, - 0,118,103,114,111,117,112, 95,110, 97,109,101, 91, 51, 50, 93, 0,107,101,101,112, 68,105,115,116, 0,115,104,114,105,110,107, - 84,121,112,101, 0,115,104,114,105,110,107, 79,112,116,115, 0,112,114,111,106, 65,120,105,115, 0,115,117, 98,115,117,114,102, - 76,101,118,101,108,115, 0, 42,111,114,105,103,105,110, 0,102, 97, 99,116,111,114, 0,108,105,109,105,116, 91, 50, 93, 0,111, -114,105,103,105,110, 79,112,116,115, 0,112,110,116,115,119, 0,111,112,110,116,115,117, 0,111,112,110,116,115,118, 0,111,112, -110,116,115,119, 0,116,121,112,101,117, 0,116,121,112,101,118, 0,116,121,112,101,119, 0,102,117, 0,102,118, 0,102,119, 0, -100,117, 0,100,118, 0,100,119, 0, 42,100,101,102, 0, 42,108, 97,116,116,105, 99,101,100, 97,116, 97, 0,108, 97,116,109, 97, -116, 91, 52, 93, 91, 52, 93, 0, 42,101,100,105,116,108, 97,116,116, 0,118,101, 99, 91, 56, 93, 91, 51, 93, 0, 42,115, 99,117, -108,112,116, 0,112, 97,114,116,121,112,101, 0,112, 97,114, 49, 0,112, 97,114, 50, 0,112, 97,114, 51, 0,112, 97,114,115,117, - 98,115,116,114, 91, 51, 50, 93, 0, 42,116,114, 97, 99,107, 0, 42,112,114,111,120,121, 0, 42,112,114,111,120,121, 95,103,114, -111,117,112, 0, 42,112,114,111,120,121, 95,102,114,111,109, 0, 42, 97, 99,116,105,111,110, 0, 42,112,111,115,101,108,105, 98, - 0, 42,112,111,115,101, 0, 42,103,112,100, 0, 99,111,110,115,116,114, 97,105,110,116, 67,104, 97,110,110,101,108,115, 0,100, -101,102, 98, 97,115,101, 0,109,111,100,105,102,105,101,114,115, 0,114,101,115,116,111,114,101, 95,109,111,100,101, 0, 42,109, - 97,116, 98,105,116,115, 0, 97, 99,116, 99,111,108, 0,100,108,111, 99, 91, 51, 93, 0,111,114,105,103, 91, 51, 93, 0,100,115, -105,122,101, 91, 51, 93, 0,100,114,111,116, 91, 51, 93, 0,100,113,117, 97,116, 91, 52, 93, 0,114,111,116, 65,120,105,115, 91, - 51, 93, 0,100,114,111,116, 65,120,105,115, 91, 51, 93, 0,114,111,116, 65,110,103,108,101, 0,100,114,111,116, 65,110,103,108, -101, 0,111, 98,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 99,111,110,115,116,105,110,118, 91, 52, 93, 91, 52, 93, 0,108, 97,121, - 0, 99,111,108, 98,105,116,115, 0,116,114, 97,110,115,102,108, 97,103, 0,112,114,111,116,101, 99,116,102,108, 97,103, 0,116, -114, 97, 99,107,102,108, 97,103, 0,117,112,102,108, 97,103, 0,110,108, 97,102,108, 97,103, 0,105,112,111,102,108, 97,103, 0, -105,112,111,119,105,110, 0,115, 99, 97,102,108, 97,103, 0,115, 99, 97,118,105,115,102,108, 97,103, 0, 98,111,117,110,100,116, -121,112,101, 0,100,117,112,111,110, 0,100,117,112,111,102,102, 0,100,117,112,115,116, 97, 0,100,117,112,101,110,100, 0,115, -102, 0,109, 97,115,115, 0,100, 97,109,112,105,110,103, 0,105,110,101,114,116,105, 97, 0,102,111,114,109,102, 97, 99,116,111, -114, 0,114,100, 97,109,112,105,110,103, 0,109, 97,114,103,105,110, 0,109, 97,120, 95,118,101,108, 0,109,105,110, 95,118,101, -108, 0,109, 95, 99,111,110,116, 97, 99,116, 80,114,111, 99,101,115,115,105,110,103, 84,104,114,101,115,104,111,108,100, 0,114, -111,116,109,111,100,101, 0,100,116, 0,100,116,120, 0,101,109,112,116,121, 95,100,114, 97,119,116,121,112,101, 0,112, 97,100, - 49, 91, 51, 93, 0,101,109,112,116,121, 95,100,114, 97,119,115,105,122,101, 0,100,117,112,102, 97, 99,101,115, 99, 97, 0,112, -114,111,112, 0,115,101,110,115,111,114,115, 0, 99,111,110,116,114,111,108,108,101,114,115, 0, 97, 99,116,117, 97,116,111,114, -115, 0, 98, 98,115,105,122,101, 91, 51, 93, 0, 97, 99,116,100,101,102, 0,103, 97,109,101,102,108, 97,103, 0,103, 97,109,101, -102,108, 97,103, 50, 0, 42, 98,115,111,102,116, 0,115,111,102,116,102,108, 97,103, 0, 97,110,105,115,111,116,114,111,112,105, - 99, 70,114,105, 99,116,105,111,110, 91, 51, 93, 0, 99,111,110,115,116,114, 97,105,110,116,115, 0,110,108, 97,115,116,114,105, -112,115, 0,104,111,111,107,115, 0,112, 97,114,116,105, 99,108,101,115,121,115,116,101,109, 0, 42,115,111,102,116, 0, 42,100, -117,112, 95,103,114,111,117,112, 0,102,108,117,105,100,115,105,109, 70,108, 97,103, 0,114,101,115,116,114,105, 99,116,102,108, - 97,103, 0,115,104, 97,112,101,110,114, 0,115,104, 97,112,101,102,108, 97,103, 0,114,101, 99, 97,108, 99,111, 0, 98,111,100, -121, 95,116,121,112,101, 0, 42,102,108,117,105,100,115,105,109, 83,101,116,116,105,110,103,115, 0, 42,100,101,114,105,118,101, -100, 68,101,102,111,114,109, 0, 42,100,101,114,105,118,101,100, 70,105,110, 97,108, 0,108, 97,115,116, 68, 97,116, 97, 77, 97, -115,107, 0,115,116, 97,116,101, 0,105,110,105,116, 95,115,116, 97,116,101, 0,103,112,117,108, 97,109,112, 0,112, 99, 95,105, -100,115, 0, 42,100,117,112,108,105,108,105,115,116, 0, 99,117,114,105,110,100,101,120, 0, 97, 99,116,105,118,101, 0,111,114, -105,103,108, 97,121, 0,110,111, 95,100,114, 97,119, 0, 97,110,105,109, 97,116,101,100, 0,111,109, 97,116, 91, 52, 93, 91, 52, - 93, 0,111,114, 99,111, 91, 51, 93, 0,100,101,102,108,101, 99,116, 0,102,111,114, 99,101,102,105,101,108,100, 0,115,104, 97, -112,101, 0,116,101,120, 95,109,111,100,101, 0,107,105,110,107, 0,107,105,110,107, 95, 97,120,105,115, 0,122,100,105,114, 0, -102, 95,115,116,114,101,110,103,116,104, 0,102, 95,100, 97,109,112, 0,102, 95,102,108,111,119, 0,102, 95,115,105,122,101, 0, -102, 95,112,111,119,101,114, 0,109, 97,120,100,105,115,116, 0,109,105,110,100,105,115,116, 0,102, 95,112,111,119,101,114, 95, -114, 0,109, 97,120,114, 97,100, 0,109,105,110,114, 97,100, 0,112,100,101,102, 95,100, 97,109,112, 0,112,100,101,102, 95,114, -100, 97,109,112, 0,112,100,101,102, 95,112,101,114,109, 0,112,100,101,102, 95,102,114,105, 99,116, 0,112,100,101,102, 95,114, -102,114,105, 99,116, 0, 97, 98,115,111,114,112,116,105,111,110, 0,112,100,101,102, 95,115, 98,100, 97,109,112, 0,112,100,101, -102, 95,115, 98,105,102,116, 0,112,100,101,102, 95,115, 98,111,102,116, 0, 99,108,117,109,112, 95,102, 97, 99, 0, 99,108,117, -109,112, 95,112,111,119, 0,107,105,110,107, 95,102,114,101,113, 0,107,105,110,107, 95,115,104, 97,112,101, 0,107,105,110,107, - 95, 97,109,112, 0,102,114,101,101, 95,101,110,100, 0,116,101,120, 95,110, 97, 98,108, 97, 0, 42,114,110,103, 0,102, 95,110, -111,105,115,101, 0,119,101,105,103,104,116, 91, 49, 51, 93, 0,103,108,111, 98, 97,108, 95,103,114, 97,118,105,116,121, 0,114, -116, 91, 51, 93, 0,102,114, 97,109,101, 0,116,111,116,112,111,105,110,116, 0,100, 97,116, 97, 95,116,121,112,101,115, 0, 42, -105,110,100,101,120, 95, 97,114,114, 97,121, 0, 42,100, 97,116, 97, 91, 56, 93, 0, 42, 99,117,114, 91, 56, 93, 0,115,116,101, -112, 0,115,105,109,102,114, 97,109,101, 0,115,116, 97,114,116,102,114, 97,109,101, 0,101,110,100,102,114, 97,109,101, 0,101, -100,105,116,102,114, 97,109,101, 0,108, 97,115,116, 95,101,120, 97, 99,116, 0,110, 97,109,101, 91, 54, 52, 93, 0,112,114,101, -118, 95,110, 97,109,101, 91, 54, 52, 93, 0,105,110,102,111, 91, 54, 52, 93, 0,112, 97,116,104, 91, 50, 52, 48, 93, 0,109,101, -109, 95, 99, 97, 99,104,101, 0, 42,101,100,105,116, 0, 40, 42,102,114,101,101, 95,101,100,105,116, 41, 40, 41, 0,108,105,110, - 83,116,105,102,102, 0, 97,110,103, 83,116,105,102,102, 0,118,111,108,117,109,101, 0,118,105,116,101,114, 97,116,105,111,110, -115, 0,112,105,116,101,114, 97,116,105,111,110,115, 0,100,105,116,101,114, 97,116,105,111,110,115, 0, 99,105,116,101,114, 97, -116,105,111,110,115, 0,107, 83, 82, 72, 82, 95, 67, 76, 0,107, 83, 75, 72, 82, 95, 67, 76, 0,107, 83, 83, 72, 82, 95, 67, 76, - 0,107, 83, 82, 95, 83, 80, 76, 84, 95, 67, 76, 0,107, 83, 75, 95, 83, 80, 76, 84, 95, 67, 76, 0,107, 83, 83, 95, 83, 80, 76, - 84, 95, 67, 76, 0,107, 86, 67, 70, 0,107, 68, 80, 0,107, 68, 71, 0,107, 76, 70, 0,107, 80, 82, 0,107, 86, 67, 0,107, 68, - 70, 0,107, 77, 84, 0,107, 67, 72, 82, 0,107, 75, 72, 82, 0,107, 83, 72, 82, 0,107, 65, 72, 82, 0, 99,111,108,108,105,115, -105,111,110,102,108, 97,103,115, 0,110,117,109, 99,108,117,115,116,101,114,105,116,101,114, 97,116,105,111,110,115, 0,119,101, -108,100,105,110,103, 0,116,111,116,115,112,114,105,110,103, 0, 42, 98,112,111,105,110,116, 0, 42, 98,115,112,114,105,110,103, - 0,109,115,103, 95,108,111, 99,107, 0,109,115,103, 95,118, 97,108,117,101, 0,110,111,100,101,109, 97,115,115, 0,110, 97,109, -101,100, 86, 71, 95, 77, 97,115,115, 91, 51, 50, 93, 0,103,114, 97,118, 0,109,101,100,105, 97,102,114,105, 99,116, 0,114,107, -108,105,109,105,116, 0,112,104,121,115,105, 99,115, 95,115,112,101,101,100, 0,103,111, 97,108,115,112,114,105,110,103, 0,103, -111, 97,108,102,114,105, 99,116, 0,109,105,110,103,111, 97,108, 0,109, 97,120,103,111, 97,108, 0,100,101,102,103,111, 97,108, - 0,118,101,114,116,103,114,111,117,112, 0,110, 97,109,101,100, 86, 71, 95, 83,111,102,116,103,111, 97,108, 91, 51, 50, 93, 0, -102,117,122,122,121,110,101,115,115, 0,105,110,115,112,114,105,110,103, 0,105,110,102,114,105, 99,116, 0,110, 97,109,101,100, - 86, 71, 95, 83,112,114,105,110,103, 95, 75, 91, 51, 50, 93, 0,101,102,114, 97, 0,105,110,116,101,114,118, 97,108, 0,108,111, - 99, 97,108, 0,115,111,108,118,101,114,102,108, 97,103,115, 0, 42, 42,107,101,121,115, 0,116,111,116,112,111,105,110,116,107, -101,121, 0,115,101, 99,111,110,100,115,112,114,105,110,103, 0, 99,111,108, 98, 97,108,108, 0, 98, 97,108,108,100, 97,109,112, - 0, 98, 97,108,108,115,116,105,102,102, 0,115, 98, 99, 95,109,111,100,101, 0, 97,101,114,111,101,100,103,101, 0,109,105,110, -108,111,111,112,115, 0,109, 97,120,108,111,111,112,115, 0, 99,104,111,107,101, 0,115,111,108,118,101,114, 95, 73, 68, 0,112, -108, 97,115,116,105, 99, 0,115,112,114,105,110,103,112,114,101,108,111, 97,100, 0, 42,115, 99,114, 97,116, 99,104, 0,115,104, -101, 97,114,115,116,105,102,102, 0,105,110,112,117,115,104, 0, 42,112,111,105,110,116, 99, 97, 99,104,101, 0, 42,101,102,102, -101, 99,116,111,114, 95,119,101,105,103,104,116,115, 0,108, 99,111,109, 91, 51, 93, 0,108,114,111,116, 91, 51, 93, 91, 51, 93, - 0,108,115, 99, 97,108,101, 91, 51, 93, 91, 51, 93, 0,112, 97,100, 52, 91, 52, 93, 0, 42,102,109,100, 0,115,104,111,119, 95, - 97,100,118, 97,110, 99,101,100,111,112,116,105,111,110,115, 0,114,101,115,111,108,117,116,105,111,110,120,121,122, 0,112,114, -101,118,105,101,119,114,101,115,120,121,122, 0,114,101, 97,108,115,105,122,101, 0,103,117,105, 68,105,115,112,108, 97,121, 77, -111,100,101, 0,114,101,110,100,101,114, 68,105,115,112,108, 97,121, 77,111,100,101, 0,118,105,115, 99,111,115,105,116,121, 86, - 97,108,117,101, 0,118,105,115, 99,111,115,105,116,121, 77,111,100,101, 0,118,105,115, 99,111,115,105,116,121, 69,120,112,111, -110,101,110,116, 0,103,114, 97,118,120, 0,103,114, 97,118,121, 0,103,114, 97,118,122, 0, 97,110,105,109, 83,116, 97,114,116, - 0, 97,110,105,109, 69,110,100, 0,103,115,116, 97,114, 0,109, 97,120, 82,101,102,105,110,101, 0,105,110,105, 86,101,108,120, - 0,105,110,105, 86,101,108,121, 0,105,110,105, 86,101,108,122, 0, 42,111,114,103, 77,101,115,104, 0, 42,109,101,115,104, 83, -117,114,102, 97, 99,101, 0, 42,109,101,115,104, 66, 66, 0,115,117,114,102,100, 97,116, 97, 80, 97,116,104, 91, 50, 52, 48, 93, - 0, 98, 98, 83,116, 97,114,116, 91, 51, 93, 0, 98, 98, 83,105,122,101, 91, 51, 93, 0,116,121,112,101, 70,108, 97,103,115, 0, -100,111,109, 97,105,110, 78,111,118,101, 99,103,101,110, 0,118,111,108,117,109,101, 73,110,105,116, 84,121,112,101, 0,112, 97, -114,116, 83,108,105,112, 86, 97,108,117,101, 0,103,101,110,101,114, 97,116,101, 84,114, 97, 99,101,114,115, 0,103,101,110,101, -114, 97,116,101, 80, 97,114,116,105, 99,108,101,115, 0,115,117,114,102, 97, 99,101, 83,109,111,111,116,104,105,110,103, 0,115, -117,114,102, 97, 99,101, 83,117, 98,100,105,118,115, 0,112, 97,114,116,105, 99,108,101, 73,110,102, 83,105,122,101, 0,112, 97, -114,116,105, 99,108,101, 73,110,102, 65,108,112,104, 97, 0,102, 97,114, 70,105,101,108,100, 83,105,122,101, 0, 42,109,101,115, -104, 83,117,114,102, 78,111,114,109, 97,108,115, 0, 99,112,115, 84,105,109,101, 83,116, 97,114,116, 0, 99,112,115, 84,105,109, -101, 69,110,100, 0, 99,112,115, 81,117, 97,108,105,116,121, 0, 97,116,116,114, 97, 99,116,102,111,114, 99,101, 83,116,114,101, -110,103,116,104, 0, 97,116,116,114, 97, 99,116,102,111,114, 99,101, 82, 97,100,105,117,115, 0,118,101,108,111, 99,105,116,121, -102,111,114, 99,101, 83,116,114,101,110,103,116,104, 0,118,101,108,111, 99,105,116,121,102,111,114, 99,101, 82, 97,100,105,117, -115, 0,108, 97,115,116,103,111,111,100,102,114, 97,109,101, 0,109,105,115,116,121,112,101, 0,104,111,114,114, 0,104,111,114, -103, 0,104,111,114, 98, 0,104,111,114,107, 0,122,101,110,114, 0,122,101,110,103, 0,122,101,110, 98, 0,122,101,110,107, 0, - 97,109, 98,107, 0,102, 97,115,116, 99,111,108, 0,101,120,112,111,115,117,114,101, 0,101,120,112, 0,114, 97,110,103,101, 0, -108,105,110,102, 97, 99, 0,108,111,103,102, 97, 99, 0,103,114, 97,118,105,116,121, 0, 97, 99,116,105,118,105,116,121, 66,111, -120, 82, 97,100,105,117,115, 0,115,107,121,116,121,112,101, 0,111, 99, 99,108,117,115,105,111,110, 82,101,115, 0,112,104,121, -115,105, 99,115, 69,110,103,105,110,101, 0,116,105, 99,114, 97,116,101, 0,109, 97,120,108,111,103,105, 99,115,116,101,112, 0, -112,104,121,115,117, 98,115,116,101,112, 0,109, 97,120,112,104,121,115,116,101,112, 0,109,105,115,105, 0,109,105,115,116,115, -116, 97, 0,109,105,115,116,100,105,115,116, 0,109,105,115,116,104,105, 0,115,116, 97,114,114, 0,115,116, 97,114,103, 0,115, -116, 97,114, 98, 0,115,116, 97,114,107, 0,115,116, 97,114,115,105,122,101, 0,115,116, 97,114,109,105,110,100,105,115,116, 0, -115,116, 97,114,100,105,115,116, 0,115,116, 97,114, 99,111,108,110,111,105,115,101, 0,100,111,102,115,116, 97, 0,100,111,102, -101,110,100, 0,100,111,102,109,105,110, 0,100,111,102,109, 97,120, 0, 97,111,100,105,115,116, 0, 97,111,100,105,115,116,102, - 97, 99, 0, 97,111,101,110,101,114,103,121, 0, 97,111, 98,105, 97,115, 0, 97,111,109,111,100,101, 0, 97,111,115, 97,109,112, - 0, 97,111,109,105,120, 0, 97,111, 99,111,108,111,114, 0, 97,111, 95, 97,100, 97,112,116, 95,116,104,114,101,115,104, 0, 97, -111, 95, 97,100, 97,112,116, 95,115,112,101,101,100, 95,102, 97, 99, 0, 97,111, 95, 97,112,112,114,111,120, 95,101,114,114,111, -114, 0, 97,111, 95, 97,112,112,114,111,120, 95, 99,111,114,114,101, 99,116,105,111,110, 0, 97,111, 95,105,110,100,105,114,101, - 99,116, 95,101,110,101,114,103,121, 0, 97,111, 95,105,110,100,105,114,101, 99,116, 95, 98,111,117,110, 99,101,115, 0, 97,111, - 95,112, 97,100, 0, 97,111, 95,115, 97,109,112, 95,109,101,116,104,111,100, 0, 97,111, 95,103, 97,116,104,101,114, 95,109,101, -116,104,111,100, 0, 97,111, 95, 97,112,112,114,111,120, 95,112, 97,115,115,101,115, 0, 42, 97,111,115,112,104,101,114,101, 0, - 42, 97,111,116, 97, 98,108,101,115, 0,115,101,108, 99,111,108, 0,115,120, 0,115,121, 0, 42,108,112, 70,111,114,109, 97,116, - 0, 42,108,112, 80, 97,114,109,115, 0, 99, 98, 70,111,114,109, 97,116, 0, 99, 98, 80, 97,114,109,115, 0,102, 99, 99, 84,121, -112,101, 0,102, 99, 99, 72, 97,110,100,108,101,114, 0,100,119, 75,101,121, 70,114, 97,109,101, 69,118,101,114,121, 0,100,119, - 81,117, 97,108,105,116,121, 0,100,119, 66,121,116,101,115, 80,101,114, 83,101, 99,111,110,100, 0,100,119, 70,108, 97,103,115, - 0,100,119, 73,110,116,101,114,108,101, 97,118,101, 69,118,101,114,121, 0, 97,118,105, 99,111,100,101, 99,110, 97,109,101, 91, - 49, 50, 56, 93, 0, 42, 99,100, 80, 97,114,109,115, 0, 42,112, 97,100, 0, 99,100, 83,105,122,101, 0,113,116, 99,111,100,101, - 99,110, 97,109,101, 91, 49, 50, 56, 93, 0, 99,111,100,101, 99, 84,121,112,101, 0, 99,111,100,101, 99, 83,112, 97,116,105, 97, -108, 81,117, 97,108,105,116,121, 0, 99,111,100,101, 99, 0, 99,111,100,101, 99, 70,108, 97,103,115, 0, 99,111,108,111,114, 68, -101,112,116,104, 0, 99,111,100,101, 99, 84,101,109,112,111,114, 97,108, 81,117, 97,108,105,116,121, 0,109,105,110, 83,112, 97, -116,105, 97,108, 81,117, 97,108,105,116,121, 0,109,105,110, 84,101,109,112,111,114, 97,108, 81,117, 97,108,105,116,121, 0,107, -101,121, 70,114, 97,109,101, 82, 97,116,101, 0, 98,105,116, 82, 97,116,101, 0, 97,117,100,105,111, 95, 99,111,100,101, 99, 0, -118,105,100,101,111, 95, 98,105,116,114, 97,116,101, 0, 97,117,100,105,111, 95, 98,105,116,114, 97,116,101, 0, 97,117,100,105, -111, 95,109,105,120,114, 97,116,101, 0, 97,117,100,105,111, 95,118,111,108,117,109,101, 0,103,111,112, 95,115,105,122,101, 0, -114, 99, 95,109,105,110, 95,114, 97,116,101, 0,114, 99, 95,109, 97,120, 95,114, 97,116,101, 0,114, 99, 95, 98,117,102,102,101, -114, 95,115,105,122,101, 0,109,117,120, 95,112, 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, 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,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,114,116, 50, 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,119,105,110,112,111,115, 0,112,108, 97,110,101,115, 0,105,109,116,121, -112,101, 0,115,117, 98,105,109,116,121,112,101, 0,113,117, 97,108,105,116,121, 0,100,105,115,112,108, 97,121,109,111,100,101, - 0,114,112, 97,100, 49, 0,114,112, 97,100, 50, 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,114,101,110,100,101,114,101, -114, 0,111, 99,114,101,115, 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,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, 71, 73,113,117, 97,108,105,116,121, 0, 71, 73, 99, 97, 99, -104,101, 0, 71, 73,109,101,116,104,111,100, 0, 71, 73,112,104,111,116,111,110,115, 0, 71, 73,100,105,114,101, 99,116, 0, 89, - 70, 95, 65, 65, 0, 89, 70,101,120,112,111,114,116,120,109,108, 0, 89, 70, 95,110,111, 98,117,109,112, 0, 89, 70, 95, 99,108, - 97,109,112,114,103, 98, 0,121,102,112, 97,100, 49, 0, 71, 73,100,101,112,116,104, 0, 71, 73, 99, 97,117,115,100,101,112,116, -104, 0, 71, 73,112,105,120,101,108,115,112,101,114,115, 97,109,112,108,101, 0, 71, 73,112,104,111,116,111,110, 99,111,117,110, -116, 0, 71, 73,109,105,120,112,104,111,116,111,110,115, 0, 71, 73,112,104,111,116,111,110,114, 97,100,105,117,115, 0, 89, 70, - 95,114, 97,121,100,101,112,116,104, 0, 89, 70, 95, 65, 65,112, 97,115,115,101,115, 0, 89, 70, 95, 65, 65,115, 97,109,112,108, -101,115, 0,121,102,112, 97,100, 50, 0, 71, 73,115,104, 97,100,111,119,113,117, 97,108,105,116,121, 0, 71, 73,114,101,102,105, -110,101,109,101,110,116, 0, 71, 73,112,111,119,101,114, 0, 71, 73,105,110,100,105,114,112,111,119,101,114, 0, 89, 70, 95,103, - 97,109,109, 97, 0, 89, 70, 95,101,120,112,111,115,117,114,101, 0, 89, 70, 95,114, 97,121, 98,105, 97,115, 0, 89, 70, 95, 65, - 65,112,105,120,101,108,115,105,122,101, 0, 89, 70, 95, 65, 65,116,104,114,101,115,104,111,108,100, 0, 98, 97, 99,107, 98,117, -102, 91, 49, 54, 48, 93, 0,112,105, 99, 91, 49, 54, 48, 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, 49, 54, 48, 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,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,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,109, 97,116,109,111,100,101, 0,102,114, 97,109,105,110,103, 0,114,116, 49, 0, -100,111,109,101, 0,115,116,101,114,101,111,102,108, 97,103, 0, 42, 42, 98,114,117,115,104,101,115, 0, 97, 99,116,105,118,101, - 95, 98,114,117,115,104, 95,105,110,100,101,120, 0, 98,114,117,115,104, 95, 99,111,117,110,116, 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,116,111,111,108, 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, 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,110, 97,109,101, 91, 51, 54, 93, 0,109, 97,116, 91, 51, 93, 91, 51, 93, - 0,112,105,118,111,116, 91, 51, 93, 0,116, 97, 98,108,101,116, 95,115,105,122,101, 0,116, 97, 98,108,101,116, 95,115,116,114, -101,110,103,116,104, 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, - 42,118,112, 97,105,110,116, 0, 42,119,112, 97,105,110,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,101,100,105,116, 98,117,116,102,108, 97,103, 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,112, 97,100, 91, 50, 93, 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,114,101,116,111,112,111, 95,109,111,100, -101, 0,114,101,116,111,112,111, 95,112, 97,105,110,116, 95,116,111,111,108, 0,108,105,110,101, 95,100,105,118, 0,101,108,108, -105,112,115,101, 95,100,105,118, 0,114,101,116,111,112,111, 95,104,111,116,115,112,111,116, 0,109,117,108,116,105,114,101,115, - 95,115,117, 98,100,105,118, 95,116,121,112,101, 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,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, 97,117,116,111, 95,110,111,114,109, 97,108,105,122,101, 0,105,110,116,112, 97,100, 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,103,114, 97,118,105,116,121, 91, 51, 93, 0, 42, 99, 97,109,101,114, 97, 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, 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,115,111,117,110,100, 95,104, 97,110,100,108,101, -115, 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,106,117, -109,112,102,114, 97,109,101, 0,112, 97,100, 53, 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, 98,108,101,110,100, 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,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,118,105,101,119, 98,117,116, 0,114,102,108, 97,103, 0,118,105,101,119,108,111, 99,107, 0,112,101,114, -115,112, 0,118,105,101,119, 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,116,111,112,111, - 95,118,105,101,119, 95,100, 97,116, 97, 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,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, -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,108, 97,121, 95,117,115,101,100, 0, 42,111, 98, 95, 99,101,110, -116,114,101, 0, 42, 98,103,112,105, 99, 0,111, 98, 95, 99,101,110,116,114,101, 95, 98,111,110,101, 91, 51, 50, 93, 0,108, 97, -121, 97, 99,116, 0,100,114, 97,119,116,121,112,101, 0,115, 99,101,110,101,108,111, 99,107, 0, 97,114,111,117,110,100, 0,112, -105,118,111,116, 95,108, 97,115,116, 0,103,114,105,100, 0,103,114,105,100,118,105,101,119, 0,112, 97,100,102, 0,110,101, 97, -114, 0,102, 97,114, 0,103,114,105,100,108,105,110,101,115, 0,103,114,105,100,102,108, 97,103, 0,103,114,105,100,115,117, 98, -100,105,118, 0,109,111,100,101,115,101,108,101, 99,116, 0,107,101,121,102,108, 97,103,115, 0,116,119,116,121,112,101, 0,116, -119,109,111,100,101, 0,116,119,102,108, 97,103, 0,116,119,100,114, 97,119,102,108, 97,103, 0, 99,117,115,116,111,109,100, 97, -116, 97, 95,109, 97,115,107, 0, 97,102,116,101,114,100,114, 97,119, 0,122, 98,117,102, 0,120,114, 97,121, 0,110,100,111,102, -109,111,100,101, 0,110,100,111,102,102,105,108,116,101,114, 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, 99,117,114,115,111,114, - 91, 50, 93, 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, - 42,115, 99,114,101,101,110, 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,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,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, 50, 52, 93, 0,100,105,114, 91, - 50, 52, 48, 93, 0,102,105,108,101, 91, 56, 48, 93, 0,114,101,110, 97,109,101,102,105,108,101, 91, 56, 48, 93, 0,115,111,114, -116, 0,100,105,115,112,108, 97,121, 0, 97, 99,116,105,118,101, 95, 98,111,111,107,109, 97,114,107, 0, 97, 99,116,105,118,101, - 95,102,105,108,101, 0,115,101,108,115,116, 97,116,101, 0,102, 95,102,112, 0,109,101,110,117, 0,102,112, 95,115,116,114, 91, - 56, 93, 0, 42,112,117,112,109,101,110,117, 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,108,111, 97,100, -105,109, 97,103,101, 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,115,101, - 97,114, 99,104, 95,102,108, 97,103,115, 0,100,111, 95, 0,111,117,116,108,105,110,101,118,105,115, 0,115,116,111,114,101,102, -108, 97,103, 0, 42, 99,117,109, 97,112, 0,105,109, 97,110,114, 0, 99,117,114,116,105,108,101, 0,105,109,116,121,112,101,110, -114, 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, 99,101,110,116,120, 0, 99,101,110,116,121, 0, 42,116,101,120,116, 0,116,111,112, 0,118,105,101,119,108, -105,110,101,115, 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,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, 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, 50, 53, - 54, 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,114,101,100,114, 97,119,115, 0, 42,105,100, 0, 97,115,112,101, 99,116, 0, 42, 99,117,114,102,111,110,116, 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,110,117,109,116,105,108,101,115,120, 0,110,117,109,116,105,108,101,115,121, 0,118,105,101,119,114,101, 99,116, 0, 98,111, -111,107,109, 97,114,107,114,101, 99,116, 0,115, 99,114,111,108,108,112,111,115, 0,115, 99,114,111,108,108,104,101,105,103,104, -116, 0,115, 99,114,111,108,108, 97,114,101, 97, 0,114,101,116,118, 97,108, 0,112,114,118, 95,119, 0,112,114,118, 95,104, 0, - 40, 42,114,101,116,117,114,110,102,117,110, 99, 41, 40, 41, 0, 40, 42,114,101,116,117,114,110,102,117,110, 99, 95,101,118,101, -110,116, 41, 40, 41, 0, 40, 42,114,101,116,117,114,110,102,117,110, 99, 95, 97,114,103,115, 41, 40, 41, 0, 42, 97,114,103, 49, - 0, 42, 97,114,103, 50, 0, 42,109,101,110,117,112, 0, 42,105,109,103, 0,108,101,110, 95, 97,108,108,111, 99, 0, 99,117,114, -115,111,114, 0,114,112,116, 95,109, 97,115,107, 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,102,105,108,101,110, 97,109, -101, 91, 50, 53, 54, 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,112, 97,100, 91, 49, 93, 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,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,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, 98, -111,120, 0,119, 99,111,108, 95,115, 99,114,111,108,108, 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,105, 99,111,110,102,105,108,101, 91, 56, 48, 93, 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, 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, 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,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,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,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,118,101,114,116,101,120, 95,115,105,122,101, 0,102, 97, 99,101,100,111,116, 95,115,105,122, -101, 0, 98,112, 97,100, 91, 50, 93, 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,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,104,112, - 97,100, 91, 51, 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,115,110,100, 0,116, 97, 99,116, 0,116,110,108, 97, 0,116,115, -101,113, 0,116,105,109, 97, 0,116,105,109, 97,115,101,108, 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, 97,114,109, 91, 50, 48, 93, - 0, 97, 99,116,105,118,101, 95,116,104,101,109,101, 95,103,114,111,117,112, 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, 49, 54, 48, 93, 0,102,111,110,116,100,105, -114, 91, 49, 54, 48, 93, 0,114,101,110,100,101,114,100,105,114, 91, 49, 54, 48, 93, 0,116,101,120,116,117,100,105,114, 91, 49, - 54, 48, 93, 0,112,108,117,103,116,101,120,100,105,114, 91, 49, 54, 48, 93, 0,112,108,117,103,115,101,113,100,105,114, 91, 49, - 54, 48, 93, 0,112,121,116,104,111,110,100,105,114, 91, 49, 54, 48, 93, 0,115,111,117,110,100,100,105,114, 91, 49, 54, 48, 93, - 0,121,102,101,120,112,111,114,116,100,105,114, 91, 49, 54, 48, 93, 0,118,101,114,115,105,111,110,115, 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,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,119,109,112, 97,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,110, -100,111,102, 95,112, 97,110, 0,110,100,111,102, 95,114,111,116, 97,116,101, 0, 99,117,114,115,115,105,122,101, 0,105,112,111, - 95,110,101,119, 0,118,101,114,115,101,109, 97,115,116,101,114, 91, 49, 54, 48, 93, 0,118,101,114,115,101,117,115,101,114, 91, - 49, 54, 48, 93, 0,103,108, 97,108,112,104, 97, 99,108,105,112, 0, 99,111, 98, 97, 95,119,101,105,103,104,116, 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,102,117,108,108, 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,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,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, 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,110, 97,109,101, 91, 56, 48, 93, 0, 42,105, 98,117,102, 0, 42,105, 98,117,102, 95, 99, -111,109,112, 0, 42,115,101, 49, 0, 42,115,101, 50, 0, 42,115,101, 51, 0,110,114, 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,115, 97,116,117,114, 97,116,105,111,110, 0,100,105,114, 91, 49, 54, 48, 93, 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,111,114, -120, 0,111,114,121, 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,116,115,116,114,105,112,100, 97,116, 97, 0, 42,116,115,116,114,105,112,100, 97,116, 97, 95,115,116, - 97,114,116,115,116,105,108,108, 0, 42,116,115,116,114,105,112,100, 97,116, 97, 95,101,110,100,115,116,105,108,108, 0, 42,105, - 98,117,102, 95,115,116, 97,114,116,115,116,105,108,108, 0, 42,105, 98,117,102, 95,101,110,100,115,116,105,108,108, 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,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, 42,115,116,114,105,112, 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,111,117,110,100, 95,104, 97,110, -100,108,101, 0,108,101,118,101,108, 0,112, 97,110, 0,115, 99,101,110,101,110,114, 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, 50, 53, 54, 93, 0, 97, 99,116, - 95,115,111,117,110,100,100,105,114, 91, 50, 53, 54, 93, 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, 83, 99, 97,108,101,120, 70,105,110, 0, 83, 99, 97,108,101,121, 70,105,110, 0,120, 73,110, -105, 0,120, 70,105,110, 0,121, 73,110,105, 0,121, 70,105,110, 0,114,111,116, 73,110,105, 0,114,111,116, 70,105,110, 0,105, -110,116,101,114,112,111,108, 97,116,105,111,110, 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, 51, 50, 93, 0,118,103,114,111,117,112,110, 97,109,101, 95,118, 91, 51, 50, 93, 0, 42,107,101,121, -115, 0,109,105,110,102, 97, 99, 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, 51, 50, 93, 0,116,111,103,103,108,101, 78, 97,109,101, 91, 51, 50, 93, 0, -118, 97,108,117,101, 91, 51, 50, 93, 0,109, 97,120,118, 97,108,117,101, 91, 51, 50, 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, 51, 50, 93, 0,100, 97,109,112,116,105,109,101,114, - 0,112,114,111,112,110, 97,109,101, 91, 51, 50, 93, 0,109, 97,116,110, 97,109,101, 91, 51, 50, 93, 0, 97,120,105,115,102,108, - 97,103, 0,112,111,115,101, 99,104, 97,110,110,101,108, 91, 51, 50, 93, 0, 99,111,110,115,116,114, 97,105,110,116, 91, 51, 50, - 93, 0, 42,102,114,111,109, 79, 98,106,101, 99,116, 0,115,117, 98,106,101, 99,116, 91, 51, 50, 93, 0, 98,111,100,121, 91, 51, - 50, 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,109,111,100,117,108,101, 91, 54, 52, 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, 51, 50, 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,115,110,100,110,114, 0,112, 97,100, 49, 91, 50, 93, 0,112,105,116, 99,104, 0,115,111,117, -110,100, 51, 68, 0,109, 97,107,101, 99,111,112,121, 0, 99,111,112,121,109, 97,100,101, 0,112, 97,100, 50, 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,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, 98,117,116,115,116, 97, 0, 98,117,116,101,110,100, 0,109,105,110, 0,109, 97,120, 0,118,105,115,105,102, 97, 99, 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, 51, 50, 93, 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, 51, - 50, 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, 42,115,117, 98,116, 97,114,103,101,116, 0,103,111, 0, 97, 99, 99,101,108,108,101,114, 97,116,105,111,110, - 0,109, 97,120,115,112,101,101,100, 0,109, 97,120,114,111,116,115,112,101,101,100, 0,109, 97,120,116,105,108,116,115,112,101, -101,100, 0,116,105,108,116,100, 97,109,112, 0,115,112,101,101,100,100, 97,109,112, 0, 42,115,111,117,114, 99,101, 0,102,114, - 97,109,101,115,107,105,112, 0,109,117,116,101, 0, 99,104, 97,110,103,101,100, 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, 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, 97,114,101, 97, 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,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, 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,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, 99,111,110,115,116,102,108, 97,103, 0,105,107,102, -108, 97,103, 0,115,101,108,101, 99,116,102,108, 97,103, 0, 97,103,114,112, 95,105,110,100,101,120, 0, 42, 98,111,110,101, 0, - 42, 99,104,105,108,100, 0,105,107,116,114,101,101, 0, 42, 98, 95, 98,111,110,101, 95,109, 97,116,115, 0, 42,100,117, 97,108, - 95,113,117, 97,116, 0, 42, 98, 95, 98,111,110,101, 95,100,117, 97,108, 95,113,117, 97,116,115, 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, - 99,117,115,116,111,109, 0, 99,104, 97,110, 98, 97,115,101, 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,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,102,105,108,116,101,114,102,108, 97,103, 0, 97,100,115, 0, 97, 99,116,110,114, 0, 97, 99,116,119,105, -100,116,104, 0,116,105,109,101,115,108,105,100,101, 0, 42,103,114,112, 0,116,101,109,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, - 51, 50, 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,122,109,105,110, 0,122,109, 97,120, 0,112, 97,100, 91, 57, 93, - 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,115, 99, 97,108,101, 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, 42,110,101,119, 95,115,111, 99,107, 0,110,115, 0,108,105,109,105,116, 0,115,116, 97, 99,107, 95,105,110,100, -101,120, 0,105,110,116,101,114,110, 0,115,116, 97, 99,107, 95,105,110,100,101,120, 95,101,120,116, 0,108,111, 99,120, 0,108, -111, 99,121, 0,111,119,110, 95,105,110,100,101,120, 0,116,111, 95,105,110,100,101,120, 0, 42,116,111,115,111, 99,107, 0, 42, -108,105,110,107, 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, 42,115,116, -111,114, 97,103,101, 0,109,105,110,105,119,105,100,116,104, 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,110,111,100,101,115, 0,108,105,110,107,115, 0, 42,115,116, 97, 99,107, 0, 42,116,104,114,101, 97, -100,115,116, 97, 99,107, 0,105,110,105,116, 0,115,116, 97, 99,107,115,105,122,101, 0, 99,117,114, 95,105,110,100,101,120, 0, - 97,108,108,116,121,112,101,115, 0, 42,111,119,110,116,121,112,101, 0, 42,115,101,108,105,110, 0, 42,115,101,108,111,117,116, - 0, 40, 42,116,105,109,101, 99,117,114,115,111,114, 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,116, 99,104, 0, 42,115,100,104, 0, - 99,121, 99,108,105, 99, 0,109,111,118,105,101, 0,115, 97,109,112,108,101,115, 0,109,105,110,115,112,101,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, 99,117,114,118, -101,100, 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,105,116,101,114, 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,115, - 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,120, 49, 0,120, 50, 0,121, 49, 0,121, 50, 0, 99,111,108,110, 97,109,101, 91, 51, 50, 93, 0, 98,107,116,121, -112,101, 0,114,111,116, 97,116,105,111,110, 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, 42,100,105, 99,116, 0, 42,110,111,100,101, 0, 97,110,103,108, -101, 95,111,102,115, 0, 99,111,108,109,111,100, 0,109,105,120, 0,116,104,114,101,115,104,111,108,100, 0,102, 97,100,101, 0, -109, 0, 99, 0,106,105,116, 0,112,114,111,106, 0,102,105,116, 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, 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,111,102,102,115,101,116, 91, 50, 93, 0, 99,108,111,110,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,116,111,111,108, 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,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,118,101,108, 91, 51, 93, 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,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,114,116, 91, 50, 93, 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, 97,108,105,118,101, 0,108,111,111,112, 0,104, 97,105, -114, 95,105,110,100,101,120, 0, 42, 98,111,105,100,115, 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,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,115,105,109,112,108,105,102,121, 95,102,108, 97,103, 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,106,105,116,102, 97, 99, 0,101,102,102, 95,104, 97,105,114, 0,103,114,105,100, 95, -114,101,115, 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, -114,101, 97, 99,116,115,104, 97,112,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,100, 97,109,112,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,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, 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,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, 51, 50, 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,116,114,101,101, 0, 42,112,100,100, 0, 42,102,114, 97,110,100, 0, 67,100,105,115, 0, 67,118,105, 0, 91, 51, 93, - 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,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,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,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, 42,116,121,112,101,115,116, -114, 0, 42,109,101,115,115, 97,103,101, 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,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,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,107,101,121, 99,111,110,102,105,103,115, 0, 42,100,101,102, 97,117,108,116, 99,111,110,102, 0,100, -101,102, 97,117,108,116, 97, 99,116,109, 97,112, 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, 42,110,101,119,115, 99,114,101,101,110, 0,115, 99,114,101,101,110,110, 97, -109,101, 91, 51, 50, 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, 97,100,100,109,111,117,115,101,109,111,118,101, 0,108, 97,115, -116, 95,116,121,112,101, 0,108, 97,115,116, 95,118, 97,108, 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, 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,105,116,101,109,115, 0,115,112, 97, 99,101,105,100, 0,114,101,103,105, -111,110,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, -114,101,112,111,114,116,115, 0,109, 97, 99,114,111, 0, 42,111,112,109, 0,109,118, 97,108, 91, 50, 93, 0,112,114,101,118,120, - 0,112,114,101,118,121, 0,117,110,105, 99,111,100,101, 0, 97,115, 99,105,105, 0, 42,107,101,121,109, 97,112, 95,105,100,110, - 97,109,101, 0, 99,117,115,116,111,109, 0, 99,117,115,116,111,109,100, 97,116, 97,102,114,101,101, 0, 42,101,100, 97,116, 97, - 0,105,110,102,108,117,101,110, 99,101, 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, 42,114,110, 97, 95,112, 97,116,104, 0, 97,114, -114, 97,121, 95,105,110,100,101,120, 0,105,100,116,121,112,101, 0,101,120,112,114,101,115,115,105,111,110, 91, 50, 53, 54, 93, - 0,118,101, 99, 91, 50, 93, 0, 42,102,112,116, 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,103,114,111,117,112, 91, 54, 52, 93, 0,116,101,109,112, -108, 97,116,101,115, 0,103,114,111,117,112,109,111,100,101, 0,112, 97,116,104,115, 0,107,101,121,105,110,103,102,108, 97,103, - 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, 99, 99,117,114, 97, 99,121, 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, 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, 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,118,101,108,111, 99,105,116,121, 91, 51, 93, 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, 0, 84, 89, 80, 69,198, 1, 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,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,105, 0,118,101, 99, 50,102, 0,118,101, 99, 50,100, 0,118,101, 99, 51, -105, 0,118,101, 99, 51,102, 0,118,101, 99, 51,100, 0,118,101, 99, 52,105, 0,118,101, 99, 52,102, 0,118,101, 99, 52,100, 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, 86,111,120,101,108, 68, 97,116, 97, 0, 98, 78,111,100,101, 84,114,101,101, 0, 84,101,120, 77, 97,112, -112,105,110,103, 0, 76, 97,109,112, 0, 67,117,114,118,101, 77, 97,112,112,105,110,103, 0, 87, 97,118,101, 0, 86,111,108,117, -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, 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, 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, 77, 83,101,108,101, 99,116, 0, 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, 80, 97,114,116,105, 97,108, 86, -105,115,105, 98,105,108,105,116,121, 0, 77, 68,101,102,111,114,109, 87,101,105,103,104,116, 0, 77, 84,101,120, 80,111,108,121, - 0, 77, 76,111,111,112, 85, 86, 0, 77, 76,111,111,112, 67,111,108, 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, 77, 68,105,115,112,115, 0, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, - 68, 71, 69, 68, 82, 65, 87, 32, 40, 49, 60, 60, 49, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, 32, 40, - 49, 60, 60, 50, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 71, 79, 78, 32, 40, 49, 60, 60, 51, 41, 32, 32, 35,100, -101,102,105,110,101, 32, 77, 69, 95, 69, 68, 71, 69, 82, 69, 78, 68, 69, 82, 32, 40, 49, 60, 60, 53, 41, 32, 35,100,101,102,105, -110,101, 32, 77, 69, 95, 76, 79, 79, 83, 69, 69, 68, 71, 69, 32, 40, 49, 60, 60, 55, 41, 32, 35,100,101,102,105,110,101, 32, 77, - 69, 95, 83, 69, 65, 77, 95, 76, 65, 83, 84, 32, 40, 49, 60, 60, 56, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 72, - 65, 82, 80, 32, 40, 49, 60, 60, 57, 41, 32, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 49, 32, 49, - 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 50, 32, 50, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, - 70, 76, 73, 80, 86, 51, 32, 52, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 52, 32, 56, 32, 35,100,101, -102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 89, 32, 49, 54, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, - 74, 88, 90, 32, 51, 50, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 89, 90, 32, 54, 52, 32, 32, 35,100,101, -102,105,110,101, 32, 77, 69, 95, 86, 49, 86, 50, 32, 49, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 50, 86, 51, 32, 50, - 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, 49, 32, 52, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 51, - 86, 52, 32, 52, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 52, 86, 49, 32, 56, 32, 32, 35,100,101,102,105,110,101, 32, - 77, 69, 95, 83, 77, 79, 79, 84, 72, 32, 49, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 65, 67, 69, 95, 83, 69, 76, 32, - 50, 32, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 83, 69,108, 32, 48, 32, 35,100,101,102,105,110,101, 32, 77, 69, - 95, 69, 83, 69,108, 32, 49, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 83, 69, 76, 32, 50, 32, 32, 35,100,101,102,105, -110,101, 32, 84, 70, 95, 83, 69, 76, 69, 67, 84, 32, 49, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 67, 84, 73, 86, - 69, 32, 50, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 49, 32, 52, 32, 35,100,101,102,105,110,101, 32, 84, - 70, 95, 83, 69, 76, 50, 32, 56, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 51, 32, 49, 54, 32, 35,100,101,102, -105,110,101, 32, 84, 70, 95, 83, 69, 76, 52, 32, 51, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 72, 73, 68, 69, 32, 54, - 52, 32, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 89, 78, 65, 77, 73, 67, 32, 49, 32, 35,100,101,102,105,110,101, - 32, 84, 70, 95, 65, 76, 80, 72, 65, 83, 79, 82, 84, 32, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 69, 88, 32, 52, - 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, 86, 69, 82, 84, 32, 56, 32, 35,100,101,102,105,110,101, - 32, 84, 70, 95, 76, 73, 71, 72, 84, 32, 49, 54, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, 67, 79, - 76, 32, 54, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 73, 76, 69, 83, 32, 49, 50, 56, 32, 32, 35,100,101,102,105, -110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 32, 50, 53, 54, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, - 87, 79, 83, 73, 68, 69, 32, 53, 49, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 73, 78, 86, 73, 83, 73, 66, 76, 69, 32, - 49, 48, 50, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 79, 66, 67, 79, 76, 32, 50, 48, 52, 56, 32, 35,100,101,102,105, -110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 50, 32, 52, 48, 57, 54, 32, 32, 35,100,101,102,105,110,101, 32, 84, - 70, 95, 83, 72, 65, 68, 79, 87, 32, 56, 49, 57, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 77, 70, 79, 78, 84, 32, - 49, 54, 51, 56, 52, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 79, 76, 73, 68, 32, 48, 32, 35,100,101,102,105,110, -101, 32, 84, 70, 95, 65, 68, 68, 32, 49, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 32, 50, 32, 35,100, -101,102,105,110,101, 32, 84, 70, 95, 67, 76, 73, 80, 32, 52, 32, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 85, 66, - 32, 51, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 49, 32, 49, 32, 35,100,101, -102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 50, 32, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, - 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 51, 32, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, - 65, 84, 69, 68, 52, 32, 56, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 49, 32, 49, 54, 32, 35,100,101,102,105, -110,101, 32, 84, 70, 95, 80, 73, 78, 50, 32, 51, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 51, 32, 54, 52, - 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 52, 32, 49, 50, 56, 32, 35,101,110,100,105,102,100, 32, 99,104, 97, -114, 32,117,115,101, 95, 99,111,108, 44, 32,102,108, 97,103, 59, 10, 10, 9, 47, 42, 32, 83,112,101, 99,105, 97,108, 32,108,101, -118,101,108, 32, 49, 32,100, 97,116, 97, 32,116,104, 97,116, 32, 99, 97,110,110,111,116, 32, 98,101, 32,109,111,100,105,102,105, -101,100, 32,102,114,111,109, 32,111,116,104,101,114, 32,108,101,118,101,108,115, 32, 42, 47, 10, 9, 67,117,115,116,111,109, 68, - 97,116, 97, 32,118,100, 97,116, 97, 59, 10, 9, 67,117,115,116,111,109, 68, 97,116, 97, 32,102,100, 97,116, 97, 59, 10, 9,115, -104,111,114,116, 32, 42,101,100,103,101, 95,102,108, 97,103,115, 59, 10, 9, 99,104, 97,114, 32, 42,101,100,103,101, 95, 99,114, -101, 97,115,101,115, 59, 10,125, 32, 77,117,108,116,105,114,101,115, 59, 10, 10, 47, 42, 42, 32, 69,110,100, 32, 77,117,108,116, -105,114,101,115, 32, 42, 42, 47, 10, 10,116,121,112,101,100,101,102, 32,115,116,114,117, 99,116, 32, 80, 97,114,116,105, 97,108, - 86,105,115,105, 98,105,108,105,116,121, 32,123, 10, 9,117,110,115,105,103,110,101,100, 32,105,110,116, 32, 42,118,101,114,116, - 95,109, 97,112, 59, 32, 47, 42, 32,118,101,114,116, 95,109, 97,112, 91, 79,108,100, 32, 73,110,100,101,120, 93, 61, 32, 78,101, -119, 32, 73,110,100,101,120, 32, 42, 47, 10, 9,105,110,116, 32, 42,101,100,103,101, 95,109, 97,112, 59, 32, 47, 42, 32,101,100, -103,101, 95,109, 97,112, 91, 79,108,100, 32, 73,110,100,101,120, 93, 61, 32, 78,101,119, 32, 73,110,100,101,120, 44, 32, 45, 49, - 61, 32,104,105,100,100,101,110, 32, 42, 47, 10, 9, 77, 70, 97, 99,101, 32, 42,111,108,100, 95,102, 97, 99,101,115, 59, 10, 9, - 77, 69,100,103,101, 32, 42,111,108,100, 95,101,100,103,101,115, 59, 10, 9,117,110,115,105,103,110,101,100, 32,105,110,116, 32, -116,111,116,102, 97, 99,101, 44, 32,116,111,116,101,100,103,101, 44, 32,116,111,116,118,101,114,116, 44, 32,112, 97,100, 59, 10, -125, 32, 80, 97,114,116,105, 97,108, 86,105,115,105, 98,105,108,105,116,121, 59, 10, 10, 47, 42, 32,109,118,101,114,116, 45, 62, -102,108, 97,103, 32, 40, 49, 61, 83, 69, 76, 69, 67, 84, 41, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 80, - 72, 69, 82, 69, 84, 69, 83, 84, 9, 50, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 80, 72, 69, 82, 69, 84, 69, 77, 80, - 9, 52, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 72, 73, 68, 69, 9, 9, 9, 49, 54, 10, 35,100,101,102,105,110,101, 32, - 77, 69, 95, 86, 69, 82, 84, 95, 77, 69, 82, 71, 69, 68, 9, 9, 40, 49, 60, 60, 54, 41, 10, 10, 47, 42, 32,109,101,100,103,101, - 45, 62,102,108, 97,103, 32, 40, 49, 61, 83, 69, 76, 69, 67, 84, 41, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, - 68, 71, 69, 68, 82, 65, 87, 9, 9, 9, 40, 49, 60, 60, 49, 41, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, - 9, 9, 9, 9, 40, 49, 60, 60, 50, 41, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 71, 79, 78, 9, 9, 9, 9, 40, 49, - 60, 60, 51, 41, 10, 9, 9, 9, 9, 9, 9, 47, 42, 32,114,101,115,101,114,118,101, 32, 49, 54, 32,102,111,114, 32, 77, 69, 95, - 72, 73, 68, 69, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 68, 71, 69, 82, 69, 78, 68, 69, 82, 9, 9, 40, - 49, 60, 60, 53, 41, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 76, 79, 79, 83, 69, 69, 68, 71, 69, 9, 9, 40, 49, 60, 60, - 55, 41, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, 95, 76, 65, 83, 84, 9, 9, 40, 49, 60, 60, 56, 41, 10, - 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 72, 65, 82, 80, 9, 9, 9, 40, 49, 60, 60, 57, 41, 10, 10, 47, 42, 32,112,117, -110,111, 32, 61, 32,118,101,114,116,101,120,110,111,114,109, 97,108, 32, 40,109,102, 97, 99,101, 41, 32, 42, 47, 10, 47, 42, 32, -114,101,110,100,101,114, 32, 97,115,115,117,109,101,115, 32,102,108,105,112,115, 32,116,111, 32, 98,101, 32,111,114,100,101,114, -101,100, 32,108,105,107,101, 32,116,104,105,115, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, - 49, 9, 9, 49, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 50, 9, 9, 50, 10, 35,100,101,102,105,110, -101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 51, 9, 9, 52, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 52, - 9, 9, 56, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 89, 9, 9, 49, 54, 10, 35,100,101,102,105,110, -101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 90, 9, 9, 51, 50, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 89, - 90, 9, 9, 54, 52, 10, 10, 47, 42, 32,101,100, 99,111,100,101, 32, 40,109,102, 97, 99,101, 41, 32, 42, 47, 10, 35,100,101,102, -105,110,101, 32, 77, 69, 95, 86, 49, 86, 50, 9, 9, 9, 49, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 50, 86, 51, 9, - 9, 9, 50, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, 49, 9, 9, 9, 52, 10, 35,100,101,102,105,110,101, 32, - 77, 69, 95, 86, 51, 86, 52, 9, 9, 9, 52, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 52, 86, 49, 9, 9, 9, 56, 10, - 10, 47, 42, 32,102,108, 97,103, 32, 40,109,102, 97, 99,101, 41, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, - 77, 79, 79, 84, 72, 9, 9, 9, 49, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 65, 67, 69, 95, 83, 69, 76, 9, 9, 9, - 50, 10, 9, 9, 9, 9, 9, 9, 47, 42, 32,102,108, 97,103, 32, 77, 69, 95, 72, 73, 68, 69, 61, 61, 49, 54, 32,105,115, 32,117, -115,101,100, 32,104,101,114,101, 32,116,111,111, 32, 42, 47, 32, 10, 47, 42, 32,109,115,101,108,101, 99,116, 45, 62,116,121,112, -101, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 83, 69,108, 9, 48, 10, 35,100,101,102,105,110,101, 32, 77, - 69, 95, 69, 83, 69,108, 32, 49, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 83, 69, 76, 32, 50, 10, 10, 47, 42, 32,109, -116,102, 97, 99,101, 45, 62,102,108, 97,103, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 69, 67, 84, - 9, 49, 32, 47, 42, 32,117,115,101, 32, 77, 70, 97, 99,101, 32,104,105,100,101, 32,102,108, 97,103, 32, 40, 97,102,116,101,114, - 32, 50, 46, 52, 51, 41, 44, 32,115,104,111,117,108,100, 32, 98,101, 32, 97, 98,108,101, 32,116,111, 32,114,101,117,115,101, 32, - 97,102,116,101,114, 32, 50, 46, 52, 52, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 67, 84, 73, 86, 69, 9, - 50, 32, 47, 42, 32,100,101,112,114,101, 99, 97,116,101,100, 33, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, - 69, 76, 49, 9, 9, 52, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 50, 9, 9, 56, 10, 35,100,101,102,105,110, -101, 32, 84, 70, 95, 83, 69, 76, 51, 9, 9, 49, 54, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 52, 9, 9, 51, - 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 72, 73, 68, 69, 9, 9, 54, 52, 32, 47, 42, 32,117,110,117,115,101,100, 44, - 32,115, 97,109,101, 32, 97,115, 32, 84, 70, 95, 83, 69, 76, 69, 67, 84, 32, 42, 47, 10, 10, 47, 42, 32,109,116,102, 97, 99,101, - 45, 62,109,111,100,101, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 89, 78, 65, 77, 73, 67, 9, 9, 49, 10, - 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 83, 79, 82, 84, 9, 50, 10, 35,100,101,102,105,110,101, 32, 84, - 70, 95, 84, 69, 88, 9, 9, 9, 52, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, 86, 69, 82, 84, 9, - 56, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 76, 73, 71, 72, 84, 9, 9, 49, 54, 10, 10, 35,100,101,102,105,110,101, 32, - 84, 70, 95, 83, 72, 65, 82, 69, 68, 67, 79, 76, 9, 54, 52, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 73, 76, 69, 83, - 9, 9, 49, 50, 56, 9, 9, 47, 42, 32,100,101,112,114,101, 99, 97,116,101,100, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, - 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 9, 50, 53, 54, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 87, 79, 83, - 73, 68, 69, 9, 9, 53, 49, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 73, 78, 86, 73, 83, 73, 66, 76, 69, 9, 49, 48, - 50, 52, 10, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 79, 66, 67, 79, 76, 9, 9, 50, 48, 52, 56, 10, 35,100,101,102,105, -110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 50, 9, 52, 48, 57, 54, 9, 47, 42, 32,119,105,116,104, 32, 90, 32, - 97,120,105,115, 32, 99,111,110,115,116,114, 97,105,110,116, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, - 65, 68, 79, 87, 9, 9, 56, 49, 57, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 77, 70, 79, 78, 84, 9, 9, 49, 54, - 51, 56, 52, 10, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,116,114, 97,110,115,112, 44, 32,118, 97,108,117,101,115, 32, 49, - 45, 52, 32, 97,114,101, 32,117,115,101,100, 32, 97,115, 32,102,108, 97,103,115, 32,105,110, 32,116,104,101, 32, 71, 76, 44, 32, - 87, 65, 82, 78, 73, 78, 71, 44, 32, 84, 70, 95, 83, 85, 66, 32, 99, 97,110,116, 32,119,111,114,107, 32,119,105,116,104, 32,116, -104,105,115, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 79, 76, 73, 68, 9, 48, 10, 35,100,101,102,105,110, -101, 32, 84, 70, 95, 65, 68, 68, 9, 9, 49, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 9, 50, 10, 35, -100,101,102,105,110,101, 32, 84, 70, 95, 67, 76, 73, 80, 9, 9, 52, 32, 47, 42, 32, 99,108,105,112,109, 97,112, 32, 97,108,112, -104, 97, 47, 98,105,110, 97,114,121, 32, 97,108,112,104, 97, 32, 97,108,108, 32,111,114, 32,110,111,116,104,105,110,103, 33, 32, - 42, 47, 10, 10, 47, 42, 32,115,117, 98, 32,105,115, 32,110,111,116, 32, 97,118, 97,105,108, 97, 98,108,101, 32,105,110, 32,116, -104,101, 32,117,115,101,114, 32,105,110,116,101,114,102, 97, 99,101, 32, 97,110,121,109,111,114,101, 32, 42, 47, 10, 35,100,101, -102,105,110,101, 32, 84, 70, 95, 83, 85, 66, 9, 9, 51, 10, 10, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,117,110,119,114, - 97,112, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 49, 9, 49, 10, 35, -100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 50, 9, 50, 10, 35,100,101,102,105,110,101, 32, - 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 51, 9, 52, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, - 69, 67, 65, 84, 69, 68, 52, 9, 56, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 49, 9, 9, 32, 32, 32, 32, 49, - 54, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 50, 9, 9, 32, 32, 32, 32, 51, 50, 10, 35,100,101,102,105,110, -101, 32, 84, 70, 95, 80, 73, 78, 51, 9, 32, 32, 32, 9, 9, 54, 52, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, - 52, 9, 32, 32, 32, 32, 9, 49, 50, 56, 10, 10, 35,101,110,100,105,102, 10,100,105, 79, 67, 75, 33,110,100,101,120, 32,105,110, - 32,110,117,114, 98, 32,108,105,115,116, 32, 42, 47, 10, 9,105,110,116, 32, 97, 99,116,110,117, 59, 10, 9, 47, 42, 32,101,100, -105,116, 44, 32,108, 97,115,116, 32,115,101,108,101, 99,116,101,100, 32, 98,112,111,105,110,116, 32, 42, 47, 10, 9, 66, 80,111, -105,110,116, 32, 42,108, 97,115,116,115,101,108, 98,112, 59, 10, 9, 10, 9, 47, 42, 32,102,111,110,116, 32,112, 97,114,116, 32, - 42, 47, 10, 9,115,104,111,114,116, 32,108,101,110, 44, 32,108,105,110,101,115, 44, 32,112,111,115, 44, 32,115,112, 97, 99,101, -109,111,100,101, 59, 10, 9,102,108,111, 97,116, 32,115,112, 97, 99,105,110,103, 44, 32,108,105,110,101,100,105,115,116, 44, 32, -115,104,101, 97,114, 44, 32,102,115,105,122,101, 44, 32,119,111,114,100,115,112, 97, 99,101, 44, 32,117,108,112,111,115, 44, 32, -117,108,104,101,105,103,104,116, 59, 10, 9,102,108,111, 97,116, 32,120,111,102, 44, 32,121,111,102, 59, 10, 9,102,108,111, 97, -116, 32,108,105,110,101,119,105,100,116,104, 59, 10, 70, 82, 69, 69,216, 24, 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,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, 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, 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, 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, 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, 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, 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, 84,114, 97,110,115,102,111,114,109, 79,114,105,101,110,116, 97,116,105,111,110, 0, 83, 99,117,108,112,116, 0, - 86, 80, 97,105,110,116, 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, 66, 71,112,105, 99, 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,116,111,112,111, 86,105,101,119, 68, 97,116, - 97, 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, 98, 83, 99,114,101,101,110, 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,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, 0, 83,112, 97, 99,101, 78,111,100,101, 0, 83,112, 97, 99,101, 76,111,103,105, - 99, 0, 83,112, 97, 99,101, 73,109, 97, 83,101,108, 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,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, 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, 83,111,108,105, -100, 76,105,103,104,116, 0, 85,115,101,114, 68,101,102, 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, 84, 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, 83,111,117,110,100, 72, 97,110,100,108,101, 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, 98, 83,111,117,110,100, 65, 99,116,117, 97,116,111,114, 0, 83,111,117,110,100, 51, 68, 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, 70,114,101,101, 67, 97,109,101,114, 97, 0, 83,112, 97, 99,101, 83,111,117,110,100, 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, 77,111,116,105,111,110, 80, 97,116,104, 0, 98, 65,110,105,109, 86,105,122, 83,101,116,116, -105,110,103,115, 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, 77,105,110, 77, 97,120, 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, 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, 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, - 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, 0, 98, 78,111,100,101, 80,114,101,118,105,101,119, 0,117,105, 66,108,111, 99,107, 0, 98, 78,111,100,101, 84,121,112, -101, 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, 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, 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, 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, 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, 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, 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, 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,111,117,110,100, 0, 68,114,105,118,101,114, 84, 97,114,103,101,116, 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, 0, 84, 76, 69, 78, 1, 0, 1, 0, 2, 0, 2, 0, 4, 0, 4, 0, - 4, 0, 4, 0, 8, 0, 0, 0, 16, 0, 24, 0, 16, 0, 4, 0, 8, 0, 8, 0, 16, 0, 12, 0, 12, 0, 24, 0, 16, 0, 16, 0, - 32, 0, 16, 0, 16, 0, 32, 0, 96, 0, 72, 0, 72, 2, 0, 0, 40, 0,144, 0,152, 4,112, 0, 36, 0, 56, 0,112, 0,128, 0, -168, 0, 96, 0, 40, 0, 48, 0,176, 0, 16, 0,152, 0, 40, 0, 40, 6,184, 1, 0, 0, 0, 0, 0, 0, 16, 1,104, 1,120, 1, - 24, 0, 8, 3,200, 0, 0, 0, 88, 0, 32, 1,248, 0,136, 0,248, 1, 56, 1, 80, 0, 88, 0, 32, 3,104, 0, 88, 1, 0, 0, -128, 0,104, 0,208, 0, 80, 0, 8, 0, 16, 0,216, 1, 0, 0, 0, 0, 0, 0,144, 1, 20, 0, 48, 0, 64, 0, 24, 0, 12, 0, - 16, 0, 4, 0, 8, 0, 8, 0, 0, 0, 32, 0,112, 0, 48, 0, 8, 0, 16, 0, 8, 0, 8, 0, 4, 0, 4, 0, 0, 1, 32, 0, - 16, 0, 0, 0, 16, 0, 64, 0, 24, 0, 12, 0, 64, 0, 72, 0, 96, 0,112, 0,120, 0, 88, 0,120, 0,152, 0, 88, 0, 80, 0, -128, 0, 80, 0,104, 0,248, 0, 56, 0,192, 0,176, 0,216, 0, 80, 0,112, 0,128, 0,216, 0,128, 0,240, 0, 72, 0,128, 0, - 0, 0,144, 0, 32, 0, 8, 2,152, 0, 0, 0,112, 0, 0, 0, 0, 0, 88, 0, 8, 0, 8, 0, 16, 1,104, 0,240, 1, 96, 0, - 88, 0, 88, 0, 88, 0,192, 1,136, 0,128, 0, 72, 0,232, 0, 48, 0, 0, 0,144, 0, 88, 0,104, 0,120, 0,152, 0,120, 1, -224, 0,192, 0, 0, 0, 72, 0,168, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0,224, 1, 40, 0,184, 0,152, 0, 40, 0, 64, 0, - 24, 0, 88, 0, 64, 4, 64, 0, 24, 0, 16, 0, 96, 0, 88, 0, 32, 0, 40, 1, 48, 0, 8, 0,112, 0, 88, 0, 56, 0, 64, 0, -120, 1, 32, 0, 8, 0, 16, 0, 48, 2, 0, 0, 0, 0, 64, 0, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 1, 56, 0, -152, 0, 72, 0,208, 0,248, 0, 32, 0, 0, 1,240, 0,208, 1,104, 0, 0, 0,152, 0, 0, 0, 40, 1, 16, 0, 16, 0,168, 0, -224, 0,144, 2,120, 2, 64, 0,200, 0, 32, 1, 72, 0,208, 2, 40, 0,136, 1, 40, 0, 24, 1, 32, 0,232, 0, 32, 0, 32, 0, - 80, 2, 16, 1, 16, 0,216, 21, 56, 0,160, 11, 32, 0, 40, 0, 88, 1, 0, 0, 0, 0,160, 0, 0, 0, 40, 1, 0, 0, 24, 1, - 80, 0, 48, 0, 16, 0, 8, 0, 52, 0, 0, 1, 32, 1,200, 1, 8, 1, 48, 1, 64, 0, 32, 0, 12, 0, 24, 0, 48, 0, 16, 0, - 24, 0, 24, 0, 32, 0, 72, 1, 0, 0, 64, 0, 64, 0, 48, 0, 8, 0, 48, 0, 72, 0,104, 0, 40, 0, 8, 0, 72, 0, 44, 0, - 40, 0,108, 0, 72, 0, 72, 0, 96, 0,104, 0, 60, 0,128, 0, 80, 0, 80, 0, 16, 0, 96, 0, 72, 0, 32, 0, 88, 0, 24, 0, - 80, 0,112, 0, 84, 0, 32, 0, 96, 0, 56, 0, 56, 0,112, 0,140, 0, 4, 0, 24, 0, 16, 0, 8, 0, 88, 0, 40, 0,224, 0, - 40, 0, 40, 1,200, 0, 16, 0, 24, 0, 24, 0, 0, 2, 4, 0, 40, 0,120, 0, 8, 1, 88, 0, 56, 0, 88, 0,128, 0, 80, 0, -120, 0, 24, 0, 56, 0, 48, 0, 48, 0, 72, 0, 48, 0, 72, 0, 48, 0, 48, 0, 24, 0, 56, 0,104, 0, 16, 0,112, 0, 96, 0, - 28, 0, 28, 0, 28, 0, 56, 0, 24, 0, 72, 0,168, 0, 40, 0,144, 0, 56, 0,232, 0, 0, 0, 0, 0, 0, 0, 16, 0, 40, 0, - 28, 0, 12, 0, 12, 0, 16, 1, 40, 0, 8, 0, 8, 0, 64, 0, 32, 0, 24, 0, 16, 0, 24, 0, 32, 0, 8, 0, 32, 0, 12, 0, - 56, 0, 24, 0, 72, 0, 24, 0, 56, 0, 56, 0, 20, 0, 64, 0, 40, 0, 32, 0,192, 0, 8, 2,104, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 16, 0, 32, 0, 40, 0,192, 0, 40, 0, 32, 0, 8, 1,224, 0,168, 0, 72, 0, 0, 0, 0, 0,120, 0, 0, 0,120, 0, - 0, 0,104, 0, 24, 0, 24, 0, 16, 0, 24, 0, 8, 0, 16, 0, 24, 0, 20, 0, 24, 0,112, 0, 32, 1, 16, 0,104, 0, 0, 1, - 40, 0,200, 0,104, 0,112, 0,104, 0, 32, 0, 80, 0, 56, 0, 80, 0, 64, 0,104, 0, 72, 0, 64, 0,128, 0, 0, 0, 0, 0, - 83, 84, 82, 67,140, 1, 0, 0, 10, 0, 2, 0, 10, 0, 0, 0, 10, 0, 1, 0, 11, 0, 3, 0, 11, 0, 0, 0, 11, 0, 1, 0, - 9, 0, 2, 0, 12, 0, 2, 0, 9, 0, 3, 0, 9, 0, 4, 0, 13, 0, 2, 0, 2, 0, 5, 0, 2, 0, 6, 0, 14, 0, 2, 0, - 4, 0, 5, 0, 4, 0, 6, 0, 15, 0, 2, 0, 7, 0, 5, 0, 7, 0, 6, 0, 16, 0, 2, 0, 8, 0, 5, 0, 8, 0, 6, 0, - 17, 0, 3, 0, 4, 0, 5, 0, 4, 0, 6, 0, 4, 0, 7, 0, 18, 0, 3, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, - 19, 0, 3, 0, 8, 0, 5, 0, 8, 0, 6, 0, 8, 0, 7, 0, 20, 0, 4, 0, 4, 0, 5, 0, 4, 0, 6, 0, 4, 0, 7, 0, - 4, 0, 8, 0, 21, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 0, 8, 0, 22, 0, 4, 0, 8, 0, 5, 0, - 8, 0, 6, 0, 8, 0, 7, 0, 8, 0, 8, 0, 23, 0, 4, 0, 4, 0, 9, 0, 4, 0, 10, 0, 4, 0, 11, 0, 4, 0, 12, 0, - 24, 0, 4, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 25, 0, 4, 0, 9, 0, 13, 0, 12, 0, 14, 0, - 4, 0, 15, 0, 4, 0, 16, 0, 26, 0, 10, 0, 26, 0, 0, 0, 26, 0, 1, 0, 0, 0, 17, 0, 0, 0, 18, 0, 2, 0, 19, 0, - 0, 0, 20, 0, 4, 0, 21, 0, 25, 0, 22, 0, 4, 0, 23, 0, 4, 0, 24, 0, 27, 0, 9, 0, 9, 0, 0, 0, 9, 0, 1, 0, - 27, 0, 25, 0, 28, 0, 26, 0, 0, 0, 27, 0, 2, 0, 28, 0, 2, 0, 19, 0, 4, 0, 29, 0, 26, 0, 30, 0, 28, 0, 8, 0, - 27, 0, 31, 0, 27, 0, 32, 0, 29, 0, 33, 0, 0, 0, 34, 0, 0, 0, 35, 0, 4, 0, 36, 0, 4, 0, 37, 0, 28, 0, 38, 0, - 30, 0, 6, 0, 4, 0, 39, 0, 4, 0, 40, 0, 2, 0, 41, 0, 2, 0, 42, 0, 2, 0, 43, 0, 4, 0, 44, 0, 31, 0, 6, 0, - 32, 0, 45, 0, 2, 0, 46, 0, 2, 0, 47, 0, 2, 0, 17, 0, 2, 0, 19, 0, 0, 0, 48, 0, 33, 0, 21, 0, 33, 0, 0, 0, - 33, 0, 1, 0, 34, 0, 49, 0, 35, 0, 50, 0, 24, 0, 51, 0, 24, 0, 52, 0, 2, 0, 46, 0, 2, 0, 47, 0, 2, 0, 53, 0, - 2, 0, 54, 0, 2, 0, 55, 0, 2, 0, 56, 0, 2, 0, 19, 0, 2, 0, 57, 0, 7, 0, 11, 0, 7, 0, 12, 0, 4, 0, 58, 0, - 7, 0, 59, 0, 7, 0, 60, 0, 7, 0, 61, 0, 31, 0, 62, 0, 36, 0, 7, 0, 27, 0, 31, 0, 12, 0, 63, 0, 24, 0, 64, 0, - 2, 0, 46, 0, 2, 0, 65, 0, 2, 0, 66, 0, 2, 0, 37, 0, 37, 0, 16, 0, 37, 0, 0, 0, 37, 0, 1, 0, 7, 0, 67, 0, - 7, 0, 61, 0, 2, 0, 17, 0, 2, 0, 47, 0, 2, 0, 68, 0, 2, 0, 19, 0, 4, 0, 69, 0, 4, 0, 70, 0, 9, 0, 2, 0, - 7, 0, 71, 0, 0, 0, 20, 0, 0, 0, 72, 0, 7, 0, 73, 0, 7, 0, 74, 0, 38, 0, 13, 0, 27, 0, 31, 0, 39, 0, 75, 0, - 37, 0, 76, 0, 0, 0, 77, 0, 4, 0, 78, 0, 7, 0, 61, 0, 12, 0, 79, 0, 36, 0, 80, 0, 27, 0, 81, 0, 2, 0, 17, 0, - 2, 0, 82, 0, 2, 0, 83, 0, 2, 0, 19, 0, 40, 0, 6, 0, 40, 0, 0, 0, 40, 0, 1, 0, 0, 0, 84, 0, 0, 0, 85, 0, - 4, 0, 23, 0, 4, 0, 86, 0, 41, 0, 10, 0, 41, 0, 0, 0, 41, 0, 1, 0, 4, 0, 87, 0, 4, 0, 88, 0, 4, 0, 89, 0, - 4, 0, 43, 0, 4, 0, 14, 0, 4, 0, 90, 0, 0, 0, 91, 0, 0, 0, 92, 0, 42, 0, 15, 0, 27, 0, 31, 0, 0, 0, 93, 0, - 4, 0, 90, 0, 4, 0, 94, 0, 12, 0, 95, 0, 40, 0, 96, 0, 40, 0, 97, 0, 4, 0, 98, 0, 4, 0, 99, 0, 12, 0,100, 0, - 0, 0,101, 0, 4, 0,102, 0, 4, 0,103, 0, 9, 0,104, 0, 8, 0,105, 0, 43, 0, 3, 0, 4, 0,106, 0, 4, 0,107, 0, - 9, 0, 2, 0, 44, 0, 20, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0, 17, 0, 2, 0, 19, 0, 7, 0,108, 0, 7, 0,109, 0, - 7, 0,110, 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, 2, 0,119, 0, 2, 0,120, 0, 7, 0,121, 0, 36, 0, 80, 0, 32, 0,122, 0, 45, 0, 13, 0, 4, 0,123, 0, - 4, 0,124, 0, 4, 0,125, 0, 4, 0,126, 0, 2, 0,127, 0, 2, 0,128, 0, 2, 0, 19, 0, 2, 0,129, 0, 2, 0,130, 0, - 2, 0,131, 0, 2, 0,132, 0, 2, 0,133, 0, 46, 0,134, 0, 47, 0, 32, 0, 27, 0, 31, 0, 0, 0, 34, 0, 12, 0,135, 0, - 48, 0,136, 0, 49, 0,137, 0, 50, 0,138, 0, 2, 0,129, 0, 2, 0, 19, 0, 2, 0,139, 0, 2, 0, 17, 0, 2, 0, 37, 0, - 2, 0, 43, 0, 4, 0,140, 0, 2, 0,141, 0, 2, 0,142, 0, 2, 0,143, 0, 2, 0,144, 0, 2, 0,145, 0, 2, 0,146, 0, - 4, 0,147, 0, 4, 0,148, 0, 43, 0,149, 0, 30, 0,150, 0, 0, 0,151, 0, 7, 0,152, 0, 4, 0,153, 0, 2, 0,154, 0, - 2, 0,155, 0, 2, 0,156, 0, 2, 0,157, 0, 7, 0,158, 0, 7, 0,159, 0, 51, 0, 63, 0, 2, 0,160, 0, 2, 0,161, 0, - 2, 0,162, 0, 2, 0,163, 0, 32, 0,164, 0, 52, 0,165, 0, 0, 0,166, 0, 0, 0,167, 0, 0, 0,168, 0, 0, 0,169, 0, - 0, 0,170, 0, 7, 0,171, 0, 7, 0,172, 0, 7, 0,173, 0, 2, 0,174, 0, 2, 0,175, 0, 2, 0,176, 0, 2, 0,177, 0, - 2, 0,178, 0, 2, 0,179, 0, 0, 0,180, 0, 0, 0,181, 0, 7, 0,182, 0, 7, 0,183, 0, 7, 0,184, 0, 7, 0,185, 0, - 7, 0,186, 0, 7, 0, 57, 0, 7, 0,187, 0, 7, 0,188, 0, 7, 0,189, 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, 53, 0, 15, 0, 0, 0,222, 0, 9, 0,223, 0, - 0, 0,224, 0, 0, 0,225, 0, 4, 0,226, 0, 4, 0,227, 0, 9, 0,228, 0, 7, 0,229, 0, 7, 0,230, 0, 7, 0,231, 0, - 4, 0,232, 0, 9, 0,233, 0, 9, 0,234, 0, 4, 0,235, 0, 4, 0, 37, 0, 54, 0, 6, 0, 7, 0,182, 0, 7, 0,183, 0, - 7, 0,184, 0, 7, 0,236, 0, 7, 0, 67, 0, 4, 0, 64, 0, 55, 0, 5, 0, 2, 0, 19, 0, 2, 0, 36, 0, 2, 0, 64, 0, - 2, 0,237, 0, 54, 0,231, 0, 56, 0, 17, 0, 32, 0,164, 0, 47, 0,238, 0, 57, 0,239, 0, 7, 0,240, 0, 7, 0,241, 0, - 2, 0, 17, 0, 2, 0,242, 0, 7, 0,110, 0, 7, 0,111, 0, 7, 0,243, 0, 4, 0,244, 0, 2, 0,245, 0, 2, 0,246, 0, - 4, 0,129, 0, 4, 0,140, 0, 2, 0,247, 0, 2, 0,248, 0, 58, 0, 22, 0, 2, 0, 19, 0, 2, 0,249, 0, 7, 0,250, 0, - 7, 0,251, 0, 2, 0,139, 0, 2, 0,252, 0, 4, 0,253, 0, 4, 0,254, 0, 32, 0,164, 0, 4, 0,255, 0, 2, 0, 0, 1, - 2, 0, 1, 1, 9, 0, 2, 1, 7, 0, 3, 1, 7, 0, 4, 1, 2, 0, 5, 1, 2, 0, 6, 1, 2, 0, 7, 1, 2, 0, 8, 1, - 7, 0, 9, 1, 7, 0, 10, 1, 55, 0, 11, 1, 59, 0, 11, 0, 4, 0, 12, 1, 4, 0, 13, 1, 2, 0, 14, 1, 2, 0, 19, 0, - 2, 0, 15, 1, 2, 0, 37, 0, 32, 0,164, 0, 7, 0, 16, 1, 4, 0, 17, 1, 0, 0, 18, 1, 7, 0, 19, 1, 52, 0, 61, 0, - 27, 0, 31, 0, 39, 0, 75, 0, 7, 0, 20, 1, 7, 0, 21, 1, 7, 0, 22, 1, 7, 0, 23, 1, 7, 0, 24, 1, 7, 0, 25, 1, - 7, 0, 26, 1, 7, 0, 27, 1, 7, 0, 28, 1, 7, 0, 29, 1, 7, 0, 30, 1, 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, 2, 0, 40, 1, 2, 0, 41, 1, - 2, 0, 42, 1, 2, 0, 43, 1, 2, 0, 44, 1, 2, 0, 45, 1, 2, 0, 46, 1, 2, 0, 19, 0, 2, 0, 17, 0, 2, 0,242, 0, - 7, 0, 47, 1, 7, 0, 48, 1, 7, 0, 49, 1, 7, 0, 50, 1, 4, 0, 51, 1, 4, 0, 52, 1, 2, 0, 53, 1, 2, 0, 54, 1, - 2, 0, 15, 1, 2, 0,127, 0, 4, 0, 23, 0, 4, 0,124, 0, 4, 0,125, 0, 4, 0,126, 0, 7, 0, 55, 1, 7, 0, 56, 1, - 7, 0,189, 0, 45, 0, 57, 1, 60, 0, 58, 1, 36, 0, 80, 0, 47, 0,238, 0, 53, 0, 59, 1, 55, 0, 11, 1, 56, 0, 60, 1, - 30, 0,150, 0, 58, 0, 61, 1, 59, 0, 62, 1, 0, 0, 63, 1, 0, 0,181, 0, 61, 0, 8, 0, 7, 0, 64, 1, 7, 0, 65, 1, - 7, 0,172, 0, 4, 0, 19, 0, 7, 0, 66, 1, 7, 0, 67, 1, 7, 0, 68, 1, 32, 0, 45, 0, 62, 0, 84, 0, 27, 0, 31, 0, - 39, 0, 75, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 69, 1, 2, 0,175, 0, 2, 0, 70, 1, 7, 0,182, 0, 7, 0,183, 0, - 7, 0,184, 0, 7, 0,185, 0, 7, 0, 71, 1, 7, 0, 72, 1, 7, 0, 73, 1, 7, 0, 74, 1, 7, 0, 75, 1, 7, 0, 76, 1, - 7, 0, 77, 1, 7, 0, 78, 1, 7, 0, 79, 1, 7, 0, 80, 1, 7, 0, 81, 1, 63, 0, 82, 1, 2, 0,249, 0, 2, 0, 70, 0, - 7, 0,110, 0, 7, 0,111, 0, 7, 0, 83, 1, 7, 0, 84, 1, 7, 0, 85, 1, 7, 0, 86, 1, 7, 0, 87, 1, 2, 0, 88, 1, - 2, 0, 89, 1, 2, 0, 90, 1, 2, 0, 91, 1, 0, 0, 92, 1, 0, 0, 93, 1, 2, 0, 94, 1, 2, 0, 95, 1, 2, 0, 96, 1, - 2, 0, 97, 1, 2, 0, 98, 1, 7, 0, 99, 1, 7, 0,100, 1, 7, 0,101, 1, 7, 0,102, 1, 2, 0,103, 1, 2, 0, 43, 0, - 2, 0,104, 1, 2, 0,105, 1, 2, 0,106, 1, 2, 0,107, 1, 7, 0,108, 1, 7, 0,109, 1, 7, 0,110, 1, 7, 0,111, 1, - 7, 0,112, 1, 7, 0,113, 1, 7, 0,114, 1, 7, 0,115, 1, 7, 0,116, 1, 7, 0,117, 1, 7, 0,118, 1, 7, 0,119, 1, - 2, 0,120, 1, 2, 0,121, 1, 4, 0,122, 1, 4, 0,123, 1, 2, 0,124, 1, 2, 0,125, 1, 2, 0,126, 1, 2, 0,127, 1, - 7, 0,128, 1, 7, 0,129, 1, 7, 0,130, 1, 7, 0,131, 1, 2, 0,132, 1, 2, 0,133, 1, 36, 0, 80, 0, 51, 0,134, 1, - 2, 0,135, 1, 2, 0,136, 1, 30, 0,150, 0, 64, 0, 2, 0, 27, 0, 31, 0, 36, 0, 80, 0, 65, 0, 18, 0, 7, 0,137, 1, - 7, 0,138, 1, 7, 0,139, 1, 7, 0,140, 1, 7, 0,141, 1, 7, 0,142, 1, 7, 0,143, 1, 7, 0,144, 1, 7, 0,145, 1, - 7, 0,146, 1, 2, 0,147, 1, 2, 0,148, 1, 2, 0,149, 1, 2, 0,150, 1, 7, 0,151, 1, 7, 0,152, 1, 7, 0,153, 1, - 4, 0,154, 1, 66, 0,124, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0,155, 1, 2, 0, 19, 0, 7, 0,182, 0, 7, 0,183, 0, - 7, 0,184, 0, 7, 0,156, 1, 7, 0,157, 1, 7, 0,158, 1, 7, 0,159, 1, 7, 0,160, 1, 7, 0,161, 1, 7, 0,162, 1, - 7, 0,163, 1, 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, 65, 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, 2, 0,184, 1, 2, 0,185, 1, 2, 0,186, 1, - 0, 0,187, 1, 0, 0,188, 1, 7, 0,189, 1, 7, 0,190, 1, 2, 0,191, 1, 2, 0,192, 1, 7, 0,193, 1, 7, 0,194, 1, - 7, 0,195, 1, 7, 0,196, 1, 2, 0,197, 1, 2, 0,198, 1, 4, 0, 69, 1, 4, 0,199, 1, 2, 0,200, 1, 2, 0,201, 1, - 2, 0,202, 1, 2, 0,203, 1, 7, 0,204, 1, 7, 0,205, 1, 7, 0,206, 1, 7, 0,207, 1, 7, 0,208, 1, 7, 0,209, 1, - 7, 0,210, 1, 7, 0,211, 1, 7, 0,212, 1, 7, 0,213, 1, 0, 0,214, 1, 7, 0,215, 1, 7, 0,216, 1, 7, 0,217, 1, - 4, 0,218, 1, 0, 0,219, 1, 0, 0,104, 1, 0, 0,220, 1, 0, 0, 63, 1, 2, 0,221, 1, 2, 0,222, 1, 2, 0,135, 1, - 2, 0,223, 1, 2, 0,224, 1, 2, 0,225, 1, 7, 0,226, 1, 7, 0,227, 1, 7, 0,228, 1, 7, 0,229, 1, 7, 0,230, 1, - 2, 0,160, 0, 2, 0,161, 0, 55, 0,231, 1, 55, 0,232, 1, 0, 0,233, 1, 0, 0,234, 1, 0, 0,235, 1, 0, 0,236, 1, - 2, 0,237, 1, 2, 0,238, 1, 7, 0,239, 1, 7, 0,240, 1, 51, 0,134, 1, 60, 0, 58, 1, 36, 0, 80, 0, 67, 0,241, 1, - 30, 0,150, 0, 7, 0,242, 1, 7, 0,243, 1, 7, 0,244, 1, 7, 0,245, 1, 7, 0,246, 1, 2, 0,247, 1, 2, 0, 70, 0, - 7, 0,248, 1, 7, 0,249, 1, 7, 0,250, 1, 7, 0,251, 1, 7, 0,252, 1, 7, 0,253, 1, 7, 0,254, 1, 7, 0,255, 1, - 7, 0, 0, 2, 2, 0, 1, 2, 2, 0, 2, 2, 4, 0, 3, 2, 4, 0,121, 1, 12, 0, 4, 2, 68, 0, 4, 0, 27, 0, 31, 0, - 0, 0, 5, 2, 69, 0, 2, 0, 43, 0,149, 0, 70, 0, 26, 0, 70, 0, 0, 0, 70, 0, 1, 0, 71, 0, 6, 2, 4, 0, 7, 2, - 4, 0, 8, 2, 4, 0, 9, 2, 4, 0, 10, 2, 4, 0, 11, 2, 4, 0, 12, 2, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 13, 2, - 2, 0, 14, 2, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 0, 15, 2, 7, 0, 16, 2, 7, 0, 17, 2, 7, 0, 18, 2, - 7, 0, 19, 2, 7, 0, 20, 2, 7, 0, 21, 2, 7, 0, 23, 0, 7, 0, 22, 2, 7, 0, 23, 2, 72, 0, 20, 0, 27, 0, 31, 0, - 39, 0, 75, 0, 71, 0, 6, 2, 12, 0, 24, 2, 12, 0, 25, 2, 12, 0, 26, 2, 36, 0, 80, 0, 66, 0, 27, 2, 0, 0, 19, 0, - 0, 0, 28, 2, 2, 0, 29, 2, 2, 0,174, 0, 2, 0, 37, 0, 7, 0, 64, 1, 7, 0,172, 0, 7, 0, 65, 1, 7, 0, 30, 2, - 7, 0, 31, 2, 7, 0, 32, 2, 70, 0, 33, 2, 35, 0, 11, 0, 7, 0, 34, 2, 7, 0, 35, 2, 7, 0, 36, 2, 7, 0,251, 0, - 2, 0, 55, 0, 0, 0, 37, 2, 0, 0, 38, 2, 0, 0, 39, 2, 0, 0, 40, 2, 0, 0, 41, 2, 0, 0, 42, 2, 34, 0, 7, 0, - 7, 0, 43, 2, 7, 0, 35, 2, 7, 0, 36, 2, 2, 0, 39, 2, 2, 0, 42, 2, 7, 0,251, 0, 7, 0, 37, 0, 73, 0, 21, 0, - 73, 0, 0, 0, 73, 0, 1, 0, 2, 0, 17, 0, 2, 0, 44, 2, 2, 0, 42, 2, 2, 0, 19, 0, 2, 0, 45, 2, 2, 0, 46, 2, - 2, 0, 47, 2, 2, 0, 48, 2, 2, 0, 49, 2, 2, 0, 50, 2, 2, 0, 51, 2, 2, 0, 52, 2, 7, 0, 53, 2, 7, 0, 54, 2, - 34, 0, 49, 0, 35, 0, 50, 0, 2, 0, 55, 2, 2, 0, 56, 2, 4, 0, 57, 2, 74, 0, 5, 0, 2, 0, 58, 2, 2, 0, 44, 2, - 0, 0, 19, 0, 0, 0, 37, 0, 2, 0, 70, 0, 75, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 8, 0, 7, 0, 59, 2, - 76, 0, 68, 0, 27, 0, 31, 0, 39, 0, 75, 0, 71, 0, 6, 2, 12, 0, 60, 2, 12, 0, 25, 2, 12, 0, 61, 2, 32, 0, 62, 2, - 32, 0, 63, 2, 32, 0, 64, 2, 36, 0, 80, 0, 77, 0, 65, 2, 38, 0, 66, 2, 66, 0, 27, 2, 12, 0, 67, 2, 7, 0, 64, 1, - 7, 0,172, 0, 7, 0, 65, 1, 2, 0,174, 0, 2, 0, 43, 0, 2, 0, 68, 2, 2, 0, 69, 2, 2, 0, 70, 2, 7, 0, 71, 2, - 7, 0, 70, 0, 2, 0, 72, 2, 2, 0, 29, 2, 2, 0, 19, 0, 2, 0, 73, 2, 7, 0, 74, 2, 7, 0, 75, 2, 7, 0, 76, 2, - 2, 0, 47, 2, 2, 0, 48, 2, 2, 0, 77, 2, 2, 0, 78, 2, 4, 0, 79, 2, 34, 0, 80, 2, 2, 0, 23, 0, 2, 0, 95, 0, - 2, 0, 67, 0, 2, 0, 81, 2, 7, 0, 82, 2, 7, 0, 83, 2, 7, 0, 84, 2, 7, 0, 85, 2, 7, 0, 86, 2, 7, 0, 87, 2, - 7, 0, 88, 2, 7, 0, 89, 2, 7, 0, 90, 2, 7, 0, 91, 2, 0, 0, 92, 2, 78, 0, 93, 2, 79, 0, 94, 2, 0, 0, 95, 2, - 68, 0, 96, 2, 68, 0, 97, 2, 68, 0, 98, 2, 68, 0, 99, 2, 4, 0,100, 2, 7, 0,101, 2, 4, 0,102, 2, 4, 0,103, 2, - 75, 0,104, 2, 4, 0,105, 2, 4, 0,106, 2, 74, 0,107, 2, 74, 0,108, 2, 80, 0, 40, 0, 27, 0, 31, 0, 71, 0, 6, 2, - 12, 0,109, 2, 36, 0, 80, 0, 38, 0, 66, 2, 66, 0, 27, 2, 81, 0,110, 2, 82, 0,111, 2, 83, 0,112, 2, 84, 0,113, 2, - 85, 0,114, 2, 86, 0,115, 2, 87, 0,116, 2, 88, 0,117, 2, 80, 0,118, 2, 89, 0,119, 2, 90, 0,120, 2, 91, 0,121, 2, - 91, 0,122, 2, 91, 0,123, 2, 4, 0, 54, 0, 4, 0,124, 2, 4, 0,125, 2, 4, 0,126, 2, 4, 0,127, 2, 2, 0,174, 0, - 2, 0,128, 2, 7, 0, 64, 1, 7, 0,172, 0, 7, 0, 65, 1, 7, 0,129, 2, 4, 0, 68, 2, 2, 0,130, 2, 2, 0, 19, 0, - 2, 0,131, 2, 2, 0,132, 2, 2, 0, 29, 2, 2, 0,133, 2, 92, 0,134, 2, 93, 0,135, 2, 83, 0, 8, 0, 9, 0,136, 2, - 7, 0,137, 2, 4, 0,138, 2, 0, 0, 19, 0, 0, 0,139, 2, 2, 0, 69, 1, 2, 0,140, 2, 2, 0,141, 2, 81, 0, 7, 0, - 4, 0,142, 2, 4, 0,143, 2, 4, 0,144, 2, 4, 0,145, 2, 2, 0, 44, 2, 0, 0,146, 2, 0, 0, 19, 0, 85, 0, 5, 0, - 4, 0,142, 2, 4, 0,143, 2, 0, 0,147, 2, 0, 0,148, 2, 2, 0, 19, 0, 94, 0, 2, 0, 4, 0,149, 2, 7, 0, 36, 2, - 86, 0, 3, 0, 94, 0,150, 2, 4, 0,151, 2, 4, 0, 19, 0, 84, 0, 6, 0, 7, 0,152, 2, 2, 0,153, 2, 2, 0, 44, 2, - 0, 0, 19, 0, 0, 0,148, 2, 0, 0, 70, 2, 87, 0, 4, 0, 0, 0,236, 0, 0, 0,182, 0, 0, 0,183, 0, 0, 0,184, 0, - 95, 0, 6, 0, 47, 0,136, 2, 0, 0, 19, 0, 0, 0,139, 2, 2, 0, 69, 1, 2, 0,140, 2, 2, 0,141, 2, 96, 0, 1, 0, - 7, 0,154, 2, 97, 0, 5, 0, 0, 0,236, 0, 0, 0,182, 0, 0, 0,183, 0, 0, 0,184, 0, 4, 0, 37, 0, 88, 0, 1, 0, - 7, 0,155, 2, 89, 0, 2, 0, 4, 0,156, 2, 4, 0, 17, 0, 82, 0, 7, 0, 7, 0,137, 2, 47, 0,136, 2, 0, 0, 19, 0, - 0, 0,139, 2, 2, 0, 69, 1, 2, 0,140, 2, 2, 0,141, 2, 98, 0, 1, 0, 7, 0,157, 2, 99, 0, 1, 0, 4, 0,158, 2, -100, 0, 1, 0, 0, 0,159, 2,101, 0, 1, 0, 7, 0,137, 2,102, 0, 3, 0, 4, 0,160, 2, 0, 0, 92, 0, 7, 0,161, 2, -104, 0, 4, 0, 7, 0,236, 0, 7, 0,182, 0, 7, 0,183, 0, 7, 0,184, 0,105, 0, 1, 0,104, 0,138, 2,106, 0, 5, 0, - 4, 0,162, 2, 4, 0,163, 2, 0, 0, 19, 0, 0, 0, 44, 2, 0, 0, 70, 2,107, 0, 2, 0, 4, 0,164, 2, 4, 0,163, 2, -108, 0, 10, 0,108, 0, 0, 0,108, 0, 1, 0,106, 0,165, 2,105, 0,166, 2,107, 0,167, 2, 4, 0, 54, 0, 4, 0,125, 2, - 4, 0,124, 2, 4, 0, 37, 0, 84, 0,168, 2, 92, 0, 14, 0, 12, 0,169, 2, 84, 0,168, 2, 0, 0,170, 2, 0, 0,171, 2, - 0, 0,172, 2, 0, 0,173, 2, 0, 0,174, 2, 0, 0,175, 2, 0, 0,176, 2, 0, 0, 19, 0, 91, 0,121, 2, 91, 0,123, 2, - 2, 0,177, 2, 0, 0,178, 2, 93, 0, 8, 0, 4, 0,179, 2, 4, 0,180, 2, 81, 0,181, 2, 85, 0,182, 2, 4, 0,125, 2, - 4, 0,124, 2, 4, 0, 54, 0, 4, 0, 37, 0,109, 0, 7, 0,109, 0, 0, 0,109, 0, 1, 0, 4, 0, 17, 0, 4, 0, 69, 1, - 0, 0, 20, 0, 46, 0,134, 0, 0, 0,183, 2,110, 0, 7, 0,109, 0,184, 2, 2, 0,185, 2, 2, 0,169, 2, 2, 0,186, 2, - 2, 0, 90, 0, 9, 0,187, 2, 9, 0,188, 2,111, 0, 3, 0,109, 0,184, 2, 32, 0,164, 0, 0, 0, 20, 0,112, 0, 5, 0, -109, 0,184, 2, 32, 0,164, 0, 0, 0, 20, 0, 2, 0,189, 2, 0, 0,190, 2,113, 0, 5, 0,109, 0,184, 2, 7, 0, 88, 0, - 7, 0,191, 2, 4, 0,192, 2, 4, 0,193, 2,114, 0, 5, 0,109, 0,184, 2, 32, 0,194, 2, 0, 0, 72, 0, 4, 0, 69, 1, - 4, 0, 19, 0,115, 0, 13, 0,109, 0,184, 2, 32, 0,195, 2, 32, 0,196, 2, 32, 0,197, 2, 32, 0,198, 2, 7, 0,199, 2, - 7, 0,200, 2, 7, 0,191, 2, 7, 0,201, 2, 4, 0,202, 2, 4, 0,203, 2, 4, 0, 90, 0, 4, 0,204, 2,116, 0, 5, 0, -109, 0,184, 2, 2, 0,205, 2, 2, 0, 19, 0, 7, 0,206, 2, 32, 0,207, 2,117, 0, 3, 0,109, 0,184, 2, 7, 0,208, 2, - 4, 0, 90, 0,118, 0, 10, 0,109, 0,184, 2, 7, 0,209, 2, 4, 0,210, 2, 4, 0, 37, 0, 2, 0, 90, 0, 2, 0,211, 2, - 2, 0,212, 2, 2, 0,213, 2, 7, 0,214, 2, 0, 0,215, 2,119, 0, 3, 0,109, 0,184, 2, 7, 0, 37, 0, 4, 0, 17, 0, -120, 0, 6, 0,109, 0,184, 2,121, 0,216, 2,122, 0,217, 2,123, 0,218, 2, 7, 0,219, 2, 4, 0, 17, 0,124, 0, 11, 0, -109, 0,184, 2, 52, 0,220, 2, 7, 0,221, 2, 4, 0,222, 2, 0, 0,215, 2, 7, 0,223, 2, 4, 0,224, 2, 32, 0,225, 2, - 0, 0,226, 2, 4, 0,227, 2, 4, 0, 37, 0,125, 0, 10, 0,109, 0,184, 2, 32, 0,228, 2, 47, 0,229, 2, 4, 0, 90, 0, - 4, 0,230, 2, 7, 0,231, 2, 7, 0,232, 2, 0, 0,226, 2, 4, 0,227, 2, 4, 0, 37, 0,126, 0, 3, 0,109, 0,184, 2, - 7, 0,233, 2, 4, 0,234, 2,127, 0, 5, 0,109, 0,184, 2, 7, 0,235, 2, 0, 0,215, 2, 2, 0, 19, 0, 2, 0,236, 2, -128, 0, 8, 0,109, 0,184, 2, 32, 0,164, 0, 7, 0,235, 2, 7, 0,251, 0, 7, 0,106, 0, 0, 0,215, 2, 2, 0, 19, 0, - 2, 0, 17, 0,129, 0, 21, 0,109, 0,184, 2, 32, 0,237, 2, 0, 0,215, 2, 52, 0,220, 2, 32, 0,225, 2, 2, 0, 19, 0, - 2, 0, 37, 0, 7, 0,238, 2, 7, 0,239, 2, 7, 0,240, 2, 7, 0, 74, 2, 7, 0,241, 2, 7, 0,242, 2, 7, 0,243, 2, - 7, 0,244, 2, 4, 0,224, 2, 4, 0,227, 2, 0, 0,226, 2, 7, 0,245, 2, 7, 0,246, 2, 7, 0, 43, 0,130, 0, 7, 0, -109, 0,184, 2, 2, 0,247, 2, 2, 0,248, 2, 4, 0, 70, 0, 32, 0,164, 0, 7, 0,249, 2, 0, 0,215, 2,131, 0, 10, 0, -109, 0,184, 2, 32, 0,164, 0, 0, 0,250, 2, 7, 0,251, 2, 7, 0,252, 2, 7, 0,244, 2, 4, 0,253, 2, 4, 0,254, 2, - 7, 0,255, 2, 0, 0, 20, 0,132, 0, 1, 0,109, 0,184, 2,133, 0, 7, 0,109, 0,184, 2, 46, 0,134, 0,134, 0, 0, 3, -135, 0, 1, 3,136, 0, 2, 3,137, 0, 3, 3, 12, 0, 4, 3,138, 0, 13, 0,109, 0,184, 2, 84, 0, 5, 3, 84, 0, 6, 3, - 84, 0, 7, 3, 84, 0, 8, 3, 84, 0, 9, 3, 84, 0, 10, 3, 81, 0, 11, 3, 4, 0, 12, 3, 4, 0, 13, 3, 7, 0,219, 2, - 7, 0, 37, 0,139, 0, 14, 3,140, 0, 7, 0,109, 0,184, 2, 84, 0, 5, 3, 84, 0, 15, 3,141, 0, 16, 3,142, 0, 14, 3, - 4, 0, 17, 3, 4, 0, 12, 3,143, 0, 4, 0,109, 0,184, 2, 32, 0,164, 0, 4, 0, 18, 3, 4, 0, 37, 0,144, 0, 2, 0, - 4, 0, 19, 3, 7, 0, 36, 2,145, 0, 2, 0, 4, 0,125, 0, 4, 0, 20, 3,146, 0, 21, 0,109, 0,184, 2, 32, 0,164, 0, - 0, 0,215, 2, 2, 0, 21, 3, 2, 0, 19, 0, 2, 0, 69, 1, 2, 0, 37, 0, 7, 0, 22, 3, 7, 0, 23, 3, 4, 0, 54, 0, - 4, 0, 24, 3,145, 0, 25, 3,144, 0, 26, 3, 4, 0, 27, 3, 4, 0, 28, 3, 4, 0, 29, 3, 4, 0, 20, 3, 7, 0, 30, 3, - 7, 0, 31, 3, 7, 0, 32, 3, 9, 0, 33, 3,147, 0, 8, 0,109, 0,184, 2,148, 0, 34, 3,141, 0, 16, 3, 4, 0, 35, 3, - 4, 0, 36, 3, 4, 0, 37, 3, 2, 0, 19, 0, 2, 0, 57, 0,149, 0, 8, 0,109, 0,184, 2, 32, 0, 45, 0, 2, 0,255, 0, - 2, 0, 19, 0, 2, 0,205, 2, 2, 0, 57, 0, 7, 0, 38, 3, 7, 0, 39, 3,150, 0, 5, 0,109, 0,184, 2, 4, 0, 40, 3, - 2, 0, 19, 0, 2, 0, 41, 3, 7, 0, 42, 3,151, 0, 7, 0,109, 0,184, 2, 84, 0, 43, 3, 4, 0, 44, 3, 0, 0, 45, 3, - 0, 0, 46, 3, 0, 0, 47, 3, 0, 0, 48, 3,152, 0, 3, 0,109, 0,184, 2,153, 0, 49, 3,137, 0, 3, 3,154, 0, 10, 0, -109, 0,184, 2, 32, 0, 50, 3, 32, 0, 51, 3, 0, 0, 52, 3, 7, 0, 53, 3, 2, 0, 54, 3, 2, 0, 55, 3, 0, 0, 56, 3, - 0, 0, 57, 3, 0, 0,190, 2,155, 0, 9, 0,109, 0,184, 2, 32, 0, 58, 3, 0, 0, 52, 3, 7, 0, 59, 3, 7, 0, 60, 3, - 0, 0, 69, 1, 0, 0,205, 2, 0, 0, 61, 3, 0, 0, 37, 0,156, 0, 1, 0,109, 0,184, 2,157, 0, 27, 0, 27, 0, 31, 0, - 2, 0, 45, 2, 2, 0, 46, 2, 2, 0, 62, 3, 2, 0, 19, 0, 2, 0, 63, 3, 2, 0, 64, 3, 2, 0, 65, 3, 2, 0, 70, 0, - 0, 0, 66, 3, 0, 0, 67, 3, 0, 0, 68, 3, 0, 0, 17, 0, 4, 0, 37, 0, 7, 0, 69, 3, 7, 0, 70, 3, 7, 0, 71, 3, - 7, 0, 72, 3, 7, 0, 73, 3, 7, 0, 74, 3, 34, 0, 75, 3, 36, 0, 80, 0, 38, 0, 66, 2, 86, 0,115, 2, 7, 0, 76, 3, - 7, 0, 77, 3,157, 0, 78, 3,158, 0, 3, 0,158, 0, 0, 0,158, 0, 1, 0, 0, 0, 20, 0, 71, 0, 3, 0, 7, 0, 79, 3, - 4, 0, 19, 0, 4, 0, 37, 0, 32, 0,124, 0, 27, 0, 31, 0, 39, 0, 75, 0,159, 0, 80, 3, 2, 0, 17, 0, 2, 0, 81, 3, - 4, 0, 82, 3, 4, 0, 83, 3, 4, 0, 84, 3, 0, 0, 85, 3, 32, 0, 38, 0, 32, 0, 86, 3, 32, 0, 87, 3, 32, 0, 88, 3, - 32, 0, 89, 3, 36, 0, 80, 0, 77, 0, 65, 2, 71, 0, 6, 2,160, 0, 90, 3,160, 0, 91, 3,161, 0, 92, 3, 9, 0, 2, 0, -162, 0, 93, 3, 12, 0, 94, 3, 12, 0,109, 2, 12, 0, 25, 2, 12, 0, 95, 3, 12, 0, 96, 3, 4, 0, 69, 1, 4, 0, 97, 3, - 66, 0, 27, 2, 0, 0, 98, 3, 4, 0, 29, 2, 4, 0, 99, 3, 7, 0, 64, 1, 7, 0,100, 3, 7, 0,101, 3, 7, 0,172, 0, - 7, 0,102, 3, 7, 0, 65, 1, 7, 0,103, 3, 7, 0, 15, 2, 7, 0,104, 3, 7, 0,105, 3, 7, 0,106, 3, 7, 0,107, 3, - 7, 0,108, 3, 7, 0,109, 3, 7, 0,251, 2, 7, 0,110, 3, 7, 0,240, 0, 4, 0,111, 3, 2, 0, 19, 0, 2, 0,112, 3, - 2, 0,113, 3, 2, 0,114, 3, 2, 0,115, 3, 2, 0,116, 3, 2, 0,117, 3, 2, 0,118, 3, 2, 0,119, 3, 2, 0,120, 3, - 2, 0,121, 3, 2, 0,122, 3, 4, 0,123, 3, 4, 0,124, 3, 4, 0,125, 3, 4, 0,126, 3, 7, 0,127, 3, 7, 0,101, 2, - 7, 0,128, 3, 7, 0,129, 3, 7, 0,130, 3, 7, 0,131, 3, 7, 0,132, 3, 7, 0,215, 0, 7, 0,133, 3, 7, 0,134, 3, - 7, 0,135, 3, 7, 0,136, 3, 2, 0,137, 3, 0, 0,138, 3, 0, 0,139, 3, 0, 0,140, 3, 0, 0,141, 3, 7, 0,142, 3, - 7, 0,143, 3, 12, 0,144, 3, 12, 0,145, 3, 12, 0,146, 3, 12, 0,147, 3, 7, 0,148, 3, 2, 0,156, 2, 2, 0,149, 3, - 7, 0,138, 2, 4, 0,150, 3, 4, 0,151, 3,163, 0,152, 3, 2, 0,153, 3, 2, 0,247, 0, 7, 0,154, 3, 12, 0,155, 3, - 12, 0,156, 3, 12, 0,157, 3, 12, 0,158, 3,164, 0, 61, 1,165, 0,159, 3, 67, 0,160, 3, 2, 0,161, 3, 2, 0,162, 3, - 2, 0,163, 3, 2, 0,164, 3, 7, 0,130, 2, 2, 0,165, 3, 2, 0,166, 3,153, 0,167, 3,141, 0,168, 3,141, 0,169, 3, - 4, 0,170, 3, 4, 0,171, 3, 4, 0,172, 3, 4, 0, 70, 0, 12, 0,173, 3, 12, 0,174, 3, 12, 0,175, 3,166, 0, 14, 0, -166, 0, 0, 0,166, 0, 1, 0, 32, 0, 38, 0, 7, 0,251, 2, 7, 0, 66, 1, 7, 0,252, 2, 7, 0,244, 2, 0, 0, 20, 0, - 4, 0,253, 2, 4, 0,254, 2, 4, 0,176, 3, 2, 0, 17, 0, 2, 0,177, 3, 7, 0,255, 2,167, 0, 12, 0,167, 0, 0, 0, -167, 0, 1, 0, 32, 0, 45, 0, 4, 0,178, 3, 4, 0,156, 2, 4, 0,179, 3, 4, 0, 17, 0, 4, 0,180, 3, 7, 0, 66, 1, - 7, 0,181, 3, 7, 0,182, 3, 7, 0,154, 2,164, 0, 40, 0, 4, 0, 19, 0, 2, 0,183, 3, 2, 0,184, 3, 2, 0,244, 2, - 2, 0,185, 3, 2, 0,186, 3, 2, 0,187, 3, 2, 0,188, 3, 2, 0,189, 3, 7, 0,190, 3, 7, 0,191, 3, 7, 0,192, 3, - 7, 0,193, 3, 7, 0,194, 3, 7, 0,195, 3, 7, 0,196, 3, 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,203, 3, 7, 0,204, 3, 7, 0,205, 3, 7, 0, 37, 0, 7, 0,206, 3, 7, 0,207, 3, - 7, 0,208, 3, 7, 0,209, 3, 7, 0,210, 3, 7, 0,211, 3, 7, 0,212, 3, 7, 0,213, 3, 7, 0,214, 3, 7, 0,215, 3, - 52, 0,165, 0,168, 0,216, 3, 7, 0,217, 3, 4, 0,193, 2,169, 0, 5, 0, 67, 0,241, 1, 7, 0,218, 3, 7, 0,219, 3, - 2, 0, 19, 0, 2, 0,220, 3,170, 0, 9, 0,170, 0, 0, 0,170, 0, 1, 0, 4, 0,221, 3, 4, 0,222, 3, 4, 0,223, 3, - 4, 0, 19, 0, 4, 0,224, 3, 9, 0,225, 3, 9, 0,226, 3,137, 0, 19, 0,137, 0, 0, 0,137, 0, 1, 0, 4, 0, 19, 0, - 4, 0,227, 3, 4, 0,228, 3, 4, 0,229, 3, 4, 0,230, 3, 4, 0,231, 3, 4, 0,232, 3, 4, 0,222, 3, 4, 0,156, 2, - 4, 0, 57, 0, 0, 0,233, 3, 0, 0,234, 3, 0, 0,235, 3, 0, 0,236, 3, 12, 0,237, 3,171, 0,238, 3, 9, 0,239, 3, -172, 0, 1, 0, 7, 0, 43, 2,163, 0, 30, 0, 4, 0, 19, 0, 7, 0,240, 3, 7, 0,241, 3, 7, 0,242, 3, 4, 0,243, 3, - 4, 0,244, 3, 4, 0,245, 3, 4, 0,246, 3, 7, 0,247, 3, 7, 0,248, 3, 7, 0,249, 3, 7, 0,250, 3, 7, 0,251, 3, - 7, 0,252, 3, 7, 0,253, 3, 7, 0,254, 3, 7, 0,255, 3, 7, 0, 0, 4, 7, 0, 1, 4, 7, 0, 2, 4, 7, 0, 3, 4, - 7, 0, 4, 4, 7, 0, 5, 4, 7, 0, 6, 4, 7, 0, 7, 4, 7, 0, 8, 4, 4, 0, 9, 4, 4, 0, 10, 4, 7, 0, 11, 4, - 7, 0,133, 3,165, 0, 54, 0, 4, 0,222, 3, 4, 0, 12, 4,173, 0, 13, 4,174, 0, 14, 4, 0, 0, 37, 0, 0, 0, 15, 4, - 2, 0, 16, 4, 7, 0, 17, 4, 0, 0, 18, 4, 7, 0, 19, 4, 7, 0, 20, 4, 7, 0, 21, 4, 7, 0, 22, 4, 7, 0, 23, 4, - 7, 0, 24, 4, 7, 0, 25, 4, 7, 0, 26, 4, 7, 0, 27, 4, 2, 0, 28, 4, 0, 0, 29, 4, 2, 0, 30, 4, 7, 0, 31, 4, - 7, 0, 32, 4, 0, 0, 33, 4, 4, 0,126, 0, 4, 0, 34, 4, 4, 0, 35, 4, 2, 0, 36, 4, 2, 0, 37, 4,172, 0, 38, 4, - 4, 0, 39, 4, 4, 0, 82, 0, 7, 0, 40, 4, 7, 0, 41, 4, 7, 0, 42, 4, 7, 0, 43, 4, 2, 0, 44, 4, 2, 0, 45, 4, - 2, 0, 46, 4, 2, 0, 47, 4, 2, 0, 48, 4, 2, 0, 49, 4, 2, 0, 50, 4, 2, 0, 51, 4,175, 0, 52, 4, 7, 0, 53, 4, - 7, 0, 54, 4,137, 0, 55, 4, 12, 0, 4, 3,169, 0, 56, 4, 7, 0, 57, 4, 7, 0, 58, 4, 7, 0, 59, 4, 0, 0, 60, 4, -153, 0, 49, 0,152, 0, 61, 4, 2, 0, 17, 0, 2, 0, 62, 4, 2, 0, 63, 4, 2, 0, 64, 4, 7, 0, 65, 4, 2, 0, 66, 4, - 2, 0, 67, 4, 7, 0, 68, 4, 2, 0, 69, 4, 2, 0, 70, 4, 7, 0, 71, 4, 7, 0, 72, 4, 7, 0, 73, 4, 7, 0, 74, 4, - 7, 0, 75, 4, 7, 0, 76, 4, 4, 0, 77, 4, 7, 0, 78, 4, 7, 0, 79, 4, 7, 0, 80, 4, 80, 0, 81, 4, 80, 0, 82, 4, - 80, 0, 83, 4, 0, 0, 84, 4, 7, 0, 85, 4, 7, 0, 86, 4, 36, 0, 80, 0, 2, 0, 87, 4, 0, 0, 88, 4, 0, 0, 89, 4, - 7, 0, 90, 4, 4, 0, 91, 4, 7, 0, 92, 4, 7, 0, 93, 4, 4, 0, 94, 4, 4, 0, 19, 0, 7, 0, 95, 4, 7, 0, 96, 4, - 7, 0, 97, 4, 84, 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, 4, 0,106, 4,176, 0, 76, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0,175, 0, 2, 0, 70, 1, 2, 0,104, 1, - 2, 0,107, 4, 7, 0,108, 4, 7, 0,109, 4, 7, 0,110, 4, 7, 0,111, 4, 7, 0,112, 4, 7, 0,113, 4, 7, 0,114, 4, - 7, 0,115, 4, 7, 0,162, 1, 7, 0,164, 1, 7, 0,163, 1, 7, 0,116, 4, 4, 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, 2, 0,125, 4, 2, 0, 69, 1, 2, 0,126, 4, - 2, 0,127, 4, 2, 0,128, 4, 2, 0,129, 4, 2, 0,130, 4, 2, 0,131, 4, 7, 0,132, 4, 7, 0,133, 4, 7, 0,134, 4, - 7, 0,135, 4, 7, 0,136, 4, 7, 0,137, 4, 7, 0,138, 4, 7, 0,139, 4, 7, 0,140, 4, 7, 0,141, 4, 7, 0,142, 4, - 7, 0,143, 4, 2, 0,144, 4, 2, 0,145, 4, 2, 0,146, 4, 2, 0,147, 4, 7, 0,148, 4, 7, 0,149, 4, 7, 0,150, 4, - 7, 0,151, 4, 2, 0,152, 4, 2, 0,153, 4, 2, 0,154, 4, 2, 0,155, 4, 7, 0,156, 4, 7, 0,157, 4, 7, 0,158, 4, - 7, 0,159, 4, 7, 0,160, 4, 2, 0,161, 4, 2, 0,162, 4, 2, 0,163, 4, 2, 0,164, 4, 2, 0,165, 4, 2, 0, 19, 0, - 7, 0,166, 4, 7, 0,167, 4, 36, 0, 80, 0, 51, 0,134, 1, 2, 0,135, 1, 2, 0,136, 1, 30, 0,150, 0,177, 0, 8, 0, -177, 0, 0, 0,177, 0, 1, 0, 4, 0,111, 3, 4, 0,168, 4, 4, 0, 19, 0, 2, 0,169, 4, 2, 0,170, 4, 32, 0,164, 0, -178, 0, 13, 0, 9, 0,171, 4, 9, 0,172, 4, 4, 0,173, 4, 4, 0,174, 4, 4, 0,175, 4, 4, 0,176, 4, 4, 0,177, 4, - 4, 0,178, 4, 4, 0,179, 4, 4, 0,180, 4, 4, 0,181, 4, 4, 0, 37, 0, 0, 0,182, 4,179, 0, 5, 0, 9, 0,183, 4, - 9, 0,184, 4, 4, 0,185, 4, 4, 0, 70, 0, 0, 0,186, 4,180, 0, 10, 0, 4, 0,187, 4, 4, 0,188, 4, 4, 0,189, 4, - 4, 0,190, 4, 4, 0,191, 4, 4, 0,192, 4, 4, 0,193, 4, 4, 0,194, 4, 4, 0,195, 4, 4, 0,196, 4,181, 0, 15, 0, - 4, 0, 17, 0, 4, 0,189, 4, 4, 0,197, 4, 4, 0,198, 4, 4, 0,199, 4, 4, 0,200, 4, 7, 0,201, 4, 4, 0,202, 4, - 4, 0, 90, 0, 4, 0,203, 4, 4, 0,204, 4, 4, 0,205, 4, 4, 0,206, 4, 4, 0,207, 4, 26, 0, 30, 0,182, 0, 7, 0, - 4, 0,208, 4, 7, 0,209, 4, 7, 0,210, 4, 7, 0,211, 4, 4, 0,212, 4, 2, 0, 19, 0, 2, 0, 37, 0,183, 0, 11, 0, -183, 0, 0, 0,183, 0, 1, 0, 0, 0, 20, 0, 66, 0,213, 4, 67, 0,214, 4, 4, 0,111, 3, 4, 0,215, 4, 4, 0,216, 4, - 4, 0, 37, 0, 4, 0,217, 4, 4, 0,218, 4,184, 0,135, 0,178, 0,219, 4,179, 0,220, 4,180, 0,221, 4,181, 0,222, 4, - 4, 0, 17, 3, 4, 0,126, 0, 4, 0, 34, 4, 4, 0,223, 4, 4, 0,224, 4, 4, 0,225, 4, 4, 0,226, 4, 2, 0, 19, 0, - 2, 0,227, 4, 7, 0,101, 2, 7, 0,228, 4, 7, 0,229, 4, 7, 0,230, 4, 7, 0,231, 4, 7, 0,232, 4, 2, 0,233, 4, - 2, 0,234, 4, 2, 0,235, 4, 2, 0,236, 4, 2, 0,246, 0, 2, 0,237, 4, 2, 0,238, 4, 2, 0,239, 4, 2, 0,240, 4, - 2, 0,241, 4, 2, 0, 91, 1, 2, 0,106, 0, 2, 0,242, 4, 2, 0,243, 4, 2, 0,244, 4, 2, 0,245, 4, 2, 0,246, 4, - 2, 0,247, 4, 2, 0,248, 4, 2, 0,249, 4, 2, 0,250, 4, 2, 0, 92, 1, 2, 0,251, 4, 2, 0,252, 4, 2, 0,253, 4, - 2, 0,254, 4, 4, 0,255, 4, 4, 0, 69, 1, 4, 0, 0, 5, 2, 0, 1, 5, 2, 0, 2, 5, 2, 0, 3, 5, 2, 0,121, 1, - 2, 0, 4, 5, 2, 0, 5, 5, 2, 0, 6, 5, 2, 0, 7, 5, 24, 0, 8, 5, 24, 0, 9, 5, 23, 0, 10, 5, 12, 0, 11, 5, - 2, 0, 12, 5, 2, 0, 37, 0, 7, 0, 13, 5, 7, 0, 14, 5, 7, 0, 15, 5, 7, 0, 16, 5, 4, 0, 17, 5, 7, 0, 18, 5, - 7, 0, 19, 5, 7, 0, 20, 5, 7, 0, 21, 5, 2, 0, 22, 5, 2, 0, 23, 5, 2, 0, 24, 5, 2, 0, 25, 5, 2, 0, 26, 5, - 2, 0, 27, 5, 7, 0, 28, 5, 7, 0, 29, 5, 7, 0, 30, 5, 2, 0, 31, 5, 2, 0, 32, 5, 2, 0, 33, 5, 2, 0, 34, 5, - 2, 0, 35, 5, 2, 0, 36, 5, 2, 0, 37, 5, 2, 0, 38, 5, 2, 0, 39, 5, 2, 0, 40, 5, 4, 0, 41, 5, 4, 0, 42, 5, - 4, 0, 43, 5, 4, 0, 44, 5, 4, 0, 45, 5, 7, 0, 46, 5, 4, 0, 47, 5, 4, 0, 48, 5, 4, 0, 49, 5, 4, 0, 50, 5, - 7, 0, 51, 5, 7, 0, 52, 5, 7, 0, 53, 5, 7, 0, 54, 5, 7, 0, 55, 5, 7, 0, 56, 5, 7, 0, 57, 5, 7, 0, 58, 5, - 7, 0, 59, 5, 0, 0, 60, 5, 0, 0, 61, 5, 4, 0, 62, 5, 2, 0, 63, 5, 2, 0,238, 1, 0, 0, 64, 5, 7, 0, 65, 5, - 7, 0, 66, 5, 4, 0, 67, 5, 4, 0, 68, 5, 7, 0, 69, 5, 7, 0, 70, 5, 2, 0, 71, 5, 2, 0, 72, 5, 7, 0, 73, 5, - 2, 0, 74, 5, 2, 0, 75, 5, 4, 0, 76, 5, 2, 0, 77, 5, 2, 0, 78, 5, 2, 0, 79, 5, 2, 0, 80, 5, 7, 0, 81, 5, - 7, 0, 70, 0, 42, 0, 82, 5, 0, 0, 83, 5,185, 0, 9, 0,185, 0, 0, 0,185, 0, 1, 0, 0, 0, 20, 0, 2, 0, 84, 5, - 2, 0, 85, 5, 2, 0, 86, 5, 2, 0, 43, 0, 7, 0, 87, 5, 7, 0, 70, 0,186, 0, 7, 0, 2, 0,210, 2, 2, 0, 69, 1, - 2, 0,109, 0, 2, 0, 88, 5, 7, 0, 89, 5, 7, 0, 70, 0, 42, 0, 90, 5,187, 0, 5, 0, 7, 0, 91, 5, 0, 0, 17, 0, - 0, 0, 43, 0, 0, 0, 70, 0, 0, 0,238, 1,188, 0, 26, 0, 7, 0,123, 4, 7, 0,124, 4, 2, 0, 69, 1, 2, 0, 19, 0, - 2, 0, 92, 5, 2, 0,136, 1, 2, 0,126, 4, 2, 0,127, 4, 2, 0,128, 4, 2, 0,129, 4, 2, 0,130, 4, 2, 0,131, 4, -187, 0, 93, 5, 2, 0,233, 4, 2, 0,234, 4, 2, 0,235, 4, 2, 0,236, 4, 2, 0,246, 0, 2, 0,237, 4, 2, 0, 94, 5, - 2, 0,238, 4,186, 0, 95, 5, 2, 0, 96, 5, 2, 0,240, 4, 2, 0,243, 4, 2, 0,244, 4,189, 0, 5, 0,189, 0, 0, 0, -189, 0, 1, 0, 4, 0,221, 3, 0, 0,233, 3, 4, 0, 19, 0,190, 0, 6, 0,191, 0, 97, 5, 4, 0, 98, 5, 4, 0, 99, 5, - 9, 0,100, 5, 0, 0,101, 5, 4, 0, 37, 0,192, 0, 6, 0,190, 0,102, 5, 2, 0, 19, 0, 2, 0,103, 5, 2, 0,104, 5, - 2, 0,105, 5, 9, 0,106, 5,193, 0, 4, 0, 2, 0,106, 0, 2, 0,221, 2, 2, 0,227, 3, 2, 0,107, 5,194, 0, 14, 0, - 2, 0, 19, 0, 2, 0,108, 5, 2, 0,109, 5, 2, 0,110, 5,193, 0,111, 5, 9, 0,106, 5, 7, 0,112, 5, 7, 0, 57, 0, - 4, 0,113, 5, 4, 0,114, 5, 4, 0,115, 5, 4, 0,116, 5, 46, 0,134, 0, 32, 0,164, 0,195, 0, 4, 0,195, 0, 0, 0, -195, 0, 1, 0, 0, 0,117, 5, 7, 0,118, 5,196, 0, 6, 0,190, 0,102, 5, 7, 0,119, 5, 4, 0, 90, 0, 0, 0,120, 5, - 0, 0,121, 5, 0, 0,190, 2,197, 0, 7, 0,190, 0,102, 5, 2, 0, 69, 1, 2, 0, 19, 0, 4, 0, 36, 0, 4, 0,122, 5, - 86, 0,123, 5, 9, 0,106, 5,198, 0, 74, 0,197, 0,124, 5,197, 0,125, 5,196, 0, 80, 3, 7, 0,126, 5, 2, 0,127, 5, - 2, 0,128, 5, 7, 0,129, 5, 7, 0,130, 5, 2, 0,227, 3, 2, 0,131, 5, 7, 0,132, 5, 7, 0,133, 5, 7, 0,134, 5, - 2, 0,135, 5, 2, 0,113, 5, 2, 0,136, 5, 2, 0,137, 5, 2, 0,138, 5, 2, 0,139, 5, 7, 0,140, 5, 7, 0,141, 5, - 7, 0,142, 5, 2, 0,143, 5, 2, 0,144, 5, 2, 0,145, 5, 2, 0,146, 5, 2, 0,147, 5, 2, 0,148, 5, 2, 0,149, 5, -192, 0,150, 5,194, 0,151, 5, 7, 0,152, 5, 7, 0,153, 5, 7, 0,154, 5, 2, 0,155, 5, 2, 0,156, 5, 0, 0,157, 5, - 0, 0,158, 5, 0, 0,159, 5, 0, 0,160, 5, 0, 0,161, 5, 0, 0,162, 5, 2, 0,163, 5, 7, 0,164, 5, 7, 0,165, 5, - 7, 0,166, 5, 7, 0,167, 5, 7, 0,168, 5, 7, 0,169, 5, 7, 0,170, 5, 7, 0,171, 5, 7, 0,172, 5, 7, 0,173, 5, - 2, 0,174, 5, 0, 0,175, 5, 0, 0,176, 5, 0, 0,177, 5, 0, 0,178, 5, 32, 0,179, 5, 0, 0,180, 5, 0, 0,181, 5, - 0, 0,182, 5, 0, 0,183, 5, 0, 0,184, 5, 0, 0,185, 5, 0, 0,186, 5, 0, 0,187, 5, 2, 0,188, 5, 2, 0,189, 5, - 2, 0,190, 5, 2, 0,191, 5, 2, 0,192, 5, 4, 0,193, 5, 4, 0,194, 5,199, 0, 8, 0, 4, 0,195, 5, 4, 0,196, 5, - 4, 0,197, 5, 4, 0,198, 5, 4, 0,199, 5, 4, 0,200, 5, 4, 0, 54, 0, 4, 0,125, 2,200, 0, 3, 0, 7, 0,201, 5, - 2, 0,202, 5, 2, 0, 19, 0,201, 0, 2, 0, 7, 0,203, 5, 4, 0, 19, 0, 46, 0, 38, 0, 27, 0, 31, 0, 39, 0, 75, 0, - 32, 0,204, 5,176, 0,205, 5, 46, 0,206, 5, 47, 0,238, 0, 12, 0,207, 5,177, 0,208, 5, 32, 0,209, 5, 7, 0,210, 5, - 7, 0,211, 5, 7, 0,212, 5, 7, 0,213, 5, 4, 0,111, 3, 2, 0, 19, 0, 2, 0, 63, 1, 60, 0, 58, 1,202, 0,214, 5, -198, 0,215, 5,203, 0,216, 5,184, 0,182, 0,182, 0,217, 5, 12, 0,100, 0, 12, 0,218, 5, 12, 0,219, 5,204, 0,220, 5, - 2, 0,221, 5, 2, 0,222, 5, 2, 0,247, 0, 2, 0,223, 5, 4, 0,224, 5, 4, 0,225, 5, 12, 0,226, 5,187, 0, 93, 5, -188, 0,227, 5,200, 0,228, 5,162, 0, 93, 3,201, 0,229, 5,205, 0, 6, 0, 47, 0,238, 0, 45, 0, 57, 1, 7, 0, 89, 2, - 7, 0, 90, 2, 7, 0,106, 0, 7, 0,230, 5,206, 0, 36, 0, 7, 0,231, 5, 7, 0,232, 5, 7, 0,233, 5, 7, 0,234, 5, - 7, 0,235, 5, 7, 0,236, 5, 7, 0,237, 5, 7, 0,238, 5, 7, 0,239, 5, 7, 0, 76, 1, 7, 0,240, 5, 7, 0,241, 5, - 7, 0,242, 5, 7, 0,243, 5, 7, 0,171, 0, 2, 0,244, 5, 2, 0,245, 5, 2, 0, 70, 2, 2, 0,246, 5, 2, 0,247, 5, - 2, 0,248, 5, 2, 0,249, 5, 7, 0,250, 5, 7, 0,251, 5, 71, 0,252, 5,162, 0, 93, 3,206, 0,253, 5,207, 0,254, 5, -208, 0,255, 5,209, 0, 0, 6,210, 0, 1, 6,211, 0, 2, 6, 7, 0, 3, 6, 2, 0, 4, 6, 2, 0, 5, 6, 4, 0,238, 1, -212, 0, 54, 0,213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, 4, 0, 7, 6, 7, 0, 8, 6, 2, 0, 9, 6, 7, 0,239, 5, - 7, 0, 76, 1, 7, 0, 43, 0, 4, 0, 10, 6, 2, 0,248, 5, 2, 0,249, 5, 32, 0,204, 5, 32, 0, 11, 6,205, 0, 12, 6, -212, 0,253, 5, 0, 0, 13, 6, 4, 0,111, 3, 4, 0, 14, 6, 2, 0, 15, 6, 2, 0, 70, 0, 2, 0, 16, 6, 2, 0, 17, 6, - 2, 0,238, 1, 2, 0, 19, 0, 2, 0, 28, 2, 2, 0, 18, 6, 7, 0,112, 0, 7, 0, 19, 6, 7, 0, 20, 6, 7, 0, 21, 6, - 7, 0, 22, 6, 7, 0, 23, 6, 7, 0,171, 0, 7, 0,210, 5, 2, 0, 24, 6, 2, 0,121, 1, 2, 0, 25, 6, 2, 0, 26, 6, - 2, 0, 27, 6, 2, 0, 28, 6, 2, 0, 29, 6, 2, 0, 30, 6, 2, 0, 31, 6, 2, 0, 32, 6, 4, 0, 33, 6, 12, 0, 34, 6, - 2, 0, 35, 6, 2, 0,139, 2, 2, 0, 36, 6, 0, 0, 37, 6, 0, 0, 38, 6, 9, 0, 39, 6,162, 0, 93, 3,214, 0, 25, 0, - 24, 0, 36, 0, 24, 0, 64, 0, 23, 0, 40, 6, 23, 0, 41, 6, 23, 0, 42, 6, 7, 0, 43, 6, 7, 0, 44, 6, 7, 0, 45, 6, - 7, 0, 46, 6, 2, 0, 47, 6, 2, 0, 48, 6, 2, 0, 49, 6, 2, 0, 50, 6, 2, 0, 51, 6, 2, 0, 19, 0, 2, 0, 52, 6, - 2, 0, 53, 6, 2, 0, 54, 6, 2, 0, 55, 6, 2, 0, 56, 6, 2, 0, 17, 6, 7, 0, 57, 6, 7, 0, 58, 6, 4, 0, 59, 6, - 4, 0, 60, 6,213, 0, 6, 0,213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, 4, 0, 7, 6, 7, 0, 8, 6, 2, 0, 9, 6, -215, 0, 8, 0,213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, 4, 0, 7, 6, 7, 0, 8, 6, 2, 0, 9, 6,216, 0, 61, 6, - 46, 0,134, 0,217, 0, 14, 0,213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, 4, 0, 7, 6, 7, 0, 8, 6, 2, 0, 9, 6, -214, 0, 62, 6,218, 0, 63, 6, 12, 0, 64, 6, 2, 0, 69, 1, 2, 0, 65, 6, 4, 0, 19, 0, 7, 0, 66, 6, 4, 0, 17, 6, -219, 0, 20, 0,213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, 4, 0, 7, 6, 7, 0, 8, 6, 2, 0, 9, 6,207, 0,254, 5, -214, 0, 62, 6, 2, 0, 67, 6, 2, 0, 68, 6, 2, 0, 69, 6, 2, 0, 70, 6, 2, 0, 52, 6, 2, 0, 71, 6, 0, 0, 19, 0, - 0, 0,136, 1, 9, 0, 65, 2, 4, 0, 72, 6, 4, 0, 73, 6, 27, 0, 74, 6,220, 0, 16, 0,213, 0, 0, 0,213, 0, 1, 0, - 12, 0, 6, 6, 4, 0, 7, 6, 7, 0, 8, 6, 2, 0, 9, 6,214, 0, 62, 6, 7, 0, 89, 2, 7, 0, 90, 2, 2, 0, 67, 6, - 2, 0, 75, 6, 2, 0, 76, 6, 2, 0, 77, 6, 4, 0, 19, 0, 7, 0, 78, 6,162, 0, 93, 3,221, 0, 16, 0, 0, 0, 79, 6, - 0, 0, 80, 6, 0, 0, 81, 6, 0, 0, 82, 6, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 83, 6, 2, 0, 84, 6, 2, 0,181, 1, - 2, 0, 85, 6, 4, 0, 86, 6, 4, 0, 87, 6, 2, 0, 88, 6, 2, 0, 89, 6, 0, 0, 90, 6, 0, 0, 91, 6,222, 0, 16, 0, -213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, 4, 0, 7, 6, 4, 0, 37, 0,221, 0, 92, 6,223, 0, 93, 6, 12, 0, 94, 6, - 12, 0, 95, 6,224, 0, 96, 6,211, 0, 97, 6,225, 0, 98, 6, 2, 0, 99, 6, 2, 0,100, 6, 2, 0,101, 6, 2, 0, 70, 0, -226, 0, 17, 0,213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, 4, 0, 7, 6, 7, 0, 8, 6, 2, 0, 9, 6,214, 0, 62, 6, - 12, 0,102, 6,227, 0,103, 6, 0, 0,104, 6,228, 0,105, 6, 4, 0,106, 6, 4, 0,107, 6, 2, 0, 19, 0, 2, 0,108, 6, - 2, 0,109, 6, 2, 0, 37, 0,229, 0, 29, 0,213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, 4, 0, 7, 6, 7, 0, 8, 6, - 2, 0, 9, 6, 47, 0,229, 2, 45, 0, 57, 1, 63, 0,110, 6, 2, 0,133, 0, 2, 0,111, 6, 2, 0, 70, 0, 2, 0,112, 6, - 4, 0, 19, 0, 2, 0,113, 6, 2, 0,114, 6, 2, 0,115, 6, 2, 0,238, 1, 0, 0,116, 6, 0, 0,117, 6, 0, 0,118, 6, - 0, 0, 17, 6, 7, 0, 89, 2, 7, 0, 90, 2, 7, 0, 78, 6, 7, 0,121, 1, 7, 0,119, 6, 7, 0,120, 6,162, 0, 93, 3, -230, 0, 11, 0,213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, 4, 0, 7, 6, 7, 0, 8, 6, 2, 0, 9, 6, 2, 0, 65, 6, - 2, 0, 19, 0, 4, 0, 37, 0,218, 0, 63, 6,214, 0, 62, 6,231, 0, 27, 0,213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, - 4, 0, 7, 6, 7, 0, 8, 6, 2, 0, 9, 6, 42, 0,121, 6, 4, 0,122, 6, 4, 0,123, 6, 2, 0, 90, 0, 2, 0,133, 0, - 2, 0,124, 6, 0, 0,125, 6, 0, 0,126, 6, 4, 0,127, 6, 4, 0,128, 6, 4, 0,129, 6, 4, 0,130, 6, 2, 0,131, 6, - 2, 0,132, 6, 7, 0,133, 6, 23, 0,134, 6, 23, 0,135, 6, 4, 0,136, 6, 4, 0,137, 6, 0, 0,138, 6, 0, 0,139, 6, -232, 0, 10, 0, 27, 0, 31, 0, 9, 0,140, 6, 9, 0,141, 6, 9, 0,142, 6, 9, 0,143, 6, 9, 0,144, 6, 4, 0, 90, 0, - 4, 0,145, 6, 0, 0,146, 6, 0, 0,147, 6,233, 0, 10, 0,213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, 4, 0, 7, 6, - 7, 0, 8, 6,232, 0,148, 6, 2, 0, 90, 0, 2, 0,133, 0, 4, 0, 43, 0, 9, 0,149, 6,234, 0, 8, 0,213, 0, 0, 0, -213, 0, 1, 0, 12, 0, 6, 6, 4, 0, 7, 6, 7, 0, 8, 6,214, 0, 62, 6, 4, 0, 19, 0, 4, 0,150, 6,235, 0, 23, 0, -213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, 4, 0, 7, 6, 7, 0, 8, 6, 2, 0, 9, 6,214, 0, 62, 6, 27, 0,151, 6, - 27, 0, 81, 0, 2, 0, 19, 0, 2, 0,133, 0, 7, 0,152, 6, 9, 0,153, 6, 7, 0, 89, 2, 7, 0, 90, 2, 7, 0,154, 6, - 7, 0,155, 6, 60, 0, 58, 1, 60, 0,156, 6, 4, 0,157, 6, 2, 0,158, 6, 2, 0, 37, 0,162, 0, 93, 3,236, 0, 10, 0, -213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, 4, 0, 7, 6, 7, 0, 8, 6, 2, 0, 9, 6, 2, 0, 19, 0, 2, 0,120, 3, - 4, 0, 37, 0,162, 0, 93, 3,237, 0, 42, 0,213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, 4, 0, 7, 6, 7, 0, 8, 6, - 2, 0, 9, 6,214, 0, 62, 6,223, 0, 93, 6, 0, 0, 79, 6, 0, 0, 80, 6, 0, 0, 81, 6, 2, 0, 17, 0, 2, 0, 89, 6, - 2, 0, 19, 0, 2, 0, 83, 6, 9, 0,153, 6, 4, 0, 86, 6, 4, 0,159, 6, 4, 0,160, 6, 4, 0, 87, 6, 23, 0,161, 6, - 23, 0,162, 6, 7, 0,163, 6, 7, 0,164, 6, 7, 0,165, 6, 7, 0,152, 6, 2, 0,166, 6, 2, 0,237, 0, 2, 0,181, 1, - 2, 0, 85, 6, 2, 0, 37, 0, 2, 0, 43, 0, 2, 0,167, 6, 2, 0,168, 6, 9, 0,169, 6, 9, 0,170, 6, 9, 0,171, 6, - 9, 0,172, 6, 9, 0,173, 6, 2, 0,174, 6, 0, 0, 91, 6, 57, 0,175, 6,238, 0, 7, 0,238, 0, 0, 0,238, 0, 1, 0, - 4, 0,176, 6, 4, 0, 23, 0, 0, 0, 84, 0, 4, 0,177, 6, 4, 0, 17, 0,239, 0, 14, 0,213, 0, 0, 0,213, 0, 1, 0, - 12, 0, 6, 6, 4, 0, 7, 6, 7, 0, 8, 6, 2, 0, 9, 6, 4, 0, 17, 0, 4, 0,178, 6, 4, 0, 19, 0, 4, 0,124, 6, - 12, 0,179, 6, 12, 0,180, 6, 0, 0,181, 6, 0, 0,182, 6,240, 0, 5, 0,213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, - 4, 0, 7, 6, 4, 0, 37, 0,241, 0, 7, 0,241, 0, 0, 0,241, 0, 1, 0, 0, 0,183, 6, 2, 0,184, 6, 2, 0,185, 6, - 2, 0,186, 6, 2, 0, 37, 0,242, 0, 12, 0, 2, 0,185, 6, 2, 0,187, 6, 2, 0,188, 6, 0, 0,190, 2, 2, 0,189, 6, - 2, 0,190, 6, 2, 0,191, 6, 2, 0,192, 6, 2, 0,193, 6, 2, 0, 52, 6, 7, 0,194, 6, 7, 0,195, 6,243, 0, 18, 0, -243, 0, 0, 0,243, 0, 1, 0, 0, 0,233, 3,242, 0,196, 6,242, 0,197, 6,242, 0,198, 6,242, 0,199, 6, 7, 0,200, 6, - 2, 0,201, 6, 2, 0,202, 6, 2, 0,203, 6, 2, 0,204, 6, 2, 0,205, 6, 2, 0,206, 6, 2, 0,207, 6, 2, 0,208, 6, - 2, 0,209, 6, 2, 0,210, 6,244, 0, 10, 0, 0, 0,211, 6, 0, 0,212, 6, 0, 0,213, 6, 0, 0,214, 6, 0, 0,215, 6, - 0, 0,216, 6, 2, 0,217, 6, 2, 0,218, 6, 2, 0,219, 6, 2, 0, 37, 0,245, 0, 8, 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, 7, 0,230, 5, 7, 0, 37, 0,246, 0, 17, 0,244, 0,226, 6, -244, 0,227, 6,244, 0,228, 6,244, 0,229, 6,244, 0,230, 6,244, 0,231, 6,244, 0,232, 6,244, 0,233, 6,244, 0,234, 6, -244, 0,235, 6,244, 0,236, 6,244, 0,237, 6,244, 0,238, 6,244, 0,239, 6,244, 0,240, 6,245, 0,241, 6, 0, 0,242, 6, -247, 0, 71, 0, 0, 0,243, 6, 0, 0,244, 6, 0, 0,215, 6, 0, 0,245, 6, 0, 0,246, 6, 0, 0,247, 6, 0, 0,248, 6, - 0, 0,249, 6, 0, 0,250, 6, 0, 0,251, 6, 0, 0,252, 6, 0, 0,253, 6, 0, 0,254, 6, 0, 0,255, 6, 0, 0, 0, 7, - 0, 0, 1, 7, 0, 0, 2, 7, 0, 0, 3, 7, 0, 0, 4, 7, 0, 0, 5, 7, 0, 0, 6, 7, 0, 0, 7, 7, 0, 0, 8, 7, - 0, 0, 9, 7, 0, 0, 10, 7, 0, 0, 11, 7, 0, 0, 12, 7, 0, 0, 13, 7, 0, 0, 14, 7, 0, 0, 15, 7, 0, 0, 16, 7, - 0, 0, 17, 7, 0, 0, 18, 7, 0, 0, 19, 7, 0, 0, 20, 7, 0, 0, 21, 7, 0, 0, 22, 7, 0, 0, 23, 7, 0, 0, 24, 7, - 0, 0, 25, 7, 0, 0, 26, 7, 0, 0, 27, 7, 0, 0, 28, 7, 0, 0, 29, 7, 0, 0, 30, 7, 0, 0, 31, 7, 0, 0, 32, 7, - 0, 0, 33, 7, 0, 0, 34, 7, 0, 0, 35, 7, 0, 0, 36, 7, 0, 0, 37, 7, 0, 0, 38, 7, 0, 0, 39, 7, 0, 0, 40, 7, - 0, 0, 41, 7, 0, 0, 42, 7, 0, 0, 43, 7, 0, 0, 44, 7, 0, 0, 45, 7, 0, 0, 46, 7, 0, 0, 47, 7, 0, 0, 48, 7, - 0, 0, 49, 7, 0, 0, 50, 7, 0, 0, 51, 7, 0, 0, 52, 7, 0, 0, 53, 7, 0, 0, 54, 7, 0, 0, 55, 7, 0, 0, 92, 0, -248, 0, 5, 0, 0, 0, 56, 7, 0, 0, 11, 7, 0, 0, 13, 7, 2, 0, 19, 0, 2, 0, 37, 0,249, 0, 24, 0,249, 0, 0, 0, -249, 0, 1, 0, 0, 0, 20, 0,246, 0, 57, 7,247, 0, 58, 7,247, 0, 59, 7,247, 0, 60, 7,247, 0, 61, 7,247, 0, 62, 7, -247, 0, 63, 7,247, 0, 64, 7,247, 0, 65, 7,247, 0, 66, 7,247, 0, 67, 7,247, 0, 68, 7,247, 0, 69, 7,247, 0, 70, 7, -247, 0, 71, 7,247, 0, 72, 7,247, 0, 73, 7,247, 0, 74, 7,248, 0, 75, 7, 4, 0, 76, 7, 4, 0, 37, 0,250, 0, 5, 0, - 4, 0, 19, 0, 4, 0, 37, 0, 7, 0,138, 2, 7, 0, 77, 7, 7, 0, 43, 2,251, 0, 73, 0, 4, 0, 19, 0, 4, 0, 78, 7, - 4, 0, 79, 7, 0, 0, 80, 7, 0, 0, 81, 7, 0, 0, 82, 7, 0, 0, 83, 7, 0, 0, 84, 7, 0, 0, 85, 7, 0, 0, 86, 7, - 0, 0, 87, 7, 0, 0, 88, 7, 2, 0, 89, 7, 2, 0, 37, 0, 4, 0, 90, 7, 4, 0, 91, 7, 4, 0, 92, 7, 4, 0, 93, 7, - 2, 0, 94, 7, 2, 0, 95, 7, 4, 0, 96, 7, 4, 0, 97, 7, 4, 0, 98, 7, 4, 0, 99, 7, 4, 0,100, 7, 4, 0,179, 6, - 4, 0,101, 7, 2, 0,102, 7, 2, 0,103, 7, 2, 0,104, 7, 2, 0,105, 7, 12, 0,106, 7, 12, 0,107, 7, 12, 0,108, 7, - 12, 0,109, 7, 0, 0,110, 7, 2, 0,111, 7, 2, 0,112, 7, 2, 0,113, 7, 2, 0,114, 7, 2, 0,115, 7, 2, 0,116, 7, - 2, 0,117, 7, 2, 0,118, 7,250, 0,119, 7, 2, 0,120, 7, 2, 0,121, 7, 2, 0,122, 7, 2, 0,123, 7, 2, 0,124, 7, - 2, 0,125, 7, 2, 0,126, 7, 2, 0,127, 7, 4, 0,128, 7, 4, 0,129, 7, 2, 0,130, 7, 2, 0,131, 7, 2, 0,132, 7, - 2, 0,133, 7, 2, 0,134, 7, 2, 0,135, 7, 2, 0,136, 7, 2, 0,137, 7, 2, 0,138, 7, 2, 0,139, 7, 2, 0,140, 7, - 2, 0,141, 7, 0, 0,142, 7, 0, 0,143, 7, 7, 0,144, 7, 2, 0,155, 5, 2, 0,156, 5, 55, 0,145, 7,216, 0, 21, 0, - 27, 0, 31, 0, 12, 0,146, 7, 12, 0,147, 7, 12, 0,148, 7, 12, 0, 6, 6, 46, 0,134, 0, 46, 0,149, 7, 2, 0,150, 7, - 2, 0,151, 7, 2, 0,152, 7, 2, 0,153, 7, 2, 0,154, 7, 2, 0,155, 7, 2, 0,156, 7, 2, 0, 37, 0, 2, 0,157, 7, - 2, 0,158, 7, 4, 0, 70, 0,211, 0,159, 7, 9, 0,160, 7, 2, 0,161, 7,252, 0, 5, 0,252, 0, 0, 0,252, 0, 1, 0, -252, 0,162, 7, 13, 0,163, 7, 4, 0, 19, 0,253, 0, 7, 0,253, 0, 0, 0,253, 0, 1, 0,252, 0,164, 7,252, 0,165, 7, - 2, 0, 9, 5, 2, 0, 19, 0, 4, 0, 37, 0,254, 0, 25, 0,254, 0, 0, 0,254, 0, 1, 0,255, 0,166, 7, 0, 1, 98, 6, - 0, 0,167, 7, 0, 0,168, 7, 0, 0,169, 7, 2, 0,170, 7, 2, 0,171, 7, 2, 0,172, 7, 2, 0,173, 7, 2, 0,174, 7, - 2, 0, 37, 0, 2, 0, 19, 0, 2, 0,175, 7, 2, 0,176, 7, 2, 0,177, 7, 4, 0,178, 7,254, 0,179, 7, 9, 0,180, 7, - 4, 0,181, 7, 4, 0,182, 7, 4, 0,183, 7, 4, 0,184, 7, 0, 0,185, 7, 1, 1, 22, 0, 1, 1, 0, 0, 1, 1, 1, 0, -252, 0,164, 7,252, 0,165, 7,252, 0,186, 7,252, 0,187, 7,216, 0,188, 7, 23, 0, 52, 0, 0, 0, 7, 6, 0, 0,189, 7, - 2, 0, 53, 6, 2, 0, 54, 6, 2, 0,190, 7, 2, 0, 37, 0, 2, 0,153, 7, 2, 0,177, 6, 2, 0, 19, 0, 2, 1,166, 7, - 12, 0,191, 7, 12, 0, 6, 6, 12, 0,192, 7, 12, 0,193, 7, 3, 1, 21, 0, 3, 1, 0, 0, 3, 1, 1, 0,214, 0, 62, 6, - 23, 0,194, 7, 23, 0,195, 7, 2, 0, 53, 6, 2, 0, 54, 6, 2, 0,196, 7, 2, 0,197, 7, 2, 0,198, 7, 2, 0, 19, 0, - 7, 0, 85, 2, 2, 0,152, 7, 2, 0,156, 7, 4, 0, 43, 0, 4, 1,166, 7, 12, 0,199, 7, 12, 0,200, 7, 12, 0,192, 7, - 0, 0,201, 7, 9, 0,202, 7, 5, 1, 12, 0, 0, 0,203, 7, 2, 0,204, 7, 2, 0,205, 7, 2, 0,206, 7, 2, 0,207, 7, - 2, 0,252, 4, 2, 0,247, 4,216, 0,208, 7, 46, 0,209, 7, 4, 0,210, 7, 4, 0,211, 7, 0, 0, 35, 0, 6, 1, 1, 0, - 0, 0,212, 7, 7, 1, 8, 0, 57, 0,213, 7, 57, 0,214, 7, 7, 1,215, 7, 7, 1,216, 7, 7, 1,217, 7, 2, 0,129, 0, - 2, 0, 19, 0, 4, 0,218, 7, 8, 1, 4, 0, 4, 0,122, 6, 4, 0,219, 7, 4, 0,127, 6, 4, 0,220, 7, 9, 1, 2, 0, - 4, 0,221, 7, 4, 0,222, 7, 10, 1, 7, 0, 7, 0,223, 7, 7, 0,224, 7, 7, 0,225, 7, 4, 0, 19, 0, 4, 0, 37, 0, - 7, 0,118, 4, 7, 0,226, 7, 11, 1, 6, 0, 0, 0,227, 7, 0, 0, 81, 6, 49, 0,137, 0, 2, 0,106, 0, 2, 0,251, 4, - 4, 0, 37, 0, 12, 1, 21, 0, 12, 1, 0, 0, 12, 1, 1, 0, 4, 0, 57, 0, 4, 0, 23, 0, 4, 0, 28, 0, 4, 0,228, 7, - 4, 0,229, 7, 4, 0,230, 7, 6, 1,231, 7, 0, 0,227, 7, 4, 0,232, 7, 4, 0,233, 7, 11, 1, 87, 3, 8, 1,234, 7, - 9, 1,235, 7, 10, 1,236, 7, 7, 1,237, 7, 7, 1,238, 7, 7, 1,239, 7, 57, 0,240, 7, 57, 0,241, 7, 13, 1, 12, 0, - 0, 0, 5, 2, 9, 0,223, 0, 0, 0,224, 0, 4, 0,227, 0, 4, 0,235, 0, 9, 0,228, 0, 7, 0,230, 0, 7, 0,231, 0, - 9, 0,242, 7, 9, 0,243, 7, 9, 0,232, 0, 9, 0,234, 0, 14, 1, 43, 0, 14, 1, 0, 0, 14, 1, 1, 0, 9, 0,244, 7, - 9, 0, 26, 0, 0, 0, 27, 0, 4, 0, 19, 0, 4, 0, 17, 0, 4, 0, 23, 0, 4, 0, 88, 0, 4, 0,245, 7, 4, 0,246, 7, - 4, 0,229, 7, 4, 0,230, 7, 4, 0,247, 7, 4, 0,246, 0, 4, 0,248, 7, 4, 0,249, 7, 7, 0,250, 7, 7, 0,251, 7, - 4, 0,126, 0, 4, 0,252, 7, 12, 1,253, 7, 36, 0, 80, 0, 46, 0,134, 0, 49, 0,137, 0, 7, 0,254, 7, 7, 0,255, 7, - 13, 1, 59, 1, 14, 1, 0, 8, 14, 1, 1, 8, 14, 1, 2, 8, 12, 0, 3, 8, 15, 1, 4, 8, 16, 1, 5, 8, 7, 0, 6, 8, - 7, 0, 7, 8, 4, 0, 8, 8, 7, 0, 9, 8, 9, 0, 10, 8, 4, 0, 11, 8, 4, 0, 12, 8, 4, 0, 13, 8, 7, 0, 14, 8, - 17, 1, 4, 0, 17, 1, 0, 0, 17, 1, 1, 0, 12, 0, 15, 8, 14, 1, 16, 8,202, 0, 6, 0, 12, 0, 17, 8, 12, 0, 3, 8, - 12, 0, 18, 8, 14, 1, 19, 8, 0, 0, 20, 8, 0, 0, 21, 8, 18, 1, 4, 0, 7, 0, 22, 8, 7, 0,109, 0, 2, 0, 23, 8, - 2, 0, 24, 8, 19, 1, 6, 0, 7, 0, 25, 8, 7, 0, 26, 8, 7, 0, 27, 8, 7, 0, 28, 8, 4, 0, 29, 8, 4, 0, 30, 8, - 20, 1, 12, 0, 7, 0, 31, 8, 7, 0, 32, 8, 7, 0, 33, 8, 7, 0, 34, 8, 7, 0, 35, 8, 7, 0, 36, 8, 7, 0, 37, 8, - 7, 0, 38, 8, 7, 0, 39, 8, 7, 0, 40, 8, 4, 0,233, 2, 4, 0, 41, 8, 21, 1, 2, 0, 7, 0, 91, 5, 7, 0, 37, 0, - 22, 1, 5, 0, 7, 0, 42, 8, 7, 0, 43, 8, 4, 0, 90, 0, 4, 0,191, 2, 4, 0, 44, 8, 23, 1, 6, 0, 23, 1, 0, 0, - 23, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 45, 8, 2, 0, 57, 0, 24, 1, 8, 0, 24, 1, 0, 0, 24, 1, 1, 0, - 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 45, 8, 2, 0, 57, 0, 7, 0, 23, 0, 7, 0,126, 0, 25, 1, 45, 0, 25, 1, 0, 0, - 25, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 45, 8, 2, 0,242, 0, 2, 0, 28, 4, 2, 0, 46, 8, 7, 0, 47, 8, - 7, 0, 89, 0, 7, 0,246, 2, 4, 0, 48, 8, 4, 0, 82, 0, 4, 0,193, 2, 7, 0, 49, 8, 7, 0, 50, 8, 7, 0, 51, 8, - 7, 0, 52, 8, 7, 0, 53, 8, 7, 0, 54, 8, 7, 0,243, 2, 7, 0, 56, 1, 7, 0, 55, 8, 7, 0, 56, 8, 7, 0, 37, 0, - 7, 0, 57, 8, 7, 0, 58, 8, 7, 0, 59, 8, 2, 0, 60, 8, 2, 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, 28, 2, 2, 0, 68, 8, 2, 0, 25, 2, 2, 0, 69, 8, 0, 0, 70, 8, - 0, 0, 71, 8, 7, 0,240, 0, 26, 1, 72, 8, 67, 0,241, 1, 27, 1, 16, 0, 27, 1, 0, 0, 27, 1, 1, 0, 2, 0, 17, 0, - 2, 0, 19, 0, 2, 0, 45, 8, 2, 0,242, 0, 7, 0,238, 2, 7, 0,239, 2, 7, 0,240, 2, 7, 0, 74, 2, 7, 0,241, 2, - 7, 0,242, 2, 7, 0, 73, 8, 7, 0,243, 2, 7, 0,245, 2, 7, 0,246, 2,228, 0, 5, 0, 2, 0, 17, 0, 2, 0,218, 7, - 2, 0, 19, 0, 2, 0, 74, 8, 27, 0,151, 6,227, 0, 3, 0, 4, 0, 69, 0, 4, 0, 75, 8,228, 0, 2, 0, 28, 1, 7, 0, - 28, 1, 0, 0, 28, 1, 1, 0, 0, 0, 20, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 22, 0, 9, 0, 76, 8, 29, 1, 5, 0, - 0, 0, 20, 0, 7, 0, 76, 1, 7, 0, 77, 8, 4, 0, 78, 8, 4, 0, 37, 0, 30, 1, 4, 0, 2, 0, 17, 0, 2, 0, 19, 0, - 2, 0, 43, 0, 2, 0, 70, 0, 31, 1, 4, 0, 0, 0, 20, 0, 66, 0, 79, 8, 7, 0, 76, 1, 7, 0, 37, 0, 32, 1, 6, 0, - 2, 0, 80, 8, 2, 0, 81, 8, 2, 0, 17, 0, 2, 0, 82, 8, 0, 0, 83, 8, 0, 0, 84, 8, 33, 1, 5, 0, 4, 0, 17, 0, - 4, 0, 37, 0, 0, 0, 20, 0, 0, 0, 85, 8, 0, 0, 86, 8, 34, 1, 3, 0, 4, 0, 17, 0, 4, 0, 37, 0, 0, 0, 20, 0, - 35, 1, 4, 0, 2, 0, 87, 8, 2, 0, 88, 8, 2, 0, 19, 0, 2, 0, 37, 0, 36, 1, 6, 0, 0, 0, 20, 0, 0, 0, 89, 8, - 2, 0, 90, 8, 2, 0,243, 2, 2, 0, 69, 1, 2, 0, 70, 0, 37, 1, 5, 0, 0, 0, 20, 0, 7, 0,109, 0, 7, 0,120, 4, - 2, 0, 19, 0, 2, 0,205, 2, 38, 1, 3, 0, 0, 0, 20, 0, 4, 0,193, 2, 4, 0, 87, 8, 39, 1, 7, 0, 0, 0, 20, 0, - 7, 0,120, 4, 0, 0, 91, 8, 0, 0, 92, 8, 2, 0, 69, 1, 2, 0, 43, 0, 4, 0, 93, 8, 40, 1, 4, 0, 0, 0, 94, 8, - 0, 0, 95, 8, 4, 0, 17, 0, 7, 0,209, 2, 41, 1, 3, 0, 32, 0, 96, 8, 0, 0, 97, 8, 0, 0, 98, 8, 42, 1, 18, 0, - 42, 1, 0, 0, 42, 1, 1, 0, 2, 0, 17, 0, 2, 0, 99, 8, 2, 0, 19, 0, 2, 0,100, 8, 2, 0,101, 8, 2, 0,102, 8, - 2, 0, 43, 0, 2, 0, 70, 0, 0, 0, 20, 0, 9, 0, 2, 0, 43, 1,103, 8, 32, 0, 45, 0, 2, 0,107, 5, 2, 0, 6, 8, - 2, 0,104, 8, 2, 0, 37, 0, 44, 1, 11, 0, 0, 0, 20, 0, 0, 0, 17, 0, 0, 0,105, 8, 2, 0, 19, 0, 2, 0,205, 2, - 2, 0,106, 8, 4, 0,107, 8, 4, 0,108, 8, 4, 0,109, 8, 4, 0,110, 8, 4, 0,111, 8, 45, 1, 1, 0, 0, 0,112, 8, - 46, 1, 4, 0, 42, 0,121, 6, 0, 0,113, 8, 4, 0, 69, 1, 4, 0, 19, 0, 43, 1, 18, 0, 43, 1, 0, 0, 43, 1, 1, 0, - 43, 1,114, 8, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,115, 8, 2, 0,102, 8, 2, 0, 99, 8, 2, 0,116, 8, 2, 0, 70, 0, - 2, 0,238, 1, 0, 0, 20, 0, 9, 0, 2, 0, 47, 1,103, 8, 42, 1,117, 8, 2, 0, 15, 0, 2, 0,118, 8, 4, 0,119, 8, - 48, 1, 3, 0, 4, 0,219, 2, 4, 0, 37, 0, 32, 0, 45, 0, 49, 1, 12, 0,160, 0,120, 8, 2, 0, 17, 0, 2, 0, 19, 0, - 4, 0, 47, 8, 4, 0, 89, 0, 0, 0, 20, 0, 0, 0,121, 8, 2, 0,122, 8, 2, 0,123, 8, 2, 0,124, 8, 2, 0,125, 8, - 7, 0,126, 8, 50, 1, 13, 0, 2, 0, 19, 0, 2, 0,127, 8, 4, 0, 47, 8, 4, 0, 89, 0, 2, 0,128, 8, 7, 0,242, 3, - 7, 0,129, 8, 15, 1, 4, 8, 51, 1,130, 8, 2, 0, 17, 0, 2, 0,131, 8, 2, 0,132, 8, 2, 0,133, 8, 52, 1, 11, 0, - 4, 0,219, 2, 2, 0, 17, 0, 2, 0, 19, 0, 32, 0, 45, 0, 80, 0,134, 8, 0, 0, 20, 0, 7, 0,135, 8, 7, 0,136, 8, - 7, 0,128, 3, 2, 0,137, 8, 2, 0,138, 8, 53, 1, 5, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 37, 0, 46, 0,134, 0, - 32, 0,204, 5, 54, 1, 5, 0, 4, 0, 19, 0, 4, 0, 17, 0, 0, 0, 20, 0, 0, 0, 85, 8, 32, 0, 45, 0, 55, 1, 13, 0, - 2, 0, 19, 0, 2, 0, 17, 0, 2, 0, 99, 8, 2, 0,129, 3, 7, 0,139, 8, 7, 0,140, 8, 7, 0, 64, 1, 7, 0, 65, 1, - 7, 0,100, 3, 7, 0,103, 3, 7, 0,141, 8, 7, 0,142, 8, 32, 0,143, 8, 56, 1, 10, 0, 2, 0, 19, 0, 2, 0, 17, 0, - 4, 0, 47, 8, 4, 0, 89, 0, 0, 0, 20, 0, 0, 0,121, 8, 2, 0, 43, 0, 2, 0, 64, 0, 2, 0,144, 8, 2, 0,145, 8, - 57, 1, 8, 0, 32, 0, 45, 0, 7, 0,240, 2, 7, 0,146, 8, 7, 0,147, 8, 7, 0,235, 2, 2, 0, 19, 0, 2, 0,205, 2, - 7, 0,148, 8, 58, 1, 12, 0, 2, 0, 17, 0, 2, 0, 69, 1, 2, 0, 19, 0, 2, 0,243, 2, 2, 0,219, 2, 2, 0,149, 8, - 4, 0, 37, 0, 7, 0,150, 8, 7, 0,151, 8, 7, 0,152, 8, 7, 0,153, 8, 0, 0,154, 8, 59, 1, 9, 0, 2, 0, 19, 0, - 2, 0, 17, 0, 4, 0, 47, 8, 4, 0, 89, 0, 0, 0, 20, 0, 2, 0,136, 1, 2, 0, 64, 0, 2, 0,144, 8, 2, 0,145, 8, - 60, 1, 7, 0, 4, 0,193, 2, 4, 0,155, 8, 4, 0,156, 8, 4, 0,157, 8, 7, 0,158, 8, 7, 0,159, 8, 0, 0, 91, 8, - 61, 1, 7, 0, 0, 0,160, 8, 32, 0,161, 8, 0, 0, 97, 8, 2, 0,162, 8, 2, 0, 43, 0, 4, 0, 70, 0, 0, 0, 98, 8, - 62, 1, 6, 0, 2, 0, 19, 0, 2, 0, 17, 0, 4, 0, 47, 8, 4, 0, 89, 0, 0, 0,163, 8, 0, 0,164, 8, 63, 1, 1, 0, - 4, 0, 19, 0, 64, 1, 6, 0, 0, 0, 92, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0,165, 8, 7, 0,166, 8, 42, 0,121, 6, - 65, 1, 4, 0, 0, 0, 70, 2, 2, 0, 19, 0, 4, 0, 17, 0, 32, 0, 45, 0, 66, 1, 2, 0, 4, 0, 17, 0, 4, 0, 42, 6, - 67, 1, 6, 0, 0, 0, 94, 8, 0, 0, 95, 8, 4, 0, 17, 0, 7, 0, 36, 2, 32, 0, 50, 3, 32, 0,167, 8, 47, 1, 10, 0, - 47, 1, 0, 0, 47, 1, 1, 0, 47, 1,114, 8, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 99, 8, 2, 0,168, 8, 0, 0, 20, 0, - 9, 0, 2, 0, 32, 0, 45, 0, 68, 1, 10, 0, 7, 0,128, 3, 7, 0,169, 8, 7, 0,170, 8, 7, 0,171, 8, 7, 0,172, 8, - 4, 0, 19, 0, 7, 0,149, 8, 7, 0,173, 8, 7, 0,174, 8, 7, 0, 37, 0, 16, 1, 12, 0, 16, 1, 0, 0, 16, 1, 1, 0, - 15, 1,175, 8, 9, 0,223, 0, 4, 0,171, 3, 4, 0,229, 3, 4, 0,230, 3, 4, 0,176, 8, 4, 0,177, 8, 4, 0,178, 8, - 7, 0,242, 3, 7, 0, 37, 0, 51, 1, 8, 0, 7, 0,179, 8, 7, 0,180, 8, 7, 0,181, 8, 7, 0,182, 8, 7, 0,183, 8, - 7, 0,184, 8, 7, 0,185, 8, 7, 0,186, 8, 15, 1, 15, 0, 27, 0, 31, 0, 0, 0,222, 0, 43, 0,149, 0, 9, 0,223, 0, - 43, 0,187, 8, 36, 0, 80, 0, 7, 0,242, 3, 7, 0,188, 8, 7, 0,129, 8, 7, 0,179, 8, 7, 0,180, 8, 7, 0,189, 8, - 4, 0, 90, 0, 4, 0,178, 8, 9, 0,190, 8, 69, 1, 15, 0,213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, 4, 0, 7, 6, - 7, 0, 8, 6, 1, 1,191, 8,214, 0, 62, 6, 15, 1, 4, 8, 2, 0, 69, 1, 2, 0,127, 8, 2, 0, 89, 2, 2, 0, 90, 2, - 2, 0, 19, 0, 2, 0,114, 6, 4, 0, 70, 0, 70, 1, 6, 0, 70, 1, 0, 0, 70, 1, 1, 0, 32, 0, 45, 0, 9, 0,192, 8, - 4, 0,247, 0, 4, 0, 37, 0, 67, 0, 4, 0, 27, 0, 31, 0, 12, 0,193, 8, 4, 0,131, 0, 7, 0,194, 8, 71, 1, 27, 0, - 71, 1, 0, 0, 71, 1, 1, 0, 26, 0,195, 8, 71, 1, 38, 0, 12, 0,196, 8, 0, 0, 20, 0, 7, 0,197, 8, 7, 0,198, 8, - 7, 0,199, 8, 7, 0,200, 8, 4, 0, 19, 0, 7, 0,201, 8, 7, 0,202, 8, 7, 0,203, 8, 7, 0, 76, 1, 7, 0, 36, 2, - 7, 0,204, 8, 7, 0,191, 2, 7, 0,205, 8, 7, 0,206, 8, 7, 0,207, 8, 7, 0,208, 8, 7, 0,209, 8, 7, 0,172, 0, - 4, 0,131, 0, 2, 0,136, 5, 2, 0,136, 1, 72, 1, 25, 0, 27, 0, 31, 0, 39, 0, 75, 0, 12, 0,210, 8, 12, 0,211, 8, - 12, 0,212, 8, 71, 1,213, 8, 9, 0,214, 8, 9, 0,215, 8, 4, 0, 19, 0, 4, 0, 15, 6, 2, 0,247, 2, 2, 0, 72, 6, - 4, 0, 37, 0, 4, 0,131, 0, 4, 0,216, 8, 2, 0,217, 8, 2, 0,218, 8, 2, 0,219, 8, 2, 0,220, 8, 4, 0,221, 8, - 4, 0,222, 8, 4, 0,223, 8, 4, 0,224, 8, 4, 0,225, 8, 4, 0,226, 8, 73, 1, 2, 0, 7, 0,152, 2, 4, 0, 19, 0, - 74, 1, 5, 0, 73, 1,227, 8, 4, 0,191, 2, 4, 0,228, 8, 4, 0,229, 8, 4, 0, 19, 0, 75, 1, 6, 0, 4, 0, 37, 0, - 4, 0, 72, 6, 4, 0,223, 8, 4, 0,224, 8, 4, 0,225, 8, 4, 0,226, 8, 76, 1, 42, 0, 76, 1, 0, 0, 76, 1, 1, 0, - 26, 0,195, 8, 12, 0,155, 3, 0, 0, 20, 0, 2, 0, 19, 0, 2, 0,230, 8, 2, 0,231, 8, 2, 0,232, 8, 2, 0,114, 3, - 2, 0,233, 8, 4, 0, 72, 2, 4, 0,223, 8, 4, 0,224, 8, 71, 1,234, 8, 76, 1, 38, 0, 76, 1,235, 8, 12, 0,236, 8, - 9, 0,237, 8, 9, 0,238, 8, 9, 0,239, 8, 7, 0, 64, 1, 7, 0,172, 0, 7, 0,240, 8, 7, 0, 15, 2, 7, 0,105, 3, - 7, 0,107, 3, 2, 0,137, 3, 2, 0, 37, 0, 7, 0,241, 8, 7, 0,242, 8, 7, 0,110, 3, 7, 0,243, 8, 7, 0,244, 8, - 7, 0,245, 8, 7, 0,246, 8, 7, 0,247, 8, 7, 0,248, 8, 7, 0,249, 8, 7, 0,250, 8, 7, 0, 65, 2, 32, 0,251, 8, -161, 0, 11, 0, 12, 0,252, 8, 2, 0, 19, 0, 2, 0,253, 8, 7, 0,101, 2, 7, 0,254, 8, 7, 0,255, 8, 12, 0, 0, 9, - 4, 0, 1, 9, 4, 0, 2, 9, 9, 0, 3, 9, 9, 0, 4, 9, 77, 1, 1, 0, 4, 0, 2, 9, 78, 1, 12, 0, 4, 0, 2, 9, - 7, 0,111, 8, 2, 0, 5, 9, 2, 0, 6, 9, 7, 0, 7, 9, 7, 0, 8, 9, 2, 0, 9, 9, 2, 0, 19, 0, 7, 0, 10, 9, - 7, 0, 11, 9, 7, 0, 12, 9, 7, 0, 13, 9, 79, 1, 7, 0, 79, 1, 0, 0, 79, 1, 1, 0, 12, 0, 14, 9, 4, 0, 19, 0, - 4, 0, 15, 9, 0, 0,233, 3,248, 0, 16, 9,160, 0, 7, 0, 27, 0, 31, 0, 12, 0, 17, 9, 12, 0,252, 8, 12, 0, 18, 9, - 12, 0,100, 0, 4, 0, 19, 0, 4, 0, 19, 9,218, 0, 4, 0, 27, 0,175, 8, 12, 0,252, 8, 4, 0, 20, 9, 4, 0, 19, 0, - 80, 1, 17, 0,213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, 4, 0, 7, 6, 7, 0, 8, 6, 2, 0, 9, 6,214, 0, 62, 6, -160, 0, 90, 3,218, 0, 21, 9, 0, 0, 69, 1, 0, 0, 65, 6, 2, 0, 19, 0, 2, 0, 22, 9, 2, 0,115, 6, 2, 0,114, 6, - 2, 0, 23, 9, 7, 0, 24, 9, 81, 1, 8, 0, 81, 1, 0, 0, 81, 1, 1, 0, 79, 1, 25, 9, 36, 0, 80, 0, 12, 0, 94, 3, - 4, 0, 19, 0, 0, 0, 20, 0, 4, 0, 26, 9, 82, 1, 5, 0, 82, 1, 0, 0, 82, 1, 1, 0, 36, 0, 80, 0, 2, 0, 19, 0, - 0, 0, 27, 9, 83, 1, 14, 0, 83, 1, 0, 0, 83, 1, 1, 0, 9, 0, 2, 0, 2, 0, 17, 0, 2, 0, 19, 0, 0, 0, 28, 9, - 0, 0, 29, 9, 0, 0, 27, 9, 7, 0, 30, 9, 7, 0, 31, 9, 4, 0, 37, 0, 36, 0, 80, 0, 7, 0, 32, 9, 7, 0, 33, 9, - 84, 1, 9, 0, 84, 1, 0, 0, 84, 1, 1, 0, 32, 0, 34, 9, 0, 0,250, 2, 7, 0, 35, 9, 2, 0, 36, 9, 2, 0, 19, 0, - 2, 0, 17, 0, 2, 0, 37, 9, 85, 1, 7, 0, 42, 0,121, 6, 26, 0,195, 8, 4, 0, 19, 0, 4, 0, 38, 9, 12, 0, 39, 9, - 32, 0, 34, 9, 0, 0,250, 2, 86, 1, 15, 0, 32, 0, 34, 9, 2, 0, 40, 9, 2, 0, 19, 0, 2, 0, 41, 9, 2, 0, 42, 9, - 0, 0,250, 2, 32, 0, 43, 9, 0, 0, 44, 9, 7, 0, 45, 9, 7, 0, 36, 2, 7, 0, 46, 9, 7, 0, 47, 9, 2, 0, 17, 0, - 2, 0, 69, 1, 7, 0, 76, 1, 87, 1, 6, 0, 32, 0, 34, 9, 7, 0,227, 8, 2, 0, 48, 9, 2, 0, 49, 9, 2, 0, 19, 0, - 2, 0, 50, 9, 88, 1, 6, 0, 32, 0, 34, 9, 4, 0, 51, 9, 4, 0, 52, 9, 4, 0, 90, 0, 4, 0, 37, 0, 0, 0,250, 2, - 89, 1, 4, 0, 32, 0, 34, 9, 4, 0, 19, 0, 4, 0, 51, 9, 0, 0,250, 2, 90, 1, 4, 0, 32, 0, 34, 9, 4, 0, 19, 0, - 4, 0, 51, 9, 0, 0,250, 2, 91, 1, 10, 0, 32, 0, 34, 9, 4, 0, 53, 9, 7, 0,125, 0, 4, 0, 19, 0, 2, 0,117, 6, - 2, 0, 54, 9, 2, 0, 43, 0, 2, 0, 70, 0, 7, 0, 55, 9, 0, 0,250, 2, 92, 1, 4, 0, 32, 0, 34, 9, 4, 0, 19, 0, - 4, 0, 51, 9, 0, 0,250, 2, 93, 1, 10, 0, 32, 0, 34, 9, 2, 0, 17, 0, 2, 0, 36, 4, 4, 0, 88, 0, 4, 0, 89, 0, - 7, 0,146, 8, 7, 0,147, 8, 4, 0, 37, 0,160, 0,120, 8, 0, 0,250, 2, 94, 1, 4, 0, 32, 0, 34, 9, 4, 0,115, 3, - 4, 0, 56, 9, 0, 0,250, 2, 95, 1, 4, 0, 32, 0, 34, 9, 4, 0,115, 3, 4, 0, 37, 0, 0, 0,250, 2, 96, 1, 5, 0, - 32, 0, 34, 9, 7, 0,125, 0, 4, 0, 57, 9, 4, 0,115, 3, 4, 0,116, 3, 97, 1, 6, 0, 32, 0, 34, 9, 4, 0, 58, 9, - 4, 0, 59, 9, 7, 0, 60, 9, 7, 0, 61, 9, 0, 0,250, 2, 98, 1, 16, 0, 32, 0, 34, 9, 32, 0,235, 8, 4, 0, 17, 0, - 7, 0, 62, 9, 7, 0, 63, 9, 7, 0, 64, 9, 7, 0, 65, 9, 7, 0, 66, 9, 7, 0, 67, 9, 7, 0, 68, 9, 7, 0, 69, 9, - 7, 0, 70, 9, 2, 0, 19, 0, 2, 0, 37, 0, 2, 0, 43, 0, 2, 0, 70, 0, 99, 1, 3, 0, 32, 0, 34, 9, 4, 0, 19, 0, - 4, 0, 28, 2,100, 1, 5, 0, 32, 0, 34, 9, 4, 0, 19, 0, 4, 0, 37, 0, 7, 0, 71, 9, 0, 0,250, 2,101, 1, 10, 0, - 32, 0, 34, 9, 0, 0,250, 2, 2, 0, 72, 9, 2, 0, 73, 9, 0, 0, 74, 9, 0, 0, 75, 9, 7, 0, 76, 9, 7, 0, 77, 9, - 7, 0, 78, 9, 7, 0, 79, 9,102, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 7, 0, 80, 9, - 7, 0, 81, 9, 2, 0, 19, 0, 2, 0, 28, 2,103, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, - 7, 0, 80, 9, 7, 0, 81, 9, 2, 0, 19, 0, 2, 0, 28, 2,104, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, - 7, 0, 12, 0, 7, 0, 80, 9, 7, 0, 81, 9, 2, 0, 19, 0, 2, 0, 28, 2,105, 1, 7, 0, 32, 0, 34, 9, 0, 0,250, 2, - 7, 0, 76, 1, 7, 0, 85, 1, 2, 0, 19, 0, 2, 0, 69, 1, 4, 0, 37, 0,106, 1, 5, 0, 32, 0, 50, 3, 7, 0, 76, 1, - 2, 0, 54, 3, 0, 0, 56, 3, 0, 0, 82, 9,107, 1, 10, 0,107, 1, 0, 0,107, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, - 0, 0, 83, 9, 7, 0, 20, 1, 7, 0, 21, 1, 2, 0, 14, 9, 2, 0, 84, 9, 32, 0, 45, 0,108, 1, 22, 0,108, 1, 0, 0, -108, 1, 1, 0, 2, 0, 19, 0, 2, 0, 69, 1, 2, 0, 85, 9, 2, 0, 86, 9, 36, 0, 80, 0,160, 0,120, 8, 32, 0,164, 0, - 7, 0, 88, 0, 7, 0, 89, 0, 7, 0, 87, 9, 7, 0, 88, 9, 7, 0, 89, 9, 7, 0, 90, 9, 7, 0,236, 2, 7, 0, 91, 9, - 7, 0,122, 8, 7, 0, 92, 9, 0, 0, 93, 9, 0, 0, 94, 9, 12, 0, 96, 3,109, 1, 8, 0, 7, 0, 43, 2, 7, 0,146, 8, - 7, 0,147, 8, 9, 0, 2, 0, 2, 0, 95, 9, 2, 0, 96, 9, 2, 0, 97, 9, 2, 0, 98, 9,110, 1, 18, 0,110, 1, 0, 0, -110, 1, 1, 0,110, 1, 99, 9, 0, 0, 20, 0,109, 1,100, 9, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,101, 9, 2, 0,102, 9, - 2, 0,103, 9, 2, 0,104, 9, 4, 0, 43, 0, 7, 0,105, 9, 7, 0,106, 9, 4, 0,107, 9, 4, 0,108, 9,110, 1,109, 9, -111, 1,110, 9,112, 1, 33, 0,112, 1, 0, 0,112, 1, 1, 0,112, 1,111, 9, 0, 0, 20, 0, 2, 0, 17, 0, 2, 0, 19, 0, - 2, 0,228, 7, 2, 0, 6, 8, 2, 0,112, 9, 2, 0,133, 0, 2, 0,102, 9, 2, 0,218, 7, 12, 0,115, 8, 12, 0,113, 9, - 27, 0,151, 6, 9, 0,114, 9, 7, 0,105, 9, 7, 0,106, 9, 7, 0, 74, 2, 7, 0,115, 9, 2, 0,116, 9, 2, 0,117, 9, - 7, 0,118, 9, 7, 0,119, 9, 2, 0,120, 9, 2, 0,121, 9, 9, 0,122, 9, 24, 0,123, 9, 24, 0,124, 9, 24, 0,125, 9, -113, 1,150, 0,114, 1,126, 9,115, 1,127, 9,111, 1, 8, 0,111, 1, 0, 0,111, 1, 1, 0,112, 1,128, 9,112, 1,129, 9, -110, 1,130, 9,110, 1,109, 9, 4, 0, 19, 0, 4, 0, 37, 0, 60, 0, 23, 0, 27, 0, 31, 0, 39, 0, 75, 0,162, 0, 93, 3, - 12, 0,131, 9, 12, 0,132, 9,109, 1,133, 9, 12, 0,134, 9, 4, 0, 17, 0, 4, 0,135, 9, 4, 0,136, 9, 4, 0,137, 9, - 4, 0, 19, 0, 4, 0, 37, 0, 12, 0,138, 9,115, 1,139, 9,110, 1,140, 9,110, 1,141, 9, 9, 0,142, 9, 9, 0,143, 9, - 4, 0,144, 9, 9, 0,145, 9, 9, 0,146, 9, 9, 0,147, 9,116, 1, 6, 0, 4, 0,124, 0, 4, 0,126, 0, 4, 0,218, 7, - 0, 0,148, 9, 0, 0,149, 9, 2, 0, 37, 0,117, 1, 16, 0, 2, 0,172, 7, 2, 0,173, 7, 2, 0,150, 9, 2, 0,170, 8, - 2, 0,151, 9, 2, 0, 68, 0, 7, 0,235, 2, 7, 0,152, 9, 7, 0,153, 9, 2, 0, 91, 1, 0, 0,154, 9, 0, 0,155, 9, - 2, 0,156, 9, 2, 0, 37, 0, 4, 0,157, 9, 4, 0,158, 9,118, 1, 9, 0, 7, 0,159, 9, 7, 0,160, 9, 7, 0,189, 8, - 7, 0,109, 0, 7, 0,161, 9, 7, 0, 78, 6, 2, 0,162, 9, 0, 0,163, 9, 0, 0, 37, 0,119, 1, 4, 0, 7, 0,164, 9, - 7, 0,165, 9, 2, 0,162, 9, 2, 0, 37, 0,120, 1, 3, 0, 7, 0,166, 9, 7, 0,167, 9, 7, 0, 15, 0,121, 1, 7, 0, - 0, 0, 5, 2, 2, 0,249, 4, 2, 0,250, 4, 2, 0,251, 4, 2, 0,189, 4, 4, 0,126, 0, 4, 0, 34, 4,122, 1, 7, 0, - 7, 0,168, 9, 7, 0,169, 9, 7, 0,170, 9, 7, 0, 85, 2, 7, 0,171, 9, 7, 0,172, 9, 7, 0,173, 9,123, 1, 4, 0, - 2, 0,174, 9, 2, 0,175, 9, 2, 0,176, 9, 2, 0,177, 9,124, 1, 2, 0, 7, 0, 5, 0, 7, 0, 6, 0,125, 1, 2, 0, - 0, 0,166, 0, 0, 0,178, 9,126, 1, 1, 0, 0, 0, 20, 0,127, 1, 10, 0, 0, 0,179, 9, 0, 0,180, 9, 0, 0, 71, 6, - 0, 0,181, 9, 2, 0,150, 9, 2, 0,182, 9, 7, 0,183, 9, 7, 0,184, 9, 7, 0,185, 9, 7, 0, 91, 9,128, 1, 2, 0, - 9, 0,186, 9, 9, 0,187, 9,129, 1, 11, 0, 0, 0,251, 4, 0, 0, 17, 0, 0, 0,162, 9, 0, 0,109, 0, 0, 0,188, 9, - 0, 0,106, 0, 0, 0, 70, 2, 7, 0,189, 9, 7, 0,190, 9, 7, 0,191, 9, 7, 0,192, 9,130, 1, 8, 0, 7, 0, 80, 8, - 7, 0,125, 0, 7, 0,155, 9, 7, 0,157, 2, 7, 0,193, 9, 7, 0,236, 0, 7, 0,194, 9, 4, 0, 17, 0,131, 1, 4, 0, - 2, 0,195, 9, 2, 0,196, 9, 2, 0,197, 9, 2, 0, 37, 0,132, 1, 1, 0, 0, 0, 20, 0,133, 1, 4, 0, 7, 0, 5, 0, - 7, 0, 6, 0, 2, 0, 19, 0, 2, 0,198, 9,134, 1, 10, 0, 2, 0,222, 3, 2, 0, 19, 0, 7, 0,120, 4, 7, 0,199, 9, - 7, 0,200, 9, 7, 0,201, 9, 7, 0,202, 9,133, 1,203, 9,133, 1,204, 9,133, 1,205, 9, 63, 0, 9, 0, 4, 0, 19, 0, - 4, 0, 64, 0, 24, 0,206, 9, 24, 0,207, 9,134, 1,208, 9, 7, 0,209, 9, 7, 0,210, 9, 7, 0,211, 9, 7, 0,212, 9, -135, 1, 4, 0, 47, 0,229, 2, 7, 0,213, 9, 7, 0,170, 1, 7, 0, 37, 0,191, 0, 17, 0, 27, 0, 31, 0,135, 1,214, 9, - 63, 0,203, 9, 51, 0,134, 1, 2, 0, 19, 0, 2, 0,230, 5, 4, 0,106, 0, 7, 0,215, 9, 7, 0, 82, 2, 4, 0,216, 9, - 7, 0,217, 9, 7, 0,218, 9, 7, 0,219, 9, 7, 0,170, 1, 2, 0,104, 1, 0, 0,220, 9, 0, 0,210, 6,136, 1, 10, 0, - 4, 0, 17, 0, 4, 0,125, 0, 4, 0, 19, 0, 4, 0,177, 3, 4, 0,221, 9, 4, 0,222, 9, 4, 0,223, 9, 0, 0, 92, 0, - 0, 0, 20, 0, 9, 0, 2, 0, 91, 0, 6, 0,136, 1,224, 9, 4, 0,225, 9, 4, 0,226, 9, 4, 0,227, 9, 4, 0, 37, 0, - 9, 0,228, 9,137, 1, 5, 0, 7, 0,152, 2, 7, 0,219, 2, 7, 0, 36, 2, 2, 0,128, 2, 2, 0, 37, 0,138, 1, 5, 0, - 7, 0,152, 2, 7, 0,229, 9, 7, 0,230, 9, 7, 0,231, 9, 7, 0,219, 2,139, 1, 5, 0, 32, 0,232, 9,140, 1, 22, 0, - 7, 0,203, 5, 7, 0,233, 9, 7, 0, 57, 0,141, 1, 7, 0, 4, 0,234, 9, 4, 0,235, 9, 4, 0,236, 9, 7, 0,237, 9, - 7, 0,238, 9, 7, 0,239, 9, 7, 0, 57, 0,142, 1, 8, 0,142, 1, 0, 0,142, 1, 1, 0, 32, 0, 45, 0, 4, 0,255, 0, - 2, 0, 19, 0, 2, 0, 69, 1, 7, 0,219, 2, 7, 0, 88, 8,143, 1, 6, 0,143, 1, 0, 0,143, 1, 1, 0, 32, 0, 45, 0, - 2, 0,204, 2, 2, 0, 19, 0, 2, 0,240, 9,144, 1, 18, 0,138, 1,171, 3,138, 1,241, 9,137, 1,242, 9,138, 1, 72, 8, -139, 1,243, 9, 4, 0, 82, 0, 7, 0,219, 2, 7, 0,246, 2, 7, 0,244, 9, 4, 0,234, 9, 4, 0,245, 9, 7, 0,238, 9, - 7, 0,239, 9, 7, 0,106, 0, 2, 0, 19, 0, 2, 0,246, 9, 2, 0,247, 9, 2, 0,248, 9,145, 1,110, 0, 27, 0, 31, 0, - 39, 0, 75, 0,146, 1,249, 9,169, 0, 56, 4, 4, 0, 19, 0, 2, 0, 17, 0, 2, 0, 72, 9, 2, 0,250, 9, 2, 0,251, 9, - 2, 0,137, 3, 2, 0,252, 9, 2, 0,253, 9, 2, 0,254, 9, 2, 0,255, 9, 2, 0, 0, 10, 2, 0, 1, 10, 2, 0, 2, 10, - 2, 0,238, 4, 2, 0,115, 5, 2, 0, 3, 10, 2, 0, 4, 10, 2, 0, 5, 10, 2, 0, 6, 10, 2, 0, 7, 10, 2, 0, 25, 2, - 2, 0, 65, 8, 2, 0, 41, 8, 2, 0, 8, 10, 2, 0, 9, 10, 2, 0,187, 3, 2, 0,188, 3, 2, 0, 10, 10, 2, 0, 11, 10, - 2, 0, 12, 10, 2, 0, 13, 10, 7, 0, 14, 10, 7, 0, 15, 10, 7, 0, 16, 10, 2, 0, 17, 10, 2, 0, 18, 10, 7, 0, 19, 10, - 7, 0, 20, 10, 7, 0, 21, 10, 7, 0, 47, 8, 7, 0, 89, 0, 7, 0,246, 2, 7, 0, 53, 8, 7, 0, 22, 10, 7, 0, 23, 10, - 7, 0, 24, 10, 4, 0, 48, 8, 4, 0, 46, 8, 4, 0, 25, 10, 7, 0, 49, 8, 7, 0, 50, 8, 7, 0, 51, 8, 7, 0, 26, 10, - 7, 0, 27, 10, 7, 0, 28, 10, 7, 0, 29, 10, 7, 0, 30, 10, 7, 0, 57, 0, 7, 0, 31, 10, 7, 0, 32, 10, 7, 0, 33, 10, - 7, 0, 34, 10, 7, 0,128, 3, 7, 0,106, 0, 7, 0, 35, 10, 7, 0, 36, 10, 7, 0, 37, 10, 7, 0, 38, 10, 7, 0, 39, 10, - 7, 0, 40, 10, 7, 0, 41, 10, 4, 0, 42, 10, 4, 0, 43, 10, 7, 0, 44, 10, 7, 0, 45, 10, 7, 0, 46, 10, 7, 0, 47, 10, - 7, 0, 48, 10, 7, 0,210, 0, 7, 0, 49, 10, 7, 0,213, 3, 7, 0,211, 3, 7, 0,212, 3, 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, 7, 0, 58, 10, 7, 0, 59, 10, - 7, 0, 60, 10, 7, 0, 61, 10, 7, 0, 62, 10, 4, 0, 63, 10, 4, 0, 64, 10, 67, 0,160, 3, 12, 0, 65, 10, 67, 0, 66, 10, - 32, 0, 67, 10, 32, 0, 68, 10, 36, 0, 80, 0,164, 0, 61, 1,164, 0, 69, 10,148, 0, 44, 0,148, 0, 0, 0,148, 0, 1, 0, -145, 1, 70, 10,144, 1, 71, 10,141, 1,235, 8,171, 0,238, 3, 9, 0,239, 3,147, 1, 72, 10,147, 1, 73, 10, 12, 0, 74, 10, - 12, 0, 75, 10,133, 0, 76, 10,141, 0, 77, 10,141, 0, 78, 10, 32, 0, 79, 10, 32, 0, 80, 10, 32, 0, 38, 0, 12, 0, 39, 9, - 0, 0, 20, 0, 7, 0,240, 0, 7, 0, 17, 3, 7, 0, 81, 10, 4, 0,193, 2, 4, 0, 57, 0, 4, 0, 19, 0, 4, 0, 48, 8, - 4, 0, 82, 10, 4, 0, 83, 10, 4, 0, 84, 10, 2, 0,247, 0, 2, 0, 85, 10, 2, 0, 86, 10, 2, 0, 87, 10, 0, 0, 88, 10, - 2, 0, 89, 10, 2, 0, 90, 10, 2, 0, 91, 10, 9, 0, 92, 10,137, 0, 55, 4, 12, 0, 4, 3, 12, 0, 93, 10,148, 1, 94, 10, -149, 1, 95, 10, 7, 0, 96, 10,135, 0, 35, 0,150, 1,190, 8, 7, 0, 25, 4, 7, 0, 97, 10, 7, 0, 98, 10, 7, 0,123, 4, - 7, 0, 99, 10, 7, 0,138, 3, 7, 0,128, 3, 7, 0,100, 10, 7, 0, 84, 2, 7, 0,101, 10, 7, 0,102, 10, 7, 0,103, 10, - 7, 0,104, 10, 7, 0,105, 10, 7, 0,106, 10, 7, 0, 26, 4, 7, 0,107, 10, 7, 0,108, 10, 7, 0,109, 10, 7, 0, 27, 4, - 7, 0, 23, 4, 7, 0, 24, 4, 7, 0,110, 10, 4, 0,111, 10, 4, 0, 90, 0, 4, 0,112, 10, 4, 0,113, 10, 2, 0,114, 10, - 2, 0,115, 10, 2, 0,116, 10, 2, 0,117, 10, 2, 0,118, 10, 2, 0,119, 10,169, 0, 56, 4,136, 0, 8, 0,150, 1,120, 10, - 7, 0,121, 10, 7, 0,122, 10, 7, 0,242, 1, 7, 0,123, 10, 4, 0, 90, 0, 2, 0,124, 10, 2, 0,125, 10,151, 1, 4, 0, - 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 0,126, 10,152, 1, 6, 0,152, 1, 0, 0,152, 1, 1, 0,151, 1,227, 8, - 4, 0,253, 0, 2, 0,127, 10, 2, 0, 19, 0,153, 1, 5, 0,153, 1, 0, 0,153, 1, 1, 0, 12, 0,128, 10, 4, 0,129, 10, - 4, 0, 19, 0,154, 1, 9, 0,154, 1, 0, 0,154, 1, 1, 0, 12, 0,124, 0,153, 1,130, 10, 4, 0, 19, 0, 2, 0,127, 10, - 2, 0,131, 10, 7, 0, 91, 0, 0, 0,132, 10,162, 0, 6, 0, 27, 0, 31, 0, 12, 0, 11, 5, 4, 0, 19, 0, 2, 0,133, 10, - 2, 0,134, 10, 9, 0,135, 10,155, 1, 7, 0,155, 1, 0, 0,155, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 23, 0, - 0, 0,136, 10, 0, 0,137, 10,156, 1, 5, 0, 12, 0,138, 10, 4, 0,139, 10, 4, 0,140, 10, 4, 0, 19, 0, 4, 0, 37, 0, -157, 1, 18, 0, 27, 0, 31, 0,158, 1,141, 10,158, 1,142, 10, 12, 0,143, 10, 4, 0,144, 10, 2, 0,145, 10, 2, 0, 37, 0, - 12, 0,146, 10, 12, 0,147, 10,156, 1,148, 10, 12, 0,149, 10, 12, 0,150, 10, 12, 0,151, 10,159, 1,152, 10, 4, 0,153, 10, - 4, 0, 70, 0, 12, 0,154, 10,211, 0,155, 10,158, 1, 31, 0,158, 1, 0, 0,158, 1, 1, 0, 9, 0,156, 10, 4, 0,151, 7, - 4, 0, 37, 0,216, 0, 61, 6,216, 0,157, 10, 0, 0,158, 10, 2, 0,159, 10, 2, 0,160, 10, 2, 0,172, 7, 2, 0,173, 7, - 2, 0,161, 10, 2, 0,162, 10, 2, 0,177, 3, 2, 0,177, 6, 2, 0,163, 10, 2, 0,164, 10, 2, 0,165, 10, 2, 0,166, 10, -160, 1,167, 10,161, 1,168, 10,162, 1,169, 10, 4, 0,170, 10, 4, 0,171, 10, 9, 0,172, 10, 12, 0,147, 10, 12, 0,192, 7, - 12, 0,173, 10, 12, 0,174, 10, 12, 0,175, 10,163, 1, 16, 0,163, 1, 0, 0,163, 1, 1, 0, 0, 0,176, 10, 26, 0, 30, 0, - 2, 0,177, 10, 2, 0, 17, 0, 2, 0, 15, 0, 2, 0,178, 10, 2, 0,179, 10, 2, 0,180, 10, 2, 0,181, 10, 2, 0,182, 10, - 2, 0, 19, 0, 2, 0,183, 10, 2, 0, 70, 2,164, 1,184, 10,165, 1, 10, 0,165, 1, 0, 0,165, 1, 1, 0, 12, 0,185, 10, - 0, 0,176, 10, 2, 0,186, 10, 2, 0,187, 10, 2, 0, 19, 0, 2, 0, 37, 0, 4, 0,188, 10, 9, 0,189, 10,159, 1, 7, 0, -159, 1, 0, 0,159, 1, 1, 0, 0, 0,176, 10, 0, 0,190, 10, 12, 0,109, 7, 4, 0,191, 10, 4, 0, 19, 0,224, 0, 12, 0, -224, 0, 0, 0,224, 0, 1, 0, 0, 0,176, 10, 26, 0, 30, 0,166, 1,166, 7, 9, 0,192, 10,164, 1,184, 10,156, 1,193, 10, - 12, 0,194, 10,224, 0,195, 10, 2, 0, 19, 0, 2, 0,136, 1,160, 1, 23, 0,160, 1, 0, 0,160, 1, 1, 0, 2, 0, 17, 0, - 2, 0, 15, 0, 2, 0, 5, 0, 2, 0, 6, 0, 2, 0,196, 10, 2, 0,197, 10, 2, 0,198, 10, 2, 0,199, 10, 0, 0,200, 10, - 0, 0, 37, 0, 2, 0,178, 10, 2, 0,179, 10, 2, 0,180, 10, 2, 0,181, 10, 2, 0,182, 10, 2, 0, 43, 0, 0, 0,201, 10, - 2, 0,202, 10, 2, 0,203, 10, 4, 0, 70, 0, 9, 0,192, 10,167, 1, 8, 0,167, 1, 0, 0,167, 1, 1, 0, 9, 0, 2, 0, - 9, 0,204, 10, 0, 0,233, 3, 2, 0, 17, 0, 2, 0, 19, 0, 7, 0,205, 10,168, 1, 5, 0, 7, 0,206, 10, 4, 0,207, 10, - 4, 0,208, 10, 4, 0, 69, 1, 4, 0, 19, 0,169, 1, 6, 0, 7, 0,209, 10, 7, 0,210, 10, 7, 0,211, 10, 7, 0,212, 10, - 4, 0, 17, 0, 4, 0, 19, 0,170, 1, 5, 0, 7, 0,146, 8, 7, 0,147, 8, 7, 0,219, 2, 2, 0, 39, 2, 2, 0, 40, 2, -171, 1, 5, 0,170, 1, 2, 0, 4, 0, 54, 0, 7, 0,213, 10, 7, 0,146, 8, 7, 0,147, 8,172, 1, 4, 0, 2, 0,214, 10, - 2, 0,215, 10, 2, 0,216, 10, 2, 0,217, 10,173, 1, 2, 0, 42, 0,148, 6, 26, 0,195, 8,174, 1, 3, 0, 24, 0,218, 10, - 4, 0, 19, 0, 4, 0, 37, 0,175, 1, 6, 0, 7, 0,106, 0, 7, 0,221, 2, 7, 0,219, 10, 7, 0, 37, 0, 2, 0,246, 0, - 2, 0,220, 10,176, 1, 5, 0, 7, 0,221, 2, 7, 0, 87, 8, 2, 0,220, 10, 2, 0,136, 1, 15, 1, 4, 8,177, 1, 9, 0, -177, 1, 0, 0,177, 1, 1, 0, 27, 0,151, 6, 0, 0,221, 10, 4, 0,222, 10, 4, 0,223, 10, 4, 0, 90, 0, 4, 0, 37, 0, - 0, 0,233, 3,178, 1, 6, 0, 12, 0, 39, 9, 0, 0,224, 10, 7, 0, 61, 0, 7, 0,205, 10, 4, 0, 17, 0, 4, 0, 19, 0, -179, 1, 3, 0, 7, 0,225, 10, 4, 0, 19, 0, 4, 0, 37, 0,180, 1, 15, 0,180, 1, 0, 0,180, 1, 1, 0, 79, 1, 25, 9, -178, 1, 62, 0, 12, 0, 96, 3, 35, 0, 50, 0,179, 1,226, 10, 4, 0, 54, 0, 7, 0, 61, 0, 2, 0, 19, 0, 2, 0, 15, 1, - 4, 0,222, 10, 0, 0,221, 10, 4, 0,227, 10, 7, 0,228, 10,181, 1, 2, 0, 0, 0,229, 10, 0, 0,230, 10,182, 1, 4, 0, -182, 1, 0, 0,182, 1, 1, 0,160, 0, 50, 3, 12, 0,231, 10,183, 1, 24, 0,183, 1, 0, 0,183, 1, 1, 0, 12, 0,232, 10, -160, 0,120, 8,182, 1,233, 10, 12, 0,234, 10, 12, 0, 96, 3, 0, 0,233, 3, 7, 0,205, 10, 7, 0,235, 10, 7, 0, 88, 0, - 7, 0, 89, 0, 7, 0, 87, 9, 7, 0, 88, 9, 7, 0,236, 2, 7, 0, 91, 9, 7, 0,122, 8, 7, 0, 92, 9, 2, 0,236, 10, - 2, 0,237, 10, 2, 0, 43, 0, 2, 0, 17, 0, 4, 0, 19, 0, 4, 0, 70, 0,184, 1, 6, 0,184, 1, 0, 0,184, 1, 1, 0, - 12, 0,232, 10, 4, 0, 19, 0, 4, 0,156, 2, 0, 0,233, 3,185, 1, 10, 0,185, 1, 0, 0,185, 1, 1, 0, 27, 0,151, 6, - 0, 0,238, 10, 4, 0,223, 10, 4, 0,239, 10, 0, 0,221, 10, 4, 0,222, 10, 2, 0, 19, 0, 2, 0,240, 10,186, 1, 7, 0, -186, 1, 0, 0,186, 1, 1, 0, 12, 0,241, 10, 0, 0,233, 3, 2, 0, 19, 0, 2, 0,242, 10, 4, 0,243, 10,187, 1, 5, 0, -187, 1, 0, 0,187, 1, 1, 0, 0, 0,221, 10, 4, 0,222, 10, 7, 0,209, 2, 39, 0, 12, 0,160, 0, 90, 3,160, 0,244, 10, -182, 1,233, 10, 12, 0,245, 10,183, 1,246, 10, 12, 0,247, 10, 12, 0,248, 10, 4, 0, 19, 0, 4, 0,247, 0, 2, 0,249, 10, - 2, 0,250, 10, 7, 0,251, 10,188, 1, 2, 0, 27, 0, 31, 0, 39, 0, 75, 0,189, 1, 5, 0,189, 1, 0, 0,189, 1, 1, 0, - 4, 0, 17, 0, 4, 0, 19, 0, 0, 0, 20, 0,190, 1, 6, 0,189, 1,252, 10, 32, 0, 45, 0, 4, 0,253, 10, 7, 0,254, 10, - 4, 0,255, 10, 4, 0, 14, 9,191, 1, 3, 0,189, 1,252, 10, 4, 0,253, 10, 7, 0, 0, 11,192, 1, 8, 0,189, 1,252, 10, - 32, 0, 45, 0, 7, 0, 64, 1, 7, 0, 1, 11, 7, 0, 17, 3, 7, 0,189, 8, 4, 0,253, 10, 4, 0, 2, 11,193, 1, 5, 0, -189, 1,252, 10, 7, 0, 3, 11, 7, 0, 6, 8, 7, 0,242, 2, 7, 0, 57, 0,194, 1, 3, 0,189, 1,252, 10, 7, 0,189, 8, - 7, 0, 4, 11,140, 1, 4, 0, 7, 0, 5, 11, 7, 0, 37, 10, 2, 0, 6, 11, 2, 0, 69, 1,195, 1, 14, 0,195, 1, 0, 0, -195, 1, 1, 0, 12, 0, 7, 11, 12, 0, 8, 11, 12, 0, 9, 11, 0, 0, 20, 0, 4, 0, 31, 0, 4, 0, 19, 0, 4, 0, 10, 11, - 7, 0, 11, 11, 4, 0,255, 10, 4, 0, 14, 9, 7, 0,242, 3, 7, 0,244, 2,146, 1, 23, 0, 4, 0,253, 10, 4, 0, 12, 11, - 7, 0, 13, 11, 7, 0, 57, 0, 7, 0, 14, 11, 7, 0,240, 2, 7, 0, 5, 11, 7, 0, 15, 11, 7, 0,221, 2, 7, 0, 16, 11, - 7, 0,120, 4, 7, 0, 17, 11, 7, 0, 18, 11, 7, 0, 19, 11, 7, 0, 20, 11, 7, 0, 21, 11, 7, 0, 22, 11, 7, 0, 23, 11, - 7, 0, 24, 11, 7, 0, 25, 11, 7, 0, 26, 11, 7, 0, 27, 11, 12, 0, 28, 11,121, 0, 34, 0,120, 0, 29, 11,196, 1, 30, 11, - 67, 0, 31, 11, 67, 0, 66, 10, 67, 0, 32, 11,197, 1, 33, 11, 48, 0,165, 0, 48, 0, 34, 11, 48, 0, 35, 11, 7, 0, 36, 11, - 7, 0, 37, 11, 7, 0, 38, 11, 7, 0, 39, 11, 7, 0, 40, 11, 7, 0, 26, 9, 7, 0, 41, 11, 7, 0,170, 1, 7, 0, 42, 11, - 4, 0, 43, 11, 4, 0, 44, 11, 4, 0, 45, 11, 4, 0, 90, 0, 4, 0, 37, 0, 4, 0, 46, 11, 2, 0, 47, 11, 2, 0, 48, 11, - 4, 0, 49, 11, 7, 0,221, 2, 4, 0, 50, 11, 7, 0, 51, 11, 4, 0, 52, 11,137, 0, 53, 11, 12, 0, 54, 11,169, 0, 56, 4, -122, 0, 11, 0,120, 0, 29, 11,148, 0, 34, 3, 7, 0,137, 1, 7, 0, 26, 9, 7, 0, 55, 11, 7, 0, 56, 11, 2, 0, 57, 11, - 2, 0, 58, 11, 2, 0, 59, 11, 2, 0, 17, 0, 4, 0, 37, 0,123, 0, 13, 0,120, 0, 29, 11,139, 0, 14, 3,141, 0, 16, 3, - 7, 0,227, 8, 7, 0, 60, 11, 7, 0, 61, 11, 7, 0, 66, 1, 7, 0, 62, 11, 4, 0, 48, 9, 4, 0, 12, 3, 2, 0, 17, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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,128, 63, 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, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, + 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, + 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, + 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, + 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, + 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, + 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, + 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,216, 21, 0, 0, 48, 98, 21, 3, 1, 0, 0, 0,188, 0, 0, 0, 1, 0, 0, 0, 48,122, 21, 3, + 1, 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, 25, 25, 25,255, 0, 0, 0,255, +255,255,255,255, 1, 0, 15, 0,241,255, 0, 0, 25, 25, 25,255,153,153,153,255,153,153,153,255, 90, 90, 90,255, 0, 0, 0,255, +255,255,255,255, 1, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0,255, 70, 70, 70,255, 86,128,194,255,255,255,255,255,255,255,255,255, + 0, 0, 0,255, 1, 0, 15, 0,241,255, 0, 0, 0, 0, 0,255, 70, 70, 70,255, 70, 70, 70,255,255,255,255,255, 0, 0, 0,255, +255,255,255,255, 1, 0, 15, 0,241,255, 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,180,180,180,255,153,153,153,255, 90, 90, 90,255, 0, 0, 0,255, +255,255,255,255, 1, 0,236,255, 0, 0, 0, 0, 25, 25, 25,255,180,180,180,255,153,153,153,255,128,128,128,255, 0, 0, 0,255, +255,255,255,255, 1, 0,236,255, 0, 0, 0, 0, 0, 0, 0,255, 70, 70, 70,255, 70, 70, 70,255,255,255,255,255,255,255,255,255, +204,204,204,255, 1, 0, 15, 0,241,255, 0, 0, 0, 0, 0,255, 63, 63, 63,255, 86,128,194,255,255,255,255,255, 0, 0, 0,255, + 0, 0, 0,255, 0, 0, 25, 0,236,255, 0, 0, 0, 0, 0,255, 25, 25, 25,230, 45, 45, 45,230,100,100,100,255,160,160,160,255, +255,255,255,255, 0, 0, 25, 0,236,255, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 86,128,194,255,255,255,255,255,255,255,255,255, + 0, 0, 0,255, 0, 0, 38, 0, 0, 0, 0, 0, 25, 25, 25,255,128,128,128,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, 50, 50, 50,180, 80, 80, 80,180,100,100,100,180,128,128,128,255, 0, 0, 0,255, +255,255,255,255, 1, 0, 5, 0,251,255, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 86,128,194,255, 0, 0, 0,255, 0, 0, 0,255, + 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0,115,190, 76,255, 90,166, 51,255,240,235,100,255,215,211, 75,255,180, 0,255,255, +153, 0,230,255, 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, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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,114,114,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,130,130,130,255, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255, +241, 88, 0,255, 0, 0, 0, 40,255,140, 25,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,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, + 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 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,255,255,255,128, 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,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, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,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,255, 32, 32,255, + 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, + 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 76, 76,255, + 0, 0, 0, 0,250,250,250,255, 15, 15, 15,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,102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,255, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100,255,140, 25,255,250,250,250,255, 0, 0, 0,255, +241, 88, 0,255, 0, 0, 0, 40,130,130,130,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,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, + 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250,250,250,255,250,250,250,255, +250,250,250,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,107,107,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,102,102,102,255, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,255,255,255,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,150,150,150,100, +112,112,112,100, 96,192, 64,255, 94, 94, 94,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 79,101, 73,255, +135,177,125,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,255, 32, 32,255, + 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, + 0, 0, 0, 0, 96,192, 64,255, 82, 96,110,255,124,137,150,255, 3, 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,255,255,255,128, 0, 0, 0,255,255,133, 0,255, 3, 0, 0, 0, 0, 0, 0, 0,114,114,114,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,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, 64, 64, 64,255, 0, 0, 0,255, +241, 88, 0,255, 0, 0, 0, 40,255,140, 25,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,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, + 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 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,255,255,255,128, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,114,114,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,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,173,173,173,255, +127,112,112,100, 0, 0, 0, 0, 91, 91, 91,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,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,255, 32, 32,255, + 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, + 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,107,107,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,102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,255,255,255,150, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,150,150,150,100,112,112,112,100, 96,192, 64,255, 94, 94, 94,255, 0, 0, 0,255, +241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 79,101, 73,255,135,177,125,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,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, + 34,221,221,255,200,200,200,255, 80,200,255, 80, 12, 10, 10,128,255,140, 0,255, 96,192, 64,255, 82, 96,110,255,124,137,150,255, + 3, 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,255,255,255,128, 0, 0, 0,255, +255,133, 0,255, 3, 0, 0, 0, 0, 0, 0, 0,107,107,107,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,102,102,102,255, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,255,255,255,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,150,150,150,100, +112,112,112,100, 96,192, 64,255, 94, 94, 94,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 79,101, 73,255, +135,177,125,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,255, 32, 32,255, + 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 12, 10, 10,128, +255,140, 0,255, 96,192, 64,255, 82, 96,110,255,124,137,150,255, 3, 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,255,255,255,128, 0, 0, 0,255,255,133, 0,255, 3, 0, 0, 0, 0, 0, 0, 0,116,116,116,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,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, 64, 64, 64,255, 0, 0, 0,255, +241, 88, 0,255, 0, 0, 0, 40,255,140, 25,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,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, + 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81,105,135,255,109, 88,129,255, + 78,152, 62,255, 46,143,143,255,169, 84,124,255,126,126, 80,255,162, 95,111,255,109,145,131,255,255,255,255,128, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53,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,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, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,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,255, 32, 32,255, + 75, 75, 75,255,255,255,255, 10,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, + 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,110,110,110,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,132,132,132,255, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 94, 94, 94,255,172,172,172,255, 17, 27, 60,100, 94, 94, 94,255, 0, 0, 0,255, +241, 88, 0,255, 0, 0, 0, 40,195,195,195,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,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, + 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 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,255,255,255,128, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153,153,153,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,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,143,143,143,255, +198,119,119,255,255, 0, 0,255, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,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,255, 32, 32,255, + 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, + 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0,100, 0, 0,255, 0, 0,200,255,128, 0, 80,255, + 95, 95, 0,255, 0,100, 50,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,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,114,114,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,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, 64, 64, 64,255, 0, 0, 0,255, +241, 88, 0,255, 0, 0, 0, 40,255,140, 25,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,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, + 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 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,255,255,255,128, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,114,114,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,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,173,173,173,255, +127,112,112,100, 0, 0, 0, 0, 91, 91, 91,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,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,255, 32, 32,255, + 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, + 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 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,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, 64, 64, 64,255, 0, 0, 0,255, +241, 88, 0,255, 0, 0, 0, 40,255,140, 25,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,255,255,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, + 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 4, 0, 0,155,155,155,160,100,100,100,255,108,105,111,255,104,106,117,255,105,117,110,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,255,255,255,128, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100,100,100,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,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, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,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,255, 32, 32,255, + 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, + 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,114,114,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,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, 64, 64, 64,255, 0, 0, 0,255, +241, 88, 0,255, 0, 0, 0, 40,255,140, 25,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,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, + 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 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,255,255,255,128, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154, 0, 0,255,189, 17, 17,255,247, 10, 10,255, 0, 0, 0, 0,247, 64, 24,255, +246,105, 19,255,250,153, 0,255, 0, 0, 0, 0, 30,145, 9,255, 89,183, 11,255,131,239, 29,255, 0, 0, 0, 0, 10, 54,148,255, + 54,103,223,255, 94,193,239,255, 0, 0, 0, 0,169, 41, 78,255,193, 65,106,255,240, 93,145,255, 0, 0, 0, 0, 67, 12,120,255, + 84, 58,163,255,135,100,213,255, 0, 0, 0, 0, 36,120, 90,255, 60,149,121,255,111,182,171,255, 0, 0, 0, 0, 75,112,124,255, +106,134,145,255,155,194,205,255, 0, 0, 0, 0,244,201, 12,255,238,194, 54,255,243,255, 0,255, 0, 0, 0, 0, 30, 32, 36,255, + 72, 76, 86,255,255,255,255,255, 0, 0, 0, 0,111, 47,106,255,152, 69,190,255,211, 48,214,255, 0, 0, 0, 0,108,142, 34,255, +127,176, 34,255,187,239, 91,255, 0, 0, 0, 0,141,141,141,255,176,176,176,255,222,222,222,255, 0, 0, 0, 0,131, 67, 38,255, +139, 88, 17,255,189,106, 17,255, 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, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 21, 0, 0, 48,122, 21, 3, + 1, 0, 0, 0,188, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 98, 21, 3, 1, 0, 0, 0, 82,111,117,110, +100,101,100, 0, 0,101,119, 32, 85,115,101,114, 32, 84,104,101,109,101, 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, 25, 25, 25,255, 0, 0, 0,255,255,255,255,255, 1, 0, 25, 0,231,255, 0, 0, 25, 25, 25,255, +153,153,153,255,153,153,153,255, 90, 90, 90,255, 0, 0, 0,255,255,255,255,255, 1, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0,255, + 70, 70, 70,255, 86,128,194,255,255,255,255,255,255,255,255,255, 0, 0, 0,255, 1, 0, 15, 0,241,255, 0, 0, 0, 0, 0,255, + 70, 70, 70,255, 70, 70, 70,255,255,255,255,255, 0, 0, 0,255,255,255,255,255, 1, 0, 15, 0,241,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, 25, 25, 25,255, +180,180,180,255,153,153,153,255, 90, 90, 90,255, 0, 0, 0,255,255,255,255,255, 1, 0,236,255, 0, 0, 0, 0, 25, 25, 25,255, +180,180,180,255,153,153,153,255,128,128,128,255, 0, 0, 0,255,255,255,255,255, 1, 0,236,255, 0, 0, 0, 0, 0, 0, 0,255, + 70, 70, 70,255, 70, 70, 70,255,255,255,255,255,255,255,255,255,204,204,204,255, 1, 0, 15, 0,241,255, 0, 0, 0, 0, 0,255, + 63, 63, 63,255, 86,128,194,255,255,255,255,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 25, 0,236,255, 0, 0, 0, 0, 0,255, + 25, 25, 25,230, 46,124,217,204,255,255,255,255,255,255,255,255, 0, 0, 0,255, 0, 0, 25, 0,236,255, 0, 0, 0, 0, 0,255, + 0, 0, 0, 0, 86,128,194,255,255,255,255,255,255,255,255,255, 0, 0, 0,255, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,175,175,175, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100, +127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, + 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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,107,107,107,255, + 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, + 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, 0, 0, 0, 51, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0,143,143,143,255, 0, 0, 0,255, +217,217,217,255, 0, 0, 0, 40,255,255,255,255, 16, 64, 16,255,102,255,102,255,255,130, 0,255, 0, 0, 0,255,255,130, 0,255, + 0, 0, 0,255,255,255,255,255,230,150, 50,255,255, 32, 32,255, 0, 0, 0, 0,255,255,255, 10,255,130, 0, 60,255,138, 48,255, + 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 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,255,255,255,128, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100, +127,112,112,100,255,130, 0,255, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, + 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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,107,107,107,255, + 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, + 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,107,107,107,150, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,107,107,107,100,143,143,143,100, 96,192, 64,255, 94, 94, 94,255, 0, 0, 0,255, +255,136,255,255, 0, 0, 0, 0,255,187,255,255, 79,101, 73,255,135,177,125,255,255,255,255,255,255,255,255,255,255,130, 0,255, + 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 96,192, 64,255, 82, 96,110,255,124,137,150,255, + 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,255,255,255,255, +255,130, 0,255, 2, 0, 0, 0, 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100, +127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, + 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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,158,158,158,255, + 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,158,158,158,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, + 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,165,165,165,150, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,140,140,140,255,127,112,112,100, 0, 0, 0, 0,112,112, 96,255, 0, 0, 0,255, +255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, + 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 96,192, 64,255, 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,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,107,107,107,255, +178,178,178,100,255,130, 0,100, 94, 94, 94,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 79,101, 73,255, +135,177,125,255,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,143,143,143,255,200,100,200, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228,156,198,204, +255,255,170,204, 96,192, 64,255, 82, 96,110,255,124,137,150,255, 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,107,107,107,255, + 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,143,143,143,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, + 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,165,165,165,150, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,107,107,107,255,178,178,178,100,255,130, 0,100, 94, 94, 94,255, 0, 0, 0,255, +255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, + 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228,156,198,255,255,255,170,255, 96,192, 64,255, 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,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100, +127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, + 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,130, 0,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,200,255,255, 0, 0, 0, 0, + 0, 0, 0, 0, 96,192, 64,255, 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, 81,105,135,255,109, 88,129,255, 78,152, 62,255, 46,143,143,255,169, 84,124,255,126,126, 80,255, +162, 95,111,255,109,145,131,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53,255, + 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,195,195,195,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, + 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,165,165,165,150, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255, +255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, + 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 60,255,133, 0,255, + 0, 0, 0, 0, 0, 0, 0, 0, 80,200,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 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,255,255,255,128, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,195,195,195,255, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,143,143,143,255, +127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, + 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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,153,153,153,255, + 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,153,153,153,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, + 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,165,165,165,150, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,143,143,143,255,198,119,119,255,255, 0, 0,255, 88, 88, 88,255, 0, 0, 0,255, +255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, + 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, + 2, 0, 0, 0,100, 0, 0,255, 0, 0,200,255,128, 0, 80,255, 95, 95, 0,255, 0,100, 50,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,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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,165,165,165,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100, +127,112,112,100, 0, 0, 0, 0, 88, 88, 88,255, 0, 0, 0,255,255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, + 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 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,158,158,158,255, + 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,158,158,158,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, + 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,165,165,165,150, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,140,140,140,255,127,112,112,100, 0, 0, 0, 0,112,112, 96,255, 0, 0, 0,255, +255,136,255,255, 0, 0, 0, 0,255,187,255,255, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,112,255,255,255,255,112,255, + 0, 0, 0,255,144,144, 48,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,150, 30,200,100,200, 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, 96,192, 64,255, 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,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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, 0, 0, 0, 51, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100, +127,112,112,100, 0, 0, 0, 0,143,143,143,255, 0, 0, 0,255,217,217,217,255, 0, 0, 0, 40,255,255,255,255, 0, 0, 0, 0, + 0, 0, 0, 0,255,130, 0,255, 0, 0, 0,255,255,130, 0,255, 0, 0, 0,255,255,255,255,255,230,150, 50,255, 0, 0, 0, 0, + 0, 0, 0, 0,255,255,255, 10,255,130, 0, 60,255,138, 48,255, 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0,150,150,150,255,129,131,144,255,127,127,127,255, +142,138,145,255,120,145,120,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,100,100,100,255, + 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,107,107,107,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, + 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, 0, 0, 0, 51, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0,143,143,143,255, 0, 0, 0,255, +217,217,217,255, 0, 0, 0, 40,255,255,255,255, 16, 64, 16,255,102,255,102,255,255,130, 0,255, 0, 0, 0,255,255,130, 0,255, + 0, 0, 0,255,255,255,255,255,230,150, 50,255,255, 32, 32,255, 0, 0, 0, 0,255,255,255, 10,255,130, 0, 60,255,138, 48,255, + 34,221,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 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,255,255,255,128, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,245, 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, 0, 0, 0, 0, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154, 0, 0,255, +189, 17, 17,255,247, 10, 10,255, 0, 0, 0, 0,247, 64, 24,255,246,105, 19,255,250,153, 0,255, 0, 0, 0, 0, 30,145, 9,255, + 89,183, 11,255,131,239, 29,255, 0, 0, 0, 0, 10, 54,148,255, 54,103,223,255, 94,193,239,255, 0, 0, 0, 0,169, 41, 78,255, +193, 65,106,255,240, 93,145,255, 0, 0, 0, 0, 67, 12,120,255, 84, 58,163,255,135,100,213,255, 0, 0, 0, 0, 36,120, 90,255, + 60,149,121,255,111,182,171,255, 0, 0, 0, 0, 75,112,124,255,106,134,145,255,155,194,205,255, 0, 0, 0, 0,244,201, 12,255, +238,194, 54,255,243,255, 0,255, 0, 0, 0, 0, 30, 32, 36,255, 72, 76, 86,255,255,255,255,255, 0, 0, 0, 0,111, 47,106,255, +152, 69,190,255,211, 48,214,255, 0, 0, 0, 0,108,142, 34,255,127,176, 34,255,187,239, 91,255, 0, 0, 0, 0,141,141,141,255, +176,176,176,255,222,222,222,255, 0, 0, 0, 0,131, 67, 38,255,139, 88, 17,255,189,106, 17,255, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 78, 65, 49, 44,231, 0, 0, 48,112, 27, 29, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 83, 68, 78, 65, + 78, 65, 77, 69, 68, 11, 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,119, 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, 97,103, 0,110, 97,109,101, 91, 51, 50, 93, 0,115, 97,118,101,100, 0,100, 97,116, 97, + 0,108,101,110, 0,116,111,116, 97,108,108,101,110, 0, 42,110,101,119,105,100, 0, 42,108,105, 98, 0,110, 97,109,101, 91, 50, + 52, 93, 0,117,115, 0,105, 99,111,110, 95,105,100, 0, 42,112,114,111,112,101,114,116,105,101,115, 0,105,100, 0, 42,105,100, + 98,108,111, 99,107, 0, 42,102,105,108,101,100, 97,116, 97, 0,110, 97,109,101, 91, 50, 52, 48, 93, 0,102,105,108,101,110, 97, +109,101, 91, 50, 52, 48, 93, 0,116,111,116, 0,112, 97,100, 0, 42,112, 97,114,101,110,116, 0,119, 91, 50, 93, 0,104, 91, 50, + 93, 0, 99,104, 97,110,103,101,100, 91, 50, 93, 0,112, 97,100, 48, 0,112, 97,100, 49, 0, 42,114,101, 99,116, 91, 50, 93, 0, + 42,111, 98, 0, 98,108,111, 99,107,116,121,112,101, 0, 97,100,114, 99,111,100,101, 0,110, 97,109,101, 91, 49, 50, 56, 93, 0, + 42, 98,112, 0, 42, 98,101,122,116, 0,109, 97,120,114, 99,116, 0,116,111,116,114, 99,116, 0,118, 97,114,116,121,112,101, 0, +116,111,116,118,101,114,116, 0,105,112,111, 0,101,120,116,114, 97,112, 0,114,116, 0, 98,105,116,109, 97,115,107, 0,115,108, +105,100,101, 95,109,105,110, 0,115,108,105,100,101, 95,109, 97,120, 0, 99,117,114,118, 97,108, 0, 42,100,114,105,118,101,114, + 0, 99,117,114,118,101, 0, 99,117,114, 0,115,104,111,119,107,101,121, 0,109,117,116,101,105,112,111, 0,112,111,115, 0,114, +101,108, 97,116,105,118,101, 0,116,111,116,101,108,101,109, 0,112, 97,100, 50, 0, 42,119,101,105,103,104,116,115, 0,118,103, +114,111,117,112, 91, 51, 50, 93, 0,115,108,105,100,101,114,109,105,110, 0,115,108,105,100,101,114,109, 97,120, 0, 42, 97,100, +116, 0, 42,114,101,102,107,101,121, 0,101,108,101,109,115,116,114, 91, 51, 50, 93, 0,101,108,101,109,115,105,122,101, 0, 98, +108,111, 99,107, 0, 42,105,112,111, 0, 42,102,114,111,109, 0,116,111,116,107,101,121, 0,115,108,117,114,112,104, 0, 42,108, +105,110,101, 0, 42,102,111,114,109, 97,116, 0, 98,108,101,110, 0,108,105,110,101,110,111, 0,115,116, 97,114,116, 0,101,110, +100, 0,102,108, 97,103,115, 0, 99,111,108,111,114, 91, 52, 93, 0,112, 97,100, 91, 52, 93, 0, 42,110, 97,109,101, 0,110,108, +105,110,101,115, 0,108,105,110,101,115, 0, 42, 99,117,114,108, 0, 42,115,101,108,108, 0, 99,117,114, 99, 0,115,101,108, 99, + 0,109, 97,114,107,101,114,115, 0, 42,117,110,100,111, 95, 98,117,102, 0,117,110,100,111, 95,112,111,115, 0,117,110,100,111, + 95,108,101,110, 0, 42, 99,111,109,112,105,108,101,100, 0,109,116,105,109,101, 0,115,105,122,101, 0,115,101,101,107, 0,112, + 97,115,115,101,112, 97,114,116, 97,108,112,104, 97, 0, 97,110,103,108,101, 0, 99,108,105,112,115,116, 97, 0, 99,108,105,112, +101,110,100, 0,108,101,110,115, 0,111,114,116,104,111, 95,115, 99, 97,108,101, 0,100,114, 97,119,115,105,122,101, 0,115,104, +105,102,116,120, 0,115,104,105,102,116,121, 0, 89, 70, 95,100,111,102,100,105,115,116, 0, 89, 70, 95, 97,112,101,114,116,117, +114,101, 0, 89, 70, 95, 98,107,104,116,121,112,101, 0, 89, 70, 95, 98,107,104, 98,105, 97,115, 0, 89, 70, 95, 98,107,104,114, +111,116, 0, 42,100,111,102, 95,111, 98, 0,102,114, 97,109,101,110,114, 0,102,114, 97,109,101,115, 0,111,102,102,115,101,116, + 0,115,102,114, 97, 0,102,105,101, 95,105,109, 97, 0, 99,121, 99,108, 0,111,107, 0,109,117,108,116,105, 95,105,110,100,101, +120, 0,108, 97,121,101,114, 0,112, 97,115,115, 0,109,101,110,117,110,114, 0, 42,115, 99,101,110,101, 0,105, 98,117,102,115, + 0, 42,103,112,117,116,101,120,116,117,114,101, 0, 42, 97,110,105,109, 0, 42,114,114, 0,115,111,117,114, 99,101, 0,108, 97, +115,116,102,114, 97,109,101, 0,116,112, 97,103,101,102,108, 97,103, 0,116,111,116, 98,105,110,100, 0,120,114,101,112, 0,121, +114,101,112, 0,116,119,115,116, 97, 0,116,119,101,110,100, 0, 98,105,110,100, 99,111,100,101, 0, 42,114,101,112, 98,105,110, +100, 0, 42,112, 97, 99,107,101,100,102,105,108,101, 0, 42,112,114,101,118,105,101,119, 0, 42,114,101,110,100,101,114, 95,116, +101,120,116, 0,108, 97,115,116,117,112,100, 97,116,101, 0,108, 97,115,116,117,115,101,100, 0, 97,110,105,109,115,112,101,101, +100, 0,103,101,110, 95,120, 0,103,101,110, 95,121, 0,103,101,110, 95,116,121,112,101, 0, 97,115,112,120, 0, 97,115,112,121, + 0,116,101,120, 99,111, 0,109, 97,112,116,111, 0,109, 97,112,116,111,110,101,103, 0, 98,108,101,110,100,116,121,112,101, 0, + 42,111, 98,106,101, 99,116, 0, 42,116,101,120, 0,117,118,110, 97,109,101, 91, 51, 50, 93, 0,112,114,111,106,120, 0,112,114, +111,106,121, 0,112,114,111,106,122, 0,109, 97,112,112,105,110,103, 0,111,102,115, 91, 51, 93, 0,115,105,122,101, 91, 51, 93, + 0,114,111,116, 0,116,101,120,102,108, 97,103, 0, 99,111,108,111,114,109,111,100,101,108, 0,112,109, 97,112,116,111, 0,112, +109, 97,112,116,111,110,101,103, 0,110,111,114,109, 97,112,115,112, 97, 99,101, 0,119,104,105, 99,104, 95,111,117,116,112,117, +116, 0, 98,114,117,115,104, 95,109, 97,112, 95,109,111,100,101, 0,112, 97,100, 91, 55, 93, 0,114, 0,103, 0, 98, 0,107, 0, +100,101,102, 95,118, 97,114, 0, 99,111,108,102, 97, 99, 0,118, 97,114,102, 97, 99, 0,110,111,114,102, 97, 99, 0,100,105,115, +112,102, 97, 99, 0,119, 97,114,112,102, 97, 99, 0, 99,111,108,115,112,101, 99,102, 97, 99, 0,109,105,114,114,102, 97, 99, 0, + 97,108,112,104, 97,102, 97, 99, 0,100,105,102,102,102, 97, 99, 0,115,112,101, 99,102, 97, 99, 0,101,109,105,116,102, 97, 99, + 0,104, 97,114,100,102, 97, 99, 0,114, 97,121,109,105,114,114,102, 97, 99, 0,116,114, 97,110,115,108,102, 97, 99, 0, 97,109, + 98,102, 97, 99, 0, 99,111,108,101,109,105,116,102, 97, 99, 0, 99,111,108,114,101,102,108,102, 97, 99, 0, 99,111,108,116,114, + 97,110,115,102, 97, 99, 0,100,101,110,115,102, 97, 99, 0,115, 99, 97,116,116,101,114,102, 97, 99, 0,114,101,102,108,102, 97, + 99, 0,116,105,109,101,102, 97, 99, 0,108,101,110,103,116,104,102, 97, 99, 0, 99,108,117,109,112,102, 97, 99, 0,107,105,110, +107,102, 97, 99, 0,114,111,117,103,104,102, 97, 99, 0,112, 97,100,101,110,115,102, 97, 99, 0,108,105,102,101,102, 97, 99, 0, +115,105,122,101,102, 97, 99, 0,105,118,101,108,102, 97, 99, 0,112,118,101,108,102, 97, 99, 0,115,104, 97,100,111,119,102, 97, + 99, 0,122,101,110,117,112,102, 97, 99, 0,122,101,110,100,111,119,110,102, 97, 99, 0, 98,108,101,110,100,102, 97, 99, 0,110, + 97,109,101, 91, 49, 54, 48, 93, 0, 42,104, 97,110,100,108,101, 0, 42,112,110, 97,109,101, 0, 42,115,116,110, 97,109,101,115, + 0,115,116,121,112,101,115, 0,118, 97,114,115, 0, 42,118, 97,114,115,116,114, 0, 42,114,101,115,117,108,116, 0, 42, 99,102, +114, 97, 0,100, 97,116, 97, 91, 51, 50, 93, 0, 40, 42,100,111,105,116, 41, 40, 41, 0, 40, 42,105,110,115,116, 97,110, 99,101, + 95,105,110,105,116, 41, 40, 41, 0, 40, 42, 99, 97,108,108, 98, 97, 99,107, 41, 40, 41, 0,118,101,114,115,105,111,110, 0, 97, + 0,105,112,111,116,121,112,101, 0, 42,105,109, 97, 0, 42, 99,117, 98,101, 91, 54, 93, 0,105,109, 97,116, 91, 52, 93, 91, 52, + 93, 0,111, 98,105,109, 97,116, 91, 51, 93, 91, 51, 93, 0,115,116,121,112,101, 0,118,105,101,119,115, 99, 97,108,101, 0,110, +111,116,108, 97,121, 0, 99,117, 98,101,114,101,115, 0,100,101,112,116,104, 0,114,101, 99, 97,108, 99, 0,108, 97,115,116,115, +105,122,101, 0,102, 97,108,108,111,102,102, 95,116,121,112,101, 0,102, 97,108,108,111,102,102, 95,115,111,102,116,110,101,115, +115, 0,114, 97,100,105,117,115, 0, 99,111,108,111,114, 95,115,111,117,114, 99,101, 0,116,111,116,112,111,105,110,116,115, 0, +112,100,112, 97,100, 0,112,115,121,115, 0,112,115,121,115, 95, 99, 97, 99,104,101, 95,115,112, 97, 99,101, 0,111, 98, 95, 99, + 97, 99,104,101, 95,115,112, 97, 99,101, 0, 42,112,111,105,110,116, 95,116,114,101,101, 0, 42,112,111,105,110,116, 95,100, 97, +116, 97, 0,110,111,105,115,101, 95,115,105,122,101, 0,110,111,105,115,101, 95,100,101,112,116,104, 0,110,111,105,115,101, 95, +105,110,102,108,117,101,110, 99,101, 0,110,111,105,115,101, 95, 98, 97,115,105,115, 0,112,100,112, 97,100, 51, 91, 51, 93, 0, +110,111,105,115,101, 95,102, 97, 99, 0,115,112,101,101,100, 95,115, 99, 97,108,101, 0, 42, 99,111, 98, 97, 0,114,101,115,111, +108, 91, 51, 93, 0,105,110,116,101,114,112, 95,116,121,112,101, 0,102,105,108,101, 95,102,111,114,109, 97,116, 0,101,120,116, +101,110,100, 0,105,110,116, 95,109,117,108,116,105,112,108,105,101,114, 0,115,116,105,108,108, 95,102,114, 97,109,101, 0,115, +111,117,114, 99,101, 95,112, 97,116,104, 91, 50, 52, 48, 93, 0, 42,100, 97,116, 97,115,101,116, 0,110,111,105,115,101,115,105, +122,101, 0,116,117,114, 98,117,108, 0, 98,114,105,103,104,116, 0, 99,111,110,116,114, 97,115,116, 0,114,102, 97, 99, 0,103, +102, 97, 99, 0, 98,102, 97, 99, 0,102,105,108,116,101,114,115,105,122,101, 0,109,103, 95, 72, 0,109,103, 95,108, 97, 99,117, +110, 97,114,105,116,121, 0,109,103, 95,111, 99,116, 97,118,101,115, 0,109,103, 95,111,102,102,115,101,116, 0,109,103, 95,103, + 97,105,110, 0,100,105,115,116, 95, 97,109,111,117,110,116, 0,110,115, 95,111,117,116,115, 99, 97,108,101, 0,118,110, 95,119, + 49, 0,118,110, 95,119, 50, 0,118,110, 95,119, 51, 0,118,110, 95,119, 52, 0,118,110, 95,109,101,120,112, 0,118,110, 95,100, +105,115,116,109, 0,118,110, 95, 99,111,108,116,121,112,101, 0,110,111,105,115,101,100,101,112,116,104, 0,110,111,105,115,101, +116,121,112,101, 0,110,111,105,115,101, 98, 97,115,105,115, 0,110,111,105,115,101, 98, 97,115,105,115, 50, 0,105,109, 97,102, +108, 97,103, 0, 99,114,111,112,120,109,105,110, 0, 99,114,111,112,121,109,105,110, 0, 99,114,111,112,120,109, 97,120, 0, 99, +114,111,112,121,109, 97,120, 0,116,101,120,102,105,108,116,101,114, 0, 97,102,109, 97,120, 0,120,114,101,112,101, 97,116, 0, +121,114,101,112,101, 97,116, 0, 99,104,101, 99,107,101,114,100,105,115,116, 0,110, 97, 98,108, 97, 0,105,117,115,101,114, 0, + 42,110,111,100,101,116,114,101,101, 0, 42,112,108,117,103,105,110, 0, 42,101,110,118, 0, 42,112,100, 0, 42,118,100, 0,117, +115,101, 95,110,111,100,101,115, 0,108,111, 99, 91, 51, 93, 0,114,111,116, 91, 51, 93, 0,109, 97,116, 91, 52, 93, 91, 52, 93, + 0,109,105,110, 91, 51, 93, 0,109, 97,120, 91, 51, 93, 0,109,111,100,101, 0,116,111,116,101,120, 0,115,104,100,119,114, 0, +115,104,100,119,103, 0,115,104,100,119, 98, 0,115,104,100,119,112, 97,100, 0,101,110,101,114,103,121, 0,100,105,115,116, 0, +115,112,111,116,115,105,122,101, 0,115,112,111,116, 98,108,101,110,100, 0,104, 97,105,110,116, 0, 97,116,116, 49, 0, 97,116, +116, 50, 0, 42, 99,117,114,102, 97,108,108,111,102,102, 0,115,104, 97,100,115,112,111,116,115,105,122,101, 0, 98,105, 97,115, + 0,115,111,102,116, 0, 99,111,109,112,114,101,115,115,116,104,114,101,115,104, 0,112, 97,100, 53, 91, 51, 93, 0, 98,117,102, +115,105,122,101, 0,115, 97,109,112, 0, 98,117,102,102,101,114,115, 0,102,105,108,116,101,114,116,121,112,101, 0, 98,117,102, +102,108, 97,103, 0, 98,117,102,116,121,112,101, 0,114, 97,121, 95,115, 97,109,112, 0,114, 97,121, 95,115, 97,109,112,121, 0, +114, 97,121, 95,115, 97,109,112,122, 0,114, 97,121, 95,115, 97,109,112, 95,116,121,112,101, 0, 97,114,101, 97, 95,115,104, 97, +112,101, 0, 97,114,101, 97, 95,115,105,122,101, 0, 97,114,101, 97, 95,115,105,122,101,121, 0, 97,114,101, 97, 95,115,105,122, +101,122, 0, 97,100, 97,112,116, 95,116,104,114,101,115,104, 0,114, 97,121, 95,115, 97,109,112, 95,109,101,116,104,111,100, 0, +116,101,120, 97, 99,116, 0,115,104, 97,100,104, 97,108,111,115,116,101,112, 0,115,117,110, 95,101,102,102,101, 99,116, 95,116, +121,112,101, 0,115,107,121, 98,108,101,110,100,116,121,112,101, 0,104,111,114,105,122,111,110, 95, 98,114,105,103,104,116,110, +101,115,115, 0,115,112,114,101, 97,100, 0,115,117,110, 95, 98,114,105,103,104,116,110,101,115,115, 0,115,117,110, 95,115,105, +122,101, 0, 98, 97, 99,107,115, 99, 97,116,116,101,114,101,100, 95,108,105,103,104,116, 0,115,117,110, 95,105,110,116,101,110, +115,105,116,121, 0, 97,116,109, 95,116,117,114, 98,105,100,105,116,121, 0, 97,116,109, 95,105,110,115, 99, 97,116,116,101,114, +105,110,103, 95,102, 97, 99,116,111,114, 0, 97,116,109, 95,101,120,116,105,110, 99,116,105,111,110, 95,102, 97, 99,116,111,114, + 0, 97,116,109, 95,100,105,115,116, 97,110, 99,101, 95,102, 97, 99,116,111,114, 0,115,107,121, 98,108,101,110,100,102, 97, 99, + 0,115,107,121, 95,101,120,112,111,115,117,114,101, 0,115,107,121, 95, 99,111,108,111,114,115,112, 97, 99,101, 0,112, 97,100, + 52, 0, 89, 70, 95,110,117,109,112,104,111,116,111,110,115, 0, 89, 70, 95,110,117,109,115,101, 97,114, 99,104, 0, 89, 70, 95, +112,104,100,101,112,116,104, 0, 89, 70, 95,117,115,101,113,109, 99, 0, 89, 70, 95, 98,117,102,115,105,122,101, 0, 89, 70, 95, +112, 97,100, 0, 89, 70, 95, 99, 97,117,115,116,105, 99, 98,108,117,114, 0, 89, 70, 95,108,116,114, 97,100,105,117,115, 0, 89, + 70, 95,103,108,111,119,105,110,116, 0, 89, 70, 95,103,108,111,119,111,102,115, 0, 89, 70, 95,103,108,111,119,116,121,112,101, + 0, 89, 70, 95,112, 97,100, 50, 0, 42,109,116,101,120, 91, 49, 56, 93, 0,112,114, 95,116,101,120,116,117,114,101, 0,112, 97, +100, 91, 51, 93, 0,100,101,110,115,105,116,121, 0,101,109,105,115,115,105,111,110, 0,115, 99, 97,116,116,101,114,105,110,103, + 0,114,101,102,108,101, 99,116,105,111,110, 0,101,109,105,115,115,105,111,110, 95, 99,111,108, 91, 51, 93, 0,116,114, 97,110, +115,109,105,115,115,105,111,110, 95, 99,111,108, 91, 51, 93, 0,114,101,102,108,101, 99,116,105,111,110, 95, 99,111,108, 91, 51, + 93, 0,100,101,110,115,105,116,121, 95,115, 99, 97,108,101, 0,100,101,112,116,104, 95, 99,117,116,111,102,102, 0, 97,115,121, +109,109,101,116,114,121, 0,115,116,101,112,115,105,122,101, 95,116,121,112,101, 0,115,104, 97,100,101,102,108, 97,103, 0,115, +104, 97,100,101, 95,116,121,112,101, 0,112,114,101, 99, 97, 99,104,101, 95,114,101,115,111,108,117,116,105,111,110, 0,115,116, +101,112,115,105,122,101, 0,109,115, 95,100,105,102,102, 0,109,115, 95,105,110,116,101,110,115,105,116,121, 0,109,115, 95,115, +116,101,112,115, 0,109, 97,116,101,114,105, 97,108, 95,116,121,112,101, 0,115,112,101, 99,114, 0,115,112,101, 99,103, 0,115, +112,101, 99, 98, 0,109,105,114,114, 0,109,105,114,103, 0,109,105,114, 98, 0, 97,109, 98,114, 0, 97,109, 98, 98, 0, 97,109, + 98,103, 0, 97,109, 98, 0,101,109,105,116, 0, 97,110,103, 0,115,112,101, 99,116,114, 97, 0,114, 97,121, 95,109,105,114,114, +111,114, 0, 97,108,112,104, 97, 0,114,101,102, 0,115,112,101, 99, 0,122,111,102,102,115, 0, 97,100,100, 0,116,114, 97,110, +115,108,117, 99,101,110, 99,121, 0,118,111,108, 0,102,114,101,115,110,101,108, 95,109,105,114, 0,102,114,101,115,110,101,108, + 95,109,105,114, 95,105, 0,102,114,101,115,110,101,108, 95,116,114, 97, 0,102,114,101,115,110,101,108, 95,116,114, 97, 95,105, + 0,102,105,108,116,101,114, 0,116,120, 95,108,105,109,105,116, 0,116,120, 95,102, 97,108,108,111,102,102, 0,114, 97,121, 95, +100,101,112,116,104, 0,114, 97,121, 95,100,101,112,116,104, 95,116,114, 97, 0,104, 97,114, 0,115,101,101,100, 49, 0,115,101, +101,100, 50, 0,103,108,111,115,115, 95,109,105,114, 0,103,108,111,115,115, 95,116,114, 97, 0,115, 97,109,112, 95,103,108,111, +115,115, 95,109,105,114, 0,115, 97,109,112, 95,103,108,111,115,115, 95,116,114, 97, 0, 97,100, 97,112,116, 95,116,104,114,101, +115,104, 95,109,105,114, 0, 97,100, 97,112,116, 95,116,104,114,101,115,104, 95,116,114, 97, 0, 97,110,105,115,111, 95,103,108, +111,115,115, 95,109,105,114, 0,100,105,115,116, 95,109,105,114, 0,102, 97,100,101,116,111, 95,109,105,114, 0,115,104, 97,100, +101, 95,102,108, 97,103, 0,109,111,100,101, 95,108, 0,102,108, 97,114,101, 99, 0,115,116, 97,114, 99, 0,108,105,110,101, 99, + 0,114,105,110,103, 99, 0,104, 97,115,105,122,101, 0,102,108, 97,114,101,115,105,122,101, 0,115,117, 98,115,105,122,101, 0, +102,108, 97,114,101, 98,111,111,115,116, 0,115,116,114, 97,110,100, 95,115,116, 97, 0,115,116,114, 97,110,100, 95,101,110,100, + 0,115,116,114, 97,110,100, 95,101, 97,115,101, 0,115,116,114, 97,110,100, 95,115,117,114,102,110,111,114, 0,115,116,114, 97, +110,100, 95,109,105,110, 0,115,116,114, 97,110,100, 95,119,105,100,116,104,102, 97,100,101, 0,115,116,114, 97,110,100, 95,117, +118,110, 97,109,101, 91, 51, 50, 93, 0,115, 98,105, 97,115, 0,108, 98,105, 97,115, 0,115,104, 97,100, 95, 97,108,112,104, 97, + 0,115,101,112,116,101,120, 0,114,103, 98,115,101,108, 0,112,114, 95,116,121,112,101, 0,112,114, 95, 98, 97, 99,107, 0,112, +114, 95,108, 97,109,112, 0,109,108, 95,102,108, 97,103, 0,100,105,102,102, 95,115,104, 97,100,101,114, 0,115,112,101, 99, 95, +115,104, 97,100,101,114, 0,114,111,117,103,104,110,101,115,115, 0,114,101,102,114, 97, 99, 0,112, 97,114, 97,109, 91, 52, 93, + 0,114,109,115, 0,100, 97,114,107,110,101,115,115, 0, 42,114, 97,109,112, 95, 99,111,108, 0, 42,114, 97,109,112, 95,115,112, +101, 99, 0,114, 97,109,112,105,110, 95, 99,111,108, 0,114, 97,109,112,105,110, 95,115,112,101, 99, 0,114, 97,109,112, 98,108, +101,110,100, 95, 99,111,108, 0,114, 97,109,112, 98,108,101,110,100, 95,115,112,101, 99, 0,114, 97,109,112, 95,115,104,111,119, + 0,112, 97,100, 51, 0,114, 97,109,112,102, 97, 99, 95, 99,111,108, 0,114, 97,109,112,102, 97, 99, 95,115,112,101, 99, 0, 42, +103,114,111,117,112, 0,102,114,105, 99,116,105,111,110, 0,102,104, 0,114,101,102,108,101, 99,116, 0,102,104,100,105,115,116, + 0,120,121,102,114,105, 99,116, 0,100,121,110, 97,109,111,100,101, 0,115,115,115, 95,114, 97,100,105,117,115, 91, 51, 93, 0, +115,115,115, 95, 99,111,108, 91, 51, 93, 0,115,115,115, 95,101,114,114,111,114, 0,115,115,115, 95,115, 99, 97,108,101, 0,115, +115,115, 95,105,111,114, 0,115,115,115, 95, 99,111,108,102, 97, 99, 0,115,115,115, 95,116,101,120,102, 97, 99, 0,115,115,115, + 95,102,114,111,110,116, 0,115,115,115, 95, 98, 97, 99,107, 0,115,115,115, 95,102,108, 97,103, 0,115,115,115, 95,112,114,101, +115,101,116, 0,109, 97,112,116,111, 95,116,101,120,116,117,114,101,100, 0,103,112,117,109, 97,116,101,114,105, 97,108, 0,110, + 97,109,101, 91, 50, 53, 54, 93, 0, 42, 98, 98, 0,105, 49, 0,106, 49, 0,107, 49, 0,105, 50, 0,106, 50, 0,107, 50, 0,115, +101,108, 99,111,108, 49, 0,115,101,108, 99,111,108, 50, 0,113,117, 97,116, 91, 52, 93, 0,101,120,112,120, 0,101,120,112,121, + 0,101,120,112,122, 0,114, 97,100, 0,114, 97,100, 50, 0,115, 0, 42,109, 97,116, 0, 42,105,109, 97,116, 0,101,108,101,109, +115, 0,100,105,115,112, 0, 42,101,100,105,116,101,108,101,109,115, 0, 42, 42,109, 97,116, 0,102,108, 97,103, 50, 0,116,111, +116, 99,111,108, 0,119,105,114,101,115,105,122,101, 0,114,101,110,100,101,114,115,105,122,101, 0,116,104,114,101,115,104, 0, + 42,108, 97,115,116,101,108,101,109, 0,118,101, 99, 91, 51, 93, 91, 51, 93, 0, 97,108,102, 97, 0,119,101,105,103,104,116, 0, +104, 49, 0,104, 50, 0,102, 49, 0,102, 50, 0,102, 51, 0,104,105,100,101, 0,118,101, 99, 91, 52, 93, 0,109, 97,116, 95,110, +114, 0,112,110,116,115,117, 0,112,110,116,115,118, 0,114,101,115,111,108,117, 0,114,101,115,111,108,118, 0,111,114,100,101, +114,117, 0,111,114,100,101,114,118, 0,102,108, 97,103,117, 0,102,108, 97,103,118, 0, 42,107,110,111,116,115,117, 0, 42,107, +110,111,116,115,118, 0,116,105,108,116, 95,105,110,116,101,114,112, 0,114, 97,100,105,117,115, 95,105,110,116,101,114,112, 0, + 99,104, 97,114,105,100,120, 0,107,101,114,110, 0,104, 0,110,117,114, 98, 0, 42,101,100,105,116,110,117,114, 98, 0, 42, 98, +101,118,111, 98,106, 0, 42,116, 97,112,101,114,111, 98,106, 0, 42,116,101,120,116,111,110, 99,117,114,118,101, 0, 42,112, 97, +116,104, 0, 42,107,101,121, 0, 98,101,118, 0,100,114, 97,119,102,108, 97,103, 0,116,119,105,115,116, 95,109,111,100,101, 0, +112, 97,100, 91, 50, 93, 0,116,119,105,115,116, 95,115,109,111,111,116,104, 0,112, 97,116,104,108,101,110, 0, 98,101,118,114, +101,115,111,108, 0,119,105,100,116,104, 0,101,120,116, 49, 0,101,120,116, 50, 0,114,101,115,111,108,117, 95,114,101,110, 0, +114,101,115,111,108,118, 95,114,101,110, 0, 97, 99,116,110,117, 0, 42,108, 97,115,116,115,101,108, 98,112, 0,115,112, 97, 99, +101,109,111,100,101, 0,115,112, 97, 99,105,110,103, 0,108,105,110,101,100,105,115,116, 0,115,104,101, 97,114, 0,102,115,105, +122,101, 0,119,111,114,100,115,112, 97, 99,101, 0,117,108,112,111,115, 0,117,108,104,101,105,103,104,116, 0,120,111,102, 0, +121,111,102, 0,108,105,110,101,119,105,100,116,104, 0, 42,115,116,114, 0, 42,115,101,108, 98,111,120,101,115, 0, 42,101,100, +105,116,102,111,110,116, 0,102, 97,109,105,108,121, 91, 50, 52, 93, 0, 42,118,102,111,110,116, 0, 42,118,102,111,110,116, 98, + 0, 42,118,102,111,110,116,105, 0, 42,118,102,111,110,116, 98,105, 0,115,101,112, 99,104, 97,114, 0, 99,116,105,109,101, 0, +116,111,116, 98,111,120, 0, 97, 99,116, 98,111,120, 0, 42,116, 98, 0,115,101,108,115,116, 97,114,116, 0,115,101,108,101,110, +100, 0, 42,115,116,114,105,110,102,111, 0, 99,117,114,105,110,102,111, 0,101,102,102,101, 99,116, 0, 42,109,102, 97, 99,101, + 0, 42,109,116,102, 97, 99,101, 0, 42,116,102, 97, 99,101, 0, 42,109,118,101,114,116, 0, 42,109,101,100,103,101, 0, 42,100, +118,101,114,116, 0, 42,109, 99,111,108, 0, 42,109,115,116,105, 99,107,121, 0, 42,116,101,120, 99,111,109,101,115,104, 0, 42, +109,115,101,108,101, 99,116, 0, 42,101,100,105,116, 95,109,101,115,104, 0,118,100, 97,116, 97, 0,101,100, 97,116, 97, 0,102, +100, 97,116, 97, 0,116,111,116,101,100,103,101, 0,116,111,116,102, 97, 99,101, 0,116,111,116,115,101,108,101, 99,116, 0, 97, + 99,116, 95,102, 97, 99,101, 0,101,100,105,116,102,108, 97,103, 0, 99,117, 98,101,109, 97,112,115,105,122,101, 0,115,109,111, +111,116,104,114,101,115,104, 0,115,117, 98,100,105,118, 0,115,117, 98,100,105,118,114, 0,115,117, 98,115,117,114,102,116,121, +112,101, 0, 42,109,114, 0, 42,112,118, 0, 42,116,112, 97,103,101, 0,117,118, 91, 52, 93, 91, 50, 93, 0, 99,111,108, 91, 52, + 93, 0,116,114, 97,110,115,112, 0,116,105,108,101, 0,117,110,119,114, 97,112, 0,118, 49, 0,118, 50, 0,118, 51, 0,118, 52, + 0,101,100, 99,111,100,101, 0, 99,114,101, 97,115,101, 0, 98,119,101,105,103,104,116, 0,100,101,102, 95,110,114, 0, 42,100, +119, 0,116,111,116,119,101,105,103,104,116, 0, 99,111, 91, 51, 93, 0,110,111, 91, 51, 93, 0,117,118, 91, 50, 93, 0, 99,111, + 91, 50, 93, 0,105,110,100,101,120, 0,102, 0,105, 0,115, 91, 50, 53, 54, 93, 0,116,111,116,100,105,115,112, 0, 40, 42,100, +105,115,112,115, 41, 40, 41, 0,118, 91, 52, 93, 0,109,105,100, 0,118, 91, 50, 93, 0, 42,102, 97, 99,101,115, 0, 42, 99,111, +108,102, 97, 99,101,115, 0, 42,101,100,103,101,115, 0, 42,118,101,114,116,115, 0,108,101,118,101,108,115, 0,108,101,118,101, +108, 95, 99,111,117,110,116, 0, 99,117,114,114,101,110,116, 0,110,101,119,108,118,108, 0,101,100,103,101,108,118,108, 0,112, +105,110,108,118,108, 0,114,101,110,100,101,114,108,118,108, 0,117,115,101, 95, 99,111,108, 0, 42,101,100,103,101, 95,102,108, + 97,103,115, 0, 42,101,100,103,101, 95, 99,114,101, 97,115,101,115, 0, 42,118,101,114,116, 95,109, 97,112, 0, 42,101,100,103, +101, 95,109, 97,112, 0, 42,111,108,100, 95,102, 97, 99,101,115, 0, 42,111,108,100, 95,101,100,103,101,115, 0, 42,101,114,114, +111,114, 0,109,111,100,105,102,105,101,114, 0,115,117, 98,100,105,118, 84,121,112,101, 0,114,101,110,100,101,114, 76,101,118, +101,108,115, 0, 42,101,109, 67, 97, 99,104,101, 0, 42,109, 67, 97, 99,104,101, 0,100,101,102, 97,120,105,115, 0,112, 97,100, + 91, 54, 93, 0,108,101,110,103,116,104, 0,114, 97,110,100,111,109,105,122,101, 0,115,101,101,100, 0, 42,111, 98, 95, 97,114, +109, 0, 42,115,116, 97,114,116, 95, 99, 97,112, 0, 42,101,110,100, 95, 99, 97,112, 0, 42, 99,117,114,118,101, 95,111, 98, 0, + 42,111,102,102,115,101,116, 95,111, 98, 0,111,102,102,115,101,116, 91, 51, 93, 0,115, 99, 97,108,101, 91, 51, 93, 0,109,101, +114,103,101, 95,100,105,115,116, 0,102,105,116, 95,116,121,112,101, 0,111,102,102,115,101,116, 95,116,121,112,101, 0, 99,111, +117,110,116, 0, 97,120,105,115, 0,116,111,108,101,114, 97,110, 99,101, 0, 42,109,105,114,114,111,114, 95,111, 98, 0,115,112, +108,105,116, 95, 97,110,103,108,101, 0,118, 97,108,117,101, 0,114,101,115, 0,118, 97,108, 95,102,108, 97,103,115, 0,108,105, +109, 95,102,108, 97,103,115, 0,101, 95,102,108, 97,103,115, 0, 98,101,118,101,108, 95, 97,110,103,108,101, 0,100,101,102,103, +114,112, 95,110, 97,109,101, 91, 51, 50, 93, 0, 42,100,111,109, 97,105,110, 0, 42,102,108,111,119, 0, 42, 99,111,108,108, 0, +116,105,109,101, 0, 42,116,101,120,116,117,114,101, 0,115,116,114,101,110,103,116,104, 0,100,105,114,101, 99,116,105,111,110, + 0,109,105,100,108,101,118,101,108, 0,116,101,120,109, 97,112,112,105,110,103, 0, 42,109, 97,112, 95,111, 98,106,101, 99,116, + 0,117,118,108, 97,121,101,114, 95,110, 97,109,101, 91, 51, 50, 93, 0,117,118,108, 97,121,101,114, 95,116,109,112, 0, 42,112, +114,111,106,101, 99,116,111,114,115, 91, 49, 48, 93, 0, 42,105,109, 97,103,101, 0,110,117,109, 95,112,114,111,106,101, 99,116, +111,114,115, 0, 97,115,112,101, 99,116,120, 0, 97,115,112,101, 99,116,121, 0,112,101,114, 99,101,110,116, 0,102, 97, 99,101, + 67,111,117,110,116, 0,102, 97, 99, 0,114,101,112,101, 97,116, 0, 42,111, 98,106,101, 99,116, 99,101,110,116,101,114, 0,115, +116, 97,114,116,120, 0,115,116, 97,114,116,121, 0,104,101,105,103,104,116, 0,110, 97,114,114,111,119, 0,115,112,101,101,100, + 0,100, 97,109,112, 0,102, 97,108,108,111,102,102, 0,116,105,109,101,111,102,102,115, 0,108,105,102,101,116,105,109,101, 0, +100,101,102,111,114,109,102,108, 97,103, 0,109,117,108,116,105, 0, 42,112,114,101,118, 67,111,115, 0,115,117, 98,116, 97,114, +103,101,116, 91, 51, 50, 93, 0,112, 97,114,101,110,116,105,110,118, 91, 52, 93, 91, 52, 93, 0, 99,101,110,116, 91, 51, 93, 0, + 42,105,110,100,101,120, 97,114, 0,116,111,116,105,110,100,101,120, 0,102,111,114, 99,101, 0, 42, 99,108,111,116,104, 79, 98, +106,101, 99,116, 0, 42,115,105,109, 95,112, 97,114,109,115, 0, 42, 99,111,108,108, 95,112, 97,114,109,115, 0, 42,112,111,105, +110,116, 95, 99, 97, 99,104,101, 0,112,116, 99, 97, 99,104,101,115, 0, 42,120, 0, 42,120,110,101,119, 0, 42,120,111,108,100, + 0, 42, 99,117,114,114,101,110,116, 95,120,110,101,119, 0, 42, 99,117,114,114,101,110,116, 95,120, 0, 42, 99,117,114,114,101, +110,116, 95,118, 0, 42,109,102, 97, 99,101,115, 0,110,117,109,118,101,114,116,115, 0,110,117,109,102, 97, 99,101,115, 0, 42, + 98,118,104,116,114,101,101, 0, 42,118, 0, 42,100,109, 0, 99,102,114, 97, 0,111,112,101,114, 97,116,105,111,110, 0,118,101, +114,116,101,120, 0,116,111,116,105,110,102,108,117,101,110, 99,101, 0,103,114,105,100,115,105,122,101, 0, 42, 98,105,110,100, +119,101,105,103,104,116,115, 0, 42, 98,105,110,100, 99,111,115, 0,116,111,116, 99, 97,103,101,118,101,114,116, 0, 42,100,121, +110,103,114,105,100, 0, 42,100,121,110,105,110,102,108,117,101,110, 99,101,115, 0, 42,100,121,110,118,101,114,116,115, 0, 42, +112, 97,100, 50, 0,100,121,110,103,114,105,100,115,105,122,101, 0,100,121,110, 99,101,108,108,109,105,110, 91, 51, 93, 0,100, +121,110, 99,101,108,108,119,105,100,116,104, 0, 98,105,110,100,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 40, 42, 98,105,110,100, +102,117,110, 99, 41, 40, 41, 0, 42,112,115,121,115, 0,116,111,116,100,109,118,101,114,116, 0,116,111,116,100,109,101,100,103, +101, 0,116,111,116,100,109,102, 97, 99,101, 0,112,111,115,105,116,105,111,110, 0,114, 97,110,100,111,109, 95,112,111,115,105, +116,105,111,110, 0, 42,102, 97, 99,101,112, 97, 0,118,103,114,111,117,112, 0,112,114,111,116,101, 99,116, 0, 42,117,110,100, +111, 95,118,101,114,116,115, 0,117,110,100,111, 95,118,101,114,116,115, 95,116,111,116, 0,117,110,100,111, 95,115,105,103,110, + 97,108, 0,108,118,108, 0,116,111,116,108,118,108, 0,115,105,109,112,108,101, 0, 42,102,115,115, 0, 42,116, 97,114,103,101, +116, 0, 42, 97,117,120, 84, 97,114,103,101,116, 0,118,103,114,111,117,112, 95,110, 97,109,101, 91, 51, 50, 93, 0,107,101,101, +112, 68,105,115,116, 0,115,104,114,105,110,107, 84,121,112,101, 0,115,104,114,105,110,107, 79,112,116,115, 0,112,114,111,106, + 65,120,105,115, 0,115,117, 98,115,117,114,102, 76,101,118,101,108,115, 0, 42,111,114,105,103,105,110, 0,102, 97, 99,116,111, +114, 0,108,105,109,105,116, 91, 50, 93, 0,111,114,105,103,105,110, 79,112,116,115, 0,112,110,116,115,119, 0,111,112,110,116, +115,117, 0,111,112,110,116,115,118, 0,111,112,110,116,115,119, 0,116,121,112,101,117, 0,116,121,112,101,118, 0,116,121,112, +101,119, 0,102,117, 0,102,118, 0,102,119, 0,100,117, 0,100,118, 0,100,119, 0, 42,100,101,102, 0, 42,108, 97,116,116,105, + 99,101,100, 97,116, 97, 0,108, 97,116,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 42,101,100,105,116,108, 97,116,116, 0,118,101, + 99, 91, 56, 93, 91, 51, 93, 0, 42,115, 99,117,108,112,116, 0,112, 97,114,116,121,112,101, 0,112, 97,114, 49, 0,112, 97,114, + 50, 0,112, 97,114, 51, 0,112, 97,114,115,117, 98,115,116,114, 91, 51, 50, 93, 0, 42,116,114, 97, 99,107, 0, 42,112,114,111, +120,121, 0, 42,112,114,111,120,121, 95,103,114,111,117,112, 0, 42,112,114,111,120,121, 95,102,114,111,109, 0, 42, 97, 99,116, +105,111,110, 0, 42,112,111,115,101,108,105, 98, 0, 42,112,111,115,101, 0, 42,103,112,100, 0, 99,111,110,115,116,114, 97,105, +110,116, 67,104, 97,110,110,101,108,115, 0,100,101,102, 98, 97,115,101, 0,109,111,100,105,102,105,101,114,115, 0,114,101,115, +116,111,114,101, 95,109,111,100,101, 0, 42,109, 97,116, 98,105,116,115, 0, 97, 99,116, 99,111,108, 0,100,108,111, 99, 91, 51, + 93, 0,111,114,105,103, 91, 51, 93, 0,100,115,105,122,101, 91, 51, 93, 0,100,114,111,116, 91, 51, 93, 0,100,113,117, 97,116, + 91, 52, 93, 0,114,111,116, 65,120,105,115, 91, 51, 93, 0,100,114,111,116, 65,120,105,115, 91, 51, 93, 0,114,111,116, 65,110, +103,108,101, 0,100,114,111,116, 65,110,103,108,101, 0,111, 98,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 99,111,110,115,116,105, +110,118, 91, 52, 93, 91, 52, 93, 0,108, 97,121, 0, 99,111,108, 98,105,116,115, 0,116,114, 97,110,115,102,108, 97,103, 0,112, +114,111,116,101, 99,116,102,108, 97,103, 0,116,114, 97, 99,107,102,108, 97,103, 0,117,112,102,108, 97,103, 0,110,108, 97,102, +108, 97,103, 0,105,112,111,102,108, 97,103, 0,105,112,111,119,105,110, 0,115, 99, 97,102,108, 97,103, 0,115, 99, 97,118,105, +115,102,108, 97,103, 0, 98,111,117,110,100,116,121,112,101, 0,100,117,112,111,110, 0,100,117,112,111,102,102, 0,100,117,112, +115,116, 97, 0,100,117,112,101,110,100, 0,115,102, 0,109, 97,115,115, 0,100, 97,109,112,105,110,103, 0,105,110,101,114,116, +105, 97, 0,102,111,114,109,102, 97, 99,116,111,114, 0,114,100, 97,109,112,105,110,103, 0,109, 97,114,103,105,110, 0,109, 97, +120, 95,118,101,108, 0,109,105,110, 95,118,101,108, 0,109, 95, 99,111,110,116, 97, 99,116, 80,114,111, 99,101,115,115,105,110, +103, 84,104,114,101,115,104,111,108,100, 0,114,111,116,109,111,100,101, 0,100,116, 0,100,116,120, 0,101,109,112,116,121, 95, +100,114, 97,119,116,121,112,101, 0,112, 97,100, 49, 91, 51, 93, 0,101,109,112,116,121, 95,100,114, 97,119,115,105,122,101, 0, +100,117,112,102, 97, 99,101,115, 99, 97, 0,112,114,111,112, 0,115,101,110,115,111,114,115, 0, 99,111,110,116,114,111,108,108, +101,114,115, 0, 97, 99,116,117, 97,116,111,114,115, 0, 98, 98,115,105,122,101, 91, 51, 93, 0, 97, 99,116,100,101,102, 0,103, + 97,109,101,102,108, 97,103, 0,103, 97,109,101,102,108, 97,103, 50, 0, 42, 98,115,111,102,116, 0,115,111,102,116,102,108, 97, +103, 0, 97,110,105,115,111,116,114,111,112,105, 99, 70,114,105, 99,116,105,111,110, 91, 51, 93, 0, 99,111,110,115,116,114, 97, +105,110,116,115, 0,110,108, 97,115,116,114,105,112,115, 0,104,111,111,107,115, 0,112, 97,114,116,105, 99,108,101,115,121,115, +116,101,109, 0, 42,115,111,102,116, 0, 42,100,117,112, 95,103,114,111,117,112, 0,102,108,117,105,100,115,105,109, 70,108, 97, +103, 0,114,101,115,116,114,105, 99,116,102,108, 97,103, 0,115,104, 97,112,101,110,114, 0,115,104, 97,112,101,102,108, 97,103, + 0,114,101, 99, 97,108, 99,111, 0, 98,111,100,121, 95,116,121,112,101, 0, 42,102,108,117,105,100,115,105,109, 83,101,116,116, +105,110,103,115, 0, 42,100,101,114,105,118,101,100, 68,101,102,111,114,109, 0, 42,100,101,114,105,118,101,100, 70,105,110, 97, +108, 0,108, 97,115,116, 68, 97,116, 97, 77, 97,115,107, 0,115,116, 97,116,101, 0,105,110,105,116, 95,115,116, 97,116,101, 0, +103,112,117,108, 97,109,112, 0,112, 99, 95,105,100,115, 0, 42,100,117,112,108,105,108,105,115,116, 0, 99,117,114,105,110,100, +101,120, 0, 97, 99,116,105,118,101, 0,111,114,105,103,108, 97,121, 0,110,111, 95,100,114, 97,119, 0, 97,110,105,109, 97,116, +101,100, 0,111,109, 97,116, 91, 52, 93, 91, 52, 93, 0,111,114, 99,111, 91, 51, 93, 0,100,101,102,108,101, 99,116, 0,102,111, +114, 99,101,102,105,101,108,100, 0,115,104, 97,112,101, 0,116,101,120, 95,109,111,100,101, 0,107,105,110,107, 0,107,105,110, +107, 95, 97,120,105,115, 0,122,100,105,114, 0,102, 95,115,116,114,101,110,103,116,104, 0,102, 95,100, 97,109,112, 0,102, 95, +102,108,111,119, 0,102, 95,115,105,122,101, 0,102, 95,112,111,119,101,114, 0,109, 97,120,100,105,115,116, 0,109,105,110,100, +105,115,116, 0,102, 95,112,111,119,101,114, 95,114, 0,109, 97,120,114, 97,100, 0,109,105,110,114, 97,100, 0,112,100,101,102, + 95,100, 97,109,112, 0,112,100,101,102, 95,114,100, 97,109,112, 0,112,100,101,102, 95,112,101,114,109, 0,112,100,101,102, 95, +102,114,105, 99,116, 0,112,100,101,102, 95,114,102,114,105, 99,116, 0, 97, 98,115,111,114,112,116,105,111,110, 0,112,100,101, +102, 95,115, 98,100, 97,109,112, 0,112,100,101,102, 95,115, 98,105,102,116, 0,112,100,101,102, 95,115, 98,111,102,116, 0, 99, +108,117,109,112, 95,102, 97, 99, 0, 99,108,117,109,112, 95,112,111,119, 0,107,105,110,107, 95,102,114,101,113, 0,107,105,110, +107, 95,115,104, 97,112,101, 0,107,105,110,107, 95, 97,109,112, 0,102,114,101,101, 95,101,110,100, 0,116,101,120, 95,110, 97, + 98,108, 97, 0, 42,114,110,103, 0,102, 95,110,111,105,115,101, 0,119,101,105,103,104,116, 91, 49, 51, 93, 0,103,108,111, 98, + 97,108, 95,103,114, 97,118,105,116,121, 0,114,116, 91, 51, 93, 0,102,114, 97,109,101, 0,116,111,116,112,111,105,110,116, 0, +100, 97,116, 97, 95,116,121,112,101,115, 0, 42,105,110,100,101,120, 95, 97,114,114, 97,121, 0, 42,100, 97,116, 97, 91, 56, 93, + 0, 42, 99,117,114, 91, 56, 93, 0,115,116,101,112, 0,115,105,109,102,114, 97,109,101, 0,115,116, 97,114,116,102,114, 97,109, +101, 0,101,110,100,102,114, 97,109,101, 0,101,100,105,116,102,114, 97,109,101, 0,108, 97,115,116, 95,101,120, 97, 99,116, 0, +110, 97,109,101, 91, 54, 52, 93, 0,112,114,101,118, 95,110, 97,109,101, 91, 54, 52, 93, 0,105,110,102,111, 91, 54, 52, 93, 0, +112, 97,116,104, 91, 50, 52, 48, 93, 0,109,101,109, 95, 99, 97, 99,104,101, 0, 42,101,100,105,116, 0, 40, 42,102,114,101,101, + 95,101,100,105,116, 41, 40, 41, 0,108,105,110, 83,116,105,102,102, 0, 97,110,103, 83,116,105,102,102, 0,118,111,108,117,109, +101, 0,118,105,116,101,114, 97,116,105,111,110,115, 0,112,105,116,101,114, 97,116,105,111,110,115, 0,100,105,116,101,114, 97, +116,105,111,110,115, 0, 99,105,116,101,114, 97,116,105,111,110,115, 0,107, 83, 82, 72, 82, 95, 67, 76, 0,107, 83, 75, 72, 82, + 95, 67, 76, 0,107, 83, 83, 72, 82, 95, 67, 76, 0,107, 83, 82, 95, 83, 80, 76, 84, 95, 67, 76, 0,107, 83, 75, 95, 83, 80, 76, + 84, 95, 67, 76, 0,107, 83, 83, 95, 83, 80, 76, 84, 95, 67, 76, 0,107, 86, 67, 70, 0,107, 68, 80, 0,107, 68, 71, 0,107, 76, + 70, 0,107, 80, 82, 0,107, 86, 67, 0,107, 68, 70, 0,107, 77, 84, 0,107, 67, 72, 82, 0,107, 75, 72, 82, 0,107, 83, 72, 82, + 0,107, 65, 72, 82, 0, 99,111,108,108,105,115,105,111,110,102,108, 97,103,115, 0,110,117,109, 99,108,117,115,116,101,114,105, +116,101,114, 97,116,105,111,110,115, 0,119,101,108,100,105,110,103, 0,116,111,116,115,112,114,105,110,103, 0, 42, 98,112,111, +105,110,116, 0, 42, 98,115,112,114,105,110,103, 0,109,115,103, 95,108,111, 99,107, 0,109,115,103, 95,118, 97,108,117,101, 0, +110,111,100,101,109, 97,115,115, 0,110, 97,109,101,100, 86, 71, 95, 77, 97,115,115, 91, 51, 50, 93, 0,103,114, 97,118, 0,109, +101,100,105, 97,102,114,105, 99,116, 0,114,107,108,105,109,105,116, 0,112,104,121,115,105, 99,115, 95,115,112,101,101,100, 0, +103,111, 97,108,115,112,114,105,110,103, 0,103,111, 97,108,102,114,105, 99,116, 0,109,105,110,103,111, 97,108, 0,109, 97,120, +103,111, 97,108, 0,100,101,102,103,111, 97,108, 0,118,101,114,116,103,114,111,117,112, 0,110, 97,109,101,100, 86, 71, 95, 83, +111,102,116,103,111, 97,108, 91, 51, 50, 93, 0,102,117,122,122,121,110,101,115,115, 0,105,110,115,112,114,105,110,103, 0,105, +110,102,114,105, 99,116, 0,110, 97,109,101,100, 86, 71, 95, 83,112,114,105,110,103, 95, 75, 91, 51, 50, 93, 0,101,102,114, 97, + 0,105,110,116,101,114,118, 97,108, 0,108,111, 99, 97,108, 0,115,111,108,118,101,114,102,108, 97,103,115, 0, 42, 42,107,101, +121,115, 0,116,111,116,112,111,105,110,116,107,101,121, 0,115,101, 99,111,110,100,115,112,114,105,110,103, 0, 99,111,108, 98, + 97,108,108, 0, 98, 97,108,108,100, 97,109,112, 0, 98, 97,108,108,115,116,105,102,102, 0,115, 98, 99, 95,109,111,100,101, 0, + 97,101,114,111,101,100,103,101, 0,109,105,110,108,111,111,112,115, 0,109, 97,120,108,111,111,112,115, 0, 99,104,111,107,101, + 0,115,111,108,118,101,114, 95, 73, 68, 0,112,108, 97,115,116,105, 99, 0,115,112,114,105,110,103,112,114,101,108,111, 97,100, + 0, 42,115, 99,114, 97,116, 99,104, 0,115,104,101, 97,114,115,116,105,102,102, 0,105,110,112,117,115,104, 0, 42,112,111,105, +110,116, 99, 97, 99,104,101, 0, 42,101,102,102,101, 99,116,111,114, 95,119,101,105,103,104,116,115, 0,108, 99,111,109, 91, 51, + 93, 0,108,114,111,116, 91, 51, 93, 91, 51, 93, 0,108,115, 99, 97,108,101, 91, 51, 93, 91, 51, 93, 0,112, 97,100, 52, 91, 52, + 93, 0, 42,102,109,100, 0,115,104,111,119, 95, 97,100,118, 97,110, 99,101,100,111,112,116,105,111,110,115, 0,114,101,115,111, +108,117,116,105,111,110,120,121,122, 0,112,114,101,118,105,101,119,114,101,115,120,121,122, 0,114,101, 97,108,115,105,122,101, + 0,103,117,105, 68,105,115,112,108, 97,121, 77,111,100,101, 0,114,101,110,100,101,114, 68,105,115,112,108, 97,121, 77,111,100, +101, 0,118,105,115, 99,111,115,105,116,121, 86, 97,108,117,101, 0,118,105,115, 99,111,115,105,116,121, 77,111,100,101, 0,118, +105,115, 99,111,115,105,116,121, 69,120,112,111,110,101,110,116, 0,103,114, 97,118,120, 0,103,114, 97,118,121, 0,103,114, 97, +118,122, 0, 97,110,105,109, 83,116, 97,114,116, 0, 97,110,105,109, 69,110,100, 0,103,115,116, 97,114, 0,109, 97,120, 82,101, +102,105,110,101, 0,105,110,105, 86,101,108,120, 0,105,110,105, 86,101,108,121, 0,105,110,105, 86,101,108,122, 0, 42,111,114, +103, 77,101,115,104, 0, 42,109,101,115,104, 83,117,114,102, 97, 99,101, 0, 42,109,101,115,104, 66, 66, 0,115,117,114,102,100, + 97,116, 97, 80, 97,116,104, 91, 50, 52, 48, 93, 0, 98, 98, 83,116, 97,114,116, 91, 51, 93, 0, 98, 98, 83,105,122,101, 91, 51, + 93, 0,116,121,112,101, 70,108, 97,103,115, 0,100,111,109, 97,105,110, 78,111,118,101, 99,103,101,110, 0,118,111,108,117,109, +101, 73,110,105,116, 84,121,112,101, 0,112, 97,114,116, 83,108,105,112, 86, 97,108,117,101, 0,103,101,110,101,114, 97,116,101, + 84,114, 97, 99,101,114,115, 0,103,101,110,101,114, 97,116,101, 80, 97,114,116,105, 99,108,101,115, 0,115,117,114,102, 97, 99, +101, 83,109,111,111,116,104,105,110,103, 0,115,117,114,102, 97, 99,101, 83,117, 98,100,105,118,115, 0,112, 97,114,116,105, 99, +108,101, 73,110,102, 83,105,122,101, 0,112, 97,114,116,105, 99,108,101, 73,110,102, 65,108,112,104, 97, 0,102, 97,114, 70,105, +101,108,100, 83,105,122,101, 0, 42,109,101,115,104, 83,117,114,102, 78,111,114,109, 97,108,115, 0, 99,112,115, 84,105,109,101, + 83,116, 97,114,116, 0, 99,112,115, 84,105,109,101, 69,110,100, 0, 99,112,115, 81,117, 97,108,105,116,121, 0, 97,116,116,114, + 97, 99,116,102,111,114, 99,101, 83,116,114,101,110,103,116,104, 0, 97,116,116,114, 97, 99,116,102,111,114, 99,101, 82, 97,100, +105,117,115, 0,118,101,108,111, 99,105,116,121,102,111,114, 99,101, 83,116,114,101,110,103,116,104, 0,118,101,108,111, 99,105, +116,121,102,111,114, 99,101, 82, 97,100,105,117,115, 0,108, 97,115,116,103,111,111,100,102,114, 97,109,101, 0,109,105,115,116, +121,112,101, 0,104,111,114,114, 0,104,111,114,103, 0,104,111,114, 98, 0,104,111,114,107, 0,122,101,110,114, 0,122,101,110, +103, 0,122,101,110, 98, 0,122,101,110,107, 0, 97,109, 98,107, 0,102, 97,115,116, 99,111,108, 0,101,120,112,111,115,117,114, +101, 0,101,120,112, 0,114, 97,110,103,101, 0,108,105,110,102, 97, 99, 0,108,111,103,102, 97, 99, 0,103,114, 97,118,105,116, +121, 0, 97, 99,116,105,118,105,116,121, 66,111,120, 82, 97,100,105,117,115, 0,115,107,121,116,121,112,101, 0,111, 99, 99,108, +117,115,105,111,110, 82,101,115, 0,112,104,121,115,105, 99,115, 69,110,103,105,110,101, 0,116,105, 99,114, 97,116,101, 0,109, + 97,120,108,111,103,105, 99,115,116,101,112, 0,112,104,121,115,117, 98,115,116,101,112, 0,109, 97,120,112,104,121,115,116,101, +112, 0,109,105,115,105, 0,109,105,115,116,115,116, 97, 0,109,105,115,116,100,105,115,116, 0,109,105,115,116,104,105, 0,115, +116, 97,114,114, 0,115,116, 97,114,103, 0,115,116, 97,114, 98, 0,115,116, 97,114,107, 0,115,116, 97,114,115,105,122,101, 0, +115,116, 97,114,109,105,110,100,105,115,116, 0,115,116, 97,114,100,105,115,116, 0,115,116, 97,114, 99,111,108,110,111,105,115, +101, 0,100,111,102,115,116, 97, 0,100,111,102,101,110,100, 0,100,111,102,109,105,110, 0,100,111,102,109, 97,120, 0, 97,111, +100,105,115,116, 0, 97,111,100,105,115,116,102, 97, 99, 0, 97,111,101,110,101,114,103,121, 0, 97,111, 98,105, 97,115, 0, 97, +111,109,111,100,101, 0, 97,111,115, 97,109,112, 0, 97,111,109,105,120, 0, 97,111, 99,111,108,111,114, 0, 97,111, 95, 97,100, + 97,112,116, 95,116,104,114,101,115,104, 0, 97,111, 95, 97,100, 97,112,116, 95,115,112,101,101,100, 95,102, 97, 99, 0, 97,111, + 95, 97,112,112,114,111,120, 95,101,114,114,111,114, 0, 97,111, 95, 97,112,112,114,111,120, 95, 99,111,114,114,101, 99,116,105, +111,110, 0, 97,111, 95,105,110,100,105,114,101, 99,116, 95,101,110,101,114,103,121, 0, 97,111, 95,105,110,100,105,114,101, 99, +116, 95, 98,111,117,110, 99,101,115, 0, 97,111, 95,112, 97,100, 0, 97,111, 95,115, 97,109,112, 95,109,101,116,104,111,100, 0, + 97,111, 95,103, 97,116,104,101,114, 95,109,101,116,104,111,100, 0, 97,111, 95, 97,112,112,114,111,120, 95,112, 97,115,115,101, +115, 0, 42, 97,111,115,112,104,101,114,101, 0, 42, 97,111,116, 97, 98,108,101,115, 0,115,101,108, 99,111,108, 0,115,120, 0, +115,121, 0, 42,108,112, 70,111,114,109, 97,116, 0, 42,108,112, 80, 97,114,109,115, 0, 99, 98, 70,111,114,109, 97,116, 0, 99, + 98, 80, 97,114,109,115, 0,102, 99, 99, 84,121,112,101, 0,102, 99, 99, 72, 97,110,100,108,101,114, 0,100,119, 75,101,121, 70, +114, 97,109,101, 69,118,101,114,121, 0,100,119, 81,117, 97,108,105,116,121, 0,100,119, 66,121,116,101,115, 80,101,114, 83,101, + 99,111,110,100, 0,100,119, 70,108, 97,103,115, 0,100,119, 73,110,116,101,114,108,101, 97,118,101, 69,118,101,114,121, 0, 97, +118,105, 99,111,100,101, 99,110, 97,109,101, 91, 49, 50, 56, 93, 0, 42, 99,100, 80, 97,114,109,115, 0, 42,112, 97,100, 0, 99, +100, 83,105,122,101, 0,113,116, 99,111,100,101, 99,110, 97,109,101, 91, 49, 50, 56, 93, 0, 99,111,100,101, 99, 84,121,112,101, + 0, 99,111,100,101, 99, 83,112, 97,116,105, 97,108, 81,117, 97,108,105,116,121, 0, 99,111,100,101, 99, 0, 99,111,100,101, 99, + 70,108, 97,103,115, 0, 99,111,108,111,114, 68,101,112,116,104, 0, 99,111,100,101, 99, 84,101,109,112,111,114, 97,108, 81,117, + 97,108,105,116,121, 0,109,105,110, 83,112, 97,116,105, 97,108, 81,117, 97,108,105,116,121, 0,109,105,110, 84,101,109,112,111, +114, 97,108, 81,117, 97,108,105,116,121, 0,107,101,121, 70,114, 97,109,101, 82, 97,116,101, 0, 98,105,116, 82, 97,116,101, 0, + 97,117,100,105,111, 95, 99,111,100,101, 99, 0,118,105,100,101,111, 95, 98,105,116,114, 97,116,101, 0, 97,117,100,105,111, 95, + 98,105,116,114, 97,116,101, 0, 97,117,100,105,111, 95,109,105,120,114, 97,116,101, 0, 97,117,100,105,111, 95,118,111,108,117, +109,101, 0,103,111,112, 95,115,105,122,101, 0,114, 99, 95,109,105,110, 95,114, 97,116,101, 0,114, 99, 95,109, 97,120, 95,114, + 97,116,101, 0,114, 99, 95, 98,117,102,102,101,114, 95,115,105,122,101, 0,109,117,120, 95,112, 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, 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,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,114,116, 50, 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,119,105,110,112,111,115, + 0,112,108, 97,110,101,115, 0,105,109,116,121,112,101, 0,115,117, 98,105,109,116,121,112,101, 0,113,117, 97,108,105,116,121, + 0,100,105,115,112,108, 97,121,109,111,100,101, 0,114,112, 97,100, 49, 0,114,112, 97,100, 50, 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,114,101,110,100,101,114,101,114, 0,111, 99,114,101,115, 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,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, 71, 73,113, +117, 97,108,105,116,121, 0, 71, 73, 99, 97, 99,104,101, 0, 71, 73,109,101,116,104,111,100, 0, 71, 73,112,104,111,116,111,110, +115, 0, 71, 73,100,105,114,101, 99,116, 0, 89, 70, 95, 65, 65, 0, 89, 70,101,120,112,111,114,116,120,109,108, 0, 89, 70, 95, +110,111, 98,117,109,112, 0, 89, 70, 95, 99,108, 97,109,112,114,103, 98, 0,121,102,112, 97,100, 49, 0, 71, 73,100,101,112,116, +104, 0, 71, 73, 99, 97,117,115,100,101,112,116,104, 0, 71, 73,112,105,120,101,108,115,112,101,114,115, 97,109,112,108,101, 0, + 71, 73,112,104,111,116,111,110, 99,111,117,110,116, 0, 71, 73,109,105,120,112,104,111,116,111,110,115, 0, 71, 73,112,104,111, +116,111,110,114, 97,100,105,117,115, 0, 89, 70, 95,114, 97,121,100,101,112,116,104, 0, 89, 70, 95, 65, 65,112, 97,115,115,101, +115, 0, 89, 70, 95, 65, 65,115, 97,109,112,108,101,115, 0,121,102,112, 97,100, 50, 0, 71, 73,115,104, 97,100,111,119,113,117, + 97,108,105,116,121, 0, 71, 73,114,101,102,105,110,101,109,101,110,116, 0, 71, 73,112,111,119,101,114, 0, 71, 73,105,110,100, +105,114,112,111,119,101,114, 0, 89, 70, 95,103, 97,109,109, 97, 0, 89, 70, 95,101,120,112,111,115,117,114,101, 0, 89, 70, 95, +114, 97,121, 98,105, 97,115, 0, 89, 70, 95, 65, 65,112,105,120,101,108,115,105,122,101, 0, 89, 70, 95, 65, 65,116,104,114,101, +115,104,111,108,100, 0, 98, 97, 99,107, 98,117,102, 91, 49, 54, 48, 93, 0,112,105, 99, 91, 49, 54, 48, 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, 49, 54, 48, 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,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,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,109, 97,116,109,111,100,101, 0, +102,114, 97,109,105,110,103, 0,114,116, 49, 0,100,111,109,101, 0,115,116,101,114,101,111,102,108, 97,103, 0, 42, 42, 98,114, +117,115,104,101,115, 0, 97, 99,116,105,118,101, 95, 98,114,117,115,104, 95,105,110,100,101,120, 0, 98,114,117,115,104, 95, 99, +111,117,110,116, 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,116,111,111,108, 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, 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,110, 97,109,101, 91, 51, + 54, 93, 0,109, 97,116, 91, 51, 93, 91, 51, 93, 0,112,105,118,111,116, 91, 51, 93, 0,116, 97, 98,108,101,116, 95,115,105,122, +101, 0,116, 97, 98,108,101,116, 95,115,116,114,101,110,103,116,104, 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, 42,118,112, 97,105,110,116, 0, 42,119,112, 97,105,110,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,101,100,105,116, 98,117,116,102,108, 97,103, + 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,112, 97,100, 91, 50, 93, 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,114,101,116,111,112,111, 95,109,111,100,101, 0,114,101,116,111,112,111, 95,112, 97,105,110,116, 95,116,111,111,108, 0, +108,105,110,101, 95,100,105,118, 0,101,108,108,105,112,115,101, 95,100,105,118, 0,114,101,116,111,112,111, 95,104,111,116,115, +112,111,116, 0,109,117,108,116,105,114,101,115, 95,115,117, 98,100,105,118, 95,116,121,112,101, 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,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, 97,117,116,111, 95,110,111,114,109, 97, +108,105,122,101, 0,105,110,116,112, 97,100, 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,103,114, 97,118,105,116,121, 91, 51, 93, + 0, 42, 99, 97,109,101,114, 97, 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, 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, +115,111,117,110,100, 95,104, 97,110,100,108,101,115, 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,106,117,109,112,102,114, 97,109,101, 0,112, 97,100, 53, 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, 98,108,101,110,100, 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,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,118,105,101,119, 98,117,116, 0,114,102,108, 97,103, 0, +118,105,101,119,108,111, 99,107, 0,112,101,114,115,112, 0,118,105,101,119, 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,116,111,112,111, 95,118,105,101,119, 95,100, 97,116, 97, 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,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,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,108, 97,121, 95, +117,115,101,100, 0, 42,111, 98, 95, 99,101,110,116,114,101, 0, 42, 98,103,112,105, 99, 0,111, 98, 95, 99,101,110,116,114,101, + 95, 98,111,110,101, 91, 51, 50, 93, 0,108, 97,121, 97, 99,116, 0,100,114, 97,119,116,121,112,101, 0,115, 99,101,110,101,108, +111, 99,107, 0, 97,114,111,117,110,100, 0,112,105,118,111,116, 95,108, 97,115,116, 0,103,114,105,100, 0,103,114,105,100,118, +105,101,119, 0,112, 97,100,102, 0,110,101, 97,114, 0,102, 97,114, 0,103,114,105,100,108,105,110,101,115, 0,103,114,105,100, +102,108, 97,103, 0,103,114,105,100,115,117, 98,100,105,118, 0,109,111,100,101,115,101,108,101, 99,116, 0,107,101,121,102,108, + 97,103,115, 0,116,119,116,121,112,101, 0,116,119,109,111,100,101, 0,116,119,102,108, 97,103, 0,116,119,100,114, 97,119,102, +108, 97,103, 0, 99,117,115,116,111,109,100, 97,116, 97, 95,109, 97,115,107, 0, 97,102,116,101,114,100,114, 97,119, 0,122, 98, +117,102, 0,120,114, 97,121, 0,110,100,111,102,109,111,100,101, 0,110,100,111,102,102,105,108,116,101,114, 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, 99,117,114,115,111,114, 91, 50, 93, 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, 42,115, 99,114,101,101,110, 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,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,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, 50, 52, 93, 0,100,105,114, 91, 50, 52, 48, 93, 0,102,105,108,101, 91, 56, 48, 93, 0,114,101,110, 97,109,101, +102,105,108,101, 91, 56, 48, 93, 0,115,111,114,116, 0,100,105,115,112,108, 97,121, 0, 97, 99,116,105,118,101, 95, 98,111,111, +107,109, 97,114,107, 0, 97, 99,116,105,118,101, 95,102,105,108,101, 0,115,101,108,115,116, 97,116,101, 0,102, 95,102,112, 0, +109,101,110,117, 0,102,112, 95,115,116,114, 91, 56, 93, 0, 42,112,117,112,109,101,110,117, 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,108,111, 97,100,105,109, 97,103,101, 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,115,101, 97,114, 99,104, 95,102,108, 97,103,115, 0,100,111, 95, 0,111,117,116,108,105, +110,101,118,105,115, 0,115,116,111,114,101,102,108, 97,103, 0, 42, 99,117,109, 97,112, 0,105,109, 97,110,114, 0, 99,117,114, +116,105,108,101, 0,105,109,116,121,112,101,110,114, 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, 99,101,110,116,120, 0, 99,101,110,116,121, 0, 42,116,101, +120,116, 0,116,111,112, 0,118,105,101,119,108,105,110,101,115, 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,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, 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, 50, 53, 54, 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,114,101,100,114, 97,119,115, 0, 42,105,100, 0, 97,115,112,101, + 99,116, 0, 42, 99,117,114,102,111,110,116, 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,110,117,109,116,105,108,101,115,120, 0,110,117,109,116,105,108,101,115,121, + 0,118,105,101,119,114,101, 99,116, 0, 98,111,111,107,109, 97,114,107,114,101, 99,116, 0,115, 99,114,111,108,108,112,111,115, + 0,115, 99,114,111,108,108,104,101,105,103,104,116, 0,115, 99,114,111,108,108, 97,114,101, 97, 0,114,101,116,118, 97,108, 0, +112,114,118, 95,119, 0,112,114,118, 95,104, 0, 40, 42,114,101,116,117,114,110,102,117,110, 99, 41, 40, 41, 0, 40, 42,114,101, +116,117,114,110,102,117,110, 99, 95,101,118,101,110,116, 41, 40, 41, 0, 40, 42,114,101,116,117,114,110,102,117,110, 99, 95, 97, +114,103,115, 41, 40, 41, 0, 42, 97,114,103, 49, 0, 42, 97,114,103, 50, 0, 42,109,101,110,117,112, 0, 42,105,109,103, 0,108, +101,110, 95, 97,108,108,111, 99, 0, 99,117,114,115,111,114, 0,114,112,116, 95,109, 97,115,107, 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,102,105,108,101,110, 97,109,101, 91, 50, 53, 54, 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,112, 97,100, 91, 49, 93, 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,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,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, 98,111,120, 0,119, 99,111,108, 95,115, 99,114,111,108,108, 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,105, 99,111,110,102,105,108,101, 91, 56, 48, + 93, 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, 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, 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,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,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,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,118,101,114,116,101,120, 95,115,105,122,101, + 0,102, 97, 99,101,100,111,116, 95,115,105,122,101, 0, 98,112, 97,100, 91, 50, 93, 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,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,104,112, 97,100, 91, 51, 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,115,110,100, 0, +116, 97, 99,116, 0,116,110,108, 97, 0,116,115,101,113, 0,116,105,109, 97, 0,116,105,109, 97,115,101,108, 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, 97,114,109, 91, 50, 48, 93, 0, 97, 99,116,105,118,101, 95,116,104,101,109,101, 95,103,114,111,117,112, 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, 49, 54, 48, 93, 0,102,111,110,116,100,105,114, 91, 49, 54, 48, 93, 0,114,101,110,100,101,114,100,105,114, 91, 49, 54, 48, + 93, 0,116,101,120,116,117,100,105,114, 91, 49, 54, 48, 93, 0,112,108,117,103,116,101,120,100,105,114, 91, 49, 54, 48, 93, 0, +112,108,117,103,115,101,113,100,105,114, 91, 49, 54, 48, 93, 0,112,121,116,104,111,110,100,105,114, 91, 49, 54, 48, 93, 0,115, +111,117,110,100,100,105,114, 91, 49, 54, 48, 93, 0,121,102,101,120,112,111,114,116,100,105,114, 91, 49, 54, 48, 93, 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,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,119,109,112, 97,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,110,100,111,102, 95,112, + 97,110, 0,110,100,111,102, 95,114,111,116, 97,116,101, 0, 99,117,114,115,115,105,122,101, 0,105,112,111, 95,110,101,119, 0, +118,101,114,115,101,109, 97,115,116,101,114, 91, 49, 54, 48, 93, 0,118,101,114,115,101,117,115,101,114, 91, 49, 54, 48, 93, 0, +103,108, 97,108,112,104, 97, 99,108,105,112, 0, 99,111, 98, 97, 95,119,101,105,103,104,116, 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,102,117,108, +108, 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,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,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, 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,110, 97,109,101, 91, 56, 48, 93, 0, 42,105, 98,117,102, 0, 42,105, 98,117,102, 95, 99,111,109,112, 0, 42, +115,101, 49, 0, 42,115,101, 50, 0, 42,115,101, 51, 0,110,114, 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,115, 97,116,117,114, 97,116,105,111,110, 0,100,105,114, 91, 49, 54, 48, 93, 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,111,114,120, 0,111,114,121, + 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,116,115,116,114,105,112,100, 97,116, 97, 0, 42,116,115,116,114,105,112,100, 97,116, 97, 95,115,116, 97,114,116,115,116, +105,108,108, 0, 42,116,115,116,114,105,112,100, 97,116, 97, 95,101,110,100,115,116,105,108,108, 0, 42,105, 98,117,102, 95,115, +116, 97,114,116,115,116,105,108,108, 0, 42,105, 98,117,102, 95,101,110,100,115,116,105,108,108, 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,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, 42,115,116,114,105,112, 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,111,117,110,100, 95,104, 97,110,100,108,101, 0,108, +101,118,101,108, 0,112, 97,110, 0,115, 99,101,110,101,110,114, 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, 50, 53, 54, 93, 0, 97, 99,116, 95,115,111,117,110, +100,100,105,114, 91, 50, 53, 54, 93, 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, 83, 99, 97,108,101,120, 70,105,110, 0, 83, 99, 97,108,101,121, 70,105,110, 0,120, 73,110,105, 0,120, 70,105, +110, 0,121, 73,110,105, 0,121, 70,105,110, 0,114,111,116, 73,110,105, 0,114,111,116, 70,105,110, 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, 51, 50, 93, 0,118,103,114,111,117,112,110, 97,109,101, 95,118, + 91, 51, 50, 93, 0, 42,107,101,121,115, 0,109,105,110,102, 97, 99, 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, 51, 50, 93, 0,116,111,103,103,108,101, + 78, 97,109,101, 91, 51, 50, 93, 0,118, 97,108,117,101, 91, 51, 50, 93, 0,109, 97,120,118, 97,108,117,101, 91, 51, 50, 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, 51, 50, 93, 0, +100, 97,109,112,116,105,109,101,114, 0,112,114,111,112,110, 97,109,101, 91, 51, 50, 93, 0,109, 97,116,110, 97,109,101, 91, 51, + 50, 93, 0, 97,120,105,115,102,108, 97,103, 0,112,111,115,101, 99,104, 97,110,110,101,108, 91, 51, 50, 93, 0, 99,111,110,115, +116,114, 97,105,110,116, 91, 51, 50, 93, 0, 42,102,114,111,109, 79, 98,106,101, 99,116, 0,115,117, 98,106,101, 99,116, 91, 51, + 50, 93, 0, 98,111,100,121, 91, 51, 50, 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,109,111,100,117,108,101, 91, 54, 52, 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, 51, 50, 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,115,110,100,110,114, 0,112, 97,100, 49, 91, 50, 93, 0, +112,105,116, 99,104, 0,115,111,117,110,100, 51, 68, 0,109, 97,107,101, 99,111,112,121, 0, 99,111,112,121,109, 97,100,101, 0, +112, 97,100, 50, 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,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, 98,117,116,115,116, 97, 0, 98,117,116,101,110,100, 0,109,105,110, 0,109, 97,120, 0, +118,105,115,105,102, 97, 99, 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, + 51, 50, 93, 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, 51, 50, 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, 42,115,117, 98,116, 97,114,103,101,116, 0,103,111, 0, 97, 99, 99,101, +108,108,101,114, 97,116,105,111,110, 0,109, 97,120,115,112,101,101,100, 0,109, 97,120,114,111,116,115,112,101,101,100, 0,109, + 97,120,116,105,108,116,115,112,101,101,100, 0,116,105,108,116,100, 97,109,112, 0,115,112,101,101,100,100, 97,109,112, 0, 42, +115,111,117,114, 99,101, 0,102,114, 97,109,101,115,107,105,112, 0,109,117,116,101, 0, 99,104, 97,110,103,101,100, 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, 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, 97,114,101, + 97, 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,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, 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,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, 99,111,110,115, +116,102,108, 97,103, 0,105,107,102,108, 97,103, 0,115,101,108,101, 99,116,102,108, 97,103, 0, 97,103,114,112, 95,105,110,100, +101,120, 0, 42, 98,111,110,101, 0, 42, 99,104,105,108,100, 0,105,107,116,114,101,101, 0, 42, 98, 95, 98,111,110,101, 95,109, + 97,116,115, 0, 42,100,117, 97,108, 95,113,117, 97,116, 0, 42, 98, 95, 98,111,110,101, 95,100,117, 97,108, 95,113,117, 97,116, +115, 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, 99,117,115,116,111,109, 0, 99,104, 97,110, 98, 97,115,101, 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,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,102,105,108,116,101,114,102,108, 97,103, 0, 97,100,115, 0, 97, 99, +116,110,114, 0, 97, 99,116,119,105,100,116,104, 0,116,105,109,101,115,108,105,100,101, 0, 42,103,114,112, 0,116,101,109,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, 51, 50, 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,122,109,105,110, 0,122,109, + 97,120, 0,112, 97,100, 91, 57, 93, 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,115, 99, 97,108,101, 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, 42,110,101,119, 95,115,111, 99,107, 0,110,115, 0,108,105,109,105,116, 0, +115,116, 97, 99,107, 95,105,110,100,101,120, 0,105,110,116,101,114,110, 0,115,116, 97, 99,107, 95,105,110,100,101,120, 95,101, +120,116, 0,108,111, 99,120, 0,108,111, 99,121, 0,111,119,110, 95,105,110,100,101,120, 0,116,111, 95,105,110,100,101,120, 0, + 42,116,111,115,111, 99,107, 0, 42,108,105,110,107, 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, 42,115,116,111,114, 97,103,101, 0,109,105,110,105,119,105,100,116,104, 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,110,111,100,101,115, 0,108,105,110,107,115, 0, 42,115,116, 97, + 99,107, 0, 42,116,104,114,101, 97,100,115,116, 97, 99,107, 0,105,110,105,116, 0,115,116, 97, 99,107,115,105,122,101, 0, 99, +117,114, 95,105,110,100,101,120, 0, 97,108,108,116,121,112,101,115, 0, 42,111,119,110,116,121,112,101, 0, 42,115,101,108,105, +110, 0, 42,115,101,108,111,117,116, 0, 40, 42,116,105,109,101, 99,117,114,115,111,114, 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, +116, 99,104, 0, 42,115,100,104, 0, 99,121, 99,108,105, 99, 0,109,111,118,105,101, 0,115, 97,109,112,108,101,115, 0,109,105, +110,115,112,101,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, 99,117,114,118,101,100, 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,105,116,101,114, 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,115, 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,120, 49, 0,120, 50, 0,121, 49, 0,121, 50, 0, 99,111,108,110, 97,109,101, + 91, 51, 50, 93, 0, 98,107,116,121,112,101, 0,114,111,116, 97,116,105,111,110, 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, 42,100,105, 99,116, 0, 42, +110,111,100,101, 0, 97,110,103,108,101, 95,111,102,115, 0, 99,111,108,109,111,100, 0,109,105,120, 0,116,104,114,101,115,104, +111,108,100, 0,102, 97,100,101, 0,109, 0, 99, 0,106,105,116, 0,112,114,111,106, 0,102,105,116, 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, 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,111,102,102,115,101,116, 91, + 50, 93, 0, 99,108,111,110,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,116,111,111,108, 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,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,118,101, +108, 91, 51, 93, 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,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,114,116, 91, 50, 93, 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, 97,108,105,118,101, + 0,108,111,111,112, 0,104, 97,105,114, 95,105,110,100,101,120, 0, 42, 98,111,105,100,115, 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,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,115,105,109,112,108,105,102,121, 95, +102,108, 97,103, 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,106,105,116,102, 97, 99, 0,101,102,102, 95,104, + 97,105,114, 0,103,114,105,100, 95,114,101,115, 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,114,101, 97, 99,116,115,104, 97,112,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,100, 97,109,112,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,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, 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,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, 51, 50, 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,116,114,101,101, 0, 42,112,100,100, 0, 42,102,114, 97,110,100, 0, 67,100,105, +115, 0, 67,118,105, 0, 91, 51, 93, 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,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,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,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, 42,116,121,112,101,115,116,114, 0, 42,109,101,115,115, 97,103,101, 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,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,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,107,101,121, 99,111,110,102,105,103,115, 0, 42,100,101,102, 97, +117,108,116, 99,111,110,102, 0,100,101,102, 97,117,108,116, 97, 99,116,109, 97,112, 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,110,101,119,115, 99,114,101,101,110, 0,115, 99,114,101,101,110,110, 97,109,101, 91, 51, 50, 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, 97,100,100,109,111,117,115,101,109,111,118,101, 0,108, 97,115,116, 95,116,121,112,101, 0,108, 97,115,116, 95, +118, 97,108, 0,108, 97,115,116, 95, 99,108,105, 99,107, 95,116,105,109,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, 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,105,116,101,109,115, 0,115,112, 97, 99,101,105,100, 0, +114,101,103,105,111,110,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,114,101,112,111,114,116,115, 0,109, 97, 99,114,111, 0, 42,111,112,109, 0,109,118, 97,108, 91, 50, 93, 0,112, +114,101,118,120, 0,112,114,101,118,121, 0,117,110,105, 99,111,100,101, 0, 97,115, 99,105,105, 0, 42,107,101,121,109, 97,112, + 95,105,100,110, 97,109,101, 0, 99,117,115,116,111,109, 0, 99,117,115,116,111,109,100, 97,116, 97,102,114,101,101, 0, 42,101, +100, 97,116, 97, 0,105,110,102,108,117,101,110, 99,101, 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, 42,114,110, 97, 95,112, 97,116, +104, 0, 97,114,114, 97,121, 95,105,110,100,101,120, 0,105,100,116,121,112,101, 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, 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,103,114,111,117,112, 91, 54, 52, 93, 0,116,101,109,112,108, 97,116,101,115, 0,103,114,111,117,112,109,111,100,101, 0,112, + 97,116,104,115, 0,107,101,121,105,110,103,102,108, 97,103, 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, 99, 99,117,114, 97, 99,121, 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, 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, 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,118,101,108,111, 99,105,116,121, 91, 51, 93, + 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, 0, 0, 84, 89, 80, 69, +198, 1, 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,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,105, 0, +118,101, 99, 50,102, 0,118,101, 99, 50,100, 0,118,101, 99, 51,105, 0,118,101, 99, 51,102, 0,118,101, 99, 51,100, 0,118,101, + 99, 52,105, 0,118,101, 99, 52,102, 0,118,101, 99, 52,100, 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, 86,111,120,101,108, 68, 97,116, 97, 0, + 98, 78,111,100,101, 84,114,101,101, 0, 84,101,120, 77, 97,112,112,105,110,103, 0, 76, 97,109,112, 0, 67,117,114,118,101, 77, + 97,112,112,105,110,103, 0, 87, 97,118,101, 0, 86,111,108,117,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, 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, 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, 77, 83,101,108,101, 99,116, 0, 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, 80, 97,114,116,105, 97,108, 86,105,115,105, 98,105,108,105,116,121, 0, 77, 68,101,102,111,114, +109, 87,101,105,103,104,116, 0, 77, 84,101,120, 80,111,108,121, 0, 77, 76,111,111,112, 85, 86, 0, 77, 76,111,111,112, 67,111, +108, 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, 77, 68,105,115, +112,115, 0, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 68, 71, 69, 68, 82, 65, 87, 32, 40, 49, 60, 60, 49, 41, 32, 35, +100,101,102,105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, 32, 40, 49, 60, 60, 50, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, + 95, 70, 71, 79, 78, 32, 40, 49, 60, 60, 51, 41, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 68, 71, 69, 82, 69, 78, + 68, 69, 82, 32, 40, 49, 60, 60, 53, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 76, 79, 79, 83, 69, 69, 68, 71, 69, 32, + 40, 49, 60, 60, 55, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, 95, 76, 65, 83, 84, 32, 40, 49, 60, 60, + 56, 41, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 72, 65, 82, 80, 32, 40, 49, 60, 60, 57, 41, 32, 32, 32, 35,100,101, +102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 49, 32, 49, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, + 86, 50, 32, 50, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 51, 32, 52, 32, 35,100,101,102,105,110,101, + 32, 77, 69, 95, 70, 76, 73, 80, 86, 52, 32, 56, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 89, 32, 49, + 54, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 90, 32, 51, 50, 32, 35,100,101,102,105,110,101, 32, 77, + 69, 95, 80, 82, 79, 74, 89, 90, 32, 54, 52, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 49, 86, 50, 32, 49, 32, 35, +100,101,102,105,110,101, 32, 77, 69, 95, 86, 50, 86, 51, 32, 50, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, 49, + 32, 52, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, 52, 32, 52, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, + 86, 52, 86, 49, 32, 56, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 77, 79, 79, 84, 72, 32, 49, 32, 35,100,101,102, +105,110,101, 32, 77, 69, 95, 70, 65, 67, 69, 95, 83, 69, 76, 32, 50, 32, 32, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, + 83, 69,108, 32, 48, 32, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 83, 69,108, 32, 49, 32, 35,100,101,102,105,110,101, 32, + 77, 69, 95, 70, 83, 69, 76, 32, 50, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 69, 67, 84, 32, 49, 32, 32, + 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 67, 84, 73, 86, 69, 32, 50, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, + 83, 69, 76, 49, 32, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 50, 32, 56, 32, 35,100,101,102,105,110,101, + 32, 84, 70, 95, 83, 69, 76, 51, 32, 49, 54, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 52, 32, 51, 50, 32, 35, +100,101,102,105,110,101, 32, 84, 70, 95, 72, 73, 68, 69, 32, 54, 52, 32, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, + 89, 78, 65, 77, 73, 67, 32, 49, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 83, 79, 82, 84, 32, 50, 32, + 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 69, 88, 32, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 82, + 69, 68, 86, 69, 82, 84, 32, 56, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 76, 73, 71, 72, 84, 32, 49, 54, 32, 35,100,101, +102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, 67, 79, 76, 32, 54, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, + 84, 73, 76, 69, 83, 32, 49, 50, 56, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 32, + 50, 53, 54, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 87, 79, 83, 73, 68, 69, 32, 53, 49, 50, 32, 35,100,101,102,105, +110,101, 32, 84, 70, 95, 73, 78, 86, 73, 83, 73, 66, 76, 69, 32, 49, 48, 50, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, + 79, 66, 67, 79, 76, 32, 50, 48, 52, 56, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 50, + 32, 52, 48, 57, 54, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 68, 79, 87, 32, 56, 49, 57, 50, 32, 35,100, +101,102,105,110,101, 32, 84, 70, 95, 66, 77, 70, 79, 78, 84, 32, 49, 54, 51, 56, 52, 32, 32, 35,100,101,102,105,110,101, 32, 84, + 70, 95, 83, 79, 76, 73, 68, 32, 48, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 68, 68, 32, 49, 32, 35,100,101,102,105, +110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 32, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 67, 76, 73, 80, 32, 52, 32, + 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 85, 66, 32, 51, 32, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, + 69, 80, 82, 69, 67, 65, 84, 69, 68, 49, 32, 49, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, + 69, 68, 50, 32, 50, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 51, 32, 52, 32, 35, +100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 52, 32, 56, 32, 35,100,101,102,105,110,101, 32, + 84, 70, 95, 80, 73, 78, 49, 32, 49, 54, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 50, 32, 51, 50, 32, 35,100, +101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 51, 32, 54, 52, 32, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 52, + 32, 49, 50, 56, 32, 35,101,110,100,105,102,100, 32, 99,104, 97,114, 32,117,115,101, 95, 99,111,108, 44, 32,102,108, 97,103, 59, + 10, 10, 9, 47, 42, 32, 83,112,101, 99,105, 97,108, 32,108,101,118,101,108, 32, 49, 32,100, 97,116, 97, 32,116,104, 97,116, 32, + 99, 97,110,110,111,116, 32, 98,101, 32,109,111,100,105,102,105,101,100, 32,102,114,111,109, 32,111,116,104,101,114, 32,108,101, +118,101,108,115, 32, 42, 47, 10, 9, 67,117,115,116,111,109, 68, 97,116, 97, 32,118,100, 97,116, 97, 59, 10, 9, 67,117,115,116, +111,109, 68, 97,116, 97, 32,102,100, 97,116, 97, 59, 10, 9,115,104,111,114,116, 32, 42,101,100,103,101, 95,102,108, 97,103,115, + 59, 10, 9, 99,104, 97,114, 32, 42,101,100,103,101, 95, 99,114,101, 97,115,101,115, 59, 10,125, 32, 77,117,108,116,105,114,101, +115, 59, 10, 10, 47, 42, 42, 32, 69,110,100, 32, 77,117,108,116,105,114,101,115, 32, 42, 42, 47, 10, 10,116,121,112,101,100,101, +102, 32,115,116,114,117, 99,116, 32, 80, 97,114,116,105, 97,108, 86,105,115,105, 98,105,108,105,116,121, 32,123, 10, 9,117,110, +115,105,103,110,101,100, 32,105,110,116, 32, 42,118,101,114,116, 95,109, 97,112, 59, 32, 47, 42, 32,118,101,114,116, 95,109, 97, +112, 91, 79,108,100, 32, 73,110,100,101,120, 93, 61, 32, 78,101,119, 32, 73,110,100,101,120, 32, 42, 47, 10, 9,105,110,116, 32, + 42,101,100,103,101, 95,109, 97,112, 59, 32, 47, 42, 32,101,100,103,101, 95,109, 97,112, 91, 79,108,100, 32, 73,110,100,101,120, + 93, 61, 32, 78,101,119, 32, 73,110,100,101,120, 44, 32, 45, 49, 61, 32,104,105,100,100,101,110, 32, 42, 47, 10, 9, 77, 70, 97, + 99,101, 32, 42,111,108,100, 95,102, 97, 99,101,115, 59, 10, 9, 77, 69,100,103,101, 32, 42,111,108,100, 95,101,100,103,101,115, + 59, 10, 9,117,110,115,105,103,110,101,100, 32,105,110,116, 32,116,111,116,102, 97, 99,101, 44, 32,116,111,116,101,100,103,101, + 44, 32,116,111,116,118,101,114,116, 44, 32,112, 97,100, 59, 10,125, 32, 80, 97,114,116,105, 97,108, 86,105,115,105, 98,105,108, +105,116,121, 59, 10, 10, 47, 42, 32,109,118,101,114,116, 45, 62,102,108, 97,103, 32, 40, 49, 61, 83, 69, 76, 69, 67, 84, 41, 32, + 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 80, 72, 69, 82, 69, 84, 69, 83, 84, 9, 50, 10, 35,100,101,102,105, +110,101, 32, 77, 69, 95, 83, 80, 72, 69, 82, 69, 84, 69, 77, 80, 9, 52, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 72, 73, + 68, 69, 9, 9, 9, 49, 54, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 69, 82, 84, 95, 77, 69, 82, 71, 69, 68, 9, 9, + 40, 49, 60, 60, 54, 41, 10, 10, 47, 42, 32,109,101,100,103,101, 45, 62,102,108, 97,103, 32, 40, 49, 61, 83, 69, 76, 69, 67, 84, + 41, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 68, 71, 69, 68, 82, 65, 87, 9, 9, 9, 40, 49, 60, 60, 49, 41, + 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 69, 65, 77, 9, 9, 9, 9, 40, 49, 60, 60, 50, 41, 10, 35,100,101,102,105, +110,101, 32, 77, 69, 95, 70, 71, 79, 78, 9, 9, 9, 9, 40, 49, 60, 60, 51, 41, 10, 9, 9, 9, 9, 9, 9, 47, 42, 32,114,101, +115,101,114,118,101, 32, 49, 54, 32,102,111,114, 32, 77, 69, 95, 72, 73, 68, 69, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, + 77, 69, 95, 69, 68, 71, 69, 82, 69, 78, 68, 69, 82, 9, 9, 40, 49, 60, 60, 53, 41, 10, 35,100,101,102,105,110,101, 32, 77, 69, + 95, 76, 79, 79, 83, 69, 69, 68, 71, 69, 9, 9, 40, 49, 60, 60, 55, 41, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 69, + 65, 77, 95, 76, 65, 83, 84, 9, 9, 40, 49, 60, 60, 56, 41, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 72, 65, 82, 80, + 9, 9, 9, 40, 49, 60, 60, 57, 41, 10, 10, 47, 42, 32,112,117,110,111, 32, 61, 32,118,101,114,116,101,120,110,111,114,109, 97, +108, 32, 40,109,102, 97, 99,101, 41, 32, 42, 47, 10, 47, 42, 32,114,101,110,100,101,114, 32, 97,115,115,117,109,101,115, 32,102, +108,105,112,115, 32,116,111, 32, 98,101, 32,111,114,100,101,114,101,100, 32,108,105,107,101, 32,116,104,105,115, 32, 42, 47, 10, + 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 49, 9, 9, 49, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, + 70, 76, 73, 80, 86, 50, 9, 9, 50, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 51, 9, 9, 52, 10, 35, +100,101,102,105,110,101, 32, 77, 69, 95, 70, 76, 73, 80, 86, 52, 9, 9, 56, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, + 82, 79, 74, 88, 89, 9, 9, 49, 54, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 88, 90, 9, 9, 51, 50, 10, + 35,100,101,102,105,110,101, 32, 77, 69, 95, 80, 82, 79, 74, 89, 90, 9, 9, 54, 52, 10, 10, 47, 42, 32,101,100, 99,111,100,101, + 32, 40,109,102, 97, 99,101, 41, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 49, 86, 50, 9, 9, 9, 49, 10, + 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 50, 86, 51, 9, 9, 9, 50, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, + 51, 86, 49, 9, 9, 9, 52, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 86, 51, 86, 52, 9, 9, 9, 52, 10, 35,100,101,102, +105,110,101, 32, 77, 69, 95, 86, 52, 86, 49, 9, 9, 9, 56, 10, 10, 47, 42, 32,102,108, 97,103, 32, 40,109,102, 97, 99,101, 41, + 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 83, 77, 79, 79, 84, 72, 9, 9, 9, 49, 10, 35,100,101,102,105,110, +101, 32, 77, 69, 95, 70, 65, 67, 69, 95, 83, 69, 76, 9, 9, 9, 50, 10, 9, 9, 9, 9, 9, 9, 47, 42, 32,102,108, 97,103, 32, + 77, 69, 95, 72, 73, 68, 69, 61, 61, 49, 54, 32,105,115, 32,117,115,101,100, 32,104,101,114,101, 32,116,111,111, 32, 42, 47, 32, + 10, 47, 42, 32,109,115,101,108,101, 99,116, 45, 62,116,121,112,101, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, + 86, 83, 69,108, 9, 48, 10, 35,100,101,102,105,110,101, 32, 77, 69, 95, 69, 83, 69,108, 32, 49, 10, 35,100,101,102,105,110,101, + 32, 77, 69, 95, 70, 83, 69, 76, 32, 50, 10, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,102,108, 97,103, 32, 42, 47, 10, 35, +100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 69, 67, 84, 9, 49, 32, 47, 42, 32,117,115,101, 32, 77, 70, 97, 99,101, 32, +104,105,100,101, 32,102,108, 97,103, 32, 40, 97,102,116,101,114, 32, 50, 46, 52, 51, 41, 44, 32,115,104,111,117,108,100, 32, 98, +101, 32, 97, 98,108,101, 32,116,111, 32,114,101,117,115,101, 32, 97,102,116,101,114, 32, 50, 46, 52, 52, 32, 42, 47, 10, 35,100, +101,102,105,110,101, 32, 84, 70, 95, 65, 67, 84, 73, 86, 69, 9, 50, 32, 47, 42, 32,100,101,112,114,101, 99, 97,116,101,100, 33, + 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 49, 9, 9, 52, 10, 35,100,101,102,105,110,101, 32, 84, + 70, 95, 83, 69, 76, 50, 9, 9, 56, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 51, 9, 9, 49, 54, 10, 35,100, +101,102,105,110,101, 32, 84, 70, 95, 83, 69, 76, 52, 9, 9, 51, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 72, 73, 68, + 69, 9, 9, 54, 52, 32, 47, 42, 32,117,110,117,115,101,100, 44, 32,115, 97,109,101, 32, 97,115, 32, 84, 70, 95, 83, 69, 76, 69, + 67, 84, 32, 42, 47, 10, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,109,111,100,101, 32, 42, 47, 10, 35,100,101,102,105,110, +101, 32, 84, 70, 95, 68, 89, 78, 65, 77, 73, 67, 9, 9, 49, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, + 83, 79, 82, 84, 9, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 69, 88, 9, 9, 9, 52, 10, 35,100,101,102,105,110, +101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, 86, 69, 82, 84, 9, 56, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 76, 73, 71, + 72, 84, 9, 9, 49, 54, 10, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 82, 69, 68, 67, 79, 76, 9, 54, 52, 10, + 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 73, 76, 69, 83, 9, 9, 49, 50, 56, 9, 9, 47, 42, 32,100,101,112,114,101, 99, + 97,116,101,100, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 9, 50, 53, 54, + 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 84, 87, 79, 83, 73, 68, 69, 9, 9, 53, 49, 50, 10, 35,100,101,102,105,110,101, + 32, 84, 70, 95, 73, 78, 86, 73, 83, 73, 66, 76, 69, 9, 49, 48, 50, 52, 10, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 79, + 66, 67, 79, 76, 9, 9, 50, 48, 52, 56, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 66, 73, 76, 76, 66, 79, 65, 82, 68, 50, + 9, 52, 48, 57, 54, 9, 47, 42, 32,119,105,116,104, 32, 90, 32, 97,120,105,115, 32, 99,111,110,115,116,114, 97,105,110,116, 32, + 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 72, 65, 68, 79, 87, 9, 9, 56, 49, 57, 50, 10, 35,100,101,102,105, +110,101, 32, 84, 70, 95, 66, 77, 70, 79, 78, 84, 9, 9, 49, 54, 51, 56, 52, 10, 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62, +116,114, 97,110,115,112, 44, 32,118, 97,108,117,101,115, 32, 49, 45, 52, 32, 97,114,101, 32,117,115,101,100, 32, 97,115, 32,102, +108, 97,103,115, 32,105,110, 32,116,104,101, 32, 71, 76, 44, 32, 87, 65, 82, 78, 73, 78, 71, 44, 32, 84, 70, 95, 83, 85, 66, 32, + 99, 97,110,116, 32,119,111,114,107, 32,119,105,116,104, 32,116,104,105,115, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, + 70, 95, 83, 79, 76, 73, 68, 9, 48, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 65, 68, 68, 9, 9, 49, 10, 35,100,101,102, +105,110,101, 32, 84, 70, 95, 65, 76, 80, 72, 65, 9, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 67, 76, 73, 80, 9, 9, + 52, 32, 47, 42, 32, 99,108,105,112,109, 97,112, 32, 97,108,112,104, 97, 47, 98,105,110, 97,114,121, 32, 97,108,112,104, 97, 32, + 97,108,108, 32,111,114, 32,110,111,116,104,105,110,103, 33, 32, 42, 47, 10, 10, 47, 42, 32,115,117, 98, 32,105,115, 32,110,111, +116, 32, 97,118, 97,105,108, 97, 98,108,101, 32,105,110, 32,116,104,101, 32,117,115,101,114, 32,105,110,116,101,114,102, 97, 99, +101, 32, 97,110,121,109,111,114,101, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 83, 85, 66, 9, 9, 51, 10, 10, + 10, 47, 42, 32,109,116,102, 97, 99,101, 45, 62,117,110,119,114, 97,112, 32, 42, 47, 10, 35,100,101,102,105,110,101, 32, 84, 70, + 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 49, 9, 49, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, + 65, 84, 69, 68, 50, 9, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 51, 9, 52, + 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 52, 9, 56, 10, 35,100,101,102,105,110, +101, 32, 84, 70, 95, 80, 73, 78, 49, 9, 9, 32, 32, 32, 32, 49, 54, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, + 50, 9, 9, 32, 32, 32, 32, 51, 50, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 51, 9, 32, 32, 32, 9, 9, 54, + 52, 10, 35,100,101,102,105,110,101, 32, 84, 70, 95, 80, 73, 78, 52, 9, 32, 32, 32, 32, 9, 49, 50, 56, 10, 10, 35,101,110,100, +105,102, 10,100,105, 79, 67, 75, 33,110,100,101,120, 32,105,110, 32,110,117,114, 98, 32,108,105,115,116, 32, 42, 47, 10, 9,105, +110,116, 32, 97, 99,116,110,117, 59, 10, 9, 47, 42, 32,101,100,105,116, 44, 32,108, 97,115,116, 32,115,101,108,101, 99,116,101, +100, 32, 98,112,111,105,110,116, 32, 42, 47, 10, 9, 66, 80,111,105,110,116, 32, 42,108, 97,115,116,115,101,108, 98,112, 59, 10, + 9, 10, 9, 47, 42, 32,102,111,110,116, 32,112, 97,114,116, 32, 42, 47, 10, 9,115,104,111,114,116, 32,108,101,110, 44, 32,108, +105,110,101,115, 44, 32,112,111,115, 44, 32,115,112, 97, 99,101,109,111,100,101, 59, 10, 9,102,108,111, 97,116, 32,115,112, 97, + 99,105,110,103, 44, 32,108,105,110,101,100,105,115,116, 44, 32,115,104,101, 97,114, 44, 32,102,115,105,122,101, 44, 32,119,111, +114,100,115,112, 97, 99,101, 44, 32,117,108,112,111,115, 44, 32,117,108,104,101,105,103,104,116, 59, 10, 9,102,108,111, 97,116, + 32,120,111,102, 44, 32,121,111,102, 59, 10, 9,102,108,111, 97,116, 32,108,105,110,101,119,105,100,116,104, 59, 10, 70, 82, 69, + 69,216, 24, 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,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, 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, 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, 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, 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, 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, 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, 84,114, 97,110,115,102,111,114,109, 79,114,105, +101,110,116, 97,116,105,111,110, 0, 83, 99,117,108,112,116, 0, 86, 80, 97,105,110,116, 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, 66, 71,112,105, 99, 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,116,111,112,111, 86,105,101,119, 68, 97,116, 97, 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, 98, 83, 99,114,101,101,110, 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,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, 0, 83,112, 97, + 99,101, 78,111,100,101, 0, 83,112, 97, 99,101, 76,111,103,105, 99, 0, 83,112, 97, 99,101, 73,109, 97, 83,101,108, 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,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, 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, 83,111,108,105,100, 76,105,103,104,116, 0, 85,115,101,114, 68,101,102, 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, 84, 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, 83,111,117,110,100, 72, 97,110,100,108,101, 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, 98, 83,111,117,110,100, 65, 99,116,117, 97,116,111, +114, 0, 83,111,117,110,100, 51, 68, 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, 70,114,101,101, 67, 97,109,101,114, + 97, 0, 83,112, 97, 99,101, 83,111,117,110,100, 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, 77,111,116,105,111,110, 80, + 97,116,104, 0, 98, 65,110,105,109, 86,105,122, 83,101,116,116,105,110,103,115, 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, 77,105,110, 77, 97,120, 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, 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, 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, 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, 0, 98, 78,111,100,101, 80,114,101,118,105,101,119, 0, +117,105, 66,108,111, 99,107, 0, 98, 78,111,100,101, 84,121,112,101, 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, 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, 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, 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, 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, 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, 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, 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,111,117,110,100, 0, 68,114,105,118,101,114, 84, 97,114, +103,101,116, 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, 0, + 84, 76, 69, 78, 1, 0, 1, 0, 2, 0, 2, 0, 4, 0, 4, 0, 4, 0, 4, 0, 8, 0, 0, 0, 16, 0, 24, 0, 16, 0, 4, 0, + 8, 0, 8, 0, 16, 0, 12, 0, 12, 0, 24, 0, 16, 0, 16, 0, 32, 0, 16, 0, 16, 0, 32, 0, 96, 0, 72, 0, 72, 2, 0, 0, + 40, 0,144, 0,152, 4,112, 0, 36, 0, 56, 0,112, 0,128, 0,168, 0, 96, 0, 40, 0, 48, 0,176, 0, 16, 0,152, 0, 40, 0, + 40, 6,184, 1, 0, 0, 0, 0, 0, 0, 16, 1,104, 1,120, 1, 24, 0, 8, 3,200, 0, 0, 0, 88, 0, 32, 1,248, 0,136, 0, +248, 1, 56, 1, 80, 0, 88, 0, 32, 3,104, 0, 88, 1, 0, 0,128, 0,104, 0,208, 0, 80, 0, 8, 0, 16, 0,216, 1, 0, 0, + 0, 0, 0, 0,144, 1, 20, 0, 48, 0, 64, 0, 24, 0, 12, 0, 16, 0, 4, 0, 8, 0, 8, 0, 0, 0, 32, 0,112, 0, 48, 0, + 8, 0, 16, 0, 8, 0, 8, 0, 4, 0, 4, 0, 0, 1, 32, 0, 16, 0, 0, 0, 16, 0, 64, 0, 24, 0, 12, 0, 64, 0, 72, 0, + 96, 0,112, 0,120, 0, 88, 0,120, 0,152, 0, 88, 0, 80, 0,128, 0, 80, 0,104, 0,248, 0, 56, 0,192, 0,176, 0,216, 0, + 80, 0,112, 0,128, 0,216, 0,128, 0,240, 0, 72, 0,128, 0, 0, 0,144, 0, 32, 0, 8, 2,152, 0, 0, 0,112, 0, 0, 0, + 0, 0, 88, 0, 8, 0, 8, 0, 16, 1,104, 0,240, 1, 96, 0, 88, 0, 88, 0, 88, 0,192, 1,136, 0,128, 0, 72, 0,232, 0, + 48, 0, 0, 0,144, 0, 88, 0,104, 0,120, 0,152, 0,120, 1,224, 0,192, 0, 0, 0, 72, 0,168, 0, 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0,224, 1, 40, 0,184, 0,152, 0, 40, 0, 64, 0, 24, 0, 88, 0, 64, 4, 64, 0, 24, 0, 16, 0, 96, 0, 88, 0, + 32, 0, 40, 1, 48, 0, 8, 0,112, 0, 88, 0, 56, 0, 64, 0,120, 1, 32, 0, 8, 0, 16, 0, 48, 2, 0, 0, 0, 0, 64, 0, + 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 1, 56, 0,152, 0, 72, 0,208, 0,248, 0, 32, 0, 0, 1,240, 0,208, 1, +104, 0, 0, 0,152, 0, 0, 0, 40, 1, 16, 0, 16, 0,168, 0,224, 0,144, 2,120, 2, 64, 0,200, 0, 32, 1, 72, 0,208, 2, + 40, 0,136, 1, 40, 0, 24, 1, 32, 0,232, 0, 32, 0, 32, 0, 80, 2, 16, 1, 16, 0,216, 21, 56, 0,160, 11, 32, 0, 40, 0, + 88, 1, 0, 0, 0, 0,160, 0, 0, 0, 40, 1, 0, 0, 24, 1, 80, 0, 48, 0, 16, 0, 8, 0, 52, 0, 0, 1, 32, 1,200, 1, + 8, 1, 48, 1, 64, 0, 32, 0, 12, 0, 24, 0, 52, 0, 16, 0, 24, 0, 24, 0, 32, 0, 72, 1, 0, 0, 64, 0, 64, 0, 48, 0, + 8, 0, 48, 0, 72, 0,104, 0, 40, 0, 8, 0, 72, 0, 44, 0, 40, 0,108, 0, 72, 0, 72, 0, 96, 0,104, 0, 60, 0,128, 0, + 80, 0, 80, 0, 16, 0, 96, 0, 72, 0, 32, 0, 88, 0, 24, 0, 80, 0,112, 0, 84, 0, 32, 0, 96, 0, 56, 0, 56, 0,112, 0, +140, 0, 4, 0, 24, 0, 16, 0, 8, 0, 88, 0, 40, 0,224, 0, 40, 0, 40, 1,200, 0, 16, 0, 24, 0, 24, 0, 0, 2, 4, 0, + 40, 0,120, 0, 8, 1, 88, 0, 56, 0, 88, 0,128, 0, 80, 0,120, 0, 24, 0, 56, 0, 48, 0, 48, 0, 72, 0, 48, 0, 72, 0, + 48, 0, 48, 0, 24, 0, 56, 0,104, 0, 16, 0,112, 0, 96, 0, 28, 0, 28, 0, 28, 0, 56, 0, 24, 0, 72, 0,168, 0, 40, 0, +144, 0, 56, 0,232, 0, 0, 0, 0, 0, 0, 0, 16, 0, 40, 0, 28, 0, 12, 0, 12, 0, 16, 1, 40, 0, 8, 0, 8, 0, 64, 0, + 32, 0, 24, 0, 16, 0, 24, 0, 32, 0, 8, 0, 32, 0, 12, 0, 56, 0, 24, 0, 72, 0, 24, 0, 56, 0, 56, 0, 20, 0, 64, 0, + 40, 0, 32, 0,192, 0, 8, 2,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 32, 0, 40, 0,192, 0, 40, 0, 32, 0, 8, 1, +232, 0,168, 0, 72, 0, 0, 0, 0, 0,120, 0, 0, 0,120, 0, 0, 0,104, 0, 24, 0, 24, 0, 16, 0, 24, 0, 8, 0, 16, 0, + 24, 0, 20, 0, 24, 0,112, 0, 40, 1, 16, 0,104, 0, 0, 1, 40, 0,200, 0,104, 0,112, 0,104, 0, 32, 0, 80, 0, 56, 0, + 80, 0, 64, 0,104, 0, 72, 0, 64, 0,128, 0, 0, 0, 0, 0, 83, 84, 82, 67,140, 1, 0, 0, 10, 0, 2, 0, 10, 0, 0, 0, + 10, 0, 1, 0, 11, 0, 3, 0, 11, 0, 0, 0, 11, 0, 1, 0, 9, 0, 2, 0, 12, 0, 2, 0, 9, 0, 3, 0, 9, 0, 4, 0, + 13, 0, 2, 0, 2, 0, 5, 0, 2, 0, 6, 0, 14, 0, 2, 0, 4, 0, 5, 0, 4, 0, 6, 0, 15, 0, 2, 0, 7, 0, 5, 0, + 7, 0, 6, 0, 16, 0, 2, 0, 8, 0, 5, 0, 8, 0, 6, 0, 17, 0, 3, 0, 4, 0, 5, 0, 4, 0, 6, 0, 4, 0, 7, 0, + 18, 0, 3, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 19, 0, 3, 0, 8, 0, 5, 0, 8, 0, 6, 0, 8, 0, 7, 0, + 20, 0, 4, 0, 4, 0, 5, 0, 4, 0, 6, 0, 4, 0, 7, 0, 4, 0, 8, 0, 21, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, + 7, 0, 7, 0, 7, 0, 8, 0, 22, 0, 4, 0, 8, 0, 5, 0, 8, 0, 6, 0, 8, 0, 7, 0, 8, 0, 8, 0, 23, 0, 4, 0, + 4, 0, 9, 0, 4, 0, 10, 0, 4, 0, 11, 0, 4, 0, 12, 0, 24, 0, 4, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, + 7, 0, 12, 0, 25, 0, 4, 0, 9, 0, 13, 0, 12, 0, 14, 0, 4, 0, 15, 0, 4, 0, 16, 0, 26, 0, 10, 0, 26, 0, 0, 0, + 26, 0, 1, 0, 0, 0, 17, 0, 0, 0, 18, 0, 2, 0, 19, 0, 0, 0, 20, 0, 4, 0, 21, 0, 25, 0, 22, 0, 4, 0, 23, 0, + 4, 0, 24, 0, 27, 0, 9, 0, 9, 0, 0, 0, 9, 0, 1, 0, 27, 0, 25, 0, 28, 0, 26, 0, 0, 0, 27, 0, 2, 0, 28, 0, + 2, 0, 19, 0, 4, 0, 29, 0, 26, 0, 30, 0, 28, 0, 8, 0, 27, 0, 31, 0, 27, 0, 32, 0, 29, 0, 33, 0, 0, 0, 34, 0, + 0, 0, 35, 0, 4, 0, 36, 0, 4, 0, 37, 0, 28, 0, 38, 0, 30, 0, 6, 0, 4, 0, 39, 0, 4, 0, 40, 0, 2, 0, 41, 0, + 2, 0, 42, 0, 2, 0, 43, 0, 4, 0, 44, 0, 31, 0, 6, 0, 32, 0, 45, 0, 2, 0, 46, 0, 2, 0, 47, 0, 2, 0, 17, 0, + 2, 0, 19, 0, 0, 0, 48, 0, 33, 0, 21, 0, 33, 0, 0, 0, 33, 0, 1, 0, 34, 0, 49, 0, 35, 0, 50, 0, 24, 0, 51, 0, + 24, 0, 52, 0, 2, 0, 46, 0, 2, 0, 47, 0, 2, 0, 53, 0, 2, 0, 54, 0, 2, 0, 55, 0, 2, 0, 56, 0, 2, 0, 19, 0, + 2, 0, 57, 0, 7, 0, 11, 0, 7, 0, 12, 0, 4, 0, 58, 0, 7, 0, 59, 0, 7, 0, 60, 0, 7, 0, 61, 0, 31, 0, 62, 0, + 36, 0, 7, 0, 27, 0, 31, 0, 12, 0, 63, 0, 24, 0, 64, 0, 2, 0, 46, 0, 2, 0, 65, 0, 2, 0, 66, 0, 2, 0, 37, 0, + 37, 0, 16, 0, 37, 0, 0, 0, 37, 0, 1, 0, 7, 0, 67, 0, 7, 0, 61, 0, 2, 0, 17, 0, 2, 0, 47, 0, 2, 0, 68, 0, + 2, 0, 19, 0, 4, 0, 69, 0, 4, 0, 70, 0, 9, 0, 2, 0, 7, 0, 71, 0, 0, 0, 20, 0, 0, 0, 72, 0, 7, 0, 73, 0, + 7, 0, 74, 0, 38, 0, 13, 0, 27, 0, 31, 0, 39, 0, 75, 0, 37, 0, 76, 0, 0, 0, 77, 0, 4, 0, 78, 0, 7, 0, 61, 0, + 12, 0, 79, 0, 36, 0, 80, 0, 27, 0, 81, 0, 2, 0, 17, 0, 2, 0, 82, 0, 2, 0, 83, 0, 2, 0, 19, 0, 40, 0, 6, 0, + 40, 0, 0, 0, 40, 0, 1, 0, 0, 0, 84, 0, 0, 0, 85, 0, 4, 0, 23, 0, 4, 0, 86, 0, 41, 0, 10, 0, 41, 0, 0, 0, + 41, 0, 1, 0, 4, 0, 87, 0, 4, 0, 88, 0, 4, 0, 89, 0, 4, 0, 43, 0, 4, 0, 14, 0, 4, 0, 90, 0, 0, 0, 91, 0, + 0, 0, 92, 0, 42, 0, 15, 0, 27, 0, 31, 0, 0, 0, 93, 0, 4, 0, 90, 0, 4, 0, 94, 0, 12, 0, 95, 0, 40, 0, 96, 0, + 40, 0, 97, 0, 4, 0, 98, 0, 4, 0, 99, 0, 12, 0,100, 0, 0, 0,101, 0, 4, 0,102, 0, 4, 0,103, 0, 9, 0,104, 0, + 8, 0,105, 0, 43, 0, 3, 0, 4, 0,106, 0, 4, 0,107, 0, 9, 0, 2, 0, 44, 0, 20, 0, 27, 0, 31, 0, 39, 0, 75, 0, + 2, 0, 17, 0, 2, 0, 19, 0, 7, 0,108, 0, 7, 0,109, 0, 7, 0,110, 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, 2, 0,119, 0, 2, 0,120, 0, 7, 0,121, 0, + 36, 0, 80, 0, 32, 0,122, 0, 45, 0, 13, 0, 4, 0,123, 0, 4, 0,124, 0, 4, 0,125, 0, 4, 0,126, 0, 2, 0,127, 0, + 2, 0,128, 0, 2, 0, 19, 0, 2, 0,129, 0, 2, 0,130, 0, 2, 0,131, 0, 2, 0,132, 0, 2, 0,133, 0, 46, 0,134, 0, + 47, 0, 32, 0, 27, 0, 31, 0, 0, 0, 34, 0, 12, 0,135, 0, 48, 0,136, 0, 49, 0,137, 0, 50, 0,138, 0, 2, 0,129, 0, + 2, 0, 19, 0, 2, 0,139, 0, 2, 0, 17, 0, 2, 0, 37, 0, 2, 0, 43, 0, 4, 0,140, 0, 2, 0,141, 0, 2, 0,142, 0, + 2, 0,143, 0, 2, 0,144, 0, 2, 0,145, 0, 2, 0,146, 0, 4, 0,147, 0, 4, 0,148, 0, 43, 0,149, 0, 30, 0,150, 0, + 0, 0,151, 0, 7, 0,152, 0, 4, 0,153, 0, 2, 0,154, 0, 2, 0,155, 0, 2, 0,156, 0, 2, 0,157, 0, 7, 0,158, 0, + 7, 0,159, 0, 51, 0, 63, 0, 2, 0,160, 0, 2, 0,161, 0, 2, 0,162, 0, 2, 0,163, 0, 32, 0,164, 0, 52, 0,165, 0, + 0, 0,166, 0, 0, 0,167, 0, 0, 0,168, 0, 0, 0,169, 0, 0, 0,170, 0, 7, 0,171, 0, 7, 0,172, 0, 7, 0,173, 0, + 2, 0,174, 0, 2, 0,175, 0, 2, 0,176, 0, 2, 0,177, 0, 2, 0,178, 0, 2, 0,179, 0, 0, 0,180, 0, 0, 0,181, 0, + 7, 0,182, 0, 7, 0,183, 0, 7, 0,184, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0, 57, 0, 7, 0,187, 0, 7, 0,188, 0, + 7, 0,189, 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, 53, 0, 15, 0, 0, 0,222, 0, 9, 0,223, 0, 0, 0,224, 0, 0, 0,225, 0, 4, 0,226, 0, 4, 0,227, 0, + 9, 0,228, 0, 7, 0,229, 0, 7, 0,230, 0, 7, 0,231, 0, 4, 0,232, 0, 9, 0,233, 0, 9, 0,234, 0, 4, 0,235, 0, + 4, 0, 37, 0, 54, 0, 6, 0, 7, 0,182, 0, 7, 0,183, 0, 7, 0,184, 0, 7, 0,236, 0, 7, 0, 67, 0, 4, 0, 64, 0, + 55, 0, 5, 0, 2, 0, 19, 0, 2, 0, 36, 0, 2, 0, 64, 0, 2, 0,237, 0, 54, 0,231, 0, 56, 0, 17, 0, 32, 0,164, 0, + 47, 0,238, 0, 57, 0,239, 0, 7, 0,240, 0, 7, 0,241, 0, 2, 0, 17, 0, 2, 0,242, 0, 7, 0,110, 0, 7, 0,111, 0, + 7, 0,243, 0, 4, 0,244, 0, 2, 0,245, 0, 2, 0,246, 0, 4, 0,129, 0, 4, 0,140, 0, 2, 0,247, 0, 2, 0,248, 0, + 58, 0, 22, 0, 2, 0, 19, 0, 2, 0,249, 0, 7, 0,250, 0, 7, 0,251, 0, 2, 0,139, 0, 2, 0,252, 0, 4, 0,253, 0, + 4, 0,254, 0, 32, 0,164, 0, 4, 0,255, 0, 2, 0, 0, 1, 2, 0, 1, 1, 9, 0, 2, 1, 7, 0, 3, 1, 7, 0, 4, 1, + 2, 0, 5, 1, 2, 0, 6, 1, 2, 0, 7, 1, 2, 0, 8, 1, 7, 0, 9, 1, 7, 0, 10, 1, 55, 0, 11, 1, 59, 0, 11, 0, + 4, 0, 12, 1, 4, 0, 13, 1, 2, 0, 14, 1, 2, 0, 19, 0, 2, 0, 15, 1, 2, 0, 37, 0, 32, 0,164, 0, 7, 0, 16, 1, + 4, 0, 17, 1, 0, 0, 18, 1, 7, 0, 19, 1, 52, 0, 61, 0, 27, 0, 31, 0, 39, 0, 75, 0, 7, 0, 20, 1, 7, 0, 21, 1, + 7, 0, 22, 1, 7, 0, 23, 1, 7, 0, 24, 1, 7, 0, 25, 1, 7, 0, 26, 1, 7, 0, 27, 1, 7, 0, 28, 1, 7, 0, 29, 1, + 7, 0, 30, 1, 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, 2, 0, 40, 1, 2, 0, 41, 1, 2, 0, 42, 1, 2, 0, 43, 1, 2, 0, 44, 1, 2, 0, 45, 1, + 2, 0, 46, 1, 2, 0, 19, 0, 2, 0, 17, 0, 2, 0,242, 0, 7, 0, 47, 1, 7, 0, 48, 1, 7, 0, 49, 1, 7, 0, 50, 1, + 4, 0, 51, 1, 4, 0, 52, 1, 2, 0, 53, 1, 2, 0, 54, 1, 2, 0, 15, 1, 2, 0,127, 0, 4, 0, 23, 0, 4, 0,124, 0, + 4, 0,125, 0, 4, 0,126, 0, 7, 0, 55, 1, 7, 0, 56, 1, 7, 0,189, 0, 45, 0, 57, 1, 60, 0, 58, 1, 36, 0, 80, 0, + 47, 0,238, 0, 53, 0, 59, 1, 55, 0, 11, 1, 56, 0, 60, 1, 30, 0,150, 0, 58, 0, 61, 1, 59, 0, 62, 1, 0, 0, 63, 1, + 0, 0,181, 0, 61, 0, 8, 0, 7, 0, 64, 1, 7, 0, 65, 1, 7, 0,172, 0, 4, 0, 19, 0, 7, 0, 66, 1, 7, 0, 67, 1, + 7, 0, 68, 1, 32, 0, 45, 0, 62, 0, 84, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 69, 1, + 2, 0,175, 0, 2, 0, 70, 1, 7, 0,182, 0, 7, 0,183, 0, 7, 0,184, 0, 7, 0,185, 0, 7, 0, 71, 1, 7, 0, 72, 1, + 7, 0, 73, 1, 7, 0, 74, 1, 7, 0, 75, 1, 7, 0, 76, 1, 7, 0, 77, 1, 7, 0, 78, 1, 7, 0, 79, 1, 7, 0, 80, 1, + 7, 0, 81, 1, 63, 0, 82, 1, 2, 0,249, 0, 2, 0, 70, 0, 7, 0,110, 0, 7, 0,111, 0, 7, 0, 83, 1, 7, 0, 84, 1, + 7, 0, 85, 1, 7, 0, 86, 1, 7, 0, 87, 1, 2, 0, 88, 1, 2, 0, 89, 1, 2, 0, 90, 1, 2, 0, 91, 1, 0, 0, 92, 1, + 0, 0, 93, 1, 2, 0, 94, 1, 2, 0, 95, 1, 2, 0, 96, 1, 2, 0, 97, 1, 2, 0, 98, 1, 7, 0, 99, 1, 7, 0,100, 1, + 7, 0,101, 1, 7, 0,102, 1, 2, 0,103, 1, 2, 0, 43, 0, 2, 0,104, 1, 2, 0,105, 1, 2, 0,106, 1, 2, 0,107, 1, + 7, 0,108, 1, 7, 0,109, 1, 7, 0,110, 1, 7, 0,111, 1, 7, 0,112, 1, 7, 0,113, 1, 7, 0,114, 1, 7, 0,115, 1, + 7, 0,116, 1, 7, 0,117, 1, 7, 0,118, 1, 7, 0,119, 1, 2, 0,120, 1, 2, 0,121, 1, 4, 0,122, 1, 4, 0,123, 1, + 2, 0,124, 1, 2, 0,125, 1, 2, 0,126, 1, 2, 0,127, 1, 7, 0,128, 1, 7, 0,129, 1, 7, 0,130, 1, 7, 0,131, 1, + 2, 0,132, 1, 2, 0,133, 1, 36, 0, 80, 0, 51, 0,134, 1, 2, 0,135, 1, 2, 0,136, 1, 30, 0,150, 0, 64, 0, 2, 0, + 27, 0, 31, 0, 36, 0, 80, 0, 65, 0, 18, 0, 7, 0,137, 1, 7, 0,138, 1, 7, 0,139, 1, 7, 0,140, 1, 7, 0,141, 1, + 7, 0,142, 1, 7, 0,143, 1, 7, 0,144, 1, 7, 0,145, 1, 7, 0,146, 1, 2, 0,147, 1, 2, 0,148, 1, 2, 0,149, 1, + 2, 0,150, 1, 7, 0,151, 1, 7, 0,152, 1, 7, 0,153, 1, 4, 0,154, 1, 66, 0,124, 0, 27, 0, 31, 0, 39, 0, 75, 0, + 2, 0,155, 1, 2, 0, 19, 0, 7, 0,182, 0, 7, 0,183, 0, 7, 0,184, 0, 7, 0,156, 1, 7, 0,157, 1, 7, 0,158, 1, + 7, 0,159, 1, 7, 0,160, 1, 7, 0,161, 1, 7, 0,162, 1, 7, 0,163, 1, 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, 65, 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, 2, 0,184, 1, 2, 0,185, 1, 2, 0,186, 1, 0, 0,187, 1, 0, 0,188, 1, 7, 0,189, 1, 7, 0,190, 1, + 2, 0,191, 1, 2, 0,192, 1, 7, 0,193, 1, 7, 0,194, 1, 7, 0,195, 1, 7, 0,196, 1, 2, 0,197, 1, 2, 0,198, 1, + 4, 0, 69, 1, 4, 0,199, 1, 2, 0,200, 1, 2, 0,201, 1, 2, 0,202, 1, 2, 0,203, 1, 7, 0,204, 1, 7, 0,205, 1, + 7, 0,206, 1, 7, 0,207, 1, 7, 0,208, 1, 7, 0,209, 1, 7, 0,210, 1, 7, 0,211, 1, 7, 0,212, 1, 7, 0,213, 1, + 0, 0,214, 1, 7, 0,215, 1, 7, 0,216, 1, 7, 0,217, 1, 4, 0,218, 1, 0, 0,219, 1, 0, 0,104, 1, 0, 0,220, 1, + 0, 0, 63, 1, 2, 0,221, 1, 2, 0,222, 1, 2, 0,135, 1, 2, 0,223, 1, 2, 0,224, 1, 2, 0,225, 1, 7, 0,226, 1, + 7, 0,227, 1, 7, 0,228, 1, 7, 0,229, 1, 7, 0,230, 1, 2, 0,160, 0, 2, 0,161, 0, 55, 0,231, 1, 55, 0,232, 1, + 0, 0,233, 1, 0, 0,234, 1, 0, 0,235, 1, 0, 0,236, 1, 2, 0,237, 1, 2, 0,238, 1, 7, 0,239, 1, 7, 0,240, 1, + 51, 0,134, 1, 60, 0, 58, 1, 36, 0, 80, 0, 67, 0,241, 1, 30, 0,150, 0, 7, 0,242, 1, 7, 0,243, 1, 7, 0,244, 1, + 7, 0,245, 1, 7, 0,246, 1, 2, 0,247, 1, 2, 0, 70, 0, 7, 0,248, 1, 7, 0,249, 1, 7, 0,250, 1, 7, 0,251, 1, + 7, 0,252, 1, 7, 0,253, 1, 7, 0,254, 1, 7, 0,255, 1, 7, 0, 0, 2, 2, 0, 1, 2, 2, 0, 2, 2, 4, 0, 3, 2, + 4, 0,121, 1, 12, 0, 4, 2, 68, 0, 4, 0, 27, 0, 31, 0, 0, 0, 5, 2, 69, 0, 2, 0, 43, 0,149, 0, 70, 0, 26, 0, + 70, 0, 0, 0, 70, 0, 1, 0, 71, 0, 6, 2, 4, 0, 7, 2, 4, 0, 8, 2, 4, 0, 9, 2, 4, 0, 10, 2, 4, 0, 11, 2, + 4, 0, 12, 2, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 13, 2, 2, 0, 14, 2, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, + 7, 0, 15, 2, 7, 0, 16, 2, 7, 0, 17, 2, 7, 0, 18, 2, 7, 0, 19, 2, 7, 0, 20, 2, 7, 0, 21, 2, 7, 0, 23, 0, + 7, 0, 22, 2, 7, 0, 23, 2, 72, 0, 20, 0, 27, 0, 31, 0, 39, 0, 75, 0, 71, 0, 6, 2, 12, 0, 24, 2, 12, 0, 25, 2, + 12, 0, 26, 2, 36, 0, 80, 0, 66, 0, 27, 2, 0, 0, 19, 0, 0, 0, 28, 2, 2, 0, 29, 2, 2, 0,174, 0, 2, 0, 37, 0, + 7, 0, 64, 1, 7, 0,172, 0, 7, 0, 65, 1, 7, 0, 30, 2, 7, 0, 31, 2, 7, 0, 32, 2, 70, 0, 33, 2, 35, 0, 11, 0, + 7, 0, 34, 2, 7, 0, 35, 2, 7, 0, 36, 2, 7, 0,251, 0, 2, 0, 55, 0, 0, 0, 37, 2, 0, 0, 38, 2, 0, 0, 39, 2, + 0, 0, 40, 2, 0, 0, 41, 2, 0, 0, 42, 2, 34, 0, 7, 0, 7, 0, 43, 2, 7, 0, 35, 2, 7, 0, 36, 2, 2, 0, 39, 2, + 2, 0, 42, 2, 7, 0,251, 0, 7, 0, 37, 0, 73, 0, 21, 0, 73, 0, 0, 0, 73, 0, 1, 0, 2, 0, 17, 0, 2, 0, 44, 2, + 2, 0, 42, 2, 2, 0, 19, 0, 2, 0, 45, 2, 2, 0, 46, 2, 2, 0, 47, 2, 2, 0, 48, 2, 2, 0, 49, 2, 2, 0, 50, 2, + 2, 0, 51, 2, 2, 0, 52, 2, 7, 0, 53, 2, 7, 0, 54, 2, 34, 0, 49, 0, 35, 0, 50, 0, 2, 0, 55, 2, 2, 0, 56, 2, + 4, 0, 57, 2, 74, 0, 5, 0, 2, 0, 58, 2, 2, 0, 44, 2, 0, 0, 19, 0, 0, 0, 37, 0, 2, 0, 70, 0, 75, 0, 4, 0, + 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 8, 0, 7, 0, 59, 2, 76, 0, 68, 0, 27, 0, 31, 0, 39, 0, 75, 0, 71, 0, 6, 2, + 12, 0, 60, 2, 12, 0, 25, 2, 12, 0, 61, 2, 32, 0, 62, 2, 32, 0, 63, 2, 32, 0, 64, 2, 36, 0, 80, 0, 77, 0, 65, 2, + 38, 0, 66, 2, 66, 0, 27, 2, 12, 0, 67, 2, 7, 0, 64, 1, 7, 0,172, 0, 7, 0, 65, 1, 2, 0,174, 0, 2, 0, 43, 0, + 2, 0, 68, 2, 2, 0, 69, 2, 2, 0, 70, 2, 7, 0, 71, 2, 7, 0, 70, 0, 2, 0, 72, 2, 2, 0, 29, 2, 2, 0, 19, 0, + 2, 0, 73, 2, 7, 0, 74, 2, 7, 0, 75, 2, 7, 0, 76, 2, 2, 0, 47, 2, 2, 0, 48, 2, 2, 0, 77, 2, 2, 0, 78, 2, + 4, 0, 79, 2, 34, 0, 80, 2, 2, 0, 23, 0, 2, 0, 95, 0, 2, 0, 67, 0, 2, 0, 81, 2, 7, 0, 82, 2, 7, 0, 83, 2, + 7, 0, 84, 2, 7, 0, 85, 2, 7, 0, 86, 2, 7, 0, 87, 2, 7, 0, 88, 2, 7, 0, 89, 2, 7, 0, 90, 2, 7, 0, 91, 2, + 0, 0, 92, 2, 78, 0, 93, 2, 79, 0, 94, 2, 0, 0, 95, 2, 68, 0, 96, 2, 68, 0, 97, 2, 68, 0, 98, 2, 68, 0, 99, 2, + 4, 0,100, 2, 7, 0,101, 2, 4, 0,102, 2, 4, 0,103, 2, 75, 0,104, 2, 4, 0,105, 2, 4, 0,106, 2, 74, 0,107, 2, + 74, 0,108, 2, 80, 0, 40, 0, 27, 0, 31, 0, 71, 0, 6, 2, 12, 0,109, 2, 36, 0, 80, 0, 38, 0, 66, 2, 66, 0, 27, 2, + 81, 0,110, 2, 82, 0,111, 2, 83, 0,112, 2, 84, 0,113, 2, 85, 0,114, 2, 86, 0,115, 2, 87, 0,116, 2, 88, 0,117, 2, + 80, 0,118, 2, 89, 0,119, 2, 90, 0,120, 2, 91, 0,121, 2, 91, 0,122, 2, 91, 0,123, 2, 4, 0, 54, 0, 4, 0,124, 2, + 4, 0,125, 2, 4, 0,126, 2, 4, 0,127, 2, 2, 0,174, 0, 2, 0,128, 2, 7, 0, 64, 1, 7, 0,172, 0, 7, 0, 65, 1, + 7, 0,129, 2, 4, 0, 68, 2, 2, 0,130, 2, 2, 0, 19, 0, 2, 0,131, 2, 2, 0,132, 2, 2, 0, 29, 2, 2, 0,133, 2, + 92, 0,134, 2, 93, 0,135, 2, 83, 0, 8, 0, 9, 0,136, 2, 7, 0,137, 2, 4, 0,138, 2, 0, 0, 19, 0, 0, 0,139, 2, + 2, 0, 69, 1, 2, 0,140, 2, 2, 0,141, 2, 81, 0, 7, 0, 4, 0,142, 2, 4, 0,143, 2, 4, 0,144, 2, 4, 0,145, 2, + 2, 0, 44, 2, 0, 0,146, 2, 0, 0, 19, 0, 85, 0, 5, 0, 4, 0,142, 2, 4, 0,143, 2, 0, 0,147, 2, 0, 0,148, 2, + 2, 0, 19, 0, 94, 0, 2, 0, 4, 0,149, 2, 7, 0, 36, 2, 86, 0, 3, 0, 94, 0,150, 2, 4, 0,151, 2, 4, 0, 19, 0, + 84, 0, 6, 0, 7, 0,152, 2, 2, 0,153, 2, 2, 0, 44, 2, 0, 0, 19, 0, 0, 0,148, 2, 0, 0, 70, 2, 87, 0, 4, 0, + 0, 0,236, 0, 0, 0,182, 0, 0, 0,183, 0, 0, 0,184, 0, 95, 0, 6, 0, 47, 0,136, 2, 0, 0, 19, 0, 0, 0,139, 2, + 2, 0, 69, 1, 2, 0,140, 2, 2, 0,141, 2, 96, 0, 1, 0, 7, 0,154, 2, 97, 0, 5, 0, 0, 0,236, 0, 0, 0,182, 0, + 0, 0,183, 0, 0, 0,184, 0, 4, 0, 37, 0, 88, 0, 1, 0, 7, 0,155, 2, 89, 0, 2, 0, 4, 0,156, 2, 4, 0, 17, 0, + 82, 0, 7, 0, 7, 0,137, 2, 47, 0,136, 2, 0, 0, 19, 0, 0, 0,139, 2, 2, 0, 69, 1, 2, 0,140, 2, 2, 0,141, 2, + 98, 0, 1, 0, 7, 0,157, 2, 99, 0, 1, 0, 4, 0,158, 2,100, 0, 1, 0, 0, 0,159, 2,101, 0, 1, 0, 7, 0,137, 2, +102, 0, 3, 0, 4, 0,160, 2, 0, 0, 92, 0, 7, 0,161, 2,104, 0, 4, 0, 7, 0,236, 0, 7, 0,182, 0, 7, 0,183, 0, + 7, 0,184, 0,105, 0, 1, 0,104, 0,138, 2,106, 0, 5, 0, 4, 0,162, 2, 4, 0,163, 2, 0, 0, 19, 0, 0, 0, 44, 2, + 0, 0, 70, 2,107, 0, 2, 0, 4, 0,164, 2, 4, 0,163, 2,108, 0, 10, 0,108, 0, 0, 0,108, 0, 1, 0,106, 0,165, 2, +105, 0,166, 2,107, 0,167, 2, 4, 0, 54, 0, 4, 0,125, 2, 4, 0,124, 2, 4, 0, 37, 0, 84, 0,168, 2, 92, 0, 14, 0, + 12, 0,169, 2, 84, 0,168, 2, 0, 0,170, 2, 0, 0,171, 2, 0, 0,172, 2, 0, 0,173, 2, 0, 0,174, 2, 0, 0,175, 2, + 0, 0,176, 2, 0, 0, 19, 0, 91, 0,121, 2, 91, 0,123, 2, 2, 0,177, 2, 0, 0,178, 2, 93, 0, 8, 0, 4, 0,179, 2, + 4, 0,180, 2, 81, 0,181, 2, 85, 0,182, 2, 4, 0,125, 2, 4, 0,124, 2, 4, 0, 54, 0, 4, 0, 37, 0,109, 0, 7, 0, +109, 0, 0, 0,109, 0, 1, 0, 4, 0, 17, 0, 4, 0, 69, 1, 0, 0, 20, 0, 46, 0,134, 0, 0, 0,183, 2,110, 0, 7, 0, +109, 0,184, 2, 2, 0,185, 2, 2, 0,169, 2, 2, 0,186, 2, 2, 0, 90, 0, 9, 0,187, 2, 9, 0,188, 2,111, 0, 3, 0, +109, 0,184, 2, 32, 0,164, 0, 0, 0, 20, 0,112, 0, 5, 0,109, 0,184, 2, 32, 0,164, 0, 0, 0, 20, 0, 2, 0,189, 2, + 0, 0,190, 2,113, 0, 5, 0,109, 0,184, 2, 7, 0, 88, 0, 7, 0,191, 2, 4, 0,192, 2, 4, 0,193, 2,114, 0, 5, 0, +109, 0,184, 2, 32, 0,194, 2, 0, 0, 72, 0, 4, 0, 69, 1, 4, 0, 19, 0,115, 0, 13, 0,109, 0,184, 2, 32, 0,195, 2, + 32, 0,196, 2, 32, 0,197, 2, 32, 0,198, 2, 7, 0,199, 2, 7, 0,200, 2, 7, 0,191, 2, 7, 0,201, 2, 4, 0,202, 2, + 4, 0,203, 2, 4, 0, 90, 0, 4, 0,204, 2,116, 0, 5, 0,109, 0,184, 2, 2, 0,205, 2, 2, 0, 19, 0, 7, 0,206, 2, + 32, 0,207, 2,117, 0, 3, 0,109, 0,184, 2, 7, 0,208, 2, 4, 0, 90, 0,118, 0, 10, 0,109, 0,184, 2, 7, 0,209, 2, + 4, 0,210, 2, 4, 0, 37, 0, 2, 0, 90, 0, 2, 0,211, 2, 2, 0,212, 2, 2, 0,213, 2, 7, 0,214, 2, 0, 0,215, 2, +119, 0, 3, 0,109, 0,184, 2, 7, 0, 37, 0, 4, 0, 17, 0,120, 0, 6, 0,109, 0,184, 2,121, 0,216, 2,122, 0,217, 2, +123, 0,218, 2, 7, 0,219, 2, 4, 0, 17, 0,124, 0, 11, 0,109, 0,184, 2, 52, 0,220, 2, 7, 0,221, 2, 4, 0,222, 2, + 0, 0,215, 2, 7, 0,223, 2, 4, 0,224, 2, 32, 0,225, 2, 0, 0,226, 2, 4, 0,227, 2, 4, 0, 37, 0,125, 0, 10, 0, +109, 0,184, 2, 32, 0,228, 2, 47, 0,229, 2, 4, 0, 90, 0, 4, 0,230, 2, 7, 0,231, 2, 7, 0,232, 2, 0, 0,226, 2, + 4, 0,227, 2, 4, 0, 37, 0,126, 0, 3, 0,109, 0,184, 2, 7, 0,233, 2, 4, 0,234, 2,127, 0, 5, 0,109, 0,184, 2, + 7, 0,235, 2, 0, 0,215, 2, 2, 0, 19, 0, 2, 0,236, 2,128, 0, 8, 0,109, 0,184, 2, 32, 0,164, 0, 7, 0,235, 2, + 7, 0,251, 0, 7, 0,106, 0, 0, 0,215, 2, 2, 0, 19, 0, 2, 0, 17, 0,129, 0, 21, 0,109, 0,184, 2, 32, 0,237, 2, + 0, 0,215, 2, 52, 0,220, 2, 32, 0,225, 2, 2, 0, 19, 0, 2, 0, 37, 0, 7, 0,238, 2, 7, 0,239, 2, 7, 0,240, 2, + 7, 0, 74, 2, 7, 0,241, 2, 7, 0,242, 2, 7, 0,243, 2, 7, 0,244, 2, 4, 0,224, 2, 4, 0,227, 2, 0, 0,226, 2, + 7, 0,245, 2, 7, 0,246, 2, 7, 0, 43, 0,130, 0, 7, 0,109, 0,184, 2, 2, 0,247, 2, 2, 0,248, 2, 4, 0, 70, 0, + 32, 0,164, 0, 7, 0,249, 2, 0, 0,215, 2,131, 0, 10, 0,109, 0,184, 2, 32, 0,164, 0, 0, 0,250, 2, 7, 0,251, 2, + 7, 0,252, 2, 7, 0,244, 2, 4, 0,253, 2, 4, 0,254, 2, 7, 0,255, 2, 0, 0, 20, 0,132, 0, 1, 0,109, 0,184, 2, +133, 0, 7, 0,109, 0,184, 2, 46, 0,134, 0,134, 0, 0, 3,135, 0, 1, 3,136, 0, 2, 3,137, 0, 3, 3, 12, 0, 4, 3, +138, 0, 13, 0,109, 0,184, 2, 84, 0, 5, 3, 84, 0, 6, 3, 84, 0, 7, 3, 84, 0, 8, 3, 84, 0, 9, 3, 84, 0, 10, 3, + 81, 0, 11, 3, 4, 0, 12, 3, 4, 0, 13, 3, 7, 0,219, 2, 7, 0, 37, 0,139, 0, 14, 3,140, 0, 7, 0,109, 0,184, 2, + 84, 0, 5, 3, 84, 0, 15, 3,141, 0, 16, 3,142, 0, 14, 3, 4, 0, 17, 3, 4, 0, 12, 3,143, 0, 4, 0,109, 0,184, 2, + 32, 0,164, 0, 4, 0, 18, 3, 4, 0, 37, 0,144, 0, 2, 0, 4, 0, 19, 3, 7, 0, 36, 2,145, 0, 2, 0, 4, 0,125, 0, + 4, 0, 20, 3,146, 0, 21, 0,109, 0,184, 2, 32, 0,164, 0, 0, 0,215, 2, 2, 0, 21, 3, 2, 0, 19, 0, 2, 0, 69, 1, + 2, 0, 37, 0, 7, 0, 22, 3, 7, 0, 23, 3, 4, 0, 54, 0, 4, 0, 24, 3,145, 0, 25, 3,144, 0, 26, 3, 4, 0, 27, 3, + 4, 0, 28, 3, 4, 0, 29, 3, 4, 0, 20, 3, 7, 0, 30, 3, 7, 0, 31, 3, 7, 0, 32, 3, 9, 0, 33, 3,147, 0, 8, 0, +109, 0,184, 2,148, 0, 34, 3,141, 0, 16, 3, 4, 0, 35, 3, 4, 0, 36, 3, 4, 0, 37, 3, 2, 0, 19, 0, 2, 0, 57, 0, +149, 0, 8, 0,109, 0,184, 2, 32, 0, 45, 0, 2, 0,255, 0, 2, 0, 19, 0, 2, 0,205, 2, 2, 0, 57, 0, 7, 0, 38, 3, + 7, 0, 39, 3,150, 0, 5, 0,109, 0,184, 2, 4, 0, 40, 3, 2, 0, 19, 0, 2, 0, 41, 3, 7, 0, 42, 3,151, 0, 7, 0, +109, 0,184, 2, 84, 0, 43, 3, 4, 0, 44, 3, 0, 0, 45, 3, 0, 0, 46, 3, 0, 0, 47, 3, 0, 0, 48, 3,152, 0, 3, 0, +109, 0,184, 2,153, 0, 49, 3,137, 0, 3, 3,154, 0, 10, 0,109, 0,184, 2, 32, 0, 50, 3, 32, 0, 51, 3, 0, 0, 52, 3, + 7, 0, 53, 3, 2, 0, 54, 3, 2, 0, 55, 3, 0, 0, 56, 3, 0, 0, 57, 3, 0, 0,190, 2,155, 0, 9, 0,109, 0,184, 2, + 32, 0, 58, 3, 0, 0, 52, 3, 7, 0, 59, 3, 7, 0, 60, 3, 0, 0, 69, 1, 0, 0,205, 2, 0, 0, 61, 3, 0, 0, 37, 0, +156, 0, 1, 0,109, 0,184, 2,157, 0, 27, 0, 27, 0, 31, 0, 2, 0, 45, 2, 2, 0, 46, 2, 2, 0, 62, 3, 2, 0, 19, 0, + 2, 0, 63, 3, 2, 0, 64, 3, 2, 0, 65, 3, 2, 0, 70, 0, 0, 0, 66, 3, 0, 0, 67, 3, 0, 0, 68, 3, 0, 0, 17, 0, + 4, 0, 37, 0, 7, 0, 69, 3, 7, 0, 70, 3, 7, 0, 71, 3, 7, 0, 72, 3, 7, 0, 73, 3, 7, 0, 74, 3, 34, 0, 75, 3, + 36, 0, 80, 0, 38, 0, 66, 2, 86, 0,115, 2, 7, 0, 76, 3, 7, 0, 77, 3,157, 0, 78, 3,158, 0, 3, 0,158, 0, 0, 0, +158, 0, 1, 0, 0, 0, 20, 0, 71, 0, 3, 0, 7, 0, 79, 3, 4, 0, 19, 0, 4, 0, 37, 0, 32, 0,124, 0, 27, 0, 31, 0, + 39, 0, 75, 0,159, 0, 80, 3, 2, 0, 17, 0, 2, 0, 81, 3, 4, 0, 82, 3, 4, 0, 83, 3, 4, 0, 84, 3, 0, 0, 85, 3, + 32, 0, 38, 0, 32, 0, 86, 3, 32, 0, 87, 3, 32, 0, 88, 3, 32, 0, 89, 3, 36, 0, 80, 0, 77, 0, 65, 2, 71, 0, 6, 2, +160, 0, 90, 3,160, 0, 91, 3,161, 0, 92, 3, 9, 0, 2, 0,162, 0, 93, 3, 12, 0, 94, 3, 12, 0,109, 2, 12, 0, 25, 2, + 12, 0, 95, 3, 12, 0, 96, 3, 4, 0, 69, 1, 4, 0, 97, 3, 66, 0, 27, 2, 0, 0, 98, 3, 4, 0, 29, 2, 4, 0, 99, 3, + 7, 0, 64, 1, 7, 0,100, 3, 7, 0,101, 3, 7, 0,172, 0, 7, 0,102, 3, 7, 0, 65, 1, 7, 0,103, 3, 7, 0, 15, 2, + 7, 0,104, 3, 7, 0,105, 3, 7, 0,106, 3, 7, 0,107, 3, 7, 0,108, 3, 7, 0,109, 3, 7, 0,251, 2, 7, 0,110, 3, + 7, 0,240, 0, 4, 0,111, 3, 2, 0, 19, 0, 2, 0,112, 3, 2, 0,113, 3, 2, 0,114, 3, 2, 0,115, 3, 2, 0,116, 3, + 2, 0,117, 3, 2, 0,118, 3, 2, 0,119, 3, 2, 0,120, 3, 2, 0,121, 3, 2, 0,122, 3, 4, 0,123, 3, 4, 0,124, 3, + 4, 0,125, 3, 4, 0,126, 3, 7, 0,127, 3, 7, 0,101, 2, 7, 0,128, 3, 7, 0,129, 3, 7, 0,130, 3, 7, 0,131, 3, + 7, 0,132, 3, 7, 0,215, 0, 7, 0,133, 3, 7, 0,134, 3, 7, 0,135, 3, 7, 0,136, 3, 2, 0,137, 3, 0, 0,138, 3, + 0, 0,139, 3, 0, 0,140, 3, 0, 0,141, 3, 7, 0,142, 3, 7, 0,143, 3, 12, 0,144, 3, 12, 0,145, 3, 12, 0,146, 3, + 12, 0,147, 3, 7, 0,148, 3, 2, 0,156, 2, 2, 0,149, 3, 7, 0,138, 2, 4, 0,150, 3, 4, 0,151, 3,163, 0,152, 3, + 2, 0,153, 3, 2, 0,247, 0, 7, 0,154, 3, 12, 0,155, 3, 12, 0,156, 3, 12, 0,157, 3, 12, 0,158, 3,164, 0, 61, 1, +165, 0,159, 3, 67, 0,160, 3, 2, 0,161, 3, 2, 0,162, 3, 2, 0,163, 3, 2, 0,164, 3, 7, 0,130, 2, 2, 0,165, 3, + 2, 0,166, 3,153, 0,167, 3,141, 0,168, 3,141, 0,169, 3, 4, 0,170, 3, 4, 0,171, 3, 4, 0,172, 3, 4, 0, 70, 0, + 12, 0,173, 3, 12, 0,174, 3, 12, 0,175, 3,166, 0, 14, 0,166, 0, 0, 0,166, 0, 1, 0, 32, 0, 38, 0, 7, 0,251, 2, + 7, 0, 66, 1, 7, 0,252, 2, 7, 0,244, 2, 0, 0, 20, 0, 4, 0,253, 2, 4, 0,254, 2, 4, 0,176, 3, 2, 0, 17, 0, + 2, 0,177, 3, 7, 0,255, 2,167, 0, 12, 0,167, 0, 0, 0,167, 0, 1, 0, 32, 0, 45, 0, 4, 0,178, 3, 4, 0,156, 2, + 4, 0,179, 3, 4, 0, 17, 0, 4, 0,180, 3, 7, 0, 66, 1, 7, 0,181, 3, 7, 0,182, 3, 7, 0,154, 2,164, 0, 40, 0, + 4, 0, 19, 0, 2, 0,183, 3, 2, 0,184, 3, 2, 0,244, 2, 2, 0,185, 3, 2, 0,186, 3, 2, 0,187, 3, 2, 0,188, 3, + 2, 0,189, 3, 7, 0,190, 3, 7, 0,191, 3, 7, 0,192, 3, 7, 0,193, 3, 7, 0,194, 3, 7, 0,195, 3, 7, 0,196, 3, + 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,203, 3, 7, 0,204, 3, + 7, 0,205, 3, 7, 0, 37, 0, 7, 0,206, 3, 7, 0,207, 3, 7, 0,208, 3, 7, 0,209, 3, 7, 0,210, 3, 7, 0,211, 3, + 7, 0,212, 3, 7, 0,213, 3, 7, 0,214, 3, 7, 0,215, 3, 52, 0,165, 0,168, 0,216, 3, 7, 0,217, 3, 4, 0,193, 2, +169, 0, 5, 0, 67, 0,241, 1, 7, 0,218, 3, 7, 0,219, 3, 2, 0, 19, 0, 2, 0,220, 3,170, 0, 9, 0,170, 0, 0, 0, +170, 0, 1, 0, 4, 0,221, 3, 4, 0,222, 3, 4, 0,223, 3, 4, 0, 19, 0, 4, 0,224, 3, 9, 0,225, 3, 9, 0,226, 3, +137, 0, 19, 0,137, 0, 0, 0,137, 0, 1, 0, 4, 0, 19, 0, 4, 0,227, 3, 4, 0,228, 3, 4, 0,229, 3, 4, 0,230, 3, + 4, 0,231, 3, 4, 0,232, 3, 4, 0,222, 3, 4, 0,156, 2, 4, 0, 57, 0, 0, 0,233, 3, 0, 0,234, 3, 0, 0,235, 3, + 0, 0,236, 3, 12, 0,237, 3,171, 0,238, 3, 9, 0,239, 3,172, 0, 1, 0, 7, 0, 43, 2,163, 0, 30, 0, 4, 0, 19, 0, + 7, 0,240, 3, 7, 0,241, 3, 7, 0,242, 3, 4, 0,243, 3, 4, 0,244, 3, 4, 0,245, 3, 4, 0,246, 3, 7, 0,247, 3, + 7, 0,248, 3, 7, 0,249, 3, 7, 0,250, 3, 7, 0,251, 3, 7, 0,252, 3, 7, 0,253, 3, 7, 0,254, 3, 7, 0,255, 3, + 7, 0, 0, 4, 7, 0, 1, 4, 7, 0, 2, 4, 7, 0, 3, 4, 7, 0, 4, 4, 7, 0, 5, 4, 7, 0, 6, 4, 7, 0, 7, 4, + 7, 0, 8, 4, 4, 0, 9, 4, 4, 0, 10, 4, 7, 0, 11, 4, 7, 0,133, 3,165, 0, 54, 0, 4, 0,222, 3, 4, 0, 12, 4, +173, 0, 13, 4,174, 0, 14, 4, 0, 0, 37, 0, 0, 0, 15, 4, 2, 0, 16, 4, 7, 0, 17, 4, 0, 0, 18, 4, 7, 0, 19, 4, + 7, 0, 20, 4, 7, 0, 21, 4, 7, 0, 22, 4, 7, 0, 23, 4, 7, 0, 24, 4, 7, 0, 25, 4, 7, 0, 26, 4, 7, 0, 27, 4, + 2, 0, 28, 4, 0, 0, 29, 4, 2, 0, 30, 4, 7, 0, 31, 4, 7, 0, 32, 4, 0, 0, 33, 4, 4, 0,126, 0, 4, 0, 34, 4, + 4, 0, 35, 4, 2, 0, 36, 4, 2, 0, 37, 4,172, 0, 38, 4, 4, 0, 39, 4, 4, 0, 82, 0, 7, 0, 40, 4, 7, 0, 41, 4, + 7, 0, 42, 4, 7, 0, 43, 4, 2, 0, 44, 4, 2, 0, 45, 4, 2, 0, 46, 4, 2, 0, 47, 4, 2, 0, 48, 4, 2, 0, 49, 4, + 2, 0, 50, 4, 2, 0, 51, 4,175, 0, 52, 4, 7, 0, 53, 4, 7, 0, 54, 4,137, 0, 55, 4, 12, 0, 4, 3,169, 0, 56, 4, + 7, 0, 57, 4, 7, 0, 58, 4, 7, 0, 59, 4, 0, 0, 60, 4,153, 0, 49, 0,152, 0, 61, 4, 2, 0, 17, 0, 2, 0, 62, 4, + 2, 0, 63, 4, 2, 0, 64, 4, 7, 0, 65, 4, 2, 0, 66, 4, 2, 0, 67, 4, 7, 0, 68, 4, 2, 0, 69, 4, 2, 0, 70, 4, + 7, 0, 71, 4, 7, 0, 72, 4, 7, 0, 73, 4, 7, 0, 74, 4, 7, 0, 75, 4, 7, 0, 76, 4, 4, 0, 77, 4, 7, 0, 78, 4, + 7, 0, 79, 4, 7, 0, 80, 4, 80, 0, 81, 4, 80, 0, 82, 4, 80, 0, 83, 4, 0, 0, 84, 4, 7, 0, 85, 4, 7, 0, 86, 4, + 36, 0, 80, 0, 2, 0, 87, 4, 0, 0, 88, 4, 0, 0, 89, 4, 7, 0, 90, 4, 4, 0, 91, 4, 7, 0, 92, 4, 7, 0, 93, 4, + 4, 0, 94, 4, 4, 0, 19, 0, 7, 0, 95, 4, 7, 0, 96, 4, 7, 0, 97, 4, 84, 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, 4, 0,106, 4,176, 0, 76, 0, 27, 0, 31, 0, + 39, 0, 75, 0, 2, 0,175, 0, 2, 0, 70, 1, 2, 0,104, 1, 2, 0,107, 4, 7, 0,108, 4, 7, 0,109, 4, 7, 0,110, 4, + 7, 0,111, 4, 7, 0,112, 4, 7, 0,113, 4, 7, 0,114, 4, 7, 0,115, 4, 7, 0,162, 1, 7, 0,164, 1, 7, 0,163, 1, + 7, 0,116, 4, 4, 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, 2, 0,125, 4, 2, 0, 69, 1, 2, 0,126, 4, 2, 0,127, 4, 2, 0,128, 4, 2, 0,129, 4, 2, 0,130, 4, + 2, 0,131, 4, 7, 0,132, 4, 7, 0,133, 4, 7, 0,134, 4, 7, 0,135, 4, 7, 0,136, 4, 7, 0,137, 4, 7, 0,138, 4, + 7, 0,139, 4, 7, 0,140, 4, 7, 0,141, 4, 7, 0,142, 4, 7, 0,143, 4, 2, 0,144, 4, 2, 0,145, 4, 2, 0,146, 4, + 2, 0,147, 4, 7, 0,148, 4, 7, 0,149, 4, 7, 0,150, 4, 7, 0,151, 4, 2, 0,152, 4, 2, 0,153, 4, 2, 0,154, 4, + 2, 0,155, 4, 7, 0,156, 4, 7, 0,157, 4, 7, 0,158, 4, 7, 0,159, 4, 7, 0,160, 4, 2, 0,161, 4, 2, 0,162, 4, + 2, 0,163, 4, 2, 0,164, 4, 2, 0,165, 4, 2, 0, 19, 0, 7, 0,166, 4, 7, 0,167, 4, 36, 0, 80, 0, 51, 0,134, 1, + 2, 0,135, 1, 2, 0,136, 1, 30, 0,150, 0,177, 0, 8, 0,177, 0, 0, 0,177, 0, 1, 0, 4, 0,111, 3, 4, 0,168, 4, + 4, 0, 19, 0, 2, 0,169, 4, 2, 0,170, 4, 32, 0,164, 0,178, 0, 13, 0, 9, 0,171, 4, 9, 0,172, 4, 4, 0,173, 4, + 4, 0,174, 4, 4, 0,175, 4, 4, 0,176, 4, 4, 0,177, 4, 4, 0,178, 4, 4, 0,179, 4, 4, 0,180, 4, 4, 0,181, 4, + 4, 0, 37, 0, 0, 0,182, 4,179, 0, 5, 0, 9, 0,183, 4, 9, 0,184, 4, 4, 0,185, 4, 4, 0, 70, 0, 0, 0,186, 4, +180, 0, 10, 0, 4, 0,187, 4, 4, 0,188, 4, 4, 0,189, 4, 4, 0,190, 4, 4, 0,191, 4, 4, 0,192, 4, 4, 0,193, 4, + 4, 0,194, 4, 4, 0,195, 4, 4, 0,196, 4,181, 0, 15, 0, 4, 0, 17, 0, 4, 0,189, 4, 4, 0,197, 4, 4, 0,198, 4, + 4, 0,199, 4, 4, 0,200, 4, 7, 0,201, 4, 4, 0,202, 4, 4, 0, 90, 0, 4, 0,203, 4, 4, 0,204, 4, 4, 0,205, 4, + 4, 0,206, 4, 4, 0,207, 4, 26, 0, 30, 0,182, 0, 7, 0, 4, 0,208, 4, 7, 0,209, 4, 7, 0,210, 4, 7, 0,211, 4, + 4, 0,212, 4, 2, 0, 19, 0, 2, 0, 37, 0,183, 0, 11, 0,183, 0, 0, 0,183, 0, 1, 0, 0, 0, 20, 0, 66, 0,213, 4, + 67, 0,214, 4, 4, 0,111, 3, 4, 0,215, 4, 4, 0,216, 4, 4, 0, 37, 0, 4, 0,217, 4, 4, 0,218, 4,184, 0,135, 0, +178, 0,219, 4,179, 0,220, 4,180, 0,221, 4,181, 0,222, 4, 4, 0, 17, 3, 4, 0,126, 0, 4, 0, 34, 4, 4, 0,223, 4, + 4, 0,224, 4, 4, 0,225, 4, 4, 0,226, 4, 2, 0, 19, 0, 2, 0,227, 4, 7, 0,101, 2, 7, 0,228, 4, 7, 0,229, 4, + 7, 0,230, 4, 7, 0,231, 4, 7, 0,232, 4, 2, 0,233, 4, 2, 0,234, 4, 2, 0,235, 4, 2, 0,236, 4, 2, 0,246, 0, + 2, 0,237, 4, 2, 0,238, 4, 2, 0,239, 4, 2, 0,240, 4, 2, 0,241, 4, 2, 0, 91, 1, 2, 0,106, 0, 2, 0,242, 4, + 2, 0,243, 4, 2, 0,244, 4, 2, 0,245, 4, 2, 0,246, 4, 2, 0,247, 4, 2, 0,248, 4, 2, 0,249, 4, 2, 0,250, 4, + 2, 0, 92, 1, 2, 0,251, 4, 2, 0,252, 4, 2, 0,253, 4, 2, 0,254, 4, 4, 0,255, 4, 4, 0, 69, 1, 4, 0, 0, 5, + 2, 0, 1, 5, 2, 0, 2, 5, 2, 0, 3, 5, 2, 0,121, 1, 2, 0, 4, 5, 2, 0, 5, 5, 2, 0, 6, 5, 2, 0, 7, 5, + 24, 0, 8, 5, 24, 0, 9, 5, 23, 0, 10, 5, 12, 0, 11, 5, 2, 0, 12, 5, 2, 0, 37, 0, 7, 0, 13, 5, 7, 0, 14, 5, + 7, 0, 15, 5, 7, 0, 16, 5, 4, 0, 17, 5, 7, 0, 18, 5, 7, 0, 19, 5, 7, 0, 20, 5, 7, 0, 21, 5, 2, 0, 22, 5, + 2, 0, 23, 5, 2, 0, 24, 5, 2, 0, 25, 5, 2, 0, 26, 5, 2, 0, 27, 5, 7, 0, 28, 5, 7, 0, 29, 5, 7, 0, 30, 5, + 2, 0, 31, 5, 2, 0, 32, 5, 2, 0, 33, 5, 2, 0, 34, 5, 2, 0, 35, 5, 2, 0, 36, 5, 2, 0, 37, 5, 2, 0, 38, 5, + 2, 0, 39, 5, 2, 0, 40, 5, 4, 0, 41, 5, 4, 0, 42, 5, 4, 0, 43, 5, 4, 0, 44, 5, 4, 0, 45, 5, 7, 0, 46, 5, + 4, 0, 47, 5, 4, 0, 48, 5, 4, 0, 49, 5, 4, 0, 50, 5, 7, 0, 51, 5, 7, 0, 52, 5, 7, 0, 53, 5, 7, 0, 54, 5, + 7, 0, 55, 5, 7, 0, 56, 5, 7, 0, 57, 5, 7, 0, 58, 5, 7, 0, 59, 5, 0, 0, 60, 5, 0, 0, 61, 5, 4, 0, 62, 5, + 2, 0, 63, 5, 2, 0,238, 1, 0, 0, 64, 5, 7, 0, 65, 5, 7, 0, 66, 5, 4, 0, 67, 5, 4, 0, 68, 5, 7, 0, 69, 5, + 7, 0, 70, 5, 2, 0, 71, 5, 2, 0, 72, 5, 7, 0, 73, 5, 2, 0, 74, 5, 2, 0, 75, 5, 4, 0, 76, 5, 2, 0, 77, 5, + 2, 0, 78, 5, 2, 0, 79, 5, 2, 0, 80, 5, 7, 0, 81, 5, 7, 0, 70, 0, 42, 0, 82, 5, 0, 0, 83, 5,185, 0, 9, 0, +185, 0, 0, 0,185, 0, 1, 0, 0, 0, 20, 0, 2, 0, 84, 5, 2, 0, 85, 5, 2, 0, 86, 5, 2, 0, 43, 0, 7, 0, 87, 5, + 7, 0, 70, 0,186, 0, 7, 0, 2, 0,210, 2, 2, 0, 69, 1, 2, 0,109, 0, 2, 0, 88, 5, 7, 0, 89, 5, 7, 0, 70, 0, + 42, 0, 90, 5,187, 0, 5, 0, 7, 0, 91, 5, 0, 0, 17, 0, 0, 0, 43, 0, 0, 0, 70, 0, 0, 0,238, 1,188, 0, 26, 0, + 7, 0,123, 4, 7, 0,124, 4, 2, 0, 69, 1, 2, 0, 19, 0, 2, 0, 92, 5, 2, 0,136, 1, 2, 0,126, 4, 2, 0,127, 4, + 2, 0,128, 4, 2, 0,129, 4, 2, 0,130, 4, 2, 0,131, 4,187, 0, 93, 5, 2, 0,233, 4, 2, 0,234, 4, 2, 0,235, 4, + 2, 0,236, 4, 2, 0,246, 0, 2, 0,237, 4, 2, 0, 94, 5, 2, 0,238, 4,186, 0, 95, 5, 2, 0, 96, 5, 2, 0,240, 4, + 2, 0,243, 4, 2, 0,244, 4,189, 0, 5, 0,189, 0, 0, 0,189, 0, 1, 0, 4, 0,221, 3, 0, 0,233, 3, 4, 0, 19, 0, +190, 0, 6, 0,191, 0, 97, 5, 4, 0, 98, 5, 4, 0, 99, 5, 9, 0,100, 5, 0, 0,101, 5, 4, 0, 37, 0,192, 0, 6, 0, +190, 0,102, 5, 2, 0, 19, 0, 2, 0,103, 5, 2, 0,104, 5, 2, 0,105, 5, 9, 0,106, 5,193, 0, 4, 0, 2, 0,106, 0, + 2, 0,221, 2, 2, 0,227, 3, 2, 0,107, 5,194, 0, 14, 0, 2, 0, 19, 0, 2, 0,108, 5, 2, 0,109, 5, 2, 0,110, 5, +193, 0,111, 5, 9, 0,106, 5, 7, 0,112, 5, 7, 0, 57, 0, 4, 0,113, 5, 4, 0,114, 5, 4, 0,115, 5, 4, 0,116, 5, + 46, 0,134, 0, 32, 0,164, 0,195, 0, 4, 0,195, 0, 0, 0,195, 0, 1, 0, 0, 0,117, 5, 7, 0,118, 5,196, 0, 6, 0, +190, 0,102, 5, 7, 0,119, 5, 4, 0, 90, 0, 0, 0,120, 5, 0, 0,121, 5, 0, 0,190, 2,197, 0, 7, 0,190, 0,102, 5, + 2, 0, 69, 1, 2, 0, 19, 0, 4, 0, 36, 0, 4, 0,122, 5, 86, 0,123, 5, 9, 0,106, 5,198, 0, 74, 0,197, 0,124, 5, +197, 0,125, 5,196, 0, 80, 3, 7, 0,126, 5, 2, 0,127, 5, 2, 0,128, 5, 7, 0,129, 5, 7, 0,130, 5, 2, 0,227, 3, + 2, 0,131, 5, 7, 0,132, 5, 7, 0,133, 5, 7, 0,134, 5, 2, 0,135, 5, 2, 0,113, 5, 2, 0,136, 5, 2, 0,137, 5, + 2, 0,138, 5, 2, 0,139, 5, 7, 0,140, 5, 7, 0,141, 5, 7, 0,142, 5, 2, 0,143, 5, 2, 0,144, 5, 2, 0,145, 5, + 2, 0,146, 5, 2, 0,147, 5, 2, 0,148, 5, 2, 0,149, 5,192, 0,150, 5,194, 0,151, 5, 7, 0,152, 5, 7, 0,153, 5, + 7, 0,154, 5, 2, 0,155, 5, 2, 0,156, 5, 0, 0,157, 5, 0, 0,158, 5, 0, 0,159, 5, 0, 0,160, 5, 0, 0,161, 5, + 0, 0,162, 5, 2, 0,163, 5, 7, 0,164, 5, 7, 0,165, 5, 7, 0,166, 5, 7, 0,167, 5, 7, 0,168, 5, 7, 0,169, 5, + 7, 0,170, 5, 7, 0,171, 5, 7, 0,172, 5, 7, 0,173, 5, 2, 0,174, 5, 0, 0,175, 5, 0, 0,176, 5, 0, 0,177, 5, + 0, 0,178, 5, 32, 0,179, 5, 0, 0,180, 5, 0, 0,181, 5, 0, 0,182, 5, 0, 0,183, 5, 0, 0,184, 5, 0, 0,185, 5, + 0, 0,186, 5, 0, 0,187, 5, 2, 0,188, 5, 2, 0,189, 5, 2, 0,190, 5, 2, 0,191, 5, 2, 0,192, 5, 4, 0,193, 5, + 4, 0,194, 5,199, 0, 8, 0, 4, 0,195, 5, 4, 0,196, 5, 4, 0,197, 5, 4, 0,198, 5, 4, 0,199, 5, 4, 0,200, 5, + 4, 0, 54, 0, 4, 0,125, 2,200, 0, 3, 0, 7, 0,201, 5, 2, 0,202, 5, 2, 0, 19, 0,201, 0, 2, 0, 7, 0,203, 5, + 4, 0, 19, 0, 46, 0, 38, 0, 27, 0, 31, 0, 39, 0, 75, 0, 32, 0,204, 5,176, 0,205, 5, 46, 0,206, 5, 47, 0,238, 0, + 12, 0,207, 5,177, 0,208, 5, 32, 0,209, 5, 7, 0,210, 5, 7, 0,211, 5, 7, 0,212, 5, 7, 0,213, 5, 4, 0,111, 3, + 2, 0, 19, 0, 2, 0, 63, 1, 60, 0, 58, 1,202, 0,214, 5,198, 0,215, 5,203, 0,216, 5,184, 0,182, 0,182, 0,217, 5, + 12, 0,100, 0, 12, 0,218, 5, 12, 0,219, 5,204, 0,220, 5, 2, 0,221, 5, 2, 0,222, 5, 2, 0,247, 0, 2, 0,223, 5, + 4, 0,224, 5, 4, 0,225, 5, 12, 0,226, 5,187, 0, 93, 5,188, 0,227, 5,200, 0,228, 5,162, 0, 93, 3,201, 0,229, 5, +205, 0, 6, 0, 47, 0,238, 0, 45, 0, 57, 1, 7, 0, 89, 2, 7, 0, 90, 2, 7, 0,106, 0, 7, 0,230, 5,206, 0, 36, 0, + 7, 0,231, 5, 7, 0,232, 5, 7, 0,233, 5, 7, 0,234, 5, 7, 0,235, 5, 7, 0,236, 5, 7, 0,237, 5, 7, 0,238, 5, + 7, 0,239, 5, 7, 0, 76, 1, 7, 0,240, 5, 7, 0,241, 5, 7, 0,242, 5, 7, 0,243, 5, 7, 0,171, 0, 2, 0,244, 5, + 2, 0,245, 5, 2, 0, 70, 2, 2, 0,246, 5, 2, 0,247, 5, 2, 0,248, 5, 2, 0,249, 5, 7, 0,250, 5, 7, 0,251, 5, + 71, 0,252, 5,162, 0, 93, 3,206, 0,253, 5,207, 0,254, 5,208, 0,255, 5,209, 0, 0, 6,210, 0, 1, 6,211, 0, 2, 6, + 7, 0, 3, 6, 2, 0, 4, 6, 2, 0, 5, 6, 4, 0,238, 1,212, 0, 54, 0,213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, + 4, 0, 7, 6, 7, 0, 8, 6, 2, 0, 9, 6, 7, 0,239, 5, 7, 0, 76, 1, 7, 0, 43, 0, 4, 0, 10, 6, 2, 0,248, 5, + 2, 0,249, 5, 32, 0,204, 5, 32, 0, 11, 6,205, 0, 12, 6,212, 0,253, 5, 0, 0, 13, 6, 4, 0,111, 3, 4, 0, 14, 6, + 2, 0, 15, 6, 2, 0, 70, 0, 2, 0, 16, 6, 2, 0, 17, 6, 2, 0,238, 1, 2, 0, 19, 0, 2, 0, 28, 2, 2, 0, 18, 6, + 7, 0,112, 0, 7, 0, 19, 6, 7, 0, 20, 6, 7, 0, 21, 6, 7, 0, 22, 6, 7, 0, 23, 6, 7, 0,171, 0, 7, 0,210, 5, + 2, 0, 24, 6, 2, 0,121, 1, 2, 0, 25, 6, 2, 0, 26, 6, 2, 0, 27, 6, 2, 0, 28, 6, 2, 0, 29, 6, 2, 0, 30, 6, + 2, 0, 31, 6, 2, 0, 32, 6, 4, 0, 33, 6, 12, 0, 34, 6, 2, 0, 35, 6, 2, 0,139, 2, 2, 0, 36, 6, 0, 0, 37, 6, + 0, 0, 38, 6, 9, 0, 39, 6,162, 0, 93, 3,214, 0, 25, 0, 24, 0, 36, 0, 24, 0, 64, 0, 23, 0, 40, 6, 23, 0, 41, 6, + 23, 0, 42, 6, 7, 0, 43, 6, 7, 0, 44, 6, 7, 0, 45, 6, 7, 0, 46, 6, 2, 0, 47, 6, 2, 0, 48, 6, 2, 0, 49, 6, + 2, 0, 50, 6, 2, 0, 51, 6, 2, 0, 19, 0, 2, 0, 52, 6, 2, 0, 53, 6, 2, 0, 54, 6, 2, 0, 55, 6, 2, 0, 56, 6, + 2, 0, 17, 6, 7, 0, 57, 6, 7, 0, 58, 6, 4, 0, 59, 6, 4, 0, 60, 6,213, 0, 6, 0,213, 0, 0, 0,213, 0, 1, 0, + 12, 0, 6, 6, 4, 0, 7, 6, 7, 0, 8, 6, 2, 0, 9, 6,215, 0, 8, 0,213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, + 4, 0, 7, 6, 7, 0, 8, 6, 2, 0, 9, 6,216, 0, 61, 6, 46, 0,134, 0,217, 0, 14, 0,213, 0, 0, 0,213, 0, 1, 0, + 12, 0, 6, 6, 4, 0, 7, 6, 7, 0, 8, 6, 2, 0, 9, 6,214, 0, 62, 6,218, 0, 63, 6, 12, 0, 64, 6, 2, 0, 69, 1, + 2, 0, 65, 6, 4, 0, 19, 0, 7, 0, 66, 6, 4, 0, 17, 6,219, 0, 20, 0,213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, + 4, 0, 7, 6, 7, 0, 8, 6, 2, 0, 9, 6,207, 0,254, 5,214, 0, 62, 6, 2, 0, 67, 6, 2, 0, 68, 6, 2, 0, 69, 6, + 2, 0, 70, 6, 2, 0, 52, 6, 2, 0, 71, 6, 0, 0, 19, 0, 0, 0,136, 1, 9, 0, 65, 2, 4, 0, 72, 6, 4, 0, 73, 6, + 27, 0, 74, 6,220, 0, 16, 0,213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, 4, 0, 7, 6, 7, 0, 8, 6, 2, 0, 9, 6, +214, 0, 62, 6, 7, 0, 89, 2, 7, 0, 90, 2, 2, 0, 67, 6, 2, 0, 75, 6, 2, 0, 76, 6, 2, 0, 77, 6, 4, 0, 19, 0, + 7, 0, 78, 6,162, 0, 93, 3,221, 0, 16, 0, 0, 0, 79, 6, 0, 0, 80, 6, 0, 0, 81, 6, 0, 0, 82, 6, 2, 0, 17, 0, + 2, 0, 19, 0, 2, 0, 83, 6, 2, 0, 84, 6, 2, 0,181, 1, 2, 0, 85, 6, 4, 0, 86, 6, 4, 0, 87, 6, 2, 0, 88, 6, + 2, 0, 89, 6, 0, 0, 90, 6, 0, 0, 91, 6,222, 0, 16, 0,213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, 4, 0, 7, 6, + 4, 0, 37, 0,221, 0, 92, 6,223, 0, 93, 6, 12, 0, 94, 6, 12, 0, 95, 6,224, 0, 96, 6,211, 0, 97, 6,225, 0, 98, 6, + 2, 0, 99, 6, 2, 0,100, 6, 2, 0,101, 6, 2, 0, 70, 0,226, 0, 17, 0,213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, + 4, 0, 7, 6, 7, 0, 8, 6, 2, 0, 9, 6,214, 0, 62, 6, 12, 0,102, 6,227, 0,103, 6, 0, 0,104, 6,228, 0,105, 6, + 4, 0,106, 6, 4, 0,107, 6, 2, 0, 19, 0, 2, 0,108, 6, 2, 0,109, 6, 2, 0, 37, 0,229, 0, 29, 0,213, 0, 0, 0, +213, 0, 1, 0, 12, 0, 6, 6, 4, 0, 7, 6, 7, 0, 8, 6, 2, 0, 9, 6, 47, 0,229, 2, 45, 0, 57, 1, 63, 0,110, 6, + 2, 0,133, 0, 2, 0,111, 6, 2, 0, 70, 0, 2, 0,112, 6, 4, 0, 19, 0, 2, 0,113, 6, 2, 0,114, 6, 2, 0,115, 6, + 2, 0,238, 1, 0, 0,116, 6, 0, 0,117, 6, 0, 0,118, 6, 0, 0, 17, 6, 7, 0, 89, 2, 7, 0, 90, 2, 7, 0, 78, 6, + 7, 0,121, 1, 7, 0,119, 6, 7, 0,120, 6,162, 0, 93, 3,230, 0, 11, 0,213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, + 4, 0, 7, 6, 7, 0, 8, 6, 2, 0, 9, 6, 2, 0, 65, 6, 2, 0, 19, 0, 4, 0, 37, 0,218, 0, 63, 6,214, 0, 62, 6, +231, 0, 27, 0,213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, 4, 0, 7, 6, 7, 0, 8, 6, 2, 0, 9, 6, 42, 0,121, 6, + 4, 0,122, 6, 4, 0,123, 6, 2, 0, 90, 0, 2, 0,133, 0, 2, 0,124, 6, 0, 0,125, 6, 0, 0,126, 6, 4, 0,127, 6, + 4, 0,128, 6, 4, 0,129, 6, 4, 0,130, 6, 2, 0,131, 6, 2, 0,132, 6, 7, 0,133, 6, 23, 0,134, 6, 23, 0,135, 6, + 4, 0,136, 6, 4, 0,137, 6, 0, 0,138, 6, 0, 0,139, 6,232, 0, 10, 0, 27, 0, 31, 0, 9, 0,140, 6, 9, 0,141, 6, + 9, 0,142, 6, 9, 0,143, 6, 9, 0,144, 6, 4, 0, 90, 0, 4, 0,145, 6, 0, 0,146, 6, 0, 0,147, 6,233, 0, 10, 0, +213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, 4, 0, 7, 6, 7, 0, 8, 6,232, 0,148, 6, 2, 0, 90, 0, 2, 0,133, 0, + 4, 0, 43, 0, 9, 0,149, 6,234, 0, 8, 0,213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, 4, 0, 7, 6, 7, 0, 8, 6, +214, 0, 62, 6, 4, 0, 19, 0, 4, 0,150, 6,235, 0, 23, 0,213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, 4, 0, 7, 6, + 7, 0, 8, 6, 2, 0, 9, 6,214, 0, 62, 6, 27, 0,151, 6, 27, 0, 81, 0, 2, 0, 19, 0, 2, 0,133, 0, 7, 0,152, 6, + 9, 0,153, 6, 7, 0, 89, 2, 7, 0, 90, 2, 7, 0,154, 6, 7, 0,155, 6, 60, 0, 58, 1, 60, 0,156, 6, 4, 0,157, 6, + 2, 0,158, 6, 2, 0, 37, 0,162, 0, 93, 3,236, 0, 10, 0,213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, 4, 0, 7, 6, + 7, 0, 8, 6, 2, 0, 9, 6, 2, 0, 19, 0, 2, 0,120, 3, 4, 0, 37, 0,162, 0, 93, 3,237, 0, 42, 0,213, 0, 0, 0, +213, 0, 1, 0, 12, 0, 6, 6, 4, 0, 7, 6, 7, 0, 8, 6, 2, 0, 9, 6,214, 0, 62, 6,223, 0, 93, 6, 0, 0, 79, 6, + 0, 0, 80, 6, 0, 0, 81, 6, 2, 0, 17, 0, 2, 0, 89, 6, 2, 0, 19, 0, 2, 0, 83, 6, 9, 0,153, 6, 4, 0, 86, 6, + 4, 0,159, 6, 4, 0,160, 6, 4, 0, 87, 6, 23, 0,161, 6, 23, 0,162, 6, 7, 0,163, 6, 7, 0,164, 6, 7, 0,165, 6, + 7, 0,152, 6, 2, 0,166, 6, 2, 0,237, 0, 2, 0,181, 1, 2, 0, 85, 6, 2, 0, 37, 0, 2, 0, 43, 0, 2, 0,167, 6, + 2, 0,168, 6, 9, 0,169, 6, 9, 0,170, 6, 9, 0,171, 6, 9, 0,172, 6, 9, 0,173, 6, 2, 0,174, 6, 0, 0, 91, 6, + 57, 0,175, 6,238, 0, 7, 0,238, 0, 0, 0,238, 0, 1, 0, 4, 0,176, 6, 4, 0, 23, 0, 0, 0, 84, 0, 4, 0,177, 6, + 4, 0, 17, 0,239, 0, 14, 0,213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, 4, 0, 7, 6, 7, 0, 8, 6, 2, 0, 9, 6, + 4, 0, 17, 0, 4, 0,178, 6, 4, 0, 19, 0, 4, 0,124, 6, 12, 0,179, 6, 12, 0,180, 6, 0, 0,181, 6, 0, 0,182, 6, +240, 0, 5, 0,213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, 4, 0, 7, 6, 4, 0, 37, 0,241, 0, 7, 0,241, 0, 0, 0, +241, 0, 1, 0, 0, 0,183, 6, 2, 0,184, 6, 2, 0,185, 6, 2, 0,186, 6, 2, 0, 37, 0,242, 0, 12, 0, 2, 0,185, 6, + 2, 0,187, 6, 2, 0,188, 6, 0, 0,190, 2, 2, 0,189, 6, 2, 0,190, 6, 2, 0,191, 6, 2, 0,192, 6, 2, 0,193, 6, + 2, 0, 52, 6, 7, 0,194, 6, 7, 0,195, 6,243, 0, 18, 0,243, 0, 0, 0,243, 0, 1, 0, 0, 0,233, 3,242, 0,196, 6, +242, 0,197, 6,242, 0,198, 6,242, 0,199, 6, 7, 0,200, 6, 2, 0,201, 6, 2, 0,202, 6, 2, 0,203, 6, 2, 0,204, 6, + 2, 0,205, 6, 2, 0,206, 6, 2, 0,207, 6, 2, 0,208, 6, 2, 0,209, 6, 2, 0,210, 6,244, 0, 10, 0, 0, 0,211, 6, + 0, 0,212, 6, 0, 0,213, 6, 0, 0,214, 6, 0, 0,215, 6, 0, 0,216, 6, 2, 0,217, 6, 2, 0,218, 6, 2, 0,219, 6, + 2, 0, 37, 0,245, 0, 8, 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, + 7, 0,230, 5, 7, 0, 37, 0,246, 0, 17, 0,244, 0,226, 6,244, 0,227, 6,244, 0,228, 6,244, 0,229, 6,244, 0,230, 6, +244, 0,231, 6,244, 0,232, 6,244, 0,233, 6,244, 0,234, 6,244, 0,235, 6,244, 0,236, 6,244, 0,237, 6,244, 0,238, 6, +244, 0,239, 6,244, 0,240, 6,245, 0,241, 6, 0, 0,242, 6,247, 0, 71, 0, 0, 0,243, 6, 0, 0,244, 6, 0, 0,215, 6, + 0, 0,245, 6, 0, 0,246, 6, 0, 0,247, 6, 0, 0,248, 6, 0, 0,249, 6, 0, 0,250, 6, 0, 0,251, 6, 0, 0,252, 6, + 0, 0,253, 6, 0, 0,254, 6, 0, 0,255, 6, 0, 0, 0, 7, 0, 0, 1, 7, 0, 0, 2, 7, 0, 0, 3, 7, 0, 0, 4, 7, + 0, 0, 5, 7, 0, 0, 6, 7, 0, 0, 7, 7, 0, 0, 8, 7, 0, 0, 9, 7, 0, 0, 10, 7, 0, 0, 11, 7, 0, 0, 12, 7, + 0, 0, 13, 7, 0, 0, 14, 7, 0, 0, 15, 7, 0, 0, 16, 7, 0, 0, 17, 7, 0, 0, 18, 7, 0, 0, 19, 7, 0, 0, 20, 7, + 0, 0, 21, 7, 0, 0, 22, 7, 0, 0, 23, 7, 0, 0, 24, 7, 0, 0, 25, 7, 0, 0, 26, 7, 0, 0, 27, 7, 0, 0, 28, 7, + 0, 0, 29, 7, 0, 0, 30, 7, 0, 0, 31, 7, 0, 0, 32, 7, 0, 0, 33, 7, 0, 0, 34, 7, 0, 0, 35, 7, 0, 0, 36, 7, + 0, 0, 37, 7, 0, 0, 38, 7, 0, 0, 39, 7, 0, 0, 40, 7, 0, 0, 41, 7, 0, 0, 42, 7, 0, 0, 43, 7, 0, 0, 44, 7, + 0, 0, 45, 7, 0, 0, 46, 7, 0, 0, 47, 7, 0, 0, 48, 7, 0, 0, 49, 7, 0, 0, 50, 7, 0, 0, 51, 7, 0, 0, 52, 7, + 0, 0, 53, 7, 0, 0, 54, 7, 0, 0, 55, 7, 0, 0, 92, 0,248, 0, 5, 0, 0, 0, 56, 7, 0, 0, 11, 7, 0, 0, 13, 7, + 2, 0, 19, 0, 2, 0, 37, 0,249, 0, 24, 0,249, 0, 0, 0,249, 0, 1, 0, 0, 0, 20, 0,246, 0, 57, 7,247, 0, 58, 7, +247, 0, 59, 7,247, 0, 60, 7,247, 0, 61, 7,247, 0, 62, 7,247, 0, 63, 7,247, 0, 64, 7,247, 0, 65, 7,247, 0, 66, 7, +247, 0, 67, 7,247, 0, 68, 7,247, 0, 69, 7,247, 0, 70, 7,247, 0, 71, 7,247, 0, 72, 7,247, 0, 73, 7,247, 0, 74, 7, +248, 0, 75, 7, 4, 0, 76, 7, 4, 0, 37, 0,250, 0, 5, 0, 4, 0, 19, 0, 4, 0, 37, 0, 7, 0,138, 2, 7, 0, 77, 7, + 7, 0, 43, 2,251, 0, 73, 0, 4, 0, 19, 0, 4, 0, 78, 7, 4, 0, 79, 7, 0, 0, 80, 7, 0, 0, 81, 7, 0, 0, 82, 7, + 0, 0, 83, 7, 0, 0, 84, 7, 0, 0, 85, 7, 0, 0, 86, 7, 0, 0, 87, 7, 0, 0, 88, 7, 2, 0, 89, 7, 2, 0, 90, 7, + 4, 0, 91, 7, 4, 0, 92, 7, 4, 0, 93, 7, 4, 0, 94, 7, 2, 0, 95, 7, 2, 0, 96, 7, 4, 0, 97, 7, 4, 0, 98, 7, + 4, 0, 99, 7, 4, 0,100, 7, 4, 0,101, 7, 4, 0,179, 6, 4, 0,102, 7, 2, 0,103, 7, 2, 0,104, 7, 2, 0,105, 7, + 2, 0,106, 7, 12, 0,107, 7, 12, 0,108, 7, 12, 0,109, 7, 12, 0,110, 7, 0, 0,111, 7, 2, 0,112, 7, 2, 0,113, 7, + 2, 0,114, 7, 2, 0,115, 7, 2, 0,116, 7, 2, 0,117, 7, 2, 0,118, 7, 2, 0,119, 7,250, 0,120, 7, 2, 0,121, 7, + 2, 0,122, 7, 2, 0,123, 7, 2, 0,124, 7, 2, 0,125, 7, 2, 0,126, 7, 2, 0,127, 7, 2, 0,128, 7, 4, 0,129, 7, + 4, 0,130, 7, 2, 0,131, 7, 2, 0,132, 7, 2, 0,133, 7, 2, 0,134, 7, 2, 0,135, 7, 2, 0,136, 7, 2, 0,137, 7, + 2, 0,138, 7, 2, 0,139, 7, 2, 0,140, 7, 2, 0,141, 7, 2, 0,142, 7, 0, 0,143, 7, 0, 0,144, 7, 7, 0,145, 7, + 2, 0,155, 5, 2, 0,156, 5, 55, 0,146, 7,216, 0, 21, 0, 27, 0, 31, 0, 12, 0,147, 7, 12, 0,148, 7, 12, 0,149, 7, + 12, 0, 6, 6, 46, 0,134, 0, 46, 0,150, 7, 2, 0,151, 7, 2, 0,152, 7, 2, 0,153, 7, 2, 0,154, 7, 2, 0,155, 7, + 2, 0,156, 7, 2, 0,157, 7, 2, 0, 37, 0, 2, 0,158, 7, 2, 0,159, 7, 4, 0, 70, 0,211, 0,160, 7, 9, 0,161, 7, + 2, 0,162, 7,252, 0, 5, 0,252, 0, 0, 0,252, 0, 1, 0,252, 0,163, 7, 13, 0,164, 7, 4, 0, 19, 0,253, 0, 7, 0, +253, 0, 0, 0,253, 0, 1, 0,252, 0,165, 7,252, 0,166, 7, 2, 0, 9, 5, 2, 0, 19, 0, 4, 0, 37, 0,254, 0, 25, 0, +254, 0, 0, 0,254, 0, 1, 0,255, 0,167, 7, 0, 1, 98, 6, 0, 0,168, 7, 0, 0,169, 7, 0, 0,170, 7, 2, 0,171, 7, + 2, 0,172, 7, 2, 0,173, 7, 2, 0,174, 7, 2, 0,175, 7, 2, 0, 37, 0, 2, 0, 19, 0, 2, 0,176, 7, 2, 0,177, 7, + 2, 0,178, 7, 4, 0,179, 7,254, 0,180, 7, 9, 0,181, 7, 4, 0,182, 7, 4, 0,183, 7, 4, 0,184, 7, 4, 0,185, 7, + 0, 0,186, 7, 1, 1, 22, 0, 1, 1, 0, 0, 1, 1, 1, 0,252, 0,165, 7,252, 0,166, 7,252, 0,187, 7,252, 0,188, 7, +216, 0,189, 7, 23, 0, 52, 0, 0, 0, 7, 6, 0, 0,190, 7, 2, 0, 53, 6, 2, 0, 54, 6, 2, 0,191, 7, 2, 0, 37, 0, + 2, 0,154, 7, 2, 0,177, 6, 2, 0, 19, 0, 2, 1,167, 7, 12, 0,192, 7, 12, 0, 6, 6, 12, 0,193, 7, 12, 0,194, 7, + 3, 1, 21, 0, 3, 1, 0, 0, 3, 1, 1, 0,214, 0, 62, 6, 23, 0,195, 7, 23, 0,196, 7, 2, 0, 53, 6, 2, 0, 54, 6, + 2, 0,197, 7, 2, 0,198, 7, 2, 0,199, 7, 2, 0, 19, 0, 7, 0, 85, 2, 2, 0,153, 7, 2, 0,157, 7, 4, 0, 43, 0, + 4, 1,167, 7, 12, 0,200, 7, 12, 0,201, 7, 12, 0,193, 7, 0, 0,202, 7, 9, 0,203, 7, 5, 1, 12, 0, 0, 0,204, 7, + 2, 0,205, 7, 2, 0,206, 7, 2, 0,207, 7, 2, 0,208, 7, 2, 0,252, 4, 2, 0,247, 4,216, 0,209, 7, 46, 0,210, 7, + 4, 0,211, 7, 4, 0,212, 7, 0, 0, 35, 0, 6, 1, 1, 0, 0, 0,213, 7, 7, 1, 8, 0, 57, 0,214, 7, 57, 0,215, 7, + 7, 1,216, 7, 7, 1,217, 7, 7, 1,218, 7, 2, 0,129, 0, 2, 0, 19, 0, 4, 0,219, 7, 8, 1, 4, 0, 4, 0,122, 6, + 4, 0,220, 7, 4, 0,127, 6, 4, 0,221, 7, 9, 1, 2, 0, 4, 0,222, 7, 4, 0,223, 7, 10, 1, 7, 0, 7, 0,224, 7, + 7, 0,225, 7, 7, 0,226, 7, 4, 0, 19, 0, 4, 0, 37, 0, 7, 0,118, 4, 7, 0,227, 7, 11, 1, 6, 0, 0, 0,228, 7, + 0, 0, 81, 6, 49, 0,137, 0, 2, 0,106, 0, 2, 0,251, 4, 4, 0, 37, 0, 12, 1, 21, 0, 12, 1, 0, 0, 12, 1, 1, 0, + 4, 0, 57, 0, 4, 0, 23, 0, 4, 0, 28, 0, 4, 0,229, 7, 4, 0,230, 7, 4, 0,231, 7, 6, 1,232, 7, 0, 0,228, 7, + 4, 0,233, 7, 4, 0,234, 7, 11, 1, 87, 3, 8, 1,235, 7, 9, 1,236, 7, 10, 1,237, 7, 7, 1,238, 7, 7, 1,239, 7, + 7, 1,240, 7, 57, 0,241, 7, 57, 0,242, 7, 13, 1, 12, 0, 0, 0, 5, 2, 9, 0,223, 0, 0, 0,224, 0, 4, 0,227, 0, + 4, 0,235, 0, 9, 0,228, 0, 7, 0,230, 0, 7, 0,231, 0, 9, 0,243, 7, 9, 0,244, 7, 9, 0,232, 0, 9, 0,234, 0, + 14, 1, 43, 0, 14, 1, 0, 0, 14, 1, 1, 0, 9, 0,245, 7, 9, 0, 26, 0, 0, 0, 27, 0, 4, 0, 19, 0, 4, 0, 17, 0, + 4, 0, 23, 0, 4, 0, 88, 0, 4, 0,246, 7, 4, 0,247, 7, 4, 0,230, 7, 4, 0,231, 7, 4, 0,248, 7, 4, 0,246, 0, + 4, 0,249, 7, 4, 0,250, 7, 7, 0,251, 7, 7, 0,252, 7, 4, 0,126, 0, 4, 0,253, 7, 12, 1,254, 7, 36, 0, 80, 0, + 46, 0,134, 0, 49, 0,137, 0, 7, 0,255, 7, 7, 0, 0, 8, 13, 1, 59, 1, 14, 1, 1, 8, 14, 1, 2, 8, 14, 1, 3, 8, + 12, 0, 4, 8, 15, 1, 5, 8, 16, 1, 6, 8, 7, 0, 7, 8, 7, 0, 8, 8, 4, 0, 9, 8, 7, 0, 10, 8, 9, 0, 11, 8, + 4, 0, 12, 8, 4, 0, 13, 8, 4, 0, 14, 8, 7, 0, 15, 8, 17, 1, 4, 0, 17, 1, 0, 0, 17, 1, 1, 0, 12, 0, 16, 8, + 14, 1, 17, 8,202, 0, 6, 0, 12, 0, 18, 8, 12, 0, 4, 8, 12, 0, 19, 8, 14, 1, 20, 8, 0, 0, 21, 8, 0, 0, 22, 8, + 18, 1, 4, 0, 7, 0, 23, 8, 7, 0,109, 0, 2, 0, 24, 8, 2, 0, 25, 8, 19, 1, 6, 0, 7, 0, 26, 8, 7, 0, 27, 8, + 7, 0, 28, 8, 7, 0, 29, 8, 4, 0, 30, 8, 4, 0, 31, 8, 20, 1, 13, 0, 7, 0, 32, 8, 7, 0, 33, 8, 7, 0, 34, 8, + 7, 0, 35, 8, 7, 0, 36, 8, 7, 0, 37, 8, 7, 0, 38, 8, 7, 0, 39, 8, 7, 0, 40, 8, 7, 0, 41, 8, 4, 0,233, 2, + 4, 0, 42, 8, 4, 0, 43, 8, 21, 1, 2, 0, 7, 0, 91, 5, 7, 0, 37, 0, 22, 1, 5, 0, 7, 0, 44, 8, 7, 0, 45, 8, + 4, 0, 90, 0, 4, 0,191, 2, 4, 0, 46, 8, 23, 1, 6, 0, 23, 1, 0, 0, 23, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, + 2, 0, 47, 8, 2, 0, 57, 0, 24, 1, 8, 0, 24, 1, 0, 0, 24, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 47, 8, + 2, 0, 57, 0, 7, 0, 23, 0, 7, 0,126, 0, 25, 1, 45, 0, 25, 1, 0, 0, 25, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, + 2, 0, 47, 8, 2, 0,242, 0, 2, 0, 28, 4, 2, 0, 48, 8, 7, 0, 49, 8, 7, 0, 89, 0, 7, 0,246, 2, 4, 0, 50, 8, + 4, 0, 82, 0, 4, 0,193, 2, 7, 0, 51, 8, 7, 0, 52, 8, 7, 0, 53, 8, 7, 0, 54, 8, 7, 0, 55, 8, 7, 0, 56, 8, + 7, 0,243, 2, 7, 0, 56, 1, 7, 0, 57, 8, 7, 0, 58, 8, 7, 0, 37, 0, 7, 0, 59, 8, 7, 0, 60, 8, 7, 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, + 2, 0, 28, 2, 2, 0, 70, 8, 2, 0, 25, 2, 2, 0, 71, 8, 0, 0, 72, 8, 0, 0, 73, 8, 7, 0,240, 0, 26, 1, 74, 8, + 67, 0,241, 1, 27, 1, 16, 0, 27, 1, 0, 0, 27, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 47, 8, 2, 0,242, 0, + 7, 0,238, 2, 7, 0,239, 2, 7, 0,240, 2, 7, 0, 74, 2, 7, 0,241, 2, 7, 0,242, 2, 7, 0, 75, 8, 7, 0,243, 2, + 7, 0,245, 2, 7, 0,246, 2,228, 0, 5, 0, 2, 0, 17, 0, 2, 0,219, 7, 2, 0, 19, 0, 2, 0, 76, 8, 27, 0,151, 6, +227, 0, 3, 0, 4, 0, 69, 0, 4, 0, 77, 8,228, 0, 2, 0, 28, 1, 7, 0, 28, 1, 0, 0, 28, 1, 1, 0, 0, 0, 20, 0, + 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 22, 0, 9, 0, 78, 8, 29, 1, 5, 0, 0, 0, 20, 0, 7, 0, 76, 1, 7, 0, 79, 8, + 4, 0, 80, 8, 4, 0, 37, 0, 30, 1, 4, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 43, 0, 2, 0, 70, 0, 31, 1, 4, 0, + 0, 0, 20, 0, 66, 0, 81, 8, 7, 0, 76, 1, 7, 0, 37, 0, 32, 1, 6, 0, 2, 0, 82, 8, 2, 0, 83, 8, 2, 0, 17, 0, + 2, 0, 84, 8, 0, 0, 85, 8, 0, 0, 86, 8, 33, 1, 5, 0, 4, 0, 17, 0, 4, 0, 37, 0, 0, 0, 20, 0, 0, 0, 87, 8, + 0, 0, 88, 8, 34, 1, 3, 0, 4, 0, 17, 0, 4, 0, 37, 0, 0, 0, 20, 0, 35, 1, 4, 0, 2, 0, 89, 8, 2, 0, 90, 8, + 2, 0, 19, 0, 2, 0, 37, 0, 36, 1, 6, 0, 0, 0, 20, 0, 0, 0, 91, 8, 2, 0, 92, 8, 2, 0,243, 2, 2, 0, 69, 1, + 2, 0, 70, 0, 37, 1, 5, 0, 0, 0, 20, 0, 7, 0,109, 0, 7, 0,120, 4, 2, 0, 19, 0, 2, 0,205, 2, 38, 1, 3, 0, + 0, 0, 20, 0, 4, 0,193, 2, 4, 0, 89, 8, 39, 1, 7, 0, 0, 0, 20, 0, 7, 0,120, 4, 0, 0, 93, 8, 0, 0, 94, 8, + 2, 0, 69, 1, 2, 0, 43, 0, 4, 0, 95, 8, 40, 1, 4, 0, 0, 0, 96, 8, 0, 0, 97, 8, 4, 0, 17, 0, 7, 0,209, 2, + 41, 1, 3, 0, 32, 0, 98, 8, 0, 0, 99, 8, 0, 0,100, 8, 42, 1, 18, 0, 42, 1, 0, 0, 42, 1, 1, 0, 2, 0, 17, 0, + 2, 0,101, 8, 2, 0, 19, 0, 2, 0,102, 8, 2, 0,103, 8, 2, 0,104, 8, 2, 0, 43, 0, 2, 0, 70, 0, 0, 0, 20, 0, + 9, 0, 2, 0, 43, 1,105, 8, 32, 0, 45, 0, 2, 0,107, 5, 2, 0, 7, 8, 2, 0,106, 8, 2, 0, 37, 0, 44, 1, 11, 0, + 0, 0, 20, 0, 0, 0, 17, 0, 0, 0,107, 8, 2, 0, 19, 0, 2, 0,205, 2, 2, 0,108, 8, 4, 0,109, 8, 4, 0,110, 8, + 4, 0,111, 8, 4, 0,112, 8, 4, 0,113, 8, 45, 1, 1, 0, 0, 0,114, 8, 46, 1, 4, 0, 42, 0,121, 6, 0, 0,115, 8, + 4, 0, 69, 1, 4, 0, 19, 0, 43, 1, 18, 0, 43, 1, 0, 0, 43, 1, 1, 0, 43, 1,116, 8, 2, 0, 17, 0, 2, 0, 19, 0, + 2, 0,117, 8, 2, 0,104, 8, 2, 0,101, 8, 2, 0,118, 8, 2, 0, 70, 0, 2, 0,238, 1, 0, 0, 20, 0, 9, 0, 2, 0, + 47, 1,105, 8, 42, 1,119, 8, 2, 0, 15, 0, 2, 0,120, 8, 4, 0,121, 8, 48, 1, 3, 0, 4, 0,219, 2, 4, 0, 37, 0, + 32, 0, 45, 0, 49, 1, 12, 0,160, 0,122, 8, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 49, 8, 4, 0, 89, 0, 0, 0, 20, 0, + 0, 0,123, 8, 2, 0,124, 8, 2, 0,125, 8, 2, 0,126, 8, 2, 0,127, 8, 7, 0,128, 8, 50, 1, 13, 0, 2, 0, 19, 0, + 2, 0,129, 8, 4, 0, 49, 8, 4, 0, 89, 0, 2, 0,130, 8, 7, 0,242, 3, 7, 0,131, 8, 15, 1, 5, 8, 51, 1,132, 8, + 2, 0, 17, 0, 2, 0,133, 8, 2, 0,134, 8, 2, 0,135, 8, 52, 1, 11, 0, 4, 0,219, 2, 2, 0, 17, 0, 2, 0, 19, 0, + 32, 0, 45, 0, 80, 0,136, 8, 0, 0, 20, 0, 7, 0,137, 8, 7, 0,138, 8, 7, 0,128, 3, 2, 0,139, 8, 2, 0,140, 8, + 53, 1, 5, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 37, 0, 46, 0,134, 0, 32, 0,204, 5, 54, 1, 5, 0, 4, 0, 19, 0, + 4, 0, 17, 0, 0, 0, 20, 0, 0, 0, 87, 8, 32, 0, 45, 0, 55, 1, 13, 0, 2, 0, 19, 0, 2, 0, 17, 0, 2, 0,101, 8, + 2, 0,129, 3, 7, 0,141, 8, 7, 0,142, 8, 7, 0, 64, 1, 7, 0, 65, 1, 7, 0,100, 3, 7, 0,103, 3, 7, 0,143, 8, + 7, 0,144, 8, 32, 0,145, 8, 56, 1, 10, 0, 2, 0, 19, 0, 2, 0, 17, 0, 4, 0, 49, 8, 4, 0, 89, 0, 0, 0, 20, 0, + 0, 0,123, 8, 2, 0, 43, 0, 2, 0, 64, 0, 2, 0,146, 8, 2, 0,147, 8, 57, 1, 8, 0, 32, 0, 45, 0, 7, 0,240, 2, + 7, 0,148, 8, 7, 0,149, 8, 7, 0,235, 2, 2, 0, 19, 0, 2, 0,205, 2, 7, 0,150, 8, 58, 1, 12, 0, 2, 0, 17, 0, + 2, 0, 69, 1, 2, 0, 19, 0, 2, 0,243, 2, 2, 0,219, 2, 2, 0,151, 8, 4, 0, 37, 0, 7, 0,152, 8, 7, 0,153, 8, + 7, 0,154, 8, 7, 0,155, 8, 0, 0,156, 8, 59, 1, 9, 0, 2, 0, 19, 0, 2, 0, 17, 0, 4, 0, 49, 8, 4, 0, 89, 0, + 0, 0, 20, 0, 2, 0,136, 1, 2, 0, 64, 0, 2, 0,146, 8, 2, 0,147, 8, 60, 1, 7, 0, 4, 0,193, 2, 4, 0,157, 8, + 4, 0,158, 8, 4, 0,159, 8, 7, 0,160, 8, 7, 0,161, 8, 0, 0, 93, 8, 61, 1, 7, 0, 0, 0,162, 8, 32, 0,163, 8, + 0, 0, 99, 8, 2, 0,164, 8, 2, 0, 43, 0, 4, 0, 70, 0, 0, 0,100, 8, 62, 1, 6, 0, 2, 0, 19, 0, 2, 0, 17, 0, + 4, 0, 49, 8, 4, 0, 89, 0, 0, 0,165, 8, 0, 0,166, 8, 63, 1, 1, 0, 4, 0, 19, 0, 64, 1, 6, 0, 0, 0, 92, 0, + 2, 0, 17, 0, 2, 0, 19, 0, 4, 0,167, 8, 7, 0,168, 8, 42, 0,121, 6, 65, 1, 4, 0, 0, 0, 70, 2, 2, 0, 19, 0, + 4, 0, 17, 0, 32, 0, 45, 0, 66, 1, 2, 0, 4, 0, 17, 0, 4, 0, 42, 6, 67, 1, 6, 0, 0, 0, 96, 8, 0, 0, 97, 8, + 4, 0, 17, 0, 7, 0, 36, 2, 32, 0, 50, 3, 32, 0,169, 8, 47, 1, 10, 0, 47, 1, 0, 0, 47, 1, 1, 0, 47, 1,116, 8, + 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,101, 8, 2, 0,170, 8, 0, 0, 20, 0, 9, 0, 2, 0, 32, 0, 45, 0, 68, 1, 10, 0, + 7, 0,128, 3, 7, 0,171, 8, 7, 0,172, 8, 7, 0,173, 8, 7, 0,174, 8, 4, 0, 19, 0, 7, 0,151, 8, 7, 0,175, 8, + 7, 0,176, 8, 7, 0, 37, 0, 16, 1, 12, 0, 16, 1, 0, 0, 16, 1, 1, 0, 15, 1,177, 8, 9, 0,223, 0, 4, 0,171, 3, + 4, 0,229, 3, 4, 0,230, 3, 4, 0,178, 8, 4, 0,179, 8, 4, 0,180, 8, 7, 0,242, 3, 7, 0, 37, 0, 51, 1, 8, 0, + 7, 0,181, 8, 7, 0,182, 8, 7, 0,183, 8, 7, 0,184, 8, 7, 0,185, 8, 7, 0,186, 8, 7, 0,187, 8, 7, 0,188, 8, + 15, 1, 15, 0, 27, 0, 31, 0, 0, 0,222, 0, 43, 0,149, 0, 9, 0,223, 0, 43, 0,189, 8, 36, 0, 80, 0, 7, 0,242, 3, + 7, 0,190, 8, 7, 0,131, 8, 7, 0,181, 8, 7, 0,182, 8, 7, 0,191, 8, 4, 0, 90, 0, 4, 0,180, 8, 9, 0,192, 8, + 69, 1, 15, 0,213, 0, 0, 0,213, 0, 1, 0, 12, 0, 6, 6, 4, 0, 7, 6, 7, 0, 8, 6, 1, 1,193, 8,214, 0, 62, 6, + 15, 1, 5, 8, 2, 0, 69, 1, 2, 0,129, 8, 2, 0, 89, 2, 2, 0, 90, 2, 2, 0, 19, 0, 2, 0,114, 6, 4, 0, 70, 0, + 70, 1, 6, 0, 70, 1, 0, 0, 70, 1, 1, 0, 32, 0, 45, 0, 9, 0,194, 8, 4, 0,247, 0, 4, 0, 37, 0, 67, 0, 4, 0, + 27, 0, 31, 0, 12, 0,195, 8, 4, 0,131, 0, 7, 0,196, 8, 71, 1, 27, 0, 71, 1, 0, 0, 71, 1, 1, 0, 26, 0,197, 8, + 71, 1, 38, 0, 12, 0,198, 8, 0, 0, 20, 0, 7, 0,199, 8, 7, 0,200, 8, 7, 0,201, 8, 7, 0,202, 8, 4, 0, 19, 0, + 7, 0,203, 8, 7, 0,204, 8, 7, 0,205, 8, 7, 0, 76, 1, 7, 0, 36, 2, 7, 0,206, 8, 7, 0,191, 2, 7, 0,207, 8, + 7, 0,208, 8, 7, 0,209, 8, 7, 0,210, 8, 7, 0,211, 8, 7, 0,172, 0, 4, 0,131, 0, 2, 0,136, 5, 2, 0,136, 1, + 72, 1, 25, 0, 27, 0, 31, 0, 39, 0, 75, 0, 12, 0,212, 8, 12, 0,213, 8, 12, 0,214, 8, 71, 1,215, 8, 9, 0,216, 8, + 9, 0,217, 8, 4, 0, 19, 0, 4, 0, 15, 6, 2, 0,247, 2, 2, 0, 72, 6, 4, 0, 37, 0, 4, 0,131, 0, 4, 0,218, 8, + 2, 0,219, 8, 2, 0,220, 8, 2, 0,221, 8, 2, 0,222, 8, 4, 0,223, 8, 4, 0,224, 8, 4, 0,225, 8, 4, 0,226, 8, + 4, 0,227, 8, 4, 0,228, 8, 73, 1, 2, 0, 7, 0,152, 2, 4, 0, 19, 0, 74, 1, 5, 0, 73, 1,229, 8, 4, 0,191, 2, + 4, 0,230, 8, 4, 0,231, 8, 4, 0, 19, 0, 75, 1, 6, 0, 4, 0, 37, 0, 4, 0, 72, 6, 4, 0,225, 8, 4, 0,226, 8, + 4, 0,227, 8, 4, 0,228, 8, 76, 1, 42, 0, 76, 1, 0, 0, 76, 1, 1, 0, 26, 0,197, 8, 12, 0,155, 3, 0, 0, 20, 0, + 2, 0, 19, 0, 2, 0,232, 8, 2, 0,233, 8, 2, 0,234, 8, 2, 0,114, 3, 2, 0,235, 8, 4, 0, 72, 2, 4, 0,225, 8, + 4, 0,226, 8, 71, 1,236, 8, 76, 1, 38, 0, 76, 1,237, 8, 12, 0,238, 8, 9, 0,239, 8, 9, 0,240, 8, 9, 0,241, 8, + 7, 0, 64, 1, 7, 0,172, 0, 7, 0,242, 8, 7, 0, 15, 2, 7, 0,105, 3, 7, 0,107, 3, 2, 0,137, 3, 2, 0, 37, 0, + 7, 0,243, 8, 7, 0,244, 8, 7, 0,110, 3, 7, 0,245, 8, 7, 0,246, 8, 7, 0,247, 8, 7, 0,248, 8, 7, 0,249, 8, + 7, 0,250, 8, 7, 0,251, 8, 7, 0,252, 8, 7, 0, 65, 2, 32, 0,253, 8,161, 0, 11, 0, 12, 0,254, 8, 2, 0, 19, 0, + 2, 0,255, 8, 7, 0,101, 2, 7, 0, 0, 9, 7, 0, 1, 9, 12, 0, 2, 9, 4, 0, 3, 9, 4, 0, 4, 9, 9, 0, 5, 9, + 9, 0, 6, 9, 77, 1, 1, 0, 4, 0, 4, 9, 78, 1, 12, 0, 4, 0, 4, 9, 7, 0,113, 8, 2, 0, 7, 9, 2, 0, 8, 9, + 7, 0, 9, 9, 7, 0, 10, 9, 2, 0, 11, 9, 2, 0, 19, 0, 7, 0, 12, 9, 7, 0, 13, 9, 7, 0, 14, 9, 7, 0, 15, 9, + 79, 1, 7, 0, 79, 1, 0, 0, 79, 1, 1, 0, 12, 0, 16, 9, 4, 0, 19, 0, 4, 0, 17, 9, 0, 0,233, 3,248, 0, 18, 9, +160, 0, 7, 0, 27, 0, 31, 0, 12, 0, 19, 9, 12, 0,254, 8, 12, 0, 20, 9, 12, 0,100, 0, 4, 0, 19, 0, 4, 0, 21, 9, +218, 0, 4, 0, 27, 0,177, 8, 12, 0,254, 8, 4, 0, 22, 9, 4, 0, 19, 0, 80, 1, 17, 0,213, 0, 0, 0,213, 0, 1, 0, + 12, 0, 6, 6, 4, 0, 7, 6, 7, 0, 8, 6, 2, 0, 9, 6,214, 0, 62, 6,160, 0, 90, 3,218, 0, 23, 9, 0, 0, 69, 1, + 0, 0, 65, 6, 2, 0, 19, 0, 2, 0, 24, 9, 2, 0,115, 6, 2, 0,114, 6, 2, 0, 25, 9, 7, 0, 26, 9, 81, 1, 8, 0, + 81, 1, 0, 0, 81, 1, 1, 0, 79, 1, 27, 9, 36, 0, 80, 0, 12, 0, 94, 3, 4, 0, 19, 0, 0, 0, 20, 0, 4, 0, 28, 9, + 82, 1, 5, 0, 82, 1, 0, 0, 82, 1, 1, 0, 36, 0, 80, 0, 2, 0, 19, 0, 0, 0, 29, 9, 83, 1, 14, 0, 83, 1, 0, 0, + 83, 1, 1, 0, 9, 0, 2, 0, 2, 0, 17, 0, 2, 0, 19, 0, 0, 0, 30, 9, 0, 0, 31, 9, 0, 0, 29, 9, 7, 0, 32, 9, + 7, 0, 33, 9, 4, 0, 37, 0, 36, 0, 80, 0, 7, 0, 34, 9, 7, 0, 35, 9, 84, 1, 9, 0, 84, 1, 0, 0, 84, 1, 1, 0, + 32, 0, 36, 9, 0, 0,250, 2, 7, 0, 37, 9, 2, 0, 38, 9, 2, 0, 19, 0, 2, 0, 17, 0, 2, 0, 39, 9, 85, 1, 7, 0, + 42, 0,121, 6, 26, 0,197, 8, 4, 0, 19, 0, 4, 0, 40, 9, 12, 0, 41, 9, 32, 0, 36, 9, 0, 0,250, 2, 86, 1, 15, 0, + 32, 0, 36, 9, 2, 0, 42, 9, 2, 0, 19, 0, 2, 0, 43, 9, 2, 0, 44, 9, 0, 0,250, 2, 32, 0, 45, 9, 0, 0, 46, 9, + 7, 0, 47, 9, 7, 0, 36, 2, 7, 0, 48, 9, 7, 0, 49, 9, 2, 0, 17, 0, 2, 0, 69, 1, 7, 0, 76, 1, 87, 1, 6, 0, + 32, 0, 36, 9, 7, 0,229, 8, 2, 0, 50, 9, 2, 0, 51, 9, 2, 0, 19, 0, 2, 0, 52, 9, 88, 1, 6, 0, 32, 0, 36, 9, + 4, 0, 53, 9, 4, 0, 54, 9, 4, 0, 90, 0, 4, 0, 37, 0, 0, 0,250, 2, 89, 1, 4, 0, 32, 0, 36, 9, 4, 0, 19, 0, + 4, 0, 53, 9, 0, 0,250, 2, 90, 1, 4, 0, 32, 0, 36, 9, 4, 0, 19, 0, 4, 0, 53, 9, 0, 0,250, 2, 91, 1, 10, 0, + 32, 0, 36, 9, 4, 0, 55, 9, 7, 0,125, 0, 4, 0, 19, 0, 2, 0,117, 6, 2, 0, 56, 9, 2, 0, 43, 0, 2, 0, 70, 0, + 7, 0, 57, 9, 0, 0,250, 2, 92, 1, 4, 0, 32, 0, 36, 9, 4, 0, 19, 0, 4, 0, 53, 9, 0, 0,250, 2, 93, 1, 10, 0, + 32, 0, 36, 9, 2, 0, 17, 0, 2, 0, 36, 4, 4, 0, 88, 0, 4, 0, 89, 0, 7, 0,148, 8, 7, 0,149, 8, 4, 0, 37, 0, +160, 0,122, 8, 0, 0,250, 2, 94, 1, 4, 0, 32, 0, 36, 9, 4, 0,115, 3, 4, 0, 58, 9, 0, 0,250, 2, 95, 1, 4, 0, + 32, 0, 36, 9, 4, 0,115, 3, 4, 0, 37, 0, 0, 0,250, 2, 96, 1, 5, 0, 32, 0, 36, 9, 7, 0,125, 0, 4, 0, 59, 9, + 4, 0,115, 3, 4, 0,116, 3, 97, 1, 6, 0, 32, 0, 36, 9, 4, 0, 60, 9, 4, 0, 61, 9, 7, 0, 62, 9, 7, 0, 63, 9, + 0, 0,250, 2, 98, 1, 16, 0, 32, 0, 36, 9, 32, 0,237, 8, 4, 0, 17, 0, 7, 0, 64, 9, 7, 0, 65, 9, 7, 0, 66, 9, + 7, 0, 67, 9, 7, 0, 68, 9, 7, 0, 69, 9, 7, 0, 70, 9, 7, 0, 71, 9, 7, 0, 72, 9, 2, 0, 19, 0, 2, 0, 37, 0, + 2, 0, 43, 0, 2, 0, 70, 0, 99, 1, 3, 0, 32, 0, 36, 9, 4, 0, 19, 0, 4, 0, 28, 2,100, 1, 5, 0, 32, 0, 36, 9, + 4, 0, 19, 0, 4, 0, 37, 0, 7, 0, 73, 9, 0, 0,250, 2,101, 1, 10, 0, 32, 0, 36, 9, 0, 0,250, 2, 2, 0, 74, 9, + 2, 0, 75, 9, 0, 0, 76, 9, 0, 0, 77, 9, 7, 0, 78, 9, 7, 0, 79, 9, 7, 0, 80, 9, 7, 0, 81, 9,102, 1, 8, 0, + 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 7, 0, 82, 9, 7, 0, 83, 9, 2, 0, 19, 0, 2, 0, 28, 2, +103, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 7, 0, 82, 9, 7, 0, 83, 9, 2, 0, 19, 0, + 2, 0, 28, 2,104, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 7, 0, 82, 9, 7, 0, 83, 9, + 2, 0, 19, 0, 2, 0, 28, 2,105, 1, 7, 0, 32, 0, 36, 9, 0, 0,250, 2, 7, 0, 76, 1, 7, 0, 85, 1, 2, 0, 19, 0, + 2, 0, 69, 1, 4, 0, 37, 0,106, 1, 5, 0, 32, 0, 50, 3, 7, 0, 76, 1, 2, 0, 54, 3, 0, 0, 56, 3, 0, 0, 84, 9, +107, 1, 10, 0,107, 1, 0, 0,107, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 0, 0, 85, 9, 7, 0, 20, 1, 7, 0, 21, 1, + 2, 0, 16, 9, 2, 0, 86, 9, 32, 0, 45, 0,108, 1, 22, 0,108, 1, 0, 0,108, 1, 1, 0, 2, 0, 19, 0, 2, 0, 69, 1, + 2, 0, 87, 9, 2, 0, 88, 9, 36, 0, 80, 0,160, 0,122, 8, 32, 0,164, 0, 7, 0, 88, 0, 7, 0, 89, 0, 7, 0, 89, 9, + 7, 0, 90, 9, 7, 0, 91, 9, 7, 0, 92, 9, 7, 0,236, 2, 7, 0, 93, 9, 7, 0,124, 8, 7, 0, 94, 9, 0, 0, 95, 9, + 0, 0, 96, 9, 12, 0, 96, 3,109, 1, 8, 0, 7, 0, 43, 2, 7, 0,148, 8, 7, 0,149, 8, 9, 0, 2, 0, 2, 0, 97, 9, + 2, 0, 98, 9, 2, 0, 99, 9, 2, 0,100, 9,110, 1, 18, 0,110, 1, 0, 0,110, 1, 1, 0,110, 1,101, 9, 0, 0, 20, 0, +109, 1,102, 9, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,103, 9, 2, 0,104, 9, 2, 0,105, 9, 2, 0,106, 9, 4, 0, 43, 0, + 7, 0,107, 9, 7, 0,108, 9, 4, 0,109, 9, 4, 0,110, 9,110, 1,111, 9,111, 1,112, 9,112, 1, 33, 0,112, 1, 0, 0, +112, 1, 1, 0,112, 1,113, 9, 0, 0, 20, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,229, 7, 2, 0, 7, 8, 2, 0,114, 9, + 2, 0,133, 0, 2, 0,104, 9, 2, 0,219, 7, 12, 0,117, 8, 12, 0,115, 9, 27, 0,151, 6, 9, 0,116, 9, 7, 0,107, 9, + 7, 0,108, 9, 7, 0, 74, 2, 7, 0,117, 9, 2, 0,118, 9, 2, 0,119, 9, 7, 0,120, 9, 7, 0,121, 9, 2, 0,122, 9, + 2, 0,123, 9, 9, 0,124, 9, 24, 0,125, 9, 24, 0,126, 9, 24, 0,127, 9,113, 1,150, 0,114, 1,128, 9,115, 1,129, 9, +111, 1, 8, 0,111, 1, 0, 0,111, 1, 1, 0,112, 1,130, 9,112, 1,131, 9,110, 1,132, 9,110, 1,111, 9, 4, 0, 19, 0, + 4, 0, 37, 0, 60, 0, 23, 0, 27, 0, 31, 0, 39, 0, 75, 0,162, 0, 93, 3, 12, 0,133, 9, 12, 0,134, 9,109, 1,135, 9, + 12, 0,136, 9, 4, 0, 17, 0, 4, 0,137, 9, 4, 0,138, 9, 4, 0,139, 9, 4, 0, 19, 0, 4, 0, 37, 0, 12, 0,140, 9, +115, 1,141, 9,110, 1,142, 9,110, 1,143, 9, 9, 0,144, 9, 9, 0,145, 9, 4, 0,146, 9, 9, 0,147, 9, 9, 0,148, 9, + 9, 0,149, 9,116, 1, 6, 0, 4, 0,124, 0, 4, 0,126, 0, 4, 0,219, 7, 0, 0,150, 9, 0, 0,151, 9, 2, 0, 37, 0, +117, 1, 16, 0, 2, 0,173, 7, 2, 0,174, 7, 2, 0,152, 9, 2, 0,172, 8, 2, 0,153, 9, 2, 0, 68, 0, 7, 0,235, 2, + 7, 0,154, 9, 7, 0,155, 9, 2, 0, 91, 1, 0, 0,156, 9, 0, 0,157, 9, 2, 0,158, 9, 2, 0, 37, 0, 4, 0,159, 9, + 4, 0,160, 9,118, 1, 9, 0, 7, 0,161, 9, 7, 0,162, 9, 7, 0,191, 8, 7, 0,109, 0, 7, 0,163, 9, 7, 0, 78, 6, + 2, 0,164, 9, 0, 0,165, 9, 0, 0, 37, 0,119, 1, 4, 0, 7, 0,166, 9, 7, 0,167, 9, 2, 0,164, 9, 2, 0, 37, 0, +120, 1, 3, 0, 7, 0,168, 9, 7, 0,169, 9, 7, 0, 15, 0,121, 1, 7, 0, 0, 0, 5, 2, 2, 0,249, 4, 2, 0,250, 4, + 2, 0,251, 4, 2, 0,189, 4, 4, 0,126, 0, 4, 0, 34, 4,122, 1, 7, 0, 7, 0,170, 9, 7, 0,171, 9, 7, 0,172, 9, + 7, 0, 85, 2, 7, 0,173, 9, 7, 0,174, 9, 7, 0,175, 9,123, 1, 4, 0, 2, 0,176, 9, 2, 0,177, 9, 2, 0,178, 9, + 2, 0,179, 9,124, 1, 2, 0, 7, 0, 5, 0, 7, 0, 6, 0,125, 1, 2, 0, 0, 0,166, 0, 0, 0,180, 9,126, 1, 1, 0, + 0, 0, 20, 0,127, 1, 10, 0, 0, 0,181, 9, 0, 0,182, 9, 0, 0, 71, 6, 0, 0,183, 9, 2, 0,152, 9, 2, 0,184, 9, + 7, 0,185, 9, 7, 0,186, 9, 7, 0,187, 9, 7, 0, 93, 9,128, 1, 2, 0, 9, 0,188, 9, 9, 0,189, 9,129, 1, 11, 0, + 0, 0,251, 4, 0, 0, 17, 0, 0, 0,164, 9, 0, 0,109, 0, 0, 0,190, 9, 0, 0,106, 0, 0, 0, 70, 2, 7, 0,191, 9, + 7, 0,192, 9, 7, 0,193, 9, 7, 0,194, 9,130, 1, 8, 0, 7, 0, 82, 8, 7, 0,125, 0, 7, 0,157, 9, 7, 0,157, 2, + 7, 0,195, 9, 7, 0,236, 0, 7, 0,196, 9, 4, 0, 17, 0,131, 1, 4, 0, 2, 0,197, 9, 2, 0,198, 9, 2, 0,199, 9, + 2, 0, 37, 0,132, 1, 1, 0, 0, 0, 20, 0,133, 1, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 2, 0, 19, 0, 2, 0,200, 9, +134, 1, 10, 0, 2, 0,222, 3, 2, 0, 19, 0, 7, 0,120, 4, 7, 0,201, 9, 7, 0,202, 9, 7, 0,203, 9, 7, 0,204, 9, +133, 1,205, 9,133, 1,206, 9,133, 1,207, 9, 63, 0, 9, 0, 4, 0, 19, 0, 4, 0, 64, 0, 24, 0,208, 9, 24, 0,209, 9, +134, 1,210, 9, 7, 0,211, 9, 7, 0,212, 9, 7, 0,213, 9, 7, 0,214, 9,135, 1, 4, 0, 47, 0,229, 2, 7, 0,215, 9, + 7, 0,170, 1, 7, 0, 37, 0,191, 0, 17, 0, 27, 0, 31, 0,135, 1,216, 9, 63, 0,205, 9, 51, 0,134, 1, 2, 0, 19, 0, + 2, 0,230, 5, 4, 0,106, 0, 7, 0,217, 9, 7, 0, 82, 2, 4, 0,218, 9, 7, 0,219, 9, 7, 0,220, 9, 7, 0,221, 9, + 7, 0,170, 1, 2, 0,104, 1, 0, 0,222, 9, 0, 0,210, 6,136, 1, 10, 0, 4, 0, 17, 0, 4, 0,125, 0, 4, 0, 19, 0, + 4, 0,177, 3, 4, 0,223, 9, 4, 0,224, 9, 4, 0,225, 9, 0, 0, 92, 0, 0, 0, 20, 0, 9, 0, 2, 0, 91, 0, 6, 0, +136, 1,226, 9, 4, 0,227, 9, 4, 0,228, 9, 4, 0,229, 9, 4, 0, 37, 0, 9, 0,230, 9,137, 1, 5, 0, 7, 0,152, 2, + 7, 0,219, 2, 7, 0, 36, 2, 2, 0,128, 2, 2, 0, 37, 0,138, 1, 5, 0, 7, 0,152, 2, 7, 0,231, 9, 7, 0,232, 9, + 7, 0,233, 9, 7, 0,219, 2,139, 1, 5, 0, 32, 0,234, 9,140, 1, 22, 0, 7, 0,203, 5, 7, 0,235, 9, 7, 0, 57, 0, +141, 1, 7, 0, 4, 0,236, 9, 4, 0,237, 9, 4, 0,238, 9, 7, 0,239, 9, 7, 0,240, 9, 7, 0,241, 9, 7, 0, 57, 0, +142, 1, 8, 0,142, 1, 0, 0,142, 1, 1, 0, 32, 0, 45, 0, 4, 0,255, 0, 2, 0, 19, 0, 2, 0, 69, 1, 7, 0,219, 2, + 7, 0, 90, 8,143, 1, 6, 0,143, 1, 0, 0,143, 1, 1, 0, 32, 0, 45, 0, 2, 0,204, 2, 2, 0, 19, 0, 2, 0,242, 9, +144, 1, 18, 0,138, 1,171, 3,138, 1,243, 9,137, 1,244, 9,138, 1, 74, 8,139, 1,245, 9, 4, 0, 82, 0, 7, 0,219, 2, + 7, 0,246, 2, 7, 0,246, 9, 4, 0,236, 9, 4, 0,247, 9, 7, 0,240, 9, 7, 0,241, 9, 7, 0,106, 0, 2, 0, 19, 0, + 2, 0,248, 9, 2, 0,249, 9, 2, 0,250, 9,145, 1,110, 0, 27, 0, 31, 0, 39, 0, 75, 0,146, 1,251, 9,169, 0, 56, 4, + 4, 0, 19, 0, 2, 0, 17, 0, 2, 0, 74, 9, 2, 0,252, 9, 2, 0,253, 9, 2, 0,137, 3, 2, 0,254, 9, 2, 0,255, 9, + 2, 0, 0, 10, 2, 0, 1, 10, 2, 0, 2, 10, 2, 0, 3, 10, 2, 0, 4, 10, 2, 0,238, 4, 2, 0,115, 5, 2, 0, 5, 10, + 2, 0, 6, 10, 2, 0, 7, 10, 2, 0, 8, 10, 2, 0, 9, 10, 2, 0, 25, 2, 2, 0, 67, 8, 2, 0, 42, 8, 2, 0, 10, 10, + 2, 0, 11, 10, 2, 0,187, 3, 2, 0,188, 3, 2, 0, 12, 10, 2, 0, 13, 10, 2, 0, 14, 10, 2, 0, 15, 10, 7, 0, 16, 10, + 7, 0, 17, 10, 7, 0, 18, 10, 2, 0, 19, 10, 2, 0, 20, 10, 7, 0, 21, 10, 7, 0, 22, 10, 7, 0, 23, 10, 7, 0, 49, 8, + 7, 0, 89, 0, 7, 0,246, 2, 7, 0, 55, 8, 7, 0, 24, 10, 7, 0, 25, 10, 7, 0, 26, 10, 4, 0, 50, 8, 4, 0, 48, 8, + 4, 0, 27, 10, 7, 0, 51, 8, 7, 0, 52, 8, 7, 0, 53, 8, 7, 0, 28, 10, 7, 0, 29, 10, 7, 0, 30, 10, 7, 0, 31, 10, + 7, 0, 32, 10, 7, 0, 57, 0, 7, 0, 33, 10, 7, 0, 34, 10, 7, 0, 35, 10, 7, 0, 36, 10, 7, 0,128, 3, 7, 0,106, 0, + 7, 0, 37, 10, 7, 0, 38, 10, 7, 0, 39, 10, 7, 0, 40, 10, 7, 0, 41, 10, 7, 0, 42, 10, 7, 0, 43, 10, 4, 0, 44, 10, + 4, 0, 45, 10, 7, 0, 46, 10, 7, 0, 47, 10, 7, 0, 48, 10, 7, 0, 49, 10, 7, 0, 50, 10, 7, 0,210, 0, 7, 0, 51, 10, + 7, 0,213, 3, 7, 0,211, 3, 7, 0,212, 3, 7, 0, 52, 10, 7, 0, 53, 10, 7, 0, 54, 10, 7, 0, 55, 10, 7, 0, 56, 10, + 7, 0, 57, 10, 7, 0, 58, 10, 7, 0, 59, 10, 7, 0, 60, 10, 7, 0, 61, 10, 7, 0, 62, 10, 7, 0, 63, 10, 7, 0, 64, 10, + 4, 0, 65, 10, 4, 0, 66, 10, 67, 0,160, 3, 12, 0, 67, 10, 67, 0, 68, 10, 32, 0, 69, 10, 32, 0, 70, 10, 36, 0, 80, 0, +164, 0, 61, 1,164, 0, 71, 10,148, 0, 44, 0,148, 0, 0, 0,148, 0, 1, 0,145, 1, 72, 10,144, 1, 73, 10,141, 1,237, 8, +171, 0,238, 3, 9, 0,239, 3,147, 1, 74, 10,147, 1, 75, 10, 12, 0, 76, 10, 12, 0, 77, 10,133, 0, 78, 10,141, 0, 79, 10, +141, 0, 80, 10, 32, 0, 81, 10, 32, 0, 82, 10, 32, 0, 38, 0, 12, 0, 41, 9, 0, 0, 20, 0, 7, 0,240, 0, 7, 0, 17, 3, + 7, 0, 83, 10, 4, 0,193, 2, 4, 0, 57, 0, 4, 0, 19, 0, 4, 0, 50, 8, 4, 0, 84, 10, 4, 0, 85, 10, 4, 0, 86, 10, + 2, 0,247, 0, 2, 0, 87, 10, 2, 0, 88, 10, 2, 0, 89, 10, 0, 0, 90, 10, 2, 0, 91, 10, 2, 0, 92, 10, 2, 0, 93, 10, + 9, 0, 94, 10,137, 0, 55, 4, 12, 0, 4, 3, 12, 0, 95, 10,148, 1, 96, 10,149, 1, 97, 10, 7, 0, 98, 10,135, 0, 35, 0, +150, 1,192, 8, 7, 0, 25, 4, 7, 0, 99, 10, 7, 0,100, 10, 7, 0,123, 4, 7, 0,101, 10, 7, 0,138, 3, 7, 0,128, 3, + 7, 0,102, 10, 7, 0, 84, 2, 7, 0,103, 10, 7, 0,104, 10, 7, 0,105, 10, 7, 0,106, 10, 7, 0,107, 10, 7, 0,108, 10, + 7, 0, 26, 4, 7, 0,109, 10, 7, 0,110, 10, 7, 0,111, 10, 7, 0, 27, 4, 7, 0, 23, 4, 7, 0, 24, 4, 7, 0,112, 10, + 4, 0,113, 10, 4, 0, 90, 0, 4, 0,114, 10, 4, 0,115, 10, 2, 0,116, 10, 2, 0,117, 10, 2, 0,118, 10, 2, 0,119, 10, + 2, 0,120, 10, 2, 0,121, 10,169, 0, 56, 4,136, 0, 8, 0,150, 1,122, 10, 7, 0,123, 10, 7, 0,124, 10, 7, 0,242, 1, + 7, 0,125, 10, 4, 0, 90, 0, 2, 0,126, 10, 2, 0,127, 10,151, 1, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, + 7, 0,128, 10,152, 1, 6, 0,152, 1, 0, 0,152, 1, 1, 0,151, 1,229, 8, 4, 0,253, 0, 2, 0,129, 10, 2, 0, 19, 0, +153, 1, 5, 0,153, 1, 0, 0,153, 1, 1, 0, 12, 0,130, 10, 4, 0,131, 10, 4, 0, 19, 0,154, 1, 9, 0,154, 1, 0, 0, +154, 1, 1, 0, 12, 0,124, 0,153, 1,132, 10, 4, 0, 19, 0, 2, 0,129, 10, 2, 0,133, 10, 7, 0, 91, 0, 0, 0,134, 10, +162, 0, 6, 0, 27, 0, 31, 0, 12, 0, 11, 5, 4, 0, 19, 0, 2, 0,135, 10, 2, 0,136, 10, 9, 0,137, 10,155, 1, 7, 0, +155, 1, 0, 0,155, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 23, 0, 0, 0,138, 10, 0, 0,139, 10,156, 1, 5, 0, + 12, 0,140, 10, 4, 0,141, 10, 4, 0,142, 10, 4, 0, 19, 0, 4, 0, 37, 0,157, 1, 18, 0, 27, 0, 31, 0,158, 1,143, 10, +158, 1,144, 10, 12, 0,145, 10, 4, 0,146, 10, 2, 0,147, 10, 2, 0, 37, 0, 12, 0,148, 10, 12, 0,149, 10,156, 1,150, 10, + 12, 0,151, 10, 12, 0,152, 10, 12, 0,153, 10,159, 1,154, 10, 4, 0,155, 10, 4, 0, 70, 0, 12, 0,156, 10,211, 0,157, 10, +158, 1, 33, 0,158, 1, 0, 0,158, 1, 1, 0, 9, 0,158, 10, 4, 0,152, 7, 2, 0,159, 10, 2, 0, 37, 0,216, 0, 61, 6, +216, 0,160, 10, 0, 0,161, 10, 2, 0,162, 10, 2, 0,163, 10, 2, 0,173, 7, 2, 0,174, 7, 2, 0,164, 10, 2, 0,165, 10, + 2, 0,177, 3, 2, 0,177, 6, 2, 0,166, 10, 2, 0,167, 10, 2, 0,168, 10, 2, 0,169, 10, 8, 0,170, 10,160, 1,171, 10, +161, 1,172, 10,162, 1,173, 10, 4, 0,174, 10, 4, 0,175, 10, 9, 0,176, 10, 12, 0,149, 10, 12, 0,193, 7, 12, 0,177, 10, + 12, 0,178, 10, 12, 0,179, 10,163, 1, 16, 0,163, 1, 0, 0,163, 1, 1, 0, 0, 0,180, 10, 26, 0, 30, 0, 2, 0,181, 10, + 2, 0, 17, 0, 2, 0, 15, 0, 2, 0,182, 10, 2, 0,183, 10, 2, 0,184, 10, 2, 0,185, 10, 2, 0,186, 10, 2, 0, 19, 0, + 2, 0,187, 10, 2, 0, 70, 2,164, 1,188, 10,165, 1, 10, 0,165, 1, 0, 0,165, 1, 1, 0, 12, 0,189, 10, 0, 0,180, 10, + 2, 0,190, 10, 2, 0,191, 10, 2, 0, 19, 0, 2, 0, 37, 0, 4, 0,192, 10, 9, 0,193, 10,159, 1, 7, 0,159, 1, 0, 0, +159, 1, 1, 0, 0, 0,180, 10, 0, 0,194, 10, 12, 0,110, 7, 4, 0,195, 10, 4, 0, 19, 0,224, 0, 12, 0,224, 0, 0, 0, +224, 0, 1, 0, 0, 0,180, 10, 26, 0, 30, 0,166, 1,167, 7, 9, 0,196, 10,164, 1,188, 10,156, 1,197, 10, 12, 0,198, 10, +224, 0,199, 10, 2, 0, 19, 0, 2, 0,136, 1,160, 1, 23, 0,160, 1, 0, 0,160, 1, 1, 0, 2, 0, 17, 0, 2, 0, 15, 0, + 2, 0, 5, 0, 2, 0, 6, 0, 2, 0,200, 10, 2, 0,201, 10, 2, 0,202, 10, 2, 0,203, 10, 0, 0,204, 10, 0, 0, 37, 0, + 2, 0,182, 10, 2, 0,183, 10, 2, 0,184, 10, 2, 0,185, 10, 2, 0,186, 10, 2, 0, 43, 0, 0, 0,205, 10, 2, 0,206, 10, + 2, 0,207, 10, 4, 0, 70, 0, 9, 0,196, 10,167, 1, 8, 0,167, 1, 0, 0,167, 1, 1, 0, 9, 0, 2, 0, 9, 0,208, 10, + 0, 0,233, 3, 2, 0, 17, 0, 2, 0, 19, 0, 7, 0,209, 10,168, 1, 5, 0, 7, 0,210, 10, 4, 0,211, 10, 4, 0,212, 10, + 4, 0, 69, 1, 4, 0, 19, 0,169, 1, 6, 0, 7, 0,213, 10, 7, 0,214, 10, 7, 0,215, 10, 7, 0,216, 10, 4, 0, 17, 0, + 4, 0, 19, 0,170, 1, 5, 0, 7, 0,148, 8, 7, 0,149, 8, 7, 0,219, 2, 2, 0, 39, 2, 2, 0, 40, 2,171, 1, 5, 0, +170, 1, 2, 0, 4, 0, 54, 0, 7, 0,217, 10, 7, 0,148, 8, 7, 0,149, 8,172, 1, 4, 0, 2, 0,218, 10, 2, 0,219, 10, + 2, 0,220, 10, 2, 0,221, 10,173, 1, 2, 0, 42, 0,148, 6, 26, 0,197, 8,174, 1, 3, 0, 24, 0,222, 10, 4, 0, 19, 0, + 4, 0, 37, 0,175, 1, 6, 0, 7, 0,106, 0, 7, 0,221, 2, 7, 0,223, 10, 7, 0, 37, 0, 2, 0,246, 0, 2, 0,224, 10, +176, 1, 5, 0, 7, 0,221, 2, 7, 0, 89, 8, 2, 0,224, 10, 2, 0,136, 1, 15, 1, 5, 8,177, 1, 9, 0,177, 1, 0, 0, +177, 1, 1, 0, 27, 0,151, 6, 0, 0,225, 10, 4, 0,226, 10, 4, 0,227, 10, 4, 0, 90, 0, 4, 0, 37, 0, 0, 0,233, 3, +178, 1, 7, 0, 12, 0, 41, 9, 0, 0,228, 10, 9, 0,229, 10, 7, 0, 61, 0, 7, 0,209, 10, 4, 0, 17, 0, 4, 0, 19, 0, +179, 1, 3, 0, 7, 0,230, 10, 4, 0, 19, 0, 4, 0, 37, 0,180, 1, 15, 0,180, 1, 0, 0,180, 1, 1, 0, 79, 1, 27, 9, +178, 1, 62, 0, 12, 0, 96, 3, 35, 0, 50, 0,179, 1,231, 10, 4, 0, 54, 0, 7, 0, 61, 0, 2, 0, 19, 0, 2, 0, 15, 1, + 4, 0,226, 10, 0, 0,225, 10, 4, 0,232, 10, 7, 0,233, 10,181, 1, 2, 0, 0, 0,234, 10, 0, 0,235, 10,182, 1, 4, 0, +182, 1, 0, 0,182, 1, 1, 0,160, 0, 50, 3, 12, 0,236, 10,183, 1, 24, 0,183, 1, 0, 0,183, 1, 1, 0, 12, 0,237, 10, +160, 0,122, 8,182, 1,238, 10, 12, 0,239, 10, 12, 0, 96, 3, 0, 0,233, 3, 7, 0,209, 10, 7, 0,240, 10, 7, 0, 88, 0, + 7, 0, 89, 0, 7, 0, 89, 9, 7, 0, 90, 9, 7, 0,236, 2, 7, 0, 93, 9, 7, 0,124, 8, 7, 0, 94, 9, 2, 0,241, 10, + 2, 0,242, 10, 2, 0, 43, 0, 2, 0, 17, 0, 4, 0, 19, 0, 4, 0, 70, 0,184, 1, 6, 0,184, 1, 0, 0,184, 1, 1, 0, + 12, 0,237, 10, 4, 0, 19, 0, 4, 0,156, 2, 0, 0,233, 3,185, 1, 10, 0,185, 1, 0, 0,185, 1, 1, 0, 27, 0,151, 6, + 0, 0,243, 10, 4, 0,227, 10, 4, 0,244, 10, 0, 0,225, 10, 4, 0,226, 10, 2, 0, 19, 0, 2, 0,245, 10,186, 1, 7, 0, +186, 1, 0, 0,186, 1, 1, 0, 12, 0,246, 10, 0, 0,233, 3, 2, 0, 19, 0, 2, 0,247, 10, 4, 0,248, 10,187, 1, 5, 0, +187, 1, 0, 0,187, 1, 1, 0, 0, 0,225, 10, 4, 0,226, 10, 7, 0,209, 2, 39, 0, 12, 0,160, 0, 90, 3,160, 0,249, 10, +182, 1,238, 10, 12, 0,250, 10,183, 1,251, 10, 12, 0,252, 10, 12, 0,253, 10, 4, 0, 19, 0, 4, 0,247, 0, 2, 0,254, 10, + 2, 0,255, 10, 7, 0, 0, 11,188, 1, 2, 0, 27, 0, 31, 0, 39, 0, 75, 0,189, 1, 5, 0,189, 1, 0, 0,189, 1, 1, 0, + 4, 0, 17, 0, 4, 0, 19, 0, 0, 0, 20, 0,190, 1, 6, 0,189, 1, 1, 11, 32, 0, 45, 0, 4, 0, 2, 11, 7, 0, 3, 11, + 4, 0, 4, 11, 4, 0, 16, 9,191, 1, 3, 0,189, 1, 1, 11, 4, 0, 2, 11, 7, 0, 5, 11,192, 1, 8, 0,189, 1, 1, 11, + 32, 0, 45, 0, 7, 0, 64, 1, 7, 0, 6, 11, 7, 0, 17, 3, 7, 0,191, 8, 4, 0, 2, 11, 4, 0, 7, 11,193, 1, 5, 0, +189, 1, 1, 11, 7, 0, 8, 11, 7, 0, 7, 8, 7, 0,242, 2, 7, 0, 57, 0,194, 1, 3, 0,189, 1, 1, 11, 7, 0,191, 8, + 7, 0, 9, 11,140, 1, 4, 0, 7, 0, 10, 11, 7, 0, 39, 10, 2, 0, 11, 11, 2, 0, 69, 1,195, 1, 14, 0,195, 1, 0, 0, +195, 1, 1, 0, 12, 0, 12, 11, 12, 0, 13, 11, 12, 0, 14, 11, 0, 0, 20, 0, 4, 0, 31, 0, 4, 0, 19, 0, 4, 0, 15, 11, + 7, 0, 16, 11, 4, 0, 4, 11, 4, 0, 16, 9, 7, 0,242, 3, 7, 0,244, 2,146, 1, 23, 0, 4, 0, 2, 11, 4, 0, 17, 11, + 7, 0, 18, 11, 7, 0, 57, 0, 7, 0, 19, 11, 7, 0,240, 2, 7, 0, 10, 11, 7, 0, 20, 11, 7, 0,221, 2, 7, 0, 21, 11, + 7, 0,120, 4, 7, 0, 22, 11, 7, 0, 23, 11, 7, 0, 24, 11, 7, 0, 25, 11, 7, 0, 26, 11, 7, 0, 27, 11, 7, 0, 28, 11, + 7, 0, 29, 11, 7, 0, 30, 11, 7, 0, 31, 11, 7, 0, 32, 11, 12, 0, 33, 11,121, 0, 34, 0,120, 0, 34, 11,196, 1, 35, 11, + 67, 0, 36, 11, 67, 0, 68, 10, 67, 0, 37, 11,197, 1, 38, 11, 48, 0,165, 0, 48, 0, 39, 11, 48, 0, 40, 11, 7, 0, 41, 11, + 7, 0, 42, 11, 7, 0, 43, 11, 7, 0, 44, 11, 7, 0, 45, 11, 7, 0, 28, 9, 7, 0, 46, 11, 7, 0,170, 1, 7, 0, 47, 11, + 4, 0, 48, 11, 4, 0, 49, 11, 4, 0, 50, 11, 4, 0, 90, 0, 4, 0, 37, 0, 4, 0, 51, 11, 2, 0, 52, 11, 2, 0, 53, 11, + 4, 0, 54, 11, 7, 0,221, 2, 4, 0, 55, 11, 7, 0, 56, 11, 4, 0, 57, 11,137, 0, 58, 11, 12, 0, 59, 11,169, 0, 56, 4, +122, 0, 11, 0,120, 0, 34, 11,148, 0, 34, 3, 7, 0,137, 1, 7, 0, 28, 9, 7, 0, 60, 11, 7, 0, 61, 11, 2, 0, 62, 11, + 2, 0, 63, 11, 2, 0, 64, 11, 2, 0, 17, 0, 4, 0, 37, 0,123, 0, 13, 0,120, 0, 34, 11,139, 0, 14, 3,141, 0, 16, 3, + 7, 0,229, 8, 7, 0, 65, 11, 7, 0, 66, 11, 7, 0, 66, 1, 7, 0, 67, 11, 4, 0, 50, 9, 4, 0, 12, 3, 2, 0, 17, 0, 2, 0, 37, 0, 4, 0, 70, 0, 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/datafiles/blenderbuttons.c b/source/blender/editors/datafiles/blenderbuttons.c index 702641f4f99..b1b7bbbd2ec 100644 --- a/source/blender/editors/datafiles/blenderbuttons.c +++ b/source/blender/editors/datafiles/blenderbuttons.c @@ -1,6551 +1,6549 @@ /* DataToC output of file */ -int datatoc_blenderbuttons_size= 209415; +int datatoc_blenderbuttons_size= 209368; char datatoc_blenderbuttons[]= { -137, 80, 78, 71, 13, 10, 26, - 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 2, 90, 0, 0, 2,128, 8, 6, 0, 0, 0, 68,254,214,163, 0, 0, 10, 79,105, 67, - 67, 80, 80,104,111,116,111,115,104,111,112, 32, 73, 67, 67, 32,112,114,111,102,105,108,101, 0, 0,120,218,157, 83,103, 84, 83, -233, 22, 61,247,222,244, 66, 75,136,128,148, 75,111, 82, 21, 8, 32, 82, 66,139,128, 20,145, 38, 42, 33, 9, 16, 74,136, 33,161, -217, 21, 81,193, 17, 69, 69, 4, 27,200,160,136, 3,142,142,128,140, 21, 81, 44, 12,138, 10,216, 7,228, 33,162,142,131,163,136, -138,202,251,225,123,163,107,214,188,247,230,205,254,181,215, 62,231,172,243,157,179,207, 7,192, 8, 12,150, 72, 51, 81, 53,128, - 12,169, 66, 30, 17,224,131,199,196,198,225,228, 46, 64,129, 10, 36,112, 0, 16, 8,179,100, 33,115,253, 35, 1, 0,248,126, 60, - 60, 43, 34,192, 7,190, 0, 1,120,211, 11, 8, 0,192, 77,155,192, 48, 28,135,255, 15,234, 66,153, 92, 1,128,132, 1,192,116, -145, 56, 75, 8,128, 20, 0, 64,122,142, 66,166, 0, 64, 70, 1,128,157,152, 38, 83, 0,160, 4, 0, 96,203, 99, 98,227, 0, 80, - 45, 0, 96, 39,127,230,211, 0,128,157,248,153,123, 1, 0, 91,148, 33, 21, 1,160,145, 0, 32, 19,101,136, 68, 0,104, 59, 0, -172,207, 86,138, 69, 0, 88, 48, 0, 20,102, 75,196, 57, 0,216, 45, 0, 48, 73, 87,102, 72, 0,176,183, 0,192,206, 16, 11,178, - 0, 8, 12, 0, 48, 81,136,133, 41, 0, 4,123, 0, 96,200, 35, 35,120, 0,132,153, 0, 20, 70,242, 87, 60,241, 43,174, 16,231, - 42, 0, 0,120,153,178, 60,185, 36, 57, 69,129, 91, 8, 45,113, 7, 87, 87, 46, 30, 40,206, 73, 23, 43, 20, 54, 97, 2, 97,154, - 64, 46,194,121,153, 25, 50,129, 52, 15,224,243,204, 0, 0,160,145, 21, 17,224,131,243,253,120,206, 14,174,206,206, 54,142,182, - 14, 95, 45,234,191, 6,255, 34, 98, 98,227,254,229,207,171,112, 64, 0, 0,225,116,126,209,254, 44, 47,179, 26,128, 59, 6,128, -109,254,162, 37,238, 4,104, 94, 11,160,117,247,139,102,178, 15, 64,181, 0,160,233,218, 87,243,112,248,126, 60, 60, 69,161,144, -185,217,217,229,228,228,216, 74,196, 66, 91, 97,202, 87,125,254,103,194, 95,192, 87,253,108,249,126, 60,252,247,245,224,190,226, - 36,129, 50, 93,129, 71, 4,248,224,194,204,244, 76,165, 28,207,146, 9,132, 98,220,230,143, 71,252,183, 11,255,252, 29,211, 34, -196, 73, 98,185, 88, 42, 20,227, 81, 18,113,142, 68,154,140,243, 50,165, 34,137, 66,146, 41,197, 37,210,255,100,226,223, 44,251, - 3, 62,223, 53, 0,176,106, 62, 1,123,145, 45,168, 93, 99, 3,246, 75, 39, 16, 88,116,192,226,247, 0, 0,242,187,111,193,212, - 40, 8, 3,128,104,131,225,207,119,255,239, 63,253, 71,160, 37, 0,128,102, 73,146,113, 0, 0, 94, 68, 36, 46, 84,202,179, 63, -199, 8, 0, 0, 68,160,129, 42,176, 65, 27,244,193, 24, 44,192, 6, 28,193, 5,220,193, 11,252, 96, 54,132, 66, 36,196,194, 66, - 16, 66, 10,100,128, 28,114, 96, 41,172,130, 66, 40,134,205,176, 29, 42, 96, 47,212, 64, 29, 52,192, 81,104,134,147,112, 14, 46, -194, 85,184, 14, 61,112, 15,250, 97, 8,158,193, 40,188,129, 9, 4, 65,200, 8, 19, 97, 33,218,136, 1, 98,138, 88, 35,142, 8, - 23,153,133,248, 33,193, 72, 4, 18,139, 36, 32,201,136, 20, 81, 34, 75,145, 53, 72, 49, 82,138, 84, 32, 85, 72, 29,242, 61,114, - 2, 57,135, 92, 70,186,145, 59,200, 0, 50,130,252,134,188, 71, 49,148,129,178, 81, 61,212, 12,181, 67,185,168, 55, 26,132, 70, -162, 11,208,100,116, 49,154,143, 22,160,155,208,114,180, 26, 61,140, 54,161,231,208,171,104, 15,218,143, 62, 67,199, 48,192,232, - 24, 7, 51,196,108, 48, 46,198,195, 66,177, 56, 44, 9,147, 99,203,177, 34,172, 12,171,198, 26,176, 86,172, 3,187,137,245, 99, -207,177,119, 4, 18,129, 69,192, 9, 54, 4,119, 66, 32, 97, 30, 65, 72, 88, 76, 88, 78,216, 72,168, 32, 28, 36, 52, 17,218, 9, - 55, 9, 3,132, 81,194, 39, 34,147,168, 75,180, 38,186, 17,249,196, 24, 98, 50, 49,135, 88, 72, 44, 35,214, 18,143, 19, 47, 16, -123,136, 67,196, 55, 36, 18,137, 67, 50, 39,185,144, 2, 73,177,164, 84,210, 18,210, 70,210,110, 82, 35,233, 44,169,155, 52, 72, - 26, 35,147,201,218,100,107,178, 7, 57,148, 44, 32, 43,200,133,228,157,228,195,228, 51,228, 27,228, 33,242, 91, 10,157, 98, 64, -113,164,248, 83,226, 40, 82,202,106, 74, 25,229, 16,229, 52,229, 6,101,152, 50, 65, 85,163,154, 82,221,168,161, 84, 17, 53,143, - 90, 66,173,161,182, 82,175, 81,135,168, 19, 52,117,154, 57,205,131, 22, 73, 75,165,173,162,149,211, 26,104, 23,104,247,105,175, -232,116,186, 17,221,149, 30, 78,151,208, 87,210,203,233, 71,232,151,232, 3,244,119, 12, 13,134, 21,131,199,136,103, 40, 25,155, - 24, 7, 24,103, 25,119, 24,175,152, 76,166, 25,211,139, 25,199, 84, 48, 55, 49,235,152,231,153, 15,153,111, 85, 88, 42,182, 42, -124, 21,145,202, 10,149, 74,149, 38,149, 27, 42, 47, 84,169,170,166,170,222,170, 11, 85,243, 85,203, 84,143,169, 94, 83,125,174, - 70, 85, 51, 83,227,169, 9,212,150,171, 85,170,157, 80,235, 83, 27, 83,103,169, 59,168,135,170,103,168,111, 84, 63,164,126, 89, -253,137, 6, 89,195, 76,195, 79, 67,164, 81,160,177, 95,227,188,198, 32, 11, 99, 25,179,120, 44, 33,107, 13,171,134,117,129, 53, -196, 38,177,205,217,124,118, 42,187,152,253, 29,187,139, 61,170,169,161, 57, 67, 51, 74, 51, 87,179, 82,243,148,102, 63, 7,227, -152,113,248,156,116, 78, 9,231, 40,167,151,243,126,138,222, 20,239, 41,226, 41, 27,166, 52, 76,185, 49,101, 92,107,170,150,151, -150, 88,171, 72,171, 81,171, 71,235,189, 54,174,237,167,157,166,189, 69,187, 89,251,129, 14, 65,199, 74, 39, 92, 39, 71,103,143, -206, 5,157,231, 83,217, 83,221,167, 10,167, 22, 77, 61, 58,245,174, 46,170,107,165, 27,161,187, 68,119,191,110,167,238,152,158, -190, 94,128,158, 76,111,167,222,121,189,231,250, 28,125, 47,253, 84,253,109,250,167,245, 71, 12, 88, 6,179, 12, 36, 6,219, 12, -206, 24, 60,197, 53,113,111, 60, 29, 47,199,219,241, 81, 67, 93,195, 64, 67,165, 97,149, 97,151,225,132,145,185,209, 60,163,213, - 70,141, 70, 15,140,105,198, 92,227, 36,227,109,198,109,198,163, 38, 6, 38, 33, 38, 75, 77,234, 77,238,154, 82, 77,185,166, 41, -166, 59, 76, 59, 76,199,205,204,205,162,205,214,153, 53,155, 61, 49,215, 50,231,155,231,155,215,155,223,183, 96, 90,120, 90, 44, -182,168,182,184,101, 73,178,228, 90,166, 89,238,182,188,110,133, 90, 57, 89,165, 88, 85, 90, 93,179, 70,173,157,173, 37,214,187, -173,187,167, 17,167,185, 78,147, 78,171,158,214,103,195,176,241,182,201,182,169,183, 25,176,229,216, 6,219,174,182,109,182,125, - 97,103, 98, 23,103,183,197,174,195,238,147,189,147,125,186,125,141,253, 61, 7, 13,135,217, 14,171, 29, 90, 29,126,115,180,114, - 20, 58, 86, 58,222,154,206,156,238, 63,125,197,244,150,233, 47,103, 88,207, 16,207,216, 51,227,182, 19,203, 41,196,105,157, 83, -155,211, 71,103, 23,103,185,115,131,243,136,139,137, 75,130,203, 46,151, 62, 46,155, 27,198,221,200,189,228, 74,116,245,113, 93, -225,122,210,245,157,155,179,155,194,237,168,219,175,238, 54,238,105,238,135,220,159,204, 52,159, 41,158, 89, 51,115,208,195,200, - 67,224, 81,229,209, 63, 11,159,149, 48,107,223,172,126, 79, 67, 79,129,103,181,231, 35, 47, 99, 47,145, 87,173,215,176,183,165, -119,170,247, 97,239, 23, 62,246, 62,114,159,227, 62,227, 60, 55,222, 50,222, 89, 95,204, 55,192,183,200,183,203, 79,195,111,158, - 95,133,223, 67,127, 35,255,100,255,122,255,209, 0,167,128, 37, 1,103, 3,137,129, 65,129, 91, 2,251,248,122,124, 33,191,142, - 63, 58,219,101,246,178,217,237, 65,140,160,185, 65, 21, 65,143,130,173,130,229,193,173, 33,104,200,236,144,173, 33,247,231,152, -206,145,206,105, 14,133, 80,126,232,214,208, 7, 97,230, 97,139,195,126, 12, 39,133,135,133, 87,134, 63,142,112,136, 88, 26,209, - 49,151, 53,119,209,220, 67,115,223, 68,250, 68,150, 68,222,155,103, 49, 79, 57,175, 45, 74, 53, 42, 62,170, 46,106, 60,218, 55, -186, 52,186, 63,198, 46,102, 89,204,213, 88,157, 88, 73,108, 75, 28, 57, 46, 42,174, 54,110,108,190,223,252,237,243,135,226,157, -226, 11,227,123, 23,152, 47,200, 93,112,121,161,206,194,244,133,167, 22,169, 46, 18, 44, 58,150, 64, 76,136, 78, 56,148,240, 65, - 16, 42,168, 22,140, 37,242, 19,119, 37,142, 10,121,194, 29,194,103, 34, 47,209, 54,209,136,216, 67, 92, 42, 30, 78,242, 72, 42, - 77,122,146,236,145,188, 53,121, 36,197, 51,165, 44,229,185,132, 39,169,144,188, 76, 13, 76,221,155, 58,158, 22,154,118, 32,109, - 50, 61, 58,189, 49,131,146,145,144,113, 66,170, 33, 77,147,182,103,234,103,230,102,118,203,172,101,133,178,254,197,110,139,183, - 47, 30,149, 7,201,107,179,144,172, 5, 89, 45, 10,182, 66,166,232, 84, 90, 40,215, 42, 7,178,103,101, 87,102,191,205,137,202, - 57,150,171,158, 43,205,237,204,179,202,219,144, 55,156,239,159,255,237, 18,194, 18,225,146,182,165,134, 75, 87, 45, 29, 88,230, -189,172,106, 57,178, 60,113,121,219, 10,227, 21, 5, 43,134, 86, 6,172, 60,184,138,182, 42,109,213, 79,171,237, 87,151,174,126, -189, 38,122, 77,107,129, 94,193,202,130,193,181, 1,107,235, 11, 85, 10,229,133,125,235,220,215,237, 93, 79, 88, 47, 89,223,181, - 97,250,134,157, 27, 62, 21,137,138,174, 20,219, 23,151, 21,127,216, 40,220,120,229, 27,135,111,202,191,153,220,148,180,169,171, -196,185,100,207,102,210,102,233,230,222, 45,158, 91, 14,150,170,151,230,151, 14,110, 13,217,218,180, 13,223, 86,180,237,245,246, - 69,219, 47,151,205, 40,219,187,131,182, 67,185,163,191, 60,184,188,101,167,201,206,205, 59, 63, 84,164, 84,244, 84,250, 84, 54, -238,210,221,181, 97,215,248,110,209,238, 27,123,188,246, 52,236,213,219, 91,188,247,253, 62,201,190,219, 85, 1, 85, 77,213,102, -213,101,251, 73,251,179,247, 63,174,137,170,233,248,150,251,109, 93,173, 78,109,113,237,199, 3,210, 3,253, 7, 35, 14,182,215, -185,212,213, 29,210, 61, 84, 82,143,214, 43,235, 71, 14,199, 31,190,254,157,239,119, 45, 13, 54, 13, 85,141,156,198,226, 35,112, - 68,121,228,233,247, 9,223,247, 30, 13, 58,218,118,140,123,172,225, 7,211, 31,118, 29,103, 29, 47,106, 66,154,242,154, 70,155, - 83,154,251, 91, 98, 91,186, 79,204, 62,209,214,234,222,122,252, 71,219, 31, 15,156, 52, 60, 89,121, 74,243, 84,201,105,218,233, -130,211,147,103,242,207,140,157,149,157,125,126, 46,249,220, 96,219,162,182,123,231, 99,206,223,106, 15,111,239,186, 16,116,225, -210, 69,255,139,231, 59,188, 59,206, 92,242,184,116,242,178,219,229, 19, 87,184, 87,154,175, 58, 95,109,234,116,234, 60,254,147, -211, 79,199,187,156,187,154,174,185, 92,107,185,238,122,189,181,123,102,247,233, 27,158, 55,206,221,244,189,121,241, 22,255,214, -213,158, 57, 61,221,189,243,122,111,247,197,247,245,223, 22,221,126,114, 39,253,206,203,187,217,119, 39,238,173,188, 79,188, 95, -244, 64,237, 65,217, 67,221,135,213, 63, 91,254,220,216,239,220,127,106,192,119,160,243,209,220, 71,247, 6,133,131,207,254,145, -245,143, 15, 67, 5,143,153,143,203,134, 13,134,235,158, 56, 62, 57, 57,226, 63,114,253,233,252,167, 67,207,100,207, 38,158, 23, -254,162,254,203,174, 23, 22, 47,126,248,213,235,215,206,209,152,209,161,151,242,151,147,191,109,124,165,253,234,192,235, 25,175, -219,198,194,198, 30,190,201,120, 51, 49, 94,244, 86,251,237,193,119,220,119, 29,239,163,223, 15, 79,228,124, 32,127, 40,255,104, -249,177,245, 83,208,167,251,147, 25,147,147,255, 4, 3,152,243,252, 99, 51, 45,219, 0, 0, 0, 6, 98, 75, 71, 68, 0,255, 0, -255, 0,255,160,189,167,147, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, 32, 0, - 73, 68, 65, 84,120,218,236, 93,119,124, 20,197,226,255,206,222,238,245, 75, 39,141, 36,164, 0,129, 96,232, 69, 18,138,116, 20, - 80,144,166,248, 16,158,232,207,134,189,129,138,136, 8,196,138,192,123, 34, 79,159, 10,136, 34, 88, 64,240,209,148,222,155, 74, - 47,146, 0, 9,164,147,122,253,110,231,247, 7,183,231,229,184, 22,184, 40,194,124, 63,159,253,220,221,222,238,119,103,102,103, -102,191,243,157,217, 25, 66, 41, 5, 3, 3, 3, 3, 3, 3, 3, 3, 67,240,193,177, 36, 96, 96, 96, 96, 96, 96, 96, 96,184, 78, -132,214,234,213,171, 3,182,192, 8, 33,253, 2,229,116,108,183, 93,239,156, 13, 24,119, 26, 68,206,219, 28,156,175,255, 77,194, -121,219,245,202, 41,197, 55, 80,222,250,112, 6,154,167,234, 25, 78, 26,236,112, 54, 20,103,176,202,145,135,112,210, 6,184,239, -175,255, 77,194,121,219,245,198,233,158,127, 2,225,173, 47,103, 32,121,234, 42,194, 73,131, 29,206,134,226,188,214,114,228, 35, -156,244, 90,243,146,151,123,255, 58,110, 34,240, 13, 37,178,234,131,193,131, 7, 19, 23,126,114,189,114,186,166,131,196, 31,204, -176, 6, 17,155,130,205,233,150,158,193,194,235,131, 7, 15, 38,171, 87,175,222, 12,224,182, 96,198, 61, 24,247,221, 45,174, 65, -225,173,175,200,170, 47,103,176,242,125, 67,115, 6,171, 44,185,115, 6, 35,223,123,186,239, 13,120,143,130, 21,206,160,148,165, -134,200,243, 30,242,207, 53,243,186,115, 6,163, 44,185,115, 6, 35,223,255, 25,156,193, 40, 75,158, 56,131,145,239,189,221,123, -230,104,253,185,130,192,189,128,247,186,158, 5, 81, 67,137,205, 64, 29,152,235,129, 51,200,247,232,117, 7,103, 48, 91, 55,189, -130,117,143, 26, 34,191,187,114, 6,139,223,157, 39, 24,247,201, 19,231,181,134,215, 75, 56,131, 30,247,107,205,247,127, 22,103, -144,239, 81, 80,202,146, 27,103,175, 32, 55, 6,122,185,252,126, 61,152,156,193, 42, 75, 30,194,121,205,247,201, 19,231,181,134, -215, 75, 56,131, 30,247, 96, 60, 67, 26,138,247,134,117,180, 26, 82,100, 53,212, 67, 45,152,220, 13,225,234, 52,148,243, 22, 44, - 87,199, 3,239,230, 32,210,109, 10,118, 56, 29,225, 35, 13,229,190, 94,239, 96,101,137,149,165,235,173, 44,121,202, 55,131, 7, - 15,126,125,245,234,213, 83,175,183, 70,180, 43,103,176, 4,145,135,184, 95, 83, 89,114, 63, 55, 24,101,201, 15, 39,105,136,248, - 7,187, 60, 49,161, 85, 15,167, 40,200, 45, 19, 4,217,129,105,176,120, 7, 57,156,189, 26,194, 33,108, 0, 4, 61,156,142,150, -242,212, 6,136,251,223, 37, 77, 89, 89, 98,101,233,186, 43, 75,110,121,178, 87, 16,157,162,160, 58,207,238,156,193,184,134, 43, - 71,176,242,104, 67,199, 61,152,101,169, 33,238,253,223, 14,148,210, 6,219, 0,244, 99,156,140,147,113, 50, 78,198,201, 56, 25, - 39,227,188, 89, 55, 54,189, 3, 3, 3, 3, 3, 3, 3, 3, 67, 3,129,176, 9, 75, 25, 24, 24, 24, 24, 24, 24, 24, 26, 6, 94, -199,104, 37, 36, 36,172,210,104, 52,205,188,253, 95, 91, 91,123,241,194,133, 11,189, 89, 18, 50, 48, 48,248,109,209, 17,194,225, -143,183,156, 69, 0,148,178, 86, 30, 3, 3,195,205, 44,180,148, 74,101,218,177, 99,199,210, 69, 81,132,221,110,135,205,102,115, -126,154,205,102,244,236,217,179,222, 3,233,227,226,226,182,200,100,178,148,250,156, 99,183,219,207, 21, 22, 22,118,247, 81,129, -239, 0,144, 70, 8,113,221,231,243, 19,192, 5,139,197,210,193, 23, 39, 33, 36,205,157,207, 11,151,244,221, 39,103,120,120,248, - 62,158,231, 19, 61,113,121,251, 46,138,226,153,226,226,226,108,150, 77,255, 28,196,197,197,109,225,121,190,222,249,243,226,197, -139, 94,243,103,227,198,141, 15,114, 28,215,184, 30,148, 50, 81, 20, 79, 92,188,120,177,187, 55, 33, 34,229,121, 63,194,166,206, -119, 66, 72,190,205,102,235,228,175, 28,249,226,242,144, 71,125,114,186,138, 44,158,231,115, 98, 98, 98, 30,213,235,245, 70, 0, - 84, 38,147,209,168,168, 40, 41,108, 0, 0,155,205, 86,114,233,210,165,214, 44, 39, 50, 48, 48,220, 20, 66, 75, 20, 69,206,100, - 50,225,228,201,147,240, 82,223,219,175,226,122,233,251,127, 90, 31, 19, 18, 19, 11,155,197, 2,109,163,104, 39,119,209,209,195, -176, 89, 45,176,153,205,104,210,185,171,244, 16,195, 45,183,220, 34,243,195,153,248,214, 91,111,197,132,132,132,192,104, 52,194, -104, 52,194,100, 50,193,104, 52,194,108, 54,195,108, 54,195, 98,177,192, 98,177,192,102,179,193,100, 50, 97,195,134, 13,254,194, -158, 56, 99,198,140,152,208,208, 80, 39,159,180, 73,156, 18,175,213,106,133,209,104,196,207, 63,255,236,147,147,231,249,196, 11, - 23, 46,196,200,229,114, 80, 74, 33,138,162,167,193,133,117,208,180,105, 83, 11,203,162,127, 42,210,103,124,185, 58, 38, 76,173, -132, 77, 20, 49,164,109, 83,231, 31,103, 62, 89, 6,106,179, 67,180,217,208,124,226, 88,224,178, 37,131, 86,173, 90,249,204,159, -148,210,228, 25, 95,174, 14, 15,148,179,180,180,212,144,145,145,113, 1,151, 95,125,246,230,248, 36, 26, 12,134, 24, 41, 12,238, -130,136,227,184, 58,219,218,181,107, 49,100,200, 16,127,113, 79,124,230,153,103, 98,172, 86, 43,204,102, 51, 76, 38, 19,172, 86, - 43,108, 54,155,115,179,219,237,206,205,108, 54, 99,247,238,221,129, 58, 89,111,245,239,223,255,129,213,171, 87,107,191,255,254, -123,109, 74, 74, 10,228,114, 57,100, 50, 25,100, 50, 25, 56,142, 3,207,243,184,245,214, 91, 9,203,130, 12, 12, 12, 55,141,208, - 50,153, 76,185,237,219,183,167,142,239, 9, 74,165, 82,238, 86,129, 54, 78, 79, 79, 63,225,126,158,191, 46,197,144,152, 88, 76, - 78,138, 4, 0,188,118,182,204,249,128,120, 59,187,157,243,152, 55, 10, 42, 1, 0,106,181, 26,196,181, 25,237, 5, 90,173, 22, -253,251,247,135, 66,161, 64,167, 78,157, 32, 8,130,199, 77, 46,151, 67, 16,132, 64, 30, 14,208,233,116,152, 54,109,154, 36,146, -160, 85, 41,241, 68,118, 39,168, 64,241,159,195,167, 96, 22, 41,120,158,119,110,129,112,202,229,114, 28, 58,116, 8, 60,207, 67, - 38,147, 57, 63,165,239, 43, 87,174,196,200,145, 35,193,243, 60,212,106, 53,112, 19,205, 51,114,189, 32, 76,173,196,184,249,223, - 1, 0,206,207,158,232,188,119,187, 31,123,205,121, 76,242,255,141, 6, 33, 4,130, 32,128,227,184,160,113,150,151,151, 27,238, -189,247,222,109, 33, 33, 33,107,171,170,170,224, 71,192,225,252,249,243,224,121,222,107,126,231, 56, 14,239,191,255, 62, 78,159, - 62, 29, 80,220,141, 70, 35, 62,254,248, 99,216,237,246, 58,188,210,119,247,125, 1,138,172, 55, 7, 12, 24, 48,118,245,234,213, - 17,132, 16,252,235, 95,255,130, 92, 46,199,160, 65,131, 16, 21, 21,133,117,235,214, 65, 46,151,227,197, 23, 95,100,153,143,129, -129,193, 23, 4, 0,237, 0, 68, 59,140,158,106, 0,225, 46,255,151, 56, 62,163, 93,126,239,245,192,211,217,113,140,244,191,244, -219, 12, 64,225, 97,127, 25, 0,181, 99, 51, 1,216, 1, 32,211,229, 58,210,121,240,118, 93, 30,184,188,254, 16,128, 77, 0,122, - 73,147,232, 93,188,120,241, 14, 23,103,229,216,137, 19, 39, 90, 74,154,199,209,133, 40,183,217,108,233, 82,119,162,228, 22,245, -235,215,207,103, 11,223,102,177, 92, 33, 64, 60,105, 41, 79,221, 21,222, 4,140,197, 98,193,232,209,163, 47,223, 9, 47, 15, 29, -215, 45, 0,237, 6,179,217, 12,158,231,209, 34, 41, 26, 83, 6,182, 71, 23,106, 69,109, 13,129,173,178, 22, 67,117, 86, 28,107, -213, 1, 11,206,149,224,108, 85, 13,120,158, 15,136, 83, 20, 69,175, 34, 75, 38,147, 97,254,252,249,184,247,222,123, 33,147,201, - 2,226, 99, 8, 62,108,162,232, 49, 31,122,203,179,129,220,167, 64, 56,203,203,203, 13, 67,134, 12,217,165, 84, 42, 23,198,198, -198, 94,200,207,207,247, 43,180,220,197,143,123,163,226,189,247,222,195,220,185,115,209,187,119,239,128,194,105, 50,153, 64, 8, -193,130, 5, 11,174,248,111,250,244,233, 87, 92,207, 23,167,163,129,196, 53,110,220,248,177, 53,107,214,132, 74,199, 54,106,212, - 8,130, 32,160,117,235,214, 8, 9, 9,193,182,109,219, 96,183,219, 3, 46,151, 12, 12, 12, 55, 46, 60,105, 17, 23,244,156, 60, -121,114,167,156,156,156,153, 89, 89, 89, 95,237,216,177,227, 75, 66,200, 42,151, 58,113,136,163,238, 89,229,242,187,179,155,232, - 17, 0, 68, 19, 66, 86, 73,199,187,254,118,217,223, 15,128, 66,250, 61,121,242,228,204,156,156,156,153,147, 38, 77,122,121,214, -172, 89,242,201,147, 39,183,201,201,201,153, 41, 93,199, 83, 56, 60, 57, 90, 62,103, 21,150,186, 17,143, 31, 63, 14,127,227, 87, - 41,165, 62,107, 75,109,163,104,167,147,245, 70,114,148,115,255,180,252, 10,231, 3,108, 94,199,102,208,106,181, 24,248,198, 59, - 1, 57, 69,102,179, 25,197,197,197, 78,151,193,223, 22, 40,167, 70,173,194,134,103, 90,227,124,153, 2,175,239, 44,199,234, 95, - 78, 67, 16, 4,220,222,170, 53,238,144,135,224,213,100, 5,158, 57,149, 7,107,128, 99,122, 41,165, 30, 5,150,244, 93,234, 66, - 97, 66,235,175,195,144,182, 77,157,174,211,238,144,190,206,253, 35,107, 15, 57,239,201,115,243,223, 6, 0,244,238,112, 43, 2, - 25,207,237,143,179,172,172,204,208,189,111,175,205,118,131,249,243,177, 99,199,230,110,220,184, 81, 29, 80,243,206,131,208,146, - 92, 91, 73,100,241, 60, 15,179,217, 28, 80,220,205,102,179,215,242, 33,151,203,235,237,104, 1, 64,109,109,173,121,197,138, 21, -152, 55,111, 30,162,162,162, 48, 96,192, 0,196,199,199, 99,217,178,101,160,148, 98,226,196,137, 80,171,213,146,123,205, 50, 32, - 3,195,205, 13, 95, 90, 68,153,147,147, 51,211, 93,200,184,254,118, 21, 80,110, 98,202, 85,172,101,250,121,254,175,114, 23, 79, -210,117, 9, 33,171,102,205,154, 53,196, 79, 56, 74,188, 9, 45,159,211,247,155, 76,166,220,182,109,219, 6,164, 38,244,122,125, -161, 63,177,225,169, 85,239,234, 18,232,116, 58,104, 67,117,224, 2,172,119,173, 86,171, 83,168,172, 95,191, 30,106,181, 26,131, - 6, 13,186, 38, 71,203, 98,177, 64, 33, 23,192, 53,138,197,184,217, 27, 81, 86,109,112, 62, 96, 54,157,201,197,129,162, 98, 60, -147,213, 23, 90,117, 49,106,204,230,128,156, 55, 81, 20,175, 16, 89, 60,207, 99,244,232,209, 78, 55,193,117,220, 10, 88,215,225, - 95, 6, 79,249,211,125,191,232,230, 84, 93, 13,103, 89, 89,153, 97,200,144, 33,187,236, 6,243,231, 5, 5, 5,187, 0,168,186, -116,233, 82,111,161, 37, 9, 44, 65, 16,240,254,251,239, 99,238,220,185,206,255, 3, 21, 90, 54,155,173,142,128, 58,117,234, 84, -157,107,185, 11, 59, 95,221,166,148, 82, 74, 8, 17, 1,136,105,105,105,206,115,226,226,226, 16, 30, 30, 14, 81, 20, 33,138, 34, - 84, 42, 21,212,106, 53,228,114, 57,203,116, 12, 12, 12,190,180,136, 97,210,164, 73, 47, 19, 66, 86, 57,156,165,195, 62, 4,149, - 39,116,118, 19,107, 37, 94,234,174, 33,158,196,150,235,119, 9,147, 39, 79,206,244, 16,142,189, 94,133,150,219,180,251,117,224, -218,141, 24,172,135,152,175, 7,153, 46, 60, 20,106,173, 22, 50, 25, 7, 66, 8,245,199,101,177, 88,156, 21,255,163,143, 62,234, -115,220, 74,160,227,169, 44, 22, 11, 56, 94,134,139,113,169,176,115, 91,157,231, 74, 27,199, 11, 56, 27,215, 18,178,227, 7, 33, - 4,248,192,117,119,180, 38, 78,156,136,143, 63,254, 24, 28,199, 57,211,132,231,121, 52,111,222, 28,185,185,185,172,196, 93, 39, - 34,203,219,126,187, 93, 12,216,133,241,116, 92, 89, 89,153, 97,212,168, 81,155, 43, 43, 43, 63,191,229,150, 91, 78,225,242,244, - 7, 92,160,124, 60,207,215, 17, 88,146,200,154, 51,103, 78, 29, 81,100,181, 90, 3,106, 8, 88,173,214, 43, 4,207,187,239,190, - 91,231, 19, 0,178,179,179, 3,114,134, 1, 80,142,227,168, 92, 46, 71,255,254,253,209,166, 77, 27,124,255,253,247, 16, 69, 17, -143, 63,254, 56,212,106, 53, 62,248,224, 3,216,108, 54,188,245,214, 91,204,209, 98, 96, 96,240,165, 69, 76,179,102,205, 58, 60, -107,214, 44,167,179,228,238,104,121,163,116,136,170,104, 73,164,225,242, 88,171,189, 62,158,213, 67,188, 9, 48,215,125, 57, 57, - 57, 51, 61,132,195,189,187,242,207, 95,235,176,240,200, 33,188,211,173, 61,128,186,221,133,243,111,109, 9,173, 78, 11,109,136, - 14,163, 86,110, 5, 0, 71,165, 63, 41, 32, 71, 75, 18, 90,101,101,101, 62, 69, 86,125, 28, 45, 78,193, 99,121,226, 37, 80,133, - 0,222,108,173, 35,180,100,188,128,243, 81,169,224, 4, 57,120,187, 45, 32, 78, 74,233, 21, 93,133,227,199,143, 7, 33,196,249, -134, 88,219,182,109, 93,185,216,147,231,207,206,159,251, 62,193,177,111, 30, 3, 0,116,175,173,117,222,139, 25,109,255,120,191, - 99,246,161,205, 78,247,241, 13, 60,127, 85,156,101,101,101,134, 46, 25,153,187,228,145, 97,159,159, 59,119,110, 23, 0,238,158, -123,238, 9,111,219,182,109, 64,101, 82,122,185,194, 93,100,185, 58, 89,210,167,213,106, 13, 40,238,210, 88, 41,127,144,186, 17, -253,229,121, 74, 41,141,140,140, 4,199,113, 8, 13, 13,133, 78,167,115,190,113,171, 82,169,160,209,104,156,227, 59, 3, 20,110, - 12, 12, 12, 55, 47, 34, 36,161,227, 16, 75,117,156, 38, 74,233, 16, 87, 49,228,173, 11,209,225, 64,109,241,103,172, 57, 4,154, - 71, 72,206,154, 91,157,188,202,155, 72,227, 37, 5,233,250, 25, 31, 31,255, 63,157, 78,151, 26,104,236,235, 51,121,169,221,106, -185,194,217, 34,132, 64, 23,162,131, 90,167,133, 58, 68,231,213,245,242, 37,180, 36,167, 72,122,232, 44, 92,184, 16, 58,157, 14, -255,252,231, 63,235, 61, 70,203, 41,180,228, 28,214, 41,127,134, 76,193,215, 17, 89, 60,207, 67, 38, 8, 40,212,197,131, 19, 4, -240,182,192, 92,178,202,202, 74,240, 60,143, 41, 83,166, 56, 91,240,174, 34,171, 62,113,102,104, 24, 80,187,245, 10, 23,202,155, -251,122,181,156,146,147, 37,143, 12,251,188,101,203,150, 78, 39, 75,163,209, 72,111,155,250, 5,199,113, 30, 69,150,251, 27,130, - 60,207, 95,206,203,126,222,142,116,117,180,102,205,154,229,228,117,117,178, 36,212,167, 28, 73, 97,221,188,121, 51, 14, 28, 56, -128, 71, 31,125, 20,106,181, 26,115,231,206,133,205,102,195,244,233,211,161, 86,171,161, 80, 40, 88,230, 99, 96, 96,110, 86, 29, - 45,226,134, 18,183,113, 80,196, 77,212,148,120, 18, 88,174,221,132, 46,223,173, 30,120,205,110, 93,138,238,251,165,207,178, 89, -179,102,109,148,156, 44,151,253,117,194,225,215,209, 82, 42,149,169, 39, 79,158,116, 78, 86,234,235,211,108, 54,163,119,239,222, - 1, 59, 99,210, 91,135, 60, 47,171, 35, 44, 52, 33, 58,104, 66, 67,160,214,233,220, 5, 7,241, 87,137, 75, 45, 98, 87,161, 53, -117,234, 84,240, 60,143,143, 63,254, 24, 0,240,252,243,207, 7, 60, 70, 75,226,132,157, 32,159,254,142,246,179, 71,194,252,133, - 21, 69,219,127, 5,207,243,136,233,122, 7,196, 46, 35,161, 87,235,192,219,109, 1,191,117, 88, 94, 94,142,220,220, 92,200,100, - 50, 60,251,236,179,117,230, 58,114,127,147,109,253,250,245,204,209,250, 43,132,150,104, 11, 72, 84,213,199,117,116,229,148,198, -100, 85, 86, 86,126,126,238,220,185,221, 0,184,177, 99,199,134,107, 52, 26,252,247,191,255,213, 3, 80, 44, 91,182, 76,237, 79, - 20, 73,249,198,159,200, 18, 4,225,114, 94, 14, 36,238,180,238,148, 37,254, 6,198, 7,146,231,165,176, 18, 66, 96,183,219,161, - 86,171,235, 56, 89, 42,149, 10, 74,165,146,101, 60, 6, 6, 6,127,216, 91,143, 99, 59,187,136,166,189, 87,201,187, 55, 88, 1, -231,189, 9, 13,147,201,132,163, 71,143, 6,202, 19,240,228,165, 73,157,110,197, 27, 5,149, 32,132,224, 63,217,183, 64, 27,170, -131, 70,171,197,136,239, 55, 59, 43,238, 67, 51,159,135, 82,171, 67,227, 30, 3, 2,170,200,165,174, 67, 87,161, 85, 81, 81, 1, - 65, 16,240,230,155,111,130,227, 56,188,245,214, 91, 72, 72, 72,192,197,139, 23,177,108,217,178,128, 28, 45,153, 93,134,248,251, - 51,160, 25, 31,134,208,251,123, 34,162,255, 84, 20,152,121,236, 48,106,208,211,120, 4,138,117,115, 96, 22,237, 1,191,129,101, -179,217,176,121,243,102,247, 1,239,160,148, 58,103,221,183, 90,173,176, 88, 44,120,235,173,183,192, 86, 40,249,243, 17,223,117, - 34,162, 59, 61, 2, 0, 88, 57,107,130,115,255,148, 67,127,228,207,247,191,184,188, 0, 64,203,148, 1,245,226, 44, 43, 43, 51, -220,222, 59,123,139, 81, 20, 62,107,221,186,117, 29, 39, 75,165, 82, 17,199,239,128,196, 53,199,113,144,201,100, 87,116, 23,122, - 19, 91,129,140,209,178,217,108,206,137, 68,125,141,103,188, 26, 71,107,194,132, 9,136,143,143,119, 58, 89,111,188,241, 6,212, -106, 53, 38, 79,158, 12,171,213,138, 57,115,230,176,204,199,192,192,240, 87,136,178, 6,135,199,154,212,104, 52,230,181,105,211, - 6, 94,254, 75, 80,169, 84,130, 91, 37,221, 56, 61, 61,253,132,123, 23, 34, 33,164, 31,165,116,131,167, 74,157, 16,130,144,208, - 16,168,116, 90,104,220, 92, 44, 85, 72, 40,148, 58, 29, 56,185,224,233,129,112, 5,167, 52,182,196, 85,104, 73, 91,101,101, 37, - 4, 65,192,188,121,243, 16, 26, 26, 10,147,201,228,151, 83,122,232,200,100, 50,232,207, 87,227,216,204, 13, 80,168,118,160,217, -128,123, 17, 47,168, 33,223,246, 45, 12,118,171,207, 9, 75, 61,113,166,167,167,227,181,215, 94,187, 98, 90, 7,111, 72, 72, 72, -240, 27,247,107, 5,227,244,204,233,235,173, 88, 9, 34,181,123, 58,206, 35,167,228,100, 25, 69,225,179,220,220, 92,201,201, 10, -211,104, 52,248,232,163,143,244, 0,184,233,211,167,107,146,147,147,101,129,228, 37,153, 76,134,217,179,103,123, 28,147,229, 73, -116,213,167, 28,185,158,123,219,109,183,121,156,176,212,147,120,243,196, 41,133, 53, 42, 42,202,233,100,217,237,118,231,219,134, -210,236,243,222, 26, 21, 44,127, 50, 78,198,121,243,112,222,168,240,248,148,191,112,225,194,237,222, 78,104,214,172,217,201,147, - 39, 79, 54,151,150,226,112, 84,156,114,163,209,152,158,157,157,237,215,218, 17, 69, 17, 74,165, 18,148, 82,244,121, 45, 7,132, - 3, 56,212,125,136,197,116,235, 11,153,140,135,120,121,169, 15,191,111, 29, 26, 12,134, 58, 15, 7, 79, 91, 77, 77, 13, 76, 38, - 83,192,179,121, 27,141,198, 58, 83, 48, 16, 42,226,236, 79, 95, 95,241,246,161,180, 5, 58,110, 71,165, 82,213,233,250,241, 5, -127,115,146, 49, 4, 31,210, 11, 11, 0,208, 34,123, 16, 68,209, 14,106,183,215, 89, 38, 41, 35,245,118,136,212, 14,139, 85, 15, -147,201,228,207,118, 36,165,165,165,134, 81,163, 70,109, 6,240,233,208,161, 67, 79,224,242, 27, 47, 84,167,211, 41, 5, 65, 16, - 1,148, 3,160,151, 46, 93, 10, 43, 40, 40, 16,141, 70, 99, 19,127,225, 92,189,122, 53,142, 30, 61,138, 30, 61,122,212, 89, 14, - 74,114, 69, 93,103,119, 15, 36,127, 74,221,229,158,102,132,247, 38,228, 2,133, 76, 38, 67, 88, 88, 24,228,114, 57,222,124,243, - 77,200,229,114,104, 52, 26, 0,192,156, 57,115,156,147,175, 50, 48, 48, 48,220, 52, 66,203, 95,189,233,163, 91,209,103, 23,162, -205,102,203, 79, 78, 78,174,215,197,236,118,123,145, 31,225,150,191,108,217, 50,185,171, 11,225,239,147, 82, 90,228,231, 97,155, -191,114,229, 74,185, 39,119,195,219, 2,211,254, 56,237,118,123,126, 74, 74,138, 87,199,196, 19,172, 86,107, 1,203,162,127, 30, -236,118,187,143,252,249,202,213,230,207, 83, 45, 90,180, 40, 8, 15, 15,255, 49, 54, 54,182,108,251,246,237, 81,157, 59,119,142, -114, 61,166,115,231,206,241,110,167,153,225,125,157, 67, 16, 66,242,135, 14, 29,234, 49,207, 75,162,201, 67,254,204,247,151,231, -247,236,217, 35,119, 61,223, 27,191, 75, 57,202, 15, 64,184,158,109,223,190, 61,231,202,227, 45,239, 91,173,214, 18,150, 11, 25, - 24, 24,110,122,161,101, 48, 24,206,183,105,211,198,230,229,191,115,190,206, 45, 45, 45,237, 20,236, 8, 88, 44,150,236,191, 3, -103, 73, 73, 73, 39,150,221,174,111, 52,196, 61, 42, 42, 42,234, 18,108, 78,155,205, 22,244,252,105,181, 90,179, 27, 34, 77,203, -202,202,178, 88,206, 98, 96, 96, 96, 66,171, 30, 8,116, 26, 7, 6, 6, 6, 6, 6, 6, 6,134,155, 29, 28, 75, 2, 6, 6, 6, - 6, 6, 6, 6,134,134, 1,193,229, 85,170,175, 64,125,222, 38, 32,132,244,171,239,133,253,241, 51, 78,198,201, 56, 25, 39,227, -100,156,140,243,198,227,244,199,125,195,189,205, 40,189, 77,213, 16, 27,128,126,140,147,113, 50, 78,198,201, 56, 25, 39,227,100, -156, 55,235,198,186, 14, 25, 24, 24, 24, 24, 24, 24, 24, 26, 8, 60, 75,130,191, 6,132, 16, 25,165,212, 30, 68,202, 8, 0,222, - 22,140, 51, 3,184,116, 53,193, 4, 32,119,108,210, 68, 71, 86, 0, 22,199, 22,192,212,245,211,184, 11, 23, 34, 50,169, 93,232, - 76, 9, 17, 68, 17,191, 52,105,146,116, 16,184,221, 12, 0,186,184, 86,173,116, 90,117, 63,147,197,156,170, 20, 20, 71, 43,106, -107,214, 27,139, 78,228,177, 28,194,192,240,151,212, 75,119, 2,152,230, 40,251,179, 40,165, 95,179, 84, 97, 96,104, 32,161, 21, - 18, 18,178,143,227,184, 68,127,243,243,184, 20, 80,216,237,246,252,242,242,242, 78, 1, 22,104, 30,192, 40,157, 78,215, 91, 16, -132,110, 0, 96,181, 90,183,215,212,212,108, 4,176,140, 82,106,187,202,138, 34, 20,192,104, 0,247, 57,118, 45, 1,240, 53,165, -180,234, 42,249,218,132,133,133,125, 35, 8, 2, 45, 45, 45,237, 10, 0, 81, 81, 81,187,172, 86, 43,169,170,170, 26, 65, 41,253, -173,158,124,156, 32, 8,239,247,232,209,163, 39, 33,228, 83, 74,233,188, 32,221, 75, 37,199,113, 30, 5,138, 40,138, 41, 87,193, - 39, 7, 16, 54,111,222,188,168,197,139, 23,183,207,207,207,111, 13, 0,137,137,137,135,198,142, 29,123,240,137, 39,158, 40, 3, - 80,233, 16, 92, 94,113,225, 66, 68,102,113,225,153, 71,139,138,143,142, 6,128,184,248,214, 95,203,100,156, 60, 33,225,192, 78, - 77,163,251, 26,181,104,217,244,145,175,254, 59, 79,158,146,154,132,159,119, 28,104,247,196, 83, 47,103,170, 98, 91,188,199,196, -214,159,135,208,208,208,125, 28,199, 37,250, 42,227,158,202,188,221,110,207, 47, 43, 43,235,228,141,147,231,249, 68, 95,245,133, -167,125,162, 40,158, 41, 41, 41,241, 56,213, 68, 88, 88,216, 78,158,231, 83, 3,229,146, 62,109, 54, 91,190,183,169,101,194,194, -194,246,201,100,178, 68, 95,241,244,244,159, 40,138,103,138,139,139,189,133,243,138,184, 7, 35,156, 87,195,233, 43,156, 82,125, - 4, 96, 78, 84, 84,212,173,101,101,101,255, 0,240,114, 85, 85, 85, 91,153, 76,134,200,200,200,151, 9, 33,167,195,194,194, 62, -169,172,172,220, 1,224, 41, 74,169,200, 74, 12, 3, 67,144,132, 22,199,113,137, 5, 5, 5, 49, 90,173, 22,192, 31,235,241, 73, -139, 73,139,162, 8, 74,169,243,211,102,179, 33, 35, 35, 35, 80,177,209, 58, 52, 52,116,249,228,201,147,155,140, 26, 53, 74, 33, - 45, 53,115,225,194,133,244,111,190,249,230, 31,111,190,249,230, 84, 66,200, 72, 74,233,161, 64,197, 11,128,190, 0,198,183,111, -223,126,248, 27,111,188, 33,239,211,167, 15,236,118, 59,126,252,241,199, 30,211,167, 79,159, 71, 8,249, 22,192,231, 0,126, 10, -180,178, 32,132,116,143,139,139,251,114,219,182,109,241,185,185,185,246, 81,163, 70, 45, 5,128,125,251,246,165,217,237,118,210, -181,107,215,213,132,144, 49,148,210,109,245, 72,243,225, 79, 62,249,228, 61, 19, 39, 78,140,249,231, 63,255,249, 0,128,121,142, -107, 17, 71, 58,215,119,129, 67,167,147, 69, 41,149,251, 56, 46,174, 30,206,150, 54, 55, 55, 55, 34, 59, 59,251,177,226,226,226, -103, 92,121,139,138,138,176,127,255,126,203,204,153, 51,103,239,216,177,227,195,212,212,212, 75, 0,106,189, 17, 81,187,208,185, -168,248,232,232,158, 89,243,194, 0, 96,217,202,199,238,221,115,176, 36,100,213,154, 5,255, 80,168,228,166,197,255,153, 45,111, -222, 44, 5,155,246,157,194,238,163,229,164,117,247, 33,124,229,170, 69,253, 1, 44, 96,197,243,207,129, 76, 38, 75,200,207,207, -143,209,104, 52, 30, 23,142,119, 27,151, 33, 77,128,138,244,244,116,239, 21, 11,207, 39, 22, 20, 20,196,168, 84, 42,103,221,225, - 94,103, 72,245,138, 51,175, 80,138, 22, 45, 90, 88,124,212, 73,201,231,206,157,139,209,104, 52, 78, 30, 79,225,115, 23, 28, 45, - 90,180,240, 21,247, 58,225, 12,132,147, 82,138,230,205,155,219,253,197, 93, 90, 1,195, 95,188, 37,206,212,212, 84, 90, 31,206, - 64,194,217,180,105, 83,139,159,219, 63,231,196,137, 19, 19,147,146,146,208,188,121,243, 29,183,222,122,107,168, 86,171,197,154, - 53,107,208,170, 85,171,204,208,208,208,221,203,150, 45, 19, 94,124,241,197,118,159,125,246, 25, 0, 60,193, 74, 12, 3, 67,144, -132, 22, 33, 4, 90,173, 22, 75,151, 46,245,186, 28,135,235,247, 38, 77,154, 4,116, 65, 66, 72,167,212,212,212,205,219,182,109, - 83,199,199,255, 49, 33,182,217,108, 70, 68, 68, 4, 30,127,252,113,197,157,119,222,217,124,192,128, 1,187, 8, 33,183, 81, 74, -247,249,225, 27, 30, 29, 29,253,175, 41, 83,166,196,222,115,207, 61,136,138,170, 51,233, 54, 70,141, 26,133, 17, 35, 70,200, 79, -156, 56,113,239,194,133, 11,239,157, 63,127,126, 33, 33,228, 9, 74,233,183,190,120, 53, 26,205,208,102,205,154,125,180,109,219, -182,152,152,152, 24,164,165,165,113, 47,190,248, 98,243,244,244,116,117, 98, 98, 34,119,241,226, 69,124,255,253,247, 9, 99,198, -140, 89,174, 80, 40, 30, 49,155,205, 43, 2,136,187, 34, 42, 42,234,229, 71, 30,121,164, 81, 85, 85,149,109,255,254,253, 39,165, -253, 10,133, 98,122, 86, 86, 86,103, 66,200, 23,148,210, 79,174,198,201,114,184,118,238,107,153, 88,165,255, 3,116,182, 20,191, -252,242, 75,100, 86, 86,214,183, 38,147,169,195,163,143, 62,122,110,230,204,153,234,208,208,208, 80, 0,164,170,170,234,210,180, -105,211,204, 31,124,240,193, 75,173, 90,181,234,187,115,231,206,225,237,218,181,179, 58, 68,220,149, 66,139, 16,103,120,206, 23, -148, 96,243, 14, 81,241,218,228,231, 19,223,158,145,122,118,239,145,243, 34,175, 14,197, 15, 91, 14,163,168,172, 6,255,219,121, - 4,113, 81, 33, 68,174, 20, 50,195, 19, 51,111,171, 44, 56,178,133,178,149,181, 27, 28,132, 16,104, 52, 26,252,240,195, 15, 87, - 44, 93,229,105, 89, 43,158,231, 17, 30, 30,238,119,117, 3,149, 74,133,245,235,215,123, 92,123,209,211,146, 62, 97, 97, 97,128, -143, 69,181, 9, 33, 80,169, 84,216,190,125, 59, 56,142,243,184, 52,144,251, 62,173, 86, 11,206,199, 90, 87, 18,231,150, 45, 91, -252,114, 73,159, 58,157, 14, 0,100, 62, 11,165, 82,137,109,219,182,121,141,179,251,119,157, 99,189, 87,127,156,219,183,111,175, -179,244,151,251,146, 96,174,191,181, 90,173,179, 1,231,181,149, 22, 17,209, 53, 49, 49, 17,123,246,236,193,178,101,203, 34, 51, - 51, 51,113,234,212, 41, 16, 66, 48,115,230, 76,114,203, 45,183, 8,133,133,133,232,209,163, 7,190,251,238,187,108, 86, 90, 24, -254, 66, 8, 0,218, 1,136,198,229, 85,104,170, 1,132, 59,158, 61, 10, 0,101, 0,212,142,205, 4,160, 6, 64, 35,199,185,165, -142,186,197, 85, 32,148,160,238,226,211,157, 29,220,210, 10, 21,209, 46,255, 73,215,112,255,237,254,233,145,155, 7,128,213,171, - 87, 75, 15,179, 94,131, 7, 15,222, 92, 39,102, 1,136, 44,105,157, 50,247, 50,237, 97,129, 89,165, 86,171,253,102,215,174, 93, -234,232,232, 63,226, 96, 50,153, 80, 93, 93,141,154,154, 26, 84, 87, 87, 35, 36, 36, 4,203,150, 45, 83,247,237,219,247, 27, 66, - 72, 58,165,212,228,141, 19,192,236,139, 23, 47,198,218,108, 54, 40, 20, 10,111, 45, 97,100,100,100,224,229,151, 95,198,192,129, - 3,227,122,247,238, 61, 27,192,183, 62, 56,161,209,104, 62,218,191,127,127,140, 70,163,193,201,147, 39,145,159,159,143,231,158, -123, 46, 73, 20, 69,156, 63,127, 30,167, 78,157, 66, 65, 65, 1, 22, 46, 92, 24, 51,108,216,176,143, 0,172,240, 21,119, 7, 30, -125,230,153,103, 90, 70, 68, 68,112,239,188,243, 78, 69,109,109,237,191, 29,251, 95,155, 59,119,238,253, 61,123,246,140,121,240, -193, 7, 41, 33,100, 49,165,244, 10,225,226,198,233,201,201,178, 3, 56,230,118, 90,134,155,211, 21,231,200,132, 21, 30, 56, 9, -128,176, 1, 3, 6, 60,107, 50,153, 58,108,219,182,237,116,183,110,221,146, 1, 92,148, 50, 95, 88, 88,152,118,246,236,217,177, - 67,134, 12, 57,209,167, 79,159, 14, 3, 6, 12,120,182,164,164,100,166,227,127,234,206, 41,138,248, 37, 46,190,245,215, 91,118, - 62, 49,122,211,118,179,252,249,167,166,158,107,146,148, 82,249,203,201,114,251,145, 51, 37,168, 54,216,112,119,159,203, 11,152, -119,109,221, 4,255, 90,186, 13,143, 63,253,138,240,237,215,139, 70,156,166,208, 2, 88,237, 35, 61,175, 9,140,243, 15,177, 33, -138, 34, 4, 65,192, 29,119,220, 1, 66,200, 21,107,121, 10,130,128,157, 59,119,162, 79,159, 62, 16, 4, 1, 19, 38, 76, 8,136, -147,231,121, 12, 24, 48,192,185,142,162, 43,159,187,104,240,164, 9,220,227, 78, 41, 5,207,243,224, 56,206,235, 66,218,238,156, -254,234, 37, 41,156,190,184, 92,255,243, 23, 78,201, 77, 10, 84,100, 5,202, 41,133,147,231,121,100,103,103,227,224,193,131, 62, - 69,151, 39,125,233, 30,247, 75,151, 46,141, 75, 79, 79,223, 50,111,222,188, 72, 0, 40, 43, 43,115, 46,120, 47,147,201,112,252, -248,113,152,205,102,188,254,250,235,150,170,170,170, 7, 89, 57, 98,156, 13,201,233, 75,139, 0,232, 57,121,242,228, 78, 57, 57, - 57, 51,179,178,178,190,218,177, 99,199,151,132,144, 85,148,210, 33,210,231,228,201,147, 51,115,114,114,102, 78,154, 52,233,229, - 89,179,102, 29, 38,132,172, 2, 0,247,223,142,240, 15,113, 19,113,209, 18,143,163,204,213, 57,214,211,111,247, 79, 47,220,127, - 56, 90,131, 7, 15, 38,142, 72, 18,215, 74, 45, 80,161, 21,200,218,125, 60,207, 79,156, 57,115,102,172, 47,145, 85, 83, 83,131, - 11, 23, 46, 32, 57, 57, 25, 19, 38, 76,136,157, 55,111,222, 68, 0,239,250,160,149,203,100, 50,236,217,179, 7,197,197,197,104, -211,166, 13, 82, 83, 83,235, 28,240,251,239,191,227,199, 31,127, 68, 69, 69, 5, 58,118,236, 8, 92, 30,127,228, 17,237,218,181, -123, 61, 35, 35, 99,192,128, 1, 3,108,106,181, 26,191,252,242, 11, 58,116,232,128,165, 75,151,162, 73,147, 38,208,104, 52, 56, -113,226, 4,218,180,105,131,205,155, 55, 35, 58, 58, 26,237,219,183,183,117,236,216,113,107,121,121,249,198,188,188,188,215,189, -180,156,229, 9, 9, 9, 83, 31,126,248, 97,197,133, 11, 23,196,207, 63,255,124, 27,165,116, 27, 33,100,226, 43,175,188,242,192, -192,129, 3, 99, 14, 28, 56, 80,185,119,239,222,221,158, 68, 86,128, 78,150,205,253,161,100,183,219, 77, 6,131,193,108, 50,153, -172, 28,199,229, 17, 66,204,118,187,221, 91,159,143,106,252,248,241, 77, 75, 75, 75, 31,127,250,233,167,115, 29, 34,235, 56, 46, - 15,128, 7, 0,216,108, 54, 83, 77, 77, 77, 85, 86, 86, 86,242,152, 49, 99, 78,127,249,229,151,143,143, 31, 63,126,217,231,159, -127, 94, 3,192,224, 78,216,164, 73,210, 65,153,140,147,215, 86, 71,158, 89,190,236,147,103,126, 92, 57, 49,233,252,249,130,230, - 81,141,162,107,229,186,232, 11,203,150,124,182, 15,128,249, 66, 73, 21,126,251,189, 16,130, 32,195,209,243,149,232,121,251, 40, -225,244,201, 25,221, 37,161,197,208,160,160,210, 34,212,155, 54,109,242,233,104,237,220,185, 19,130, 32, 64,173, 86,227,131, 15, - 62,240, 73, 42, 9, 3,201, 45,242, 39,102, 56,142,243, 89,143, 72, 98, 67, 90,232,221,125,251,247,191,255,141,167,159,126,186, -206, 53, 28, 98,131,248,227,244, 22,190,228,148, 20, 20, 23, 21,213,217, 23,200,162,244,118,187, 29,130, 32,224,227,143, 63,198, -144, 33, 67,176,106,213, 42,159,159,119,220,113, 7, 56,142,163,129,164,103,118,118, 54, 44, 22,139, 51,204,199,143, 31,247,200, - 59,127,254,124,127, 78,230,157, 0,166,117,232,208, 33,180,119,239,222,216,178,101, 11, 70,140, 24, 97,178, 88, 44, 39, 29,207, -132, 22,243,230,205, 83,236,223,191, 31, 81, 81, 81,194,185,115,231, 62, 37,132,176, 1,242, 12, 13, 10, 79, 90, 68,122,230,229, -228,228,204,116, 23, 49,174,144,254, 39,132,172,154, 53,107,214, 16, 87, 81,228,250,219,197,117,114, 21,113,153,174,142,148,171, -136,242, 38,160,220,158,183,174,199,151,120, 20, 90,142,136,245,114,117,129,164,202,215,159,200,242,214,114,116, 71, 88, 88,216, -160,187,239,190,219, 41,114,140, 70,163, 83, 96, 73, 34, 75,250,125,226,196, 9,116,234,212, 73, 30, 22, 22, 54,200,143,208,146, - 68, 28, 26, 55,110,140,210,210, 82, 28, 58,116, 8,201,201,201,176, 90,173, 88,187,118, 45, 42, 43, 43, 33, 8, 2,228,114, 57, - 44, 22,223, 67, 22, 50, 50, 50,238, 88,188,120,113,167, 69,139, 22, 93,146, 90,116, 75,150, 44, 1,165, 20,209,209,209,208,235, -245, 40, 42, 42,194,198,141, 27, 97,179,217,160,211,233,144,150,150,166, 24, 58,116,104,247,105,211,166, 9, 0, 94,247, 66,157, - 61, 98,196,136,176,208,208, 80, 60,245,212, 83,212, 98,177,204, 34,132,100,143, 24, 49, 98,234, 19, 79, 60, 17,149,151,151,103, -126,232,161,135,246, 88, 44,150,119, 28,149,160, 64, 41,181,250,105, 81,120,117,178,172, 86,171,148,166,185, 53, 53, 53,104,212, -168, 81,178,159, 49, 92, 0, 32,223,190,125,123, 54, 0,217,244,233,211, 85, 0,138, 92, 69,150,217,108, 70, 77, 77, 13,106,107, -107,173,149,149,149,197, 47,188,240,130,237,203, 47,191,148, 57,206, 57,234, 73,104, 1,183,155,111,185, 69,171,160, 84,246,202, -130, 5, 11,116, 3, 7, 14,228,116, 58, 29,170,171,171, 67,255,183,102,141,174,111,239,238,105, 51,115,222, 94, 23,154,216,166, -104,251, 47,103, 80, 80, 88, 9,179,213,138,180,248,176,203,126, 24, 67,131,195,241, 34,139,211,209,114, 21, 21, 91,182,108,193, -237,183,223,238, 44,235,114,185,188,142,243,229,143,147,231,121,220,126,251,237, 87, 56, 60,155, 54,109,242,232, 62,249,131,171, - 40,114, 23, 71,158, 4, 24,199,113,240,215,251, 44,185,121,158,196,150,171,171,239, 38,222,252,181,246,193,243, 60,158,120,226, - 9, 8,130,128, 23, 95,124, 17, 60,207,163,125,251,246,224,121, 30, 89, 89, 89, 16, 4, 1,125,250,244,169,119,220,119,237,218, -133, 14, 29, 58, 56,195,212,190,125,123,116,238,220, 25, 60,207,163, 71,143, 30, 16, 4, 1, 3, 6, 12, 8,132,243,229,234,234, -234,182, 58,157, 14, 39, 78,156,128, 76, 38, 3, 33,228, 20,165,180, 45, 0, 60,252,240,195,167,245,122,125, 83,163,209,136,135, - 31,126,152,152,205,230, 54, 47,190,248,226, 43, 0,152,208, 98,104, 48,184,107, 17, 23, 24, 38, 77,154,244, 50, 33,100,149,228, - 80,185, 59, 79,158,126,123,168,155, 36, 49, 36,117,237,117,118, 19,113, 82,183,223, 96, 31,231,154,221,132,149,123,215,225,222, -128, 29, 45,169,242, 13, 84,104,249,131,209,104,108, 23, 19, 19,227, 85,100,185,126,154,205,102,164,166,166,194,104, 52,182,171, -239, 67, 35, 62, 62, 30, 22,139, 5,159,124,242, 9,228,114, 57,228,242, 63,244,133,217,236,219, 44, 58,114,228, 72,238,174, 93, -187, 58,116,236,216, 49,226,187,239,190, 43,185,237,182,219,162, 7, 14, 28, 8,181, 90, 13,131,193, 0,171,213,138,174, 93,187, - 34, 35, 35, 3,249,249,249,248,223,255,254, 87,154,158,158,222,104,247,238,221, 98, 97, 97,225, 89, 31,212,253,251,246,237, 11, - 66, 8,214,172, 89, 83, 74, 41,221,171, 82,169,126,156, 49, 99, 70,132,217,108, 22,199,142, 29,123,174,188,188,252,105, 0, 22, -165, 82, 57,119,192,128, 1, 89, 50,153,236, 11,187,221,254, 65,125, 51,170,123,218,214,214,214, 66,165, 82, 5, 50,149,132, 80, - 94, 94,222, 26, 0,180, 90,109, 36,128,211,206, 28,110, 48,212, 17,195,102,179,217, 24, 25, 25,169, 5, 0,199, 57,130,151,251, - 17,173,209,104,150,159, 61,123, 38,196,117,252, 92,120,120, 56,238, 27, 51,134,235,150,157,173,104,219,174,221,128, 87,223, 91, -180,180,113, 84,168, 57,173,113, 20,172,118, 43, 54,172, 91, 43, 82,209,186,142, 85, 59,127,142,208,146,196,134,187,163, 37, 8, - 2, 54,111,222, 92,139,213, 63, 0, 0, 32, 0, 73, 68, 65, 84,124,197, 62,185, 92,142,255,252,231, 63, 1, 9, 3, 73, 84,121, -235, 58,115,235,234, 34,254, 4,140, 32, 8,144,201,100,248,248,227,143, 33,138, 34,158,121,230,153, 58,221,137,174,252, 1,118, -129, 56,207,201,152, 42, 2, 48, 35,255,125,165,243,124,247,240, 58,206, 9,200, 37,155, 55,111, 94, 64,142,214,224,193,131,253, - 10, 87,215, 30, 6,215,112, 29, 60,120,208, 35,239,130, 5, 11,252,166,167,221,110,199,234,213,171,157, 34, 85,194,148, 41, 83, - 30, 78, 76, 76,140,221,186,117, 43, 10, 11, 11, 81, 91, 91,139,154,154, 26,116,237,218, 53,173, 95,191,126,191, 20, 22, 22,230, - 29, 57,114,228,110, 86,122, 24,254, 68, 71,203, 52,107,214,172,195,179,102,205,242,232, 88,185, 59, 75,190,156, 39, 23,129,181, - 23,142, 46,195, 73,147, 38,189,140,203,195,106,246, 6,112,174,194,189,235,208,167, 17,228,166, 34,167,121,170,124, 3,233, 62, - 12,208, 78,231, 9, 33, 48, 26,141, 30, 5,150,171, 56,176, 88, 44, 40, 47, 47,135,221,110,191,234,185,190, 60,181,100,253, 9, -173, 67,135, 14,253,243,129, 7, 30,184, 16, 22, 22,214,182,164,164,164, 88, 20,197, 62, 59,119,238,140,230,121, 30,161,161,161, - 8, 13, 13,197,143, 63,254, 8,141, 70,131, 39,158,120,162,216,110,183,111, 9, 9, 9,137, 50, 24, 12,191, 22, 22, 22,190,234, - 85,193, 8,194,128, 30, 61,122, 96,255,254,253,184,116,233,210,122, 66, 72,251, 7, 31,124,240,246,164,164, 36, 50, 99,198, 12, -227,239,191,255,254, 1,128, 98,173, 86,187,120,241,226,197,189, 59,118,236, 24, 50,118,236, 88, 16, 66, 22, 80, 74,141,129,198, -185,182,182,182,142,192,170,170,170, 66,117,117, 53,180, 90,173, 45,192, 52, 19,112,121,172,149, 52,222,202,121,111, 28,110,150, -116,127, 40,207,243,244,242, 33, 84,240,198,167,213,106,167, 47, 90,180, 72,237,254,146,130,221,110, 71, 81, 81, 17, 66, 67, 67, - 49,229,213, 87,229,111, 60,247, 96, 7,153, 46,118, 39,199, 17,152, 45,180,130,138,230,181,181, 69,247,108,101,213,206,159, 3, - 73, 24,220,117,215, 93, 87,116, 23,202,229,114,172, 95,191, 30,195,134, 13,115, 54, 92, 58,118,236,232,183,113, 37, 9,131, 59, -239,188,211,233, 12,173, 93,187,214, 99,183,159,228, 72, 5, 34, 8,165, 99,159,124,242, 73,240, 60,143,127,253,235, 95,120,246, -217,103,193,113, 28,222,127,255,125,112, 28,135,215, 94,123, 45, 96,145,233, 42, 96,242,222,190,252,153,248,108, 21,202,230,199, - 2, 0, 66, 66, 67,165, 8,213,171,238,225,121,222,233,100,181,107,215, 14,130, 32, 32, 43, 43, 11, 60,207, 59,157,172, 65,131, - 6,185,166, 35, 13,132,147,231,121,156, 60,121,210, 25,230,172,172,172, 58, 78, 22,207,243, 24, 60,120,112, 32,193,156, 25, 30, - 30, 62, 45, 35, 35,163,213,236,217,179, 5,153, 76,134,190,125,251,182,120,232,161,135,206, 70, 69, 69, 69, 77,159, 62, 93,227, -225, 28, 53,128,182,173, 90,181,210,178, 82,195,208,128,142,214, 52, 15,127, 69,184,142,185,170, 71, 67,114,149,235,241, 18,135, -187, 56,114, 56,100, 91,252,113,121, 58,215, 31,120, 73, 65,250,178,212, 3, 17, 90, 14,219,217,231,197, 52, 26,205,111,197,197, -197, 89,106,181,186,142,200,242, 36,184,100, 50, 25, 10, 11, 11,161,209,104,126, 11,230, 77,244,215,117,232, 16, 53,207,185, 36, -108,191, 65,131, 6,125,190,126,253,250,248, 13, 27, 54, 96,247,238,221,136,142,142,198,188,121,243, 46, 22, 21, 21,253,147, 82, -186, 62,144,235, 54,109,218,180,181, 78,167,195,246,237,219, 1, 96, 51,128, 7, 31,127,252,113, 98,181, 90, 49,127,254,252, 90, - 0,107,194,195,195, 87, 47, 91,182,172, 67,219,182,109, 21, 27, 54,108,168,218,189,123,247, 79, 1,138, 44,187, 40,138, 87, 8, - 44,215, 52, 13, 9, 9, 9,196,209,178,134,133,133, 29,170,170,170, 26,101, 48, 24,170,148, 74,101, 72, 85, 85,149,201, 85, 96, - 73,252, 60,207, 11, 39, 79,158,188, 0, 32, 45, 44, 44,236, 16, 92,186, 24,235,100, 48,158,239,219,183,111, 95,222,253, 30, 20, - 21, 21,161,176,176, 16, 22,139, 5, 29, 59,118, 36, 50, 98,149,149,159,251,245, 97, 86,205,252, 37,142, 22,149,202,186,244,150, -160,167, 55, 13,215,174, 93,235,252,205,113, 28, 28,175,251,251, 21, 69,235,215,175,247, 57, 96,221,173,235,208,175, 53, 46, 29, -255,225,135, 31, 94, 94,222,194,225,100,113, 28,135, 73,147, 38, 65,169, 84, 98,198,140, 25,152, 52,105, 18,120,158,247,219,117, -232, 42, 96, 82, 94,212,187, 54,142, 46, 23, 10,199,120, 40, 66,136,171,216, 34,129,138, 55, 95,110, 94, 32, 61, 1,174,156,210, -121, 42,149,202,235, 64,120, 55, 78,226, 35,222, 63, 16, 66,206,196,199,199,111,207,202,202, 10,219,183,111, 31,222,127,255,125, -185,201,100,106,178, 97,195, 6,231,117, 61,165, 87,109,109,173,154,149, 28,134,134,112,179,124,252, 93,226, 54,190,138,184,118, -227,249,248,116, 63, 30, 46,251, 92,121, 75,220,158, 99,174,251,221,197,149,251, 53, 92,143, 41,241,234,104,249,171, 44,252, 9, -174, 64, 28, 45,189, 94,255,211,154, 53,107, 58,143, 25, 51,134,247,213,109, 88, 91, 91,139,216,216, 88, 28, 62,124,216,166,215, -235,127, 10,192, 41, 11,154,208,242, 80,169,108,136,139,139,147, 89,173, 86, 52,111,222, 28, 9, 9, 9, 48, 26,141,168,168,168, -144, 5, 42,178, 8, 33,242, 78,157, 58,201, 0,160,162,162, 2,184,252,170,105,139,244,244,116,236,223,191, 31,229,229,229,223, - 2, 24, 56,109,218,180,142, 93,187,118,149, 47, 93,186, 84,255,232,163,143,126,107,181, 90, 95, 15,208,141, 48,219,108,182, 84, -142,227, 44, 21, 21, 21, 5,174,233, 25, 27, 27, 27,169,213,106, 73, 81, 81,145, 53, 16,161,213,182,109,219, 61,231,206,157,195, -244,233,211, 75,102,206,156,153, 94, 93, 93,125,169,178,178,210,230, 42,182,140, 70, 35,215,168, 81, 35,229,252,249,243,213, 0, -208,182,109,219, 61,222,132, 86,109,109,109,146, 70,243, 71,195,216,100, 50,161,176,176, 16,133,133,133, 40, 42, 42, 66,117,117, - 53,210,210,210,160,215,235,147, 89, 53,243,151, 9,173, 58,221,103,174,229,219,245, 65, 94,159,178,238, 42, 96,238,186,235, 46, -231,216, 46,201, 33,147,182,229,203,151,187, 15, 48, 15, 72,104,125,248,225,135,120,242,201, 39,161, 82,169, 48,123,246,236, 58, - 93,135,238,226, 64, 20, 69, 18, 72,220, 83, 95, 50,160,112,110, 36, 4, 65, 64,212,163, 69,117,186,232, 60, 8,142,128,194, 57, -115,230,204,160,116, 29,186,114, 38, 39, 95, 46, 42, 31,127,252, 49, 70,141, 26,133,173, 91,183, 94,117,215, 97,102,102,230,146, - 85,171, 86,133, 29, 57,114, 4, 85, 85, 85, 40, 41, 41,129,201,100, 66,126,126,190,215, 94, 1, 71, 93,174, 98, 37,135,225, 79, -198,222, 63,153, 55,104,215,227,253, 60,192, 3, 22, 90,129, 56, 90, 38,147,105,246, 83, 79, 61,245,120,191,126,253, 34, 67, 66, - 66,112,225,194,133, 43, 68, 86, 77, 77, 13,116, 58, 29, 12, 6, 3, 86,174, 92, 89,101, 50,153,102,251, 19, 7, 86,171, 21, 49, - 49, 49, 40, 45, 45,133,232,101,252, 52,199,113, 80,171,213,168,169,169,129, 55, 81,224,235,129, 97,177, 88, 96,181, 90, 97,181, - 90, 97,177, 88, 80,207,233,157, 52,210,196,175,181,181,181, 0, 80,219,184,113,227,230, 42,149, 10,185,185,185,192,229, 55,251, -250,221,126,251,237, 66, 89, 89, 25,125,232,161,135,182, 81, 74, 31,246, 51, 59,190,121,203,150, 45,169, 0,160, 86,171, 79, 0, - 64,126,126,190,181,162,162,162,142, 83,168,209,104,232,176, 97,195,226, 41,165,216,178,101, 75,170, 92, 46,167,240, 50,231, 21, - 0,227,138, 21, 43,142,132,133,133,125,153,147,147, 51,102,200,144, 33,135, 91,183,110,157, 90, 91, 91, 91,108, 48, 24, 12, 70, -163,145,202,100, 50,121, 68, 68,132,106,221,186,117,167,119,238,220,217, 47, 52, 52,244,203, 21, 43, 86, 28, 1,224,209,121,211, -106,181,249,122,189, 62, 69,186,167,174, 34,171,176,176, 16,148, 82,156, 57,115, 6, 26,141,230, 28,171, 71,254, 58, 72,141, 42, -119,231,197,125, 95,160, 34,203, 85, 24,172, 91,183,206,231, 28, 90,129,114,186,138,162,103,159,125, 22,115,231,206,189,194,209, -154, 49, 99, 6, 0,224,213, 87, 95, 13,120,140,150,228, 94, 21,206,141, 68,220,147,229,117,194, 14, 0, 68, 10, 95, 61,167,116, -227,121, 30,211,167, 79,191, 98,144,186,107,215, 94,128, 93,124,117,194, 89, 92, 92, 12,158,231, 17, 25, 25,137,251,238,187, 15, - 3, 6, 12,112,118, 65,214,151,247,216,177, 99,219, 95,122,233,165, 54,153,153,153,120,243,205, 55,203,195,195,195, 67,254,239, -255,254,143,175,168,168, 32,190, 28, 45, 38,180, 24, 24,130, 32,180,164, 2, 22,232, 91,135,158, 42, 75, 66, 72, 63,215,185, 54, - 40,165,149,132,144,251,250,247,239,255,221,215, 95,127,173,110,218,180, 41,142, 29, 59,134,242,242,114,152,205,102,200,229,114, -196,199,199,163,162,162, 2,159,125,246,153, 65,175,215,223, 71, 41,173,244,197, 9,224,149, 78,157, 58,125,244,238,187,239,170, -218,183,111,143,242,242,114,212,212,212,212,153,197, 58, 52, 52, 20,106,181, 26,123,246,236,193,218,181,107, 13, 0, 94,241,195, -233, 73,205,193, 98,177, 56, 5,151, 63,161,229,198,169,149, 92, 29,189, 94, 15, 0,214,164,164,164, 56, 0, 56,115,230, 12, 0, -228,165,165,165, 77,107,218,180, 41, 89,188,120, 49,165,148,174,245, 36,178,220, 56,203,123,244,232,113, 9, 64,156,217,108,150, - 3, 64,101,101,165,165, 81,163, 70, 49, 74,165, 82, 84,171,213,162, 74,165, 18, 47, 92,184, 96,179,217,108,114, 0,232,209,163, -135, 25, 64, 33, 92,198,130,184,113,138, 0,170, 22, 44, 88, 48,109,236,216,177, 89,217,217,217,153,143, 61,246,216,161,135, 30, -122,136, 75, 72, 72,136,168,174,174, 54,158, 58,117,234,210,123,239,189, 87,189,107,215,174,126,130, 32,156, 93,176, 96,193, 52, - 0, 85,142,115,175,224,180,217,108, 63,109,216,176,225,159, 67,134, 12,225, 11, 10, 10, 80, 84, 84,228, 20, 89, 69, 69, 69,200, -200,200,192,206,157, 59,237, 22,139,101, 67, 61,210, 51, 88, 78, 14,227,188,220, 8,161, 82, 89,247, 38,176,164,198, 84,160,156, -174,162,104,212,168, 81,117, 92, 44,185, 92,142,111,190,249,198, 99,189,225, 97,134,243,126,238,243, 73, 73, 97,122,233,165,151, -234,136,182, 41, 83,166,120, 13,154,191,244,148,120, 42, 63, 78,168,251,214,161,151,114,238, 43,156, 82,221, 41, 8, 2,166, 76, -153, 18,176,163, 5,183, 49, 90,158, 56,165,184,223,118,219,109,208,235,245, 78, 33,235,205,209,242,151,158,118,187,253,201,185, -115,231,210,208,208,208, 91,171,170,170,254,113,238,220,185,133,122,189,190, 75,101,101,165, 79, 71,203,100, 50, 41, 89, 57, 98, -156, 13, 49,151,214, 77, 37,180, 28, 15, 73, 36, 37, 37,213, 89, 59,139,227,184, 58, 91,125,198, 25, 56, 10,238, 58, 66,200,240, -110,221,186,125,241,228,147, 79,134,180,111,223, 94, 72, 73, 73, 65,109,109, 45,114,115,115,113,248,240, 97,219,138, 21, 43,170, -244,122,253, 63, 40,165,235, 2,224, 91, 68, 8, 89, 59,112,224,192,215,186,118,237,250,200,212,169, 83,101, 45, 90,180, 64,101, -101, 37, 34, 34, 34, 16, 19, 19,131,227,199,143, 99,229,202,149,246,210,210,210,143, 0,188, 65, 41, 45,169,111,131,223, 98,177, -224,222,123,239,133, 40,138,248,224,131, 15, 64, 8,169, 79,243,214, 98,177, 88, 40, 0, 82, 90, 90, 10, 0,122,199,236,210, 56, -117,234, 20, 0,156, 77, 77, 77, 13, 1,128, 13, 27, 54, 16, 0,129, 46,233, 67, 93,157,173,140,140,140, 92,247,202, 81,114,178, - 36, 23, 12,254, 23,130, 54,142, 30, 61,186, 88,175,215, 15,124,246,217,103, 95,251,240,195, 15,199,124,248,225,135, 87, 28, 20, - 26, 26,250,229,251,239,191,255,198,232,209,163,139,189,185, 89, 14, 7,239,213,113,227,198,141,254,237,183,223, 66, 84, 42, 21, -106,107,107, 81, 86, 86, 6,139,197,130,180,180, 52, 20, 23, 23, 99,209,162, 69,213, 6,131,225,117, 86, 28,255, 26,184, 10, 3, -111,174,150, 63,145,229,203,213,249,225,135, 31, 60,206, 81, 85, 95, 78,119,177, 17,232,220, 86,190, 26, 69,210,180, 52,158,166, -140,168, 79,189,230,137,151,231,121,188,243,206, 59,206, 73, 91, 61, 57, 89,245,113,180, 36,206,200,200,200,203, 54,185, 99,201, -164,193,131, 7, 95, 53,175, 99, 57,178, 39, 92,174, 49,243,133, 23, 94,152,150,145,145,209, 2,128,210, 53, 13,216, 34, 13, 12, - 12, 65, 22, 90,118,187, 61,191,101,203,150,117, 42, 56,127,139,153, 90,173,214,252, 0, 11,247, 90, 66, 72,218,251,239,191,255, -148, 86,171,237,167,215,235,219, 56, 42,142,223,106,107,107, 55,152, 76,166, 57,245, 89, 4,218, 33,156, 38, 18, 66, 62, 24, 56, -112,224,140, 62,125,250,140,124,238,185,231, 8,165, 20,243,231,207,167,191,255,254,251,114, 0,175, 80, 74,127,191,154, 68,138, -140,140, 60,242,217,103,159,197,126,247,221,119,176, 90,173,152, 51,103, 14, 66, 66, 66,142,212, 35,124,197, 60,207,127,158,157, -157,125,255,206,157, 59, 23, 81, 74,127, 85, 40, 20, 11,187,119,239, 62,110,231,206,157, 75, 40,165,135,121,158, 95,216,181,107, -215,113,123,247,238, 93, 70, 41, 61, 88,143,224, 57,157, 45,155,205,115, 79,163, 39, 39,203, 15,170, 30,120,224, 1,203, 3, 15, - 60,240,220,232,209,163, 63,217,187,119,111,151,138,138,138, 54, 0, 16, 30, 30,254, 91,231,206,157,247,124,253,245,215,199, 29, - 78,150,209,223,189, 33,132, 12,107,211,166,205,183,111,190,249,166, 54, 51, 51,147,111,222,188, 57,242,242,242,112,232,208, 33, -219,167,159,126, 90, 99, 48, 24,238,162,148, 94, 98,197,241,175, 19, 90,148, 82,132,135,135,215,105, 68, 73,175,252,215,183,187, -208,245,193, 44, 45,213,227,206,235,141,211,215,180, 9, 18,116, 58,157,115,114,211, 64,134, 44,136,162,239,249,216, 40,165, 78, - 78,105, 11, 64,100,249,125, 67,208,177, 4, 78,192,156,129, 76,239,160,213,106, 97,181, 90,157,188, 1,188,249, 73,234,121,207, -126, 0,240, 67,243,230,205, 79, 1,104,198,196, 21, 3, 67, 3, 10,173,242,242,242, 78, 13,121, 97,135,144,122,195,177, 5,139, -243,119, 0,163, 9, 33,239,254,252,243,207, 82, 63,194,116,127,235, 37,250,195,177, 99,199,134, 8,130,240,159, 47,191,252,178, - 43,165, 20, 97, 97, 97,187,242,242,242,254,175, 62, 28, 54,155,237, 1, 66,200,227,210, 91,132,102,179,249, 1, 66,200, 83,148, -210, 26,151,255,157,191,235, 27,117, 0, 38, 74,105, 99, 47,255,155,234, 33,178,156,206, 22, 0,243,215, 95,127, 93, 3,224, 23, -252, 49, 79,150,213,177, 25,225,210, 93,232,231,190,108, 36,132, 52,159, 50,101,202, 76,153, 76,214,183,182,182, 54, 65,171,213, -158,183,217,108, 63,233,245,250, 87, 40,165,101,172, 40,254,117, 48,155,205, 5, 45, 91,182,228, 61, 53,160,124, 61,200,125, 53, -172,236,118,123,126,122,122,186,223,198,153, 7,206, 2, 31,249,232,108, 90, 90, 26, 23, 40,151, 4,139,197, 82,236, 43,156,105, -105,105,168, 47,167,191,184,167,166,166,122,140,187, 31, 65, 88,224,163,254,184, 42, 78, 95,233,233, 11, 6,131,225, 82,116,116, -116,141,209,104, 20, 76, 38,147, 96,179,217,234,216,143,106,181,186,132,149, 28, 6,134,107, 20, 90,127,103, 56,132,213,157, 65, -228, 51, 1,184, 63, 8, 60, 70,183,223, 53,190,126,215, 19, 13,225, 8,137, 0,244, 65, 74,195, 82, 0, 15,177, 34,119,253,161, -180,180,244,214, 96,115,150,149,149, 5,189,161, 86, 82, 82,146,213, 0,113,239,116,179,114,250, 66, 65, 65,193,173,172,100, 48, - 48, 4, 7, 28, 75, 2, 6, 6, 6, 6, 6, 6, 6,134,134, 1, 1,208,207,211, 31,245,121,155,128, 16,210,175,190, 23,246,199, -207, 56, 25, 39,227,100,156,140,147,113, 50,206, 27,143,211, 31,247, 13,247, 54, 35,165,180,193, 54, 0,253, 24, 39,227,100,156, -140,147,113, 50, 78,198,201, 56,111,214,141,117, 29, 50, 48, 48, 48, 48, 48, 48, 48, 52, 16,152,208, 98, 96, 96, 96, 96, 96, 96, - 96, 96, 66,139,129,129,225,239, 8, 66, 72,139, 38, 77,154, 28,109,217,178,101, 1, 33,100,124, 3, 95,235,190,172,172,172, 50, -149, 74,181,142, 16,210,130,165, 62, 3, 3, 3, 19, 90, 12, 12, 12, 55,180,200,106,211,166,205,182, 99,199,142,101,108,216,176, -161,113, 66, 66,194,219, 13,121,189, 78,157, 58,189,181,117,235,214,200, 53,107,214,244,143,139,139,219,114, 53, 98,139, 16,210, - 34, 57, 57,249,104,203,150, 45,243, 9, 33,247, 5, 57, 61,198,103,103,103,151, 43,149,202,181, 76, 8, 50,220, 4,229,191, 53, - 33,164, 13, 19, 90, 12, 12, 12, 12, 13, 40,178,118,236,216, 17,101, 52, 26,113,236,216, 49,148,148,148, 28,108,200,107,158, 56, -113,226,210,142, 29, 59,144,152,152,136, 37, 75,150, 68,167,166,166,110,173,143,160,145,194,124,244,232,209,140, 13, 27, 54, 36, -196,196,196,188, 23,204,240,117,233,210,101,198,214,173, 91, 35,214,173, 91, 55, 32, 58, 58,122, 11, 19, 91, 12, 55, 96,185, 87, - 18, 66,238,231, 56,110, 79,235,214,173,127,203,204,204,252,149,227,184,157,132,144, 81,132, 16,254,166, 76, 19,105,137,133,213, -171, 87,111, 6,128,193,131, 7,223,198,178, 10, 3, 3,195, 53, 86,182,153,153,153,153,187,118,237,218,165, 49, 24, 12, 88,182, -108, 25,166, 78,157,106, 45, 47, 47,223, 10,160,214,195, 41,123, 1,252, 59,144,165,183, 8, 33,161, 0, 30, 7,208,217,195,223, -218,200,200,200, 30,211,166, 77, 19,110,191,253,118, 24,141, 70,140, 24, 49,194,120,226,196,137,246,148,210, 19,129, 10, 67,131, -193,128,125,251,246,225,174,187,238, 90,103,181, 90, 7, 6, 43, 93,194,194,194, 14,255,240,195, 15,183, 52,110,220, 24,103,206, -156,193,184,113,227, 74,138,138,138,122,250, 11, 27, 3,195,223,160,204,167, 0,120, 68,167,211, 61,216,171, 87,175,136,187,238, -186, 11, 81, 81, 81,176,217,108, 56,127,254, 60, 86,173, 90,133, 29, 59,118, 92, 48,155,205,115, 1,124, 76, 41,173,240,196,115, - 35,106, 17, 66, 41,197,234,213,171, 41,128, 94,142,200,109,102, 89,134,129,129,225, 26, 43,221, 29,122,189, 62, 75,175,215,163, -186,186, 26, 73, 73, 73, 16, 4,193,227,177,197,197,197,216,190,125, 59,158,120,226,137, 35,133,133,133, 61,125,173,123, 73, 8, -137,232,208,161,195,142,141, 27, 55,182, 8, 9, 9,113,238, 23, 69, 17, 22,139, 5, 86,171, 21, 22,139, 5, 38,147, 9, 38,147, - 9, 10,133, 2,106,181, 26,145,145,145,135, 40,165,109, 2, 21, 89, 7, 14, 28,192,216,177, 99, 75,202,202,202,130, 42,130, 8, - 33, 45, 98, 98, 98,182, 44, 90,180, 40, 58, 45, 45, 13,231,206,157,195,132, 9, 19, 74,207,158, 61,219,131,137, 45,134,191,113, -121,159, 52,124,248,240, 25,177,177,177, 92,235,214,173, 17, 31, 31, 15,147,201, 4,131,193, 0, 74, 41,120,158, 7,165, 20,149, -149,149,216,178,101, 11, 54,110,220,104,186,116,233,210,103, 0,230, 80, 74, 79,186,136,172, 27, 82,139, 56,133,214,224,193,131, - 9,203, 46, 12, 12, 12, 65,170,120,127,171,172,172,108,109, 50,153, 80, 91, 91, 27,208, 57,103,206,156,193,248,241,227,143, 20, - 22, 22,118,243,228,108, 17, 66, 66, 59,116,232,176,123,203,150, 45, 45,140, 70, 35,170,170,252,175, 59,175, 80, 40,160, 82,169, - 16, 21, 21,181,147, 82,154,237,173, 37,222,186,117,235,125, 59,119,238,140, 52, 24, 12, 56,120,240, 32,238,187,239, 62, 75,121, -121,249, 54,120,118,223, 0,160, 28,151,215, 81, 61,235,129, 47, 25,192, 83, 0, 82,188,156,171,141,142,142,238,190,120,241, 98, -121,211,166, 77,161,215,235, 49,106,212,168,242, 19, 39, 78,116,166,148,230,178,220,195,240, 55, 44,239, 39,142, 29, 59,150,110, -183,219, 81, 90, 90, 10,147,201, 4,189, 94,239, 20, 90, 50,153, 12,148, 82,216,108, 54,103,195,104,255,254,253,216,176, 97, 3, - 61,115,230,204, 84, 74,233,116, 73,104,221,136, 90,132,103, 89,132,129,129,161, 1, 48,186, 75,151, 46, 7,255,247,191,255,169, - 20, 10, 5, 86,174, 92,233,181,235, 48, 54, 54, 54,115,225,194,133,169,105,105,105,152, 55,111,222, 45, 35, 70,140,120, 28,192, - 76, 15,156,143,111,220,184,177,133,209,104,196,193,131, 7, 49,110,220,184,220,162,162,162,195,238, 34, 38, 53, 53,181,199,123, -239,189, 39,116,236,216, 17, 85, 85, 85,232,223,191,191, 30,192, 35, 62,194, 58,113,211,166, 77,145, 6,131, 1,213,213,213,232, -213,171, 23,202,202,202,228, 0,250,120, 59,193, 96, 48, 32, 37, 37,165, 5,128, 43,196, 91, 84, 84,212,127,207,157, 59,215, 91, -173, 86,251, 76, 32,139,197,130,252,252,124,132,135,135, 99,213,170, 85,145,205,154, 53,123, 21,192, 3, 44,235, 48,252, 29, 97, - 54,155,241,213, 87, 95,161, 67,135, 14,104,213,170, 21,106,106,106,156,162,203,108, 54, 59, 69, 22, 0,112, 28,135,206,157, 59, - 35, 61, 61,157, 60,243,204, 51,247, 1,152,126, 35,167,141, 36,180,166,177, 49, 90, 12, 12, 12,193, 2,165,244, 4, 33,164,125, -191,126,253,182, 46, 95,190,188,209,160, 65,131,208,172, 89, 51,225,238,187,239,142,174,173,173,237,235,214, 26,142, 24, 55,110, -220,190,243,231,207,167, 58,118,117,246, 66,219, 57, 36, 36, 68, 26,219,148, 91, 84, 84,212,201,189,155, 81,169, 84,174,253,229, -151, 95, 4,133, 66,129,189,123,247, 98,252,248,241,165,185,185,185,254,186,229,194,205,102, 51,100, 50, 25, 0, 32, 63, 63,223, -111,252,206,157, 59, 7, 81, 20, 77,158,254,227, 56, 78,185,127,255,126, 52,110,220,216, 39, 7,199,113,144,203,229,174,187, 42, - 88,206, 97,248,155,194,106, 54,155,209,169, 83, 39,228,230,230, 98,255,254,253, 78,193, 85, 90, 90,138, 11, 23, 46,212, 57,120, -207,158, 61, 56,112,224, 0,122,246,236,233,206,115, 67,106, 17,222, 17,161,215, 87,175, 94,205, 4, 22, 3, 3, 67,176,197, 86, -143, 59,239,188,115,203,162, 69,139,162,147,146,146, 16, 18, 18, 18,234,225,184, 75,132,144,195,130, 32,164, 6,202, 93, 84, 84, -116,216,211, 88,174,184,184,184,246,102,179, 25, 7, 14, 28,192,125,247,221, 87,226, 24,243,229,111,236,211,155,125,251,246,189, -115,221,186,117,145, 42,149, 10,135, 15, 31, 14,164,235, 48, 15,192, 28, 79,127,148,148,148,220,215,179,103,207, 41, 0, 34,189, -156,171, 77, 79, 79,239,190,111,223, 62, 57, 33, 4,121,121,121, 24, 53,106, 84, 57,128,127,177, 92,195,240, 55,197,107,195,135, - 15,255,244,241,199, 31, 15,235,218,181, 43,242,243,243,157,130,171,125,251,246,104,219,182, 45,126,255,253,119,172, 93,187, 22, - 7, 14, 28,128, 82,169, 68,179,102,205, 80,243,238,123,192,123,176, 74, 36, 55,170, 22,113,190,117,200,192,192,192,208, 32,149, - 12, 33, 45,228,114,249, 7,209,209,209,237, 10, 10, 10,158,165,148, 46,113,251, 63, 98,228,200,145,135,151, 46, 93, 26,159,151, -151,135,166, 77,155,174,164,148, 14,245,192,179,130, 82,122,215,153, 51,103,208,173, 91, 55,143,142, 22, 33,100,124, 92, 92,220, - 27,213,213,213,149,122,189,126, 84,160, 3,204, 9, 33, 45,154, 55,111,190,117,229,202,149,141, 52, 26, 13,142, 30, 61,218, 96, -131,225, 91,182,108,185,109,207,158, 61, 81,130, 32, 96,239,222,189, 24, 55,110, 28, 27, 12,207,112, 35,148,243, 16, 0, 47,164, -165,165, 61,255,232,163,143, 42,111,185,229, 22,228,231,231,163,164,164, 4,151, 46, 93,194,174, 93,187, 0, 0, 9, 9, 9, 72, - 72, 72,192,241,227,199,177,125,251,246,170,154,154,154, 7, 40,165,223,221,208,105,195,132, 22, 3, 3,195,159, 92, 33, 39,195, -101,176,248,200,145, 35, 59, 45, 94,188, 56,190,172,172, 12,187,119,239,198,136, 17, 35, 94,161,148,206,244,112,222,203,133,133, -133, 51, 0,224,208,161, 67,238, 99,180,188, 14, 78,175,143, 8, 74, 73, 73,217,186,108,217,178, 70, 81, 81, 81, 56,118,236, 24, - 70,141, 26,117,184,182,182,182,117,176,226,174,209,104,214, 21, 22, 22,246,151,203,229,216,185,115, 39,238,187,239, 62, 54,189, - 3,195,141, 86,190, 99, 0,188,122,203, 45,183, 60,242,224,131, 15,242,201,201,201, 40, 40, 40,192,207, 63,255,140,102,205,154, -225,252,249,243,216,184,113,163,185,164,164,228, 3, 0, 57,148,210,202, 27, 62, 81, 26,114,197,106,176,149,205, 25, 39,227,100, -156, 87, 30,183,246,200,145, 35, 84,130,221,110,167, 5, 5, 5,116,221,186,117, 52, 46, 46,238, 48,128, 80, 79,156, 0, 66, 91, -181,106,117,236,248,241,227,244,220,185,115,212, 98,177, 56, 57,142, 29, 59, 70, 1,108,190,214,112, 2,104,145,144,144, 80,188, -105,211, 38,122,252,248,113, 26, 23, 23,119, 62,152,113, 79, 73, 73, 41, 46, 41, 41,161, 63,255,252, 51,141,142,142, 46, 6,208, -130,229, 37,198,121, 35,114, 58, 26, 82,139, 59,118,236,104,159, 59,119, 46,125,228,145, 71,104,114,114,178, 29,192,127, 1, 36, - 52,164,246,184,222, 54,246,214, 33, 3, 3,195,159, 13,229,174, 93,187,160, 84, 42,157, 59,126,253,245, 87,215,121,180,170,188, - 52, 10,171, 8, 33,221, 6, 13, 26,180,117,238,220,185,173,172, 86,231,208, 14,108,218,180, 9, 0, 76, 65,104,120,158, 32,132, -244, 28, 56,112,224,156,168,168,168,118,133,133,133,175, 5, 51,226,121,121,121,207,182,105,211,102,102,117,117,117, 85,125,186, - 54, 25, 24,254,134, 38, 78, 30,128,177,132,144,183,247,239,223,255, 10, 0, 10,224, 77, 74,233,209,155, 45, 45,152,208, 98, 96, - 96,248,179, 49,254,161,135, 30,114, 31, 44, 30,208,204,240,142,129,243,217,131, 7, 15,118,159, 25,222,235,224,244,171, 17, 91, - 0, 6, 52,208,195,103, 9,128, 37, 44, 11, 48,220, 68,130,235, 48,128,123,110,230, 52, 96, 66,139,129,129,225,207,174,120,207, - 2,152,112, 13,231, 87,193,243, 60, 91, 12, 12, 12, 12,215, 29,216,162,210, 12, 12, 12, 12, 12, 12, 12, 12, 76,104, 49, 48, 48, - 48, 48, 48, 48, 48,252,189, 64, 0,244,243,244, 7,165,116, 67,192, 36,132,244,171,239,133,253,241, 51, 78,198,201, 56, 25, 39, -227,100,156,140,243,198,227,244,199, 93, 31,253,241,183, 64,128,175,113, 18,246,234, 43,227,100,156,140,147,113, 50,206, 64, 56, - 29,141,120,130,203,189, 38,156,244,251, 58,159,142,128, 92,175,113,191, 89, 56,111,202,233, 29, 8, 33,206,196, 34,132,136, 0, - 68, 26,132, 25, 78, 9, 33,210,141, 8, 10, 31, 67, 3, 88,157,151,239, 17,249, 67,143,179,251,196,192,192, 80,175,186, 67,230, -242,176,181, 3,176, 19, 66,112,189,213, 37,193,124,206, 53, 68,220,111,102,206, 27, 5,188,175, 4,147,201,100,235, 26, 53,106, -212,187,180,180, 84,116,236,135, 66,161, 0,199,113, 16, 4,193, 80, 93, 93, 29,122, 21, 55,227,191,177,177,177,227,203,202,202, - 68,142,227,160, 82,169, 64, 8,113,114, 86, 84, 84,132,254,213,137,146,146,146,114,201, 96, 48,232,220,247,171, 84, 42,227,217, -179,103, 67,110,134,138, 82, 46,151, 15,143,140,140, 12, 47, 41, 41,161,210,226,183, 50,153, 76, 90, 8,215, 86, 81, 81,241,121, -160,124,145,145,145,123, 34, 35, 35,195,165,243, 9, 33, 40, 43, 43,171, 40, 42, 42,234, 2, 0,106,181,122,187, 86,171,141,226, -121, 30, 50,153, 12, 50,153, 12,122,189,190,172,180,180,180, 27,123,108,253, 61,177,124,249,114,217,192,132, 9,205,120,106,104, -203,113, 52, 76, 20, 73,165,141,168,127, 93, 91,240,223,211,129,156, 63,114,228, 72, 59, 75,197, 63, 15, 74,165,242,131,216,216, -216, 7,107,106,106,244,132, 16, 74, 8,193,229,199, 0,174,248,180,219,237,249,165,165,165,157,252, 60,108, 5,133, 66,241,126, - 92, 92,220, 56,189, 94,175,119,240, 81, 66, 8,226,227,227,235,240, 1,128,213,106,205, 47, 41, 41,233, 20, 72, 88, 99, 98, 98, - 22,168,213,234,127,232,245,250, 90,135, 48,114,237,161,113,125,152,255, 94, 82, 82,210,195,159, 48, 80, 40, 20,115, 98, 99, 99, -255,233,136, 59, 8, 33, 52, 58, 58,250,154,227, 30, 27, 27, 59,174,182,182,182, 78,220, 99, 98, 98, 60,114,122,139,187, 39, 78, -215,112, 18, 66, 16, 29, 29,125,205,225,188, 30, 57,111,120,161, 5,128, 35,132,172,232,214,173, 91,175,205,155, 55,115,199,142, - 29,227, 50, 50, 50, 96,183,219, 33,138,151,243,117, 98, 98,162,230, 42, 30,224, 11,123,244,232,113,239,150, 45, 91,184, 21, 43, - 86,112,157, 59,119, 6, 33, 4,118,187, 29,118,187, 29,173, 91,183, 86, 95,163, 64,208,241, 60,255,140, 66,161,184,205,102,179, -181, 2, 0, 65, 16,142,154, 76,166,205, 54,155,109, 54,165,180, 38, 16, 30,139,197,162, 41, 46, 46,190, 34,109,210,210,210, 20, - 87, 27,182,208,208,208, 29, 28,199,165, 57, 19,216, 33, 56, 60, 21,102,233,147, 82,122,166,164,164, 36,219, 27,103, 68, 68,132, -147,211, 27,135,251, 62, 81, 20,207, 20, 23, 23,103,251, 17, 89, 35,122,244,232, 17,182, 97,195, 6,114,254,252,121,162, 86,171, - 33,138, 34,236,118, 59,172, 86, 43,110,185,229,150,122, 77, 11, 18, 30, 30, 30, 58,105,210,164,102,119,220,113, 7,190,249,230, - 27,220,127,255,253,232,222,189,251, 73,233,127,173, 86, 27,117,228,200,145,244,200,200, 72,232,245,122, 84, 86, 86,162,127,255, -254,127,251,194,213,181, 67,210,155,132, 35,206,185,162,168,205, 94,190,235,151,130, 87,175,149, 55, 60, 60,252,128, 66,161,136, -149,238, 43,199,113, 30,239,181,235, 62,163,209, 88, 84, 90, 90,218,193, 79,249, 73, 1,112,167, 76, 38,107,206,243,124, 75, 0, - 41, 54,155, 45, 22, 0,228,114,121,145, 76, 38,203,179, 90,173,199,205,102,243, 41, 0, 63, 56, 38, 36,244,136,129, 9, 19,154, - 17,155,126,100,181, 73, 28,164,105,154,211, 66,255,251,164, 19, 26,165,254,199,129, 9, 19,150, 7, 42,182,254,194,134, 70, 11, - 0, 95,227,242,130,210,143, 56,230, 1,186, 22,190, 4, 0,119, 1,104, 33,151,203, 83, 45, 22, 75, 41,128,253, 0, 54, 80, 74, - 79, 18, 66,146,163,163,163,151,136,162,104, 42, 43, 43,155,224,105, 25,161,172, 78, 77,246,113, 28,151, 8,135,140, 16,169, 61, -127,231,190,243, 65,121, 64,201,100,178, 57,119,223,125,247, 63,151, 47, 95,174,217,191,127,191,166, 85,171, 86,206,250, 73, 20, - 69,184, 27, 17,169,169, 62,215,254, 38, 0,120,142,227, 62, 24, 57,114,228,152,197,139, 23,107,206,158, 61,171,105,220,184,177, -147,211, 85,196, 73,104,220,184,113, 64, 97,141,138,138,250,239, 29,119,220, 49,118,209,162, 69,194,202,149, 43,213,141, 26, 53, - 66, 84, 84, 20,228,114,249, 21,199,118,235,214, 77,244, 67,199,113, 28, 55,103,232,208,161, 99,151, 46, 93,170,217,189,123,183, -166,117,235,214,144,201,100,215, 28,247, 97,195,134,141,249,234,171,175, 52,191,253,246,155,166,121,243,230,224, 56, 14, 28,199, - 93,193,199,113, 28,146,146,146, 2,226,188,235,174,187,198,124,253,245,215,154, 3, 7, 14,104, 90,182,108,233, 76, 79,151,110, -187,122,135,243, 58,231,188,113,133,150,195, 70, 93,220,173, 91,183,129,155, 55,111,150, 1,192,129, 3, 7, 80, 94, 94,142,132, -132, 4,232,116, 58, 40,149, 74, 24,141, 70, 90,207,202,230,191, 14,145, 37, 0,192,183,255, 24,134, 51, 2,240, 68,177, 25,114, -185, 28,191,255,254, 59,100, 50, 25,189,134,202,172,103,104,104,232,162,239,190,251, 46,162, 67,135, 14, 92,105,105, 41, 82, 83, - 83, 81, 94, 94,222,101,203,150, 45, 29, 39, 76,152, 48,129, 16,114, 63,165,116, 75,160,156, 63,254,248, 35,180, 90, 45, 52, 26, - 13,180, 90, 45,204,102, 51,185,234,132,230,249,196,188,188,188, 24,157, 78, 7, 81, 20,157,155, 91,255,182, 19,162, 40, 34, 61, - 61,221,226,167,130, 76, 60,123,246,108,140, 90,173, 6,165,180, 14,159,221,110,135, 82,169,116,109, 57,192,110,183, 35, 45, 45, -205,226,207,201,146, 68, 22, 0,124,249,229,151,136,139,139, 67, 76, 76, 12,180, 90, 45,212,106,117,157, 7,123,128, 21, 57, 6, - 14, 28,136,215, 95,127, 29, 57, 57, 57,120,225,133, 23,234, 84,180,130, 32, 32, 50, 50, 18,107,214,172, 65,104,104, 40,146,147, -147, 33, 8,194,223,223, 25,228, 72,228,206,125,231,156, 14,237,237,125, 50,248,174, 29,147, 63,116,220, 97,112, 28, 32,138,151, - 31,157,132,128,218,172,226,165,189,191, 22,188, 22, 64,122, 54, 62,123,246,108,140,235,204,234,190, 96,183,219,145,144,144, 32, -243, 83,126, 6,101,102,102,126,251,216, 99,143,201,155, 55,111, 78,228,114, 57,120,158, 7,207,243, 82,126, 76,166,148, 38,139, -162,216,171,168,168,136,206,155, 55,239,109, 66,200,221,148,210, 31, 61,230,119,106,104, 91,109, 18, 7,109, 61,136, 46, 35,251, -189,132, 53,203, 38,117,233,209, 94, 68,136,198,112, 26,192,117, 43,180, 8, 33, 45, 50, 51, 51, 15,238,222,189, 91,101,177, 88, -208,181,107,215, 93,132,144,142, 87, 51,131, 59, 33, 36, 2,192,123,147, 39, 79, 30,251,216, 99,143,201,194,195,195,161, 80, 40, - 80, 93, 93,141,211,167, 79,143,251,252,243,207, 41, 33,228,223, 0, 66,242,242,242,178,246,236,217,131,222,189,123, 63, 5,224, -153, 43, 21,129, 44,113,251,158,220, 24,233,247, 93, 3,219,200,179, 59, 39, 23, 93,110,144,185, 31, 77, 33,218,197,252,221, 7, -243, 59, 5, 16,198,183,135, 15, 31,126,223,242,229,203,117, 0, 48,127,254,124, 12, 31, 62, 28,145,145,145,208,104, 52,144,203, -229, 16, 4,161,206,167, 31,135, 72, 6,224,237,123,238,185,103,228,226,197,139, 67, 0, 96,241,226,197, 24, 54,108, 24,162,162, -162, 16, 18, 18, 2,133, 66, 1,153, 76, 86,239,123, 19, 21, 21,245,223,238, 93,186, 60,176,104,209, 34, 0,192, 43, 79, 63,141, - 59,110,189, 21, 58,141, 26, 26,181, 2, 82, 90, 40,100, 2,110,127,226, 73,127,241,230, 0,188, 59,124,248,240,209, 75,151, 46, - 13, 1,128,253,251,247,163,184,184, 24,177,177,177, 80,171,213, 80, 40, 20,206, 56, 19, 66,160, 86,171, 3,138,251,240,225,195, - 71,126,245,213, 87, 33, 0,176,112,225, 66, 12, 28, 56,208, 25,119,165, 82, 9,185, 92, 94,103,115, 23,157,158, 56,239,190,251, -238,145, 95,127,253,117, 8, 0,124,254,249,231,232,215,175, 31, 34, 34, 34,156,233, 41,113,213,231, 30, 93,207,156, 55,180,208, -146,198, 78,197,198,198,142,222,186,117, 43,231, 34, 18,160, 84, 42,161, 84, 42,161, 80, 40,156,221,135,245,168,112, 72,108,108, -236,248, 45, 91,182, 56, 79, 50,211, 43,172,235,122, 63,192, 93,248,251,245,238,221,251,171, 85,171, 86,169,228,114, 57, 12, 6, - 3, 14, 31, 62,140,176,176, 48, 40, 20, 10, 12, 29, 58, 84,214,173, 91,183,168, 94,189,122,125, 67, 8, 25, 19,200, 27, 13,148, - 82,232,116,186, 58, 66,235, 90,187,152,213,106, 53, 86,174, 92, 9,153, 76,230,177, 2,115,253, 30, 19, 19, 19, 72,188,161, 84, - 42,177, 99,199, 14,200,100, 50, 8,130, 0,158,231, 33, 8, 2, 86,175, 94,141,231,158,123, 14,165,165,165, 32,132, 64, 16, 4, -132,132,248,237,245, 36,145,145,145,225,146,200,146, 68,144, 90,173,134, 32, 8,132,231,121, 34,117,237, 17, 66, 72,160,125,238, - 28,199,225,139, 47,190,192, 91,111,189,133, 23, 95,124, 17, 11, 22, 44, 64,219,182,109, 93, 69, 40,170,170,170, 16, 17, 17,129, -136,136, 8,168, 84,170,171,206, 11,215, 19,220, 83,231,253,217,115, 53, 16, 41, 46, 15, 2, 17, 1, 17,160,160, 16,169,136,162, -130,211,152,250,250, 59, 1, 63,125,148, 74, 37,182,111,223,238, 20, 67, 60,207,131, 16, 2, 87,129, 36,109,113,113,113,126,249, -228,114,249,180,239,191,255, 94,241,197, 23, 95, 96,233,210,165,206,188,165,213,106, 17, 30, 30,142,168,168, 40,231,150,152,152, - 72, 62,253,244, 83,121,219,182,109,167, 1,248,209,243, 61,167, 97,154,166, 57, 45, 70,246,123, 9, 0, 48,242, 37,138, 75, 39, -103,180,227, 42, 94, 11,187,158, 69, 86,155, 54,109,182,237,216,177, 67,165,215,235, 33,138, 34,126,252,241, 71, 77,191,126,253, -182, 18, 66,122,212, 87,108,165,164,164,172,220,177, 99, 71,183,232,232,104, 84, 86, 86,162,170,170, 10, 86,171, 21, 50,153, 12, -201,201,201,120,251,237,183,201,208,161, 67, 39,142, 27, 55,206,168, 86,171, 37,103, 35,197, 91,125,228,138,121,255,250, 48,156, -210,203,249,135,138,180,206,103,121,113, 30,158,126,118,106, 64, 97, 76, 74, 74,122,228,155,111,190,209,185, 58, 75,174, 34,192, -181,142,146, 54,111,194,192,225,106,112, 77,154, 52,121, 96,201,146, 37, 78,206, 70,141, 26, 57,235, 37,158,231,193,113, 28,182, -110,221,138, 89,211, 38, 35, 34,186, 49,230,254,107,190,223,112,186,213,201,155, 0, 0, 32, 0, 73, 68, 65, 84,198,196,196, 44, - 24, 52,104,208, 63, 22, 46, 92,232,220,215,166,105, 83, 12,238,118, 43, 98, 26,133,162, 81,196,229,186,141,138, 4,191, 30,207, -245,251, 60, 2,192, 37, 37, 37, 77, 88,182,108,153,206,181, 65, 40,197, 21, 0,244,122,189,211,197, 55,155,205,232,212,169, 83, - 64,113,119,229,148,220, 54, 73,180,185,215,245, 82, 67,198, 23,103, 82, 82,210, 3,146, 16, 6,128,200,200,200, 58, 28,130, 32, - 96,217,154, 69, 87, 60, 27,174,149,179,190,247,221,157, 51, 47, 47, 15, 51,103,206,116,214, 73,146,171, 71, 8, 65, 66, 66, 2, -230,206,157,235,139,211, 19, 58, 3,136,118,249,109, 6,160,112,249, 44,193,229, 21, 38,220,143,147,246, 11, 0,218, 57,254,179, - 3,168, 6, 16,238,129,207, 27, 79, 41, 46, 47, 35, 20,237,118,188,251,117, 60, 11,173,213,171, 87, 83, 0, 88,185,114,101,239, -187,238,186,107,123,105,105,169,120,236,216, 49,110,255,254,253, 16, 4, 1, 49, 49, 49,232,220,185,179,212,173, 6, 65, 16,160, -213,106, 73,120,120,120,145,244,224,149, 18,209,181,175,221, 69,208,112,229,229,229,226,250,245,235,185,197,119, 15,128,153, 2, -237,167,204,194,192, 33, 67,176, 54, 65, 1, 25,128, 46,199, 74,161,209,104,120, 65, 16,172,210,205,144, 56, 93,199,110,185,139, - 36, 66, 72,136, 86,171,253,244,135, 31,126, 80,113, 28,135,234,234,106,136,162,136,110,221,186,129,227, 56, 28, 58,116, 8,175, -188,242, 10,190,253,246, 91,124,255,253,247,234, 14, 29, 58,124, 74, 8,105, 69, 41,173,118,169,196, 54,120,202,164, 33, 33, 33, -208,104, 52, 78,161, 37,197,217,213, 2,151,142,167,148, 22,148,150,150,118,244,197,105,183,219, 49,108,216, 48, 16, 66, 32,147, -201,234, 84, 62,174,159,114,185, 28,135, 14, 29,186, 34, 19,122, 18,136,162, 40,162,123,247,238, 0, 0,141, 70, 3,157, 78, 39, -173,251, 6, 0,104,223,190, 61,204,102, 51, 26, 53,106,132,163, 71,143,122,170,192,235,112,150,148,148,208, 11, 23, 46,144,197, -139, 23, 67, 16, 4, 68, 69, 69, 65,163,209,144, 69,139, 22, 77,150,203,229,137, 70,163, 81, 52,155,205, 80, 40, 20,115, 37,119, -139,231,249,218,202,202,202, 40,111,156, 50,153, 12,143, 61,246, 24,158,127,254,121, 44, 88,176, 0, 15, 63,252,240, 21,142,151, -209,104, 68,163, 70,141,156, 98, 43,144,184, 95,187, 16,106, 96, 78,145,226,240,129,181, 56,242,219, 6,136,118, 17,118,145,130, - 82, 59, 68, 27,176,127,253,174,244,139,103, 46, 36, 80, 80,192,209,193,161,172,172,177,245,106,164,108, 9, 96,197,166, 82,211, - 7,254,242, 39,207,243,176, 90,173,248,225,135, 31,112,250,244,105,172, 91,183, 14, 6,131,193,153,142, 89, 89, 89,120,224,129, - 7, 60, 10, 45,119, 78, 74,233,194,243,231,207,183,239,222,189, 59,169,168,168, 64, 69, 69, 5, 12, 6, 3,236,118, 59,108, 54, - 27,120,158,135, 74,165,130, 90,173, 70,108,108, 44,140, 70, 35, 53,153, 76, 11,189,113,138, 34,169,212,255, 62,233,196,154,101, -147,186,140,124,137, 98,249, 91, 4,205,154, 40,245, 63,237, 11,121, 96,197,182, 23,250, 3,160,162, 67, 59,112, 0,181,218,197, -210,231, 39,191, 55,241, 79,191, 71, 87,138,172, 40,131,193,128,234,234,203,213,131, 66,161,192,242,229,203, 27,221,121,231,157, - 91, 8, 33, 61,189,137, 45, 79,156, 33, 33, 33,201, 50,153, 12,135, 14, 29,194, 71, 31,125,132,159,126,250, 9, 69, 69, 69,151, - 26, 55,110, 28,214,171, 87, 47,238,233,167,159, 70,251,246,237,241,217,103,159,169,252,113, 82, 74,145,119,114, 43,242, 78,109, -131, 40, 82, 23, 87,220,243,119, 26, 96,220,107,107,107,141, 7, 15, 30,212,125,242,201, 39,136,137,137, 65,106,106, 42, 52, 26, - 13, 84, 42, 85,157,135,172,235,131,215, 95,217, 52, 24, 12,198,188,188, 60,221, 87, 95,125,133,168,168, 40,164,164,164, 64,163, -209, 64,161, 80, 56, 27, 4,139, 23, 47,198,151,175,223,135,188,227,191, 97,216,224,254,126,195,169,209,104,254,177,112,225,194, - 58, 22, 72,108, 68, 4,120,129,131, 76, 32,136,232,123, 55, 0,224,210,207,223,121,157, 29,210,141,147, 84, 87, 87, 27,119,239, -222,173,219,183,111, 31, 68, 81, 68, 74, 74, 10,244,122, 61, 66, 67, 67,157,241, 95,191,126, 61,134, 14, 29,138, 47,190,248, 2, - 89, 89, 89,126,227, 94, 83, 83, 99,252,237,183,223,116, 75,150, 44, 65,100,100, 36,146,146,146,156,113,151, 54, 65, 16, 32,147, -201,144,150,150,134,202,202, 74,232,116, 58,191,247,104,255,254,253,186, 37, 75,150, 32, 34, 34, 2,137,137,137, 78,199, 77, 18, - 71,111,125,248,122, 29, 14, 21,137,191,102,206,250,222,119,119,206, 97,195,134,161, 89,179,102, 8, 13, 13,133, 86,171,117,114, -251,226,148,180, 8,128, 94,131, 7, 15,222,236,118, 11,163, 9, 33,171, 92,174, 63,132, 16,178,202,245,211,219,113,142,175, 61, - 39, 79,158,220, 41, 39, 39,103,102, 86, 86,214, 87, 59,118,236,248,210, 27,159, 55,158,201,147, 39,103,230,228,228,204,116, 61, -222,195,117,188, 59, 90,131, 7, 15, 38,142, 72,242, 0,144,145,145,129,242,242,114, 40,149, 74,116,238,220, 25,165,165,165,208, -233,116,144,203,229,160,148, 98,226,196,137,178, 23, 94,120, 33,134,227, 56,216,108, 54,103,197,239,165,175, 93,228, 56, 14,217, -217,217, 56,236,232, 17, 26, 56,100, 8, 18, 19, 19, 33, 13,242, 80,169, 84,152, 56,113, 34,121,238,185,231,120,201,205,160,148, -194, 96, 48, 32, 62, 62, 94,237,163, 75,238,233,111,190,249, 38, 76,178,228,165,174, 51,153, 76,134, 99,199,142,225,221,119,223, -197,184,113,227,112,238,220, 57, 52,110,220, 24,207, 63,255,188, 46, 39, 39,231,105, 0,111,248,171,144,117, 58,157, 83,100,105, - 52, 26, 60,253,244,211,124,183,110,221, 98,116, 58, 29, 66, 66, 66, 32,117, 3,218,237,118, 52,109,218,212,175, 52, 23, 69, 17, -107,215,174, 5,207,243,126, 29, 45, 71, 6, 12,136,115,247,238,221, 78,145,230,218, 74, 34,132,224,240,225,195, 78, 81, 23, 0, - 39,229, 56, 14, 90,173, 22,113,113,113, 80,171,213,208,104, 52,228,171,175,190,122, 53, 53, 53, 53,254,185,231,158,227,170,170, -170,184,236,236,108, 12, 31, 62,156, 23, 69, 17, 22,139, 5,153,153,153,126,157,183,205,155, 55,227,163,143, 62,194,195, 15, 63, -236,209,209,146, 6, 75,134,134,254,229,239, 66, 4, 13, 34, 0,139,205, 10,125,141,193,217,181,107,183,219,241,219,166, 95,210, -207,252,114, 50,115,213, 87, 95, 8, 0, 96,220,244,157,235,105,241,195, 63,252,186, 69,175, 72,249,238, 77,229,150,221,254,156, -194, 39,159,124, 18,175,189,246, 26,238,185,231, 30,172, 95,191, 30,175,188,242, 10, 38, 76,152, 80,199,209, 10, 4, 86,171,245, - 63,247,223,127,255,195,203,151, 47,111,249,210, 75, 47,113,146,163,165,209,104,164, 49, 94, 48,153, 76, 48, 24, 12, 56,126,252, -184,248,208, 67, 15,157, 48,155,205,255,241,198,103, 35,234, 95, 53, 74,253,143, 77, 19,185,102,181,185,239,132,116,191, 53,197, - 64,212, 29, 43,239,110,209,143, 14, 26,159, 18, 1, 74, 65, 69, 64,164,128,201, 84,139,137, 19,159,146,253, 85,247,201, 85,100, - 25,141, 70, 28, 60,120, 16,189,123,247,198,249,243,231,113,244,232, 81,164,167,167, 99,209,162, 69,209, 99,198,140,241, 41,182, -220,241,219,111,191, 77,110,215,174,221,156,154,154,154,242,154,154,154, 57, 0,190,164,148, 86, 16, 66, 90,157, 62,125,122,222, -218,181,107,123, 76,157, 58, 85,230, 54, 70, 71,230,205, 30,181, 90,109, 48, 24, 76, 62, 5,150,244,155, 82, 49,208,184,211,150, - 45, 91,226,206, 59,239,132, 32, 8,206,198,154,107,183,153,187,224,242, 85,127, 0, 16, 9, 33,104,220,184, 49, 6, 13, 26, 4, -185, 92, 94,135, 83,122,176, 14, 26, 52, 8, 79,190, 49, 5,255,121,178, 15, 62,186, 63, 29,253,222, 44,242, 25, 78,189, 94, 95, -179,113,227, 70,245,243, 15, 63,140,118,205,155,163, 81,104, 40,154,196, 70, 67,173, 84, 64,238, 26, 38,226,223,100,167,148, 82, - 66,136, 40,147,201,208,186,117,107, 20, 21, 21, 33, 55, 55, 23,185,185,185,224, 56, 14,221,187,119,119,186, 48,167, 78,157,194, - 27,111,188, 1,147,201, 20,112,220,155, 55,111,142, 62,125,250, 64,161, 80, 64,163,209,212,233, 50,148,210,180,186,186, 26,205, -154, 53,195,138, 21, 43,208,162, 69, 11,191,156, 25, 25, 25,184,237,182,219,234,164,167, 90,173,118, 62, 55, 0,224,252,238, 26, -231, 53, 18, 18, 18,234,197,185,110,207, 57,124,178,126, 35, 76,102, 17, 85,122,107,157, 19,226, 27,133, 98,219,146,151, 2,138, -187,196,249,241,199, 31,163,162,162,194, 89, 7, 73,166,137,100, 82, 36, 37, 37, 97,254,124,207, 78,166,139, 22, 33, 94,238,223, -144, 0, 27, 84,210,113, 82,230, 82,230,228,228,204,116, 63,223, 31,159,235,255,110,231,155,221,196, 89, 81, 64, 93,135,210,243, - 65, 42, 12, 9, 9, 9,144,198,129, 72, 5,197, 89,145,218,108,248,246,219,111, 17, 19, 19,227,220,194,194,194,188,102,108,105, - 28,209,147, 37,151,135, 8,173,105, 44, 71, 30,128,193, 37,212, 57,142,196,110,183,227,155,111,190,129,171,144, 9, 9, 9,241, -217,141,164, 80, 40,122,117,238,220,153, 51,153, 76, 87,136,172,156,156, 28,140, 25, 51, 6, 45, 90,180,128, 40,138,168,169,169, - 65,239,222,189,133,185,115,231,246,170,143,208,210,104, 46,143,251, 55,155,205,216,180,105, 19, 34, 34, 34, 16, 21, 21,133,200, -200, 72,132,132,132, 72,111, 78, 82,127, 98,131, 82,138, 97,195,134, 57, 51,159,171,139,229, 46,186,118,236,216, 17, 80,151, 28, -165, 20,183,222,122, 43,180, 90, 45,116, 58, 29,116, 58, 29,214,174, 93,235, 60,166, 75,151, 46, 16, 69, 17, 49, 49, 49,216,185, -115,167,207,238, 79, 74, 41,149,203,229,206,227, 5, 65, 32,139, 22, 45,154,156,150,150, 22,255,236,179,207,114, 50,153, 12, 7, - 14, 28,192,145, 35, 71,144,146,146, 18,240,152,173,138,138,138,139,147, 39, 79,182, 79,158, 60, 25, 0,144,153,153,137,138,138, -138, 98,233,255,170,170,170,178, 1, 3, 6,212, 25,183, 81, 90, 90, 90,246,255,236, 93,119,120, 20, 85,251, 61,119,182,239, 38, -217,108,122, 33, 16,186, 8,136, 20, 65,248,232, 37,128,116,148, 46,136, 8, 40, 69, 84,252, 40, 34,242, 83, 64, 66, 47, 74, 85, -228,163, 40, 18,154, 32, 69, 32,210,155, 8, 8, 72,139, 68, 32, 36,164,215, 45,217, 58, 51,247,247, 71,118,227,102,179, 73, 54, - 33, 34,224,156,231,153,103,119,218,153,123,103,238,189,115,230,189,239,125,239, 83, 47,180,120, 30,172,149, 69,190,201, 4,189, - 46,191,208, 58,148,158,156,166,153,246,225, 7,146,197, 19,223, 4, 0,124,184,124, 37,116,235,254,106,200,118,127, 56, 36,184, -255,146,109,211, 1,244, 45,227,229, 3,179,217,140,200,200, 72, 92,184,112, 1, 58,157, 14, 93,186,116, 41, 98, 49,117,220,211, -178, 76,244,148, 82, 11, 33,164,117,175, 94,189,126, 93,182,108, 89,173,250,245,235, 19,131,193,128,252,252,124, 56,255, 94,187, -118,141,110,221,186,245,110,126,126,254,127, 40,165,150,146,248, 14, 61,252, 38,190, 91,149,183,118,252,124, 89,212, 43,184,118, -156,250, 97, 78, 45, 54,235,161,220,160, 53,222, 54,113,244, 6, 40, 7,112,224, 65, 89, 30,156,189,219,235,159,130, 82,169,252, -242,244,233,211, 1, 38,147, 9,151, 46, 93,194,240,225,195, 45,153,153,153, 50, 0,120,253,245,215, 45, 91,182,108,145,213,174, - 93, 27,155, 55,111, 14,122,245,213, 87,183, 3,120,193,195,134,254, 91, 0,223,186,110, 15, 8, 8,248,226,193,131, 7, 29,156, -125,126, 28, 31,171, 0,220,126, 84, 82, 30,176,217,108, 48, 26,205,200,203,211,193, 98,181,217,219, 76, 30, 28,199,218,127,121, -176,246,118, 84, 38, 21,251, 52,107, 20,166,167,148,130, 33, 36,247,226,181,148,170, 37,181, 75, 37,117,113,121, 98,205,114, 3, -206, 49,202, 44, 32, 32, 0, 18,137, 4,223,126,251, 45,174,158, 57, 4,153,136,130, 99,109, 96,109, 86,112, 54, 11, 36, 34, 17, -126,190,124, 15, 81,207,151, 61,144,155, 16, 66, 3, 3, 3,209,179, 85, 43,244,106,213,170, 96,120,155, 88, 12,111,185, 28, 42, -169,162,192,146, 5,128,114, 12,224, 89, 81,226, 29,233, 12, 9, 9,193,197,139, 23, 49,105,210, 36, 44, 88,176, 0, 74,165,178, -112,244,243,173, 91,183, 16, 19, 19,131,168,168,168,114,231,221, 97,193,155, 62,125, 58,146,147,147,177,124,249,114, 52,107,214, - 12, 18,137, 4,185,185,185,248,207,127,254,131,180,180, 52,143, 56,157,187,247,100, 50, 89, 17,235,147, 67, 0,150,247, 25, 57, -115,190,217, 47, 12,123,207,108, 5, 1,193,249,239, 62, 40,242, 46, 90,179,237, 84,185, 57,103,205,154, 85, 36,157,158, 88,179, -202,241, 97,180,207, 19,177,229,116,220, 37,135,177,117,250,244,233, 51, 8, 33,251,166, 79,159, 62, 35, 58, 58,250,186, 39,124, - 37,236,223,239,208,133, 78,219, 46,121, 44,180, 40,165, 84, 38,147,129,231,249, 34,226,202,213,241,214, 97, 10,116, 54, 53,150, - 37, 10,120,158, 47, 44, 20,174,159,109, 34,145, 8,231,206,157,195,185,115,231,138,108, 95,191,126,125,169, 47,114,150,101,235, -251,248,248, 20,177,102, 73,165, 82, 76,159, 62, 29,195,135, 15, 47, 20, 89, 82,169, 20, 27, 55,110,196, 75, 47,189, 4,139,197, - 82,191, 12,127,149,252,208,208, 80,198,209, 16,121,121,121,145, 73,147, 38,137, 88,150, 45,188, 39,142,197,225,187, 86, 86,161, -113,140, 98, 57,124,248,176, 71, 22, 45, 79,125,148, 40,165,184,114,229, 74, 17,241,230, 24, 53, 3, 0, 87,174, 92, 41,244,223, -242,132, 83, 36, 18,129,227, 56, 40,149, 74, 34,149, 74,137, 84, 42,141,112,136, 44,145, 72, 84,248,188,157,125,246,202,202,251, -195,135, 15, 59,150,182, 63, 61, 61,253,153, 13,227, 96,181,217, 96,204,183, 64,167, 55,226,179,232,255, 21,108,252, 12,191, 0, -248,165,245, 59,147, 48,190, 91, 84, 39, 23, 63, 0, 79, 26,154,194,151,227,206,157, 59, 33,145, 72,176,103,207, 30,168,213,106, -244,233,211, 7,106,181, 26,211,166, 77,195,224,193,131, 61,182,104,217,203, 82, 30, 33,164,245,251,239,191,255,235,162, 69,139, -170, 85,173, 90, 21, 22,139, 5, 86,171, 21, 22,139, 5,241,241,241,216,186,117,107, 98,126,126,126,107, 74,105, 94, 89,124,135, - 30,126, 19,191,235,228,135,201, 93, 6,191,106,188,149,246, 19, 82, 83,179,192,178, 15,193,115, 44,172,108,193, 8,102,142,101, -193,178, 28,164, 82,145,122,209,231, 31, 28,225, 65,193, 48,196, 50, 96,192,128, 87, 30,215, 51,210,104, 52, 13, 51, 50, 50,240, -199, 31,127,224,141, 55,222, 72,205,202,202,186, 9,160, 51, 0,100,101,101,157, 30, 62,124,120,253, 77,155, 54,133,214,168, 81, - 3,222,222,222,106, 15,158,143, 55,128,241, 0,186,218,253, 64, 28,200, 6, 48, 39, 40, 40, 72,126,233,210,165, 98,214,255,147, - 39, 79, 2,192, 47,238, 77, 6,118,139,150,201,132,140,172, 28,140,126,103,102,161, 41, 1,160, 69,196, 5, 5,197,184,119,161, - 0,128,204,180,120,188, 57,122,146,188,172, 15, 2,119, 47,194,114,248,232, 56, 91,138, 10,203,168,183,183,119, 65,247,219,158, -173,216,191,228, 29,128,179,130,218,140,128, 53, 31,176,234,193, 91,242, 65,164, 74,192,102,244, 72,104,121,123,123,195, 91,169, - 68,176, 70, 83, 16, 4, 82, 36,130, 68, 34, 6,111, 3, 8, 71, 10, 5, 41,207,121, 84,214,105, 96, 96, 32,120,158,135, 82,169, -196,253,251,247, 49,126,252,120, 88,173, 86,244,235,215, 15, 22,139, 5, 38,147, 9, 70,163, 17, 53,107,214, 68,126,126,190, 71, -121,119,180,243,142,222,159, 15, 62,248, 0, 47,189,244, 18,102,207,158,141,169, 83,167,162,102,205,154, 24, 55,110, 28,182,110, -221,138,134, 13, 27,150,202,235,124, 63, 29,156,142,231,226,218,197, 7,160,220,207,200,149,179, 96,124, 0,138, 61,247,247, 70, -116, 46, 55,231,252,249,243,145,145,145, 81,204,146,229,248, 95,165, 74, 21,172, 94,189,186,162, 93,255, 14,235, 81,136, 59,131, -152, 27, 75, 84,115, 20,248, 78,153,163,163,163,175, 71, 71, 71,247, 34,132,236,139,142,142,238, 85,138, 69,171,103, 25, 22,175, -158, 40,240,201,242, 8, 98,151,190,209, 14,206,150, 18,199,139,212,241, 66,119,110,228, 85, 42, 21,118,237,218, 5,199, 8, 16, -231, 99, 74, 19, 90, 7,130,236,166, 99,187, 37,203,121,189,119,239,222,168, 81,163, 70, 17,107,150, 82,169, 44,181,240,240, 60, -143,132,132, 4, 92,191,126, 29, 45, 91,182, 68, 94, 94, 30, 36, 12,131, 15,175, 93, 67,131, 17, 35, 96,177, 91,104,100, 50, 25, -222,126,251,109,143, 28,218,239,221,187,231,231,188, 30, 24, 24,152,212,182,109,219, 42, 23, 46, 92, 40,116,144,183,119,171, 21, - 10, 14, 79, 68, 12,165, 20,175,189,246, 90, 17, 43,150,179,200,114, 94,126,250,233, 39,143,186, 14, 41,165,104,219,182,109,161, - 53,203,199,199, 7, 63,252,240, 67,225,179,106,215,174, 93,129, 63, 67, 72,136, 71,156,142,124,216, 29,224, 97, 50,153,120,157, - 78,199, 92,186,116, 9, 50,153,172,208,130,167, 84, 42,161, 80, 40, 32,151,203, 43, 52,130,232,223, 0, 74,121, 88,108, 54, 24, -141, 70,232,245, 5,145, 69,226,127,223, 89, 84,136,153,181, 21,230,119, 88,173,116, 58, 29,126,254,249,103,236,222,189, 27,205, -154, 53, 43,230, 12,239,137, 69,203,169, 60,101, 16, 66,218, 76,153, 50,229,252,220,185,115,195,253,253,253, 97,181, 90,241,224, -193, 3,108,216,176, 33, 57, 63, 63,191, 13,165, 52,195,243,155, 0,216,108, 44, 76,249,102,228,105,117,248,244,243,141, 37, 22, - 61, 0,200, 78,191,141,222,125, 6,202, 30,231,115, 74, 78, 78,158,220,166, 77,155,207,117, 58, 93,110,126,126,254, 64, 0,139, -157, 13,135, 89, 89, 89,109,251,244,233,179,204,223,223,191, 89,122,122,250, 12, 15, 40,167,223,191,127,127, 70,100,100,100,145, -141,118,235,227,115,233,233,233,195,218,181,107,247, 9, 0,127,167,221, 62, 0, 14, 3, 88, 93, 82, 89,114,116, 29,234,245, 70, -168, 53, 97,120,120,239, 68,153, 9,145,138, 76,160, 60, 95,230, 7,160, 59, 43,150,115,251, 84,142,242, 67, 29, 62,129,142, 23, -246, 43,175,141,192, 43,227,231, 67, 37, 1,230,189,217, 26, 53, 53, 0,148,254,144,182,155, 6,162,177,223,163,241, 63,122,196, - 63,117,237, 90, 92,254,163, 32, 50, 76, 68, 80, 16,166, 12, 30, 12,106, 3,206,222,184,129,109,199,142, 97,112,199,142, 80, 41, - 20, 30,127,176, 56, 62,194,227,227,227,113,246,236, 89, 60,255,252,243,184,115,231, 78,145, 48, 20,148, 82,143,242, 79, 41,165, -142, 65, 76,114,185, 28, 18,137, 4,169,169,169,232,213,171, 87,225,135,254,137, 19, 39, 48,101,202, 20,140, 26, 53, 10, 29, 58, -116,112,235, 55,235,202, 25, 20, 20, 84,104, 64,112, 29,168,224,220,157, 91,158,103,228,142,211,129,138, 62,119,103,206,185,115, -231,186, 29, 80,225, 9,167,179, 22, 41, 5,151, 92,172, 73,112,248, 75, 57,132,145,235, 58, 0, 63,199,182,233,211,167,207,240, -244, 60,231,117,135, 69,172, 60, 93,152,133, 66,171,103,207,158,196,221,203,214, 97, 70,118, 7, 47, 47, 47, 76,152, 48, 1,179, -102,205, 66, 96, 96, 96,153,190, 53, 14, 37, 91, 26,126,252,177,120,101,219,179,103, 79, 89, 93,135,183,124,125,125, 95,234,216, -177, 35,242,242,242,144,152,152, 8, 47, 47, 47, 52, 88,178, 4,215,198,143, 71,227,181,107,193,116,234, 84, 24,108,245,218,181, -107, 80, 42,149,183,202,107, 65,240,241,241,129,159,159, 95, 97,159,187, 67,112, 57, 89,180,168, 7,133, 17, 7, 14, 28,112,251, -213, 88, 17, 31, 45, 71, 35,112,254,252,249, 34,254, 89,206,194,231,252,249,243,133, 22, 45,199,105,158,116,121, 41,149, 74,234, -224, 83,169, 84,240,247,247,135, 92, 46,135, 82,169, 44, 34,178, 60,177,230,149, 21,144, 84,169, 84, 94,240,242,242,210, 56,246, - 75, 36, 18,232,116,186,220,172,172,172, 22, 79,117,215, 33, 40, 88, 43, 11,163,209, 4,189,206, 88,233,252,142,129, 41,187,118, -237,194,203, 47,191, 92, 76,100, 57,238,117, 5,190, 24,147, 8, 33, 29, 86,172, 88,241,203,210,165, 75,253,244,122, 61,254,247, -191,255,229,233,245,250, 14,148,210,164,114,113,241, 20, 54,171, 21,249, 38, 51, 12,250,130,123,240,231,245,157, 79,152, 32,166, - 91, 1,108,117,181, 24, 58,237,255, 19, 64,175,114, 80,190, 28, 25, 25,137,212,212,212, 34, 27, 19, 18, 18,192,113,156,217, 30, - 39,235, 45,167,235,137, 40,165, 92, 89,109,135,213,222,117,168,215, 23, 88, 65, 76,134,204,202, 41,167,118,177, 81,146, 79, 86, - 69,186,120, 28, 35,157, 69, 34, 17, 38, 78,156,136,107, 87,175,162,115,184, 22, 53, 67,125, 64,181, 15, 33,237,244,127,184,146, -161,196,226,101, 7,202,205, 29,227, 52,216,103,113, 76,140,219,125,127,246,237, 91,174,188,199,197,197, 65,169, 84,130,227,184, - 98,239,155,242,230,223, 89,192, 44, 91,182, 12, 83,166, 76,193,198,141, 27,113,237,218, 53, 52,110,220, 24, 93,186,116, 65,122, -122, 58,174, 94,189, 10,179,217,236,113, 58,157,253,230,226,238,222, 64,236,217,131, 72, 72,186,135,228,212,196, 10, 63,119,103, - 78, 87,161,181, 43,246, 55,188, 22,213,180, 66,156,159,126,250, 41,210,211,211,139, 88,178,156, 7,144,149,100,209,114,213, 34, - 46,200,116,241,133,114,172, 91, 92, 68,143,235,186,235,241, 0,144, 14, 64, 84,198,121,174,235,153,209,209,209,199, 29,150, 48, - 59,175,168, 44,255, 44,183, 93,135, 14, 81,228,168, 40,174,150, 42,199,127, 47, 47, 47,248,248,248,192,199,199, 7,106,181,186, - 76, 75,145, 67,104,181,189,171, 43,226,235,229,176,108, 1,192,168, 81,163,138, 89,180,156, 3,123,186,131,217,108, 62,113,226, -196,137, 38,189,123,247, 22,221,186,117, 11, 34,145, 8, 60,207,195,210,170, 21, 26,175, 93,139,223, 63,248, 0,237,239,223,135, -201,106,133, 66,161,192,161, 67,135,172,249,249,249, 39,202,219,110, 56, 11, 45, 47, 47, 47,248,250,250, 22, 10, 13, 79, 84,186, -163,242,150,230,255,224, 88,156, 7, 3,120, 82,169, 29, 47, 84,103,191, 28, 66, 8,140, 70, 99,161, 83,167, 39, 86, 71,231,174, - 67,231, 10,200, 48, 12, 52, 26, 77, 97,227,225,176,104,121,106,205, 43, 43, 32,169, 74,165, 82,223,190,125,187,182, 35,252, 68, -102,102, 38, 58,117,234,244,199, 83,111,210,226, 1, 43,203, 65,111, 52, 65,111,204,175, 52, 90, 71, 89,251,246,219,111, 17, 31, - 31, 15,171,213,138,232,232,232, 98, 2,171, 60,206,240,110,202, 85,124,211,166, 77,249,238,221,187,227,252,249,243,144,203,229, - 54, 74,105,185,227, 95,241,148,135,149,101, 97, 50, 26,161, 55, 24,254, 45,198,204, 66, 85,125,243,230, 77, 88, 44, 22,204,158, - 61,155,251,245,215, 95,143, 3,120,199,254, 12, 25, 0,195,218,183,111, 63,167,103,207,158, 26, 66,200,123,148,210,141,165,213, -115, 27,107, 23,237,149,120, 31, 29,101,169,164, 54,169, 34, 97, 86,156, 95,172, 60,207, 99,236,152, 49,232, 18,174, 69,255,102, - 65, 48,164,252, 1,149,111, 16,136,166, 58, 22, 47, 59,128,235,119, 61,118,197,164, 0,208,189,125, 95,188,248,124,241,240, 96, -109, 58, 23,124,147,157,254,249, 2,210, 50,147,203,157,119,131,193, 80,162,229,202, 83,139,150,131,211, 17,102, 69, 34,145,160, - 73,147, 38,168, 91,183, 46,142, 31, 63,142,166, 77,155,226,206,157, 59,184,115,231, 14,238,223,191,143,107,215,174, 33, 39, 39, -167,220,207,232,135,195,219,144,163,203,134, 76, 42, 67,118,110, 38, 18, 30,222, 67, 72, 64,232, 35, 63,119, 7,234,245,252, 20, - 0, 16, 30,228, 91, 46,161,229,204,185,112,225,194, 98,226,189, 18, 66,246, 92, 40, 99,189,188,231, 63, 54,136, 75,176, 18, 25, -253,253,253,149,206,253,171, 12,195,192,215,215,151, 44, 88,176, 64,196, 48, 12,124,124,124,224,235,235, 11,135,185,176, 44,200, -100, 50, 99,245,234,213,149,142,130,232,168,136,106,181, 90,180, 96,193, 2,178,126,253,250, 18,173, 92,101,248,104, 45, 29, 62, -124,248, 91, 73, 73, 73,126,193,193,193, 72, 73, 73,129, 76, 38, 43,168, 28, 29, 59,162,237,221,187,176, 22,248, 28, 33, 46, 46, - 14, 95,125,245,149,193,108, 54, 47, 45,239,141,242,246,246, 70, 64, 64, 64, 97,151,161,195,162,227, 36, 26, 61,114,193, 44,205, - 68,239,248, 2,172, 72, 23,146,171,216,122,231,157,119,138,136, 46, 79, 33,149, 74, 89, 71,228,119,134, 97, 96,181, 90,209,180, -105, 83,164,167,167, 23, 86, 26,103, 75,158, 39, 66,171,172,128,164, 98,177, 24, 22,139, 5,237,218,181, 3, 33, 4, 43, 87,174, -124, 54,186, 35,121,158,120,123, 7, 32, 60,252, 57, 4, 5,155,192,243,149, 55,171, 12,203,178, 24, 55,110, 92, 17, 11,150, 99, -100,163,163,235,159, 82, 10,155,205, 86,225,224,175,142,122,253, 40,241,227, 40, 80,216,229,101, 48,152,158,186, 71, 24, 28, 28, -220,146, 16,178,199,101,115, 54,128, 57,238, 34,184,219, 81,248,160, 19, 19, 19,209,173, 91, 55, 28, 60,120, 80,180,123,247,238, -206,123,247,238,189, 81,187,118,237,196, 65,131, 6, 85,125,251,237,183,229,237,218,181, 67,102,102, 38,154, 53,107,246, 25,128, - 82,132,150,253, 62,154,204, 48, 24, 42,223, 58, 90,218, 7,223,163, 8,184, 89,179, 62, 65,151,176, 92,244,107,236,139, 77,251, -206, 96, 88, 19, 37, 96,145,151,155,207,145, 22,255,240, 26,168,222,176,101,177,253,114,117, 65,151, 93,245,134, 45,193, 36,222, - 41,119,222,157,211,236,218, 94, 86,196,162,231,124, 63, 71,143, 30,141,105,211,166,161,107,215,174,184,115,231, 14, 78,158, 60, -137, 59,119,238, 96,210,164, 73,104,216,176, 33, 26, 55,110, 92, 46,206,189,177, 59,160,213,231,129, 33, 12,178,243,178, 96, 50, - 27, 49,117,220,172, 71,126,238, 14,220,139,141, 6, 0,236, 60,114,185,194,156, 31,127,252, 49, 82, 83, 83,139, 88,178, 30,197, - 47,235,105,135, 91,161,149,149,149,229,182, 31, 48, 40, 40, 40, 45, 42, 42, 42, 56, 37, 37, 5,222,222,222,101,138, 44, 66, 72, - 23, 71,172,141,212,212, 84,183,156, 62, 62, 62,214,168,168, 40, 73, 88, 88, 88,145,209,134, 94, 94, 94,197, 42,153, 43,167,253, - 37,160, 35,132,140,109,221,186,245,166,159,126,250, 73, 85,183,110, 93,104,181, 90, 80, 74,177,113,227, 70, 76,156, 56, 17, 10, -133, 2,113,113,113,232,211,167, 79,126,126,126,254, 88,231, 24, 90,238, 56, 75,250, 66,115, 68,197,119, 35,178, 74,205,187,115, -101, 93,177, 98, 5,230,205,155,135, 25, 51, 74,119,245, 88,183,110, 29,224,210,205,231,142,147, 82,138,197,139, 23, 87, 26,103, - 86, 86,214, 70, 23,107,212,202,254,253,251,139, 19, 19, 19,139,136, 43,231,197, 77,195, 84,132,179,172,128,164, 34,145, 8, 33, - 33, 33,152, 59,119, 46, 2, 2, 2, 16, 26, 26, 90,204, 18, 83,214, 51,170,224,203,224,111,229,228, 40,127,105,209,252, 79,218, -252,111,203, 94,137, 92, 6,156, 59,185, 19,218,156,162,221, 73,102,235, 95, 67,169,101, 77, 59,195,114,249,103,143,210,105, 54, -155,177,112,225, 66,124,250,233,167,248,244,211, 79, 61,121,238,143,148,119, 79,196,150, 91, 78,158, 18,149,151, 31, 20, 94,225, -104,208,208, 15, 60,101,159,168,103, 84, 2,126,189,112,225, 66,159,128,128, 0, 36, 37, 37, 5, 73, 36,146, 62, 69,204, 85, 70, - 35,170, 87,175,254, 28,128,255,148,197, 57,105,210, 36,243,204,153, 51,229, 67,134, 12, 65,255,254,253, 49,100,200, 16,185, 84, - 42,173, 67, 41,133,213,106, 69, 82, 82, 18,126,254,249,103,100,100,100,220, 42, 45,157, 60,165, 68,169,210, 64,225, 21,134, 6, - 47,104,192,243,108,165,228,221,241, 18,116,181,102,149, 51, 32,181,219,182, 14, 0,126,253,121, 15,102,125,240, 2, 54,238,255, - 5, 95, 92, 0, 94,212,164,163, 65, 80, 6,248,140, 91,248,239,176,151,176,248,187,139, 0,128,147, 39,202,124, 70,165,198, 71, - 54, 25,173,143,148,119,103,203,149,243,117,202,242,209,114,199,233,248, 72,212,233,116,200,205,205,197,166, 77,155,240,230,155, -111, 34, 61, 61, 29,247,239,223,199, 31,127,252,129,239,191,255,190,112, 52,123,121,159,209,135, 99, 62,198,204,197,147, 65, 65, - 81,175,118, 3, 76, 31,255, 41,154,191,216,234,145,159,187, 43,202,178,102,149,198,185,124,249,242, 10,149,165,127,149,208, 42, -237,171,130, 97, 24, 4, 6, 6, 22, 22, 18,231, 2, 88,145, 47, 95,145, 72, 4,150,101, 11,125,127, 28, 11, 0,244,238,221, 27, - 63,254,248,163, 39, 35, 41,126, 34,132,188, 94,191,126,253, 13,159,125,246,153,119,251,246,237,197,225,225,225,104,222,188, 57, -226,226,226,176,127,255,126,219,234,213,171, 13,249,249,249,163, 40,165, 71, 42,210, 62, 57,166,180,113, 94,202,243,213, 99,181, - 90, 19,239,220,185, 19,182,120,241, 98, 17,195, 48, 88,190,124,121, 97,165,116, 4,124,117,198,201,147, 39, 89,158,231, 75,237, -170,177,217,108,137,119,238,220, 9, 91,178,100,137,136, 16, 82,200,201, 48, 12,156, 39,112, 46, 15,167, 59,145,233, 24, 24,225, -110,113,151,118,119,207,184,180,128,164, 98,177, 24,113,113,113,152, 53,107, 22, 8, 33,216,185,115,231, 51, 81,185,174,221,202, - 92,223,184, 65,176, 95,239, 87,218, 52, 2, 33,176, 90,138, 71, 67,240,206,209, 23,138,172,254, 75,182, 97,247,135,131, 61, 17, - 61,241,167, 79,159,246, 95,184,112,161, 88, 36, 18, 97,217,178,101, 69,130, 6,187, 62,247, 83,167, 78,177, 21,233,246,115,212, -103,171,213, 10,163,177, 98, 86, 20, 74,233,217,232,207,103, 70,109,254,246,128,132, 16, 11,206,157,216,137,188, 92,247,238, 12, - 50,137, 24,235, 55,237, 98,165, 18, 81,226, 63,252,232, 86,245,235,215,111,200,151, 95,126,217,192,221,206,196,196, 68,240, 60, - 95,154,115,205,125,147,201,132,135, 15, 31, 34, 63, 63,127,199, 71, 31,125,100, 61,112,224,192, 91,175,190,250, 42, 26, 55,110, -140,176,176, 48,164,164,164, 32, 62, 62, 30,155, 54,109,162,103,206,156,217, 1, 96, 66, 25,247,113,207,252,207,103,190,177,233, -187, 3, 50,134, 88,113,238,228, 78,228,185,136,246,226,214,105, 9,190,217,184,203, 42,149, 74,110,151,213,174, 59, 91,179, 42, -243,197,216,103,248,120,244, 95,241, 5,106, 53,239,134,249, 11,186,224,155,207, 7, 98,105,119, 41,172,219,135,225,197, 1,155, -177,117,118, 15, 0, 64,248, 55, 30, 90, 75,196, 82, 60,112, 99,177,202,205, 83,216,197, 77,249,172,166,142,188,151,214,134,151, -215,162,197, 48, 12,106,212,168,129, 90,181,106,161,117,235,214,104,218,180, 41, 58,118,236,136,171, 87,175,226,234,213,171,152, - 52,105, 82,137, 34,203,147,103,212,225, 63, 81,248,165,237,237, 71,126, 54,174,207,189, 50,224, 73, 89, 26, 63,126, 60, 0,252, -171,172, 91,226,138,220, 68, 71,193,124,212, 41,105, 28,156, 22,139,165,176, 75,206, 57, 46,147,195, 57,222,195, 17,125, 71, 8, - 33, 13, 63,249,228,147, 15, 20, 10, 69,199,252,252,252,231,236, 22,153, 56,179,217,124,204,104, 52, 46,163,148,230, 62, 74, 90, -157,195, 57,184, 75, 66,105,231,230,228,228,116,235,214,173,219, 17,177, 88, 92,195,117,194, 95,119, 21,153,231,249,251,105,105, -105,165, 14,113,207,202,202,234,214,181,107, 87,183,156,238, 26, 8, 79, 56,221, 61, 31,158,231, 75, 20, 89,158, 52, 68,101, 5, - 36, 21,139,197,240,242,242,194, 15, 63,252,128,192,192,192,103,170,130, 93,185,145,190,176,180,253, 29, 2,229, 39, 0, 4,245, - 95,178,237,193,241, 76, 75,100,135, 64, 89,194,238, 15, 7, 87, 43,237,156,204,204,204,174,111,190,249,230, 65,177, 88, 92,195, -245,254,187,123, 22, 44,203,222, 75, 77, 77, 45,119,184, 4, 74, 41,110,223,190,205,143, 30, 61, 58, 51, 35, 35, 99, 96, 69,242, - 63,125,214, 23, 75,231,125, 54, 49,160,123, 84,203,230, 96, 0, 75,201,206,191,148, 0, 84, 44, 17, 37, 78,153,177,124,204, 63, -249,204, 40,165, 90, 66, 72,235,215, 94,123,109, 2, 10,134,134, 23, 19, 82, 0, 86,148, 66,177,162,106,213,170, 47,136, 68, 34, - 57,128, 89,148,210, 4, 66,200,170, 51,103,206,116, 5,240,178, 72, 36, 10,227, 56,238, 33, 10,230,124,220, 70, 41,189, 82,118, - 57, 74,123,187,113,253,160,136,238, 93, 94,238, 6, 66,168,197, 98, 46,227, 3, 9, 20,148, 82,169, 84,114,251,194,149,228, 23, -203,178,214,219,103,224,168,244, 46,251, 9, 19, 38, 96,194,132, 9,133,229,105,229,202,182,216,241,251,105, 12,120, 49, 9,230, -175,218,128,168,171,121,252,193, 7, 0, 31,127, 50,186, 50, 45,155, 69, 6,105, 85,150,143,150, 72, 36, 66,102,102, 38,226,226, -226,144,150,150,134,252,252,124,220,188,121, 19, 86,171, 21, 57, 57, 57,120,225,133, 23, 42,156,206,202,122, 70,255, 36,231,191, -177,251,176, 92, 66,139,101,217,164,178,102, 89,183,217,108,229, 26,149, 36,145, 72, 76,117,235,214, 37,238, 70, 39, 56,254,123, -121,121, 25, 61,108, 32,115, 1,204, 2, 48,203, 62,159, 21,178,179,179, 31, 89, 13,114, 28,151, 28, 25, 25, 41, 42, 73,192,216, -239, 77, 90, 25,105, 51, 0,104, 85,201, 47,132, 74,231,116,243,124, 12,207, 63,255,124,161,175,151,107, 76, 20,251,100,171,165, -122,231,150, 21,144,212, 96, 48,164,116,235,214,141,115,222,239, 28,208,244,153, 6,161, 9, 61,134,188, 21,121, 60,211, 18, 9, - 0, 14,177,133,146,253,127, 64, 41, 53, 2,104,255,119, 39,237,238,221,187,150,151, 95,126,249, 91,157, 78, 55,158, 82, 90, 97, -111,254, 25,255,183,114,198,211,246, 88, 40,165, 90, 0,243, 42,120,110, 2,128, 78, 46,219,174, 0,184,242, 40,105,186,114, 51, -163,210, 99,139,177, 44,155, 84,171, 86,173,114, 89,110,202,106,227,109, 54, 91,169,239,137,235,240,197,140,243, 64,193, 52,113, - 89, 30,113,154, 76,166,236, 86,173, 90, 73,202,153,183,116, 79,243, 30, 22, 22,134,240,240,240,194, 95, 7, 92,183,151,149, 78, -150,101,147, 34, 34, 34, 16, 24, 24, 88, 98,196,119, 87,159, 44, 79, 56, 43,251, 25,149,198, 25, 30,190,185,210, 57, 43, 75, 47, -252, 43,132,150, 99, 14,195,202, 68, 90, 90,218,223, 50,231, 10,173, 12,115,219, 95,150,163,230,248,151, 34, 43, 43, 43,224, 81, - 57,202, 10, 72,154,150,150,214,241,223,122,127,143,103, 88, 70, 22,219,102, 23, 93,255, 52, 12, 6, 67,181,178,194, 14,148,132, - 1, 3, 6,112, 16,240,196, 35, 51, 51,179,210,219,244,191,227, 61,145,157,157,221,232,223,154,247,191, 35,157, 79, 11,231,179, - 2,193, 75, 77,128, 0, 1, 37,125,172, 8, 98, 73,128, 0, 1, 2, 30, 17, 4, 64,151, 18, 26, 89,143, 71,250, 16, 66,186, 84, -160, 17,143, 21, 56, 5, 78,129, 83,224, 20, 56, 5, 78,129,243,223,197, 89, 22,119,101,143, 52,126, 18,190, 90,255,182, 5, 64, - 23,129, 83,224, 20, 56, 5, 78,129, 83,224, 20, 56, 5,206,127,235, 34,116, 29, 10, 16, 32, 64,128, 0, 1, 2, 4,252, 77, 16, -132,150, 0, 1, 2, 4, 8, 16, 32, 64,128, 32,180, 4, 8, 16, 32, 64,128, 0, 1, 2, 4,161, 37, 64,128, 0, 1, 2, 4, 8, - 16, 32, 64, 16, 90, 2, 4, 8, 16, 32, 64,128, 0, 1,127, 31, 72, 37,198,245, 20, 32, 64,128, 0, 1, 2, 4, 8, 16,224, 4, - 49, 0,236,223,191,191, 80,109,245,236,217,147, 8,183, 69,128, 0, 1, 2, 4, 8, 16,240, 56,241,172,106, 17,177, 32,176, 4, - 8, 16, 32, 64,128, 0, 1, 79, 2,158, 69, 45,194,184, 83,146, 2, 4, 8, 16, 32, 64,128, 0, 1,143, 27,207,162, 22, 97,158, -101, 21, 41, 64,128, 0, 1, 2, 4, 8,120,122,240,204, 91,180, 4,171,150, 0, 1, 2, 4, 8, 16, 32,224,159,194,211,170, 69, - 8, 33,148, 16, 66,157,215, 11,255, 11,163, 14, 5, 8, 16, 32, 64,128, 0, 1, 2, 42, 38,176, 40,165,164,164, 95, 64,136,163, - 37, 64,128, 0, 1, 2, 4, 8, 16, 80, 33, 56,196,148,243,186,179, 53,235,111, 23, 90,132,144, 46, 2,167,192, 41,112, 10,156, - 2,167,192, 41,112, 10,156,255, 22,193, 69, 41, 37,206,235, 98,225,246, 8, 16, 32, 64,128, 0, 1, 2, 4, 60,178,248,164,238, -132,151, 32,180, 4, 8, 16, 32, 64,128, 0, 1, 2, 30, 81,100, 57,139, 43,193, 71, 75,128, 0, 1, 2, 4, 8, 16, 32,224, 49, - 64,176,104, 9, 16, 32, 64,128, 0, 1, 2, 4, 60, 2, 92,157,224,133,174, 67, 1, 2, 4, 8, 16, 32, 64,128,128, 74, 22, 91, -238,182, 19, 0, 93, 74, 56, 33,214, 83,242,138,140, 62, 40,139, 95,224, 20, 56, 5, 78,129, 83,224, 20, 56, 5,206,103,143,179, - 44,238,242,232,143, 39, 5,132,144,246, 0,142, 3,232, 96,255,253, 75,120, 81, 74,255,182, 5, 64, 23,129, 83,197,199,105, 41, - 0, 0, 32, 0, 73, 68, 65, 84,224, 20, 56, 5, 78,129, 83,224, 20, 56, 5,206,103,121, 41,144, 83,127,253, 58, 47,130, 51,188, -128,178, 84,186,152, 16, 34,174,232,254,199,197, 41, 64,128, 0, 1, 2, 4,252,195,239, 75,234,248,117,246,215, 18,151,112,112, - 29, 0, 51, 0,248, 58,109,190, 64, 41,141,118, 57,238, 59, 0, 42,167, 77, 6, 0,179, 41,165,119, 60, 72,147,212,206, 47,183, - 47, 60, 0, 19, 0, 51, 0, 29, 0,155,240,216,254,241, 66,211, 10, 64, 47,251,255,125,148,210,115,229,217,255,184, 56, 31, 23, -194,195,195,149,126,126,126, 93, 47, 95,190, 44,187,121,243, 38, 78,157, 58, 69,215,175, 95,111,205,201,201, 57,156,156,156,108, - 20, 74,204, 51, 81,230,187, 1,152,110, 95,157, 79, 41, 61,244,136,124, 68,165, 82, 77,242,242,242,234, 33,151,203,195, 89,150, - 37,249,249,249,201, 6,131,225, 8,203,178, 75, 40,165,124, 5, 56,251,250,251,251,191, 85,175, 94,189, 58,247,239,223,127,152, -156,156,252, 29,128,237, 0, 6,134,135,135, 15,171, 94,189,122,149,219,183,111,223,201,206,206,254,134, 82,186,231,159, 74,167, - 0, 1,255, 38,148,228,159, 85,162,208, 2, 48,139, 82, 58,204,165, 34, 22, 59,168, 83,167, 78,125, 14, 31, 62,172,226,121, 30, -142, 69,169, 84,178, 0, 70,150,145,166,128,179,103,207, 70,142, 31, 63,190,127,114,114,242, 75, 58,157,174, 5, 0,168, 84,170, - 95,130,131,131,127, 93,177, 98,197,247, 93,187,118, 77,178, 11,174,114, 89, 74, 36, 18,201,155,126,126,126, 61, 88,150,109, 74, - 41,133, 68, 34,185,156,147,147,115,200,102,179,125, 67, 41,181, 85,160, 81,147,137,197,226, 9,114,185,188, 27,203,178,141, 0, - 64, 44, 22, 95, 51,155,205,135, 88,150, 93, 69, 41,181, 84,128, 83, 33,147,201, 38,168,213,234, 40,139,197,210, 8, 0,100, 50, -217, 53,173, 86,123,196, 98,177,172,162,148,154,158,128, 23,142, 24, 64, 47, 74,169, 4, 0, 68, 34, 81,223, 86,173, 90, 69, 18, - 66,120, 71,124, 16,134, 97,154,112, 28,199,216,143,239, 69, 8,249,149, 82,202,150,135,243,229,151, 95,174, 42, 22,139,169, 61, -146, 46,195, 48,204,139,229,225,172, 44, 4, 5, 5,205,227,121, 62,188,180, 99,124,125,125, 95,186,124,249,114,189,152,152, 24, -238,171,175,190,202, 29, 53,106,148,247,248,241,227,197, 43, 87,174, 92, 5,224, 61,215,227, 3, 3, 3,151, 50, 12, 19,232,201, -245,121,158,207,204,204,204,156, 44, 52, 87,255, 56,166,175,142,213,181,163, 20,152, 16,229,195, 0,120, 36,161, 85,165, 74,149, - 77,111,188,241,198,144, 70,141, 26,137, 41,165,176,217,108, 48,155,205,245,206,157, 59,215, 97,231,206,157, 47, 1, 24, 88,206, -122, 57,102,218,180,105,115,231,204,153, 19, 40,145, 72,136,205,102,171, 29, 19, 19,211,244,237,183,223,126,127,221,186,117, 85, - 7, 13, 26,228,227,216, 62,107,214,172,230,132,144,154,148,210, 37,143, 59,157, 2, 4,252, 11, 63,210,218,163,168,143,214,103, -148,210, 79, 75, 19, 90, 94,246, 19,211, 0, 92,112, 88,180, 92, 15, 58,122,244,232, 94,177, 88,236,176,104,181, 48, 24, 12, 33, - 46, 86, 48,119,168, 62,124,248,240, 86, 59,118,236,152, 55,104,208,160, 84,149, 74, 85,247,213, 87, 95,213, 17, 66, 68, 49, 49, - 49, 77,106,213,170,165,236,221,187,247,240, 78,157, 58,125,120,240,224,193, 83, 0, 50, 60,204,100, 3,127,127,255, 93, 11, 23, - 46,140,236,214,173,155, 52, 48, 48, 16,148, 82, 36, 39, 39, 87,217,191,127,127,247,207, 62,251,236, 67, 66, 72, 63, 74,233,141, -114,220,184,230, 74,165,114,199,103,159,125, 22,214,189,123,119,113,104,104, 40, 76, 38, 19,110,222,188,217,229,208,161, 67,237, -214,173, 91,247, 30, 33,100, 0,165,244,215,114,112,182,240,245,245,221,249,191,105,211, 66, 90,190,249,166,216,223,223, 31,148, - 82,100,100,100,116, 57,189,121,115,135,113, 11, 23,190, 71, 8,121,141, 82,122,225, 73, 42, 68, 50,153,140,217,178,101, 75, 99, -153, 76, 6, 0,176, 88, 44,104,216,176, 33,121, 20, 78,137, 68,194, 44, 89,178,164,169, 88, 44,134,213,106,229,117, 58, 29,125, -245,213, 87,153,127,168,146, 68, 36, 39, 39,251, 74,165, 82,183,251, 57,142, 67,187,118,237,106, 72,165, 82, 44, 89,178,196,150, -153,153,217,228,203, 47,191,188,188,117,235,214,192, 85,171, 86, 13,112, 39,180, 24,134, 9, 76, 74, 74,114,203,201,113, 28,172, - 86, 43, 88,150,133,197, 98, 65,253,250,245,133,150,234,201, 64, 36, 0, 28,184,106, 2, 0,255, 71, 37,243,242,242,122,126,232, -208,161,226,140,140, 12, 72, 36, 18, 88,173, 86,164,166,166,162, 97,195,134,162,111,191,253,246,185,242,242,213,174, 93,123,212, -252,249,243,131, 14, 28, 56, 96,221,178,101,139, 37, 42, 42, 74, 50,106,212, 40,117,187,118,237,234, 71, 68, 68, 48, 27, 54,108, - 48, 31, 57,114,196, 54,124,248,112, 89,116,116,116,208,254,253,251,123, 3, 88,242,184,211, 41, 64,192,191, 16,199, 93, 39,149, - 6, 80,170,208,114,224, 2,165,180, 47, 0, 72,165,210, 38, 85,171, 86,221,196,178,108,168,221,170,147, 42,145, 72,150, 88,173, -214,223,236, 47,170, 61, 60,207,247, 41,203,146, 53,124,248,240, 86, 7, 15, 30, 92,124,238,220,185,188,172,172,172,208,189,123, -247,154, 62,252,240,195,251, 0,112,247,238,221,154,189,123,247,174, 50,113,226,196,164,174, 93,187,174,232,216,177,227,187,199, -142, 29, 59,130,130, 46,201, 82, 69, 86,195,134, 13,207,158, 60,121,210, 71,163,209, 20, 85,117,213,171,227,221,119,223,149,246, -233,211,167, 86,231,206,157,207, 16, 66,218, 82, 74,127,247, 68, 16,213,169, 83, 39,246,232,209,163,222,126,126,126,200,205,205, - 69,106,106, 42,242,243,243,161, 86,171, 49,104,208, 32,105,251, 54,173,171, 78,156,244, 94, 44, 33,164,139, 39, 98,139, 16,210, -162,117,131, 6,177, 91,163,163,189,109, 15, 30, 64,169, 84, 66,175,215, 3, 0,124,124,124,240, 82,141, 26,226,139,155, 55, 87, - 25, 54,117,170,131,243,177,139, 45, 66,136,220,110, 6, 53, 19, 66,246,137, 68,162,190, 50,153,140,233,219,183, 47, 98, 99, 99, -137,201,100, 18, 3,128, 66,161, 96,251,246,237, 11,165, 82, 9,139,197,194, 3,216, 87,146,229,201, 29,167, 68, 34, 97, 58,118, -236,152,127,225,194,133,108, 7,167, 74,165,178,117,236,216, 49, 64, 38,147, 41, 89,150,165,165,113,254, 77, 98, 18,241,241,241, - 69,182,233,116, 58,100,100,100, 32, 43, 43, 11,102,179, 25,185,185,185,224,121,158, 40,149,202, 12,158,231,193, 48, 5,198,183, -146, 56,165, 82, 41,226,226,226,138,108, 99, 89, 22, 6,131, 1,102,179, 25, 86,171, 21, 58,157, 78,233,227,227, 83,167, 65,131, - 6, 73, 0,246,100,103,103, 47, 73, 77, 77, 77, 16,218,173,127, 4, 15,246,253,102,170, 6,192, 2,224, 94, 37,240,241, 0,112, -234,212, 41,164,165,165, 33, 51, 51, 19, 25, 25, 25,136,136,136, 64, 69,186,227,226,227,227, 87,191,240,194, 11,228,250,245,235, -135, 0,172,140,137,137, 25,153,157,157, 61,125,202,148, 41,254,139, 22, 45,202,158, 58,117,234,124, 0, 27, 99, 98, 98,222,121, -254,249,231,123,220,186,117,107,221, 63,145, 78, 1, 2,254, 6, 52, 7, 16,100,255,159,105,111,119, 3,156,214,175,218,235,173, -227, 56, 11, 0,153,155, 95, 7, 28,235, 25, 0,126,117, 58,207,177, 94,145,247, 39,117,254, 45,252,232, 6,128,253,251,247, 83, -199,226,238,228,144,144,144, 73,157, 58,117, 90,124,233,210,165,250, 41, 41, 41,126, 41, 41, 41,126,151, 46, 93,170,223,169, 83, -167,197, 33, 33, 33,147, 28,199,217, 61,238,225,180,238, 60, 68, 83,122,246,236,217,200, 93,187,118,205,143,141,141,205,107,210, -164,137,229,232,209,163,108,215,174, 93,211, 1,176, 0,216,174, 93,187,166, 31, 59,118,140,107,217,178,165,242,224,193,131,137, -103,206,156, 89,186, 99,199,142, 16, 0,162, 18, 56, 65, 8,145,104, 52,154, 31, 78,156, 56, 81, 76,100, 57,163,106,213,170,216, -183,111,159, 90,163,209,236, 33,132, 72, 75, 73, 39, 8, 33, 10,133, 66,177,243,216,177, 99,222, 62, 62, 62, 72, 79, 79,135, 68, - 34, 65,112,112, 48,242,242,242,144,154,146,130,132, 63,254, 0, 99,177, 96,217,231,115,124,148, 74,229, 14, 66,136,172, 44, 78, - 95, 95,223,157, 91,231,205,243,206,138,141,197,149,185,115, 97,181, 90, 11,187, 92,173, 86, 43,206,140, 31,143,140,159,127,198, -134, 89,179,188,125,125,125,119, 18, 66, 20,165,113, 86, 6,156, 57, 9, 33,227, 1,100, 3,200, 38,132,140,167,148,158,107,216, -176,225,165,155, 55,111,162,109,219,182,216,190,125,251,139, 83,166, 76, 25, 63,101,202,148,241,219,183,111,127,177,109,219,182, -184,121,243, 38, 26, 54,108,120,201,217,151,202, 19,206, 19, 39, 78,160, 83,167, 78, 57,219,183,111,175, 57,107,214,172,121,179, -102,205,154,183,109,219,182, 90,157, 58,117,202, 89,190,124,185,185, 52,206,191, 35,239,206,150, 38,231,133,231,255,122,199,132, -135,135,167,239,218,181, 11,131, 6, 13, 98,100, 50, 89,202,224,193,131,229,167, 79,159,166, 0,246,149, 39,157, 38,147, 9, 70, -163, 17, 6,131, 1,119,239,222, 85, 46, 92,184,176,205,167,159,126, 90, 59, 54, 54,182,202,140, 25, 51,198, 5, 5, 5, 93, 14, - 13, 13,141,124,220,121, 23, 56, 1, 0,169, 0,172,246,143,187,132, 71,225,236,220,185,243, 11,181,107,215, 14,137,185,238,135, - 28,105, 61,240, 82, 13,120,169, 6, 92, 64,115,196,203, 94, 65,181,106,213, 66,124,124,124, 90,149,135,147, 82,186,229,247,223, -127,127,153, 82,250, 41,165, 52,139, 82,186,120,234,212,169,159, 17, 66, 78, 77,157, 58,117, 14,165,116,177,125,251,220,155, 55, -111,182,164,148,110,253, 39,210, 41,148, 37,129,179, 34, 40, 67,139, 4, 17, 66,246, 17, 66,246,125,244,209, 71, 29, 1, 4,184, -172,255,199,249, 56, 0, 50,119,191,142,197,105,123, 16,128,158, 78,231, 5, 85,240,126, 16,215,165,136,208, 2,128,158, 61,123, -146,158, 61,123, 58,118, 92, 32,132,236, 5,112, 65, 42,149, 54,105,220,184,113,223,159,126,250,201, 39, 40,232,175,235, 7, 5, - 5, 97,199,142, 29, 62, 13, 26, 52,232, 43,149, 74,155, 0,184,160, 86,171,247,194, 77, 23,163, 29,154,241,227,199,247, 31, 49, - 98,132,182, 73,147, 38, 0,144,123,227,198, 13, 85,203,150, 45, 13, 44,203, 18,150,101, 73,203,150, 45, 13, 55,110,220, 80,217, -108, 54, 93,243,230,205,189, 58,119,238,124,127,242,228,201,195, 1, 40, 74,201,223,208, 5, 11, 22, 68,248,249,249,149,118, 3, -160,211,233, 16, 18, 18,130,241,227,199,135, 74, 36,146,183, 74,187, 97, 98,177,120,194,130, 5, 11,130, 53, 26, 13,114,114,114, - 16, 17, 17, 1,139,197,130,184,184, 56,152, 12,122,216,116, 90,216,180,185,200,248,243, 14, 52, 18, 49,134,247,233, 21, 34, 22, -139, 39,148, 97, 45,153,240,205,212,169, 33,150,251,247,113,119,251,118,112,108,113, 67, 13,107,181,226,218,215, 95,195,148,148, -132,249,163, 71,135,200,100,178, 9,143,217,146,181,136, 82,170,164,148, 42, 9, 33, 43,254,243,159,255,124,171, 84, 42,199, 71, - 71, 71,119, 59,124,248,112,247,147, 39, 79,118, 96, 89, 86,194,178,172,228,212,169, 83,109, 77, 38,147, 88, 46,151, 67, 44, 22, - 83, 79, 57, 91,181,106,181, 73,169, 84,142, 91,179,102, 77,183, 99,199,142, 13,191,120,241,226, 4,142,227,100, 28,199,201, 46, - 94,188,248,182,209,104,148, 80, 74,185,146, 56, 31, 55, 36, 18, 9,164, 82, 41,148, 74, 37,218,180,105,243,231,250,245,235,109, - 17, 17, 17,146,157, 59,119,250,133,135,135,123,173, 92,185, 50, 87,167,211, 45,240,148,207,106,181,194,108, 54,195,104, 52,194, -100, 50,225,232,209,163, 53, 38, 78,156, 40, 54,153, 76, 92,239,222,189,179,109, 54,155,121,234,212,169,106,127,127,255, 15,133, - 15,216,127, 4, 44, 0,189, 93,104,153,157,203, 50, 33,164,145,195, 58,235, 9,114,115,115,215,125,243,205, 55, 17,140, 92,131, -211,150, 30,248,158,255, 12,135,125, 87, 34, 61,242,191, 8,142,168,141, 33, 67,134, 4, 83, 74, 87, 86,194, 11,239, 75, 74,105, - 59, 74,233,138,138,156,255,119,167,147, 16, 18,233,237,237,189, 93,173, 86,159,246,246,246,222, 78, 8,137,124,212, 60,119,173, - 67,186,244,173, 47, 74,234, 90,155,208,190,245, 69, 73, 93,235,148, 63,214,147,128, 39, 19, 46, 90,196, 25, 25,148,210, 94,148, -210, 94,243,231,207,159,231, 84,254, 29,235, 74, 15,235, 75, 47, 74,105, 47,151, 50,186,175, 18,222,161,212,117, 41,212, 20,206, - 74,210,145, 57,231,209,133, 85,171, 86,221,180,105,211, 38, 31, 87,210,148,148, 20,104,181, 90,204,156, 57,211,103,196,136, 17, -239, 37, 38, 38,190, 81, 70, 58,100,169,169,169, 77,135, 13, 27,166,176, 90,173, 57, 60,207, 51, 90,173, 86,236,235,235,203, 57, - 14,240,245,245,229,242,242,242, 36, 6,131, 65,196,113,156,121,196,136, 17,178,209,163, 71,191,228,108,209, 42, 38,113,131,130, -162,122,244,232, 33, 43,105,191,205,102,131,193, 96,128,193, 96,128,213,106, 69,155, 54,109,228,235,215,175,239, 10, 96, 77, 73, -231,200,229,242,168,168,168, 40, 73,118,118, 54,124,125,125,145,144,144,128,123,247,238,193,172,215,195,170,215,194,170,215,129, -213,105, 65,181,121,200,186,115, 27, 45,159,175, 39,253, 78, 46,239, 6, 96,105, 73,156,106,181, 58,170,229,200,145, 98, 47, 47, - 47,116, 24, 86, 48,206,224,224,243,207,131,114, 28,120,142, 3,199,178,232, 22, 23, 7,155,205, 6,134, 97,208, 60, 59, 91,172, -222,188, 57, 10,192,226,127,162,176,203,229,114,241,150, 45, 91,134,202,100, 50, 80, 74,137,197, 98,193,225,195,135, 31,153,115, -243,230,205,195, 29,156, 86,171,149,190,240,194, 11,197, 42,148,217,108,166, 79, 74,165,151,201,100, 80, 40, 20,176, 90,173,168, - 94,189,186,113,216,176, 97,103, 63,255,252,243,106, 12,195,120, 73,165,210,159,178,178,178,230, 37, 39, 39,223,245,148,207,102, -179,193, 98,177,192, 98,177,192,104, 52,226,207, 63,255, 12,173, 81,163, 6, 25, 63,126, 60,151,159,159, 95,243,139, 47,190,136, - 63,124,248,176,106,193,130, 5,175, 2,120, 87,104,118, 31, 31,236, 86,105,223,106, 1, 98,131, 68, 4, 61, 0, 31,187, 40,120, -149, 16,210,178,126,253,250,126, 55,111,222,204, 33,132,156, 7,240, 61,165, 52,165, 52, 62,158,231, 9,207,243,120,187, 69, 46, -198,183, 18,193,102,203, 67, 94, 94, 30, 18, 18, 18,112,227,198, 13,252,242,203,141, 10,165, 83,161, 80,188,229,237,237,221, 85, -161, 80, 84,103, 89,150,209,235,245, 9,249,249,249,177, 60,207,175,163,174,221, 10, 30,224,239, 74,167, 3, 94, 94, 94, 11,103, -204,152,209,218,215,215, 23,191,253,246, 91,205,109,219,182, 45,196, 35, 58,215, 43, 36,204,134,165,203, 87, 86,169, 18,172,193, -213,147, 63, 86,153,183, 54,102, 3,128, 8,161, 20, 63,253,112,214, 34, 46,248, 21, 64, 79,251,104,244, 94,143, 80,207, 31,233, -252,210, 44, 90,174, 19, 75, 23, 19, 90, 37,100, 12, 44,203,134, 58, 91,178, 40,165, 72, 73, 73,193,195,135, 15,145,145,145, 1, - 63, 63, 63, 88,173,214, 80, 79,222,179, 58,157,174, 69, 64, 64, 64,190, 68, 34, 49, 27,141, 70,168, 84, 42, 94, 34,145, 80,251, -117,136,125,212, 34,103, 54,155,137, 88, 44,182,249,248,248,120,155,205,230,122, 40,197,151,140, 82,218, 34, 32, 32,192,237, 62, -179,217, 12,189, 94, 15,131,193, 0,189, 94, 15,179,217,140,144,144, 16,176, 44,219,180,212, 79, 90,150,109, 20, 20, 20,132,228, -228,100, 40,149, 74, 36, 37, 37,193,162,215,193,170,211,129, 53,104,193,229,229,129,215,106,193, 27,180,176, 89,242, 81,165,238, -243,112,140, 72, 44, 9, 22,139,165, 81, 64, 64, 0, 12,134,191,220,205,168, 93, 96,177, 44, 11,214,238, 28,237,232, 78, 12, 12, - 12,132, 99, 68,226,227,128,221,127,106, 10,195, 48, 43,228,114,185,120,220,184,113, 72, 73, 73, 41, 82, 38,198,141, 27, 87,232, -147,213,174, 93,187, 83, 10,133,130,205,200,200,128,217,108,150,120,194, 89,189,122,245,132,153, 51,103, 94,176, 88, 44, 17,225, -225,225, 26,179,217,108,124,238,185,231,194,149, 74,101,136,197, 98,225, 94,122,233,165,117, 74,165,210,166,215,235, 41,203,178, -228, 73,168,244,132, 16, 16, 66, 10,158, 17,203, 34, 48, 48,208,144,153,153,249, 75, 78, 78,206,208,138,240,217,108, 54,199,136, - 46, 24,141, 70, 80, 74,241,219,111,191, 65,161, 80, 72, 56,142,187,206,178,172, 74, 34,145,128,177, 59,127, 9,120,108,207,185, - 67, 61,141,108,105,116,203, 96, 77,227,222, 94, 6,149, 76,100,224, 19, 26, 87,255,223,162, 27,219, 70, 12,127,203,103,246,236, -217,145,129,129,129,138,248,248,120,211,156, 57,115,106,108,217,178,133,148,245, 17,244,224,193,131,221, 51,102,204,240,239,209, -163, 71, 77,185, 92, 78,242,242,242,144,145,145,129,180,180, 52,220,187,119,143, 94,189,122,245, 79,179,217,188,189, 60,233, 12, - 15, 15, 95, 63,113,226,196, 17,205,154, 53,147, 56, 44,164, 6,131,161,201,137, 19, 39,250, 28, 60,120,176, 45,128,114,151,203, -196,196,196,237, 31,127,252,177,215, 43,175,188, 82, 79, 46,151, 51,149,145, 78,103, 48, 12, 19,226,237,237,141,216,216, 88,104, - 52, 26, 48, 12, 19,242,168,207,203,100,229,171,132,135, 6,192,116,102, 41,234, 5, 69,194,100,229,171, 8,165,248,217,177,104, -149,176,171,185,195, 34, 85,134, 88, 50, 78,159, 62,125, 6, 33,100,223,244,233,211,103,184,179,104,217,255,114,206,199, 57, 29, -111,174,108,177, 85,174,160,144, 60,207,227,225,195,135, 72, 78, 78,198,195,135, 15,145,149,149, 5,134, 97, 74,141, 31,225,156, - 6, 66, 8,127,228,200, 17,191,179,103,207, 26,154, 55,111,158,235,240,127, 97, 89,150,216,108, 54, 98,247,139, 33, 9, 9, 9, -210,211,167, 79,107,110,221,186, 21,130, 2,135, 53,190,140,204, 21,219,230, 16, 88,206,139,201,100,130, 66,161,240, 40,175,142, - 23,225,111,151, 46, 21,136, 44,189,206,222,101,152, 7, 78,155, 7,106,208, 65,198,217, 32, 3, 5, 49,229,123,124,255,156,225, - 16, 89, 86,187,208,178, 88, 44,176,217,108,224,121, 30, 44,203, 62,246, 2, 78, 41, 93,221,164, 73,147,166,187,119,239, 30,245, -240,225,195, 98,251,251,245,235,135,119,223,125, 23, 19, 39, 78,188,213,179,103,207,171, 63,254,248, 35, 38, 76,152, 0,158,231, - 27, 19, 66,242, 40,165, 7, 75,227,156, 62,125,250,197,196,196,196,227,127,252,241,199,184,224,224, 96,121,163, 70,141,238, 52, -106,212, 72,180,123,247,238,144, 49, 99,198, 92,234,222,189,251,253,159,127,254,217, 63, 54, 54, 86,193,243,124, 51, 66,200,195, -127, 58,142,150,217,108, 46,180, 64,153, 76, 38, 88,173, 86,160, 20,231,247,178,202,166,227,217,178, 44,235,224, 38,187,119,239, -194,169, 83,167,152, 27, 55,174, 71,140, 27, 55,222,225,112, 47,180,184,143, 71, 96,189, 34, 99,200, 87, 83, 26, 7, 40, 62,124, - 49,192, 32, 19, 19,125,220, 87, 51,244,247,170,169, 13, 33, 85, 85,150,136, 26,154,240,121,243, 62, 15,187,117,235,182,121,230, -204,153, 55, 7, 15, 30, 28,252,225,135, 31,214,223,185,115,103, 91, 66,200, 55,148,210,220, 18,120, 21, 35, 71,142, 60, 31, 28, - 28, 92, 99,237,218,181,233,137,137,137,126, 54,155,205,203,106,181,242, 6,131,225,158,209,104,140,181, 90,173,177,148,210, 75, -229, 73,175,143,143,207,139, 35, 71,142,148,228,230,230,194, 62, 90, 23,233,233,233,104,221,186,181,104,239,222,189, 13, 42,114, - 15,178,179,179,151, 18, 66,142,111,221,186,181,171, 90,173,110, 38,151,203, 67, 1,112, 58,157, 46,205, 96, 48, 92,169, 72, 58, -139,180,115, 28,151,118,233,210,165, 90,106,181, 26, 15, 30, 60, 0,199,113,105,143,250,220, 20, 82, 38,241,218,201,189, 85,159, - 15,172,129,211,103,207, 67, 33,101, 18,133,210,252,204,195,225, 67, 5,103, 1,229, 70, 32,157,141,142,142, 86,206,159, 63, 31, -209,209,209,215,221, 89,180, 28,130, 43, 58, 58,250,186,227, 56,167,227, 79, 62, 66,123, 82,178, 69,171, 20, 5, 9,177, 88,156, -154,145,145,225,167,209,104, 10, 5, 86,114,114, 50,146,147,147, 33,147,201,144,144,144, 0,153, 76,150,226,201, 71,136, 82,169, -188,216,164, 73,147,231,238,222,189, 43,157, 51,103, 78,213, 75,151, 46,169, 91,183,110,253,130, 82,169,228, 40,165, 48,153, 76, -204,205,155, 55,189, 23, 47, 94, 92,165, 69,139, 22,150, 22, 45, 90, 92,142,137,137, 49,162,148,224,165,132,144, 11, 41, 41, 41, - 53,171, 87,175,238, 16,109, 69,196,149,179,224, 2, 10,186, 60,197, 98,241,229,210, 18, 42, 22,139,175,197,197,197,117, 81, 41, -228,176,232,180,176,234,181, 96,117, 58,112,186, 60,112,121,121,128, 65, 11, 25,203, 66,194,217,160, 84, 40,240, 48, 41, 9, 98, -177,248, 90,105,156, 50,153,236, 90, 90, 90, 90, 23,141, 70, 83,248, 18,181,177,108,193,194,113,176,176,108,161, 69, 75, 34,145, - 32, 49, 49, 17, 50,153,236,218,227, 46,201, 12,195,112,142, 16, 14, 37,228, 3, 33, 33, 33,124,203,150, 45, 49, 97,194, 4,112, - 28,103,127, 12,164, 3, 33,228, 52,165, 84, 95, 18, 39,207,243,204,205,155, 55,251,199,199,199,139, 36, 18, 9,243,242,203, 47, - 55,108,211,166,141, 69, 38,147, 65, 42,149,138,245,122,189, 79,108,108,172,194,102,179, 17, 59,231, 99,139,163,229, 40, 59,197, - 62,141,236, 78,235, 70,163, 17,122,189, 30, 57, 57, 57, 98,165, 82,249,220, 11, 47,188,112,222, 98,177,108,103, 89,118,195,221, -187,119,181, 37,113,218,133, 89,161,232,226,121, 30,148, 82,112, 28, 7,155,205, 6,169, 84,202,159, 56,113, 18,139,151, 45,196, -166, 13, 91,104,159, 62,125,200,222,189,123,193,243,124,146,208,174, 62, 22, 44,201,253,254,115, 5, 88,206, 96, 62,177, 85,255, -237, 31, 90,195,236,111,151, 95,180,200, 68,218,151,218,135, 52,170, 89,227, 57,145, 70,227,199,172, 89,183, 34,235,187, 45, 59, -226, 31, 60,120,160, 93,181,106, 85,171,231,158,123,206,247,202,149, 43, 85, 0,184, 21, 90, 42,149,170,206, 91,111,189, 53, 50, - 39, 39, 71,186,105,211,166,152,148,148,148,139, 0,110, 80, 74, 13, 78,109, 87, 79, 66,200, 70, 20,140,124, 10,177,183,115,167, - 41,165,115, 74,251, 94, 35,132,224,216,177, 99,197, 70, 7,242,143,166,206, 53,181,107,215, 30,116,247,238,221, 83,169,169,169, -175,185,169,247,179,235,214,173,219,237,250,245,235,159, 81, 74, 15,148,135, 56, 63, 63,127,234,142, 29, 59, 22,137, 68,162,112, -142,227,146,141, 70,227,212, 71,182,104,217,248,209,209,107,182,125,109,180,112,213,148, 50,209, 3,147,141, 31, 35, 20,229,103, -218,154, 5,216,125,180, 28,255, 1, 16,151,245, 43,246,255, 22,167, 99, 51,156,172, 88, 22, 23, 43,152,187,125, 25,168, 96,176, -116,119, 35, 14, 29,162,171,164,200,240, 31, 1,104, 1,224,130, 68, 34, 89, 49, 98,196,136,197,223,125,247,157,143, 86,171, 69, - 90, 90, 26,210,211,211, 33, 22,139,161, 86,171,177,122,245,106, 99, 90, 90,218, 10,231,115, 92, 35,200, 59,234, 70, 96, 96,224, -197, 45, 91,182,132,126,245,213, 87,226, 55,222,120, 35,161,103,207,158,245, 86,175, 94,125, 87, 42,149, 82,142,227,136,217,108, - 38,111,191,253,118,173,101,203,150,221, 23,137, 68,170, 65,131, 6, 17, 47, 47,175, 11, 40,112, 80,117,127,231, 51, 50,142,252, -240,195, 15,253, 39, 79,158, 44,183, 88, 44,110, 45, 89,142,109, 26,141, 6,103,206,156,177,228,228,228, 28, 46,195,138,113,228, -167, 3,251,219,189, 62,120,176,212,166,211,194,166,211,130,213,106,193,233,114, 65,244, 90, 72, 56, 22, 74, 41,143,208, 8, 5, - 88,163, 55,246,255,122,197,102, 54,155, 75, 13,108,168,213,106,143,156,222,180,169, 67,139,200, 72,241,153, 73,147, 96,181,217, -240, 74, 92, 92,161,184,178, 90,173,216,211,168, 17, 56, 66,208,120,236, 88,220, 97, 89, 86,171,213, 30,121, 18, 43,195,213,171, - 87,211,135, 13, 27,118,137,231,249,166,229,177,238, 56,224,237,237,173,211,235,245,200,204,204,228,178,178,178, 76, 0,144,158, -158,158,179,119,239,222,155, 60,207,183,168, 8,103,101,192,102,179, 21,179, 70,113, 28, 87, 96,117, 44,176, 28,200,246,239,223, -223,238,230,205,155,210,223,127,255, 29,167, 78,157,106,252,221,119,223,125, 20, 25, 25,217, 40, 33, 33, 33,181, 44,241,230, 46, -232, 47,236,254,135, 49, 91,183,227,157,119,222, 33,169,169,169,248,254,251,239, 81, 86,240, 84, 1,149, 6, 3, 88, 78,105, 57, -177, 85,223,243,192, 3,221,185, 20,227, 28, 0,135,168,145,165, 85,171, 86,189,218,172,153, 95, 32, 0,152, 77, 92,104,157, 58, -117,218,139,197, 98,153,189, 12, 55, 11, 8, 8, 88, 13,160,141,155,246, 83, 52,120,240,224,150,193,193,193, 77, 14, 30, 60,120, - 37, 37, 37,229, 58,165,244, 23,215,227,106,213,170, 53,243,214,173, 91,205, 37, 18, 9, 41,163,140, 0, 0, 58,116,232,240, 92, -100,100,100,192,129, 63,124,161,149,214, 6, 21,229, 1, 98, 5, 56,205,139, 72,144,214, 71, 68,196,249, 0,141, 70,211, 56, 55, - 55,247, 74, 57, 95, 16, 29,251,247,239,191, 97,211,166, 77, 17,237,219,183,167,132, 16,198, 53,164, 67,173, 90,181,186,158, 59, -119,174,233,152, 49, 99,214,218, 71, 15,123,236, 60, 76, 41, 77, 0, 48,160, 50, 31,218,225, 59, 52, 22,246,152,103, 2,254, 53, -248,245,111, 58,182, 82, 80,145,200,240, 45,120,158,239,195, 48, 12,172, 86,107,116, 72, 72,200,158, 65,131, 6,245,251,232,163, -143,188, 3, 2, 2, 10, 45, 89,171, 87,175, 54,222,187,119,111,167,213,106,253,141, 16, 50, 43, 57, 57,185, 79,120,120,137,239, - 7,221, 23, 95,124,177,173,119,239,222,111,140, 29, 59,214,216,168, 81, 35,117,189,122,245,242,207,158, 61,235, 29, 21, 21,165, - 21,137, 68,244,204,153, 51, 62,181,106,213, 50, 17, 66,228, 63,255,252,115,214,249,243,231,107, 69, 71, 71,127,131,130,225,214, - 37, 97,235,220,185,115,103,246,233,211,167, 86, 64, 64, 0,180, 90,109, 17,177,229,248,175, 80, 40,144,154,154,138, 93,187,118, -165,216,108,182,111,202,176,108,172, 90,185,122,205,123, 29, 91,190, 92, 69,173, 82, 34, 53, 41, 1, 92, 94, 14, 96,208, 67,198, -218,160,148, 81, 84,169,173,130, 88,228,133,248, 84, 61, 54,157,253, 53,149,101,217, 85,165,113, 90, 44,150, 85,239, 46, 91,246, -222,185, 53,107,170, 68, 14, 28,136, 27,155, 55, 23,118, 21, 58,132, 22, 71, 8,170,117,238, 12,198,215, 23,243,214,174, 77,179, - 88, 44,171, 30,119, 97,225,121, 94,100,177, 88, 74,203, 7,120,158, 79,186,113,227,198, 54, 66,136,142, 16,210,193,190,235,184, - 59,107,150, 51, 39,195, 48,124,253,250,245,119,135,132,132,244, 7, 96,168, 95,191,254,110,185, 92,222,201, 98,177,188,204,243, -124,210,111,191,253,182,139, 16,146, 74, 8,113,124,117, 60,214, 56, 90, 54,155, 13,179,102,205,194,252,249,243, 49,125,250,244, -194,252, 58,186, 15,115,115,115,107,156, 62,125, 90,122,226,196, 9,186,118,237,218,172, 55,222,120, 67, 51,118,236, 88,205, 87, - 95,125,245, 1,128,169, 37,113, 78,157, 58, 21,107,215,174,197, 59,239,188, 83, 92,101,137, 68,124, 82, 82, 34, 76, 38, 19,253, -226,139, 47,146, 37, 18,137,223, 55,223,124,163, 28, 51,102, 12, 17,218,213,199,130,143,149,195, 62,121,223,222,198,172,160,148, - 30,119,236, 80,171,213,202,221,187,127, 16, 3,192,206, 29,187, 36,148, 82, 95, 71,128,217,111,191,253, 86,209,186,117,235,224, - 18, 26, 92, 78,161, 80,152, 23, 44, 88, 16, 48,122,244,232,238, 71,143, 30,245, 35,132,180, 4,112, 17, 64,154, 93, 92, 7, 3, -184, 17, 24, 24,168,142,137,137,169,210,181,107, 87,175,178, 18,170,211,233,190,217,182,109, 91,245,101,167,125,113,192,208, 31, -137,252, 64, 80, 13,133,127,176, 14,245,189, 31, 96,232,208,161,225, 43, 86,172,248, 26, 64,179,114,136,172,161,253,250,245,155, -191,105,211,166,240,209,163, 71,167, 94,190,124, 57, 13,192, 38, 55,130, 47,115,196,136, 17, 41,155, 55,111, 14,163,148,174, 33, -132,200, 40,165, 59,133,226, 35, 64, 64, 97, 93,106,143,130,136,240,197,196, 23,113,231,223, 68, 8,217,195,178,108, 31,177, 88, -188,215, 57, 96,105, 72, 72,200,123, 22,139, 37,140, 16, 66,165, 82,105,106, 90, 90,218, 10,231,128,165, 73, 73, 73,125, 34, 34, - 34, 10,207,177, 7,221,116,142,181,161,126,229,149, 87,186,156, 59,119,238,203,125,251,246,165,235,116, 58,239, 29, 59,118, 40, -231,207,159,159,192,243, 60,157, 54,109, 90,100,183,110,221,242, 57,142, 75, 25, 59,118,108,173, 26, 53,106,140,189,117,235, 86, -172,179,208,114,195, 9, 66, 72,131,218,181,107,159,217,185,115,167, 90,163,209, 32, 61, 61, 29,217,217,217, 48, 24, 12,224, 56, - 14, 18,137, 4, 25, 25, 25,152, 51,103,142, 54, 57, 57,185, 88,192,210, 18, 56, 91, 84,175, 82,229,200,138,207,102,249,104,196, - 12,178,110,223, 4,155,147, 5, 9,107, 67,213, 6,190,144,202,148,184, 19,167,195, 7, 91,119,233, 30,100,231, 22, 11, 88, 90, - 18,231, 75,117,234,196,174,157, 50,197,219,148,152,136,176, 55,223, 68,126,126, 62,172, 86, 43, 24,134,193,159, 43, 86, 64, 26, - 20,132,153, 49, 49,134,235, 15, 30,116,118, 13, 88,234,142,179, 18, 10, 71, 33, 39, 33,100, 60, 33,164,208, 25,190, 95,191,126, - 69,142,253,225,135, 31,176,102,205, 26,152,205,102,150, 82,250, 30,165,116, 53, 33,196,219, 94,160,244,101,113, 86,175, 94,253, - 65,195,134, 13,127,229, 56, 78,108, 23, 25,244,198,141, 27,205,238,221,187, 87,213,133, 83,108,231,100, 31, 87,222, 3, 2, 2, - 86, 28, 60,120,176,122,112,112, 48,113,142,216,110, 23,138, 0,128, 9, 19, 38,116, 62,127,254,188,188, 73,147, 38,230,204,204, -204,230, 65, 65, 65, 71,183,108,217, 18, 56,104,208,160,228,235,215,175, 87,113,229, 12, 12, 12, 92,188,115,231,206,218,181,107, -215,102, 28, 86, 49,215,238,201, 81,163, 70,117,217,178,101,139,172,127,255,254,102,131,193, 16,226,227,227, 19,191,115,231,206, -192,190,125,251,166, 94,191,126, 61,236,113,228, 93,224,116,143,134, 13, 27,222,185,126,253,122,109,199,186,209,104, 68, 70, 70, - 6, 50, 51, 51,161,209,104, 16, 21, 21,245,231,189,123,247,106,187,227, 36,132, 52, 25, 48, 96,192,103, 95,127,253,117, 23, 47, - 47, 47,233,201,147, 39, 13,177,177,177,166,132,132, 4,214,102,179,209,176,176, 48,113,155, 54,109, 20, 61,122,244,240,146,203, -229,204, 39,159,124,146,249,249,231,159, 7, 18, 66,182, 58,166, 63,115,229,108,218,180,233, 47, 63,253,244, 83, 11, 66, 8, 68, - 34, 17, 44, 22, 43,114,115,115,241,240, 97, 18,110,220,184,129,115,231,206,225,240,225,195, 87,244,122,125, 19, 15,235,123, 0, -128,147,102,179,185,158, 76, 38,243, 88,216,115, 28, 7,177, 88,124, 27, 64, 87, 74,105,146, 80,150, 4, 78, 1,127,249,103,149, -203, 25,222, 46,192, 90, 16, 66, 28,147,146, 94,112, 13,225, 64, 8,249,136, 16, 50,203,201, 10, 86, 86, 90,180, 7, 15, 30, 60, -213,165, 75,151, 9,157, 59,119, 94,214,181,107,215,148,148,148,148,154, 75,151, 46,141, 96, 89,214,122,227,198, 13, 38, 62, 62, - 62,225,226,197,139,181,235,214,173, 59,246,214,173, 91, 39,202,176,102, 57,210,122,131, 16,210,186, 99,199,142,187,198,142, 29, - 91,173,101,203,150, 50,141, 70, 3,177, 88,140,187,119,239,226,202,149, 43,150,152,152,152,164,220,220, 92,143,167,224,161,148, - 94, 32,132, 68, 13,154,248,222,206,177,253,122, 7,190, 92,239, 57, 89, 88, 88, 24, 96, 52,226,246,131, 84,156,191,125,197,186, -254,212,249, 12,179,217,252,154,167, 83,240,216, 57,187,116,154, 50,101,231,236,215, 95, 15, 65, 74,138, 56, 44, 44, 12, 50,153, - 12,247,238,221, 67, 60,207,179, 11,214,173, 75,211,106,181,143,125, 10, 30, 71,204, 43,158,231,197, 0,160, 84, 42,241,238,187, -239,194,121,202,157, 53,107,214,192,104, 52, 2,128,152, 16,178,136, 16,178,161, 36, 43, 86, 9,156,213, 14, 28, 56, 80,205,153, -243,249,231,159,119,199,105,126,220,149, 36, 59, 59,123,230, 43,175,188, 18, 45, 22,139, 75,140,122,235,231,231, 7,157, 78, 7, -150,101,185,135, 15, 31,222,246,243,243,131, 68, 34, 1,165,212,109, 61,202,202,202,154,249,218,107,175,205,101, 24, 38,184, 36, - 78,181, 90,157,112,244,232,209, 58, 99,198,140, 97,254,247,191,255,221, 29, 61,122,180,252,232,209,163, 28,165,116,151,208,116, - 61, 89,112,254, 40,181,127,196,209, 82,142,253,141, 16,178,236,226,197,139, 65, 19, 38, 76,168,249,250,235,175,171, 59,118,236, -232,237,124,140,209,104,228,127,252,241, 71,195,154, 53,107,242, 78,157, 58,117,127,212,168, 81, 45, 81,224, 95,226, 22, 15, 30, - 60,216, 63,111,222, 60,223, 30, 61,122,212, 5, 80,232,159,149,145,145,129,132,132, 4,252,254,251,239, 9, 86,171,117,111, 57, -242,147, 69, 8,153, 61,100,200,144, 69,155, 55,111, 14, 31, 61,122,116,106, 76, 76,204,239, 40, 8, 48,236, 10, 77,191,126,253, - 26,109,222,188, 57,108,244,232,209,169, 0,230, 80, 74, 5, 63, 66, 1, 2,254, 66, 7, 87, 63,173, 82,125,180, 0,228,241, 60, - 15,147,201, 20,194,243,124, 31,158,231,225,237,237,237,238,184, 22,201,201,201,125,156, 39,149, 70, 25,211,229, 0,200,136,141, -141, 61,178,117,235,214,206,211,166, 77,123, 61, 55, 55,183,197,213,171, 87, 91, 2,128, 68, 34, 57,231,229,229,245, 75,116,116, -244,155, 83,167, 78,205,240, 68,100,185,136,173,250,139, 23, 47,174,180, 73,165,237,194,168,206,170,237,187, 38,124, 35,151, 71, -185, 76, 42,125,196, 62,169,180,169, 34,156, 83,190,254,122,130,122,251,246, 39,118, 82,105,179,217,204,246,239,223,255, 27,134, - 97,120,251, 87,172,216,108, 54,191,137,114,142, 84,117,229,236,215,175,223,255, 68, 34, 17,107,183, 20, 49,102,179,249,173, 71, -225,172,196,151,168, 30,192,196,210,142,121,225,133, 23,182,236,221,187,119, 88,159, 62,125, 56,171,213,154,222,187,119,111,241, - 47,191,252, 66, 25,134,137, 45,129,211, 12,224,191,165,113,134,134,134, 70,174, 92,185,242,242,164, 73,147,212, 91,183,110,245, - 63,125,250, 52,247,197, 23, 95,104,179,179,179,151, 8,237,214,147, 5,137, 68, 2,149, 74, 5,139,197,130,140,140, 12,148, 21, -178,138, 82,122,140, 16,210, 99,202,148, 41,175, 78,153, 50,165, 71,104,104,104,173,234,213,171,171, 24,134,193,195,135, 15,217, -228,228,228,116,155,205,118, 4,192, 46, 0,168, 85,171,214, 8, 0,235, 75,226,203,202,202,154, 75, 8, 57,182,121,243,230,158, - 94, 94, 94,245, 21, 10,133,191,205,102, 99,116, 58, 93,182,209,104,188,105, 50,153,246, 81, 74,207,150,179,220,199, 16, 66, 50, -223,120,227,141, 13,155, 54,109,138,184,123,247,174,238,226,197,139,175,184, 30, 87,191,126,253,211,155, 55,111, 14, 27, 51,102, - 76, 74, 76, 76, 76,185,124,180, 4, 8,248,151,124,136,157, 64, 9,254,197, 37,189,224,230,201,100, 50, 49,236,147, 75, 59, 44, - 90,110,142,187,224,226,147,149, 7, 96,158, 7,105, 50, 12, 29, 58,244,222,208,161, 67, 23,217,211, 32, 66, 65, 8, 7, 22, 5, - 30,255, 86,148, 17,210,161,132,140,178, 0,190,182, 47,149,117,243, 76, 40,136,151,179,248, 73,230,172,132, 52,153, 9, 33, 83, - 8, 33,139,236,155,166,252,246,219,111,171, 93, 44, 84, 87,157,247,151,101,121,114,199,121,229,202, 21, 87,206,223,203,195,249, - 79, 34, 55, 55,247,189,149, 43, 87, 94,152, 62,125,186,124,228,200,145,248,253,247,223, 49,127,254,124,115,110,110,238,214,138, -114,166,166,166, 38,132,134,134, 54, 93,190,124,249,135,203,150, 45,235, 75, 8, 17,230, 58,124, 66, 96, 52, 26,255,124,241,197, - 23, 65, 10, 28,150, 40,203,178,133,163, 69,237, 17,254,255,244,196,106, 4, 96,157,125, 1, 33,196, 31, 5,163, 12,179, 40,165, -174, 31,146, 83, 60,224, 59, 7,224, 92, 37,215,253, 99,132,144, 55,227,227,227,231,253,249,231,159,110,133,218,157, 59,119,142, -183,105,211,198,231,234,213,171, 31, 83, 74,247, 11,165, 67,128, 0,207, 33, 46,161,226,221, 1,240,186, 7, 21, 52,250, 17,174, -205,121, 96,253, 18,240,120,197,214,106, 66,200, 6, 39,107, 76,185,246, 63, 46,206,127, 10, 73, 73, 73, 57, 0, 10,167, 34,169, - 89,179,102, 49, 63,182,138,138, 45, 20, 68,129, 23, 34,193, 63, 65,184,123,247,238, 43,127, 67, 29,203,126, 66,235,254,113, 0, - 45, 75,218,111,179,217,102, 1,184,162, 10,252, 0, 0, 32, 0, 73, 68, 65, 84,152, 37,148, 10, 1, 2,202, 15, 33,250,180, 0, -215, 6,215, 92,154,224, 41,107,255,227,226, 20, 32, 64,128, 0, 1, 2,158, 20,184,153,235,176,125,225, 62, 0, 93, 74,120,249, -197,150,227, 2,229,158,208,179, 44,126,129, 83,224, 20, 56, 5, 78,129, 83,224, 20, 56,159, 61, 78, 39,238,101, 37,236,186,237, -194,247,213,211, 40,188, 10, 71, 31, 82, 74,255,182, 5, 64, 23,129, 83,224, 20, 56, 5, 78,129, 83,224, 20, 56, 5,206, 10, 94, -103,236,227,184, 78, 37,167,153, 2,104,239, 88, 23, 67,128, 0, 1, 2, 4, 8, 16, 32, 64, 64,165,192,163, 56, 90, 59,118,236, - 16, 57,254, 15, 25, 50,100, 20,199,113,133,195,222, 69, 34,209,202,239,191,255,126, 67,105, 23, 25, 48, 96, 0, 87, 26,167, 59, -148,117, 29,119,156, 13,159,243, 29, 23,224,171,122, 47, 55, 47,127,249,221,100,238,148,201,100,170,239,216,167, 80, 40,110,110, -216,176,225,143,202, 78,231,168, 81,163,234,186, 94,167,122,132,164,131,191,143,226,221,236, 92,253,210,223,255,208,125, 37, 20, -179,191, 23, 3, 7, 14, 44,215,241,247,238,105,112, 25, 97, 80,123, 73,161, 55,216,192, 93,122, 54,124,122,195,194,194,234,169, -213,234,225, 0, 26,228,231,231, 7,171, 84,170,116, 0, 55,180, 90,237,150,148,148,148,219,158,242,116,168, 65, 18, 0, 84,179, -175, 62, 56,126,143, 70,122,178,175, 44,116,171, 77, 76, 20,144, 19, 2,235,161, 59,180,112, 2,205,238,117,136,137,167,197,183, -119,171, 67, 44,148, 66, 74, 0,243,161,120,170,120, 86,202, 43, 33, 68, 13, 32, 10, 64, 67, 0, 87, 1, 28,166,148,230, 11, 53, - 89,128,128,103, 7,174,129, 74,157,215,197, 37,136,137,118, 82, 49,249,146,130,106, 0, 26, 96, 54,155, 37, 50,153, 12, 22,139, - 5, 42,149,114,213,219,163, 71,125, 6, 6,185, 54, 22,239,110,216,176,161,194, 51, 93,151,231, 58, 3, 6, 12, 56,230,122,190, -159, 90, 57,247,248,143,211,252,218,245, 92, 48,223,114, 47,115,170, 78,167, 99,228,114, 57,204,102, 51,124,125,125, 91,143, 27, - 59,182, 25, 35,161, 22,169,212,235,236,178,101,203, 82, 43,154,206, 15, 62,248, 32,212,106, 53,253,135,231,121,153,197, 98,145, -187, 94,199, 87,229,181,224,248,143,211, 84,237,123,205,255, 12,128, 32,180,158, 32, 20,136,172, 80,188, 63,244,101, 44,156,212, - 5,154, 14, 11,158,133, 10, 45,170, 89,179,230,132,200,200,200,193,235,214,173,147,214,172, 89, 19, 10,133, 2, 70,163, 49,236, -207, 63,255, 12, 27, 55,110, 92,251, 90,181,106,109,187,123,247,238, 42, 74, 41,231, 1,101,181,227, 27, 63, 1, 0,180, 30, 62, -167, 26, 33,228,191, 0,242, 1,160,125,245,191,246,117, 24, 57,167, 26, 33,100, 10,138,142, 22, 78,161,148,186, 13,146, 73, 1, -217,190,205,139,209,103,196,127,197,132,144,113,142,237, 61,234, 2, 63,125,187, 2,221,135,188, 87,100,123,183, 90, 16,255,184, -121, 49,122,141,248,111,137,179,154,119,175,203,216,120,158,150,104,137,103, 24,194, 30,186, 67,221, 77, 48,156, 70, 41, 61,228, -230, 94,118, 67,193,132,206,110,143,239,245,188, 56,205,106,227,220, 6,156,149, 74, 68,233,251,110,177,197,206, 29,217,148,216, -108, 92, 65,219, 42, 21,131,243,245,245, 61,254,241,199, 31,139,123,245,234,133,245,235,215,183,249,234,171,175,198, 18, 66,126, - 6,176,151, 82, 26, 47,212, 82, 1, 2,158, 93,193, 85,162,208, 18,139,176,118,239,206, 13,181,211,210, 51,241,198,152, 15,177, -117,235, 86,228,228,228,192,207,207, 15, 50,169, 84,178,124,209, 39,161,106,181, 87,232, 27, 99,167,174, 5, 80,175,162, 9, 42, -231,117,234, 20,203,144, 61,160,169, 88,196, 72,100, 50, 25,179,109,219, 54,228,230,230, 66,163,209, 64, 38,147, 48,203,230,127, -164, 84,171,189,149,111,141,159,222, 6,192,246,138,166,211, 98,209,183,217,189,117,131, 58, 35, 35, 3, 35,223,153, 10,215,235, - 72,165, 82,206,241, 98, 17,138,217, 63,135,204,204, 76, 0, 64, 96, 96,160,139,200,106,137,101,147,187,226,131,165,135,145,111, -178, 60,245,249,172, 89,179,230,132,129, 3, 7, 14,158, 59,119,174,148, 97, 10, 6, 14, 27, 12, 6, 24,141, 70, 84,169, 82, 5, -199,143, 31,151,206,156, 57,115,240, 15, 63,252, 0, 0, 95,148,151,255,250,245,235,213,171, 85,171,102, 2,128,222,141,124, 92, -247, 69, 58,246, 1,128,143,143, 79,153,124, 1, 26, 47,243,245,235,231, 27, 56,206,155,208,185, 10, 87,194,118, 19, 0, 85,105, - 92, 60, 79,197,135,191, 28, 87,226,254, 49,115,191, 99,175,110, 63, 85,175,102,205,154, 70,231,237, 37, 4, 92, 6,128, 16,189, - 94, 95,205,117,163,227,120,171,141, 11, 46,233,122, 93,223, 93,227, 86,128,217, 56,136,191,251,238, 59, 0,192,146,255, 14, 19, -125,253, 75,166, 88, 44, 46,104,106, 23, 45, 90,132,217,179,103,203, 14, 29, 58,212, 99,243,230,205, 61, 8, 33,203, 75, 18,170, - 2, 4, 8,120,250, 68,150,243,111,169, 66,139, 33,196, 71,237,227,141, 1, 67,223,198,193,131, 63,161, 93,187,118,133,251,106, -212,168,129,129,175,245,197,247, 27,151, 1,128,207,163, 36,234, 81,175,147,147,103,248,191,238,131,191,156,243, 32, 85,127,110, -223,190,125,104,219,182,109,145,243,135, 14, 26,128,111,191, 89, 4, 74,169,244,145,110, 30,101,164, 62,106, 47, 12,121,227, 29, -184,187,206,216,145,253,246,117, 27,184,162, 75, 90,150, 97,153, 80,212, 30, 47,110,221,186, 5,179,217, 12,181, 90, 13,137, 68, - 2,185,166, 26,146,197, 45,144, 65,106, 34, 61, 56, 31,147,187,132, 96,201,251, 29,241,193,210,195, 88,190,245, 60,154, 34,245, -169,206,111, 88, 88, 88,189,200,200,200, 34, 34, 75,167,211, 65,175,215, 67,171,213, 66,167,211,129, 97, 24, 76,157, 58, 85,122, -226,196,137,193, 97, 97, 97,177, 30,116, 35, 62,104, 61,124, 78,129,216, 16, 73,244,179,102,205, 50, 7, 7, 7,155, 85, 42, 21, - 21, 75,229,186, 14, 35,231,248, 0, 0, 35,150,234,150, 47, 95,110,169, 82,165,138, 73, 44, 22,203,222,123,239, 61,143,194,195, -152,205,102,234,204,105,177,152, 11,183, 47, 88,176,192, 18, 18, 18, 98, 86,169, 84,212,106,245, 92, 4, 95,187,151, 13,185, 84, - 4,185, 84, 4,133, 76, 2,159,234,205, 33,207,249, 29, 44,203, 98,225,194,133,214,208,208, 80,139, 74,165,162, 50,153, 76, 58, -105,210,164, 50,211, 57,106,212, 40,170,209,104,172, 42,149, 74, 58,123,246,236, 98,209,157,143, 94,125, 8,165, 76, 2,149, 92, -140, 58, 53, 34, 32,167, 70,143,211, 42, 18, 21,245, 70,144,203,229,104,211,166, 13, 26, 52,104,128, 61,123,246,116, 0, 32, 8, - 45, 1, 2,158,114,184, 90,177,138, 9,173,253,251,247,183,135,125,214,233,158, 61,123, 22,204, 54, 13,138, 41, 19, 94,195, 91, - 35,135,128,227,248,194,233, 38, 8, 67, 48,254,205, 30,224,121,206,147, 11,151, 57,196,179,188,215,113,230,164,132, 17, 1, 64, -237,200, 48, 58,246,173,215,193,241,124, 65, 24, 84, 0, 16, 1,111,143,236, 94,176,173, 18,210, 41, 2,135, 15,199,189, 10,119, -215,169, 87, 59,156, 97,173, 38, 16,167,201, 30,255,142,201, 54, 5,206,162, 56,123,246, 44, 84, 42, 21,134, 13, 27,134, 73,147, - 38,129, 19,107,176,227, 92, 22,166,173, 62,135,124,179, 21, 67, 59, 86,199,228,215, 27, 97,242,242,163,133, 34,171, 70,141,220, -167, 58,239,106,181,122,248,186,117,235,138,137,172,180,180, 52, 70,175,215,195,106,181,242, 58,157, 14, 28,199, 97,250,244,233, -146,153, 51,103, 14, 39,132,204,182,243,152,221,113, 30,191, 71, 35, 9, 33, 83,174, 95,191, 30,249,241,199, 31, 91, 59,117,234, -244,160, 70,141, 26, 6,145, 72,132,176,176,176, 21, 81, 81, 81,254,115,231,206,181,246,232,209,227,190, 72, 36, 66,157, 58,117, - 12,191,255,254,123, 36, 0,165,167,121,119,230,220,112,116,165,227,171, 15, 81, 81, 81, 9,117,234,212, 49,136, 68, 34,252,241, -227, 2,234,233,253,148,136, 25,212,173,226,235,248,140, 4,148,222, 64, 78,193,106, 84, 84, 84, 82,189,122,245,244, 12,195,224, -218,181,107, 17, 0, 20,101,113, 42,149, 74,219,208,161, 67, 31,220,190,125,187,216,241, 0, 32, 22, 49,104, 89,207,110,192,170, -210, 20, 72, 58, 93, 98, 58, 37, 34,176, 51, 39, 12, 19,107, 20,128,220, 39,208,172,213,106,161, 86,171, 11, 44,100, 86, 43,126, -251,237, 55,180,106,213,170,253,246,237,219, 79, 8,245, 93,224, 20, 56,255,130, 59, 45,242,180, 89,179, 28,130,203,157,143,214, -113,215, 76,113, 28,139, 26,213, 66,176,224,147, 81,224, 56, 30, 28,199,129,181,255,114, 28, 7,155,213, 90, 41,137,123,148,235, -248,169,149,115,127,218,246,174, 95,167,126,139, 58, 71,127, 60,242, 8,199, 1, 60,111,131,205, 6,112,188, 13, 60,199,193,102, -171,156,174, 34, 27,207, 35, 50, 34, 20,209, 31,143,132,235,117,182,124,191,189,247,209,189, 83, 85,237,122,205,255, 16,192, 66, - 65,219, 63, 30, 75,150, 74,165,194,150, 45, 91,208,188,121,115, 0,192,169, 56, 22,211, 86,159,195,161,232,214,104,221, 32, 0, -233,185,102,188,183,234, 10, 14,158, 75, 47, 38,178,158, 98, 52,168, 89,179,102, 17,145,181,120,241,226,192,213,171, 87, 87, 1, -128,215, 94,123,237, 97,231,206,157, 51,227,226,226, 16, 22, 22, 70, 50, 51, 51,123, 2,120,207, 94,241,167, 80, 74, 87,151,192, -107,168, 86,173,154, 41, 40, 40,200,236, 16, 68, 12,195, 64, 44, 22,163, 90,181,106,166,224,224, 96,115,157, 58,117, 12, 82,169, - 20, 12,195,192, 33,244, 60,108,128, 32, 18,137,224,224,116,181,246, 56, 56,203, 3,137,216,233,120, 90,220,130,196, 48,140,219, -235,149, 4,133, 66, 65, 1,148,120,188,136,113,106, 30,197,165,123, 8,108,188, 76, 37,132,144,227,148, 82, 92,190,124, 25,119, -239,222,133, 84, 42, 69,104,104, 40,102,207,158, 13,179,185, 64,239, 14, 28, 56,176, 61,128,107, 66,109, 22, 32,160, 16,199,159, - 54,129,229,106,213,114,231,163,197,184, 81,147,133, 2,168, 64,236,184, 17, 63, 54, 22, 54,155, 21, 40, 99, 82, 85, 79,133, 86, - 73,215,225, 56,190,212,235, 56,124,180,120,158,138,221,138, 44,158, 7,107,179, 85,202, 13,228, 57, 27,120,222, 6,119,215, 33, -132,225,236, 13,190, 84,168, 39,143, 7,102,179, 25, 67,134, 12, 41, 20, 89, 0,144,169,179, 33,223,108, 67,235, 6, 1,104,214, -113, 32,130, 53,114,196,156,124,136, 96,141,234, 89, 17, 89,200,207,207, 15, 86, 40, 20, 48, 24, 12,133,150,172,213,171, 87, 87, -177, 88, 44,140,197, 98, 97, 98, 98,182, 71,108, 61, 18, 87,117,203,161,184,170,235,118, 93,170,154,147,147,215,128, 82,170,164, -148, 42, 1, 44, 34,132,200, 75,227,151, 74,165,133, 2,197, 89, 0,201,229,242, 10, 9,152,194,134,198, 46,206,164, 82,169,219, -237,174,221,107,101, 65,234, 44,180, 64, 11,172, 90, 46, 98, 75, 36, 18,193,225, 27, 85, 22,100, 50, 89, 97,222,221, 65, 44,114, -186,158,168,252,174,152, 86,171, 21,122,189, 30,185,185, 69, 44,170,112,136, 96, 1, 2, 4,184,215, 34, 79,171,216, 42,210,126, -184,170, 73,216,103,159,102,109, 86,183,226,103,251,143,103,240, 32,213,128,208,192, 11,160, 37,204, 84, 93, 18, 6, 15, 30,188, - 49, 44, 44,172,112, 62, 45,185,210, 59, 96,236,187,159,130,101,173,240, 81, 50, 24, 51,188,123, 17,145, 85, 96,209,178,160, 36, - 57,151,147,103,248,191,238, 3,191,152,227,171, 14, 56,231, 42,126,162, 55, 93, 26,144,163, 53, 71, 48,204,175,200, 33, 97,220, -192,183, 63, 29,229,212,184, 95,221,182,102,214,100,143,111, 28, 97, 36, 3,198,173, 24, 75,197,222,245, 85,140,238,228,180,145, - 47,239,118, 22,115,254,254,254,251,186, 14, 88,222, 37, 45, 91,240,209,122, 92,144,201,100,152, 52,105, 82,145,109,129, 62, 18, -168,228, 18,156,185,145,137, 75,199,182,227,212,245, 76, 40,164, 34, 4,209,187,207, 76,190, 85, 42, 85,122,126,126,126,152,209, -104,132, 86,171,133, 86,171, 45, 42, 8, 36, 18, 50,246,157,137,129, 18,169, 12, 54,171, 5, 7,183,124, 94, 38,103,135, 26, 36, -161,125,117, 84,235,221,200, 7, 34,137, 76,119,163,102,205, 21, 98,177, 24, 12,195,224,199, 85,211,222,219,181,244, 93, 31, 0, -184,186,111,149,118,200,212,149, 95, 48, 12, 3,179,217, 44, 47, 79,186, 19, 19, 19, 35,204,102,179,201, 46,208, 28,166,117,220, -187,119,175,170,217,108, 54, 58,111,247, 4, 74,149, 15,160,169, 1,168,130,139, 89,207,238,223,191, 31,110,179,217,242,197, 98, - 49, 44, 22,139, 71,170,136, 97, 24,233,181,107,215, 34,120,158,119,123,124,131, 90,225, 64,104, 35, 64,230, 91,158, 6,215,163, - 99,220,125, 1, 11, 16,240,111,183,108,161,156,250,226, 73, 16, 88,238,254, 59, 11,173, 14,251,247,239,167,206, 95,136,172,205, -102, 23, 89,127,137, 30,142,227,145,156, 97, 66, 92,220, 31, 88,190,124, 57,206,156,255,175,239,220,185,115,229, 51,103,206, 52, - 15, 30, 60,120, 41,207,243, 47, 50, 12,115,117,192,128, 1,110,191,210,120,158,175,122,233,210,165,154,142,117,155,205, 6, 31, - 31, 31,248,248,248,160, 94,157,136, 98, 34,139,227, 56, 88, 75,233, 58,116,248,104, 17,202, 83,155,141, 3,199,243,133,226, 39, - 71,107,142,216, 27,123,185,182,211,225,207, 57,254,180,105, 94,191,100, 49, 56,110,118, 97, 62,182,173,153, 53,121,238,250,245, -242, 28, 46,104,210,144, 1,111, 53, 28, 56,100, 56,134,190,250, 74,123,179,197,178, 71,196, 80,222, 86,120, 61, 48,160, 40,226, -163, 37,224,239, 67,102,102, 38,140, 70, 35, 52, 26, 77,145, 23, 86,152,151, 1, 83, 7,213, 69,212,180,211, 48, 89, 57,200, 37, - 12,222,235, 27,137, 95,126,136, 65,166, 57,179,112, 52,226, 83,142, 27,241,241,241, 97, 85,171, 86,133, 86,171, 5,203,178,252, -107,175,189,246, 80, 44,150, 68,136, 37, 18,210,107,200, 68, 62, 53, 53,217,198, 48, 34, 80,202,225,149,129,227,136, 92,161,148, - 90, 45, 22, 22,192,148, 18,230,148,116, 14,225,224, 19, 21, 21,229,239, 24, 9,184,107,233,187, 62, 78,251,212,205,154, 53,243, -119, 30,117,232,161, 40, 38,131, 7, 15, 86, 86,171, 86,141, 0,192,175, 91, 62,118, 88,207, 72,239,222,189, 21,213,170, 21,248, -225,255,188,202,243, 57,181, 3, 85, 20,200,187, 7,228,221, 47,102,201,234,221,187,183,188,102,205,154,229,170,139,118, 7,248, - 18, 99,119,121,137, 89, 32,245,178, 71, 92, 35,155, 18,219,199,237, 32, 94,250, 10, 3,153,119,128,185,229,180, 67,191, 8, 98, - 75,128, 0,143,224,162, 69,158, 30,216,231, 54, 60, 14,160,131,253, 23, 69,124,180,122,246,236,121,162,136,122,164,128,141,181, - 22, 19, 89, 28,199, 65, 66,204, 88,190,124, 57,222,127,255,125, 0,144, 78,158, 60,121,247,220,185,115,251,243, 60,255, 34,165, -180, 45, 33,164,180,175,198,227, 97, 97, 97,105,148, 82, 9,195, 48,109, 87,173, 90,229,223,163, 71, 15,248,248,248,128,242,180, -152,200,226, 56, 30, 86,171, 5, 37,153,180,252,212,202,185, 63,109,159,228,215,169,239,162,206, 28,207, 31,113,136, 44,158,227, - 0,190,224,164,172,244,135, 56,124,112, 15,214,174, 89,155, 3, 66,111,129,130,103, 24,230,106, 73,105,228,121,254,197,211,191, -222,108,219,166,121,125,204, 93,191, 94,126,253, 82,202,238,137, 31,204,104, 56,112,200,112,108,255,126, 11, 24, 54,247,178,179, -200,226,108, 60,242,114, 50,123, 31, 19,124,180,254, 49,216,108, 54,228,228,228,192,166,207,193, 75, 97, 6,124, 58, 48, 24,105, - 57, 38, 72,248,124, 60,175, 78,199,177,236,251, 80,169, 84,207, 68, 94,181, 90,237,150,113,227,198,181, 63,121,242,164,148, 97, - 24,104,181, 90,116,236,216, 49, 51,131,175,162, 24,251,206,196,192,228,228,135,172, 90, 41, 54, 75,165, 18,164,167,167,243,237, -123, 12, 51, 14, 25,245,126,248,251, 31, 71,175, 75, 62,179,122,181, 39,215,112, 30, 9,232,186,239,235,175,191,182, 84,169, 82, -197, 36,151,203,101, 35, 71,142,244,168,255,208, 98,177,208, 5, 11, 22,152, 93, 71, 23, 90, 44, 22,186,124,249,114, 75, 68, 68, -132, 89,169, 84, 82,155,173,108,191, 79,134, 33,236,152,185,223,177, 44,203, 22,177, 98, 57, 68,150,141, 39,250, 47,191,252,210, - 26, 17, 17, 97, 81,169, 84, 84, 46,151, 75, 61, 73,231,196,137, 19,169,159,159,159,213,203,203, 75, 58,117,234,212, 71, 26,117, -104,227, 32,158,187,170, 48,188,131,220,199,199, 7, 58,157,174, 48,173, 97, 97, 97,130,216, 18, 32,192, 13,138,105,145,167,204, - 10, 87,146,143,150, 91, 7, 6, 30,208,167,165,103, 6, 7,134, 84, 7,203,178,246,197, 6,214,102,195,164,183,135, 96,233,154, - 47, 1,192, 33,182,162, 38, 79,158,188, 27, 46,254, 94,238,176,109,219,182, 57,147, 39, 79, 86,167,165,165, 29,218,184,113,163, -255,176, 97,195, 48,101,202, 20, 44, 90,180, 8, 18,153, 2,254, 65, 85, 11,175,227,184,110,102, 70, 54, 40,168,222,173,130,180, -251,104, 81, 10,113, 64, 80, 36,108,156, 13,188,205, 6,155,205, 6, 34, 42,200,218,225,131,123, 48,236,205,137,144,200,213,126, - 43,151, 47, 52, 54,124, 41,172,255,204,209,163,205,101,203, 83, 48,215, 47,165,236,158,248,254,212, 40,135,200,218,185,101,205, -173, 37,211,251,110,149,203,196,133,215,177,241, 60, 24, 70, 36,248,104, 61, 70, 4, 6, 6, 34, 35, 35, 3,185,185,185,240,242, -242, 66, 86, 86, 22,178,179,179,145,155,155, 11,179, 54, 7, 1, 92, 46, 8,155, 13,177, 88,140,244,196, 2, 31,192,103,196,154, -133,148,148,148,219,181,106,213,218, 54, 99,198,140, 33,211,167, 79,151,240, 60,143,184,184, 56,128, 16, 42,145,202,192, 48, 12, - 36, 18, 49,242,242,180,188,202, 91,147, 98,165, 34,149, 68,250,255,236, 93,101,120, 84,215, 22, 93,231,142, 79,220,136, 17,197, - 3,193, 93,130, 20, 45,218,226,193, 93, 10, 20,104,113,138, 4, 9, 77,113, 43, 82, 74,105,208,240,112, 41, 86,156, 96,129, 32, - 9, 22, 18, 66,146,137, 18,159, 76, 70,239,121, 63,152,201,155,132,200, 76, 8,165,237,155,245,125,243,205,204,185,231,174,123, -174,157,187,238, 62,123,239, 35, 0,195,225,151, 22, 38,252,182,253,200,247,233, 29, 24, 46, 63, 71, 23, 9,200,231,243,113, 59, -100,117,118,251,145,203,172, 0,128, 47, 20,103,116,233,210, 37,182,118,237,218,210,251,247,239,123,162, 72,212, 97, 49,247,167, -250,171,145,179, 57,102, 98,145,180,115,231,206,111,117,156,111, 46,108,206, 30, 54,121, 1, 33, 28,129,180,103,207,158,177,190, -190,190, 82, 14,135,131,200,227, 65,217, 95,141,156, 45, 34,255,139,233,253, 0,231, 94,209,113,143, 66,174,215, 90,177, 98,133, -170,123,247,238,113, 58,127,177, 55,111,222,184,246,232,209, 67,184,110,221, 58, 85,143, 30, 61,226,235,214,173,155,203, 48, 12, -194,194,194,220, 74,179, 84,233, 32, 22,139, 85, 99,198,140,121,251,228,201,147,114, 69, 29,150, 5,119,119,119,176, 44,139, 14, - 29, 58, 32, 63, 63,223,100,217, 50,193,132,127, 33,138,230,209, 42, 53, 51,188, 74,173,154, 50,225,219,165,155, 1, 98,161,215, - 11,252,207,176, 68, 65,190,255,254, 59,115, 0, 98,157,216,154, 49, 99, 70, 70, 89,141,208, 19, 89, 77,134, 12, 25,130,121,243, -230, 97,205,154, 53,154,159,126,250,137,243,252,101,140,114,228,228,197,153, 69,182, 3, 10,154,203,170,216, 41,197,241,101,100, - 73, 23,251,245, 88,181, 52, 33, 57,239,198,200, 73, 11, 11,122, 47, 13,128,108,226,162, 1,128,109, 63,255, 44,229, 9,173,204, - 7, 12, 30, 6, 0,157, 55,175, 15, 58,186, 28,191,148, 45,182, 40,241,153, 50, 99,182,173, 78,100,109, 89,183,226,137, 53, 73, -222, 52,245,187, 8,149,254,118, 0,192,206, 18, 71,253,122,172,234,154,146, 46,221, 96,186,212,254, 26, 40, 20, 10,108,220,184, - 17, 11, 23, 46, 68,122,122, 58,210,210,210,144,145,145, 81,240,201,205,205,133,179,179, 51,254,248,227,143, 15,252,152,254,233, -136,142,142,222,114,226,196, 9, 92,189,122,117,208,220,185,115,121,206,206,206,196,218, 58,153,168,148, 10, 0,148,166,166,166, -178,102, 22, 54,137, 14, 78,110,111, 37, 73, 41, 62, 42,165, 2,172, 70, 89,162,183,185, 54,189,195,247, 79,159, 62,245, 90,189, -122,181, 66, 63, 18,112,240,236,205, 27, 27, 55,110,108,183,105,211, 38, 69,207,158, 61, 99,117,206,235,134, 56,195,159,127,141, -111,159, 62,125, 92,167, 40,103,251,241,171,119,233, 56,245,163, 17,123,125,183,125, 87,245,234,213,237,124,125,125, 99, 75,227, -173, 82,165,138,204,197,197, 69, 81,171, 86,173, 92, 30,143,247,222,146,165, 82,229, 85,169, 82,133,117,114,114, 82,212,174, 93, - 59,215, 88,167,125,177, 88, 76,117, 86,177,226, 96, 76,212, 33,143, 3,245,144, 33, 67, 10, 50,195,127, 95,189,122,226,176, 97, -195, 92,102,206,156,137, 93,187,118,225,230,205,155,233, 69,215,105,215,174, 29,174, 93,187,182, 20,192, 98,211,221,109,130, 9, -255, 60,148,153, 71,171, 40,118,239, 14,190, 4, 61,159,166,226,176,124,249,114,161,214,146,213,121,250,244,233,144,201,100,182, -197,168,187, 78,186, 92, 27,197,137,172,160,160,160,253,148, 82, 55, 0,109, 52, 26,246,206,206, 95,118,119, 48, 64, 49, 22,112, - 82,194,112, 24,134,228, 10,120,244,225,207, 59,118,237,213,175,167,117,126,175, 9,130, 71,155,215, 7,201, 0,116, 46, 42,182, -250,247,239,159, 87,148, 83,135,137,147, 38, 22,136,172,205,235,131, 46,248, 54,241,248,122,225,216,101,197,138,179,101,139, 39, -152, 51, 12,105,165,239,163, 85, 28,103, 5,168,101, 19,167, 22, 66,161, 16, 7, 14, 28,128,159,159, 31,234,215,175,143,244,244, -116,228,230,230, 34, 55, 55,183,192,234, 21, 25, 25,137,216,216, 88, 8,133,194,127,213,190,107,167,213,217,232,226,226,114,113, -209,162, 69,195,210,210,210,122,100,100,100,218,159,218,189, 12,221, 6, 76, 34,237,186,251, 75, 21,148, 43,138, 79, 76,174,117, -229,204, 62,187,179, 7,183, 64,169, 80, 76, 32,228,231,103,186,244, 14,197,180, 51, 79,151,198,161, 86,173, 90, 82,125,161,226, -225,225,145,239,234,234, 42,247,245,245, 45, 40, 47, 46,154,175,184,125, 55,150, 83,235,255, 37, 45,235,120,234, 68, 91,209,180, - 17,102,102,102,208,137, 47, 99,218,169, 31,109, 89,108, 71, 89, 70,212,161, 62,231,111, 15, 40, 79,127,217,111,132,112,130,131, -131, 59, 5, 7, 7, 55, 1,240, 16,192,121, 0, 42,237,122, 5, 78,243,148,210, 37, 0,150,152,238,119, 19,231,255, 43,231, 63, -220,154,213, 14, 90,223, 44, 45,218, 83, 74,175,150, 40,180,202,130,206,241, 29, 0, 51, 99,198,140, 12,153, 76,102, 59,108,216, -176, 82,215, 73, 74, 74,218,181,103,207,158, 66, 34,171,111,223,190,163, 14, 31, 62,124, 49, 37, 37,165, 92, 59,102,107, 37, 94, -126,245,228, 28,219,118, 61, 87, 77, 7,240, 83,241, 50, 19,172,111, 19,151,175, 55,175, 15, 58, 90, 68,108,253, 14,160,111,113, -199, 11, 0,186,124,217, 7,251,118,111,214,249,118,137,159,220, 79, 56, 59,232, 65, 64,177,209,138, 54, 22,194, 0,109, 59,102, -194,228,163,245,151,192,199,199, 7,183,110,221,194,164, 73,147,208,177, 99, 71,244,233,211, 7,238,238,238, 16, 10,133,120,253, -250, 53,174, 95,191,142,232,232,104,228,229,229,161,126,253,250,255,202, 99,144,152,152,248, 92,155,140,244, 91,221,219,148, 80, - 36,230,251,143,158,238, 86, 16,117,120,112, 11,228,249, 50, 0,224, 18, 66,126, 34,132,252, 90,130, 67,252,123, 65,193,229,242, -195,195,195, 61,117, 86, 43,165, 82, 41,212,149,223,191,127,223, 83,151, 91, 43, 63, 63,223,224,168,195, 79,197,249,248,241, 99, - 55, 93,116,164, 46,186,144,203,229,242,195,194,194,220,116,156,114,185,220,160,168, 67,129, 64,192, 15, 15, 15,119,211,104, 52, - 21, 22,117, 88, 68, 24,159,211,126,116,157,178, 78,100,233,124, 58, 76,195,134, 38,152,240,207,198,149,162,147, 74,235,244, 68, -185,132,150,206,241,221, 8,165,199,245,242,242,234, 50,120,240,224, 66, 34,171,127,255,254,154, 35, 71,142, 92,113,113,113, 73, -102, 24,230,185,177,237, 40,240,209, 2,120, 69,151, 49, 12,243,168, 77,211,218, 96, 24,230,209,194,177, 99,229,203,241, 75, 33, -177,117,252,232,161,174, 37,245,139, 0, 96,239, 88, 25, 67, 70, 77,193,144, 81, 83,108, 1,180, 6, 74,142, 86, 44,173, 29, 38, -124, 58,180,106,213, 10,207,158, 61,195,133, 11, 23,112,237,218, 53,228,229,229,129, 16, 2,177, 88, 12,133, 66, 1,161, 80,248, -175, 21, 89, 37, 65,169, 84,170,231, 46, 93,189,135,195,229,171, 89, 86, 73,148, 74,229,104, 99,238,243,185,115,231, 50, 40,198, -247,106,234,212,169,197,150,127, 46,206,249,243,231, 23, 27, 37, 56,117,234,212, 82,163, 7, 75,194,119,223,125, 87, 97, 81,135, - 6,138, 47,147,160, 50,193,132,127,159, 85,171,216,208,189,114, 9, 45,134, 97, 30, 21, 19, 93, 72, 0,208,226, 34,250, 40,165, -106, 14,135,179,212,198,198,102,130, 84, 42,253,163,111,223,190, 51,250,247,239,175, 1,222, 59,200,151,119,167, 50,178,164,139, -219,247,250,113,102,102,174,124, 83,209,101, 69, 45, 79, 58,177,181,101, 67,208,214,163,135, 15,244, 79,146,196,111, 45,105,223, - 74, 18, 84, 37, 69, 43,102,101,203,150,182,239,245,227,244,140,108,153,201, 71,235, 51, 88,182,116, 40, 58,169,244,255, 3, 40, -165,114, 66,200, 44, 66,136,206,162, 59, 43,250,242,134,173,255,187,241, 55, 62,214, 95, 86,138, 53, 43,209,144, 9,162,139, 91, -175,180,101,159,128, 51,185,148, 9,162, 75, 67,178,145,124,201, 0,192,231,113, 82, 74,154, 60,154,207,227,164, 84,208, 57,212, - 37, 56, 92,106,186,163, 77, 48,225, 31,219, 23, 27,231,163,165, 19, 65, 37,161,164, 60, 89,165, 65,163,209,252, 8,224,199,138, -220,177, 39, 47,115,118, 0,216, 97,104,125,173, 79,214, 8,237,167,248,118,190,123,106,244,190,245,239,223,127, 27,128,109,166, - 75,237,175, 65, 72, 72,136,233, 32, 20,190,193,183, 18, 66,126,213, 9, 47, 67,151, 21,169,119,226, 19,180,235, 83,112,158,251, - 43,249, 78, 61, 83, 59,125,238, 78,218, 4, 19, 76,248,251,163, 56,107, 86,169, 81,135, 38,152, 96,194, 63, 78,108,201,203,179, -204, 4, 19, 76, 48,193,132,138,123, 89, 42,206,215,146, 0,232, 84,194, 74, 6, 71, 19, 16, 66, 58,149,163, 81, 23, 77,156, 38, - 78, 19,167,137,211,196,105,226, 52,113,254,127,113,150,197,173,191, 62, 33,100, 60,165,116, 7,254, 1, 40, 49,160,133, 82,250, -201, 62, 0, 58,153, 56, 77,156, 38, 78, 19,167,137,211,196,105,226, 52,113,150,115, 59,227,255,138,237, 84, 64, 59,105,209,143, -110,153,105,232,208,132, 79, 14, 55, 55, 55,176, 44, 11,134, 97, 16, 31, 31,111, 58, 32, 38,152, 96,130, 9, 38,252,171, 96,180, - 51,188, 9,197,152, 4, 61,191, 90, 8, 22,243,223,255, 65, 16,125,123,108,201,191,109, 31, 7, 12, 24,192, 49,166,126, 76,140, - 13,243, 0, 46,107,172,204,249,189,114,165,170, 53,154,176, 69,155,138,171,199,178, 44, 78,158, 60,137, 94,189,122,233,204,171, - 0, 0, 23, 23, 23,156, 60,121,178,160, 94,227,198,141, 11,146, 55,154, 96,130, 9,159,184, 79,179,173,227, 14, 66, 70, 3,244, -127, 97,151, 44,141,160,153,145,187, 11,213,179,169, 61, 10, 12,169,163, 87, 36, 3,197, 78,154, 17, 17, 87,194,240,137,238,129, - 99, 19, 21, 21,229, 89,173, 90,181, 88, 0,153, 69,170,125,176,140,150,114,243, 19, 66,136, 67,149, 70,195,205, 68,102,147, 21, - 10,133,183,133,165,101, 74,250,187,212,109,233,111, 31,111,209,171,102,117,231,206, 29,151,230,205,155, 75, 0,228,148,197,105, -130, 9, 21,122, 63,125,152,176,180,226,156,225, 73,141,126,222, 80, 51, 35, 64, 49, 20, 4,225, 52, 58,164, 95,185,120,170,245, -173, 12,150,219, 12, 64, 35,128, 54, 50, 23,139, 26,202, 20,202, 20,150,210,225, 52,234,224, 67,163,249,170, 12, 56, 13,160,123, - 9, 75,151,210,232, 67,198, 9, 37,150, 46,184,119,237,136,208,198,140,160, 90,227,190,179,161,151,193,249, 35, 78,140, 24,192, - 72, 66, 72, 71, 51, 51,179, 26,121,121,121,111, 40,165,143, 1,108,165,148, 74,202,201,201, 0, 24, 99, 97,110,222,205,211, 82, -208,232,109, 90, 86, 66,142, 74,115, 29,192, 79,148,210,140,138,186,168,222,139, 44,231, 29,211,253,155,143, 12,154,214, 9, 54, -237,127,156, 13, 96, 83,105,235, 48, 12, 51,206,213,213,213,187,114,229,202, 49,155,123, 55,216, 57,229, 68, 56,250,244,233, 3, - 0,227, 88,150,245,174, 92,185,114, 12, 33,100,167,161,125, 35, 33,196, 5, 0,151, 82, 26,167,253,111, 14,192, 23, 64, 21, 0, -209, 0,158, 82, 74,165, 31,121,142,254, 17,156,110,110,110,174, 44,203,142,117,114,114,234,145,156,156,124,154, 97,152, 95,226, -227,227, 37,159,185,239,217,174,243,175, 48,244, 27,192, 4, 99, 54, 32, 22,139,147,243,243,243, 29, 1, 64, 36, 18,165,200,100, -178, 79, 22, 37,248, 87,110,235,175,121, 50, 96,220,249, 27, 79,187,233, 23,117,105, 83,167,152, 27,151,212, 57,127, 35,162,109, -225,122,190,154,226,250, 64,109,246, 85, 44, 93,186,148, 4, 4, 4,140,170, 90,181,106,117,134, 97, 94, 44, 90,180,168, 80,234, -155,162,203, 22, 47, 94,252,191,204,173,197,112,186,213,108,117,124,208,224, 1,237,191, 25, 63,210,162,114, 37, 11, 36,166, 73, -237,127,222, 21,188, 58, 56,120, 95,207,177,131, 58,119, 3,128,101,203,150,125,229,238,238,238,197,225,112, 98,126,248,225,135, -223, 75,227, 52,193,132, 79, 0,227, 38,149, 46,243,254,172, 51,192, 28,249,180, 63, 64, 70,182,107,217,184,205,132,225,189, 8, -229,136,224, 63,110,142,218,104, 46,175, 81, 66,112,100,203,235,249,214,153, 49,160, 87, 39,166,137,175, 23, 92, 42, 89, 3, 12, - 15,219,207,188,177,223, 20,244,195, 86, 0,205,203,209,204,238,175, 67,247, 35, 49, 83, 3, 66, 0, 66, 0,134, 0,185,249, 44, -186,124, 53, 98,177,241, 66,137, 48, 54,102, 4, 51,246,231, 3, 0,231,163,251, 56, 66, 26, 85,170, 84,105,203,180,105,211,108, -235,213,171,231, 34, 18,137,204,100, 50, 89,245,168,168, 40,239,133, 11, 23,118, 38,132,172,162,148, 30, 49,146,211,163,154,155, -235,161, 77, 51,198, 52,171, 95,197, 19, 60, 69, 46, 88,185,212,253,101,212,171,150, 19,183,134,140, 35,132, 12, 46,207,148, 9, -105,105,105, 4, 0, 28, 28, 28,104, 97,145,213, 98,228,186,153, 93, 48, 99,237,121,228,229, 43,246,150,180,190, 68, 34,209, 89, -182,188, 79,158, 60, 89,167, 87,175, 94,104,230,237,134, 59,189, 82,209,244,120, 60, 0, 20,148, 27,177,175, 1, 0,230,107,251, -225,125, 28, 14,231, 66,167, 78,157,188,199,142, 29, 75, 26, 55,110,140,176,176,176, 42,251,247,239,239,196,229,114, 99, 52, 26, -205, 99, 0, 47, 40,165, 42, 3,185,121, 0,106,114, 56,156,122,127,103, 78, 87, 87, 87,177, 66,161, 24,225,230,230, 54,190,119, -239,222,245,122,245,234, 69,106,214,172,137,231,207,159, 55, 62,123,246,236,226, 6, 13, 26, 60,142,143,143,223, 33, 16, 8,246, - 72, 36, 18,217,103,120,195, 27, 15,192, 85,107,224, 88,106,192,183, 4,192, 82, 74,105,162,161,219,200,207,207,119,212, 61, 71, - 9, 33,142,159,114,127,140,217, 22, 33, 36,146, 16, 98,167,253,141,210,190, 25,134,129, 90,173,150,170,213,234,170,101,112,214, - 4,192, 24,209,100, 74, 41, 45, 45, 17,180, 24, 0,186,180,174,147, 14,130, 8,157, 69,171,152,151,204,136, 2, 1, 70, 81,231, -252,205, 8,187, 66, 86,176, 34, 88,186,116, 41, 89,188,120, 49,150, 44, 89,210, 11,128, 31,203,178,215,125,124,124, 54, 22,162, -100,217,130,101,139, 23, 47,222,176,116,233, 82, 2,160, 88, 65,100,231,213, 96,216,215, 95,247,105,191, 98,193, 84,139,132,119, - 74,132,199,200, 96,103,193,199,226, 89,147, 4,114,185,170,229,214,223,131,199,111, 94, 53,103,167, 70,163,249, 2, 64, 19,141, - 70,115, 31,192,239,165,113,154, 96,194, 39, 64,123,163, 38,149, 46,225, 38, 39,168,218,175, 45, 52, 24,233,233,238,212,127,218, -216,129, 98, 95,159,106,200,135, 5,222,164,105,112,230,212, 89, 0, 56,104,156,213,105, 80, 19, 46, 31,123,130,150,204,170,229, -215,204, 23, 79, 18, 84,184,159,160, 65, 94,140, 10, 28, 70, 5, 13, 75, 1,138,252,242,238,117,124,134, 26, 55, 94, 40,192, 16, -128,195, 0, 12, 67,192, 97,202, 73,198, 42, 94, 46,219,253,192, 55, 45,153, 5, 88,197,203,143,124, 0,125, 81,163, 70,141,245, - 1, 1, 1,206,201,201,201,118,247,239,223,135, 80, 40,132,173,173, 45,215,213,213,181,214,250,245,235,179,166, 78,157, 58,139, - 16,242,144, 82,250,198, 64, 78,159,238, 77,234,221,218, 17,180,204, 90,117,231, 44, 50, 15,252, 7, 28,134,130,111,110, 1,111, -177, 24,103,191,174,102,215,255, 84,204, 17, 66,136, 15,165, 52,161, 44,190,103,207,158,113,228,114,249, 96, 43, 43,171, 22, 60, - 30,207, 73,104,227,193, 74,184,205,222,165,146, 42,209, 41,142,121,109,103,118,114,234,182,102,122, 7,204, 88,123, 30,235,247, -223,254,173, 17,146, 22, 25,115, 12, 50,239, 93, 70,120,198,135,167,214,217,156,103,200,190,218, 2,152,163, 80, 40, 24, 62,159, - 79, 68, 34,209,176, 21, 43, 86, 40,253,253,253, 11, 28,192,252,252,252,224,231,231, 71,114,114,114,170, 92,190,124,185, 74,112, -112,176,154, 16, 18, 73, 41, 61, 94,178,197,194,236,109,126,190,204, 93, 36, 22,231,253,188,117,235,154,182,109,219,178,250,243, - 36,150,135, 19, 0,108,108,108,118,214,168, 81,131,204,155, 55, 79, 82, 81,156,222,222,222,231,253,252,252, 58,116,233,210,133, -219,186,117,107,184,186,186, 22, 44,115,112,112,128,159,159, 31,137,139,139,171,127,253,250,245,173,231,207,159,223,232,237,237, -125, 57, 38, 38,166,203, 95,217,235,104, 45, 85, 48, 66, 56,237, 40, 38, 17,242, 63,211, 88, 68,136,197,246,237,219, 29,117,115, - 50,170, 84, 42,104, 52,154,130,111,221,135,101, 89,104, 52, 26,172, 88,177, 66, 99,224, 49,149, 66,155, 28, 90,239,195, 22,247, - 45, 16, 8, 12,203,220, 75, 16,225, 34,204,172,109,110,110,238, 9,160,123,141, 26, 53,230,232, 47,174, 94,233,253,183, 84, 42, -141, 77,148,219, 68, 0,104, 91,218,229, 30, 16, 16, 48, 98,201,146, 37,125,240,191, 57, 43,235, 13, 24, 48,224,114,145,122,245, -180,223, 82, 66,200, 21,134, 97, 78, 2,216, 13,224, 3,171,187,153,153,197,132,105,147,199, 90,196,167, 41,177,252, 72, 26,118, - 95,203,198, 8, 63, 75,204,248,210, 26, 67,252, 7,153,135,252,231,240, 4, 0, 59,245, 86,121,238,227,227, 67,158, 61,123,102, - 18, 89,255, 46, 52, 5, 80, 73,239,191, 2,128,110,202,172, 52,237,125, 97, 95,164, 92,191,158,238, 59, 85, 91, 94, 73,187, 30, -213,227, 77, 5,112,175,156,253,221, 85,109, 27, 62, 0, 23, 0, 78,159, 62, 77,123,244,232, 65,116,223,197,247,236,253,207,140, -241,239,221,173, 71,199, 86, 96, 68,182,120,153, 2,132,190,165,224, 50, 42, 48,160,184,115,243, 50, 5,151,221, 83,100,195, 37, - 90, 79,136,119,255,239,234,213,245,253,241,151,160,111, 57,145, 41, 92,236,190,158, 7,101,126, 46, 82,147,222, 34, 69, 18,139, -196,248,104, 36,188,141,126, 12,144,197,134,114,126,184,227,128,134,213,190, 3,178,208, 30,207, 98, 35, 47,203,230, 84, 74,159, - 85,169,233,235,155, 33,208, 0, 74,233, 51, 3, 14,250,197, 18, 58,224,206,213,170, 85,251,105,193,130, 5,110, 79,159, 62,181, -146, 74,165,210,179,103,207, 94,141,141,141,117,114,118,118,142,155, 52,105, 82,171,202,149, 43, 59,126,245,213, 87,102,135, 14, - 29, 90, 0, 96,172, 1,156,190,189, 91, 52, 12,221,181,113,157,249,187,144, 77, 80, 68, 61,194,153, 68, 41,110, 38,231,209, 42, -214, 66, 50,165,126, 37, 88, 8,185, 88,214,218,213,162,251,209,168, 31, 1, 12, 41,141,243,214,173, 91, 46,102,102,102,107,135, - 12, 25,226, 58,109,218, 52,129,134,107,195, 61, 28,250,206,122,206,214, 80,215, 60,185,146,227,223,193, 11, 51,135,214,195,204, -245,127,234, 68,214,120,111,239, 76,182, 56, 78, 55, 55,183,113, 44,203,122,107,255,122,233,190, 59,222,200, 9,212,219,100, 65, - 57,177,116, 8,116,117,117, 5,195, 48, 49,241,241,241, 59, 13, 61, 71, 34, 81,241,179,167,216,218,218,162, 93,187,118,240,241, -241,225,182,109,219,182, 30,128,227, 37,113, 42,149, 10, 23,150,165,176,180,180, 20,219,219,219,219, 90, 90, 90,190, 83, 42,149, - 31,197, 9, 0,118,118,118,253,218,181,107,199,221,191,127,127, 90, 76, 76,204, 20,250,171, 21, 0, 0, 32, 0, 73, 68, 65, 84, - 29,127,127,255,104, 43, 43,171, 66,214, 95,115,115,115, 84,175, 94, 29, 63,252,240, 3,183, 91,183,110,101,114, 58, 57, 57,117, - 14, 14, 14, 6, 33,164,224,161, 93, 20,158,158,158,112,118,118, 70,247,238,221,185,253,250,245,235, 92,222,251,200,136,142,230, - 98, 49, 22,173,165,133,197,108,201,195,111,197,213, 55,224,188,167,232,172, 75, 34,145, 40,165, 60,237, 44,130, 18,135, 59,133, - 66, 97,129, 21,170,232,182,138,227,100, 24, 6, 11, 23, 46, 4, 33, 4, 60, 30, 15,124, 62,191,216,239,246,237,219, 27,219,206, - 56, 66, 8,195,231,243,231,112,185,220,177,114,185,220, 77, 36, 18, 73, 52, 26,205,111,114,185,124,133,214, 34,106, 83,220,181, - 91, 18,167,185,185,185,231,203,151, 47,107,148,116, 80,228,114, 57,234,213,171, 7,200, 17, 89, 26,103, 84, 84,148,103,213,170, - 85,107, 2,208, 77,209,118,141, 82,218, 86,239,191, 62,174, 81, 74,191,212,254,126,241,250,245,107, 79,157,208,210,231, 84, 41, -149,222,110,142, 86, 8,127, 35,195,238,107,217,184,180,192, 21, 29, 87, 72,208,183, 17, 23, 62, 30, 22, 80, 43, 85, 53, 7, 12, - 24,176, 7, 64, 77,237, 67,242,171, 1, 3, 6,212,226,112, 56,127, 2, 56, 6, 32,235,175,186,230, 77,156, 31,135, 50,180, 72, - 37, 66,200, 41,189,237,247,212,253,159, 59,119,238,252,192,192,192,167,132,144, 83,250,229,250,245,244,191,181,253,205, 41, 74, -105,207,121,243,230,249,174, 90,181,106,165,174,238,167, 80,136,198, 12, 29, 90,165,230,155,227,250, 91, 43,112, 57, 26,112, 25, - 2, 46, 7, 0, 37,136,125, 19,133,156,236,204, 27, 52,250, 63, 49,134, 89,178, 6,180,110,208,176, 94,208,190,245,179,153, 95, -175,231, 33, 83,154,143,103, 15,175,224,222,149, 99, 73, 26,181,230, 24, 8,189, 15, 48, 97,136,102,159, 83, 26,162, 41,255,133, -128,247, 86, 49,144, 34, 98,235,179,189,229,126, 89,171, 86,173,192,133, 11, 23,122, 62,124,248,208, 50, 59, 59, 59,117,239,222, -189,207,229,114,249, 67, 0, 27,222,190,125,219,110,195,134, 13,102,171, 87,175,238, 82,175, 94,189,154, 33, 33, 33,121, 6,112, -214,159, 53,114, 72,232,216,105,211, 69,145,135,182, 64, 16, 25,134,133,143,210, 52,151, 18,243, 22, 0, 88,143,184,220,214,169, -249,234, 11,235,218,185, 51, 94,150,124, 84,179, 17,180, 47,203,146,101,102,102,182, 54, 56, 56,216,179,105,211,166, 12, 0, 92, -127,161, 22,206,217, 26,234,122, 46,176, 53,105, 93,199, 30, 41,153,114,124,187, 37, 28,103, 67, 83,254, 40, 42,178, 62, 48, 4, -106,135, 11,245,203, 78,158, 60,105, 6,224, 3,103, 16,253,242,210,134, 17, 41,165, 25,132,144, 31, 5, 2,193, 66, 66, 8,109, -218,180,105,120,221,186,117,115,109,109,109, 33,147,201, 32,151,203,193,231,243, 33,147,201, 16, 27, 27,139, 59,119,238,192,214, -214,214,168,115,149,155,155, 11, 75, 75, 75,176, 44,251,209,156, 26,141,134,108,219,182,205,252,233,211,167,230,135, 15, 31,118, -154, 49, 99,198,187,218,181,107,223, 31, 52,104,208, 43, 71, 71, 71,249,163, 71,143,112,235,214, 45,100,100,100,160, 69,139, 22, - 6,113, 42, 20, 10,112,185, 92,200,100, 50, 8,133, 66,112,185, 92,168,213,106,176, 44, 91, 32,190,114,115,115,145,158,158, 14, - 62,159, 15,133, 66,241,151, 95,239, 58,139,150, 62, 74, 27,126, 43,174,126, 89,168,104, 63,169,210,134, 59, 51, 51, 51,197, 54, - 54, 54,115, 12,177,208, 17, 66,192,225,112,192,231,243, 65, 8, 65,219,182,109, 49,102,204, 24, 52,106,212, 8, 81, 81, 81, 56, -112,224, 0,238,221,187, 7, 30,143, 87, 80,223,224,241,137,246,237, 57, 34,145,232, 86,239,222,189,125, 23, 44, 88, 32,242,242, -242, 66,100,100,164,199,170, 85,171,230, 92,188,120,177, 15, 33,164, 9,165,148, 45,219, 74,175, 29, 18,124, 63, 92,216, 93, 46, -151, 35, 50, 50,210,152,117, 62, 64,181,106,213, 98, 25,134,121,197,178,236,117, 0,245, 40,165,109, 9, 33,103, 1,152, 23,169, - 42,165,148,126, 73, 8,201, 6,240,152, 97,152, 23, 44,203,198, 22,231, 78,101,105,105,153, 26,159,146,237,100,111, 33,194,240, - 54, 22,232,184, 66,130,254, 77,132, 16,242, 9,158,199, 36,161, 90, 85, 47, 18,126,227,120, 19,173,200,106,154,152,152, 8, 0, - 77, 0,196,196,197,197,185,232,132,150, 9,255, 14, 20, 21, 67, 58, 1, 21, 24, 24,216,179, 56,113, 85,204,189, 89,168,124,213, -170, 85, 43,245,254,103,124, 68,223,209, 14,133,157,225,219,107,173, 92,255, 19, 90,167, 79,159, 46, 93,129,176,232,123,234,200, -254,219, 29,149,196,211,183,113, 27, 61,235, 16, 69,216,157, 91, 0,232,111, 6, 53,198,181,151,152, 49, 51,255,109,219,202,169, -204,246, 43,121,136,147,164,224,214,153,223,144,154,248,102, 55, 64,103,208,232,144,236,143,238, 44,171, 12,240,117,116,176, 71, -190,146,130,165, 0, 62, 16, 91,159, 69,100,245,170, 89,179,102, 64,104,104,168,103,126,126,190,229,205,155, 55, 51,131,131,131, - 95, 41, 20,138, 95, 40,165,123,181,117, 78,164,165,165, 45,163,148,194,210,210,146,203,227,241,196,165, 57,115, 18, 66, 26,205, - 26, 59,226,198,143,219,118,137, 94, 61, 9,199,134,195,103,144,153,151,167,185,146, 34,251,138, 82,122, 74, 91,231,207, 7,105, -178, 4, 10,234,206, 99, 8, 92,204,121,206,132, 16, 17,165, 52,191,132, 55, 87,255, 33, 67,134,184,234, 68, 22, 0,164,229,168, -184,121,114, 21,167,117, 29,123, 52,238, 48, 0, 97,151, 67,112,232, 90, 2,170, 86, 50,187,230,109,158, 89,234, 17,101, 24, 38, - 70, 79, 52,121,157, 60,121,210,172, 87,175, 94,121, 0,244,135, 68, 63, 40,103, 24, 38,166,140,155,109, 17, 33,196,105,207,158, - 61,140, 74,165,202,141,138,138,130,179,179, 51,156,156,156, 96,109,109,141,103,207,158,225,210,165, 75,120,254,252, 57, 88,150, - 69,131, 6, 13,140, 58, 95,239,222,189,195,163, 71,143,208,189,123,143, 25,169,169, 41, 86,182,118,246,210, 27,215,175,173, 46, - 15, 39,203,178, 4, 0,124,125,125,225,235,235, 43, 74, 72, 72,112, 59,117,234,148,227,242,229,203,223,122,122,122,238,147,201, -100,133, 44, 7,134, 10, 45,173,112, 41, 16,129, 34,145, 8,124, 62, 31,217,217,217, 72, 78, 78, 70, 78, 78,206,251,177, 28, 27, -155,207, 34,180,138,179, 80, 85,100,253, 79, 41, 14,139, 19, 83,132,144,161, 0,230, 24,184, 47, 80,171,213,224,243,249,104,222, -188, 57, 54,109,218,132,123,247,238,225,216,177, 99,240,240,240,192,200,145, 35,193, 48, 12,158, 62,125,106,108, 19,217,208,208, -208, 57, 95,125,245,149,239,158, 61,123, 68,177,177,177,120,254,252, 57,108,108,108,176,105,211, 38,225,248,241,227,171, 93,190, -124,121, 17,128,159,202,220, 87,189,232, 66, 87, 87,215,129,245,234,213,251,160,142,179,179,179,245,185,115,231, 28,117, 2,172, -104, 68, 98, 49,200, 92,180,104,209, 58, 31, 31,159,245,218,225, 66, 63, 0,230,148,210,246,135, 15, 31, 38, 0,208,191,127,127, - 74, 8,209, 61,144, 30,135,132,132,116,120,246,236, 25, 93,178,100, 73,177,253, 92,106, 74,226,182,117,155,182,175,251,113,233, - 44,193,204,238,214,232,223,132, 7, 17,159,192,202,140,135, 21, 27,119,170, 30,220,185,246,200,197,197,229, 20,128,175, 18, 19, - 19,225,226,226,146, 11,224, 5,135,195,137,209,104, 52, 18,147, 47,252, 63, 11,197,105, 17,173, 85, 57,177, 56,161, 84, 30,161, -166,111,241,210, 97,222,188,121,190,129,129,129,119, 63, 70,100,233, 59,193, 19, 66, 40, 33,164, 61,165,244,106,193,195,180,196, - 33,195, 2,219, 23,227,226,236,228, 96, 55,119,100,107,176, 44,160,214, 0,106, 13,133, 52, 79,134,200, 39,247,242, 32, 34,135, - 13,106,145, 80, 16,180,124,193,244, 42,225,241, 12, 36, 25, 74, 92, 61,190,157,166, 38,190,233, 71,163, 15,141,174, 40,145,229, -236,232,112,101,255,246,101,184, 23,173,128,134,125,175,179, 88,150, 22,252,254, 12, 15,156,234, 14, 14, 14,171,111,223,190,237, - 37, 20, 10, 45, 95,190,124,169, 9, 9, 9,145, 40, 20,138,173, 58,145,165,197,208,198,141, 27,171,204,205,205,145,155,155, 43, - 87, 42,149,185,165,136, 44,183,246,141,234, 95,251,113,219, 46, 81,190, 66,129, 44,153, 28, 28,123,199, 66, 34, 75,139, 86, 29, -106, 84,174, 76, 68,150,160, 0,222,100, 43, 37, 37,137, 44, 0, 16, 8, 4,157,166, 77,155,166, 63,190, 13, 7, 75,158,218, 76, -200,211,220,140, 72, 99,195, 46,135,224,250,211, 52, 86,196,231,104, 42,209,232, 42,101,237,123,124,124,252, 78,137, 68, 50, 79, - 34,145,204,211, 19, 87,111, 0,204,171,109,205,255,160,188,142,141, 96,158, 68, 34,153,199,178,236, 78, 3, 14,173,100,200,144, - 33,241,117,234,212,201,242,241,241,201,122,247,238, 29, 34, 34, 34,144,145,145,129, 13, 27, 54, 32, 50, 50, 18, 44,251, 94, 7, - 22, 55,140, 98,128, 64, 66, 70, 70,186, 5,165, 20, 25,233,239,204, 23, 44, 88, 96, 93, 30, 78,141, 70, 83,232,222,170, 92,185, - 50, 38, 77,154,196,207,203,203,179,121,251,246,173,149,254, 50, 67, 57, 21, 10, 69, 65, 42, 12, 74, 41, 20, 10, 5,178,178,178, -160, 80, 40,240,234,213,171, 2,145,165,221,254,103,179,104,233,126,139,197,226,100,157,131,168, 72, 36, 2, 33,164,184,225,183, - 10,201,254,172,219, 22, 33,132,138,197,226,228,114,136,195, 50,247,199,192,243, 14, 62,159,143, 49, 99,198,224,238,221,187,136, -138,138, 2,135,195,129, 84, 42, 69, 94, 94, 30, 58,119,238, 12,129, 64, 96,172, 69,139,242,249,252,161,243,231,207, 23,197,196, -196, 32, 45, 45, 77,231, 76, 15,141, 70,131, 25, 51,102,136,133, 66,225, 80, 99, 77,247, 18,137,164,235,203,151, 47,107, 22,253, - 36, 37, 37,101,233,251, 20,150, 23,135, 15, 31, 38,253,251,247,167,253,251,247,167, 58,193,101, 40, 50,227, 35,182, 29, 59,113, -234,194,119, 63, 4,229,230, 73,115, 80,213, 85,140,220,156, 44,172, 8,252, 81, 21, 26,122,253,202,156, 25, 19, 91,134,132,132, -172, 2,240, 66,187,202,139,144,144,144, 17, 63,252,240,195,239,208,166,121, 48,225,159,131,226,180,136,254,189, 87, 17,195,123, -197,113,104,135, 15,197,229,164,212, 69, 28,182,211, 9, 47,173,232,186, 82,200,162, 85,106,231, 83,109, 80, 67, 39, 7,251,203, -123, 54, 47,181, 56,245, 4,136,143,123,131,212,196, 88, 52,105,217, 30,145, 79,194,193,170, 52, 71,232,203,144, 50,195,211,137, -247,128, 26, 62,181,235, 76,110,215,178, 46,130, 78,229,226,101,216, 57,100,166, 38,110,166, 49,135,142, 84,196, 9, 34, 85, 6, -248, 58, 85,114,184,242,251,150, 0,187,179, 17, 12,226,226,222,224,248,239,235,161, 82,126,160, 43,206, 24,221,121,179, 10, 65, -110,102, 50, 20, 57, 26,136,152, 60,145,145, 39,245, 85,165, 74,149,246,172, 91,183,110, 98,203,150, 45,205,252,253,253, 95,102, -100,100, 44,167,148, 30,210,235,224,191,168, 89,179,230,247,155, 55,111,174, 22, 23, 23,135, 75,151, 46,189, 4,112,191, 20,206, -120, 14,135,179,245,210,239, 59,103,137,171,212,194,134,249,223,169, 15,223,139,232, 77, 41, 61,171,199,233,211,169, 94,141, 83, -203,191,255,134, 97, 31,252,129, 71,177,201,136,206,146, 95, 42,137, 51, 45, 45,141,200,100, 50, 47, 27, 27, 27,253,237,192,197, - 92, 42,159, 61,176,134,164,243,156, 27,174,249, 74, 13,132, 60,134,126,219,199, 83,114,231,216, 33,251, 52,121, 26,209, 69, 35, - 26,139,151,185, 26,112,185, 92, 56, 58,254,111, 4, 41, 34,195,168,216, 7,139,187,119,239, 50, 28, 14,167,144, 64,215,183, 16, - 25,107, 41, 50, 6,134,114, 22, 21, 90, 58,168,213,106, 82, 94, 78,185, 92, 94,108,206,177,226,124,181, 88,150,253, 36,251,111, -140,133, 74,127,200, 80,231, 79,151,159,159,239, 40, 22,139,147,117,195,127, 21,101,209,250,152, 72,196,210,134, 47,141,105, 31, -195, 48, 96, 89, 22,124, 62, 31, 13, 26, 52,192,169, 83,167, 96,103,103, 7, 43, 43, 43, 88, 89, 89, 65, 44, 22,195,222,222,190, - 64,104, 49,140,193, 81, 58, 84, 46,151,123,120,120,120,224,213,171, 87, 16,137, 68, 5, 31,161, 80, 8, 95, 95, 95, 72,165,210, -202,159,207,118,255,105, 48,110, 80,167, 62, 91,130,143, 14, 63,117,234,244,100,165, 60,191,110,173, 90, 53,233,253,208,203,143, -230,204,152,216,205, 36, 77,254,191,160,179, 70,233,251, 90,205,157, 59,119,126,121,249,230,206,157, 59,191, 56, 11, 87,121, 5, - 23,222, 15,245,233,190, 81, 32,180,116, 10,178, 56, 37,169, 19, 89,187, 55, 45,177, 58,250, 16,136,143,143,193,133, 67, 27,115, - 84, 74, 69, 6,203,170, 60,163,159,135, 3, 12,126, 51,168, 9, 12,109,214,167,123, 7,114,225,169, 2,217,153,169,120,113,255, -220, 27,200, 4,243, 42, 82,100,237,217,178,212,238,228, 19,130,184,184, 55, 56,123, 96,125,150, 74,173,252,130, 70,135, 60,252, - 24,238, 97, 2, 65,159, 65,181,109,122,142,245,147, 64, 67, 52, 24, 26,249,236, 75, 87, 63,210, 71,114,189,244,200, 48,125,164, -166,166,174,176,176,176, 96,126,250,233,167,209,249,249,249, 75, 40,165,135,245, 46,156,206, 85,171, 86, 13,218,182,109,155,219, -219,183,111, 5, 55,110,220, 72,191,114,229, 10, 5, 16, 88,198, 3,124, 54, 33,132,211,200,171,242,212, 7,111, 18,122, 83, 74, -255,208,227,244,237,217,184,206,205, 93,129,139, 44, 85, 55, 15, 35, 55, 49, 14,243,110,198,103, 3, 48,248,120,171, 84, 42,100, -100,100, 64,149,155,161,110,226, 34,205, 90, 50,192, 81,158,156,145,207,229,177,121,106, 31,171, 20,249,229,244, 55, 28, 51, 51, -179,114, 31, 87,190, 64, 0,149, 74,133,202,149, 43, 23,148,101,231,228,130, 16, 2, 23, 23,151,178,110,182, 0, 0, 51, 90,181, -106, 69,154, 55,111,126,103,253,250,245,231, 75, 19, 43,229,177,104,149, 5, 67, 57, 89,150,101, 74, 56,190,164,188,156,250, 22, -173,178,132,214,231,180,104, 21, 39, 90,244, 69,162,190, 16, 42,143,143,214,167, 20,135,198,136,176, 98,120, 10, 44, 90,225,225, -225,112,119,119,135, 82,169,132,165,165, 37, 44, 45, 45, 97, 97, 97,129,156,156, 28,240,120, 60, 24,185,207,172, 72, 36,122, 27, - 17, 17, 81,179, 82,165, 74,208,104, 52,133,196,214,203,151, 47, 97,110,110,158, 96,172, 69,203,213,213,245,156, 54,234,176, 16, -156,157,157,173, 43,226,184,234, 91,178,250,247,239, 95,174, 23,179, 45,129,179,130, 1, 4, 15, 24, 48, 96,207,227,208,211, 77, - 92, 92, 92, 78,251,248,248, 16, 0, 48, 69, 24,254,187,172, 89, 37,140,176,165, 22,177, 68, 41,244,254,167, 2, 32,218,255,169, -122, 66, 76,255,183,162,152,178,119,129,129,129,151,245,252,187, 82, 63,114, 23,116, 41, 30, 10,249, 66,115,203,178,100, 57,218, -219, 93,254,101,195, 18,171, 67, 97, 64, 66, 92, 12,174, 30,217,148,165,214, 40,191, 0, 75, 19, 67, 47, 30, 57, 12,130, 60, 68, - 31,190, 10, 28, 50,160,139, 64,163, 70,181, 61,113,236,169, 10,169,241, 47, 65, 41,187,155, 38,255,158,247,209,157,163, 86,100, -237,222,180,196,238,104, 56, 65,124, 92, 12, 46, 28,218,152,165,214, 40,191, 40, 79,178, 83, 29,198, 18, 98,203, 49, 23,109, 29, -222,165,233, 64,207,170,110, 96,169, 10, 44,159,162,239,108, 7,238,139, 7,121,199, 60,186,112, 14,177,185,236,228,248, 80,195, - 18,129,230,230,230, 46, 35,132, 28,165,148, 70,234,117,200, 95, 86,171, 86,109,229,207, 63,255,236,149,144,144, 96,249,224,193, -131,236, 29, 59,118,196,176, 44, 27, 64, 41, 45, 51,138,138, 82,250, 29, 33,228, 23,253,124, 57,132,144,250,179, 70, 15, 9, 29, - 50,106,172, 40,230, 98, 48,108, 99, 34,241,253, 77,137,230, 69,134,194,159, 82,154, 84, 18,151,131,131, 3, 77, 77, 77,125,147, -153,153, 89,211,220,220, 28,239,222,189, 67,122,122, 58, 50, 51, 51, 33,207,206, 80,219,107, 50,165, 68,157, 14, 46,151,139,148, - 56, 53, 52, 26, 77, 82, 89,214,172,146,162, 14, 1, 4,202,100, 50,157,200, 42, 40,183,178,178, 10,180,178,178,210,249,104,237, - 44,225, 33,166, 75,239, 64,180,233, 29, 90,252,241,199, 31,207,186,117,235, 22, 95,156, 88, 17, 10,133,200,207, 55, 46, 75, 72, - 73, 81,140,229,225, 44,201,162, 85,180,220, 24, 78,221,240,165,206, 9,190,104,185, 14, 28, 14, 7, 44,203,126, 80,254, 87,139, - 22,253,232,192,242,136,156, 66,214,229, 50, 18,135,150, 39, 18,177,162, 45, 90,186,115,193,231,243,113,226,196, 9,140, 26, 53, - 10, 26,141, 6,102,102,102,176,176,176,128,185,185, 57,142, 28, 57, 2, 93,250, 7, 99,154,168, 82,169,246, 6, 6, 6,206,223, -182,109,155,152, 82, 10,129, 64, 80, 32,180,150, 44, 89, 34, 83, 42,149,123, 13, 17, 90, 5, 25,223, 89, 26, 81,189, 82,233, 81, -135,197,173, 83,130,191,150, 77, 64, 64,192, 8,150,101,251,160, 72, 10,135, 34,245, 10,165,126, 40, 45,189, 3, 0,219,128,128, -128,113, 44,203,234, 2,104, 10, 69, 23,234,213,211, 61, 75,106, 14, 24, 48, 96, 79,209,168, 67, 19,254,241,184,247, 55,110, 91, -123,189, 68,165, 68,219, 95, 20, 8, 46,110,201, 34,107,128,143,163,189,195,229,157,235,151, 88,237,187, 11, 72,226,162,113,235, -196,230, 44, 13,171,210, 23, 47,109,140,236,121, 27,185, 58,218, 32,253,182, 12,217,105,111, 1,138, 7, 31, 47,178, 6, 85,119, -116,176,191,178,107,227, 18,187,144,135, 12, 18,222,198,224,138, 86, 12,126,140,200, 26, 38, 16,244,241,173,225,182,107,240,151, -173,109,173,137, 26,234,216,103,248,101,228, 64,132,245, 82,162,245, 32,107, 52,235,110,137,106, 13, 69, 3,207,236, 76,239,232, -234, 71,198, 26,106,221, 42, 34,178,122,121,121,121, 45,189,115,231,142, 39,203,178,150, 87,175, 94,205,217,182,109, 91,116,126, -126,254, 70, 74,233,105, 35, 30, 14,250, 34,171,209,220,241, 35,111,172,252,249, 23, 81, 68,216, 61, 4,237, 61, 9,153, 74,161, - 57, 23,159, 59, 64,127, 88,177, 20, 75,201,197,141, 27, 55,122, 45, 92,184, 80,144,158,158,142,180,180, 52,100,100,100, 20,124, -114,115,115,225,236,236,140, 63,254,248, 67,153,157,157,125,219,128,135, 77,133, 71, 29, 22, 7, 75, 75, 75,240,249,124, 40,149, -202, 2,139,150, 80, 40,132,181,181, 53,222,189,123,135,131, 7, 15, 2, 64,122,169, 22, 54,190, 32,145, 97,136,187,216,204, 76, - 46, 18,137,216,226,172,106,198,114,106, 17,255,229,151, 95,186, 5, 4, 4,136, 26, 55,110,252,129, 69,171, 60,156,148,210,188, - 46, 93,186,152,109,220,184, 17,158,158,158, 80, 40, 20,133, 4, 21,195, 48,224,243,249,136,139,139,195,242,229,203, 65, 41,205, -251,171,123, 30,125,209,162, 47,134,180, 62, 84, 31, 8, 33, 67, 45, 70,101, 13, 13, 26, 27,137,168, 47,220,132, 66, 33, 50, 51, - 51,197,132,144,161, 37,100,176, 55,216,162,165, 19, 90,145,145,145,216,179,103, 15,186,119,239, 14, 91, 91, 91,100,100,100,224, -208,161, 67,120,246,236, 25, 4, 2, 1, 8, 33,198, 88,181,216,230,205,155,255,120,253,250,245, 94,254,254,254,117,190,255,254, -123,113,221,186,117,241,226,197, 11, 4, 4, 4,228,135,133,133, 69,201,100,178, 0, 24,146,216, 84,155,241, 93,151,140,212,160, -168,195, 34,235, 20, 69, 9,233, 29,190, 44,129, 77, 63,245, 67,161,244, 14,250,184,117,235,150,183,151,151,151, 15,222, 71, 18, -234, 30,184,250,209,133,133, 30,198,137,137,137, 77, 97,138, 58, 52,225,175,237,235,174, 18, 66, 10, 18,150,234,196,215, 7, 81, -135, 31,174, 73,102,248,143, 28,111,181,247, 46, 65, 92,108, 20,238,159,217, 90, 84,100, 25,210,217,116,210,207,181, 33, 18,155, -215,101,201,251,112,230,236,180, 56,128,114,140, 22, 90, 69, 57, 65,217,239,252, 71,140,183,219,127,159, 64, 18,247, 26, 55,143, -111, 49, 90,100,233,115, 14, 19, 8,126,224,113,200,194, 30,109, 27,241,219, 52,172, 1,243,148, 55, 72,138,151,224, 96,100,106, -122, 84,134,124,236, 77,162, 68,236,107,249, 47,221,199,217,217,217, 58,243,208,115,162,189,221,237,147,217,199, 42,127,193, 40, -169,146, 6, 74,110,208, 37,197,182,243,195,109, 86,183,178,178,250, 41, 44, 44,172,146, 72, 36,178,186,127,255,190,102,251,246, -237,113,249,249,249,171, 41,165, 7, 12,218,247, 15,151,187, 53,173, 81,245,234,202, 45, 59, 69,185,210, 60, 72, 21, 74, 8,157, - 92, 52, 71, 67,159,244, 43, 41, 1,102, 81, 78,161, 80,184,255,192,129, 3,221,253,252,252, 60,235,215,175,207,164,167,167, 35, - 55, 55, 23,185,185,185, 58,171, 23, 34, 35, 35,217,216,216,216, 4,161, 80, 88,102, 59, 43, 42,234, 80,159, 83, 47,189,195,124, - 0, 12, 33,228, 94,120,120,120,110,183,110,221, 32, 22,139, 33,149, 74,225,225,225, 1,181, 90,141, 51,103,206, 32, 44, 44, 76, -202,178,236, 85, 0,225,165,237,187, 76,150,231, 65, 8, 97,100,121,121, 13, 70,140, 24,209,110,230,204,153,133, 66,210, 29, 29, - 29, 97,103,103,103, 20, 39, 0,164,167,167,215,254,227,143, 63,166,135,135,135,127,215,189,123,119,235,249,243,231, 11,189,189, -189,161,209,104,152,242,114,102,100,100, 88, 63,120,240, 96,117,155, 54,109,190,233,214,173, 27,119,229,202,149,176,182,182,134, - 70,163,129, 88, 44, 70,118,118, 54, 2, 2, 2,112,227,198, 13, 53,165,116, 75, 86, 86,214,247,198, 92, 75,229,180, 96, 21,226, - 44,201, 2, 84,146, 16, 42,174,254, 95,209,206, 34,194, 13, 54, 54, 54,115, 0,204, 41, 33,131, 61, 12,189, 55,117, 66,139,195, -225,224,205,155, 55,216,190,125,251, 7,121,180,116,233, 31,138,227, 46, 97,223,233,149, 43, 87, 52,132,144,150,247,239,223,159, - 51,124,248,240,177, 82,169,212,205,220,220, 92,162, 82,169,126,147,201,100,186, 60, 90,124, 99,250, 16,169, 84, 26, 91, 92,212, - 97,209, 58,128, 77,169,156, 69,210, 59, 20, 74,225, 80,100,181, 66,169, 31,138,166,119,208,231,108,213,170, 85, 12,195, 48,207, -181, 67,240,207, 81, 36,186, 80,143,179,102, 98, 98, 98, 83, 23, 23,151,171, 0,204,138, 70, 29,254, 21,215,146,137,243,255, 91, -108,161,180,132,165,197,175, 5,209,197, 59,111, 32, 16,167,227,209,165,221, 70,139,172,226, 32,207,207,139, 90,180,255,109, 67, -133, 60, 31,210,172,228, 23, 52,230, 64,202,199,159,109,152, 95,188, 23, 11,145,121, 38, 30, 94,252, 53, 83,163,201,255,130, 70, -253, 39,188,252,116,152,247,243,217,195,124, 98,109,135, 71,211, 71, 65,146, 41,197,217,232,140, 67, 52, 79, 62, 57, 88, 59, 87, -160, 91, 75,114,125,215,130,164,173,126,125,173, 7, 58, 84,230, 97,237,172,223, 32,154,107,207,111,214,177,173,193,115, 32,234, - 28,228, 55,108,216, 48,201,207,207,207, 98,224,192,129, 47,211,211,211, 11, 57,200,151,227, 68,199, 19, 66,126, 62,189,109,205, - 44,251,122, 45,176,249,135,217,154,253,161, 79,138, 70, 33,150, 10, 31, 31, 31,205,173, 91,183,102, 78,154, 52,105,109,199,142, - 29, 43,247,233,211,135,239,238,238, 14,161, 80,136,215,175, 95,227,250,245,235,202,232,232,232,132,188,188,188,153,245,235,215, - 47, 51,199, 89,124,124,252, 78,129, 64,128,136,136, 8,180,107,215, 46, 80,107,177,122,115,235,214,173,121,217,217,217,200,206, -206,198,224,193,131, 11,202,167, 76,153, 50,175,106,213,170, 72, 79, 79, 47,107, 95, 23, 17, 66,182,225,253, 92,135, 73,193,193, -193, 45,143, 31, 63,222,114,198,140, 25,252,238,221,187,227,246,237,219,184,112,225,130, 82,169, 84,134, 2, 8, 53,116, 90, 27, -109,254,161, 7,132,144, 39, 65, 65, 65, 45, 57, 28, 78, 65,198,251,136,136, 8,236,222,189,187, 60,156,106, 0,171, 9, 33, 63, - 7, 7, 7, 47,186,120,241,226,232, 17, 35, 70, 88,169, 84, 42, 68, 70, 70,226,215, 95,127, 45, 47,231,244, 74,149, 42, 45, 60, -115,230,204,111,231,207,159,255,106,216,176, 97,204,180,105,211,176,105,211, 38,252,231, 63,255, 97, 53, 26,205,113, 30,143, 55, - 34, 53, 53, 85,250,153, 58,158, 29,218,105,117,118, 24, 49,231, 97,153,188, 31, 51, 52,104, 96,187, 19, 63,186, 91,210,238, 71, -251,246,237, 11,172,140,148,210, 66,126,117, 58,129,101,236,208, 33, 0, 27,237,117,186, 5,239,231, 23,213,207, 10,207,193,255, - 50,199, 27,202, 88, 39, 81,110, 19, 1, 57, 34, 75,159, 84,218, 6,160,168, 83, 6, 91,230,162, 69,139,214, 45, 94,188,120, 93, -209, 20, 14,250,149,138,166,126, 88,186,116, 41, 74, 74,239, 0, 32, 99,209,162, 69, 63,106,251, 39,162, 29, 46,108, 2,109,116, -161, 30,231, 30,109,185,217,146, 37, 75,134, 3, 40,141,211, 4, 19,254, 50,148,226,163, 69,231, 71, 92,223,175, 2, 96, 15,194, -204,163,175, 15, 70,124,116, 7,198,210,185,127,238, 91,178, 9, 20, 25, 84,163,158, 83, 33,123,192,114, 22, 68, 92,223,199, 2, -196, 6,132,153, 75, 95,255,231,163,219, 73,172,237,144, 19, 48, 9,255,121, 42,161, 73, 82,213,215,193, 10, 69, 33,107,144,214, - 39,107,144,171, 31, 57,104,235,202, 59, 58,253, 11,123,114, 58,125,184,209,219, 73, 77, 77, 93,105, 97, 97,193, 89,189,122,245, -104,153, 76, 86,200, 65,254, 35, 30, 18,179, 9, 33,156,102,213, 61,167,222,125, 21,219,199,144,225,194,162,104,213,170, 85,226, -179,103,207,134, 92,184,112,193,255,218,181,107,157,242,242,242,188, 8, 33, 16,139,197,111, 20, 10,197, 69,161, 80,184,223, 16, -145,165,255, 64,209,159, 34, 6, 0,178,179,179,145,147,147, 83, 40, 13, 1,240,222,191, 42, 53, 53, 21, 30, 30, 30,198, 62, 16, -175, 17, 66,194, 2, 2, 2,218, 6, 4, 4, 52,208, 90,133,174,149,119,200, 76, 43,120,174,137,197,102, 18, 66,136, 27, 95, 32, -148,222,186,117,235,226, 71,114,230,105, 45, 37,107,215,174, 93,187,194,220,220,188,105, 68, 68,196,165,143,225,212,138,168,126, -246,246,246,174,123,246,236, 9,217,181,107, 87, 11, 46,151,123,155, 16, 50, 32, 51, 51,243,115, 79, 42, 61, 1,134,205,113, 88, -166,197,200, 16,139, 88,121,241, 41,132,155, 70,163,201, 93,184,112, 97, 74, 81,225, 85,212,122,165,251,175, 84, 42,243, 13,188, -151,140,137,162, 44, 67,100,144, 92, 0,120, 63,119,225,251,105,117, 12,157, 84, 26, 64,137,115,103, 46, 94,188,152, 46, 93,186, -148, 48, 12,115, 28,192, 11,134, 97, 94, 21,117, 86,215, 95,182,116,233, 82, 44, 94,188,152, 46, 89, 82,242, 59,170,142,243,217, -179,103,148,195,225, 92, 2, 16,195,225,112,222,232,243,234,151,235,214, 41,141,211, 4, 19, 62,187,208,162,209, 33,113, 0, 70, - 85,232,155, 98, 76,200, 69,188,119,100,172, 56,206, 55, 7, 98, 1, 12,171, 40, 62, 22,248,105,108,179,246,179, 0, 16, 10,172, - 45, 42,178,244, 33,185, 78,143,187,180, 38,129,205, 58,182,157,161,181,134,173, 52,118,123,197, 57,200, 87,128,216,250,192, 65, -222, 88,248,248,248,104, 0, 4, 3, 8, 46, 58,169,116, 57, 30, 58, 16,139,197, 5,195,136, 12,195,196,100,102,102, 66,103,209, -210, 47,215, 30, 19, 88, 91, 91,151,103,191,243, 0,156, 37,132,156,167,148,106, 42,226, 88,202,100,121,238,218, 7, 28,167,162, - 56,181, 65, 14, 99, 43,146,243,221,187,119, 18, 0,173,170, 85,171, 38,136,138,138, 82,252, 93, 58,152,138,176, 14,125,106, 84, -180,112,211,190, 48,212,254, 4,199,242, 69, 5, 19,254,218,165, 77, 29, 14,244,115, 7,149, 53,169,180, 78,160, 81,252, 90, 66, - 27, 41,121,175, 36, 41,128, 61,175, 95,191,246,100, 89, 54,182, 24,203, 82,161,101, 75,150, 44, 65, 73, 57, 3,139,112, 2,192, -177,184,184, 56, 87,141, 70,147, 88,132,183, 80,121,105,156, 38,152,240, 55,177,104,253,127, 98,175, 66,177, 24,192, 98, 67,235, - 39,222,164, 11, 0, 44,248,200, 14, 52,178,162,247,163, 60, 34, 43, 36, 36, 68,243, 41,142,169, 74,245,126, 52, 76,127,238, 66, -125, 12, 31, 62,124,103, 5,239,187,230, 19, 28,207,127, 4,231,223, 73,100,153,240,247, 6,205,136,136, 3,240, 67,153,245,202, -206, 6,255,129, 48,210,254,204, 0,144, 81,130,214, 41,109, 89,105,156, 0,144, 13, 32,187,152,117, 75, 42, 55,193,132,207, 10, -198,116, 8, 76, 48,193, 4, 19, 76, 48,193, 4, 19, 62, 13, 8,128, 78, 37,188, 65, 24, 28, 77, 64, 8,233, 84,142,183,249,139, - 38, 78, 19,167,137,211,196,105,226, 52,113,154, 56,255,191, 56,203,226, 46, 26,189, 92, 81,211,115,253,165,226, 74,191,221,186, - 72,152, 79,241, 1,208,201,196,105,226, 52,113,154, 56, 77,156, 38, 78, 19,167,137,179,156,219, 25,255, 87,108,231, 83,126, 76, - 62, 90, 38,152, 96,130, 9, 38,152,240, 15, 66,231,154,196,133,171, 1,115, 54,138, 38, 84, 4,223,151,213, 72,101, 0,168, 40, -190,255, 71, 16, 66, 92, 0,244,208, 43, 58,173, 11, 6, 50, 9,173,127,238, 73,173, 14, 96, 62, 0,253,240,188,187,148,210,192, - 34,245,246, 1,208,159,144, 80, 10, 32,128, 82,250,202,152,237,113, 56,156,192,182,109,219, 78,190,113,227,198, 26,149, 74, 21, - 80,142,246,122,186,184,184,252, 72, 8,105, 12,128, 71, 8,121,157,156,156, 28,168, 82,169, 46,126,196, 49,168,226,236,236,188, - 10, 64, 67,134, 97,120,132,144,168,228,228,228,229, 42,149,234,202, 71,112, 90, 58, 57, 57,181,166,148, 58, 3,224,240,120,188, -119, 9, 9, 9,119,202, 27, 61, 55, 96,233, 51,126,182, 84,205, 3, 0, 43,115,174, 42,100,177,143,210,208, 50,211, 85,110,130, - 9,255,247, 29, 61,167,104, 81,215,170, 88, 65, 40,190,215, 0,164,107, 21,178,241, 92, 12,190, 47,113,253,226, 2,110,138,112, -118,173,138, 21,148,190,231,232, 90,141,172, 62,247,186,140,224, 46, 3, 56,117,216, 1, 48,227, 13,153,224,252, 19, 4, 6,125, - 6,244,208, 31,226,212, 38, 96,222, 81,166,208, 26, 92,147,184,104,184,224,134, 68,208, 56,221, 67, 8, 64, 3, 0,213, 1,188, - 2, 16, 78, 41,205,249, 72,193,240,143,224,252, 27, 98, 17,165,116, 72,145,253,254,160,210, 23, 95,124,209,251,252,249,243,102, -186,233, 89, 88,150,133, 88, 44, 86, 3, 24,105,196,241,116,244,247,247,159,251,203, 47,191, 96,224,192,129, 11, 9, 33,235, 40, -165,185,134,174,111,103,103,215,191, 74,149, 42,155,118,238,220, 89,169, 69,139,150, 68, 32, 16,224,245,235, 40,183, 9, 19, 38, -212,117,114,114, 58,158,156,156, 60,214,216,157,183,183,183, 31, 90,181,106,213,181,219,183,111,119,104,211,166, 13, 8, 33, 8, - 11, 11,115,155, 62,125,122, 3,103,103,231, 3, 73, 73, 73,223, 24,203,233,224,224, 80,163,106,213,170, 29, 54,111,222, 44,110, -221,186, 53, 68, 34, 17,194,195,195, 45, 38, 78,156,232,236,236,236, 28,153,148,148,116,213, 88,145,245, 56,236,228, 87,106,165, - 60, 8, 0,184,124,225,236,150,235,178, 79,166,135, 93,235, 85, 86,217,128,165, 56,102, 18, 91, 38,152, 96,130, 62,134,186,194, -153, 82,204, 58,255,235, 15, 12, 0,116, 25,189,108,218, 80, 87,172,217, 43, 65, 82, 5,241,125, 63,162, 50, 54,237, 73, 64,242, -199,180,115, 7,192, 76,231,114,167, 53,107,222,220, 97,202,205,155, 81, 74,224,183,255, 19, 3,200,248,226,202, 75, 20, 90,253, -235,144, 0,112, 49, 31, 0,249,178, 58, 57,112, 33,134,115,189,115,231,206,213,198,140, 25, 67, 26, 53,106,132,176,176,176, 26, - 7, 14, 28,232,193,229,114,163, 52, 26, 77, 24,128,167,134,102,181, 38,132,240, 0,248,114, 56,156,198,127,103,206,191, 57,204, -181,251,157, 12,224,174,206,162, 85,180,210,159,127,254,121,130,203,229,234, 44, 90,205,164, 82,169, 83, 17, 43,152, 33,240, 82, -169, 84,120,254,252, 57, 24,134,225, 1,240,198,135, 83,106,148,116, 94,220,220,220,220,182,134,222, 13,179, 39, 92, 49, 50,242, - 1,228, 43, 33,176,112,194, 47,187,131,237,102,126,251, 77, 63, 43, 43,171,235,217,217,217,191, 27,113, 49,123,123,120,120,172, -123,244,232,145,189,153,153, 25, 88,150, 69, 78, 78, 14,156,157,157,177,115,231, 78,155,153, 51,103, 14, 17,139,197, 87,100, 50, -217,127,140, 17,231, 85,171, 86,237,240,228,201, 19,177,110, 66,105,133, 66, 1, 55, 55, 55,236,219,183, 79, 56,109,218,180,218, - 66,161, 48, 94, 46,151, 71, 27,202,153, 45, 85,243,212, 74,121,208,158, 45, 75,220, 1, 96,196, 55, 75,130, 4, 57, 86,103, 12, - 41,203,150,170, 79, 3, 48, 9, 45, 19,254,234, 7, 69, 99, 7, 7,135,195,105,105,105, 87, 1,140,173,136, 20, 36,132, 16, 87, - 46,151,235, 77, 41,181,209,254,207, 84,171,213, 49,148,210,114, 39,212,117,168,214,161, 23,132,102,163, 64,217, 6, 12, 0,194, - 48,225, 26,101,222,238,180, 23,151, 79,126, 20,167, 64, 60, 26,160, 13, 24,128, 37, 12,243,136, 85,231,237, 76,125,118,249,236, -223,229,252,220,206, 66,205,170,206,134, 79,140, 89, 17,124,131,171,192,133, 97,193,236,123, 3,131,135, 21,167, 2,221,191,253, -246, 91,231,111, 38, 79, 38,163, 70,142,172,126,245,198, 13,210,206,152,217, 10,254,129, 40,205, 97,191, 88,161, 53,160, 14,177, - 5, 48,231,192,166,249, 12,151,195, 33,254,223, 6, 14,217,181,101, 53,211,185,215,128,130,225, 19, 63, 63, 63,248,249,249,145, -160,160,160,234,151, 46, 93,170,190,111,223, 62, 53, 33,228, 17,165,244, 96, 73, 27,235, 86,141,200, 88, 64,212,163, 22, 87,234, -255,195,239,219,155, 55,111, 14,161, 80,136,143,225, 4,128, 46,213, 57,209,221,155, 87,123,228, 63,117, 81,108,139, 22,173,104, - 69,112,254,131,112,151, 82,218, 71,219,129,217,122,120,120,180, 86,171,213, 34, 0,224,114,185,249, 0,166, 82,237,212, 65,132, -144,227, 44,203,246, 54,162,131,100, 0, 44,238,221,187,247,194, 41, 83,166,192,195,195, 3,211,166, 77,131, 74,165, 10, 35,132, - 44, 2,176,170,172,132,128,142,142,142,139,182,110,221,106,199, 21,152,163,209,156, 24, 36,102,170, 1, 0, 22, 66,224,196, 36, -138,105,211,166, 89,221,191,127,127, 57, 0,131,133,150,163,163, 99,192,206,157, 59,237,204,204,204, 64, 41, 69,110,110, 46,114, -114,114, 10,230,100,252,230,155,111,172, 34, 35, 35,127, 4, 96,176,208,114,114,114,106,189,121,243,102,177, 72, 36, 66,110,110, - 46, 95,169, 84,146,156,156, 28,228,229,229, 81,133, 66,161,156, 58,117,170,240,233,211,167,237, 1, 68,195,132,191,139, 40,224, - 0,248,154,199,227,245,173, 86,173, 90,147, 87,175, 94, 61, 84,171,213, 71, 0, 28,249,216,151, 41, 66, 72, 71, 87, 87,215, 21, - 18,137,100, 51,165, 52,248,255,229,152, 58, 57, 57, 29,185,117,235,150,251,214,173, 91, 71,174, 89,179,230,140, 49,247, 80, 9, - 47,191, 45,155, 53,107,230,208,183,111, 95,158,179,179, 51,242,242,242, 16, 21, 21,101,118,241,226,197, 74, 34,145,232,157, 92, - 46, 15, 53,230, 92, 57,212,108,109, 1,174,213,129,150, 29, 58,181, 25,216,239,107, 75, 39,123,107,200, 20, 26,188,138, 77,244, -248,227,204,137,118,174,117,123,220, 82, 42,179, 6,167,189,184,153,107, 44,103,135,110, 61,219,116,234,216,209,210,218,198, 26, - 89, 82, 37, 94,191, 73,240,188,124,225,164,159, 75,221, 30,215, 88,162, 26,150,252,248,124,222,231, 60, 55,211, 0,174, 84,100, - 95,191, 65,171, 70,247,187,140, 89,222,132, 82, 10,134, 98, 99, 81,107,214, 52,128,187, 17, 80, 27,203, 7, 74, 41, 33, 88,173, -111,205, 42, 24, 86,100, 64,186,122,163,244, 97, 74,221,243, 24, 16,218,216,217, 53,159, 56,126, 60,201,201,206, 70,120,120,120, - 94, 81,145,181,174, 50,248,215, 24,120, 29,143,195,203,127,147, 53,171,232,208,161,238,191,193,121,180,204,204,204,138, 45,183, -182,182, 70,135, 14, 29, 16, 24, 24,200, 5,208,184,136,194, 43, 60,201, 42, 32, 60,181,109, 30,172,205,133,140,135,135,135,165, -149,149,213, 71,115,190, 47,100,189, 91,121,208, 47,239,253, 62,127,228,197,125,107,125,165, 57,153,188,162, 85, 44, 44, 44, 80, -179,102, 77, 44, 92,184,208, 48,206,143, 87,183,127, 41,167,139,139, 75, 45, 63, 63,191,198,127, 94,189,106, 35,145, 72,132, 18, -137, 68,120,254,207, 63,109, 90,182,108,217,216,197,197,165,150, 30,135, 49,237, 92,182,101,203,150, 69,199,143, 31,103,252,252, -252, 96,107,107,139, 14, 29, 58,224,204,153, 51,220, 53,107,214,172, 4,176,176,172,118, 50, 12,211,198,207,207,143,128, 82, 36, -101,169,113, 39,176, 22,194, 87,251, 32, 39,159, 34, 61, 43, 27, 50, 89, 62,204,204,204, 68,218,225, 94, 67,247,189, 85,203,150, - 45, 9,128, 2,113,149,147,243,254,147,155, 43,133, 66,161,132, 80, 40,180, 36,132,136, 12,229,164,148, 58,183,110,221, 26, 0, -160, 84, 42, 11,222,240, 50, 51, 51, 73, 86, 86, 22, 20, 10, 5,120, 60, 30,159, 16,194, 53,148,211,202,156,171,226,242,133,179, -130,112, 2,223, 0, 0, 32, 0, 73, 68, 65, 84, 71,124,179, 36,110,196, 55, 75,226,184,124,225,108,133,101,182,198,144, 50, 43, -115,174,234,115, 94,159,132,144, 74, 28, 14,231,215,106,213,170, 69,114, 56,156, 61,132, 16,231,143,225, 36,132, 52, 37,132,172, - 52, 51, 51,187, 88,187,118,237, 56,115,115,243, 63, 9, 33,171, 8, 33, 45,203,195, 73, 8, 17,152,153,153,253,185,114,229,202, -144,135, 15, 31, 14,188,116,233,146,247,227,199,143,251, 5, 5, 5, 29,176,176,176,184, 78, 8, 49,251,152,123,211,219,219,123, -215,157, 59,119,154,182,106,213,234, 23, 66,136,176, 34,238,119, 66, 8,135, 16,210,144, 24, 56,215,208, 95,125,222, 9, 33,174, -141, 26, 53,114, 23,137, 68,232,212,169, 19, 0,180,255, 72,206,150, 19, 39, 78,116,158, 57,115, 38, 47, 60, 60, 28,191,252,242, - 11,142, 31, 63,142,148,148, 20,244,236,217,147,255,197, 23, 95, 56, 11,133,194,150, 70,113,114,173, 14,124, 59,125, 70,183, 89, -211,198, 89, 62,122,171,196,238,139,111,113, 44, 52, 17, 41,121, 2,244,234, 55,194,186,107,159, 65, 93, 5, 66,235, 3,198,114, -206,157, 51,167,219,248,209, 67, 44, 35, 18, 89,156,184,157,132,219,207,179,160,230,217,160,123,191,177,182, 13, 90,119,235,193, - 5,239,183,207,125,142,118, 2, 45,190,253,246,219, 74,179, 87,239,189,233,218,244,235,141,169, 25,240,211, 23, 62, 53, 0, 27, - 59,115,243,175,159,183,107, 55, 78,252,126,206,199, 82, 57, 11,241, 53,238,179, 41, 37, 3,109,245,253,179,218,218,161,186,118, - 88,145,115,254,215, 31, 24, 74, 48,109,168, 43,156,203,106,231, 21, 96,224,183, 51,102,240,172,109,109,177,101,203, 22,200,165, -210, 66, 62,179, 29,221,209,237,162, 25, 55,190,138,143, 91,100, 7, 79,114,253, 95,248, 2, 56,190, 68,139,214,233,211,167,105, -143, 30, 61, 8, 0,132, 68,208,140,254,117,200,143,131,166,172, 92, 72, 24, 66,189,124, 91, 69, 84,174, 90, 71,106,111,111,143, -188,188, 60,200,229,114,240,249,124,228,231,231,227,237,219,183,184,125,251, 54,108,109,109,141,106, 76,118,118, 54, 44, 44, 44, - 96, 97, 97, 81, 33,156,243, 70,118, 18,190,142, 75, 21,158,187,125,165,221,134,201,255,105, 81,181, 97,251,199, 29, 7, 77,123, - 98, 85,201, 53,255,241,227,199,184,117,235, 22, 50, 50, 50,208,188,121,243,127,203,249,188,171,237,175,239, 18, 66,108,253,252, -252,220,206, 93,188,102,155,155,207, 90,189, 73, 86,241, 88,150,133,153,153,139,250,224,225, 19, 89, 3,251,245, 34,132,144, 20, - 0,119,181,226,246,110, 25, 23,138, 8, 64,173,254,253,251,207,157, 60,121, 50,162,162,162, 48,110,220, 56,217,221,187,119,223, -181,106,213,202,126,231,206,157,226,153, 51,103,226,234,213,171,139, 9, 33, 71, 1,196, 80, 74,243, 75,232, 52,248,124, 62, 31, -106,173,108, 80,106,216, 2,125,159,157,157, 13, 42,203, 0,159,207,231, 0,168, 4,192, 32, 63, 58,150,101,249, 60, 30,175, 64, -100,189, 77,206,198,219,148, 60,100,231, 42, 32,147,169,161,144, 81,112,204,236,185,192, 27, 39, 0,111, 12, 60,158, 28,145, 72, - 4,181, 90, 93, 48,255,162,206, 82,166, 80, 40,144,149,149, 5, 14,135, 99, 1,192, 10, 64,186, 33,132,239,157,220,113, 76, 59, - 12,136,123,123,123, 59,188, 58, 61, 79,217,127, 73,100, 65,153,149, 57, 87,117,120,102,109,142,189, 91,131, 27, 13, 7,254,230, -163, 43,251,156,254, 89,132, 16, 97,165, 74,149, 46,135,132,132,212,174, 94,189, 58, 98, 98, 98,124, 6, 12, 24,208,156, 16,210, -208,216, 57, 25, 9, 33,102, 12,195,252, 56,106,212,168,201,254,254,254,164, 70,141, 26,224,114,185, 80,171,213,110, 81, 81, 81, - 29, 14, 29, 58, 52,135,203,229,238,212,104, 52,223, 25,234,247, 71, 8, 97, 4, 2,193,193,237,219,183,183,109,222,188, 57,246, -236,217,131,187,119,239,178, 77,155, 54,101,134, 15, 31, 14, 79, 79,207,230,195,135, 15, 63, 70, 8,233, 94, 30,203, 22, 33,196, -115,232,208,161,238, 28, 14, 7,173, 90,181,226,223,186,117,171, 17,128, 91, 31,121, 76, 45,220,220,220,174,182,111,223,190,225, -197,139, 23, 31, 16, 66,218, 27,227,231, 72, 8,233,227,234,234, 26,100,109,109,109,107, 68, 31,155,151,144,144,240,189, 17,115, -168,182,104,220,184, 49, 98, 99, 99, 81,171, 86, 45,240,249,252,150,132,144, 9, 0,186, 1, 88, 96,204, 12, 22,132, 16,215,150, - 45, 91, 58,180,111,223,158,172, 90,181, 10, 0,192,227,241,160,209,104,192, 48, 12,120, 60, 30,124,124,124, 72,116,116,180, 29, - 33,196,213,144, 97, 68,135,106, 29,122,181,234,216,173, 77,219,230,245,153, 53,135, 95, 65,195,106,192, 33,106,112, 9, 11, 86, - 37,132,144,207, 65, 13,223, 38,156,231, 79, 31, 53,119,168,217,185, 87,218,139, 11, 39, 13,225,236,214,171,183, 95,237, 90, 53, -152, 13,199, 94, 35, 51, 33, 82,147,240,236, 90, 26,195, 97, 80,187,241, 23, 14, 53,234, 52,228, 52,108,222,158, 39,137,121,218, -193,174,122,187, 78,233,175,174, 94,252, 28,247,228, 82,128,227, 86,217,225,235,158,157,219,243, 19, 37, 18,233,161,195, 39,159, -228,169,112, 27, 0,174, 2,164, 59, 80,191, 94,179,102,237,118,174, 90,101,239,226,226,194, 27,230,239,175,222,241,224,193,131, -241,128,166, 36, 62, 7,103,231, 78, 19, 39, 78,228, 36, 74, 36,244,208,145,211,143,117,124, 0, 96, 6,212,171,239,230,211, 19, -210,231, 70, 13, 83,246, 2, 4, 78,206,206,181, 39, 76,152,128, 36,137, 4,123,130,131,115,243,129, 80,157, 21,235, 4, 7,155, -235, 84,117, 30, 53,123,108,111,226,238,226,128,137,139,119,180,236,160, 76,169,122, 25,255,179,108,233,107,145,127,170,200, 42, - 42,182, 74,124, 59, 63, 28, 65, 23, 89, 9,136,247,161, 67,251,153,212, 28,165, 52, 42, 42, 10, 14, 14, 14,112,113,113,129,181, -181, 53, 34, 34, 34,240,231,159,127,226,197,139, 23, 96, 89, 22, 13, 26, 52, 48,170, 65,105,105,105,120,244,232, 17,108,109,109, - 43,140,179,170,123, 37, 76,113,175,196, 79,126,151,205,191,120,247, 69,243, 29,243,250,213, 97,124,250,237,202,207,255,159, 6, - 80, 40,254, 29, 51,148,232, 71, 23,122,120,120,180,222,189,123, 55, 95,174,134,101,141, 9,161, 63, 73,243, 53,230, 0, 96, 46, -226, 72,195,130,106,126,183,108,217, 50,233,232,209,163,125,222,190,125, 27, 88, 22,175, 64, 32, 88,241,229,151, 95,206,162,148, -242,190,253,246, 91, 0,192,136, 17, 35,178,111,223,190, 93,131, 82,154, 66, 8,113, 29, 51,102,204,203,203,151, 47,155,205,152, - 49,131,163, 86,171, 35,184, 92, 46, 37,132, 4, 80, 74,151, 20,229, 99, 24,230,254,131, 7, 15,188, 92, 61,107,194,211,158,129, -223,194,247,211,181,217,155,177,136,127,243, 26,207, 30,223,133,179,179,179,181,139,139, 75,100,173, 90,181,148, 9, 9, 9,115, -114,115,115,183,150,214, 70, 62,159, 31, 30, 22, 22,230,226,233,233,137,220,220, 92,196,167,230, 97,218, 17, 51,100,203,222, 27, - 49,120,144,161,161,123, 77, 75, 49,163,184,235,228,228,164, 84, 40, 20, 63,100,102,102,150, 58,141, 8,143,199,123,247,248,241, - 99, 11, 15, 15, 15,228,231,231,211,244,244,116, 34,149, 74,145,147,147, 67, 78,159, 62,253, 85, 98, 98, 98, 83,111,111,111,226, -230,230, 22, 80,189,122,117, 89, 66, 66,194, 56, 67,124,192, 66, 22,251, 40, 9, 33, 26, 46,151,187,102,252,248,241, 3,143, 30, - 61,122,255,240,146,218,125, 40,165, 74,237, 13,105,237,235,235,123,174,126,253, 58,174,193,171,235,109,164,148,254,244, 55,184, -188, 70,205,159, 63,191,182,157,157, 29, 38, 78,156,136,165, 75,151, 98,209,162, 69,213, 39, 78,156, 56, 30,192, 58, 35, 58, 29, -177,179,179,243,189, 13, 27, 54,248,180,110,221, 26,103,206,156,193,254,253,251, 17, 29, 29,173,246,246,246,230, 54,111,222, 28, -139, 23, 47, 70,215,174, 93,199, 77,157, 58,181, 29, 33,164,145,129,226, 99,244,226,197,139,251,180,105,211, 6, 35, 71,142,148, - 95,185,114,101, 32,128,243, 23, 46, 92,248,226,234,213,171,135,247,238,221, 43, 94,185,114,101,167,153, 51,103, 78, 4,176,169, - 28,251,255, 85,219,182,239,231, 80,110,211,166, 13,130,130,130,186,126,140,208, 34,132, 8,236,237,237, 79,239,217,179,167, 97, -205,154, 53, 49,108,216,176, 70, 3, 7, 14, 60, 77, 8,233, 76, 41, 53,168, 67,170, 92,185,242,143,199,143, 31,175, 86,210,200, - 66,113,144,203,229,118, 95,127,253,245, 42, 0, 70, 9,173,125,251,246,225,251,239,191, 71,131, 6, 13,234,183,104,209, 98,219, -132, 9, 19,208,191,127,255,142,132, 16, 39, 74,169,212, 16, 34, 46,151,235,221,179,103, 79,222,145, 35, 71,222, 91, 71,218,182, - 69,167, 78,157,240,228,201, 19,220,184,113, 3, 28, 14, 7,230,230,230,104,221,186,181, 64, 34,145,120, 3, 40, 83,104, 49, 66, -179, 81,125,122,118,183, 60,113, 59, 17, 26, 86,141, 38,213,172,208,220,199, 17,207,227,179, 17, 22, 25, 15,141,130, 15, 43, 59, -123,180,108,215,197, 46, 41, 33,122, 20,128,178,253,181,132,102,163,250,246,233, 97,113, 34, 84,130, 76,201, 51,250,234,238,209, - 63, 85,249,210,113, 0,112,255,210,129,109,206,246,226,206, 53, 26, 55,225,180,239,220,219,246,200,254,164, 81, 0, 62,139,208, -186,234,142,237,158,188,180, 17,179,135,248, 81,158,173,219, 93, 75,149,106,179,110, 89, 87,160,203,156,249,243, 91,140, 29, 63, - 94,196,178, 44,246,254,254,123,246,163, 7, 15,158,151, 22,237,183, 25,240, 28,216,167,143,208,210,202, 10,211,167, 77,131,165, - 74,117,185,224,144, 0, 29,167,207,154,213,250,155,111,190, 17,111, 11,152,124,191,235,152,229,141, 89, 74, 73,113,195,148, 69, -113, 17,104, 58,166, 79, 31, 88, 90, 89,225,219,111,191, 5, 81, 42,207,233,150,157,226,226,242,232,175,252,154, 15,233,213, 6, - 4, 4,251, 79,221,192,171,216,212,199,151, 19,241,250, 95,242, 76, 54,206, 71, 75,135, 28, 37,146, 59,246,232,135, 7, 15, 30, - 0, 0,222,189,123,135,119,239,222,161, 90,181,106,216,180,169,112,255, 85, 30, 1,195,178,108,133,115, 2,128,147,189, 21,134, -117,111,198,189,241,104,191, 72,154,154, 42,178,176,176,200,255,183, 9, 45,125,168,213,106,145,183,183, 55,178,101, 32, 89,121, - 42,139,180, 3,239, 45,254, 14,131,175, 88, 40, 20, 10,198,194,194, 2,114,185, 92,100,192, 3,129,215,167, 79,159, 89, 7, 15, - 30,228, 61,123,246, 12, 85,171, 86,133, 82,169,196,237,219,183,227,181, 19, 33,131, 82, 42,225,112, 56, 18,150,101,171, 55,104, -208, 0,129,129,129,240,241,241, 33,221,187,119,159,163, 21, 91,133,110,238,196,196,196, 31, 39, 76,152,240,197,161,195, 71,237, -182, 15,146, 33, 59, 43, 27,185,185,185, 8,127,120, 31,233,201,249,216,177, 99, 7, 68, 34, 49, 1,192, 79, 73, 73,230,207,152, - 49, 99,163,155,155, 91,183,248,248,248,158, 37,181, 83, 34,145,172,248,230,155,111, 90, 30, 56,112,192, 38, 39, 39, 7, 50, 89, - 62,210,165,102,136, 92,255,126, 30,223,218,211, 35,177,101,243, 86,166,158,151,185, 67, 94, 94, 30, 38, 79,158,188,214,213,213, -181,181, 68, 34, 25, 83, 18,103, 66, 66,194,157, 41, 83,166, 56,237,221,187, 87,164, 80, 40,148, 26,141, 6, 50,153,140, 57,112, -224,192, 28, 47, 47, 47,219,157, 59,119, 18,145, 72,172,173, 27,207,159, 52,105,210, 65,103,103,231,189, 73, 73, 73, 35,203, 26, - 46,226,112, 56,235,131,131,131,135, 15, 26, 52,200, 50, 49, 49,177,206,241,227,199,133, 0,100,218, 42, 46,157, 59,119,246, 90, -189,122,117, 37, 95, 95,223, 57,132, 16, 30,165,116,229,231,188,158, 28, 28, 28,166,246,233,211, 7,171, 86,173,194,201,147, 39, -103,218,217,217,173, 93,186,116, 41, 92, 93, 93,167, 16, 66,214, 27, 49, 81,239, 79,235,214,173,243,241,241,241,193,136, 17, 35, - 20, 23, 47, 94,156, 15,224, 24,128,216,235,215,175,123,252,246,219,111,189, 14, 30, 60,184,106,195,134, 13,162, 77,155, 54, 85, -235,215,175,223,122, 0, 99,202,188,191,157,156,102,248,251,251, 99,245,234,213,184,114,229, 74, 63, 74,233, 25,237,162,179,132, -144, 94, 43, 87,174,188,180,112,225, 66,172, 91,183,238, 91, 99,133, 22, 33,196,162,118,237,218, 63,116,235,214, 13,215,175, 95, -135,159,159, 31, 90,182,108, 57,147, 16,178,145, 82,154, 86, 14,145,197, 88, 88, 88, 28,220,189,123,183,159,151,151, 23,150, 47, - 95,142, 89,179,102, 97,215,174, 93,126,195,134, 13, 59, 72, 8,233, 91,244,158, 41, 14,214,214,214, 22,102,102,102,152, 51,103, - 14,141,142,142,206, 40,171,190,187,187,187,237,218,181,107,137,173,173,173,181,129,237, 20,139, 68,162, 86,117,235,214,197,226, -197,139,113,225,194, 5, 44, 92,184, 16,117,235,214, 69,108,108, 44, 6, 15, 30,108,182, 96,193,130,254, 0,118, 27,248,208,177, -182,183,183, 71, 74, 74, 10,120, 60, 30, 90,183,110,141, 99,199,142, 65, 46,151,195,209,209, 17,153,153,153,104,214,172,153, 78, -148, 25, 24,156, 67,235, 58,216, 89, 35,229,105, 2,184, 80,163,113, 13, 7, 92,126,242, 14, 74, 21, 11, 71,123, 27, 36,165, 36, -163, 69, 93, 55, 40, 20, 30,160,148,173,107, 8,163,128,195, 52, 22,138,196, 72,207, 73, 67, 66,228,149,119, 74,141,124, 66,102, -244,141, 56, 0,176,171,218,118,194,253, 27, 23,238, 15,232,209,214, 49, 87,234, 14, 66,217,102,159,227,126, 28,224, 1,119,115, - 17,119,196,169,237,243,136,154,101,241,229,152, 21, 77,187, 57, 33, 15,201, 64, 37,192,123,192,224,193,173,190,251,238, 59,193, -203,168, 40,118,198,180,105,153, 15,239,221,187,242, 7,112,191, 52,206, 92,160,122,231,206,157,193, 0,248,227,252,121,105, 26, - 16, 15, 0, 78,128,123,239,175,191,110, 59,127,238, 92,193,235, 55,111,216,219, 81,185, 39, 94,167,208,192, 86,118,120,116, 32, -246,125,157,210,160, 1,234,233,120,207,157, 59, 71,101,218,118,180,119,199,148,174,173,125,155, 15,239,211, 22,241, 73,239, 16, -244,203, 9, 60,126,153,120,206,158,197,208,127,203,115,184,180, 12,246,140, 1, 55,204, 7,101,121,121, 31,142, 30,124,172,128, -249, 20,156,197,225,223, 40,180,116,208, 77,222,172, 80,177, 80,168, 88,221, 91, 45,100, 50,153,161,138, 92,117,238,220,185, 61, -211,166, 77,195,218,181,107,241,242,229, 75,240,249,124,212,173, 91,215,133, 16, 98,161,179,192, 52,110,220,216,145, 97, 24, 60, -127,254, 28,107,214,172,193,232,209,163,233,173, 91,183,118, 21,247,192,160,148, 62, 76, 79, 79,223, 60, 97,220,232,204,140,228, -183, 80,201, 50,144,146,240, 26,114,105, 38,150, 7,254,136, 60, 21, 23, 73, 89, 74, 36,101, 41,193, 8,237,176,109,231,110, 78, -237,218,181,187,113,185,220,158,165,180,243,118,114,114,242,206, 73,147, 38,101, 38, 37, 37, 21,236,159, 66, 69,161, 80, 21,190, - 94,205,204,204,176,126,253,122,235, 26, 53,106,244,225,241,120, 29, 74,225, 76,140,139,139,123, 54,105,210, 36, 69,114,114, 50, -178,178,178,112,226,196,137, 94, 94, 94, 94,182,171,126, 90, 75,164, 74, 46,146, 50,149, 72,202, 84, 66, 96,225,136,131,135,143, -114,106,214,172, 57,132,199,227,181, 44, 75,100,237,221,187,119,248,160, 65,131, 44,127,250,233,167,244,227,199,143,111,161,148, -234,159,144,231,235,215,175, 63,116,240,224,193,156, 89,179,102,217, 5, 5, 5,205, 36,132,204,255,140,157, 69,135, 65,131, 6, -213, 98, 89, 22, 33, 33, 33,143, 41,165,235,142, 30, 61,122, 79, 46,151, 99,240,224,193,222,218, 97, 36, 67,120,154, 14, 25, 50, -100,178,159,159, 31,166, 79,159,174,188,120,241, 98, 99, 74,233, 90, 74,233, 27,250, 30,177,148,210,141, 87,175, 94,109, 48,117, -234, 84,121,179,102,205, 48,114,228,200,209,132, 16,191, 50,120, 91,249,251,251,251,176, 44,139, 3, 7, 14, 60,210, 19, 89,186, -243,248,231,225,195,135,111, 43, 20, 10, 12, 29, 58,180, 10, 33,228, 11, 35,246,157, 47, 20, 10, 67,150, 45, 91,102,147,144,144, -128,225,195,135,203,159, 63,127,142, 37, 75,150,136,173,173,173,207,232,238, 1, 99, 32, 20, 10,119,252,252,243,207,125,234,213, -171,135, 73,147, 38, 41,182,110,221, 58,109,242,228,201,138,198,141, 27, 99,203,150, 45,125, 4, 2,129, 81, 83,139, 72, 36,146, -204,136,136, 8,251,178, 62,241,241,241,201, 6,238,179,153,165,165,101,168,175,175,111,118,221,186,117,155,168,213,106, 68, 68, - 68,188,222,179,103, 15, 91,183,110, 93,108,222,188, 25, 65, 65, 65,232,217,179, 39, 56, 28, 78,127, 99,218, 42,149, 74, 33, 18, -137,192,231,243, 17, 22, 22, 6,185, 92, 14, 51, 51, 51,136, 68, 34,112, 56, 28,216,216,216,192,210,210, 18, 48, 48, 26,141, 16, -208,236, 60, 21,120, 60, 6, 92,134,197,179,216, 44, 40, 85, 44, 68,124, 14,120, 92, 2, 80, 22, 54,230, 60,136, 4, 28, 48,132, -176, 6,114, 34, 75,170,132,128,207,128,199, 23, 16, 70,173, 17, 23, 60, 28,185, 26,177, 88, 44, 32, 14, 86, 66,136,248,127,163, -105,129,201,251,227, 53, 10,224,153,123,120, 12, 92,189,102,141, 32, 59, 55, 23,253,250,245, 75,127,115,239, 94,176, 12,184,215, -174,140, 99,202,112,185, 53,218,183,107,135,176, 7, 15,144,147,145,241, 10,120,239, 28, 47,112,117, 29,180,126,253,122,129, 44, - 63, 31,253,250,246,205,124,121,227,198,222,184, 92,156, 50, 68,100, 1, 0,135,207,119,214,241,102,101,100,100, 0,239, 83, 72, - 56, 85,178, 88,245,205,144,174,200,201,203,199,236, 31,131,217, 7,207, 18,167, 92,143, 71,143,163, 18,100,253,155,158,193,132, -144,241,250, 31,131, 44, 90, 58,171,147, 33, 98, 69, 46,151, 87,184, 0,250, 88,206,226, 68,226,199,114,254, 29,193,229,114,243, - 95,188,120, 33,176,178,119,101,237, 45,121, 25, 94,163,111, 88, 3,128,157, 5, 55, 75,169, 81,177, 18,137, 4, 66,161, 48,223, - 16,174,252,252,252,113,132,144,229, 0,234,112,185,220, 83,187,119,239, 38,193,193,193,182,254,254,254, 81,132,144, 4, 95, 95, - 95,207,221,187,119, 91, 1,192,198,141, 27,233,193,131, 7,187,226,125,202,140, 18, 77,202, 73, 73, 73, 75,120, 60,222,173,111, -190,249,102,147, 64, 32,176, 53, 55, 55,183,191,126,253, 58,201, 87, 82, 52,157, 31, 91, 16,137,104, 37,102,112,109,158, 21,198, -143, 31,207,137,140,140, 12, 4,112,170, 20,206, 57, 66,161,240,250,203,151, 47,215, 90,187, 53,172,100,238, 57,223,186,249,188, -231, 0, 0, 79, 7, 30, 24,109,191,152,153,153,137,212,212, 84, 76,158, 60,217, 54, 42, 42,106, 14,128,203, 37,113,198,199,199, - 95, 21, 10,133,241, 79,159, 62,109,207,227,241, 4,230,230,230, 77, 67, 67, 67, 73,190,130, 69,253, 57,177, 72,207,125,223, 78, - 59, 11, 46,238, 47,115,194,148, 41, 83,184,175, 94,189,250, 17, 64,155, 98, 59, 51,134, 9,210, 23, 89,179,103,207, 14, 7, 80, -133, 16, 82,104,104, 84,163,209,144,161, 67,135, 62, 1, 80,119,214,172, 89,118,148,210,153,132,144,116, 74,233,246,191,250, 90, -178,178,178, 90, 53, 97,194, 4, 28, 60,120, 16, 25, 25, 25,235, 1, 32, 59, 59,123,221,190,125,251, 14,140, 27, 55, 14,191,255, -254,251, 42, 66,200, 31, 6, 88,181,190, 28, 60,120, 48,206,158, 61,139, 75,151, 46,253, 64, 41,141, 40,225, 30,125, 73, 8,153, -115,252,248,241, 13,254,254,254,248,245,215, 95,187, 1, 40,205, 65,182,115,215,174, 93,113,230,204, 25,188,123,247,110, 75,113, - 21, 50, 51, 51,183,158, 56,113,162, 69,215,174, 93, 17, 24, 24,216, 25,192,159, 6,116,144, 62,214,214,214,187, 55,108,216,208, -180, 94,189,122, 24, 50,100, 72,190, 82,169,236, 54,107,214,172,147,251,247,239,183,220,179,103, 79,147,241,227,199,223, 33,132, -140,165,148,222, 54,232,161,195,225,172,220,180,105,211,152,246,237,219, 99,230,204,153,234,115,231,206,245,166,148,158, 39,132, - 68,205,158, 61,251,244,154, 53,107, 56,171, 87,175, 30,195,225,112, 82, 53, 26,205,231, 18,215,203, 54,110,220,216,162, 75,151, - 46,120,253,250, 53,110,223,190, 13,165, 82,249,123,104,104,232,181,234,213,171, 47, 83, 40, 20, 39,205,205,205, 71, 88, 90, 90, -250, 54,108,216,240, 11, 66,136,153, 33,126,122,132,144,204,168,168, 40,115, 71, 71, 71,240,120, 60, 60,122,244, 8,142,142,142, - 0,128,148,148, 20,212,173, 91, 23, 28, 14, 7,153,153,153, 0, 12,123,216, 18,194, 60,142,122, 35,169, 98,103,105, 14,104, 68, -120,248, 60, 30,149, 28,108,161, 33, 12,146,146, 18,209,176,150, 27, 8, 33,200,124,151, 4, 66,200, 19, 67, 56, 53,148, 13,123, - 43, 73,169,108,111, 41, 68,189, 22, 93,236, 67,255, 72, 13,182,174,218,102, 60,151, 67, 56, 66,145,213,246, 49, 35, 71, 58,176, - 44, 69,230,187,100,112, 25,230,238,231, 56, 65, 33,111, 17,215,174,170,232, 97,151, 49,203, 27, 18, 10, 42, 83, 98,207,175,201, -200, 48, 3, 26,110, 92,176,192,198,222,193, 1, 67,134, 12, 97,223, 37, 36, 92,204, 3, 12, 74,172, 92,165,122,117, 39, 11, 75, - 75,220,188,121, 19, 28, 32, 6, 0,118, 1, 62, 65,179,103,219, 59, 58, 59, 99,244,152, 49,108,242,219,183,127,202, 12, 24,210, - 45,196, 91,181, 42, 79,199,203,104,121, 19, 57,152, 54,171,183,159,208, 92, 44,196,202,109, 71, 17,151, 38, 61, 16,154,136,109, -255, 70, 99, 71,153, 22,173,146,156,207,222, 59, 85,155,149, 42, 86, 68, 34, 81,129, 53,197,136, 55,189, 10,231, 44, 11,159,130, -243, 51, 42,231,121,132,144,227,132,144,121,113,113,113,207,198,140, 25,163, 84, 43,229, 57,183,150, 87,153,251, 32,208,107, 82, -232, 18,151, 73,199,166, 89,207,205,203, 74,207,217,184,113,163, 42, 46, 46,238,153,254, 58,101, 92, 44,111, 41,165,103,126,251, -237,183,173, 33, 33, 33,168, 91,183, 46, 34, 34, 34, 28,165, 82,105,163, 39, 79,158,216,249,248,248, 32, 56, 56, 24, 7, 15, 30, - 92, 75, 41,189, 80,154,200,210,179,182, 93, 76, 76, 76,172, 25, 27, 27, 91,205,198,198, 70,101, 99, 99,131,162,145,136,217, 50, - 22,239, 50,179, 96,103,103, 15, 43, 43, 43,239,178, 56,229,114,249,153,196,196,196, 26,172,109,173,182, 53,210,214,103,133,173, -116, 71,216, 74,119,156,153,227, 10, 23, 27, 1, 50, 50, 50,144,154,154,138,212,212, 84, 16, 66,160, 82,169,106, 27,192, 25, 45, -145, 72,126,121,251,246,237,113, 39, 39, 39, 88, 90, 90,130, 2, 72,202, 84, 33,124,181, 15,194, 87,251, 32, 41, 83,133,236,156, - 28,120,121,121,193,210,210,178,110, 73, 67, 70,149, 43, 87,238, 62,104,208, 32, 75, 0,208, 10,168,142,148,210, 73,197,124, 38, -170,213,234,214,186,186,223,127,255,189, 29,128,174,127,241,245,196, 33,132,124, 51,110,220,184, 38, 34,145, 8,155, 55,111,142, - 6,176, 87,215,215,111,221,186,245, 57, 0, 76,155, 54,205, 23,192, 76, 82, 66, 38,104, 29,248,124,126,227,218,181,107, 35, 52, - 52, 20, 0,142,150,177,249,195,183,110,221, 66,245,234,213, 33, 18,137,154,150, 81,215,219,221,221, 29,207,159, 63, 7,128,135, - 37,212,121,248,252,249,115,184,187,187,131, 16,226,109,192,190,247,233,210,165,203,227,203,151, 47, 55,109,213,170, 21,198,140, - 25,163,184,115,231, 78,119, 74,233,181,135, 15, 31,118, 24, 58,116,168,180, 70,141, 26,184,122,245,170,207,208,161, 67,111,113, - 56,156,229, 6,112,142, 14, 8, 8,152,247,213, 87, 95, 33, 32, 32,128, 30, 58,116,104, 8,165,244,188,246,254, 58,119,224,192, -129,225, 43, 86,172,160,125,251,246,197,210,165, 75,231, 17, 66, 38,149, 97, 29,202,210,104, 52,144, 74,165, 6,153,228, 13,173, -239,224,224,240,101,151, 46, 93,176,112,225, 66, 84,174, 92, 25, 39, 79,158,164, 0, 78, 81, 74,175,203,229,242,182,148,210, 53, - 82,169,244, 88,104,104, 40, 58,119,238,204, 71,225, 41, 70, 74,132, 90,173,126,115,249,242,101,165,189,189,253,127,217, 59,239, -248, 40,138, 62,140, 63,115,189,223,165, 93, 58, 9,161,165,210,149, 42, 77, 67, 13,130,162,162, 72, 17, 17, 68, 1, 17, 68,138, -162,188, 22, 4,105,162,136, 20, 69, 80,154,226,139, 82, 34, 34,200, 43,136,212,132, 22, 66, 8, 36,164,151,203,165,151, 75,114, -109,231,253, 35,185, 24, 98,202, 93,130, 10, 56,223,207,103, 63,119, 55,187,251,220,236,236,222,238,115, 83,126, 3, 95, 95, 95, -248,249,249,161,172,172, 12,133,133,133,232,216,177, 35,122,245,234,133,178,178, 50, 28, 60,120,208, 84, 88, 88,104,215,128, 21, -139,177,236,171, 35,145,123,139, 92, 85, 18,248,186,107,208,218,199, 5,165,133,185,208,103,103,162,123,136, 31, 6,116,111,141, -220, 34, 35, 14, 31,220, 91, 80, 82, 98,248,202,174, 86,128, 74,195,214,163, 63, 29, 40,114, 86,137, 16, 24, 20,134,241, 83, 94, -233,218,181, 91,207, 35, 61,122,244, 61,188,114,249, 7,157, 31,233, 29, 66,210,115, 43,112,232,224,247, 5, 69,197,197, 91,255, -137,123,253, 59, 0,191, 66,211,225,196,250,125,209, 95,132, 14,155,250, 69, 92, 58,214, 2,128,153,207, 15, 30, 49,124, 56,210, -211,211,177,119,207,158, 44, 3,112,217, 94, 61,153, 76,198, 3,128,162,162, 34, 72,170,102, 11,129, 5, 8,138,136,136,128, 62, - 55, 23, 59,119,236,208, 31, 2, 46, 56,146,207, 71, 1,177, 92, 86, 85, 33, 88, 84, 84, 4, 2, 20, 3, 0, 17, 96, 68,143,142, -237,161,207, 47,198,255,206,197,149,182, 46,199,203,141,233,220,171, 29,225, 27,235,163,213, 84,125,104,238,220,185,115, 33,145, - 72,224,229,229, 85, 99,142,108,102, 69, 44, 22,195,203,203, 11, 22,139, 5,187,119,239, 6,128, 70,251, 48,240,128,202, 81, 47, - 45,227, 42,205,212, 32, 20, 10,239,136,102,117,205, 65,229, 19,243,191,228,126, 58, 85,255,160,152,230,104,222, 3,244,168,142, -137,213,131, 82, 90,144,156,156,156, 62,246,137, 81, 69, 41, 9, 87,179,203, 10, 51,179,138,243,210,178,210,110,197,100,191,177, - 96,110, 81,122,122,122, 90,117, 44,173, 30,153,153,153,163, 0,216,219,215, 96,238,216,177, 99, 55, 76,157, 58,149, 94,186,116, - 9, 0, 16, 29, 29,141,231,158,123,142, 78,156, 56,113, 45,128,133,205,200,119, 89,121,121,249,109,181, 33, 38, 43, 87,211,228, - 87, 92, 92,140,204,204, 76, 24,141, 70,187, 29,241,141,195,171,226,243,147,163,204, 97,254, 10,132,249, 43, 16,220, 74, 14, 98, - 41,173, 49, 89,122,189, 30, 58,157, 14, 0, 42, 28,200,103,113,101,101,229,109,249,172,221, 52, 89, 92, 92,140,236,236,108, 88, -173, 86, 99, 3, 63, 58, 46, 35, 35,227,240, 55,223,124, 83, 2, 0, 43, 87,174,204, 39,132,252, 66, 8,217, 80,207,178, 81, 32, - 16,252,110,219,118,213,170, 85,249, 0,126,252, 27, 77,214, 99,157, 58,117, 42, 88,180,104,209,167,179,103,207,198,198,141, 27, -145,149,149,181,144, 82,106,177, 29, 75,110,110,238,252,245,235,215, 99,242,228,201,120,251,237,183, 87,117,235,214,173,152, 16, -210, 96,255, 10,173, 86,235, 43, 16, 8,112,225,194,133, 98, 74,105, 98, 19, 55,168,236, 11, 23, 46,232, 8, 33,240,242,242,106, -219,216,182, 46, 46, 46,237, 84, 42, 21, 50, 50, 50,128,234,127,204,245,144,156,153,153, 73,197, 98, 49,188,189,189,219, 55,117, -252,206,206,206,243,191,248,226, 11,193,213,171, 87,241,200, 35,143,164, 31, 63,126,124, 48,165,244,215,234,188, 93,136,142,142, -238, 55,104,208,160,248, 35, 71,142,224,195, 15, 63, 36, 93,186,116,121,169, 41, 77,127,127,255,233,207, 63,255, 60,214,173, 91, -135, 77,155, 54,189, 68, 41,221, 83,231,152,119,173, 95,191,254,149, 77,155, 54, 97,202,148, 41, 8, 8, 8,104,180,175, 74, 74, - 74,202,130,129, 3, 7, 70,223,184,113,195,174, 25, 15,236,217,158, 16, 50,168,103,207,158,237,202,203,203,177,117,235,214,196, -118,237,218,157,223,179,103,207, 92, 74,105,221, 7,246, 15,123,247,238,197,132, 9, 19,208,165, 75,151,173,132,144,113,118, 60, -116, 50, 83, 82, 82,114, 47, 95,190,204,241,249,124,248,250,250, 98,196,136, 17,120,230,153,103,208,165, 75, 23,228,228,228,224, -196,137, 19, 92, 66, 66, 66,174,189,129, 75,115,227,255,119, 32, 41, 41,254,247, 11,103, 79,152, 5,124, 30,252,188, 92,240,120, -120, 87,188,240,100, 95,116, 15,246, 65, 74, 78, 57,142, 29, 59, 98, 78, 74, 74, 60,109,207,136, 67,155,102, 92,236,229, 83, 87, - 47,156,180, 8, 5, 4,193, 65, 29,176,248,141,249,206, 75,151, 44,112,234,208,214, 15,151,111, 21,225,200,207,135,204,153,233, -105,255,251,167, 70, 28, 30, 7, 68, 74, 9, 81,240,121, 60, 88,121,146, 50,126,117, 32,227,142,161,161,129, 30,158,158,136,140, -140, 4, 15,184,230,144,158,178,170, 21,188,180,180, 20, 54,189,118, 65, 65, 65,126,254,254,248, 49, 50, 18,124,142,187, 54,192, -193, 0,163,215, 1,121,109, 93, 2, 84,188,220, 10,170,118,173,220,131,156, 53, 10,156,189,124, 19,149,102,122,110, 71, 1, 12, -184, 15,169,219,108,232, 72,211,225,202,141, 27, 55,246,248,226,139, 47, 6,207,157, 59, 87, 57,105,210, 36, 72,165, 82, 24, 12, - 6,248,250,250,194,106,181,226,167,159,126, 66, 84, 84, 84, 41,199,113, 71, 80, 39,108, 0, 33, 36,188,118,172,141,159, 18,168, -172, 42, 8,166,161,199,190,167,158,186, 35,154, 0,160,188,201,169,243, 90, 27,183,127,178,231,228,152,157,135, 47,144, 87,199, - 13,224,117, 15,106, 5, 0,240,240,240,128, 90,173,118, 88,243, 14, 20,250, 95,174, 89,187, 89, 55, 43, 43,235, 58, 33, 36,103, -234,212,169,193,182,142,239, 18,137,164, 34, 45, 45, 45,206, 22,176,180,238, 62, 77,229,179,122,100,220,203,132,144,253, 69, 69, - 69,135, 95,127,253,117, 44, 93,186, 20, 7, 14, 28,232, 71, 41,253,189, 57,199, 78, 41,181, 6, 4, 4, 20,158, 59,119,206,163, -125, 72, 55,180,113, 23,162,255, 91, 55, 64, 41,133,171,156,162,164, 48, 31, 23, 47, 94, 64, 73, 73,201, 89, 71,242,233,237,237, - 93,152,147,147,227,230,238,238,142,252,252,124,228,230,230,214,152,172,130,130, 2,228,231,231, 83, 66,110,143,217,210,132,102, - 89,187,118,237, 12,113,113,113, 98,143, 86,237,209,214, 93,132,158,111, 92, 7, 40,133,159, 11, 15, 37,197,133, 56,125,250, 52, -138,138,138,126,109, 72,147,227,184,215,198,143, 31,207, 7, 48,241,245,215, 95,119, 1,208,101,254,252,249, 71,234,142, 44, 20, - 10,133, 31,109,223,190,189,163,173,137,113,193,130, 5,107, 40,165, 95,252, 93,215,146,171,171,235,107,145,145,145, 42,147,201, -132, 79, 62,249, 4,107,214,172,217, 66, 41,253,111,157,242,136,228,243,249,235,121, 60,222,140,153, 51,103,226,197, 23, 95,148, - 63,240,192, 3,115,107,213,122,221,166,153,145,145,177,184,123,247,238,111,231,228,228,216,213,177,255,198,141, 27,211,186,119, -239,190, 56, 39, 39,103, 69, 99,231, 72,161, 80, 40,172, 86, 43,146,146,146, 10, 40,165, 69, 13,156,187,138, 14, 29, 58,100, 88, -173, 86, 95,185, 92,238,210,212,245, 89, 80, 80,240,193, 3, 15, 60,240, 31,157, 78,247, 51,128,247,235,134, 42,161,148, 94, 34, -132,132,205,158, 61,123,214,242,229,203,199,100,103,103,239,110, 74, 51, 37, 37,229,131, 65,131, 6,189, 21, 31, 31,191,173,161, - 38, 96, 74,233,167,132, 16,211,246,237,219, 95, 74, 74, 74, 90,214,152, 38,165,244, 32, 26,105, 74,175, 71,187,222,237,107,107, -242,249,252,249,203,151, 47,231,109,220,184, 17,148,210, 85, 22,139,165,161,124, 94,230,243,249, 95,245,237,219,119,210,158, 61, -123,164, 97, 97, 97, 47, 2,216,213,212,245, 89, 89, 89,121,230,212,169, 83,189,146,147,147,221, 6, 13, 26, 36,178,253, 65, 41, - 44, 44,196,193,131, 7, 77, 9, 9, 9,185,101,101,101,103, 28,185,135, 88,140,197,227, 78, 29,219,183, 43,249, 70, 76,239,129, -195, 70, 59, 27, 77,190,144,228,241, 81,152,151,141,159, 14,238, 45, 72, 74, 74, 60,109, 48, 20,142,115, 68,211, 84, 89,244,204, -233,255,237,223,157,158, 20,215,171,255,160, 17,206, 21, 70,127, 72, 68, 60,228,233, 50,240, 83,228,190,252,164,164, 91,191, 85, -152, 43,159,251,167,238,243,252, 0,188,207,207,142,154, 58,253,209,174,144, 57,251, 94, 20, 2,159,244, 5,100,110, 30, 30,162, -234,223, 14,148, 64,138,189,154, 58, 64,220,190,186,149,202, 96, 48, 64, 8, 24, 39, 3, 66,173, 86, 43, 3,128,248,248,120,200, -129, 84, 71,243, 89, 10, 40,228,181,116,121,128, 33, 79, 0,159,118,106, 5, 1,128,244,236, 60, 24,205,248, 29,247, 41,182, 26, -173,250, 58,197, 55, 21,124,145, 3,112,134, 16,114, 97,197,138, 21,253, 55,108,216, 48, 96,206,156, 57,226,225,195,135,227,252, -249,243, 56,122,244,168,177,178,178,242, 56,128, 19,182,225,234,118,100,230,142,107,238,169,218,110,108, 15, 31,226, 98,226,202, -191, 95,188,225,208, 67,173, 61,157,168,197,202,145,152,152, 24,156, 58,117,202, 97,205,123,228,196, 2, 64, 15, 66,200,190,234, -164,115,117, 67, 56, 84, 55, 23,246,168, 85, 11,214,156,175,186, 40, 16, 8,104, 80, 80, 16,169,158,158, 38,182, 37,249,206,206, -206,126,118,193,130, 5, 63,127,251,221,247,130,189, 51,101, 40, 42, 44,170,186, 1, 23, 21, 34, 79,151,137, 99,199,142,153,244, -122,253,139,142,104,234,245,250,151,199,141, 27,247,237,174, 93,187, 92, 10, 10, 10,106,140, 86, 65, 65, 1, 56,142,195,150, 45, - 91,244, 58,157,238, 77, 71, 52,179,178,178,166,188,254,250,235,223,237,220,253,157,224,200, 66,103,148,218,162,207,151, 21, 33, - 47, 39, 11, 7, 14, 28,168,204,205,205,157,221,200,249,177, 18, 66, 94, 29, 63,126, 60,108,102,235,244,233,211,175, 16, 66, 62, -181, 61,204, 9, 33,109, 94,123,237,181,113,181,250,113,173,249,187, 71, 29,230,229,229, 45,237,213,171,215, 26,189, 94,127,203, -100, 50,237,161,148,214, 27,165,223,106,181,206, 36,132,156,250,244,211, 79,159,113,115,115,243,200,206,206, 94,238,232,131,190, -165,219,167,166,166, 46,234,222,189,251, 27, 57, 57, 57,203, 27,219,238,230,205,155, 51,170,183, 91, 97,199,119, 71, 2,136,108, - 98, 27, 11,170, 66, 91,124,100,231,241,236, 3,176,207,206,155,243,230,127,226,254, 97,181, 90, 87,118,234,212, 73,106,177, 88, -142, 52,213, 31,144,227,184,105,115,230,204, 73,159, 55,111, 94, 87,171,213,106,111, 25,152, 1,252, 70, 8,241,206,205,205, 13, - 0,224, 4, 0, 2,129,160,176,176,176,176, 89, 83,240, 84, 71,124, 31,233, 22, 56,248,209, 61,219,214, 77,166,156,181, 11, 33, - 4,124, 30,255, 82, 73,169, 97,171,189, 53, 89,245,104, 70,184, 5, 14,126, 84,151,145,242, 60,229,172, 93, 0,194, 9, 4,188, -203, 37,165,134,207,245,113, 71,254,177, 41,120, 38,249,192,131, 79, 48,243,231, 47,223, 34, 0, 48,248,249,247,186,182,118,130, -210, 82,136, 66, 84,223,203,179,178,178,224, 12, 20,216,171, 41, 7, 44,166,234, 62,209, 5,249,249,144, 3,229, 89, 0,191,186, -223, 37,209,101,103, 67,233,128, 94,205, 31, 70,192, 84, 71,183, 8,128,196,214,157, 51,191,184, 12,176, 63,174,225, 61, 89,163, - 85,247,125,141,225,162,148,218,189,160,106,126,189,199, 1, 44,171,126, 85, 52,177,125,248, 63,161,217,203, 11,129,225,237, 72, -220,136, 32, 65, 62,128, 39,239,132,166,163,203, 95,173, 9, 96,155,209,104,164, 21, 21, 21,212, 96, 48,208,210,210, 82, 10, 96, - 95, 61,251,236,203,204,204,164,233,233,233, 52, 53, 53,149, 38, 39, 39, 83, 0, 59, 28,205,167, 90,173,254,226,169,167,158,178, - 10,133,194,117,119,226,216, 93, 92, 92,150,245,236,217,211,244,241,199, 31,211, 31,126,248,129,126,254,249,231,116,230,204,153, -180, 99,199,142,149, 78, 78, 78,227,154,163,233,233,233,185, 56, 40, 40, 40,111,203,150, 45,116,199,142, 29,116,237,218,181,244, -205, 55,223,180,250,250,250,102,171, 84,170,161,205,209,116,119,119,223,252,208, 67, 15,153, 54,111,222, 76,143, 28, 57, 66,119, -238,220, 73, 95,123,237, 53, 26, 28, 28, 92,169, 80, 40,158,176, 71, 19, 0, 95, 32, 16,172,158, 62,125,122,182,183,183,119,100, -157,117,242,208,208,208,243,227,199,143,207, 4,176,224,126,185, 62,153, 38,211,100,154, 45,215,156,232, 3,239,193,109, 96,161, - 39,222,162,244,196, 91, 52,188, 13,184,103,189,225, 67, 1,190, 92, 36,122,102, 64,191,126,171, 68,192, 51, 20,224,215,187,212, -151, 79,128, 47,229,243,159,236,219,179,231, 42, 17, 48,206,182,173,148,207,127,114, 64,191,126,171,132,124,254,132, 6,245, 26, -209,164, 0, 95, 36, 16, 44,232,219,187,247,106, 1,240,134, 45,237,225, 54,228,218,107,195, 90,209,126,254,228,230, 4,119,200, - 27,211,108,160, 60,166,221,233, 50,254,187,151,101,131, 74,187, 0, 0, 32, 0, 73, 68, 65, 84,230, 94, 8,130, 59,125, 17,222, - 43,154,119,145,209,106, 95,221,108,179,175,214,178,168,158,125, 22,213,217,102, 27,128,246,205, 44, 79,217,157, 60,118, 0,157, -220,220,220, 14,181,111,223, 94,223,186,117,235, 76,103,103,231, 93, 0,124, 91,168, 25,230,233,233,249,181,135,135,199, 13, 47, - 47,175,203,110,110,110, 31, 1,208,182, 68, 83, 40, 20,246,244,240,240,248, 53, 32, 32,160,208,223,223, 95,231,230,230,182, 27, -128,135,163,154, 0,188, 80,207, 77, 5,128, 8,128, 23,123,232, 48, 77,166,201, 52,235, 26,152, 33,109,177,124,112, 27, 88, 6, -183,129,117, 72, 0, 62,170,109, 80, 70, 2,178,230,154,162,231, 0, 73,221,237,155,212,107, 66,147, 2,252, 62,128,178,238, 62, - 35,124, 17,106,143,230,189,108,180,108,249,172,190,207, 79,171,157,111, 65,115,170,200,108,157,100,239,112, 51,216, 61,161,121, - 23, 53, 27,222, 4,154, 14,246, 86, 59,130,252, 29,248,206,242, 59,124, 12, 87, 0, 12,191,195,154, 87, 1, 76,188,147,154, 38, -147,233, 44,236,156,247,173,137,188,101, 53,210, 23, 46, 11, 12, 6,131,113,251,205,193,122, 24, 88, 56, 56,144,124, 34,176,130, -119, 40,145,102,212, 94,125,224,143,192,199, 14,105, 2,192,214,122,166,231,105,150, 94, 45, 77, 0,248, 29,248,211,236, 14,145, - 45,236,110,114,143, 61,155,179, 0,108,118, 40,142, 22,131,193, 96, 48, 24,140,127,142, 35,241,148,253, 17,187,251,137,172, 51, -199, 97, 77,191, 79, 2, 32,188, 1, 87,102,247, 72, 10, 66, 72,120, 51, 92,223, 81,166,201, 52,153, 38,211,100,154, 76,147,105, -254,187, 52,107,105, 55, 52,176,226,122, 29,189,127,100,192,200,157,130,216, 63,109, 89, 51,196,239,209,176, 9, 76,147,105, 50, - 77,166,201, 52,153, 38,211,252,123, 53,239,105, 51,117,123,109,214,109, 6,145, 53, 29, 50, 24, 12, 6,131,193, 96,180,128,198, -106,221,152,209, 98, 48, 24, 12, 6,131,193,104, 1,132, 16, 47, 84, 77, 81, 21, 89,253,202,106,180, 24, 12, 6,131,193, 96, 48, -238, 16, 17,148,210,205,245, 69,134,231,177,178, 97, 48, 24, 12, 6,131,193,104, 25,182,126, 90,142,206,117,200, 96, 48, 24, 12, - 6,131,193,104,132,198,250,104,221, 54,234, 48, 50, 50,146, 70, 68, 68, 16, 86,100, 12, 6,131,193, 96, 48,254, 9,238, 69, 47, - 82,171, 6, 43,178,110,112,106, 86,163,197, 96, 48, 24, 12, 6,131,209, 2,108, 53, 90,213,205,134,183,165, 49,163,197, 96, 48, - 24, 12, 6,131,209, 2, 26,171,209,226, 1, 85,213,116,172,152, 24, 12, 6,131,193, 96,252, 83,220,203, 94,132, 82,186,185,122, -249,211,116, 73,182, 81,135, 3,171, 15,112, 32, 59,213, 12, 6,131,193, 96, 48,254, 1,238, 89, 47, 66, 8,241,170,110, 54,244, -250,211,186,191,114, 10, 30, 6,131,193, 96, 48, 24,140,251, 29, 91,252,172,250,226,104, 49,163,197, 96, 48, 24, 12, 6,131,209, - 66,163, 85, 55,173,166,131, 60, 51, 90, 12, 6,131,193, 96, 48, 24,127, 13,127,105,100,120, 66, 72, 56,211,100,154, 76,147,105, - 50, 77,166,201, 52,153,230,253,142, 45, 34,124,221,218, 45, 22,222,129,193, 96, 48, 24, 12, 6,163,133, 38,171,118,223,172,218, -159,217, 92,135, 12, 6,131,193, 96, 48, 24,127, 17,172, 70,139,193, 96, 48, 24, 12, 6,163, 5,216, 70, 28,214,254,204,140, 22, -131,193, 96, 48, 24, 12,198, 29, 52, 91,245,165,179,166, 67, 6,131,193, 96, 48, 24,140, 22, 80,183, 3,124,237,207, 4, 64,120, - 3,206,236,168, 3, 95,224,240,232,131,166,244,153, 38,211,100,154, 76,147,105, 50, 77,166,121,255,105, 54,165,237,136,255,184, -155,140, 86, 67,157,225, 65, 41,253,203, 22, 0,225, 76,147,105, 50, 77,166,201, 52,153, 38,211,100,154,247,243, 2,192, 11,192, -180, 90,139,151,109, 29,235,163,197, 96,220,235,124, 71,248, 40, 8, 10, 0,165,222,224,139,179,144,117, 37, 17, 75, 40,215, 98, - 77, 93,168, 63,100,102, 15, 88,164,122,232, 46,223,106,177, 38,131,193, 96,220,167, 84, 79, 38, 93,111, 31, 45,102,180, 24,140, -123, 29,125,112, 32, 4, 88, 6, 30,188, 64, 77, 9,208,134, 46, 3, 16,211, 98, 77, 17,247, 62,172, 60, 95, 80, 83, 60,220,131, -150, 3,136,101,133,205, 96, 48, 24,142,241,183,119,134, 23, 10,133, 58, 66, 8, 39,145, 72,246,214, 55,203, 53,131,113,167, 32, -132,120,201,100,178,189,132, 16, 78, 36, 18,233,238,203,131,220,222, 73, 14,158,117,184,209,204,249,252,116,165,208,221, 80,105, - 13, 4,207, 50, 2, 95, 6, 42, 91,164, 41, 32, 67, 42, 76,156,223,142,115, 6,143, 50,163, 37, 4, 20, 45,211,252,227,156, 56, -137,197,226,159, 8, 33,110,236, 10,189, 63, 9, 37,228,129, 7,133,194,121, 33,132, 60, 76, 8, 33,172, 68, 24,204,104,253,205, - 88, 44, 22,247,180,180, 52,242,249,231,159,143, 82,171,213, 9, 66,161,112, 17, 33, 68,244,111, 41,112,149, 74,117, 74,163,209, -232,156,156,156,116, 26,141,230, 66, 83,233,247,169, 1, 10,116,119,119, 79,113,117,117,141,175,157,238,222,101, 76,159, 14, 15, - 77, 90,226, 22,246,216,128, 22,234,139,132, 66,225, 34,141, 70,147,176,121,243,230, 81,113,113,113,196,108, 54,187,223,151,133, - 89,193,121,128,199, 31,116, 53,203, 32,207, 42, 54,123, 68, 39, 27, 84, 0,127, 32,140,104,254,159,152, 34,206, 3,160, 15, 95, - 74, 47, 87,156,202,215,122,252,150, 88,169, 6,143, 55, 8, 21,196,179,197, 55, 28, 30,239, 37,142,227, 6,139, 68,162, 87,217, -237,247,254, 68,204,227,245, 61, 53,106,212,251, 11, 58,119,158, 21, 12, 60, 90,159,217, 34, 85,188, 18, 18, 18,114,136, 16,242, -204, 29,188,183,124, 24, 28, 28,156, 65, 8,153,205,206, 4,227,111,126,174,117,179,253,193,175,158,134,199,203, 97,163,245, 84, - 27,210,247,217,182,228,248,211,109, 72,201, 51,109, 73,233,196,182,228,228,147,109,200,195,205,201,144,175,175, 47,250,244,233, -195, 79, 77, 77,149,205,158, 61,123,137, 68, 34, 73, 34,132, 12,109,142,150, 92, 46,143, 82, 40, 20,105, 66,161,240,182,188, 40, - 20,138, 40,165, 82,153, 38, 20, 10, 31,169,157,174, 86,171, 79,105, 52, 26,157, 90,173,190,208,128, 17,138,210,104, 52, 58,149, - 74, 21, 85, 59, 93, 40, 20, 62,162, 82,169,210,213,106,117,221,244,135,213,106,117, 90,221,244,134, 16, 10,133,190,105,105,105, -238,233,233,233,238, 98,177,216,163,118,122,106,106,170,123, 90, 90,218,109,233,142, 32, 20, 10, 31, 86, 42,149,105, 10,133, 34, -170,190,244,186,199,212, 16,181,202,238, 97,123,210, 29, 53, 89, 67,134, 12, 57,153,149,149,229,231,228,228,228, 84,123,157,139, -198,105,232,215, 91,214,207, 29, 61, 98,200, 75,238,161,143,119,106,166,254, 80,137, 68,146, 52,103,206,156, 37,233,233,233,178, -158, 61,123,242, 69,162,251,212,199,127, 23, 42, 2,225,250,115,148,106,175,101, 84,104, 35, 70, 61, 37,184,152, 86,174, 53, 91, -173, 46, 0,127, 32,182,181,150, 52, 75, 83, 96,238,199, 81,234,241, 75,178, 80, 59,104,236, 44,254,177,100,129,214,108,181,186, -130,135, 1,205,210,252,227,220, 8,249,124,254,220,213,171, 87,243, 0,204, 36,132,136,255, 77, 55,226,158, 62,196,231,145,246, -130,115,221,189, 73,223, 59,120,115, 15, 83, 40, 20, 81,132,144,192,187,229, 56,141, 28,119,125,247,173, 91,135, 39,180,107, 55, -114, 65,231,206,147,235,154,173,234,247, 11,150, 47, 95, 62,241,234,213,171,218, 54,109,218,188, 72, 8,225,221,129,178, 88,187, -124,249,242,249, 87,175, 94,245, 14, 8, 8,120,231, 78,104, 50,238, 46, 15, 15, 96, 16,128, 8, 0,143, 0,232, 81,253,254,193, -234, 37, 2, 85, 81, 20,106,191, 62, 88,189,175,109,125,207, 6, 52, 34,234,217,239,193, 90,233,181, 63,215,125,111,163, 91,245, -107, 68,245,104,195,136,154, 53,148, 82, 28, 60,120,144,214,126,173,187, 60, 29,128,255,204,234,227, 99,184,118, 96, 39, 45, 77, -187, 69, 11,226, 46,210,139,155, 63,160,179, 30,212, 26,158,109,131, 15, 29,236,153, 79, 41,165,116,199,142, 29,244,216,177, 99, -180,176,176,144,198,198,198,210, 30, 61,122,148,203,229,242, 95, 0, 4, 56,162,167, 82,169,116,191,252,242, 11, 29, 50,100, 72, -145, 82,169, 92, 5,128, 71, 41,133, 90,173,214,253,254,251,239,116,200,144, 33, 69, 42,149,106, 45, 0, 62,165, 20, 79, 60,241, - 68, 14,165,148,106,181,218,204,250,244, 70,143, 30, 93, 64, 41,165, 26,141, 70, 87,157, 95,190, 74,165, 90, 59, 99,198,140,210, -243,231,207, 83,103,103,103, 91, 58, 79,173, 86,175,154, 57,115,102,105,116,116,116, 77,122, 83,139,139,139, 75,154,213,106,165, - 7, 14, 28,160,238,238,238, 53,121,112,118,118, 78,179, 90,173,116,223,190,125, 13,230,173,145, 50,229, 41,149,202,149, 19, 38, - 76, 40, 73, 78, 78,166,174,174,174,186, 90,233,171, 38, 77,154, 84,146,154,154, 74,221,220,220,236,202,163,171,171,171,238,212, -169, 83,116,204,152, 49,197,181,203,212,213,213, 85,119,250,244,105, 91,250, 74, 91,122, 99,139,183,183,247,139,238,238,238,153, -238,238,238,153, 78, 78, 78, 75,189,188,188,178,245,122, 61,165,148,210,182,109,219,230, 80, 74,161,237,252,120,159,246,125, 39, - 46,113, 15, 27, 53,103,227,158,211,103, 79,196,228,233, 59, 15,126,105,165,166,243,104,141, 3,101, 16, 32,149, 74,127,233,223, -191,127,121,114,114, 50, 45, 45, 45,165, 81, 81, 81,244,183,223,126,163,215,174, 93,163,213,215,221,253, 53,210,101,125,168, 47, -221, 20,180, 59,246,109,191,184, 19,203,135,153,105,242, 49,186,115,178,214,124,124,142, 79, 2,221, 16,252, 95,186, 41,164, 85, -179, 52, 55,132,236,188,252,166,223,245,117,239,188, 98, 78, 73, 73,161,243, 38, 13,179,252, 60,203, 39,145,110, 12,222,211, 44, -205, 63,206,209,184,199, 31,127,188, 52, 53, 53,149,134,134,134,150,241,249,252, 41,255,150, 17, 73, 61,188,225, 19, 30, 40,206, -184,188, 99, 30,247,104,152, 60,175,155, 23,250,222,129, 81, 78, 97,238,238,238,185,219,182,109,163, 42,149, 42, 7, 64,224, 93, - 50,250,138, 4, 3,163,190,234,220,121, 31,247,228,147,214,175, 58,119,222, 23, 12,140, 66, 85, 56, 33, 2, 96,225,138, 21, 43, -162,205,102,115,244,214,173, 91,163, 71,141, 26, 21, 13, 96, 94, 11,191,243,227, 15, 63,252,144,154,205,102,186,117,235, 86, 58, -106,212, 40, 10,224, 19,123,247, 87, 42,149,237, 59,117,234,180, 61, 52, 52, 52,181, 75,151, 46,198,144,144,144,138,192,192,192, -228,176,176,176,109, 18,137, 36,128,141,170,251,123,150, 38,188, 72,143,133, 11, 23, 46, 2, 64, 23, 46, 92,184,136, 82, 26, 81, -125, 95,143,168,253,190,238, 43,165, 52,188,246,231,250, 52,108, 75,125,154,245,125, 71,157,247,117, 71, 29,122, 85,127,158, 86, -179,206,118, 80, 7, 15, 30, 28,112,240,224,193,227,117, 15,238,169, 54,232, 51,171,143, 79,121,185, 62,139,198,124,240, 42,253, -223, 32, 95,250,251, 64, 79, 26, 63,247,113,154,181, 99, 45,125,185,171,179,225,201, 54, 24,228,168,209,218,187,119, 47,221,183, -111, 31,253,241,199, 31,105, 76, 76, 12,205,203,203,163, 59,118,236,176,186,186,186,150, 75, 36,146,229, 0,100,246,232,169,213, -106, 29,165,148, 86, 86, 86,210,165, 75,151, 86,168, 84,170, 11, 0, 60,170,141, 18, 45, 44, 44,164,203,151, 47,175,208,104, 52, -151, 1,120,187,185,185,165,221,186,117,139,122,120,120,212,107,102,156,157,157,117,215,175, 95,167,206,206,206, 58, 0, 62,206, -206,206, 49,251,247,239, 55, 81, 74,105,122,122, 58,117,113,113,209, 1,240,112,117,117,189,120,240,224, 65, 19,165,148,102,102, -102, 82, 23, 23, 23,187,141, 86,121,121, 57,253,249,231,159,111,203,131, 45,253,208,161, 67,183, 25, 48, 59,202,211, 67,163,209, - 68,127,243,205, 55, 70,171,213, 74, 99, 98, 98,168, 70,163,209, 1,240,112,114,114,186,176,103,207, 30,163,213,106,165,113,113, -113,118,155,193,214,173, 91,231, 80, 74,169,197, 98,161, 27, 55,110,172,180,149,169, 45,221,104, 52,210,207, 62,251,172, 82,173, - 86, 71, 3,240,104, 76,203,205,205, 45,211,104, 52,210,194,194, 66,218,179,103,207,210,223,127,255,157, 22, 23, 23, 83, 74, 41, -173,214, 67,208,128, 41,239,157,189, 81, 90,252,252,252,245,223, 6,244,120,246,131,195,231, 50,210,191,248, 33, 42,218, 45,108, -244, 48, 59,142, 95, 38, 18,137,150,123,121,121, 85, 28, 59,118,204,106, 52, 26,233,205,155, 55,233,169, 83,167,232,153, 51,103, -104, 84, 84, 20,141,137,137,185,255,140,214, 30,240,233,166,160,209,116, 83, 80,244,182, 9,110,185, 37, 23,118, 81,122,100, 54, - 77,124,175, 13,125,123,152,170,132,219, 20, 20, 77, 55, 5, 63, 73,255, 51, 64,224,144,230,230,144, 71,233,166,160,232, 15,159, -242,207,187, 24,125,158, 30, 63,126,156,126,182,118, 5,157, 21,238, 83,198,109, 10,138,166, 27, 66,198, 56,164, 89,107,145, 72, - 36, 55, 78,158, 60, 73, 79,156, 56, 65,223,121,231, 29, 42,151,203, 83, 91, 94, 14, 33, 34,186, 33,208,159,126, 30, 56,128,110, -233,224, 69,127,109, 94,222,254,106,147, 53, 56, 80,156,158,123,241, 7, 74,243,111,210,236, 85,161,116, 88,144,176, 69,102,171, -218,100,233,147,147,147,105,118,118, 54, 93,179,102, 13, 85,171,213,119,181,217, 10, 2, 70, 3, 88,180,114,229,202, 26,147,181, -126,253,250,232, 43, 87,174, 68,251,249,249,253,216,130,239,250,100,229,202,149, 53, 38,107,253,250,245,244,202,149, 43,212,223, -223, 63,173,169,125, 39, 76,152, 32,239,211,167, 79,244,248,241,227, 13,219,182,109,163,201,201,201,244,242,229,203,116,229,202, -149,116,201,146, 37,244,203, 47,191,164, 99,198,140, 41,235,217,179,231,217, 39,159,124, 82,234, 96,222, 4,148, 82,113,245, 34, -164,148,218,140,166, 0,128,208,246,231,159, 45,183, 27,173,134,188, 72, 67,102,170, 33,131, 85,119, 93, 35, 70,172, 81,195,214, -212,247,213, 53, 85,245, 45,181,171, 86,127,141,136,136,248, 83,223, 24, 1,197,187,211, 94,123, 79,154,180,109, 13,116,223,124, - 10,126,161, 14,194,146, 60, 84,158,140,132,249,228,126, 76,236,221, 91, 38, 35,228,125, 71,235, 0,165, 82, 41,100, 50, 25, 36, - 18, 9, 10, 11, 11,145,152,152,136, 62,125,250,240,162,162,162,164,211,166, 77,155, 45,147,201, 82, 9, 33,143,217, 81, 93, 12, - 0, 56,117,234, 20,166, 78,157, 42,217,190,125,123, 23,173, 86,123,201,106,181,138, 1, 32, 46, 46, 14, 79, 63,253,180,100,215, -174, 93, 29,189,189,189, 47,152, 76, 38,185, 68, 34, 1,159,207,111, 80, 79, 44, 22,195,108, 54, 75, 58,116,232,112,249,210,165, - 75, 97, 35, 71,142, 20,166,164,164,224,214,173, 91, 48,155,205,226,192,192,192, 43, 23, 46, 92,232, 18, 17, 17, 33, 76, 75, 75, - 67, 74, 74, 10,236,237,243, 73, 8,129,209,104,132, 68, 34, 1,143,199,187, 45,189,178,178, 18, 98,177,216,110, 45,161, 80,248, -112,112,112,240,149, 75,151, 46,117, 27, 61,122,180,232,252,249,243, 72, 79, 79,135,213,106, 21,135,132,132, 92,185,116,233, 82, -215, 81,163, 70,137, 46, 95,190, 12,157, 78,119,219,247, 53,209,143, 6, 0,112,233,210, 37,140, 31, 63, 94,252,211, 79, 63,117, -245,242,242,186,108,177, 88,196, 0,112,229,202, 21, 60,253,244,211,226,195,135, 15,119,107,213,170,213,229, 38,154, 18,249, 0, - 96, 54,155,241,226,139, 47, 42,212,106, 53,210,210,210,192,113, 28,172, 86, 43, 0, 32,175, 32,239,202,165, 43, 49,113, 19,199, - 61, 53,160,220, 84, 89,121,250, 92,212,181,182,173,253,125, 9,161,173,155, 40,203,199,228,114,121,234,135, 31,126, 56, 39, 41, - 41, 73, 18, 20, 20,196,187,124,249, 50, 10, 11, 11, 33, 22,139, 33,149, 74, 33,145, 72, 32, 20, 10,239,191, 74,244,226, 80, 87, -112, 24,156,162, 55, 74, 36, 78,190, 42,165, 87, 32,144,122, 2,109,180, 18,240,121,124,233,249, 91, 6, 5, 64, 7,195, 47,215, -213, 49, 77,110,240,173, 28,163,196,236,210, 81,233,237,235,135,188,188, 60,180,106, 27,140, 10,177, 86,124,234,102,153, 18,196, - 65,205, 63,206, 85,191, 14, 29, 58,120,182,111,223, 30,185,185,185,232,214,173, 27,156,157,157,157, 9, 33,131,155, 93, 6,219, - 90, 75, 80,140,190, 0,111, 21,172,228, 29,152, 5,203,112, 83,223, 13,155,187,223, 53, 39,188,167, 15,241, 81, 43,197,103,118, -237,254,198,199,213, 47, 4,136,124, 30, 30, 78, 18,108,121,169,155,139, 86, 35,217,215,156,102, 68, 66, 72,152,135,135,199,177, -179,103,207,186, 73,165, 82, 92,184,112, 1,161,161,161, 88,179,102,141,214,217,217,249,196,221,208,140, 72, 41,165,113,192,129, - 15, 47, 95,222,186, 61, 33,225,224,132,118,237, 70,142, 15, 12, 92, 58,253,153,103,166,188,242,202, 43, 88,177, 98, 5,246,237, -219,135,190,125,251, 98,218,180,105,230,212,212,212,175,154,217, 92,248,233,170, 85,171,102,205,158, 61,187,174,166, 41, 37, 37, -229,195,198,246, 13, 11, 11,243,189,113,227, 70,198,220,185,115,187,109,223,190, 93, 38,151,203, 81, 88, 88,136,207, 63,255, 28, -139, 22, 45, 2, 33, 4,148, 82,124,249,229,151,242,201,147, 39,247, 72, 72, 72,200,104,221,186,181, 61,221, 58, 8, 0, 41, 0, -121,245,162, 0, 32,223,181,107,151,102,244,232,209,234,234, 52, 25, 0, 25, 33, 68, 2, 70, 93,234,245, 34,181,206,249,193, 58, -215,218,200,186,105,117,215, 81, 74, 71, 54,166,225,224,181, 93,223,247, 69,214,141, 12,127,219, 51,181,214,251,129,145,145,145, -199,255, 36, 10,116,246, 12, 8, 66,209,145, 61,144, 9, 8,100,252,234, 69, 64,192, 75,188,130, 86, 82, 33,204,148,134, 53,199, -104,217,204,150, 76, 38,131, 72, 36, 66,105,105, 41,204,102, 51,222,120,227, 13,201,145, 35, 71, 92,121, 60,222,127,155,210,169, -109,152,226,227,227, 17, 18, 18, 66, 14, 28, 56,224, 49,115,230, 76, 25, 0,136,197, 98, 20, 21, 21,161,125,251,246,228,208,161, - 67,238,111,190,249,166,178, 49, 51, 67, 8,129, 72, 36,194,236,217,179,101,231,206,157,115,241,246,246, 70, 98, 98, 34,242,243, -243,161, 84, 42, 49,123,246,108,217,217,179,103,181,222,222,222, 72, 78, 78, 70, 81, 81, 17,148, 74,165,195, 70, 75, 36, 18,221, -182, 15, 33, 4, 38,147, 9, 98,177,216,110, 67,164,209,104,118, 70, 71, 71,107, 53, 26, 13, 46, 95,190, 12,139,197, 2,141, 70, -131, 89,179,102,201,162,163,163,181, 78, 78, 78,136,139,139,179,213,252, 57,148, 71, 0,224, 56, 14,113,113,113,104,221,186, 53, - 78,156, 56,225, 62,125,250,116,169, 45,253,230,205,155,240,245,245,197,137, 19, 39,220, 21, 10,197,206,134,180, 56,142, 67, 86, - 86, 22,174, 94,189,138,196,196, 68,232,245,122,228,230,230,162,164,164, 4, 22,139,165,170,159, 93, 73,113,228,174,111, 15, 92, -146,201,100,242,208,192, 14,126, 87, 98, 98,115,100, 50,153,220,223,207, 47,144,144,119,120,141,228,243,191, 9, 9, 9,174,147, - 39, 79, 22,221,184,113, 3,153,153,153, 16, 10,133, 53,215,150,109,145, 72,238,179,123, 25, 33, 4,196,216, 1,132,116, 59,147, - 88,230,210,111,228, 56, 17,110,253, 4,112,102,128, 39,192,192,206,190,130,125, 87,202, 60, 64,209, 25,149, 8, 6,236, 56,241, -132, 16,192,212, 30, 32, 15,252,124,195,226,218,247,241,151, 68, 25, 25, 25, 16,137, 68,144, 72, 36,232,246,240, 19,130, 93,151, -204,158, 32,232, 2, 19,130,236,210,172,133, 76, 38,123,107,201,146, 37,138,218,154, 83,166, 76, 81,104, 52,154, 37,205, 54, 89, -101,242,222,176,208,217, 87, 51, 12,173,151, 70,102,135, 36,228,148, 7,129,210,185,128,185,107, 75,205, 22, 33,100,160, 84, 42, -189, 69, 8,121,168, 69, 38, 75, 37, 62,189,123,247, 55, 62, 46,173,170, 76, 22, 44, 21,128, 80, 6, 79,173, 19,182,204, 25,228, -162,117,146, 57,100,182,170, 77,214, 47,103,206,156,113,147, 74,165,136,142,142,134, 72, 36,130, 84, 42, 69,167, 78,157,176,105, -211, 38,173,139,139,203, 93,101,182,150, 95,190,188,109,217,213,171,241, 11,195,194,130, 31, 83, 40, 92,102,140, 31,175,121,243, -205, 55, 15,238,223,191,127,107, 68, 68, 68,238,185,115,231, 62,162,148,238,113,240,252, 16, 66,200,250,213,171, 87,207,176, 25, -183, 55,223,124,243,203,253,251,247, 47,139,136,136,200, 58,119,238,220, 92, 74,233,250,198, 52, 74, 75, 75,247, 47, 94,188, 88, -243,248,227,143,219, 62,227,228,201,147,248,234,171,175,160, 80, 40,110,219,118,212,168, 81,152, 58,117,170,179,209,104,108,244, -153,228,225,225,241,200,153, 51,103, 66, 1,136, 0, 72,108, 70, 43, 38, 38,198,169,184,184,216, 73,169, 84, 58,121,121,121,169, -108,102,235,241,199, 31,119, 18, 10,133, 15,129,129,166,188, 72,109,163, 99, 79, 90,115,183,183,215,108,213,249,156,213,208, 60, -135,183, 25,173,136,136,136,227, 0,250,215,183,145, 41, 95, 7, 9,172,144,241, 9,228,252, 90,102, 11, 28, 4, 69, 57,104,206, - 0,222,186, 15, 67,153, 76, 6,169, 84, 10,161, 80, 8,179,217,140,162,162, 34,135, 76,129, 90,173,134, 82,169, 68,121,121, 57, - 44, 22, 11,164, 82,169,205,140, 64,173, 86, 67, 40, 20,214, 60,132,235,214, 38,213,173,205, 17,137, 68, 80, 40, 20,200,202,202, - 66, 74, 74, 10, 56,142,131, 82,169,132, 66,161,128, 88, 44, 70,102,102, 38, 50, 51, 51, 65, 41,133, 66,161,128, 66,161,176,219, - 28, 1,128,213,106,133, 88,252,231,126,192,102,179,217,161, 26, 45,139,197,130,107,215,174, 33, 53, 53, 21, 82,169,180,230, 88, - 37, 18, 9,110,222,188,137,236,236,108,200,229,114,168,213,106,104, 52, 26,187,117,109,199,162, 82,169, 32,147,201, 80, 80, 80, - 0,131,193, 80, 83,166,106,181, 26, 10,133, 2, 69, 69, 69,200,201,201,105,244,216,173, 86, 43, 50, 51, 51,161,215,235,145,150, -150,134,220,220,220, 26,179,197,113, 45,143,127,121,226,196, 9, 36, 38, 38,218,154,166,106,206,111,237, 87, 91,190,239, 27, 62, - 11,211,192, 44, 28,146, 91,106,150,232, 77, 34,141, 71, 88, 56,112,235, 16,192, 19, 0, 82,103,244,234,216, 6, 41, 5, 86,197, -117,157, 81, 10,130,161, 88, 31,232,108,151,166, 85, 56, 88, 95, 98,150, 36,155,180,234,144,206,221,161,211,233, 32,145, 72, 32, -145, 72,240, 64,223,112,220,202,179,202, 99, 51,202,229,160, 24, 98,151,230, 31,191,209,182, 74,165,178,247, 67, 15, 61, 68,106, -107,142, 24, 49, 2,132,144, 78,132,144, 96,135,142,127, 93, 59, 49, 76,242, 94, 16,208,217,177, 89, 6,239,125, 49, 21,129,143, - 62,246,132,203,199, 71,115, 66,174,101, 87, 6,128,154, 95, 3, 53,117,111,174,217, 34,132, 12, 80,169, 84, 7,215,173, 91, 23, - 32,149, 74, 15, 17, 66,250, 53, 71, 71, 41,227,111,124,107,198, 56, 31,103,155,201, 50, 27, 0,129, 12, 16,202, 0,129, 12,158, -238,110,120,127,234, 96, 23,185, 84,184,215, 1,195,186,107,253,250,245,218,186, 38,203,182,116,235,214, 13,111,191,253,182,214, -197,197,101,231, 63,252, 95, 96,136,147,147,211,246,240,240,240, 51,153, 42,213,212,172,238,221,197,191,104, 52, 69,143, 20, 21, -105,252, 99, 98, 76, 65,192, 21, 0,159,165,165,165, 13,179,215,100, 17, 66,158,209,104, 52,209,225,225,225, 38,149, 74,149,186, -102,205,154,151,103,206,156,137, 21, 43, 86, 96,241,226,197,159, 3,120,129, 82,250, 70, 90, 90,154,119, 83, 38, 11, 0,178,179, -179,159, 93,176, 96, 65,110,110,110, 46, 0,160, 83,167, 78, 40, 44, 44,196,188,121,243,240,234,171, 85,131, 98,187,118,237, 10, - 74, 41,116, 58, 29, 86,173, 90,165,203,206,206,126,174,137,123,123,218,158, 61,123,122,152, 76, 38,223,234,230, 65, 73, 97, 97, -161, 58, 63, 63, 95,101, 50,153, 20, 28,199, 41,156,156,156,148, 0,228, 19, 39, 78, 20,196,198,198,134, 88, 44,150, 12,230,173, -254,160, 49, 47,210, 76, 34, 91, 82,115, 85, 95,141, 88, 3,215,103,227, 53, 90, 17, 17, 17,164,246,235,109, 53, 70, 4,151, 83, -163, 78,192, 37,172,251,109,181, 89,114, 62,129, 76,173,193,173,180, 20,136, 64,174, 58,122, 16, 54, 99, 85,215,108, 21, 21, 21, -225,165,151, 94, 42, 31, 59,118,108, 30,199,113, 79,216,107, 10, 52, 26, 13, 52, 26, 13, 98, 99, 99,233,152, 49, 99,116,107,214, -172, 41,175,109,180,226,227,227,233,144, 33, 67,114,150, 44, 89, 82,218,152,209,178,213,104, 45, 95,190,188,124,224,192,129,250, -171, 87,175, 82,155,153, 82, 42,149, 88,181,106, 85,249,160, 65,131,116,231,207,159,167,182, 52, 71,106,180,120, 60, 94,141,209, -170,189, 15,143,199, 3,199,113, 14, 25,173,178,178,178,103, 35, 34, 34,116,113,113,113,212,118,156, 26,141, 6,107,214,172, 41, - 31, 60,120,176,238,234,213,171,212,150,166, 86,171,237, 54,131,182,239, 87,169, 84, 80,171,213,136,141,141,165, 67,134, 12,209, -125,242,201, 39, 21,181,211,175, 93,187, 70, 71,141, 26,165, 43, 41, 41,121,182,177, 26,173,196,196,196,154, 26,172,138,138, 10, -228,230,230, 34, 45, 45,173,166,233,176, 92,161, 30, 54,110,236,163, 93,202,203,203, 13,177,241, 55, 82, 59,117, 12,117, 47, 47, - 47, 55,164,164,166,198, 83,186,132,107,228,135,240,196,243,207, 63,159,183,104,209,162,242,226,226,226,122, 77,150,237,245,190, -130,199,121,130,208,135,126,187, 81,234, 52,248,209,167,197, 36,251, 28, 96, 42, 5, 36,206,128,196, 25, 2,133, 43,134,247,235, -202,223,118,166,216, 19,148,235, 3,145,196,183, 73, 77, 33,245, 0,184,126, 71,226, 43,156, 31,122,114,150, 56, 63, 63, 31,124, - 62,191,198, 20,201, 21, 10, 60,242,216, 68,222,151,231, 42, 61, 1,218, 23,132,239,107,111,118,197, 98,241,252,183,222,122, 75, - 84, 80, 80, 0, 30,143,247,135,166, 92,142,233,211,167, 75,212,106,245, 98,187,143,253,187, 80, 17,132,146, 94, 0,125,245,122, -118,133,247,254, 43,229, 65,175, 45,223, 34, 11,235,218, 3, 47, 14,116,151, 45,143,204, 9,187,148, 86,222, 6,176,206,129,197, -248,128,163,102,139, 16,210, 79,165, 82, 69, 70, 69, 69,201, 71,140, 24,129, 85,171, 86, 41,100, 50,217, 33, 66,136,195, 55,254, -178, 82,235,204,119, 63,249, 90,119,249,163,161,128,169,172,202, 96,213, 90,114, 74, 57,188,189,229, 88,145,217, 76,199,217,171, - 89, 94, 94, 62,233,133, 23, 94,200,219,187,119,239,159, 76,150, 84, 42, 69, 82, 82, 18,150, 46, 93,154,159,159,159,255,220, 63, -105,178,102,206,156,185, 52, 61, 61, 61,232,200,145, 35, 2,189, 94,239,190,250,139, 47,138,190, 43, 42,202, 95, 22, 19,115,253, -141,142, 29, 59, 44,236,220,249,185,134, 66, 63, 52,100,178,102,204,152,177, 43, 61, 61,189,219,209,163, 71,133,122,189,222,119, -198,140, 25, 88,185,114, 37, 22, 47, 94,188, 9,192,139,180,186,179,140,189, 24,141,198,235, 5, 5, 5, 35,135, 14, 29, 90, 88, - 80, 80,128,206,157, 59,227,209, 71, 31,133,167,167, 39,188,189,189, 49,122,244,104, 4, 6, 6, 34, 47, 47, 15,227,198,141,203, -215,235,245, 67, 41,165,137,141,105,230,229,229, 37,236,220,185, 51,126,214,172, 89,221,210,211,211, 67, 0,184,150,148,148, 40, - 74, 74, 74, 36, 70,163, 81,230,236,236,236,220,181,107, 87,183,105,211,166, 41, 47, 94,188, 24,146,158,158, 94, 10, 32,133,217, -171, 26,147,213,160, 23, 1,160,175, 54, 60,198, 58,175,250, 38,214,217,187,111,189,239,237,216,238, 54,179, 85,123,249, 83,141, - 86, 67,152,128,183,191,218,179,173, 66,236,215, 30,154,160, 46,144, 75,165,144,137,197,144, 57,187,162,146,227,240, 69, 82,182, -161,140,210,197,142, 22,104,237,102, 67,169, 84, 10, 62,159,143,207, 62,251,204,210,187,119,239,138, 99,199,142,173, 51, 24, 12, -126,148,210, 31, 28, 49, 5,159,124,242,137, 97,246,236,217,151,114,114,114,186, 72,165, 82,163, 45,125,221,186,117,134,137, 19, - 39,198,164,167,167,119,147,203,229,134,134,250,103,213, 54, 90, 18,137,164, 50, 39, 39,167,199,148, 41, 83,226, 62,251,236,179, - 50,185, 92, 14,133, 66, 1,137, 68, 98,204,201,201,233,242,242,203, 47, 95, 90,185,114,165, 65, 38,147, 65,161, 80, 56,212, 44, - 71, 41,253,147,161,170,157,110, 47,102,179,249, 88, 78, 78, 78,151,217,179,103, 95,252,248,227,143,203,108, 6,168,118, 30, 87, -175, 94,109, 80, 42,149, 14,213,104,217,182, 83, 40, 20, 88,187,118,173, 97,214,172, 89,151,114,114,114,186, 72, 36, 18, 99,173, -244,178,153, 51,103, 94,204,201,201,233, 98, 54,155,143, 53,242, 15,207, 90, 92, 92, 12,129, 64,128,152,152,152, 74,145, 72, 4, - 30,143,135,155, 55,111,214, 24, 45, 23, 23,151,208, 46,157, 58, 6,127,189,107,207,113,153, 72, 34,233,221,227,129,144,196,228, -148,116, 74, 73,114, 19,255, 56,126,168,168,168,240, 59,121,242,228,186,161, 67,135, 86,124,254,249,231, 22,129, 64,240,167,135, -207,253,103,180, 32, 7,129,236, 70, 78,165, 74,202,179, 16,196,255, 80,101,178,164, 78,128,212, 25,144, 58,195,199,199, 23,231, -146, 12, 42,240, 32,134,213,142, 24, 98,148, 42, 64, 32,143,209, 65, 37, 20,203, 72,118,118,118,141, 33,178, 45, 1,237, 67,112, - 33,165, 84, 9, 66, 37,224,195,145, 16, 36, 35, 93, 93, 93, 5, 89, 89, 89,127,210, 12, 13, 13,229,155,205,102,251, 67,187,100, - 90,189, 0,110, 70,124,118,133,215,247,151,202,130,230, 44,251, 82, 38,179, 22, 2, 81,159, 32,172,173, 55,230, 60,217, 85,252, -230,126,125,216,249,100, 67, 91,240,233,139,224, 74,181, 14, 24,132,135, 84, 42,213,161,243,231,207,203, 85, 42, 21, 18, 19, 19, -209,163, 71, 15,108,222,188, 89, 46,151,203,127, 36,132, 12,116,228, 52,157,201,166, 41,165, 37,214,222,243,247,164,102, 95,206, -178,220,102,178,244,101, 20, 47,124,184,191,176,160,184,226,137,211,169, 13,255,126,234,185,230, 47, 22, 22, 22, 14, 89,188,120, -113,158, 94,175,191,237, 26, 79, 73, 73,177, 25,130,129,148,210,171,255,212,229,169,209,104,198, 47, 91,182, 12,231,207,159,199, -136, 17, 35,112,226,196, 9,228,231,231, 99,247,161, 67, 55,118,222,184,241,134,173,207, 86,125,161, 31, 26, 66,173, 86,191,182, -108,217, 50, 68, 69, 69,213,104,230,229,229, 97,217,178,101,233, 0, 94,114,212,100,217,208,233,116,231,174, 95,191, 62,180,115, -231,206,215,214,173, 91,151,238,229,229,197, 77,155, 54, 13, 47,188,240, 2,180, 90,173,117,237,218,181,169,253,250,245,139, 73, - 72, 72, 8, 47, 43, 43,187, 98,199,249,161,185,185,185,167, 54,111,222,124,230,225,135, 31,150, 79,154, 52, 73,187,111,223, 62, - 87,131,193,224, 45,145, 72,220,141, 70,163,248,218,181,107,252,239,190,251,206, 51, 54, 54, 54,169,188,188,252, 92,115,243,254, - 47,228,124,117,237,212,209, 58,175,231,155, 88,103,239,190, 13,189,111,106,187,218,231,127,115,237,165,246,138, 38,151,241,109, -241,159,233, 29, 85,134, 83, 19,122,209,236,105, 15, 81,221,211, 33,244,228, 0, 23, 58,165, 29, 41,155,212,204,240, 14, 25, 25, - 25, 84,167,211,209,188,188, 60,250,205, 55,223, 80, 79, 79,207, 50,149, 74,229,112,120, 7, 79, 79, 79, 93,113,113, 49,125,240, -193, 7,243,181, 90,109, 77, 40, 2, 47, 47, 47, 93, 89, 89, 25,237,213,171, 87,190,187,187,123, 77,120, 7, 95, 95,223, 52, 74, - 41,245,247,247,207,108, 72,207, 98,177, 80, 79, 79, 79, 91,136, 4,161,139,139,203,134,158, 61,123,230,235,116, 58,234,229,229, - 85, 19, 58, 65,171,213,174,234,209,163,199,109,233,118,228, 55, 45, 61, 61,157,166,167,167,211, 86,173, 90,101,214, 78, 79, 73, - 73,161, 41, 41, 41,212,215,215,215,225,240, 14, 90,173,118,101,221,188, 52, 55,143,126,126,126,186,242,242,114,218,167, 79,159, -219,202,212,207,207, 79, 87, 81, 81, 97, 75,183, 43,188,131, 76, 38,123, 81, 42,149,102, 74,165,210, 76,137, 68,178,180,117,235, -214, 57,223,126,251, 45, 93,187,118, 45, 85,169, 84, 85,225, 29, 66, 71,245,110,223,231,185, 55,180,161,163, 95,107, 73,120, 7, -149, 74,245,139,167,167,103,217,119,223,125, 71, 43, 43, 43,169,217,108,166, 54,112, 63,141, 58,220, 28,216,158,110, 8,222,159, -240,110, 64,236,236,254,242,138, 43,239,119,161,244,191,143, 83,250,227, 11,148, 30,155, 79,207,109,154, 70,251, 4, 72,172,191, -207,107, 21, 79, 55, 6,125,111, 87, 72,134,205,157,218,211, 13,193, 63,222,120, 39, 32,118, 82, 63,239,138, 47, 62, 91, 75,207, -158, 61, 75, 99, 98, 98,104, 98, 98, 34,253,241,135,111,105,159,182,242, 42,205, 13,193,251, 29, 9,243, 0,160,175, 68, 34, 41, - 93,179,102, 13, 61,115,230, 76,141,230,254,253,251,169, 92, 46, 55, 0,118,142, 90, 6, 8,221, 16,250,152,229,179,160,223,222, - 28,172, 44,201, 59, 56,159,210, 43,219, 40,221, 28, 70,233,214,158,148,126, 27, 65,233,129,231,232,153,181, 79,210,190, 1, 34, - 51,221, 24,116,130,110, 10, 29,108,111, 62,133, 66, 97,241,222,189,123,105,102,102, 38, 61,113,226, 4,141,138,138,162,113,113, -113, 52, 53, 53,149, 70, 70, 70, 82,161, 80, 88, 1,192,225, 81,141, 61, 61,224, 31,222, 65,148,117,105,121, 95, 74,247,141,163, -250,157,227,233,200,142,170,252, 94,173, 4, 15,183, 96,164, 93, 87, 87, 87,215,220,200,200, 72,154,148,148, 68,143, 31, 63, 78, -221,221,221,115, 1,132,253,211,215,103,120,120,248, 89, 74,105,244,136, 17, 35,162, 1,252, 20, 30, 30, 30,125,235,214,173,232, - 30, 61,122,156, 65, 35,161, 31, 26,211,124,228,145, 71, 76,148, 82, 58, 98,196, 8, 10, 32, 51, 60, 60,156,222,186,117,139,246, -232,209,195,120,135, 70, 73,242, 1, 60, 39, 20, 10,191,112,113,113,249,159,179,179,243, 49, 62,159,191, 25,192, 4,123,238,115, -141,104,122, 3, 8, 5,240, 64,245, 18, 82,157,198, 70, 28,254,155, 38,156,182,119,195, 39, 3,208,119,114, 91,114,252,217, 54, - 40, 25,215, 6,165,207,183, 35, 39,159, 8,192,195,142,206,238,109, 51, 90,249,249,249,244,226,197,139,116,192,128, 1,101, 10, -133, 34, 3,192,208,230,204, 24,238,230,230, 22,229,238,238,158, 38, 16,220,126,211,170,149,254, 72,237,116,119,119,247, 83, 94, - 94, 94, 58,173, 86,123,161, 62, 77, 55, 55,183, 40, 47, 47, 47,157,155,155, 91, 84,237,253,248,124,254, 8, 55, 55,183,140,186, -233, 2,129,224, 97,119,119,247,180,186,233,104, 96,102,115, 79, 79,207,180,204,204, 76,170,215,235,169,159,159, 95,102, 93, 3, -150,157,157,125,155, 1,115,100,182,244,134,242,210, 80,122, 67,154,118,148,169,195,231,189,214,186, 64, 31, 31,159,156,213,171, - 87, 83,165, 82,153, 83,123, 93, 80,255,231,223, 58,123,163,180,248,133, 5, 27,190,213,134, 60,214,169, 57, 51,197, 3, 24,170, - 80, 40, 50, 6, 13, 26, 84,118,243,230,205, 70,141, 22,238,145, 25,237,255,164,185, 39, 68, 68, 55,133,244,165, 27, 67, 34,227, -150,248, 95,123,174,167,162, 50,122,245, 8, 74,143,205,167,103, 54,188, 64,123, 7,136,171, 12,209,166,224, 67,244,203,192,254, -244,147,182, 98,187, 52,191,104,215,143,110, 10, 62, 20,251,182,255,181,199,187,107,141,187,182,109,162, 55,111,222,164,251,191, -219, 73,123,181,169, 54, 89, 27, 67,126,166, 27, 66, 6,217,165, 89,143,217,218,178,101, 11,189,121,243, 38,253,254,251,239,237, - 50, 89,183,105,214, 50, 90,139,194,149,133, 47,244,148, 86,142,235, 42, 54,142, 14, 19,153,134,180, 23, 89,250,248, 11,172, 93, -188,120, 92,136, 22,116, 72,144,172,146,110, 12, 58, 65, 55,134, 12,181, 55,159, 98,177, 56, 21,181, 98,234,212, 93, 36, 18,137, -190, 33,163,213,212,121,239,233, 1,255,240, 64, 73,214, 47,239, 62, 76, 31,237,172,202,179,199,100, 53,165, 9,160,171,155,155, - 91,238,214,173, 91,169,135,135,135,222, 30,147,245,119, 92,159, 26,141,102,123,105,105,105,244,225,195,135,163,195,195,195,163, -183,111,223, 30,125,242,228,201,104,185, 92,190,189,161,208, 15, 33,117,238,255,117, 53,213,106,117,116, 73, 73, 9, 61,124,248, - 48, 13, 15, 15,167,219,183,111,167, 39, 79,158,164,114,185, 60,250,174,250,109, 50,205,127,175,153,170,138,161,117,219,226,176, -209,186, 83, 39, 2, 0, 45, 44, 44,164,115,230,204, 49, 74,165, 82,131, 72, 36, 90, 4, 64,244,111,185, 8,221,220,220, 78,121, -120,120,232, 60, 60, 60,110, 51,123,181,211,221,220,220, 46,220,207, 63, 64, 0,129, 34,145, 40, 69, 40, 20,198,215, 78,215,134, -142,234,221,174,239,164,197, 30, 97,163,134,183, 36,159, 0, 68, 34,145,104,145, 84, 42, 53,204,155, 55,207, 88, 90, 90,122,127, - 25, 45, 74, 65, 63,105, 43,182,153,173, 43,139,253,227, 30,237, 40, 55,109,158, 59,132,246,110, 86,124,231, 23, 0, 0, 32, 0, - 73, 68, 65, 84, 93,199,100,109,245,151, 56,164, 89,109,182, 46,190,233, 23, 55, 40, 80,105, 89,182,120, 14,237,213, 70,118,187, -201,114, 68,179,142,217,146,203,229, 37, 75,150, 44,177,187, 38,235, 79,154, 95, 4,249,209, 77,193,219,171, 76, 84, 19,203,134, -160,207,233,167, 65,126,119,203,121,239,233, 1,255, 71, 2, 37, 87,237,173,201,178, 71, 19, 64, 87,103,103,231,107,246,214,100, -253, 29,199, 14, 96,200,244,233,211,163,111,221,186, 21,157,152,152, 24,125,242,228,201,232,199, 30,123, 44, 26,192,144,250,226, -108,153,198,140,169,236,202,227,205,105, 66,243,153,233,211,167,211, 91,183,110,209,196,196, 68,122,242,228, 73,250,216, 99,143, - 81, 0,207, 48, 3,195,140,214,221,190, 8,254,238, 70, 86,169, 84,154,227,228,228,164, 85, 42,149,145, 21, 21, 21,179, 40,165, - 89,255,166, 70,102,189, 94,223,199,145,244,251, 17, 74,105, 60, 0,255,186,233, 57, 87,247,157, 6,112,250, 14,232,155, 0, 44, - 35,132,124,181,105,211,166,117,171, 86,173,122, 76, 42,149,234,239,171, 66,156,149, 96,196,186,118, 81, 16,139,151,119,244,145, - 47,124,107, 4, 37,203, 14,159,242, 95, 49,198, 61,181, 79, 59, 69, 18,132,220,135, 32,149,231,240, 92,114,165,131,154,231, 32, - 51, 47,239,210, 74,190,240,131,209, 32, 31, 30,218,230,191,242, 49,215,212, 62,109,149,169,160,248, 16, 18,195,105,135, 52,111, - 63, 47,191, 19, 66,134,175, 94,189,250, 43,131,193, 48,149, 82,250, 63,135, 69, 84,188,108,148,153,151,192,204,239, 8, 10,113, - 35, 95,102, 0,143, 31,131, 28,220, 53,147,137,159,201,166, 41, 0,194,238,240,111,233, 98,117,115,212,221,244,251,254,153, 16, -130,157, 59,119,142, 15, 14, 14,110, 27, 27, 27,155,104, 48, 24,118, 80, 74,127,174,221,151,137, 16,114,224,195,203,151,203, 62, -141,141,253,221,200,113,191, 55,161,185,187, 90,243,181,224,224,224,176,216,216,216,171, 6,131, 97, 53,165,116, 55,235,186,196, -184,219,249,219,141, 86,121,121,185, 7, 43,118,198,223,116,195,207, 2, 48,230,190, 61,192, 90,102,171,187,159,108,214,222,233, - 50, 3, 40, 73,135,144, 91,235,176,201,170,199,108,245,240,151,189,250,253,139, 50, 3, 40,178, 65,241, 81, 75, 76, 86,109,179, - 5,160, 77,179, 5,158,140, 53, 1, 72, 2, 33,201,248, 15, 26,238, 68,253, 31,212,252,237,102,252, 51,102, 11,192,207, 77,108, - 67, 1, 28,171, 94,236,209,220, 13,128, 25, 43, 6, 51, 90, 12, 6,227,111, 54, 91,223,133,158, 71, 46,127, 30,120,104, 3, 88, - 82, 80,102,201,198,172,100, 99, 11, 53,207, 34,151,204, 6, 31,129, 16, 91, 18, 80,106,204,198,244, 22,104,254, 5, 79,114, 84, -245,157,170,159, 37,236,210, 96, 48, 24,127, 31,132,144,105,181, 71, 26,214,254,204,140, 22,131,113,175, 83, 85,203,147, 94,189, -220,189,154, 12, 6,131,241, 47, 51, 92, 64,213,156, 76,225, 13,252, 97, 60,234,128,112,120, 51,254,144, 30,101,154, 76,147,105, - 50, 77,166,201, 52,153,230,191, 75,179, 41,109, 71,252,199,221,100,176,234, 57,142,205,182, 55,127,235,168, 67,166,201, 52,153, - 38,211,100,154, 76,147,105, 50,205,127,203,194, 3,131,193, 96, 48, 24, 12, 6,163, 37, 53, 90,221,170, 95,189,170,167,224,241, -178,173,251, 71,251,104,201,221, 2,189, 32,224,117, 38, 28, 13, 6, 0,202, 35,113,176,112,151, 13,185,241, 45, 14,249,160,242, - 9,114,161, 16,239, 33, 48, 62, 85,146,113, 61,191,165,122,157,130, 52, 99, 60,220, 84,227,179,243,138,190,138,137, 43,217,231, -200,190, 78, 78,173, 53, 82, 23,231, 39, 43, 77,230,142, 98,145, 40,213, 84, 88,188, 57, 63, 63,161,132, 93,154, 12, 6,131,193, - 96,220, 23,116, 3,112, 1, 64, 4,165,116,115,117, 83, 98,227,157,225, 91,135,245, 59, 47,149,202, 2, 0,128,163, 20, 28, 5, -202,138, 11,163,179, 18,206, 15, 5, 0,109, 64,247,195, 66,169,186, 59, 71,171,214, 91, 57,192, 98,170, 72, 42, 74, 62,243,160, - 61, 57, 82,186, 7, 61, 30, 62, 36,124,204,200,145, 17, 65,157, 58,118,106, 7, 0, 87, 98,174, 36, 28, 60, 24,121, 93,233, 30, -180,183, 52,231,250,247, 45, 57, 98, 10,233,123, 15, 60,208,245,161,168,168, 11,239, 2,152,209,210, 18,116,117, 85,206,250,249, -191,243,250, 63, 50,102,149, 2,128, 67, 70, 75,234,226,252,228,232, 71,135,117,125,253,149,233,188, 23,230,125, 16,112,254,247, - 95, 87,168,188, 59, 22, 82,206,252,115,153,238,233,223, 26,155, 56,153,193, 96, 48, 24, 12,198, 93, 79,100,181,185,138,172,187, -162, 65,163, 37,149,202, 2,206,252,122,208,229,251,147,105, 0,128,240,110,158,120,227,253,117, 67, 8, 33,215, 1, 96,212, 11, -255, 9,124,119,209, 43, 56,117, 53, 7,148, 82,116,109,239,138,225,163,159,178, 43, 55, 50,207,208, 7,159, 30, 59,246,217,121, -243, 94, 27,117,243,230,205,228, 93,187,118,253, 6, 0,253,250,247,111,255,193, 7, 31,140, 93,229,236, 34,145,121,134,102,148, -103,199,158,111,206,209,202,124,218,249,132,118,232, 60,254,155, 47,215,241, 6, 14,125, 98,156,204,167,221,178,242,140,132, 12, -123,246,213,106,181,179,133, 66,161, 6, 0, 56,238, 15,255,211,182, 21,223, 19, 0, 44, 86, 78,229,226, 19, 92,194, 23, 73,173, - 18,137, 40,182,164,180,244,171,162,244,216, 47, 26,211,172, 52,155,195, 94,125,105, 50,239, 98, 98, 30, 2,194,250,241,215, 46, -123, 19,156,213,236, 60,103,209,251, 79, 70,157,253, 6,192,146,227,236, 26,101, 48, 24, 12, 6,227,222,164, 58,110,227,230, 90, -159, 55, 55,105,180, 0, 64, 41, 19,224,250,173,108, 0,128,147, 12,152,245,226, 36,228,229,234, 3,141, 22, 14,207, 79,154,128, - 11,113, 89,184,158,164, 7,165, 20,129,190,114,187, 51,196, 7,247,192,243, 83,158, 31,112,248,231,159,207,189,181,248,173,175, - 9,169,138, 6,190,105,243,231,189,223, 94,242,246,212, 9,147, 38, 12,254,238,187,239,174,162,206,204,216,246, 34, 32,170,117, - 43,151, 47, 21,167,231, 86, 84,204,158,183,144,123,109,238,236,181, 0,158,176,103, 95,161, 80,168, 73, 79, 79, 87,242,120,183, -119, 95,251,112,233,194, 19,131,199,172,186,145,156, 90,120,241,240,254,253, 15,134,134,134, 34, 61, 35,187,239,138,143, 55,118, -241,106,247,224,228,146,226,242, 49,101,250,216,122,163, 80, 75,132,194,171,239,172,216,208,149,115,106,207,123, 99,234, 8,132, -181,243, 70, 70, 78, 33,250, 15, 29, 37,136, 62,127,126, 8, 0,102,180, 24, 12, 6,131,193,184, 71,105,108,212, 33, 15, 0, 34, - 35, 35,235, 13,252,103,181, 82, 92, 79,202,194,245,164, 44,156,139,211,195, 68,133, 88,187,226, 29,172, 94,182, 4,249,229, 60, -124,127, 42, 13,241, 73,217,136, 79,202, 70,110, 65,105,125, 14,239,182, 33,154,171,151,203,187,173, 93,171, 89, 57,164,191, 98, -160,139,179,179,243,141,171, 95,151,189, 61, 87, 23,242,206,171,105, 34,161, 81,146,174, 80, 42,250,236,217,243,109,168,135,214, - 93,161, 84,170,230, 43,124,187,110,113,114,234,162,105, 76,179, 46,114,143,144, 81,163, 34,134, 61,236,233,233,193, 77, 95, 27, - 29,215, 49, 36,216,220,161,125,135,190,114,143,192, 81,141, 56,209, 26, 77,142,227,192,227,241,160,211,233,144,153,153,137, 91, -183,110, 33, 62, 62, 30,105,105,201, 58,142, 82,161, 21, 28,207,203,203, 23, 2,129, 24, 1,173,253,177, 97,237, 50,249,251,255, -121,163,135, 84, 33,222, 71, 8, 33,245,105, 86,228, 23,124,247,227, 79, 63,103, 28,218,181,193, 10, 0, 57, 5,165, 56,118,254, - 38, 46,196,166, 57,234,152,239,248,144, 87,166,201, 52,153, 38,211,100,154, 76,243,110,208,108,200,139,220, 11, 80, 74, 55,215, - 93,108,235, 26, 29,117,152,144,150,143,235,183,178,209, 61,216, 7,237, 90,123,225, 92,124, 1,118, 28, 75,195,150,195, 41, 56, -118, 73, 15, 78,160, 66,118, 49,112, 35, 89,135, 27, 41,185,141,197,105, 6, 0,240, 37,194,167, 95,125,181,104, 94,167,208,226, - 94,191, 30,154, 5, 31,237,141,208, 5, 11, 10,103,241, 37,194,167,157, 91,169,118, 45,156, 55,103,188, 74, 46, 23, 27, 43,141, -104,219,198, 95,250,202,204, 89,147,137,179,100,151,189, 7,170,246, 13,117,150,200,100, 95,188,255,159,249,146,143,190,191,145, - 90,102, 68,217,222,211,186,196,215, 22,190,157, 47, 16, 74, 55,168,125, 67,157,237,213, 50,155,205,168,172,172,132,209,104,132, -201,100, 66, 70,218,181, 81,191,124,255,250,208, 54,173, 92,134, 74,164, 82, 80, 0,197,229, 22,220,202, 50, 96,208, 35,131,249, -221,187,117, 11, 83,122,133, 76,169, 79,171,176, 48,185,136,163,124,213,193, 31,118,242,191, 61,114, 17, 95, 31, 60,143,125,255, -187,136,115,199, 15, 89, 40,103,174,153,166, 66,229,221, 33, 80,229,221, 57, 69,229,211, 69, 87,179,248,118,138, 98,255, 21, 24, - 12, 6,131,193,184,123,169, 30,105, 56,173,238,136, 67,160,145,166,195,138,138,242,164, 39,158,158, 0, 47,119, 79,229,232,129, -207,137,162, 19, 10,161,207, 74,193,205,248, 24, 24, 42,204, 16, 57,183, 1,164,158,104, 29,224,143,203,215,247,153, 62, 89, 25, - 89,202, 89, 42,147, 26,210, 27, 61,218,219,215, 75,171,224,173, 92,225,119, 38,254,122, 65,247,157,139,183,226,217,103,149,110, - 43, 87,248,157, 73, 78, 84,240,228, 82,218,103,242,164,113,132, 71, 40, 22, 44,152,135,209, 35,135,225,249,201, 19,201, 87, 95, -109,235,101,239,129,114, 16,126,186,232,205,119,196,186, 66,139,241, 92,124,105,165, 92, 33,147,253,126,163,180, 44, 44,192, 79, - 54, 98,204,115,153,145,123,190,248, 8,192, 36,123,180,108, 6,203,108, 54,195,100, 50, 1,128, 21, 0,120,188,170,215,188, 18, - 35,114, 10, 43,161, 43,172,132,197,202, 97,204,211,147,100,231,163, 46, 77, 2,208, 64,127, 45,142, 51, 91,204,216,123,228, 2, - 50,206,127,199, 17, 30,191,200,214, 25,222,102,178, 60, 61,253, 78,140, 28, 51, 81, 43,150, 86, 53,195,150,148, 85,226,171,141, - 43,216, 21,204, 96, 48, 24, 12,198, 93, 76,221,233,119, 8, 33,104,114, 10,158,228,171,191, 61, 8, 0, 65, 15, 14,205, 83, 74, - 5, 46, 2, 30,129, 46, 61, 1, 95,173,154, 13,142,163, 24, 49,117, 37, 84, 1,158,144,137,248,168, 44,205, 43,205,187,249,171, -107,227,110,207, 60,120,253,166,140,128,151, 95,106,171,222,185,179, 84, 8, 0, 59,119,150, 10, 95,154,222, 74,253,217,166,164, -128,158, 15,117, 7,181, 90, 49,114,244, 19,120,250,153,167,145,156,109,192,127, 79,164,162,172,220,104,215,252,106,114,109, 72, - 23,119,111,159, 97,175, 62, 55, 76, 33,224, 19,210,193, 95,195, 79,211,155, 45,124,190,208,122,224,124, 81,230,152, 49,207,184, - 29,251,241,219,135,229,218,144, 46, 6,253,181, 75, 77,233, 85, 86, 86,194,106,181,162,178,178, 18,102,179, 25, 46,110,109,126, - 28,252,196,170,244,172,236,146,200,236,130,138,158,101,102, 11,116,133,149,200, 41,172, 68, 97,153, 9,158, 42,103, 88,204,198, - 78,141,156,132,175, 31,123, 98,194, 68, 0, 60,194,179,108, 45,201,188, 22,111, 91,103, 51, 89,195, 70, 63,171, 61, 17,157,128, -155, 81,135, 10, 40,103, 49, 87, 21, 28,199,166, 64, 97, 48, 24, 12, 6,227, 46,167, 86, 63,173,200,234,206,241,184,205,104,217, -218, 70, 35, 34, 34, 72,221,157, 51,116,249,112, 85, 10,160,245, 14,192,248,217,171,241,245, 71,115, 97,181,154, 65, 41, 96,177, -218, 23,153,128, 82,225,145, 25, 47, 5, 4,183, 14,224,107,199, 63, 43, 47,223,177,211, 32, 27,255,172,188,188, 99, 39,215,162, - 25, 47, 5, 36,149, 84,248,245,181, 88,173,248,253,106, 14, 98,146,138, 16,147, 92, 12,165,204,254, 48, 95,124,177,232,165, 21, -203,151,137, 4,124, 66,174,166,148,150,166,231, 89, 74,249, 66,161, 73, 46, 19, 83, 35, 21, 84, 38,231,210,188, 71, 30,155, 92, -126, 96,251,199, 83, 0,204,108, 72,199, 54,210,208, 86,147,101,123,165,148, 82, 2,112, 28,177, 90,211,115, 43, 80,106, 50, 67, - 87,240,135,209, 34,150,134, 91, 78, 85,222, 29, 2, 53,106,151,159,248,124,190,132, 82,192,108,178,140, 85,121,119, 24, 90,146, -121, 35,190,182,201, 58,115, 53, 19, 9, 23,143,234,172, 38,195,132, 50, 93,220, 47,236,178,101, 48, 24, 12,198,191,137,198,188, -200,221,142,173, 6,171,222, 26,173,198, 14,136, 82,224, 70, 74, 46, 90,251,106,225,219,186, 29,226,175, 93,254, 99, 29, 0,139, -213,190,190,107,251,246,101,166,175, 89,163,225,230,206, 45,234,189, 98,133,223,233,151,166,183,210,116,236,228, 90, 52,127,126, -106,239, 53,107, 52,167,143,156, 17, 90,105,117,188, 46, 91,108,174,234, 48,255,118,194,235,209, 37,180, 13,255,157,157, 55, 82, -127,185, 82,146, 35, 18,137,204,158,206, 82,162, 82,138,249,124,158, 80, 92,105,230, 85, 6,134,117,227, 31,224, 85, 69,111,109, -202,104,213,109, 58,204,211, 39,140,250,249,191,243, 58, 14,124,108,165, 75,134,190, 28, 69, 70,126, 77,211, 33,159, 71,112,229, - 90, 10,192, 23,197,212,167,169, 86,185, 28,222,181,227,107,191, 53, 43,150,194,100,177, 98,198,220,183, 48,121,210,132,195, 42, -239, 14, 67,253, 2,130,162,127, 59,176, 85, 62,116,250, 6,164, 92,143,202,182, 84, 22,239,102, 38,139,193, 96, 48, 24,255, 54, -238, 69,115,101,163,206,168,195,250,107,180, 26,195,223,215, 3,103, 99,146,208, 41,184, 13, 52,106, 21,226, 18,210,193,231, 9, -193, 35,128,217, 98,191, 25,162, 38,243, 55,107,214,104,144,146,164,224,125,182, 33, 41, 96,198, 75, 1, 73,107,214,104, 78, 83, -147,249, 27, 0, 19, 40,173,154,123,209, 22, 32,213,234, 64, 24, 79,202,153, 91,121,184,200,249, 81,137,101,121, 60, 30,191,210, - 85, 35,229, 92, 53, 18,158,171, 74, 44, 20, 9,249,156,133,242, 76,190,238, 1, 21,148,227,186,216,163, 87,187,233,208,106,181, -130, 16,158,181,218,136, 41,210,242,202, 81, 84,193,135,174,176, 18, 5, 37, 38,116,240, 81,224,232,177,239, 12, 86,115,249,206, -250,180,248, 66,145,166, 93,128, 47,222,120,111, 13,202, 43,173,184,145, 81, 10,145, 68,226,233,225, 25,118,105,194,203, 11, 37, -175,108, 78,192,148,135, 93, 49,247,183,132, 12,131, 78,186,144,253,220, 24, 12, 6,131,193,184,119,168,221, 71,171, 46,118, 25, - 45,165, 92, 10,202,151,226,183,232, 4, 4,133,118,198,182,253,231,208,190, 83, 47,100,149, 88, 64,193,107,114,180,161,141,215, - 22, 26, 46, 0,184, 48,122,180,183,239,227,143,251, 12,166, 84,120,228,179,141, 69,233, 0,176, 97,247, 0, 80, 0, 28, 71, 65, - 41, 64,185, 42,195,101,191,157, 20,164, 36,101, 21,183, 14,240, 84, 32, 54,221, 84,169,144,136,120,206, 10, 49, 95,171, 17,139, - 68, 2, 1,172,148, 84,102,101, 37, 84, 18, 32,217, 30,185,186, 77,135,114,165,215,143,143, 60,182, 82,159,156, 90, 20,213, 33, -223,208,165,200, 36, 6,165, 64, 7, 31, 5, 98,206, 68, 90,117, 25, 55,111,148,235,174,111,172, 79,139,227,192, 55, 89, 56, 92, - 74, 44, 66, 97,153, 25,133,165, 38,244, 29,244,168,168,111,248, 40,252, 22,147, 11,206, 98,198,138,207, 35, 75,172,212,252, 52, -165,177,102,118,201, 50, 24, 12, 6,131,113,239, 80, 61,210, 48, 2, 85,145,225, 35,106,155, 47,187, 38,149,182,114, 20,110,174, - 46,144, 42,212, 72,210,153, 80, 66,220, 81, 96,160,176, 90,171,106,180,184,134,191, 56,188,190,244,125,251, 50,211,127,248, 65, -191,101,223,190,204, 90, 29,189,255,168,201,170,121,229,168,221,154,132, 90,143,238, 63,244,107,209,168,158, 90,103, 30,159, 95, - 46, 18,242, 42, 5, 34,190, 73, 36,224,153, 69, 2,158,209, 67, 45,228,255,122, 96,183,152, 18,252,218,148,102, 69, 69, 5,194, -195,195, 49, 98,196, 8,140, 30, 61, 26, 79, 61,245, 20, 2, 3, 67,220,121,124, 98,164,132,227,180,226, 18,180,211, 18, 8, 42, -210,240,203,238, 15, 13, 49,191,255,112,201, 90, 89,241, 40,173,213,214,121,155, 38,165, 92,126, 81, 37, 42, 76, 86, 20,148,154, - 80, 80,102,130, 69,219, 27, 63,156,202, 68,185,209,138,148,232,239,202,245,217,233,179, 43,116, 55,146,154, 56,145,225,127,193, -197,193, 52,153, 38,211,100,154, 76,147,105,254,227,154,247, 56, 17,213,198, 42,162,110, 28, 45, 59,106,180, 40,218,122, 41,208, -222, 71,129, 10,147, 59, 42,140, 86,148, 85, 88, 81,108, 48,161,216, 96, 70, 82,182, 1, 49,251, 91,158,195,170, 90, 44,128, 84, -191, 7,169, 50,120,246,214,105,137, 77,198,247, 86,175,248, 96,236,238,110, 93,141,175, 68,120,181,186,156,100,204, 36,132, 87, -206,227, 11,204, 46, 42,129, 48, 46,238,178,254,244,137, 31,251, 75, 45,214,137,141,233, 88, 44,150, 34, 31, 31, 31, 0,183, 79, -193, 19,210, 78, 54,250,247,200, 5,109, 6,140, 90,161,253,104,233, 60, 3,143, 47,226,136, 64, 20, 99, 53,151,239, 42,215, 93, -223, 64, 27,233, 80,198, 19, 73,175,157,189, 24,219,203,201,165, 21,110,102,148,161,172,194, 2,147,133,131,179, 82,132,244, 43, -135, 77, 73,113, 81,223,150,100, 92,218,198,174, 83, 6,131,193, 96, 48,238, 77,108,253,180,108,175, 77,134,119,168, 85,187,147, -244, 80,248,163,224, 56, 10, 43, 5, 56,107,117,205, 19,247, 71,237,147,213, 92,145,212,210, 12,114,156,245,220,167,155,183,140, -232,214, 99, 0, 63,212, 79,137,226,188,108,156,249,253,127, 22,112,244,180, 61,251,231,230,198,151,202, 61, 59, 60, 49,246,201, -199,247, 76,122,126,122, 97,255, 65,131, 20,238,238,158,149,233, 25,233,134, 47,183,239, 48, 31,254,113, 95,127, 14,150,103,114, -115,111,148, 54,166, 83, 88, 88,248,113,125,233,143, 60,212,170, 47,128, 54,124, 1, 49, 26,114,226, 21,142, 28, 91,110, 70,218, -152, 15,222,251, 79,242,179, 83,231,136,219,250,180, 67, 78, 17, 31, 73,233,217,136, 59,177,175, 50, 35,254,252,247,197,233, 23, -166,176, 75,148,193, 96, 48, 24,140,123,147, 22,245,209, 74,141,173,138,167,245, 87, 83,146,157, 51, 97,219,182,175,223,255,122, -251,238,190, 21, 70,163, 15,133, 40,205,106, 49, 30, 47,181,226,109,123, 53, 12,217, 55,162,220,220, 2, 59,126,249,249,167,111, -126,185,229,179, 1,224,172,193, 4, 72,166, 4,191, 74,205,214, 73, 77,153,172,198,141, 92,201,166,193, 79,172, 42,207,203, 43, -253,218,209,125, 13,185,113,217, 74,143,182,173, 54,173,125,111, 37,143,199, 31, 98,181,114, 66,206,106,190,105, 53, 85,124, 88, -174,191,190,159, 58, 54,188,146,193, 96, 48, 24, 12,198, 93, 4, 33,100, 90,221,160,165,118,215,104,253, 93,228,231, 39,148, 0, -120,165,165, 58,185,185,241,165, 0,238,248,200,189, 43,241, 69,255, 5,240,223,230,238, 95,170, 75,212,195,206,168,244, 12, 6, -131,193, 96, 48,238,125,195, 5,216,217, 25,158,193, 96, 48, 24, 12, 6,131,209,184,201,170,253, 90,147, 14,160,222,145, 3,142, -204,204,221,156,209, 7, 77,233, 51, 77,166,201, 52,153, 38,211,100,154, 76,243,254,211,108, 74,219, 17,255,113, 79, 24,176,191, -178,123, 16, 33, 36,252, 78, 23, 24,211,100,154, 76,147,105, 50, 77,166,201, 52,239, 63,205,123,218, 76,213,169,197,170, 54,140, -119, 87, 31, 45, 6,131,193, 96, 48,254, 46,220,220, 2,149, 64, 77,191,222, 38, 81,104, 67, 61, 0,160, 76, 31,171, 99,165,199, -104,200, 84,213,215, 71,171, 89, 70,139, 16, 34,228, 9,196,175, 74,101,202,231, 8, 15,234,210,194, 92,159,127,177,139, 37,129, -173, 21, 51, 91,181,210, 14, 74,207,208,125, 21,151,104,216,247, 79,104, 42, 61,218,106,137,216,249,123,194, 85,126, 80,156, 30, -115,232, 14, 31,163, 36, 52, 52,180, 43, 0,196,198,198, 94,164,148, 86,182, 84, 83,225, 17, 52,206, 89,237,244,162,137, 51, 90, - 13,101,134, 13,165,217,241,223,221,201, 60,171,188, 59,184, 66,160,218, 8,171,101, 16, 40,248,224, 11, 46,145,202,138, 23,138, -245,177,137,141,237,231, 55,122, 89,240,148,177, 17,139,183,124, 27,249,126,234,190, 69,113,117,215,187, 12, 95,167,154, 53,113, -200,130,245,187,247, 45,207,221, 63,191,148,221, 94, 28,199,239,161,103,157, 44, 2, 79,126,230,175,171,242, 28,217,207, 55,168, -247, 85,161, 80,168, 53,153, 76, 57, 25,241,103, 58,218,179, 79,171,224, 62, 23,248,124,158,183,213,194,165,167, 93, 63,245, 0, - 43,253,166,145,185,183,237, 13,139,229, 13, 10, 16, 16,193,234,138,188,196,255,181, 68,207,219,219, 91,166,209,104,250,171,213, -234, 86,114,185, 92, 90, 80, 80, 80, 94, 80, 80,144,154,146,146,114,140, 82,106,249, 39,142, 81,225, 17,180,136, 8,201,146,234, -247,239,148,233,174, 47,107,252,254, 26,252, 62,225,209, 69,213,239,151,149,234,226, 22,223, 13,231, 74,234, 25,228,207,167,120, -133,207, 19,244,177,112,230,165, 6, 93,252, 1, 71,246,119,113,113, 25, 34, 16, 8,100,182,207, 22,139,165, 60, 63, 63,255,103, -246, 43,104,214,115,114, 90,221,247,205,174,209, 34,132,240,133, 18,249,201,103,159,159,209,113,249,127, 22, 74,215,110,249, 1, - 82,165,115,108, 69,105, 65,232,221,120,240,218,182, 61,163,248, 60,190,111,237, 52, 43,103, 77,215, 39,158,189, 35, 55,221,160, -214,178, 41,111,206,159, 48,119,220,216,112,255,240,145,179, 9,128,122, 77,145,202,239,193, 83,132,240,218,240, 8,192,227, 17, -240, 8, 0,208,204,220,196,179,221,154,171,105, 67,227,222,174,141, 88,169, 61,241,208,232, 25,158,209, 71,119,108, 83,104, 67, - 7,151,233, 99, 47,223,129, 11, 71,219,174, 93,187, 7, 3, 3, 3, 93,103,205,154, 37, 2,128,143, 62,250,168,125,251,246,237, -243, 18, 18, 18,206, 83, 74,245,205,186,201,185, 7, 79,248,120,213,187, 95, 15, 31, 62, 2,153,185,101, 88,177,102,253, 64,165, -103,224, 83,119,202,108, 57, 59,183, 81, 11,212,206, 87,102,207,127,215,125,216,192, 7,249,165, 21, 22,252,116,226, 98,191, 29, -235,223, 61,167,214,134,246,104,204,108,113,134,162,197, 30, 74, 58,140, 51, 20, 1,192,184,186,235,125,148,230,112,173,204, 58, -204, 75, 34,184, 8, 96,111,147,121, 9,120,232,176, 80, 34,241,231,241,120,176,157,123, 62,169, 58,255,102, 83,121, 74,250,181, - 19, 67,239,134,223,137,218,191,103, 54,248, 2, 87, 30,249, 35,127,164,250, 58, 37,148, 22,103,197,255,230,122, 7,174, 39, 77, -199,246, 78, 97, 17,125, 31,250,242,248,173,124,133,223,128, 57,145,132,242, 62, 75, 57,177,250,146, 93, 15, 21,169,212,249,192, -129, 3,218, 97,195,134,105, 60, 58, 62,118,220,158,125,148, 98,105,232,193,131,251, 69,195,134, 13,117,224,250, 12, 26, 12, 30, -111, 59, 1,132, 28, 71, 63,226,115,244,219,210,188,248, 4, 71,195,176,200, 61,130,167,240, 64,237,190,207,112, 32, 81, 6, 93, -220,150,230,150,175, 80,170,121, 68, 40, 18,189,218, 38,176, 83,183,140,228,155, 81,101,165, 37,107,204, 21,133,199, 29, 22, 50, - 91, 94, 63,250, 91,244,112,129, 80, 72,134, 61,210,147, 15,160, 69, 70,203,195,195,227,177,117,235,214,181,237,221,187,183,237, - 97,174,222,179,103,143,231,123,239,189,167,176,231, 55,212,192,181,228,163,213,106,253,196, 98,177, 15, 0, 24,141,198, 12,189, - 94,159, 74, 41,205,104,242,154,240,108,231, 70, 32,120,247,183, 19, 39, 4, 0,208,175, 95,255,247,253,251,205,114,230,139,148, -229,245, 22,135,177, 68, 1, 96,206,153,179,167, 9, 0,244,234,217,123,161, 66, 27,250,233, 63, 89,179, 37,243, 8,238,201, 3, -230,246,237, 63,120,204,211,207, 76,224,133,117,240,195,144,193, 15, 47, 0,224,144,209, 18, 8, 4,178,115,231,206,181,227,241, -120,124,139,197, 82,209,171, 87,175,212,150,228,203, 39,168,207, 41, 2, 94, 43,147,197,248,185, 62, 49,234,125, 74, 41, 87,215, - 63,104, 90,117,123, 19,124,193, 84,142,227,210,138, 83,206,247,185,223,106,180,234, 45,103, 71,197,120, 2,241,171,227, 38,191, -220,113,206,107,111, 72,103,175, 61,134,200,245, 11,115,239, 86,147, 5, 0,124, 30,223,247,240,207,135,221,229, 98, 62, 0,160, -180,194,130,225,195,134, 53,185,159, 83, 64,207, 95,121,132, 4,217,166, 18,183, 90, 76, 82,129, 80, 92, 65, 0,128, 84,141, 34, -112,243,110,125,204,203,203, 69, 62,110,108,184,255,246,221, 71,210, 83,211,243, 26,188,169,241,120,124,223,125,251, 15,184,251, -184, 74, 33,224, 19,148,150, 91, 48,108,196,163,214,250,182,245,242,114,137, 24, 55, 54,220,127,231, 55, 71, 83,179,178,242, 35, - 27,189,153,123, 5,118, 87,104, 60,126, 26,243,226,123,174, 21, 60, 23,188,189,244, 99,183, 19,135,118, 30, 31, 16, 49,129, 75, - 73, 73,171,160,132,196, 22,228,103,189, 90,154,117,243,186,189, 70, 90,169, 84,182, 85, 42,149, 93,134, 15, 31, 46,157, 55,111, -158,112,224,192,129, 53,235,167, 77,155, 38,250,245,215, 95,189, 86,173, 90, 53,194,219,219,187,162,180,180,244, 82,105,105,105, - 34,165,212,106,239, 57,241,244,212,206,124,226,241, 71,241,240,152, 25,176,114, 4,211, 94,158,131,195,135,246, 78, 7,112, 71, -140,150, 89,174,126,111,234,139,243,180,189, 30,236,202,127,119,231,117,200,196, 2, 12,125, 32,136, 76,158,181,216,105,203, 39, -239,126, 1, 96, 64,125, 53, 89,156,161,104,113, 71, 55,227, 51,163,122,183,193,254, 93,198,103,124,195, 23,128, 39,215,212,212, -108,181, 27,254,138,202, 89, 38, 91,231,237,196,119,151, 88,245,235,218, 13,127,229,104,194,161, 79, 74, 26,125,248, 73, 36,254, -187,118,238,236,224,172, 18, 65,192, 35,224,243, 9, 4,124, 30, 42,140, 86, 60, 53,246,153, 59,245, 79,138, 47,115,239, 48,130, - 7, 76,174,122, 96, 99,107,121,206,141, 31, 29, 57, 39,132, 47,114, 61,184,255,123,129,187, 70, 2, 62,159,128,207, 3,248, 60, -130,100, 93, 57,166, 76,153,172,105,169, 97, 31,222,215,253,193, 95, 63, 29, 48,180, 87, 71,151,206,223,156, 38,154, 94,195,159, -118,205,173,144, 63,183,123,223,255,158,241,235, 63,247, 44,165,220,202,180,223,214, 54,250, 79,186,178,178, 82, 55,116,216,112, - 53, 17, 40,228, 71,127,216,214, 95,192, 35, 48, 91, 41, 44, 86, 10,107,245,220,168, 85,191, 87, 2, 30,143,128,114, 20, 83,167, - 78,193,208, 97,195, 13,156,133, 75,183,255, 38,199,219,254,211,209,223,181,149,102, 14,171,214,109,121,183,172, 72,255,238,173, - 56,215,100,185, 71,224, 28,131, 46,222,238,121, 48,120,160, 15,164, 37,198,188,184,243,224, 25,116, 12, 13,129,149,171,202,103, -144,175, 2, 59, 35,207, 32, 56, 40,184, 42,223, 28, 69, 96, 43, 37, 30,124,224, 65, 0,104,150,209, 18, 74,213,111, 15,136,152, -248,206,200,167,158,135,187, 86, 11, 30, 53,143, 60, 26,185,115,164, 80,166,121,221, 92, 94,180,202,177, 39,134,181,230,185, 64, - 57,174,197,221, 75,188,189,189,181, 15, 62,248, 71, 56, 70,139,197,130,128,128, 0,100,100,100, 4, 53,227, 90,146,123,121,121, - 69,108,218,180,201,125,196,136, 17, 66, 79, 79, 79, 0, 64,118,118,182,207, 79, 63,253,212,205,219,219, 59, 39, 43, 43, 43,146, - 82,106,104, 72,195,106,230,137,120, 2,240,165, 82,121,213, 49,130,240,230,205,156,216,217,195,203,187,222,154,122,189, 62, 91, - 60,127,198,255,136, 64, 32,170,222, 30, 60, 74, 57,210, 72, 45, 81,184, 80, 40,148,213,183,206,196, 87,247,162, 66,205, 11, 60, - 62,175,234, 98,181,152,245,249, 41,209, 33, 14,212,196,133, 9,197,162, 13,207, 78,122,177,207,147, 99, 70,195, 75,171,193,209, -147,151, 49,125,230, 92,179,197,100, 94,211,172,103, 36,159, 47,200,201,201, 73,118,118,118,246,108,249,243,150,180, 57,114,248, -144,251,209, 95,142, 45, 92,189,246,147,151,188, 3,251,153, 57, 74,107,230, 49,246,235,248,176,112,240,200,177,106,247,118,189, -164,159, 44,121, 65,120,191,213,104, 53,100,182, 28,254, 17,137,101,170,177,111,205,159, 37,125,111,199, 25, 68,174,159,158, 91, - 86,164,215,214,252, 83,208, 56, 95, 40, 45, 42,232,214,156, 76,170,220,131,122, 19,190,224, 69,194,231, 43, 8,143,136, 57, 43, -151,102, 49, 26,223, 55,228,198,103,181,180, 0, 56,142,226,191,167,114, 28, 43, 52,138,246,219,191,249,222,221,195, 73,130, 10, -147, 21, 79,143,155,128,175,191,254, 90,165,213,136, 81, 97,180, 96,229,234,213, 37,165,201,145,238,201,105, 5, 25,225,143,206, -253, 57, 49, 41, 39, 38, 53,171,226,219,134, 79, 2, 15,238, 26, 9,150,238,142,135, 90, 38,132,179, 74, 4, 30,143,212, 62, 73, - 53,205,133,153, 89, 5, 69,181, 52,119, 52,248,163,243,234, 52, 84,227,236,189,235,241, 23,151, 58,221,200, 17,128,194,132, 4, -181, 20, 99,159,123, 69,221,214, 83, 6,133,148,239,116, 43, 37,195,107,222,235,175,159,212,184,183,235, 81,148,147,112,171,169, -227,110,221,186,245,152,145, 35, 71,202, 95,123,237, 53, 97,171, 86,173,176,117,231, 30,255,126, 67,159,122, 52, 51, 75,215,138, - 82, 10, 15,119,247,180,169,147,159, 58,240,227,143, 63,166,164,165,165, 9, 87,172, 88,209,243,251,239,191, 15,117,228,159,169, -149, 82, 84, 84, 90, 97,173,126, 64,234,139, 42, 29,189,160,137,143,143,143, 36, 35, 35,163,210, 86,203, 64, 8,169, 41, 76,229, -255,217, 59,239,176,168,142,246,253,223,179, 13,182,193,210,155, 10,138,136, 32,138,189,247, 18, 53, 18,187,198,150,104,236,166, - 24,147, 24, 75, 52, 81, 99,141,177,151,152, 24, 99,140, 26,187,177, 97, 47,168,137,198, 2, 54, 84, 80,169,210,151,182,236,178, -125,247,204,239, 15,192, 16, 66, 89, 80,127,239,251,205, 59,159,235, 58, 23,123,150,221,123,207, 57,115,202, 61,207, 60, 51, 83, -171,121,159,158, 93,219, 10,126, 56,149, 0,141,222, 10,153, 88,136,132, 76, 45, 90, 53, 15, 37, 63, 90, 45,205,202,211,156,240, -118,216,124, 79, 57,237, 59,160,189, 63, 60,156,165,216,190,105, 41,142, 93,143,239,155,169, 33,112, 27,176,114,138,183,189,224, - 13,119,169,104, 99,183, 86, 1, 94, 61, 90,250,225, 86,171, 0,175, 43,145, 49,177,161,111,175,249, 40, 85, 35, 60,159,123,234, - 35,117,249, 55, 30, 30, 92, 28, 68,248,233, 76, 18,164, 98, 1,100, 98, 1,100,246, 69,127, 75,151,127,141,106,181, 62, 33,117, -248,156,117,130,163, 79,200,132,145,111, 15,247, 25, 61,114, 56, 5,159,135, 3,135,142, 15,220,189,123, 87,186,220, 43,104,155, -149,199,255, 73,151,246,240,121,149,199,148, 7,120, 40,236,240,249,182, 7,112,148, 8,225, 32, 21,194, 81, 42, 68,143,166,238, -224,243,106,124,227,113,158, 58,176,126,191,123, 59,123,117, 15,242,149, 7,222,125,166,122, 56, 97,201,237,117, 17,249,221,103, -108, 90, 27,226,170,201, 55, 10,190,154, 57, 73,144,146,150,214,253,192,241,203, 61,124,218, 76,136,177,152, 10,191,200,186,187, -191,220, 8,238,243,199,215, 90,212,110, 63, 92,108,210,152,239,223,141, 73, 9,200, 51,216, 35, 58,177, 0, 50,177, 0,242,146, - 99, 43, 22, 64, 38, 22, 66, 46, 22, 32, 45, 37, 1,185,133,252,223, 83, 93,121,221,105,196,181,106, 53, 81,233, 77, 86,220,137, -215,160,110, 80,115,120,123,251,192,216,111, 76,221, 27, 23, 15, 29,149,121, 55, 90, 94,152,254,232, 11, 91,117,126, 61,241, 39, -230,124, 50, 37,146, 0, 81,197, 15,233, 22, 95,173,216,220,242,235, 57, 31,252,237,189,153,139, 54,180,172,121, 36,203,113,126, -143,193,239, 47,234,252,198, 96,168,115, 51,113,237,236,126,244,121,107, 40,198,140,255, 24, 78, 78,110,223, 10,197,138,187,102, -189,234,226, 63,238,185,222,141, 58,133, 54,105,180,187,150,143, 79, 29,142, 43,154,229,131, 82,160, 83,215, 30,152, 53, 99, 18, - 56, 74,209,172, 69,155, 30,253, 70,126, 68,105,241,108, 32,217, 57,217,133, 49,143, 31,246,210,101, 62,190, 97,243,177,212,235, -205, 74,165, 18,119,238,220, 65,108,108, 44,162,163,163,145,147,147, 3,133, 66,161,169,230,249,228,216,180,105,211,209, 23, 47, - 94, 20, 59, 59, 59,191,120,223,104, 52,194,193,193, 1,163, 71,143, 22,246,238,221,187, 86, 88, 88,216, 88, 66,200,175,148,210, -130,242,116,116, 57, 79,210, 28,189,130,191,239,218,173,235, 52, 0,144, 56,122,199,111,252,249,120,116,165,215,154,194,199,175, - 67,135,142, 1,160, 20, 4,116,125, 97,118, 76, 70, 37, 81, 34,217,159,127,254, 89,159,207,231, 11,254,122, 6,113,248,110,251, -190,224,115, 87,239, 15, 89,241,237, 42,177,163,204, 30, 74,149, 17, 19,199, 12,182,249, 25, 44,245, 10,238,215,177, 99,215,163, - 95, 47,250, 82, 32,151,201,112,246, 70, 28, 62,154,241,185, 62, 61,241,193, 42,202, 9, 55, 23,102,197,100,189,228,163,242,149, -244,140, 11,172, 45,135,195,128, 62,226,169,239, 14, 16, 27,205, 86,228, 23,154, 97, 48, 89, 97,229, 40, 84,133,102, 60, 76, 86, -195,205,209,174, 38,210,173, 1,184, 3, 80, 2,184, 85,102, 29,197,175, 81,206,122,118, 81,120, 4,174, 0,140, 0, 74,255,120, -201,122, 69,239,151,124,255, 33,128, 70,197,154, 86, 0, 55, 1,228,149,103,182,202,139,114, 9,194,195,195,105, 88, 88,216,139, - 59,126,217,245,178,216,139,132, 62, 50,133, 59, 40,125,132, 82,207, 54,120,122,215,206,217,242,253,143, 46, 10,103,215, 36, 85, - 94,142, 95,241,143,156,183,229, 97, 33, 32,252, 53, 93,187,117,233, 61,237,253,247, 17, 84,191,182,200,106,181,210, 7,177,241, -230, 29, 63,109, 31,167,168, 19,186,174, 32,229,193,252,146, 16,100,117,123, 57, 88, 57,107, 74,217, 8,150,149,179,166,148, 57, - 24,231,255,121,192, 0, 39,185, 29,190, 63,149, 0, 74, 1, 2, 10,133, 76,136,189, 17, 41,136,143, 60, 92,240, 86,179,130,194, -209, 43, 22,246,232,222,111,250,197,135,207,244,251,179,178,244,103, 40,165, 25, 21,105,242, 8, 32,224, 19, 56, 74,133, 80, 72, - 69,112,146,137, 64, 74, 61,192, 74, 55, 23,118,235, 55,253,220,197, 63,146,190, 0,160, 44,157, 15, 85, 90, 83,226, 21,216,218, -209,169,246,254, 33,211, 86, 58,220, 79,177, 64,192, 7,252,189, 36,112,113, 16,193,104, 33, 72, 84,154,138,175, 28, 39,124, 52, -115,145,203,156, 79,167,157, 36, 36,164, 9,165, 15, 77,149,237,187, 86,171,181,123,231,157,119,132,102,179,217, 52,122,226,199, -189, 51, 50,148, 3,191, 91,255,141,189,135,135, 39,180,122, 11, 34,163,159, 54,250,250,235, 69,254,199, 79, 71, 28, 89,248,249, -212,163,125,251,246, 85,236,219,183,143,171,234,120,254,173,134,152,153,189,105,251,238,131, 59,215,174, 90,134,152,164, 60,252, -244,195,102, 80,171,229,251, 42,194,178,231, 75,189,166, 95,124,241,133,228,200,145, 35,181,101, 50, 89,129, 86,171, 85,254, 45, - 30,193, 35,130,204, 92, 45,220, 28,236, 32, 18,240,224,233, 44,134,135,194, 30, 66, 62,192, 35,196, 90,158,230, 79,251,195,151, -112, 90, 21,142,237, 49,142,220,190,105, 41,198,127, 56, 15, 15,178,237, 78,243,164,138, 37, 31,140, 28, 50,199, 93, 98,237,235, -227,196,243,232,209,178, 46,100, 98, 17,230, 78,127, 7,109, 34, 19, 61, 82,243,185,121, 74, 29,191, 57,128,121,229,150, 59,175, - 40,130,229, 32, 21,226,244,238,111,179, 10, 85, 74, 85, 73,147,156,209,160, 79,178, 49, 36,125,190,156,154,237,156,150,205,155, - 46,157, 54,121, 2,175, 99,251, 54,148,199, 19, 34, 91,109, 36,148, 2, 51, 62,154,138, 15,166, 78,242,122,158,150,245,213,230, -205,223,207,151,123, 52, 90,172,201,122,180,176, 50, 77, 30, 41,138, 2,201,197, 2,200, 37, 69,198, 69, 46, 22, 64,111,180,130, - 16,240,157,253, 90,170, 72, 81, 36, 55, 45, 39,177,252, 26,120, 89, 77, 23,223,198, 23,206,197, 59, 4,231,237,207,187,158,144, - 22,189, 36,242, 94,230, 77, 74,105,174,111,215, 79,199,154, 44, 20, 26,189, 5, 9,153, 90, 88, 76,148,140,127,211, 15,245,134, -145,160,101,219,163,118, 18, 66, 28, 75, 12,116, 89,205,148,235, 7,244,110,161, 67, 70,172,221,240,195,173, 85, 75,231,241,179, - 85, 70,112,148, 66,108,199,135,196, 78, 80,188,240,161, 43, 84, 97,243,150, 31, 51, 44, 32, 67,104, 68,132,165, 58,231, 39, 56, - 58,102,112,191, 46,123, 9, 96, 71,120,162, 20, 31,191,186,126, 61,251,143, 19,247, 28,240, 14,172, 22,227, 28,153,103,240,165, -194,204,199, 23,108,209,108, 18,210, 8, 4,136,210,100,198, 76, 5, 0,185,103,208,247,193, 65,193, 45,203,190,215,160, 65, 80, - 75, 91,202,189, 4,145,196,241, 67,103, 23,247,121, 65,141,155,123,212, 15,237, 74, 28, 92,107, 35,225,201, 29,236,217,242,213, - 46, 78,111, 92,116, 33,124,255,210,117, 63,253,246,118,207,190,131,177,253,187,111,230, 2,184,248,143,235,136,227,198,236,216, -182,181,142,208, 98,228, 74,123, 0, 0, 32, 0, 73, 68, 65, 84,206, 30,102, 11, 7,179,149, 22,253,181, 88,145,155,155, 7,179, -133,131, 88,234, 0, 11, 71, 96,182,114, 48, 91, 56, 24,140, 22,217,212,119,194,222, 7,112,163,188,237,172,221,168,219, 25,145, -189,189, 31, 69,209,220,181,148, 82,240, 45, 70,158,183,183,247,175, 0, 96,111,111, 15,123,123,123,112, 28,135,200, 24,229,135, -238,193,189,166,161,216,224, 89, 77,198,164,188,132,223,251, 84,180,239, 94, 94, 94,253,203,154, 44,189, 94, 15,141, 70,131,171, -215,111, 41,182,237, 60,216, 55, 33, 41,165, 62, 71, 21, 6, 7,143,250,125, 0,244,175,232,120, 22,100, 60,126,191, 78,251,201, -188,207, 62, 24,219, 96,195,142, 19, 55,159,156, 94, 60,183,178, 83,194,191,215, 28,227,103, 83,134,182, 90,177,254,167, 39,185, -191,111,249,164,170, 50, 18, 8, 4, 66,165, 82,249,226,250,222,248,227,158, 86, 81, 49,169,131,214,173, 93, 39,142,140, 83,227, -126, 66, 26,198,246,242,197,223, 30, 2,149,104,202,189, 2,220, 2, 2,130,127,221,188,126,133,224, 73,154, 30,155, 14,223,196, -197,163,223, 95,205,200,186,209,151,102,164,233,106,114, 15,121, 89,163, 85,153,230,165,123,217,208,232, 45, 48, 24, 45, 48,115, - 20, 5, 90, 51,178,242,141, 40,208,154,160,209, 89, 48,246, 13,223,114,191, 87,133, 31,113, 39,132,156,160,148,190,133,162, 97, -169,236, 74,173,131, 16,114,162,120,187,254,182, 62,103,206,156, 47,150, 47, 95, 30, 93,242,217,146,247, 75, 62, 91,217,251,165, -190,239, 58,119,238,220, 38, 43, 86,172, 88,214,190,125,251,189,215,174, 93,139, 47,207,104, 85, 26,209, 42,217,153,240,240,112, - 90, 69,141,162,190,212,209,213,222, 81, 34,132,127, 61, 95,188,247,197,118, 55, 71, 23,207, 44,177,157,128,127,234,212,105,151, - 28,163, 28, 60, 30,191,208,246, 40, 86,195, 14, 18,137, 52,124,245,234,213, 24,217,191,179, 36, 57,219,172,185,151,172,203, 44, - 52,194,226,225,222,208,110,201,178, 21,242, 21, 43,191,253,224,196, 49, 46, 31,192,183,229, 55,241,181,190,205, 39,165,114,176, - 8, 1,229,172, 41,185, 9, 55, 91, 1,192,203,228, 98,105,244,102,240,139,115,107, 8, 1,180,122, 11,248,124,146,149, 31,179, -255,225,232,197, 75,122,236,218,123, 46,141,242,156,212,133,133, 9, 82, 74,105, 74,229, 17, 3,130, 2,173, 25, 10,169, 16, 78, -114, 33, 20, 50, 17,248,165, 46,178,146,230,194, 93,123,206,166, 38, 37,229,220, 42, 54, 89, 21,106, 10,248,188,120,106, 53,235, - 41,181, 58,188,213,218, 29, 30, 78,118,240,118,182,135,189,157, 0,102, 11,160, 51,114,208, 27,173, 72,204,210, 65,173,147, 32, -180,235,112,127, 87,239,219, 6, 87,191,214, 71,114,146,110, 13,169,212,156, 90,173,216,241,235,193, 6,105,105,153, 3, 79, 30, -217,109,175, 44, 48,227, 94, 98, 33,178,242, 13, 0,223, 29, 11,150,109,178,159,253,201,228, 65, 59,246, 28, 74,234,217,185,109, - 82,117,143,107, 97,214,227, 93,161, 29,194,190,127,235,173, 65,146,232, 27, 39,241,228,206,133,165,154, 76,219,243,179, 8, 33, -188, 3, 7, 14, 88, 38, 79,158,172, 94,182,108, 89,157, 99,199,142,213, 83, 42,149,119, 0,152,157,156,156,130, 27, 54,240,187, -123,246,244,169, 90, 97,131,134, 11, 83,178,117, 80, 72, 69,240,243,144,226,250,213, 51,102, 59, 59, 97,185,249, 38,197,205,131, -163,106,247,154,141, 99,215,227,251, 70,231,136, 35, 38, 77, 24,155,116,246, 74, 76,206,198,157,103,191,169, 37, 55,223, 17,115, -202,141,183, 91, 5,120,205,249,232, 29, 44,223,176, 11,151, 35, 99,178, 10,121,222, 75,211, 13,150,115, 11, 71,204,170, 32,148, - 94,100,176, 29, 36, 66, 20, 22, 40, 85, 79, 35, 79, 53,124, 69,145,234,177,103,143,236,226,229,170,205,120,158,173, 39,105,185, -106, 88, 57, 10, 39,169, 8, 22,142, 34, 63, 55,155,236,222,181, 19,183,110, 93,231,129,207,155, 8, 96, 97,165,205, 92,164,168, -169, 80, 46, 22, 22, 69,132, 36, 69,127,205, 86, 14, 65, 13, 2,176,117,227, 26, 71, 55, 15, 79,116,234,210,221,246, 40,181,171, - 95,179,189, 63,111, 68,196,181,168,110,151,215,109,106, 45,247,113,223,224, 88, 59,100,149,162,222, 27,122,131,201, 10, 85,126, - 30,236,140,207,209,166,150, 18, 46, 82, 43, 18, 11,188,241, 32,227,137,188,170, 92,168,236,251,135,239,184, 55, 25, 60,255,224, -241,139,203,251,188,209, 13, 15, 18, 11, 32,177, 19, 64,108,199,135,216,142, 15, 33,177, 98,205,150,239,205,121, 42,245, 91,217, - 15,142,100,215,224,252, 60, 95, 92,251, 45,122,200,121,214,119,223,181, 97,254, 47,147,102,173,236,211,119,240, 56,242,224,214, -165, 47, 0, 92,176,173,162, 71,109,122,143,227,108,127,198, 73, 28,221,215,127, 58,255,219,233,189,223, 26, 14, 62, 95, 0,179, -217,140, 67,251,118,225,231, 77, 11, 30, 27, 53, 57,227, 40,165, 28, 33, 46,147,247,239,218, 50,124,214, 87,107, 72,147,102,109, -218,150,235, 39,249,228,135,119, 39, 76, 25,225,233,233,233,240, 87, 68,139,162, 97, 80, 8,250, 13, 24,138, 51, 71,127,195,195, -232,123,224,104,145, 97,226, 56,138,252,188,156, 12,139,217,184,163,194, 22, 15,177,216,111,251,207, 59, 3,121, 60, 2,147,153, -131,209,194,225,147,247,223, 51, 78,157,241, 69,167,126,189,187, 70,219,241, 81,144,152,156,238,116, 61,234, 81, 40, 39,148,215, -153, 48,115,141, 72,111,176, 66,165, 53,227,228, 79, 21,123, 29,137,139, 95,251,102, 29, 6, 77,152,250,229, 86,123,123, 62,207, -212,184, 97,157,248,174,237, 26, 63,247,245,113, 83,127,189, 98, 83,155,223,111, 68,245,123,123,244, 4,241,216,224,150,196,199, - 85,226,240,222,232,193, 77,101,174,190,239, 22,230, 36, 87, 56,101,154, 80,234,156,239, 91,175,129,246,175,136, 81,208, 97, 66, -225,255,183, 7, 39, 65,188, 54, 35,102, 8, 0,120,251,248,234,133,246,142,234,106, 24, 17, 10, 0, 27,126,220,211,234,110,108, -218,164,181,107,215, 73, 35,227,212,184, 19,167,130,189,136, 7,147,153, 3,177, 49,168,205, 81,254,148,121,115,231, 56,230, 21, - 90, 17,113, 79,137,232,219,151,168, 81,163, 31, 45,181, 56, 14,145,121, 6,189, 11, 32, 0,192, 51, 66,232, 15,133,153, 94, 71, - 41,141,168,118, 39, 3,142, 43,170, 47, 43, 60, 2,252,173, 2,251,126, 66, 59, 89,123, 66,104, 99, 66,225, 12,208,212,156,226, -103,170,173, 78,173, 48, 51, 22, 43,151,125,133,245,219,126, 67, 90,142, 30, 10,235,115, 28,253,105, 9, 62, 91,254, 43,116,134, -138,179, 26,170,242, 35,229, 25,163,178,134,171,228,117,201,231,150, 47, 95,254, 86,153,178,121,171,130, 50,251,199,231, 74,190, -191, 98,197,138,101,165,254,175,181,213,100,189, 48, 90, 37, 59, 85,197,206, 53,116,247,246,187,118,244,200, 97,231, 60,141, 9, - 98, 17, 31,190,245, 26, 96,225,198,163,238,111,182,114, 67,182, 73,129, 61, 91, 87,229,234,181,234,125, 54,221, 44, 60,131,219, - 58, 56, 56,156, 60,124,232, 55,212,247,245, 16,237,190,154,155, 16, 21,175,123, 17,234, 45, 80, 38,217,213,115,212, 10,134, 12, - 30, 44,189,112,241,210,140,138,140, 22,159,240,107,255,184,243,144,135,131, 68, 8, 66, 0,181,206,130, 73,239, 14,125,249,199, - 24,229,248, 19,198,141, 5, 41, 54, 89, 5, 57, 25,248, 98,246,251,122,153,249,201,195,228,196,228,212, 94,253, 63,187, 80,160, - 33,250, 17,239,188,127,235, 97,236,242,188,170,207, 98,115, 74,191,176,126,162,162,200, 1,192, 39, 4, 28,229, 50,131,234,201, - 63,250, 71,115, 97,134,225,199,170,140,155, 58, 53, 38,215,193, 59,116,216,174,213, 31,254,232,227,233,225, 42,151, 73,168, 92, -106, 79, 26, 7, 7,138,218,181,235, 96, 87, 47,168,169,232,234, 35, 29,146,149, 58,196,167,169, 96,239,217, 92, 48,178,199,155, -216,181,110,102, 55, 66, 8,175,108,146, 98, 89,206, 69,252,217,127,219,150,181,246,153,249, 38, 60, 78,214, 32, 35, 79,143,244, - 60, 3, 50,114,245,144, 75,132,232, 50, 96,178,125,248,209, 31,250,247,236,220,118, 67, 77, 14,111,124,124, 66,120, 98,106,250, -240,166, 45,218, 96,215, 47, 63,119,118,118,246,119,204,203,139, 47,176,181,116,150, 44, 89, 98,183, 98,197, 10,193,198,141, 27, - 11,218,181,107,231, 53,119,238,220, 62, 89, 89, 89, 55,235,214,173, 27,116,230,240,142,139,205,187, 12,108, 13,206,228,222,185, -107,119,145, 61, 39,192,217, 19, 39, 76,251,247,237,206,209,233,212, 83, 43, 53, 28, 82,197,146, 76, 13,129,123,173, 90,209,114, - 59,235, 27, 2, 94,126,108,238,169,143,118, 2, 56, 28,240,230,244,243,151,110,199,196,182,138, 76,244,184, 24,249, 52, 43, 87, -107,106,248,236,212,167,149,222,120,249,132, 64,200,231,193, 65, 34, 0,175,248,174,234, 80,171,217, 83, 16,226, 94, 18, 57, 37, - 32,197,127, 1, 66,144,150,155, 20,101, 67,206, 6,161, 28, 5, 98, 82, 10,161,209, 23,133,230,107,187, 73,161,204, 76,193,119, - 27,118, 32,234,246, 45,244,126,115, 0, 54,255,184, 27,147,222, 29,174,175, 74,141,199, 43,142,104,149,138,102,201, 37, 2, 0, - 4,249,133,102, 28,250,253, 57, 2,252,121, 54, 63, 24, 0,192, 65, 46,133, 74,173, 3, 79,228,128,103,145, 39,165,167, 46,221, -152, 59,127,241,218,207,243,210,239, 37, 63,189,127, 21, 65,110, 42,248,215, 50, 33, 58,195, 17,183,115,234, 33,168, 65,125,240, - 68,183,108,210,206,142, 14, 93,121,148,119,232,173, 86,205, 67,218,251,121, 56, 65,103,180, 22, 71,181,248,248,121,251, 78, 36, - 38,164, 76,200,142, 62, 18,245, 42, 28,173, 38, 51, 78, 41,246, 12,252,224,254,141, 11,241,131, 71,127, 0,239, 90,190,205,170, -147,182, 96,203,123, 86, 27,141,150,157,204,121,238,204,175, 86, 79,239, 29, 54, 12,127, 94,189,128, 59,209,207,208,182,109,107, -188, 57,104, 36,212, 5,185,193, 7,118,174,123, 3,192, 25,129,189,101,122,155, 14, 61, 8,103,181,226,201,227, 7,207,202,211, -210,166, 61,190, 3,192,241,111,205, 83,238,141,154,201, 21, 46,119, 12, 38, 43, 82, 83, 83,240,199,181,136, 22,197,159,179, 25, -123, 17, 31,103,163,178, 96, 50,115, 48, 89, 56,116,233,250,134, 81,196, 51,116, 94,186,118,123,187,244,180,116,158,204,209,141, -115,169,213, 72,228,109,111, 50,220,141, 83,137, 76,102, 14,245,125,100,149,106,186,251, 52, 88, 54,115,230, 39,141,248, 34, 9, -212,133, 6, 99,122, 90,170,215,214, 61,151, 52,143, 30,223,175, 85,219, 67,225,248,205,186, 31, 68, 5,122,130, 44,149, 1,185, -234, 2, 50,122,202, 44,159,109,155,150,143, 1, 96,243,220,180,132,194, 63,252,236,213, 96,103, 7, 17,209,232, 45, 92, 78,129, -201, 58,122, 80,247,151, 58,119,138, 77,214,228,181,107,214, 73,163,226,212,184, 27,167,130, 88,196,135,157,136, 7,163,153,131, - 45,151, 19, 33,132,231,223,164,235,212, 14,173, 66,113,230, 78, 54,248,124, 30,116,234, 60,173, 0, 57,177,173,186,245,150,182, -108,211, 14,221,187,117,197,211,216, 24,223, 19,199, 14,245,188,254,199,229, 12,185, 71,208,135,154,172,152,223,170,117,158,107, -181,124,179,157,215,123,222,181,234,118, 28, 50,242, 61,133,159,111, 45,226,225,230, 10, 11, 21, 96,242,187, 67,109,190,242,139, -140, 57,176, 98,241, 92, 24, 12, 70,184, 59,217,129, 82, 96,251,134,133, 48, 26,141,240,113,181,135,170,208, 92,225,247,171,242, - 35, 21, 69,161,170,217, 12,125,162, 60,179, 85,246,125, 66,200,137, 57,115,230,124, 1,128,206,153, 51,231,139,146,245,229,203, -151,235, 0,164, 85,214,116, 88,218,120, 9, 74,239, 92,133, 27,101,103, 23,228,230,237,119,253,236,153,211,138, 35,119, 57,252, -249,219,109,132,181,245,134, 72,192,131, 84,225,131,187, 9, 42,132, 31,222,146,127,116,239, 15,169, 6,131,225,219,170,219,154, - 3, 91, 57,200, 28,207,252,178,107, 31,231,230,234,202,251,238,172, 50, 46, 71,109,121,209,164, 21,123,227, 24,119,251,204, 86, -111, 10,114, 90, 44, 22, 55, 48, 26,141,206, 85, 21,236,246,179, 73,197, 73,188,228, 85,220, 91, 65,248,124,235,174,221,187,224, -230,104, 7,131,153,195,156,207, 63,214,141,237, 45,207, 31,253,246,200, 30,221,251, 77,191, 40,148, 5, 94,232,208, 34,144, 54, -111,222, 60,159,207,231, 87,169,151, 19,127,243, 31,189, 43,130,235, 73, 39,206,155, 53,118, 94, 57,205,133, 54, 37,238,170,211, -239,255, 14,224,111, 17, 18, 18, 16, 96,247,235,129,163, 31, 15,123,123,196,252, 90,205, 6,201, 19,210, 85, 16, 17, 19, 90, 55, -242,198,165,211,191,209,148,196,216, 79,170, 50, 89, 0,144,165,204,173,227,238,238,137,168,120, 13, 82,115,116,200, 40, 54, 89, -233,121, 6,168,117,106, 52,245,243, 65,190, 74, 85,167,198,199, 23,248,237,204,153, 51,195,251, 13, 28,129,233,159, 47,234,244, -211,150, 85,247,228, 94, 13,199,107, 50, 98, 35,108,169, 41, 18, 66,114,103,207,158, 29,240,227,143, 63,242,198,140, 25,163, 11, - 13, 13, 21,191,243,206, 59,157,118,238,220, 41,150, 74,197,186,187, 87,143,205,159,248,209,156,129, 91,215, 47,105,150,151,151, - 71, 44,102,243, 41, 83, 94,222, 28,117, 21,102, 46,249,232,220,199, 36,100,209,184, 55, 58,187, 31,115,145,242, 26,219, 83,227, - 72, 18,178,104, 31,125,184,192,244,236,212, 6,117,232,219,107, 62, 74,203,231,230,233,121, 30, 75,171, 50, 89, 0,192,227, 19, - 24, 45, 86, 56, 72,132,224,241,120, 37, 38,222,251,231,125,167,164,238, 10, 59, 8,249, 60, 8,248, 69,209,206,236, 2, 19, 62, -120,111,160,205, 53, 1,139,149, 66,103,180, 64, 91, 92, 59, 84, 23,100, 99,238,231,159,226,205,254,131, 49,113,234,167,200,211, - 1,183,227,213, 48,153,205, 85, 94, 20, 60,194,131,214, 96,193,248,222,126,200,213,152, 80,168,179,192,104,225, 32,181, 19, 64, - 40,224, 65, 38, 22,192, 81, 42, 4, 40, 21,149,220, 76,132, 66,161,222,100, 50,237,170,164,156, 80,175,142, 39,116,102, 30,218, -140, 88,133, 94,237, 27, 34,250,247, 67,130,203,127,222,247,159,241,249, 60,124, 60,169, 63, 14, 62, 14,128,139,135, 31,228, 50, - 9,204,148, 7,192,182,161, 67, 40, 93,192,121, 7, 15, 25,245,253,143,219, 99,190,254,106,142, 56,191,144,192, 94,196,199,197, - 11,231,113,253,198,237,245,202,232, 35,187,240, 10, 17, 82,158,167,163,163, 35,196,118,124, 24, 77, 6,163,237,169, 11, 20, 20, -104, 33,247, 12,250,190,184,198,223,194,202,161,156,247,170, 54, 90, 66,137, 98,206,244,217, 75,150,245, 14, 27,134,179, 39, 14, -226,192,193,125,214,246,125, 39,240,119,255,188, 5,157,122, 13, 64,167,222, 35,112,234,183,157,159, 10, 37,138,144,201, 31,127, -185,184, 75,143,126, 56, 27,126, 16,153, 25, 41,171,109,221, 94,190,144, 76,239,241, 70,127,232,141, 86,116,238,249, 22, 78, 31, -255,237, 35, 20,119,178,176,253, 33, 86,230,254, 12,158,229,211, 79,166, 11,179,242,141, 66,101,129, 17, 41, 74, 45, 18, 50,181, - 56,186,247, 39,106,251,253,194,216,186, 75,211,218,194,201, 43, 47, 62,175, 83,219,219, 32, 52,232, 36,177,207,226,130, 39,190, - 55, 86,232,223, 32,152,151,165, 50, 64,169, 50, 32, 91,101,128, 70,111, 65,131,218,129, 60,179,133,180,175,110, 57,187, 41,236, -132,155,143,199,195, 81, 38, 68,135,224,154,119,180,229, 56,238, 47,147,181,182,200,100,221,139, 87,193, 94,196,135,189,136, 7, -123, 17, 31, 22, 43,181,169,226, 34,241,104,216,239,131, 15,223,247, 49, 90,128, 28,149, 17, 2, 62,129,135,155,179,172,117,179, - 81,216,190,234, 35, 0,192,164,217,223, 97,226,248,119,208,168,113, 40,242,243,242,188, 70, 13,235,183, 22,192,111,182,110,235, -201,179, 17,190,103,175, 68,205,254, 96,230, 2,249,219,253,187,243,239,196,169,144,158,107,192,179, 88,117,181, 34,111, 0, 96, -177,114,160,160,216,177,239, 4, 36,118, 2, 40, 85, 38, 80, 74,177,100,227,126, 56, 72,132, 72,207, 43,106,238,175,140,202,252, - 72,101, 17,169,106, 68, 27,223, 66, 81, 46,151,187,173, 17,173,229,203,151, 71, 47, 95,190,188,220, 8, 89,137,201,170,241,164, -210,118,118,242, 96, 55, 87,159, 63,207,158, 62,233,240,219, 93, 43, 46,221,205,193,176,206,181,161,201, 77,198,183,159,191,157, - 75, 64,141, 60, 62, 63,223,160,211, 30,214,233, 10,151, 82, 74, 77,149,154, 44,239,160, 22, 50,137,227,249,205, 91,127,177,184, -121,120, 96,215,213,220,148,188, 66,139,249,175,102, 43, 51,185,125,102,171,191,133, 51,247,213,101, 60,169,178,122,203, 81,136, -150,111, 57, 10,128,130,227, 56, 80,142,131, 80, 44,151,185, 7,180,207, 44,190,209,137, 5, 60,162, 47,125, 7,160,156, 37, 69, - 25, 87,121, 24,148, 0, 80, 72,133,216,119, 57, 21, 0, 50,249,234,200, 71,163,223, 46,106, 46,212, 27,197, 5,141, 3, 2,104, -235,214,173,243, 37, 18, 73,141, 11,187,186,205,133, 54,157, 64,207,158, 25, 1,172,244, 9,234, 60,184,143,188,105, 27, 59,158, - 8, 45,131,188,113,233,204, 17,250,231,233,237,147,180,153, 49,191,216,120, 34, 66,163, 55, 35, 45, 71,143,212, 28, 61, 50,242, -244,200,200, 53, 32, 35, 79, 15, 66, 8,244,198,151, 27,254,166, 48, 43,230,192,174, 95,182, 13, 48,152, 48,178, 75,239,193,248, -116,193,102,191, 93,223,175, 56, 47,241, 12,238,104, 75,162, 45,165,212, 74, 8, 73,124,239,189,247,154,237,217,179,135,223,164, - 73, 19,221,163, 71,143,164, 0, 56, 0, 38,185, 92, 42,249,105,211,242, 51,109,218,180,217,155, 26,251,248, 34,128, 60, 91,186, -231,215,237,246,158,125,176, 99,238,100, 95, 89,135, 62,245,189,164,240,149,169,251, 4,203,239,126,235,209,115,198,178,172, 11, -235,178,210, 13,150,115, 74, 29,191,121,170, 70,104, 83,174,160,217,160, 79, 26, 50,108, 36,248,132, 7,147, 94,155, 84,114,114, -121, 40,236,176,112,247, 99,200,197, 66, 56, 72, 4,144, 75,132,232, 20,226,130,106,220,207,168,217,202, 65,107,176, 66,103,176, - 64,111,180,192,173,142, 51,126,220,117, 0,201, 89, 58, 28,189,149,141,152, 36, 53, 2,107,203, 64,105,213,183, 73,206,106, 46, -236, 63,116,140, 3,159, 71,192,231, 17, 94, 72,112, 67,228,106, 76, 16, 9,120, 16,137, 37,144,217, 11,224, 40, 17, 66, 36, 18, - 34, 43, 43, 11, 6,131, 1,190,190,190,226,202,173, 32,133,131, 92,130, 64,127, 31,152,204, 22,156,188,242, 16, 75, 63, 25,130, - 55,186,180, 2, 17,202,241,216,208, 2, 14, 46, 14,224,120, 60,152, 44, 28,140, 38, 43, 0, 94,133,209, 55, 95, 95,223, 30, 50, -153, 76,166,213,106,213, 73, 73, 73, 17,233,143, 15, 39,123, 52, 30, 52,249,244,217,139,187,222,122,243, 13, 68,221,139,198,193, -223,142, 93,205,118, 85,205, 44,249, 78,147, 38, 77,218,185,185,185,201,115,114,114, 10,238,223,191,127,179,134,181, 95, 34,243, - 12,158,209,190, 83, 55,104,242,179,144,249, 60,193,230, 90,116, 35, 63, 7,124,185,124,115,203,160,134, 65, 45,173,180,200,120, -133,248, 58,224,179, 5, 27, 90, 6, 4, 54,108, 89,210, 33,164,145,175,188,114,147, 37,115,236,253,238,228,207,150, 15, 24, 54, - 14, 23,207, 30,195,154,165,159,239,146, 41,220, 27,185, 56, 43,154, 55,105,215, 27, 87,207, 31,131,216,193, 11,206,174, 94,157, -198,140,255,176,215,176, 49, 83,112,253,234,121,172, 95,241,197, 78,171, 65,253,171, 45,219, 42,247,172,239,222,188,117,151,209, - 14, 46,158,200, 87,169,225,224,236,129, 70, 77, 91,143,150,123,214,159,173,201,140, 83,214,244, 90,231, 40,133,193, 68,145,167, - 49,225,185, 82,135,196,140, 34,163,197,113,213,200, 9,178,114, 68, 46, 22, 8, 92,204, 79,125,239,159,191, 72,253,234,120,146, -149,139, 63,231,155, 32,134, 50,191,200,100, 41, 11,140, 80,170,140,208,232,205,112,145, 9,192, 89,185,106,215,186,243, 52, 38, - 56, 20,231,209, 90,185,154,231,134,111,249,121, 95,208,221,216,180, 65,107,214,172,147,222,137, 47,101,178,132, 69,209, 44,123, - 17, 31, 86,142, 43,126,210, 84, 97,176, 5,194,233, 3,251,245,194,243,108, 93, 81,175,101, 30, 65, 96,104, 27,184, 73, 56,244, - 28, 49, 7, 0,208,191, 95,209,240, 37,241,233,133, 56,254,167, 18,248,123, 98,119,229,247, 98,157,142,191,117,119,248,140, 3, -251,247, 42,244, 86, 1,126, 56,149, 8,173,193, 2,177,136, 15,123, 17, 31, 18, 17,255,111,249,216, 85, 27,173,162,156,187,228, -108, 51,180,122, 61, 10,116,102, 80, 0, 55,159,106,160, 51, 90,160, 42, 52,163, 93,176,243,203,214,125,194, 1,132,149, 53, 68, -101,205, 82,169,136, 84,121,220, 42,173, 81,242,249,138,140, 92,233,156, 45, 0,213,234,193, 37, 40,235, 28, 75,175,219,201, 93, - 26, 41, 92,221,255, 60,125,234,132,252,183,187, 28, 34,238, 21,153, 44,179, 46, 27,171,103,143, 74, 41,200,207,238, 78, 41,141, -179,245,199,100,238, 33, 77, 37, 82,233,197,111,214,253, 96,242,240,172,197, 29,254, 51, 63, 75,165,181,254, 45,134,104, 53, 24, -120,148,163, 34, 91, 76, 86,113,147,135,105,193, 71,131,193, 81,138,133,235, 14, 96,217,204, 17,144, 75,198, 72, 9, 33,210, 66, -189, 5,159, 44,218,134,213, 95, 78,112,144,218, 11, 64, 8,160, 55, 90,241,238,200,193,182,157,128,122, 11,158,221,216,163, 81, -199,159,120, 84,186,185,176,109,167, 55,111,183,109,219, 54,223,217,217, 25, 18,137,228,175, 72,133,141, 55,237,242,122, 23,102, -229, 35,197,193,193,161,171,163,163, 99,105,189,194,252,252,252, 35, 53, 57, 11,213,249,217, 23, 51, 18,239,183,233,216,189, 63, - 34,206, 28,161,127,158,250,105, 82,117,198,232,113,118,113,126, 30,121,255, 89, 35, 66, 92,138, 34, 90,197, 38,203,104,230,224, -231, 41,197,243,196,103,112, 82, 40,158,219,170, 39,245, 8, 30, 72,120,116, 42, 1,221,174,201,136, 61, 80,108,122, 70,201,188, -130,239, 69, 63,184,179,244,173,209,211, 5,189,135,189,207,255,126,249,135, 95,160, 76, 18,107, 37,152, 98, 98, 98, 30, 78,152, - 48,161,195,245,235,215,173, 0,180,132, 16, 51,159,207,151, 26,141, 70, 81,247,238,221, 85,143, 31, 63,190,140,114,146, 22,203, -210,121,252, 65, 55, 98,175,126, 51, 32,176,245, 40, 63, 7,245, 27,221, 59,183, 71,251,198,117,240,188,115,123, 0,152,158,164, -145, 7,117,154,246,211, 62,127,247,218, 39,191,255,249,248,178, 73, 35,122,125,226,211,127,209,154,180,227, 11, 42, 77, 68, 77, -126, 24,209,167, 60, 27, 47,224,243,224, 32, 17, 66, 46, 17,192, 65, 34,132,131, 88, 8,179,133, 86,167,230, 72,205, 22,174, 40, -162,101,180, 64,163,179,224,226,157, 76,100,168,140,200, 87,155,160, 51, 89, 65, 65,139,106,163, 54,220,205,179,158,252,238,244, -162,236,253, 90,170,182,110, 92,229,120,232,247,148, 23, 61,250, 20, 82, 59, 56, 72,139,122, 99, 95,185,114, 5,174,174, 85,215, -246, 57,142,195,193,211, 55,177,102,199, 69,156,222, 62, 11, 98, 17, 31, 77, 7, 46,194,184, 65,109,193, 81, 14,207, 98,162, 51, - 3, 67,154,121,242,120, 18,240, 8,129,193,204, 1,160, 21, 30, 79,163,209,232,154,156,156, 92,208,160, 65, 3,175, 90,181,106, - 13,227,243,249,212, 30, 48, 28,217,155,171,189,112,226, 87,105,161,206, 96,149, 90, 84,219, 27,164,235,194, 2, 3, 3, 65, 8, -161,110,110,110,162,139, 23, 47,106, 66, 67, 67,221,107,104,178,120, 18,143,134,235, 39, 78,155, 49, 44,160,126,125, 28,248,117, - 59, 40, 37,135,108,253,254,238,227,215,177,120,238,223,123, 24,126,182, 96, 67,203,213,139,166,255,237,189,105,115,215, 84,218, -235, 80, 98, 47,159, 57,100,212,100,220,190,121, 13,223, 46,250,108,175, 65,147, 59,206,108, 49, 15,207, 77,143,223,235, 31,210, - 22,212,164,198,217,253,171, 48,226,157, 73,246,189,223, 26,134,235, 87,207, 99,217, 23,211,118,107,243,179,222,179,117,252, 47, -142, 10,167,118,239, 51, 72,168, 51,152,176, 97,229, 87,152, 50,115, 41,218,245,232, 47,124,112,231,207,169, 0,190,182,117,159, - 13, 38, 43,186,135,186, 21,153,103, 51,135, 99,241,124, 65,121,103,160,128, 79,120,205,235, 59, 65,103,180,160, 64,107,174,252, - 65, 37, 18,102,228,171, 10,234,110, 90, 54,131, 95,168,183, 64,169, 50, 34, 75,101, 64,118,254, 95, 6, 43, 91,101,128, 82,101, -132, 80, 64, 16, 27,151, 4,158, 80, 80,237,252,188, 60,141, 25,109, 26, 58, 23, 93,163, 53,108, 29, 49, 11, 28,219,158,190,124, -119,200,154, 53,107,197,119, 19,212,184, 23, 95, 80, 28,201,226,195, 94,200,131, 93,241,107, 43, 7, 84,245, 19, 10,143, 0,255, -177, 19, 38,245,116,148, 75,144,246, 36, 11, 2,126,209, 16, 49, 10,143, 58, 80,216,235,241,225,180,201,112,115,117, 66,114,182, - 1,235,127,139,197,189,135, 79,193,233,170,183,219, 27,126,216,219,119,226, 7,159, 57,241,132,118,216,121, 38,161,104, 59,249, - 86, 60,254,243,184, 62,237,217,253, 66, 77, 65, 14, 5,181,218, 24, 0, 32,212, 98, 45, 58,221,150, 45,156,131,189, 59,190,195, -153,200,172, 23,201, 91,191, 31, 90,141, 25,115,151, 32,187,192, 88,124,234, 87, 30,201, 42,179,174, 44, 21,137,250,199,122, 41, -115, 84,222, 58, 41, 94, 55, 86,160, 97, 44, 99,174,140,101,222, 55,150,209,187, 91, 78,229,127,107,149, 77,135,255, 48, 69,206, - 30, 77, 20, 14,138,107,167, 78, 29,151, 29,185, 71, 95,152, 44,147, 54,155, 46,157,222, 63,165, 32, 95,217,187, 90, 38,203,163, - 97, 19,123,153,236,242,252, 37,235, 13,158,181,234, 90, 78,222, 41,200, 81,235,173,255, 8,139,136,164, 50,171, 76,225,174,119, -242,107,177, 70,168, 51,126,165, 84, 62, 44,172, 42,242,196, 81,138, 19, 55, 50, 64,105, 81, 21,105,255,149, 84, 20,215,204, 97, -229,138,154, 85,206,221,201,130,160, 56, 15,197,214,240,247,150, 31,190, 43, 8, 11, 85, 21,142, 94,182,240, 69,115, 97,187,102, - 69,145, 44, 71, 71, 71, 56, 57, 57, 65, 46,151,195,150,166,195, 18, 42,234, 93,232,224,224,208,245,206,157, 59, 98, 71, 71, 71, -240,249,124, 24, 12, 6, 52,110,220,184, 70, 23,186,220, 43,248,131, 54, 61, 6,127,209,169, 71,127, 92, 60,125,152,254,121,250, -231,201,213, 29, 8, 49,172, 87,135,227,139, 23, 47,244,159,191,116,147,189,131, 88,128, 71, 26, 35,120,132,192,207, 83, 10, 87, - 25, 15, 17, 71,118,234, 71,244,239, 96,243,224,120,117,234,212,218,181,122,227, 86,217,234, 21,139,186, 59,212, 10,186,168, 78, -141,201, 5,128,194,140,199, 43,165, 94,193, 15,107, 95, 59,123,178, 89,215,193,240,244,169,255, 70, 53,194,191,148, 16,162,141, -139,139,139,159, 63,127,126,208,138, 21, 43, 40,159,207,231, 0,216,175, 91,183, 78,251,228,201,147, 59, 40,234,154,139,170, 30, - 54, 61,223,104,252,137,220,206,218,206, 69,202,107, 92,223, 75,138,246,141,139, 90, 69, 71,132,117, 66, 29, 95, 95,196,101,104, -155,231,106, 57,161,198,200,175,191,249,135,123,183,234,185,241, 39, 89,116,198,135,168, 98, 48,217,138,206,217,146, 4,249,146, -104,150,131, 68, 8,174,232,193, 94, 45,163,101, 48, 89,161, 51, 88,161, 51, 90, 80,104,180, 66,107,180,130,163, 69,215, 4, 33, - 4, 38, 11, 7,155,170,205,101,206,125, 71, 23, 55,212,175, 87,212, 75,214, 65, 82, 52,212,131,163, 84, 88,212, 71,218,213, 21, - 30, 30, 30, 54, 69, 69,141,166,162, 75,220,104,230, 94, 52,235, 27, 77, 22, 80, 74, 17, 27, 27, 51, 43, 49, 62,126, 96,131,192, - 6, 93, 66,154, 54,115,145,218,243, 0,160, 66,163,165,213,106,173, 14, 14, 14, 30, 46, 46, 46,188,212,212,212, 23,230,185, 65, -243,238,150,223, 14, 31,194,144, 33,131, 53,143,110,222,125,209,197, 93,167,211,145,142, 29, 59, 58,214,169, 83,135,103, 48, 24, - 10,170,119, 12, 8,145,185, 55, 28, 84, 39,184,195,210,119,223,155,210,176,123,175,190,184,116,225, 44,142, 30,222,243, 75, 97, - 86,140,205, 35,103, 7, 5, 5,255,163,215, 97, 64, 96,195,127,244, 58,172,235, 31, 88,169,209, 10,105,218,186, 45, 37, 2,156, - 57,177,159,234,121,166,105, 69, 9,239,100,255,190, 45, 95,126, 61,106,234,220,128,126, 3, 70,225,221,119,198, 65, 32,224, 35, -226,220,113,172, 94,244,105,184, 70,149, 53,214,150, 52, 1, 0, 32, 33, 33,162, 6,190,117, 63,246, 13,104,130,200, 63,175,226, - 89,236,131,232,187,183,174, 55,110, 16,218, 14,238, 62,126, 31,147,144,144, 21,244,225, 67, 83, 85, 58, 70,189, 62,105,220,216, -119, 80,186,215, 97,251, 22, 65,174,164,236, 5, 0, 64,171,206, 50,253,180,234,147, 39, 37,189, 14, 57,147, 49,169, 34, 93, 85, -158,242, 96,196, 31, 55,102, 14, 12,235,203,203, 46, 48, 22, 69,176, 84,198,226,197,128,236,146,215, 5, 6, 4,250,200, 17, 19, - 29,201,233, 85,217,135,170,121, 93,234,199, 13,239,243,176,228,220,229, 56, 10, 2,232,171,123,125, 83,161,227,228,149,223,174, - 17,223,141,215,224, 94, 66, 65, 81, 83,161,144, 95,100,176,132,188, 23,166,171,168, 55,123, 21,209, 33,194, 95, 54,126,236, 72, -100, 23,152,192,113,128,128,207, 43, 94, 68, 72, 86, 19, 60, 87,107,145,157,167, 68,124, 98, 18,242, 51,158,129,199,227,193,205, -167, 33,108, 13, 63, 90,169,157,183,214, 72, 67,135,133,117, 17, 28,190,150, 14,169,189, 0, 6,117, 38, 78,237, 91,165, 52,104, - 10,150,234,180,154,195,186,156, 39,105,182,238, 59,143, 16,101,129, 70,239,105, 47,228,227,192,142, 77, 24, 62,110, 90,241, 65, - 41,250, 51,107,222, 98,128, 71,144,155,167, 6, 33,164,186, 81,210, 91, 85,172,215,132, 87,161,129,242,204,213,223, 42, 10, 21, -215, 70,233,169,179,167,143,203,126, 79,180,199,205,152,244, 98,147,165,228,150,124, 20,150,162, 86,229,246,161,148,198, 86,107, - 11,120,188, 62, 35,198,207,140,174,223, 48,196,112,233,129, 38, 33,191,208, 92, 97,158, 67,251, 97,243,163,111,135,111,236,167, - 50,199,189, 47,247,105,108,229, 44,150,149,218,172,152, 69, 21, 52, 29,218, 45, 90,127,224, 69,179,225,236, 21, 59,139, 94, 91, -173,176, 82, 14,148, 3, 62,252,114, 11, 44,156, 21,156,213, 10,206, 74, 97,182, 82,105, 85,155,235,225, 83,247,112,222,227,253, -193,163,191,254,103,115,161,147,147, 19, 92, 93, 93,225,234,234,138, 18, 99,244,178,205,133,142,142,142,144,203,229,184,122,245, - 42, 36, 18, 9,100, 50, 89,181,116, 75,153,172,247, 91,119, 27,184,169,199,128, 9, 56,119,248, 7,122,235,202,241, 41,218,204, -152,109, 54, 71,232,173, 86, 98, 54,155, 17,214,187, 91, 82, 84,244,211,211,243,102, 78,237,219,225,173, 41,246,237,131,106, 65, -111,180, 34, 37,241, 25, 34,142,252,172,111,232,239,125,166,103,231,182, 73,102,179, 25, 86,171,181,202, 7,185,222,104,202,230, - 11, 37,178,145, 35, 71, 11,111,221,188,121, 72,238,209,240,128,149,240,238, 18,202, 53, 37,132, 12,105,218,180, 17, 76,102, 14, - 90,109, 65, 94,117,247, 89,173, 86,199,111,223,190,221,127,236,216,177,210,144,144, 16,225,179,103,207,176,122,245,234, 28,181, - 90, 29,111,171,198,217, 43, 49,235, 4, 36,239,137, 29,103, 26,229,231,160,126, 35,185, 83,123,140,124,171, 19,246,134,255,142, -136,171,215,145,164,145,223,209, 88, 4, 71,158, 39,165, 25, 26,187, 20, 28, 26,208,190, 46,255,192,142,188, 67, 30,221,231,190, - 77,169,253, 89,101,196,130, 66,219, 31,226,128, 90,103,134,163,180,104,188,167,146,200, 22,159, 16,155, 29, 17, 1,226,175, 94, -143,108,210, 42, 48, 4, 81,241, 42,100,229, 27,160, 51, 88,192,113, 20, 28, 40, 92, 29,236, 32, 22,241,144,156, 24, 15,142,154, - 18,170,121,187, 80,118,237,210, 85, 0, 16, 16, 66, 5, 66,129, 0, 20, 69,227, 43, 74, 36, 18,141,135,135,135, 77, 17, 45,147, -197,130, 33,125,219,162, 93,235,166, 24, 56,165,104,204,204, 11,191,204,129,179, 92,136,189,187,182, 33,249,242,218, 93,245, 59, - 76, 59,251,224,126,244,208,232,168,107,163,223,108, 41,105,238, 37, 72, 19, 85,164,167,209,104, 14, 17, 66,236, 68, 34, 81,223, - 46, 93,186,184, 28, 58,116, 40,223,205,205,141,179, 19,137,148, 3,250,191,197, 9, 69,162,220,146,207,254,241,199, 31,194, 41, - 83,166, 56,228,229,229, 37,103,102,102, 94,167,148,154, 43,175, 8, 6,247, 2, 15,123, 64,136, 88, 46,145, 38,181,239, 53,210, -167,117,187,182,138, 65, 67,134,195,222,206, 30,231,206,158,198,134,181, 43,246,107,210, 31,141,175,206,145,124, 85,189, 14, 83, -146, 19,226,181, 58, 67,104,147, 86,221,200,213,179, 71,166, 19,226,190,150,111,239,184,170,215,144,105, 1,241,105, 26,108, 88, - 62, 11,206, 10, 25, 18,158, 61,214, 61,121,116,127,139, 89, 95, 48,203, 86,147, 5, 0,210, 28,235,208,246,239,244,117, 54,152, -172,184,114, 49, 92,207, 89,184,190,215, 47,159,124, 86,187, 97,107,113,147,214, 61,157,179,143,110, 27, 2, 96,111, 85, 58, 41, -143,254, 25,193,245, 13,106,147,112,225,226,121,133,167, 95, 99, 62, 1,129,201,160,135, 50,238,150, 69,155,249,184, 64,149,114, -223,166, 94,184, 57,207,241,229,220, 5,223,188,223,186, 85, 43, 25,133,248,111, 17,172, 18,131,149, 93, 96,132,155,131, 29,116, - 5, 74, 60,185,117, 90,175, 85,242, 43, 29,239,204, 98, 44,148,102,103,101,190,104, 98,211,100,198,180,171,236,243,217, 89,153, -118, 22, 99,161,180,234, 71, 29, 31,142, 50, 59,220, 79, 72,125,145,248,110, 47, 44,202,205,178, 19,242, 95,228,105,149,220, 11, -170,160,155, 72,236,132,212, 28, 61, 8, 40, 56,171, 5, 22,179, 17,234,130, 2,164,166,101, 32, 51, 35, 19,106,117, 62,164,114, -103, 52,105,222, 6, 14, 50, 49,238, 70,236, 7,165,212,166,113, 13,205, 68, 24,212,186, 93,103,251, 7,137, 69,185, 88, 98, 33, -197,241, 61, 43,114, 52, 5, 89,157,213,105,177, 79,170,123, 47,182, 88,173,231,239, 61,124,210,184,182,119, 61,114,231,153, 10, -187,126,220, 8, 99,113,100,211,108,182,226, 65,114, 33,210,115,181, 72,142,123, 68, 57,171,245,127,102, 66,106, 65,197, 1, 64, - 8,154, 54,105,132,222, 99, 6,225,187,239,182, 32, 46, 62,145, 91, 58,189, 95,178, 70,157,255,166,173, 38,171,244,236,222,133, - 25,143, 87,142,255, 46, 33,229, 88, 84, 46, 79,103,172,124,126, 43,177,187, 31, 58,143, 95,125, 70,167,206,181,179, 26,180,130, -227,187,198,239, 41, 79,179,200, 65,195,184,244,179, 17,144, 75, 4, 32,132,160,164,185,112,243,226,201,144,218, 23,181, 45,235, - 12, 22,140,249,100, 13,118,173,249, 20, 20,192,168,225,191,107, 43,218,206, 82, 77,123,181,147, 18,179, 82,123,245,255,236,130, -222,100,111,120,107,240,216,219,173, 90,181,202,151, 72, 36,144, 72, 36,112,116,116,132,179,179, 51,156,156,156,170,220,247, 10, - 7, 35, 45,213,187,144,199,227,129,199,227, 65, 38,147, 65, 46,151, 67, 38,147, 85,170, 89,161,201,234, 58, 96,115,207,129, 19, -113,238,240, 86,122,235,202,241,169,218,204,152, 31,109, 45,163,226,230,158,187, 67,134, 12, 9,157, 50,101,138,104,193,204, 41, -103,194,207, 70,196, 30, 56,177,181,127, 94, 94,126, 29, 74, 41,156, 20,138,231, 35,250,119, 56,222,189, 99,235,164, 11, 23, 46, -112,123,246,236, 49, 16, 66,238, 87,181,157,217, 89, 89,191, 92, 56,127,113, 97,231,174,221,176,109,199,158,174,209, 15, 31,117, -125,246,236, 9,234,248,213, 71, 61,255, 64,104,137, 51, 46, 94,190, 10, 77,126,214, 47,182,108,103,153,168, 22,201,203,203,187, - 54, 98,196,136,222,191,255,254, 59,111,196,136, 17,218,236,236,236, 63, 74,234, 81, 21, 69,179, 74,107, 94,219, 50, 72, 9,224, -151,186,221,222,219,159,106,202,255, 24,192, 10, 95, 63, 95, 68, 92,189,142,235,191,223,216,146, 45,245, 93, 52,126,204,123,147, -235, 14,224, 79, 28,208,190, 46,223,195, 89,138, 95,183,174,230, 31,187,158,184, 38, 49,199,186, 13,192, 98, 91,202,232,197,131, - 67,109, 66,199, 70, 46, 48, 91, 41, 56, 90,116,195,117, 16, 11,203,189,241,150,167, 41, 48,218,143,159, 58,101,202,179, 38, 77, -155,207, 24,243,222, 84, 81,243,250,117,112,243,105, 62, 64, 8, 92,188,100, 72, 79, 79,199,149,131, 91, 45,121,169,143,183,240, -249,220,215,213, 57,151,114, 19,163, 26,148,250,220,228,236,236,108, 68, 68, 68,160,196, 96,185,187,187,151,107,180,202,106,230, -100,166,253,177,248,219, 31, 58, 78,122,119, 48,222,234,214, 24,151,111, 61,131,177,120,188,166,146,174,228,241,215,191,183,251, -120, 68,125,227,251, 67, 26, 22,232,204,118,137, 95, 38,168,174,148,238, 21, 91, 86,147, 82,106, 36,132, 28,139,137,137,233,212, -172, 89,179,186, 39, 79,158,204,141,190,113,102,122,233,237,248,208,158,168,121, 0, 0, 32, 0, 73, 68, 65, 84,236,179,207,228, -223,125,247,157,148, 82,250,135,193, 96,136,179,105,223,121,248, 53,242,246,109, 87,147,153,195,213, 27,119, 27,245,236,216, 28, - 28, 5,110,221,186,133,109, 63,109,211,223,191,119,103, 85, 97,166,215,215, 21,153,151,138,142,167,245, 37,122, 29,150,214, 76, - 79, 77, 92,117, 46,252,224,174,214, 93,251, 99,244,135, 95,127, 29, 17,190,103, 97,203,206,111,241, 26,181,238,141,200,235, 23, -113,254,228,233,111, 76,154,220,133, 85,205, 67, 90,209,118,218, 75,164, 31,133,180,236,138,228,164, 68, 36, 60,121,240,139, 46, -231, 73,154,220, 43,248,151,180,148,164,169,254,141, 59,226,247, 51,123,167, 87,100,180,170, 58,231,235,184, 75,182,158, 60,113, -108,100, 74,202,247, 94,133, 58,189, 61,165, 84,111,111, 39,200,144,243, 42,238,161,254,207,114,127,104,146,185,212, 27, 50,124, -204,212,240, 13, 27,214, 10, 61,157,164,200,200,211,163, 64,103,130, 90,107, 2,143, 16, 52,240,145, 65,171,206,197,229,131,223, -154,141,154,188, 17,148, 62, 53, 85,164, 41,247, 12, 94, 2,208, 15, 63,155,118, 9,118,138, 58, 62,254, 61,191,168, 52, 90,167, - 78,187,215,255,179,105,199,131, 40,165, 61,229,158,193,234,146,185, 14,203,219,119, 66,138,174,239,209,221,235,192,100, 41, 26, -127,204,194, 1, 86,142, 43,142,242, 1,244, 69,123, 62,169, 98,223, 9,183, 47,252, 15,164,101,230, 67,103, 52,195, 96,180,192, -100,182,130,199,231,195,201,217, 9,129,245, 90, 64,225,228,136,204,140, 52, 92,191,112, 12,177,247, 46,255, 65, 40, 22,105,179, - 98, 47,216, 82, 70, 34,137, 83,144,183,143, 23, 47,189,192, 8,137, 29, 31,119, 46,159, 52,153,141,134, 85,182,152,172,242, 52, -243,115,114,215,204,152,249,249,168,159,183,239,240, 10,245,119, 68, 74,182, 14, 41, 74, 61,212,122,115,177, 17,227, 96,208,100, -227,222,197, 29, 25, 86,189,122,205,255,188,209,178,152,244,234, 67,167,111,186,206, 89,248, 45,255,233,179, 56,243,146,143,195, - 82,116,154,130,126,213,142,100,149, 98,251,251,245,246, 86,239, 27,197, 67,154,124,157, 88,121,253,187,108,115, 33,229,192, 81, -138,227, 55, 50, 94, 52, 23,114,197,153,151, 81,207,242,171,213,180,119, 47, 70,189, 91,167,203, 84, 60,126,186, 42, 15, 0,248, -124,254,139,165, 36,151, 74,175,215, 27,107,210, 92, 88, 54,241,157,227, 56, 56, 58, 58, 66, 34,145, 84,187, 73, 82,230, 25, 52, -178,117,183,129,155,122, 14,154,132,243,191,253, 72,111, 93, 62, 54, 77,155, 21,179,181,218, 57, 10,121,121,209,132,144, 39,171, - 86,173,106,190,109,219, 54,255,153, 51,103,198,237,220,180,112, 3, 0,228,228, 20,205, 1, 28, 21, 21, 69,167, 77,155,102,208, -235,245,241,121,121,121,145, 85,117,128, 0, 0,157, 82,186,108,219,230, 21, 77,158,167,166, 15,174,223,164, 13,220,253,219,192, -171, 65, 91,228,169, 77,184,249, 52, 13,113,143, 46,224,209,213,131, 39,181,114,203,194,234,110,115,179,102,205,234,240,120,188, -122, 26,141,198, 43, 36, 36,164,153, 76, 38,139,106,214,172, 89, 11,129, 64,144,114,251,246,237,196,234,104, 37, 70,252,108,168, -219,237,189,245, 73,106,135,238,113, 25,218, 22, 73,106,135, 40,173,189,226,211,172, 11,235, 12,158,189, 87,173,161,166,236,232, - 3, 59, 10, 14,253,186,117, 53,127,204,228,207,172, 15, 84,206, 31, 11, 36,118,231,150,143, 11,173, 70,179, 20, 47,253,253,177, - 3,255, 26,222,161, 56,146, 85,252,218,166, 48,125,126,254, 93, 21,128,217, 18,159,198,155, 30,124, 60,101,113,211,214, 29,223, -233,242,230, 8,158, 69, 36,199,153,223,190,167,241,247, 46, 30, 16, 80,235, 60,173, 13,179, 1, 84,217, 28,100, 52, 86,105,178, -202,109,238,121, 46,235,118, 96,207, 79,227, 14,253,118,120,249,160, 1, 3, 93, 55,127,249, 54,190,253,225, 8,100, 18,123, 80, -142,195,136, 30,190,195, 30,237,233,211,191,142,167,184,214,161, 75, 41, 87, 62, 92,251, 96,182, 86,107,138,173, 42, 18, 83,108, -156,175, 58, 56, 56, 40, 59,117,234,212,206,222,222,158,100,103,103, 11, 60, 60, 60, 44, 10,133,194,152,146,146,162, 53, 24, 12, -135, 40,165,133,213,217, 79,147,153, 67, 66,166, 30, 71, 15, 31,194,221, 27, 23,240,232, 81,140,250,209,195, 71, 27,137,128,174, -213,100,196,230,214,228,216,113,229,246, 58,164,213,238,117,104, 53,168,127,221,185,101, 73, 15,173,222, 48,174, 89,135, 48,212, -109,212,145,103, 50, 91,113,255,214, 37, 92, 58,184,246, 91,163, 58,103,206,203,148,177, 79,109,255, 64,202,183,195,181,136,112, - 80,142,219, 2, 0,148,227,182, 68,253,126,114,106,219,126, 19,225,226, 81,183, 25, 33,132, 84,119,190, 71, 0, 16, 9,120,133, -167, 14,253,252, 91, 66, 66, 2, 30, 63,126,140,167, 79,159, 34, 55, 55, 23,191,254,154, 80,173,242, 41,204, 77, 56, 39,119,173, -223,103,232,219,163,143, 15, 27,249,174,216, 63, 48,148, 23, 84,219, 25,174,114, 1, 98,158, 38, 34,246,246, 61, 46,230,230, 73, -189,169, 32,107,144, 54, 55,161, 66,227, 39,115, 15,241, 36, 60, 58,167,100,238,194,246,237, 59, 6,125,190,116,121, 59, 87,119, -143,114,239,227, 57,202, 44,187, 89, 31, 30, 11,186,254,231, 53,155,230, 58,228,172,214,156,201,227, 70,112,252,162,137, 66,241, - 34, 78, 77,138, 10,187,168, 50, 85,244, 62,229, 44, 85, 70,240,223, 27,220, 25, 22,142, 67,161,206,132,130, 66, 3, 84,106, 61, -210,179,114,112,247,222, 61, 92, 62,126, 12,207, 98,238,198,155,141,198,179, 60, 30, 57,168,205,136,185, 92,189,150, 38,129,191, -171,139, 11,226,115, 53, 16,219, 9,144, 24,123,219, 80, 88,160,218, 93,211,243, 72,155, 29,155, 46,243, 12,234, 61, 98,196,200, -211, 61,250, 12, 80,180,238,208, 75,234,230,232, 4,145,128,226, 73, 66, 26, 34,255, 56, 93, 24,119,247, 74,129,217,168,233,251, - 42,102,125,249,111,198,166, 94,135, 38, 67, 97,255, 81, 3,187, 30,230,243, 5,118, 28,103, 49,152,140,134,161, 47, 99,178, 94, - 23,148, 90, 83,198,141, 26,252,183,186,129,133,163,146, 81,195,207,232, 74,215, 21,204, 86, 42, 29, 53,252, 15,109,209, 13,164, -226,196,190, 23, 77,123,123,207,165, 36, 37,229,220,202,205, 53, 92,122,217,158,128,165,231, 46,172,164,119, 97, 97,112,112,240, - 11,115,197,231,243, 97,181, 90,109,190, 17,137,236, 37,147,122, 12,152, 64,206, 31,249,145,222,140, 56,242,190, 54, 43,246,135, -151,104,103, 54, 1,184, 65, 8,121, 48,111,222,188,214,158,158,158,158, 95,125,245,149,184,160,160, 64,184,121,243,102,125,118, -118,118, 70, 65, 65,193,117, 74,169,206,118,205, 72, 51,128, 33,114,207,134,221,233,161, 31,223,112,114,171,213, 91,225, 94, 59, - 32, 95,153, 26,175, 82,166,157, 5,112,190,120,160,200,106,209,162, 69,139,250, 60, 30,111, 4,128, 38, 50,153,172,129, 92, 46, -183,167,148, 6, 19, 66,162, 57,142,187, 23, 18, 18,114, 2, 64,181,202, 47, 49,226,103, 67,151,247,127,218,147,171,229, 68, 70, -158,104, 79, 98,196,207, 6, 0,200, 60, 59, 83, 11,224,168,103,247, 57, 67,142, 93, 79,220, 16,157,167,152,158,117,105,217,177, -234,110,115,254,243, 59, 13, 94,213,249,175, 75,139, 78, 1, 48, 78,230, 25,180,250,126,212,245, 5,132, 66,104,133,101,137, 54, -243,201,237, 87,161, 47, 20, 10,245,181,106,213, 42,183,119,161,189,189,189,190,242, 50,143,176, 0,216, 70, 72,183, 29,135,247, -239, 24,119,228,216,209,229, 93,122, 14,114, 21,215,174,141,122, 30, 4, 59,230,180,156,126, 33, 74,121,115,192,231, 87,190,139, - 75,211,223,163,148, 86, 43, 31, 70,173, 86,199, 18, 66,242, 52, 26,205, 64, 74,233,115, 66, 72,157,188,188,188, 59,102,179,249, -126,181, 13, 1,135,209,237,219,183,249,149, 16, 34,160, 22,110,229,117, 33,127,143, 62,253, 81, 74, 77,140, 69,105, 66,235, 57, -226,147,175,214,183, 12,104,208,176,101,201, 92,135,141,235, 58, 96,202,236,213, 45,235,250, 7,182,252,107,254, 67,121, 85,215, - 36, 37,132,140, 63,252,211,202, 43, 81,127, 94,250,194,205,187,110,221,140,148,184, 71,207,159,222, 89,108,209,169, 14,191,108, - 57, 39, 60,141, 94,187,109,213,236,153,233,169,241,219, 10,179, 98, 31, 0, 64, 97, 86,236, 3,169,103,195, 47,179, 51, 82,102, -230,100,197,173,170,233,177, 40, 44, 44, 76,219,189,123,183, 83,199,142, 29,121,158,158,158, 80, 42,149,184,116,233, 18,199,113, - 92,106,117,181, 52, 57,113,151, 8, 9,112,249,229,135, 77, 43, 69, 50,135,126, 22,139,197,135, 82, 64, 32, 16,164, 27,181, 5, -167,213, 60,217,231, 52, 55,161,138,243,146, 35, 0,120, 37,115, 23,114, 28, 71, 86,110,216,145, 40, 20, 59,148, 59, 63,162, 89, -175,150,114, 28,103,243, 92,135,121, 73,183, 3, 94,217,195,154,210, 69,205, 90,181,251,194,108, 54,233, 81,148, 47,166, 7,160, -167, 20, 57, 60, 30,185,204,231,204,103, 84, 47, 81,153, 34, 4,142,148, 8,224, 32, 17,128,128, 64,163,202,165,213,201,201, 42, -183,188, 51, 99,162, 9,233,230,119,202,184,127,236,197,115, 39,135, 91,173,214,122,197,103, 78,130, 65, 87,120, 64,147,238,252, - 11,165,183, 44,248,247, 19, 94, 98,182, 4,149, 92,216,177, 40,154,219,231,191,154,156,248,155,173, 94,165, 94,122,102,238,142, - 62,131,102,210,132,196,172,155,201, 25,134, 95, 74, 79,171,243,178,154,207,159, 43, 47, 21, 55, 23, 26,254, 25,161,168, 89,239, -194, 23,198, 88,175,251,102,221,188,145,208,235, 10,119,106,179, 98,119,188, 26, 19, 75,117, 0, 46, 19, 66, 20,239,191,255,126, - 11,185, 92, 46,204,206,206,190, 65, 41, 85,213, 84, 83,147, 25,123, 9,192, 37, 0,115, 94,197, 54, 70, 69, 69,197, 53,111,222, -124, 23,143,199,171, 71, 41,245,164,148, 42,138,141,108,182, 64, 32, 72,125,248,240, 97,106,141,246,221,224,112, 74, 99,228, 7, - 90,168,243,233,127,152, 15, 87,143,115, 73,185,214, 31,249, 50,241,127, 77,142, 65, 97,102, 76, 52,128,161,175, 90,183,178,113, -178,108, 63,143,254, 50, 92, 17,225, 63,143,227,217, 41,150,244, 12,210,107,123,207, 72, 93,124,245,190,242, 6,165, 84,253, 18, -231,168,210,206,206, 78, 71, 8,169, 35, 18,137,116, 70,163,241, 94,141,142, 95,145,201,119,127,149,199,142, 3,185,221,178,101, -171,106,125,222,134, 72,222,142,226,229,149,162,201,120,188, 24,197,205,223,127,139, 80,100,198, 46, 1,176,228,101,180,111,221, -186,117,124,213,170, 85,170, 13, 27, 54,248, 90,173, 86,169,209,104,212,234,116,186,132,148,148,148,107, 53, 43,243,103, 70, 0, - 31, 23, 47, 53,136,186, 60,206,144,123, 54, 92,223,161,125,135,143,139, 42,232,116,125,194,229,245,159, 84,246, 29,185,103, 67, - 93,233,207, 87, 54,215,225, 43, 45,151,172,216, 45, 0,182,188,190, 72, 5,167, 28, 61,108, 32, 80, 60, 48, 55,103,177, 40, 95, -137,108,209, 53,255, 19,106, 56, 73,250,191, 1, 74,105, 58,128,173,197,134,153,190,182, 31,178, 53, 95,133,105, 50, 77,166,249, -191,165,105,203,236, 4,236,120, 50,205,215,169, 41,241, 9,169, 3, 0,182, 76,186, 94,209,231,217,241,164,255, 51, 9,237, 54, - 28,143,201,229,152, 45,219, 6, 44,101, 48, 24,140,215, 80,219,227,216, 81, 96,252, 39,177,213, 96,213,244,243,140,255,185,123, - 90,133, 57,209, 4, 69,179, 96,151,247, 37,155,157, 42, 33,164, 87, 13, 54,234, 60,211,100,154, 76,147,105, 50, 77,166,201, 52, -255,183, 52,171,210,254,191, 24, 41, 43, 39,162, 21, 94,220,124, 88, 52, 48,219,235, 90, 0,244, 98,154, 76,147,105, 50, 77,166, -201, 52,153, 38,211,252, 95, 90, 0, 76, 46,121,205, 3,131,193, 96, 48, 24, 12, 6,227,181,192,114,180, 24, 12, 6,131,193, 96, - 48, 94,130,242,154, 14,153,209, 98, 48, 24, 12, 6,131,193,120, 5, 84,150, 12,207,154, 14, 25, 12, 6,131,193, 96, 48, 94,130, -146,136, 22, 33,196,155, 16, 50,185,116,132,139, 25, 45, 6,131,193, 96, 48, 24,140, 87, 0,165, 52,189,108,116,139, 80, 74, 17, - 30, 30, 78,195,194,194, 8,128,191,189,102, 48, 24, 12, 6,131,193,248,255,193,255,101, 47, 66, 8,241, 6, 16, 86,122,119, 74, -134,119,224,149,222, 65, 86,204, 12, 6,131,193, 96, 48,254,147,102,235,255,226,118,151, 68,178, 74, 45, 47, 38,205,126, 97,180, -194,194,194, 8, 51, 91, 12, 6,131,193, 96, 48,254, 83,252, 27,189, 8,175,236, 14,178, 98,102, 48, 24, 12, 6,131,241,159, 52, - 91,255,166,253, 97,195, 59, 48, 24, 12, 6,131,193, 96,188, 4,149,229,104,145,226,161,226, 25, 12, 6,131,193, 96, 48, 24, 53, - 51, 90,147, 75,247, 54, 44,189,206, 34, 90, 12, 6,131,193, 96, 48, 24,175,192,108,149,251, 62,139,104, 49, 24, 12, 6,131,193, - 96,188, 30, 94,235,128,165,132,144, 94, 76,147,105, 50, 77,166,201, 52,153, 38,211,100,154,255,102, 74, 70,132, 47,126, 61,185, - 56,103,235,245, 27, 45, 6,131,193, 96, 48, 24,140,255, 1,194, 40,165, 91, 75,229,102,133, 49,163,197, 96, 48, 24, 12, 6,131, -241, 10, 41,111,114,105,102,180, 24, 12, 6,131,193, 96, 48, 94,161,193, 42,189,206,140, 22,131,193, 96, 48, 24, 12,198,107,130, - 25, 45, 6,131,193, 96, 48, 24,140,215, 4, 1, 80,110,207, 1, 74,233,121,155, 69,106,208,251,160, 42,125,166,201, 52,153, 38, -211,100,154, 76,147,105,254,251, 52,171,210,174,142,255,248,175, 49, 83,127,141, 12, 31, 94,252,247,175,230, 67, 74,233,107, 91, - 0,244, 98,154, 76,147,105, 50, 77,166,201, 52,153, 38,211,252, 55, 47, 0, 38,151,254, 91,122, 97, 77,135, 12, 6,131,193, 96, - 48, 24, 47, 31,213, 42, 61,142,214,139, 81,226,217, 20, 60, 12, 6,131,193, 96, 48, 24, 47, 65,121,195, 58,148,192, 34, 90, 12, - 6,131,193, 96, 48, 24, 47, 65,217,121, 14, 75,175, 51,163,197, 96, 48, 24, 12, 6,131,241, 26, 12, 23, 51, 90, 12, 6,131,193, - 96, 48, 24,175,208,100,253, 35,186, 85,156, 37,143,240,240,112, 26, 22, 22, 70,216,161, 98, 48, 24, 12, 6,131,241,159,224,223, -232, 69,120,165,119, 44, 60, 60,156,178, 98,102, 48, 24, 12, 6,131,241,159, 50, 89,255, 23,189, 8, 33,196,187,164,183, 97,241, -226, 93,242, 63,214,235,144,193, 96, 48, 24, 12, 6,227,229, 8, 43,221,243,176,184,249,112, 43, 51, 90, 12, 6,131,193, 96, 48, - 24,175,128,242, 18,225, 1,150,163,197, 96, 48, 24, 12, 6,227,191,132,127,163, 23,121, 97,180, 24, 12, 6,131,193, 96, 48, 24, - 53, 48, 83,229, 68,179, 74,154, 18,153,209, 98, 48, 24, 12, 6,131,193,120, 69,134,171,236, 40,241,108, 28, 45, 6,131,193, 96, - 48, 24,140,215, 96,178, 94,187,209, 34,132,244, 98,154, 76,147,105, 50, 77,166,201, 52,153, 38,211,252,183,155,172,146,191,108, - 82,105, 6,131,193, 96, 48, 24,140, 87, 8,155, 84,154,193, 96, 48, 24, 12, 6,227, 53,193, 38,149,102, 48, 24, 12, 6,131,193, -248,255,108,184,152,209, 98, 48, 24, 12, 6,131,193,120,133, 38,171,172,217, 98, 57, 90, 12, 6,131,193, 96, 48, 24, 47, 65,101, - 57, 90, 4, 64,175, 10,190,116,190, 26, 46,174, 87, 13, 54,234, 60,211,100,154, 76,147,105, 50, 77,166,201, 52,255,183, 52,171, -210,174,142,255,248,111,229,111, 67, 61, 80, 74, 95,219, 2,160, 23,211,100,154, 76,147,105, 50, 77,166,201, 52,153,230,255,210, - 2, 96,114,201,107,214,116,200, 96, 48, 24, 12, 6,131,241,146, 17,172,138,254,199,140, 22,131,193, 96, 48, 24, 12,198, 75,192, -198,209, 98, 48, 24, 12, 6,131,193,120, 77, 16, 66,188,139, 71,132, 47,249,219,130, 25, 45, 6,131,193, 96, 48, 24,140, 87, 67, - 88,113, 84,171,228, 47, 51, 90, 12, 6,131,193, 96, 48, 24,175,138,138,198,209, 34,148, 82,132,135,135,211,226,245,110, 97, 97, - 97,151,217,225, 98, 48, 24, 12, 6,131,241,255,147,127,171, 23,121, 17,209, 10, 11, 11, 35, 0, 34, 88, 81, 51, 24, 12, 6,131, -193,248, 79,240,111,244, 34,188, 50, 78,178, 27, 43,102, 6,131,193, 96, 48, 24,255, 9,254,141, 94, 68, 80,198, 69, 50, 24, 12, - 6,131,193, 96,252, 71,248,191,234, 69, 8, 33,222, 0,194, 0,132, 23,255,125, 49,228, 3, 27, 71,139,193, 96, 48, 24, 12, 6, -227, 37, 61, 34,165,116,235,223,166,222, 41, 49, 97,197, 67,197, 51, 24, 12, 6,131,193, 96, 48,106, 64,121, 35,195,151, 24, 46, -102,180, 24, 12, 6,131,193, 96, 48, 94, 19,172,233,144,193, 96, 48, 24, 12, 6,227, 37, 41, 29,213, 42,221,124,200,123,205, 63, -218,139,105, 50, 77,166,201, 52,153, 38,211,100,154, 76,243,223,110,178, 40,165, 91, 75,150,210,166,139,141, 12,207, 96, 48, 24, - 12, 6,131,241,154, 96, 77,135, 12, 6,131,193, 96, 48, 24, 47, 65,217, 40, 86,233,166, 67,102,180, 24, 12, 6,131,193, 96, 48, - 94,129,217, 42,239,125,214,116,200, 96, 48, 24, 12, 6,131,241, 18,148, 55,188, 3, 51, 90, 12, 6,131,193, 96, 48, 24,175,217, -112, 17, 0,229,246, 28,160,148,158,175,134,112,181,123, 31, 84,165,207, 52,153, 38,211,100,154, 76,147,105, 50,205,127,159,102, - 85,218,213,241, 31,255,205, 6,235, 69, 83, 34,165,244,181, 45, 0,122, 49, 77,166,201, 52,153, 38,211,100,154, 76,147,105,254, -175, 46,172,233,144,193, 96, 48, 24, 12, 6,227, 53, 97,179,209, 34,132,184, 11,133,194, 47,164, 82,233,119, 82,169,244, 7,161, - 80,184,138, 16,226, 92,221, 31,148,203,229,211,189,189,189, 31,123,123,123,167,248,249,249,157,116,116,148,205, 8, 16,147, 46, -132, 16,225, 43, 8,221,241, 8, 33, 65,132,144, 25, 82,169,244,145, 68, 34, 73, 36,132,236, 34,132,204, 32,132,184,189,140,246, -146, 90,100,104,244,140, 65, 71,150,212, 34, 67,203,252,102,152,151,151,215, 85, 66, 72,239, 87, 85, 40,163,100,164,215,112, 57, - 73, 30, 46, 39,201,163,100, 53, 31, 20,206,209,209,241, 29, 31, 31,159,235,110,110,110,169, 62, 62, 62,127, 72, 36,146, 97,213, - 60,158, 30, 94, 94, 94,223,250,250,250,198,214,170, 85,107, 93,241,236,228,255,181,116, 17,147,206,237,197, 68,217,193,158,168, - 59,217,147,239, 58,216,147, 55,122, 19, 34,173,225,185,212,137, 16,114, 80,161, 80,220, 17, 10,133, 39, 8, 33, 67,138,207,175, - 33, 66,161,240,132, 66,161,184, 67, 8, 57, 72, 8,233, 84,195,243,244, 91, 66, 72, 42, 33,100, 89,241,250, 71,190,190,190,234, -102,205,154, 37, 54,107,214,236,231,192,192,192,119,109,213,147,201,100,111,248,250,250, 30,242,243,243, 75,236,208,161, 67,110, -237,218,181, 99,234,212,169,179, 67, 44, 22,119, 99,183, 56, 6,131,193,248, 15, 99, 67,120,176, 63,128,229, 0, 54,222,187,119, - 47,146, 82, 26, 73, 41,141,188,119,239, 94, 36,128,239, 0,172, 64, 5, 33,196,178,239,187,186,186, 46, 90,178,100,137, 62, 61, - 61,157, 42,149, 74, 26, 27, 27, 75,215,206,159,205,245,113, 17,208,250,238,206, 90,111,111,239,103,126,181,107,239,109, 44,231, -205, 6, 16, 80,157,112, 37, 0,103,137, 68,114, 99,254,252,249,154,171, 87,175,106,140, 70,163,134,227, 56, 77, 90, 90,154,230, -252,249,243,154,142, 29, 59,106, 0,124, 2,128, 95,147, 16,232,215, 62,184, 76,127,250,146,126,237,131,203,165,223, 15, 14, 14, -126,200,113, 28, 29, 58,116,168, 1, 64,173,151, 9,171,214, 2,196,141, 29,225, 52, 76,142, 76,203,142,197,148,110,158, 73,135, -201,144, 92, 19, 77, 15, 15,143,163,211,167, 79, 47, 72, 77, 77,165, 6,131,129, 38, 39, 39,211, 41, 83,166,168, 60, 60, 60,118, -219,120, 60, 93, 67, 67, 67, 51,175, 95,191,206,229,231,231,211,136,136, 8,174, 73,147, 38,153, 0,188,171, 27, 82,246,240,240, -216,234,227,227,115,178, 58,139,135,135,199,182,234,150, 81, 91,123, 36,155, 34, 47, 81,122,235, 44, 61, 54,180, 61, 93,219,170, - 54, 29,226, 98,151,223,201, 14, 31,117, 5, 4,213, 56,151,134,119,237,218,181,240,254,253,251,214,156,156, 28,250,240,225, 67, -110,210,164, 73,122, 0,209,147, 38, 77,210, 63,124,248,144,203,201,201,161,247,239,223,183,118,237,218,181, 16,192, 68, 91,183, -179,184,114,179,125,225,194,133,148, 82, 74,151, 44, 89, 66,155, 54,109, 74,123,244,232, 65, 53, 26, 13,165,148, 38, 82, 74,127, -182, 88, 44,227,108,209, 84, 40, 20,239, 76,159, 62, 93,163,213,106,105, 9, 28,199,209,252,252,124,186,113,227,198, 66, 47, 47, -175,147, 0,220, 88,243, 4,211,100,154, 76,147, 53, 29,190,214, 84, 41,111, 0,147, 75, 45, 47,158,149, 85,125,113,212,236,217, -179, 75, 76,213,169, 78,157, 58,221, 28, 55,110, 92,228,184,113,227, 34, 59,117,234, 20, 1,224,204,237,219,183, 35,103,205,154, - 21, 9, 96, 84,101, 5, 1,192,185, 67,135, 14,249, 25, 25, 25, 52, 48, 48,144,214,173, 91,151,102,100,100, 80, 74, 41,189, 53, -188, 37,189,208, 8,244,249,149, 83,244,236,111, 7,233, 36,111, 1,237,236,173, 48,123,123,121,229,184,185,185, 45, 69,241,228, -215, 21, 21, 46,128,193,141, 26, 53, 82, 71, 71, 71,107,158, 60,121,162, 89,180,104,145,166, 71,143, 30,154,208,208, 80,205,144, - 33, 67, 52, 27, 54,108,208,152, 76, 38,205,182,109,219, 52,142,142,142,209,101,205,214,203, 24, 45,129, 64,176,254,222,189,123, -244,217,179,103, 20,192,183, 21,105, 2, 80, 56, 57, 57,245,117,118,118,254,196,201,201,169, 47, 0, 5,165, 20,129,128,188,153, - 2,190, 31, 53,171, 31,124, 98, 84,175,128,141,189, 90,183, 28,230,192,203, 55,111,154, 73,233, 80,223, 26, 25, 45,133, 66,241, -206,140, 25, 51,212, 6,131,129,106,181, 90,170,209,104,168, 86,171,165,106,181,154,142, 26, 53,170, 64, 44, 22, 15,174, 74,211, -205,205,109,241,149, 43, 87, 44, 25, 25, 25,244,202,149, 43,244,228,201,147,116,243,230,205,156,135,135,199,154,234, 94,128, 94, - 94, 94,231,206,158, 61, 27, 25, 21, 21, 21,121,227,198,141, 72,179,217, 28,105, 50,153, 34, 77, 38, 83,228,137, 19, 39, 34, 15, - 31, 62, 28,185,111,223,190, 72,163,209, 24,105, 52, 26, 35, 13, 6, 67,164,191,191,255,233,234,150, 81, 27,123, 60, 55, 94, 61, - 70,233,154, 15,168,234,155,105, 52,255,211,126, 52,107, 74, 23,250, 93,235,218,180,139, 4,199, 75,159, 71,149,105, 10,133,194, -203,137,137,137,220,220,185,115,141, 33, 33, 33,170,241,227,199,235, 13, 6, 3,165,148, 82,131,193, 64,199,143, 31,175, 15, 9, - 9, 81,205,157, 59,215,152,144,144,192, 9, 4,130,243,213, 48, 90, 43, 74, 76,214,229,203,151,105,105, 52, 26, 13,237,209,163, - 71, 98,211,166, 77,127,174, 87,175,222,232,170, 52,229,114,249,192, 57,115,230,104,104, 57,152,205,102,170, 86,171,105, 66, 66, - 2, 87,183,110,221, 52, 0,174,236,102,206, 52,153, 38,211,100, 70,235,181, 25,173,201, 21,173, 87,122, 16,103,205,154, 21, 73, - 41,141,156, 55,111, 94,100,113,100, 75, 4, 64, 94,188, 8, 0,140,156, 51,103, 78, 36,165, 52,114,246,236,217,145, 0,250, 87, - 98,180,250, 31, 56,112,192,180,110,221, 58,234,233,233, 73,189,188,188,232,250,245,235, 41,199,113, 52,227,196,110,122,161, 17, -232,163, 47,198, 82, 74, 41,141, 93,250, 33,189,208, 8, 52,110,203,215,116,204,152, 49, 90,169, 84, 58,170, 18, 3,227,210,178, -101, 75,181, 78,167,211,236,216,177, 67, 35,149, 74,111, 1, 8, 1, 32, 68, 81,175, 74, 57,128,119, 67, 66, 66, 10, 30, 60,120, -160,217,179,103,143, 6,192, 34, 27, 35, 27, 1, 0,186,203,100,178, 33,115,106, 9,159,208,159,190,164,115, 60,113, 31, 64, 19, - 0,238,197,159,241,153, 61,123, 54,165,148,210, 58,117,234, 92,169, 96,223, 21,161,161,161,179,159, 60,121,178,192,108, 54, 47, -136,138,138, 90,208,176, 97,195,185, 3,252,189,219, 31, 25,245, 70, 11,213,215,211, 90,208,213,159,134,174,122,179, 77,175,189, - 35,186,141,122,175,158,219,213,241, 30, 98,237,219, 10,190,122,164,244,111, 58, 54,157,216,181,106,213,186,145,156,156,252,194, - 92,169,213,106,154,154,154, 74,227,227,227,233,213,171, 87,169,183,183,247,133,170, 52,189,188,188, 30, 38, 39, 39,211, 45,107, -215,210,161, 77,130,105, 23, 39, 7,218,213,217,129,182,146,139, 11, 27, 1,173,170,107,180,238,220,185, 19, 9, 32, 18, 64,100, - 78, 78, 78,100, 78, 78, 78,100, 94, 94,222,139,247, 0, 68,170, 84,170, 72,149, 74, 21,105, 52, 26, 35,235,215,175, 95,109,163, -213, 81,140,142,109,197,200,109,111, 15, 93,255, 90,110,105,211,252,221,172,127,142,106, 79,243, 62,232, 65,215,181,168, 69, 59, -217,225, 35, 27,203,189,191,157,157, 93, 4,128,153, 0,248, 0,198,246,237,219, 87, 75, 41,165,125,251,246,213, 2, 24, 91,252, -254, 12,129, 64,112, 30, 64, 95, 91,182, 19, 0,175, 65,131, 6,133, 37,145, 44, 0,215, 26, 52,104, 80,216,180,105, 83,218,180, -105, 83, 90,167, 78, 29, 53,128,177,182,222,208, 2, 2, 2, 98,117, 58,221, 11, 3,152,159,159, 79,211,210,210,104, 92, 92, 28, -141,142,142,166,183,110,221,162,137,137,137,116,255,254,253, 86, 39, 39,167,112,118, 51,103,154, 76,147,105, 50,163,245,250,140, - 86,217,229, 31, 70,235,196,137, 19,180,204,151,190,185,125,251,118,228,156, 57,115, 34,203, 58,181,178,226,243,230,205, 43,137, -122, 45,175,228,225,191, 45, 54, 54,150,142, 29, 59,150, 6, 5, 5,209,160,160, 32, 58,110,220, 56,170, 82,169,168,230,233, 3, -122,161, 17,232,173,183, 91, 81, 74, 41, 85, 63,138,162, 23, 26,129, 70,142,233, 64,239,222,189, 75,107,215,174,125,182,146,223, - 63,254,199, 31,127, 40,119,239,222,157, 1, 96, 87,177,193,106, 7, 96,189, 68, 34,217, 94,220, 92, 88, 23,128,115, 96, 96, 96, -174, 86,171,213, 12, 29, 58, 84, 3,192,183, 18,205,174, 65, 65, 65,207,182,109,219, 70,179,178,178,104,110,110, 46, 93,217,177, - 33,165, 63,125, 73,151,180,170,203,109,217,178,197, 48,115,230,204, 66, 23, 23,151, 19, 0,124,134, 14, 29,106,161,148,210, 46, - 93,186,100,150,167,231,228,228,212,247,201,147, 39, 11,244,122,253,130,252,252,252, 5,185,185,185, 11,142, 29, 57,178,160, 79, -147,134, 99, 85, 95, 79,107,113,100,212, 27, 45,222,172,229, 60,100, 77,239,214, 83, 83,231, 78, 28, 58,175, 67,200, 35,253,138, -143, 47, 13,247,247,252,182, 38, 5,238,238,238,158,110, 48, 24, 40,128,127, 44,207,158, 61,163,174,174,174,201, 85,105,184,184, -184,204,155, 49,114,132,117,112,221, 90,244,217,186,249,212,124,110, 15, 53,159,220, 65,159,126,243, 41, 29,224,229, 86,208, 78, -196,155, 99,235,246,120,121,121,157,187,113,227,198,223,140, 86, 94, 94, 94,185, 70,171,160,160, 32,210,104, 52, 70, 54,104,208, -224,244,203,158,248,237,236, 80,191,171,132,127, 43,106,108,103,170,156,214,131,246, 85, 8, 19, 95,226, 34, 26, 9, 32, 2,192, -152,106,126,143, 7, 96, 69,137,161,250,230,155,111, 40,165,148, 54,104,208,160, 16, 0,239, 37,182, 71, 17, 28, 28, 28, 63,113, -226, 68, 75,163, 70,141,178, 58,118,236,152,127,243,230, 77,122,249,242,101,122,242,228, 73,122,240,224, 65,250,224,193, 3,154, -154,154, 74, 99, 99, 99,105, 88, 88, 88, 62,128,174,236,134,200, 22,182,176,229,191,121, 41,235, 69,254, 53,189, 14,195,195,195, -105, 88, 88, 24, 9, 15, 15,167,197,201,186, 10, 0,226, 86,173, 90, 41, 87,172, 88,177,186,120, 14, 31,210, 84, 64,134,247,148, - 10,239,246,148, 10,239, 54, 21,144,225,132, 16, 66, 41,221,186,116,233,210,197, 77,155, 54, 77, 7, 32, 33,132,120, 85,144, 11, -214,217,213,213, 21,201,201,201, 80, 40, 20, 80, 40, 20, 72, 78, 78, 6,165, 20, 22, 10,152, 41, 96, 48,153,160,211,233,160,231, - 40,116, 28, 80,160,209,192,203,203, 11, 38,147,169,126, 5, 73,197,205,222,126,251,237,250,161,161,161,202, 89,179,102,165, 1, -152, 8, 96,251,132, 9, 19,206, 93,187,118, 45, 84,163,209,228, 70, 71, 71,235,155, 52,105,210, 23,128,215,147, 39, 79,222,217, -184,113, 35,198,142, 29, 11, 0, 93, 43,208,108, 18, 22, 22,118,242,193,131, 7,245,199,140, 25,131,136,136, 8,172, 92,185, 18, -217,217,217, 20, 0, 12, 6, 3,181, 90,173,166, 14, 29, 58,152,214,173, 91,215,166, 75,151, 46, 55,252,253,253,249, 0, 16, 31, - 31,255,180, 2,205,134,126,126,126, 48, 24, 12, 80, 42,149,120,240,224, 1, 28, 20, 10,220, 75,203,246,236,182,102, 75,206, 23, - 71,206, 9, 71,182, 9,117,249,228,141,142,134,101,103, 35, 2, 67,124, 60, 61,141, 38,179, 87,108,122,102, 90, 77,242,238, 68, - 34, 81,114,118,118, 54,140, 70, 35,116, 58, 29, 10, 10, 10,144,147,147,131,236,236,108,164,165,165, 65, 36, 18, 61,171, 50,145, - 62, 55,247, 74,252, 31,151,201,254,239,191, 65,125, 75, 46, 4,135,214, 67,112,244, 59, 4, 24,149,248, 97,254, 20, 7,163,171, -251, 66,133,163, 99,158,179,179,243, 86, 66, 72,131,170,244, 90,180,104,129,156,156, 28,228,228,228,192,213,213, 21,206,206,206, -112,118,118, 70,126,126, 62, 84, 42, 21, 10, 10, 10, 16, 24, 24,136,102,205,154, 97,231,206,157,175, 36,255,240,186,129,198, 89, - 96,157,118, 46, 38, 13, 34,153, 12,254,206,114,191, 54, 14,196,165,146, 36,245, 30, 34,145,232,128,171,171,235, 89, 66,200, 7, -132, 16, 25, 33,228, 3, 87, 87,215,179, 66,161,112, 16,128, 37,148,210,221,213,220,140,101, 11, 23, 46,156,253,228,201, 19,233, -221,187,119, 49,107,214, 44, 44, 90,180, 8, 79,159, 62,221, 68, 41,229,138,127,247,125, 55, 55,183, 19,124, 62,255, 71, 66, 72, - 63, 66, 72, 95, 31, 31,159,158, 85,232, 14,154, 57,115,166,190,101,203,150,177,143, 30, 61, 26,244,199, 31,127,180,250,244,211, - 79, 85, 73, 73, 73,136,141,141,133,183,183, 55,234,212,169, 3,141, 70,131,188,188, 60, 12, 26, 52, 72,225,232,232, 56,138,101, -165, 50, 24,140,255, 86,202,122,145,255, 75,148, 29, 71,171,244,122,185,189, 14,165, 82,233,194,200,200,200,246, 77,155, 54, 21, - 0,216, 15, 0,161,124, 12, 27,212,161,249,246, 35, 91,191,105,122,120,221,252,166,125,154, 6,110, 15,229,163,164, 23,219,137, - 86,173, 90, 57, 71, 70, 70,118,176,183,183,255,168,162,188,123, 0,112,118,118,134, 66,161,128,147,147, 19,156,157,157,193,113, - 28, 52, 90, 61, 10,173,128, 90,111,132, 74,165,130,186,120, 93, 99, 48,161,176,176,240,197,119,203,161,219,196,137, 19,149, 27, - 55,110,204, 74, 79, 79,255, 6, 64,147,177, 99,199, 14,220,176, 97, 3, 46, 94,188,168,239, 23, 20,224,186,180,115,243,197, 33, -233, 79, 23, 4, 9, 49, 9,192,149, 43, 87,174,160, 67,135, 14, 32,132,140, 40, 79, 80, 34,145,124,183,119,239, 94, 73,116,116, - 52, 2, 2, 2,162, 71,140, 24, 49,252,155,111,190,169, 47,211,228,254, 14, 0,150,156,140,232, 15, 63,252,240,203,165, 75,151, - 42,149, 74,165, 73,171,213,122, 12, 24, 48, 0,201,201,201, 72, 77, 77,189, 86,129,201,140,141,138,138,162, 42,149, 10,113,113, -113,136,138,138,146,124,249,229,151,109,172, 60,222,192, 20, 56,188, 55,182, 99,171, 54, 99,218, 53,199,238,235,119, 69, 87, 99, -226,157, 90,213,173,229,124,231,121,122, 61, 51,193,179,154, 20,184, 90,173, 94,191,120,241, 98,141, 70,163, 65, 74, 74, 10,238, -223,191,143, 71,143, 30, 33, 49, 49, 17, 43, 87,174,212,228,230,230,110,168, 74,195, 71, 44,248,236,219, 79, 39, 16,193,195,107, -192,221,203,128, 86, 13,232, 52, 48, 60,142,196,207,143, 51,176,249,208,111,118, 73,201,201, 78,251,246,237,155,232,235,235, 27, - 73, 8, 9,172,170,211, 5, 0,240,120,188,178, 39, 39,120, 60,158, 26, 64,134, 76, 38,123,238,224,224,240,156,199,227,101, 80, - 74, 11, 95,197,201,207,179,192, 4, 62, 31,176,147,128, 39, 20, 84,118,145, 12, 31, 49, 98,196,222,231,207,159,247,137,139,139, -107,191, 97,195,134,197, 98,177,248,222,134, 13, 27, 22,199,197,197,181,127,254,252,121,159, 17, 35, 70,236, 37,132,188, 91,157, -223,111,208,160,193,135, 11, 22, 44,192,202,149, 43,209,172, 89, 51, 4, 6, 6,106, 23, 46, 92,184, 30,192,124, 66,200, 71,129, -129,129,191,127,248,225,135,227,179,178,178,188, 82, 82, 82,154,109,218,180,105,202,250,245,235, 91,167,165,165,137,171,144,238, -212,187,119,111,156, 58,117, 10, 0,210, 41,165,113, 57, 57, 57,150,180,180, 52, 4, 7, 7,163, 77,155, 54,208,104, 52,208,104, - 52,200,207,207,135,159,159, 31, 56,142,107,207,110,229, 12, 6,131,241,255,207,112, 85,104,180,196, 98,177,115,139, 22, 45,224, -239,239,239, 92,156,139, 5, 87, 59,193,220, 79, 38,142,148,202, 35, 79,131, 68, 93,192,136,206,141,165,174,118,130,185,197, 95, - 17,248,249,249,217,183,104,209, 2, 50,153,172, 86, 5,191, 31,145,145,145,129, 22, 45, 90,192,201,201, 9, 10,133, 2, 45, 90, -180,128,201,100,130, 74,173, 70,161, 21,208,154, 57,168, 84, 42,228, 42, 51,161,181, 2, 22, 7, 87, 36, 38, 38,130,207,231,199, - 87,160,233, 29, 16, 16,160,188,119,239,158, 18,192, 21, 0, 83, 23, 45, 90,132, 57,115,230,224,171,175,190,218, 43, 77, 79,232, -189,247,212, 81,215, 95, 23,190,239, 30,104, 71, 70, 2, 48, 61,127,254, 28, 78, 78, 78,144,201,100,229, 26,131, 46, 93,186,180, -148,201,100,216,177, 99, 7, 77, 73, 73,233, 72, 41, 61, 72, 41,141, 39,164,200,236, 73,120, 80, 81, 74,215, 71, 70, 70,182,253, -242,203, 47, 99,122,245,234, 37,108,215,174, 29,150, 44, 89, 2, 0, 39,202,211,204,207,207,255,243,221,119,223, 53, 94,186,116, - 9,143, 31, 63,150, 29, 57,114,100,216,146, 37, 75, 26, 39, 37, 37,217, 31, 63,121,250,205, 93,207, 11,134,125,115,246,170,120, -233,153,136, 63,221, 28,101, 33,245,220, 92,254, 31,123,223, 29, 22,197,213,190,125,159,221,217, 2,236,210, 97,233,160,162,136, - 5, 84,236, 93, 99,143, 29,177,151,216, 99,121, 53, 26, 53,182,128, 24, 53, 70, 99,108, 49,209,196, 22,209,136, 5,141, 98, 39, -246,196,142,162, 32, 10, 34, 8, 72, 89,218,238,178,203, 22,182,156,239, 15,129,151, 24,202, 98,146,223,247, 38,153,251,186,230, -162,204,204, 61,231,156, 57,103,230,158,231, 60,231,121, 16,251,234, 53,223,200,197,221,218,110,106, 7, 62, 51,173,167, 37, 47, -182,155, 5, 55,187,167, 37,239, 65, 59, 62, 51, 85,161, 80, 68,158, 58,117,234,194,194,133, 11,149, 82,169, 20,214,214,214, 40, - 40, 40,192,186,117,235,148,177,177,177,199,181, 90,237,233,218,120,141, 38,218,218,171,158, 55,240, 34,174,226,127,165, 38,138, -187, 58, 62, 6,125, 56, 31,254, 77,154, 64,167,211, 33, 32, 32,128,132,135,135,139,108,109,109, 23,215, 42,122, 56,191,235,110, - 6, 66, 72, 14,165,244,181, 82,169,204,180,180,180,124,197,231,243, 95, 21, 22, 22,102, 82, 74,115,255,132, 14,207,161, 28,124, -220, 41,160, 17, 32,180,196,171, 2,101,214,221, 98, 90, 88,213,177,214,214,214, 83,119,236,216, 97,177,103,207, 30,253,220,185, -115,181, 51,103,206,228,169,213,106,201,204,153, 51,121,115,231,206,213,238,217,179, 71,191, 99,199, 14, 11,177, 88, 28,252, 46, -101,209,235,245,136,139,139,251, 34, 41, 41, 73, 68, 41,253, 8,192,252, 85,171, 86, 77, 74, 74, 74,178,216,190,125, 59,142, 29, - 59,134, 99,199,142, 97,232,208,161,152, 55,111, 30,194,194,194,106,170,151, 85,139, 22, 45,130, 28, 29, 29,113,237,218,181, 44, - 74,233, 43, 66, 72,107,177, 88,108, 61,116,232, 80,244,235,215, 15, 26,141, 6,165,165,165, 21, 66,139,203,229,194,206,206,206, -145,125, 12,178, 96,193,130,197, 95, 43,178,222, 22, 91, 12, 0,148,155,234, 6, 14, 28, 72,106,122, 49, 26,139,164,144,169, 74, -144, 38, 47, 65,122,145,233, 55,251, 76, 38, 83,141, 5,200,202,202, 58,125,235,214,173,169, 65, 65, 65, 76, 86,214,155, 25,177, -160,160, 32,148,148,148, 32,235,209, 29,168, 76,128,168, 97, 32, 84, 42, 21,138,158, 62,132,184, 69, 71, 56, 14, 28,143,175,182, -111,215, 22, 20, 20,236,172,138, 83, 32, 16,240, 60, 61, 61,243, 94,190,124,105, 0, 80,104,107,107,219,215,219,219, 27, 87,175, - 94, 5,128,131, 20,216,136,216, 43,192,181, 40,208, 55, 38, 21,177,143,143, 15,164, 82, 41,148, 74,229,213,170, 56,111,221,186, -149,164,215,235, 3,134, 12, 25, 66,126,248,225,135, 35,132,144, 80, 0,143,151,187,130,251, 40, 35, 23, 42, 35, 44, 8, 33,125, -236,237,237, 63, 10, 11, 11,235, 53,119,238, 92,156, 58,117, 10, 23, 47, 94, 44,197, 27, 95,176, 91, 85, 88,115,228,132,144, 93, -139, 22, 45,234,192,225,112, 62,188,116,233,146,193,207,207, 79, 81, 90, 90,106,108,236,239,207, 9, 13, 95,205,140, 99,206, 5, - 0, 0, 32, 0, 73, 68, 65, 84,159,243,225, 12,187,130, 18, 36,244,107,236,214,137, 16, 32,225,181,244, 85, 82, 49, 45,168,169, - 77,187, 11,153,232,209, 93, 91,116,155, 58,122,176, 88,212,176, 25, 84, 79,238,184,238, 58,122,246,171, 30,150,204,160, 92,181, - 97,168,173,173,109,200,213,171, 87,231,232,116,186, 6, 66,161,240,133, 76, 38,219, 82, 92, 92, 92,171,200, 98, 24,102, 96,160, -151,167,189,172,176, 16, 22,101,150, 40,133,222,132,124,173, 1,137,118,126, 24,235,233, 85, 49, 13,154,147,147, 3, 87, 87, 87, - 98, 52, 26, 7,215,196,121,241,226, 69, 12, 26, 52,168, 92,120,130, 16, 2, 66, 72,190,191,191,127,174, 80, 40, 44,224,243,249, -138,141, 27, 55,106, 52, 26, 13, 24,134,177, 48, 26,141,220, 63,210,225,219,139,136,164,155, 37,249,102,230,144,158,189, 91, 54, -107, 66,175,223,123, 68,138, 74, 52,251,106,176, 2,126,221,168, 81, 35,166,176,176,240, 52,128, 68,189, 94,127,232,200,145, 35, - 22, 19, 38, 76,208, 28, 61,122,116, 28, 0,223, 77,155, 54,133, 40,149,202,239,234, 82,142,228,228,228,175,215,174, 93,251,201, -138, 21, 43,112,224,192,129,185, 0,150,150, 89,186,134,134,133,133, 97,227,198,141, 56,112,224,128, 41, 49, 49,241,172,201,100, - 74, 94,184,112, 97, 11, 23, 23,151,252,236,236,236,228,240,240,240,234,104,219,244,239,223, 95,123,243,230, 77, 65,113,113,241, - 13, 66,200, 71,179,102,205,154,214,190,125,123,197,232,209,163,197,133,133,133, 50, 43, 43, 43,193,238,221,187,237, 25,134,129, - 74,165, 2, 33, 4,197,197,197, 58,246, 81,200,130, 5,139,255, 85, 84,167, 69,254, 14,168, 72,183, 83,213, 59,181,170, 10,150, -148,148,228,166,167,167, 55,121,253,250,181, 1,128, 1, 0, 10,116,134,207,215,238,142,218, 19,220,161,145, 40, 91,175,199,201, -123,241, 37, 5, 58,195,231,229,150,137,215,175, 95, 23,191,122,245,202, 90,173, 86, 43,171,185,214,175,223,124,243,141,250,202, -149, 43,214, 41, 41, 41, 48, 26,141,104,221,186, 53,158, 63,127,142,162,196, 56,136,154,180,134,168,251, 32,196, 63,184,135,216, -139, 49, 72, 85,234, 12,207, 86,174,149, 43, 85,170, 48,157, 78,119,178, 42, 66, 30,143, 87,248,166,126,212, 8, 0, 10,133,226, -177, 82,169,236,234,226,226,130,132,132, 4,145,202,136,121, 33,203,190,218, 70, 41, 53,242,223,172, 20, 91, 48,122,244,104,220, -191,127, 31, 0,238, 87,197,169, 80, 40,230, 78,159, 62,253,202,254,253,251,153,148,148,148,126,123,246,236,233,247,236,217, 51, - 74, 10,211,141, 55, 75,120,240,157, 52,175,237,183, 62,254, 23, 7, 13, 26, 4, 55, 55, 55,236,222,189, 27, 91,182,108,209,207, -158, 61, 59,105,203,150, 45,109, 1, 28,170,230, 38,200, 1,156,119,114,114,154,211,188,121,243, 98,149, 74,133,130,130, 2,100, -101,101,193,193,209,145, 99, 0,167,147,179,157,221,161,211, 57,197, 34,230,252,109,220,201,204,174,209,154,213,145,207, 76, 28, -211,163, 85,183,255,172, 88, 38,198,205,147, 32,211,195, 64,247,124,134,249, 31,132, 88,107,180,135,186,183, 97,152, 9,114,131, - 33, 2,192,177, 58, 42,242,254, 93,187,118, 61,188,118,237, 90,203,229, 27,214, 98, 83, 19, 15, 24, 10, 10,144,167, 53, 34, 95, -107,128,162, 40, 17, 9, 9,241,112,116,116, 66,106,106, 42, 52, 26, 13,158, 62,125, 74,185, 92,238,233,218, 44, 58,149,174, 81, - 62, 93, 40, 19, 10,133, 5, 60, 30, 47,151, 97,152,194,148,148, 20,149, 70,163, 1,135,195, 17, 25,141, 70, 75, 51,202,234,233, -228,228,180, 16, 64, 48,128, 83,197,249,249, 91,131,120,176, 3,131, 30, 13, 36,142, 3, 86,206,156,224,228,237, 46,145,165, 36, -189,208,239,188,240, 75,190, 70,139,207,107, 24, 36,209,149, 45,146,132,144,249, 71,143, 30,157, 6, 96,111, 89,222,173, 24, 0, -223,190,195,248, 91,121,252,248,241, 79, 86,172, 88, 1, 75, 75,203,138,224,169,150,150,150, 22, 0,240,227,143, 63, 34, 33, 33, -161,125,185,191, 22,128,195,102,112,250, 6, 6, 6,166, 68, 69, 69, 9, 0,184,207,154, 53,171,227,182,109,219,240,193, 7, 31, -228,197,199,199,119,120, 99,129, 37,190, 31,126,248,225,221, 3, 7, 14,216,155, 76, 38, 20, 21, 21, 65,167,211,189,100, 31,229, - 44, 88,176, 96,197,214, 95, 98,205, 10,162,148,198,150, 5,246, 30, 8,224, 12,165, 52,251, 55, 66,171,188,130, 0,160,209,104, -190,246,241,241,177, 5,224, 5, 96, 16,128, 83,143,141, 56,134,103,105,136, 75,205, 92, 86, 46,188, 30, 27, 43, 94,226,163,238, -222,189,171,171, 87,175,222, 35, 0,159, 85,243, 34, 83, 56, 57, 57,173, 89,184,112,225,186, 53,107,214, 48, 12,195,224,202,149, - 43,184,117,225,140,233,233,141, 59, 36, 77,109, 84, 43,238, 45,122,205, 80,227,109, 23,117,225,147,135, 37, 56, 78, 41,205,172, -169, 98, 42,149, 42, 61, 57, 57, 89,208,188,121,115,227,195,135, 15,157, 40,165, 39,206,158, 61,219,117,201,146, 37,184,122,245, -234,161, 75, 26,227, 88, 74, 77, 71, 8, 33, 12,128,177,131, 7, 15,254, 40, 36, 36, 4, 45, 91,182, 44, 5,112,160,154,114,222, - 36,132,140,205,200,200,216,181,120,241, 98,187,197,139, 23,131,195,225,144,202,109,149,159,159,143, 71,143, 30, 97,244,232,209, -242, 95,126,249,101, 94,175, 94,189,166,116,233,210, 5,231,206,157,115, 55,227,102,252,250,244,233,211,225,182,182,182, 36, 57, - 57, 25, 10,133, 2, 55,111,222,228,249,248,248,116, 58,114,228,136,176, 65,131, 6,136,127,242, 4,103,199,142, 29, 72, 8,241, -161,148,190,170,138,199,146, 71,230, 76, 26, 57, 88,172,189,121, 26,136,189, 14, 0, 80, 42,138,161, 78,141, 67, 72,187, 70, 54, - 87,159,166,205,194,155, 85,152,117,130,131,131,195,252, 77,155, 54,137,252,252,252,240,241,218, 13, 88,184, 98, 9, 62,148,248, - 64,241, 58, 29,249, 70, 64, 96,101,133, 53, 43, 87, 96,240,200,209,144, 72, 36,120,242,228, 9,221,189,123,183, 74, 46,151,111, - 52, 71,104,113,185, 92, 16, 66, 0, 64, 37,151,203,149, 2,129, 64,206, 48, 76,129,209,104,204,141,222,190,181, 53,167, 32,119, - 50, 33,132,107,105,226, 68,151, 45,182,168,210, 63,207,142, 16,159,134,190,190, 79,190,223,189, 91,212,190,125,123,114,239,222, -189, 57,179,102, 76,159, 22, 28, 88,255,236,176,222,221,224,234,230,170, 53,149,234,100,103, 79, 69,235,191, 61,122,246,154,142, -152, 22, 63,160, 84, 93,135,175,147,195,149, 69, 15, 33,100, 12,128,145, 0,162, 40,165, 7, 9, 33,147, 0, 12, 3,112,188, 58, - 7,121, 66, 8, 7,192,119, 35, 70,188, 73, 38,160, 86,171, 75,202,255,223,162, 69,139,202,215, 50,213,229, 30, 89, 89, 89, 89, - 91, 88, 88,188, 56,119,238,156,229,232,209,163,237,215,173, 91,247,250,131, 15, 62,240, 56,116,232,208,215, 0, 82, 9, 33,254, - 0, 26,170, 84, 42, 35,135,195,129,191,191, 63,118,236,216,161, 52, 26,141,123,217,199, 56, 11, 22, 44,254, 14, 98,235,111, 88, -236, 32, 0,177, 0, 6,150, 45, 32,156, 1,160,230,164,210, 0,214,198,197,197,149,199,208,154, 85, 83,120,135,165, 75,151, 62, -184,127,255,254, 3, 0,235,107, 91,230,200, 48,204,137,217,179,103, 83, 23, 23, 23,165, 68, 34, 57,193,227,114,167,121, 89, 34, - 8,239,176,212, 29, 64,215,136,136,136,161, 95,127,253,245, 64, 0,237, 1,240, 60, 60, 60,178,114,114,114,148,191,252,242,139, -178,115,231,206, 74, 39, 39, 39,105, 96, 96,160,114,211,166, 77, 74,189, 94,175, 92,184,112,161, 18,111,197,251,170,134,219, 2, -192, 28,129, 64,112,162,105,211,166,113, 43,135,188,167,223, 48,111, 26,157,212,200, 89, 9,224,107, 0,179, 1,216, 1,224,133, -132,132,252,252,244,233,211, 11,129,129,129,187,204,224,117,111,222,188,249,229,195,135, 15,223,143,138,138,122,176,120,241,226, -251,142,142,142,153, 73, 73, 73, 38,141, 70, 67,139,138,138,168, 76, 38,163,103,206,156, 49, 58, 56, 56,108,175,142,167,171,144, -155, 77, 47, 30,172, 50,132, 67,198,138,241,180,179,128,243,250, 93,150,161,138, 68,162,194,130,130, 2,154,147,147, 67, 83, 82, - 82,232,241,227,199,105,255, 78,237,104,228,135,193,244,224,212,161,116, 99,255,118,180,189,181,133,202,213, 90,124,223,218,218, - 90,106,103,103,247, 29,128, 70,181,133,119,208,106,181, 21,225, 27, 60, 61, 61, 31,248,251,251, 71, 5, 6, 6,126,117,234,212, -169,249,155, 55,111, 30,218,179,190,207, 39,235,250,117, 82,151,196, 28,165,197, 71,190,166, 75, 91,251,105, 2,185, 24, 89,109, -184, 16, 71,135,136,107, 87,175,154,202, 3,116, 26, 12, 6,122,242,196, 9, 58,106, 64,159, 56,249,249, 31,191,191, 17, 54,247, -240,194,214,126, 39, 59, 91, 96, 12,222, 10, 84, 90,213, 22, 36,134, 99, 55, 27,206,142,247,189, 29,178,187,218,114,190,238, 96, - 13,251, 74,247,108,148,159,159, 95, 10,165, 52,187, 73,147, 38, 41, 0, 14, 54,105,210,164,242,223,147,107, 11, 78,186,106,213, - 42,138, 55, 89, 20, 56, 0, 66,215,174, 93,251,128, 82,250,160, 81,163, 70, 55, 41,165,104, 41,130, 83,119, 91,206,247, 67,124, - 93, 10,186,219,114,190,111, 41,250,125, 52,119, 74, 41,124,248,104,220,213,217,234,198,208, 70,110,197, 61, 60,108,175, 31,220, -183,103,195,251,239,191,191, 27,192,118, 0,159, 57, 58, 58,222, 24, 51,102, 76,194,129, 3, 7, 18, 54,109,218, 84,154,148,148, - 68,167, 76,153,162, 18, 10,133,159,177, 75,199,217,141,221,216,141,221,254,242,200,240,110,117, 9, 88, 58,248,147, 79, 62,121, - 64, 41, 45,143,165, 53,161,138, 99,134,172, 88,177,226, 1,165,180, 60, 58,124,239,218, 2,154, 1, 88,181, 99,199, 14, 42, 20, - 10,191,255,163, 65,210, 0,184, 14, 27, 54,172,131, 66,161,104,235,226,226,210,182,204,234,228,229,228,228,148,114,232,208, 33, -165, 90,173, 86, 82, 74,149, 6,131, 65,121,255,254,125,101,143, 30, 61,148,120, 19, 2,194,172, 8,225,149,183,229,174,184,121, -111,229, 84,186,220, 21, 55,223, 58,119,252,222,189,123,207,189,124,249,242,180,141,141,205, 18, 51, 3, 87,122, 57, 59, 59,135, - 58, 56, 56, 92,112,114,114, 90,238,224,224,144, 93, 90, 90, 74,139,138,138,232,243,231,207,233,213,171, 87,233,173, 91,183,168, -131,131, 67,102,117,229,236,101,201,220, 46,218, 48,135,154,246,174,165,186,109,203, 40, 0, 42,219,188,148,230,127, 19, 78,239, - 77,239, 71,123, 88,112,127,125,151,160,115,118,118,118,223,157, 56,113,194,148,156,156, 76,163,163,163,233,153, 51,103,232,188, -121,243,104, 99,119, 55,109, 7, 1, 39,183,171,144,185,240, 46, 1, 75,181, 90,237, 3,133, 66,241, 64,169, 84, 62,104,218,180, -233,131,118,237,218, 69,117,232,208,225,171,163, 71,143,206, 95,183,110,221,208, 94,214,194,231, 37, 49, 71, 41, 93, 60,128,210, - 57, 93,232,139,105, 61,232,123,150,204,163,106, 57, 93, 92, 50,203,163,181,171, 84, 42,122,253,250,117,122,249,242,101,234,234, -228,164,232,102,201,157,209, 89,136,238,157,109, 96,103,110, 57,123,218,114,246,221,254,230,115,163,250,220, 1,250,227,164, 1, -134, 30,118,156, 29,149,142,139,164,148,102,143, 24, 49, 34,149, 82,154,125,252,248,241, 12, 74,105,118,112,112,112,106,153,105, -248,112, 85,156,111, 5, 39,221, 91, 38,178,230,172, 90,181,234, 1,165,244,193,170, 85,171, 30, 0,111,130,168,118,183,229,236, -191,179,107,163, 73,123,102, 63, 61, 58,101,160,177,187, 45,103,127,149,229,180, 99, 78,199,238,221, 76,117, 23, 14,210, 19,243, -198, 25,187,184,218, 92,243,243,243,219, 56,127,254,252,168, 91,183,110, 61, 54, 26,141, 9, 41, 41, 41, 9,219,183,111, 79,232, -216,177,227, 77, 71, 71,199, 56,129, 64, 48,155, 13,138,200,114,178,156, 44, 39, 27,176,244,255,207,198,212, 48,117,114,154, 16, - 34,162,148, 46, 12, 9, 9,193,250,245,235, 71, 5, 4, 4,140,241,240,240,112, 6,128,172,172,172, 18, 0,138,144,144, 16,132, -134,134, 98,195,134, 13, 95,149,249,178,252, 95, 58,159,229, 16, 66, 60,231,206,157, 43, 93,183,110,157,105,202,148, 41, 77, 40, -165, 79, 8, 33,141,199,141, 27, 55,135, 97,152, 16, 31, 31,159,192,236,236,236, 60,181, 90,125, 16,192,174,242, 57,211,186, 66, -200,129,177, 77, 61, 55, 92,224,192, 88,105,106,104, 64,104,104,232,232,224,224,224,210,205,155, 55, 27, 20, 10,197, 41, 51,203, -157, 1, 96,117,249,223,142,142,142,174,143, 30, 61,154, 45,145, 72, 56, 41, 41, 41,208,106,181, 72, 78, 78, 54, 1,248,169, 58, - 14,165,129,110,253,246,248, 37,255,133,227, 7,217,148, 36, 62, 4,159,203,133,158, 39, 64,206,237, 11,216,123, 61, 81,161, 42, -197,182,119,169,167, 76, 38,251,114,222,188,121,227,150, 44, 89, 98,225,227,227, 67,126,253,245, 87, 28, 57,114, 68, 43,149, 74, -251, 83, 74,175,189,235,189, 50,153, 76, 16, 8, 4, 0,128,165, 75,151,130,195,225,240,164, 82,169,128, 16, 34, 36,132, 88, 17, - 66,184,250,151, 9, 48, 41,138,144, 91, 36, 67, 70,174,172, 70, 62,163,201,116,228,206,157, 59, 11, 90,181,106,197,185,119,239, - 30,242,242,242,144,156,156, 76,141,148, 30,190, 86, 98,248,174,174,229,179,114,112, 28,214,210, 94,200, 17,236, 11, 69, 55, 29, -135,187,211,132, 17, 0,230,148,237,222, 75, 8,225, 3, 40,104,218,180,105,207,167, 79,159, 90, 54,109,218, 84,157,152,152,120, -142, 16,226, 1, 96,127,149,211,187,150,150,249, 0,242,143, 31, 63, 14, 0,211, 41,165, 38, 66, 72,235,176,176,176,236,235,215, -175, 99,213,170, 85,185, 0,118, 0,128,216,222,113, 72,160, 45,159, 8,126, 88,133,142, 90,112,182,153,104,149,139, 11,196, 18, -151,247,154,139, 56,224,237,249, 20,109, 93,253, 57, 2, 67,105, 64,120,120,248,117,165, 82,169,141,140,140,212, 77,158, 60,153, -155,148,148,116, 23,192,141,178,105, 77, 3, 59, 17,193,130, 5, 11, 22,127,185,143,214,219, 97, 29,170,246,209,170, 66, 16,252, - 72, 8,201,223,176, 97,195,123, 0,108,142, 30, 61,218,166,113,227,198, 0,128,231,207,159, 91,249,251,251, 63,107,209,162,197, - 83, 0,183, 41,165,167,205, 44, 79,249,131,223,244, 39,213, 47,126,201,146, 37,228,192,129, 3, 6,224,141, 8, 42,123,185,108, - 5,176,181, 38, 63,159, 63, 10, 63, 63,191, 62,159,126,250,169,110,207,158, 61,198,207, 62,251,236, 20,165, 52,233, 93,120, 10, - 11, 11, 55, 77,152, 48, 97, 92, 88, 88,152,173,181,181, 53,137,139,139, 51,237,221,187, 87, 81, 88, 88,184,169,186,115,238,232, - 12,145,221,133, 76,176, 76,117,180,207,168,160,122,214, 79,231, 14,196,243, 59, 55,112,240, 90, 66,113, 82,161,250,226, 61,131, -225,200, 59,138,215,100, 66, 72,203,208,208,208,165,165,165,165,193, 60, 30,239,174, 66,161, 8,167,148,254,250,174,237,164,215, -235,115, 27, 52,104,240,246,117,244, 38,147,137, 82, 74,121, 6,131, 65,228, 80,106, 58, 19,182,101,207,135,147,253,109,133,249, -249, 50,252,144,164,208, 86, 90,108,241, 59,228,229,229,125, 53,109,218,180, 15,194,194,194,236,109,108,108, 72,124,124, 60,141, -140,140, 84,230, 21, 20,172,127,151, 50,150, 20, 21, 94,140, 62,118, 52,164,139,206, 64, 34, 82,139, 41,195, 37,231, 42,149,245, - 18,128, 75,101,131,105, 60, 33,100, 4,128,147,148,210, 31,106,228, 44, 41,185, 8, 64, 48, 98,196, 8,196,197,197,141, 2,240, - 35,128,195,171, 87,175,238, 16, 26, 26,138,240,240,112,132,133,133,245, 1,112,161,184,168,224, 76,212,225,131, 99,123,232,245, -156,136,180, 98, 19,151, 67,206, 86,201,153,159,123,233,220,165,152, 33,109,109,220,201,119, 23,110,152, 74, 76,244,225,164, 73, -147,138,116, 58,221, 5, 0,219, 0,196, 81, 74,217,213,133, 44, 88,176, 96,241,127,107,248,249,174, 10,225,245, 93,173, 66,171, -236,228, 24, 0, 49,132, 16,215,206,157, 59,175,181,181,181, 21, 25,141, 70, 20, 22, 22,190, 6,176,165,204, 58, 83, 23, 68,202, -229,242,197, 66,161,112,231,159, 84, 57, 13, 33, 68,210,180,105, 83, 30, 0,109, 21,251,255, 28,145, 69,113, 60, 57, 41,217, 6, - 20,199,203,255,149,148,148,116, 56, 48, 48,112,104, 98, 98,226, 47,148,210,179,127,160, 14,175, 8, 33,173,230,205,155,247, 49, -128,161, 0,126, 42, 44, 44,220, 84,157, 35,124, 57,174,105, 13, 33,109, 25,102,220,195,180,156,217, 58, 19,173, 47,224,112, 94, -170, 74,233, 55,119, 13,134, 31,255, 96,155, 38, 3,152, 82,182,253, 97,228,231,231,215, 26,228,147, 16, 66,174,189,200,186,157, -144, 33,173,106,177, 69, 85,101,204, 38,132,180, 92,184,112,225, 66,147,201, 52,146,195,225,156,200,207,207,175,181,205,170,181, -228,233,140, 11,118, 94,185,199,223, 98, 52,245, 22,114, 56, 23,148,122,227,178,106,174,123, 16,128, 89,209,225, 95,188,120,241, -125,120,120,120,243,176,176, 48,124,251,237,183,229,203, 46, 99,194,194,194,164, 70,163,209, 43, 60, 60, 28,187,118,237, 50, 0, -128, 86,111, 90,180,231,250, 67,206, 78,147,105, 0,143,195, 57,167,213,155, 22, 85, 41,202, 53,134, 57,219,162,206,151,150,154, - 76,125,184, 32,231,178,117,166,149, 90, 45, 77, 99, 31,115, 44, 88,176, 96,241,191, 9,198,220, 3, 41,165, 57,127,198,139,151, - 82,154, 2,192,102,249,242,229,127,166,146,148,254,213, 13,245,105, 22,253, 26,192,215,159,126, 17, 89,249,186,119,129,218,131, -138,154, 43,182, 0,252,167,108, 51, 27,247, 12,134, 67,168, 38,164,196,223,236,107,128, 2, 56, 90,182,153,123, 78, 38,222,228, -178, 92,240, 71,175,255,176,132,102,227,205, 42,194, 63,179, 78,177,120,179, 10, 5,175, 95,191,174, 92,207,199,101, 27,202, 99, -202,221, 81, 81, 41,128,113,102,150,115, 20,251,232, 98,193,130, 5,139,255, 29, 84, 53,117, 88,103,161,197,130, 5, 11, 22, 44, - 88,176, 96,193,162,202, 15,235,106,125,131, 9,128,222,213,156,100,182, 99, 59, 33,164,247, 59, 20, 42,134,229,100, 57, 89, 78, -150,147,229,100, 57, 89,206,127, 23,103,109,220,255,215, 11,235,254, 47, 84,216, 95, 25, 87,130, 93,250,202,114,178,156, 44, 39, -203,201,114,178,156, 44,231,191,118,227,176, 6, 63, 22, 44, 88,176, 96,193,130, 5,139,119, 7, 33, 36,168,236,167, 27, 33,100, - 70, 89, 42, 30, 0,213,248,104,241,218,175,205, 53, 24, 12, 18, 0, 96, 24, 70,170,191,187,210,173,166, 11,240,128, 94, 6,224, -251, 50,194,233,250, 55,203,225,223,230,188,100, 48, 24,236,203, 56,139,244,119, 87,246,171,145,179,221,154, 11,191, 57,254,206, -138, 62, 85,212,140,203,107,183, 38,235,173,178,186,155,221, 50,101, 57, 18,255,234,114,254, 93, 56,255,205,224,119, 88,155,171, -215,191,233, 71, 60, 30, 35, 45,189, 83,115, 63,226,183, 95,147,245,155,227,111,175,112,169,137,211,202, 82, 88,208,208,195,249, -171,154, 56, 83,178,242, 23,170, 74, 52,142, 53,113,214,117,108,122,185,185,245, 50,150,141, 77, 46, 48, 61, 35, 43,235,210,255, - 82, 95, 34,132,180, 1,176, 18,128, 77,165,127,199, 81, 74, 63, 98,123, 37, 11, 22, 44,254, 70,168, 54, 5, 79,149, 66,203, 96, - 48, 72, 30,156, 8,131, 74, 11,244,154,184, 70,226, 59,108,215,239, 86,181, 25, 52, 69, 2, 89,124,100, 32, 87,175,176,119,102, - 74,109,178,178,178, 72,217,131,243,123, 0,222, 85,112,218, 63, 56, 17,134, 18, 29,208,109, 76,184,189, 55, 96,147,199,231,127, -108, 41, 18,245, 84,171,213,205, 1,192,210,210, 50, 94,173, 82, 93,113, 46, 45,221,244,246,241,213,213,172,114, 89,223,155,176, - 70,210,100,216,174,121, 70,147, 73,240,250,222,206,110,154,252, 36,134,103,208,238, 88, 14,156, 11, 3,140,230,180,212,111,174, - 59,114,153, 35, 15,120, 79, 96, 97,209,210,206,222,190,171,137,210,166, 38,147,137, 24, 13,134, 4,133, 92,126,195,100, 48, 60, - 50,232, 84,142, 15, 78,125,110,170,169,156,111,215,101, 36,192,156, 0, 66, 68, 98,113, 79, 46,143,215, 9, 0,140,122,253,175, - 42,165,242,202,112,224,152, 57,117, 55,183,125,222,245,248,127, 27,244,122,131,228,229,133, 48,104,245, 64,208,136,207, 37, 45, -198,253,112, 8, 0,116,210, 71, 46,202,164, 83,237, 1, 64,212,112,208, 29,161,107, 80, 46, 0, 48,175,178, 37,207,163, 87, 64, -171, 7,154, 14, 10,151,212,198, 57, 57,244,136,227,146, 25,193, 66, 0,184,120,252,235,198,151,163,190, 29, 0, 0,239, 5,207, - 58,215,119,196,220,231, 0,176,225,187, 40,199,195,159,143,170,145,211,188,177, 41,231,203,147,162, 27,233, 20,217,118, 94, 34, -198, 53, 41, 41,137, 3, 0,238,238,238,102,141, 77, 79,192, 54, 27,152,195,225,114,187, 54,108,212, 40, 8, 0, 77,121,241, 34, -214,104, 48,220,116, 3,118,252,201,125,105, 30,165,191, 13,206, 90,150, 11,147, 5, 11, 22, 44,254, 78, 56, 83, 38,174,206,188, -189,163,218, 85,135, 42, 45,112, 45, 25,232,222,161, 5,102,140,123, 95, 92,121,223,177, 93,225,222, 73,247,126,106,178,231,135, - 77,156, 22, 45, 90,224,229,203,151,102,149,162, 68, 7, 92, 77, 2, 32,123,106, 93, 36, 18,189,216,188,113,163, 77,159, 62,125, - 24,119,119,119, 16, 66,144,147,147,211, 33, 38, 38,166,205,130, 5, 11, 62,132,236,105, 81,137, 14,197, 87,205, 8, 1, 90, 94, -214,230,141,235, 97,229,220, 81,182, 0,176,124,226,142, 54,247,158,229, 58,188,120,241,162,215, 39,159,124, 82,192,189,114,229, - 91, 39, 96, 95, 46,144, 97, 78, 57, 15,156,190, 99, 97,155,253,163,239,248,185,115,143, 55,106,212, 72,236,227,227, 67,172,173, -173,193,229,114, 81, 84, 84,228,253,228,201,147, 1,119,239,222, 85,197, 92,251, 94,112,255,238,144, 20,169, 69,123,141, 89,117, - 87,103, 89, 92,180,182,142,159, 48,124,184,231,168, 81,163, 44, 26, 54,108, 8, 0,120,241,226,133,223,177, 99,199,198, 28, 63, -126, 60, 20,234, 44, 67,137, 14,154,218,234, 94,193, 9,192, 2,232,100, 39,145,140,231,242,120,205, 13, 6,131, 71,153,181,225, -181, 81,175,143,151, 73,165, 7,223, 62,158,197,239,161,213, 3, 79,179,129,222, 93,131, 48, 33,184,183, 8, 0, 62, 25,189,182, -195,171,212,100,190, 78,167, 67, 99,255,166,157, 63,251,252,171, 11,224,112, 16, 17, 21, 83,113,188, 57,156,113, 79, 95, 34,236, -179,205,200,122,124,172,131, 81,158,220,179, 88, 33,231, 2,128,141,173,109,240,177,200, 31,175,184, 7,134,220, 78,206, 47, 53, -139,179,166,177,121, 62,114,187, 91,230,147, 43,205,190,185,184,151,231,237,237,141,199,143, 31,215,109,108,202,159, 89,155,220, -220, 18, 54, 45, 94,236,218,173, 91, 55,136,197, 98, 48, 12, 3,131,193,208,251,230,205,155,189,195,194,194,102, 65,254, 76,101, -238,216, 52, 3,155, 8, 33, 61, 39,207,152,231,246,254,208, 16, 4,247,239,204,118, 68, 22, 44, 88,252,173, 64, 8,153, 81,182, -234,176, 98,229, 97,229, 85,136, 85, 10, 45,134, 97,164,125, 38,173,147,116,109, 31,128,123,143,158,203,211,210,179,149,229,251, - 10,227,143, 53, 30,218,217,163,217,245,235,215,160,213,106,241,235,175,191,226,209,163, 71, 72, 77, 77,197,204,153, 51,181, 12, - 48,189, 26,206,162,110, 99,194,237, 33, 79, 18,251, 9,158,213,143, 73, 76,228,106, 52, 26, 92,191,126, 29, 69, 69, 69, 16, 8, - 4,240,244,244, 68,223,190,125,153,196,196, 68,135, 94,125,250,219,118,235, 63,246, 37,108,253,148, 12,195, 20, 85, 87, 65,134, - 97,164,189, 38,174,145, 52,243,171,135, 23,105, 89,242,149,159,239, 81,154, 76,148, 73, 73,125, 85,122,237,218, 53, 4, 5, 5, -225,210,165, 75,142,133,133,133,159,238,216,177, 99, 37,239,139,111,182,234,117, 5,139,106,224, 43,234, 54, 38,220,222, 81,122, -212,231,242,249,147,252,248,248,120,254,206,157, 59, 81, 80, 80, 0,129, 64, 0, 59, 59, 59,184,186,186,162,113,227,198,100,249, -242,229,226, 65,131,226,241,159,233, 33, 62,165,190,211,158, 85, 87,206,138,186, 43, 95, 89, 57, 41, 46, 54,140, 58,115,134,211, -165, 75,151,223,124,182, 55,104,208, 0,253,250,245,179, 24, 63,126,124,195, 81, 99,198,153,186, 13,156,252, 2, 98,159,146, 90, - 57, 85, 25,150,142, 37,183,220,123,143, 25,115, 42, 60, 60,220,206,213,213, 21, 34,145, 8, 0, 32,151,203, 61,211,210,210, 58, -132,134,134,142,184, 19, 23,201,116, 27,148,145, 5,145,151,186,166,246,252,183,130,199, 99,164,229, 86, 36,107,145,101, 81, 70, -102,174, 10, 0,116, 58, 29,116, 58, 29,180, 90, 45,102,207,154,201,157, 62,162, 93, 35,159,174,243, 30,166,190,206, 45,108, 26, -115,219,161,252,220,218, 56,153,146, 84,153, 44,253,231,233, 97,139, 23,187,186,184,252,119, 70, 48,226,192, 1,110, 97, 97, 97, -239,176,176,176,102,212,170,135,172,233,160,112,187,154, 56,107, 26,155,178,231,103,234,127, 54,183, 95,203, 93,159, 71,195,104, - 52,226,214,173, 91,184,126,253, 58,190,250,234, 43,122,238,220, 57,185,141, 72, 84,203,216,124,102,221,197, 45,199,247,139, 47, -142, 19,161, 80,136,159,126,250, 9,137,137,137,224,112, 56,104,209,162, 5, 38, 76,152,128,222,189,123,187,206,152, 49,147,118, -235, 63, 58, 5,182,254,197,127,164, 47, 17, 66, 56, 0,230, 45, 11,251,194,109,226,180, 57,216,240,217,114, 86,104,177, 96,193, -226,111,107,205,170, 54,196, 3,165, 20,209,209,209,180,108,235, 78, 41, 5, 5, 56, 13,134,237, 58,124,244,190,233, 76,131, 97, -187, 14, 83,128, 67, 1,142, 13, 80,175, 85,171, 86,122,153, 76, 70,239,222,189, 75,103,207,158,173,218,186,117,235,149, 51,103, -206, 28, 51,148,150,238,118,119,115,251,146, 2,156, 42, 61,239, 1,142, 15, 96,107,101,101,149,151,158,158, 78,207,158, 61, 75, - 87,173, 90, 69, 15, 30, 60, 72,207,157, 59, 71, 99, 98, 98,232,185,115,231,232,225,195,135,105, 92, 92, 28,125,254,252, 57, 21, -137, 68,121, 62,128,109, 13,156, 92, 10,112, 27, 15,219,185,232,248, 61,125,184,255,176, 93, 11, 40,192,181, 7,154,180,106,213, -202,120,236,216, 49, 26, 17, 17, 65,127,248,225, 7, 26, 23, 23, 71,243,243,243, 41, 35, 20,229,149,159, 87, 93, 57, 41,192,241, -240,240,200,147,201,100,212,203,203,139, 10, 4, 2,234,226,226, 66, 27, 55,110, 76, 59,116,232, 64, 7, 12, 24, 64,199,141, 27, - 71, 63,253,244, 83, 42,147,201,168,133,133, 69,110,249,121,213,113, 6, 1,150, 34,145, 40,253,193,131, 7,180, 58,168,213,106, -154,159,159, 79, 47, 92,184, 64, 69, 34, 81,122, 16, 96, 89, 19,167, 37,208, 58, 48, 48, 48, 47, 63, 63,159,150,150,150,210,244, -244,116,250,228,201, 19,154,152,152, 72,211,211,211,169, 90,173,174,224,126,254,252, 57,245,245,245,205,179, 4, 90, 87,203,249, -111,222,202,251,196, 91,155,183,139,203, 0, 87, 87, 87,245,241,227,199,233,235,215,175,233,254,253,251, 41, 7, 88,251,187, 99, -107,224, 20, 0,125,187,116,233, 98,188,117,235, 22,125,248,240, 33, 93,186,116, 41,237,215,175, 31,237,223,191, 63, 13, 11, 11, -163,153,153,153, 52, 51, 51,147, 14, 24, 48,192, 40, 0,250,214,214, 63,171, 26,155,182,128,247,160, 65,131,212,165,165,165, 52, - 37, 37,133, 54,111,222, 60,147, 11,140, 23, 1,205,186, 3,194,218,250,167, 7, 96,239,230,230,150,125,235,214, 45, 26, 21, 21, - 69,125,124,124,242,184,192,100, 27,160,129, 13,208,128, 11, 76,110,208,160, 65,222,173, 91,183,104, 65, 65, 1,245,246,246,206, -246, 0,236,223,181, 47,225, 77,130,237,189,203,194,190,160,207, 50, 85,116, 89,216, 23, 20, 64,122, 89, 64,215, 75,108,159,100, - 55,118,251,247,109,191,211, 34,255,180, 85,135, 3, 7, 14, 36, 0,174,214, 36,217,212, 92,238,186, 13, 27, 54, 48, 26,141, 6, -123,246,236, 41, 30, 57, 98,196,209,238, 93,187,166,212,247,241,145, 17, 14,167,214,220,133,121, 66,225,252, 13, 27, 54,216,233, -116, 58,220,191,127, 31,109,218,180,129,171,171, 43,196, 98, 49,196, 98, 49, 36, 18, 9,252,253,253, 33,149, 74, 97,109,109,141, - 37, 75,150,216,230, 9,133,243,107,227, 53,153, 40, 3, 0, 70,147, 73,192, 7,102,248,182,109,123, 63, 52, 52,148,227,232,232, - 8, 7, 7, 7,136,197, 98, 36, 38, 38, 66,167,211,193,202,210,202,172, 32,173, 28, 14,135, 35, 22,139,113,249,242,101,204,155, - 55, 15,157, 58,117,130,157,157, 29,172,173,173,209,188,121,115,244,237,219, 23,211,167, 79, 71, 74, 74, 10,136, 25, 78, 37, 9, - 12, 51,103,250,244,233,146,160,160,160, 42,247,107, 52, 26,200,100, 50,228,229,229,193,211,211, 19, 33, 33, 33,146, 4,134,153, - 83, 29,159, 35,224,234,233,231,119,234,238,221,187, 78, 34,145, 8, 17, 17, 17, 56,121,242, 36,206,159, 63,143,179,103,207, 34, - 58, 58, 26, 63,253,244, 19,242,242,242, 0, 0,126,126,126, 56,114,228,136,147, 88, 34,137,118, 4, 92,217, 15, 16,243,240, 42, - 55,247, 98,243,156, 28,167,241,227,198,221, 80, 42,149, 24, 63,126, 60,214,173, 95,191,156,103,102, 52,122,127,192,214,193,205, -109,223, 23, 95,124,193,201,201,201,193,240,225,195,243, 55,173, 95, 63, 53,246,194,133,134, 15,206,159,111,184, 46, 60,124,106, -247,238,221,243, 51, 51, 51,113,224,192, 1,142,139,183,247, 62,127,192,182,174,229, 44, 6,230,109,217,178,197, 66,163,209,160, - 79,159, 62, 41,166,248,120,127, 3,240,163, 18, 72,188, 10,148,214,118,126, 54, 48,103,201,146, 37,174, 66,161, 16, 31,127,252, -113,126,201,171, 87, 1, 6,224, 7, 57,144, 38, 7,210, 12,192, 15,197, 47, 95, 6, 76,156, 56, 49, 95, 40, 20, 98,243,230,205, -174,217,255, 77,186,109,174, 5,171, 13, 33,228, 20, 33,228, 26,128,172,201, 51,230, 77, 14,106,215, 17, 7,118,239,192,231,225, -159,236, 3, 48,146, 16,114, 16,192, 34,182,231,177, 96,241,239,132, 57, 90,228,127,117,250,176,218,153,178, 10,187,215,153, 51, - 20, 64,143,154,136,236, 29, 29,219, 4, 4, 4,224,250,245,235, 8, 12, 12,188,107,103,103,103,224, 11,133,224,241,120,160,166, -218,115, 68, 91,138, 68,189,122,247,238,205,220,190,125, 27,190,190,190,176,180,180, 4,143,199,251,205,198,231,243,225,230,230, - 6,133, 66,129, 94,189,122,241,182,109,219,214, 11, 90,237,103,181,190, 16,147,158,136,243,110,127, 49,238,251,253,251, 26,116, -235,214, 13,114,185, 2, 38,147, 9, 86, 86, 86,208,233,116, 96, 24,230,205, 20,144,158, 42,204,105, 52,163,209,104,228,114,185, -240,245,245,197,186,117,235,160,209,104,192,231,243, 1, 0, 10,133, 2, 50,153, 12, 79,158, 60, 65, 90, 90,154, 89,249, 20,173, -109,109,223, 31, 53,106,148,160,170,125, 90,173, 22,114,185, 28,114,185, 28, 50,153, 12, 26,141, 6, 29, 59,118, 20,156,137,142, -126, 31, 5, 5, 85, 38,150,214, 90, 88,140, 56,112,224,128, 68, 32, 16, 64,173, 86,163,184,184, 24, 25, 25, 25,120,245,234,149, - 70, 42,149, 26,172,173,173, 57, 62, 62, 62, 28,161, 80, 40, 28, 54,108, 24, 81, 40, 20, 32,132, 96,208,160, 65,142,135, 34, 34, - 70, 1,248,138, 29,210,230,225, 34,160,109,173,211, 13,110,223,174,221,229,187,247,238, 5,205,159, 63, 31,113,113,113, 95, 88, - 69, 70, 94, 43, 1, 30,213,116,110, 10, 48,231,203, 74, 2,134,190,122, 21, 88, 10,228, 85, 58, 36,205,231,229,203,243, 19, 39, - 78,124, 28, 23, 23,231,180,121,243,102,215,145,195,135,207, 1,176,182, 46,101,180,182,181,109,235,230,230,134,115,231,206, 33, - 61, 53,245, 19, 3,160,174,203,249, 28, 46,183, 75,183,110,221,240,211, 79, 63, 33,243,213,171, 79, 12,191, 45,227,155, 15, 37, - 32,143, 73, 73,249,100,223,190,125,123,167, 76,153, 2, 46,195,116,129,193, 80,151,203,252,206,241,125,202,204,249,216,247,221, -182,125, 0,166, 81, 74, 77,248,147, 82, 90,177, 96,193,226,111, 58, 7,103,134, 22,249,187,136,173,242,169,196, 58, 89,180, 36, - 18,137,135, 88, 44, 70, 86, 86, 22,154, 54,105, 34, 21, 10,133, 16,240,120,176, 16, 8,204, 42, 68, 73, 73, 73,160,187,187, 59, -228,114, 57,156,156,156,192,231,243, 43, 54,129, 64, 80,241,187,181,181, 53, 56, 28, 14,188,189,189, 81, 82, 82, 18, 88, 43,111, -238, 19, 73,228,182, 89,179,111, 93, 59,215, 96,248,240, 96,216,219, 59,192,203,203, 19, 18,137, 4,150,150,150,240,242,242, 66, -195,134, 13,233,166, 77,155, 96, 37,105, 97,214,131,188,178,120, 98, 24, 6, 70,163, 17,185,185,185,120,246,236, 25,226,226,226, -112,235,214, 45, 60,124,248, 16,197,197,197, 48, 39,111,117,137, 90,221,146, 97,152, 42, 69,150, 76, 38,131, 76, 38,171, 16, 90, -121,121,121, 72, 75, 75,131, 82,165,106, 85,131,232, 13, 14, 8, 8,224, 2,128,165,165, 37, 90,181,106,133, 93,187,118, 25, 78, -159, 60, 57,186,217,173, 91, 14, 94, 23, 46,216,125,191,115,231,232,144,144, 16,227,237,219,183,161, 80, 40,240,244,233, 83, 56, - 59, 59, 51, 2, 11, 11, 54, 87, 94, 29,241, 0, 80, 57, 21, 23,247,239,212,169,211, 75,185, 92,142,141, 27, 55,114,120,214,214, -223,133, 3,220, 26, 79,228,114, 59,119,235,214, 13,167, 78,157, 66,214,171, 87, 75, 95, 85, 33, 96, 94, 1,121,233, 41, 41, 75, -247,237,219,135,190,125,251,130, 48, 76,157, 29,149, 58,116,232, 16, 96, 50,153,240,248,241, 99,216, 1,119,234,122,126,195, 70, -141,130,202, 45,191, 34,224, 70,117,199,137,128, 27,177,177,177,176,180,180, 68,211,102,205, 90,215,241, 50,155, 8, 33,217, 83, -102,206, 71,212,249, 95, 0, 0,251,190,219,150, 91, 73,100,177, 96,193,130,181,104,253, 45, 45, 90,229,194,170,242, 86,241, 33, - 91, 71, 18, 0, 0,143,199,131, 64, 40,132, 64, 32,120, 35,144,132,194,186, 40, 62, 88, 88, 88, 84, 8,171,202, 2,171,242,239, - 86, 86, 86,102, 9, 24, 0, 40, 74, 62,223,117,218,212, 41, 2,161, 80, 8,157, 78, 11, 74, 41,132, 66, 11,216,217,217,193,215, -215, 23, 10,133, 2,157, 58,119,215,102,200,248,209,142, 77,135,197,189, 75, 3, 26, 12, 6,168, 84, 42, 20, 21, 21,161,176,176, - 16, 10,133, 2,106,181,218,236,165,232, 38,147,137,155,145,145,129, 31,127,252, 17, 5, 5, 5, 0,222, 56, 90,151,139,171,242, -159, 47, 95,190, 68, 68, 68, 4, 82, 83, 83,235,116,127,186,118,237,138,232,232,104,110,143, 94,189,118, 95,242,241,201,186,228, -227,147,213,163, 87,175,221,167, 78,157,226,122,120,120, 32, 45, 45, 13,247,239,223, 71, 81, 81, 17, 40,165,236,250,249,119,192, - 11,160,168,164,176,112,202,242,229,203,169, 88, 44,198,198, 47,191,108,185, 22, 24,107,174,128,177,173, 65,192,216,254, 49, 1, - 3, 74, 41, 76, 38, 19,140, 70,227, 59,213,141, 16, 66,120, 60, 94, 93, 67, 43,144, 58,240, 87, 56,190, 47,249,116, 29,206,254, -116,172,124, 87, 18, 43,178, 88,176, 96,241,119, 71, 77,185, 14,153, 74, 10,178,226,103,117,200,205,205,125,173, 82,169, 26,248, -248,248, 32, 51, 51, 83,226,237,237,253, 74,192,227,129, 47, 16,128,112,106,215, 4, 86, 86, 86,143,179,178,178, 58,123,120,120, -192, 96, 48, 84,136,170,183,167, 14,203,173, 52, 15, 31, 62,132,149,149,213, 99,104,106,140,156, 0,163,174,168, 94,235,214,173, - 43, 44, 67,118,118,118,176,179,179,133, 80,104,129, 21, 43, 86,152, 54,111,218,180,195,251,189,112,249, 7, 11,150,211,229,107, -119,255,169,141,107,238,139,201,202,202,234,177,151,151, 87, 71, 91, 91, 91, 68, 69, 69, 33, 45, 45, 13, 69, 69, 69, 40, 41, 41, -129, 86,171, 69, 73, 73, 9,116, 58, 29, 44, 44, 44,208,172, 89, 51,216,216,216, 32, 38, 38,230, 49,180,218,170,197,101, 65, 65, -212,227,199,143, 59,182,107,215,174,194,162,210,179,103, 79,210,179,103, 79,167, 10, 43, 90, 73, 9,242,243,243,113,247,238, 93, -196,196,196,128, 16,130,164,164, 36,163, 86,173, 62,204, 14,139,119,131, 6,248,149,187,111,223,222, 15, 63,252,112,106,231,206, -157, 97, 4, 6, 0,136,248,255, 37, 96,202,113,235,214,173, 39, 70,163,177,115,227,198,141, 33, 3,218, 3,248,169, 78, 34, 50, - 57, 57,214, 96, 48,244,106,217,178, 37,162,142, 30,237, 10, 32,173,170,227, 84, 64,215,160,160, 32,168,213,106, 60, 77, 72,120, - 80, 7,145,181,123, 89,216, 23,147, 39, 78,155,131, 3,187,119, 96,223,119,219, 50,246,238,218,234, 5, 51,252,199, 88,176, 96, -241,175,178,102,213,170, 69,254, 23, 81,149,143, 86,185,248, 98,234, 66, 36, 47, 42,122, 16, 27, 27,219,160,117,235,214,216,189, -123,119,187, 78, 29, 59,190,230, 11, 4, 6, 1,159, 15,142, 25, 47, 18,181, 74,245,243,207, 63,255,220,126,216,176, 97,204,237, -219,183,225,234,234, 90, 33,180, 13,123,141, 42, 0, 0, 32, 0, 73, 68, 65, 84,202,127, 50, 12, 3, 74, 41,172,172,172,112,226, -196,137, 82,181, 74,245,115,173,214, 34,163,201,200, 41, 19,122,148, 82,200,100, 50,240,249,124,124,245,213,102,108,223,180,105, -156, 17, 56,230, 39,114, 94, 12,192,226,255,219, 11,186,164,228,242,217,179,103,219,132,134,134,242, 60, 61, 61, 33,147,201, 80, - 84, 84,132,130,130, 2, 40, 20, 10, 40, 20, 10, 20, 21, 21, 65, 38,147,193,194,194, 2,113,113,113,122, 77, 73,201,229,234,248, -132, 26,205,241, 73,147, 38, 45,137,141,141,117, 99, 24, 6,122,189, 30, 38,147, 9, 38,147, 9,165,165,165, 72, 78, 78, 70,124, -124, 60, 18, 19, 19, 81, 88, 88, 8, 30,143, 7, 46,151,139,135, 15, 31, 22,137,244,250,163,236,144,126,119,240,128,168,155, 55, -111, 78,157, 48, 97, 2,220, 61, 61,187, 35, 51,211, 44, 1,115,178, 6, 1, 35,127, 7, 1,243, 27, 1, 84, 92,124,239,229,203, -151,157,123,244,232, 1, 55, 79,207, 47,154,101,102, 94, 74,168,131,159,150,209, 96,184,113,243,230,205, 94, 19, 39, 78,196,238, -221,187,191,112,126,249,242,124,222, 91,211,156,206,128,115,253,134, 13,191,152, 60,121, 50, 46, 94,188, 8,163,193,112,163,134, -135, 78,229,136,239,245, 38,207,152,231,245,150,227,251, 46, 66,200, 92, 0, 27,217, 30,197,130, 5,139,127,178, 69,171, 78, 83, -135,150, 70,227,178, 69,139, 22,233, 57, 28, 14,130,131,131,173,127, 58,117, 42,228,225,163, 71,190, 82,169,212,206,104, 52,214, -202,229,172,213,110, 93,180,104,145, 76,167,211,193,223,223, 31,133,133,133, 48, 26,141, 96, 24, 6, 12,195,128, 16, 2, 14,135, - 3,177, 88,140,216,216, 88,236,221,187, 87,225,172,213,110,173,245, 37, 97, 52, 62,142,136,136, 0,151,203,165, 22, 22, 22, 32, -132,128, 97, 24,108,222,188, 89,186, 29,136, 2, 0, 46,135,163, 3, 0, 14,135,152,235,189, 91,235,188,165, 64, 32,128,233,205, - 34,128, 90,143,181,215,106,183,108,216,176,161,248,233,211,167, 80,169, 84, 21,214, 55,165, 82, 89,225, 92, 47,147,201, 64, 8, -129, 74,165,194,169, 83,167,138,237,181,218, 45,213,241, 21, 0, 57,153, 73, 73, 67,218,181,107, 87,240,242,229, 75,200,229,114, - 60,126,252, 24, 49, 49, 49, 56,114,228, 8, 46, 94,188,136,228,228,100, 24, 12, 6,120,120,120,128, 82,138,147, 39, 79,202, 13, -197,197, 3, 10,128, 28,118, 88, 84,143,122,174,174,189, 92, 36,146,116,103, 39,167,204,122,174,174,189,222,222,111, 11, 60,127, -254,252, 57, 12, 6, 3,124,125,125, 29,106,242,211,162, 6,195,205,155, 55,111, 98,226,196,137,240,106,208, 96,189, 15,224,252, -246, 49, 62,128,179, 79,195,134,235,203, 5, 12, 53, 24,110,214,181,204,214,192,182,197,139, 23,171,249,124, 62, 34, 35, 35,125, -245,141, 26, 37, 50,192, 88, 49,208,164, 7,192,175,237,124, 55, 96,199,167,159,126,154, 67, 8,193,193,131, 7,157,108, 27, 54, -124,194, 0,147,108,129,122,182, 64, 61, 6,152,100,219,176,225,147,200,200, 72, 39,131,193,128, 5, 11, 22,228,184, 1, 59,106, -160,156, 71, 41, 29, 76, 41,237, 70, 41,245,218,187,107, 43,206,254,116,172, 92,100, 77,163,148,222,165,148, 78,160,148, 62, 97, -123, 28, 11, 22, 44,254,201, 32, 85,249, 65,241,218,175,205, 5,168,164,123,135, 22,184,247,232,153,220,201,222,230, 66,249,190, -194,248, 99,141,223, 11,180,105,241,205, 55,223,128,199,227, 33, 35, 35, 3, 9, 9, 9,176,177,177,193,184,113,227,180,234,226, -226, 33,229,185, 14, 9, 33,189, 41,165, 49,101,156,111,242,169,201,147,196, 13,153,184, 6,231,207, 70,115,109,109,109,161, 84, - 42,193,225,112, 96, 97, 97, 1, 43, 43, 43, 88, 90, 90,226,254,253,251, 24, 56,120,168, 49,207,170, 91, 69,192,210,242,124,106, -149, 57, 65, 8, 23, 0,218, 3, 86,177,192,199, 18,119,247, 69, 43, 87,174,180,236,215,175, 31,248,124, 62, 60,235,249,229,248, -246,223,184,141,195, 33,134,204, 2,197,138,134,245,220,109, 19,146,210, 0,144, 55, 57, 17,203,114, 29, 86, 85, 78,111,221, 53, -223, 19, 63,108,178,105,213,234,141, 63,186, 76, 38, 67,110,110, 46,164, 82, 41,100, 50, 25, 84, 42, 21, 0, 32, 58, 58, 26,103, -175, 39, 42,212,158, 33, 41,213,149,243,191,117,127,102,237, 94,122,167,254,161,136, 31,184,206,206,206,200,205,205, 69, 94, 94, - 30,100, 50, 25,212,106, 53,140, 70, 35, 10, 11, 11,177,103,223, 15,198, 2,113,183,212,242,128,144, 53,114,170, 50, 44, 29,148, -191,120, 4, 53,243,161, 83,167, 78,181,182,177,177,129,201,100, 66, 81, 81, 17,210,211,211,241,242,229, 75, 92,191,126, 93, 37, -149,233,160,114,234,147, 89, 30,176,180,202,246,252,243, 76,168,127, 63,206,178,190, 4, 0,238,110,110, 89,175, 94,189,146, 24, -141, 70,120,120,120, 24,100,133,133,235, 5,192, 69,107, 32, 27, 0,205, 7, 86,110,217,182,109,202,208,161, 67,209,182,109,219, -140,156,220,220,250, 85,245, 37, 16,194,245, 7,108, 75, 60, 61,227,239,222,189,235,154,158,158,142,137, 19, 39,230,191,122,241, - 98,105,185,191,150, 28,232,234,211,176,225,250,200,200, 72,167, 6, 13, 26, 32, 48, 48, 48,199, 34, 61,189,249, 51, 64, 94, 77, -255,172,118,108,202,158,159,169, 63,107,120, 64,219,217,179,103,195, 96, 48,224,250,245,235,184,115,231, 14, 94,189,122,133, 95, -126,249, 69,102, 35, 18,141, 46,207,117, 88, 93,255, 28,224,167,242, 61,120, 48,130,240,249,124,236,219,183, 15,177,177,177, 0, -128,160,160, 32, 76,158, 60, 25, 6,131, 1,227,199, 79,160,103,158, 89,166,212,212, 63, 9, 33, 1, 0,190,196, 27,145,215,150, - 82,106, 65, 8,201, 2,224, 85, 23,159, 44,182,127,178,156, 44,231,191,135,243,159,138, 90,115, 29,174,249, 22,182,191, 77,243, - 49, 61,235,216,174,112,166, 75,215,110, 77,194, 87,133,113,218,181,107, 7, 47, 47, 47, 4, 5, 5, 33, 61, 61, 93,104,103,103, - 87, 91, 62, 53,101,183,254, 99, 95,182,104,209,194,110,233,210,165,182,125,251,246,229,121,121,121,129, 82,138,216,216, 88, 68, - 69, 69,149,238,222,189, 91, 81,226, 50, 88,246,224,202,143, 74,115,242,169,221, 1, 74, 0,172,246,204,202,250,110,206,172, 89, - 97,173, 90,183,158,186,106,213, 42,142,216,202,146,183,110,197, 52, 11, 0, 88,243,245, 17,219,161, 33,227,176,165, 17,208,125, -108,213,121,228, 42,151, 51, 61,115,250,171,247,135,247,106,244,241,220, 41,198, 81,163, 70,137,108,108,108,224,229,229, 5,123, -123,123,164,164,164, 32, 51, 51,147,158, 62,125, 90,121,235,225,115,222,201,139,247, 94, 89,216,186,153,147,151,176,184, 91,191, -145,169,239,191,255,190,253,164, 73,147,172,219,180,105,195, 19, 10,133, 16, 10,133,200,205,205, 69,114,114,114,233,233,211,167, -149, 37,146, 1, 69, 15,174, 68, 22,155,153,235, 80,221,109, 76,120,242,141, 75,171, 22,196, 63,126, 60,193, 4,180, 44, 45, 45, -245, 48, 26,141,132,195,225,100,155, 76,166,199,165,197,197,123,181, 65,171, 54,179,185, 14,205,131,209,104,228, 27,141, 70,200, -100, 50, 92,186,116,137,121,241,226,197,202, 71,143, 30,173,204,202,202,130, 94,175,199,136, 17, 35, 16, 20, 20,132, 43, 87,174, - 32, 47, 55,247,116, 77, 92,207, 0,185, 48, 51,115,242,244,233,211,207, 69, 68, 68,112, 30, 61,122,228,180,111,223,190, 61, 85, - 9,152, 9, 19, 38,152,114,211,211, 39,107, 1,121, 13,253,179,166,177,153,127, 62,114,251,163, 97,193, 33,205, 86,133,174,228, -117,234,212, 9, 78, 78, 78,232,218,181, 43, 74, 75, 75,237,154, 54,109, 90,219,216, 44,238,214,127,116, 74,203,150, 45, 69,155, - 55,111,118,157, 50,101, 10,230,206,157, 11, 0, 80,171,213,184,120,241, 34, 22, 44, 88,144,147,206,180, 87,213,214, 63,203, 44, - 85,229, 2,236, 26,128,110, 0, 82, 88,199,119, 22, 44, 88,252, 35,173, 86,132, 4, 81, 74, 99, 9, 33,110, 0, 6, 2, 56, 67, - 41,205,174, 86,104, 1,255,205,167,118,227,206, 19, 84, 78,243,241, 6,110, 9, 6,239, 73, 47,102, 46, 90, 31,200,213, 43,236, -121, 68, 99,147,244,252, 57,169, 45,231, 97, 69, 62, 53, 91, 63,165,227,203,195,237,214,173, 89, 51,127,203,150, 45,189,202, 67, - 56, 88, 89, 89, 61, 86,171, 84, 63, 59,107,181, 91, 75,108,253,126,174,107,110,190, 76, 32, 23,192, 44,251, 7, 15,182, 13, 26, - 58, 98,131,133,131, 47,111,249,218,221, 26, 46,135,163, 75,206,202,195,150, 70,128,200,140, 5,146, 37, 58, 32, 94,230,102,200, -117, 12,121,246,233,226,197, 31,175, 89,189,186,157, 88, 44,238, 94,106, 48,248,153, 76, 38,192,100, 74, 42, 81,169,174,209,210, -210,187,218,160,208, 77, 22,182,110,212,236,188,132,118, 77,139, 29, 82,143,181,219,191,119,239,188,163, 71,143,254,174,238,142, - 90,237,182, 18,187,166, 49,230,212,189,242, 49, 26,224, 87, 72,165,191, 86,219, 9,192,230, 58, 52,251,235,195,100,154, 97,111, -111,127,160, 87,175, 94, 22,189,123,247,198,192,129, 3,209,169, 83, 39,152, 76, 38, 80, 74, 81, 92, 92,140, 35, 71,142, 96,195, -134, 13, 73,245,129,213,181,241,105,129,159,133,103,207, 14,104,217,178,229,190,154, 4, 76,153,200,170,213, 39,177,230,177, 41, - 76, 50,216, 14, 73, 27, 51,103, 93, 35,157, 34,219,206,209,202,224, 26,255,228, 49,199,252,177,233, 95,108,140, 61,210,126,196, -240,225,115,184, 12,211,181,108, 5, 36,125,154,144,240,160, 60,169, 52,130, 38, 95,170, 99, 95, 42,143, 93,199, 58,190,179, 96, -193,226,159,138, 32, 0,177, 0, 6, 82, 74,191, 43,115,142,175,222, 25,158, 97, 24,105,185,213,135, 97, 24,105,202,201,153,227, -106, 98,231, 1,189,202, 44, 89,168, 53,215, 97,217,239,105, 64, 49,180,218,207,126, 19,140,180,210,234, 66,222, 91,199,215,165, -182, 69,192, 51, 24,180,131, 32, 77, 0, 78,205,122,195,215,110,205, 39,149,235, 84,237, 75,246, 55,215,229, 23,106,128, 27, 80, - 42,111, 64,169,172,210,105,151,199,240, 11,107, 43,231,219,117, 79, 7, 20,127,180,238, 76, 29,219,135,249, 3,237,249,111,195, -235,252,252,147, 0,196,158,209,209, 46,231,163,163, 71,125,188,112,225, 8, 55,119,247,134, 78, 78, 78,246,214,214,214,156,219, -183,111,191, 52,104, 52,219, 90, 1,251,203,172,169,181, 66, 11,252,236,159,158,222,124,228,240,225,115, 8,195,116,169, 44, 96, -168,193,240,139, 47,176,163, 38, 75,214,187,142, 77, 47,161, 91,175, 50, 75, 22,184,102,142,205,204, 55,229, 88, 11,131, 97, 45, -226,226,170,232,243,117,238, 75,107, 8, 33,197, 96, 29,223, 89,176, 96,241,207,197,153, 50,113,117,230,119,123,254,202,252, 62, - 0,122,179,156, 44,231, 63,133,243,141, 86,129, 13,219,158, 44, 39,203,201,114,178,156,127, 62,231, 63,117, 99, 88, 17,202,130, -133,121,160,111,156,211, 21,108, 75,176, 96,193,130, 5,139,202,168,228,155, 85,249,157,241, 29,240,198,117,167,119, 53, 47,149, -152, 58, 92,160,247, 59,188,180, 98, 88, 78,150,147,229,100, 57, 89, 78,150,147,229,252,119,113,214,198,253,119, 92,205, 72, 8, -153, 81,238,155,245,118, 76, 45, 98,110,154,155,119,188, 48,187,244,149,229,100, 57, 89, 78,150,147,229,100, 57, 89,206,127, 52, -106,178,104,113,216,230, 97,193,130, 5, 11, 32, 60,156,112, 0, 66,128,112, 14,112,140, 11,140,228,190,249,251,221, 49,114, 36, -169, 50,152,237,188,241, 14,214,108,139,179, 96,241,207, 1,165, 52,187,186,164,210,172,143,214,255, 95, 5,236,237,234,234,186, - 11, 0,201,201,201,153, 65, 41, 77,103, 91,229,127, 15,142,142,142,189, 12, 6, 3,228,114,249,207,255,196,250, 53,111, 68,134, - 83, 14,154,254,247,137,129,244,132, 36,122,160,170, 99,155,249,145,137, 32,255,141,197, 69, 76,120, 26,159, 76, 79,212,161,207, -115, 6,244,246,218, 1, 0,231, 98, 50,230,252, 21,113,181, 8, 33,141,157,157,157, 47, 48, 12,195, 24,141,198, 89,185,185,185, -209,213, 11,161,145, 92, 0,224,209, 43,203,156, 28,154, 44,253,232, 67,194, 43,209,238,149,105,213, 42, 57,151,199, 77, 21,242, - 92,111,130,235,113,174, 72,217, 49,161,170,243,143, 30, 61, 90,109, 22,239, 0, 63, 50,160, 73,179,102,131, 91, 7, 90,166,124, -185,181,221,150,238,190, 78,188,151, 25, 15,197, 95,236,148,239,178,113,168, 55,120,210,104,199,104,198,138, 76,216,179, 39, 95, -201,142, 50,243,241, 57, 33, 14,165, 64, 32, 79, 40,244, 50, 26, 12, 46, 4,160, 92,134,201,213,107,181, 25,124, 32,110, 41,165, -178,127, 58, 39, 95, 40,244, 52, 26, 12, 46, 0,240,191, 88, 78, 22,191, 69,181, 66,203,218,218,250, 62,135,195,241,172,156, 12, -183, 60,159, 96,249,255, 42,239, 35,132,192,104, 52,102, 22, 22, 22,182,169,195, 3,209, 6,192, 40, 0,229, 75,212, 15, 1, 56, - 66, 41, 85,188,227, 3,214,134,207,231, 47, 18,137, 68,239,169,213,234,230, 0, 96,105,105, 25,175, 82,169, 46,151,150,150,126, -249, 46,188,132, 16, 6,192, 72,177, 88,220,147,195,225,244,164,148, 18, 74,233, 21,165, 82,121, 25,192, 81, 74,169,225, 29, 56, - 45, 37, 18,201,218, 38, 77,154,140, 93,182,108, 89,129,163,163,163,255,130, 5, 11,238, 57, 59, 59,255,152,159,159,191,130, 82, -170,254, 95,232, 28,132,144,134,174,174,174,135,120, 60, 30, 55, 35, 35,163, 39, 0,120,121,121, 93,209,233,116, 70,169, 84, 58, -142, 82,250,162,142,124, 34, 0, 29,196, 98,113, 27,177, 88,220,205,104, 52, 54, 45,203,207,248, 84,169, 84, 94, 47, 45, 45,189, - 15,224, 54,165, 84,245, 63, 36,134,173, 37, 18, 73, 4, 33, 4,132, 16, 63, 74,105,241, 63,238, 75,140,131,166, 9,241,137,254, - 21, 98,170,121,147, 26, 26, 4,222, 85, 28,107,182,208,122,175,187,219,224, 33, 67,250,112, 0, 64,167, 63, 55, 24,117, 76,126, -109,142,200, 10, 14, 14,254, 53, 34, 34,194, 94,171,213, 98,198,140, 25,135,108,109,109,119,200,229,242,101, 53,157,103, 35,182, - 95,176,113,243, 69,171, 55,249,175, 33, 49,153,140,146,215,175, 95,248, 37, 60,249,181,127,124,252,173,117,234,196,203,183, 77, -132, 55,179, 20, 93, 19,205, 41, 71,179,134,100,208,208,145,195, 7,174, 94,189, 10, 99, 71,143,173, 23, 31,175,177,244,176, 73, - 17, 20,170, 69,141, 28,157, 37, 67, 86,175, 57, 70,110,222, 56, 57, 36, 98, 95,248,229,169, 83,157,222, 99,197,150, 89,247,150, -172, 97,152, 14,246, 77,154,116, 27,125,242, 36,196, 94, 94, 12, 35, 20,114, 0,192,160,213,122, 41, 51, 50,220, 34,135, 12,105, - 31, 78,200,213, 48, 74,239,176,156,255,247,156, 44,234, 40,180, 56, 28,142,231,235,215,175, 37, 34,145,168,220, 44, 6,163,209, - 8,163,209, 88,145,188,152, 82, 90,241,211, 96, 48,160, 73,147, 38,102,125,209, 2,120, 15,192, 7, 61,122,244, 8,249,242,203, - 47,121,129,129,129,229, 41, 67,186, 46, 95,190,252,107, 66,200,113, 0,251, 1,252,108,238, 23, 47, 33,164,159, 72, 36, 58,184, -113,227, 70,155, 62,125,250, 48,238,238,238, 32,132, 32, 39, 39,167, 67, 76, 76, 76,155, 5, 11, 22,204, 34,132,140,167,148, 94, -168,195,192, 14,176,182,182, 62, 54,124,248,112,207,238,221,187, 91, 52,107,214, 12, 70,163, 17, 15, 31, 62,156,114,255,254,253, - 49,199,143, 31, 15, 35,132,132,152,155,175,141, 16, 66,196, 98,241, 36, 15, 15,143,181,161,161,161, 14,227,199,143, 23, 60,121, -242,164,200,215,215,151,220,188,121,211,249,200,145, 35,179,214,175, 95, 63,210,218,218,122,133, 82,169,252,129,154,225, 64,103, - 99, 99,115,159,195,225,120,154, 35,132, 1,152, 45,134, 9, 33,173,234,215,175,127,228,198,141, 27,245,211,210,210,140,195,134, - 13, 59, 0, 0,151, 47, 95, 14,212,235,245,164,111,223,190,231, 8, 33,163, 40,165, 15,205,172,123, 11, 7, 7,135,159,198,142, - 29,235,208,176, 97, 67,171,250,245,235, 19,145, 72, 4, 46,151, 11,185, 92,238,254,228,201,147,222,119,238,220, 81,199,196,196, - 20, 18, 66,134, 80, 74,227,234,112,159, 58, 73, 36,146, 9, 60, 30, 47,192, 96, 48,120, 0, 0,195, 48,175,245,122,253, 19,169, - 84, 26, 65, 41,253,245, 93, 7,136,139,139,203,246,181,107,215, 58, 73,165, 82,186,126,253,250,237, 0, 38,253, 83, 31, 6,135, -126, 60,138,251,247,238, 0, 0,159, 16, 66,222,238,127,132, 16,210,212, 15,252,143, 62, 90,136, 54,109,219, 99,220,216,145,181, -114, 14,236,237,181,145, 39,224, 59,106, 52,154, 95,229, 37,218,163, 46,142,118,163,198,142, 25,148, 4, 0,231,206, 95, 29,213, -190,189,195, 21, 91, 43,225, 72, 11, 11,139, 78,122, 93,105,193,153,152,140,197,117, 17, 85, 30, 30, 30, 23,236,237,237,173, 10, - 11, 11,115,242,242,242,190, 13, 14, 14, 94,179,127,255,126,251,151, 47, 95, 34, 35, 35, 3,243,231,207, 23,103,102,102,206, 17, - 10,133,183,180, 90,109,181,150,173,226,226,194,173,203,151, 14, 13,181,181,117,226,138,172,108, 96,109,235, 0,223,134, 45,209, -161,211, 96, 12, 24, 56, 21,201, 73,177, 29,246,239, 91, 29,251,250,117,204,231, 98,135, 6,107,100,178,250,213, 62,151,154,251, -147,238,229, 34, 43, 52,116, 21,158, 39, 38, 22,167,165,114,254,115,230, 36, 99, 53,160, 87, 19,161, 65,151,147,118,243,198,201, -250, 93,186, 14, 3,128, 54, 17,251,194, 47,207, 27,239,208,107,219,193,194, 98,246,149, 84,253,179,115, 53,143, 55,169,223,230, -205,146,160, 89,179,248,202,212,212,210,148,157, 59, 75,114,175, 95, 55, 50, 66, 33,245,234,223,159, 56,247,236,105, 49,235,233, - 83,254, 47,235,215,119, 91, 39, 16,248, 46,215,233, 14,178,156,255,119,156,108, 31,173,112,134,175,240,213, 42,159, 62,100,106, - 56, 9, 34,145, 8,145,145,145,224,241,120, 96, 24, 6, 60, 30,175,218,223,189,189,189,205, 41, 72,176,171,171,235,215, 59,118, -236,112,233,215,175, 31, 44, 44, 44, 42,246,113,185, 92,244,233,211, 7,189,123,247,230,101,101,101,141,137,140,140, 28,179,110, -221,186, 92, 66,200, 92, 74,105, 84, 45,188, 61,253,253,253,163, 46, 94,188,104,169,209,104,112,253,250,117, 20, 21, 21, 65, 32, - 16,192,211,211, 19,125,251,246,101, 18, 19, 19, 29,250,244,233, 19, 69, 8, 25, 68, 41,189, 98, 70, 89,219, 72, 36,146,107, 71, -143, 30,181,104,217,178, 37, 73, 78, 78, 70, 80, 80, 16, 0, 64, 46,151, 99,216,176, 97, 22,227,199,143,111, 56,102,204,152,219, -132,144,238,148,210,251,181,240,181,118,117,117,253, 97,248,240,225,238,235,214,173,179,177,182,182, 70, 90, 90, 90,182,171,171, -171, 95,121,123,143, 25, 51, 70, 48,120,240, 96,183, 13, 27, 54,108, 61,118,236,216, 98, 66,200, 36, 74,233,131,154,120,203, 5, -177,149,149, 21,114,115,115,113,232,208, 33,204,153, 51, 7, 92, 46, 23, 82,169, 20, 71,142, 28,193,127,254,243,159,114, 65, 99, -150, 24, 22,137, 68,189, 91,182,108,185,231,242,229,203,158,118,118,118,112,119,119,231,124,250,233,167, 1,190,190,190,150,245, -234,213,227,102,103,103, 35, 42, 42,202,119,194,132, 9, 63, 89, 88, 88, 76,209,104, 52,181, 78,169,185,184,184,236, 61,115,230, -140,119,124,124, 60,118,238,220,137,194,194, 66, 8, 4, 2,216,217,217,193,213,213, 21,126,126,126,100,233,210,165, 86,131, 7, - 15,182,154, 59,119,238, 94, 0,173,204,184, 71, 45, 37, 18,201,174, 49, 99,198,248,134,135,135,219,185,186,186,162,252,195, 64, - 46,151,123,166,165,165,117, 8, 13, 13, 13,113,113,113,121, 41,149, 74,103, 82, 74, 31,213,113,224,180,234,213,171,215,160, 97, -195,134,113,179,179,179, 17, 17, 17, 49,136, 16,210,202, 92,113,249,119,195,253,123,119, 48, 99,246,124,165,187,151, 23,255,226, -133, 61,193, 50, 89,179,123,118,150,111, 18, 82,203,212, 40,125,175, 59,183,109,223,126, 83,249,239, 15, 28,166,252,238,155,173, - 98,115,132, 22, 79,192,119, 60,116,240,171,244, 27, 55,239, 7, 92,138,185,211, 63,120,200, 16,202,231,219,249, 2,192,226, 5, - 31,241,162, 78,157,218,215,167,119,251,172,174, 93,218,164,143, 27,191,208,187, 14,247,166,113,227,198,141,175,198,198,198,186, - 8,133, 66, 20, 22, 22, 58,126,247,221,119, 95,117,233,210,133,147,146,146,130,196,196, 68,164,166,166, 66, 46,151,163, 79,159, - 62,226, 7, 15, 30,124, 11,160, 90,161, 85,202,121,111,173,123, 61,253, 54, 71, 75, 81,253, 82,163, 66, 66,245,217,205, 46,157, -185,212,226,112,132, 58,200,197,173,137,223, 7,147,195,176,122,205,113,222,143,135,190, 8,253, 57,230, 48,192,169, 95,125, 70, - 0,138, 78,203, 87, 44,131,162, 88,139,241, 99,167, 99,194,216,233,142, 20, 58, 55,106,212,136,116,234, 34, 59,107,254,211,232, - 29,187,191, 26, 14,192,179,146,216,250,153, 21, 91,213, 99, 53,195,180, 31,244,245,215,206, 1,211,166, 9, 31,133,135,171,242, -175, 95, 87, 55,122,255,253,162,160, 15, 63,212, 2, 64,113,106, 42,255,121, 88,152,149,115,183,110,150, 29, 23, 45,178, 55,234, -116,174,159, 17,210,238, 83, 74,239,214,149,211,123,212, 40, 99,232,190,125,109,175, 47, 92,216,131,232,245,220,254, 29, 59, 62, - 92, 31, 17,241,250,143,112,254,153,229,204,186,118, 77, 91,232,235,139,160, 97,195, 10,188, 37, 18,237,159, 89,247, 63, 82, 78, - 22, 40, 55, 74,101, 3, 40,143, 12,255,230,121, 69, 41,197,153, 51,103,186, 3,184, 10, 32,124,224,192,129,171, 0,192,206,206, - 46, 87, 38,147, 73,162,162,162,106, 21, 89, 60, 30, 15,110,110,110,240,243,243,147,230,230,230,186,212,240,112,204, 48,153, 76, -158,148,210, 10,235, 75,117,208,106,181, 72, 74, 74, 66,139, 22, 45, 50, 41,165, 94, 53, 77,237, 88, 89, 89,165, 36, 38, 38, 58, - 37, 36, 36,224,254,253,251,240,245,245,133,189,189, 61,120, 60, 30,244,122, 61, 20, 10, 5,252,253,253, 33, 20, 10,209,186,117, -235,124,149, 74,229, 91,211, 20, 16, 33, 68, 40, 18,137,146,174, 93,187,230, 21, 20, 20,132,187,119,239,194,203,203, 11,174,174, -174, 0,128,212,212, 84,220,188,121, 19,239,191,255, 62, 98, 99, 99, 49, 98,196,136, 12,149, 74,229, 71, 41,213, 86,199,233,232, -232,152,125,249,242,229,204,192,192, 64,141, 74,165,226,228,230,230,242,174, 95,191,110, 40, 46, 46, 22,203,229,114,158, 76, 38, -227, 41, 20, 10, 70,165, 82,241, 56, 28, 14, 95,173, 86,243,126,254,249,103,174, 78,167,179,169,169,157,202,239,211,169, 83,167, - 16, 24, 24,136,168,168, 40,124,252,241,199,248,229,151, 95,224,229,229,133,163, 71,143, 98,209,162, 69,120,246,236, 25,156,156, -156,208,172, 89,179, 26,239, 17, 0, 52,106,212, 40,249,241,227,199, 13,249,124,126,121, 94,199,242,124,121,200,203,203,195,139, - 23, 47,240,250,245,107, 52,106,212, 8, 99,199,142,125,145,153,153,217,168,182,206,231,233,233,153, 23, 31, 31,239,212,162, 69, - 11,228,230,230,194,206,206, 14,182,182,182,176,179,179,171,248,221,215,215, 23, 11, 23, 46,132,171,171,171, 84,173, 86,187,212, - 38,130, 2, 3, 3, 47,252,252,243,207, 78, 54, 54, 54,200,201,201,129, 66,161, 0,195, 48,176,178,178,130,147,147, 83,133,144, - 79, 74, 74,194,192,129, 3,243, 83, 82, 82,250,213,193, 2,199,113,113,113, 73,140,139,139,243,163,148, 34, 61, 61, 29,207,158, - 61,195,236,217,179,147, 52, 26, 77,147,127, 82,206,190, 74,126, 87,252, 73,147,103,240,135, 15,237,164,123, 26, 31, 77,132,166, -103,104, 21, 96, 35, 7,128,135, 79, 20,182, 90,142, 63,154, 54, 31, 68, 79,252,244,171,224,135,253,223,241, 96,130, 11, 8,158, - 37, 60,167,159, 85,199,221,239, 61,247,105, 31,125, 52, 37,160, 71,151,238,156, 98,149, 74,242,237,183,155, 91,167,164, 60,149, - 0,128,175,111, 83,233,172, 89, 11, 30, 88,139, 68,210,171, 55,175,153,182,108,217,251,228,194,229,172,221,102,220, 27, 95, 63, - 63,191, 91,167, 78,157,114,146, 72, 36,176,181,181,133, 74,165, 66,105,105, 41, 18, 18, 18, 52,145,145,145,122, 27, 27, 27,235, -156,156, 28,200,100, 50, 16, 66,112,234,212,169,116, 74,169,207,219, 92,229, 62, 90, 0, 48,123, 64, 83, 94,179,247,252,236,249, - 66,131,165, 37,239,185, 27,136, 81, 72,168,216,229,220,133,135, 45,206, 93,186, 59,110,120,240,199,206, 93,187, 15, 71,232,202, - 16,125, 86, 86,122, 80, 41,186, 38, 86,229,163,213,212,143,188, 55,108,196,240,145,171, 87,175,194,170,208,112, 68,159, 58, 41, - 23,139, 56, 90, 27, 59,158,109,183, 14,157, 53, 11,231, 12,205, 80, 42,179,188, 86,111,136, 28, 59,112,232, 66,207, 46, 93,135, -225,230,141,147,136,216, 23,126,159, 88, 82,118, 26,241, 45,132, 19, 98,111,231,235, 59,115, 94, 82, 18,255,209,170, 85, 74, 67, - 86, 86, 81,155, 5, 11,242,171, 58, 54,243,210, 37,145,192,221,221,198,126,200, 16,135,173, 62, 62, 84, 47,149,238,170,202,199, -168, 42,206, 24,177,216,238,240,185,115,189, 40,143,215,125,201, 39,159, 88, 14, 26, 52, 8, 10,133, 2,199,143, 31,199,174,157, - 59,181,110,110,110,143,221,159, 60,137, 13, 80, 40, 86,154,203,217,102,193,130,124,163,209, 72, 70, 46, 90,212, 39, 62, 53,245, -189, 28,169,180, 30, 0,184, 57, 56,100,180,241,245,189,191, 55, 58,250,217,246,250,245, 77,230,150,243,251,243,231, 93,142,165, -165, 77,115,112,112,176,204,149, 74, 25,161, 64, 80,208,161, 89,179,163,223,172, 88,113,213, 16, 23,199,183,240,244,180,177, 29, - 52,168,206,117,111,179, 96, 65,126, 97,113, 49, 51,111,205,154,206,175,114,115,235, 41,181,218, 70,178,226, 98, 87,163, 94,207, -177,177,178, 42,104,224,239, 47, 85, 95,191,158,221,160,164,100,254,247,148, 74,255,170,123, 93,149, 22,249, 27, 89,180,222, 94, -117,248,187, 92,135, 87, 7, 14, 28, 72,170, 80,102,102, 89,179,120, 60,222,111,166,169,106, 0,159, 16,130, 7, 15, 30,192,209, -209, 17,174,174,174, 16, 10,127,155,124, 48, 47, 47, 15,191,252,242, 11,158, 62,125,138,150, 45, 91, 2,120,243, 69, 93, 29,132, - 66,225, 71, 27, 54,108,176,211,233,116,184,127,255, 62,218,180,105, 3,161, 80, 8, 62,159,255, 27, 17, 40,149, 74,209,188,121, -115, 44, 89,178,196,118,221,186,117, 31,161,134, 28,117, 12,195,204,157, 62,125,186,164,220,130,149,145,145,129,214,173, 91, 87, -236,119,118,118,198,195,135, 15,209,166, 77, 27,120,122,122, 34, 36, 36, 68, 18, 17, 17, 49, 23,192,151,213,113, 10, 4, 2, 78, - 96, 96, 96,219, 50,139, 17, 56, 28,206,115, 27, 27, 27,103, 23, 23, 23,145,141,141,205,239,234,184,111,223, 62, 25,135,195,209, -215,214,160, 28, 14, 7, 57, 57, 57, 8, 8, 8,128, 92,254, 38,131,139, 74,165, 66,163, 70,141,160, 80, 40, 42, 68,171,187,187, - 59,212,234,154, 93,191, 90,182,108,185,170, 73,147, 38,125,123,244,232, 33,228,241,120,120,244,232, 17,130,130,130, 16, 25, 25, - 9,111,111,111, 88, 89, 89, 33, 41, 41, 9,129,129,129,184,118,237, 26,156,157,157,209,188,121,115, 97,235,214,173,111, 20, 22, - 22, 94, 73, 75, 75, 91, 85, 67, 57, 57, 98,177, 24,215,174, 93,195,222,189,123,145,154,154,138,172,172, 44, 88, 91, 91,163, 85, -171, 86,104,214,172, 25, 58,117,234,132,164,164, 36,144, 90, 58, 19, 33,196,213,207,207, 47,250,238,221,187, 78,148, 82, 68, 68, - 68, 64,169, 84, 66,167,211,129,195,225,192,194,194, 2,246,246,246,120,239,189,247,224,236,236, 12, 63, 63, 63, 28, 57,114,196, -105,192,128, 1,103,203, 44, 82, 57,181,181,171,189,189,253,252,176,176, 48, 47,137, 68,130,180,180, 52,200,229,114,184,184,184, -160, 71,143, 30, 30, 49, 49, 49,243, 1,108,254,167,188,200,202, 29,223, 9, 33,228,226,133, 61,193,126, 13,138, 2, 91,250, 91, -121, 69, 69,187,120, 69, 70, 75,155, 3, 64, 64, 83,151,248,224, 65, 86, 25,143,226,163, 51, 46, 94, 56,121,255,233,115, 68,153, - 51,181, 45, 47,209, 30,189, 20,115,167,127, 80,203,214,166, 13, 95, 44, 26, 56,103,246, 52,161,196,101, 42,114,211, 79, 34,230, -242, 3,239, 69, 31, 79,119,254,114,211,247,231, 46,197,220,225,200, 75,180, 43,205, 41,111,227,198,222,219,247,127,211,201,169, - 56,255, 24,146, 19, 5,176,180, 14,128,175,111, 99, 40, 20, 10, 88, 88, 88, 88,140, 29, 59,214,184,108,217,178, 18, 27, 27, 27, - 43, 66, 8,174, 92,185, 34, 5,208,175, 54, 94,141,196,158, 26, 75,245, 6, 42,224,154, 40,177, 86, 19, 99,161,224, 73,194, 75, -244,237,221, 51,183, 75,251,128,117,203, 86,111, 90,238,215, 56,200,121,202,180,112,222,154, 85,227,118,130,160,107, 85, 60, 79, -147,232,229,102, 13,137, 37,128,129,171, 63, 91,133,148,148, 36,251, 25, 31,200,194, 25,161,165,123, 19,159,206,214, 59,247, 94, -233,223,168, 81,253,122, 11,231,134,156,249,234,235,175, 6, 86,182,108,237,223, 23,246, 19, 33,164, 23,253, 43,227,238,252,253, -208, 98, 66,116, 52,148,233,233,250,194, 27, 55, 52,189,190,254, 58,223,171, 95,191,205,186,210, 82,167,242, 71, 5,135, 16,144, -114,215, 9,147,137, 48, 75,150,112, 40,195, 64,111,111,255,193, 82,160,113,109,156, 31,103,103, 7,143,155, 54,109,224, 79,231, -207,163,126,253,250, 21,239, 51, 59, 59, 59, 44, 90,180, 8, 11, 22, 44, 16, 62,124,248,176,221,177, 99,199,218,125,185,113,163, -203, 82, 32,216,156,114, 94,188,125,219,254,195,213,171, 87,180,108,211,198,251,192,161, 67,194,134, 13, 27, 2, 0, 94,188,120, -225,247,197,250,245, 62, 1,129,129,185,235, 62,250,104,127,252,178,101,205, 1,220,168,137, 51,231,250,117,221,177,180,180,105, -151,175, 92,177, 11, 8, 8, 0, 0, 60,123,246, 76,178,117,235,214,233,205, 67, 66,198,175,158, 53,107,229, 32,141, 70,102,147, -151, 39, 28,180,125, 59,115,120,228,200, 90, 57,203,203, 9, 0, 61,166, 76,249,168,107,207,158,205,130,167, 77,115,240,246,246, - 38, 98,177, 24,165,165,165,200,202,202,178,143,143,143,111, 24, 93, 92,172, 56,113,251,118,196,247,101,201,226,255, 34, 84,169, - 69,254, 78,150,172, 42, 53, 69,217,207, 30,103,206,156,161, 0,122, 12, 28, 56,240, 90,249, 11,220,104, 52,154, 37,178, 24,134, - 65,153,179,176,185, 5, 66,126,126, 62,242,243,243, 43,166,142,164, 82, 41, 46, 95,190,140,164,164, 36,240,120, 60,240,249,124, -148,150,214,158,131, 86, 36, 18,245,238,221,187, 55,115,251,246,109,248,250,250,194,210,210,178,162, 92,229, 27,159,207,135,155, -155, 27, 20, 10, 5,122,245,234,197,219,182,109, 91,239,154,132,150,173,173,237,251,163, 70,141, 18,148,255,173, 84, 42,193,229, -114, 43, 68,139, 82,169, 68, 97, 97, 33,100, 50, 25, 52, 26, 13, 58,118,236, 40,136,142,142,126,191, 38,161, 85, 25, 37, 37, 37, - 74,169, 84,106,215,181,107, 87,251,253,251,247, 63,235,216,177,163,255,111,122,218,213,171, 26,141, 70,195,227,112, 56,102,229, -209, 59,120,240, 96, 69,219,191,126,253, 26, 59,119,238,172,216,151,148,148,132,109,219,182, 85,164, 2,168,233, 30, 53,105,210, -100, 64, 68, 68, 68,155, 3, 7, 14, 20,113,185, 92, 60,123,246, 12,135, 14, 29, 2,165, 20,206,206,206, 40, 41, 41, 65,110,110, - 46,174, 92,185, 2,131,193, 0,177, 88, 12, 15, 15, 15,139,185,115,231,118, 9, 15, 15,231, 1,168, 86,104, 25,141, 70, 35,151, -203,133,143,143, 15, 66, 67, 67,161,209,104,192,231,191,209,151, 10,133, 2, 50,153, 12,177,177,177, 72, 75, 75, 67,109, 47, 25, - 11, 11,139,144, 3, 7, 14, 72, 4, 2, 1,212,106, 53,138,139,139,145,145,145,129, 87,175, 94,105,164, 82,169,193,218,218,154, -227,227,227,195, 17, 10,133,194, 97,195,134,145,114,193, 57,104,208, 32,199,136,136,136,209,181,137, 36, 66,136,115,211,166, 77, -151, 79,159, 62,221,162,114,159,205,201,201, 65,112,112,176,213,175,191,254,186,140, 16,114,136, 82,154,247, 15, 51,121, 83,153, -172,217,189,251, 49,207, 2,163,162, 93,188, 94,101, 26, 59, 47, 90,188,137, 1,128,239,118,125,222, 57, 42,250,245, 47, 77,234, -231,102, 28, 59,209,248,158,157, 93, 2,173,205, 34,248, 94,119,183,193, 46,142,118,163,130,135, 12,161,223,126,187,185,245,156, -217,211,132, 62,141, 23, 1, 0, 60,120, 18,244, 50,124, 70, 74,212, 47, 44,190,253,118,115,235,224, 33, 35, 98, 83, 83,211,118, -245,234,225,126,228,242,181,236,211, 53, 89, 12, 37,142, 22, 30, 86, 66, 21, 60,124,155,193,191,169, 8, 15, 31, 61,195,241,163, -183,208,180,121, 7,104,181, 90, 24, 12, 6,209,224,193,131, 75, 34, 35, 35, 53,207,159, 63, 47, 86,171,213,221, 41,165,207,107, -171,127,102,102,130,201,223,181, 67, 41,223, 82,104, 40,150,243, 75,150,174, 60, 54,178,117,251,190,109,236,221, 60,120,206, 34, -211,233, 1,125,218, 29,218,187, 59,116,193,202,176, 67,104,219,174,111,199,167,207,110, 52, 3,240,184, 74,241,250,130, 70, 7, -248, 17, 67, 74,114,242,192, 87,105,105,153,141, 93, 92,117, 47,100, 84, 63,127,233,247,125,186,118, 15,105,209,176,105, 55,193, -211,132,107, 36,116,201,232, 31, 87,111,248,106,108,185,216,250,249,210,143,221, 63,248,224,150, 0,128,150,213, 87,101, 95,231, - 66,161,167,216,199,135, 73,221,191, 95,237, 59,120,112, 17, 0,232, 74, 75,157, 82,211,210,108,173,172,172, 64, 41,133, 94,175, -255,141, 15,113,185,223,112,128,191,191,139, 57,156,169,159,126,218, 98,201,146, 37,200,201,201,129,193, 96, 0,143,199,123,251, -153, 13,149, 74,133, 15, 62,248, 0,219, 55,110,236, 96, 14,167,209,104, 36, 31,174, 94,189,226,147, 21, 43, 26,206,156, 57,147, - 83,249,217,235,224,224,128, 99,199,143, 11,118,236,216,225,185,124,251,246, 15,198, 9,133, 41,181,113,230, 55,106, 4,135,220, - 92,203,114,145, 5, 0,254,254,254,216,185,115,167,112,234,212,169,130,193,131, 7,111,122,216,178,229,214,205, 93,186, 36, 59, - 54,110,108, 35, 16, 10, 61,205,109, 79, 0, 40,214,104, 2, 54,111,221,106,127,231,206, 29,228,230,230, 34, 39, 39,167,124, 44, -163,109,219,182,100,194,132, 9,182, 13,188,188,218,253,197,183,251,119, 90,228,111,100,209,154, 81,197, 51,245,191, 62, 90,101, - 21, 34,101, 21, 36,149, 94,142,191, 17, 44,181, 9,173,119,129, 76, 38,131, 76, 38,195,238,221,187,193,231,243, 43, 94,190, 0, -160,211,233,204, 17, 45,129,238,238,238,144,203,229,104,220,184,241,111, 44, 89,124, 62, 31, 12,195,128,207,231, 67, 40, 20, 66, -171,213,194,219,219, 27, 37, 37, 37,129, 53,113,170,213,234, 86, 14, 14, 14, 21, 47, 88,173, 86, 91, 33,178,202,203,171,211,233, - 80, 84, 84, 4,165, 82,137,226,226, 98,168, 84,170, 32,115,234,107, 50,153,240,228,201,147, 23,254,254,254,173,184, 92, 46,196, - 98,177, 72,165, 82, 85,248, 22, 21, 22, 22,226,135, 31,126, 80, 77,156, 56,209,233,212,169, 83, 37,102,220, 92,252,231, 63,255, -129, 80, 40, 68, 73, 73, 9,190,253,246, 91,204,155, 55, 15,124, 62, 31,197,197,197,216,185,115, 39, 22, 46, 92, 8,134, 97,160, -211,233,176,117,235,214,234, 45, 27, 9, 9,169,183,111,223, 14,106,221,186,181,253,137, 19, 39,242,250,244,233,227,220,175, 95, - 63, 88, 90, 90, 66,173, 86, 67,175,215,163, 67,135, 14,104,210,164, 9,164, 82, 41,206,157, 59,151,239,231,231,231,116,231,206, - 29, 83, 78, 78,206,171,218, 94,226,149, 44,134, 48, 26,141,200,205,205,133, 76, 38, 67, 94, 94, 30,178,178,178,144,153,153, 9, -134, 97, 80,219,199,188,163,163,227,136,128,128, 0, 46, 0, 88, 90, 90,162, 85,171, 86, 88,177, 98,133, 65,173, 86,143, 2,112, -174,236,176, 1,223,127,255,253,137,155, 55,111, 50,238,238,238, 72, 76, 76,132,179,179, 51, 99, 97, 97, 81,171,208,114,117,117, -221,119,250,244,105,135,114,113, 93,222,206, 37, 37,111,110, 71,112,112,176,195,129, 3, 7,246, 1,120,255,159,246, 82,179,179, - 4,191, 85,128,141, 60, 50, 90,218,124,209,226, 77, 76,147,128, 55, 31,175, 51,102,130,249,114,227,199,205,199, 15,181, 57, 99, -103,169,224,215,198, 51,160,183,215,142, 33, 67,250,112,198,142, 25,148,196,231,219,249,238,250, 46, 92, 34,113,153, 90,201,196, -105, 3, 71, 39, 27,248,250, 8,200,177, 51, 79, 37, 75,151,125,166,253,127,236, 93,119, 88, 20,215,250,126,207,246, 70,239, 93, - 17, 5,165,168, 24,148,196,222, 11,104, 52, 38,150, 68, 99, 76,177, 36, 38,154,104,140,198, 68, 19, 83,136, 38, 38,106,162,215, -150,162,177,119, 99,175,104,140, 37,118, 1, 1, 69, 1,129,133,101,105,187,176,125,103,231,252,254, 16,184,200,165, 44,168,247, - 38,249,205,251, 60,251, 48, 59,156,121,231,156,153,179, 51,239,249,206,119,190,107, 23,146, 4, 0, 0, 32, 0, 73, 68, 65, 84, -111,227,134,111,239,110,222,178,127,176, 88,120,108, 32,128,169,245,113,167,103,148,237,211,155,164,225,218,226, 27,196,205,187, - 27,162, 59,182,133,151,103, 41,214,254,188, 21,193,173, 58,195,100, 50,193,201,201, 73,110,179,217, 44,124, 62,127,163, 61, 34, - 11, 0, 78,156, 40, 99, 35, 35,203,204,252,114,150,121,235,157,111,158, 27, 48,228,217,136,190,125,251,179, 71,143, 29,181,116, -235,100,201, 31, 50, 40, 90,117,248,216,138,219,249,202,123,161,145,237,187, 35, 37,249,212, 96,128, 36, 1,117,119,216,164,219, -244,112,235,214,228,212,214,173,147, 88, 3,123, 85,246,249, 23, 55,135,196,199, 79,136,234,217,163, 39,123,236,248, 73,179, 24, - 69,183,156,186,119,205,123,235,245, 33,187,127,220,184,108,224,225, 67, 63,183,209,104,179,247,255,252, 51,229, 68, 86,205, 65, - 26,195,120, 11, 36, 18,158,250,212, 41,166,253,107,175,153,170,126,143,114,185, 28,123,247,238,133, 88, 44,174,254,136, 68,162, -234,109,111,111,239,170,197, 87,118,113, 2, 64,126,126, 62, 10, 10, 10,224,236,236, 12, 79, 79, 79, 20, 20, 20,224,220,185,115, - 72, 79, 79,135, 80, 40,196,224,193,131,193,171,199,183,185, 54,231,168, 89,179, 6,132,183,111, 31, 84, 91,100, 1,128,197, 98, - 65, 73, 73, 9,134, 15, 31,206, 59,116,232,144,207,225,251,247,159,253, 24,216,216, 16,103,167,248,248, 98,213,142, 29,117,158, -251,169,167,158, 34,127,252,241,135,100,240,160, 65,239,206,252,226,139, 21,223,111,216,144, 99, 99, 24,159,166,180,157,199,227, -241, 8, 33, 8, 12, 12, 68, 73, 73, 9, 42, 42, 30,204, 96, 59, 56, 56,192,213,213, 21, 86,171, 21, 44,165,194, 39,121,175,235, -211, 34,127,147,129,234,154, 42,193, 85, 59, 50,188,160,114, 94,180,234, 65,209,187,230,139,133,101, 89,187, 68,150, 80, 40,108, -212,231,202, 30, 43, 87,109,216, 35,180,170,234, 42,149, 74,171,127,104, 53, 5, 86, 85, 61,121, 60, 30,248,124, 62,236,177,200, -179, 44,203, 47, 47, 47,199,206,157, 59,209,171, 87,175,234,105, 41,141, 70,131,178,178, 50,104, 52, 26, 24,141, 70,100,102,102, -226,196,137, 19,104,211,166, 13, 96,103,240,215,187,119,239, 94, 14, 14, 14,142,169,122,137,247,233,211, 39,224,151, 95,126, 81, -198,197,197,249, 81, 74,241,209, 71, 31, 21, 61,253,244,211, 30, 53, 95,242,141,129,207,231,227,220,185,115,104,211,166, 13, 40, -165, 16,137, 68, 72, 75, 75,131,151,151, 23, 88,150,133, 64, 32,128, 90,173,134,163, 99,195, 49, 18,147,146,146, 38,190,250,234, -171, 74,103,103,231, 14,197,197,197,249, 18,137,164,199,153, 51,103, 2, 45, 22, 11,156,156,156,224,228,228,132,131, 7, 15,194, -197,197, 5, 51,102,204,184,111, 48, 24,206, 41, 20, 10,111,131,193,112,163,160,160,224,163,166,220,111,134, 97,160,211,233, 80, - 90, 90,138,146,146, 18,104,181, 90, 24,141,198, 70,235, 88, 23,122,244,232,129,253,251,247,243, 19, 18, 18,126,188,123,247,193, -192, 48, 36, 36, 4, 51,102,204,224,251,251,251, 35, 51, 51, 19,151, 47, 95,134,197, 98, 1,165,180,193, 31,175, 80, 40,236, 51, -115,230,204,238, 65, 65, 65,196, 98,177,128,101, 89,152, 76, 38, 84,109,223,191,127, 31,225,225,225,188, 22, 45, 90, 60, 67, 8, -233, 99,207,194, 10, 14, 15,160,186,191, 7,254, 66, 47,128,231, 4,106,216,131,226,162,230,165,141, 44, 44, 44,252, 98,246,199, -127,188,246,253, 98,139,119,110, 62,208, 54,106, 4, 66, 35,250, 97,226,120, 6, 9, 95,239, 68, 80,139,182,200,206,206, 70,159, - 62,125, 68, 74,165,242, 85, 0,179,236,229, 62,118,236,130,237,232,193, 67, 47,140, 26, 51, 33,166,127,255, 56,230,200,145,131, - 72,186,113, 36,249,213, 49,207, 23, 82,182,130,184,185,200,174,166,165, 94, 10,237, 16,221, 27,102,198,214, 3,248,100, 49,128, -122, 31, 42, 25, 25,212,252,233,167,159,242, 14,236,249,121,252,139,227, 94,233,216,175,223, 64,235,145, 99,191,225,242,249, 99, -215,151, 44,126,227,116,194,178,109,125, 6, 12,126, 62,210,211,251,220,193,168, 48,211,235,129,238,206, 25, 92, 79,169, 27, 2, -169,148, 69,229,115,145, 71, 8, 40,165, 15,137,172,218, 66,139,199,227, 53,106, 0,168,201, 89,243, 93, 84, 53,160, 94,189,122, - 53, 36, 18, 9,196, 98, 49,132, 66, 97,163,238, 23, 53, 57,147, 51, 51,251,174,223,184, 81, 82,151,200, 42, 46, 46, 70,113,113, - 49, 42, 42, 42, 48,118,236, 88,209,167,151, 46, 61,213, 24,103,144,175,175, 73, 33,147,169, 82, 82, 82,252, 34, 34, 34, 30,170, -175, 86,171,133, 76, 38,195,198, 77,155, 68, 67,227,227,223,236,119,240,224, 18, 0,101, 77,109, 59, 33, 4, 94, 94, 94,112,117, -117, 5, 33, 4, 12,195,160,160,160, 0,201,201,201,184,116,233, 18,248,132, 48, 79,242, 30,215,165, 69,254,110, 86,173,218, 34, -171,166, 69,139,212,103,125,177, 87,104,241,249,252,102, 91,181,234,131, 61, 83,135,114,185,252,166, 82,169,236,230,239,239, 15, -134, 97,170,133, 86,237,169,195, 42,235,199,181,107,215, 32,151,203,111, 54,198, 73, 41,125,166, 75,151, 46,216,181,107, 23, 78, -157, 58,133,123,247,238, 65,175,215,195,100, 50,193, 96, 48, 32, 57, 57, 25, 44,203, 34, 42, 42, 10, 10,133,162, 81, 78, 0,208, -233,116,249, 66,161,176,173, 76, 38,171,222,231,235,235,139,226,226, 98,214,106,181, 98,253,250,245, 90, 31, 31, 31,133, 76, 38, -179, 91,184, 18, 66, 80, 88, 88,136,128,128,128,106, 31,173,242,242,114,120,121,121, 85, 9, 11,152, 76, 38, 56, 58, 58, 54, 58, -117, 72, 41, 53, 2,152, 89,131,187,243,168, 81,163, 54,111,221,186,181,213,241,227,199,113,241,226, 69,120,122,122,226,203, 47, -191,188,151,149,149,245, 34,165,244,210, 19,232,168,141,150, 41, 46, 46,222,121,243,230,205,103,186,116,233, 82,253,148,232,211, -167, 15,233,211,167,143, 71, 77, 83,191, 90,173,198,159,127,254,137,227,199,143,131, 16,130,219,183,111,219, 12, 6,195,230, 6, -206, 45,106,209,162,197, 47,243,230,205,115, 96, 24,166,186,111,203,100, 50, 72,165, 82,136, 68, 34,240,249,124,100,101,101, 97, -248,240,225,206, 63,252,240,195,207,132,144,214,148, 82, 11,254, 33, 40, 51,192,114, 45, 73,235, 28, 21,238,157,188,102,117, 66, -183, 73,147, 81, 53,117,200, 68,133,123, 37, 95, 75, 82, 57,199,120,193,226, 34,110,152,231,208,241,156,183,204,214, 67,195, 14, - 29, 78, 28,253,254,187, 51,132, 33, 33,225,133,199, 79, 94, 9,234,199,124, 70,220, 61,156, 80, 92,164, 69,214,125, 21,238,102, -155,105, 72, 72,120,225,229, 63,111, 74,190,254,110,105,168, 78,111,220,118,242,116,254,111,141, 12,202,140,132,144, 17, 75,150, - 75, 78, 79,120,181,179, 88, 38,243, 67, 73,209, 77, 4, 5,121, 98,248,208, 14,248,105,195, 57, 56, 59,187,193,219,219, 27, 60, - 30, 79, 97,111,219,139,138,138,200,206, 45,191,191,246,242, 43,111, 60, 61,104, 96, 60,115,248,200, 1,193,169,163,251,206,253, -188,230,195,221,148,175,147, 19, 90, 46,107, 25,236,115, 35,227,206,181, 23,251,246, 31, 11,153,200,177, 13,208,174,206, 14, 91, -189,192,128,226, 62,143, 7,233,203,175, 76,234, 58,104,208,179,204,145, 35,123,112,228,224,134, 11, 11, 22,180, 60,120, 47,111, -147,232,252,165, 92,233,136, 23,166,150,238, 63,116,203,252,252,176,224,116, 63, 69,180, 1, 28, 30, 30, 72, 10, 4, 42,198,100, - 10, 12, 24, 52,136,175,207,206, 22, 58,120,123, 51, 0, 96,181, 90, 27, 21, 90, 0, 88,123, 56,237,173,139, 94,175, 7, 11, 48, -246,112, 22, 20, 22,182,172, 28,132, 87,195,106,181, 86,139,172,226,226, 98,148,149,149, 65,161, 80, 64,109, 50,121,219,195, 57, - 48, 54,118,253,167,159,124, 50,107,199,206,157,162,154, 34,171,234, 35, 20, 10,177,104,241, 98,209, 59,239,191, 63,245, 77,129, - 96,122, 83,174,103,213,160,157,207,231, 67, 32, 16, 32, 59, 59, 27,247,239,223, 71,118,118, 54,178,179,179, 33,147,201, 64,235, -185,158,143,209,162, 69,254,174,253,180,106,234,176,230, 20,162, 93,225, 29,154,226, 12,111,175, 48,176,217,108,143, 85,104,233, -116,186,227, 39, 78,156,136, 29, 49, 98,132,224,194,133, 11,240,241,241,169, 22, 90, 85,127,171,166,163,228,114, 57,118,239,222, -109,209,233,116,199, 27,249, 49,157, 56,120,240, 96,204,252,249,243,133, 19, 39, 78, 68, 74, 74, 10, 38, 79,158,140,178,178, 50, -104,181, 90, 20, 23, 23, 67,175,215, 35, 54, 54, 22, 82,169, 20, 55,110,220,176,234,245,250, 19,141,188, 28,104, 97, 97, 97,133, -167,167,167,111,237,255,189,240,194, 11,222, 43, 87,174,212,167,166,166, 90,187,117,235,230,100,175,224,168,194,150, 45, 91,170, - 45,117,233,233,233, 88,185,114,101,181, 79,214,149, 43, 87,240,205, 55,223, 84,199, 62,107,162,149,241, 82,100,100, 36, 99,181, - 90,209,166, 77, 27,248,251,251,195,104, 52, 98,233,210,165,204,147, 16, 89,246,194,104, 52,238,152, 48, 97,194, 7, 87,175, 94, -245, 21, 8, 4, 15, 76,218,149,237,179, 88, 44,184,115,231, 14,146,147,147,145,154,154,138,146,146,146,234,129,192,181,107,215, - 74,173, 86,235,182,250,120, 61, 61, 61, 63,250,233,167,159,124,228,114,249, 67,253,185,202, 26, 90,101, 37, 85,171,213,112,113, -113, 65,191,126,253,188, 78,156, 56,241, 17,128,249,255,132, 23, 26, 33,132,244,237,197,239,252,206, 91, 35, 48,114,168, 60,103, -215,254,188, 63,190,249,122,102,165, 51,188, 87,242,200,161,254, 57,215,211, 92,240,194,115,123, 58,159, 60, 77,114, 27,242,165, -171,244,177,218, 27, 27,235,118,106,215,190,125, 63,207,157,253,238,149, 89, 51,223,240,212, 27, 50,164, 33, 45,196, 4, 0,238, -102,155,233,141, 20,214,248,205,146,119,175, 36, 44,254,129,167, 42, 46,155,124,241, 98,253,225, 13,106,138,151,200, 48, 72, 67, -218,245, 82,134,134,117, 15,190,112,110, 35, 28,228, 6,180,109,215, 25,131, 6, 62,131, 83,137,215, 80,160, 54, 34, 63, 63, 31, - 38,147,169,193,112, 9,169, 55,118,143,167,132, 6, 17, 74,238, 19, 30,149,142,159,240,122,143,248,248,103,233,254,253,251,152, - 61,187, 55,158,221,246,235,242, 29, 60,145, 80, 96, 48, 59,155, 9, 49,106,192, 75, 74,169,208, 61, 24,208, 8, 37,162,250,205, -175,149,129, 93, 35, 34,219,249,140,159, 48,217, 57,110,200,112,122,240,224, 30,118,219,214,245,167,182,173,107,191,145,229,105, - 69,249, 57,122,137, 70,107,213, 80, 34,118,169,208,178,122,213,221,214, 70,191,248, 23,254, 49,162,253,177, 13,184, 77,166,220, -138,156, 28, 95,183, 94,189, 36,119, 62,249, 68,238, 29, 27,107, 36,149, 62,196, 13, 9, 45, 62,159, 15,240,120,172, 61,156,246, -214,197, 96, 48,128, 5,172,205,225,100, 24,230, 33,145, 85, 37,180,170,236, 26,246,112,174, 89,176,224, 66,208,160, 65, 37,137, -137,137,222,189,123,247, 38,229,229,229, 40, 47, 47,127, 72,108,249,249,249,145,136,168, 40,249,150, 83,167, 66,230,219,121, 61, -237,105, 59,143,199,123,226, 66,235,239,140,186, 44, 89, 15, 89,180,234, 67,149, 69,203, 30,161,101,167, 69,203,106,181, 90,225, -229,229,133,162,162,162,122, 95,252, 60, 30, 15, 50,153,172,106,142,184,193,149,119, 38,147,105,233,172, 89,179,166, 13, 25, 50, -196,163,109,219,182, 80,171,213,240,246,246,134, 84, 42,173,246, 29,171,226,187,114,229, 10,126,250,233, 39,173,201,100, 90,218, - 8,231,119,139, 23, 47,126,107,228,200,145,110, 62, 62, 62,112,117,117,197,141, 27, 55,224,234,234, 10,173, 86,139,180,180, 52, - 56, 58, 58, 86,251,237,236,219,183,175,220,100, 50,125,215,136,120,163,103,206,156,177, 56, 58, 58,222, 80,171,213,252,146,146, - 18, 65,105,105,169, 64,171,213, 10, 53, 26,141,240,240,225,195, 30,206,206,206,250,147, 39, 79,170,131,130,130,248,247,238,221, -227, 91,173, 86,158, 29, 47, 71, 76,159, 62, 29, 34,145, 8, 38,147, 9, 75,151, 46,197,172, 89,179,170,125,178, 22, 47, 94,140, -121,243,230, 85, 11,231,181,107,215, 54,181,243,192, 98,177,192,106,181,194,106,181,218, 37,126, 31, 5,246, 8,118, 74,105, 1, - 33,100,104,151, 46, 93,142,110,223,190,221,189, 50, 38, 25, 84, 42, 21, 84, 42, 21,212,106, 53, 42, 42, 42,192, 48, 12,252,253, -253,161, 82,169,176,103,207, 30, 77,121,121,249,160,134, 86, 28,242,249,252, 9, 61,122,244, 16,212,174, 67,213, 40,175, 74,188, - 75, 36, 18, 40,149, 74,244,233,211, 71,156,152,152, 56,225,239, 46,180,170, 4, 76,120, 40, 68, 3, 7,189, 38, 10,143,236,106, -190,158,188, 63,167, 93,176, 42,103,220,112,167, 3, 0,112, 45, 73,229,124, 61,205, 5,225,145, 67,233,192, 65,174, 49,170,130, - 53,237, 35,194,136,165,161,116, 61, 0,224, 44,151,140, 26,208, 63, 86,233,168, 80,240,190, 89,178,246,208,191,254,245,221, 83, - 59, 14,252, 59,188,195, 55, 75, 30,132,119, 24,208, 63,150, 77,189,149, 58, 10,192, 58,123,197,203,208,161,195,174,254,244,203, - 79, 72, 77, 62,233,247,193,244, 14,226, 18,149, 21, 50,135, 64,196, 68,123, 99,205, 47, 55,113,253,250,245, 2,179,217,220,167, -193,190, 68,104, 80,114, 74, 82, 88,251,200, 8,159,241, 19, 38, 57, 13, 29, 58, 28,251,247,239,197,175,235,215,157,121,126,236, -200, 31,243, 74,181,124, 47,161, 92, 36,167,172,152, 47,114, 22,136, 36,178, 66,179,249,193, 26, 8,161, 80,234, 4,140, 98, 27, -152, 57,196,148, 73,227,156,251,246, 31,142, 3, 7,247,226,215,245,107, 78,127, 28,249,194,186,224, 78,225, 36,246,169,175,167, - 6,183, 10,110,161,171, 80,105,121, 68,108, 49, 26, 89,199,175,215,103,125,123,119,222,132,187, 87,147, 70, 45,225, 86, 29, 62, -132, 27,191,198,197,117,121, 39, 35, 67,228,217,189,187, 76,121,234,148,188, 50, 19, 73,131, 66, 75, 32, 16,128,214, 63,213,245, - 16, 39,217,176,129, 7,160,193, 69, 88, 34,145, 8,122,189, 30, 86,192, 98, 15,167,239,145, 35, 57, 25, 25, 25,161,110,110,110, - 15,137,172,146,146,146,234,109,163,209, 8,189, 94, 15,153, 76,150,108, 15,167,234,204, 25,227, 87,211,167,207,127,113,236,216, -229,199, 79,156,144,186,187,187, 67,163,209, 60, 36,180,204,102, 51,250,246,235, 39, 90,124,245,234,120, 0, 11,236,185,158,222, -125,250, 52,234, 15,204,231,243,193, 62,225,169,195,127,192, 96,117, 82, 93,194,139,215,216, 20,142,189,171, 14,235,122, 65, 18, - 66,250,215,218, 53, 47, 38, 38,198,152,158,158,142,160,160,160,106,177, 82,243,156, 78, 78, 78,112,113,113,193,149, 43, 87,240, -197, 23, 95, 24, 0,204,107,136,147, 82, 90,174,215,235,199, 12, 24, 48,192, 32, 16, 8,208,174, 93,187,234,248, 89, 44,203, 66, - 44, 22, 67,161, 80,224,234,213,171, 24, 54,108,152, 94,175,215,143,169, 29, 67,171, 14, 78,141, 94,175,127,105,224,192,129,250, -148,148, 20,244,232,209, 3,215,175, 95, 71, 69, 69, 5, 42, 42, 42,144,153,153,137,136,136, 8,232,245,122,172, 92,185,210,160, -215,235, 95,162,148,106, 26,226, 44, 47, 47, 31, 54,107,214, 44,254,230,205,155,131,253,253,253, 35, 59,119,238,220,182, 95,191, -126,173,159,123,238,185, 22,113,113,113,190,161,161,161,198, 65,131, 6,121, 14, 25, 50,196, 83,175,215, 11,255,248,227,143,124, -171,213, 58,164,145,235, 89, 45, 78,210,211,211,171,167, 10, 5, 2, 1,138,138,138,170, 35,247, 87, 61,148,234, 18,194,245,113, -214, 20,219, 85, 2,171, 74,112, 53,246, 14,168,135,179,209, 23,135, 88, 44,174,178,120,210,198, 56, 41,165,215,110,221,186, 53, -160, 87,175, 94,215, 94,123,237,181,242,130,130, 2, 56, 58, 58, 34, 36, 36, 4, 97, 97, 97,240,240,240,128,197, 98,193,238,221, -187,117,123,246,236,185,169,209,104,250,212,142,161, 85,155,147,199,227,101,214,245,144,173,178,102, 85, 9, 45,169, 84, 10,127, -127,255,170,107,155,217,148,235,217,204, 31,239,147,229,172, 20, 48,253,250, 14,106, 21, 23, 63,194,121,247,222,115,226,229, 43, -246,220,140,233,143,181,238, 45,181,251,220, 91,106,247,197,244,199,218,229, 43,246,220,220,189,247,156, 56, 46,126,132,115,191, -190,131, 90,165, 36,167,182,125, 40,239, 97, 29,245,148, 74,165, 93,123,116,143, 41, 77, 60,123,154, 77, 88,252, 3,175,111,159, -231,175,174,251,113,247,238,117, 63,238,222,221,183,207,243, 87, 19, 22,255,192, 75, 60,123,154,237,209, 61,166, 84, 42,149,118, -181,167,237, 83, 38,141,115,142,143, 27,142,253,251,119, 51, 59,182,172, 92,188,117,231,237, 94,175, 79, 59,163, 74, 79,191, 78, - 11,115,143, 64,200,203,198,173, 91,183, 52,102,179,185, 79, 93,142,240,117,113, 78,126, 99, 92, 77,145,245,187,187, 79,143,181, -183,110,193,118,236,216,111,214, 19, 39,174, 26,126,191, 86,168,185,156, 82, 84,162, 84,151,220,211,106,139,205, 44,107,131,205, -102,227,127,250,233, 3,135,221,250,238, 81,183,110,189,113,242,248, 38,172,255,101,181,134,101, 97,124, 97,251,118,219,168, 81, -159,208, 22, 45, 91,182,216,184,101, 19, 25,250,236, 8,103, 10,176,195, 70, 14,119,217,188,117, 51,105,213,166, 85,203,144,144, - 7, 33,109,254,150,125,233, 9,112, 46,160,180, 84,155,157,125,250,202, 15, 63,152,188,199,140,113, 19,123,123, 59,193,102, 35, - 85,207,247,250, 62, 2,129,224, 33, 11, 76, 67,156,254, 30, 30,121,251,246,237, 67, 88, 88, 24,252,253,253, 81,211, 71,182, 42, - 32,183,187,187, 59,118,238,220, 9, 10, 92,182,135,179, 83,112,240,149, 69, 95,125,101,102, 89, 22,165,165,165,255, 97,205, 42, - 45, 45, 5,203,178, 56,120,224,128, 89, 91, 81,177,222,222,182,247,225,243, 43, 94,236,217, 51, 33, 62, 62,222,146,145,145, 1, -150,101, 81,211,178, 85, 88, 88, 8, 7, 7, 7, 24, 77,166, 64, 66,136,220, 30,206,194,195,135, 21,104,228,185, 94,219,162,245, - 36,238,251,223, 93,100,213, 76, 40, 93, 83,116, 53,104,209, 98, 24, 6,129,129,129, 15,165,116,225,241,120, 15,125,154,178,226, -144, 82,186,129, 16,114,100,208,160, 65,243,159,126,250,233, 41,243,231,207,231,183,109,219, 22, 26,141, 6,174,174,174,240,242, -242, 66, 90, 90, 26,246,237,219,103, 43, 42, 42, 90, 5, 96,161, 61, 75,232, 41,165,167, 8, 33, 67, 59,116,232,176,117,206,156, - 57,206, 3, 7, 14, 20, 6, 6, 6,130, 82,138,171, 87,175, 98,215,174, 93,150,117,235,214,105, 43, 69,214, 41, 59,235,122,148, - 16,242,252,144, 33, 67, 54, 78,152, 48,193,209,102,179, 9, 51, 51, 51, 97, 50,153, 96,181, 90,113,255,254,125,203,254,253,251, - 43,244,122,253, 56, 74,233, 81, 59,248,174, 16, 66, 34,142, 29, 59, 54,225,143, 63,254,248,226,181,215, 94,115,239,215,175,159, -136, 97, 24,156, 61,123, 86,221,169, 83, 39,175,194,194, 66,203,206,157, 59,139,141, 70,227, 60,155,205,102, 87, 10, 30, 66, 8, -180, 90, 45, 60, 60, 60, 96, 50,153,192,178, 44,204,102, 51, 28, 28, 28,170,211, 38, 81, 74,209, 20,231,250, 90,125,128,111,177, - 88, 48,118,236, 88,176, 44,139,165, 75,151,130, 97,152, 38,147, 57, 59, 59, 95,190,118,237,218,208,232,232,232,106,241, 82,213, -135, 36, 18, 9, 60, 60, 60,224,238,238,142,253,251,247, 67, 40, 20, 94,182,243, 30, 93, 7,208,137, 16,210,245,230,205,155, 47, - 3,136,182, 88, 44,254, 54,155,141,240,120,188,124, 74,233, 13,173, 86,251,163,189, 41,120, 10, 11, 11,191,120,229,149, 87, 58, -109,218,180,201, 65, 32,248,247, 79, 67, 32, 16, 64, 34,145,160, 42, 56, 38,165, 20,102,179, 25, 31,125,244,145, 86,167,211,125, -241, 79,121, 80,196,116,142,197,154,149,203, 28, 78,156, 60,162,190,117, 27,187,106,134,112,112, 17, 3, 39, 79,147, 92, 85,193, -154,246,202,156, 28,135,152,206,177,118,113, 90,205,150,226,151,198,189, 23, 84,153,130,231,163,204,204,172,213, 27, 55,124,123, - 23, 0,190,254,110,105,168,170,184,108,114,234,173,212, 81,171, 87,111,233,106, 53, 91,138,237,225,252,183,120,217,168, 1,133, -145, 82,122,145, 16, 18, 60,108,204,225,121,109, 90, 57, 61, 91, 88,108,200,171,168,208,191, 77, 41,189,107,111,219,187,119,235, -133,147, 71, 55,227,215,245, 27,181,148,229, 27, 61, 60, 60, 40, 0,220,186,229, 65,111,221, 42,163,255,246, 43,118,209, 9,233, -245,133,239,189,221,239, 61,141,182,228,187,239, 86, 52, 28,184,182, 67,199,167,209,161,227,211,152,246,246,135,206, 17,145,237, -130, 0, 96,251,118,106,139, 10, 37,191,205,255,248,147,103, 23, 46,252, 4,218,114, 19,170,210,245,164, 37,165, 28,200,200,160, -102,238,181,245, 48,230, 51,204, 69,188,247, 94,168,190,164,196,179,251, 7, 31,120, 8,222,127,159,215,144, 51,124,205,223,175, - 61,156,151,110,220, 56, 48,249,245,215,243, 22,204,159, 63,104,213,234,213,178,246,237,219,163,160,160, 0,237,218,181,131,191, -191, 63,142, 29, 59,134,157,219,182,233,202,202,203,231, 1,248,151, 61,156, 27, 14, 30, 76,107, 27, 25, 89,180,122,245,106,191, -248,248,120,162,211,233,160,209,104,160,209,104, 96, 50,153, 80, 25, 16,154,166,223,190,125,203,106,181,174,178,183,237, 54,181, - 90,186, 48, 54, 54, 87,196,178,139,158, 31, 57,114,214,194,207, 62,147,180,106,213,138,152, 76,166,106,171,150,197, 98,129,131, -131,131,197,108, 54,187, 3,208,219,195, 41, 89,183,142, 81,171,213,240,244,244,172, 14,215, 84, 51, 46, 97,121,121, 57, 40,165, - 92, 48,221,230,136,176,250,222,229,110,110,110,151, 5, 2, 65, 64, 77,235, 86, 93,185,243,106,238,179, 90,173,185,106,181, 58, -166,166,226,165,148, 30,175, 71, 32,132, 0,248,178,111,223,190,207,207,156, 57,147, 36, 38, 38, 98,207,158, 61,244,238,221,187, - 59, 0,204,171,239, 33,217, 8,167,163, 68, 34,153,161, 80, 40,250, 87,133,112,144,203,229, 55,117, 58,221,113,147,201,180,180, -190,104,240,141,112, 58, 73, 36,146,233, 10,133, 98, 64,121,121,121, 52, 0, 56, 58, 58, 94,211,233,116,199, 76, 38,211,178,250, - 18, 85, 55,194, 41,115,118,118,254,194,195,195,227,165,247,223,127,223,253,204,153, 51,249, 39, 79,158, 20,149,149,149,109, 50, -155,205,245, 38,149,174,139,211,221,221,253, 50,159,207, 15,120, 18,247, 8, 0, 58,118,236,184,127,216,176, 97,241,227,198,141, -131,213,106,197,191,254,245, 47, 28, 59,118,236,192,237,219,183,135, 54, 52, 26,173,205, 73, 8,241, 8, 8, 8, 72,156, 50,101, - 74,139,177, 99,199,202, 93, 93, 93, 33, 16, 8,160,211,233,112,231,206, 29, 92,189,122,149,238,221,187,183,226,202,149, 43,185, -122,189,190, 55,165,180,200,222,235,249, 40,163,230,218,156, 66,161,176, 87, 96, 96,224,150, 5, 11, 22, 56, 14, 24, 48, 64,230, -238,238, 14, 62,159, 15,171,213,138,252,252,124, 36, 37, 37,225,200,145, 35,186, 29, 59,118,232,138,139,139,199, 82, 74, 79,255, - 47,234,249, 56, 57, 35,194,200,199,181, 18, 69,215, 27,237,189,161,178,246,212,179, 95,111,191,225,163,158, 31, 50, 24, 0,182, -239, 60,116,248, 68,162,114,111,115,235,217, 88, 93,237,225, 12, 15,229, 47, 72, 78, 73,122, 40,160,101,100, 68, 84,122,120,251, -145,159,219,195, 85, 21, 25,190,118,219,107, 68,219,175,105,211,125,104,154,181, 42,241,244,135,243,230,226,203, 47, 18,176,119, -251,238, 3, 41, 25,116,255,223,185, 47, 61, 73,206,170, 36,200,114, 95,223,158, 75, 89,118,238,245,164, 36,135,154, 3,182, 42, -203,115,205, 65,165,159,159, 95,161, 82,169,244,182,135,115,232,247,223, 91,244, 10,133,100,238,162, 69,189, 42,140,198, 94, 11, - 23, 46, 20, 92,186,116, 9, 43,127,248,129, 49,230,230,110, 84, 3,211,235,154, 13,105,136,179,197,244,233,210,217, 43, 87, 78, - 12,105,211,198,235,229,151, 95, 22, 10,133, 66,232,116, 58,228,228,228,224,232,145, 35,230,148, 91,183, 82,180, 90,237,179,148, - 82,165,189,156, 67,191,255,222,226, 18, 18, 2,185,167, 39, 61,113,234,148,243,228, 25, 51,166,180, 12, 14,118, 30, 52,120,176, -208,201,201, 9,165,165,165,200,204,204,196,238,221,187, 11, 43, 42, 42,252, 40,165, 54,123, 56, 55,254,241, 71,135,131,167, 79, -191,240,249,231,159,139,163,162,162,224,236,236,140,242,242,114, 36, 37, 37,225,244,233,211,166, 85,171, 86,105, 52, 26,205, 20, -134, 97,246, 61,169,251,254, 79,157, 58, 36, 79,210, 21,192,158, 27, 65, 8,137, 1,240,113,229,215,207,236,200, 25,248,143,121, -248, 16, 66,130,220,220,220,214, 24,141, 70,106, 48, 24, 38, 83, 74,239,255,213,234, 73, 8, 17,196,196,196,172, 44, 44, 44,236, - 74, 41,133,179,179,243,185,228,228,228, 55, 41,165, 76, 83, 57, 9, 33,124, 0, 93, 29, 28, 28, 98, 29, 29, 29,123,153, 76,166, -240,202,233,183, 91, 58,157,238,180,197, 98,185, 8,224, 28,165,212,246,191,108,123,101, 61, 7,248,249,249,189,206,178,108, 27, - 66,136,139,205,102,131,213,106, 45, 99, 89,246,142, 70,163, 89, 7,224,216,255,186,158,143,139, 51,178, 13,121,142,242, 16, 94, -159, 32,120, 72,216,212, 18, 16,132,197,173,228, 59,116,119, 19,250, 60,111, 72,255,192, 21,192,131,149,137,141,165, 50,122, 72, -104,217, 33, 94,154, 44, 50,219, 8, 94,161,132, 6, 61, 60,250, 36,247,219,117,120,238,215, 71, 17, 90,246, 34,178, 45,233, 5, -138,174, 44,197,197, 91,183,233,201,127,234,179,238,113,114, 38, 16,226,246,131,171,235, 57,158, 64,224, 3,128, 87,105,125, 97, - 89, 66,108,148, 16,166,230,244, 86,205,129,101, 99,156, 22,160,189, 80, 34, 9,180, 49,140,119, 1,224,112,208,102,123,202, 72, -105, 69, 0,240,241, 85, 74,211,154, 83, 79, 11,208,158, 47,145, 4, 29,164,116,184, 90,161,232, 80,104, 48,120, 2,160, 14, 10, -197, 45,173, 78,183,222,104, 52,174,168, 35,121,123,163,156, 34,137, 36,192,198, 48,222, 0,192, 19, 8, 10,183,154, 76,129,185, - 78, 78, 47, 27, 77,166, 22, 14, 14, 14, 86,179,217,172, 53, 26,141,227,172, 86,235,137,166,180,253, 14,195, 68,252,193,227,245, -176, 40, 20,238, 22, 66, 20,102,134,177,152, 45,150, 28,163,209,120, 19,192,183,148,210,140, 39,121,223,255,177,168, 90,157,246, - 36, 62, 0,250,115,156, 28, 39,199,201,113,114,156, 28, 39,199,249,228, 57, 1,200, 1, 4, 1,224,255, 29,219,254, 79,250, 0, -152, 84,181, 45,224,164, 38, 7, 14, 28, 56,112,224,240,143, 48,156,232, 81,135, 79, 22,135,255, 45, 8,128,254,245,220, 48,187, - 77,130,205, 89,125, 96,199, 20, 3,199,201,113,114,156, 28, 39,199,201,113,114,156,255, 48,206,198,184,255,142, 83,146, 13,229, - 58,228,166, 14, 57, 78,142,147,227,228, 56, 57, 78,142,147,227,228,166, 14,159,208,135, 7, 14,245,169, 83,111, 66,136,247,227, - 46,203,225,159,221, 23,234, 56,214,159, 16,226,223,196,242,190,220, 85,231,192,129, 3,135,127, 6,254,235, 66,203,222,151,214, - 35,190,220, 30, 73,248, 16, 66, 18, 8,129,242,193,135, 36, 60,174,178,118,156,215,207,211,211,243,157,200,200,200,141, 62, 62, - 62,211, 8, 33, 94, 77, 60, 62, 84,161, 80, 44,115,112,112, 72,116,112,112, 72, 84, 40, 20,203, 8, 33,161,143,233,190, 17, 66, -200,100,169, 84,122,202,207,207, 47, 79, 34,145,156, 34,132, 76, 33,205, 76,112, 73, 8,105, 75, 8, 89, 72, 8,249,140, 16,210, -161, 41,199,122, 71,141,216,230, 21, 53,226,134, 87,212,136, 36,143,246,207,134,122, 69,141, 72,242,138, 26,113,195, 59,106,196, -182, 39,208, 95,155,125,127, 43,143,189,255,224,211,248,177,132,144,111, 9,144, 67, 8,114, 31,181, 47,113,224,192,129, 3,135, -191, 6,154,228, 12,239,239,239,255, 60,165,116, 50, 0, 74, 8, 89,147,151,151,183,179, 25, 47,158,217,149,219,139, 41,165,115, - 31,165,156, 29,199,126, 71, 41,157,213,116,145,134,217, 44, 75,121, 0,192,227,145, 15,188,189,189,229,124, 62,255, 63, 28, 12, -109, 54,155,156, 16, 76, 99, 89, 74, 42,203,206, 38,132, 44,163,148,170,154, 35, 14,199,143, 31,255,221,178,101,203,164,114,185, - 28,217,217,217, 3,167, 76,153,210,141, 16,242, 30,165, 52,191,177,227,101, 50,217,139, 93, 98,187,190,183,232,235, 37, 14,222, - 94, 94, 10,198,198, 90, 50,179,179,228, 31,205,153, 21, 43,147,201,150, 53,148, 76,185,182,160, 2, 48, 73, 32, 16,140,150, 74, -165,173,141, 70, 99, 6,195, 48, 59,248,124,254,160, 47,190,248, 34, 42, 46, 46, 78,170,213,106,197, 12,195,180,249,245,215, 95, -223,251,233,167,159,134, 16, 66,134, 55,180, 76,191,202,162, 67, 41,205,171,177,251,133,236,236,236, 24,145, 72, 68, 66, 66, 66, -120, 0,110, 52, 82,190, 26, 20, 8, 77, 62,187,189, 61, 0, 68,118, 31,149,158,124,118, 59, 42,183,159,192,160,224,225,190, 32, -149, 74, 87, 25,141,198,251, 85,255,175,172,167,202,158, 99, 9, 33,203, 43,211, 7,197, 0,120,185,178,232, 6, 74,233,101, 66, -136,143, 84, 34,153, 97, 48, 26, 9, 0,242, 40,125,137, 3, 7, 14, 28, 56,252,215,141, 72,157, 40,165, 87, 43,103, 36,226, 1, - 28,168,122,119, 55,117,213,225, 91,183,111,223,118, 0,128,176,176,176, 55, 1,236,108, 66, 37,254,227,197,211,175, 95,191, 78, - 50,153,236,161, 40,200, 6,131, 65, 76, 8,250, 53, 71,188, 84,157,195,108, 54,241,132, 66, 49,120, 60,242, 94,135, 14, 29, 90, - 22, 21, 21,157,225,241,120, 27,115,115,115, 75,155,113,241,176,118,237,218, 48, 95, 95,223,255,136,214,156,159,159, 47, 30, 62, -252,217, 38,241, 77, 36, 68, 98,146, 72, 98, 69,132,248,218, 24,198, 5, 0, 4, 2, 65,105, 91,103,231,152, 47, 63,255, 92, 78, - 8, 97,139,139,139, 97, 48, 24,240,238,187,239,202, 82, 82, 82, 70, 0, 88,209, 72, 29,195,158,126,166,219,187, 71,142, 28, 14, -215,150,148, 26,215,126,183,250,138, 65, 32,210, 7, 71,180, 19,173, 92,179,222,117,210,196,113,111, 19, 66,174,213,149,142,164, - 22, 15, 15,192,238, 25, 51,102, 68, 14, 29, 58, 84, 92, 94, 94, 46, 53, 24, 12, 45, 55,110,220,248, 81, 76, 76,140, 67,116,116, -180,120,203,150, 45, 68,163,209,128, 82, 42,111,215,174, 29, 29, 61,122,180,113,235,214,173,211, 0, 44,111, 76,248,242,249,252, -165,109,219,182, 93, 80,217,102, 81,141, 50,194,136,136, 8, 5, 0,164,165,165,125, 74, 8,102, 52, 36,178, 9,112, 59,178,251, - 40,128,160, 77,242,217,237,210,200, 30,163,140,160,184, 67,128,219,149, 3,130,133, 64,141,184, 80, 15,227, 86, 94, 94, 94,179, -114, 19,198,199, 15, 37,132,144, 29,126,126,126, 59, 11, 11, 11,131, 9,193, 27,246, 14, 6, 8, 33,196,221,221,253, 21, 0, 9, - 0, 94,191,117,235, 86, 39, 0, 8, 15, 15, 23, 1,184,236,228,228,212,205, 98, 54, 19,238,113,197,129, 3, 7, 14,127, 75,116, - 2,112, 21, 64,124,141, 20, 60,107,154, 35,180,196, 0,112,230,204, 25, 0,144, 52, 71,244,213, 20, 48,211,167, 79,135,175,175, -111,109,241,130,196,196, 83,143,210,216,135,206,241,217,103,159, 57,148,149,149,245,255,241,199, 31,123,250,251,251,127,147,151, -151,119,161,161,131, 41,165, 42, 66,200,226, 74, 11, 4, 36, 18,105,250,148, 41, 83,174, 86,254,187,229,111,191,253, 38, 31, 54, -108,152, 30, 64, 22, 0, 72, 36, 82,127, 62,159, 23,246,192,233, 13,139, 27, 18,132,163, 8, 9, 17,139,197,125, 39,127,255, 61, -243,212,176, 97, 2,133,167, 39, 1,128,172,212, 84,247,197, 95,127,221,173,244,238, 93,177,193,221,189,184, 88,167, 51,164,167, -167, 67, 34,145, 16, 62,159,255, 84, 99, 13, 86, 40, 20,239,124,254,229, 34,133,182,164,204, 96,212,150,155,249,140,213,228, 40, -147,219, 84, 5,133,197, 14, 50,133,254,131,143, 63, 17,191,245,198,132,119, 0,188,217, 8,213,180,247,222,123, 47,188, 75,151, - 46,254,219,182,109, 35, 26,141, 6, 2,129,192, 33, 58, 58, 26, 49, 49, 49,182,147, 39, 79,146,224,224, 96, 68, 69, 69,225,236, -217,179, 56,119,238, 28,233,212,169,147,124,215,174, 93,227,235, 18, 90,181,197, 53,159,207,123,183, 93,187,118,209, 10,133,194, - 28, 22, 22,134, 55,222,120, 3,148, 82,244,239,223, 63,202,193,193, 97,167, 78,167, 19,167,165,165,246,108, 76,100,171,146,246, -140, 6, 0,175,168, 17, 55, 0,180, 7,197,157,194,164, 61, 53,167, 31,195,211,210,210,158, 46, 45, 45,173,118, 70,172, 74, 96, -222,179,103, 79,187, 59, 82, 85, 95, 24, 54,108,232, 7, 0, 33,253,251,247, 47,155, 54,109, 26, 47, 53, 53,245,165,231,158, 27, - 17,117,251,246, 29,212, 87,207, 90,253,136,188,242,202, 68,149,131,131,195, 72, 63, 63,191, 52, 0, 2,145,168, 90,103,242,189, -189,189, 61, 59,116,232, 48,213,205,205,173,144,207,227,121, 81, 80,218, 88, 95,226,192,129, 3, 7, 14,127, 41, 28,168, 20, 87, - 7,106,255, 67, 0, 0, 7, 14, 28,160,255, 30,181,199,147,134, 94, 60,215,175, 95, 15,212,235,245,176,231, 37, 80,115,137, 38, -165, 84,197,231,243, 87,242,120,228, 77, 66, 8,162,162,218,223, 91,186,116,105, 93, 57,189,204, 81, 81,237,239,241,249,188, 86, -148, 82, 16,194,251, 23,203,218, 84,117,113,214,247, 98, 20,139, 37,179, 1,192,199,199,247,238,161, 67,135,204, 47,188,240, 2, -190,254,250,107,209,156, 57,115,102,181,104,209, 98, 90,118,118,118, 65,125,245,172,252, 62,215,219,219, 91,190,118,237,218,176, - 41, 83,166, 92, 85, 42,149,115, 1,192,207,207, 47, 1, 64, 4,128,172, 26,251,176,106,213,214,188, 55,222,120, 35, 93,165, 82, -205,173,143,243,121, 66, 90,183,104,215,174,239,194, 51,103, 40,207,100, 34, 69,191,255,174, 85,171, 84,214, 12,181, 90,254,203, -229,203, 67, 63, 74, 72, 16, 6, 6, 5, 33,113,223, 62,143, 34,189, 94,173, 49,153,140, 42,149,138, 50, 12,115,206,142,182, 71, -122,121,122,201, 87,127,251,175, 75,142, 66, 62,235, 21,224, 79,132,110,110, 2,158,220, 73,204, 23,240, 76,173, 90,134,138, 1, - 68, 54,118,143, 68, 34,209,248,129, 3, 7,202,183,110,221, 74,162,162,162,224,226,226,130,223,127,255, 29,215,174, 93, 67,105, -105, 41,207,106,181,162,115,231,206, 88,180,104, 17,130,130,130, 80, 86, 86,134,251,247,239,123,136,197, 98,207, 6,174,231, 67, -253,105,246,236,217,240,245,245, 5,195, 48, 40, 41, 41, 1,195, 48,112,112,112, 0, 0,228,230,230, 98,223,190,189,141,246, 37, - 59, 69, 18,158,121,230,153,114, 66,200,173,218, 22,173,166,112,250,251,251,111, 81,171,139,134,244,237,219, 23,165,165,165,214, - 79, 62,249, 4, 29, 58,116, 64, 88, 88,152, 61,125,126,174, 68, 34,249,177, 69,139, 22,223, 78,159, 62,221,215,205,205, 13, 38, -147,233,163,130,130, 2, 76,157, 58, 21, 0, 16, 23, 23,215, 65, 40, 20, 30,122,237,181,215, 16, 28, 28,156, 87, 82, 82,114,255, -202,149, 43,111,232,116,186,164,230,182,221,206,235,195,113,114,156, 28, 39,199,249,151,226,180, 87,139,252, 21, 81, 57, 77,184, -166,198,247, 53, 15, 9,173,248,248,120,114,224,192, 1,106, 71,195,138, 3, 2, 2, 2,101, 50, 25, 0, 20, 55,181, 34, 54,155, -109,154,135,135, 71,225,220,185,115,187,135,133,133,153,167, 77,155,150,148,153,153, 57,175,102,153,224,224,224, 47,126,248,225, - 7,164,167,167,103, 37, 36, 36,156, 45, 42, 42,250,172,137,141,157, 67, 8, 89, 90,105, 29, 43,218,183,111, 95,135, 51,103,206, -188,249,221,119,223,121,190,245,214, 91,162,119,222,121,103, 28,128,175, 27,227,225,243,249,250,186,166, 11,235,130,175,175,175, -185, 46, 31,174, 42, 12, 35, 68,230, 36, 22,247, 89,120,230, 12, 53,103,101,233,127, 90,178,196,113,245,159,127, 46,176, 82,234, -237,229,229,133, 30,221,186, 85, 72,249,252,162,194,130, 2,214,171,117,107,126,230,161, 67, 30, 6,177, 88,185,117,235, 86, 77, -113,113,241,158, 70, 77,120,132,104, 89, 74,205, 14, 1, 65,214, 23, 70, 12,136,186,116,241, 90,170,163,151, 7,175, 83,116, 84, -135,212,244,172, 43, 96, 89, 11, 33, 68,219, 24,143,179,179,115, 88,113,113, 49,180, 90, 45, 60, 61, 61,177,116,233, 82,248,248, -248, 64,175,215, 35, 57, 57,153, 6, 4, 4,144, 51,103,206, 32, 32, 32, 0,106,181, 26,102,179, 25,229,229,229,133, 38,147,201, - 80,159,240, 21, 8, 4, 63,243,120,100, 34, 33, 4,173, 90,133,100,175, 88,177,194,204,178, 44,194,195,195,241,220,115,207, 97, -215,174, 93, 72, 78, 78,174,178, 60,153, 91,180,104,153,205,227,145, 22,149, 90,169,217, 86,157,170,212, 62,121,121,121, 35,155, -101, 22, 37,132,231,231,231, 55, 46, 52, 52,244,205, 23, 95,124,209, 42, 22,139,161,211,233,170,174,133,117,200,144,184,178, 97, -168,130,175, 28, 0, 0, 32, 0, 73, 68, 65, 84,195,134, 58, 31, 56,112,160,193,122,154, 76,166,187,222,222,222,175,191,247,222, -123, 27, 87,173, 90,229, 58,111,222, 60,176, 44, 11, 74, 41, 24,134,169, 78,250,205,178, 44,118,239,222,141,140,140,140, 47,106, -138, 44, 14, 28, 56,112,248,255,130, 38,104,145,191, 28,106,248,102,161,182,216,250,175, 71,134,231,243,249,171,143, 30, 61, 26, -221,179,103, 79, 65,191,126,253,162, 2, 2, 2,162,114,115,115,147, 0, 32, 32, 32, 32,106,240,224,193, 81, 94, 94, 94, 88,182, -108,153,158,207,231,175,110,166,178,172,249,210,187,234,235,235,251,205,174, 93,187, 22, 79,158, 60, 25, 62, 62, 62, 17,255,237, - 54, 59, 73, 36,157, 94, 91,186,148, 17, 90,173,188,239,191,249,198,105,201,169, 83,139,183,109,223, 46,120,230,153,103, 8,165, - 20, 55,111,220,144, 45, 90,190, 92, 62,118,196,136,172,180,187,119,153,189, 71,142, 88, 85,121,121, 37,121,106,245,124, 74,105, - 73, 99,252, 86,171,245,252,237,219,183,253,122,244,122,198,255,244,159, 73,215, 94, 24, 17,215, 87, 40,224,145, 59, 89,185,151, -125,125, 60,156, 19, 79, 29, 55, 88,173,214,243,141,241,232,116,186, 76,134, 97,220, 40,165,158,137,137,137,240,244,244, 68,105, -105, 41,172, 86, 43,204,102,179, 89,175,215, 75,139,139,139, 97, 52, 26, 97, 50,153,224,228,228,132,155, 55,111,170, 24,134, 57, - 89, 31, 39,195, 48,175, 73,165,210,207,132, 66,161, 88, 36, 18, 41, 47, 95,190, 12,173, 86,219,210,197,197,229,107,134, 97,160, - 84, 42,113,230,204,153,247,157,156,156,178, 0, 64, 42,149, 66, 44,150,184,155, 76, 38,166, 62,103,120,123, 45, 90,205,133,175, -175,111, 80,171, 86,173, 22,126,240,193,236,240,142, 29,163,161, 86,171,193,178, 44, 20, 10, 5,244,122, 61,156,156,156,208,181, -107,215,204,133, 11, 23,230, 83,138, 73,141,137, 65,149, 74,165,246,247,247,159, 54,121,242,228,207,194,194,194, 90, 81, 74, 17, - 26, 26,138,129, 3, 7,226,208,161, 67, 72, 79, 79,135, 78,167,179, 93,184,112, 97,179, 82,169,252,141,123,220,114,224,192,129, -195,223, 79, 39, 86,249,102,213,180,102,253, 79,132,150, 74,165, 82, 7, 4, 4, 28,190,114,229,202,208,209,163, 71, 35, 49, 49, -241, 21, 0,239, 1,128, 68, 34,121,101,244,232,209,184,114,229, 10, 82, 83, 83, 15,171, 84, 42,245,227, 56,167, 88, 44, 54,154, -205, 15,140, 83, 82,169, 84,218,196,195, 91, 86, 78, 25, 2, 64,203, 6,246,213, 11,158, 64,224,219,126,240, 96, 65,233,181,107, -218,181, 23, 47,126,182,113,227, 70, 65,247,238,221,137,213, 98,129,141,101, 17, 18, 18, 66,250,245,239,175,248,121,227, 70, 55, -155, 78,119,230,243, 15, 62,248,125,205,107,175, 85,164, 83,154,101, 79, 5, 77, 38,211,242, 55,167,190,222,255, 84,226,239,254, - 17,237, 90,187, 29, 62,122,234,170,187,187,179, 60,172, 77, 27, 69,113,105,137,109,222,156,247, 5, 38,147,233,251,198,120, 12, - 6,195,238,227,199,143,143, 8, 12, 12,244, 76, 74, 74,130,217,108,134,205,102, 67,191,126,253, 64, 41,149, 0, 96, 5, 2, 1, - 82, 83, 83, 97,177, 88, 10,111,223,190,173,188,115,231,142, 4,192, 87, 13,241, 26,141,198,236,154,223, 3, 3, 3, 7,196,199, -199,131, 97, 24, 12, 30, 60, 24,123,247,238, 29,144,146,146,178,164,166,230,123,212,123, 94,105, 33, 11,247,247,247,223, 85,185, -203, 46, 39,248,128,128,128,168,208,208,208, 85, 95,125,245,149, 40, 32, 32, 0,148, 82,184,186,186, 64,175,215,163,168,168, 24, - 17, 17, 17, 8, 12, 12,196, 87, 95,125, 5, 0,155,237,181,184,229,229,229,221, 1, 48, 58, 34, 34, 66, 84, 86, 86, 22, 51, 96, -192,128,101,253,251,247,199,213,171, 87,241,251,239,191,143,149, 72, 36,133, 22,139,133,241,245,245,157, 68, 8,113,178, 88, 44, -155,138,138,138,242,185,103, 23, 7, 14, 28, 56,252, 45, 80,229,163, 85, 29, 37,190,201, 22,173,136,136, 8,133, 70,163,121,185, -101,203,150, 98, 0,144,201,100, 17,173, 91,183,158,149,145,145, 81,222,212,218,232,245,250,109, 27, 55,110, 28,248,237,183,223, -138,226,226,226, 90, 7, 4, 4,116, 1,128,145, 35, 71,182,118,116,116,196,198,141, 27, 45,122,189,254,177,197, 68,178, 90,173, - 61, 59,119,238,140,146,146, 18,100,101,101, 53,105, 90,230,183,223,126,147,227,129, 95, 86,131,251, 26, 2, 99, 54,187,186,248, -251,243,242, 78,157,178,148,104,181,190, 61,123,245, 34, 86,139, 5, 60, 30, 15,197,197,197,184,127,255, 62,156, 93, 92, 72,234, -237,219, 14,235,102,207,254,173,101,199,142, 98,155,217,236,222, 4, 81,161, 35,132, 76,124,123,218, 91,187, 55,109,218,236, 89, -166,213,102,200,100,114,147, 68, 34,242,153,254,246,219,182,146,146,146, 9,148,210, 10, 59,168,190,218,180,105,211,224,193,131, - 7,223, 8, 10, 10,242, 82,171,213, 62,101,101,101,182,146,146, 18, 62, 30,248, 90, 17, 0, 56,117,234, 20,180, 90, 45, 99,179, -217,206, 0, 88, 72, 41, 53,219, 91,215,150, 45, 91, 58,199,198,198,246,246,244,244,132, 70,163,129,187,187, 59,162,163,163,123, -183,108,217,242,199,172,172, 44,205,227,236,245,199,142, 29,115,164,148, 62, 77, 41,197,224,193,131,237, 58,198,102,179,189, 26, - 31, 31, 47, 34,132,192, 96,208, 67, 42,149, 65,161,112,128,163,163, 19,194,194,218, 66,169, 84, 98,208,160, 65,230,140,140,140, -149,249,249,249, 77,238,163, 26,141,102,120,215,174, 93,103, 78,157, 58, 21, 12,195, 96,248,240,225,200,201,201, 89,146,153,153, -185,213,207,207,111,220,171,175,190,234,233,238,238,142,153, 51,103,202, 0,124,202, 61,187, 56,112,224,192,225,175,143,218, 62, - 90,117, 90,180, 26,154, 19,245,245,245,237,225,230,230,246,145,193, 96, 16, 87, 77,201, 16, 66,196,158,158,158,123,253,252,252, - 18,148, 74,101,147,156,226, 74, 75, 75,181,190,190,190,123,207,159, 63, 63,106,228,200,145, 56,118,236,216,132, 74,161,133,243, -231,207,227,222,189,123,123, 75, 75, 75,181,143,163,241, 1, 1, 1, 67,122,247,238, 61,178,115,231,206,216,191,127, 63,108, 54, -219,185,166, 28, 95,115,133, 33,234, 88,117, 88,181,207, 46, 50, 62, 31,132, 16, 48, 12, 3, 0, 40, 82,171,145,158,150,134,146, -210, 82,152,140, 70,232,244,122, 91, 88,112,176, 65, 99, 54, 11, 9, 64,155,120,147,179, 29, 28, 28,238,235,117, 58, 47,119, 87, - 55,131, 92, 46, 65,153, 86, 35,186,124,233, 66, 5,165, 52,195, 78, 14, 51, 33,164,215,161, 67,135,230,243,249,252,209, 14, 14, - 14,120,243,205, 55,249,189,123,247,134, 72, 36,130,201,100, 66, 89, 89, 25, 54,110,220,168,102, 24,166, 85,101, 63,112, 80, 40, - 20,235,249,124,126,174, 86,171,253,168,177,115,152,205,230,184,161, 67,135, 10,204,102, 51, 62,255,252,115, 44, 88,176, 0,131, - 7, 15, 22, 92,186,116, 41, 14,192,166,199,213,233, 89,150,197,128, 1, 3,106, 58,195,223,178,231, 56,161, 80, 24,213,166, 77, - 27,168,213,106,168,213,106,120,122,122,194,207,207, 15, 62, 62, 62, 88,178,100, 9, 93,182,108,217, 97,139,197,178, 82,173, 86, -171,154,209, 23, 39,189,242,202, 43,147, 70,141, 26,133,138,138, 10,156, 63,127, 30,221,186,117,195,226,197,139,125,207,156, 57, -243, 94,231,206,157, 33, 20, 10,145,152,152, 8,134, 97,114,184, 71, 23, 7, 14, 28,254,191,225,239,232,159,213, 24, 26,180,104, - 5, 5, 5,185,216,108,182,247,135, 13, 27, 54, 96,196,136, 17, 24, 52,104,208, 67,255,223,180,105,147,227,206,157, 59, 19, 2, - 3, 3, 7, 91, 44,150,175,154, 50,213,199,178,236,238, 77,155, 54,197, 61,243,204, 51,242, 62,125,250,132, 0,128, 68, 34, 49, -111,218,180, 73,207,178,236,238,166, 54,164,118,240, 72,127,127,255, 14, 2,129, 96,228,208,161, 67, 59, 76,156, 56, 17,201,201, -201,216,184,113,227,157,176,176,176,179, 77,164,206,106,100,213, 97, 66, 99,214, 45,190, 88, 92, 92, 86, 80,224,226, 16, 20, 36, -116,117,116,204,223,191,127,127, 96,255,254,253, 73, 78, 78, 14, 74, 75, 75, 97, 52, 26,113,233,210, 37, 86, 0,100, 11, 92, 93, - 73,246,249,243,132, 47, 22, 55,121,177, 65,160,175,107,232,199,115,166,180, 52,154,140,145, 26,141,134, 17, 8,133,194, 0, 31, -151, 38,189,176, 41,165, 38,133, 66, 17, 3, 64,192,178,172,222,205,205, 77,126,244,232, 81,136,197, 98, 16, 66,208,190,125,123, - 72,165, 82,145, 66,161,184, 15, 0, 62, 62, 62,226,213,171, 87, 59,143, 27, 55,238,247,198,184,159,122,234, 41, 97,112,112,240, -179, 97, 97, 97, 56,127,254, 60,146,146,146,178,207,159, 63,223,162, 83,167, 78, 8, 10, 10,122,246,169,167,158,218,126,229,202, - 21,235, 99, 26, 93, 52,203, 25,222,102,179,177,132, 16,240,120, 60,176, 44, 11,181, 90,141, 86,173, 90, 97,197,138, 21, 88,186, -116,233,231, 74,165,114, 95,115,234, 19, 17, 17, 33,138,142,142,158, 48,106,212, 40,220,189,123, 23, 9, 9, 9, 69,249,249,249, -167,142, 28, 57,242,252,212,169, 83,249,221,186,117, 67,113,113, 49,126,254,249,103,230,242,229,203, 63, 21, 20, 20,108,224, 30, -185, 28, 56,112,224,240, 15, 22, 90, 65, 65, 65,163, 68, 34,209,204, 49, 99,198,240,219,182,109, 11,149, 74, 5, 39, 39, 39, 43, - 33, 68, 8, 0, 46, 46, 46, 86,153, 76,134, 41, 83,166,160, 99,199,142, 61,102,207,158,221,205,223,223,127, 69, 94, 94,222,122, -123, 78,172, 82,169,244,190,190,190, 59,222,124,243,205,175,174, 93,187,218, 10, 0,254,252,243,207,123, 74,165,114,142, 74,165, -210, 55, 81,100, 85, 5,197, 36, 50,153,236, 98,104,104,104,230,144, 33, 67,156, 70,140, 24, 1, 79, 79, 79, 92,185,114, 5,139, - 22, 45,186,109, 54,155,231, 39, 38, 38, 50,255,237,139,204,152, 76, 5,151,247,236,113,236,253,210, 75, 78,211,227,227,191,121, -235,205, 55,191,253,248,227,143, 5,109,219,182, 37,122,189, 30, 23, 47, 94,164, 59,119,238,180,254,252,217,103, 75,161, 80, 8, -207,239,220, 41, 54,155,205,217, 77,180,150,244,138, 27,220,171,237, 55,223, 46,135,209, 80,129,139,231, 14,160,180, 84,141,213, -107,118,181, 13, 8, 8,232,149,155,155,123,186, 9,215, 51,236,216,177, 99, 94,148, 82,136,197, 98, 44, 92,184, 16,126,126,126, -112,114,114, 66,121,121, 57,222,123,239, 61,231, 25, 51,102, 56, 3, 64,114,114,114,117,120,134,198,160, 84, 42,187, 78,153, 50, -197,145, 97, 24, 28, 62,124,216, 76, 8,249,232,248,241,227, 63,182,111,223, 94,220,163, 71, 15,199, 13, 27, 54,116, 3,144,248, -184,132, 86, 51,143,187,115,244,232,209,206,163, 71,143,166, 66,161,144,148,149,149,193,197,197, 5, 43, 86,172,208,229,231,231, - 31,104,118, 31, 96, 24,177, 92, 46, 23, 83, 74,177, 99,199, 14,100,103,103,191, 90, 84, 84, 84,224,237,237,189,235,253,247,223, -159,213,182,109,219,224,180,180,180,236,242,242,242,197, 42,149, 42,147,123, 52,113,224,192,129,195,223, 7, 85, 78,240, 77,138, - 12,111,179,217,166, 28, 57,114,132,207,178, 44,214,172, 89,131,203,151, 47, 83,185, 92,254,145, 92, 46,255, 65, 38,147,217, 12, - 6,195,228, 55,222,120, 99,220,130, 5, 11,120, 61,122,244,192,249,243,231,121,173, 90,181,154, 0, 96,125,141, 19,247,111, 40, -214,134, 70,163,185,164, 82, 21,180,170, 17,160,178,149, 68, 34,189,212, 72, 99, 30,226,172, 35, 40,102,236,194,133, 11,117,190, -190,190,230,164,164, 36,172, 90,181,138,189,124,249,242, 41,177, 88,188, 90,169, 84,154,236,225,124, 76, 23,189,154, 83,204, 48, - 87,126,157, 53, 43,252,169,225,195,217,215,103,206,172, 16,201,100,239,124,179,124,249,236,178,242,114, 63, 16, 66,221,157,157, -179,215, 44, 92,152, 48,248,217,103, 43,146, 79,159,150, 94, 59,118, 76,232,105,181, 94,111, 74, 61,115,115,115, 79,135,182, 14, -194, 47,107,191,133,197, 98, 66,126,222, 3,157, 86, 84,172, 65, 67, 34,171, 46, 78,134, 97, 52,207, 63,255,188, 8,128,108,252, -248,241,226,194,194, 66,180,110,221, 26, 0,160,213,106,113,224,192, 1,180,107,215, 14, 0,112,243,230,205,234,237,198,234,169, - 80, 40,158,237,214,173, 27,178,179,179,145,156,156,124, 66,169, 84, 22,251,249,249,157,200,201,201,137,235,220,185, 51,118,239, -222, 61,172, 62,161,213,212,123,100,143,208,170,139, 83, 38,147,205,217,181,107,215,171,231,206,157, 27, 61,107,214, 44, 97,191, -126,253, 0, 0,229,229,229,122, 74,169,173, 57,156, 53,235,100,181, 90,193,178, 44,220,220,220,116,149, 3,142, 76, 52, 18, 72, -246, 73,247, 79,142,147,227,228, 56, 57,206,191, 2,231, 63, 4,246, 71,134,167,148, 50, 44,203, 34, 49, 49, 17,187,118,237,178, - 89, 44,150, 73, 74,165,242,102,141, 34,203,253,252,252,142, 61,255,252,243,235,211,210,210,248, 41, 41, 41,176,231, 69, 84, 19, - 70,163,209, 90, 59, 37,177,209,104,124,228,169,163, 95,126,249, 5, 5, 5, 5,150,156,156,156,227, 12,195,236,126,196,213,139, -143,188,234,240,103, 74, 77, 47, 17,114,124, 65,247,238, 3,230, 31, 59, 38,121,253,195, 15, 77,175, 76,156,248,190,205,108,182, -242, 69, 34, 86,172, 80,240,108, 18,137, 48,249,244,105,233,178,169, 83,221, 12, 38,211,225, 95,155,224, 96, 94,195,162,133, 87, - 94,127, 23,134, 26, 22,173,243,151,210,209, 84,139,150,209,104,140,172, 20, 29,247, 1,248,188,252,242,203, 96, 89, 22, 6,131, - 1,229,229,229, 80, 42,149,154,137, 19, 39,218, 42,197,147, 96,228,200,145, 78,246,240,134,132,132,248, 9,133, 66, 28, 62,124, - 24, 66,161,240, 0, 0, 8,133,194, 3,199,142, 29,139, 27, 59,118, 44,252,253,253, 67, 8, 33,132, 54,162,146,188,163, 70,108, -163, 64, 40, 8,218, 60,248,197,163,141, 87,212,136, 27, 4,184, 93, 25, 53,254, 86,167, 78,157, 0, 59,253,178,106,162,114,113, -199, 82, 15, 15,143,237,179,103,207,126, 51, 54, 54,118,224,130, 5, 11, 8, 0,254, 99,177,110, 50,204, 35,133,158,224,192,129, - 3, 7, 14,127, 93,171, 86, 93,251, 5, 13, 28,176,166, 87,175, 94,147, 0,240, 9, 33,171,242,242,242,110,214, 46,163, 84, 42, -211,253,253,253,191, 14, 14, 14,174, 78, 52,221,148, 74, 85, 70,114, 95,196,227,145,217, 15,190, 55, 61, 64,101,141, 84, 39,179, - 1, 16, 30,143,191,254,234,213,171, 31,222,191,127, 95,221, 84,225, 87, 23, 30,199,170, 67, 0,216, 68,105,230, 88, 66,142,204, -140,138,234, 63,120,234, 84,116, 24, 60,216,201,175, 69, 11,155,193, 98, 97,111,158, 61, 75,206,237,216, 33,186,118,236,152,208, - 96, 50, 29,222, 69,233,253,166,214, 51, 55, 55,247,116,235,144,128,163, 47,140,140, 27, 24, 18,236, 7, 0,184,155,169, 68, 81, -137,230,104, 83, 68, 86, 45,193, 53,124,197,138, 21,251, 68, 34,145,160,102, 42, 27,139,197, 82, 82, 37,198, 8, 33,126,107,214, -172,217,194,227,241,178, 27,227, 75, 73, 73,217, 59,127,254,252,145, 89, 89, 89, 71,239,223,191,159, 5, 0,217,217,217, 89,126, -126,126,235,243,243,243, 71,102,103,103,239,164,118,168,144, 90, 73,165,145,124,118,187, 20, 64,251,170,164,210,205,205,101, 88, - 19,149,161, 21, 62,242,245,245,221, 52,112,224,192, 55, 0,228, 61, 10,159,217,108,182, 26, 12, 6,198,102,179, 9, 44, 22, 11, - 53,155,205, 86,238,177,196,129, 3, 7, 14, 77, 66,103, 0, 85,153, 72,170, 12, 40,158,181,182,205,168, 76, 23, 88,245,248,173, -252,174, 6,112,169, 6, 71,205,253,141, 29, 11, 0, 69, 0,110, 84,238,171, 75,139,172,169,239,123,189, 66, 43, 47, 47,111, 39, -236, 72, 26,109,111,185, 6,132,210, 92, 66,200,178, 42,209,244,168, 28, 12,195, 60,150,252,112, 60, 30, 47,115,216,176, 97, 77, - 42,223, 88,153, 45,148,102,191, 67,200,134,253,223,127, 31,125,120,213, 42,127, 27,195,184, 19,128,242,197,226, 98,179,217,156, -229,105,181, 94,111,170, 37,235, 33,107,204,221,220, 65, 0, 16, 26, 26, 74,239,220,185, 3, 74,233, 35,173,222,160,148, 94, 7, - 16,216, 72, 25, 37,128, 30,118,138,193,205, 0, 54,215, 33,216,183, 0,216, 98,247,168,161, 42,169, 52,192, 99, 9,251, 66,100, -247, 81, 59, 0,176, 85, 73,165, 31, 39,242,243,243,211, 80, 25,231,237, 81,144,149,149,101, 10, 14, 14,254,117,209,162, 69,227, -175, 93,187,182, 53, 47, 47,207,196, 61, 51, 57,112,224,192,161,105, 34,139, 16,178,191,242,221, 51,180,114,176,191,191,246,118, - 85,153,170,114, 53,203, 84,113,212,222,223,208,177, 0, 48,103,206,156, 15, 19, 18, 18,228, 0,236, 74,198, 92, 51,112,169,224, -175,112,245, 30, 71,242,220,199,157,128, 55, 55, 55,119,237,147,104,235,242, 7, 66,234,194,147,188,158,183,111,223, 38,255,228, - 95, 91, 85, 82,233, 26,136,250, 59,212, 59, 51, 51,115, 69,239,222,189, 87,231,229,229, 49,224,192,129, 3, 7, 14, 77,129,103, - 93,194,168, 30, 61, 48,180,161,255,215, 18, 68,255, 81,174,174,239,132,144,253, 9, 9, 9, 67,237,173,108, 77,139, 22,143,187, -119, 28, 56,252,247,240,191, 88,245,202,129, 3, 7, 14, 28,234, 21, 68, 15, 89,177,170,196, 87,237,239,115,230,204,249, 16,245, - 76, 27, 86,150,241, 37,132, 76,170, 92,117,248,144,191, 22, 1,208,191,158,147,219,189,154,128, 16,210,191, 25,141, 59,206,113, -114,156, 28, 39,199,201,113,114,156, 28,231,255, 47,206,198,184,235, 57, 62,190,190,169,190,134,166, 17,107,111, 55,118,172, 29, -101, 15,212,211,150, 73, 53,115, 29, 62,148,243,176,202,201,249, 73,124, 0,244,231, 56, 57, 78,142,147,227,228, 56, 57, 78,142, -147,227,124,196, 79,103, 74,105, 60, 30,100, 77,161,148,210,120, 74,233,224, 57,115,230,204,173,218, 55,103,206,156,185,148,210, -126, 85,229, 42,203, 84, 31, 83,181,175,246,223,218,251, 26, 41, 91,223,245,152, 84,115,187,230,247,191,132,143, 22, 7, 14, 28, - 56,112,224,192,129, 67, 3,184, 4,160,115, 13,107,147, 26,192,205,132,132,132,210, 26,190, 83,106, 0,215, 1,116,172, 44,167, -174, 52, 40,213,244,173, 50, 87,126, 55,215, 81,198,108, 79,217,122,172,112,107,234,218, 6,192, 9,173,250, 16,237,203,255, 44, - 40,192, 43,166,218,234,199,178, 0, 0,182, 50,250, 64,117, 24, 2,150, 5,165, 20,202,194,178, 43, 55, 84,244,227,230,158,175, -173, 63,113,243,146, 74,151,178,148,118,175,220,117, 90, 83,108,122, 55, 73, 67,203,236,229, 8,247, 33,225, 82, 30,222,103, 41, - 58, 0, 0,143,224,134,145,197,215,183, 10,232,173, 71,189, 30,132, 16, 18,233,137, 73, 98,153,124,140,179,139,107,155,210,210, -162,219, 22,163,105,123,138, 26,171,105, 51, 2, 67,181,118, 35, 79,179, 20, 31, 2,224, 9,121, 88,146, 94, 76, 79,113,189,142, - 3, 7, 14,255, 37, 60,106, 92,188,186, 66, 7, 61,234, 34, 36, 46,192,158,125, 98,171, 54,254,180,179,220,255, 12, 77, 18, 90, -145, 94,100, 42, 8, 62, 1, 64, 65,241,105,114, 33,253, 87,147,142,247, 35,253,165,124,254, 58, 0,124,163,197, 54,147,178, 56, - 83,231, 75,157,135,158, 82, 17,127, 9, 0,214,104,179,189,150,172,180,223, 95, 44, 42,128, 12, 22,176,188, 95, 89, 74,133, 54, -150,174, 7,197,126, 7, 17,254, 56,159, 75,141, 77,169,107, 80,128, 87,204,158, 63,243, 7,158,250,215,116,196,118,104, 13,106, - 99, 0,214, 10,121,143,247,113,226,187,151, 17, 27, 30, 4,202, 90, 1,150,129,195,144,111, 48, 36,202,185,217, 63,146,182,254, -196,173,133,135, 87,210,218,181,235,124,252, 66, 34, 8,203, 88,144,246,231,209,113, 51,102,207,239, 27,229, 76,162,236, 17, 91, - 29,253,200,235,173, 91,181,125,255,221, 79,190,229,251,250, 5, 42, 88,171,137, 41,200,188,213,105,249,226,249, 59, 59,250,145, - 37,215,149,116,157,189,130, 42,194, 19,147, 5, 18,241, 40,153, 84,209, 70,175, 47,191, 99,179, 88,183, 71,249, 9, 6,127,253, -205,210,232,222, 3,226, 28,108,229, 5, 60, 43,139,136,109, 91,183,180,248,126,197,202, 56, 66,200,179,148, 82,182, 41,109,102, - 41,102,167,111,152, 20, 39, 20,240, 73,248,171,107,249,176,115,201,108,109, 68,120,147, 23, 9,109, 60,188, 4, 37,248, 61, 69, - 69, 55, 55,231, 28,225,222,228, 71, 66, 17, 6,130, 29,132, 98, 75,114, 33, 45,228,158,119, 28, 56,252,179,192,227,241, 78,177, - 44,219,231,113,114, 18, 66,158,166,148, 94,224,174,238,255,111, 52,205,162, 69,240,121,114, 70,142, 43,108, 22, 68,134,133,124, - 6,160, 73, 66, 75,202,231,175,191,116, 91,229, 3,198,130,181, 95,188,185,213,108, 5, 24,171, 5, 54,198, 10, 27, 99, 5,195, - 88, 96,179, 90, 65,173, 38,204,255,233, 20, 96, 46, 71, 76, 84,232,122, 0,190,246,158, 67, 72,121,191, 94, 57,123,212,141,152, - 53,216,252,175,132,183,115,212, 21,111, 31,191,161, 44,138,244, 38,115, 83, 10,241,115, 83, 4,193,169, 85,211,177,113,247,129, -220,101, 63,234, 82, 89, 74,225,230, 36,107, 59,110,104,114,224,134,189,167,114,150,174, 55,166, 2,128,179, 66,220,118,194,141, -219, 65,143,114, 19,188,164,210,165,171, 87,126,239,227,235, 46, 35,204,185,175,192,216,108, 8,108, 17,207,159, 59,109,156,239, -231,223,173,251, 14,192, 43, 13, 29,223,206,155, 68,132,181, 14,159,185,254,192,185, 32,157,182,208,124,116,211,135, 25, 48,193, -234,227, 31, 46,252, 44,225, 91,254,188, 15,166,191,215,206,155, 92, 76, 85,209,148, 70, 30, 10,188,112, 47,236, 77,248,234,155, - 14,125,135, 12,117, 96, 43,212,124,163,174, 34,108,237, 79,235, 62,105,215,161,139,188, 71, 84,128,168,112,251, 20, 98, 40, 47, -129,133, 39,149,244,141,236,239,100, 24, 63,214,186,246,151,141,211, 0, 44,111,210,112,176,198,180, 53,203, 54,127,116, 73, 40, -122, 92,187,112,106,178, 77,121, 9,212,102, 5,108,150,234,191,176, 89, 65,217, 7,127, 99,167,252, 4,212, 17,195,203,174, 7, - 48,197,192,227,103, 47,249,170, 10,242, 59,127,247,205,151,115, 35,188,200, 33,216,240,235,173, 18,156,110,170,192,228,192,129, -195, 95, 23,132, 16,134, 82, 42,120,204,156,113,148,210,131,143,200,241, 62,128,215, 43,191,174,163,148,126,253, 24,234, 21, 0, -192,167,242,107, 1,165, 52,151,235, 1,143,116, 61, 39,213,156, 50,124,148, 56, 90, 82, 80, 22,216, 49, 2, 0,100, 77,173, 8, - 5,164, 32,124,192,170,195,240, 33, 3,224,225,229, 3, 88,245,128, 69, 15, 88, 13,128, 85, 7, 88, 13, 40,202,207, 6, 44, 58, -224,238, 33, 48,148, 74,154,220, 98,147, 6, 72,223,142,126,157,130,224,233, 44,197,244,225, 17, 30,107, 14,167,175, 91,119, 52, -173, 63,128, 49,118,213,149, 82,196,182,111,131,101,235,116,169,251,174, 20, 14, 2,128,248,104,143,195,177, 17, 45, 2,151,174, - 55,166, 30,184, 81, 50, 24, 0,134, 68, 57, 31,234,210,214, 55,136,125, 4,171, 47, 75,105, 15,191,150,109,136,237,218,106,176, -218, 92,104,181, 6,228,102,110,128,171,255, 83, 60, 27,139, 94,141, 29, 47,227, 99,206, 59,243, 22, 9,245, 90,149,153,181,168, -109,158,252, 82,190, 64,204, 18,228,157, 54, 85,176,101,182,119, 39,189,204,204,252,248,139, 57, 0,198, 53,104, 29,242,194,180, - 37, 75,150,182,239, 22,211,206,171, 96,231,116, 82, 81,170, 2,195,151, 75,134, 63,211, 13, 46,161, 17,172, 42,113, 9, 17,135, -244,135,139,123, 8,242,206,109, 66,214,133, 93,164,123,167,145,146,159, 55,139,198,215, 39,180, 66, 61, 73,247, 65, 61,187,108, - 13, 9,242,243,165,148, 5,203, 82, 80,214,134, 87, 95, 24,136,185,219,238,194,102,179,225,249, 65,221,251, 45,154,220,151,178, - 44, 11, 74, 89,228, 20, 20,235, 79, 94, 76,237,151, 81, 66, 47,218, 99,169,234,248,116,159,238, 55,174, 92,104,103, 77,255, 13, - 49,227, 18, 82, 9,112,182, 70,159,235,126,245,200,207,237,128,159,154,251,227, 33,225, 94,176,101, 29,254, 10, 65, 61, 39,241, - 87,111, 62,236,169, 81,231, 77,216,185, 97,229, 11,255, 90,189,122, 35,128, 41,220, 35,134, 3,135,127, 6, 40,165,143, 93,108, -101,103,103, 43, 31, 69,108, 5, 4, 4,244, 4,176,184,202, 67,131, 16,178, 56, 56, 56,120,254,191, 7,170, 15,141,245, 52, 54, -155,109, 92,110,110,238,153,134, 56,135, 14, 29,234, 7, 32,184, 6,103, 48, 33, 36,184,174,178, 46, 46, 46,182,174, 93,187,102, -237,223,191, 95,201,245,144,166, 11,174,230, 8,173,212,251,219,167,119, 50,229, 87, 0, 64,170, 29,157,246,161, 41, 63,163,213, -246,213, 47,159,188,252, 85,100, 75, 55,148,235,204, 56,122, 57, 11, 54,155, 21, 54,134,169,180,108, 49,176, 49, 86, 12,234,232, -129,174,198, 41, 88,190, 63, 13,140,141, 77,104,136,179, 54, 44,148,125, 49,186,255,232,109, 44, 75,197, 18, 33, 79, 19, 22,232, -238, 53,243,249,142,188,233,195, 35, 97,176, 48,163, 35,188,201,201, 20, 21, 93,107, 23, 39,251,159, 33,143,104, 93,251,108, 76, -163,109,111,192, 26, 21, 59,118,232, 0, 39,106,210,192, 90,116, 23,229,122, 43,238, 22, 91, 81, 96, 44,131,132,228,219,197,201, - 82,116, 8,240,247,149,255,177,245,131, 76,119,190, 86,224,197,103, 68, 98, 30, 3, 27, 75,249,180, 44,197,228,214,110,128,176, -202,111,171,161,122,202,228,142, 47,247, 28, 24,239,124,127,211, 36, 34, 11, 27, 4,175, 78,129,200, 60,243, 11, 10, 47,239, 71, -177, 50,139, 56, 25,203,224,237,222, 26, 67,198,141,193,215, 99, 58,163, 92, 91, 14,126,126,134,179, 88, 40,113,169,143,147,218, - 48,110,201,162, 47,124, 5,124,222,131,235, 89,245,177, 89, 97, 48,153, 0, 27, 3,169,128, 5,161, 85,255,179,194,102,181,200, - 59,140,252,224, 77, 0, 23, 27,107,123,138,138,110,142,244, 34, 61,192, 90,219, 81,171, 1, 4, 56,155, 92, 72,171,197, 79,132, - 55,121,241,169, 65, 19,123, 80,130,223,155,115,143,162,220, 49, 52, 38,216, 65,161,208,166, 34,119,199,219,200,128,148,122,119, -123, 29, 47,190, 58, 77,190,102,205,154, 97,132,144,169, 53,125,212,158, 68,146, 85,142,147,227,252,187,114, 58, 59, 59,183,106, -217,178,229,124,171,213,218, 83, 36, 18,121, 91, 44, 22,176, 44, 91, 32, 22,139,127,207,202,202, 90,168,209,104,238,253,213,218, -126,227,198, 13,187,197,150, 61,156, 66,161, 16,105,105,105,119,236, 21, 91,181, 57,133, 66,225,175,103,207,158,197,182,109,219, - 0, 0,233,233,233, 8, 13, 13, 85,212,117,108,102,102,166,162,119,239,222,191,162, 86, 70,143,218,156, 55,111,222,108,245,219, -111,191, 97,199,142, 29, 0,128,180,180, 52,132,133,133,213, 89,159,179,103,207,242, 95,122,233,165, 86, 0,148, 79,250, 30,253, - 19, 68, 86,205,191, 15, 9,173, 3, 7, 14,208,248,248,120, 82,123,187, 14,220, 13,114, 21,119,130,209, 6, 0,119,155, 90,137, -148, 2,186,168,163,175,112,240,137, 29, 43,122, 74, 69, 60, 44, 88, 59, 51, 71, 93, 82,254,180,128,128, 5, 0,134,130,231,234, - 32, 62,159, 48,161, 99, 80,105,133, 17,251,254,204, 59,147,172,106,154,137, 52, 89, 73,143, 1,112,249,247,139,146,132, 77,248, -250,216,150, 45,115, 6,119,120,119,120, 7,236, 61,151,245, 46,128, 70,163,190, 83,150, 5,101,153,106,231,247,202,161, 3,192, - 62,156, 20,152, 5,125,176,143,109,154, 69,171, 55, 33,130, 82, 47, 12,113,147,139,127,152, 60,249, 13, 39,171,250, 54, 74,204, - 34,228,148, 26, 81, 96, 16,162, 66,224,133,188,212,155, 54, 30,193,177,198,111, 46,180,148, 49,186,184,138, 29,120, 81, 3,222, -244,215, 30,254,176, 84, 76, 24,190,211,115,159,187, 20,157,248, 54,139,209,169,117,132,160,209,220,122,206,206, 46,161,198,226, - 44,190,166,180, 8, 46, 62,145, 24, 60,122, 40, 62,141,143, 64,185, 86, 7,117,201,121,218,198,215,137,100,255,190, 17,243,134, -132,163, 88,149, 15,147, 21, 32, 58, 83,137,209,108,172,168,247, 58,242,176,122,198,172,217, 47,182,240,245, 84, 84, 45, 42,160, -172, 13, 29,195, 67, 48,160,103, 44,142,157,253, 3,151,110,166,131,173, 92, 84, 64, 89, 22,185,133,165, 42,163,197,246, 75,147, - 46,168,141, 1,181, 26,235, 20, 98,104,198,148, 97,123,111, 34,183, 1, 31, 63,221,198,241,181, 57, 67, 91, 56, 42, 36, 4, 70, -171, 13, 70,179, 21,229,127,252, 0,247,150,237, 33,151, 74, 73, 39, 24, 4, 0,184,188,133, 28, 56,212,192,168, 81,163,164, 42, -149, 42, 49, 62, 62, 62, 98,192,128, 1,242, 30, 61,122, 64,167,211,225,232,209,163,208,233,116, 45, 2, 3, 3, 91, 28, 61,122, -116,228,211, 79, 63,157, 18, 16, 16,208,123,251,246,237, 77,241,161, 21,224,223,206,236, 44, 0,134, 16,130,202,125, 4, 0,251, - 40,121,110,197, 98, 49,178,179,179, 31,187,101, 43, 47, 47,239, 78,115, 44, 91, 21, 21, 21, 34,127,127,127,120,122,122,194,102, -179, 65,167,211, 97,207,158, 61,208,104, 52, 96, 89, 22, 50,153, 12,159, 47, 89,139,212,171,137,184,120,241, 34, 52, 26,141,168, - 49,206,220,220, 92,210,177, 99, 71,152, 76, 38, 48, 12, 3,163,209,136,227,199,143, 87,127, 23, 8, 4,152,253,217,119, 72,191, -156,136,107,215,174, 33, 55, 55,247,191,146,109,164, 9, 90,228,175,104, 13, 93,211, 80,135,253,175,194,102, 99,230,174, 89,191, -229,252,220, 41, 99, 48,109,108,255,192,133, 43,118,245, 79, 81,211,245, 0, 16,225, 73, 38,140,239,211, 38,200, 69, 46,196,167, -155, 46, 3,148,206,125,212,243, 37, 21,211,244, 72, 31,242,238,238,139,217,137, 31,142,233,132, 16, 95,167,208,214,173,137, 56, - 35,195,142,156,130, 44, 3, 87, 7, 73,219,248,104,143,195, 96, 89,184, 56, 74,218,193,198,192,197, 65,210,118, 72,148,243, 33, - 0,112,145,139,218,213,101,249,170, 15,157,131, 68,147,228, 18,193, 36,197, 83,190, 65,175, 12, 27, 32,139, 27, 54, 82,230, 32, -100, 80,124,241, 40,180,194, 0, 88,221, 90,192,100, 45, 65,238,189, 12,219,137, 11,183,242,138,202, 77, 51, 27,173, 38,197,153, -188,123,105,158,173, 58, 12,112, 45,218, 63,175,176,213,196, 77,193, 60,176,188,242,141,207,169, 20, 94, 93,100,127,222,189, 87, -193,210,255,180,232,212,134, 86,163,201,178,218,224,107,176, 9, 28, 51, 78,253,140, 57, 67,218,163,180,164, 16, 70, 11, 3,141, -129,177,248,184, 72, 37,166,123, 73, 48, 89, 24,152,173, 44,132, 46,254, 56,122,254,102, 17,107,181, 30,170,143, 51,163,136, 94, - 3,224, 80,115, 95,107, 79,210,241, 3, 39,217, 53, 88, 13,200,206, 85, 98,253,129,243,157, 42,203, 53,191,147,179,204,131,233, -231, 26,150, 44, 66,209,163, 57, 78,240,225,222,164,139, 76, 42,250,126,241,187, 47, 69, 60, 19,230, 38, 97,115,207,131,176, 22, - 40,108, 2, 24,196, 54, 56, 7,134,128, 53,151, 83,189,209, 88,150, 12,112,145,222, 57,112,168,129,118,237,218,249, 56, 59, 59, - 39,207,154, 53,203,237,185,231,158,195,238,221,187,161,213,106,241,203, 47,191, 96,233,210,165,248,228,147, 79, 96,181, 90,177, -102,205, 26,249,206,157, 59,187,172, 92,185, 50,183, 69,139, 22,145,217,217,217, 5,141,141, 41, 1, 72, 0, 8, 43,223, 93, 4, - 0,123,240,224, 65,196,197,197,225,224,193,131,108,229, 62, 27, 33,196, 74, 41,109, 86, 62, 81,177, 88, 12,177, 88, 12,141, 70, -243, 88,196,150, 80, 40,132,131,131, 3,196, 98, 49,202,203,203,155, 44,182, 24,134,225,231,230,230, 66,163,209, 96,192,176, 97, -248, 46, 33, 1,125,250,244,193,128, 1, 3, 64, 41,197,241,227,199,209,191, 91, 20,198, 60,219, 27,183,110,221, 2,195, 48,118, -213,183,160,160, 0, 42,149, 10,131,135, 13,195,218,149, 43, 17, 27, 27,139,182,109,219,130, 97, 24, 36, 38, 38,226,133, 65,221, - 32, 29,209, 31,233,233,233, 92,167,182,211,154,245,184,124,180, 30, 25, 73,133,244, 66,132, 39,217, 63,118, 80,151,161,195,186, - 71, 96,237,214, 19, 95, 68, 68,144, 45, 0,224,238, 40,249,252,229, 62, 33, 72,185, 95,138, 19,215,148,251, 83,212,143,103,181, - 6,107,131,135,187,147, 28,224,139, 97,176,176,140,211, 93, 52,234,192,204, 82, 10,121,207, 15, 48,126, 88, 74, 96,108, 68, 96, - 96,213,170, 67,135,184,111, 49,225,230,157,160,206,109,125,130, 96,179, 2, 54, 43,156,198,108, 2, 62, 83, 52, 90,143,238,173, - 36,199, 62,152,249,110,215, 33, 35, 70,203,196,114,103,216,180, 57,176, 22,220, 68,241,237, 51,208,201, 67, 81,144,125, 23,219, -142, 92,212,220,206, 45,214,242,120, 56,170,210,152,222,207, 40,161, 21,141,241, 26,173, 72,152, 63,111,102,252,182, 45, 91, 29, - 37, 33,221, 73,198, 15,113, 26,177,128,145,120, 6, 63,197,211, 75, 61,232,151,191,108,117,210,153,241, 85, 99, 60,122,157,118, -215,241,163,135,199,180,105,213,221, 49,243,210, 1, 24,140, 38,152,172, 64,100,151,222,176,217,168,152,240, 8,235,196,231,147, -194,226, 82, 16,171, 77,245,251,245,204,252,179,215,239,242, 77,142,141,115, 63,164,238, 9,255,157, 97,189,163, 1,171, 1,207, -246,108,143,239, 54,158,120, 27,192,196, 71,187,201, 15, 44, 90, 20,232, 30,233, 69, 86, 1,232,126,121,207,210,118, 49, 35,102, -160, 41, 22,173, 40, 79, 50, 36,170,181,223,207,223,125,254,129,155,123, 64, 40,159,176, 86, 80,159, 14,128, 54,151,146,220,243, -112,246,143,133,205,175, 27,214, 44,255,166,130,101,233,150,230,132,182,224,192,225,159, 12,163,209,184,107,209,162, 69,110, 67, -135, 14,173,178,200,224,252,249,243, 88,183,110, 29, 20,138,135,159,147,113,113,113,160,148,186, 45, 88,176, 96, 23,128,103,234, -227,236,214,173,219,176,229,203,151, 43,163,163,163,239, 86,138, 45, 17, 0, 94, 82, 82, 18, 47, 39, 39,135,184,186,186, 82, 63, - 63, 63,171, 82,169,100, 1,216, 94,125,245, 85,190,131,131, 67,155,138,138,138,211,205, 21, 90, 98,177,248,177,248,108, 9,133, - 66, 16, 66, 32, 22,139, 33, 18,137, 64, 41,109,146,216,178,217,108,130,131, 7, 15,226,242,229,203,248, 36, 58, 26,239,250,251, -195,205,205, 13,137,137,137,160,148, 66,161, 80,160,164,164, 4, 91,182,108, 65,223,190,125,193, 48,140,200, 30,222, 29, 59,118, -224,202,149, 43,248, 44, 38, 6,239, 58, 59,195,193,193, 1,199,143, 63,152, 13,148, 72, 36,200,206,206,198,241,227,199,209,187, -119,111,174, 83, 63, 34,236,238, 60,189, 9, 17, 16,111,248, 88,204, 6, 80,134, 2, 4,126, 17, 17, 68,148,146, 66, 45, 77, 61, - 41,143,135,121,203,215,239,143,255,118,198, 48, 50,105,120, 39,191,133, 63,159,154, 10, 0,175, 61, 31,230, 47,151, 8,176,108, -111, 10,229,241, 48,239,113, 52, 48, 34,130,136,120, 60, 76, 29, 16,219, 22,202, 50, 51, 50,148,101, 39, 83, 40,181,107,170,231, -196,183,227,177, 97, 95, 98,206,210, 13,198, 84, 74, 41, 92, 28, 36,109, 39,220,200, 8,250,249,224,149,251, 75,182, 25, 83, 41, - 75,225, 34, 23,182,155,120,171, 91,163,171, 14, 59, 7,137, 38,205,253,224,253,110,195, 39,206,146, 50,169,219, 97,206, 56, 2, -214, 98,128,214, 34, 66, 25,223, 7,185,247,239,227,203, 53,251,115,180, 58,243,152,164,194,166, 9,204,244, 34, 90, 17,225, 73, -158,251,242,211, 15,143, 37,124,190,192,193,112, 55,177,130, 79, 24, 3,191,101, 47,193,231,159,124, 75,202, 77,230,209, 25, 37, -180,188, 49, 30,147, 35,190, 90,180,100,121,252, 27,227, 70,166,134,133,246,114,183, 41,239,185, 27,181,218,194, 77,135,175,248, - 84,142, 20, 9, 0,100,228, 22, 67,173,209, 49, 54,198,122,218, 81,136,133,201,246, 88, 7, 43, 17,226, 77, 60,159,235,209,225, - 37, 79, 71, 17, 12, 21,101,240,114, 20, 98, 80,108,235,151, 66,188,201, 7,119, 85, 84,221,124,161,101, 5,181, 26,112,225,171, -190,237,168,205,218, 14, 54, 43, 44, 55,126,109,186,101,140,224,221,105, 61, 29,156, 92,205,153, 60,232, 20,128,204, 3,196,169, - 5,224, 28, 76,132,225,163,161,188,155,204,188,253,210,184,226,123, 89,185, 63,122,200,240, 53,247, 8,225,192,225, 97,100,103, -103,191, 60,119,238,220,179,177,177,177,222, 30, 30, 30,104,223,190, 61,246,237,219,135, 89,179,102, 85,151,137,142,142, 6,165, - 20, 37, 37, 37, 88,180,104, 81,129, 82,169,124,185, 33,206,228,228,228,212, 13, 27, 54,244,140,136,136,176,136, 68,162, 50, 0, -146,178,178, 50,105, 73, 73, 9, 49, 26,141, 96, 89,150,117,118,118,182, 41,149, 74,235,152, 49, 99, 76,231,206,157,107,173,211, -233,178, 31,197,162, 21, 24, 24,152, 84, 92, 92,172, 33,132, 60,114,232,135, 42,145,229,225,225,225, 89, 81, 81,193, 2, 40,109, - 78,232, 7,134, 97, 16, 19, 19,131, 35,103,174,226,224,137,115,208, 42,211, 48,245,141,151,209,190,125,123, 28, 57,114,164,217, -247,172, 99,199,142, 56,124,252, 44,206, 94,190, 23, 9, 63, 8, 0, 0, 32, 0, 73, 68, 65, 84,142,236,244, 27,120,123,234, 27, -136,140,140,196,225,195,135,185, 14,109, 63, 14,212,242,205, 58, 80, 91,104,245, 62,112,224, 64,213,200,252, 63,228,107,184, 39, -233,232,215, 70,252,235,130, 33,173,195,133, 3, 22,128, 8,101,216, 30,122,184,219,188, 47,127, 72,109,239, 77,198,221, 84, 53, -190, 58,236, 33,171,150,138, 38, 71,122,145,205,215,111,181,123,233,217,216, 64,172,221, 39,255, 24, 0, 70,247,104,133, 63,111, -171,113, 49,189,112,115,114, 33, 77,126,212, 86,183,247, 38,114, 80,108, 94,244,206,240,222, 45, 2,124,176,110,247, 89, 16,130, - 93,118,189,112, 41,165,177, 17, 45,176,116, 67,237, 21,134, 62, 65, 75,182, 25, 83,143, 36,105,135, 0,192,192,112,197,161,206, -173, 93,131, 26,179,108,200,196,130,201, 67, 70,142,151, 50,233,251,128,172,227, 32,140, 9, 6, 11,139,252,162,114,232,157, 3, -145,120,254,186, 65, 99, 52,207, 72, 46,108,158, 21, 47, 69, 77,239, 70,251,146,251, 21, 58,131,175,220,179,181,145,207, 99,217, - 10, 19,197,159, 41, 89,218,228,124,154,102, 15, 71, 70, 6, 53, 63, 19, 64,122,172, 90,191,109,190, 80, 36, 30,205, 39, 32, 94, - 46, 10,207, 85,223,126, 6, 71, 71, 7,176,230, 10, 64,167,198,115,111,125,169,190,153,103,105, 5, 0, 97, 30,196,161,103,136, -104,189,128, 71,114, 79,222, 49,127,212,168,121,213,138, 41,227, 6, 69, 11, 89,179, 14,239, 44,218,138,213, 31, 12,199,248,126, -225,194, 3,127,164, 79, 1,176,176,185,247,154,218, 24, 80,171, 1,207,124,120, 38,149, 0,103, 41,208,253,242,182,207,219, 1, - 87,237,230,120,138, 16,161,192,151,132,119, 8, 82,136,216,220, 63,192,230,254, 65,249,129,221, 64,130,122, 18,226, 19, 67,191, - 95,252,137,110,237,218,117, 71, 89, 30, 62,109, 44, 84, 6, 7, 14,255, 95, 65, 41,189,235,226,226, 50, 56, 46, 46,238,196,145, - 35, 71,220,162,162,162, 0, 0,151, 47, 95, 6, 0,196,196,196, 32, 44, 44, 12, 42,149, 10, 99,199,142, 45,202,207,207, 31, 76, - 41,109,208,231,183,188,188,252,222,142, 29, 59,188,117, 58, 93,244, 71, 31,125, 84,216,162, 69, 11,173,209,104, 36,101,101,101, - 44,195, 48,112,117,117, 21, 71, 71, 71,163,107,215,174, 21,231,207,159,111,153,147,147, 83, 14, 32,171, 57,245, 31, 62,124, 56, -206,156,121,176,104,239,113,196,213, 18,137, 68,136,138,138,242,191,123,247,110, 94,229,245,185,208,140,107, 90,189,125,253,250, -117,156,190,154, 11,129,217, 0,177, 90,137, 11,187,119, 96,216,228, 55,193, 48,205,247, 98,184,126,253, 58,246, 28,191, 0,133, - 68,128,180,180,100,236,216,177, 3, 83,167, 78,125, 36,206,102,162, 65, 45,242, 23,239,247,249, 0,214,212,107,209,138,143,143, - 63,141, 58,162,218,182,110, 77,196,146, 10, 44, 24, 20,227, 63,123,116,247,214,124,171, 86, 9,214,198,130, 47, 4,188, 60,156, -240,235,175,155, 91,109,222,186,245,124, 71,127,225,114,150, 97,230,221, 84, 81,125, 19,234,181,224,219,173,103, 71,255, 58,179, -183, 96,234,144,118,110, 0, 32, 18,240,176,108, 95, 50, 3, 96,193,163, 52,248,153, 0, 34,173,176, 98,146,143,187,243,199,115, - 95,143,119,235, 29, 19,134,211, 23,147,176,124,199,249, 51,226, 66,108,176,251,194,177, 86,212,214, 79,117,173, 58, 4,219,184, -223,165,205, 70,125, 68, 10, 87, 88,178, 78, 1, 22, 35,140, 38, 11,114,138,109,200, 41, 49, 66, 32, 23,225,114,250,255,177,119, -221,241, 81, 20,239,251,153,221,189,150, 75,239, 61, 33,148, 36, 36,132,208, 59, 2,210,196,192, 23, 8, 93, 20, 16,129, 8, 40, - 32, 74, 71,138, 74, 71, 64,233,160, 82,164,131,180,168, 20,165, 35, 69, 64, 18, 2,132,132, 22,210,123,191, 92,219,157,223, 31, - 41,191, 35,164,220, 37,216,112,159,207,103, 63,123,123,123,251,220,204,206,238,204, 51,239, 59,243, 78,188,202, 62, 25,199,107, -154,103, 66, 8,233, 80, 79,225,246,233, 23, 43, 61,138, 84,249,250,220,172,116,189, 84,118, 69,162, 52,147, 39,153,194,243, 91, - 60, 45,234, 84, 87,218, 28, 16, 88,153,130, 22,206,250,104,164,121, 66,212, 9, 52, 96, 18, 65, 40,133, 89, 64, 8, 44,205, 88, -105, 71, 31,105, 28, 0,248,184, 88,203,150, 46,248,216,122,242,244, 5,213,142, 1, 11, 36, 68,218,184,165,203,228, 32,111, 91, -156,191,113, 15,231, 35,158,222, 57,255,251,253, 70, 93, 26,187,193,207,195,102, 82, 32, 33, 75,162,168,233, 22,210,226,130,209, - 3,186,162,178, 89,135,129,206,100, 88,203,193,115, 42,156,109, 88, 25,124, 0, 33,154,167, 32, 44, 11, 16,166,120, 6,228,179, - 75,224,108,234,209,221,251, 14, 23,110,221,186,227,179,168, 52, 42, 90,177, 68,136,168, 6,217,217,217,183,149, 74,101,207,224, -224,224,109, 31,126,248,161,229,240,225,195,221,198,140, 25,195, 0, 64, 74, 74,138,176,122,245,234,196,175,191,254, 58, 39, 61, - 61,125,148, 86,171,141, 48,166,227, 75, 8,185,252,205, 55,223,164, 93,184,112,161, 81,171, 86,173,228,205,155, 55, 23,108,109, -109, 57,185, 92,206,107, 52,154,162,232,232,104,254,225,195,135,174,217,217,217, 49, 0, 98,107,226,214, 47,177, 94, 45,100, 89, -246, 83, 74,105,208,203, 24,163,165, 84, 42,221, 0,196, 16, 66, 26,152,234, 54,124,161,193,230, 56,100,101,101,161, 48,249, 14, - 20,241, 15, 16,108,206, 32,208,214, 2, 86, 86, 86,181, 18, 69, 57, 57, 57, 64, 65, 2, 46, 94,252, 3,208,235, 97,109,109, 13, -107,107,235,191, 92,104, 85,166, 69,254, 13, 40, 63,211,176,228,185,173,122,140, 86, 35, 39,242,190,173, 12,171,199,133,212,151, -250,120,121, 64, 29,255, 59,254,120,150,143,217,109, 90, 69,177,114,203,162,113,239,244,109, 17, 58,176, 14, 58,183,107, 73,124, - 92,173, 39, 45,249,114,195,132, 70,206,228,227, 59, 41,116,141, 49,137,186,147, 74, 31, 5, 56,145,173,103,110,199,135,121, 40, - 85, 16, 4,138, 51, 17, 73,136,120,146,181,245,110, 42,125,100, 74, 6, 27,185,145,110, 28,152,189,148, 82,133,181,185,121, 94, -211, 38, 13, 29,186,181,109,194,188,209,169, 5,164, 44,112,241,218, 31,152,242,229,161, 43,130, 64, 67,110, 24,233, 54, 44,158, - 97,248,188,128, 42,158, 97,168,123,110,134, 33,165,148, 22,207, 58,172,122,216, 23,203,146,228,194,167,215, 93, 36,246,190, 80, -197,158,193,147, 44, 1, 79, 83,243,144,203,185, 64,157,144, 0, 80, 33,238, 44,165, 53,126,170, 29, 28, 28,156,234, 6,250,213, - 95,187,253, 0,180,133, 57,120,116,118, 27,242,179,146,240,249,198,163,245, 61, 60, 60, 58,197,199,199,159, 51,225,129,241,251, -229,248,110, 39, 80,128,149,200, 17,190,126, 31,210,237,205,224,160,148, 66, 80,165, 97,220,228,225,214,189,186, 15,183, 6,128, -167,247,111,193, 91,169, 50,138, 87,107,143,208,193, 93,252,109,160, 83, 97,251,207,183,138, 24,224,141, 29, 39,239,196,118,105, -104,163, 24,220,193,219,118, 97, 98,246, 0,212, 48,168,104,169, 69,171,204,194, 87,131,217,134,251, 41,229, 3, 28, 73,236,222, -203,169,230, 3,187, 55, 87, 74, 57, 66,104,126, 2,168,153, 3, 54,108,223,159, 47,211, 97,179,216,132,138, 16, 97, 28, 10, 11, - 11,111, 16, 66, 26,127,242,201, 39,195,102,205,154,245,154,185,185,121, 93, 0, 40, 40, 40,120,164,211,233,206, 3,216,109,202, -236,192, 18,225, 20, 67, 8,121, 20, 27, 27,235,252,253,247,223,219, 0, 80,148,156, 46, 2,144, 13, 32,165, 54, 51, 14, 75, 69, - 21, 33,228,211,151,104,233,248,177,132,179, 65, 77,174,103, 24,134, 39,132,128, 16, 2,185, 92,142, 11, 23, 46, 96, 80, 72,119, -220, 13,207, 70,144,141, 5, 90,141, 26,135,189,167, 78,129,101, 89, 16, 66,192,178,172, 73,237, 8,199,113,184,120,241, 34,222, - 30, 58, 16,114, 14,176,182,182,198, 39,159,124,130, 35, 71,142,128,227,196, 85,250, 76, 40,231,205,165,130,203,248, 56, 90, 4, - 11, 79,109, 91, 36, 5,175,195,177,109, 43,112, 60, 50, 95,115, 63, 13,179,253,211,176,250, 0,242,132,180, 47,119,132,157,186, - 24,185,252,221, 33,189,149,175,119,233,142,215, 59,119,225, 26,181,236, 52, 23,192, 26,131, 6,187, 91, 85,177, 54,120, 1,159, -109,254,249,222,184,189,103,163, 9,180,121, 24,210,163, 37,229, 5,124, 86,141, 8,120,129,211,218,204, 98,239,197,223,126,179, -133, 54, 31, 79,110,253,170,168, 83,183, 62,192,107, 17, 19,243, 0, 95,111,255, 65, 56,123,237,254, 78,141, 30, 31,198,102,210, - 2, 99, 57,139,149,149, 30,214,230, 50,255, 94, 65,214, 63, 9,160,176, 81, 74, 27, 82,129,135,141, 82,210,176, 71,128,249, 79, -148, 82,106,105, 38,105, 72,121, 93,181,156, 42,141,126,211,246,111,183,174, 28, 61,122,180,121,122,124, 50, 18,115, 35,145, 47, -115,135, 78,233,137,216, 91,231, 85,133,106,125,181,141,120, 85,247, 51, 61, 61, 61,245,198,213, 76,236,221,184, 24, 58,141, 26, -169,241,197, 90, 53, 49, 61, 23, 86, 14,238,191,153,194,169,213, 11, 57,161,195,199, 74,205, 44, 97,246,118,104,111, 89,108,134, - 26,205,220, 44,139, 31,166,252, 52,220, 61,125, 17,157, 11,138,117,219,195,103, 12,188,155,184, 25,149, 78, 75,133,244,195, 94, -205,221,241, 40, 46, 9, 23,238, 36,108,127,152, 65, 19,235,217,147,237,177,137,217, 97,125,219,120, 97,213,145,168, 15, 42, 19, - 71,149,113, 6, 58,147, 97, 0, 58, 20, 15,134, 87,129, 2, 29, 2,157,201, 48, 99,102, 26, 86,196,201, 73,241,214,202,159,158, -206,217,127, 61,189,239,180,183, 58, 90,181,107,247,166, 12,122, 13,242, 84,106, 93, 84, 22,205,173, 77, 25,213,162,167, 36,114, -138,156,255, 74,206, 18,209,179,179,100,123,153,156,137, 40, 23,215,169,182,121, 55,116, 19, 82, 74,185, 18,107, 86,149,131,225, -171,227, 52,116, 19, 82, 74,127, 44,177,102, 85,105,213, 42,207, 41, 8, 66, 98,139, 22, 45,236,250,244,233, 3,158,231,241,224, -193, 3, 60,125,246, 12,221,194, 62,128,141,141, 13,206,223,190,141,251,247,239,227,211, 79, 63,133, 78,167,195,225,195,135,227, -171,227,228, 56, 78, 91,191,126,125,105,191,126,253,160,215,235,241,240,225, 67, 36, 36, 36, 96,202,148, 41,176,182,182,198,141, - 27, 55,202, 56,211,211,211,193,113,156,246,175,120,150,254,237,168, 72,100, 85, 45,180, 0, 30,188, 14, 57,167,230, 97,205, 5, -104,181, 58, 52,188,147, 74, 31, 27,156,223, 16,108, 79,142,221,142,188,247,232,198,165,215,101, 72,141, 40,190,198, 4, 68,167, -211,164,150,158, 92, 30,180,121, 86,120,248, 19, 30,167,228,229, 71,167,211, 36, 83, 51, 71, 5,158, 64, 91, 8, 36,253,142,203, -231,207,225,236,149, 63,112, 61,226, 30,127,249, 70,244, 94, 70,192,103, 81,233,244, 65, 13,212, 41, 44, 66, 86, 97,100, 68,140, - 87, 75, 63,103, 47,240,122, 80, 65, 7,235, 33,187, 49, 42,170,157, 87,203,122, 54, 94,197,150, 44, 29,108,223,251, 21, 88,169, -168,146,239,122,156,118,115,135,186,242, 1,121,217, 25,109,186,118,106,107,110, 29,208, 11,233, 49,209,120,240,199, 69,213,141, -200,216,203,215,227,180,181,178,150,184,187,187,191,214,181,147, 63,134,140,155, 9,109, 97, 14, 30,158,253, 22,249,153,201,184, -240,155, 5,238,229,230,182, 5, 96,180, 69,235,242, 83, 93, 35, 0,232,224, 35,141,179,132,218,229,157,222,125, 32, 39, 69, 16, -212,185, 32,133,233,136, 77,208,228, 12,216,248,140, 7, 0,165,156,112,230, 52,199,202, 24,222, 64,111,123, 95, 37,171,195,142, - 83,119, 32, 8,197,203, 55, 9, 2, 54,236,248, 53, 54,236,179,183,155, 33,208,203,182, 9, 33,132,152, 98,242, 39, 20, 29,175, -239, 93,208,176,232,151,185,128,160,197,197, 73,118, 13, 59,174,201,236, 88, 83,203, 88, 68, 2, 77, 0, 16, 22,224, 70, 54, 77, - 90,243,243,220, 22,167,162, 58, 76,125,175,175, 21,168,184, 0,187, 8, 17, 34,254,122,228,231,231,143, 27, 53,106,212, 38,137, - 68,226, 8,128, 8,130, 0, 65, 16,184,229,203,151, 75,120,158,103, 24,134,225, 89,150,213,255,248,227,143, 58,158,231,211,138, -138,138,198, 85,199,169,215,235, 99,199,143, 31, 95,191,186, 25,138,123,246,236, 1,199,113, 90,189, 94, 31, 43,150, 68,245, 34, -203,112,111,104,229,170,188,241,160, 88,208,254,237,121,243, 0, 16, 80,204, 47, 39,178, 0, 0,183, 51,104, 98, 35, 39, 50,165, - 81,203, 78,243, 74,175, 49, 53,113, 69, 60, 63,176,101, 99,191, 61, 0,160,166,252,219, 53,201, 96,174, 90, 53,184,105,203,182, -123, 5, 74, 57, 61,165, 91, 25, 1, 7,139,244,184,107,204, 76,187,202,144,152,154,125,163,116,161,104, 1,244,255,221,133, 37, - 97, 28, 40,165,180,204, 93,184, 66,129,244, 28,117,181,113,160, 46, 62, 82,119,111,233, 37, 29,123,242,210,173,113, 60, 79, 93, - 88,150, 36,171, 52,250, 77,181, 21, 89, 0, 16, 31, 31,127, 46,208,137,156,188,221,196,185,135,131,178,196,202, 85, 8,164, 23, -226,100,124,106,222,185,154,112,102, 21,232,250,206, 90,125,228,168, 76,194,114,160,180, 56,160, 40,165, 40,210,242,153,165, 98, - 44,216,158,184,125,114, 88,191,135,101,201,211,234,248,174,222, 79, 90, 53,100,201,233,143,239, 60,201,218,250, 56,139, 70, 2, -192,227, 44, 26,217,192,158,204,141, 77,206,251, 56,242,105,214, 10, 83,199, 85, 80,130, 11, 45,135,204,123,225,187,218,222,207, -187,137,244, 15, 0,253, 27, 57,145,238, 67,166,126, 61,149, 16,136,203, 79,136, 16,241, 31, 66,169, 85,139, 97,152,133, 47,145, -243, 71, 66,200,155, 0, 98, 76,184,230, 42,128,198, 47, 57,111, 25, 0, 50,196, 82,126,169,247,212,244,128,165,119, 82,233, 6, - 24,177,104,180,177,191,171,244,250, 68,122, 26,128,125,109, 50, 88,194, 97,247, 50,111,218,237, 20, 58,247,207, 40,140, 18, 81, -245,167,140,245,137, 74,165, 61, 1,192,215,215,151,198,196,196,128, 82, 90,171, 65,133,119,211,232, 31, 40,183,148, 67, 69, 98, - 27, 64, 71, 99,248,162,211,233,103,192,139,174,225,152, 12,250, 57,128,207,107,148,231, 26, 70,126, 55,250,217, 74,165,167,128, -234,163,243,139, 16, 33,226,213, 20, 91,127, 2,231,143,226,157,125,245, 80, 85,192, 82, 70,188, 61,175, 30, 30, 60,120, 64,106, - 43,178, 68,136, 16, 33,226, 21, 6, 95,203,173, 66, 13, 85,203, 77,196, 43, 34,184,202,127, 39, 10, 45, 17, 34, 68,136, 16, 33, - 66,132,136,151, 36,178,202,139, 45, 2,160, 91,133,210,220,132,217, 4,132,144,110,166, 38,168, 58,126,145, 83,228, 20, 57, 69, - 78,145, 83,228, 20, 57, 95, 61,206,234,184, 95,185,217,140,212, 96,144,243,203,222, 0,116, 19, 57, 69, 78,145, 83,228, 20, 57, - 69, 78,145, 83,228,124,149, 55, 0, 99, 43, 59, 22, 93,135, 34, 68,136, 16, 33, 66,132, 8, 17,127, 18,196,216, 64, 34, 68,136, - 16, 33, 66,132, 8, 17,181, 67,181,139, 74,139, 16, 33, 66,132, 8, 17, 34, 68,136,168, 1,170, 93, 84, 90,132, 8, 17, 34, 68, -136, 16, 33, 66, 68,205, 80,163, 69,165, 69,136, 16, 33, 66,132, 8, 17, 34, 68, 84,143,170, 34,195, 19, 19, 87, 60, 17, 33, 66, -132, 8, 17, 34, 68,136, 16, 81, 5, 94,136, 12, 31, 30, 30, 78, 13,247, 34, 68,136, 16, 33, 66,132, 8, 17,127, 37, 94, 85, 45, - 34,186, 14, 69,136, 16, 33, 66,132, 8, 17, 34,106,129,138,198,104,137, 66, 75,132, 8, 17, 34, 68,136, 16, 33,226, 37,160,170, - 49, 90,165, 1, 75, 59,151,152,234, 58,139,183, 75,132, 8, 17, 34, 68,136, 16,241, 55,224,149,212, 34,101,131,225,195,195,195, -105, 72, 72, 8, 17,203, 89,132, 8, 17, 34, 68,136, 16,241,119,224, 85,212, 34,226,172, 67, 17, 34, 68,136, 16, 33, 66,132,136, -218,136, 41,131, 89,134,229,143,197,181, 14, 69,136, 16, 33, 66,132, 8, 17, 34, 94,146,224, 42,255, 29,243, 39,255, 97, 55,145, - 83,228, 20, 57, 69, 78,145, 83,228, 20, 57, 69,206,255,138,200, 42, 47,182,196, 89,135, 34, 68,136, 16, 33, 66,132, 8, 17,181, -128, 49,179, 14, 69,136, 16, 33, 66,132, 8, 17, 34, 68,212, 0,132,144,177,132,144,222, 37,159,123, 27, 90,181, 68,139,150, 8, - 17, 34, 68,136, 16, 33, 66, 68, 45, 64, 41,221, 76, 8,113, 45, 17, 88,225,148,210, 36, 81,104,137, 16, 33, 66,132, 8, 17, 34, - 68,188, 4,148, 27,151, 21, 66, 8, 41,115, 39,138, 66, 75,132, 8, 17, 34, 68,136, 16, 33,162, 22,168,106,140, 22, 1,208,173, -146,139, 78,155,160,228,186,213, 32, 81,167, 69, 78,145, 83,228, 20, 57, 69, 78,145, 83,228,252,111,113, 86,199,109,138,254,248, -167,160,162,176, 14,101,226,139, 82,250,167,109, 0,186,137,156, 34,167,200, 41,114,138,156, 34,167,200, 41,114,254, 87,183,151, - 62,235,176, 57, 33,102,162, 17,241,213, 3, 33,196,153, 16,226, 44,222, 9, 17, 34, 68,136, 16, 33,194,120, 11,215, 75, 29,163, - 21, 72,200,123,239, 5, 57,110,108, 76,136, 85, 4,165,133, 85,253,214,201,201,105,147, 82,169, 28, 94, 88, 88, 88, 64, 8, 17, - 12, 76,109, 0, 96,184, 46,208,195,212,212,212,142,213,253,183, 92, 46, 95,237,236,236,252, 94,126,126,126, 33, 33,132, 18, 66, - 64, 8, 41,205,240,115,123,158,231,227,211,211,211, 91,252,171, 11, 17, 96, 29,156,157,175, 73, 88,214,221,212,107,121, 65,120, -156,146,156,220,214,132, 7,102, 49, 33,152, 86,242,121, 25,165,116,230, 43,248, 86,176,198,252, 44, 8,176,140, 6,134,240, 12, -243,129, 4, 88,167, 22,132,141, 37, 15, 46, 95,211,191,214, 92, 35,245, 9, 69, 19, 66, 96, 77, 41,114, 40,193, 31,178, 86, 52, -246,111,170, 28, 66, 37, 18, 73, 95, 43, 43, 43,139,140,140,140,115, 0,246, 0, 24,106,111,111,223, 41, 55, 55, 55, 95,167,211, - 29,161,148, 30,170, 9,247,107, 77,201,116,153, 84,242,110,145, 86,183,244,226, 45,250,109,231,230,196, 94, 47, 96,137, 66,202, -117, 84,107,244,203, 46,252, 65,183,154,152, 86, 82,252, 42,148, 86, 29,166,175, 39,118,192,200,114, 7,128,195,182,182,126,114, - 71,171, 95, 36, 50,246,113,118, 74,254,240,129,169,169,207, 6,214,162,220,255,137,112,116,116, 28,201, 48,204, 23,148, 82,240, - 60, 63, 59, 35, 35, 99,219, 75,122,174,102, 3,176, 41, 57,204,166,148,126, 81, 75,190,167, 0,188, 74, 14,227, 40,165,222, 98, -211, 94,227,123,185,225,135, 31,126, 8,235,210,165, 11, 86,173, 90,133, 13, 27, 54, 60, 73, 75, 75, 91, 2, 96, 59,165, 84,243, - 87,243,188,138,120,105, 66,171, 17, 33,111,142,236,217,122,211,196,193,111,146,201, 35,231, 20, 86,243, 50,127,243,198, 27,111, -188,189,125,251,118, 73,116,116,180,153,143,143, 15, 24,134, 41, 19, 66,134,245,101,157, 58,117,132,234,254,155,101,217, 53,253, -251,247, 31,117,224,192, 1,229,141, 27, 55,148, 1, 1, 1,101,124,130, 32,160,124,253,235,227,227, 83, 37,159,181,181,245,239, - 44,203,122, 84, 36,210, 42,251,204,243,124,124, 70, 70, 70, 11, 35, 30,198,158, 0,102, 24,113, 75,151, 80, 74, 79, 84,245, 3, - 9,203,186, 39, 38, 38, 58,153, 90, 86,158,158,158, 90, 19, 94, 30,103, 66, 48, 77, 16, 40, 3, 0, 12, 67,166, 43, 20,138,141, - 69, 69, 69,113,165,231, 75,202, 44,197,148, 52,184,187,187, 15,160,148,142, 3, 64, 9, 33,155, 19, 18, 18, 14,154,114,189,149, -149,213,239, 50,153,204,131,227, 56, 82, 81,185,148, 63,230,121,158,106,181,218,248,204,204, 76,147, 5,246, 57,128,188, 1,188, -166,103,217,201,246, 14, 14, 29,111,156, 60,105, 30, 20, 20,196,176, 44, 59, 19,192,198,218,188, 55,154,107,164, 62,175,195, 32, -149, 78,222, 91,238, 61,223, 79,253,116,126,180,153, 68,125, 92,115,141,236,255,171,197, 22, 33,100,196,136, 17, 35, 38, 47, 93, -186,212, 65, 38,147, 49,251,246,237,243,155, 50,101, 74,232,170, 85,171, 28, 6, 15, 30,108,169,209,104,132,233,211,167, 7, 18, - 66,156, 40,165,235, 77,225,110,215,148,180,241,247,113,253,116,226,240,215,241,241,226, 61, 19, 59, 52, 38,233,102,230,210, 13, - 3, 58,214,183,105, 84,215, 22, 11, 54, 93,254, 16,192, 86, 19,210, 74, 56,142,107,235,230,230,230, 91, 84, 84,164, 47,233,188, - 81,131, 58,161,248,254,106, 52,154,204,204,204,253,181,189, 55, 31, 43, 20,173, 91,219, 88,156,154, 55,108,132, 89,110, 86,166, -243,154,240,163,183, 15,192, 41,120, 32,240,228, 85,106, 16, 24,134,249, 34, 33, 33,193,149, 82, 10, 87, 87,215, 47, 0,108,123, - 73,212, 54,165,245, 48, 33,196,230, 37,240,121, 25,240,121,189,132,103, 95,193, 49,204,120,153, 68,210,131,231,249,198, 37,207, - 80,132, 70,167, 59,165, 23,132,117,148,210,162, 87, 88, 7, 76, 11, 11, 11,235, 62,107,214, 44,159,105,211,166, 97,218,180,105, -117,182,108,217,178,105,209,162, 69,211, 9, 33,193,148,210,252,191,152,231, 95,111,193,250, 83,132, 86, 32, 33, 45,186, 54,105, -112,112,210,200, 33, 16, 14,172, 38, 24, 57,167, 74,145,213,182, 69,139,119,183,111,223, 14, 0, 24,222,183, 47,122,180,106, 5, - 75, 11,115,200,100,197,201, 33,148, 64, 42,145,162,223,148,143,140,201,220,178,208,208,208,183, 14, 28, 56, 96, 1, 0, 27, 54, -108, 64,104,104, 40,236,236,236,160, 84, 42, 33,149, 74, 33,145, 72,158,219, 27, 33,220, 60, 18, 18, 18,156, 20, 10, 69,153,240, - 19, 4,225,185,205,192, 79, 13,189, 94, 15, 95, 95, 95, 99,111,215,140,156,156,156,215, 10, 10, 10,170,244,233,214,173, 91, 23, - 0, 78, 24, 67,248,197,231,159, 65,208, 23,128,227, 0,189, 30, 80,107, 25, 8, 21,244,237,221,220,220, 48,126,252,120,212,102, - 33,241,144,144,222,132, 16,114,192,205,205,237, 96,106,106,170, 15, 33, 24, 83, 67, 75,215,132, 7, 15, 30, 88, 0,128,159,159, -223,120, 0, 38, 9, 45,142,227, 60,110,223,190,237, 36,151,203, 43,181, 92, 26,136, 96,104,181, 90, 52,107,214, 76,111,202,127, - 56, 3, 94,153, 12, 51,166,105,243,230, 99,231,245,235,167,184,118,237,154,130, 97, 24,232,245,122, 44, 95,190, 92, 79, 41,181, - 9, 4,172,162,128,220, 42,158,207, 89, 0, 70,150, 88,105,183, 82, 74,151, 63,119,158,162,137, 74, 39,239,253, 48,191, 95,171, -214,117,166, 35,234, 78, 68,171,122, 22,135, 97,201,169, 99, 1,252,165, 66,203,202,202,170,239,170, 85,171, 28,183,110,221,154, -123,255,254,125,237,198,141, 27, 29,199,141, 27,103,169,213,106, 17, 22, 22,150,230,239,239, 47, 93,181,106,149,227,161, 67,135, - 94, 7, 96,146,208,226, 8, 62, 27,218,183, 7,138,116, 12,116, 58,189,163,171,163,229,206, 73, 35, 58, 75, 40,213, 96,199,145, - 27,208,233,133,111, 77,180,100,181, 29, 56,112, 96,189,221,187,119,115,247,238,221,227, 26, 54,108, 8, 65, 16,192,243, 60,116, - 58, 29, 0, 64, 16, 4, 52,104,208,160,214,247,229, 93,192,207,193,217,238, 84,219, 55,123,153,185, 42,228,176,203, 74,195,104, - 41,103,185, 77,169,254, 30, 64,187, 87,169,177,160,148,130,227, 56, 60,123,246, 12, 78, 78, 78,102,118,118,118, 73, 0,230,103, -102,102,110,126,133, 27,200, 86, 50,142, 59,184,227,219, 53, 46,173,219,181, 99,157, 93,157, 16,253, 32, 14, 28,225,187,221,190, -126,163,243,187,239, 79,157, 68, 8, 25, 64, 41,189,246,170,229,221,181,253,132,254,174, 29, 62,216, 64,168,128, 5,107,143,230, - 45, 94,182, 90, 25, 54,102, 4, 59,101,202, 20,120,122,122,250,244,239,223,127, 25,128,247,171,229,105, 51,161,191, 75,187,137, - 27, 64, 41,230,125,125, 52,111,209,178,213,202,247,107,192,243, 47,127,119, 54,255,105, 66, 43,144,144,122,141, 60,157, 78, 46, -158,246,190,132,254,244, 29, 83,152,145,138,202,164,140,147,147,211,166, 94,189,122, 13,223,182,237,255, 59, 73,109,131,130,208, -255,245, 14,112,178,183,134,210, 92, 86,220, 28, 9, 4,127,220,127,108,148, 32,240,244,244, 12, 59,120,240,160,133,161,152,144, - 74,165,101,155,161,200, 42,221,202, 91, 62, 42,130, 66,161,192,233,211,167,193,113, 28, 88,150, 5,199,113,101,155,225, 49,203, -178,112,118, 54,105,232,210, 18,107,107,235,224,188,188, 60,171,236,236,108,120,121,121,229, 2,184,109,112, 62, 56, 45, 45,205, -202, 20, 66, 65, 95,128, 41,163, 3, 32,209, 92,129, 70,210, 10, 42,174, 61, 46, 95,191,139,227, 39,206, 33, 33, 49, 25, 29,218, - 52,197, 59,195, 6,226,212,169, 83,224,121,222,212,135, 39,133, 16,178,172, 79,159,222,211, 1, 66,186,117,235,150, 61,113,226, - 68,230,222,189,123,111,245,239,223, 47,232,193,131,152,146,158, 48,153, 70, 8, 89, 99,130,101, 75, 6, 0,231,207,159, 7, 0, -121, 77,158, 61,185, 92,142,223,126,251, 13,165,110, 98,134, 97,192, 48, 12, 88,150,197,177, 24, 7, 20,104, 24, 20,166, 68,226, -131,222, 94,168, 91,183, 46, 24,166,250, 33,137,157, 1,197,101,160, 63,145, 72,166,184,186,185,249,116,170, 87, 79,121,250,244, -105, 22, 0,188,189,189,105, 82, 82, 82,246,145, 35, 71,242, 56, 96,131, 55,165,219,171, 18, 89, 94, 94, 94,237, 25,134,249,162, -244,158, 19, 66,150,249,248,248,124, 90, 86,110,130,128, 97,221,237, 36,147, 38, 77,150,182,238, 92,220, 57,105,221,103, 55,114, - 31, 46, 14, 32,153,179,172,255,234,138, 34, 55, 55,119,111,131, 6, 13,216,140,140,140,203, 0,158,234,116,186, 25, 59,119,238, -116, 26, 61,122,116,234,247,223,127,191, 4,128,219,210,165, 75, 59, 23, 20, 20,236, 51,133,183, 99, 19,242,102,139,166, 65,109, -188, 60, 61,113,238,242, 53, 72,101, 18,155,241, 35,123,195,194,130,195,138,173,225,194,211,248,204,137, 23,254,160,219, 77, 16, - 89,173, 6, 14, 28,232,179,123,247,110, 25, 0,220,190,125, 27,201,201,201,112,116,116,132,153,153, 25, 36, 18, 9, 88,150,133, - 68, 34,121, 41, 34,203,218,211,254,234,225,195, 71,204,236,236,108,176,246,163, 73,120, 39, 53, 5, 54,150, 22,208,229, 23,248, -188, 98,130,195,111,192,128, 1, 10,158,231, 81, 80, 80,128,179,103,207, 90,155,153,153, 89,123,120,120,204, 3, 96,180,208, 50, - 51, 51, 75, 41, 42, 42,114, 42,169, 71, 83, 85, 42,149, 51,128, 92,185, 92, 94, 90, 79,231,151,252,159, 81,238,196, 74,220,132, -113, 6,150,172,184, 90,228,185,101,171,150,193,167, 15, 29,216,101,145,147,151, 12, 27,219, 84, 48,200,193,230,205,235, 96,102, -102,133,121,243,102,113,143,187,189,238,222,243,205, 1,167, 9, 33,221, 94, 57,177, 69,201,230,110,125,134,219,153, 41, 45, 75, -218, 18, 29,182,109,153, 4,134, 97,240,233,167,159,162, 81,163, 70, 99, 9, 33,115, 40,165,153, 85,211, 96,115,227,215, 6,219, -201, 20,197, 69, 44,240, 58,108,220,243,113, 49,207,204,113, 24,218,167,238,216, 63,190, 39, 63, 55,170,135,188,226,118, 5, 42, - 9,131, 56,180,162,169,165, 28,225,225,225,157, 66, 66, 66,206, 85,118,252, 47,120,127, 92, 1,132, 84, 36,190,184,240,240,112, - 26, 18, 18, 66, 12, 50,247,220,113, 85,104, 74,136,131,179,181,242,244,134,249,147, 44,184, 43,225,172, 42, 46, 6,137, 69,124, -217,155, 83,126,138,166, 82,169, 28,190,109,219,182,231,116,152,151,179, 19,164, 82, 9, 36, 82, 2,155,142,189,139,223,184, 11, -199, 65, 8,173,172,225,127,142,179,160,160,160,232,214,173, 91, 22, 91,183,110,133,147,147, 19,124,124,124,160, 84, 42,161, 80, - 40,158, 19, 87,134,130,171,188,208, 42,207, 89,122,158,227, 56, 48, 12,131, 83,167, 78, 65,175,215, 99,224,192,129, 47,136, 44, -142,227, 42, 20,110,149, 77, 79,165,148,158, 32,132,220,166,148,190, 86,210, 0,223,166,148,118, 50,248,239,158,142,142,142, 51, - 0, 44, 49,150,147,101, 41,216,162,203, 16, 60, 86,131,123, 54, 9, 26, 73, 19,156,185,120, 3,219, 54,173, 2, 0,248, 52,108, -137, 65,253,123,151, 89,227,140,225, 52,132,187,187,251,158,180,180,244, 94,175,191,254, 58,178,178,178,116,243,231,207, 71,112, -112, 48,252,252,252,140, 42,163,202, 4,220,237,219,183, 61, 85, 42,149, 81,110,199,138, 56, 9, 33,216,185,115, 39,138,138, 94, -180,234,219,118, 90,132,143, 67,189, 49,234,131,237, 88,118,127, 31,214,175, 95, 95,101,222,149, 64,112,145,117,131, 53, 50, 86, - 31,188,100,214, 4,249, 59,239,188,195,142, 26, 53, 10,113,113,113, 24, 61,122,116,209,169, 83,167, 52,201, 73, 73, 71,100,130, -176, 86,251,188, 48,174,148, 83, 46,151,239, 56,113,226, 4,246,237, 43,214, 37,209,209,209,240,245,245, 53,127, 78, 36,103,238, - 71,222,211,181,184,122,236, 30, 90,247,217,141,171,199,134,129,207, 14,151,180,240, 69,142, 41,247,179, 6,189,175,211, 21,124, -183, 15,192, 62,131,251,107,246,253,247,223,247, 3,112,180,228, 28, 0,124,105, 10,103, 49, 17, 70, 13, 14,237, 7, 78,106,137, -123, 49,241,232,212,182, 25,156,157,156,112,251,110, 44,158, 38,100,166, 16,130,145,111,180,151, 47, 81,169, 52,115,206,223,162, -223, 84,195, 73, 60, 60, 60,252,246,239,223, 47, 53,176, 64,151,189,227, 44,203,150, 29,151, 10,239,154, 60,159,165, 34,203,210, -195,226,234,103,235,218,155, 95,141,248, 30,190,222,111,194,246,205,222,248,230,228, 73, 60,184, 19, 85,164, 41,212,119,253,171, -203,232,207,226, 36,132,248,133,134,134, 94,222,181,107,151,205,179,103,207,112,254,252,121,248,248,248,160,176,176,176,218, 14, -111,121,206,162,162, 34, 39, 3,183, 94,233,208,134, 47, 52, 26, 77,105, 97,148,190,136,149,186, 19,203,113,190,224, 38,172,201, -152,172, 10,234,121,153, 66, 42,221,127,248,208, 30,139,168,123,231,209,180, 73, 27, 88, 88, 7, 66,224,147,145,145,153,143,172, -152, 68,124,254,249, 50,204,155, 63, 27, 71,127, 56, 96,225, 31,208,228, 32, 33,164,129,161, 27,241,223, 94,238, 32,116,236,233, - 99,223,111, 32, 84,128, 42,229,158, 92, 82,240, 72, 57,124,216, 0,118,200,144, 33, 56,122,244, 40,238,220,185,179,161, 50,145, -101,200, 73, 40,198, 70,158,223,183, 1,148, 66,149,122, 79, 46, 85, 61, 82,142,120,107, 16,251,206,208, 30,184,242,235, 26,244, -104,250, 40,210,205, 9,253,179, 74,156,135, 28,139, 12,185, 2,151,204,174,145, 43, 6, 98,235, 44, 0, 98, 32,176,206,226,255, -199, 96,254, 27, 16, 82, 18, 29,126,108,121,235, 22, 87, 19,129, 5, 0,126,132, 88, 40,101,210,171,219,230, 77,112, 83,198,221, -225,212,145,191, 33, 81, 45,208,141, 79,244,194, 85, 66,204,110, 80,170, 42,127, 77, 97, 97, 97, 65,108,108,172,217,200,254,253, -209, 46, 40, 8,174,246,246,104,224,225, 1, 51,185, 12, 50,169,196,160, 94, 54, 73, 69, 82,127,127,127,244,233,211, 7, 18,137, - 4, 74,165, 18, 22, 22, 22,144,201,100, 21, 90,179,140,237,229, 82, 74,193,178, 44, 34, 35, 35,241,244,233, 83,216,216,216,224, -210,165, 75,232,218,181,235, 11, 86, 45, 67,113,102,138,137,190,124,195, 95, 42,196, 96,164,203,176, 20, 60, 79,144, 79,155, 64, -241,100, 34, 10, 73, 51,168,213,122,168,213,106,124,115, 81,139,107,177, 5,208,106, 53, 80,171,213,149,254,103, 21,247,150,113, -115,115, 27,238,235,235, 59,126,216,176, 97, 58,153, 76,134,130,130, 2, 20, 22, 22,226,206,157, 59,186, 94,189,222,204,238,211, -167,183,117,120,120, 56,165, 20,203, 76, 28,167,149,225,238,238,238, 89,226,158,205,168, 97, 15,162, 76,196,148,199,200, 47,163, -192,177,197,101,178, 97,195, 6,240, 60, 15, 74,105,165,133, 84, 68,200, 47,243, 23,173,180, 94,186,250, 91, 88,219, 57,227,220, -185,115,252,207, 63,255,156, 71,128,232, 7,119,238,124,249, 63,224,199,253,128,214,148,244,101,101,101,153,249,248,248,192,195, -195, 3,130, 32, 64,167,211,149, 89, 95, 50, 50, 50,160, 82,169, 96,103,158,141,250,246, 30,208,231,157, 69, 82,228, 2,184, 90, -220,195,246, 19, 26, 93,115, 63,252,241, 15, 48,133,127, 7,224,187,218, 19,193,221,201,197, 19, 12,213, 33, 49, 53, 3,253, 66, -122,128,149, 90,224,241,179,116, 52, 9,172,231,250,214,255,218,187,178, 68,143,105, 75,118,143, 7,240, 77,117,116,249,249,249, -252,189,123,247,112,251,118,177,222,181,178,178,130,185,185,249,115,239, 56,195, 48,181,178,104,149,138,172, 69, 27,186,154, 51, -146, 2,228,242,167,177,117,231, 13, 52,241,239,141,141, 87,175, 23,241, 41,153,221, 86, 20, 21, 69,255,171,221, 70,174,174,227, - 4, 65,152, 71, 41,205, 14, 13, 13,117,222,189,123,183,109, 66, 66, 2,110,220,184,129, 79, 63,253, 52,141,231,121, 61,165,148, - 80, 74, 23,188,132,103, 73, 48, 16, 88, 47,211,138, 32, 81, 42,240,129,131, 21,233,203, 49, 86, 62,250,220,252,199,233, 26,122, -164, 80, 47,124, 77, 41,213, 85,117, 45,195, 48,239, 29,216,187,193,205,193, 81, 64,103,199,215,145,148,162,197,162,143, 70, 32, - 35, 35, 15,223,108, 89, 12, 64, 6,173,158,197,107,157, 7,192,201,201, 29, 99,199,140,117,217,176,105,227, 4, 0, 43, 94, 21, -131, 86,210,165,117, 63, 16, 66, 78, 59, 58, 58,222,153, 48,118,172,163,143,207,219, 80, 40, 20,216,179,103, 15,118,175, 93,203, -175, 6, 6,109, 34,228,204, 56, 74,127,168,146,231,202,255,243, 76, 10, 11,115, 12, 8, 8,131, 92, 46,199,175, 63,127,135,162, -228,157,121, 33,237,160, 45, 44, 66, 72,157, 62,212,238,201, 49,146, 41,145, 32, 6, 0, 36, 10, 36, 73,128,212,114,116,255, 54, -129, 85, 38,163, 74,199,105,149,238,107, 29, 25,158, 74,100, 17, 91, 38, 15,245,118,134,154,104, 46, 30, 67,130, 90,224,151, 62, -208,178, 55,115,232,199, 81, 21,136,172,146, 7, 91,240,242,242,194,235, 45, 90,160,127,199,142,224, 56, 14, 10,153, 20,150, 10, - 51, 80,190,216,146, 85,234, 58,172,162, 77, 68, 69,214, 39,123,123,123, 72,165,210, 50,129,101,172, 53,171, 50, 78, 65, 16,192, -113, 28,110,223,190,141, 14, 29, 58,192,211,211, 19,251,246,237, 67,207,158, 61, 95,112, 37,154, 42,178, 74,133,150,161, 27,207, - 96,144,124,181,131,224, 95, 16, 9, 26,130,116, 77, 19, 16, 18, 4,189, 30,224, 41,160, 46, 42, 2,165, 0,165,128, 78,171, 65, - 81, 81, 81,217,127, 26,227,146,117,117,117,245,170, 91,183,238,194,233,211,167, 5, 52,105,210, 20,105,105,105, 16, 4, 1,230, -230,230, 40, 44, 44,132,149,149, 21,218,181,107,247,120,225,194,133, 73,148, 98,172,169,131,225, 95, 66, 5, 11, 0, 56,121,242, -228,115,110,195,210,173, 32, 41, 30,163, 62,252, 30, 50,174,216,181, 84, 58,134,167,170,122,183,203,107,237,113,249,102,180,254, -189,105,107,212,146,140, 27, 75, 92, 4, 97, 91, 60,144, 82,139,198, 5,233,233,233, 72, 73, 73, 65,223,126,253,176,123,215, 46, - 60,121,242, 4,129,129,129,232,210,165, 11,156,156,156,240,228,201, 19, 92,187,160,134, 58, 43, 19,153,154, 27, 80, 90,182,198, -225,115,177,234,185,235, 53,177,127, 87,109, 65, 8,233, 11, 96,132,149,149, 85,221,194,194,194, 36,189, 94,191, 31,192,126, 0, -131, 56,142, 27,164, 84, 42, 93,115,115,115, 31,161,120, 54,209,145,106, 93, 73, 10,133,189, 92, 97, 5, 65,175, 6,199,113,240, -244,244, 1,229, 53,200,202, 85, 97,228,144, 62,184,121,251, 46,126, 62,115, 69,175,211, 9, 95, 25,115, 91, 89,150,165,126,126, -126, 72, 77, 77,133, 68, 34,129,153,153, 25, 44, 44, 44, 48,115,230, 76,172, 93,187,182, 76,100,213, 84,104,189, 11,248, 89,121, - 89, 92,249, 98, 93,177,200, 74, 78, 76, 66, 74,188, 4,142,246,206,248,106,237,234,130,172, 39,201,173,191, 5,254,213, 34, 11, - 0, 4, 65, 88,144,144,144,224,196,113,156,139, 94,175,199,179,103,207,240,251,239,191, 99,226,196,137, 41, 25, 25, 25,157, 41, -165, 53,202,163, 66,161, 72, 45,181,100, 41, 20,138, 84,160, 82,119, 98,182,129, 37, 43,187, 10,202, 10,221,132,132,144,122, 62, - 30,150,167,182,172,154,226,213,178,117, 59, 70,201, 89,101,229,199, 36,119,184,120,254, 92,187,137,171,190,153, 64, 8,233, 65, - 41,125, 88, 25,169, 92, 34,233,213,166,125,123, 14, 52, 5,156,172, 3,150, 45, 29,130,180,244, 92,100,101,230, 65, 42, 53,135, - 70,199,130, 23, 8,218,117,232,136,239,182,239, 69,163, 49,163, 89,153, 68,210,253, 85, 18, 90, 37, 88,252,245,215, 95,123,249, -251,251, 99,219,182,109, 56,179, 99, 7,222,201,201,193, 57,134, 97,117, 18,137,195,143, 58,221,102, 0, 63, 24,203,211,168, 81, - 35,124,251,237,183,216,185,115,103,220,240,174,169, 7,167, 12,135,147, 86,139, 55,110,220,135, 93,157, 62,192,141,251,176,107, -238,143, 6,122, 14, 49,132,224,185,112, 80,225,225,225,157, 12,247,255, 38,148,172,109, 88,161,139,157, 3,208, 57, 60, 60,156, - 26,238,171, 35, 84, 58,249,133,237, 28,242,186,119, 80,125, 47,162,219,183, 6,207, 10,244,154, 60, 32,158, 67, 0, 0, 32, 0, - 73, 68, 65, 84, 57,247,181,178, 7,249,116, 74, 20,165,171,171,232, 65, 80,150,101, 97,105,102, 6, 71, 27,155, 98, 51, 63,195, - 0, 2, 32,232, 0,194, 23, 11, 0, 42, 16,152, 50,105, 90, 16, 4,200,100,178, 10, 7,190,155, 58, 54,203,144, 51, 47, 47, 15, -143, 31, 63,198,216,177, 99,161, 84, 42, 1, 0,201,201,201,240,246,246, 6,199,113, 72, 72, 72,192,175,191,254,138,186,117,235, - 66, 46,151, 19, 19, 11,165,180,225, 15, 38,132,156, 3, 16,156,148,148,100,229,234,234, 10,147, 45, 90, 2, 69,161,154, 64,163, -225,241,224,193, 3, 36, 38, 38,226,241,163, 24,180, 44,200, 5, 5, 11, 74,169, 73, 22, 45, 15, 15,143, 32, 95, 95,223,141, 75, -150, 44,145,122,120,120,128, 82, 10, 91, 91, 27, 20, 22, 22, 34, 61, 61, 3,129,129,129,240,244,244,196,178,101,203, 0, 96,247, - 95, 45,178,202, 61, 83,101, 66,203, 80,112,125,248, 63, 47,100,102, 90,128,101,255,127,246,105, 53, 99,180,164, 0,208,185, 71, - 40,119,234,231, 31,205,245,192,194,100,150, 93,200, 85, 95,142, 58, 94, 16,148,149,157,127,246,236, 25, 36, 18, 9, 14,236,223, -143,204,148, 20, 52,105,210, 4,173, 90,181, 66, 76, 76, 12,110,222,188, 9,123,123,123, 56,122,180,197,185, 71, 90, 68, 37,170, - 96,109,109,141,216,120,230,111, 11, 25, 64, 8, 25,211,173, 91,183, 79,191,252,242, 75, 39, 23, 23, 23, 73, 90, 90,154,255,186, -117,235,154,172, 91,183,110,210,132, 9, 19,156, 39, 76,152, 96,235,232,232,200, 37, 39, 39,251,125,244,209, 71,205, 9, 33,117, - 41,165, 43,171,226, 52, 55,183,180, 99,165,230, 32,132,131,141,181, 45, 56,153, 57, 4, 61, 7, 94, 0,172,172, 29,113,249,230, - 1, 92,138,200, 27,151,154,129,253, 70,188, 55,212,222,222, 30, 12,195,192,222,222,254, 5, 75,245,196,137, 19,177,101,203,150, - 50, 55, 98, 77, 69,214,162,117, 93, 45, 72,137,200, 74,126,198,129,168,235,226,216, 15,191,101,103, 61, 73,238,240, 42,136,172, -210, 58,142, 82,138, 71,143, 30,161,176,176, 16, 23, 46, 92,192,130, 5, 11,210,202,139, 44,103,103,231, 49, 86, 86, 86,243,243, -243,243,151, 37, 37, 37,173,169,142,183, 68, 68, 61,223, 25,172,192,157,104,108,136,135,138,220,132,132, 16,137,167,171,226,196, -205, 11,223,123, 91,211, 63, 8,158,142, 5, 30,228,222,177,188,234,244,218,155, 45, 67,152,102,235, 63,171,211,106,220,204, 19, -132, 16,255,202, 44, 91, 2,207, 55, 51,183,176, 4,144,138, 27,191,159, 45, 19, 89, 25,153, 57, 80,107, 89,168, 53, 4, 69, 90, - 6,175,119,123, 3,107, 55,238, 68, 66,106, 38, 74,103, 36,190, 42, 32,132,216, 5, 5, 5,133, 13, 26, 52, 8, 11, 23, 46,196, -233, 47,191,212,188, 79, 72, 46, 7,208,112,158,135, 64, 41, 97,140, 24,196, 94,158,103,197,138, 21, 63, 0, 24,186,100, 34,218, -102,229, 99,164, 91, 31,106, 87,167, 79,241,111, 7, 78,167, 0, 96,151,118,250,249, 38, 51, 36, 36,132,148,122,214, 76,245,176, -253,211,193,133,132,132,156, 11, 15, 15,135,225,190,170, 11,172, 92, 26,190, 57,243,147,137, 75, 91,246,236, 72,146,166,118, 71, -102,110,145,126, 86,148, 86, 22,175,170, 90,100, 25,226,147,117,235,112, 51,186,248, 61,246,112,114,194,180,183,222, 2,213, 3, -151,238, 68, 97,239,233,211, 24,210,173, 27,204, 75,102,252, 25,107,125,170,200,138,101,104,205, 50,213,234,148,157,157,141,253, -251,247,163, 85,171, 86, 80, 42,149,224, 56, 14,193,193,193,184,123,247, 46,234,213,171, 7, 66, 8, 14, 31, 62,140,254,253,251, -227,225,195,135,104,219,182,173, 69, 77,132, 86, 84, 84,148, 21,165,244,181, 82,235, 71, 77,161, 86,171,113,239,222, 61,244,233, -211, 7,182,182,182,112,119,223,141,211, 39,190,135, 50,232, 29, 16, 2,147,132, 22,207,243,239,134,132,132, 72, 9, 33, 80,169, - 10,161, 80,152,193,220,220, 2,150,150, 86,240,243,243, 71, 98, 98, 34,122,246,236,169,137,141,141, 93,159,148,148,180,207,212, -180, 6, 6, 6,154,231,228,228,188, 83,167, 78, 29, 89, 73,111, 55,176,126,253,250, 31,199,198,198,230,153,106,213, 42, 21, 88, -132, 16,176, 44, 91, 38,180, 56,134,129,171,139, 83,217,113,201,248, 52, 82, 5, 87,110, 66,134, 90, 14, 0, 94, 94, 94, 88,187, -233, 40, 19, 18, 18,130, 73,147, 38, 65,167,211, 97,253,250,226, 73,118,195,134, 13,131, 86,171,197,193,131,197,147, 36, 57,142, -171,210,108,242,251,239,191,227,198,141, 27,208,233,116,200,201,201,193, 79, 63,253,132,115,231,207, 99,207,225, 95,240,228, 81, - 12,130,253,189, 49,122,244,187,144, 72, 36,216,190,125, 59, 58,116,232,240,183, 86, 8, 18,137,100,248,150, 45, 91, 92,183,109, -219,150,125,248,240,225,130, 54,109,218,200, 87,175, 94,237,180,118,237, 90, 71,141, 70,131,201,147, 39,167, 94,185,114, 69,221, -175, 95, 63,243,205,155, 55,187,214,175, 95,191, 59,128,149, 21,220, 79,115, 0, 67, 0,188,221,185,149, 53,151,157,167,130,160, -215,224,209,147,199,200,201,215, 64,224,181,136,139, 79, 68,126, 17,143,140,204, 60, 4, 55,235,241,245,217,179,103,103, 19, 66, -102, 81, 74,143, 87,151,206, 59,119,238,224,202,149, 43,120,242,228, 9, 30, 61,122,244,220,185, 49, 99,198, 96,231,206,157, 38, - 91,180, 42, 22, 89, 44,136,186, 30,142, 31,190,154,157, 26,147,244,202,136,172,146, 58,104,158,171,171,235, 60, 87, 87, 87,197, -201,147, 39,173,235,212,169, 3,189, 94,175, 41,111,201,234,220,185,243,156, 45, 91,182,184,214,171, 87,111, 34,128, 53,255,132, -180, 51, 12,198, 44,219, 16,230, 96, 41,139, 75,196,131,149, 37,177, 4, 89,160, 48, 23, 56,187, 11, 92,251,185,143, 39,246,155, -110, 59, 99,219,194, 49,168, 98,134,108,236,195,103,216,176, 97, 45,166, 76, 30,137,239,190, 89, 6, 65,224,160,214,177,240,242, -105, 3,181, 86, 0, 97, 56, 52,105,214, 2,103,206, 94,128,132, 1,246,111,219,240, 74,153,178, 40,165,153,132,144,245,135, 15, - 31,254, 96,210,164, 73, 16, 4, 65, 54,127,195, 6, 85, 90, 90,218, 98,152, 16,255,170, 2,158,254, 27, 54,108,136,158,177, 54, -237,135, 41,195,193, 62, 57, 70, 50,111,220,135,221,192,233, 20, 7,150, 18, 52,247, 71,166,178,226, 38,254,124,185,253,171, 33, -180, 74,149,164,225,190, 34, 52,247,171,247,153,181,157,237,187,173,130,253, 28,166, 77,122,159,123,152, 92,132,131,117,222,202, -255,117,199, 87,230,201,122,249,215, 49, 84,181,218,148, 63,222,251,235,175,101,159,151,239,222, 93,225,185,164,129, 3,141,238, -153, 85,102,197, 50,213,146, 5, 0, 74,165,210,166,123,247,238,232,218,181, 43, 6, 12, 24, 80, 54, 38,171,105,211,166,216,179, -103, 15, 66, 67, 67,113,235,214, 45,184,186,186,162, 97,195,134,104,216,176, 33,126,252,241, 71, 83, 31,112,240, 60,143,160,160, -160,210, 89,135,193,241,241,241, 86, 53, 45, 72,181, 90,141,140,140, 12,216,217,217, 65, 38,147,161,117,235, 86,248,224,195,214, -112,112,253, 22, 65, 1,254, 40, 40, 40, 40,155,254,110, 68, 99, 27,212,160, 65, 3,164,165,165, 33, 45, 45, 13,142,142,142,112, -115,115,131,139,139, 11, 86,174, 92, 73,215,172, 89,243,179, 86,171, 93,159,150,150,102,178, 37,203,213,213,181,163,157,157,221, - 28,149, 74, 37, 51,232,225,202, 28, 29, 29,143,184,185,185, 45, 78, 76, 76, 52,101,141, 77,104,181, 90, 16, 66, 16,254,200, 13, - 5, 26,130,220,248, 27,152,244, 63,239,231,132,151, 68, 34, 49,102, 64,111,193,208,161, 67,157, 60, 61, 61,240, 44,246, 14, 14, - 28,160,248,242,203, 47, 75,103, 69, 34,186,164, 99, 80,122,220,165, 75, 23,248,248,248,192,148, 32,153,130, 32,224,246,237,219, -216,125,228, 28, 92,189, 3, 16,247,224, 30,110,254,120, 12,117, 28,237,208,168, 89, 11,232,116,186, 90,133,222,120, 25,208,233, -116, 91,125,125,125,169, 70,163, 57, 7, 96,109, 68, 68,196,200,164,164,164,201, 71,143, 30,117, 27, 52,104, 80,226,177, 99,199, - 86, 3,216, 22, 17, 17, 17,246,249,231,159,119,213,235,245, 21,206, 22,100, 89,246,187,143, 62,250,168,243,160, 65,131,136,148, -209,105, 78,158,216,206,233,245, 58,242,201,172,173,252,217,139,231, 24,189, 94, 71, 6, 12,253, 72,248,241,215, 8,102,220,135, -203,249,166,109, 66, 16, 25, 25,233,210,187,119,239,207, 1, 84, 41,180, 74, 45, 85,149, 89, 40, 89,150,197,200,145, 35,177,103, -207, 30,163,243, 61, 26,168,103,229,109,113,101,209,186,110, 22,132,203, 55, 16, 89,245,113,252,240,213,236,148, 7,137,175,148, -200, 2,128,244,244,244, 77, 0, 54,217,217,217,165,152,155,155, 35, 47, 47,239,133,231,143, 16,162,240,247,247, 87,200,100, 50, -244,232,209,195,206,213,213, 53,154, 97,152, 53, 9, 9, 9,149, 42,142,138,220,132, 21,185, 19,107, 51,235,208,214, 17,189, 91, -119,108,102,121,223,122,161,165,130, 43,186, 85, 39, 90, 97, 69, 0,228,168,157, 31, 93,126, 58, 36,151,164,202,155,182,232,210, - 28, 86,156,121,239,202,132, 22,195,178, 55,115,178,178,123,229,230,105,112,241, 82, 36,134, 14,105, 0,181,150, 64, 16, 24,228, - 23,168, 1, 86, 2, 6,192,176,183, 70,128, 18, 14,153, 41,137, 96, 89, 54, 2,175, 30,102,134,133,133,245,154, 53,107, 86,221, -146,248, 87,222, 37,241,175,166, 17, 66, 26,211,106,130,143, 87,193, 83,231,216,158,185, 83,143, 92,216,152, 19,210, 78,245,160, -185, 63, 0,192,174,185, 63, 50, 37, 18,196,112, 44, 50, 40,133,170,156, 85,171,147,225,254, 95,102, 29,124,110, 16,188,225,177, - 81, 99,180,124,235,121,188,209,169,101,139, 15,103,207,154,109,121,247,242, 89,204,248,108, 45,245,109,209, 61,111,211,133,155, -154,124,115,159, 94,121,105, 15, 46, 25,171, 47, 0,224,141,215, 67, 17, 28,216,234,133,147, 29,186, 20,199,146,188,120,230,119, -164,164, 37, 24,221,216,150,136,131, 10,199,100, 25, 51,165,191, 2,211,119,118,100,100,164, 83,124,124,252,115, 3,223,125,124, -124, 64, 8,193,213,171, 87,113,229,202, 21, 12, 29, 58, 20, 28,199, 65, 34,145,224,220,185,115, 38, 89, 99, 12,172, 75,183, 41, -165,157, 8, 33, 61, 61, 60, 60, 42,156,109,104, 12,151, 74,165, 66, 78, 78, 14, 78,156, 56,129, 6, 13, 26, 96,209,162, 69,112, -115,117,198,236,217, 83, 33, 8, 2,114,115,115,193,243,188,177, 22, 45,161,212, 90, 36, 8, 2,210,210,210, 80,183,110, 93,172, - 91,183, 14,171, 87,175,254, 60, 49, 49,241,168,169,105,244,242,242,178,225,121,254,147, 62,125,250,116,239,215,175, 31,122,246, -236,249,220,249, 93,187,118, 89, 30, 60,120,112,177,167,167,231, 27, 90,173,118, 73, 74, 74, 74,154, 49,188,223,126, 91, 28,126, - 73,217,102, 30,102, 12,170,131,183,199,111,199,202,149,135, 32,151,203,159,107,120, 23, 46, 92, 88,165,136, 17, 40,245,149,166, - 95, 78,156, 58,125,133,211,226,197,167,113,250,116, 42, 24,134,129,171,171, 43, 24,134,193,227,199,143,193, 48, 12,188,189,189, -193, 48, 12, 18, 18, 18, 74,199, 4,102,161,200,184, 88,134, 12,195,160,168,168, 8,207,226,158, 32, 62, 54, 26, 22,185,201,112, -180, 82, 34,235,206,109, 4,143, 30, 83, 22,255,233,111,238,225,238, 4,176,211,224,171, 21,132, 16, 13, 33,100, 0,128, 31, 40, -165,165, 22,141,207, 75,182, 10,209,166, 77,155,166,179,102,205,146,148,134,219,112,243,250, 66,175,213,106, 5, 0,240, 15,126, -237, 57,181, 31, 19, 19,131,149, 43, 87,162,160,160, 0, 82, 99, 2,221,149,136,214,210, 25,134, 21,137, 48, 83, 68, 22, 0,216, -123,123,124,125,245,198, 57,254,143,216,141,170,136,251, 63,153, 37,197, 49, 96, 52,175,174,200, 42,111,217,242,240,240,152, 39, - 8, 2,165,148,206, 53,168, 91,229, 94, 94, 94, 23, 78,158, 60,105,175,215,235,241,213, 87, 95,217, 36, 39, 39,219,188,246,218, -107, 51, 0, 84, 42,180, 42,114, 19, 86,228, 78,132,193,172, 67,185, 92,110, 87, 85,245, 81,126,214, 33,207,195,207,202,210, 6, - 89,136,135,218, 65,215, 52,219, 94,159,121, 42,105,204, 45,183,167,205, 2,205,121, 93, 93, 38, 87, 3,119,165, 13, 4, 74,253, - 42,237,156,234,116, 63,221,186,113,179,135,151,103, 3,246,232,241,243,232,219,127, 16,212,106, 6, 69, 58, 2,194, 74, 64, 88, - 41, 26, 7, 55, 67,195, 70,193,160, 0,126,191,118, 89,175,209,233, 78,189, 74,101,239,214,225,195,161,110, 29, 62, 88, 3, 42, -208, 10,226,104,213,237,223,191,255, 98, 0, 31, 86,199,227,220,246,195,161, 46,237,138,121, 12,227,104,125,244, 65, 24,238, 92, -147, 88,159,191,177, 84,218,179, 13,194,211, 78, 19, 40, 21,255, 63,235, 80,194,212, 60, 52,199,191, 69,112, 25, 37,180,188,188, -188,108,156, 44,148,223, 78, 24,253,174,229,211, 63,126, 67,114,212, 85, 92, 58, 31,157,181,247,224,161,204,130,140,212,209, 38, -136,172, 50, 55,159,189, 75, 29,248, 4,188, 40,180, 20, 22,142, 0, 0,159,128, 86, 96,205, 77, 11, 35, 84,145, 53,171, 38, 34, -203,176,194,174, 40,134,214,184,113,227,176,101,203, 22,180,111,223, 30,190,190,190,101,149,189,169, 86,179,242,214,165,154,204, - 54, 52, 68, 94, 94, 30,188,189,189,177,121,243,102, 68, 68, 68,192,210,210, 18, 67,135, 14, 69, 94, 94, 94,153,192, 50,118, 48, - 60,165, 52,230,228,201,147, 45, 7, 15, 30, 76, 37, 18, 9,201,206,206,134,141,141, 13,214,173, 91, 87,144,148,148, 20, 94, 3, -145, 53, 72, 42,149, 78, 29, 50,100, 8,235,239,239,143,148,148, 20, 88, 89, 89,233, 8, 33, 18, 0,176,177,177,209,153,153,153, - 33, 44, 44, 12, 77,154, 52,233, 56,109,218,180,246,238,238,238,235, 18, 18, 18,182, 87,245, 44, 17, 66,202, 26,212,209,107,238, - 65,163, 41, 22, 42,235,215,175, 71,201, 88,183,255,119, 17,196,198, 2, 70,204,100,177,176,176,128,175,175,111,133,101,223,177, - 99, 71,252,254,251,239,197,174, 73,142,131,147,147, 19, 46, 93,186,100,212, 76,170,210, 64,144,145,145,145, 8,240,113, 64,196, -233,147,112, 80, 74,208,196,205, 5, 30, 29, 59, 33, 58, 58,250,111,179,102,149,196,166,122, 31, 64,183,146,103,112, 43,128,113, - 6,199,235, 40,165, 95,155,194,169,215,235, 41,195, 48,228,217,179,103, 90,165, 82, 73,236,236,236, 56,185, 92, 14,181, 90, 93, - 38,184, 98, 98, 98,112,252,248,113,196,199,199,195,206,206,142,177,182,182,134, 86,171,205, 50,134,223,207,207, 15, 46, 46, 46, -207, 13,124, 31, 61,122,116,141, 68,214, 72, 32,104,203, 23, 75,234,200, 25,214, 58,192,225, 13, 60,186,247,184,136,209, 64,241, - 95, 16, 89, 0,144,149,149,181, 9,192,166,210, 99, 71, 71,199, 81, 44,203,206,182,182,182,182, 62,119,238,156,141,163,163, 35, -217,190,125,187,110,238,220,185,217, 44,203,102, 17, 66, 86,253,253,226, 16, 81,233, 57,177,222, 18, 91, 55,225,143, 34,122,121, -242,179, 25, 13,179, 36, 13, 28, 73,163, 32,244, 79,189,123,113,148, 62,182, 93, 74, 82, 50, 67, 33, 68, 85, 81, 7,111,157, 49, -107,225, 39,209,247,110,122, 41,172, 20, 24, 23, 54, 11,225, 63,159, 1, 97, 36,184,112,249, 42, 52, 90, 30,233,153, 57, 24, 50, -108, 56, 60, 92, 29, 16,117,229, 68,154, 94, 16,214,189, 90, 34, 91, 88,219,163,239, 40, 91,185,153,178,228,158,240,216,249,205, - 84, 48,204, 26,124,250,233,167, 8, 10, 10, 26, 79, 8, 89, 80, 93, 28, 45, 66,132,181,141, 59, 13,179,149,202,139,121,168,192, - 99,243,254, 25, 37,113,180,166, 96,221,166,131,141, 27,249, 60,154, 95, 85, 28,173, 87, 69,100, 25,238,171, 21, 90,117,234,212, -145,155, 75, 48,214,206, 76, 58,109,194, 91,253, 28, 83, 99,239, 32,254,238,205, 98,247,130, 86,165, 77,138,142,242, 53,226, 79, -187,149,139,223, 65,171,114, 93, 21, 21,233, 96, 42,103,105,131, 91,222,154,101,138,200,170,136,211, 80,108, 25,198,205,242,244, -244,196,226,197,139,171,141,163, 85, 65,222, 75,191,239, 9, 32,184, 84,108,161,120, 48,124, 79, 99,102, 26, 86,198,233,232,232, -136,140,140,226, 8, 9,157, 59,119, 70,231,206,255, 63,159, 65,171,213,150, 89,177, 44, 45, 45, 95,176,104, 85,196,105,102,102, - 54,227,208,161, 67,239, 94,190,124,121,240,199, 31,127, 44,233,218,181,107,169,152, 43,164, 70,172,237, 86,158,147,231,249,176, - 19, 39, 78,176,130, 32, 96,243,230,205,248,253,247,223,169, 82,169,156,163, 84, 42,215,154,153,153,241, 42,149,106,220,152, 49, - 99,134,207,159, 63,159,233,216,177, 35,126,251,237, 55,166,110,221,186, 35, 0,108,175, 46,239, 87,175, 94, 5,195, 48,208,103, -198, 97,252,140,189, 48, 55,227,112,239,222, 61,100,102,102,190, 16,196,212,152,251,105,104, 41, 41,221, 58,118,236, 88,230,134, -108,221,186, 53, 88,150,197,173, 91,183, 42,116,195,150,227,164,246,246,246,101,207,135, 84, 42,197,153, 51,103,240,217,103,159, -193,203,206, 6, 89,119, 35,224,210,249,117,116,127,119, 12,134, 14, 29, 10,150,101, 97,103,103, 87,102,249,173, 46,239,181,172, - 16, 12, 57,223, 13, 8, 8, 24, 17, 21, 21,229,209,184,113, 99,215,200,200,200, 46, 65, 65, 65,222, 17, 17, 17,165,199,114, 24, - 49, 54,199,144,243,250,245,235, 7,214,174, 93, 27, 54,114,228, 72,169, 32, 8,252,211,167, 79,117, 0,136,139,139, 11,123,253, -250,117,225,232,209,163, 80,169, 84,240,240,240, 96,220,221,221,201,169, 83,167,132,187,119,239, 94,165,148,206, 50, 38,239, 60, -207, 63, 23,198,161,244,243,174, 93,187, 76,126,223,235, 52,244, 91,212,245, 53,127,207,244,196, 91, 72, 74,136, 5,159,227,168, - 61,126,248,152,218, 20,145,245, 23,148,209, 95,201,185,240,193,131, 7,238,106,181, 26, 50,153, 12,235,215,175,215, 46, 94,188, - 56, 42, 61, 61,189, 3,173, 96, 70,121,121,206, 26,206, 58,204,172,130,243,133, 89,135, 57, 25, 8, 63,124,228,122, 75,139,254, - 91, 49, 62, 49,173,108, 96, 35, 37,196,238,144,115, 96, 7,101,171,198, 9,204,143,243,152, 60,190, 48,188,178,116, 82, 74, 53, -132,144, 65,253, 67,135,253,178,103,207,110,139,185,243,230,225,210,213, 8,100,100,231, 67,160, 44, 4, 66, 48,123,246, 92,184, - 56,216, 33, 55,241, 65,161, 90,171,237, 95,126, 41,158,127,123,185, 19,194, 76, 60,117,116,251, 26,134, 64, 40, 72,185, 47,103, -243, 98,149,111, 15,237,207, 13, 26, 52, 8,135, 14, 29, 66,100,100,228,198,202, 68,150, 33, 39,165,204,196,136,115,123,215, 16, - 64, 80,165,221,151,115,249,143,148, 35,222,234,207, 13, 29, 58, 20, 63, 28,191,140, 61,199, 30,109,216,125,148, 30,123,149, 59, - 44, 53,138, 12,111,201, 33,178, 67, 96, 61,247,142,205, 26, 41, 56, 94,133,248,187,177,200, 44, 40,194,169, 59, 79,179, 25,202, -212, 56,182, 78,113, 5, 41, 69, 92,220,131, 23,206,101,103, 43, 74, 26,116,211,150,149, 98, 24,230, 57,107, 86,109, 44, 89,134, -233,116,118,118,126,110, 57, 23,195,134,187,116, 12, 80, 13, 66, 59,204,136,139,139,179,138,139,139, 3,165, 20, 87,175, 94,181, -106,221,186,245,140,218, 88,179,166, 78,157, 90,102,181, 42,191,175,232,187,234, 80, 50, 40,125,181,131,131,195,254,105,211,166, -141,111,221,186,117,143,121,243,230, 17, 0,108, 13, 31, 64,189, 32, 8, 56,123,246, 44, 14, 29, 58,196,107,181,218,177,137,137, -137,134, 99, 29,190,114,115,115, 59, 21, 26, 26,186,253,254,253,251,108, 84, 84, 20,140, 17,116, 42,149, 10,190,190,190,208,235, -245, 88, 58,222, 19,121,121,141,161,215,235,193,243, 60,204,205,205,159, 91,231,210,152,114, 98, 24, 6, 60,207,191, 32,180,174, - 94,189, 10,150,101,209,161, 67, 7,220,188,121,179,204,162, 85,157, 5, 74,171,213,198, 57, 59, 59, 59, 47, 92,184,176, 44, 93, -105,105,105, 56,121,242, 36,218,180,109,135,192,177,227,144,152,152,136, 85,171, 86,193,205,205, 13,139, 22, 45, 66,102,102, 38, -244,122,253, 95,109, 78,239, 21, 21, 21,229,241,214, 91,111,165, 70, 68, 68,120, 28, 63,126,220,166,119,239,222,230,195,134, 13, - 75,141,136,136,240, 32,132,180,131,137,131,160,121,158,159, 73, 8,249,121,209,162, 69, 51, 62,252,240,195,214, 35, 71,142,148, - 72, 36, 18, 33, 33, 33, 65,191,123,247,110,226,235,235,203, 72,165, 82,114,226,196, 9,225,218,181,107, 87,244,122,253, 82, 74, -233, 5, 83, 44,206,134, 34,139,101, 89,163, 68, 86,121, 76,118,146,143,176,100,210, 58,172, 93,191,152,241,247,241,208,238,216, -125,242,217,133,223, 30, 60,100,213,250,201,223, 2, 15,241, 31, 4,203,178,251, 2, 2, 2, 70, 77,156, 56,209,172,103,207,158, -242,249,243,231,231,228,229,229, 85, 40,178, 42,121, 47,255,244, 89,135, 0,190,153,249,241,241,201, 31, 53, 30, 85,239, 61,151, - 58, 56, 93,144,138, 44,142,101,172,108, 24, 52,243,102,145,151, 30,227,120,236,151,109,143, 81, 77, 92, 54, 74,233,117, 66, 72, -183, 70,141,155, 30, 92,186,104,169,211,156,233,211, 36, 7,143,255, 4,170,215,226,234,185,115,176,144,242,244,238,141,211, 41, -106,173,166,223,171,184, 4, 79,226,197,175,246, 16, 66,142,216,217,217,253,241,238,200,145,190, 1, 1,195,160, 84, 42,113,224, -192, 1,236,252,234, 43,126, 53, 48,120, 19, 33, 55,199, 21,199,212,171, 20, 41,191,149,241,220, 26,243,238,187,126,205,154,189, - 7,165, 82,137,253,251,247, 99,251,234,213, 70,243,252,203,173, 89,165,145,225,195, 75,246, 70,196,209, 98, 72,222,149, 7, 79, -243,175, 62,120,154, 15,129, 82,129, 82, 53,195,224, 89,129, 86,187, 40,250, 97,252,137, 26, 38, 4,130, 32,224,243, 47, 38,190, -204,204,149,137,159,154, 78,233,174,160,145,136, 55, 92, 35,173,186, 5,165, 1, 64,167,211,197, 27, 73,191,196,203,235,133, 53, - 80,151,212, 52,173,165,238, 64, 99, 69,150,177,113,180, 0, 32, 61, 61, 61, 9,192, 28, 87, 87,215, 93, 61,122,244, 24, 3, 32, -161,134,101,180,185, 83,167, 78, 99, 1,176,132,144,141, 9, 9, 9, 47, 12, 40, 77, 76, 76,140,118,119,119, 95,238,227,227, 83, -182,208,116, 85,156,130, 32, 60,106,220,184,177,182,162,178,168,236, 88, 16,132,106,203, 40, 59, 59, 27,173, 90,181,122, 97, 77, - 75, 74, 41,158, 62,125, 90,106,113, 42,187,247, 85, 9,184,252,252,252,113, 31,124,240,193, 38,137, 68,226, 5,128,148,138, 92, -158,231,217,175,191,254, 90,193,243, 60, 11,128, 48, 12,163,151, 72, 36, 69,135, 14, 29,210,235,245,250, 56,181, 90, 61,238, 47, -174, 35,246,147,226,165, 24, 10,162,162,162,252, 75, 44, 89,241,145,145,145,183,246,236,217,227, 8, 96,111, 13,159,205, 11, 0, - 46, 16, 66, 58,174, 95,191,126,230,184,113,227, 90, 13, 29, 58,148,235,220,185, 51,194,195,195,249,179,103,207, 94, 85,169, 84, - 75, 76, 17, 88, 37,101,153,227,233,233, 89, 38,184,170,121,151,171, 28,200,107,239, 45, 95, 59,252,125, 55,197,230, 37, 39,243, -211, 19, 53,151,117,249,154, 89,219,128, 72,252,135,145,156,156,252, 49, 33,100,238,170, 85,171, 18,155, 52,105, 34,151, 74,165, - 26, 99, 69,214, 95,104, 61,208, 19, 66,222,252,178,251,192, 35,157,102,127,224,211,189, 75, 7,165,103, 29, 39,247,187,177, 41, -136,249, 45,188,224,143, 99, 95, 60,161,234,172,190,148, 82,189, 17, 92,215, 8, 33, 13,166, 78,155, 90,186,168,116,112,215, 83, -135,233,127,104, 81,233,207,151, 47, 95,238, 27, 16, 16,128, 3, 7, 14,224,212,247,223, 99, 72,122, 58,206,176, 44,203, 72,165, -246,199,180,218, 21, 48, 46,112,241,231, 43, 87,174,244, 11, 10, 10,194,190,125,251,112, 98,251,118, 12,174, 25, 79,101,104, 9, -192,177,180,121, 2,112, 31, 64,115, 0,102, 0,212, 40, 94,218,201,193,224,247, 25, 37,231, 74,207,159, 7,240,103, 14,132,173, - 62, 50,124,121, 68, 60,120,220,252,101,167, 66,165, 82,101,250,250,250,154, 52,231, 90,167,211, 85,233,195,213,235,245,241,245, -234,213, 51,218,106, 97,140, 40,202,200,200,104,241, 39, 86, 16,181, 26,139,245, 92, 35, 34, 8, 79, 92, 93, 93,133,210, 70,191, - 34, 17, 86,209,119, 20,120,108,202,255, 36, 37, 37,221, 7,240, 81, 77,211,153,144,144,112, 16, 70, 44, 26,109,236,239, 0, 32, - 51, 51,243,165, 47,230, 75, 40, 77,152, 63,127,190, 73, 2, 27,148, 38, 84, 81,214, 17, 0, 90,255,211,107,217,210,165,119, 8, - 33, 76,100,100,228,152, 18,247,246,105, 0, 27, 75, 34,122,215,150,191, 76,112,109,222,188,121, 50,165, 20,185,185,185,171, 77, - 21, 88,101,189,231,148,148,240,151,149,247,204, 20,205,175,187, 55,198,191,174,202,214, 78,222,146,175,217, 14, 17,165,101, 86, -228,228,228,244,221,219,111,191,221, 6,192,182,218,242, 85,228, 78,124, 9,105,124, 76, 8,105,114,102,234,103,239,158,177,177, - 12, 1,207,249, 67,195, 28,131, 38, 35, 28,192,183,198, 88,197, 13,243,139,226, 48, 37, 43,255, 75,229, 92, 18,255,106,242,168, - 81,163, 48,119,238, 92,156, 88,177, 66,251, 62, 33, 57, 18,128,254, 92,220,209,100, 8, 48,221, 88,158, 17, 35, 70, 96,238,220, -185,248,113,233,210, 26,241, 84, 3, 71, 66,200,113, 0,152, 49, 99,198,172,197,139, 23,219,206,156, 57, 51,120,201,146, 37,139, - 74,142,239,148,158, 47, 41,211,222, 51,103,206,108,100,112, 62, 15,192,245, 63,249,126, 86, 24, 25,254,185, 30,251,203,222, 0, -116, 19, 57, 69, 78,145, 83,228, 20, 57, 69, 78,145, 83,228,172,229, 22, 82, 44, 89, 42,223, 87,246,217,224, 59,252, 29, 27, 39, -246,221, 68,136, 16, 33, 66,132, 8, 17,255, 82,171,220,241,218,156,127,137,233, 40, 29,163,101,104, 41,221, 12, 20, 79,119,239, - 86,137, 41,213,148,192,145,221,106, 96,246, 61, 45,114,138,156, 34,167,200, 41,114,138,156, 34,231,127,139,179, 58,238, 74,174, - 15, 33,132, 28,167,148,246,174,108, 95, 42,172,202,127, 54,248,238,165, 13, 59,168, 32, 47, 99, 43, 27,163, 37,186, 14, 69, 78, -145, 83,228, 20, 57, 69, 78,145, 83,228,252, 87,184, 14, 1,208, 25, 51,102,204,252,167,185, 14, 1,184, 2, 24,107,184, 25,225, - 58, 60,192, 38, 36,192, 74, 38, 83, 74, 1, 64,163, 41,212,186,187, 35, 23, 24,248,183, 45,120, 43,226, 95,107,218,117, 46, 17, -245, 41, 47,243,183, 34, 68,136, 16, 33,226, 63,131,180, 82, 75, 21,128, 52, 0,164,228, 88, 83,178, 79, 43,105, 59,202,127,126, -238,252,159, 5, 74,105, 18,128, 10,103,203,115,149,137,172,244,116,165, 3,199,101,249,241,124, 81, 67, 0,224, 56,230, 94,122, -186,109,180,131,195,129,244,154,136, 45, 71,103,231, 27, 18,150,117, 55,230,183, 58,158, 79, 72, 79, 73,121, 46,116, 60, 5,254, -245, 2,207, 88, 17, 81, 27,177,241, 87, 8, 21, 71, 71, 71,103,103,103,231,255, 89, 89, 89,181,205,206,206,190,150,150,150,246, - 67,101,235, 30, 18, 66, 22, 19,130,105, 37,159,151, 81, 74,103, 86,145,118,163,127, 91,193,181,190, 74,165,114, 60, 33, 36,168, - 36,255,145,133,133,133,235, 41,165, 15,254,131,194,214, 12, 64, 63,142,227, 70, 56, 56, 56,180, 74, 78, 78,158, 79, 41, 93, 85, - 67, 46, 14,192, 84, 27, 27,155,161, 54, 54, 54,117, 51, 51, 51, 31,230,230,230,238, 3,176,146, 82, 90,237, 84,233, 5,147,220, -218,118,238,217,121,206,217, 19,103, 63,159,183, 38,241,183, 23,206,127,236,102,223,163,123,251,185,103,143, 93, 94, 56,115,109, - 66,166,137,105, 99, 0,148, 6,205, 19, 74,122,173,244, 37,223, 75, 9,128, 62, 0, 58, 3, 56, 11,224,152, 49,249,174,132,171, - 13,128, 89, 37,105, 94, 73, 41, 61,243, 15,127,142,204,157,157,157,151, 2,232,195,113, 92, 84, 66, 66,194, 88, 74,105,252,223, -156, 38, 14,197,211,252,131, 80, 28,134,227,186, 49, 33, 28,140,129,131,131, 67,111,142,227,198,151,132,118, 89,159,158,158,126, -252,159, 90, 54,114,185,124,181,139,139,203,123, 42,149,170,144, 16, 66, 13,227, 61,234,245,250,248,180,180,180, 22,175, 96,213, -118,253, 31,254,190,140,173, 64,124, 85, 30, 71, 43, 33, 1, 86, 28,151,229,151,154, 28, 49, 36, 49,233,246, 96, 0,112,115, 13, -222,231,228,210,120,111, 66,130, 76,219,178,123,168,133, 68,201,173,103, 89, 73,211, 34,141,218, 65,194, 73,210,181,122,221, 45, - 70, 67,199, 39,221, 59, 84, 97,176, 69, 9,203,186, 63,137, 62,227,164,215,102, 66,162,112,131,196,204,171,210, 4,187,185,185, -213, 40,163,118,118,245, 45,181,114,197,100,137,132,237, 46, 80,125, 16, 21, 0,134, 72, 34,245,188,238, 23,169, 90,253,101,102, -102,108, 94, 77,111, 98, 67, 7,226, 66,129,161, 32,232, 14,138, 83, 4,216,115, 47,157, 38,155, 80, 8, 70,137,136, 90,138, 13, -195,107, 87, 81, 74, 63,126,217, 15,147,135,135,135,237,128, 1, 3, 86,127,246,217,103,102, 22, 22, 22, 36, 46, 46,174,231,244, -233,211, 95,243,240,240,248, 40, 62, 62, 62,177,188,232, 35, 4,211, 4,129, 50, 0,192, 48,100,186,179,179,179,146,101,217, 23, - 98, 27,241, 60,175, 36, 4, 19, 5,129,146,146,223, 78, 35,132,172, 49, 70, 48,154,153,153, 13,107,213,186,221, 71, 75,151,175, -180,112,118,114, 50,215,243,130,246,241,211, 39,202, 57, 51, 62,110,109,102,102,182, 70,165, 82,237,174,193, 75, 67, 88,150, 29, - 34,151,203,123, 3, 8, 40,249,250,174, 90,173, 62,206,243,252, 94, 99, 27,116, 23, 23,151,243, 44,203,214, 49,229,191,121,158, -143, 75, 78, 78,238, 80,195,151,125,144,151,151,215,183,157, 58,117, 82,182,106,213, 10, 50,153, 12,115,231,206,157, 10, 96,149, - 49,130, 74,169, 84, 14, 49, 55, 55,175,151,159,159, 31,171, 82,169, 14,202,100,178,110,107,214,172,241,108,223,190,189,101, 74, - 74, 10, 97, 89,214,249,248,241,227,239,124,245,213, 87, 61, 9, 33, 93,171,107,228,114, 98,233, 28,121,159,128,142, 57,177,103, -230, 0,232, 85,254,188,190, 72, 49,130,178,158,189, 85,244,230, 51,152, 48,181,158, 16,194, 72, 36,146, 53, 46, 46, 46,163,138, -138,138,138, 80, 28,123,141, 58, 59, 59,151, 53, 56, 0,160,209,104,178,178,178,178,252,107,112, 31,253, 1,140,182,177,177, 25, -245,201, 39,159,216,246,234,213, 11,223,127,255,253,132, 45, 91,182,100, 17, 66,190, 3,240, 13,165,244,190,137,180,211,146,147, -147,223,148, 72, 36,196,211,211,147, 5,112,198,132,244,248, 1,152, 93,210,216,172,167,148,242,132,144, 46, 64,241,251, 14, 96, - 89,169,112, 99, 89,118,189,191,191,255,255,238,222,189,187,129, 82,250,121, 77,223,117, 23, 23,151, 77,235,214,173, 27,220,183, -111, 95, 54, 45, 45,205,189, 73,147, 38,187, 0,116,124, 9, 13,210,187,114,185,124, 74,112,112,112,224,253,251,247,163,115,115, -115, 87,150,220, 79, 90,197, 53, 30, 0,186,217,216,216,116,157, 61,123,182, 69,239,222,189,177,121,243,230, 55,183,108,217,146, - 79, 8,249, 5,192,233,218,138, 64,142,227,198,199,199,199, 59, 80, 74,225,234,234, 58, 30,213, 44,110,254,119,129,101,217, 53, - 67,134, 12, 25,181,107,215, 46,229,147, 39, 79,148,238,238,238,101,193,179, 9, 33, 53,110, 63, 69,212,218,162,181,185, 84,112, - 25, 21, 71, 75, 38, 83, 74,121,190,168, 97, 98,210,237,193,175,117,250,218, 26, 0,206,159,251, 96,176,147, 75,163, 72,153, 76, - 25, 45,183, 82, 28, 10,237,211,173,233,192,222,157,136,135,171, 19,226,147, 82,157,191,217,115,226,141,227, 39,206, 28, 66,113, - 0,177, 10,161,215,102,194, 76,123, 26,247, 47,126, 5,135,206,137, 88,251, 99, 60,126,251,227, 49, 10,115,210, 81,199,197, 12, -203, 39,247,128,139,173,178, 70,153,180,112,246,235,194, 40,148,123,223, 26,246,182,245,255,250, 5, 72,188, 93, 92, 64,169, 28, -209,177,249,237,126, 58,121,166,229,193,253,187,199, 91, 56,251, 13,201, 79,137, 54,186,114,107,238, 70,204, 10,180,232,199,177, -228,157,142,173, 27,117, 29,246,102, 71, 38, 48,160, 1,162,238,220,237,113,228,215,171,203, 3,157,153, 95,244, 60,221, 97, 46, -197,225, 27,137,149, 7,244,171, 72,112,116,239,222,189,163, 92, 46,215, 26,254, 78,173, 86, 75, 9, 65,155,154,136,141,210,255, -208,104,212,140, 68, 34, 3,195,144,143,130,131,131, 3,210,211,211,207, 16, 66,190, 77, 72, 48,205, 90,240, 33, 33,178, 44,142, -107,206,200,229,174,188, 70, 99, 15, 0, 68, 38,203,242,176,181,109, 60,123,214, 44, 11,150,101,133,140,140, 12, 20, 22, 22,146, - 49, 99,198, 40, 98, 99, 99, 67, 1,124, 85, 77, 26,177,101,203, 22, 63, 87, 87, 87, 77,249,115, 73, 73, 73,178,190,125,255, 87, -147, 74,219,175, 77,219,246, 83, 78,156,248, 57, 32, 55, 51,171,104,203,170, 77, 55,116, 10,165,186,110,128,191,100,253,230,237, -214, 99, 71, 13,255,128, 16,114,139, 82, 26,109, 2,167,151,153,153,217,161, 21, 43, 86, 4,117,233,210, 69,226,228,228,132,148, -148, 20,220,189,123, 55,232,215, 95,127,237,183,125,251,246,169,132,144, 80, 74,169, 49, 17,220,125,127,217,241,173,147,185,157, - 61,120,157, 14,110,193,205,202,226,155,197,252,122, 18,122,173, 22,130, 78,135,128,222,253,138,205, 50,130,128,192,192,192, 26, - 69,221, 37,132,184, 53,106,212,104,231,162, 69,139,164,106,181, 26, 87,175, 94,197,153, 51,103,132,164,164,164, 37,213,137, 44, - 66,200,201,121,243,230,121,116,232,208,193, 50, 61, 61, 29, 60,207, 59, 28, 62,124,120,124,179,102,205,172, 60, 61, 61,101, 59, -118,236, 64,126,126, 62,244,122,189, 93,189,122,245,236,134, 13, 27,166,217,177, 99,199, 84, 0, 75, 43,179,100,229,198,210, 57, -201,164,222, 27,254,205, 71, 32,153,252,252,198, 71,189, 92,127,178,170, 79,202, 44, 91,189,234,215,183,172,215,208,124,186,133, - 85, 99,187,220,132,211,211,123,213,175,191,229,167,216,234, 59, 67,132, 16,134, 97,152, 53,161,161,161,111,237,217,179, 71,121, -247,238, 93,101, 64, 64, 0, 4, 65, 40,139,192, 95, 26,112,214,215,215,183, 38,247,113, 73, 88, 88,216,244,193,131, 7, 35, 56, - 56,184, 44, 40,234,167,159,126,138,233,211,167,219,158, 63,127,126,234,238,221,187,167, 18, 66,150, 82, 74,103,152,210,150, 27, -182,151, 38, 38,107,193,163, 71,143, 6, 29, 58,116,104,248,180,105,211,124, 1, 76, 4, 48, 55, 35, 35,163, 19, 0,216,219,219, -203, 0,156, 33,132,188,251,201, 39,159,188, 63, 99,198, 12,188,249,230,155,115, 9, 33, 95,212,196,202, 71, 8, 97, 29, 28, 28, -222,236,219,183, 47,171,211,233, 96,110,110, 14,157, 78, 87,191,150, 2,139, 0, 88, 55,110,220,184,247,195,194,194, 96,107,107, - 11,157, 78,231,183,103,207,158, 45,115,231,206,109, 75, 8, 25, 93, 81, 90, 9, 33, 35,222,127,255,253, 1,111,191,253, 54, 90, -180,104, 1,142, 43,190,141, 43, 86,172,192,194,133, 11, 45, 78,158, 60,217,111,199,142, 29,253, 8, 33, 7, 41,165, 53,142,133, - 38, 8, 2, 56,142,195,179,103,207,224,228,228, 36,183,179,179, 59, 65, 8,217,156,145,145,241,195, 63,200,106,178,108,200,144, - 33,111,237,218,181,203, 2, 0,150, 47, 95,142, 41, 83,166,192,217,217, 25, 22, 22, 22,162,218,249,135, 88,180,202,199,209,170, - 81,120,135,194,194,194,102, 51, 63,124, 7, 12, 83,220,107,108, 80,215, 11,139,103,141, 37, 71,142,159,104, 86,213,117, 18,133, - 27,238, 95,252, 10,114,207,201, 80,235,244,184,242,199, 35,156, 90,222, 19, 0,224,215,107, 54,212,218,174,165,202,208, 78,102, -102,182, 76,195,243,151,224,226,114, 21, 79,159,166, 85, 39,178, 28, 93,156,143,111,220,184,212, 44,168,190, 63,180,122, 29, 18, - 82, 19, 64,136, 28, 30,238,150,120,119, 68, 47, 73,167, 78,110, 14, 11, 22,108, 10, 55,119,244,235, 95,144, 22, 93,109,192, 80, -127, 71,178,173, 99, 51,223,193,195, 66, 58,200, 27, 7, 53,130, 84,110,246,255, 2,172, 69, 11, 52,111,209,130,153,145,159,215, -253,218,245, 27,221, 15,156,188,162,246,119, 36,251,238,167,209,145, 85,149,131,161,224,152, 52,105, 18, 74,123,223,165, 72, 73, - 73,193,175,191,254, 82,225, 53,198,150,181,225,127,124,241,197, 23,150, 89, 89, 89,189,182,110,221,250,186,171,171,235, 23, 73, - 73, 73, 23,141, 33,121,135,144, 58,144,203,187,142, 90,185, 82,104,250,191,255,177, 54, 46, 46,140,192,243, 36,241,225, 67,251, - 85, 95,125,213, 57, 51, 38,198,172,192,206, 46, 51, 75,165, 42,140,142,142,134, 66,161, 32, 28,199,181,172, 64,225,167, 16, 66, -150, 49, 12,153, 78, 8,129, 92,174,136, 14, 11, 11,187, 89,114,186,206,177, 99,199,148,125,250,244, 41, 4,240,164,216, 28,174, -112,103, 89,198,175,120, 0, 33,150, 25, 35, 48,205,205,205, 63,252,124,209, 82,243,220,204,108,149,182,160, 64,231,104,101, 65, -136,133, 37,155, 75, 45, 88,132, 0, 0, 32, 0, 73, 68, 65, 84,155,147,151,151,144,148,166,158, 61,127, 33, 59,238,221,183, 63, - 4, 48,222, 88,145,213,164, 73,147,107,135, 14, 29,114,178,183,183, 71,118,118, 54, 50, 50, 50,112,237,218, 53, 8,130,128,208, -208, 80,121,187,214,173,154,205,154, 61,231, 55, 66, 72, 91, 99,196,150,185,157, 3,150,119,104, 90,220, 88, 63,201, 40, 43,159, -205,131,122,151,253,102, 97,124, 14, 0, 64,161, 80,212,102, 9,169,182, 93,187,118,149, 2,192,232,209,163,115,243,242,242, 22, - 3,216, 69,171, 8,170, 90,130,169,115,230,204,113,175, 91,183,174,247,174, 93,187,144,159,159, 15, 0, 78,117,235,214,133,191, -191, 63,127,246,236, 89,248,249,249,193,210,210, 18,231,207,159,199,149, 43, 87,208,188,121,115, 75,169, 84, 58,184, 50,161,213, -185,103,231, 57,242, 62, 1, 29,253,155,143,128,133,149, 43,182,236,222,139,251, 55,182,119, 84,107,239,206, 89, 60,209,253,109, - 21,149,143,244,240,181,156, 81,167, 69, 39,251, 6,141,254, 7,239,230, 55, 29,138,248, 11,143,230, 78,168,183,132, 83, 20,109, -159,183, 34, 49,163, 50,145, 5, 96,121,104,104,232,160, 61,123,246,216, 0, 64, 68, 68, 4, 82, 82, 82,224,232,232, 8,133, 66, - 1,137, 68, 82,182, 62,105, 13, 49,114,253,250,245,101,162, 77,175,215,151,173, 2,160, 84, 42,241,218,107,175,161,105,211,166, -248,225,135, 31, 70, 2,152, 81, 65, 26, 59,180,110,221,250,123,111,111,111, 79,195,239, 67, 66, 66, 48,116,232, 80, 0, 64,167, - 78,157,186, 14, 28, 56,144,150, 10,194,164,164,164,252,235,215,175,119,167,148, 94,173, 40, 65, 12,195,168, 18, 18, 18,240,201, - 39,159,224,241,227,199, 19, 8, 33, 79, 1, 40,100, 50, 89, 89,255,152, 16,226,215,168, 81,163, 53, 83,166, 76, 65,108,108, 44, -162,162,162,174,213,212,149, 74, 41,229,125,124,124, 98,116, 58, 93, 11,189, 94, 15,149, 74,133,254,253,251, 43,236,236,236, 82, - 88,150,189,151,158,158, 62,188,100, 76,138,177,141,144, 2,192,202,176,176,176,247,167, 77,155,134, 95,126,249, 5, 71,142, 28, -193,219,111,191,141,201,147, 39,195,194,194, 98,212,228,201,147,127, 67,241,130,230,229,209,117,253,250,245,224,121,254,133,119, - 67,161, 80,160, 67,135, 14, 8, 12, 12,196,145, 35, 71,186,194, 96,125, 84, 19, 27, 73,239,208,208, 80,153, 32, 8, 40, 40, 40, -192,217,179,103, 45,204,204,204, 44, 60, 60, 60,198, 0,248,199, 8, 45,111,111,239,176, 61,123,246, 88, 24,122,127,228,114, 57, - 12,158, 3, 17,127,179, 69,171,186, 30, 86, 25, 52,154, 66, 45,199, 49,247,220, 92,131,247,157, 63,247, 65,153,235, 16, 96,238, -105, 52,133, 90, 0,224, 5,138,220, 66, 61,204,228, 12,158, 36,231,225,206,195,244,138,254,248,185, 41,154, 18, 51, 47,200, 91, - 61, 1,165, 20, 26, 45, 15,117, 78, 50, 22,135, 23,226,110,124, 17, 52, 5, 89,208,104,139,135, 97, 57, 56, 56,112, 39, 78,252, - 52,229,244,233, 95,223,255,238,187,239,216,120,107,235, 40,228,228, 52,171,136,211,206,174,190, 37,103,110,182,111,195,198,185, -102,148,125,136,232,184, 2, 52,240,104, 5, 7, 27, 79, 36,167, 23,224, 82,212,143,184,247,224, 56,234,186,122, 99,242,135,111, - 40, 62, 95,180,107,175,173,109, 93,175,172,172, 71,185,149,165,179, 4, 35, 54,253, 28, 13,125,230, 67,240, 25,177,224,243, 18, - 95, 20,120,142, 94,104,222,197, 29,142,158,245,229, 35, 39, 47, 28, 1, 96,100, 69,156,148,210, 20,150,101, 55, 48, 12,121,159, - 16,130,224,224, 38,241, 43, 87,174,212, 86,240,159,218,224,224, 38,241, 44,203,120, 20, 87,236,204,122, 65,224, 83,170, 73,231, -115,162, 70, 38,147, 79, 43, 54,251,187, 62, 11, 15, 15,215, 14, 26, 52, 8, 43, 86,172,144, 77,159, 62,125,182,135,135,199,232, -242,238,189,242,156,161,132,120,185,215,175,223,227,139, 75,151,168, 68,167, 35,153,215,174,229,102, 39, 37,233,147,243,242,100, -251,239,221,123,243,189,143, 63,150,121,122,122,226,226,241,227,246,105, 5, 5, 52, 91,173, 86,101,103,103, 83,189, 94,127,173, -146,188,207,116,118,118, 86,110,217,178,197, 47, 44, 44,236,102, 98, 98,226,204,146, 10, 98, 49,128, 64, 0, 79, 12,190,195,198, -141,123, 19,198,140, 25, 19,157,146,146, 50,179,170,116, 26,160,145,147,163,147,114,247,166, 29,183,237, 44,205, 24, 71, 15, 55, - 70, 98, 99,195,233,101,102, 82, 1, 80,213,245,172,111, 14,160, 81, 37,247,236,116,249, 30,183,153,153,217,161,163, 71,143, 58, - 73, 36, 18,240, 60, 15, 71, 71, 71, 60,126,252, 24,217,217,217,200,203,203,195,163,123,119,225,227,233,137, 5, 51,166,187, 78, -156, 62,227, 16, 33,164,133, 97, 99, 86,225, 2,200, 58,237, 11,150,189, 74, 22, 34,127,110,111, 76,185,151,195,227,184,184, 56, - 88, 88, 88, 32, 40, 40,200,226,210,165, 75, 23, 42, 19, 89,229, 22, 1, 30,220,190,125,123,203,221,187,119,163,121,243,230,176, -182,182,198,217,179,103, 17, 17, 17, 1,173, 86,203,228,231,231,195,210,210, 18, 75,150, 44,129,183,183, 55,114,115,115, 17, 23, - 23,103, 47,145, 72, 28, 42,227, 60,123,226,236,231, 57,177,103,230, 36,147,159,223,216,178,123, 47,198, 12, 27, 2, 23,250,240, -130,117,125,242,121,143, 62,237, 63,165,172,103,111,115,203, 96, 91,223,160, 62,144,202, 44, 48,113,218, 66, 68, 71, 30,179, 45, -204,187, 61,129,240,207, 60, 1, 76, 42,207, 89, 98, 17, 97, 60, 61, 61,223,219,191,127,191,165,129, 43,165,108,205, 67,195, 69, -224, 43, 91,240,221,152,251, 73, 8,193,227,199,143,225,228,228, 4, 11, 11,139,178, 5,196,239,222,189,139, 43, 87,174,160,116, - 53,138, 74, 56,135,159, 62,125,218,211,220,220,188,252,111,144,158,158, 14,189, 94, 15,165, 82, 9,158,231,161,213,106,161,211, -233, 80, 84, 84,100, 17, 24, 24, 56, 30,192,213,138, 56, 5, 65,248,104,240,224,193,237,175, 94,189, 90,239,171,175,190,130, 70, -163, 89,158,156,156,140, 1, 3, 6, 64, 16, 4,116,237,218,181, 13,165,244,254,236,217,179, 1, 0, 83,166, 76,209, 21, 20, 20, -132,213, 36,239, 37,249, 15, 28, 56,112, 96,189, 95,126,249, 5, 29, 59,118,132, 90,173,198,138, 21, 43,172, 54,110,220,104,181, - 99,199, 14,199,105,211,166,125, 11,160,103, 85,156, 37,229,181,220,197,197,229,253, 97,195,134,153,149,172, 97,138,237,219,183, - 99,193,130, 5,123, 0,204,254,233,167,159,230, 29, 57,114,100,196,123,239,189,135, 5, 11, 22, 76, 46, 21, 90, 21,113, 62,122, -244, 8,142,142,142,176,178,178, 42,174, 44,181, 90,220,186,117, 11,167, 78,157, 66,195,134, 13,141,105, 8, 79, 87, 33,178,190, -221,189,123,183,229,179,103,207,112,254,252,121,248,248,248,160,176,176,176,218,181, 97, 95,246,226,207,213,113,170, 84,170,162, -184,184, 56,139,165, 75,151,194,213,213, 21,222,222,222, 80, 40, 20, 32,132, 64,167,211, 85,186,188,154, 49,233,236,220,153,112, -233, 9,182,125,173,109,108, 39, 80, 74,185,156,156,172, 77, 90,100, 31,136,141,165,154,191, 42,239,255,114,139, 86, 51, 74,233, - 77,195, 53, 15, 75, 59, 35, 28, 0,132,135,135,211,144,144, 16, 82,186,119,119, 71,110,122,186,109,180,147, 75,227,189, 78, 46, -141, 74,214,253, 98,238,177,172,109,180,179,115, 97, 46, 0,104,245, 20,151,239,101,227,118, 76, 50, 34, 98,146, 97, 46, 55,206, -248,162,214,234,139,231,103, 82,138,162,252,255,239,180,106, 11,179,160,214, 22, 15,247,208,168, 11,145,147, 22, 69, 6,245,239, -174,120,255,253,113,112,117,117,119,172,140, 79, 43, 87, 76,158, 56,229, 77, 27, 59, 27, 9,142, 95,250, 25,109, 26,246,135, 66, - 46, 65, 70, 78, 17, 64,128, 7, 15, 79, 1,130, 37, 34,163,227,208,186,145, 18, 61,123, 4, 88,252,112,224,254,199, 0,230, 26, -147, 94,125,252, 53, 72,125,123, 65,194,235,160, 75,191, 15, 33,251, 41, 96,238, 2, 21,177, 64, 70,210, 83,220,187,112,176,120, -194,105, 53,224,121,126,130,163,163, 99,246,236,217,179, 59, 55,104,208, 64, 59,126,252,248, 63,158, 60,121,242,220,178, 54,117, -234,212,249,114,253,250,245,136,137,137, 73,248,226,139, 47,206,166,165,165,205, 49,241, 5,157, 65, 8, 89, 93,226,138, 75, 63, -124,248,112,243,115,231,206, 77, 94,189,122,245,255,177,119,221, 97, 81, 29,237,247,204,118, 88, 22,144, 94, 69,177,128,189,151, -168, 40, 98, 52, 22, 44,177,183,196,222,177,119,141,177,196,150,168,177,119, 99,193,110,108,193, 94, 80, 44,104, 84,148,162,136, - 40, 69,170,212,165,109,223,187,119,126,127, 80, 62, 68,202,130,250,149,252,246, 60,207, 62,112,119,239,158,157, 59, 51,119,230, -220,247,157,121, 95,187,233,211,167, 11,167, 79,159, 62, 22,192, 47,229,185, 11, 77, 68,162,174,107,238,221,163, 76, 66,130,234, -232,246,237,194,157,129,129, 75, 53, 44,235,104,109,107, 75,218,183,109, 43, 19,115, 56,233, 25, 41, 41,140, 77,237,218,220,152, -155, 55,173,168,177,113,210,213,171, 87,115,242,242,242,202, 76,157,195,229,114,229,165,185, 11, 75,131,131,131,131,186,180, 53, - 92,229,116,238, 28,150, 82, 77,181, 90,181,232,119,223,182,171,251, 54, 34, 42,202,168, 90, 53,174, 91, 93,215,122, 47, 95,199, - 60,161, 58,157,146, 16,146,163, 15, 23,151,203, 29,186,101,203,150, 38,102,102,102, 96, 89, 22,230,230,230, 72, 75, 75,131, 90, -173, 70, 78, 78, 14,212,185,217, 80,103,103, 35,244,125, 12, 58,116,238,140,193, 61,190,107,224,123,225,175,161, 0, 78,150,199, -235,216,180, 69,145, 37,107, 85, 77,171,127,249,130,226,179,138, 68,215,175, 45,220, 32,144, 72,208,109,206,162,207, 25,160,159, - 11,133,194, 43, 3, 6, 12,232, 53,111,222, 60, 78,114,114,242, 53, 66, 72, 7, 74,233,171,114, 45,194, 18, 73,157,244,244,116, -228,230,230,194,220,220, 28, 91,182,108,129,157,157, 29,228,114, 57,158, 62,125, 74,157,157,157,201,157, 59,119,224,236,236,140, -244,244,116,104, 52, 26,200,100,178, 15,106,181,186, 76,119,121,129,123,176,231,156,158, 14, 87, 35,130,142,116,116, 34,209, 79, -135,204,245,124, 27, 17,250, 58,238,198,205,135,191, 48, 74,163,248,172,132, 91, 11,107,181,126,110, 61,109,254, 74,236,216,176, - 28, 17,127,223,203,180,115,201,217,105, 76, 84,135,219,118, 43,187,188, 50,153, 76,249,250,245,107,211,224,224, 96, 16, 66, 96, -110,110, 14,177, 88, 92,170,216,170,194, 96,201, 41,246, 59,144,201,100, 16, 8, 4,176,178,178,194,129, 3, 7,138, 38, 94, 87, - 87,215,242,104,246,118,235,214,109,168,139,139,139,105,241, 55, 91,183,110,141, 73,147, 38, 97,247,238,221, 8, 12, 12,252, 40, -159,230,135, 15, 31,146,181, 90,237,225,114,218, 54,139, 16,210,163,127,255,254, 65,247,239,223, 55, 59,112,224, 0, 24,134, 41, -245,181,127,255,126, 60,126,252,120, 25,165,244,117, 21, 39,140,250, 3, 7, 14,188,119,236,216,177,106,105,105,105, 72, 79, 79, - 71, 94, 94, 30,100, 50, 25,116, 58, 29,234,213,171, 71, 24,134,169, 87, 81, 61,114,185,220, 11,219,183,111,239, 51, 97,194, 4, -240,120, 60,168,213,106,108,223,190, 29, 11, 23, 46, 76, 1, 48,154, 82,170, 33,132, 44, 61,124,248,240,168,190,125,251,162, 89, -179,102, 13,202,227,204,203,203, 67, 94, 94, 30,248,124, 62,236,237,237,177,122,245,106,168,213,249,195,138,187,187,123,145,203, - 19,192, 94,119,119,247, 62,111,222,188,217, 72, 41,253,173,140,113,166, 63,165,116,162, 78,167,203, 29, 48, 96,128,213,137, 19, - 39, 76, 19, 19, 19, 17, 20, 20,132,101,203,150, 73, 89,150,213,177, 44, 75, 20, 10, 69,180,157,157, 93,144, 72, 36, 50,150,203, -229,153, 25, 25, 25,107, 41,165,215,254,131,147, 57,225,243,249, 24, 55,110, 28,120, 60, 30,140,141,141,161, 84, 42,161,213,106, -139,196, 60, 42,233,150,118,115, 51,181,226, 65, 48,193,221,189,211,172,193, 51,123,219, 56, 56, 58,161,154,153, 8,225,225,175, - 58,248,223,190,185,189, 97, 61,155, 61,172, 90,187,231,117, 76,214, 87, 79,118, 95, 82,139,252,143,105,173, 22, 0,158,163, 88, -206, 67, 20,236, 66, 44, 99, 36, 26,164,179,182,254, 51, 61, 49, 81,168, 17, 10,197,111, 10,173, 92,249, 34,107,144, 14, 56, 1, - 70,163, 45, 24, 40,104,193, 75, 79,161,165,213,225,109, 68, 24,238,223,248, 11,214,242, 68,164, 71, 55, 7, 4, 77,160, 86,100, - 67,169,214, 20, 60,189,233, 16, 28,116, 27, 57,217,153,104,220,170, 55,192,225, 60, 46,139,207,220,138,244,110,223,178, 41,247, -109, 92, 24, 90,187, 15, 66,109,231,142,120,159,156,131,172, 60, 21,164, 57, 74, 52,111,188, 8,105, 82, 5,114,228, 74,188,122, -235, 11, 39,199,218, 28,194,139,250, 86, 95,161,165,122,117, 14,170,215, 23, 33,168,209, 1,194,122,125,193,173,225,129,184,144, - 59, 8,190,186, 25, 9, 47, 31,128,178, 58, 56,184,183,209,247, 38,217,126,237,218,181, 54, 29, 58,116,224,117,237,218,181,153, -163,163, 99,179,164,164,164,224, 2,107, 78,179, 94,189,122, 53,179,177,177,193,214,173, 91, 21,132,144,237, 85,156,108,139,187, -219,158,216,217,217,173, 57,119,238,220,246, 73,147, 38,193,214,214,182, 73,121,223, 77,227,243,155,141, 94,187,150,242,185, 92, -122,114,199, 14,193,202,107,215, 54, 29, 58,124, 88,208,197,203,139, 80, 74,241,226,197, 11,241,175, 59,118,136, 71,244,235, 23, -251, 62, 53,149, 9, 8, 12,212, 36, 39, 36,228,166,202,100, 43,147,146,146, 62,252, 39,122,182, 86,171,125, 20, 29, 19,237,212, -170,109,115,155,231,225,209, 47,187,119,105,223,158,195,225,112, 34,162,222, 7,218,216,152,137,111,222,184,169,209,106,181,143, -244,225, 18,137, 68,189,187,116,233,194,147, 74,165,112,116,116, 68, 90, 90, 26, 18, 19, 19,243, 45, 14,217, 82,104,178,179,161, -205,201,130, 78,150,135,232,167, 79,208,188,118, 45,209,153,252,197,242, 39, 43,104,147, 82, 45, 85,197, 45, 91, 66, 83, 83, 8, - 37, 18,144, 74,186, 13, 9, 33,253,170, 85,171,182, 48, 43, 43,235, 10,165,116,181, 70,163,241, 89,184,112, 97,235,109,219,182, - 89,175, 89,179,198,108,226,196,137,103, 8, 33,205, 41,165,170,114, 38,176,119, 12,195, 88, 3,176,189,125,251, 54,108,109,109, -145,157,157, 93,104,105, 81,203,229,114,163,140,140, 12,168, 84, 42,168,213,106,152,153,153,225,217,179,103, 82,134, 97,254,170, -168,124,102,117,200,106,149, 38,252, 39,171, 6, 38, 73, 26,198,194, 51, 53,147,149, 46,223,152,180, 10,192,166,158,117,234,236, -215,176,247,162, 35,195,252, 44, 98,158,222,205, 76,138,148,213,222,127, 57, 42,183,156,122,164,132, 16,150, 16, 66,221,221,221, -145,150,150, 6, 46,151, 11,177, 88, 12,137, 68,130,197,139, 23, 99,251,246,237,149, 22, 90,132, 16, 35, 19, 19,147,181, 28, 14, -103,168,185,185,185,141, 78,167,195,162, 69,139,208,167, 79, 31, 8,133, 66,104, 52,154, 34,139,102,161,149,170, 60, 75, 7,165, -244, 5, 0,179, 18,191,225,101,109,109,237,175, 82,169, 16, 21, 21,133, 11, 23, 46,116,166,148, 6, 84,242,222,142, 34,132,244, -240,240,240, 56,210,178,101,203, 58,148, 82, 52,105,210, 4,195,134, 13,131,175,175, 47,130,131,131,145,157,157,205,222,188,121, -243, 16,128,141,149,157,192, 11,234,183,222,192,129, 3, 31, 28, 63,126,220, 34, 35, 35, 3, 10,133, 2, 50,153, 12,103,206,156, - 65,135, 14, 29, 96,109,109,141, 99,199,142, 49,148, 82,191,242, 68, 22,135,195, 57,176,103,207,158, 62,227,199,143,199,206,157, - 59,113,242,228, 73,244,237,219, 23, 67,135, 14, 69, 90, 90,154,221,134, 13, 27, 70, 17, 66, 14, 0, 88, 62,108,216, 48,228,229, -229,225,233,211,167,225,122,222,243,200,202,202, 66, 86, 86, 22,140,141,141,139,223, 99, 4,128,239,230,205,155,135,207,154, 53, - 11,181,107,215, 94, 94,176, 41,232,147, 93,162, 44,203, 78, 78, 76, 76,180,224,241,120, 86, 12,195, 32, 62, 62, 30,207,158, 61, -195,180,105,211, 50, 51, 51, 51, 39, 81, 74,223, 19, 66,150,142, 27, 55,110,245,156, 57,115,138,250,210,156, 57,115, 46, 17, 66, -122,252,187,173, 57,245,234, 89, 52, 18,114, 69, 51, 5, 2,190,149, 84, 42, 45, 26, 59,212,106, 53, 84, 42,213, 71,150, 44,129, -128,111,213,166, 69,141,203, 10,121,238,146,151,111,164,101, 38, 72,111, 88,183, 90, 83,177,137,249, 44,239, 30,131, 71,126,215, -227,123, 46,163,213,226,250,117, 63,252,241,199, 46,120,121,184,163,118,221, 38,152, 62, 99,166,185, 74,205, 44,186,121,243,218, -194,246,109,106, 93,203,205,201, 90, 92, 30,231,255,115, 92, 46, 16, 87,151, 75,117, 29,150,174, 32, 7,233,156,156, 32, 45,184, -113,172, 45, 44, 44,118,232,116, 58, 47, 96, 2,248, 18,123,188,122,246, 55, 50,165,124,168, 20, 58,176, 52, 95,108,233, 37, 92, - 84,106,220,187,126, 17, 91, 54,111, 66, 70, 70, 6, 60, 58,117, 70, 30,175, 58, 92,170,187, 64,169,144, 23,220, 52,128, 70,173, -133,141, 93, 13, 60,127, 30,172,205,145,201,202, 28,144, 4, 70,154, 6, 46,118,238, 80,105,218,193, 72, 40, 68,118,174, 26,210, - 2,145,117,236,207, 33, 80,201, 21, 96,212, 26, 48,106, 45,108, 92, 6,162,190, 93, 23,176, 58,191, 70,149,170, 62, 86, 7, 77, -204, 61,104, 98,238,193,184,221, 12,252,181,110,120,137, 1, 80,191,188,187,169,169,169,169,142,142,142,126, 47, 94,188,232, 63, -100,200, 16,220,185,115,103, 34,128, 41, 5,238,155,137, 67,134, 12,193,139, 23, 47,240,242,229, 75,191,212,212,212, 47,146,120, - 85, 40, 20, 42, 84,170,252, 57, 86, 44, 22, 27, 85,112,174, 83,235, 1, 3, 56,217,207,159,231,108,126,248,112,249,254, 3, 7, - 4, 93,191,253,150,104, 25, 6,172, 78,135,186,110,110,228,187,239,190, 51,241, 61,125,218,138,171,213, 62,158,239,227,115,123, -247, 15, 63,228,254,157,151,167,239, 66,243,154, 5, 46, 67, 0,168, 89,206,123,122, 67,165, 82,109,155, 60, 97, 76,215,128,123, - 15,170,187, 84,119, 50,187,126, 51, 32, 88,100, 44,228,212,118,173,195,149,102,103,242, 86, 45, 95, 98,172, 82,169,244, 21,173, - 13,172,173,173,241,225,195, 7,188,125,251, 22, 42,149, 10, 90,173, 22,172, 92, 6,181, 52, 11,234,236, 76, 16,165, 2, 34,157, - 14,202,244, 20,212,172, 93, 11,248,215,142,196, 10, 93, 81,165, 9,173,194,191, 70,102,102, 16,152, 72,192,225,243,245, 78,142, - 78, 8,105,217,166, 77,155,211,103,207,158, 21,140, 29, 59,182, 45, 33,100, 71,193, 4,241,237,178,101,203,158,236,216,177, 67, - 52,105,210,164,122, 27, 55,110, 28, 5, 96,111, 89, 60, 74,165,242,244,229,203,151, 71,212,168, 81,195, 54, 52, 52, 20, 74,165, - 18, 44,203,162,103,207,158, 0, 80,212,103, 34, 34, 34, 20, 74,165, 50, 53, 44, 44, 44,231,253,251,247,106,232,177, 75,112,249, -214,164, 71,115, 6, 59, 15,176,179,119,122,108,100, 92,211,149,230, 61,239, 63,103,176,243,134,223,207, 36, 40,175,190,123,151, -187,108, 90,237,245,178,220,144,105,213,156,243,118, 94,245,139,210,103, 87, 48, 45,220,206,110,101,101, 5, 30,143, 7, 62,159, - 15,129, 64, 0, 66, 8,102,204,152,129,125,251,246,149,235, 58, 44, 41,178, 76, 77, 77, 95,174, 92,185,210,121,210,164, 73, 2, - 35, 35, 35, 72,165, 82, 28, 59,118, 12,227,198,141,195, 31,127,252, 81,234,250,151,138, 92, 74,165, 88, 75,103,253,240,195, 15, - 80,171,213, 24, 54,108, 24,246,239,223, 63, 11, 64, 64,101,251, 59,165,244, 49, 33,196, 45, 56, 56,216, 12, 64,223,161, 67,135, - 30, 30, 56,112, 32, 2, 2, 2,224,231,231,215, 25,192, 27, 0, 10, 0,235, 10,146, 56,175, 43,111, 35, 72, 65, 8,135, 93, 54, - 54, 54,125, 27, 53,106, 20, 60,112,224,192,198,199,143, 31,175,150,154,154, 90,184,249, 1, 49, 49, 49, 56,120,240, 96,242,129, - 3, 7,114,116, 58,157, 21,135,195,185,156,149,149,181,184, 28,119,225,129,205,155, 55,143, 41,112, 7,226,236,217,179,116,211, -166, 77,100,217,178,101,144, 74,165,240,242,242,194,158, 61,123,102,230,229,229, 53,219,180,105,211,132,193,131, 7, 99,213,170, - 85,144,201,100,155, 43,122, 88, 41, 71,124, 17, 0,237, 55,111,222, 92, 99,214,172, 89, 56,123,246, 44, 90,182,108,105, 28, 29, - 29,189, 27,192,248,210,218,143, 82,138,232,232,104,200,229,114, 60,120,240, 0,203,151, 47,151, 22, 19, 89, 51,167, 76,153,178, -122,230,204,153, 88,187,118, 45, 13, 13, 13, 77, 29, 56,112,160,221,190,125,251,184,117,235,214,157,137,252,164,235,255, 22,212, -119,179, 90,223,166,181,231, 66, 7,167,186, 56,118,252, 4, 50, 51, 51,139,234,164,176, 94, 40,165,200,205,205,197,135, 15, 31, - 96,110,102,138, 13, 27, 87,247,154, 58,113, 76,117,228,135,193,248,116,160,171, 99,185,113,208,176,241,115,135,141, 24,131,208, -224, 32,248, 30,222,139,176,208, 23, 69,124,140, 86,131, 55,225,207,240, 38,252, 25,236,236,107,224,187,174,157,201,240,225,195, -123,254, 48, 98,168, 13,128,175, 22, 58,226,127,216,154,245, 73, 28,173,226,107,182,120, 21,153,235, 10, 68,214,203, 83,167, 78, - 89,121,120,120,112, 25,134,193,181,235,215, 49,109,202,143, 24,245,195, 34,104, 96, 1, 70, 45, 0, 43, 48,210,171, 48, 10,133, - 28, 20, 20, 50,153, 12,129,129,129,160, 44, 3,223,125,155, 64, 41, 91, 36,180, 0, 10,181, 70, 3, 39,151,122,216,181,127, 13, - 3, 62,255, 73, 89,124, 57, 25, 92,157,150,161, 72, 76,141, 67, 92,114, 24,204, 77, 93,192,227,187, 32, 35, 75, 14, 30,199, 30, - 90,101, 4,116, 5,102, 85,185, 44, 1, 10,205,231,181,159, 46,251, 83,235, 41,173,196,160,171, 80, 40,142, 30, 61,122,180,215, -239,191,255, 46,244,246,246,118,119,116,116,108, 15, 0,131, 6, 13,114, 55, 51, 51,195,209,163, 71,213, 10,133,226,232, 23,180, -248,116,105,211,166, 13,164, 82, 41, 98, 98, 98,130,203,189, 54,181,218, 74, 98,107,203, 77,189,115, 71,155, 38,149, 86,239,210, -165, 11,209, 50, 12, 56,132, 32, 51, 59, 27,239, 99, 99, 81,173, 90, 53,242, 50, 34, 66,178,125,250,244,243,238,141, 27,243, 10, -119, 36,234, 3, 63, 63, 63, 49,242,215,101,149,251, 94, 37, 59,183,140, 16, 50,198,199,199,231,252,209,163,199,204, 83, 82, 83, -222,136,132, 66, 70, 34, 49,114,252, 97,228, 84, 94, 86, 86,214, 8, 74,105,158,190,124, 82,169, 20,209,209,209, 48, 54, 54,134, -128,207, 7,171,144, 67, 39,203,131, 50, 51, 13, 92,141, 26, 66,157, 14,150, 98, 17,170,219,217,193,197,198, 90, 47,206,183,254, - 55,138, 22,190, 23,119, 23,110,104,211, 0, 66, 19, 9,132,166, 18, 76,189,116,183,224,105, 84, 0, 44,251, 69, 31,145,101,237, -228,228,244,215,241,227,199, 5,105,105,105,120,241,226, 69, 48,165, 52,155, 16, 98, 10,128, 13, 15, 15,191, 21, 22, 22,214,187, - 96,215, 93, 69,187,197, 54,157, 59,119,174,155,135,135, 7,227,234,234,106,146,146,146,226,146,145,145, 65,146,147, 63, 94,235, -124,229,202, 21, 35,133, 66, 33, 99, 89,246, 60,242,227, 64, 85, 24,191,104,206, 96,103,163,192,231,152,225,217,189,102, 19, 51, -235,166,200,100,158, 55,121, 28,156, 60, 99,206, 96,231,109,191,159, 73, 80, 26, 19,213, 97,162,139,175,206, 51, 82, 30,209,179, -189,169,181,181, 53,194,195,195, 17, 24, 24,136,247,239,223, 35, 58, 58,250, 35, 65, 53,113,226, 68,248,250,250,234,101,209, 50, - 49, 49, 89,187, 98,197, 10,231, 89,179,102, 9,138,137, 34,248,248,248, 32, 59, 59, 27,251,247,239,135,143,143, 79,165, 39,254, - 18,109, 85,171, 91,183,110,222, 14, 14, 14,200,200,200,128,189,189, 61, 60, 60, 60,250, 16, 66, 92, 41,165, 49, 85,236,250, 83, -187,119,239,190,122,229,202,149,208,106,181, 24, 55,110, 28, 34, 35, 35, 79, 71, 70, 70,110,113,113,113,153,177, 96,193, 2, 59, - 59, 59, 59, 12, 25, 50,196, 4,192,128,178, 72, 44, 45, 45,215,237,221,187,119,132,183,183, 55, 71,163,209,116,242,247,247, 71, -108,108, 44,212,106, 53, 24,134,193,187,119,239,224,227,227,147,156,145,145,225, 73, 41,125,167, 71,185,198, 46, 93,186,116,204, -140, 25, 51,240,235,175,191, 98,197,138, 21,135,204,205,205, 27, 55,111,222,188,197,138, 21, 43, 48,127,254,124,212,168, 81, 3, - 86, 86, 86,245,151, 45, 91,214, 96,206,156, 57,216,182,109, 27,150, 47, 95,126, 8,192,193,170, 84, 4,203,178,100,253,250,245, -205, 54,111,222,236, 80, 40,178, 56, 28, 14, 78,157, 58,133,231,207,159,247, 41,227, 59,123,236,237,237, 39, 58, 56, 56, 8,111, -222,188, 41,169, 81,163, 6, 24,134,209, 22,136,172,237, 46, 46, 46,211,222,189,123, 7,111,111,111, 68, 69, 69, 29,165,148,142, -242,244,244,148,205,153, 51, 71,108,108,108,108,254,239,156,192,185, 28, 50,122,237,170,249,120,250, 60, 2,231,206, 9,240,244, -233, 83,216,217,217, 65, 36, 18,129, 82, 10,149, 74,133,180,180, 52,104, 53, 42, 52,105, 84, 11, 71, 14,172, 71,106,106, 26,192, - 33,101, 46,185, 33, 28, 50,114,204,143,253,113,255,193,117,236,222,189, 23,121,121,178, 50, 30,190,141, 80,215,189, 1,156, 28, -109, 17,159, 16, 15,194,129,245,215,188,214,255,113,215, 97,225,253,174, 95,120,135,226,168, 86,173,218,150,147, 39, 79, 90,121, -121,121,113,101, 50, 25, 88,150, 69, 71, 15, 15,204,152, 53, 11,126,199,143,195,173,237, 48, 16,181, 4,140, 88,191, 93, 15, 74, -133, 28, 13, 91,180,199,224, 33, 67, 17,247,254, 61,186,247, 30, 8,165, 82, 94,244,132, 81,104,209, 82,171, 53,176,182,173,142, - 27, 55,110,112, 49,110, 92,153,107, 76,116, 26, 97,200,155,119,202, 14, 89,138,231, 8,124,234, 11,141, 74,131, 38, 77,150, 65, -195, 90,193,214,121, 34,180,218, 11,200, 73,243,207,119, 99, 88,121, 33, 33, 46, 14, 28,174,224,101, 85, 43,145,149,165,125,214, -160,155,149,149,149,237,232,232,248,103, 96, 96,224,200, 1, 3, 6,224,198,141, 27, 19, 0, 96,192,128, 1, 8, 12, 12, 68,116, -116,244,159, 89, 89, 89,217, 95,162,193, 29, 29, 29,251,122,121,121, 13,107,221,186, 53, 46, 93,186, 4, 74,233,125,189,110,108, - 62,159,114, 56, 28,176, 44, 11, 2, 32, 35, 43, 11,145,145,145,200, 72, 79,135, 86,171,133, 44, 47,143,109,224,238,158, 71, 89, -214,180, 50,229, 41,190,195, 16,165,236, 58, 44,124,175, 10, 98,235,189, 68, 34,137,203,205,203,179,177,168,102,145, 43, 20, 10, -117,210,172,172,236, 87, 47, 67,213,122, 78, 14,133, 8, 15, 11, 11,107,156,148,148,132,184,184, 56, 48,178, 92,112, 85,106,112, - 84,114,124,219,190, 29,140, 65, 97, 4, 22,124, 86, 11, 62,151,143,220,252,221,121, 21,186, 59, 10,133,126,113,203, 22, 33, 36, -223, 93,104, 98, 2,161,196,244, 35, 11,151, 62,253, 73, 36, 18, 29, 63,115,230,140,131,147,147, 19, 86,173, 90, 5,103,103,231, -250, 77,154, 52,145,119,236,216,209,216,206,206, 14, 13, 27, 54, 68,251,246,237,113,245,234, 85, 0,120, 87, 65,253, 49,132,144, -239,238,223,191, 63,247,225,195,135,131, 9, 33,100,209,162, 69,232,209,163, 7,140,140,140, 32,151,203, 33,149, 74,177,111,223, - 62, 66, 41,109, 81, 80,214, 26, 70, 70, 70, 39, 8, 33, 9, 10,133, 98, 72, 73, 78,223,205, 77, 29, 83, 51,217,113,118,246, 78, -253, 61,187,215,108,210,165,123, 87,212,114,235,130, 46,221,227, 0, 96,189, 37, 47,118,216,134,159, 26,159,183,174,110,121,240, -198,181,155,203, 61, 60,187, 44, 93, 52,201, 98,245,250,189,210, 28, 61, 6, 50,176, 44,251, 81,236,160,146,159,143, 26, 53, 10, -167, 78,157,170,176, 30, 57, 28,206,208, 73,147, 38, 9,138,191, 87,232, 50,238,221,187, 55, 6, 12, 24,240,145,208,178,182,182, -134,189,189, 61, 98, 99, 99, 1, 32, 67,207,126, 53, 99,236,216,177, 68,161, 80, 96,252,248,241,216,191,127, 63,134, 13, 27, 70, - 2, 2, 2,102, 0,152, 85,217,254,206,225,112, 54, 44, 88,176, 96,174,143,143, 15, 50, 51, 51,113,229,202, 21,244,236,217, 19, -167, 78,157,178,185,114,229,202, 90, 47, 47, 47,112,185, 92, 92,186,116, 9, 12,195,148, 27,235, 75, 32, 16,244,245,246,246,230, -196,199,199, 67, 32, 16,160, 85,171, 86, 72, 72, 72,128, 92, 46, 71, 98, 98, 34,102,206,156,249, 33, 35, 35,163,179,190,247,145, - 64, 32,152, 53, 99,198, 12,156, 60,121, 18,139, 22, 45, 58, 12, 96,124,118,118,246,224,135, 15, 31,158,236,215,175, 31, 18, 19, - 19,113,254,252,121, 44, 95,190,156,140, 26, 53, 10, 59,119,238,196,204,153, 51, 15, 1, 24, 95,206, 14,201,220,212,212, 84,243, - 58,117,234, 32, 37, 37, 5,121,121,121, 56,127,254,188,237,213,171, 87, 93,157,156,156,204,162,163,163,117,191,252,242,139,112, -214,172, 89,216,178,101, 11, 94,188,120, 1, 95, 95, 95,116,233,210,133,137,138,138, 42,213, 74, 86, 16,178,225,188,165,165,229, - 77, 19, 19, 19,228,230,230, 22,238, 44,157,183,104,209, 34,159,117,235,242,141,236, 73, 73, 73, 24, 61,122,244, 15,132, 16,118, -229,202,149, 98,129, 64, 0,165, 82, 41,251,119, 78,220,172,142, 5,192,194,181,186, 4,215,253, 14, 32, 40, 56, 10, 65,193, 97, - 16,138,242, 23,193, 43, 20,114,180,104, 82, 23,109, 91,181, 65, 82,114, 34,142,250, 30,128,165,181, 83,185,227, 8,165, 20, 2, -158, 14, 13,220,237,113,220,119, 47, 46, 93,185, 13,223,163, 39,138,214,188,241,120,124, 52,111,209, 22,173, 90,121, 32, 42,250, - 29, 14, 28,216, 13, 27,219,234, 6,231, 96, 21, 81,228, 58, 44,254,183,132,242,239,226,225,225,193,205,203,203,131, 82,169,196, -135, 15, 31, 16, 27, 27,139,106, 22,213, 16,149, 20,131,206, 98, 13, 62,176, 57, 8, 15,126,169, 35, 92,254,139, 10, 77,131,158, -205, 1,207,230,152, 54,118, 88,217,157, 0, 20, 38,102,214,249,174, 27,134,121,139,109,219,202,124,114,102,116,218, 91,215,111, -250,183, 25, 59,170, 47,255,134,255,126,104,213, 44, 20, 90,115,200,148,106,200, 52,124,112,204,123, 2,233, 1,224,242, 68,248, -166, 89, 93,156, 63,119, 85, 67, 25,237,109,189, 43,200,174, 49,152,148,176, 98, 66,235, 99,143,158,145,169,165,222,174,195,162, -137, 87,167, 59,117,236,216,177,239,219,181,107, 39,246,242,242,170, 83, 48,113,106,142, 29, 59, 38,215,233,116,167, 42,219,136, - 37,163,193, 59, 56, 56,180, 16, 8, 4,195,250,246,237,219, 98,204,152, 49,120,245,234, 21,142, 30, 61,250,166,110,221,186,229, -198, 16,227, 10,133, 25,121,169,169,213, 36,174,174, 60, 11, 83,211,164,171, 87,174,212,232,218,173, 27,137,139,139, 67, 70, 70, - 6,148, 74, 37, 94, 4, 7, 83, 62,151,155, 64,204,204, 56, 17,207,159,115,184, 66, 97, 70, 37,138, 26, 91,193,174,195,117, 85, -181,110, 85,119,176,168,179,124,209,228, 90, 74,149,178,113, 78, 78, 14,195,227,243,249,206,246,213,222, 87,210, 13,121,233,214, -173, 91,223,119,237,218, 85,244, 38,228, 5,152,236,108,168,179,165, 16,176, 58, 88,182,104, 6,174, 70, 5,168,181,112,106, 64, -161,204, 18, 35,224,239, 8,173, 74,165,170, 48,168, 97,161,208,226,148, 16, 6, 66,137, 4, 34, 83, 51,136, 36,146,146,130,129, - 84,208,222,226,190,125,251,126,251,205, 55,223,128, 82,138,125,251,246, 65,163,209, 8, 53, 26, 13,212,106, 53, 52, 26, 13,114, -114,114,224,235,235,139, 93,187,118, 61, 4,112, 72, 15,177,202,240,249,124, 31,134, 97,108, 69, 34,145,198,198,198, 70,112,250, -244,233,162,112, 19,205,155, 55,135,137,137,137,138, 16,162, 1, 0,123,123,123,237,225,195,135,121,253,250,245, 19,148,198, 87, -175, 73,253,249,181, 24, 11, 79, 35,227,154,174,102,214, 77, 81,203,173, 11, 0,160, 91,239,177,168, 85,215, 5, 57,233, 33,174, - 74, 69,108,127, 1, 79,106,241,114, 91,226, 43, 99,239,198, 99,100,169,119, 35, 81,250,246,254, 82, 39, 10, 14,135, 83,166, 59, - 86, 31,145, 69, 8,225,152,155,155,219, 20,174,243, 41,152,128,145,156,156,140,240,240,112,212,171, 87, 15,153,153,153,112,114, -114,130, 90,173, 70,235,214,173,161, 80, 40,176,121,243,102, 60,120,240,224, 33, 10,118, 70, 86,240, 27,198,110,110,110,163, 91, -180,104,129, 43, 87,174,224,233,211,167,137,215,175, 95,119,242,240,240,128,171,171,235, 24, 66,200, 18, 74,203,142,193, 87,154, -171,175, 83,167, 78,211,125,124,124, 16, 22, 22,134,201,147, 39,103,196,199,199,159, 63,125,250,244,248,229,203,151,115,186,119, -239,142,228,228,100,108,216,176, 65,247,224,193,131,141, 0, 86, 85, 80,143,175,227,227,227,157,149, 74, 37, 50, 51, 51,193, 48, - 12,228,114, 57,174, 94,189, 10, 95, 95,223,148, 2,145,245, 86,223,242, 53,107,214,172, 33,135,195,193,201,147, 39, 1,224, 39, - 74, 41, 75, 8, 57,223,191,127,255,196, 95,126,249,197,105,241,226,197,152, 48, 97, 2, 52, 26, 13,126,253,245, 87, 44, 94,188, -248,114,129,200, 42,111, 16,253,221,222,222,126,226,228,201,147,235,207,153, 51, 7,129,129,129,182,207,158, 61,107,245,226,197, - 11, 84,175, 94, 29, 25, 25, 25, 60, 43, 43, 43,108,217,178, 5,179,103,207, 62, 11, 32,253,209,163, 71, 67,163,163,163,215, 81, - 74, 55, 84, 80,159,123,156,156,156, 38, 82, 74,169, 92, 46,143, 93,180,104,209,134, 53,107,214, 96,246,236,217,120,249,242, 37, -178,179,179, 97,106,106, 74, 22, 44, 88, 48,250,167,159,126,194,184,113,227,168, 76, 38,219,245,239,119, 75,233, 32,151,134, 65, -167,178, 64,243, 38,245,208,188,113, 77, 92,247, 15, 2, 0,124, 59,208, 3,114, 89, 46, 14, 31,222,135,183,111, 35,193,227,243, - 81,205,210, 94, 31, 75, 32,212, 57,175,145,165, 73, 70, 87,175, 86,232,217,189, 51, 14, 29, 57, 5, 70,171,193,248,177, 35, 32, -205,202,194,145, 35, 7, 16, 21,253, 14, 60, 62, 31, 86,214, 95, 63, 16,106,121, 90,228,127, 94,104,233,225,126, 2,203,178, 72, - 76, 76,196,179,103,207, 16, 19, 19, 3,177, 88, 12, 5,163, 99,119,223,122,192, 18, 34, 72, 96, 41,125, 72,153,162, 40,197,159, -114,232,116,137,197, 34,214,154, 91, 88, 88, 8, 85, 42, 5, 24, 70, 91,108, 86, 33, 0, 1, 4, 60,192,193,177, 22,226,227,226, -169, 82,169,188, 91,238, 19,148, 74,185,229,226,249, 51, 62,237, 59,120, 88,247,252,118, 37,206, 95, 88, 6,105, 78, 14,148, 26, - 62,100, 74, 13,228, 74,160,154,165, 59, 90, 55,105,138,164,164, 12,132, 60, 13,200,227,169,228,250, 44, 20,141,220,190,116,172, -219,216,105,243, 97, 92,163, 3, 84,225,231,193,230,165, 20, 89,180,140, 36, 22,176,116,105,128, 44,153, 10,103,110, 7, 1,128, -222,169, 94, 82, 82, 82,228,142,142,142,199,124,124,124,126, 13, 10,122,230, 12, 0, 65, 65, 65, 9,201,201,201, 11, 83, 82, 82, -228,149,105,192, 98,209,224,137, 88, 44, 14,170, 91,183,110,146,183,183,183,121,255,254,253, 97,109,109,141, 23, 47, 94, 96,221, -186,117,175, 53, 26,205,252,187,119,239,150,235,234, 81,171,213,137, 65, 23, 46,152,117,254,241,199,106,243,251,244,217,224,227, -227,179,101,213,170, 85,124, 55, 55, 55,162,213,104, 16, 26, 26, 74,143, 31, 59,166,221,181,120,241,102,161,137, 9,239,201,197, -139,124, 70,165, 74,252, 79,119, 98,103,103,103,207, 94, 61, 60, 27,108,252,125, 27,148,138, 60,252, 29,120, 25, 82,105, 26,246, -238, 59,215,192,217,217,217, 51, 33, 33, 33, 64, 95, 1,124,240,224,193,185,109, 91,180,104, 81,187,122,117,132,190,143,129,144, -213, 65,192, 48,224,106, 84,224, 48, 74, 84,111, 76, 65, 56,166, 72,254,144,131, 53, 39,255, 12,211, 71, 24,215,239,213, 23,171, - 18,178, 65, 8,193,166,118,141, 33, 52,149, 64, 96, 34,193,212,191,252,139,132,193,165, 85,139, 33,148, 72, 80,167,173,135, 30, -131, 46,149,155,154,154, 62, 11, 13, 13,109,221,184,113, 99,204,157, 59, 23,177,177,177, 96, 89, 22, 41, 41, 41,202,228,228,228, -196,180,180,180, 88,228,199,255,217, 79,245,124, 18, 96, 24,198, 54, 40, 40, 8, 0, 4, 0,112,251,246,109, 56, 58, 58,194,220, -220, 28, 57, 57, 57,152, 63,127,190,232,231,159,127, 6, 0, 60,123,246,140, 95, 92,160,148, 68,104, 80,248,198,172, 92, 42,165, -121,207,251,103, 50,207,155,116,233, 30,143,110,189,199,224,230,165, 67,240,191,126, 11,150,188,216, 24,152,228, 94, 77,143, 73, -207, 73,144,185,237,105,208,114, 60, 55, 89,118,125,207,140,126, 22, 92, 7, 7,246,204,162, 93,217, 89,229,149,213,205,205, 13, -118,118,118, 69,107,180,120, 60, 30,198,141, 27, 7, 74,169, 94, 34,171,160, 30, 89, 51, 51,179, 52,165, 82,105,103,100,100,132, - 15, 31, 62,224,221,187,119,136,138,138, 42, 10, 29,192,178,172, 2, 70, 94,132, 0, 0, 32, 0, 73, 68, 65, 84,118,222,188,121, -252,233,211,167, 99,247,238,221,184,123,247,238, 67, 0, 43, 41,165,250, 62,172,141, 24, 50,100,136,169, 90,173,198,137, 19, 39, - 24, 0,189,207,156, 57,243,172,117,235,214,188, 30, 61,122,152,238,220,185,115, 4,128,253,149,232,238, 38,102,102,102, 2,141, - 70,131,157, 59,119, 34, 62, 62,222,147, 82, 26, 78, 8,217, 51,100,200,144, 93,141, 27, 55,174, 27, 22, 22, 22,153,151,151, 55, -149, 82, 26,162,199, 88, 52,182, 85,171, 86,103, 88,150,173,209,181,107, 87,147,223,127,255,221, 44, 34, 34, 2,206,206,206, 96, - 89, 54,180,178, 41,172, 34, 35, 35,195,147,147,147, 27,116,238,220, 25, 87,175, 94, 93, 79, 8, 89, 11,224,215, 41, 83,166, 56, -189,127,255, 30, 45, 90,180,128,165,165, 37, 34, 34, 34,114,147,147,147,119, 1, 88, 82, 81,172, 47, 74,105, 52,128,133,132,144, -166,123,246,236, 25,102,105,105,249,205,139, 23, 47,112,255,254,125,108,220,184, 17, 63,255,252, 51, 58,118,236,136,185,115,231, -166, 3, 24, 86,224,210,214, 43,110, 94,161,101, 11, 0, 90,181,106,149,180,110,221, 58,140, 31, 63,158,254,241,199, 31, 91,143, - 29, 59, 54,107,196,136, 17, 69,115,224,232,209,163,233,209,163, 71, 71,151,183, 17,224, 43, 65,171,209,168, 97,102, 89, 11,121, - 89,113, 72,139, 15,132,216,212, 30,221,187, 52,131, 92,161,134,223,197,179, 8, 9, 13, 6,135,195,129,157,125,117, 84,179,176, -198,155, 55,145, 0,240,170,124, 78, 13, 76, 45,106, 34, 47, 59, 30,234,212, 32, 24, 75,108, 49,230,199,254,144, 43, 52, 56,119, -254, 44,194,194, 66,192,229,114, 97,239, 80, 29,230,213,242, 57, 9, 45,151,211, 0,148, 30, 79,171, 66,161,197,229,114,239, 92, -187,118,109, 80,219,182,109,121,111,223,190,197,219,183,249, 15, 55, 82,169,148, 33,208,253,153, 18,114, 97,120, 57, 34,160,107, -225,238,140,226,185, 11, 37,166,166,137, 17,175,195,237,164,153, 41, 8,126,254, 0,111,223,132, 34, 38, 42, 28, 26,141, 18, 92, - 14, 7, 28, 46, 7, 53,107, 53,194,131,135,129,106, 37,195, 4,150,197, 9, 0,153,153,239,114, 37,118,238, 67, 87,175, 90,114, -105,246,252, 21,198,131, 7,237, 70, 72,196, 43,228, 49,246,160, 20,176,183, 50, 65,243,218, 11,144,152,148,134,147,135,118,202, - 89,141,102,100,241, 24, 90,165,113, 2,128, 93, 58, 26,238,218,119,104,220,126,223,227, 43,230, 79,159,100,215,111,192, 72, 8, - 51, 95, 65,155, 20,132, 90,173,123,130,136,170,225,202, 13,127, 4, 60,123,149,194,234,232, 10,187, 12,252, 81, 17,103, 9, 23, -226,163, 15, 31,146,157,139, 69,129,119, 22,137,140, 30, 85, 32,170,186,150,136, 43,244, 81,196,121, 46,151,211,114,245,234,213, - 90, 59, 59, 59, 77, 88, 88, 24,118,239,222,205, 6, 5, 5,221,224,112, 56,219,147,146,146,148, 21,113,218,104,181,193,199, 23, - 45,106,216,102,192, 0, 58,124,250,116, 57, 68,162, 25, 27, 54,109, 90,148, 38,149, 58, 82,150,133,141,165,101,194,134,197,139, -215, 13, 26, 50, 68,250,242,193, 3,227,192, 11, 23,140,133, 12, 19, 84, 81, 57,191,144,223,187, 76,206,132,132,132, 0,183, 58, - 46, 56,188,255,119,104, 52, 42, 36, 39,230, 27,178,210, 51,178, 81,158,200, 42,201, 89,176,235,106,192, 79, 63,255,252,248,167, -217,179,236, 59,125,219, 21,113,193, 47,160,201, 76, 3,209, 50,224, 19, 30,100,169, 98,164,166,228, 97,225,209,211,169,121,114, -249,128,146,147, 68, 89,229, 44,180, 88,137,204, 76, 33, 48,145, 64, 40, 49,253,200,138,101,100,102, 6,161,137, 4, 60,161,176, - 52, 43,205, 39,156,121,121,121, 3, 7, 13, 26, 20,242,228,201, 19,139,241,227,199,163,125,251,246,207, 21, 10,133, 23,165, 52, -183,170,245,201,227,241, 82, 91,182,108,105,203,231,243,153,113,227,198,241,210,211,211,139, 34,171,231,229,229,225,234,213,171, -168, 87, 47,127, 87,255,203,151, 47,209,168, 81,163, 50, 57,199, 47, 8, 77, 4,176,106,206, 96,231, 13,143,131,147,103, 0, 88, - 95,171,110,117,248, 95,191,133,251,254,129,139,190,105,204,110,235, 53,178,245, 47, 98,175, 33,243, 27,180, 28,207,149,152, 57, -224,200,185,179,220,240,160, 3,107,228,242,208, 58, 0,230,149, 85, 78, 66, 8, 40,165,159,132,114,224,114,185, 56,118,236, 88, -101,175,253,244,254,253,251,167, 76,158, 60, 89,144,156,156,140,215,175, 95, 67, 38,147,193,200,200, 8,215,175, 95,103, 0,236, - 60,118,236,216,245, 99,199,142,245, 64,126, 92,156,219,149,233,159, 38, 38, 38, 62,221,187,119,199,235,215,175,241,244,233,211, -179,148,210, 16, 66,200,217,183,111,223, 14,237,216,177, 35, 14, 29, 58,228, 83,150,208, 42,139,147,101,217,226, 49,147, 50, 11, -250,110, 48,128,111, 42,219,238, 5, 11,120, 59, 0,128,149,149, 85,188,157,157,157, 89,112,112, 48, 92, 92, 92,160,209,104,218, - 86,182, 47,101,103,103,255,190,125,251,246, 63,198,142, 29,139, 95,126,249,101,228,233,211,167, 71,246,234,213, 11,222,222,222, - 56,120,240, 32, 66, 66, 66,214,235,147, 86,172,180,107, 47, 16,142, 33, 13, 27, 54,156, 86,189,122,117,108,220,184, 17,161,161, -161,235, 86,173, 90,181, 56, 36, 36, 4,245,234,213, 19,189,122,245,138,169,202, 24, 2, 0,102,102,102,102, 90,173, 22, 23, 46, - 92,248,155, 82, 58,155, 16, 98,187,101,203,150, 97, 18,137, 4,153,153,153,138,176,176,176, 17,148,210,139,255,238,177,142, 18, -178,116,252,132, 25,123, 38,140, 31, 97,212,170,101,115,200,115, 18,160,200, 75,129, 60,247, 3,182,239,191, 1, 66, 56,176,177, -113,128,173,189, 51,222,191,143,195,195,203, 87,212, 50,185, 98,139, 80,203,174, 47,159,115,122, 62,103,139,124, 78,185, 44, 21, -138,188,212, 34, 78, 91, 91,199, 2,206,247,120, 16,120, 69,169,144,201,126, 87, 83,242,219,215,188,246,255,101, 84, 58,215, 97, -113, 72,165,210,153,147, 38, 77,242, 90,184,112,161, 21,195, 48, 92, 75, 75, 75,188,127,255,158,249,243,207, 63, 51,243,242,242, -102, 86,165, 64, 60, 62, 63,196,205,189,158, 87,191,126,253,152,190,125,251, 8,126, 24,219,131,103, 99,107,139,236,172, 12,188, -121,253, 2, 17,175,130,224, 86,175, 25,150,175,218, 12, 84,171, 86, 97, 34,201,188,148, 55,119, 36,118,238,189, 87,254, 52,239, - 84, 7,207,239,204,234, 53,106, 38,104, 94,199, 28, 26, 45,131,132,132, 4, 92,188, 16,172, 9,123,118, 63,135,101,212, 67,101, -105,250,165,224,185,155,255, 84,180,183,137, 29, 57,182,118,195,246,185, 59,247, 30,158,191,112,198,120,147,142, 30,221, 16,122, -235, 16,206, 94, 58, 37, 83,170,212, 27, 4, 92,108, 10, 77,167,242,202,214,129, 82,169,212,148,220, 16,165, 84, 42, 53,159,219, -216, 7, 15, 30, 68, 74, 74,138, 58, 54, 54,246, 26,195, 48,167,203, 74,246, 92, 26,182, 81,170, 30, 64,200,173,159, 60, 60,122, -252,116,253,186,209,232, 5, 11,212, 35,127,248, 97, 30, 84, 42, 13,132, 66,202, 51, 49,225, 64, 36,226,191,124,240,192,120,235, -148, 41,150, 68,173,190,121,168,156,176, 1,165,224,139,239, 58, 44,102,209,194,232,241,179,161, 40,102,209,122,244,244, 13, 42, - 99,209, 42,184, 49,226, 8, 33,223,204, 88,250,211,185,161,221,191,109,208,184, 70, 77,145,141,107, 77, 72,236,237,145,145,150, -134, 7, 79, 35,180,171, 78,157, 11, 43, 16, 89,122,197,149, 97, 89, 54,127,145, 59,128,111,103, 46, 4,225,114,129,130, 48, 14, -133, 59,135, 92, 91,183, 7,225,241,160,163, 44, 84, 42, 21,213,163,156, 9,132,144,129, 35, 71,142,188,125,233,210, 37, 78,247, -238,221,155,159, 63,127,158,253,156,190,163,213,106,157, 11, 4, 87,142, 88, 44,230,141, 25, 51, 6, 90,173, 22,114,185, 28,217, -217,217, 8, 15, 15, 87, 13, 30, 60, 88, 84, 32, 32,180, 67,135, 14,173,112,252,248,253, 76,130,114,206, 96,231,109,150,188,216, - 97, 57,233, 33,174,150,188,216,152,111, 26,179,219,126, 63,147,160, 92, 57,187,218,234,244,216,128, 55,201,178,235,123,142,156, - 59,203, 29,213,127,160,206, 89, 18,185,200,200,150,254,217,165, 79,133,131,218, 39,193, 73,245, 17, 89, 37,145,155,155,187,120, -217,178,101,222, 82,169,212,185, 71,143, 30,130, 6, 13, 26,224,241,227,199,184,116,233, 18,243,232,209,163,120,153, 76,182,132, - 82,170, 4,112,163, 42,117,234,238,238,238,202,227,241, 10, 93,105, 59, 10,222,222,113,254,252,249,161,227,199,143, 71,205,154, - 53, 27, 18, 66, 68,180, 18,247, 17,165,180,200,203,240,133, 39,138,168,173, 91,183, 58,217,219,219,147,171, 87,175, 50, 92, 46, -183,210,150, 27, 74,233, 65, 66, 72, 91,173, 86, 59, 97,226,196,137,240,244,244, 4,195, 48, 56,122,244, 40, 14, 28, 56,176,190, - 50,185, 91,203,194,155, 55,111,130,226,227,227, 59,205,155, 55, 15, 27, 55,110, 92, 60,111,222, 60,196,199,199,227,205,155, 55, - 47, 62,135, 55, 39, 39, 71, 17, 23, 23, 39,110,215,174, 93, 43, 23, 23,151,176,209,163, 71, 55, 26, 63,126, 60,214,175, 95, 79, -239,222,189, 59,136, 82,122,245, 63, 49,129,191,142,204,240,109, 82,219,238,250,170,213,191,255, 92,167,182,235,228,113, 99,134, -112,221,221, 26, 65,150,157, 0, 43,107, 59, 56, 87,175,133,180,212,116, 92,187,118, 85,151,158,158,117, 80,199, 33, 43, 35, 35, - 51,146, 62,135,211,201,185, 22, 82, 83, 83,113,229,202, 21, 93,150, 52,103, 31,180,156, 85,175, 98,165, 41, 48,160, 66, 75, 86, -105,139,225,137, 62, 11,111, 11,118, 30,110,205, 15,239,144,111,229,146, 74,165, 51, 41,165,233,250, 42,115, 82, 50,136,218,224, -193, 2, 92,190,220, 20, 90,237, 55,213, 76, 77,191,165, 44,219,186, 89,179,102,146, 33, 67,134,176, 30, 30,237,133,102,102,102, -164, 97,195,198, 57,217, 89, 89,150, 0, 64, 1, 93, 69, 42,186, 48,169, 52,143,203,239,170,211,105,154,228,151,181,226,164,210, -250, 40,243,218,118,196,134,199, 98, 57,135,144, 49, 44,165,135, 24, 14, 86, 70,165,208,180,170, 62, 61,149,112,251, 21,166,156, - 89, 92,217,167,188,226,174, 67, 14,135,235,235,224,224,176, 36, 33, 33, 33,149, 82,170,171,170,101,163, 48, 5, 79,239, 89,179, -180, 45,191,251,142,177,172, 94,157,165,148,234, 98,130,130,200,163,139, 23,249,143, 46, 94, 52,210,170, 84,119,206, 80, 26,165, - 15,167,163,163,227, 58, 63, 63, 63,189,215, 94,245,233,211,231, 85,225,186, 45,125,235,179, 78,109,231,235,181, 93,157,190,171, -237,154,239,158,142,138, 73, 66, 84, 76,226,141,119, 81, 9,221,171,210, 70,197,147, 74,147,130, 16, 14, 84,143,164,210, 37, 57, -173,173,173,159,241,120, 60,231,202,220,176, 58,157, 46, 41, 45, 45,173,133,158,229, 28,238,234,234,186,254,253,251,247,231,116, - 58,221,236, 47, 97, 33, 36,132,180,231,114,185, 87,116, 58,157,113, 73,139, 87,161, 24, 35,132,212, 16,137, 68, 31, 45,134, 47, -143,115,195, 79,141,127,110,215,177, 99,255, 71,247,239,159,159,191, 58,236,163,117, 67, 51,250, 91,142, 29, 62,109,230,111, 39, -118,110, 93,176,237,124,230,193, 10,173,205,118,118,119, 1,184, 21, 10, 46, 61,234,178, 85, 5,150, 97, 35, 83, 83,211,117, 0, -134,178, 44,107, 77, 8, 73,167,148,158, 44, 38,178,170, 92,159, 92, 46,119,125,253,250,245,103, 70, 68, 68,156, 96, 24,102, 92, -177,243, 55,214,169, 83,103, 90,108,108,236, 14,173, 86, 59,191, 18,247,187, 89,199,142, 29,165, 91,183,110,229,204,158, 61, 27, - 1, 1, 1,150,148, 82,233, 23,106,119,123, 11, 11,139, 63,116, 58, 93, 3, 74,169, 95,110,110,238, 98, 74,169,172,178,156, 5, - 33, 30,134, 58, 57, 57,205,119,115,115,115,139,140,140, 12, 73, 76, 76,220, 80,210, 26,244, 25,229,244,254,254,251,239,253,182, -108,217, 66,170, 87,175,142,248,248,120,204,154, 53,139, 94,184,112,161, 15,165,244,114, 85,199,100, 66,200,210, 41, 83,166,172, -254,225,135, 31,138, 4,237,186,117,235,232,229,203,151, 71, 83, 74,125,171, 58,206,127, 73,235,125,195,218, 54,181, 41, 87,183, -166, 89,227, 6,131,126, 28,217,159, 60,122, 26,137,199,143, 2,145,144,148,116,158,229,112,150,188,121,147, 30,249,185,156,129, - 79,223,224,113, 96, 32, 77, 78, 74, 62, 3,202,253,233, 85, 84, 90,212,191,235,218,255, 9, 86,173,210, 92,135,164,138,169,176, - 42,221, 97,136, 62,209,106, 29, 29, 29,145,145,209,214,136,199,243, 16,137, 68, 94, 28, 46,247, 78,102, 90,218, 44,125,133,214, -215,232,216,159, 76,232,117,136,176,172,148, 4, 85,225, 44,185,144,189, 42,156,149,225,208,151,179,172,164,210,172, 74,149,100, -197, 48,207,182,209,178,235,160, 36,167,179,179,243, 4,150,101, 93,245, 45, 19,135,195,137, 73, 72, 72,216, 95,149,250,116,115, -115,163,111,223,190, 5,165,148,124,201,118,255, 26,125,233,255, 19,167,239,230,166,142,245,154,212,159, 31, 26, 20,190,177,192, -173, 88,132,149, 51, 44, 77, 61,186,116, 94,246,192,255,238, 47,203,183,101,230,254, 39,203, 73, 8,225,208,202,238,110,169, 34, -103, 97,144,208,202,114, 10, 4,130, 61,109,218,180,153,240,248,241,227, 63, 24,134,153,248,255,177,127, 18, 66,188,185, 92,238, - 60,119,119,247,230,111,222,188,121,161,211,233, 54,150, 39,178, 42,241,240,187,196,213,213,117,170, 64, 32, 16,229,229,229, 73, -147,146,146,150, 81, 74, 79,255,183,213,103, 67, 55,171, 86,148, 22, 5,221, 94, 19,254, 54,227,201, 23,227,164,172,142,165,220, -213, 17, 81,233,207,255,221,237,254,191, 46,178,202,178,114,241,254, 93,133, 40, 20, 74,229, 34, 41, 41, 30, 64, 60,128, 51,255, -173,149,169,143,200,170,164,185, 49,229,191,129,163, 36, 10,132, 84,224,151,224, 42, 41,154,190, 38, 34, 35, 35,137,225,150,255, -239,195,143,179, 67,146, 0,204,106,229,245,233,103, 5,226,106,190, 87,223,255,124, 57,171, 34,178,170,202, 89,213,132,207, 26, -141,102, 50, 33,100, 78,101,118, 43,254,211, 80, 32,170, 46,127, 5,222,181, 0,214,254,183, 95,255,171,200,140,103, 0,250,252, -183,115,254, 63,235,147,149, 75, 42,109,128, 1, 6, 24, 96,192,127,245,160,174, 48,212,130, 1, 6,252,119,161,184, 85,171,184, -240, 34, 0,186,150,113, 35,223,170, 4,121,215, 42, 12, 20,183, 12,156, 6, 78, 3,167,129,211,192,105,224, 52,112,254,255,226, -252,167,138,172,143,196, 85,241,227,194, 93, 79, 95,227, 5,160,171,129,211,192,105,224, 52,112, 26, 56, 13,156, 6, 78, 3,231, - 63,249, 5, 96, 98, 89,199, 6,215,161, 1, 95, 29,219, 7, 16, 39, 0,152,126,142, 38,126,141,243, 13, 48,192, 0, 3, 12, 48, -224, 63, 9, 74,233,190,178, 92,135,255,113,161, 69, 8,113, 68,126,160,189, 58, 0, 34, 0,220,175,204,118,229, 82,248,172, 1, - 12, 33,132, 12, 46,184,216, 51, 0, 78, 87, 20,138,162, 16,198,198,198, 41, 74,165,210, 22, 0,140,140,140, 82,149, 74,101,241, - 92, 6, 4,159,166, 71,161,249, 63, 83,246,194,214, 90,181,106,165,168, 84, 42, 91, 61,126, 62,155, 82, 26,194,225,112, 66, 37, - 18,137,127, 68, 68,196,165,202, 92,123,151, 46, 93, 70,115,185,220, 53, 0,160,211,233,150,250,251,251, 31,254,138,237,214,182, -186,163,253, 33,141, 86,195,164,164,101, 46, 43,107,235,246,174, 62,100, 29,143, 96,126,193,255, 27,166,250,149, 31,194,162,178, -231,151, 83,190, 86,124, 62,223,199,206,206,174,103, 66, 66,194, 51, 0, 11, 40,165, 21, 70, 53,118,113,113,249,145,199,227,141, -212,233,116,181,185, 92,110, 20,195, 48,199,226,226,226,124, 13,195,136, 1, 6, 24, 96,128, 1, 21,137,173,210,222,175,148,208, -170,111, 77,236, 41, 48, 12, 4,221, 64,113,147, 0, 39, 95,167,211, 15,250,126,223,187, 62,209,106,153,252,223, 20,112,160,187, -250,142,179,207,219,219,219,121,250,244,233,104,223,190, 61, 30, 63,126,220,238,224,193,131, 99,185, 92,110, 8,203,178,119, 0, - 60,166, 84,175, 80, 10, 38, 0,250, 1, 24,209,179,103,207,174,107,214,172,225, 54,106,212, 8, 10,133, 2,119,239,222,245,216, -176, 97,195, 22, 66,200, 45, 0,199, 1, 92, 44, 47, 54,140, 82,169,180, 45,212, 76,132, 16,219, 65,131, 6, 61, 41, 46,174, 10, -242,171, 17, 74,233, 35, 66, 72,160, 78,167,123,124,230,204,153,248,250,132,180,157,228, 42,248,115,102,180,250,147,152, 73, 42, -149,202,246,194,111,107,193, 19,137,160,202,205, 65,187, 49,255,218, 5,122,243,231,249, 32, 44, 3, 46,168,212,107,245,150, 16, - 0,161, 73, 73, 73, 33,158,158,158, 49,149,109,100, 46,151,187,230,218,181,107, 14,148, 82,116,239,222,125, 13,128,175, 34,180, - 8, 33,162,111, 90, 53,187,227,119,246,132, 81, 94,102, 10,122,244, 27,122,140, 16, 50,154, 82,122,246, 35,209,212,139,216, 17, - 30,230, 79, 89,123,156, 11, 0,187,150,140, 88,176,165, 59,217, 54,235, 58,253, 64, 8,241, 2,138, 82, 54,253, 70, 41,189,179, -171, 23,177, 3, 23, 11,167,172, 61, 78, 0, 96,247,146, 17,243,119,245, 34, 91,167, 94,169,220,174, 74, 66,200,212,209,163, 71, -111, 91,179,102, 13,215,193,193, 1,137,137,137, 61, 26, 54,108,232, 78, 8,105, 88,222, 34, 98, 87, 87,215, 83,157,187,125, 95, -107,192,224, 97, 98, 27,107, 11, 36, 37,167,155,157, 58,241,199, 36, 87, 87,215,158, 49, 49, 49, 67, 13,195,136, 1, 6, 24, 96, -128, 1,101,204, 59, 85, 15,239,208,210,145, 24,203, 52,248,158,199, 37, 63,118,108,219,232,219,225,189, 58,114, 26, 54,168,139, - 87, 47,195,191,187,232,255,247,134,134,118,156,219,140,142,250,154, 8,112, 33, 40,169,252,157, 48, 90, 6,188, 27, 23,142, 3, - 0,166,142, 29,193,125,242,228, 73,221,150, 45, 91, 22, 5, 4,252,246,219,111,241,237,183,223,146, 93,187,118, 53,187,113,227, - 70,179, 3, 7, 14,104, 8, 33,135, 42, 8, 66,231, 83,167, 78,157, 13,219,182,109, 19,121,122,122, 66, 36, 18, 21,125, 38,145, - 72,208,167, 79, 31,244,233,211,135,155,148,148,212,221,207,207,175,251,111,191,253,166, 38,132,204,163,148,238,208,167,242,150, - 45, 91,214,170,148,183,175, 17, 66,222, 49, 12,243,162,105,211,166,241,245, 8,169, 59,185, 87,251,155, 83, 59,184,153,148,197, -195, 19, 10,113,100,116,254, 92, 93, 92,104,197,248, 95,133,196,204, 52, 67,108,106, 26, 2, 32, 20, 64, 8,165, 52,244,221,187, -119,225, 13, 8,105,246,141, 5,231,208,129, 76, 93,211, 74,136, 45,196,199,199,195,220,220,220,184,115,231,206,201,132,144, 21, -119,238,220,217,247,133,251, 84,219, 21,243,167, 10,164,177, 33,248,240,250, 17,230, 12,246, 16,207,218,254,215, 47, 0,206,150, -223, 17, 57,156,223, 2,217, 69,179,242,147,241, 46,203,200,200,240, 4, 0, 43, 43, 43, 33,128, 59,155,255, 70,175,217, 29, 8, -249,140,142, 46,224,114,185, 59,143, 28, 57, 50,254,199, 31,127,204, 79, 29,241,224, 1, 36, 18, 9, 86,173, 90, 85,115,238,220, -185,235, 80, 70, 34, 96, 23, 23,151, 31, 59,119,251,190,214,214,141,191, 52,204,205,204, 86,237,221,121,250,169, 99,227,122,156, - 41, 62,115, 77,183,106, 84,246, 46, 46, 46, 63, 26, 44, 91, 6, 24, 96,128, 1, 6, 84,198,154, 85,161,208,170,103, 67, 14,119, -108,225, 54,100,184,183,135,168, 73,227, 70, 16,136,254, 21, 40,186,101,171, 86,104,217,170, 21,103, 81, 94,110,183, 39, 79,131, -186,253,121,227,177,170,158, 13, 57, 29,145, 70, 71,235, 91,176,194,164,180,107,250,217,117,145,101,165, 26, 1,128, 73, 53, 91, -229,146, 11, 31,252, 59,116,232, 0,103,103,103,193,237,219,183,199,161,252,120, 41, 75, 34, 34, 34, 68, 92,110,249,241, 80, 29, - 29, 29, 49,104,208, 32,212,171, 87, 79,216,185,115,231, 37,248, 87, 58,140,143, 96,100,100,148, 74, 8,177, 5, 0, 75, 75, 75, -221,138, 21, 43, 94, 80, 90,228, 25,164,148,210, 71, 28, 14,231, 49,203,178,127, 95,188,120, 49,161, 17, 33,182,189, 91,214,187, - 63,245,135, 65, 98,250,231,150, 50, 69,130, 50, 39,167,212,247,197, 18,147, 52, 99, 19,147, 16,145,216, 40, 20, 64, 8,128, 80, - 39, 39,167,240, 70,132, 56,127, 83,207,245,198,174,217, 35, 76,245,169,203,150, 45, 91,186,123,121,121, 25,233,116, 58,200,100, - 50,236,222,189,219,220,216,216,216,188,103,207,158,203, 1, 20,117,128,134,132, 52, 25,232,200,157,184, 34,145,153, 86, 5, 33, - 83,173, 99,187, 86,177,219,215, 47, 55,107,245, 77, 71, 68,222, 57,138,204,204, 92,100,103,229,129,101,217, 79, 50, 12, 79,189, - 66, 83,118,245, 33, 27,118, 45, 30,177,144,112, 56,164, 89,255, 5,232,107,159, 61,131, 16,242, 18, 0, 95, 40, 20, 22,245, 67, - 66,136, 99,227,198,141, 55,212,253,174, 35,118, 47,253, 1,148,101, 41,128, 13,250, 90,179, 8, 33,182,166,166,166, 23,111,220, -184,209,182,117,235,214,120,252,248, 49,162,163,163, 49,117,234, 84,245,180,105,211, 4,163, 70,141, 34,115,230,204,153, 78, 8, -249,147, 82,250,240,147, 27,129,199, 27,217,111,192, 80, 97, 94, 86,142, 82,173,210,168, 45,173,171,177, 42,153, 82,158, 46,205, - 81, 14, 29, 49, 65,253,242,249,223, 35, 1,124, 34,180, 62,167, 62, 13, 48,192, 0, 3, 12,208, 27,173, 1,216, 0, 72, 3,240, -180,196, 49, 10,254, 71, 41,199,233,200,247, 74, 89, 21,227, 74, 71,254,178, 31, 27,228,199,248,124, 2, 64,250, 57,133, 43, 43, - 42, 60, 80, 16, 25,190, 32, 64,113, 97,160, 98, 82, 76,104,209,136, 52, 10, 38, 51, 10,186,140,119,208,229,126,154, 62,137, 24, - 85, 67,182, 66,135,248,168,112,140,158,181, 10, 17,105,101, 71,228,246,174, 79,180,230, 66,240, 76, 5,128, 64, 92, 77, 53,124, -253,245,192, 86,173, 90, 41,151,120,114,188,215,237,202,183,116,205,153, 56, 2,237,102,255,121, 61, 42, 42,138,113,116,116,196, -143, 63,254, 8, 74,105,239,114, 46, 46, 37,247,105,160,237,235,222,237,209, 38,165,244,101, 82,111,222,188,193,189,123,247, 16, - 23, 23,135,218,181,107, 99,220,184,113,169,148, 82,187,178, 56,123,244,232,113,247,183,223,126,243,220,180,105, 83,240,145, 35, - 71, 58,148,229,110,106, 72,136, 73,179,154,246, 79, 15,172, 91, 88,155, 92, 61,196,151,199,189, 69,181, 0, 5, 41, 69,228,209, -164,164,127,213,221,175,238, 14, 48, 49, 55,133,137,153, 36,101,212,141,103, 69,150,172,130,191, 17, 45, 9, 49,115,118,176,122, -118,114,243, 50, 39,142,255, 41, 35,193,222, 71,164, 34,145,213,185,115,231,192, 53,107,214, 88, 36, 37, 37,225,214,173, 91,168, - 89,179, 38,228,114, 57,126,255,253,247,228,251,247,239, 59, 22,148,215,174, 77,189, 26, 33,187,231,142, 49, 23,140,251, 89, 84, -217,142, 36,224,241,118, 4, 94, 59, 53,205, 92, 68,145,149, 20,141,119,225, 47,241,228, 85,140,214,247,102,136, 46, 71,161,242, -166,148,250,151,246, 61, 31, 15, 82,247, 78,146,141,223,181,187, 79,221, 28, 28, 28, 48,105,210, 36,124,248,240, 1,148, 82,176, - 44, 91,180, 75, 99,201,146, 37,112,119,119,199,232, 97,125,229,162,204,160,206,126,175,232, 51, 61, 59,120,227, 26, 53,106,220, -184,115,231,142,157,147,147, 19,238,223,191,143, 15, 31, 62,192,222,222, 30,183,111,223,198,250,245,235,143, 76,153, 50,101,240, -154, 53,107,140,134, 15, 31,158,120,253,250,245,234, 37,215,212,213,172, 89, 51,220,239,250,125,137,255,249, 27,239, 44, 76,197, - 48,177,181, 2, 87, 98,166,164, 32,114,123, 91, 11,193,208,239,191,173, 27, 27, 27,219,160, 68,251,127, 86,125, 26, 96,128, 1, - 6, 24,240, 47, 92,190,124,153,122,123,123,147,194,191, 37, 37, 4, 33,228, 82,129, 30, 80, 3, 16, 22, 59, 6, 33,228, 82,129, - 53,228,163,227, 69,139, 22, 45, 89,183,110,221,203,194,227,194,115, 22, 47, 94,220,104,253,250,245,107,219,181,107,119, 50, 48, - 48,112, 5,128,183,159, 43,180,202,178,114,233,181, 70,139, 73,120, 2,129, 91, 79,240,117, 90,104,211, 35,192,102,189, 7, 76, -236,161, 32, 18,100, 36,191,199,235,251,103,243,181, 97, 69,149,248,154,242, 9, 33,183,195,195,195,241,250,245,107,196,199,199, - 67, 44, 22,127,114,222,131, 7, 15, 96,108,108, 12, 7, 7, 7,253, 76,118,234,143,243,177,134,180,172, 1, 73, 59, 79,164, 15, -159,140,219,183,111, 35, 53, 53, 21, 2,129, 0, 66,161, 16, 12,195, 84,200,199,225,228,103,252, 45,180, 98,149,118, 78,103, 66, -120,206,150, 18,191, 93,203,103,186,114, 30, 93,226, 43,226,222, 34, 73,169, 67, 53,125, 44,121, 18, 19,136, 77,196,201,198,198, -226,146, 34, 43,178, 37, 33,124, 19,137,145,223,161,213,115,236,185,207,111, 27, 41,222,134, 64, 80, 10, 71,183,110,221, 38, 1, - 88, 78, 41,205,234,220,185,179,221,154, 53,107, 44, 18, 19, 19,241,234,213, 43,156, 62,125, 58,141,201,191, 80, 66, 41, 93, 9, - 0,237, 8, 49,114,177,169,118,125,199,207, 51, 77,113,231,148, 16,227,126,174,116, 71, 50,111,208,231,242,192, 81, 83,166,109, -155,217, 7,178, 92, 5,142,223,124,142,107, 65,239,250, 2,120, 80,222,186,183, 29, 15,232, 91, 66,200,183, 3, 6, 12,120,113, -239,222, 61,235, 3, 7, 14,128, 97,152, 82, 95, 7, 14, 28,192,173,251, 65, 51, 40,213, 91,100, 57,186,186,186,222,250,251,239, -191,109,196, 98, 49,110,222,188,137,172,172,172, 34, 75,214,232,209,163, 73, 86, 86,214,176,221,187,119, 15,140,141,141,221,120, -255,254,253, 12,228,167,131,250,168, 35,112,185,220,119, 12,163,169,239,208,160, 46,111,112,159,142, 29,243, 50, 66, 32,177,106, -138, 71,193,239,252,178,164, 25, 10, 46,151,251,174,248,249, 95,162, 62, 13, 48,192, 0, 3, 12,168,180,160,185, 68, 41,237, 93, - 92, 56,149, 20, 92,133,255, 23,158,183,110,221,186,222,197, 69, 24, 0,172, 95,191,126,109,177, 99,249,151, 40, 91, 69,139,225, - 59, 19, 66, 40,128,206,165,157,164,122,117, 14,170,215, 23, 33,168,209, 1,194,122,125,193,173,225,129,184,144, 59, 8,190,186, - 25, 9, 47, 31,128,178, 58, 56,184,183,209,183, 44,202,250,245,235, 67,169,204, 95,154,165, 82,169, 32, 48,177, 80,206,153, 56, -194, 8, 0, 88,158,145,170, 88,161,245, 34, 52,237,224,133, 54, 41, 20, 79,236,242, 5,112,161,101,107,245,152, 49, 16, 8, 4, - 16, 8, 4, 69,201,103,245, 17, 90, 5, 73, 81,193,230,187,175,104,105,159,183, 18,241,143,159, 92,238,211, 70, 20, 27, 42, 84, -133, 61, 66,146,138,165,126, 41,186,203,250,100, 78, 22,155,136, 19,141,197,226, 80, 99,137, 73,113,161,245, 14, 0, 40,159,239, -123,116,165, 79, 83,147,148, 40, 19,229,211,219, 72, 86,178, 26,179,210,105, 86, 94,189,122,213,150,199,227,217,235,116, 58,196, -197,197,225,229,203,151,216,186,117,107, 74,110,110,110,231,160,160,160, 55,197,202,203,105,109, 44, 60,237,187,106,102, 45, 94, - 72,128,145,234, 93, 88,169,226,173, 60,216, 52,233,223,189,111,231,102,151, 39,253,176, 20,223,247,250, 14,163, 58, 55,164, 49, - 73,153, 74, 0, 55,245, 73, 96, 77, 41, 77, 36,132,116,235,212,169,211,177,230,205,155, 55,160,148,162, 73,147, 38, 24, 54,108, - 24,124,125,125, 17, 28, 28,140,156,156, 28,205,141, 27, 55,182, 80, 74, 15,234,121,195,137, 45, 44, 44,174,249,251,251,219,136, -197, 98,220,184,113, 3, 10,133, 2, 14, 14, 14,152, 54,109,154,112,253,250,245, 71,114,114,114, 6,175, 91,183,206, 40, 38, 38, -102,199,245,235,215,107, 2,224, 80, 74, 63,233, 4,106,181,122,223,113,223,195,219,166,249, 76,119,242,127,252,234,182, 42, 47, -215,188, 70,141,248, 28, 27, 11,137,233,150, 95, 87,186,168,213,234, 73,165,215,231,221, 42,213,167, 1, 6, 24, 96,128, 1,159, -218, 48, 46, 95,190, 92,166, 22, 41, 46,158, 74,138,173,202,136, 52, 0,138, 69,139, 22, 45, 33,132, 92, 42,176,120, 41, 0, 36, -125, 13,145, 85, 36,180, 40,165, 1,132, 16, 80, 74, 3,202,100, 97,117,208,196,220,131, 38,230, 30,140,219,205,192, 95,235,134, -151,248,145,170,167, 8,235,179,234,166,191, 74,165,226, 29, 62,124,184,104,221, 22, 0,232,116,186, 47,222,138,149, 17, 90, 5, - 66,239,147, 66,184,138, 36, 1,251,102, 15,254,198, 74, 39,231,171, 31,248, 33, 81,197, 50, 27,223,106,228, 79,179,232,111, 75, -202,224,188, 48,107, 18,226,239,223,130, 88, 34,137, 31,127, 47,180,184, 21, 43, 4, 64, 52, 0,184, 26,153,221, 62, 61,103,184, -135,189, 0, 2,245,229, 51, 72, 82,177,170, 61,177,218,131, 91, 75,111, 84, 80, 74, 17, 29, 29, 13,185, 92,142,192,192, 64,156, - 61,123, 54,173,164,200, 42, 40,239,221, 63, 22,140,108,107,150,251, 65,160,126,122, 11, 73, 42, 86,229,174,143,184,106,218,191, -131,128, 67,110, 16, 14,215,184, 87,199,134,152, 53,161, 63, 54,255,241, 23,163,182,237,216,123,219,197, 43, 67,242, 84,154, 37, -250,136,172, 98,101, 14, 1,208,144, 16, 34, 2,224, 53,108,216,176, 43, 3, 7, 14, 68, 64, 64, 0,252,252,252,220, 0, 36, 23, -212,255, 42, 0,118,200,223,141, 88, 86,230,120,142, 64, 32, 56,121,235,214,173, 70,142,142,142,184,117,235, 22, 20, 10, 5,166, - 76,153,162,246,241,241, 17,140, 30, 61,154,100,103,103, 23, 89,178, 2, 3, 3, 51,202, 18, 89, 0,144,144,144,112,181, 70,141, - 26,237, 59,117,234,212,191,150, 91, 61,179,168,220,156, 84,177,216,200,248,126,192, 29,193,211,191, 31,238, 72, 72, 72,120, 82, -122,125,222,214,187, 62, 13, 48,192, 0, 3, 12, 40, 27,222,222,222, 1,151, 47, 95,134,183,183,119, 64, 5,115, 73,239, 42,138, -161,194,239,241,215,173, 91,247,114,221,186,117, 31, 89,188, 62,211,210, 86,210,117,120,153, 82,154, 92,220,162, 85, 41,232,178, -227, 62,189, 0,150,173,204,197,126,242,158,133,133, 5, 99,108,108,252,145,208, 98,245,228,204, 60,127, 2, 81, 83, 71, 20, 89, -178, 10, 45, 91,232, 49,250,179,132, 22,203,178,129, 0, 62, 42,132,137, 93,189,225, 39,127,232,214,161, 97, 45, 39,142,246,244, - 86, 36,200, 25,229,242, 8,141,242,117, 46,237,251,170,148, 69,214, 69,156,140, 22, 70, 38,198,239,141, 37, 38, 37, 69, 86, 44, - 0, 72,236,221, 7, 30, 25,238,213,185, 89,189, 58, 28,230,212,239, 72,148,107,243, 22,133,107, 52, 81, 50,122,174,140, 58, 92, -254,221,119,223, 45,183,178,178, 50,218,182,109,155,121,141, 26, 53,192, 48,140,186,164,200, 50,177,171, 55,252,212,232, 30, 29, -220,237, 45, 56,218, 63,183, 35, 94,161,147,111,141,210, 30,217,163,135,200,178, 54,151, 92,223,179,118,170,177, 88,196,135, 82, -169,196,250, 93,127,226,198,195,176,222,105,161,231,175, 3,184,254, 25,125,114,124,239,222,189, 55,175, 90,181, 10, 90,173, 22, -227,198,141,195,187,119,239,110, 68, 68, 68,108,117,113,113,153,183, 96,193, 2, 71,123,123,123, 12, 25, 50, 68, 0, 96,116, 25, - 28,191, 30, 63,126,188,119,179,102,205, 16, 16, 16,128,172,172, 44, 56, 56, 56,192,199,199, 71,184,110,221,186, 35, 57, 57, 57, -131,215,174, 93,107, 20, 29, 29, 93,174, 37,235,163,126,173,211,173,222,187,121,234,188,214,223,120,112,222,190,125,195,196,181, -241,228,220,185,229,119,207,202,202,234,200, 71,245, 57,166,103,165,235,211, 0, 3, 12, 48,192,128, 47,134,203, 0,188, 75, 90, -185, 74,138,176, 66,139, 85,241,227,146,231, 23,124,174,250,220, 2,149,180,104, 21, 8,175,143,215,104, 21, 95, 4, 95, 17, 88, - 89,154, 94,226,233, 19,181, 90,159,104, 39,181, 6,111,137, 39, 7, 2, 19, 11,101,159, 85, 55,253,203, 58,215,196,196, 68,111, -139, 22,171, 82, 86, 36,156, 42, 37,180, 10,214,104, 93,163,148,126, 36,180,170,217,215,243,252,105,225,204, 45, 30, 3,123,112, - 82, 38,180, 67, 86,158, 74,181,224, 21,195, 38,200,203, 23, 89,249,179,184, 54, 70,108, 34, 9, 53, 50,249,104, 93, 86, 28, 0, - 24,219,213,109,179,104,246,244, 93, 93,134,247, 33,105, 83, 60, 32,205, 82,168,230,189,100, 72,162,130, 14,126, 69,233,157,210, -232,110,223,190,189, 23,192,222,206,157, 59,167,152,152,152, 32, 47, 47,239,147, 54, 40, 44,111,135,129, 61, 56, 41,227,219, 34, - 83,166, 81, 45,120,201, 32, 73,193,158,172, 72,100,217, 84, 51,189,190,103,205, 84,113, 82, 66, 44, 4, 2, 1, 36, 18, 9,110, - 62, 8, 69, 90,216,133,207, 17, 88,224,114,185, 43,150, 44, 89,178,124,218,180,105,200,200,200,128,159,159, 31,122,245,234,133, - 19, 39, 78,212,184,114,229,202,102, 47, 47, 47,112,185, 92, 92,186,116, 9, 90,173, 54,178,140,246,236, 63,113,226,196,121, 3, - 7, 14,196,147, 39, 79,144,156,156,252,145, 37, 43, 43, 43,107,216,174, 93,187, 6,198,196,196, 84,104,201, 42,129, 54,174,117, - 90, 8, 22, 47,219, 4,149, 60,149,151,150,248, 56,224,246, 77,206,163,204,204, 76, 49,128,236,170,214,167, 1, 6, 24, 96,128, - 1,122, 91,181,202,210, 34,105, 5, 34, 42,173,180,227, 98, 2,171,180, 99, 82,194, 10,166, 46,241,121,240,215,188, 38,189, 44, - 90, 60,187,198, 96, 82,194,138, 9,173,212,143, 62, 55, 50,181,212,203,117,168,101,192,219,115,176, 40,142,150, 81, 70, 70,134, -145,181,181,181,178,184, 64, 16,139,197,112,116,116,132, 84, 42,197,190,125,251, 0,160,162, 69,209,140,217,192, 31,208,102,248, - 56, 60,117, 22,130,106, 53, 69,150,173, 61, 99,198,124, 36,182, 4, 2, 65,225,218,176,138, 38,221,191, 9, 33,177, 0, 30, 81, - 74,105, 75,247,218,191, 24,153,152,140,105,213,180,142,245,172,169,227,249, 49,169, 42,248,123, 44,206,250,243,215,133,146,120, - 42,153,246,158,102, 61,172,128, 47,170,223,238,163, 37, 45, 89, 9, 45,220,107, 47, 53, 18, 27, 77,248,166,177,187,253,162, 57, - 83,249, 49, 41, 42,226,223,102, 65,206,217,223, 22,136,163, 97, 58, 47,158, 74,239,232,209, 60,203,123,245,234,181,156, 82, 74, - 89,150, 93, 6, 0,197,203, 59,199,103, 2, 63,234,131, 18,183, 61,150, 74,207,254,186,208, 52, 30,229,151,215,166,105,255, 14, -118, 22,102,215,247,172,157, 38, 78, 78,124, 15,145, 72, 4, 83, 83, 83,196,167,100,131,207,227, 42, 62,167,179, 17, 66, 68,158, -158,158, 11,167, 78,157,138,208,208, 80, 76,153, 50, 37, 57, 46, 46,238,220,169, 83,167,166,252,252,243,207,188,238,221,187, 35, - 57, 57, 25, 27, 54,108,208, 62,120,240, 96, 45,128, 13,165,246, 71, 30,111,252, 47,191,252, 66,147,146,146, 72,116,116, 52, 28, - 28, 28, 48,125,250,116,225,218,181,107,139,214,100, 85,198,146, 85,136,132,132,132, 0,183, 58, 46,232,123,117, 11, 24,173, 42, - 32, 43, 35,238,222,235, 40,105,128,165, 80, 56,215,163,101,211, 42,213,167, 1, 6, 24, 96,128, 1, 95, 4, 79, 43, 56,254,143, -162, 52,215,161,190, 66, 43,114,251,210,177,110, 99,167,205,135,113,141, 14, 80,133,159, 7,155,151, 82,100,209, 50,146, 88,192, -210,165, 1,178,100, 42,156,185, 29, 4, 0,145,149, 41, 88,110,110, 46, 90,182,108,137,157,163,221,187, 40,115, 51,140,140, 1, -168, 68,102,202, 11,194,142,254, 87,174, 92,145,179, 44,123, 18,192,149, 10,104, 86, 52,106,212,104,199,166, 77,155,132, 13,134, -143, 69,222,227,251, 37,173, 83, 48, 54, 54,134, 72, 36, 66, 72, 72, 8,252,253,253,213, 0, 86, 84, 80, 97,127, 51, 12, 19,124, -242,228,201, 4,183,218,206, 61, 58,183,110, 51, 99,201,226, 69,166,175,238,223,192,178,181, 59,216,186,173,186,103,175, 63,113, - 33, 55, 91,226,242,173, 60,233,245, 11, 61, 46, 53,184,132,200, 74,106, 80,203,165, 75,187, 22,205,231, 47, 91,182,212,236,229, -253,155,248,249,183, 61,212,173, 89,215,236,223,206, 94,204, 73, 23,215,252, 78,145, 18,254, 68,159, 58,188,123,247,238, 94, 0, -123, 11,143, 75,150,119,209,170,173,172,123,235, 30,210,245, 39,206,202,114, 76, 93,186,150, 87, 94,219,134, 3,218, 87,119,176, -188,190,125,245,100,241,135,196, 56,136, 68, 34, 72, 36, 18,196, 37,103, 97,249,150,211, 50, 13,203,246,248,204,190, 40, 50, 53, - 53, 21,105, 52, 26,236,220,185, 19,113,113,113,237, 40,165,113,132,144, 61, 67,135, 14,221,214,164, 73,147,250, 47, 95,190,140, -204,203,203,155, 70, 41,125, 93, 22, 73,181,106,213,218,217,216,216,144, 71,143, 30, 97,242,228,201,234,233,211,167, 11, 70,141, - 26, 69,164, 82,105, 85, 45, 89, 0, 0,103,103,103,207,126,222,237,209,161,219,148, 0,181, 50,235, 94,204,235, 35, 1, 28,250, -208,168,101,243,166, 85,170, 79, 3, 12, 48,192, 0, 3,254,127,160,188,197,240,229,102,163,246, 4,120,238, 86,152,212,200, 73, -240,193,247,215,233, 52, 55, 42,144, 42,158,236,165, 57,231, 39,208,203, 27, 70,209, 43,219,103,209, 41,222,141,230, 86,141,230, - 0, 0, 32, 0, 73, 68, 65, 84,104,125, 91,242,193,221, 10,147, 60, 1, 94,121,217,189,123,213,131,182, 91, 29,208,110,117, 64, -189,221,161, 5,176,164, 69,139, 22, 23,124,218,128,210, 87,199, 41,125,117,156,250,180, 1, 5, 48, 25,128, 68,223,140,225, 0, - 28, 0,236,107,217,178, 37,115,231,206, 29, 26, 49,184, 43,125, 94,223,154, 78,155, 54,141,254,252,243,207,116,196,136, 17,212, -198,198,134, 65,190,191,212,161, 34,206,190,125,251, 58, 83, 74, 81,189,122,245,106,173, 26,212,253, 16,114,219,143,222,243,221, - 70,255,240, 25, 64,219, 54,105,144,110, 95,191, 83,176,177, 67,189,230,250,102, 54,183,183,183, 95, 76, 41,237, 65, 41,117,160, -148,194,205,205, 74,210,162,126,221,164,224, 91,126,244,254,209, 29,244, 15,159, 1,244,155,166, 13, 51,156, 27,120,189, 54,178, -173,223,166,170,217,210, 75, 45,111,227,250,233,118,117,219,191, 40,171,188,197, 57,107,181, 25,114, 49, 33, 41,133,254,253,247, -223,244,202,149, 43,244,254,253,251,212,247,212, 69,234,210,122,112,158,117,147,239, 59,124,110, 86,119, 0,230,222,222,222, 52, - 50, 50,146,246,236,217,147, 2, 48,175, 10, 39,128, 11, 49, 49, 49, 52, 44, 44,140, 46, 89,178,132, 2, 56, 60,117,234, 84, 69, -118,118, 54,237,218,181,107, 28, 0, 14, 74,244, 69,125,203, 89,219,213,105,125,255, 62, 29, 87,248, 76, 30,232,249,185,245,249, - 5,179,194, 27, 56, 13,156, 6, 78, 3,231, 63,158,243,127,249, 85,160, 67, 38, 22,251,219,162,240,179,114, 45, 90,119,243,173, - 1,123,155,216,145, 99,107, 55,108,159,187,115,239,225,249, 11,103,140, 55,233,232,209, 13,161,183, 14,225,236,165, 83, 50,165, - 74,189, 65,192,197,166,208,116, 90, 97, 28,138,203,175, 41,191, 20,235,145,216,178, 14,138, 98, 48,189,149, 2,148,210, 61,149, - 84,146,201, 0, 38, 18, 66, 54,121,121,121,173,153,208,161,205, 0,159,246, 93,160,213,106,225,235,235,139,247,239,223,159, 3, -176,148, 82,170,151,197, 45, 52, 52, 52,189, 81,221,154, 51, 45,141, 5,243,167,141,232,111,147,246,238, 21, 18,194,159, 3, 0, - 84, 42,133, 54,249, 77, 64,179,202,148,207,216,216,248,111, 27, 27,155, 8, 27, 27, 27,169, 78,149, 55,209,136,103,182,108,202, -176,126,182, 25, 49,175, 17,255, 50,223, 51,170, 82,202, 53,241,111,252,235, 87, 69, 73,215,172, 89, 83,100,194,199,164, 82,203, -171, 86,106, 63, 68,134, 55,215,135, 71,174, 82,175, 93,185,217,247,187,213,243,199,136,204,204,204, 16, 20,246, 22,203,126, 63, - 33, 83,168,181, 61,210, 66,206, 63,252, 66,170, 31, 90,173, 86,239,141, 14,101, 96, 97,179,102,205,234,173, 89,179,198,109,244, -232,209,248, 92, 75, 86,113,188,139, 78, 88,212,185,115,231,134,111, 35,130,188, 44,141, 5,199, 62,167, 62, 13, 48,192, 0, 3, - 12,248,127, 3,111, 74,233,190,194, 8,241, 5,174,196,231,250,184, 14,243,133, 71, 10,149, 3, 88, 85,219,142,236, 89,188,102, -243,114, 14,217, 50,134,165,244, 16,195,193,202,168,116,154,246,153, 19,175,220,187, 62, 97,190,251,126, 4, 15, 0,248, 60, 48, -159,193, 21, 9, 96, 32, 33,164,245,254,135, 79,126, 42,120,123, 53,165,180, 82,190, 92, 83, 30,194, 60, 26,214,118,234,216,162, -145, 17, 87,167, 64, 66,248, 59,100,202,148,184,249,242,125, 22,135,114, 14, 85,182, 92, 81, 81, 81,119, 1,160,113,221,154,225, - 29, 27,214,113,233,212,178,145,152, 79,212, 72,120, 21,132,108,133, 26, 55, 94,190,207, 6, 33, 85, 94, 80,253,165,202,251, 33, -228,194, 83,155,166,253,187, 18, 66,110, 45,241, 25, 46, 90,254,251,201, 47, 42,178, 0,200, 19, 19, 19, 51,228,114,185, 85, 82, - 82,146, 26, 85, 12, 18, 71, 41,125, 75, 8,105, 50,107,214,172, 85,243,230,205,155,255,235,175,191, 10,170,178, 38,171, 44, 72, - 19,223,159,239,212,232,203,181,191, 1, 6, 24, 96,128, 1,255,124, 20,174,211, 42,185, 94,171, 82,225, 29,162, 82,104, 26,128, -105,117,234,144, 57,239,222, 81,245,151, 42, 92,105,150,174,207, 20,111, 79, 1,244,169, 50, 1,135,228, 62,142,124,159,247,119, -228,251, 60,176,148,178,148,170, 56, 28,196,203, 52,154,181,111,162, 18,174,127, 70, 43,232,158,190,141, 83, 60,123, 23,175,164, - 44, 75, 89, 74,213,132,224,131, 86,203,174, 13,139,138,189,248,223, 80,222,180,144,243, 15,237, 27, 14,232,248,240,239,176, 57, - 50,153,102, 71,218,171,243,129, 95,176, 93,180,132,144,145,237,218,181, 27,171,211,233,246, 80, 74,181,159,193,165, 6,176,144, - 16,114, 46, 52, 52,244,116, 96, 96, 96,242,151, 16, 89, 95,181,253, 13, 48,192, 0, 3, 12,248, 71,162,202, 73,165,203,194,151, - 20, 89,255,141, 8,141,140,105,249, 53,120,195, 34, 99, 26,255, 47,148,247,195,171,115,207, 0, 12,251, 74,157,241, 6,128, 27, - 95, 82, 84, 19, 66, 92, 1,112,191,136,200,250,138,237,111,128, 1, 6, 24, 96,192, 63, 19,159,157,235,208, 0, 3,254,203,159, - 36, 40, 0,198, 80, 19, 6, 24, 96,128, 1, 6,252,135,230,161, 50, 45, 90, 4, 64,215, 50,190,116,171, 18, 74,174,107, 21, 10, -117,203,192,105,224, 52,112, 26, 56, 13,156, 6, 78, 3,231,255, 47,206,127, 34, 8, 33, 14,200,143, 86, 95, 20,181,190, 72,124, -125,229,237,142,134,173,175, 6, 78, 3,167,129,211,192,105,224, 52,112, 26, 56,255,233,225, 29, 38, 22,255, 91,252,197, 49, 24, -252, 12, 48,192, 0, 3, 12,248,138, 79,250,162,130, 68,242, 85,250,220, 0, 3,254,135,250,122,209,174,195,226,107,182,120, 85, - 32,170, 91, 96, 9,123,251, 21, 11,235,227,224,224, 48,177,105,211,166, 13, 4, 2, 1, 39, 55, 55,119,165,191,191,255,138,146, -231,117,106,196,127,198,229,192,185,216, 55, 1,194, 5, 56, 28,232, 40, 18,238, 5,203, 91, 25,154,254,191,186, 83,214, 48, 54, -179,249,139,112,184, 66, 29,163,129, 78,171, 1,240,175,116, 76, 44,203,188,103,212,202,238,101,125,223,161,249, 0, 23, 70, 71, -215, 3,236, 46, 2,206, 20, 10,118, 55,161,156, 41,148,131, 93,132,197,100,240,180, 27,192,240,231,241, 4,188,165, 73, 65,103, -226,255, 9,117,246,231,159,127,114, 63,231,251,131, 6, 13, 42, 53,129,168,147,147,211, 37,177, 88, 92,167,172,239,201,100,178, -228,164,164, 36,175,127,120,127,236, 4, 96, 59,128, 70, 37, 62,122, 13, 96, 38,165,244,246,231,254, 70,103, 66,120,118,192, 36, - 1,176, 0, 0, 52,192,111, 41,192,222,187, 95,104, 35,199,151,128,173,173,237, 61, 30,143,231, 38,147,201,100, 57, 57, 57,181, -205,204,204,162, 76, 76, 76, 76, 24,134,137, 76, 77, 77,237, 84,201, 58,157,138,130, 84, 90,132,144,249,148,210, 93,149,249,220, - 0, 3,254, 87,240, 89,187, 14, 9, 33,238, 0, 60, 11, 94,157, 90,183,110,109, 39,147,201, 64, 8, 73, 1,112, 15, 64, 0,128, - 0, 74,233,155, 47, 81, 88, 46,151,187,113,235,214,173,115,167, 79,159, 94,148, 12, 58, 36, 36,164,244,115, 57,112,190,227,119, -203,246,105,232, 27,180,238, 58,168, 64,104,113, 0, 89, 50,188,186,181,169,234, 96,107,106, 97, 97,177,146, 16, 50,152,195,225, - 84, 56,169,177, 44,171,163,148,158,145, 74,165,203, 41,165,185,149,249, 45,137,137,145,150,209,233, 74,253, 13, 30,151,171,203, -147, 41,203, 12,123, 97,101,101, 21,200,225,112,106, 21, 79,152, 93, 80,254, 82,255, 47,126,204, 48, 76, 66, 90, 90, 90, 43, 61, -234,194,136,195, 19,204, 36, 68,208, 13, 28,214, 29, 32, 32,224,188, 97,117,234,155, 44,163,217, 74, 41, 85,126,142,200,114,168, - 94,251,254,236,165,235,157,195,194, 95, 99,137,207, 8,252,186,253, 48, 22,207, 28,139,173,251, 78, 96,230,196,225,104,216,176, - 81,185, 28, 58, 74, 86, 46,155, 57,210,107,205,214,227,173,151,206, 28, 97,178,102,235,241,214, 75,103,141,144,172,217,118,188, -213,210, 89, 35, 37,171,183, 29,107,245,211,172,145,102,107,182, 29,215, 0, 24, 87,149,114,142,112,119,146, 17,134, 41,245,105, -155,242,120,170,227,111, 18, 77,254, 19, 55,245,232,209,163,155, 42, 20,138,160, 17,221, 90,172,111,238,238,148, 88,218, 57, 25, - 31, 18,157,162, 34,158, 47,226, 11,140, 91,246, 91,116, 56,164, 60, 62,145, 72, 84,235,245,235,215,110, 44,203, 66,167,211,129, - 97,152,162,191,106,181, 26,157, 58,117,250, 34, 27,103, 8, 33,125, 0,172,204,191, 89,177,142, 82,122,250, 51,184, 36, 60, 30, -111,182, 80, 40,244,100, 24,166, 1, 0,240,249,252,112,149, 74, 21,192, 48,204,102, 74,105, 94, 37, 41,183, 36, 38, 38, 54,148, - 72, 36,208,104, 52, 69, 9,232,185, 92,110,125, 23, 23,151,157, 0,220, 62,247,250,237,128, 73,237, 61, 60,182,142,154, 59,151, -171,184,119, 15, 91, 15, 30,220,130,156, 28, 0,216, 89,209,119, 69, 34,209,117, 14,135, 83,163, 50,191,199,178,236,123,149, 74, -213,189, 50,223,225,241,120,110, 73, 73, 73,182,142,142,142, 0, 0, 19, 19, 19,147,226,199,149,177,100, 1,216, 64, 41, 53, 6, - 0, 14,135,179,181,125,251,246,237, 8, 33, 12, 0,202,178, 44,135, 16, 50,156,101, 89, 94,193,249, 27, 8, 33, 7, 41,165, 42, -195,180,109,192,255,162, 53,171, 44,177,197, 43,231, 75, 87, 0,120,182,110,221,218,120,216,176, 97,240,244,244,132,155,155, 27, -140,140,140,242, 7,241,140, 12,187, 23, 47, 94, 12,185,119,239,222, 16, 63, 63, 63, 16, 66, 20, 0, 30, 80, 74, 75,189,169,187, -246,233, 56,221, 72, 34,218, 6, 0,105, 9, 25,201, 9,209,169,219,146,147,147, 55,208, 98,217,168, 9, 33,181, 71,141, 26, 53, -103,198,140, 25,184,116,233, 18, 78,156, 56, 1,149, 74,133,220,220, 92,248,251,251,151, 94, 80,121, 42,164,254,235, 1,147, 24, - 32, 46, 0, 16,219, 2, 38,118, 85,174, 44, 11, 11,139,149, 51,103,206,156,213,176, 97,195,162, 40,230, 90,173, 22, 12,195, 64, -171,213, 66, 42,149, 98,206,156, 57,133, 10, 22, 44,203,226,234,213,171,211, 39, 78,156, 8, 0,179, 75,227,108,215,202,229, 25, -135,112,156, 11,109, 53, 84,167, 75,120,244, 60,190, 21,163,211,113,149, 74, 77,169,153,202,141,140, 4,229,138, 60, 62,159,239, -252,234,175,191,108, 57, 66, 33,168, 78, 7,176, 44, 40,203, 2, 40,246,162,249,239, 81, 29, 11,170,213,129,101, 88, 48, 10, 21, -218, 76,157,170, 79,167,105,207, 23, 26,159, 24, 57, 97,174,125,219,111,190,225,215,172,238, 8, 70,199,226, 93, 76,130,125,208, -179,199, 29,206, 28,217, 57,133, 16, 50,156, 82, 90,165, 56, 91, 66,177,217,141, 29,187,247, 59, 63,125, 17,134,219,119,238,225, -150,127, 0, 0,224,250,157,124, 58, 14,135, 83, 81,249, 44,172,220,188,154, 78, 31,251,189,201,234, 77, 7, 68,211,199,126,207, -251,215,223,253,162,233, 99,251,241,214,108,222, 47,154, 62,182, 31,255,151,223,118, 52, 39,132, 88, 80, 74,165,101,241,149,213, - 70,132, 97, 68,199,162, 82,184, 0,144,182,103, 15,180,169,169,112, 92,190, 28, 0, 48,178,182,157,222,238, 14, 27, 27,155,103, -124, 62,223,185,162,243,180, 90,109,133, 34,120,244,232,209,205, 20, 10,197, 51,134, 97, 40,143,199, 91, 52,162,255,119, 23,122, -116,108,150, 81,252,156,144,144, 96,171,181,107,255,250,254,116, 80, 46, 29,210,210, 52,232,210,198,209,173,122,207, 59, 28, 92, -206,132,204, 81,169, 84,136,140,140, 68,241, 36,239,197,117,109, 21, 7, 31, 14,128,173, 86, 86, 86,109, 51, 50, 50, 70, 2, 88, -146,147,147,211,148,203,229,194,210,210,114, 9, 33,228,157,185,185,249,129,236,236,236,192, 2,171, 17,171, 39,111, 39, 51, 51, - 51,223,243,231,207, 91,180,104,209,130,147,158,158, 14, 87, 87, 87,100,102,102,182,185,119,239, 94,203,113,227,198,141, 35,132, -252, 72, 41,189, 87,137,226,214, 19,139,197,116,212,168, 81, 68,167,251,215,229,254,241,199, 31,232,222,152,169, 51,185,135,137, - 92,169,166,217,183, 35,205, 39, 11, 4,130, 7,177,177,177,217,149,173, 15, 1,176, 96,212,220,185, 92, 73,108, 44, 36,193,193, - 24,153,147,195,251, 53,223,186, 85,161,208,226,112, 56, 53,124, 79, 28,114, 19, 10,133, 96, 24,166, 72, 12, 22,142, 81, 90,173, - 22, 26,141, 6, 90,173, 22, 58,157, 14, 90,141, 22,235, 86,255, 86,229,177, 80, 44, 22,139, 29, 29, 29, 83,196, 98,177,248, 75, - 76, 68, 34,145,136,119,228,200,145,225, 66,161, 16, 0,160, 86,171,209,184,113, 99, 98,152,162, 13,248, 39,137,173,210,172, 92, -229, 61,165,254, 31,123,223, 29, 22,213,209,182,127,207,246, 93,150,222, 65, 4, 21, 68,105,130, 29,176, 96,141, 49,160,177,198, - 24, 91, 18, 19,223, 68,163,177, 36, 98,139, 93, 72,172, 49, 49, 81,147, 24,203,107,195, 46,182,216,130,137, 93, 17, 5, 84, 84, -164, 9, 8, 75, 93, 96,251,158, 51,191, 63, 40,174, 8,236, 98,242,254,190,247,251,178,207,117,237,181,231,236,153,243,236,156, -153, 57, 51,247,220,207, 51,207, 12,150,203,229, 96, 24, 6, 86, 86, 86,224,114,185,245, 25, 21, 12, 28, 56, 16,189,123,247,198, -187,239,190,139,212,212, 84,201,187,239,190, 59,176, 81,102, 96,118, 20, 90,250,186,212, 12, 38,172,219,229, 19,119, 98,127, 89, -126,192, 9,192,108,131,100, 31, 78,153, 50,133, 20, 23, 23, 99,244,232,209,151,212,106,245, 80, 74,169,188, 81, 70,131,197,179, -190,239,142, 3, 75,137,100,253,245,159,136, 70,165,164, 28, 14, 71, 89,107, 58,124,205,130, 26,237,238,238,142,189,123,247, 66, -163,121, 53, 92,152,181,181, 53, 82, 82, 82, 12, 25, 56,132,134,134,114, 9, 33,163, 27, 3, 90,132,112, 60, 46,223,204,116,174, - 61,143, 26, 24, 40, 8,235,226, 85,224,228, 96, 69, 1,144, 5, 11, 22,212, 1, 55, 0, 88,186,116,169, 41,249, 4,135,207,135, - 44, 33,225, 69, 71,204,227,128, 35, 32, 32,124,128,195,171,182,162,130, 2,148, 1, 88, 61,192,234, 0,177, 91, 75, 83,116,119, -107,225,233, 27,191,106,221, 15,182,106, 29,197,222,163,231,145,145,241, 20, 92, 14, 7,222, 62,190,120,163, 79, 47,126,231,174, - 97, 45,191, 89, 50,251, 56, 33,100, 48,165,244, 70,179, 11,154,165, 98, 31, 79, 71,252,252,203,109, 56,217, 89, 98,244,176,183, - 32, 17,139,240,245,119,191, 98,197,188,105,240,245,246,194,150, 13, 43, 27,189,221,198,198,102, 89,167, 14,126,222,191,238, 63, -141,136,222,225,188,237,251,207,160, 79,239, 30,188, 95,247,159, 70,159,136, 94,188,237,251, 79,163, 79,239,158,252,237,251, 79, - 35,180, 75, 7,159, 43,197,119,151, 1,152,214,248, 51,215,171,163, 55,170,235,200,151, 39,168, 27, 8, 50, 63,249, 4, 0,234, -128, 86,115,132,207,231,123,228,229,229, 57, 27, 75,103,140, 53,168, 97,178,110,233,245,122, 20, 22, 22,146,178,178, 50,106,107, -107, 59,236,244,150,249,135, 7,245, 12, 41, 1,128,164,164, 36,251,152,152, 85,195,246,221,146, 67,121,237,123,242,239, 99, 9, -236,184,161, 17,183,142,198, 78,234, 60,106,212,168,196,134,244,170,213,234,140,142, 29, 59,210,154,227, 22, 34,145, 72, 80,175, - 77,184,251,250,250,190,194, 90,155, 96, 82,252,246,234,213,171,211, 2, 2, 2,224,231,231,119,165,123,247,238,214, 82,169, 20, -167, 79,159,134,191,191,127,160,181,181,245,245,184,184, 56,254,220,185,115, 67,182,109,219, 6, 0,159,153,208, 62, 7,244,237, -219,119,111,124,124,188, 88, 32, 16, 64,169, 84, 34, 37, 37, 5, 54, 54, 54, 16, 10,133,120,251,237,183,185, 61,122,244,112,232, -211,167,207,193,154,201,128,201, 43,160, 84, 42, 21,157, 63,127, 62, 44, 44, 44, 96, 97, 97, 1,169, 84, 10,169, 84, 10, 75, 49, -200,230, 25,158,146,233, 91,203, 36, 51, 23,111,142,221,249,195,146,139,158,158,158, 95,101,103,103,151, 53,183, 45, 40, 47, 93, -130,101, 82, 18, 96,240,238,154, 42, 54, 82,123, 68, 71, 71, 27, 99,164, 32, 16, 8, 16, 30, 30,110, 84,159,131,131,195, 33, 30, -143,231, 82,111,112, 16, 71, 71, 71, 51,105,105,105, 82, 14,135, 35,101, 89, 22,209,209,209,140, 94,175, 23,187,184,184, 92, 97, - 89,182, 64, 38,147,141, 48,166,155, 82,170, 38,132,124,193,225,112,190, 21,137, 68,188, 86,173, 90,101, 45, 90,180,232,106, 13, -155, 9, 74, 41,167, 85,171, 86,221, 36, 18,137,151, 90,173,214, 3,248,194,204,102,153,165, 9,233, 92, 77, 10,215,137, 6,128, -176,150,192,175, 30,237,224, 88,239,119, 0, 40,170,153, 40,186, 52,114, 94, 12, 32, 21, 64,123, 0,206, 53,215,110, 2, 40,105, -110, 6,155,100,180, 8, 33,212, 32, 97,221,192, 98,101,101,133,155, 55,111,130, 16, 2, 43, 43, 43, 88, 91, 91,195,198,198, 6, -114,185, 28,169,169,169,120,240,224, 1, 50, 51, 51, 65, 8,129,183,183, 55,106, 95, 32, 3, 93,117, 29,220,238,181,241, 16, 91, -138, 64, 8,208,169, 95, 48,130,123, 7,161,235,141,244, 25,238,238,238, 91,243,242,242, 30, 17, 66,120, 65, 65, 65, 31,134,134, -134, 98,221,186,117, 80,171,213,235, 26, 2, 89,134, 58, 47,165,232,186,212, 12, 78,115,118,157,126, 98, 49,254, 77, 31, 69, 94, - 94,222,154,215, 40,156,151, 58,226,162,162, 34,147,247,226, 99, 89, 22,165,165,165, 77,234,172,207, 16,172,255,246,123,219,138, -242, 2, 44,255,122, 23,116, 58, 29,102,207,158, 13,150,101,235, 62,101,101,101, 38,229,147, 50,245, 72, 6, 78,245,135,112, 0, -194, 3, 60,199, 84,227,138,236,189,223,131, 80,128, 48, 0,234, 61, 87,125,157,132, 16, 49, 87, 32,217,183,228,235,141,182,137, - 15,158,225,232,249, 68,104,229,185,200, 79, 58, 12, 0,240, 14, 31,139,253,106, 46,186, 7,251,224,243, 5,223,216, 45,252,124, -194, 62, 66,136,159,161, 25,209,148,129,141, 82, 6,203,151, 45,195,214,141,235,240,205,186,141,144,151,151,129,207,119, 4, 0, -232,245, 12,152,122,207,246,202,179, 83,250,230,194, 57, 83,200,183, 63, 29, 68, 80, 91, 87, 28, 63,123, 5, 93, 2,189,112,234, -194, 13,132,118,104,141, 51, 9,183, 17, 26,220, 6, 9,215, 82, 48,123,234, 68,114,249,212,246, 55,155, 83, 71, 27, 54,124,111, - 91, 33, 47, 64,252,202, 29, 40,220,180, 9, 89,211,166,161, 91, 77,154, 27,132, 64,224,225, 1, 8,140,215, 81,125,185,127,255, - 62,212,106,117, 67,179,125,248,251,251, 27,173,119,165, 82,121, 91,175,215,211,130,130, 2, 82, 80, 80, 0,169, 84, 74, 82, 82, -146,153,192,192,160,225,244,193,129,159, 0, 32, 38,102,213,240,253,183,229, 80, 92,217, 8,229,213,239, 32,104,125,151,179,117, -233, 20,237,199,139,183,220, 54, 24,228, 94,202,103,126,126,254,224,218, 99,111,111,239, 7,105,105,105,237,107, 77,205, 53, 38, - 68,129, 94,175,247,173, 53, 39,234,245,122,168,213,106, 12, 24, 48,128,219,212,179,219,217,217,133,250,251,251, 35, 49, 49, 17, - 27, 55,110,180,239,219,183, 47, 30, 63,126, 12, 66, 8, 86,173, 90, 69, 2, 2, 2,248, 69, 69, 69, 24, 52,104, 16, 14, 29, 58, - 20,110,172, 60, 9, 33, 86, 82,169,116,219,241,227,199,197, 28, 14, 7, 21, 21, 21, 96, 89, 22, 61,122,244, 0,135,195, 65,114, -114, 50, 22, 44, 88,128, 67,135, 14,225,200,145, 35,146,206,157, 59,111, 35,132,248, 27,154,245,155,168, 35,170, 82,169,168, 72, - 36,130, 72, 36,130, 88, 44,134, 88, 44,134, 80, 40, 68,165, 10,248,120,125,150,154, 43,118,100, 3, 59,246,244,121,127,250, 42, -206,154, 69, 31, 92, 0,112,212,212, 54, 15, 84,251,100,125,251,235,175, 27,199,149,151,115, 0,224,103, 66, 88, 45,165,223,152, -242,190, 3, 64,165,170, 28, 94,222, 30, 56,184,239, 8, 70,142, 25,214, 32,200,226,243, 5, 16,240,249,176,182,151, 26,213, 41, - 16, 8, 92, 30, 60,120,224,192,231,243, 65, 41, 5,195, 48,208,106,181, 5, 11, 23, 46,116,138,140,140,180, 58,117,234, 20, 39, - 50, 50,146,181,179,179,171,186,113,227, 70,161, 94,175,119,232,213,171,151,201,109,158, 82,250, 67,199,142, 29, 59, 29, 62,124, -248,131,232,232,232, 91,115,230,204, 89,110,120,125,245,234,213,203, 78,158, 60,233, 53,124,248,240,157,119,238,220,249,161, 57, -125,200, 95,237,231,205, 58,255,251,116,158, 56,113,162,174, 35,142,140,140,172,207,118,186, 16, 66,226, 13,254, 63,170,246, 60, - 58, 58,122,126, 76, 76, 76, 10, 33, 36,222,240,247,218,116, 53,125, 71,124, 67,231, 53,247,218,207,155, 55, 47, 40, 54, 54,118, - 85, 88, 88,216,222, 43, 87,174, 60,109, 46,208, 50,234,163, 85, 11,174, 12, 1, 87, 61, 5,144,203,229,144,203,229,200,201,201, -193,230,205,155,107, 94,104, 62,120, 60, 30,120, 60, 94,157, 63, 67, 99,114,238,248, 31,223, 1,248,174,115,231,206,252,123, 87, -227, 78,125,185,117,122,255, 46, 3, 58,113,111,159,191, 55, 10,192, 10, 0,131, 39, 78,156,232, 8, 0, 59,118,236, 40, 2,112, -234,127, 2, 50, 83, 74,227, 30, 61,122,244,185,155,155, 91,157,143,138,161,249, 80,175,215, 67, 44, 22,163,214,151, 69,165, 82, - 97,243,230,205,122, 74,105, 92, 19, 58,145,150,114, 1,143, 82, 46, 86,223,199,178, 96,153, 23,247, 47, 89,178,196,112,137, 40, - 62,169, 97, 78,140,130,188,134,202,156,214,251,174,247,251, 43,224,236, 21,243,132, 96,250,168, 9,211,220, 88,194,195,177, 11, -119,192,231,243,193, 26,176,153,124,110,245,108, 57,229,113, 30,220, 93, 2, 49,116,236, 20,215,195, 59,191,159, 14,224,235,230, -150,181, 95,112, 24,102,124,254, 57,126,218,186, 21, 11, 22, 47,171, 67,233,122,134,129,222,104, 62, 57,156, 30, 93, 2, 80, 89, -252, 12, 92, 46, 23,225, 29,125,192,229,114,209,171, 75, 59,112,185, 92,244,236,218, 30, 60, 30, 15,125, 66, 3,208,182,109, 91, -240,120, 60,142,145,122, 71, 90,202,121, 60, 74,249,221, 0,244, 82, 80, 0,218,252,252, 87,210,235,242,243, 65, 61, 29,154,219, -182,240,225,135, 31,150,229,228,228,104,235, 95,107,217,178,165,224,210,165, 75,182,141,152,237,234, 68, 34,145,116,230,241,120, -183, 75, 74, 74, 88, 11, 11, 11, 14,203, 50,108, 96, 96, 16,247,244,150,249,135,107,211,204,155, 55,255,240, 59,157,173,135,239, -138,139,167,130, 86, 61, 9,225,139,244, 31, 45,222, 34,224, 11, 36, 38, 69,188,175, 53, 35, 62,124,248, 16,198,242, 99, 56, 49, -107, 72, 74, 75, 75, 39,250,251,251, 95,250,238,187,239,236, 9, 33,248,227,143, 63,192,229,114,235, 62,233,233,233,224,112, 56, -248,242,203, 47,181,114,185,124,178,177,188,241,120,188,207, 15, 30, 60,104, 35, 20, 10, 81, 81, 81, 81,247,222,112,185, 92, 60, -120,240, 0,107,214,172,193,196,137, 19,145,157,157, 13,119,119,119,204,158, 61,219, 50, 54, 54,246,115, 0,203, 76,120,244,187, - 26,141,166,139,133,133, 5,196, 98, 49,106, 1, 23, 0,252,150,194, 79, 86, 40, 20, 29, 28, 29, 29, 93,157, 18,226,143,133,247, - 29, 26,226,224,228, 22, 86, 11,180, 76,149, 39,192,214, 12,134, 89, 56,248,240, 97,231,203,135, 15,179,215,142, 31,127, 38,170, -168,216, 98,114, 27,210,113,144,149,254, 12,157, 59,119,198,237,219,183,209,185,115,103, 67,208, 4,161, 80, 8,129, 64, 0,129, - 64, 0, 71, 59,147, 92, 40, 40,135,195,193,229,203,151,193, 48, 12, 52, 26, 13, 52, 26, 13, 2, 2, 2, 74, 46, 94,188,104, 9, - 0,233,233,233,116,252,248,241,101,215,175, 95, 71,199,142, 77,239,167,238,234,234,122,137,203,229,182,170,247,174,218,141, 24, - 49, 2,165,165,165,111,141, 24, 49,162,103,205,111,185, 7, 14, 28, 24, 15, 0, 66,161, 16, 28, 14,135,129, 89,254,241, 82, 11, -174, 12, 1, 87, 3,125, 78, 84,253,115, 66, 72,124, 76, 76, 76, 84,253,223, 12, 65, 85, 67,199,134,247,198,198,198,174, 50,208, -173,124, 13,107,152,113, 31, 45, 66, 8, 53,214,105, 54, 37,198,128, 86,173,220,190,125, 91,215,162, 69,139,159, 30,221,201,236, -239, 19,236, 13,137, 84,244, 6, 33,228, 59,145, 72, 52,107,194,132, 9,184,118,237, 26,146,147,147,127,249,171,219,169,116,232, -208,225,140, 72, 36,242,106,196, 76,146,117,239,222,189, 65,141, 12, 12,139,107,124,206, 26,117,134, 55,244, 23, 51,116,134,111, -180, 97,176, 20, 58,173, 14, 85, 10,229,139, 65,188, 6,104, 85, 85, 85, 97,204,152, 49, 47, 49, 90,133,133,133,166, 84, 42,214, - 28, 61,138,179,113,113,120, 43, 36, 4,135,110,220, 64,236,132,247,224,231,213, 2,148, 33,160, 4,200,222,243, 61,138,229,149, -216,125,254, 50, 74, 42, 20, 24,215,171, 23,124,173, 29,155,214,203, 23, 12,236, 22, 26, 38, 56,119, 37, 21,124, 62, 15, 28,176, -160, 58, 5,220,253,251,128,203,225,192,198,165, 53, 4,124, 62,248,124, 30,210,115,138,224, 31,212, 85, 24, 47, 20, 15,124, 29, -160,213,210,171, 53, 24,134,193,196,137, 19,177,119,239, 94, 56,184,122,193,166,101, 16, 86,172,219,138,183, 6,244, 50,250,252, -181, 51,120, 30,143, 7, 46,151,251,202,119,237,177, 41,236, 36,101, 41,180,245,235,136,165, 0,165,240, 88,185, 18, 30, 43, 87, -226, 70,205,127, 6, 84, 85, 65,169, 84, 2,221, 3,155, 5,178, 52, 26, 13,114,114,114,180,249,249,249, 46, 13, 12, 80, 5, 26, -141,198, 40,176,217,190,125,251,221, 73,147, 38,117,177,183,183,191,117, 55, 41, 73, 23, 28, 18,194, 63,181,121,254,145, 90,179, - 33, 0,132,132,132,148,204,159, 63,255,200,248,209, 81,195,126,136,126,151,249,116,217, 78,158, 72, 34,233, 18, 53,167,105,135, -120,131,247, 35, 35, 56, 56,152,154,146, 86,161, 80, 60,111,162,142,134, 0, 88,218,169, 83, 39,235,190,125,251,226,210,165, 75, - 24, 57,114,164, 90,171,213, 62,170,233, 84,219,237,222,189, 91,152,154,154, 10, 39, 39, 39,126, 86, 86,214, 54, 66, 72,147, 14, -242, 66,161,176, 79,215,174, 93, 57,106,181,250, 21,144, 21, 27, 27,139,177, 99,199,162, 93,187,118, 96, 89, 22,149,149,149,232, -219,183, 47,127,227,198,141,125, 76, 4, 90, 51,252,252,252,214,160,122,213,161, 97, 95,120, 31,192, 23, 53,108,247,243,168,145, - 19, 83,122, 13, 24,209,165, 85,219, 32, 55, 99, 10, 93, 92, 92,230,113, 56,156,119, 88,150,229,202,229,242, 28, 13, 33,109, 3, -188,188, 92,122, 12, 27,134,114, 62,159,251,237,249,243,156,130,138, 10, 75, 0, 38,153, 32, 85,186, 42,120,121, 87,187,250,141, - 28, 51, 12,183,111,223,198,168,119,135, 67, 32, 16,128,199,227, 87,191,155,130,106, 70,203,214,209,218,164,182,169,211,233,234, -250,240, 90, 63, 47,173, 86,139, 90,215, 44, 11, 11,139,186,107,106,181,186,209, 9,121,141,248,238, 95,182,200, 89, 98,109, 3, - 70,167, 67,224,176, 81,117,109,250,250,207, 63, 72,192,178,146,178,172, 12,124, 22,119,156, 15,179,152,165, 17, 86,171, 1, 54, -203,176, 95,137,175, 15,182, 94, 87, 8, 33,241,209,209,209,243, 1,208,232,232,232,249,181,231, 49, 49, 49, 74, 0,185,175, 3, -182, 26, 98,185,120,127, 7,200,170, 53, 47, 52, 37,253,250,245,251,204,202,202,106, 35, 0,116,233,210, 5, 57,215,114,145,115, - 45, 23,254,237, 3,123,116, 10,233, 82, 62,118,236, 88, 56, 56, 56, 96,206,156, 57, 20,192, 47,205,253,255,244,180, 20, 75, 0, -212,221,221,125, 14, 0,184,187,187,135,220,184,113,195,233,230,205,155,232,218,181,235, 11,234, 94,171, 69,207,158, 61,155, 26, - 16, 43, 80,237,107, 53,243,239, 99,201, 88,104,181, 90, 40, 20, 74,104, 52, 90,232,117, 44,244,122, 61, 58, 7, 90, 97,231,214, -232,234,223,244,181,236, 89, 53,107,230,225,106,133,206, 29, 92,117, 28, 14, 81,222, 76,202,111,176,199,212,104, 52,184,155,149, -133,164,204, 76, 0,192,208,152,166, 29, 95,119,158,191,132,128,128, 0, 99,185,245,241,112,119, 69,222,217,187,213,157,183, 50, - 7, 55,255,220, 15, 43, 43, 75, 0, 64, 96,196, 56, 8, 4,213, 64,171, 74,169,133, 99,251,150, 32,148, 54, 26, 22, 64,106,239, -118,134, 39, 16,123, 81,134, 5,165, 44, 40,203,128, 82, 22, 34, 43, 7,139,207, 62,249, 0, 44,203,160, 91,183,110, 32, 92, 46, - 24,157, 26,163,135, 12, 68,105,121, 5, 28,108, 77, 27, 36, 4, 2, 1, 34, 34, 34, 36,141, 93,127,252,248,177,210, 16,152, 53, - 93, 71, 58, 84, 85, 41,161, 86,171,161,213,232,161,213,233,193,180, 17, 96,249,194,247,160,215,234,161,120, 55, 12, 90,157, 30, -236,231,195,161,213,232,144,109,193,225,132, 4, 56,233, 56, 32,202,196,212, 66,107, 99, 64,171, 22, 28, 52, 38, 13,249, 4, 54, - 2,182,146, 38, 77,154,212, 57, 56, 36,228,246, 59, 3, 66,214,222, 75, 78,201,187,151,156,242, 74, 58,175,118, 33, 25,159,198, -238,157,205, 23, 72, 58,155, 10,178,128,151,205,136,127, 81,230, 87, 84, 84, 4, 91, 90, 90, 34, 45, 45, 13, 92, 46, 23,132,144, -199,148,210, 96, 0,152, 50,101,202, 19, 30,143,231,205,229,114,177,105,211, 38,194,227,241, 58,132,133,133,205, 7,176,191,137, - 9,157,191,149,149,213, 75,108,150, 64, 32, 64,116,116, 52,198,143, 31, 95, 7,178, 4, 2, 1,182,111,223,142, 46, 93,186, 64, -163,209,248,155, 8,134,111, 2,232,101, 2,227, 71,106,192,185, 81, 48,170,215,235, 39, 21,191,243, 78, 91, 36, 36,160,135,183, -119, 64,231,206,157,161,213,190, 32, 52,189,189,189, 91, 86, 84, 84, 60, 39,132,252, 27,192, 15,148,210, 59, 77,130, 34, 21,139, -172,244,103,181,147, 86,116,235,214,173,142,193, 50,100,179, 4, 2, 1, 36, 66,203,102, 1, 45,150,173,238,151, 42, 42, 42, 56, - 9, 9, 9,142,126,126,126, 4, 0,252,252,252,200,157, 59,119,236, 45, 44, 44,138,124,124,124,140, 78,128, 37,214, 54,216, 62, -105, 12, 0,224,171, 1,111,214, 77,140, 78, 47,157, 15, 62,159,143,254,115,230,191,210,238, 89,150,229,194, 44,102,144,101, 4, -100, 53,196,104,253,181,177,249, 5,163, 21, 19, 19,147, 18, 19, 19,243, 10, 59,214, 76,125,198, 25, 45, 83, 76, 1,198, 94,214, -198,100,221,186,117,232,208,161, 67,147, 3,209,198,141, 27,177,107,215,174,117,148,210,244,230,254,127, 84,255, 78,129, 88,127, - 56,197,187, 93, 32, 1,128,101,159, 15,225, 84, 85, 85,225,242,229,203,176,177,177,193,227,199,166,133,253, 34,132, 88,217,216, -216, 44,229,112, 56,163,185,245, 87, 0, 52, 12, 48, 25,150,101,227,202,203,203, 27, 13,239, 64, 41,160,213,233, 81,165, 80, 65, -163,209,224,243, 47,191, 55,154,143, 24,128,104, 53, 21,188,136,222, 97,146,198, 24,157,110, 29,250, 96,234, 4,203, 87, 6,111, - 46, 7,224,112,128,142,221,170, 25,151, 59, 55, 82,192,178, 0,195, 2,142,206,118,248,101,207,218, 38,139, 64,207,176, 53,179, - 99, 6,149,106, 6,254,161, 81,120,118, 63,161,142, 65, 18, 10,170, 77,198, 2, 62, 31, 44, 37,213, 81, 31, 26, 3, 66, 66,137, - 87,105,126,186,239,214,248,123,248, 56,170, 3, 14,156,187,139, 81, 3,130,113,241,122, 42,250,118, 15, 64,202,163, 76, 4,250, -182,194,166,109,113,160, 20, 21, 63,174, 95,241,252,197,128,166,207, 50,133,209,186,118,237,154,178, 62,139,101,248, 77,141,143, -135,160,244, 5,163,165, 84,169, 49,103,158, 73,225,124,170,235,168, 87,168,196,148,196, 77, 49, 86,166, 0,177,250,204, 22,140, -132,103,105, 3,160, 11, 48,247,127,178,227,100, 24, 6, 39, 78,156,168,171,143,134,234,209,176,238, 76, 0, 57,200,202,202, 66, - 74, 74, 10, 66, 67, 67, 81, 94, 94, 14, 62,135,131,217,247,238, 33, 96,194, 4,104, 4, 2,176, 44, 11,161, 80,136, 41, 83,166, -152, 92,158,205,236, 77,107,252,220, 24,106,164, 47, 89, 27, 21, 21,213, 54,173,170, 10, 41, 15, 30, 96,192,146, 37, 0,128,147, - 39, 79,190,212, 38,102,205,154, 37, 76, 77, 77,253,240,214,173, 91, 31, 18, 66,214, 81, 74,103, 55,218,207, 82,117,157,143,214, - 59,239,141, 68, 91,191, 54,216,245,235,158,186,235,179,190,152, 1, 62, 95, 0,190,128, 15, 91, 27, 91,147,158, 70,167,211,213, -129, 86,133, 66,193, 57,121,242,164,199,192,129, 3, 5, 51,102,204, 32, 0,176,107,215, 46,206,119,223,125, 39, 61,123,246,172, -160, 69,139, 22,249, 70,193,165, 86,251, 74, 29, 19, 66,192,231,243, 33, 16, 10, 0,150, 5, 33, 68,186,122,245,234,101, 41, 41, - 41, 93,253,252,252,160, 86,171, 39, 16, 66, 18,205,113,180,204, 82,107, 54,108, 12,112, 53,228,107, 85,195, 74, 53, 38, 50, 67, -191,173,198,128,154,161,207, 22, 0,117,243,187, 5, 19,125,180, 26, 18, 46,151,107,148,173,226,112, 56, 70, 77,135,179,102,205, -130,149,149, 85, 99, 3, 16,189,119,239, 94,106,126,126,254, 86, 74,233,247,175, 83, 57,241,231, 19, 83,150,206, 28, 94,129, 26, -219,170,173,173,109, 81,191,126,253, 42, 1,104,247,239,127,121,130,172, 86,171, 27, 29,192,109,108,108,150,254,252,243,207,211, -135, 13, 27,198,169, 31, 98,192,208,188, 87,251,209,233,116,216,191,127,255,244,185,115,231,162, 49, 22,172,118, 16, 87, 84, 41, -161,172,113,132,126,146,124,192,212,218,107,244,146,165,173, 27, 60,218, 4, 55, 58,152,112, 4,213, 62, 68, 46,158, 47, 6, 48, - 43, 43, 49,152, 38,116, 18,194, 73,207,204,206,107,209,210,213, 30, 79,114,100,112,105,213, 1,165,185, 47,202,129,199,227,130, - 95, 99, 58,180,181,150, 66, 86, 88, 8, 14,135,219, 36, 48, 94,177, 59, 17,215,147, 51,113,240,220, 29,104, 85, 85, 88,191,227, - 52,180,234, 74,104, 85, 85,208,170,170,191, 87,205,253, 8,132,224,185, 86, 85,217,174, 57,245,206,227,241,208,189,123,247, 70, -129, 78,110,110,174,137,140, 22,173, 99,180,148,170,102,214,145,105, 47, 97,147,140, 85,237,245,215, 5, 6,181, 33, 31, 36, 18, - 73,151,237,219, 27, 15,227,208,144,184,185,185,157,178,180,180,108,109,106,250,102, 4, 47, 93,101,107,107,187,212,207,207,207, -127,253,250,245,124, 46,151,139,254,253,251,183,251,232,163,143,178, 0,160, 67,135, 14,238,181,125,204,167,159,126, 74,175, 93, -187,150, 92, 61,199,104, 92,132, 66,225, 3, 27, 27,155, 46,125,251,246, 69,121,121, 57,114,114,114, 32,149, 74, 17,176,118, 45, -238,125,250, 41, 66, 54,111, 6,167, 95, 63, 16, 66, 32, 20, 10,113,239,222, 61, 72, 36,146, 7, 77,128,161,238, 0,190, 1,208, - 3, 47,204,133, 20,192,101, 0, 95, 82, 74,175, 55,208,223,113, 0,128, 97, 89, 99,149,245,222,156, 57,115, 80,198,231, 3,145, -145, 16,164,167, 67,171,213, 34, 52, 52,180,142,101, 15, 13, 13, 5,143,199, 67,112,112, 48,220,221,221,177,105,211,166,247,240, -242, 74,236,151, 68, 85,169, 69, 86,250, 51,132,133,133,213, 49, 87,145,145,145,117,140, 22,159,207,175, 99,182, 8, 99, 28,184, - 18, 66,168,225, 36,153, 97, 24,194,227,241,120, 51,103,206, 36, 35, 71,142,164, 26,141,134, 21, 10,133,156,131, 7, 15,146,139, - 23, 47,242,170,170,170,140, 78,196,131,134,143,198, 87, 3,171, 73,209, 21,173,157,192, 23,240, 33, 20, 8, 48,231,193,179,186, -122,177,222,190, 87, 24, 27, 27, 59,202,207,207,175,218, 12, 15,240,204,113,180,204, 98,132,205,146,213, 3, 73, 26,131,115, 25, - 0, 82,115, 46, 51, 0, 84, 50, 84,175, 32,236, 90, 47,109,237,117, 77,189,239,218,235, 73,205,205,187,193, 94,135,175,128,175, -166,102,196,143,174, 94,189,234,219,185,115,103,100,103,103,191,178, 18,174,118,224,146, 74,165,144, 72, 36,184,114,229, 10, 0, - 60,106, 76,217,133, 11, 23,190, 67,117,212,101, 0,128,187,187,123, 88,223,119,250, 92,233,246,102, 87,236,142,217, 83,158,159, -159, 31, 92, 27, 67,135, 16, 66,220,221,221,199,243,133,188, 49,222, 65,158, 17, 96,217,111,206, 29,251,115, 73, 83, 15,233,221, - 46,176, 18,128,210, 96,213,225,154,215,169,104, 14,135, 51,122,216,176, 97,156,212,212, 84,140, 25, 51, 6,187,118,237,106, 52, -237,248,241,227,177,119,239, 94, 12, 27, 54,140, 51,111,222,188,209,198,128, 86, 53, 91,162,249,219, 26,101,218,227, 36,236,220, -251,115,163, 62, 72,206,206,213,254, 88,133,133, 69,117,191,117,237,220,180,101,132,213,107,206, 38,222,186, 17, 22,222,187,191, - 32,167,160, 12,172, 94, 13, 85,197,139,251, 21,101, 5,160,122, 21, 4, 22,246,112,117,180,193,237,171,191,105,180, 26,213,217, -166,116, 78, 31, 22,136, 79,135,248, 3,148,197,240,217,191, 32,254,251,207,234,102,208, 61, 71,206,192,249,253,223,154,236,227, - 87, 95,248,124, 62,238,221,187,167,108,140,205,226,114,185, 70, 99,114,189, 96, 29,117, 80, 40,148, 80, 40, 85,127, 91, 29, 17, - 66,156, 92, 92, 92,126,180,183,183, 23, 55, 4,164, 8, 33, 78, 78, 78, 78, 63, 58, 56, 56,136, 77, 53, 29, 54, 6,178,106,226, -106,221,154, 52,105, 82,179,192,150, 72, 36,106,253,232,209,163,186, 96,165, 77,125,107, 52, 26,244,237,219,215,164,224,165,148, -210,227,132,144,167,110,110,110,227,242, 19, 73, 0, 0, 32, 0, 73, 68, 65, 84,151, 3, 2, 2,108,158, 60,121,130, 61,123,246, - 8,248,124,190,103,109,255, 81, 81, 81, 1, 46,151,139,194,194, 66, 29,128, 15,140,153,206,212,106,117, 66, 66, 66, 66,199, 33, - 67,134,112, 31, 60,120, 0, 46,151, 91,157,175,176, 48,132,108,222,140,228,153, 51, 17,145,153, 9,149, 86, 11,177, 88,140, 51, -103,206,104, 21, 10, 69, 66, 99,250, 36, 18,201,214,140,140,140, 64,177, 88, 12,173, 86, 11,150,101,193,225,112, 8,143,199,235, -105,107,107,187, 17, 64,215,151,223, 41,103,231, 41,179,190,110,207,232,245, 76,126,246, 19,153,177, 50, 40, 46, 46,198,241,227, -199, 17, 26, 26,138,136,136, 8,228,230,230, 34, 61, 61, 29,111,189,245, 86, 93,154,164,164, 36, 36, 38, 38,194,199,199,199, 56, -163,199,209,193,167,125,107, 8, 4,130,106,134,136, 47,168,153,248,240,235,152, 44, 1, 95, 0, 62,143, 15,177, 68,108, 50,163, - 69, 8, 1,135,195, 1, 33, 4, 18,137,164,118,146,205,122,120,120,228,151,148,148,184, 1,224, 74, 36, 18, 48, 12, 99,210,164, -165,118,140,168, 5, 89, 2,161,160,142,217, 2,128,178,178, 50,213,176, 97,195,254,173, 86,171,223,199,107,236, 80, 98,150,127, -164,220,252, 31,186,215,100,156, 72, 41,221,218,144, 83,124, 83, 13,252,173,240,240,240,205, 99,199,142,237,191, 97,195, 6, 88, - 90, 90, 34, 63, 63,191,110, 64, 20, 10,133,104,217,178, 37, 74, 74, 74,176,101,203, 22, 60,123,246,236, 2,128, 41,166,230, 40, - 63, 63,255,218,227, 59,143,138,251,142, 10,119, 8, 12,111,111,155,243,232, 89, 40,128, 43, 53, 32,235,151,177,179,222,122,191, -239,136,110, 16, 8,249,200,121,252,252,255, 91, 77,114,185, 92, 46, 33, 4, 99,198,140, 49, 41,253,187,239,190,139,132,132, 4, - 52,101,102,100,107, 25, 45,133, 10, 85,202,191,111,178, 54,245,179,241,152,250,217,248, 58, 48, 97,138,233,165, 26,228,238,107, - 2,104,105, 55,196,239,219,242,113,167,110, 97, 94, 93, 2, 91,227,250,173, 59,216,189,249, 5,201,176,237,187,101,248,122,219, - 5,180,116,177,131, 86, 93,133, 83, 7,126,122,174, 85, 43, 54,188, 38, 41, 87, 13,110, 9,129,137,113, 42, 95, 98, 81,107,129, - 86, 80, 80, 80,163,140, 86, 73, 73,137,210,216,192, 80, 87, 71, 26, 29, 42,171,148, 80, 42,254, 30,160, 69, 8, 9,233,217,179, -231,217,184,184, 56, 7,103,103,103,228,229,229,189, 4,180, 8, 33, 33, 61,122,244, 56, 27, 23, 23,231,224,226,226,130,156,156, - 28,147,195,138, 52, 0,178, 32,147,201, 72,105,105, 41,107,103,103,215, 44,176,197,225,112,160, 86,171,113,255,254,125, 83,255, -214,228, 21, 98, 54, 54, 54,219,247,238,221,107, 83, 84, 84, 4, 46,151,139,251,247,239,191,180,234,176,246,243,203, 47,191, 8, -134, 15, 31,254, 51,128, 38,151,181,233,245,250,117,227,199,143,255, 48, 55, 55,215,206,217,217, 25,249,249,249, 16, 10,133,160, -148,130,244,237,139, 94, 79,159, 66,203, 48,144, 72, 36, 72, 75, 75,195,214,173, 91,171,212,106,245,186, 70,234, 71,104, 97, 97, -225, 43, 16, 8, 48,110,220,184,151,174,237,216,177, 3, 67,187,112,187,124, 60, 80, 84,169,135, 88, 93, 32, 25,124,138,203,229, -146, 41,115,190,105,215,189,119,100,208,195,228,235, 79,100, 5,207, 46, 27,121,124,157, 70,163,129,159,159, 31,110,222,188,137, -115,231,206,161, 95,191,126,136,136,136,192,221,187,119,241,219,111,191, 33, 49, 49, 17,132, 16, 56, 56, 56,212,186, 95, 52,233, -131,161, 81,232, 81,152, 87,252, 10,123, 85,255, 92, 32, 16, 64,173,212,154, 84, 71, 15, 30, 60,192,205,155, 55,235, 66,203,112, -185, 92,253,132, 9, 19, 64, 41,165, 25, 25, 25,176,178,178,162,147, 38, 77, 98,120, 60,158, 62, 55, 55,215,212,182, 95,205, 94, -213,128, 44,158,128,255, 18, 64, 99, 89,182, 34, 41, 41,233, 99, 66,200, 93, 66,200,234,154,159,205,113,180,204,242,191, 89, 78, - 24,238,117,104, 18,163, 69, 41,125, 10, 96, 0, 33,228,189, 35, 71,142,172,219,184,113,163, 83, 84, 84, 20, 74, 75, 75,225,229, -229, 5, 55, 55, 55,196,199,199,227,228,201,147, 69, 12,195,204,166,148,238,106,224,101, 27,208, 88,172, 13, 74, 41,117,119,119, -143, 83, 87, 86,126,218, 57,194, 31, 23,246,255, 17,227,230,230, 54,165, 69,139, 22,159, 79,154,255,246,251,125,134,117, 69, 90, - 98, 6,174,253,118, 15, 5,217, 69,152,212,235,203, 38,117,214,119,134,183,181,181,253,208,194,194, 66, 8, 64,219,192,172,248, -165, 85,135,134, 58, 25,134, 97, 52, 26, 13,246,237,219,103, 18,216,218,179,103, 15, 84, 42, 21,152,122,246, 85, 67,157,148,165, -132,199, 23,193,189,165, 31,180,218, 42,176,236,235,177, 55,134, 58,107,103,160, 79,132, 66, 56, 23, 21,225,250,245,235,166, 82, -179, 77,214, 17,165, 84, 69, 8, 25,247,237,202, 57,241,211,162,191,177,237, 23,222, 17, 95,173,221, 1,173,118, 27, 56, 92, 14, - 36, 34, 1, 58,119,235, 1, 46,212,248, 49,246,139, 50,133,188,116, 92,253,173,120, 94,209,217,148,133,133, 2, 12,203,226,220, -165, 27, 38, 63,123,221,104,207, 48,224,241,120,120,252,248,177,178,161,213,134, 92,110,181,153,179,118,166,222,148, 78,202,178, -132, 47, 16,163,165, 87, 0, 52,234,202,191,165,142,156,157,157,191, 56,124,248,176, 67,109,168,132,187,119,239,130, 16,114,223, -128, 29,249,226,240,225,195, 14, 74,165, 18,201,201,201,181, 91, 77,221,111,206,123, 84,203,100,201,100, 50,146,159,159, 15, 11, - 11, 11,206,221,187,119,213,193,193,193,183,208,244,206, 15,117, 58, 85, 42, 85,102, 99,254,147, 42,149,170,133, 88, 44,230,215, -187,215,221,215,215, 55,173,190, 9,177,161,124,150,151,151, 95,159, 59,119,110,231, 55,223,124, 19, 95,124,241, 69,137,157,157, -157,213,143, 63,254,200,227,114,185,100,218,180,105, 76, 97, 97, 97,229, 79, 63,253,100,115,228,200, 17,148,149,149, 93, 49,246, -236,148,210, 10, 66,200,199,225,225,225, 59, 78,159, 62,109,225,235,235, 11,185, 92, 14, 74, 41,182,111,223,142,105,211,166, 65, - 44, 22, 35, 45, 45, 13, 67,135, 14, 85, 40, 20,138,143,235,251, 78, 26,232, 36,132, 16,202,178, 44, 22, 45, 90, 84, 23,156,180, - 54, 88,169,149,132, 96,235,172, 54,210, 25, 63,149, 75,223,251,234,167, 9, 0,192,232,245,204,195,228,235, 79,182,127,255,213, - 69,129, 64,112,201, 72, 29, 45,152, 49, 99,198,143,145,145,145, 18, 75, 75, 75,148,148,148,224,242,229,203,184,122,245, 42,174, - 93,187, 6,141, 70, 3, 7, 7, 7,216,217,217, 33, 63, 63, 31, 15, 30, 60, 80, 2, 88,208,148, 78,161, 5, 31,222,237,106, 87, -254, 86, 51, 88,124,131,213,134,134,236,150,128,207, 55,233, 61,234,221,187, 55,186,119,239, 94, 11,128,152,172,172,172,124,181, - 90, 77, 12, 64,127,110, 45, 32,247,244,244,212,239,218,181,139, 54,165,243,218,214, 77, 56,189,124, 1,132, 2, 1,102,223,207, -169, 3, 93, 59,250,117, 2, 95, 40,128,255,144,145,134,227,192, 15,132,144,109, 53,199,106, 83,218,252, 95,152,248,152,117,254, -151,235,252,223, 44,148,210,124, 0,205,219,130,199,224,230,221,132,144, 83, 31,125,244, 81,108, 72, 72,200, 71,235,215,175, 39, - 2,129, 0, 75,150, 44,161,121,121,121,191,214,204, 66, 74, 95, 51, 99,191,254,126,232,202, 39, 19,163,135,145, 89, 27, 38,245, -188,117, 62,249, 65,135,112, 95,116, 8,247,197,173, 11,169,248,126,254,158, 93,140,142, 89,148,159,159,159,109, 68,149,122, 64, -143,246,245,157,225, 29, 18, 46,158,119,104,238,170, 67,150,101,227,246,236,217, 51,125,196,136, 17,156, 27, 55,110,188,226,147, - 85,187,237, 14,203,178, 56,123,246, 44,180, 90, 45,126,253,245, 87,150,101,217,198,227,104,129, 30,253,118, 67,236,196, 95,119, - 30, 21, 10, 5, 4, 87, 47, 29, 68,121,105,211, 44,157, 64,192,199, 47,219, 15,105, 5, 2,254,195,134,174,107,181,218,156,243, -231,207,187, 12, 98, 24, 62,135,195,121, 5, 64, 53, 38,113,113,113, 58,150,101,179,140,212,203, 21, 66,248, 67, 86,124,241,193, -158,200,119, 62,114, 9, 15,239,201,119,116,118, 1, 33, 4,133, 5,133, 72, 75,190,161, 59,117,240,231,130, 42, 69,133, 73, 91, -240,124,176,230,247, 58,159, 44, 0,136,154,182,177,206, 63, 11, 0,134, 76,154,139,190,161,129, 32,166, 80, 79, 47, 64, 22,171, -215,235, 33,149, 74,161,215,235, 27, 12,241, 96, 99, 99, 35, 81,169, 84,202,154, 64,140, 77, 82, 69, 20,248,219,235,136, 97, 24, -255,210,210, 82, 84, 85, 85,225,234,213,171,116,229,202,149, 50,153, 76, 86,231,180,169,211,233,252, 75, 74, 74, 80, 89, 89,137, - 43, 87,174,208,216,216, 88, 89,113,113,241,252,230,188, 67, 18,137,164, 11,143,199,187, 85, 90, 90,202, 90, 88, 88,112,116, 58, -157, 46, 56, 56, 88, 36,145, 72, 76,222, 80, 61, 47, 47,239,205,198,174,249,248,248, 60,122,244,232, 81, 91,134, 97, 12,247, 64, - 20,168, 84, 42,223,240,240,112, 83, 76, 62, 51,182,109,219,134, 67,135, 14,117,147,203,229,227,179,178,178,118, 0,232,198,227, -241,112,231,206,157,251, 42,149,106,236,136, 17, 35,182,151,150,150, 94, 7, 48,195,196,126,227, 52, 33,100,156,191,191,255,182, -165, 75,151, 90, 70, 68, 68,240,220,221,221,209,181,107, 87,164,165,165,225,196,137, 19,186, 31,126,248,161, 74,161, 80,124, 64, - 41, 61,219,116,181,131,232,245,122, 8,133,194,186,143, 72, 36,130, 64, 32, 64,133,146, 98,242,218,116,165, 30, 18,229,186, 37, - 31,159,160, 0,121,158,147, 94, 84,248, 60,231, 58, 33,228, 82, 94, 94, 94,121, 35,101, 38, 84,169, 84, 29,221,220,220,184,132, -144, 13, 90,173,118,210,103,159,125,230,182,106,213, 42,180,111,223, 30, 69, 69, 69,144, 74,165,240,245,245,133, 76, 38,195,141, - 27, 55, 24,133, 66,177, 25,192, 50, 74,105,147,230,200,178, 34, 57, 60, 92, 61, 95, 98, 62, 41,165,160, 12,160, 83, 51, 96,180, - 20, 26,162, 3,159,175,131, 64, 32, 48,101,176,164, 44,203,162,212,205, 13,108,114, 50,174, 93,187, 6, 74,105,163,172,154,159, -159,159, 9, 21,196, 66, 40, 18,190,100, 46, 36,132, 64, 32, 20,130, 47, 20,188,178,114,198,204, 98,153,229,255,186,152,234,107, - 81, 6, 96, 10, 33,100, 71,159, 62,125,226, 41,165,124, 84,219, 35,255,248, 43,127,158,159,159,127,219,221,221,125,158,139,135, - 93,236,224,241, 61,209,190,163, 23, 24, 61,131,203, 39,239,224,215, 85, 71,246,230,230,228, 78, 50,101,239, 51,150,101, 47,246, -232,210,158, 3,131, 88,221,238,238,238,236,235,172, 58, 44, 47, 47, 95, 60,123,246,108,124,241,197, 23,205, 94,117,216, 88,154, -187,247, 11,167,132,248, 59,121, 12, 25,220,107, 16, 8,135,106, 52,234, 38, 58, 62,212, 69, 46, 21, 8,248, 15,111, 36,229, 5, - 55,148, 78, 38,147, 13,122,255,253,247,207,242,120,188,214,205, 41,115,150,101,179, 10, 10, 10,250, 27,175,115,221,101, 66,136, -239,241,189, 91,102,158, 62,180,109, 16,203, 50, 62, 4, 0,151, 39,120,162,211,106,207,168,149,242,245,166,110, 42,189,122, 74, - 24,102,124,251, 27, 54,125, 49, 4,159,197,238,199,207,139, 38, 99,222,218, 61,248,230,139, 25, 88,185,241,223,248,106,198, 56, -140,122,239,125,150, 18,206,159,166, 62, 7,151,203, 61,189,101,203,150,137,147, 39, 79,174, 91,180, 64, 41,125,169, 99,215,233, -116, 74,150,101,177,121,243,102, 22,192,233,166,244,189, 92, 71,132, 54,229, 47,101,106, 29,201,229,242, 15,194,194,194,182, 3, - 16, 81, 74, 31,151,150,150,254,139, 82, 90,183, 53, 84,101,101,229, 7,225,225,225,219, 41,165, 34, 66,200, 43,215, 77,145,154, - 80, 15, 93,236,236,236,110,213, 48, 89,162,215,113,136,111,170,168,155, 48, 43, 50, 38,244, 29, 44, 12,182,213, 33,132,172,234, -214,173,155,225,166,210,247, 1,116,105,110,166, 40,165,103, 9, 33,129,139, 22, 45,154, 41, 22,139,251, 42, 20,138,118, 0, 32, -149, 74,211,212,106,245, 69,165, 82,185,190,166,223,106, 74,135,198,194,194, 34, 77,175,215, 7, 57, 57, 57, 85,175,168,173, 1, - 91, 0,112,236, 22,115,139, 82,125,215,230,230,237,228,201,147,173,236,236,236,222, 32,132,140,162,148,250, 85, 84, 84,168, 23, - 45, 90,116, 37, 46, 46,174,188,117,235,214,131, 35, 35, 35,137,189,189, 61,110,222,188, 73,139,139,139, 15, 2,152,111,202, 74, -107,150,101,179, 86,175, 94,141,230,190,239, 77, 93,215,106,181,207, 79,158, 60,233,248,102, 97, 33,143,101, 89, 12, 25, 50,228, - 37, 0, 87, 95, 30, 62,124, 8,181, 90,221,100, 48, 71,117,121, 41,250,205,156, 11,212,172,254,172,149,106, 38,139,130,106,204, -184,202, 44,255, 44, 33,255,145,229,207,205,164, 22,221,221,221,199,136,165,162,169, 94,237,220,130,243,210, 11, 83, 43,202, 21, -187,242,243,243,183, 80, 74,153,215,213,217,156,128,165,102,250,247, 63,167,243, 69, 28, 45, 6,148, 50,160, 44, 5,165, 44, 88, -150,169,222,240,154,178,160, 12, 67, 8,193,159,106, 69,249,100, 83,243, 73, 8,177,115,116,116, 92, 70, 41,125,147,203,229,114, - 12,201, 48,195,227, 26, 38,235,180, 76, 38,251,170, 62,243,250,191,177, 60, 15, 28, 56,208, 32,248, 55,117,213,225,168, 81,163, -152,102,190,155, 23,165, 82,105,131,129, 57,171,170,170,178,243,242,242,222,248,111, 40,207, 90, 54,148,154,208,161,213, 51,193, - 55,123,213,161, 49,157,173, 90,181, 18,105,181,218, 78, 0,124, 9, 33,182, 0, 74,180, 90,237, 25,153, 76, 86, 64, 8,233, 2, - 96, 81,205,109,203, 41,165,183,254, 39,223,119, 66,136,196,209,209,113, 27,135,195,241, 48,229,126,189, 94,175, 41, 41, 41,153, -104, 56, 33, 48,212,233,232,232,120,139,199,227,121,152,160,231, 89, 81, 81, 81, 23,115,255,105,214,249,127, 6, 76,213,115,130, - 55, 60,255,175, 88,237,145,151,151,183, 15,192,190,191, 83,103, 99,145,223,205,242,255, 87,170, 74,242,255, 35,245, 80, 3,154, -166,253,211,202,179, 22, 40, 53,240,251,109, 0,228, 63,240,110,246,253,223, 80, 46,244, 53,103,140, 53, 64,170,215,223,153,151, -204,204, 76, 53,128, 43, 53,159,250,255,119, 11,192,144,255,162,114, 83, 2, 24,243,119,233,107, 10, 60,153,197, 44,255, 84, 49, - 47,171, 53,139, 89,204, 98, 22,179,152,197, 44,102,249,107,114,162,222, 22, 60, 39,106, 15, 8,128, 1,141,204,116, 76,166, 4, - 9, 33, 3, 94, 99, 38,117,206,172,211,172,211,172,211,172,211,172,211,172,211,172,243,159,165,243, 31, 39,181,129, 35,255, 19, - 31, 0, 3,204, 58,205, 58,205, 58,205, 58,205, 58,205, 58,205, 58,205, 58,255, 47,127, 0,124,220,216, 57,199, 12, 53,205, 98, - 22,179,152,197, 44,102, 49,139, 89,254, 51, 98, 50,208,178,116,245,247,119,106, 21,178,221,190,101,240, 93,251,150,193,119,157, - 90,133,108,183,116,245,247,255, 39, 22, 26, 33, 68, 66, 8,121,143,207,231,159,117,115,115,147, 19, 66,102,254, 31,125, 78,107, - 66,200, 40, 66,200, 50, 66,200,112, 66,136,197,223,169,191, 15, 33,188,119, 9,153, 58,145,144,236,137,132,100,191, 75,200,212, - 62,132,252,159,243, 27, 92, 58,195, 61,236,143,211,227, 78, 45,157,225, 30,214,224,245, 57,238, 14,215,207,190,243,109,204,180, - 22,246,127, 83,189, 89,185,184,184,108,117,117,117,205,116,113,113,201,114,113,113,217, 70, 8,177, 49,119,119,102, 49,139, 89, -204,242, 31,147, 19,132,144,143,107, 63, 48,240,209,226, 1,192,137, 19, 39, 34, 0,252, 14,160, 79,100,100,100, 66,253,187,237, -189, 58, 76,246,247,107,255,197,138, 37,243,137,171,179,163,133,158, 97,181, 25,153, 57, 1,139, 87,196, 30,176,247,234,176,174, - 36,235,222,207,175, 49, 24, 16, 46,151, 59, 70, 36, 18, 69, 1,168, 5,108,247,213,106,117, 60,195, 48,251, 76, 93, 69,228,234, -234,122,137,203,229,182,106,206,127, 51, 12,147,253,252,249,243,158,175, 57,136,141,246,244,244,220, 22, 17, 17, 97,209,173, 91, - 55, 8,133, 66, 44, 90,180,104, 54,128,245,166,234,176,183,247,177,210,138,196,159,243,132,194,129, 84,167, 9,162,160, 0, 71, -148,204,234,213,231, 5,106,245,186,146,146, 39, 21, 38,230,101, 62,128, 73,168, 94,142,254, 51,165,116,245, 95,105, 37,147, 58, - 17,157,142,169,110, 19, 2, 30, 24, 27, 27,155,223, 23, 44, 88,192,139,138,138,194,207, 63,255,220,115,235,214,173, 31, 19, 66, -206, 3, 56, 70, 41,125,242, 87, 91,165, 11, 48, 37,188,103,207,111, 39,206,158,205, 85, 94,186,132,111,183,109,219, 0,185, 28, - 0, 54, 53,183, 45, 9, 4, 24,229,232,200,143,162, 20,157, 8, 64, 8,112, 71, 86,204,158,212,106,153,125,180,185,251,251,188, -172,251, 61,188,188, 28,127,119,115,117,148, 63,161, 11, 69, 67,252,123,149, 63,185,184, 16,192,224,250,215,245, 42,241, 68,202, -109, 25,165,164,137, 57, 0,214,254, 69,144,101,225,228,228,116,247,232,209,163, 30,221,186,117,227, 1,192,173, 91,183, 38, 68, - 69, 69,245, 35,132, 4, 81, 74,229,255, 67,160, 93,204,227,112,166, 10,249,252,129, 12,195,116, 0, 0, 46,151,123, 79,163,211, -157,213,179,236, 38, 83, 99,178,153,197, 44,102,249, 63,140, 84,140, 96,145,255,102, 49, 37, 50,252,239,145,145,145,228,196,137, - 19, 20,245,150,136, 91,186,248, 5, 4, 6,250,207, 62,125,120, 71,203,178,146, 50,213,119,107,118,220,174,226, 9, 21,190, 1, -190,130,239,214,175,182,155, 58, 99,214,231,150, 46,126,215, 43, 11, 30,164, 54,163,211,245,148, 72, 36,135,214,172, 89, 19,212, -183,111, 95,190,179,179, 51, 10, 10, 10,112,255,254,253,160, 11, 23, 46, 12,219,177, 99,199,108, 66,200, 8, 74,105,182, 9,234, -124,207,239,220,230, 44,181,119, 0,163,211,193, 61,184, 83, 93,160,189,199, 23,126,131, 94,171, 5,171,211,193, 63,106, 24, 0, -128,101, 89, 4, 4, 4,112, 95,167, 32, 9, 33,238,129,129,129,187, 86,173, 90, 37, 80,171,213,184,126,253, 58, 46, 94,188,200, -230,231,231,199,154,170,195,210,165, 93, 95,142, 68,186,111,204,184,143,108,222,142,106,195,247,116,113, 2, 96,129,135, 25,250, -240, 83,191, 93,232,122,120,223,175,159, 90,186,180, 27, 83, 89,144,118,177,105,176,102, 31, 74, 8, 89, 89, 27, 33,154, 16,242, - 77,235,214,173,191, 50, 76, 83,127,223, 60, 74, 41,120, 60, 94, 65, 69, 69,197,152,162,162,162,196,250, 58,117, 12,120,187,119, - 87,227,136,133, 83,223,227,254,249,231,159,210,128,128, 0, 53, 0,172, 94,189, 26,203,150, 45, 19,158, 57,115,230,173,157, 59, -119,190, 69, 8,217, 64, 41, 61,246, 87, 26,166, 0,248,114,226,236,217, 92,203,204, 76, 88, 38, 37, 97,156, 92,206,251, 26,248, -178, 57, 64,139, 16,210,198,213,149,127, 96,246,172,247,253,189,125, 66, 5, 2,129, 99,245, 38,222,154,162,118,217,217,137,163, - 98,191,222, 26, 77, 8, 25, 73, 41,125,108,162, 62, 30,128,165, 0,196, 0, 22, 2, 88, 36,147,201,124, 25,134,129,171,171,235, - 34, 66,200, 17, 0, 43,156,156,156,168, 76, 38,155, 75, 41,213, 55,197,100,201,159,208,133,207,137,247,155,237, 59, 79,196,115, -114,250,205, 89,131,221, 78, 89,251,144, 21,139,191,205,187, 10, 0,131,125,124,172,188,253,164,115, 45,173, 59,216,203,115,207, -205, 29,236,227,243,211,169, 39,166, 1,237,250, 96, 19, 0,220,221,221, 87,239,220,185,179,101,247,238,221,235,218,120,199,142, - 29,185,171, 87,175,110, 49,115,230,204, 13, 0,222, 55, 81, 95, 59, 39, 39,167, 51, 12,195,168,139,139,139,219,213,254,238, 28, - 50, 34,220,193, 74,218, 95, 86, 90,113,169, 40,229, 72,130,137,186,186,137, 5,130,131,199,118,125,235,214,177,123, 24,199,210, -209, 25,170,220, 60, 84,234,180, 3, 46, 94,190,214,231,227,169, 95,206,168,169,163, 27,230,161,198, 44,102,249, 71, 75,163, 88, -228,127,179,240, 12,144,100,131, 12,146, 72, 36,140, 94,188, 96, 46, 41, 43, 46, 83,170,228, 21, 26,157, 74,165,226, 8,168,234, - 94,234,211, 66, 14,143, 91, 54,115,198,116,171,232,121, 11,162, 1,140, 51, 21,100,133,132,132,220, 56,116,232,144,179,189,189, - 61,202,203,203, 81, 92, 92,140, 27, 55,110,128, 82,138, 17, 35, 70,136,186,119,237,218,105,225,162, 69, 87, 9, 33, 97,166,128, - 45,169,189, 35, 86,247,172,222,139,246,171,204,226,218,255,193,214,209, 81,117,105,150, 61,171,222, 45, 67, 44, 22,215,109, 72, -252, 26, 18,214,191,127,127, 1, 0,124,248,225,135,242,138,138,138, 24, 0,187, 41,165, 38,237,180,106,233,210,174,175,163,155, -123,252,143,155, 87, 75, 58,248,248, 66,171,211, 35,235,121, 30,120,124, 91,120,120, 8,240,254,184,129,252,222,225,246,142, 43, -151,111, 61, 33,117,106, 55,188, 74,150,118,166, 49, 93,182,182,182, 59,246,237,219,135,253,251,247, 3, 0,210,210,210,224,235, -235, 43, 53,150,135,228,228,100,239,161, 67,135,238, 5,208,214, 88,218,250,129,241, 69, 34, 17,122,246,236,137,128,128, 0, 28, - 61,122,180, 15,128, 99,127,181, 1, 42, 47, 93,130,101, 82, 18,144,208,252,201, 11, 33,164, 77,231,206, 94,215, 78,158,216,229, -120,226,228,125,172, 93,187, 13, 79,158, 84, 19,109,222,222,222,120,111,236,104,254,189,123, 87, 2, 71,141,122,239, 10, 33,164, - 39,165, 52,205, 4,181, 75,127,250,233,167,249,173, 91,183,198,168, 81,163, 70, 7, 6, 6,186, 90, 91, 91, 99,203,150, 45,112, -115,115,243,214,104, 52,143,143, 30, 61,234,254,252,249,115, 76,159, 62, 29, 0,102, 55,166,168,207,160, 62, 11, 69, 67,252,123, -181,239, 60, 17,150,214,110,248,105,207, 62, 60,188,189,163,151, 90,123,127, 97,204,180, 22,227,149, 84, 52,201,195,215, 42,186, - 85,151, 8,135,182,129, 67,225,213, 57,209, 81,197,252,241,116,209, 84,239, 88,158, 88,181, 99,241,154,188,226, 87,158,121,244, - 1,110,144,252,129,125,242, 89, 20, 83,186,152,173, 1, 88,117, 29, 18, 67, 49,180,119,239,222,117, 21,151,153,153, 9,181, 90, - 13,127,127,127,142, 70,163,233,107, 98,185,182,123,227,141, 55,254, 60,121,242,164, 67,187,118,237, 94,218, 18,198,213,193,118, - 80,194,161, 13,211, 87,126,251,111, 63,231,128,225,101,133,169,135,239, 25, 3, 89, 61, 66, 59,159, 59,117,104,151, 37,169,204, -129,208,182, 8, 96,139,145,190,247, 23, 16, 11,123,140,249,100, 22,175,111,255,126, 45, 6, 14, 30,121,142, 16,210,159, 82,122, -211, 60,214,152,197, 44,255,104, 86,139,254, 95,123,166, 58,160,101,128, 34, 95, 18,150,178,193, 46,206, 14,146, 13,107,182,223, -228,106, 53, 26,169,173,141,134,111, 99,205, 18, 43, 27,174, 86,163,171,244,242,246, 18,178,148, 13,110,132, 74, 59, 87,127,214, - 45,145, 72, 14, 29, 59,118,204,153,207,231,131,101, 89, 56, 57, 57, 33, 35, 35, 3,101,101,101,168,168,168,192,147,251,247,209, -218,179, 37,150, 68,207,117,155, 62, 55,250, 16, 33,164,139,161, 25,177,161,101,163,140, 78, 91,191,115,111,108, 19,225,151,190, -155,210,217,136,100,100,103,103,195,210,210, 18, 65, 65, 65,150,151, 47, 95,254,163, 49,144, 85, 95,167,189,189,143, 21,207, 82, -178,255,135, 31, 23, 73,180,186,100,164,166,151,160,125,235, 94,112,113,240, 68, 94,137, 6,215,110, 28, 67,242,221,221,240,105, -225,137,105,159,244, 19,199,174, 62,176,207,206,174,141,103,105,233, 83,121, 67, 58,229,114,185,101,155, 54,109,224,233, 89,189, -239, 25,195, 48, 72, 77, 77, 5,195, 48,117,231,134,223,219, 15, 94,128, 94,158,133,137, 19, 38,160,184,184,216,178, 33,157,124, - 46,244,179, 62,126,143, 39,225, 3, 66,169,189,166,178,178,178,142, 29,212,106,181,184,115,231, 14,194,194,194, 34,226,226,226, - 18,140, 80,168, 38,149,167, 22,248,230,219, 95,127,221, 56,174,188,156, 3, 0, 63, 19,194,106, 41,253,198,212,182,228,236,204, - 63,120,250,212, 78, 71, 46,231, 1,236,109,190,198,141, 27, 89,208,106,171,243, 91, 92, 92,136,207,166,202, 33,224, 91,225,232, -209,127, 59,248,251,247, 60, 88, 99, 58, 99,141,228, 83,124,234,212, 41,124,246,217,103, 72, 77, 77,117,231,114,185,184,126,253, - 58, 36, 18, 9,214,172, 89,195,245,247,247,119,151, 74,165, 56,125,250, 52, 10, 10, 10, 72, 83,249,252,253,204,239, 43,202,159, - 92, 92,248,156,156,126,243,167, 61,251,240,209,216, 49,112,165,233,127,216,248,144, 21,111, 12,233,241, 21,229,182,140,146, 90, - 5,219,249, 6, 13,129, 64,104,137,105, 95, 46, 67, 90,242,113, 59, 69,197,221,169,132,201,105,137,154,189,255, 94,218, 84, 57, -110, 20,179,113,207,149,206,103, 61,111,122,185,119,158,114, 29,192,221, 23, 64,203,155, 71, 56,140, 77, 45,123,249,248,241, 99, - 60,121,242, 4, 60, 30, 15, 74,165, 18,122,189,190,193,124,182,104,209, 98,138, 94,175,255,170,166,158,183,187,185,185,125,176, -107,215, 46, 7, 67,160, 93,203,100,149,148,201, 75,175,220, 76,121, 56,107,202,168, 62,151,174, 37,231,216,134, 12,203, 46, 75, - 58, 82,222, 72, 29,137, 37, 66,225,193,211,135,255,109,169,123,122, 1, 82,255, 62,224, 91,250,130,209,229, 66, 81, 90,133,138, - 39,249, 80,255,248, 61, 58, 78,157,137,227, 71, 14, 88, 6,118,232, 18, 71, 8,241,165,148,106, 94,227,221,108, 14,197,111,214, -105,214,105,214,249, 95,168,179, 41, 44, 2,160, 51, 0,151,154,227, 98, 84,187,204, 56, 2, 40, 66,245,118, 96, 46, 0, 52, 0, -132, 6,247,212, 63, 55, 76, 91,255,220,240,184,184,230,216,185,230,251, 38,128, 18, 35,147, 74, 55, 0,145,168,246,205,138,172, - 41, 35,211, 34,195, 19,194,145, 51, 12, 43, 18, 56, 57,171, 62,124,167,127,135,223,206,221,186, 99,225,104,205, 27,212,167, 83, -196,141,123, 79,175, 18, 14,209, 17,194, 49,201,239,131,203,229,142,217,176, 97, 67, 7,107,107,107,176, 44, 11, 27, 27, 27,200, -100, 50,104, 52, 26,148,151,151, 67, 93, 33,135,182, 66,142,164,156, 76,244,136,232,131,145,111,190,225,255,239, 35,199,198, 0, -216,219,148, 94,247,224, 78,117, 76,214,178, 86, 14, 47,168,137,156,178, 58,208,245,117, 39, 95, 8, 44, 45, 49,112, 86,244, 95, -105, 88,137, 66,161,240,212,136, 17, 35, 6,207,153, 51,135,147,159,159,127,154, 16,210,131, 82,106,212,108,170, 21,137, 63,255, -244,243, 40, 59, 59, 75,138,184,179,199,208,187,211, 88, 88, 8,185, 40,150,107, 65, 8,112, 63,229, 16, 8,177,199,221,180,124, -244,234,104,141, 55, 6,249, 91, 30, 57,112,127, 14, 94,248, 7,189, 82, 53,165,165,165, 40, 44, 44,132, 78,167,131, 78,167,195, -168,209,163,177,115,199, 14, 84, 85, 85, 65,169, 84, 66,163,209,128, 97, 24,112, 56, 28,156,141,143, 67,206,211,251, 8, 15, 11, - 67, 99,148,236,246, 68,202, 39,132, 92,123,248,240, 33,238,223,191,143,103,207,158, 65, 44, 22,195,213,213, 21,203,150, 45,131, - 90, 93,189, 71,217,232,209,163, 35, 0,220,251,171, 47,212, 19, 96,107, 6,195, 44, 28,124,248,176,243,229,195,135,217,107,199, -143, 63, 19, 85, 84,108, 49,229, 94,129, 0,163, 86,127,243, 73,123,169, 84,138,103,217, 27,224,231, 39,192,236,153, 14,136,249, -186, 8, 0, 48,253, 51, 15,116,237,226, 8,121,217, 1, 56, 58,207,199,198,141, 51,124, 38, 77, 90, 55, 1,192,118, 35,170, 23, - 30, 59,118,108,164,175,175,111,139,196,196, 68, 34, 20, 10, 33,145, 72, 32,145, 72, 32, 22,139, 81, 88, 88,136,140,140, 12,186, -122,245,234, 92, 84,155, 22, 27,149, 26,243,224,224, 89,131,221, 78, 61,188,189,163, 87, 11,238,211,164,145,211,122,102,222,189, -150, 88,241,219,217,203,203,245, 42,113, 78,217,179,115,115,219,116, 77,116,156,250,197, 82,124,191,122, 49, 30, 94,191, 84,226, -226, 41,223, 36, 33,234,237,221, 7, 54,192,146,245, 89,202,155,186,232, 29,253,148, 73, 35,109,143,187, 92,153,114,146, 71,100, -207,139,110,175, 65, 70,162, 82,212,182,211,248,118,222, 28,205,133, 11, 23, 36,189,123,247,134, 74,165,170, 99, 38,119,237,218, -197,234,245,250, 6,205,209, 90,173,246,171,220,220, 92, 55,165, 82,137, 55,223,124,115,250,154, 53,107,164,181,123,212, 49, 12, -243, 18,147,181, 98,253,206, 51,159,127,181,233,226,153,189, 95,187,175,136,254,160,207,184,105, 43, 47,162,145,125, 36,121, 28, -206,212,227,135,183,185,138,237,116,144,216,191, 1, 85,129, 18, 15,183,126, 4,133, 92,133,174, 43,150, 2, 16, 66,163,227, 96, -203,144, 81,224, 59,184, 99,241,228, 15,220, 23,108,249,233, 19, 0, 27,204,243,122,179,152,197, 44,245,196,133, 16, 18, 15, 0, -209,209,209,243, 99, 98, 98, 82, 8, 33,241,148,210,168, 26,160, 19, 79, 41,141,170, 77, 83, 51,102,191,114, 94,155,182,254,121, -253,227,121,243,230, 5,198,198,198,174, 10, 11, 11,219,123,229,202,149,167,198,128, 22,170,247,127,222, 90,127, 43, 30,160,102, -213, 97,100,100, 36, 49,252,126,137,209, 98,217, 75,143,159,102, 42,222, 24,208,221, 35, 62,225,222,205,247,223,143,236, 63,102, - 72,239, 65, 25,217,197,247,125,188, 92, 29, 83, 82,238, 89,179, 44,123,201,148, 82, 18,137, 68, 81,253,250,245,227,149,150,150, -194,194,194, 2, 50,153, 12,185,185,185,208,106,181, 80,149,151, 65, 93, 94, 6, 85, 89, 41,180,229,165,120,114,235, 6,130,125, -188, 69, 53,206,242,198, 0, 80,131, 76,149, 33,179, 37,180,178,130,200,202, 10,164,153,102, 67, 66,200,219,118,118,118,215, 8, - 33, 11,107, 6,165,169,115,231,206, 45, 98, 89, 22, 43, 87,174,180,182,180,180,140, 35,132,136,140,233,177,114,226, 70,133,117, - 12,226, 60,200,184,139,158, 33, 19,209,174,205, 91,200, 40, 80,162,168, 66,139,194, 50, 45,186,246,254, 14,173, 66,150,162,101, -199, 24,220,207, 42,129,123, 11, 95, 14,120,162, 38, 55,127,206,201,201,121,233,124,239,158, 61, 80, 40, 20,240,241,241,193,216, -177, 99, 49,119,238, 92,140, 29, 59, 22,238,238,238, 24,247,206, 80, 44, 94,188, 24,207,159, 63, 55,150, 85,117,187,118,237,212, - 94, 94, 94,106, 47, 47, 47,181, 86,171, 69,101,101, 37,202,202,202,234,151,247,140,102,191, 37, 46, 46,243,220,220,220,238,186, -184,184,164,136,197,226,147,119, 8,121,160,242,242,114,233, 49,108, 24, 9,120,231, 29,110,150, 68, 66, 18, 0, 75, 83,116, 57, -218,243, 35,251,246, 27, 44, 44, 43,221, 6,160,154,164,250,224,125, 39,252,153, 16,136,203,127,116,193,103, 83,125, 64, 56, 98, - 16,142, 16,138,170, 11,232,222, 45, 76, 96,107, 75,162,140,212,245,123, 0,238,244,232,209,195,125,218,180,105, 68, 36, 18, 97, -250,244,233,218,201,147, 39, 63, 26, 59,118,236,163,243,231,207, 51, 94, 94, 94,104,217,178, 37,105,217,178,165, 27,128, 59, 53, -247, 52, 41,214, 62,100,133, 90,123,255, 15, 91, 95,233, 83, 6,142,225,149, 58,209,168,197,107,242,138,151,111, 74, 95,155,241, - 80,225,253,240,250,165,226, 71,201,199,217,140,155,191, 23,229, 61,170,240, 94,190, 41,125,237,188,239,115, 27,124,169, 19, 18, -192, 30,138, 79,208, 42,170, 20,188, 97, 67,250, 42,166,124, 56,166,157,189,101,224, 46,180,120, 35,164,149,167,199,184,197,171, - 54,106, 39,127,242,185,246,231, 95,182,209,138,138, 10,200,229,114,108,220,184, 81,127,252,248,241, 92,134, 97, 62,111,108, 14, - 4, 0, 58,157, 14, 83,166, 76,145, 90, 91, 91, 35, 39, 39,167,142, 17, 5,128,124, 89,241,189,203, 55,147, 31,204,250,215,232, -136, 42,181, 90,125,230,247, 91,247, 3,124,189, 60, 8,161,141, 46, 68, 17,242,249, 3,187,116,239,206,165,180, 12,132,231,137, - 39, 59, 86, 67,254,188, 4,242,194, 18,112,249, 82,232, 33,130,142, 21,194, 54,184, 27,210,110, 38,162,133,147, 11, 79,196,231, -155,183,206, 50,139, 89,254,161,210, 20, 22, 49, 4, 75,177,177,177,171,154,186,110,240,173,169,119, 94, 7,164,234,131, 48,195, - 99, 0,136,141,141, 93, 69, 41,141,186,114,229,202, 30, 0, 74, 19,241,194,199,181,223,134, 81,226,141,162, 14,174, 74, 19, 51, -103,238, 66,216,217, 72,108,186,117,242,117, 61,122, 58,225,214,165, 43,183,238,183,106,233,232, 68,117, 26,187,111,214,125,239, - 65, 20, 74, 83,157,193,253, 29, 29, 29,161,213,106,241,248,241, 99, 60,123,246, 12, 90,173, 22,250,170, 42,168,203,202,160, 42, - 45, 5, 83, 85, 1, 1,195, 64, 41, 43,132,131,133, 24,120,177, 34,209,216, 3, 54, 8,180,106,191,197,214,214, 16, 89, 89,131, -195,231, 55,104, 86,108, 68,103,231,110,221,186,237, 79, 78, 78,238, 62, 96,192,128,229,132, 16, 27, 74,105, 86,110,110,110,255, - 69,139, 22,169, 93, 92, 92, 48,101,202,148,246, 0, 38, 26, 5,153, 66,141,191,151,107,123,180,243,158,136, 86, 45,251,161,172, - 74, 7,153, 92,135,194, 50, 45,182,124, 23,134,131, 63,119,195,159, 7,123, 33,249,204, 64,148,233, 92, 97,233,254, 54, 40,163, - 9,108, 74,231,217,179,103,177,108,217, 50, 44, 95,190, 28, 43, 87,174,196,242,229,203,145,155,155,139,160,160, 32,100,103,103, -227,212,169, 83,200,207,207,135,163,163, 35,110,220,184,129,245,235,215,227,207, 63,255, 52,133,185, 51, 41, 13, 33,164, 89,182, -116,189, 94, 63, 41,127,216,176, 14, 5,246,246, 1,157, 58,117, 26, 60,125,250,116,239, 30, 61,122,212, 93,247,246,246,246,148, - 72, 36,207, 9, 33, 63, 19, 66, 58, 54,165,139, 5, 58, 57, 57, 5, 65,163,126, 80, 83, 87,124, 16, 34, 70,191,129,247,209,163, -215, 45,104,117, 2,112,136, 8, 28,142, 24,122,125, 49,236,236,220, 65, 41, 9, 50,146,197, 69, 50,153,204,247,220,185,115,156, -140,140, 12,136,197, 98, 0,200, 92,178,100,201,247,107,215,174, 77,117,112,112, 96,226,227,227,113,228,200, 17, 68, 69, 69,113, - 39, 79,158,236,219,178,101,203,205,198,158,123,241,183,121, 87,119,175, 59,245, 46, 95,103,215, 81, 44,105,213, 26, 85,150,111, - 79,237,227, 36, 5,128, 83, 79,158, 84, 56,123,202, 99,171, 42,238,102,219,122, 84,126,109,204, 17,158,210,197,236,237, 71, 15, -174,237, 62,124,186,188,176,160,148,223,169, 67,160, 50,102,217, 23,130, 86,173,219,126,179,120,238,191, 92,115,229,226,178,129, -211, 79, 61, 56,116,250, 70,229,248,247, 63,210,127,248,241, 52,213,169,211,103, 15,179, 44,219,161,177, 21,135, 44,203, 34, 63, - 63, 31, 41, 41, 41, 72, 79, 79,135, 76, 38, 67, 81, 81, 17, 42, 42, 42,234,204,141, 22, 21,242, 19,223,255,122, 60, 73, 42,145, - 88,116,239,224,235,121, 61, 49,181, 80, 42,145, 88,248,182,246,108, 71,200,210, 6,251, 17,134, 97, 58,136, 45, 36, 0, 8,202, -146, 47,161,178,180, 18,149,101,149,168, 40,169,132, 90,203,133, 74,205,129, 82,195,129, 87,196, 27,168,172, 82,161,178,184, 28, - 44,195,132,152,135, 27,179,152,197, 44, 77,140,203,241,209,209,209,243, 77, 76,110,178,121,179, 62,240,138,142,142,158, 79, 8, -137,159, 55,111, 94, 32, 76,240,105,166,148,110,173,255,169,189,102, 52,188, 67, 81, 81, 90,165,181, 83,192,136,153, 95,126,117, -106,207, 47,223, 57,171,213,138,108, 7, 59, 75,198,210, 66,232,248,225,148,149,168,168, 44, 29, 94, 89, 98,250, 42,169,210,210, - 82, 60,125,250, 20, 18,137, 4, 2, 62, 31,140, 82, 9, 70, 89, 5,101,105, 49, 56, 90, 53, 4, 12, 3,123, 11, 9,188,220, 93, -209,202,197,213, 36,157,143, 47,252, 86,231,248,110,104, 46, 92,221,205, 31, 66,169, 37,132, 86,150,248, 52,254,119, 0,128, 64, - 32, 0, 22, 45, 55,165, 50, 29, 91,180,104,113,108,247,238,221, 2,153, 76,134, 59,119,238, 36, 81, 74,203, 9, 33, 86, 0,216, -251,247,239,159, 75, 78, 78,142,242,245,245, 5, 0, 31, 99,250,228, 69, 28, 70,167,167,200,121,158,137,140,103,137,176,183,105, - 3,190, 69, 59, 20,150,105, 33,146,180,129, 78,253,194,250,168,146,103, 65,169, 53,109, 97,164, 70,163,129, 94,175,135, 94,175, -135, 70,163,193,199, 31,127,140,203, 87,174, 96,239,145,243,120,250, 36, 13,237, 91,187, 98,194,132,241,232,214,173, 27,174, 92, -185,210,164,174, 73,157,136,110, 65,111,240,214, 13,230, 64,104,233,160, 14,157,123,230,186, 41, 96,139, 82, 74, 76, 40,207,181, - 81, 81, 81,109,211,170,170,144,242,224, 1, 6, 44, 89, 2, 0, 56,121,242,228, 75,207, 50,107,214, 44, 97,106,106,234,135,183, -110,221,250,144, 16,178,142, 82,218,176,179, 57, 5, 78,156,184,138,127,253, 43, 21, 50, 89,181,191,246,190, 61, 47,112,105,198, - 83, 45,222,140,172,182,104,217,218,218, 98,221,186, 32,147,202,147, 97, 24,108,221,186,181,206, 92, 8, 0, 60, 30,175,199,172, - 89,179, 70, 52,148,190,109,219,182, 2, 99, 58,103,141,246, 16,223,201,146, 76,130,163,223,136, 0, 0, 32, 0, 73, 68, 65, 84, -181,105,219, 42,208,218, 49, 24,197,186,196,160,196,220,252,207,102,141,246,216,176, 46,238,153, 74, 66,212,219, 9,147,211,146, - 39, 86,237, 48, 37,143, 79, 78,109,212,216,182,122,127,199,115,153,124,193,180,143,222,115,176,182,117,174,250,249,251, 24, 59, - 14,151, 67,143,221,210,150, 5,122, 59,216,190, 29,250,109,229,191,102, 46, 74,212,232,115,166, 33,231, 88, 90, 83, 33, 46, 24, -134, 65, 94, 94, 30,100, 50, 25,178,179,179, 81, 84, 84, 84,243,238, 23,189,178,114,181,153, 29, 34,148,217,217,200, 58,252, 51, - 90,141, 31,143,174,203,151,129, 97,121, 80, 42, 24,172, 11,239,143,210,114, 37,212, 44,129,123,231,112,124,116,242, 15,112, 40, - 3,108,217,100, 30, 73,204, 98,150,127,168,152, 18,222,161, 22, 16,197,196,196, 68,253,221,255,111, 8,182, 98, 98, 98, 82, 98, - 98, 98, 76,254,175,250, 38, 67,195,115,163,225, 29, 0, 64, 46, 75, 77,119,240, 10,206,171, 82, 86, 89,184, 56, 59,169, 45,196, - 34,182, 92, 94,193, 77,188,151,164,173,204,127,252,176, 25,207,113, 63, 57, 57, 57, 40, 47, 47, 15,217, 89, 89,208, 43,171,192, - 81,107, 64, 85, 10, 12,232, 25, 14, 49, 0, 49,135, 64,192,106,193,227, 10, 81, 81, 41, 7,128,251, 70, 7, 71,157,238, 21,102, -139, 16, 2,161,149, 21,132, 82, 41,132,150, 86, 47, 49, 92,166, 48, 54, 34,145,104,119, 92, 92,156, 91,139, 22, 45,176,108,217, - 50,120,120,120,248,117,232,208, 65,209,171, 87, 47,137,139,139, 11, 2, 2, 2, 16, 30, 30,142, 83,167, 78, 1,128,209,152, 82, - 58,189,248,238,195, 76,244, 40, 42,185,130, 63,126,255, 17, 26,165, 26,157, 34,126,132,150,215, 10, 78,129, 75,193, 62,222, 5, -197,243,163,213,236,129,235, 16, 60,203,206, 4,225, 10, 83, 76,101,158,106,143,147,146,146,176,231,104, 2,220,188,252,145,253, -232, 1, 30, 92, 60,135,203, 78, 14,240,242, 15,168, 51, 3, 53,154, 71, 6,188, 21,155,234,194, 59,136, 74, 74, 74, 68,246,246, -246,234,218,178,115,115,115,251, 43, 96,235,189, 57,115,230,160,140,207, 7, 34, 35, 33, 72, 79,135, 86,171, 69,104,104, 40,186, -118,237, 10, 0, 8, 13, 13, 5,143,199, 67,112,112, 48,220,221,221,177,105,211,166,247,208,200,170, 62, 14,193, 29,189,190,216, -207,219,219,187, 14,104,237,216, 41, 67,226,173,129, 32, 16, 98,227,247, 47,162, 57,120,122,122,226,121,126, 58, 8,161,201, 70, -242,184,220,213,213,117,145,155,155,155,247,218,181,107,185, 98,177, 24,159,124,242, 73,155,202,202,202, 86, 53, 84, 50,230,205, -155, 87,205, 82, 45, 94,140, 37, 75,150, 64,173, 86, 43, 26, 83,182,115,125,176,123, 97, 9,251,161,139,107,139,225,125, 29, 91, -117,232, 55,104, 0,218,248,246, 67,191, 65,217, 0,176,202,158,151,249,206,234,133, 65,135, 29, 91,218,111,251,237,244,217,197, - 61, 35,250, 45,136,158, 98,183, 34,118, 75,169, 81,159,199,242,172,237, 21, 15,133, 99,214,127,183,121,231,250,175,230,205, 16, -103,203, 52,165,185,165,180,210, 82,196,179,244,113, 33,150,159,125,185,252,105, 94, 94,250,108,228,156, 54,186,210,146,101, 89, -164,167,167,215,249,244,169, 84, 42, 84, 85, 85, 33, 39, 39,167,174,205, 40,165,214,111, 78,123,127, 72, 72,149, 82,169,184,126, -239, 81,246,194,233,227,194,170,148, 74,197,163,140,236, 52, 74,191,109, 16,141,113, 56,156,123,138, 10,197, 0, 69,153, 10,178, - 59, 15,225,209,223, 11, 58, 61,129, 70,207, 64, 86, 92, 1,181, 30, 96, 56,124, 4,190, 51, 1, 12,225,161, 40, 47, 23, 28, 46, - 55,201, 60,220,152,197, 44,255, 88, 49, 26,222,129, 16, 18, 31, 22, 22,182,215,144,117,170, 61, 6,160, 6,208,148, 43,143,204, - 16, 76,213,154, 19, 27,251,159,122,122, 77,157, 96,190,226,163,101, 52,188, 67,205,141, 36,164,131,151,251,234,197,227, 60, 88, -189,190,125, 97, 81,129,158,199, 19,241, 91,218, 40,243,155, 83,130,106,181, 58,254,220,185,115,195, 6, 14, 28, 40,122,116, 47, - 9,154,242,114,104,202,203,192,103,245,176,151,116, 1, 71,171, 6,209,104,208,194,143,133,170, 66,130,132,203,201, 58,181, 90, - 29,111, 42,208,226,112,185, 47,251,101, 89, 90, 66,100,101, 13,145,165,101,125,211, 34, 49, 82, 80, 22, 67,135, 14,237, 31, 26, - 26, 10, 74, 41,182,110,221, 10,173, 86, 43,212,106,181,208,104, 52,208,106,181,144,203,229,216,185,115, 39,126,248,225,135,203, - 0,126, 53, 58,152,233, 53,231,206,156,189,208,237,131,113, 81,252,147,241,235,160,215, 48, 80, 18, 15, 84, 85,233, 80,169,177, - 0,227, 48, 30, 40, 56, 1, 46, 79,140,176,224, 54, 56,122,224,144, 22,122,245,121, 19, 81,248, 75,172, 80, 78,118, 38,158, 61, - 73,131,165,252, 57,156,172, 45,160, 72, 79, 67,167, 9, 19, 95,139,157,104,217,178, 37, 88,150, 69,223,190,125,235,156,171, 95, - 23,108, 21, 23, 23,227,248,241,227, 8, 13, 13, 69, 68, 68, 4,114,115,115,145,158,158,142,183,222,122,171, 46, 77, 82, 82, 18, - 18, 19, 19,225,227,211, 52, 73, 88, 84,162, 59,249, 44,231,206,232,183,223,126, 91,112,237,218, 53, 80, 74,225,235,107, 13,107, - 43, 41, 8, 71, 4,127,127,103, 0,213,115,128, 62,125,250, 64, 46, 79,215,151,150,210,147, 70,202,113, 55, 33,228,136, 70,163, -121,220,187,119,111,247, 39, 79,158, 96,230,204,153,188,125,251,246,213, 82,201,136,142,126,121, 49,133, 82,217,184,233,190,125, - 7,191, 47,218,232,237, 34,196,146, 86,173,173, 29,131,209,198,183, 31, 0, 96, 96,212, 7,104,211,214, 19,242,162,187,173, 85, -202,204,225, 2, 94,169,221,221,141,185,169,146,200,160,247, 85,133,191, 63, 2, 96, 74, 0, 96,170,124,180,175, 32,155, 63,126, -255,145, 99,167,166,188, 21, 53,148,175, 99,244,250, 32, 47,190,109,220,225, 19,133,185, 89,217,223, 34,251,116,242, 11,254,175, - 73, 22,143,145,203,229,144, 74,165, 72, 78, 78, 86, 71, 70, 70,138, 56, 28, 14, 30, 63,126, 92, 7,180,156, 29,237, 3,122,116, - 13,242, 91,177,126,231, 25,169, 72, 36, 26,212,167,139,127,234,163,172,103,148,146,204, 70,217, 86,157,238,236,189, 59, 73,125, -157,220,219,114,211,127,191, 6,135, 94,111, 65,173,230, 64,169, 97,161,214, 3,122,174, 0,110, 29,187,195,214,199, 31, 20,192, -205,107,151,117,106,157,238,140,121,172, 49,139, 89,254,209,172, 22,109, 10, 36,213, 28,151, 0,200,140,137,137, 41, 50, 96,155, -100, 0,146, 0,132,212,164,147,213,187, 79,134,234,213,131, 93, 13,244,200, 12, 0,151,225,177,166, 94, 26,147, 38,128,134, 62, - 90, 13, 2,173, 38,150, 84,194,209,209,209,185, 83,167, 46, 62, 63,253,178, 31,148, 82, 60, 76, 92,131,210,194, 7, 88,180,234, -170,143,135,135, 71,196,179,103,207, 18, 76,201, 4,195, 48,251,182,109,219, 54,187,123,231, 78,157, 90,123,120, 32, 41, 51, 3, - 2,202, 64,192, 48,224,104,213,224, 49, 26,120, 4, 49,224, 16, 75,228,229,149, 35,118,247,254,100,134, 97,246, 25,211,235,247, -214, 80, 44,123, 86, 14, 66, 8,214,134, 5, 65,104,101, 9,129,212, 18,159, 30,187, 80, 7,174,226,151,205,131,208,210, 18, 62, -221,141, 7,132,167,148, 42,172,172,172,110,221,187,119,175,107, 80, 80, 16,102,207,158,141,204,204, 76,176, 44,139,130,130, 2, - 85,126,126,126,174, 76, 38,203, 4,112, 24,192, 79,166, 68, 30, 23,168, 85, 27,226, 15,238,152, 22,214, 51,194,241,237,225, 63, -224,200,129, 89, 40, 43,151, 67,161,151,160, 74,165, 71,149,154, 11,123,135, 14,232, 30, 28,140,188,220, 66,164, 92, 59, 83,201, - 83, 43,214, 52,167,129, 18, 66,144,152,152, 8,111,119, 43,164,253,145, 0, 71, 11, 62, 66,220, 93,225,222,163,103, 93,124,169, -166,132,207,133,254,189,247,222,171,139, 12,255,198, 27,111,100,140, 31, 63,222,109,214,172, 89,248,229,151, 95,112,249,242,229, - 87, 28,180, 35, 34, 34,112,233,210,165,165, 0, 22, 27, 35,245, 52, 26, 13,252,252,252,112,243,230, 77,156, 59,119, 14,253,250, -245, 67, 68, 68, 4,238,222,189,139,223,126,251, 13,137,137,137, 32,132,192,193,193, 1,186,106,240,172,107, 76,153, 86,139,184, -175,191,217, 54,127,253,250, 31, 2,199,141, 27,135,131, 7,247,226,131,247,219,131,112, 68, 32, 68,132,161, 67,218, 99,217,242, -155,232,222,189, 15, 28, 29,249, 88,191,238,232, 83,165,146,217,105, 66, 49,174,248,237,183,223,220, 85, 42, 21,202,202,202,168, -165,165, 37, 41, 46,174, 94,209,218, 16,163,165, 80, 40,196,141, 41,186,119,251,254,154,178, 10, 90, 74, 43, 19,135,151,232, 19, - 59,244, 27,148,131,129, 81,239,227,108,252,175,184,112,230, 28,236,121,153, 25,144, 86,156, 42,202, 40,146,231, 87,249,110,246, -239, 60,153,251,172,234,204,230,233,111,219,113,221,220,216,184,232, 31,202,203,154,104,163,148, 16, 66, 74, 82,119, 29, 59, 76, - 49, 52, 60,172,123,219, 32, 79, 55, 97,105, 81, 33, 61,112,244, 84,178, 54,227,224,241, 90,128,101,108,151, 5, 74,233,178,232, -232,232,175,106,142,183, 47, 92,184,112,114,108,108,172,211,243,231,207,235,124,180, 10,139, 74, 46,132, 71,126,198, 20,151,149, -107,182,173,255,114,148, 68, 44, 18, 46,140,221,246,187,142,139,107,141,233,213,179,236,166,119,102, 46,154,241,232, 97, 98,139, - 86, 18, 33,142,126,185, 24, 73,191, 93,132,142, 35,192,191,206, 93,135, 90,203,160,172,168, 24,231, 63,156, 10, 75, 23, 59,252, -240,251,193, 2,150,101,127, 52, 15, 53,102, 49,203, 63, 87,154,192, 34, 13,197,216, 43, 48, 33,221, 77, 19,244,252,101,169,207, - 98, 25,138, 73, 75,240,138,138,138, 10, 47, 93,186,142,223,227, 87, 32, 33,126, 5, 82, 18,147,144,151,171, 65,110,129, 10,214, -214,214, 87,155, 24,248, 7,212, 31, 28, 20, 10,197,136,133,139,190,122, 46,150, 88,160,119,255,254,112,117,114,134,133,128, 15, -174,158, 5,151,240, 81, 41,179, 69,218, 93, 5,230,110,219, 85, 88,169, 80,140,168, 63, 72,212,215,105, 8, 50, 8, 33, 16, 89, - 91, 65,104,105, 5,145,149,245, 75,102, 68,177,181, 53,196, 86,214,224, 9,133, 13, 57,205,191,162,179,178,178,114,228,168, 81, -163, 74,203,203,203, 49,121,242,100, 36, 36, 36, 36,158, 57,115,198, 58, 41, 41, 73, 82, 88, 88,216,150, 82,250, 6,165,116, 75, - 99, 32,171,190,206,146,146, 39, 21, 84,175, 30, 19,243,213,231, 74,149,222, 1,163, 39,238,131,148,147, 3, 61,195,130, 2,112, -183, 23,162,199,128,229, 40,212,132, 99,223,230,149, 10, 86,171, 26,103, 24, 67,171,190, 78, 74, 41,117,113,113,121,165, 12,206, -157, 59,135,209,163, 70, 98,208,240, 97,112,106,237, 13,231, 1,111, 97,208,228,127, 97,243,230,205,224,112, 56,112,116,116,124, -137,225, 48,212,185, 61,145,242,119,223,165,100,247, 93, 74,126,189, 77,121, 0, 38,236,218,181,235,235,144,144,144,139,151, 47, - 95, 94, 3, 96,140,225,127, 25,228,101,137, 33,155,213, 72, 29, 45,152, 49, 99,134,242,209,163, 71,144, 74,165,208,235,245,184, -124,249, 50,126,248,225, 7,172, 93,187, 22,137,137,137,112,112,112,128,143,143, 15,212,106, 53,110,222,188,169, 4,176,160,137, -182,196,202,100,250,145, 27, 55,198, 22, 71, 69,245,194,182,109,223,195,213, 53, 28,124,158, 43,120,124, 39, 72, 45,253,240,243, - 79, 95, 99,240,224, 78, 56,118,116,127, 73, 81,177,126,100,253, 40,238,141,228, 83,117,253,250,117,108,222,188, 25,163, 70,141, -202, 29, 61,122, 52, 83, 94, 94, 94,199,104,213,238,198,190,164,198,199, 76,173, 86,139, 26,211, 57,249,203,123,185, 95,172, 72, - 94, 86,240, 60, 55, 52,225,226,213,247, 46,156, 57,135,167,143, 46,224,194,153,115,248,227,194,149,232,130,231,185,161,157,186, -181, 19,140,152, 60,237,139, 29,135, 14,114, 45,173,221,176,227,208, 65,238,216,207, 62, 95,217,101, 80,191, 5,198,218,124, 77, - 61,210,202,194,130,121,171,214,124, 87,169,215,170, 56,171,191,221,148,167,148,229, 47, 64,237, 82,204, 70,216, 44, 67,157, 10, -133, 98,139, 82,169,116, 87, 42,149,238, 42,149,106, 65,102,102,102,239,217,179,103,203, 24,134,169, 99, 75, 11, 83,142, 94,189, -255,199,175,171,156, 29,237, 36,225, 93, 3,219,175,219,114,224,247,236,156,130,127,215,198,208,106,164,142, 84,149, 74,213,200, - 97, 35,198, 87,149,149,170, 17,246,121, 52, 88,177, 37,212, 12,160,163, 92,232, 9, 15,247, 86,172,131,196,222, 10,187, 51,110, - 43,202,117,218,145,134, 49,180,140, 60,251,107,139, 89,167, 89,167, 89,231,127,167,206,255,205, 66, 8,113, 51,220,235,176, 38, -174,214, 11, 70,203,216,146,202, 22, 45, 90,244,126,123,232, 0,244,137, 90, 8, 74, 41, 30,220,254, 6,165,178,135,104,225, 42, - 66,122,182, 60, 12, 64,130,169,153,161,148,102, 19, 66, 66,103, 44, 88,120,104,244, 27,253,253,131, 90,183, 22,181,106,229, 5, -169,179, 51,138,138,100,248,243, 90,170,110,229,158,184,228, 26,144,101,202, 22, 60, 96, 89,182,218,201, 29, 64,255, 25,115, 65, -184, 92,160, 38,140, 67,237,192,216,186,107, 56, 8,143, 7,134,178, 80,171,213,212,132,124, 62, 35,132,140, 28, 55,110,220,249, -248,248,120,206,160, 65,131, 58, 30, 62,124,152,253, 43, 21, 81, 89,144,118,209,210,165, 93,212,202,121, 83,246,133,246, 27,102, -237, 27,216, 69,208,165, 21, 23, 90, 29, 65, 94,110, 22,226, 15,221,208,166, 94, 63, 35,167,122,213,152, 42, 89,211, 91,240,104, -181,218,236,182,109,219,186,108,222,188,185,206, 25,158, 97, 24, 20, 21, 21,225,234,213,171,232,208,181, 59,252,223,255, 16, 50, -153, 12, 27, 55,110,132,167,167, 39,134, 12, 25,130,146,146, 18,232,245,250,108, 19,235,138, 1,112,166,230,243, 18,160,173, 33, - 84,168, 49,179,161,143,143,143, 80,165, 82,117,116,115,115,227, 18, 66, 54,104, 52,154, 73,243,230,205,115, 91,181,106, 21,218, -183,111,143,162,162, 34, 72,165, 82,248,250,250, 66, 38,147,225,198,141, 27,140, 66,161,216, 12, 96, 25,165, 84,102, 36,127,143, - 9, 33,161,211,167,127,122,232,235,216, 41,190, 42,117, 31,161,189,125, 79, 80,170,135, 76,150,137, 10,249,101,237,242,101,191, - 62, 41, 40,212,141,160,148, 62, 50,177,154, 22, 79,155, 54, 13,168,217,130, 39, 61, 61,253,142,191,191,191,111, 99,140,150, 41, -178, 46,238,153, 10,192,158,213, 51,195,103,202,139,238,250,218,243, 50, 51, 66,131,216,141,235,226,158,169,150,206,180, 93, 81, -148,153,144,150, 95,117,102,243,142, 67, 7,185, 19,135,143,100, 60, 44, 31, 69,139,157,233,129,126, 67,140,214, 15,237,216,177, - 99, 75, 66, 74,218, 20, 22, 63,188,245,193,228, 41,239,216, 8,148, 39, 67, 60,138,125, 56,158,157,196,137,137,137, 25,166,238, - 25, 90, 79,111, 26, 33,164,247,188,121,243,206, 80, 74, 95,242, 77, 40, 44, 42,185, 16, 22, 53,141,150,149,149,223, 41, 76, 61, -122,207, 4, 93, 55, 8, 33,253,131, 58,116, 58,248,245,170, 88,151, 62, 51,102,243,210, 46,254, 14, 48, 58,100, 37,252, 14, 70, -164, 97,215, 93, 57, 91, 80,174,213, 14, 55, 71,133, 55,139, 89,204,108, 86, 83, 88,228,191, 61,251,245,157,225, 81,179,247, 33, -207,148,187,159, 61,123,150,224,227,237,241, 91, 90, 90,239, 55, 60, 61,156, 0, 0,233, 25,121,200, 45, 80,255,102,170,217,176, - 1,176,213,101,215,241,147, 99, 68, 34, 81, 20,169, 9,225, 64, 95, 99, 83,105,189, 94,255,172,117,235,214,141, 92,109, 56,212, - 19,195, 48, 5, 38,230,243,119, 66,200,120, 31, 31,159,216,172,172,172, 67,148,210,170,191, 90, 19,149, 5,105, 23,237,237,125, -188,175,156, 59,248,249,181,223,227, 7, 80,189,166, 3, 0, 16,158,176, 89,155, 74, 87, 86, 86, 78,249,228,147, 79,182,240,249, -124, 79,212,248,156,213,250, 96, 49, 12,195,213,106,181, 98,134, 97,184, 0, 8,135,195,209,243,249,124,213,161, 67,135,244,122, -189, 62, 91,173, 86, 79,249, 11,244,104,179, 94,128,147, 39, 79,182,178,179,179,123,131, 16, 50,138, 82,234, 87, 81, 81,161, 94, -180,104,209,149,184,184, 56,121,235,214,173,223,140,140,140, 36,246,246,246,184,121,243, 38, 45, 46, 46, 62, 0, 96, 1,165, 52, -189, 25,249, 73, 39,132,132, 76,249,215,143,239,218,219,111,137,164, 20,255,143,189,235,142,139,234,104,187,103,238,221,190,203, -194,238,210, 23,176,128,130,136, 5, 16, 37,198, 18, 81, 19, 19,177, 71, 44,177, 71,163, 38,209, 24,163, 6,141, 53,182,196,215, -196, 18,141, 93, 99,141, 61,138,216,162,198, 22,163,198, 18, 43,138,130, 40,189,215,133,237,119,190, 63,100, 9, 33,128, 11,234, -251,198,124,123,126,191,203,101,119,239,158,157,153, 59,119,230,204, 51,207, 60, 19, 8, 10, 66, 24,220,204,207,231, 14, 23, 23, -155,183,149, 10, 70,107,249, 76, 21, 44,105,115,111,221,186,181, 9, 0,191, 50, 31,173, 26, 65, 90,116, 80, 91,146,240, 46,177, - 43,222,255,237,178, 36, 45, 0,204, 90,146,151, 15, 96,253,248,222, 42,238,238,213,245,139, 60,236, 99,167, 44,219,159,179,209, - 26,186,224,224, 96, 31,134, 97,250, 3,104,234, 34,202,107,232, 44,204, 55, 19, 66,195, 8, 97,156, 0,220, 8, 8, 8, 56, 4, - 32,169,150,247,249, 62,128,186, 21,223,207,184,125,224, 55, 0,191,213,144,235, 50, 33,164,225,167,147, 38,126, 36,228,243,223, -132,217,220,124,238, 79,187,169,109, 83,105, 27,108,176,225, 95,102,213,250,160,178,247,121,214, 18, 60,140, 75,234, 2, 0,190, -190,190,244,193,131, 7, 53,238,112, 43, 27,141,227,105,196,247, 31,159,135, 39, 43, 43, 43,228,101, 22, 28,165,116, 7,128, 29, - 47,146,179, 84, 72,125, 89,122,212, 54, 93, 55, 1,132,254, 47, 43,149,197,170,133,167,155, 48, 87,138,183,222,122,235,177,193, - 96, 56, 1, 32,145, 16,162, 0,144, 99, 48, 24,142, 25,141,198,116, 66, 72,200,183,223,126,107,137,124, 63,151, 82,122,165,150, -233,224, 0,108, 47, 61, 94,116, 30,183,171,213,234,137,142,142,142, 13,180, 90,173, 80,171,213, 10,202,143, 1, 36, 18, 73,166, -181, 92, 10, 57,249, 65,192,203,117, 84,200,201,223,132,148,202, 3,123, 75, 52,183, 26,169, 60,176,215, 90,190,107,215,174,197, - 5, 5, 5,109,101, 24,166, 62,165,212, 21,160, 14,148, 34,147, 82,154,197,227,241,146,239,220,185,147,252, 79,105,128, 74,133, -212,226,210,195, 6, 27,108,176,225, 95,133,234,124,180,120, 53, 37,139,141,141, 37,182, 34,181,161,188,216,170,238,243,132,132, - 4, 29,128, 11,165, 71,197,239, 94, 1,208,253,159,158,199,148,148,148,224, 23,193, 51,114,202,205,100, 0, 19, 66, 42,217,218, -121,214,242,156, 66, 0,147,195,122,212,140,243,250,245,235, 79, 0, 60,177,213, 68, 27,108,176,193,134,255, 29, 42,179,102, 89, -189,215,161, 13, 54,216, 96,131, 13, 54,216, 96,131, 13, 85,195, 34,170, 42,139,163, 69, 0,116,174,226, 75, 86,135,174,175,205, -234,131,103,241,219, 56,109,156, 54, 78, 27,167,141,211,198,105,227,252,247,113,254, 91, 81,153,200, 2, 0, 82,139, 69, 73, 53, -249,209,206, 47,186,192,109,156, 54, 78, 27,167,141,211,198,105,227,180,113,254,251, 56, 95,117,145, 85,137,224,180, 77, 29,218, - 96,131, 13,255,191,177,103,207, 30,171, 54, 21, 29, 48,101,125, 55, 59, 59,229,140,162,130,252,175,126, 92, 60, 98,191,229,253, -190,125,251,154,109,165,104,131, 13, 54,212,202, 25,222,199,199, 43,128, 49,115,109, 40,101, 88,202, 80, 35, 41, 40,217,249, 48, - 39,231, 47, 97, 7,234,212,169,163,224, 51,232, 78, 40,149, 17,194,153, 57,150,249, 53, 46, 46,241, 78, 13, 20,160, 80,169, 84, -126, 44, 16, 8, 58,235,245,122, 79,134, 97,146,116, 58,221,137,226,226,226, 21, 21, 3, 23,254, 47,209,168, 81,163,129,167, 79, -159, 86,180,109,219, 86, 39,145, 72, 76, 37, 37, 37,188,163, 71,143,138,222,121,231,157,188, 7, 15, 30,212,106, 69,162,135,135, - 71,199,245,235,215,123,119,233,210, 5, 13, 27, 54,212,244,239,223, 95,208,186,117,107,193,200,145, 35,227,147,147,147, 79,213, - 80, 73, 7, 16, 66,182, 16, 66, 88,142,227,134,148,174, 72,124, 25,138,157, 97, 24,102, 52, 33,164, 55,165,212,135, 16, 18, 71, - 41,221,207,113,220, 26,107,162,227, 87,194,247, 46,128,174, 12,195, 4, 3, 0,199,113,215, 0, 28,166,148,238,125,142, 52,190, - 52, 78,169, 84, 26, 4, 0,197,197,197,215, 95, 20, 39, 33, 36,168,244, 33,173, 21, 39, 33,100,184, 68, 34, 25, 5, 0, 37, 37, - 37,235, 40,165,155,106,156,152, 53,141,105,240,156, 24, 0,192,181, 89,254, 0,128, 26,189, 30,125,151,212,228,183, 42,227,171, - 17,199,223,203,160,235,160, 65,131, 22,108,219,182,109, 22,165,244,192,203,168,251,110,110, 94, 43,190, 89,182, 86, 61,225,227, -247,191,194,211, 29, 33,170, 69, 19, 66,222, 20,178,108, 15,189,217,124,238, 14,176, 27, 0, 79,165, 82, 13, 20, 10,133,237,245, -122,189, 59,143,199, 75,213,235,245,103,243,243,243,119, 80, 74,141,207,157,192, 24,162, 52, 20,195,141,112,127,238,243, 70, 25, -232, 4, 82,164,193,159,230,254, 3, 70,251, 12,158,198,219, 49, 2,216, 80,155,112, 30, 44,203, 78, 80,171,213,189, 11, 10, 10, -138, 89,150,165, 79,105,201,211, 63, 0, 24,134, 33, 28,199,101,100,103,103, 15,249,127,100, 69,169, 91, 90,174,245, 74,223,226, - 3,112, 5,112, 3,192, 4, 74,105,145, 77, 2,253,215,238, 69, 69,139, 86, 52,165, 52,181, 76,104,149, 11,119,223, 33, 60, 60, -252,140,143,143, 87, 64,223, 94,125, 22,140, 25, 61,150,176, 44,131, 91,183,111,243,222, 27, 50,252, 45,149, 74,229, 97,167,211, - 53, 6, 33, 92,177, 88,124,203,104, 52, 36,239,222,177, 77,238,223,168,145,217,108,230,176,122,205,170,119,124,124,188,166, 89, - 35,182, 8, 33,126,110,110,110, 91, 34, 35, 35,221,122,244,232,193,186,185,185, 33, 33, 33, 65,241,227,143, 63, 54,250,238,187, -239,250, 17, 66,134,148,198,242,169,105,102,219,185,169,152,183,228, 18,210, 9,133,102, 20, 26,113, 50,173, 4,199, 41,165,231, -106, 91,128,197,197,197,227,138,139,139, 67, 91,182,108, 73, 55,108,216, 64,134, 13, 27, 70, 9, 33,164,164,164,228, 7,212, 50, -244,131, 76, 38, 91,217,165, 75, 23, 95, 95, 95,223,184,135, 15, 31,118,221,181,107,215,225,161, 67,135,250,200,100,178, 88, 0, -126, 53,164,219,148,157,157, 29, 88, 82, 82, 2, 79, 79,207, 13, 0, 90,188,132, 74, 68, 88,150,221,239,225,225, 65, 23, 45, 90, -116, 32, 48, 48,208, 53, 39, 39,199, 52,121,242,228,206, 23, 47, 94,124,135, 16,210,195, 90,177, 69, 8, 81, 18, 66,214,184,185, -185, 57,125,245,213, 87, 15, 66, 66, 66,110,136, 68, 34, 97,108,108,172,116,226,196,137,159, 50, 12,211,143, 82, 58,154, 82,235, - 59, 8, 11,167,135,135,135,211,130, 5, 11, 18,130,131,131,111, 9, 4, 2, 65,108,108,172,236,243,207, 63,159, 80, 91, 78,134, - 97, 86,183,110,221, 90, 57,107,214,172,187,141, 26, 53,186,192,178,172, 48, 41, 41,137,153, 61,123,246,199, 44,203, 70,112, 28, - 55,166, 54,233,116,117,117, 85,206,158, 61,251,110,235,214,173, 47, 10, 4, 2,193,189,123,247,152,200,200,200,143,107,146, 78, - 71, 71,199, 48, 71, 71,199,181,105,105,105, 60, 0,112,119,119,111,213,160, 65,131,239,202,239,105,105,113, 13, 48, 26,141,133, - 90,173,118, 80,118,118,118,165,129,112,135, 77, 93,222, 29, 0,190, 51, 88, 94, 63, 61, 63,235, 53,176, 58,202,154,124, 7,187, - 19, 10, 0, 3, 63, 91,220,235,233,249,233,251,223,104, 0, 30,143,199,109,113, 39,244, 90,170,245, 33, 99, 8, 33, 61, 59,118, -236, 56,251,212,169, 83,171, 58,116,232,240,249,214,173, 91, 93, 18, 19, 19,191, 38,132,120, 13, 24, 48, 96,216,201,147, 39, 23, -102,102,102,238,121, 81,245, 95, 40, 16,137, 8, 67, 32, 17, 75,237,173,185,158,207, 48,221, 46,244,236, 57,106,221,189,123,193, -223,197,196,120,107,220,221, 67,199,143, 31,239,218,167, 79, 31,198,203,203, 11, 15, 30, 60,112,220,186,117,107,227,117,235,214, -245, 38,132,124, 66, 41,125,252, 60, 34, 75,147,135,102, 58, 61,130, 41,133,226,207, 50, 66,158,200,128,107,178, 24,114,243, 31, - 32,182,102,110,218,180,105,214,131, 7, 15,176,112,225, 66, 0, 88, 81,195,246,103, 98,239,222,189,195,247,237,219, 39,217,189, -123,183,164,101,203,150,112,115,115, 67,233, 96,170, 44, 48,181,183,183,247,255,171,206,221,209,209,113, 67,124,124,124,152, 76, - 38,251,203,251,113,113,113, 65,190,190,190,249, 0, 62,171,169,112,115,118,118,222,206,113,156, 46, 59, 59,251,125, 0,144,203, -229,219,100, 50,153, 50, 53, 53,117,218,203, 26,200,148, 41,147, 10, 90,228, 85,182,104, 85, 26,176,180,252,142,217,140,153,107, - 51,102,244, 88,210,127,224,128,180, 7,113,241, 28,143, 47, 28,120,244,216, 49,105, 64, 64, 0,163, 91,177, 2,166,204, 76, 24, - 63,253,244,245, 19, 39, 78, 24, 35, 6, 14, 46,225,179,100,147,143,119,125,233,206, 29, 63,186,237,219,187,167, 13,128, 59,207, -178,100,185,185,185,109, 57,125,250,180,135,183,183, 55,242,242,242,144,144,144, 0,141, 70,131,126,253,250,241,219,180,105,227, -209,183,111,223, 45,132,144,182,214, 90,182, 8, 33,174, 13, 61,121,135,190,153,217,207,239,157,183,218,200, 60,188, 26,128,166, -105,145,248, 48,166,229,161,211, 23,199,251, 42,152,251, 15,242,105, 55, 74,105,122, 77, 11, 48, 43, 43,107, 74,239,222,189,247, -134,133,133, 57,139, 68, 34,168,213,106,210,163, 71,143,140,148,148,148, 57,207, 33, 92, 80, 58, 10, 51,151, 63, 87,220, 30,200, - 74,120, 42,149, 74, 40,149, 74, 0,240,120,222,145,167, 66,161, 88, 33,151,203,251, 22, 20, 20,148, 48, 12, 67, 9, 33, 84, 38, -147, 73,148, 74,229, 31,119, 99,238,171,117, 58, 93,195,197, 75,215, 45,235,216, 46,208,254,231,159,127, 70,159, 62,125,232,241, -227,199, 71, 3, 88,101,229,111,172,233,221,187,119,241,140, 25, 51,180, 15,226, 18, 60,238,222,143, 35, 50,177,144,115,114,114, -226, 95,190,124,153,183,100,201, 18,241,236,217,179,215, 0,232, 91,131,116,175, 25, 48, 96,128, 97,210,164, 73,169,247, 30,196, -187,220,188,251,128,218,137,249, 38, 39, 39, 71,246,226,197,139, 92,109, 56, 25,134, 89, 61,101,202,148,130,209,163, 71,231,102, -231,228,187,229, 22, 20, 81, 17,159, 53,186,185,185,241, 14, 28, 56,160,219,190,125, 59, 51,106,212,168,213, 0, 34,106, 80,196, -171,123,244,232, 81, 24, 25, 25,153, 23, 27,247,200,237,230,157,251,144,138,248, 70, 87, 87, 23,246,247,223,127, 55, 44, 94,188, -152,153, 55,111,158, 85,233,148,201,100,155,119,237,218,197, 59,112,224,105,219,247,219,111,191, 49, 62, 62, 62,210,242,215,148, -104,117, 96, 8,144,149,149, 37,109,221,186,245,102, 0,158,127, 19, 65,115, 98, 48,108, 42, 48,110,220,184,212,154,214,151, 96, -247,241,184,246,140,240,183,220,234,198,116,224,103,139,123,241,120, 60,110,212,168, 81,105, 21, 63,215,106,181, 4, 64,143,224, - 26,136,173,174, 93,187,126, 17, 29, 29,221, 96,235,214,173,223,110,223,190, 93, 15, 0, 98,177,216,233,199, 31,127, 92,216,175, - 95, 63,244,235,215,111, 6,128, 23, 38,180,204,212,108, 0, 0,145, 88, 36,138,137,137, 33,254,254,254,213, 58,183, 26, 56,238, -202,186,123,247, 66, 62,244,247,111,153,195,113, 13, 5,239,188, 83, 52,113,226,196,172,130,130, 2, 36, 36, 36,192, 96, 48, 96, -216,176, 97,108,135, 14, 29,212,253,250,245, 91, 78, 8,121,151, 82,106,176,194,170,179,216,195,195,227,131,252,252,252, 34,139, - 85,167,113,125, 57,175,125,144, 73,212,188,161, 81, 40, 96, 77,130,238,159,114,228,248, 10,162,241,247,198,121, 0, 16, 20, 35, - 83, 0, 60,183,208,114,240, 34,222,102, 62,230, 57,215,147,190,153, 25, 87, 60,171,232, 49, 93, 81,157,197, 86, 38,147,245,210, -104, 52,123, 74, 59,103,191,110,221,186,225,226,197,139, 0,208, 6,192, 10, 66, 72, 71,134, 97,222,227, 56,110, 61,165,180,186, -173,220,198,247,236,217,243,205,125,251,246,201, 1, 96,207,158, 61, 48, 26,141,240,241,241,129, 64, 32,128, 80, 40, 4,159,207, - 47,219, 29,228,255, 19, 24,134, 17,221,184,113, 3,106,181,186, 98, 61, 1,128,246,181,160,156, 17, 23, 23,215,250,234,213,171, - 8, 11, 11,155,209,172, 89,179,183,207,156, 57,227,150,157,157,141,176,176,176,229, 0, 14,188,236, 60,149,215, 34,255,154,251, - 84, 65, 73,118,120,170,204, 24,150,101, 25,196,199, 37, 24,195,194, 58, 13,125,242,228,137, 93,104,104, 40,195,231,243,161, 57, -117, 10,218,223,127,135,157,157, 29,122,247,238,205, 63,123,246,172,189,189,157,253,200, 71,241,143, 10, 89,150, 1,165,204, 51, -125, 30,148, 74,229,199,211,166, 77,115,243,245,245,133,201,100, 42,139,104,110, 50,153,144,152,152, 8, 59, 59, 59, 12, 25, 50, -196, 69, 42,149,126,108,101, 39, 91,207,207,199,229,218,233,195,107, 90, 76, 28,211, 85,230, 39,253, 25,178,196, 79, 96,183,231, - 67, 52, 78, 57,138,200, 94,161,178,227, 43,103, 4, 55, 80,171,174, 17, 66,234,213,180,144,180, 90,237,249, 91,183,110,141, 60, -115,230, 12, 7, 0,191,252,242, 11,189,123,247,238,232,231, 25,133,114, 28,135,188,188, 60,112, 28,199,150,190,182,156,255,167, -230,125,123,123,251,213,111,191,253,246,128,199,143, 31, 75,142, 28, 57,226,248,228,201, 19,167, 71,143, 30, 57,251,249,249,241, - 22, 46, 92, 24,173,213, 25, 88,163,153,234, 77,102, 99, 97,234,237,219,113,185,233,233,215, 54,110,220, 88, 66, 8,233,109,229, -111,188,235,238,238,238, 56,117,234, 84, 16,190,180, 85,163,198,205,124, 89,190,196,129,225, 11, 29, 74, 74,180,230,248,248,248, -196,169, 83,167,214, 15, 12, 12, 84,151, 78,175, 89,197,169, 86,171,157, 38, 77,154, 4,158, 72, 30,212, 60, 48,184,129, 80, 36, -147,179,124,137, 60, 52, 52,180, 67, 92, 92, 92, 74,100,100,164,123,203,150, 45,107,196,217,178,101, 75,229,168, 81,163, 76, 98, -137,188,181,183,183, 79,227,230, 77, 26,135,251,249,249,245,226,241,120,166,204,204,204,199, 67,134, 12,113,239,222,189,187,107, - 77, 56, 93, 92, 92,148,145,145,145, 38,175,186, 62, 93,186,188,249,214,107, 2,137,220,129, 39,148, 41,138,139,181,230,123,247, -238, 61,158, 62,125,186,123, 80, 80,144,139, 53,156,197,197,197,124, 39, 39, 39, 52,109,218, 20, 1, 62, 62,200,207,207,199,190, -125,251,176,105,211, 38,172, 95,191, 30, 59,118,236, 64, 72,219,183, 32,151,203,145,146,146,130,130,130, 2,254,127,187, 78,113, -171, 27,211,239,244, 31,244, 24, 59,118,108,202,168, 81,163,210, 36, 18, 9, 87,241, 80,169, 84,230, 65,131, 6,165, 15,249,124, -105, 15,203,212, 98,117,150,172, 78,157, 58,221, 56,124,248,240,195,173, 91,183, 34, 32, 32, 0, 93,186,116, 17, 2,192,199, 31, -127, 44,236,215,175, 31,118,237,218,133, 61,123,246,220,241,243,243,251,149, 16,210,211,154,116, 14, 25, 50,164,109, 68, 68,196, -185,136,136,136,235,253,251,247, 95, 59,122,244,232,191,244, 92,169, 41, 73, 87,244,122, 61, 2,131, 91, 74,231,110,184, 52,232, - 89,124,119,129,173,107, 99, 98, 54,125,117,251,246,227, 25, 1, 1,138,186,143, 30,169,126, 88,188,216,201,178, 73,183,209,104, - 68, 98, 98, 34,148, 74, 37, 6, 13, 26,228, 36, 18,137,134, 88, 81,127,150,244,236,217,115,248,147, 39, 79,236,214,173, 91,231, -126,253,250,117,117,106,106,170,251,201, 19,199,156, 39,127,246,177,220,193, 78, 40, 76,201,124, 42, 84, 31,165, 64, 22, 19,143, -182,148, 66, 81,126, 58,177, 86,237,130,154, 72,164, 94,228,187, 6,109, 21,247, 39,237, 10,234, 31,249, 83,144,210,201, 75, 60, -173,154,116, 54, 95,180,104,209,238,168,168,168,129,109,219,182,221, 75, 8,145, 84,114,141, 56, 36, 36,100,223,174, 93,187,134, -183,107,215,238, 60, 33,164,105,149,163, 72, 79,207,222, 63,253,244,147,163,229,181,147,147, 19,196, 98,241,223, 68,150, 64, 32, - 0,195, 48,248,255,132,204,204,204,247,218,183,111,191,187,107,215,174,186,171, 87,175, 34, 51, 51, 19, 30, 30,101, 99,237,180, - 90, 80,170,164, 82, 41,188,188,188,224,235,235, 59,240,236,217,179,110, 70,163, 17,143, 30, 61, 66, 70, 70,198,181,255, 70,158, -202,107,145, 87, 9, 21,246, 57,252, 0, 64,244,223,132, 86,233,222, 66,167, 1,128, 18,162,185,113,235, 22,159, 21, 10, 7,111, -219,190, 93, 36, 16, 8,240,248,241, 99,220,185,115, 7,197, 39, 79,162,228,194, 5,164,167,167,163,168,168, 8,174,174,174, 88, -179, 97,131, 76,111,166, 35,238,221,191,207, 82,230, 79,127,131,170, 86, 36,136, 68,162,206,125,250,244,169, 82,144,165,164,164, -160,107,215,174,124,150,101, 59, 87, 98,158, 59, 81, 33,115, 68,237, 76,162, 78,238,157,235,238, 46,188, 3, 60,152, 8, 20, 94, - 3,168, 14, 48,233,129,228,155, 64,244, 28,212, 45,138, 33,199,230, 14,117,243,144,242,162, 72, 5,179,145, 21,203, 91,125,252, -253,253,215, 15, 30, 60,152, 1,128,142, 29, 59, 18,127,127,255,181,132, 16,159,106,204,136, 39,158,209, 73, 94,204,205,205, 69, -191,126,253, 28, 27, 52,104,112,162, 95,191,126,142,150,247,107,203,105,177, 38, 55,105,210, 36, 91, 34,145,236, 32,132, 60,179, -129, 45,207,169, 80, 40, 86,116,237,218,181,239,246,237,219, 5, 0,112,250,244,105, 68, 69, 69,225,246,237,219,136,141,141,229, -130,131,131,157,151,174,223,189,122,197,170,205, 75,122,181, 9, 84,119,104, 21,220,216,174, 40,183,200,213,213,181, 13,165,212, -199,202,116,118,157, 51,103,206,157,187, 15, 31, 59, 48, 60, 62, 79,192,231,137,236,237,101,174, 74,185,204, 83, 37, 21,123,136, - 24, 98, 87, 92, 92,156,182, 99,199, 14, 14, 64, 87,107, 57,231,206,157, 27,127,247,193, 99, 5, 97,120, 60, 62,143, 47,176,179, -147, 42,222,233, 18,214, 18, 0, 4,160,130,130,130,130,244, 77,155, 54, 25,106,194, 57,107,214,172, 91, 57,121, 69, 74, 30,159, -207,231,241,216,178,178,148, 73, 36,206, 82,145, 72,168,211,233,146,151, 45, 91, 86, 82, 19,206, 57,115,230,220,185,247,240,137, -138, 33,132, 37,132,225,217,203,101,142,142, 14, 82,103,103, 59,137,147,148,199, 10, 11, 10, 10,146,183,108,217, 98, 21,167,193, - 96, 16,164,167,167,227,238,221,187,240,106,217, 18, 63,255,252, 51,234,212,169,131,126,253,250, 97,192,128, 1,144, 72, 36,232, -216,186, 25,166, 78,157,138,135, 15, 31,194, 96, 48,136, 42,227, 44,243,147,170, 0,181, 90,125,245, 89,245,167,252,119, 43,166, - 51,216,157,208,239,244, 31,244, 40, 47,176,170,226, 87,169, 84,230,202,172, 93, 21, 57,187,118,237,250,197,201,147, 39, 27,108, -217,178,165,199,144, 33, 67,206,111,217,178, 5,175,189,246, 26,238,222,189,139,250,245,235,227,135, 31,126,192,128, 1, 3,206, - 47, 95,190,188,199,213,171, 87, 3,189,189,189,167, 61,139,179,127,255,254, 31, 5, 5, 5,157, 74, 75, 75,107,157,147,147,211, -116,223,190,125, 35,122,247,238, 29, 63,112,224,192, 78,101, 22, 45,163,113,123,244,193,189, 8,239,209, 7,141,154, 52, 93, 61, -108,218,214,102,213,113, 82, 74,233,109, 96,237,166,212,212,204,237, 90,109,113, 63, 62, 95, 42,189,116, 73,181,103,213, 42,167, -242, 43,189,147,147,147,209,189,123,119,190, 64, 32,104, 87, 93, 58, 9, 33,139,122,245,234,213,111,223,190,125, 74,139, 85,231, -194,133, 11,184,121,243, 38, 18, 18, 18,144,151,151,135, 78,163,139, 48,118,225, 83,238,177, 11, 41,222,250,152,202,106,217,134, -148, 65, 90,151,184, 57,218,243,126, 29,177,172,209,199, 31,172, 14,224,217,169,248,216,246,121, 44,210, 31,104,247, 84,145, 78, -210,186,117,235,173, 17, 17, 17, 68,175,215, 67,175,215,235, 41,165, 37,149,113,123,120,120,136,155, 55,111,142,209,163, 71, 51, -246,246,246,203,171, 74,167, 70,163,209, 29, 62,124, 24, 67,134, 12,193, 39,159,124,130,134, 13, 27, 66,169, 84,130,207,231, 99, -243,214,157, 78, 3, 70,140,241,107,209,182,125, 96, 64,139,215,154, 23,234,216,150, 2,169,106, 20,169,100,106,224,101,172,144, -251, 39,112, 54,107,214,172,237,229,203,151, 69,237,219,183,199,227,199,143,193,231,151,141,167,204,207,147,206, 57,115,230,136, -180, 90, 45,254,248,227, 15, 12, 29, 58, 52,217, 96, 48,124,250,178,243, 94, 81,139,188, 74,160,148,174,173,112,164, 86,101,209, -154, 3, 0, 70, 14, 81,131,135,142, 40, 62,116,232,144, 84, 40, 20,226,241,227,199, 72, 77, 77,197,230, 77,155,204, 29, 93, 92, -191,128,178, 5, 0, 0, 32, 0, 73, 68, 65, 84, 10,187,120,120, 20,108,222,180,137,234,245,122, 80, 74,225,239,239,143,190,125, -251, 74,222,237, 55, 48,131, 20,148,236,180, 66,249,185, 91,230,215, 71,140, 24,241,183,207, 39, 79,158, 12,123,123,123, 16, 66, -220,172,200, 95,196,248, 57,189, 60,149,222,138,116,154,182, 57, 7,172, 24,224,201, 1,158, 61, 32,118, 0, 68,114, 64, 40,133, -238,234,169, 28,134,118, 73,232,211,238,125,143, 26, 78,245, 64,173, 86,207, 56,117,234,148,243,213,171, 87,105, 65, 65, 1, 82, - 83, 83,233,130, 5, 11,156,213,106,245,140,218,222,148,148,148,148,185,225,225,225,233, 67,135, 14,117, 56,122,244,168,215,208, -161, 67, 29,194,195,195,211, 83, 82, 82,230, 62,207,205, 22, 8, 4,236,237,219,183, 85,243,230,205, 27, 0,224, 74,211,166, 77, -179, 61, 61, 61,175,148, 58, 77, 86, 11,185, 92, 94, 38,178, 44,214, 53, 30,143, 7, 62,159, 15,181, 90,173,207,201,201, 49,183, -107,225, 35,241,119, 96,140,106,145, 64,162,146,136, 61,229,246, 14,161,217,217,217, 55, 8, 33, 86,237, 79, 72, 8, 9,106,213, -170, 21,223, 76,249,220,216,193, 29,213, 31, 15, 15,115,249,126,222,168, 58,203,230,126,224,177,104,246, 72,255,185, 83, 6,133, - 49, 28,167,173, 95,191,190,155,197,161,221, 10,243,121,112, 72, 72, 8,143, 3, 31,119,239, 39,164, 63, 78, 74, 46,124,179, 67, -235, 50,203,101, 64, 80,112, 23,103,103,231,246,254,254,254, 33,214,198,132,145, 72, 36, 65,141, 26, 53,226, 49, 44,159, 56, 42, -229, 94,114, 59,137,171,229, 51,123,133,226,117,149,179,115, 4, 67,105,190,187,187,187,139, 68, 34, 9,170, 65,222,121, 28, 4, -112,117, 81, 57, 56, 59, 41,236,186,132,181,105,216,250,245,214,126,205, 66, 95,107,221,164, 69,200,187,196,100, 42,240,241,241, -113,177, 56,201, 87, 7,157, 78, 39,222,190,125, 59,230,205,155,135,230,117,235,194,195,195, 3, 46, 46, 46,184,112,225, 2, 46, - 95,190, 12,165, 82,137,140,140, 12, 44, 94,188, 24,251,247,239,135,193, 96,144,215,180, 62, 89, 35,182,170,131,201,100, 98, 42, - 10,172,170,248, 37, 18, 9,103,113,146,175, 10,135, 15, 31,222,106,177,100, 77,152, 48,161,237,210,165, 75,207,199,196,196,192, -206,206, 14,151, 47, 95,198,136, 17, 35,206, 47, 95,190,188,237,152, 49, 99,176,105,211, 38,196,199,199,111,168,142,175,127,255, -254,179, 71,142, 28,185,236,204,153, 51,140,171,171, 43,148, 74, 37,122,245,234,133, 13, 27, 54,240, 76, 38,211,198,136,136,136, -235, 17, 17, 17,215,205,137,199,191,216,189,126,193,133, 91, 55,174,227,163,241,147,132,122,147, 49,210,138,134,151,150,216,217, - 21,154,218,183,207,217,101, 52, 22,247, 23, 8,164, 14,215,175,171,162, 54,110, 44, 19, 91, 83,167, 78,133,131,131, 3,240,212, -129, 25,213, 88,117, 62,216,191,127,127, 89,123,232,232,232, 8,161, 80, 8,129, 64, 0, 62,159, 15,150,101,113, 98,181, 12,171, -166, 62,213, 23,171,166, 18, 28, 95, 65,158,107,111, 86,153, 39,105,170,116, 21, 94,255,240,135, 38,129, 77, 59, 57,226,194,143, -105, 88, 16,126, 53,233,242,174,204,137,218,140, 42,183, 82,106, 49,121,242,228,128,140,140, 12,252,254,251,239,248,253,247,223, -231, 85, 81, 54,218,131, 7, 15,126, 93, 84, 84, 4,111,111,111,244,236,217,179, 61, 33,164,101, 21,207, 13, 66, 66, 66,208,189, -123,119,132,133,133,161,121,243,230,208, 27, 76,252,136,193, 31, 52,186, 29,159,233,177, 96,241, 2,233,169, 95,246, 49,231,207, -159, 97,183,238, 61,238,208, 58,236,173,101, 2,185,251, 69, 34,117,114,255,183, 91,180,196, 98,241,210, 51,103,206,184, 25, 12, - 6,220,186,117, 11,159,124,242,201,243,238, 25, 90,102, 0,241,242,242,194,233,211,167, 49,104,208, 32,109,122,122,250,111,255, -173, 60,149,215, 34,255, 22,240,202, 41,200, 50, 60,121,242, 36, 79,165, 82,121, 52,106,212,136,209,235,245, 79,167, 36,246,236, - 49,175,223,184, 49, 90,171,213,142, 7, 32, 88,241,253,247,171, 61, 60, 61,195, 6, 15, 25, 66,140, 70, 35,194,195,195,133,135, - 14, 29,114,124,152,158,254,204, 13,145, 43,142, 54,134, 13, 27,134,165, 75,151, 2, 0,198,141, 27, 87,102, 90, 39, 86, 56, 44, -217, 57,160,107,151,110, 33,246,137,178,239,236, 13,175, 27,139,234, 61,148, 95,148, 21, 73, 66,192, 8,121, 16,179,224, 12, 70, - 83,108, 70,239, 43, 15, 99, 27, 7, 72,114,178,235,119,110,242, 6,214,255,188,165, 43,128, 93, 86,143,234,164,210, 86,118,118, -118,184,114,229, 74, 78, 72, 72, 72, 30,165,212, 97,238,220,185, 78, 82,169,180,213,115,168,223, 71,132,144,246,109,218,180,249, -152, 97,152,206, 28,199,157, 72, 79, 79, 95, 65, 41,125,100,101,167, 61, 22,192, 44,148,243, 67,209,235,245, 96, 24, 6,148, 82, -244,239,223, 31, 83,167, 78, 13,184,121,243, 38, 78,157, 58,165,234,220,185,243, 69, 66, 72, 30,128,247, 41,165,149, 90,205, 10, - 10, 10, 74, 46, 95,190, 44, 57,117,234, 20, 56,142,131, 74,165,130,189,189, 61, 68, 34, 17,122,245,234,101, 23, 25, 25,217,233, -216,177, 99, 25, 5,245,234,176,226,212,100,141,200,206, 78, 14, 55,143,118, 99, 6,190, 23, 67, 41,221, 95,131,198, 65, 40,225, -153,180,196,172, 99, 22,205, 92,206, 72, 5, 2, 34, 22,240, 32,226,138,241,197,215,243,137,128,154,121,168,225,252,188, 64, 32, - 16,200, 69,208,179, 66,214, 40, 37,120, 33,193,225, 88,150, 21,138, 5,208, 85,245, 57,159, 97, 24,134, 97, 4, 0, 76,214,114, -138, 68, 34,129, 92, 68,171,228,148,176,132, 37,132, 8,241,116,117,214,223, 16,236, 78,104, 57, 43,146,174,188, 40,110,215,174, - 29,162, 79, 93,193,158,168, 19,200,122,124, 3,211, 63,159,128,150, 45, 91,226,208,161, 67,213,166,201,226,163, 85,149,117, 89, -173, 86, 95, 77, 73, 73,105, 81,213,119, 43,243,209,226, 86, 55,166, 67, 62, 95,218,163, 50, 43, 85,165,252, 51, 29,158,114, 85, -227,163, 69, 8,233,217,174, 93,187,143,182,111,223,174,127,251,237,183,133,253,251,247, 71,211,166, 77,219, 14, 31, 62, 28, 0, -208,185,115,103, 44, 93,186,180,237,240,225,195,177,115,231, 78,236,219,183, 79,215,161, 67,135,207, 9, 33,201,148,210,195,149, -113,114, 28,215,125,205,154, 53, 21, 45,133, 48,153, 76, 48, 26,141,238, 38,147,201,189,180, 45,194,178,101,203,179,142, 31, 59, -132,207,167,205,129,139,179, 91,144,149,117,136, 12,155, 52, 41,235,135,197,139,177,120,231, 78, 76,170, 95, 95,186,229,206, 29, - 28,215,106,177,235,212,169,172,210,223,121,166,111,166, 70,163, 41, 57,124,248,176,253,174, 93,187,160, 80, 40,208,176, 97, 67, -168, 84, 42,240,249,124, 48,172, 4,172, 64,137, 70, 77, 90, 1,184, 12, 0,168,175,134,198,223, 27,231, 9, 65, 30,101,170,174, -195, 85, 62,163,117, 73, 61,215,186,226, 51, 31,109,106,170,176,119, 17,224,232,138, 39, 56,246, 93,226,126,109, 22,190,133, 9, -247,170, 89,172, 17,226,237,237,141,140,140, 12, 28, 62,124, 88, 3,224,155,170,126,131,227,184,175,191,255,254,251,201,211,166, - 77, 19,249,251,251, 3, 64, 16,128,223, 43, 21,125, 50, 25, 60, 60, 60,202,132,101,255,161, 99,124, 70, 79, 28, 35,233,253, 86, - 24,120, 60, 39,228,105,140,200, 46, 52, 66,233,100,135,207, 39, 70,136, 79,132,120,180, 92,179,124,219, 65, 66, 72, 75,250, 50, -131, 69,254,143,225,232,232, 24,148,157,157,141, 71,143, 30, 97,232,208,161,201, 89, 89, 89, 63,107, 52,154, 17, 41, 41, 41, 0, -144, 83, 11,202, 50, 49, 31, 20, 20,132, 86,173, 90,161, 95,191,126,226,226,226,226, 8, 31, 31, 31, 15, 0,175,191,204,252, 84, -212, 34,255, 42,161, 85,105,135, 96, 52, 54,210,173, 94, 13,205,137, 19, 16, 30, 63,142, 93,106,117,145, 86,171,253,140, 82,154, - 88,218,232, 77,216,244,195, 15,191,246,248,237, 55,123,125, 76, 12,124,110,222, 4, 95,161, 8,170,105, 2, 54,110,220,136,130, -130, 2,228,231,231, 3, 0,190,251,238, 59, 20, 20, 20,192,226,203,240,204, 12, 8,208,214,205,165, 62,210, 16, 11,142,199,216, - 37, 52, 42,126,205, 78, 43, 79,241,120,226,170,201,103, 60, 16,243, 56, 84, 86,146,173,127,141,176,122,104,179,138,225,209,166, - 33,120,224,181,173, 73, 26, 45,243,254, 60, 30, 47,231,254,253,251,221,253,252,252,162, 0, 56, 61,175, 63, 0,165,244, 1,128, -241,181, 20, 1,179,226,227,227, 93, 54,108,216,240,241,220,185,115,105,121,161,101,249,159,199,227,129, 82, 10, 7, 7, 7,240, -249,124,215, 11, 23, 46,184,134,134,134,174, 44,109,208, 42,203, 39,109,218,180, 41,226,227,227,193,227,241,224,224,224, 0,206, -100,192,156,137, 99, 96,102, 69,188, 41, 83,166, 4,245,233,211,231,214,134, 13, 27,140,246,173,219,188,158,157,157,125,251,163, - 65,131,111, 29, 56,112, 64,207,113,220, 26, 43,243,124, 61, 54, 54,150,245, 84,187,178,212, 84,204,201, 4,128,248,198, 50, 42, -180,115,131,152,199, 82, 1, 97, 32, 18, 75, 28, 30, 37, 37,101,115, 28,119,215, 26, 78,142,227,174,197,199,199, 75, 92, 93, 28, -121,197, 37,250, 34, 9,159, 10, 19,174, 93,137,171, 23, 28,226, 3, 0,218,107,151, 79,139, 26, 53,150, 36,164,103,202,234,215, -175,111, 21,103, 73, 73,201,245,228,228,100,214,213,213,149,247, 56, 49,233,160,194, 78,230,108,175, 80,188, 6, 0,134,194,252, -203,140, 78,151,201,242,121,174,153,217,217, 57, 37, 37, 37,241,214,230,253,225,195,135, 60,119,119, 23,246,232,241,147, 81,174, - 82,145,139, 92,200,179, 23, 17, 66,164, 44, 41, 16,152,184, 44,177, 84,234,242, 40, 41, 41,135, 82, 90,165,133,240,171,188,193, -189,159,222,175, 57, 59,203,113,227,198,141, 27, 56,114,254, 46,100, 84, 15,162,205,199,241, 77,235, 48,104,202,180,231,246,251, -123,150,216,170,149, 53,107, 77,227,171, 21,248,145,242, 12, 71,248, 65,131, 6,205,217,186,117,107,153, 3,202,221,187,119,209, -177, 99, 71,203, 52, 7,186,116,233,130,208,208, 80,220,189,123, 23,190,190,190, 56,117,234,148,136,101, 89,209,224,193,131, 23, - 0, 56,252,172,244,174, 93,187, 22, 35, 70,140,168,204,177,250, 33, 0, 45, 81,250, 23, 77,253,106,179, 83, 78,118, 22, 50, 50, -211,174, 91, 91, 14,132, 16, 12,155, 52, 41,107,141, 94,143,237,151, 46, 97,136, 76, 38,253,225,193, 3,132,135,134,162, 89,199, -142, 89,214,180,117, 22,171,142, 86,171, 5,159,207,135,189,189, 61, 28, 29, 29, 33, 16, 8,192,242,213,224, 9, 3,193, 8, 4, - 8,110, 23,136,197,159,201,138,135,190,131,229,132, 32, 79, 36,196, 53,129,180,114, 95, 29, 66, 8,145,213, 65, 47, 74, 81, 80, -156,136, 95, 44,130, 68, 81,143, 56,216,217,243,143,143, 92,233,175,176,119, 17,224,200,242,199, 56,190, 50,105,175, 54, 13,211, - 1, 60,172,110,117,177, 72, 36,106,166, 80, 40,144,152,152,136, 39, 79,158,220,169,206,193,159, 82, 90,220,186,117,235, 56,145, - 72, 20,224,236,236, 12, 0,222, 85,165,147,227,184, 50, 63,172, 45,219,119, 59, 5,181,247, 17,191,217, 54, 0,155,163,230,227, -195,136,229,224,179, 4,102,179, 1,223, 46,237, 6,179,174, 8, 17, 61, 62, 32,111,116,246, 13, 60, 17,165, 31, 9, 96,221,191, - 85,104, 37, 37, 37,141,111,223,190,253,130,194,194,194, 92,141, 70, 51, 8, 0,188,189,189,235, 50, 12, 35, 2, 48,183,154,250, - 84, 23,149,135,133, 16,220,188,121, 19,114,185, 28,201,201,127,238, 73,159,152,152, 8,142,227,116,176,161,186,103, 52,152, 82, -122,141, 16,226, 14, 32, 28,229,194, 59, 48,165,166,186, 55,162,163,163,105,116,116,244, 27,101,157, 23,165,156, 41, 39, 7, 84, -247,180,108,249,124, 62, 5, 80,126, 69,147, 84,161, 80, 16,190,167, 39,136,232,169,235, 7, 45, 55, 39,252,188, 48, 26,173, 11, - 45,195,153,193,130, 24, 64,203, 25, 49, 52, 98,130,249, 78,157, 48, 94, 56, 3,105, 66, 69,249, 39, 27, 48, 81,152,193,177, 53, - 76, 14,213,104, 52, 48,153, 76,202, 6, 13, 26, 68,155, 76, 38,165,101,106,224,127,117, 83,205,102,115, 28,203,178,248,248,227, -143, 97,177,254,232,245,122,164,165,165, 65,167,211, 65,175,215, 35, 62, 62, 30,249,249,249,208,235,245,184,125,251, 54,188,189, -189,193,178,172,123, 53, 21,133, 82, 74,225,229,229,133,122,245,234,129, 37, 20,235, 23,205,198, 23,159,140,193, 0,111, 14, 27, - 87,124,139, 14, 29, 58, 52,174, 95,191,126,107, 30,143,103,118,115,115, 19,236,219,183,239,160,217,108,238, 85,131, 56, 90,135, -167, 78,157, 90,175, 73,147, 38, 46, 10,123,185, 81, 36,100, 33, 52,106,168, 72,151, 77,121,197, 89,240,242,170,107,130, 68,234, - 59,100,200, 16,179, 53,157,163,133,243,179,207, 62,115,247,247,247,119, 80, 42,228, 26, 33,159,205, 16,128,102,229,223,248,253, - 34, 0, 8,157, 93,180, 16, 75, 3,134, 14, 29,106,170, 9,231,140, 25, 51,188,157,157,157, 21, 12,104,161,217, 96,248,115,190, - 93,167,207, 38,124,126, 9, 4,194,144,113,227,198,145,154,112, 78,158, 60,185,126, 64, 64,128, 66, 97, 47, 43,226,241,217, 84, - 1,199,165,138,193,165,241,245,134, 92,177,179, 83, 49,164,118,193, 67,134, 12,169,146,211, 98,205,138,140,140, 76,172, 32,188, -145,147,147, 3,109,218, 45, 8,146, 99, 16,104,199, 71, 75,103, 37, 68, 34, 81,217,210,247,170,170,107, 85, 62, 90,149,137, 45, -107,191, 27,242,101, 53, 83,128,107, 26, 95,173, 24, 55,171,148,191,218,231,105,219,182,109,211,194,194,194, 50,186,116,233,162, -143,142,142, 6, 33, 4,167, 78,157, 66,114,114, 50,186,116,233, 2, 74,169,101, 85, 27,174, 95,191,142,206,157, 59,235,219,183, -111,159,188,109,219,182, 89,214,220,156, 17, 35, 70,192,104, 52,162,168,168, 8, 57, 57, 57, 56,116,232, 16, 2, 3, 3,169, 84, - 42,237,195,122,189, 53, 63, 98,228,180,215,155, 54, 15,194,202,229,139,245, 66, 30,255,171, 26, 54,194, 24,250,217,103, 89,249, -193,193, 57, 91, 52,154,226, 97,246,246,210, 6,137,137,170, 43,199,142, 57, 25, 12, 6,171, 56, 44, 86, 29, 79, 79,207, 50,145, - 37, 16, 8,192, 19, 58,131,149, 53,131,208,177, 11,164,110,125,240,203, 53,145,206, 65,134,253,114, 59, 28,149, 41, 80,101,104, - 7,169, 23,230,191,222,223,125, 95,155, 1,238, 39,165,117,176,129, 16,194, 16, 66, 24,202, 35,251,134,127,235,215,192,185,158, - 4,191,237, 78,195,241,149, 73, 63,105,211, 48, 27,192,131,103, 61,231, 6,131, 65,107, 54,155,193, 48, 12,120, 60, 94,121, 31, -209, 95,127,250,233, 39, 92,185,114, 5, 0,202,194,246, 20, 22, 22,154, 89,150,133, 88, 44, 6, 0,187,106,218, 59,240,249,124, -240,249,124,156,190,120,214,113,192,187,221,200,133, 63,126, 70,155,192,129,200, 46, 50, 32, 61,223,128,188, 98,160, 73,203,233, -104,218,121, 63,110,196, 23, 34,168,121, 83,150, 21,202,134,190,226,157,119, 93, 23, 23,151, 11, 78, 78, 78,167, 8, 33,117, 9, - 33,117,237,237,237,127, 85,171,213, 49,132,144,158,148,210, 3, 41, 41, 41,254, 69, 69, 69,109, 40,165,143, 41,165,143,179,178, -178, 58,102,100,100,188, 94,221, 98, 45, 71, 71,199, 13, 5, 5, 5, 19,204,102,115,143,210,227, 29,179,217, 28, 20, 27, 27, 27, - 16, 20, 20,116,199,199,199,231,186,143,143,207, 17, 31, 31,159,131, 62, 62, 62, 7,195,194,194,150, 90,194, 61,188, 76, 84,166, - 69, 94, 33, 88, 92, 93,194, 75, 67, 61,132,151,245, 25,165,231,211, 21, 29,208, 76, 34,209,109,211, 71, 31, 65,113,240, 32,248, -177,177, 24, 62,116,168,189, 84, 42, 93, 78, 8,105, 65, 8,105, 99,103,103,183,114,246,236,217,114,167,133, 11,161, 62,123, 22, - 9,135, 14,193,200,231,255, 94,155,212,149,148,148,128,199,227,149, 89, 98,100, 50, 25,204,102,115,169,118,123,134,224, 48,225, -183,228,244, 24, 8, 81, 15, 28,104,209,209,130,246,151, 6,198, 77,119, 57, 84,224,237,251, 64, 35,240,253,210,249, 53,151,229, -117,219, 94,210, 16, 94,145, 80, 33,198,147, 39,137, 48,131,171,209,124,179, 86,171,205,215,104, 52, 8, 10, 10,114,188,114,229, - 74,131,192,192, 64, 85,233,251,151,159,243, 33,106,237,225,225,177,219,211,211,243,145,135,135,199,110, 66, 72,235, 26,124,125, -195,185,115,231,192,178, 44,102,207,158,141,194,194, 66, 24, 12, 6,100,103,103,227,201,147, 39,208,235,245, 72, 74, 74,194,189, -123,247,160,215,235,145,144,144, 0,157,238,217, 3, 18,142,227, 96,111,111, 15,109, 73, 17, 86,205,255, 2, 51, 34, 39, 34,255, -225, 85, 36,165,164, 67,225, 32,195,248,241,227, 89,165, 82,201,153,205,230,122, 38,147,169,179,217,108, 94,109,173,224, 44, 13, - 90,120,222,203,203,171,233,162, 69,139, 2,190,152,191, 90, 96,207, 43,162, 34,185,152, 19,202, 69, 84,216,248, 53,140,152,190, - 92,176,108,201, 55,247,127,251,237,183,100,107,130,119, 90, 56,131,131,131,253,146,147,147, 3,253,253,253, 27, 57,213,173, 47, - 18,185,123,228, 9,220,235, 20, 80,157,246, 18,241,168,211,110,245,234,213,183,126,253,245,215,148,154,112,202,100,178,198,155, - 55,111,110,234,234,234,218,148, 47,145,136,139,243,243,119,153,138, 53,187, 89,133, 82,204,216, 43,222,217,191,127,255,213,189, -123,247,166,213,132,211,215,215,215,127,254,252,249, 77,154, 53,107,214,196,205,187,129, 72,226,225,149, 45,246,172,155, 45,105, - 22, 40,130,103,189,183, 87,174, 92,121,253,183,223,126,179,138,147,101, 89, 19,195, 48,224,243,249,144, 74,165, 56,122,244, 40, - 62, 26, 57, 16, 94, 30,142,104,228,239,143, 78, 31, 78,192,222,189,123,203,124,120, 88,150,173,178, 71,255, 97,225,248,168, 96, -119,114, 21,107, 26, 95,197,154,198, 87,131,221,201,213, 42,197, 86,233,231,149, 93, 99, 85,107, 84,133, 31,214,179,196, 22,165, -244,240,233,211,167,191, 30, 54,108,152,176,107,215,174,184,116,233, 18, 70,140, 24,113,126,223,190,125, 0,128, 75,151, 46,225, -211, 79, 63, 61,127,242,228, 73,140, 25, 51, 6, 29, 59,118, 20,158, 59,119,110,165, 53,177,127, 76, 38, 19, 54,110,220, 8,147, -201, 4, 59, 59, 59,168, 84, 42,116,235,214, 13,183,110,221, 26,179,105,211,166, 24,150,207,127, 47,188,199,187,136, 62,184, 15, -247,110,223, 26,243,195,130,193, 53, 14, 10,204, 48, 12,186, 14, 29,154,149,213,164, 73,206, 15, 5, 5,197,239, 43,149, 82,255, -180, 52,213, 47,187,119, 59, 89, 81,127,136,217,108, 46, 19, 87, 22,209, 97, 57,120, 66,103,240,100, 77,193,147,183,196,141, 7, - 2, 35,191, 21,189, 38, 8,161,119,171,139,159,197, 23, 50, 35,250,124,225,141, 62, 95,120,163,231,148,250,195,165,117,176, 94, - 86, 7, 99,187,126, 82, 47,204,167,165, 3, 10, 50, 12, 56,244,109,194, 99,109, 54, 22, 2,184,103,205,115,206,113,220,157,228, -228,100, 8,133, 66,212,169, 83,199,143, 16, 98,241, 11,220, 48,106,212,168,113, 95,126,249,229, 68, 0, 95,150,230,201, 46, 44, - 44,172, 73, 81, 81, 17, 98, 99, 99, 1,224, 74, 53,247,190,108,149, 97, 78, 65,130,168,190,186, 25, 2, 27,143,134, 82,217, 28, -201, 57,122,164,228,232,177,126, 85, 47, 92, 61, 55, 15, 87,142, 15,193,227,180, 52, 72,220,122,195,108,210, 53,125,197, 13, 37, - 51,226,226,226, 90,239,222,189, 59, 12,192,140,102,205,154,253,246,228,201,147,215,207,158, 61,219,200,211,211,115,121,109, 73, - 45, 97, 33, 18, 18, 18,254,114,148,134,133,208, 83, 74,131, 41,165, 93, 41,165, 61, 75,143, 79,159, 43,214,155,245, 56,253,170, - 58,195, 3,136,174,184,218,176,162,208, 42, 31, 40, 12, 13, 84, 42,185,209,104, 72,250,249,231,159, 13, 12,195, 64, 42,149, 98, -216,136, 17,204,170,239,191,111, 55,176,117,235, 83, 31,188,249,230,145, 83, 39, 79, 6,135,134,134,130, 82, 10,134, 97,176,115, -231,206, 18,173,182, 36,187, 78,157, 58, 10,107, 26,141,242, 15, 80, 65, 65, 65,153,208,202,207,207,135,171,171,171,213, 83,135, -154, 2,156, 56,121,244,106, 46, 53,127,248,164,235,131, 37,134,175,210,122,133,230,113,102, 94,190,217,136,252, 18,138, 66, 45, -120,151, 24, 85,232, 48,223,222,134,248,206,161,247,206,196, 92,200,214,154,181, 53, 90, 45,145,145,145,241, 69, 68, 68, 68,182, -187,187, 59,177,183,183,135,135,135, 7,211,179,103,207,172,196,196,196, 47,107,123, 71,156,156,156, 6,132,133,133, 69, 37, 39, - 39,247, 61,115,230, 76,189,179,103,207,246, 13, 11, 11,139,114,114,114, 26, 96, 37,197,174,105,211,166,105,132, 66, 33, 94,123, -237, 53, 20, 22, 22,162,116,149, 79,181,199,179, 58, 2, 0, 16, 8, 4, 88,179,104, 22,102, 68, 78, 68, 78,204, 37,220, 56,255, - 51, 78,167, 17, 76,159,255, 13, 4, 2, 65,173, 98,125,249,186,200,154, 53, 83,203,239,126, 58,162,127,202,212,200, 72,249,245, -235,215,249,227, 62,249,148, 38,164,230, 64,216,117, 49,139, 55,190, 96,254,208, 56, 35,252,157, 78,152, 61, 99, 82, 51, 74,233, -232,103,113, 6,184,200,154, 53, 85,203,239, 76,250, 96, 96,220, 39,159,124, 34,249,234,171,175,180,173, 91,183, 46, 73, 79, 79, -151,200,148, 42,127,158,131,162,105, 66,106,154, 93,235,214,173,227, 63,252,240,195,188,154,114, 78,159, 62, 93,122,236,216, 49, - 94, 68, 68,132, 41, 55, 55,215,142, 47,145, 4, 17,145,184, 85,102,110,174, 67,223,136,136, 7,125,251,246, 45,230, 56,110, 76, - 77, 56,103,206,156, 41,189,119,239, 30,175,117,235,214,198,180,180, 52,185,204,209, 41,144, 85,168, 90, 62, 74, 77,183,111, 21, - 26,250,112,220,184,113,154,234,210, 89, 94,164,200,229,242,228, 54,109,218,224,219,111,191,197,178,101,203,240,246,219,111,227, -214,237, 91, 8, 31, 55, 17, 1, 99, 63,197,193, 11, 23,145,156,156,140,185,115,231, 34, 48, 48, 16, 2,129,224, 94,165,164,163, -239,146,107,169,148, 92, 75,165, 4,163,239, 18,203,235, 42,197,208,151,249,248,203,245,149,224,202,204,202, 45, 93,193,238,228, -106,117,126, 88,207, 18, 91,125,251,246,253,200, 18,194,225,253,247,223, 63,191,124,249,242,182,239,191,255,116,160,253,218,107, -175, 97,222,188,121,109,167, 79,159,126,126,254,252,249,232,212,169, 19,124,124,124,158,185,240,197,108, 54,195,100, 50, 97,224, -192,129, 48,153, 76,200,204,204,196,253,251,247,177,118,237, 90, 80, 74,197, 0,224,174,246, 12, 17, 10,133,248,227,218,239,197, - 51,222, 15,221, 86,131,193, 20, 41, 63,136, 41, 42, 42, 66,223,177, 99,179,146, 26, 54,204, 89,157,149, 85, 60, 82,169,148,214, -127,252, 88, 37,215,235, 61,170,243, 73, 37,132,128,227,184, 50, 97,101, 17, 92, 21,143,210,142,210, 42, 24,138,185,195,103,183, -166, 0, 0,218, 15, 86,163,231,148,250,195,221,125,165,223,181, 27,244,212,232,189,119, 94, 28, 45, 76, 49,127, 5, 35,238,212, -192, 98,125,233,210,165, 75, 80, 40, 20,136,136,136, 16, 49, 12,179,176,180,157,215, 82, 74, 87, 80, 74,151, 88,184, 68, 34,209, -226, 33, 67,134, 48,121,121,121,184,113,227, 6, 0,156,172,170, 93,162,148,150,229,189, 40,135,192,204, 9,241,235,181,163, 56, -126,118, 15, 30, 37,103,226,113,134, 22,224, 57, 64,171, 73,130,161, 36, 25,250,188,107, 40,208, 73,255, 13, 51, 82, 47, 37,220, -194, 75, 8, 11,241, 34,173, 90,175,164, 79, 29,165, 52,181,252,106,195,242, 1, 76, 43, 11, 88, 10,106, 47,233,191,103,229, 42, -135,136,129,131, 53,129,129,129, 74, 15, 15, 15, 16, 66,208,171,119,111, 18,118,230,140,156,175, 86,195,177, 69,139,178,233,136, - 19, 63,255,140,163, 71,143,106,162,127,218,239, 49, 98,228,200,238, 0, 54, 87,211, 96,240, 26, 52,104, 80,246,187,169,169,169, - 16,137, 68,101, 62, 17, 5, 5, 5,112,118,118, 70,106,106, 42,172, 52,148,108,153, 26,121, 49, 50, 35,244, 11,239, 80, 57,159, - 28,209,164,193, 76, 41,248,196, 12,148, 80, 24,205,128,206, 72, 17, 82,159, 85, 29, 47, 49, 41, 15, 93,218, 23, 15, 96, 75, 13, - 45, 90,191, 16, 66, 70,115, 28,183, 7, 0,115,230,204, 25,238,206,157, 59, 31, 89,235,184, 94,169,217, 94, 42,157,114,234,212, - 41,213,148, 41, 83,114, 15, 29, 58,148,223,173, 91, 55,135,181,107,215,170, 58,118,236, 56, 5,192,143, 86,220,212, 18, 66,200, -230,196,196,196,143, 90,182,108,137,156,156, 28, 24, 12, 6, 92,189,122, 21,190,190,190,184,114,229, 10,252,252,252,240,251,239, -191,163, 81,163, 70, 48,155,205,208,106,181,224, 56,206,252,172,198, 60, 39, 43, 19,200,126,130,148, 75, 71,112,255,230, 85,156, - 74, 33, 88,241, 99, 20,234,212,243,174, 85,156,154, 70,174,178, 38, 30, 46,142,199,191,154, 51,211, 37,225,151,157,216,183,113, - 5,119,250,200,145, 0,161, 28,163,223, 24, 56,225, 93,189, 17,117, 1, 8, 95, 15,109,137,174,202,123,102,105, 61,164,157,188, - 93,125, 36,235, 70,174,178, 38,106,103,199, 99,255, 89,248,165,252,225,209, 31,176,107,205,183,116,239,214, 29,129, 90, 32,180, - 73,147, 38, 93, 25,134, 81, 0,208,150,250,121, 89,181,181, 77,101,156, 39,162,162,130,181, 64,232,129, 3, 7,186, 74,165, 82, - 55, 0,198,226,226,226,184,231,225, 60,121,232, 80,176, 37,157,132, 16, 23, 0, 6, 74,233, 67,212,112, 11,158,126,253,250,205, -251,244,211, 79, 35,205,102,179,179,229, 61,163,209,200, 46, 94,188,152,199,113, 28, 75, 41, 53, 48, 12, 99, 56,118,236,152,217, -100, 50,165,104,181,218,177,207,211,144,188,251,238,187,184,120,241,226, 28, 60, 93,132, 97,173,181,250, 47,126, 90,213, 77, 83, - 90,195,127,230,204,153,185,239,189,247,222,212, 31,127,252,241,254,242,229,203,123,140, 25, 51, 6, 59,119,238, 68,195,134, 13, -241,199, 31,127,224,139, 47,190, 0,128,182,211,167, 79, 63,184, 97,195, 6,159,132,132,132,197,207, 74,163,209,104,132,201,100, -194,142, 29, 59,208,171, 87, 47, 56, 59, 59, 67,173, 86,131, 16,242,203,200,145, 35,191, 7, 0,150,176, 2, 0,208,105,117, 58, -127,255,150, 86, 91,112,125,124,124,202,218,186,180,180,180,178,149,130,111,189,247, 94,214,250,175,190,194,182,146, 18,140, 84, - 42,165, 73,158,158,238, 7, 31, 62,252,128, 16,178,182, 42,203,145,197,170,243, 44,145,101,173,133,185, 36, 21,211,126, 90,240, -200, 13,192,219,237, 7,171,209,126,176, 26, 45,123,186, 16,134, 37,184,121, 60, 27,183, 78,228,236, 53, 22,224,151,154,108,151, - 67, 41,189,227,232,232,120,240,141, 55,222,232,209,184,113, 99,140, 26, 53,234, 67,129, 64, 32, 48, 26,141,159, 88,194, 60, 16, - 66, 28, 24,134,249,114,211,166, 77, 31,168, 84, 42,156, 59,119, 14,103,207,158,253,133, 82,250,164,170,118, 9, 64, 89,204,172, - 58, 94,126,218,123, 9, 69,210,140,228, 95,113,254,220, 79,104, 24, 56, 1, 18,183,238, 80,249,207,135, 33,102, 25,244,217,199, -161,242,234,134,164,132,135, 96,121,162, 91,248,151,192, 18,110,225,214,173, 91,149,134, 91,168, 41,154, 53,107,214,246,236,217, -179, 34,173, 86,139,211,167, 79,163, 85,171,178,181, 93,255,211,253, 59,203,107,145, 87, 9,213,109, 42, 93,105,175, 73, 56,194, -111,228,231,103, 22, 48,216,212,171,123,247,226,235,215,175,151,141,250,180,151, 47, 67,115,244, 40,204,102, 51, 40,165, 56,123, -230, 12,134, 12, 30, 92,196,103,201,250,250,245,235, 81, 66,255,140,221, 82,217, 82,122,129, 64, 16, 17, 17, 17, 81,214,248, 36, - 38, 38, 66, 38,147, 65, 40, 20,130,227, 56,152, 76, 38,176, 44, 11, 7, 7, 7,152, 76, 38,125, 37,153,233, 92, 33, 35, 70,115, -142,166,239,134,240, 65,169,234, 34, 3, 29,173,168,143,186, 2, 73,217,195,233,102, 79,208, 35,144, 15, 39, 94, 6, 61,185,248, -205, 20, 78,151,221,183,226,222, 98,207, 90,242, 79, 8,241,107,222,188,249,247, 67,134, 12, 97, 0,160,115,231,206, 76,243,230, -205,191, 35,132,248, 85,243,157,106, 57,197, 98,177, 8, 0,162,162,162,114,238,223,191,255,118, 84, 84, 84, 78,249,247,173,228, - 92,187,104,209, 34, 72,165, 82,152, 76, 38,232,245,250, 50,255,172,242,103,131,193, 0, 39, 39, 39, 68, 71, 71,195,108, 54, 71, - 63, 43,157, 94,117,235,129, 56, 55,192,230,168, 83, 56,155, 37,168,177,200, 42,207,217,208,221,174,145,155,147,227,207,255, 89, - 48,215, 57,247,193, 85, 36, 37, 37,209, 99, 71,163,127, 43,161, 52, 57,175,128,206,200, 45,162,141,138,117, 84,220,202, 7, 79, -126, 94,243, 57,157,222, 30, 70, 84,178,106,176, 60,103, 19,119,187, 70, 30,206,142,199,190,249,207, 2,121,222,131,171, 72, 77, - 75,195,225,232,168,235, 37,148, 38, 83, 74,247, 82, 74,135,155,205,230,166,102,179,185, 41,165,116,120, 85,226,165,166,156, 26, -141,166,153, 70,163,105,246, 34, 57, 57,142,107,198,113,156,213,156,229,133,202,146, 37, 75, 98, 82, 83, 83,135,100,100,100,116, -177, 28,185,185,185,157,139,138,138, 58, 20, 23, 23,183, 43, 89, 82,207, 65,163,209,184, 20, 22, 22,186,151,148,148,132, 80, 74, -175, 90, 91, 63,203,163,124,212,233,148,148,148,217, 41, 41, 41,228, 89,233,100,198,220, 37,219,191,153,244,211,154, 53,107,220, -159,135,191, 98, 58, 51, 51, 51,247,236,216,177, 35,200,219,219,219,103,248,240,225, 88,189,122, 53,150, 47, 95,174, 3,128, 13, - 27, 54,232,202, 89,178,188, 30, 61,122,212,178,178,105,195,191,164,147, 97,182,188,245,214, 91,244,236,217,179,232,213,171, 87, - 89, 32,209,117,235,214,193,100, 50, 21,116,234,212,137, 3,128, 18,109,113, 1,229, 40,244,134,202,231,223, 43, 43, 79,161, 80, -248, 78,249,120,129,150, 96,204, 66,161, 16,148, 82, 52,106,219, 54, 43, 47, 48, 48,103, 99,126,126,241,236,102,205,236, 63,240, -247, 31,222, 24, 24, 92, 25, 39, 33,228, 47, 86,157,138,135,181,150,172,242,156,148,210,140,146, 20,140,250,105,193,163,163, 22, -203,150,216,142, 7,109,161, 9,251,191,122,148,169,205,196, 58, 0, 79,106,194, 9, 0, 57, 57, 57,227,190,250,234, 43,157, 82, -169,196,187,239,190,139,249,243,231,143,108,219,182,109,190,171,171,235, 69, 95, 95,223,155,253,251,247, 79,189,122,245,234,184, -176,176, 48,196,198,198,226,155,111,190,201,203,205,205, 29, 84, 29, 39, 33,164,204,146,215, 51,188,115,206,170,239,190,229, 58, -189,241, 17,164, 18,123, 24,249, 94,200, 41, 50, 34, 87, 67,161, 23,133, 66, 40, 16,161, 75,235, 38,184,120,236,135, 98,179, 94, -179,185, 54,117,190, 6,157,235,203,230,124, 33,225, 22, 42,166,243, 69,132,133,120, 25,121,127,149, 81, 73, 28,173,191, 90,180, - 44, 75, 42, 45,103, 66, 56,179,217,204,161,190,119,125,121,194,163, 39, 43,250,245,139,120,191,107,215,112,105,120,120,184,184, - 73,204,211,169,139,168,168, 40,236,219,183,175,248,248,241,227, 5, 34, 62,187,193,171,142,151,171,217,204,129, 16,174, 90, 53, - 44,151,203, 63,153, 54,109,154, 36, 63, 63, 31,203,151, 47,231,130,130,130, 24,153, 76, 6,131,193,128, 13, 27, 54, 24,155, 52, -105,194,103, 24, 6,249,249,249, 96, 24,230,158,149, 25,188, 65, 8,233,242,125, 88,159,125, 45, 63, 30,225, 24, 16,246,186,178, -131,151, 7,140, 45, 40, 82, 18, 31,225,254,201,227,185,183,143, 45,205,134, 54,189, 15,165,244, 78, 77, 11, 80,173, 86,207, 58, -126,252,184,203,184,113,227,168, 86,171, 37, 79,158, 60,161, 11, 22, 44,112, 25, 53,106,212, 44, 0, 3,106,251, 60,229,229,229, -129, 16,194,149, 86, 90,203,168,159,212,224,198,222, 34,132, 28,232,221,187,119,207, 78,157, 58, 33, 38, 38,166,108,138,176,188, -208,178,172, 62, 92,184,112, 97, 30,128,169,207,226,229,243,249, 88,190,121, 15,242,114,179,224,234,170,134, 88, 34,169,117,196, -101, 33,195,204,254,122,238, 76,151,172,187, 23,201,173,223, 78,113,187,111,164,103,152,204,180,242,136,255,133, 41,180, 84,253, - 87, 63,154, 97,216,217, 95, 47,248,210,193, 50,173,249,227,181,212, 2, 98,166,227,158,235, 41,121, 85, 56,255,203, 80,171,213, - 72, 73, 73, 33,106,181,154, 90,166,245,170, 18, 90,127,171,224, 79,167,203, 72,117,211,134,181,229,143,143,143, 95,208,162, 69, -139, 73,177,177,177,187, 3, 2, 2,198, 0,168,163,211,233,242,166, 79,159,254,159, 13, 27, 54,188,111,141, 37, 11, 0,118,238, -220,185,116,196,136, 17, 71,187,119,239,254, 57,199,113,205,203,117, 34,241, 46, 46, 46,101, 83,184,153,233,105,145,163,223, 31, - 24, 89, 84,148,107,117,156, 59, 59, 59,187, 15,166, 79,159, 46,214,104, 52, 88,185,114, 37,215,164, 73, 19,198, 50, 40,218,186, -117,171,201,207,207,143, 23,241,209, 71, 89, 75,210,210, 48,239,220, 57, 77,100,211,166, 65, 27,239,223, 15,169,204,226,110, 25, - 56, 86,102,201,178,184, 93,212,178,115, 72, 33,132,140,250,105,193,163,117, 0,222,126,189,159, 27, 14, 44,122,132,220, 4,253, -127, 96,194, 67,107,182, 5,170,132, 51,137, 16,210, 37, 61, 61,253,192,204,153, 51, 29, 66, 66, 66,208,180,105, 83,190,157,157, - 93,168, 37, 92, 76,126,126, 62, 78,156, 56,129,213,171, 87,235,111,223,190,221,155, 82, 90,229,116,149,217,108,206,240,243,243, -179,148, 3, 37,132,100, 23,232,136,195,174,198,161,118,195, 71,239, 38,231,127,191,128, 20, 3, 7,157,145, 67,125,239, 96,116, -120,123, 9, 14, 30,185,105, 78, 73,184,115,199, 88,146,187,254, 21,239,191, 95, 74,184,133,151, 16, 22,226,133, 89,179,202,159, -255, 45,168,244, 9,229, 88,230,215,213,107, 86,189,179,115,199,143,110, 44,203,184, 61,140,139,251,189, 71,159,190,201, 63,255, -252,179, 74,224,224,208, 10, 0,167, 31, 51,230, 55,131,174, 36,231,208,129, 3,117,235,215,175, 23, 88,186,169, 52,229, 88,230, -215,234,126,176,168,168, 72,115,238,220,185,226,169, 83,167,146,196,196,196,237,174,174,174,253,143, 28, 57, 98,215,167, 79,159, -146,152,152,152,189,110,110,110, 61,195,194,194,228,147, 38, 77,210, 21, 21, 21,173,168,193,195,125,135, 16,210,248,242,204,197, -239, 93, 94,180,234, 77,240,216, 54,208,241, 1,206,248, 43, 12,133, 63, 3,216, 78, 41, 53,213,166,144,100, 50, 89,160, 84, 42, -197,245,235,215,115, 67, 67, 67,245, 90,173, 86, 48,127,254,124, 71,153, 76, 22,248, 28, 13, 28,205,205,205, 5,199,113, 60, 0, -164,244, 12,174,230,107,241, 7,244,232,209,227,192,174, 93,187,222, 10, 15, 15,135,143,143, 15,140, 70, 35,252,252,252,160,215, -235,225,235,235, 11,157, 78,135, 57,115,230, 32, 63, 63,127, 98,117,155, 21, 19, 66, 96, 50,153,202,156,109, 61, 60,235, 62,141, -211,243, 28, 97, 44,100,124,198,231,222,161,141,200,200,206,226,118,253,145,158, 94,108, 48,119,137,205,208,220,174,120, 93,177, - 25,154,176,225,227,147, 1, 64,199,161,218, 29,231,101, 66,248,220,143, 94,135,244,140, 44,236,188,150,154,167, 49,112,111,223, -171,132,179, 70,233,124, 69, 56,131,231,196,160,239,120,235,175,189, 54,186,246,191,101,173,160,170, 10,215, 82, 41,225, 86, 55, -166, 88,179,177,210, 24, 89,207,195, 95,106,169, 58, 80, 90,111, 19, 7, 14, 28, 24,249,232,209,163,185,165,241,178,214,212,132, -107,227,198,141,177, 0, 70, 84,119,205,143,139, 71,236, 7,176,191, 38,188,133,133,133,218,171, 87,175,106, 39, 77,154, 68, 18, - 19, 19,143,184,185,185,189,117,244,232, 81,105,159, 62,125,116,183,110,221, 58,169, 86,171,219,119,238,220,217,238,240,165, 75, -201,197, 15, 31, 30, 58,244,232,145,167,145,227, 14, 85,247,124,190, 72,145, 85, 81,108,237,159,247,232,235, 3, 95, 63,234,204, -233,176, 87,159,139,223, 0, 36, 61, 7,231, 89, 66, 72,192,224,193,131,119,117,235,214,237,245,128,128, 0,212,169, 83, 7,247, -239,223, 71,102,102, 38,110,220,184,129,168,168,168, 40,173, 86,251,204, 13,181,179,179,179,255,182, 61, 17,145, 56,170,127, 88, - 57, 59,234,247,243,173,252,218,133, 15,147, 52, 85,115,208, 27, 40, 18, 31, 63,196,156, 25,235,139, 83, 31,199,222, 49,152, 12, -189,255, 5, 49,180,206,198,197,197, 5,179, 44,251, 66,195, 45,212, 54, 44,132, 13, 47, 80,104,197,197, 37,222,241,241,241,154, -182,111,239,158, 54,148, 50, 44, 37, 68,163, 80, 40,163,158, 60,121,146, 87,254,186, 6, 42,149,124,196,168, 17,253, 9, 71,248, -132,112,102,142,101,126,141,139, 75,172,214, 98,164,215,235, 71,247,239,223,127,185, 84, 42,157,158,147,147,115, 93,161, 80,252, - 17, 24, 24, 56,151, 82, 58,163,164,164,228,128, 92, 46,191,244,250,235,175,207,175, 91,183,238, 82, 74,233,149, 26, 62,220, 38, - 60,245, 15,219,252,130, 77,185, 95, 82, 74, 29, 14,146, 20,204, 0, 0, 32, 0, 73, 68, 65, 84,120, 60, 94,254,205,155, 55,119, - 52,106,212,104, 32,165,212,129, 16,146, 95, 91, 78,173, 86, 59, 46, 47, 47,207,233,131, 15, 62, 48,174, 93,187,182,209,176, 97, -195, 34,111,223,190,205,215,106,181,113, 53,204,179,142, 16,210,179, 95,191,126,235,249,124,126, 39,134, 97, 8,199,113,180,220, -231,160,148,194,108, 54, 31,124, 86,185,152,205,230,228,198,141, 27,255,101, 4, 93,153,127,174,209,104, 76,182,186,179,209,155, - 39,172, 58,117,123,161,214, 72,169,137,163,163,239,165,107, 42, 93,114,118,249, 30,109, 98, 53,167,150,155,176,252,216,157,133, - 58, 35,199,153, 56, 58,166, 42,206, 26,117,138,175, 8, 39, 0, 68, 42,182,238,199,154,173,101,142,241,150,233,196,138,175, 95, - 36, 44, 86, 39,212, 48, 98, 51, 51,230,169,179,252,179, 4, 95,109,249, 43,138,174,154,162,111,223,190, 47,205, 31,197, 96, 48, -124,209,163, 71,143,185, 10,133,226, 63,153,153,153,215, 21, 10,197, 29,127,127,255, 9, 28,199, 45, 45, 46, 46,142,146,203,229, -221, 91,182,108, 57,177, 94,189,122, 63, 36, 80,250,195,179,158, 77,139, 85, 7, 0,181, 60,151, 22, 33, 81, 94, 80, 24,141,198, -164, 90,148, 97, 10, 33,228, 51, 0,245,241, 52, 0,239, 3, 74,233,115,149, 13,165, 52, 5, 64, 27, 66,136, 55,128, 78,120, 26, -191, 47, 15, 64, 60,128, 43,148,210, 27,181,230, 46,201, 78, 33,132,180,184,123,237,220,152,251,119,174,189,103, 89, 93,200,178, -194, 91,102, 67,241,102, 99, 73,238,250,127, 73,160,210,217,190,190,190, 14, 0,154, 3, 72,199,159,129,140, 19, 0, 44,123, 17, - 3,149,114,232,104,147, 68,207,165, 19, 62, 40, 63, 93,248,151,207, 94,102, 93, 36,132,116,126,209,251, 33,217, 56,109,156, 54, - 78, 27,167,141,211,198,105,227,252,247,113,190,234, 66,171, 18, 65,187,182, 74,139,150, 13, 54,216, 96,131, 13, 54,216, 96,131, - 13,214,163, 74,139, 22,128,206, 85,124,193,106,165, 90,155,213, 7,207,226,183,113,218, 56,109,156, 54, 78, 27,167,141,211,198, -249,239,227,252,255, 6,219,212,161,141,211,198,105,227,180,113,218, 56,109,156, 54,206,255, 57,231, 43, 45,166,108, 83,135, 54, -216, 96,131, 13, 54,216, 96,131, 13, 47, 7, 22, 81, 85,153, 83,188, 77,104,213, 92,181, 50, 0, 62, 4,208, 23, 64, 3, 0, 15, - 1,236, 1,240,125, 13,182,169, 40,207,103, 15, 32, 18, 64, 27, 60,221,189, 62, 30,192, 57, 0, 95, 81, 74,139,108, 37, 94, 57, -156,157,157,167,241,249,124, 5,240,116,107, 19,203,185,252,255,102,179, 57, 47, 63, 63,127,193, 75,170, 7,172,181,171,178, 44, -105, 45,159,182,242,103,163,209,248,210,210,105,195, 63,182, 29,241, 83,169, 84,219,114,114,114, 6, 81, 74,239,219, 74,196,134, -127, 19, 92, 92, 92,198, 24, 12,134,233, 2,129, 96,126, 70, 70,198,170,255, 71,207,117,165, 43, 15,203,132, 86,116,116,244, 25, - 0, 8, 15, 15,127, 3, 0,228,114,249, 5,134, 97,188, 75,191, 12,224,207,189,240, 42, 46,253,183,156, 57,142,139,207,206,206, -174, 50,128,154, 84, 42,189,192,178,172, 55, 33, 4, 12,195,148, 29, 70,163, 81,206,178,108, 97, 21,156, 73, 57, 57, 57, 33,255, -144, 66, 36, 0, 14, 41,149, 74,237,220,185,115,191,239,208,161,131, 87, 74, 74,138,105,202,148, 41,237,255,248,227,143,112, 66, -200, 59, 53, 17, 91,132,144,214,132,144, 31,130,130,130,246, 15, 29, 58,116, 87,104,104,168, 48, 59, 59, 91,190,103,207, 30,143, -205,155, 55, 95, 37,132, 12,170,105,136,139, 87,160, 34,242,170,138,103, 86,221,103, 21,193,231,243, 21, 73, 73, 73,242,210,145, -132, 69, 88,193,104, 52,194,104, 52, 66,163,209, 32, 48, 48,240,133,167,223,221,221, 61,152, 16,178,194,215,215, 55, 68,173, 86, -255, 14,224,163,148,148,148, 63,106,146, 86,147,201, 4, 74,105, 89, 58, 3, 2, 2,108, 45,115,205,234,208, 72,161, 80,248,182, -175,175,111, 43,157, 78,151, 27, 31, 31,127,217,108, 54,207,172, 46,232,101, 13,249, 29, 0,204, 20,137, 68,161, 13, 26, 52,240, -138,141,141, 77, 52, 24, 12,151, 0,124, 73, 41,205,127, 1,252,126,111,188,241,198,249,149, 43, 87, 58,142, 29, 59,246, 60, 33, -164,173, 77,108,217,240,191, 66,157, 58,117, 20, 26,141,102, 61,128, 96, 62,159,239, 38, 22,139, 33,145, 72,210, 68, 34,209,117, -137, 68,242,254,249,243,231,243,106,202,105, 54,155,103, 38, 36, 36,184,189,246,218,107,139,154, 54,109, 58, 39, 43, 43, 75,107, - 48, 24, 78,230,230,230, 78,164,148, 22, 84,247,221,138, 90,228, 85, 18, 89,229,207,165,237,253,159, 83,135,165,251, 10,117,248, -139, 2,227,241, 60, 19, 18, 18, 92,228,114, 57,204,102,115,153,181,192,210,169,149,247,237, 42,141,211, 4,127,127,127,195, 51, - 58, 28,175,164,164, 36, 23, 59, 59,187,178,247, 12, 6, 3,220,220,220,184,228,228,100, 23,177, 88,252,151,235,245,122, 61, 60, - 61, 61,255, 73,177, 80, 62, 84,169, 84,249, 79,158, 36, 6,106,117,134, 47, 71,141,155, 58,109, 80,223, 55,149, 23, 46, 92,224, -222,121,231, 29,221,153, 51,103, 62, 4,176,194,202,155,226, 64, 8,217, 60,101,202,148, 57, 98,169,189,227,169, 11,119,116,155, -247, 68, 39, 7,249,213, 39, 19, 39, 78,100,199,143, 31,127, 54, 56, 56,120, 27, 33,164, 69, 77, 44, 91,114,185,252,168, 72, 36, -170,199,178, 44, 12, 6,195,147,156,156,156,183,254, 65, 21, 49, 8,192, 53, 66, 72, 48,165,244,186,181,159, 85,135,236,236,108, -148,148,148,252,237, 8, 8, 8,192,139,246, 63, 36,132,240,188,188,188, 14, 44, 92,184,208, 35, 45, 53, 21,223, 46, 89,242, 26, -128,239, 1,188,102,205,247, 51, 50, 50,254,150, 78,127,127,127,216, 80,163,123, 16, 57,103,206,156,133,239,189,247, 30,204,102, - 51, 74, 74, 74,212, 15, 30, 60,104, 50,125,250,244,222,132,144, 86,148,210,184,231,228,119,246,245,245,141,153, 48, 97,130,170, - 85,171, 86, 40,221,165, 66,125,238,220,185,215, 54,108,216, 48,132, 16,226, 79, 41,205,124,158,223, 80,169, 84,219,214,173, 91, -231, 40,149, 74,113,240,224, 65,199, 78,157, 58,157, 35,132,180,171,173,216, 34,132, 48,142,142,142,227, 1,116,228, 56, 78, 8, -224, 82,110,110,238,188,218, 68,117,183,225,255, 23,156,156,156, 70, 22, 22, 22,174, 20,137, 68, 2,165, 82, 9,169, 84, 10, 30, -143, 7, 30,143, 87, 71, 36, 18,213, 17,137, 68, 93, 59,118,236,248,209,169, 83,167,170,141,176,255,122,176,219,112, 48,228, 75, -150, 48, 44, 0, 4,248, 58,218, 59, 56, 56,224,203, 47,191,148,245,236,217, 83, 6, 0,231,207,159, 31, 58,108,216,176, 78,132, -144,166, 85,137,173,202,180,200,171,130,170, 86, 28,254,197,162, 21, 30, 30,126,166,194,195, 11,137, 68,130, 93,187,118,129,101, -217,191,236, 26, 95,217,255,117,234,212,121,102, 66, 44, 22,177,168,168, 40,216,219,219,195,193,193,161,172,163, 17,137, 68, 56, -121,242, 36,248,124, 62,120, 60, 30,248,124, 62, 66, 66, 66, 80,205,134,246, 47, 5, 17, 77, 8, 5,128,221, 31, 63, 77, 87,196, -138,167, 65, 32,119,127,236,143,118, 13, 36,232, 59,126,118,255, 98,173,161, 37, 0, 77, 94,110,110,238,239,251,246,165, 4,249, -249, 9,182,109,219,214,202,195,195,163,175,181, 66, 11, 64,100,139, 22, 45,246,178, 18, 7,167,161,195,134, 15,125,159,199, 24, -134,140,158, 52, 63, 49, 53, 75,243,193, 7, 31,236, 59,120,240,224,208,175,191,254,250,238,228,201,147, 35, 1,124, 97,109,250, -133, 66, 97,189, 7, 15, 30,248,114, 28,135,102,205,154,253, 99,182, 49,176, 8, 41, 74, 41, 8, 33,127, 17, 84,213,125,246, 44, - 88, 44, 88,149, 29, 47, 26, 30, 30, 30,254,131, 7, 15,118,202,201,202,194,183, 75,150, 88,222, 14,121,214, 52,162,101,138, 80, -175,215,227,221,119,223, 29,108, 54,155,121, 22, 17,168,211,233,244,249,249,249,218,114, 43,123, 50, 41,165,111, 90, 81,158,222, - 50,153,236, 63, 0,130, 75, 74, 74, 60, 0, 64, 38,147, 37,115, 28,183, 95,163,209,124, 97,217,192,183, 22,247,201, 11, 64, 19, - 84,189, 21, 20, 93,184,112, 97,108,100,100,100,220,127,155,147, 16, 82,207,213,213,117, 65, 68, 68, 4,162,163,163,113,248,240, - 97,163, 68, 34,225, 13, 27, 54,140,124,244,209, 71,202, 9, 19, 38,116,197,115, 4,113, 44, 69,215, 57,115,230,168, 26, 55,110, -140, 61,123,246,224,198,141, 27, 37,190,190,190,146, 14, 29, 58,128,199,227,169,166, 77,155,246, 14,128, 31,158,231, 7,114,114, -114,230, 77,154, 52,105,243,142, 29, 59,228,241,241,241, 88,177, 98,133, 83,255,254,253,207, 16, 66,222,176, 86,108, 17, 66, 68, - 0,198, 3, 8, 99, 89,182,221,176, 97,195, 76,227,198,141,227, 51, 12, 99, 92,178,100,137,243,134, 13, 27,250, 59, 57, 57, 5, -103,101,101,217,220, 15,170, 1,203,178, 6,142,227,248, 0,196,148, 82,221,179, 94,255,155,242,238,232,232, 56, 54, 55, 55,247, -123, 55, 55, 55,184,186,186,254,173,175,213,233,116, 16,139,197, 2, 55, 55,183,117,189,122,245,226,255,244,211, 79, 85, 78, 1, - 18,150,204, 60,248,227, 92, 15,149, 82, 14, 0, 88,186,250, 88, 49, 0,252,244,211, 79, 72, 73, 73,129, 82,169, 68,211,166, 77, -217,185,115,231,186, 79,156, 56,241, 91, 0,239, 87,197, 85, 81,139,188, 74, 22,173,242, 98,171,252,235,106,125,180, 56,142, 43, -219,176,212, 34,168, 44, 34,168,226,255, 22,113, 86, 65,225,157,168,144, 16, 82, 84, 84, 84, 38,178,236,237,237, 81,218,185,194, -104, 52,254,141,215,108, 54,131, 16, 66,171,227,172, 34,195, 99, 1,156,164,148, 62,180, 82,137,150,113,238,254,216, 31,155, 69, - 83, 6, 90, 66,168,119,157,244,244,188, 25,192,133, 71,239,175, 88,249,198, 27, 30,227,103, 44,159, 93,146,157,146, 53,109,112, -247,122,190,110,142, 18, 89, 94, 70,190,170, 81,163, 46,120, 26, 81,217,218,116,182, 31, 58,116,232,150,227, 23, 19,136, 88, 44, - 16,240, 88,150,223,182,153,159,163,151, 3,235, 32, 7, 28, 18,227, 98, 47, 12, 31, 62,188,217,228,201,147,219,213, 36,239, 12, -195,192,222,222, 30, 91,182,108, 1, 99,197,222, 57, 47, 99,213, 72, 37,247,157,103, 17, 82, 57, 57, 57,136,142,142, 70,120,120, -248, 53, 66, 72,112,233, 37,215, 40,165, 40, 40, 40, 64,106,106, 42,220,221,221,175, 17, 66,248,229,167, 17, 43,114, 90,172,170, - 22, 81, 53,108,216,176,193, 38,147,137, 87,174,145,168, 40, 96,254, 38, 98,172,205,187, 90,173, 62, 14,224, 77,150,101,161,215, -106,245,255,249,230,155,242, 31, 95, 41, 47,178,170,226,180,164,213,108, 54,243,174, 93,187,198,183, 60, 51, 0,248, 0,100, 0, -156, 40,165, 96, 24,230,166, 21,229,233, 47,149, 74, 47, 68, 69, 69,217,135,132,132, 16,161, 80, 8,147,201,132, 91,183,110,121, -125,253,245,215,163, 79,156, 56,241, 14, 33, 36,160,226,230,233, 86,222,247, 38,231,206,157,211,248,248,248, 84, 42, 28, 11, 10, - 10,120,126,126,126,111, 0,136,251, 31,112, 38,165,167,167,247,122,243,205, 55,199,164,165,165,197,152, 76,166,207, 1, 52,117, -114,114,186,214,167, 79, 31, 72, 36,146, 48,107,132, 86,117,247,221,197,197,165,231,235,175,191,142, 21, 43, 86,224,235,175,191, -238, 76, 41, 61, 73, 8,233, 84, 80, 80,112,162, 71,143, 30, 80, 40, 20,189, 42, 19, 90,214,214, 37, 66,136, 95,251,246,237,215, -125,249,229,151,242,232,232,104,248,250,250,162,176,176, 16,159,125,246,153,203,172, 89,179, 78, 19, 66, 58, 88,196, 86, 85,156, -132,144, 0,145, 72,244,195,142, 29, 59,236,124,124,124,124, 4, 2, 1,227,227,227,131,156,156, 28,104,181, 90,209,252,249,243, -155, 73, 36,146, 63,150, 45, 91,246, 3,128, 62,255,237,231,189, 66, 90,243, 1,216, 3, 80,212,100,218,181,154,188,231, 3, 16, -149, 61, 60,124, 62,196, 98, 49,196, 98, 49, 68, 34, 17,238,221,187, 55, 67, 44, 22, 47, 41,223, 22, 87,199, 73,254,236,180, 2, - 9, 33,151, 89,150,173,246,117, 69,215,144,255,118,121,150,166,217,147, 16,178, 20, 64,216,211, 38,159, 57,227,228,228,244, 73, - 90, 90,218, 99,107, 57,213,106,181, 99, 81, 81,209, 50,119,119,119,184,186,186,150,245, 29, 30, 30, 30, 48, 26,141, 72, 79, 79, - 7,165, 20,121,121,121,144, 74,165, 80,171,213,203, 70,143, 30,189,103,205,154, 53,217,149,114,114,248,186, 71,255,233, 51, 89, -150,101, 0,128,229,217,217, 77,152, 10,212,171, 87, 15,109,219,182,133, 86,171, 69,126,126, 62,154, 52,105,194, 35,132, 12,101, - 24,198,158, 82,186,138, 82,122,234, 95,104,117,175,210, 25,126, 78,197,121, 81, 66, 8, 56,142, 3,143,199,251,139,208,170,120, - 88, 68, 81,105,125, 37,207, 50,113,235,245,250, 50,145,229,224,224, 80, 38,210, 76, 38, 83, 85, 66,171, 54, 74,189, 57,199,113, -222,132,144, 53,214,138,173,138, 24, 58,116,232,223,252, 61, 38, 78,156,152,148,145,145, 65,223,237, 18, 40,139, 57,146,146,218, - 64,105, 39,113,150,203,235,139,149, 42, 69,118,118,246,111, 0, 20, 53,248,137,134, 45, 90,180,144,108,222,119, 46,105,212,167, - 11,231,134,248, 56,218, 55,247,116, 82,186, 57, 72,132,118, 12,209,136, 77,198, 36,149, 74,229, 91,139, 17, 26, 0, 64,161, 80, -128,199,227,253, 35, 44, 90,148, 82, 19, 33, 36,152, 16,114, 45, 58, 58, 26,161,161,161,101, 98,203, 34, 66,242,243,243,113,235, -214, 45,180,111,223, 30, 0,130,173,241,213,226, 56, 14, 6,131, 1, 6,131,161, 76,192, 8, 4,130,191, 9, 24,203,181, 44,203, -222,172,101, 22,230, 42,149,202,246, 97, 97, 97,194, 31,119,237, 18, 82, 74, 53,120,186,241,117, 17,165, 85,108,144, 93, 1, 38, -147,169,204,202,198,231,243,241,228,201,147, 50,171,176,197, 50, 92,113,234,188, 42,136, 68,162, 73, 59,119,238,180,111,213,170, - 21,201,206,206, 6,199,113,101,141,228,247,223,127, 47,238,219,183,175,199,213,171, 87,167,161, 22,219,217, 0, 32, 85, 9, 34, - 0,176,183,183, 55, 1, 96, 94, 4,167,201,100, 34,109,218,180,153,156,149,149,213,172,164,164,100,190, 53,245, 8,192,193,210, -195,210,166,252, 17, 19, 19, 83,210,175, 95, 63, 73,253,250,245, 67,159,183,174,250,249,249,181,230,243,249,184,116,233,146, 14, -128,101,100,125,230,198,141, 27,186, 62,125,250,136,188,188,188, 90,215,160,193,245,243,247,247,255,217,197,197, 69, 98,177, 96, - 70, 68, 68,240,215,174, 93, 43, 79, 78, 78,134,193, 96, 64,100,100, 36,186,117,235, 6, 39, 39, 39, 76,156, 56,209,117,209,162, - 69,219, 0,180,168,134, 83, 44, 20, 10,183, 60,120,240,192,215,221,221, 93,114,241,226, 69, 52,111,222, 28, 89, 89, 89, 72, 75, - 75, 67, 81, 81, 17,210,210,210,240,254,251,239,187,124,251,237,183,234,127, 80,255,147, 39, 16, 8, 32,149, 74, 21,121,121,121, -207,227,231, 38, 2, 32, 44, 47,178, 68, 34, 17, 68, 34, 17,196, 98,241,115,237,203,250,138,116,226, 30,132,144, 59, 2,129, 64, - 36,149, 74, 5, 12,195, 64, 36, 18,117, 81,169, 84,183,223,122,235,173,166,199,143, 31, 79,176,134, 71,171,213,110, 17,137, 68, -124, 23, 23, 23, 0,128,175,175, 47,154, 55,111, 14,141, 70,195,229,231,231, 67,161, 80, 48,143, 31, 63, 70, 73, 73, 9, 82, 83, - 83, 81,183,110, 93, 62,195, 48, 91, 0,188, 83, 25,223,175, 87, 83, 87, 3, 88,109,121,237,236,236,156, 14, 64, 98,121, 45, 22, -139,225,225,225,129,228,228,100,200,229,114,118,214,172, 89,125,118,237,218,213,155, 16, 50,148, 82,186,181, 28,213,156, 87,213, - 71,203, 34,178,202,159,255, 34,180,194,195,195,103, 71, 71, 71,191, 81, 89, 71, 86, 58, 95, 91,165, 37,203,114, 88, 35,136, 8, - 33, 48,155,205,112,117,117,133, 84, 42,133, 84, 42, 5, 33,164,236,253,138,252,165, 35,252, 26,103, 86, 38,147,225,189,247,222, -163,171, 86,173, 26, 83, 42,182, 30, 88,251,221,136, 21, 49,101, 86,172,138, 8, 8, 8,184, 48,109,218,180,158,191,252,242, 75, -114,136, 79,125,158, 44,229,113,145,216, 94,161,128,103,157,240, 97,189,250,220,192,211,213,135,214,226, 65, 97, 97,161,164,129, -167, 84,207, 48, 90, 82, 71,196,147,187,203, 4, 34, 55,165,210, 67,160,215,101,216, 43,149, 66,157, 78,151, 7, 32,183, 58, 18, -123,123,251, 99, 34,145,168, 46,203,178, 96, 89, 22, 78, 78, 78, 14,148, 82, 40, 20, 10,120,122,122,218, 53,106,212,232, 62,143, -199, 3,195, 48, 40, 42, 42,122,252,232,209,163, 46,207, 74,152, 82,169, 60, 38, 18,137,234, 50, 12, 3, 66, 8, 88,150, 45, 91, -184, 96,249,159,101, 89, 16, 66, 80, 92, 92,108, 21, 39,165,244, 58, 33, 36, 56, 60, 60,188, 76,108, 29, 57,114, 4,111,191,253, - 54,242,242,242,112,251,246,237,242, 34,203,170,105,195,242,206,239,148, 82, 8, 4, 2,220,187,119,239, 47, 83,218,150, 67, 46, -151,215,250,225, 81,169, 84,231, 35, 34, 34,176,110,221, 58, 74, 41, 37, 0,100,132,144,230, 14, 14, 14,247,238,220,185, 99,149, - 31, 12,165, 20, 6,195,159,151, 90,234,120,249,231,171, 6, 98,186, 75,139, 22, 45, 72,126,126,190, 69, 64,150, 13,136, 88,150, -197,202,149, 43, 37,173, 90,181,154, 46, 22,139, 39, 11, 4,130, 2,163,209,248,163, 86,171,157, 79, 41,205,251, 39, 53, 74,237, -218,181,251, 52, 49, 49,177, 91,221,186,117,163,158, 67,196,211,150, 45, 91,234, 1, 72, 88,150,229,191,128,134,146, 45,173, 91, - 90,139,216,167,148,154, 90,180,104,161, 45,237,228, 89,107,185,156,156,156,182, 29, 62,124,216,179,110,221,186, 48, 26,141, 48, -153, 76, 40, 42, 42,194,153, 51,103,160,211,233, 96, 50,153,224,235,235,139,153, 51,103,106, 63,249,228, 19,241,154, 53,107, 50, -138,138,138, 6, 61,131,246,147, 61,123,246,200,220,221,221, 37, 37, 37, 37,136,139,139, 67,139, 22, 45, 80, 88, 88, 8,141, 70, -131,226,226, 98, 24, 12, 6, 20, 20, 20, 40,204,102,179,254,159,114,175,121, 60, 30, 68, 34, 17, 4, 2, 65, 94,221,186,117, 65, - 8, 17, 39, 36, 36,212,102, 42,206, 30, 64, 1,159,207, 23,150, 23, 88, 34,145, 8,151, 46, 93,154, 38, 20, 10, 43,181,102, 85, - 87,127,106,242,250, 31,208,145, 47, 21, 8, 4, 34,149, 74, 37, 40,215, 79, 11,236,236,236,224,226,226,178, 2, 64, 87, 43,243, - 29,164, 82,169,202,218,247,192,192, 64, 36, 38, 38,238,207,207,207, 31,146,145,145, 1,134, 97,182, 48, 12,211,219,162, 3,114, -115,115,225,229,229, 21, 84, 21, 95,155, 22,238, 99, 64,104,153, 69, 43,160,161,202,174, 66, 63, 5,123,123,123, 60,122,244, 8, - 26,141,134,198,198,198,146,177, 99,199, 18,189, 94,191,137, 16,242, 27,165, 52,190, 58, 45,242, 42,160, 86, 62, 90,150, 2,174, - 74, 88, 85, 20, 94,214, 8, 34,189, 94,111,215,162, 69, 11,206,210,129, 91, 14, 0,164, 42,161, 85,106, 57,168, 49,248,124,190, -124,236,216,177,133,171, 86,173, 26, 77, 8, 89, 75, 41,141,173,109, 1, 70,237,221,225,250,245,204,200,153, 42,117,253, 6,147, - 39,207,224,117,239,222,253,226,230,205,155,205,170,198, 93, 59,157, 58,182,213,117,217,103, 83,142, 28, 62,124, 24,120,234, 24, -109, 45,206, 31, 58,116,200,109,226,248,143, 48,115,210, 39, 71,237,125,157,132,118, 68, 37, 19,235, 52,153,118,160, 37,162,134, -254,221,246, 69, 69,165, 2,184, 90, 29,137, 68, 34,169, 27, 27, 27,235, 91, 94, 72, 24, 12, 6, 40, 20, 10,108,222,188,217, 89, - 46,151, 59,219,217,217,129,199,227,161,121,243,230,214, 90, 76,234,222,191,127,223, 87, 46,151,163,184,184, 24, 58,157, 14, 70, -163, 17, 28,199,129, 16, 2, 62,159, 15,161, 80, 8,153, 76, 86,163,149,125,229,197,214,145, 35, 71,208,164, 73, 19,228,230,230, - 34, 38, 38,166,198, 34,171,188,149,168,188, 63, 22,143,199,195, 54, 31, 31,140, 74, 73, 41, 19, 48, 75, 29, 28, 48,147,227,106, -117,239,155, 53,107, 70,127,253,245, 87, 28, 61,122, 20, 61,122,244, 32, 7, 14, 28, 48,152,205,102, 65,114,114,178,213,214, 49, -142,227,202,210,106,105,183,203, 11,172,154, 10, 45,147,201, 36, 23, 10,133,208,106,181,101, 83,251,229, 15,111,111,111,228,228, -228,240, 10, 10, 10,120, 41, 41, 41,210,121,243,230,141, 59,125,250,180, 59,128,129,255,203,134,104,213,170, 85,117, 71,141, 26, -245,132,199,227,209,183,223,126,123,240,227,199,143,123,185,187,187,159,252,229,151, 95,190, 1,224, 87, 83, 62,103,103,231, 43, - 60, 30,207,211,206,206, 78,176,123,247,110, 99, 97, 97,161,192,197,197, 37,221, 34,108, 45,101,109, 52, 26,147,242,243,243, 67, -172,225,115,118,118, 22,124,247,221,119,198,236,236,108,129,155,155, 91,186,133, 71, 38,251,191,246,190, 60, 46,170,178,125,255, -122,206,153,149,217, 24,214, 1, 4,193, 13,113, 55,220, 3, 21,211,212,164,222,212, 76, 95, 77,211, 80,204,236, 87,154,169,245, - 85,223,220, 73,211, 52, 51, 83, 94,247, 50,211,108, 51, 51,115, 9,114, 41, 53,169, 20,196, 5, 18,217,215, 97,103,152,237,204, -249,253,193,204, 52,224,192,204,224,160,216, 59,247,231,115, 62,156,153, 51, 92,231,217,159,235,185,159,251,185,111, 49,239,240, -225,195,186,138,138, 10,158, 92, 46,255,173,172,172,204, 38, 94,113,113,241, 11, 47,190,248,226,217,211,167, 79,123,211, 52,141, -187,119,239,162,164,164, 4,114,185, 28,251,247,239, 71,112,112, 48,190,248,226, 11,165, 82,169,156,249,222,123,239, 45,173,170, -170,178,199,213,195,144, 1, 3, 6, 4,151,149,149, 65, 46,151,163,186,186, 26,191,253,246, 27,186,117,235,134,220,220, 92, 80, - 20, 5,185, 92,142,109,219,182,213, 16, 66,148,173, 97, 2,162,105,218,172,117,178, 32, 71,181,131, 6, 13, 66, 66, 66,194, 34, - 71,200, 17,203,178, 26, 46,151, 91,143, 96, 89,220,235, 29, 77, 27,195, 48, 60,163,141, 40,177,231,115, 43,144,161,110,110,110, -188,134, 95,214,212,212,240,252,253,253, 7, 59, 64,124,189,220,220,234, 20, 78,193,193,193, 40, 47, 47,103, 52, 26,205,164,253, -251,247,235, 0,160, 79,159, 62,147, 24,134,169,213,235,245, 52,159,207, 71,117,117, 53,124,125,125,189, 26, 5,164,176,248,219, -131,171,253, 26,218,104,249,251,251, 35, 60, 60, 28,106,181, 26,121,121,121, 72, 76, 76,212, 49, 12,115,224,227,143, 63, 54,248, -248,248,188,244,220,115,207,209, 87,174, 92,121, 21,192,252,166,184,200,163,162,205,106,140,108,153, 78, 29, 14, 5,144, 0, 32, -202,148, 73,203,173,195,166, 52, 89, 13, 52, 90,196, 70,135, 43,203,206,206, 22,139,197, 98,243,119, 58,157, 14, 1, 1, 1, 6, -131,193, 64, 26,190,199,148,142,230, 10,151,203,149,190,253,246,219,101,219,182,109,155, 6, 59, 13,202, 15,191,218, 5,251, 26, -144,172,237,235, 86,110,253,112,221,106,207,180, 31,246, 96,231,150, 13, 12,195,224, 74,207,158, 61, 7, 87, 85, 85,113,220,197, - 58, 20,151,225, 56,234,252,104,177,118, 86, 8, 5, 96,247,165, 75,151,174,140, 25, 51,230,252,238,207,191,244,204, 77, 79,255, - 69, 80, 81,156, 39,235, 20,202,225,181, 9, 30, 87, 89, 91,203,155, 52,105,146, 15,128,231,154,194,162, 40, 10,233,233,233,200, -200,200,128, 68, 34,129, 84, 42,133, 68, 34,129, 76, 38,131, 84, 42,133, 84, 42,117,184, 12, 41,138, 2,195, 48, 56,114,228, 8, - 68, 34, 17,196, 98,113,189,203, 68,178,238,167,110, 70,143, 30, 13,165, 82, 9,137, 68, 98,222,238,116, 68, 76, 54, 90, 26,141, - 6, 26,141, 6, 90,173,150, 1,192,229,112, 56,136,201,206, 54,107,121, 28, 33, 48, 13,165, 87,175, 94,236, 47,191,252,130,243, -231,207,163,186,186, 26, 31,126,248, 33,252,253,253,159, 0,176,204, 81, 44, 11, 35,125,166,162,162,130, 91, 81, 81, 97,214, 14, -114,185, 92,179,198,208,222,201,129,195,225,152, 87,163,166,203, 82,171, 69,211, 52, 20, 10, 5,252,252,252,176,125,251,118, 94, -187,118,237,158,126,152,131,208,250,245,235, 59,109,222,188,121,215,190,125,251,142,191,240,194, 11,135,174, 93,187, 54,195,221, -221,253,234,153, 51,103, 86, 11, 4, 2, 67, 51,251,119, 96,110,110,174,175,229, 87, 6,131, 65,164,215,235,205,196,182,166,166, - 6, 61,122,244,176, 27, 47, 37, 37, 69, 4, 0,171, 87,175,230, 2, 16,153,220,134,152, 48,107,106,106,184,221,186,117, 11,180, -147, 20,220, 36,132, 12, 30, 49, 98,196,133,147, 39, 79,122, 4, 7, 7, 35, 39, 39, 7, 57, 57, 57,232,212,169, 19,214,174, 93, - 91, 93, 81, 81, 17, 97, 36, 87,223,216,153,237, 0, 15, 15, 15,110,102,102, 38,244,122, 61, 30,123,236, 49,108,219,182, 13,147, - 38, 77, 66,143, 30, 61, 80, 81, 81,129,148,148, 20,236,221,187,215,131,199,227, 61,247,176, 39, 31,227,214, 86,163, 87,115, 68, -175,215,203,132, 66, 97,133, 64, 32,224,155,236,179, 18, 19, 19, 29,214,102, 89, 46, 0, 29,249,220, 26, 72,107, 67,225,243,249, -240,243,243,179, 27, 71, 32, 16, 16,211,216,168,215,235, 81, 94, 94,206,248,251,251,155,183,247,147,146,146,152,144,144, 16,134, -166,105,154,207,231,131, 16, 2,145, 72,212,232,128,207, 50,236,202,103, 38, 45, 51,159, 58,164,184, 98,217,188,183,235, 22,253, - 73, 73, 73,208,106,181, 72, 76, 76,212,189,247,222,123,185,101,101,101,243, 0,112, 78,156, 56,241,226,162, 69,139,104, 95, 95, - 95,179, 29,173, 53, 46,242,168,145, 45,107, 90, 46,211, 44,148, 16, 29, 29, 77,140, 71, 43,137,137,224,176, 44,123, 15,185,106, -140,120, 25, 39, 9, 98,171,211,209, 52,141, 31,126,248,193, 76, 8, 76,167, 14, 89,150,133,179,137,150,151,151, 87,245,128, 1, - 3,100, 89, 89, 89,159, 53, 87,147,181,125,221,202,173,113,171,222,241, 84, 94,255, 21,217,185,121, 80, 22,234,174,156,187,122, -231, 43, 0, 95, 1, 0,118,116, 77,192,236,235, 31,217,139,217,213, 71,212,187,103,128,244,171, 39,199, 60, 29, 52, 49,118, 62, -245,202, 43,175, 68,190,248,226,139,229, 47,188,240,194,107, 18,137,164,179, 86,171, 45,253,242,216,177,140,137, 19, 39,182, 99, - 24,230, 69, 91, 62, 71,116, 58,221,221,241,227,199,155,203,214,207,207, 79,118,240,224, 65,133, 84, 42,197,212,169, 83,139, 50, - 50, 50,204,219, 69,149,149,149,119,237, 73,163, 86,171,189,219,187,119,239, 70,183, 11, 77, 26, 73, 71, 48,141,117,105, 62, 93, - 88, 82, 82,130, 27, 55,110,128,195,225, 96,224,192,129, 56,119,238, 28, 34, 35, 35, 29, 58,113, 88, 91, 91,139,224,224, 96,212, -214,214,162,186,186,186, 6,128, 96,127,187,118, 0,128, 87, 75, 74,240,219,123,239,225,215,184,184,102,181,163,222,189,123,179, - 23, 47, 94,196,213,171, 87,161, 86,171, 49,115,230, 76, 24,183, 13, 1, 96,164, 3,121,238,224,231,231, 55,122,204,152, 49, 1, - 0, 80, 93, 93, 77, 46, 93,186, 4,161, 80, 8, 66, 8,242,242,242,112,244,232, 81,228,228,228,128, 16, 2, 15, 15,143, 64, 66, - 72, 59,150,101,239, 52, 49, 49,144, 59,119,238,224,221,119,223,133,193, 96,192,162, 69,139, 16, 26, 26,106, 38, 88,119,239,222, -197,234,213,171,193, 48, 12,222,121,231, 29,116,234,212, 9, 58,157, 78,232,136,159, 50,103,203, 27,111,188,145,246,213, 87, 95, - 29,207,202,202,122,106,221,186,117, 67, 9, 33,134,133, 11, 23,190, 43,147,201,152,251,193, 45, 45,175,196,141,219,119,205, 68, -168,225,229,227,237,233, 48,222,173,244, 44,243,255, 51,140, 37, 30, 3, 47, 79, 15, 71,147, 88,163,211,233,170,199,141, 27, 39, - 63,114,228, 8,233,212,169, 19,254,250,235, 47,211,226,180,166, 25, 46, 29,114,148, 74,101, 40, 77,211,188,219,183,111, 35, 36, - 36, 4, 3, 6, 12,192,154, 53,107, 80, 92, 92, 12,189, 94, 15, 95, 95, 95,131, 78,167, 75,210,104, 52, 63, 63,236,137,199, 82, -235,100,121, 37, 38, 38, 46,226,243,249, 44,128,139, 0, 28, 34,218, 44,203,106,218,182,109,219, 16, 91,143, 86, 34, 45,121,146, -209,223,223, 63, 81, 42,149, 62, 93, 90, 90, 90, 79,171, 21, 17, 17,161, 85, 40, 20,103,237,197,145, 72, 36,165, 52, 77,123, 1, - 64, 78, 78, 14,196, 98, 49, 47, 61, 61, 61,142, 16,242, 22, 0,180,107,215, 46, 78,169, 84,242,218, 25,199, 83, 63, 63, 63,104, - 52,154, 70,205, 88, 46, 36,229,239, 1,176,199, 98,238,205, 43, 47, 47,119,219,176, 97, 67, 85, 92, 92,156,138, 97, 24, 53,128, - 51,101,101,101,102, 63, 90, 33, 33, 33,229, 92, 46,215, 83, 46,151,183,177,128,186,135,139, 60, 74,210,164, 70,203,200, 36, 89, - 43,255,100, 85,147,101,141,108,217,163,149, 32,132, 64,165, 82,213,211,142,152, 78, 29, 90, 35, 90,198, 9,189, 89, 91,135, 70, -146,229,118,240,224,193, 3, 91,182,108, 57,111,239,255, 89,218,104,237,216,184,106,157,137,100,253,121,254, 36,190, 73, 45, 47, - 94, 20,183,105,115,115, 43,161,155,143,184,151,159,194, 59,225,189,181, 43,101,105, 63,236,197,161, 29,239,179,127, 94,190,220, -255,242,229,203,211,230,206,157,219,214,216,176,148, 0,254, 0, 48,209,158, 83, 58, 69, 69, 69,245,236,163, 66, 67, 67,111,202, -229,114,133, 80, 40, 68,122,122,122, 85,114,114,178,195, 91, 50, 13, 49,157,196,244,235,145,172,228,228,100, 12, 27, 54, 12, 0, -112,238,220, 57, 68, 68, 68, 56, 68,182,116, 58, 93, 89,215,174, 93,205,218,173,242,242,114, 3, 0,196,230,229, 33,222,223, 31, - 28, 14, 7,191,198,197, 97,137, 78,135, 53, 92,199, 76,119, 30,123,236, 49,246,242,229,203,200,200,200,128, 94,175,199,179,207, - 62,107, 73,178, 28,201,115,143, 46, 93,186,156, 58,115,230,140,143, 68, 34, 65,117,117, 53,170,170,170, 48,125,250,116, 76,154, - 52, 9,106,181, 26,135, 15, 31,198,183,223,126, 11,169, 84,138,234,234,106, 84, 87, 87,123, 68, 71, 71, 95, 32,132, 12,105,204, -182,144,101, 89,118,212,168, 81, 56,123,246, 44,104,154, 70,255,254,253, 81, 82, 98, 62, 12, 4,133, 66, 97,237, 25,109,236,239, - 15,101, 66,226,112, 56,108, 98, 98,226,186,161, 67,135, 34, 43, 43,235,169, 62,125,250,124, 56, 99,198,140,156,251,197,245,112, -151,162,119,183, 14, 80,171,213, 80,171,213, 8, 8, 8, 64,101,101, 37,210,210,210,160, 86,171,161,240,149, 59,140, 23,222,163, -147, 25,207,215,215, 23,213,213,213,184,115,231, 14, 52, 26, 13,188,189, 61, 28,169,255,160, 81,163, 70,253,116,224,192, 1,175, -189,123,247,106,162,162,162,248, 31,126,248, 33,145,201,100, 40, 44, 44,108,110,150, 19,207,157, 59, 23, 60, 98,196,136,176,235, -215,175, 35, 49, 49, 17, 26,141, 6,225,225,225,184,117,235, 22, 6, 13, 26,132,170,170,170,139,151, 47, 95,254,182, 53, 76, 60, -166,109, 61, 11,205,211, 18,185, 92,174, 5,176,249,126,218, 98,102,102,166,160, 87,175, 94,106,161, 80,200, 55,146,182, 77, 15, -171,109, 91,169,247,251, 58,201,216,148,248,249,249,205,243,246,246, 30,209,190,125,123, 20, 20, 20,240,248,124, 62, 34, 34, 34, -180,253,250,245,211,250,249,249,189,234, 64,189, 92,231,241,120, 67,234, 22, 19, 12, 50, 51, 51,193,178,236,162, 30, 61,122,188, - 94, 89, 89,137,146,146, 18,190, 76, 38, 51, 47,170,195,194,194,160, 86,171,175, 59, 64, 54, 87,134,132,132, 44,229,241,120,107, -138,138,138, 62,182, 82, 70,252,222,189,123,203,120, 60, 30,180, 90,109, 61,178,105,141,139, 60,202, 36,171, 30,209,178, 96,145, - 13,213,233, 54,183, 13,237,181,209, 34,132, 64,163,209, 64, 44, 22,155,183,164, 44, 61,193, 91, 35, 90,205,145,160,160, 32, 12, - 24, 48,192,237,208,161, 67,159,110,216,176,225, 66,115, 48,190, 56,240,137,191,187,161, 38, 40,247,226,247,184,121,245, 10,190, - 74, 41, 43, 94, 20,183,233,181,103,158,155, 92,208,144,152, 29,158,109, 27,175,179,175,184, 71, 27,133, 87,194,198,245,113, 50, -229,245, 95,145,151,159,143,239, 47, 94,190,162, 97,217, 20, 0,139,156, 85,217,150,167,215,154, 75, 82, 91, 96,224, 49,187,119, - 40, 46, 46, 70, 74, 74,138,137,100,133, 3, 64,100,100,100,146,137,108, 93,185,114, 5,125,250,244,185,199,189,195, 61,154,135, -210,210,181, 13,222, 49, 2,128,183,137,240,115, 56, 28, 68, 44, 93,234, 48,201, 34,132,176, 12,195, 64,169, 84,154, 86,138,205, - 34, 89,198, 65,241,205, 51,103,206,248,236,222,189,187, 98,223,190,125, 37, 6,131,129,219,187,119,239,192,190,125,251,146,253, -251,247, 3, 0, 38, 78,156,136, 69,139, 22, 33, 57, 57, 25, 98,177, 24,145,145,145,204,242,229,203,125,231,205,155,247, 42,234, -252, 36,221, 35, 12,195,240,218,181,107,119, 26,192, 19,215,175, 95, 7,128, 11, 44,203, 70,152,158, 55,245,204, 14, 49, 84, 86, - 86,114,165, 82,169, 85,215, 16,188,186, 99,157,142,110,245,153, 49,207,159, 63,255,238,198,141, 27,191, 90,176, 96,193,237,251, -196,180,170,209,122,250,233,167,161, 82,107,145, 93, 80, 14,134,209, 67,165, 45,116, 24,207, 82,163,245,244,211, 79,163,166, 86, -131,204, 60, 37,244,122, 6,149, 42,189,189,237, 72,244,228,147, 79,158, 56,120,240,160,223, 47,191,252, 2,134, 97, 12,183,110, -221,186, 51,110,220, 56,217,194,133, 11,189, 44,108, 80, 29,149, 45,147, 39, 79,158,112,254,252,121,101, 88, 88,152,231,197,139, - 23, 81, 88, 88, 8,189, 94,143, 39,158,120, 2,124, 62, 63, 51, 46, 46,142, 7, 96, 75,107, 33, 90, 2,129, 0,151, 46, 93,114, - 10,193,178, 20, 62,159,223,236,237,199, 71, 85, 46, 94,188,152, 51,119,238,220,110, 50,153,108,243,224,193,131,135,121,121,121, - 81, 30, 30, 30,137,109,218,180,121,189, 87,175, 94,118,239, 46,112,185,220, 25, 98,177, 56, 77,175,215,211, 85, 85, 85,168,174, -174, 6, 0,232,245,122, 62, 69, 81,104,215,174,157, 89,121,210,191,127,127,248,249,249, 49,169,169,169, 51,236,197, 47, 44, 44, -172,119, 10,209,138,204,142,136,136,224,168,213,106,100,100,100,156,179,124,208, 24, 23,105,237,210,172,160,210, 20, 69,129,101, - 89, 8,251,246, 69,222,201,147, 56,114,228, 72,147, 47,217,177, 99, 7, 26,170,250, 26, 70,247, 54,157, 46,156, 53,107,150,249, - 55, 87,174, 92, 49, 27,197, 63,251,236,179,245, 48, 47, 93,186,116, 15,217,178, 39, 98,120, 97, 97,225,245,195,135, 15, 95, 94, -191,126,253, 69, 59, 11,200,140,105,178,209,154, 48,101,106,222,214,119,255,115,109,223,209, 51, 61,242, 84,108,222,162,184, 77, - 11, 26,146, 44,123, 49,187,250, 73,186, 6,250,122, 37,110, 88, 31,231,110,210,142, 29, 76,202, 47,135,158,157,237, 96, 69,218, -204,187,165,102,145, 16, 98,112, 6,102, 51, 26, 92, 61, 76, 75,247, 14,121,121,121,102,146,101,225,176, 52, 60, 50, 50, 50,201, - 72,178, 76,207,244,205, 73, 39,135,195,193,130,170, 42,112, 56, 28, 68,173, 88,129, 39, 86,173,114, 56,239, 12,195,128,195,225, - 32, 52, 52,212, 97,146,101,137, 73, 8,137,168,169,169,193,222,189,123, 43,111,223,190,221,161,125,251,246,243,246,236,217,179, - 73, 36, 18,213,251,159,154,154, 26, 60,243,204, 51,248,248,227,143, 49,106,212, 40,221,140, 25, 51, 4, 20, 69,141,104, 42,157, - 25, 25, 25,179,135, 15, 31,190,163,182,182,150, 83, 82, 82, 50,219,222,103,182,242,126,248,240,225,219,161,161,161, 67,209,184, - 11, 7, 3,128, 95,238, 7,115,243,230,205, 0, 16,118, 63,152,141,105,180, 62,255,252,115, 24, 12, 6, 4,249,201,161, 86,171, -209,176,172,109, 97, 54,212,104, 29, 58,116, 8, 6,131, 1,109,253, 61,161,209,104, 96, 50, 32,182,133,233,229,229,245,254,190, -125,251, 2, 83, 83, 83,145,157,157,141, 77,155, 54,221, 45, 43, 43, 27, 83, 86, 86, 38, 88,190,124,121,194,148, 41, 83, 20, 6, -131, 65,237,104,223,100, 89, 86, 77, 8,153,241,248,227,143,239, 95,189,122,245, 95, 93,186,116,105, 27, 17, 17, 33, 47, 41, 41, - 41,250,253,247,223,239,236,216,177, 67,162,215,235,103, 52,182, 37,245, 32,250,187,165,228,228,228,172, 48,106, 83, 29, 34, 88, -246,164,243,210,165, 75,111, 27,177, 47,219,131,253,160,242,126,191, 39, 25,109,165,243,163,143, 62,202, 70, 3,255,104,142,166, -243,210,165, 75, 25, 35, 70,140, 88,165, 80, 40,150, 11,133, 66, 20, 21,213, 5, 59, 48,105, 30, 77,243,117,223,190,125, 49,106, -212, 40,220,188,121,115,213,210,165, 75, 51,238,167, 60,141, 11,238, 14, 0,166, 13, 31, 62,124,225,132, 9, 19,240,209, 71, 31, -129,101,217, 93,255, 4, 18,108, 51,168,116,116,116, 52,177,252, 11, 0, 58,157, 46, 43, 45, 45,205,191, 83,105, 41, 29, 64, 8, -250,247,239, 15,203, 24,133, 38,187, 29,147, 65,221,207, 63,255,172, 55, 24, 12, 77,250,172, 98, 24, 38,235,252,249,243,138,147, - 39, 79,114, 77, 21,106, 52,234, 52,228,230,230, 82, 9, 9, 9,102,237, 24,135,195, 65, 98, 98, 81,136,152,192, 0, 0, 32, 0, - 73, 68, 65, 84,162, 94,171,213,102, 58,154,225,155, 55,111, 58,101, 53,247,115,114,198,235, 39,190,255,218,123,224,128,193,101, - 50, 79, 79,171, 29,217,228, 65,190,201, 6,198,161,214,172, 91,187, 82,110, 34, 89,159, 39,229,151,213,170,153, 97,215,139,106, -254,116,118,101, 87, 86, 86,102,152, 78, 23, 86, 85, 85,101,182,162, 70,248, 59, 33, 36,220,223,223, 63, 9, 13, 78, 23,154,158, -245,233,211,231,158,103, 14,169, 77, 12, 6,184,187,187,155, 7, 9, 71,237,178, 8, 33,172,105, 43,219,152, 46,114,159,121, 62, -127,237,218,181,144,233,211,167, 75, 67, 67, 67,211, 9, 33,220,152,152, 24,173,159,159, 31,239,220,185,115, 58, 0,100,232,208, -161,156,252,252,124, 54, 39, 39, 71,249,175,127,253,171,114,214,172, 89, 94,127,252,241, 7,223, 96, 48,156,178,129,253, 23,128, -225,142, 62,179, 37, 19, 38, 76, 72,135, 21,199,161,247, 35, 45,129,105, 18,101, 89, 5,210, 51,114,140,177, 46, 13, 96,238, 22, -152,237,170,116, 58, 61,148, 21, 37, 14,107,180,210,238,228, 24, 67,142, 49, 96,152, 92, 35, 94,157, 65, 60, 91, 90, 99,143,182, - 32,114,243,230,205, 99, 40,138,162,126,253,245, 87,245,250,245,235,179,138,138,138,158,101, 89, 54,211,216,206,162,246,238,221, -251,169, 29,174, 28, 26,171,251, 20, 66,200,160,197,139, 23,191, 6, 32, 18, 64, 91, 0,153, 0,206, 1,216,210,202, 60,152,111, -122, 68,177,155, 45,143,202, 73,198, 83,167, 78,173, 24, 59,118, 44, 39, 56, 56,248,255,130,131,131,169,210,210, 82, 84, 85, 85, -129,162, 40,248,249,249,161,123,247,238,240,243,243, 51, 92,191,126,125,237,226,197,139,109,250,228,235,214,173, 91, 7,157, 78, -215,145,162,168, 14, 0, 58,176, 44,219,129, 16,210, 1,128,167, 81, 51, 38, 11, 9, 9,225, 12, 28, 56, 16, 3, 6, 12, 64, 66, - 66, 2,190,248,226,139, 61, 44,203,158,176,212,102, 53,228, 34,173, 65, 82,250,146,161,196,128, 4,150, 66, 84,183,223,216,196, -235,225,132,237,154,116,239,252, 96, 51,168,244, 61, 3, 78,105,233,168, 49, 99,198,156,164,105,186,157,181,137,203, 74,240,231, -140,130,130,130,167,154, 28,196, 74, 75, 71,189,254,250,235, 39,105,154,110,103,210, 84,233,245,122,181, 82,169,124, 37, 42, 42, -106, 27,151,203, 21, 88,226, 26, 12,134,187, 5, 5, 5, 15, 52, 86, 95, 67, 63, 90,163,198,140, 45,190, 95, 76, 9,143,234,120, -243,216,127, 81, 80, 88,140,207,147,242, 75, 43, 53, 76,212,205,162,234,107, 45,145,254,140,140,140,209,173,152,241,255,222,216, -150, 96, 83,207,236,148, 34, 59, 28,146, 22,217, 72, 31, 49,146, 45,167,116,242,252,252,252, 13, 75,151, 46, 29,185,118,237, 90, -159,227,199,143,203,140,239,192,248,241,227, 11,175, 93,187, 54, 24,128,160,182,182,246,212,218,181,107,125, 86,174, 92,233, 5, -192,203, 56,200, 20, 20, 20, 20,108,133, 75,154, 20,157, 78,151,221,189,107,152,169,238,234,185,116,176,188,215,235,245,217,142, -224, 89,195,177,252,204, 48, 76,182, 13,173,242,130, 1, 3, 6,208, 11, 22, 44, 40, 56,126,252,184, 41,144,110,141, 69, 59,187, -137, 38,156,146,218,217,151,212, 0,214, 27, 47,151,180,194,177,206,145,207, 15, 75,190,254,250,235,101,147, 38, 77,218,235,233, -233,249, 73,135, 14, 29,194, 20, 10,133,204,205,205, 13,106,181,186, 82,163,209,220,184,121,243,230, 11, 75,151, 46,253,203, 30, -172,189,123,247,210, 0,120, 6,131, 65, 72, 81,148, 24,128,140, 16,226, 97, 34, 90,132, 16,104,181, 90,100,100,100, 96,201,146, - 37,204,233,211,167,223, 3,240,142, 3,201,237, 7,192,199, 98, 28,247, 1,160, 65,157, 3,219, 34,163,102,179, 69,132, 24,144, -208, 53,137, 37,215,195, 73,163, 70,250, 54,131, 74, 55,210, 80,170, 1, 12,114,114,227,107, 10, 51,184,181,116,146, 23,213,235, - 63,195,142,245,245,226, 28,154, 72,152,213,207, 54, 54, 0,203, 85,250,185, 91, 78, 36,111, 80,235, 89,131, 86,111,120,233,102, - 97,117,202,255,240, 0,164,111,206, 51, 59,112,159,116, 82,250,136, 19,243,122,141, 16,242,248,220,185,115,151,137, 68,162,254, - 0, 80, 83, 83,243,107,110,110,238, 42,211,169, 66, 91,207, 93,210, 4,107, 46, 42,234,219, 26,241, 52, 26,205,235,143, 63,254, -248, 7, 12,195,108,212,233,116,231, 92, 53,229,146,214, 44,159,127,254,249, 95,166,121,249,249,231,159,167, 1,224,240,225,195, - 14,159, 6,158, 62,125, 58, 99, 12,100, 94, 11,160, 26, 64, 5,234, 28,110, 19, 0,168,174,174, 46,205,205,205,189,206, 48,204, -117, 0,159, 54,227,196,173, 15, 33,228, 59,150,101,159, 54,142,157,223,177, 44,251,180,229,119, 45, 45, 22,100,203,218,120,111, -219, 24,222, 37,117,114, 56,249,239,137,182, 33,129,178,245,185, 49,185,145, 95,149,120,191, 43, 88,151, 60,178,196, 50, 29,192, -139,205,125,238,146, 71,178,206, 51, 1, 60,235, 42, 9,151, 60,114,243, 95, 51, 8,150, 73, 82, 82, 82, 90,204, 68,224, 97,139, -229, 54,161,181, 45, 67,147, 88,211,102,185,136,150, 75, 92,226, 18,151,184,196, 37, 46,113, 73, 83, 36,210,104,163,101, 38, 81, - 70, 91,173,134, 36,203,146, 92, 89,126, 38, 0, 70, 52,178, 42,115,228, 52,193,136,102,172,250, 78,185, 48, 93,152, 46, 76, 23, -166, 11,211,133,233,194,252,223,194,108,166, 68,219,216, 58, 60,214, 82, 68,203,100,252,158, 18, 78,150,119, 75, 98,151, 91, 51, -134,111,138,104,213, 51,246,116,246, 5, 96,132, 11,211,133,233,194,116, 97,186, 48, 93,152, 46, 76, 23,230,125, 94,195,222,122, -235,173,183, 81, 23,255,152,125,235,173,183,222,102, 89, 54,186,142,198,176,209, 45,249,238,228, 62, 24,154,242, 24, 88,211,149, -220, 7, 67, 27, 41,147, 88,211,101,249,189,107,235,208, 37, 46,113,137, 75, 92,226, 18,151,180,118,185, 16, 23, 23, 87, 19, 23, - 23,103, 50,124, 47, 2, 64,140,218,172,162,150,124,177,113,155,208,230, 65, 41,155, 33,120, 30,180, 16, 66, 2, 40, 14,111, 42, -151, 39, 24, 6,214,208, 29, 0, 64,209,201,140,166,246, 39,189, 94,251, 9,203,178,185,205,197,238, 74, 72,215, 78,114,183,111, -213, 12,195,203,170,212, 76,184,206,178,151,154,131,243, 60, 33, 17, 2, 62,255, 71,129, 92,110,213, 75,161,186,172, 76,165,214, -104, 70, 30,102,217,243,174, 62,224, 18,151,184,196, 37, 46,121, 20,132, 16, 34,246,240,240, 56, 77, 81, 84,176,197,119,176,118, - 15, 0, 12,195,228, 41,149,202,145, 44,203, 22, 63, 72,204, 6,162, 1,112,169, 53,148,159,163, 91,135, 28,160, 94,108, 33,155, - 17,179,187,248, 75, 6,135,117, 8, 62,144,155, 95,144, 84, 81,171,137,185,145, 83,169,116, 52,145, 28,158,112,150,220,219,111, -205,191,103,188,238, 21,218, 57,140, 4, 5,181, 1, 88, 32, 51, 43, 91,145,118,251,214,240, 67,251,182,188,193, 19, 10,151,104, -107,107,255,235, 48,243, 36, 68, 28, 44, 17,156,251,239, 91, 83,228, 28,232, 49,121,245,129, 31,186, 17, 18,148, 82,231, 90,194, - 33,146, 37,247,242, 58, 17,119,234,148,155,135,209, 1,168, 5,107,173,139,175,247,231,159,110,255, 55,114,228,137,231, 9, 25, -229, 34, 91,255,200,193,200, 79, 38,147,205,227,114,185, 81, 90,173, 54,152,207,231,103, 49, 12,147, 88, 90, 90,186,153,101,217, - 28, 87, 9,185,196, 37, 54,251, 80,163,129,204, 31,102,144,115, 0,144, 74,165,191, 81, 20, 21,104, 73, 2, 76,254, 29, 27,250, -137,180,240, 23,249, 87, 73, 73,201,227, 77,228,183,131,167,167,231, 54, 0,253,108, 57, 76, 54,110, 53, 93, 86, 42,149,175, 24, - 79, 31, 91,195,147,122,120,120,172, 32,132, 60, 79, 81,148,205,128,194, 6,131,129, 97, 89,246,112,105,105,233, 59, 44,203, 86, - 54,246, 59, 15, 15,143, 83,169,169,169,253,124,125,125,109,106,105,244,122, 61, 50, 51, 51,125,250,247,239,255, 51,128, 46, 45, -137,233, 8, 23,121,152,210,212,201, 67,171,156,199,116, 99,111,196,108,131, 1, 83,119,175,121,165, 77,222,221,219,109,102,175, -253,172,115, 23,111, 81, 84,106,113, 77,190,189, 47,228,187, 73,191,141,124,226,233, 97,115, 94, 91, 32,254,253,218, 13,252,152, -240, 11, 42,170,213,160, 41, 10,114,169, 8,157, 59,119, 36,155,226,143,120,239,217,190,105,163,155, 68, 30,173,170, 42,251,151, - 35, 25, 18,139, 56, 75, 22,141,235, 47,246,242,100, 0, 3,131, 55,199,244, 22,255,223,119, 73, 75, 0,188,237, 48,201, 58,125, - 90, 84, 88, 80,128,149, 1, 1,224,232,245, 16, 82, 20,132,132, 64, 72, 81, 16, 11,133, 24,189,107, 23, 86, 29, 63, 46, 90,246, -212, 83, 46,178,245, 15, 19,169, 84, 58,163,115,231,206,235,119,238,220,233,213,190,125,123,136,197, 98, 40,149, 74,239,155, 55, -111, 62, 54,127,254,252, 23,221,221,221,151,150,151,151,239,112,149,148, 75, 92,210, 40,233,120, 12,128,213, 32,241, 77, 61,123, - 80, 66, 81, 84, 96, 78, 78,142,175, 72, 36, 2,195, 48,198,104, 0, 6,243, 66,218, 50, 82,142,209, 81, 45,186,116,233,162,181, - 49,110,124, 84, 88, 88, 56,194, 50, 20, 90, 83, 17,119,114,114,114, 70,116,235,214,237, 35, 0, 35, 27, 33, 47, 43, 94,123,237, -181,121, 61,122,244, 48,105,129,140, 81, 16,234,254, 22, 23, 23, 99,238,220,185,230,119, 24, 12, 6,156, 60,121,242,181, 25, 51, -102, 0,192,252, 38,242, 30,236,235,235, 75,102,207,110,218, 71,209,242,229,203,177,124,249,114,108,217,178,133,112,185, 92,185, -141,242,116, 10,166,189, 92,228, 97,104,176, 26,122,136,111,240,179, 99, 13,226, 29, 30,187,135,104,217,221, 56, 89,195,247,171, - 55,239,140, 89, 57, 61,146,236,158, 63, 34,244,229, 45,167,126,233, 22,224, 54, 36, 37, 87,149,101,135, 38,235,165,129, 67,158, -138,154, 59,111,145,248,179,175,207,224,230,245, 63,145,122,238, 96,189,223,244, 29, 57, 3,249,197,149,152, 49,231, 77, 9,161, - 57, 81, 60,161,232, 37,109,109,205,110, 59,181, 89,138,110,158,162,255, 55,176,127,119,110,142,219, 77,248,121,184, 33,178, 79, - 39,110,208,137,171,255,175, 27, 33, 31,164,176,172,205, 88,133, 13, 73,214,206, 41, 83, 48, 88,167,131, 47, 77,131, 38, 4, 52, - 0,138, 16,212,170,213,184, 60,117, 42,250,239,223,143,119,142, 30, 21,173,120,230, 25,135,201,150, 72, 36,218,163, 82,169,214, - 53,195,113,219,195, 28, 60, 59, 75,165,210, 37, 21, 21, 21, 83, 91, 81,154,252, 1, 20, 89,137,143,200, 3, 32,103, 89,214,161, -200,194, 66,161,112,214,228,201,147, 55,109,221,186, 85, 84, 80, 80,128,220,220, 92, 48, 12, 3,161, 80,136,208,208, 80,114,234, -212, 41,175, 69,139, 22,109,144,201,100,130,138,138,138, 15, 28, 72, 39,197,229,114,167,123,122,122,142, 85, 40, 20,190, 69, 69, - 69, 69,165,165,165, 71,213,106,245,238,230,174,236,141,152, 47,132,132,132,140, 13, 8, 8, 80,228,228,228, 20,103,103,103,127, -171, 86,171,247,176, 44,107,184,207, 50,237, 5,163,183,122, 0,121, 33, 33, 33,201,119,238,220, 41,116, 34,102,110, 72, 72, 72, -138,163,152,132, 16, 49,128, 67, 0, 2,108,252, 52, 23,192, 68,214, 65,109,182, 75,156, 71,178,140, 33,173,234, 17,170,166,158, - 61,104,113,115,115,195,193,131, 7,193,229,114,193,229,114, 81, 90, 90,138,192,192, 64,243,103, 30,143,103,190,111,219,182,173, - 77, 60,134, 97,250,211, 52,141,170,170, 42, 48, 12, 99,190,202,202,202,192,178, 44, 4, 2, 1, 24,166, 46,156,147,197,243,254, - 77,148,227,243, 1, 1, 1,248,236,179,207,160,209,104,238,121, 46,147,201,112,237,218,223, 65, 70,104,154,198,128, 1, 3, 40, - 66,200,243, 77, 17, 45, 66,234,156,110,198,198,198,130,166,105,115, 72, 61,211,189,233, 98, 24, 6,203,151, 47,135,101,104,178, - 7,137,217,234,218,117, 19, 30,226, 89,150,205, 3, 96,213, 70,139,106, 10,180,139,159,228,149, 55,166, 60, 89,179, 52, 38,154, -253,191, 23, 71,178,139,167, 68,177, 79, 13,233,249, 53,205,225,144,139, 41,153, 8,116, 7,246,204,237, 23, 28,228, 45,190,214, -195, 75,218,217,138,106,212, 50,160,116,128, 72, 44,123,247,149,215,223,148, 28,251,249, 42, 50,179, 50,239, 33, 89, 0,240,219, -143,123,144,151,155,131,164,212,108,188,240,210,171, 18,153, 76,254, 46, 33, 36,192, 26,102, 67,113,151,242,222,123,107, 98,164, -176, 74,151,139, 74, 15,128,238,192, 7, 87, 84,141, 69, 79,247, 18,200,164,188,245, 77,168,112,205,152, 2, 62,255,199,184, 83, -167,204, 36, 43, 66,173,134,128, 97,160,103, 24, 51,201,210,232,245, 80,105, 52,240,175,170, 66,218,140, 25, 96,117, 58, 44,253, -234, 43,145,128,207,255,209,158,116, 90,172, 0,198,200,100,178, 4, 66, 72,103,123, 42,185, 37,142,204, 58,232,198,163,179, 84, - 42, 77, 32,132, 60,213, 26,210, 73, 8,161, 8, 33,171, 99, 98, 98,174,116,236,216,241,140,145, 88,153,158,113, 58,118,236,120, - 42, 38, 38,230,119, 66,200,114, 66, 8,101, 39,102,155,128,128,128, 53, 91,183,110, 21,221,186,117, 11, 57, 57, 57,208,233,116, -152, 60,121, 50, 24,134,129, 74,165,130, 70,163,193,186,117,235,196, 94, 94, 94, 75, 8, 33,193,246,228,157, 16, 66,187,187,187, -239,221,183,111, 95,236,157, 59,119,252,126,250,233, 39,234,234,213,171,138,141, 27, 55,206,240,242,242,218,111, 12,184,234, 80, -121, 18, 66, 40,127,127,255,221,223,124,243,205, 43,215,174, 93, 11,252,242,203, 47,185,191,254,250,171,255,246,237,219,103,250, -251,251,239, 39,132,208,205,169, 35, 66,200, 99, 34,145,104,248,194,133, 11, 13, 23, 46, 92,200,185,112,225, 66,206,166, 77,155, - 48,120,240,224,136, 85,171, 86,133, 55, 19,179,143, 84, 42,125, 98,225,194,133,134,179,103,207,230, 94,188,120, 49,123,195,134, - 13,212, 19, 79, 60, 17,185,118,237,218, 94, 14, 98, 30,186,112,225,194,208,172,172,172,246,217,217,217,237,178,179,179, 67,178, -179,179, 67,114,114,114,130,243,242,242,218,230,231,231, 7, 21, 22, 22, 6, 37, 38, 38, 70, 2, 56,208,218,250,209, 63, 29,211, -216,150,147, 88,150,133, 82,169,196,177, 99,199, 96,212, 94, 61,102, 73,178, 42, 42, 42,144,151,151,103,122,198,121, 8,233, 4, -195, 48,102, 34,117,242,228, 73,196,196,196, 64,169, 84,154,191,227,112, 56,230,123,211,255,216,194, 52,105,158, 24,134,193,197, -139, 23, 49,123,246,108,108,218,180, 9, 7, 14, 28,192,119,223,125, 7,165, 82,105, 38, 91,122,189,222, 38,102,113,113, 49, 12, - 6,131,189,121, 68,121,121,185,221,245,110, 73,128, 56, 28,206, 61,164,200,116, 57,210,150,238, 7,179, 53, 75, 99, 30,225,237, - 17,115,227, 54,170,234,162, 44, 31,134,133,248, 45, 89, 63,239,121, 55, 48, 90,176, 58, 21,160,173, 1,180, 85, 48,104,106, 64, -120,110,128, 78, 5, 31,129, 18,135,230,132,201, 22,127,150,126,189,171,143, 44,250,122, 81,197, 15, 86, 73, 5,135,247,194,243, -211, 95,243,202, 46,172, 64, 78, 65, 57,104,234,239,121, 47,124,196,116,112,104, 10,151, 78,212, 41,174, 40,154, 70,121,181, 26, -101, 85, 90, 76,152, 62,207,243,191,155,254,243, 2,128,117, 77,101,164, 39, 33,161,131, 2, 60,199,117,235,214,150,186, 46, 72, - 69,248, 83,231,192, 24, 0,246,236, 51,120,172,212,151,238,242, 35,127, 92, 79, 66,214, 92,101,217, 91, 77,225, 8,228,114, 55, -143, 94,189,176, 50, 32, 0, 67,116, 58,240, 88, 22, 79, 22, 20,224,207,121,243,160, 62,114, 4, 20, 0,222,115,207, 97,216,230, -205,248, 57, 32, 0,126, 42, 21,202,222,120, 3, 62, 63,252, 0,158, 76,230,230, 72,225,243,120, 60,237,206,157, 59, 3,102,206, -156,153, 64, 8,137,106,205,154, 45, 66, 72,103, 79, 79,207,132,119,223,125, 87,177,108,217,178, 60, 39, 97, 42,196, 98,241,225, -234,234,234,121,142,174,104,141,196,105,245,142, 29, 59, 94,142,141,141,149,207,156, 57,147, 77, 75, 75,147, 3, 48,105, 71,124, - 6, 15, 30,220,113,231,206,157,126,253,250,245,123,109,246,236,217, 60, 66,200, 82, 91, 90, 30,137, 68, 50,103,231,206,157,222, -197,197,197,168,170,170, 50, 15,178,217,217,217,112,115,115, 51, 7, 85,231,114,185,120,247,221,119,189,230,204,153, 51, 15,192, - 60, 91,233, 21, 8, 4,211,183,109,219,214,105,212,168, 81,156,140,140, 12, 80, 20, 5,129, 64,128, 41, 83,166,112,107,106,106, -130, 87,174, 92, 25, 11, 96,155, 35,101,192,229,114, 95,136,143,143,239, 28, 17, 17,193, 73, 77, 77,197,160, 65,131,112,233,210, - 37, 60,247,220,115,220,202,202,202,118,139, 22, 45,138,105,108,133,213,148,214, 73, 36, 18,245,248,233,167,159,178,130,130,130, -204, 3, 75,187,118,237,152,232,232,104,101,106,106,106,216, 47,191,252, 82, 50,104,208,160, 76, 7, 48,219,136, 68,162, 46,223, -127,255,125,222,202,149, 43,135,239,216,177,227, 89, 0,232,223,191,255,183,171, 86,173, 58,163, 84, 42,187,159, 61,123, 86, 57, -120,240,224,108, 59, 33, 3,252,253,253,153,185,115,231, 74,154,250,209,174, 93,187,202, 0,180, 37,132,180, 55, 6,218,118,201, - 3, 16,150,101,245,132,144,112, 66, 72,210,177, 99,199, 48, 96,192, 0, 28, 59,118, 12,209,209,209, 73,150,100,224,218,181,107, - 24, 50,100, 8, 80, 23, 72,254,161,216,106, 49, 12, 3, 14,135,131,236,236,108,236,218,181, 11,107,215,174, 69,104,104, 40,116, - 58,221, 61,100,203, 72,136,236, 82,193,232,245,122, 92,190,124, 25,159,236,223,143,165, 75,150, 64, 42,149, 2, 0,180, 90, 45, -148,165,165, 16, 10,133,102, 50,102,163, 44, 15,223,190,125,123, 94, 96, 96, 96,189, 45, 67,211, 95,227,152, 5,131,193, 0,189, - 94,143,218,218, 90,108,218,180, 73,207,178,236, 97, 27,125,210, 76,138,230,205,155, 7,181,250,239, 56,228,189,140, 54,201, 33, - 33, 33,232,221,187,183,249, 51, 69, 81,172,189,152,255,125,188, 7, 84, 22,191, 14, 91,190, 1, 0, 16, 24, 24,136,176,176, 48, -248,251,251, 55,138,105,141,139, 60,108,105,104,147,213, 44, 27,173,198, 34,101, 95,191,147,191,110,230,162, 13, 27,196, 66,154, -251,250,216,158,104, 43,231, 1,110,158,224, 13, 89, 12, 34,175, 91,200,179,202,191,128, 31, 23, 99,227, 56, 37, 21,251,105,237, -215, 29, 61, 61,125,210,148,202,123,140,240,184, 60,225,176, 14,157, 58,147,204, 60, 37, 56, 28, 14,196,238,222,120,124,236,124, -208, 52, 5,137,220, 27,132, 81,253,205,136, 41, 26, 28,154, 3,101,165, 10, 33,237, 59, 81, 2,161,219, 48, 91, 68, 75,230,206, -221,182,112,210,227,194, 18,125, 54,220,218, 10,193,152,166,211, 0, 62, 40,175, 74, 44, 24, 29,234, 22,251,237,213,109, 0,158, -176,167, 96,104,189, 30,190, 52, 13, 45,203,226,207,121,243, 16, 30, 31,143, 36, 19, 49,140,143, 71, 82,108, 44, 60,185, 92, 8, - 40, 10,172, 78,119,207,158,190,157, 19, 16,198,142, 29,139,226,226, 98,197,146, 37, 75,154, 77,182,220,220,220, 62, 33,132,140, -225,114,185, 90, 66, 8, 40,138, 50, 7, 1, 55,221,107,181, 90, 30, 77,211,223, 23, 23, 23, 59,188,229, 71, 8,233,236,225,225, -145,112,225,194, 5,133, 88, 44,198,242,229,203,157, 66,178,164, 82,233,175, 49, 49, 49,109, 63,249,228,147, 31, 8, 33,163,237, - 37, 91, 13, 73, 86,124,124,124,217,174, 93,187,254,107,185, 69,200,178,108, 30, 33,100,119,191,126,253, 94,137,141,141,149, 3, -120,121,246,236,217,176, 69,182, 4, 2, 65, 84,135, 14, 29,234,173,106, 5, 2, 1, 0, 64, 44, 22,195,221,221, 29, 60, 30, 15, -106,181, 26,225,225,225,132,207,231, 71,218,147,102,169, 84, 58,102,220,184,113,156,243,231,207, 35, 63, 63, 31,238,238,238, 16, -139,197, 96, 24, 6,179,102,205,226,109,222,188,249, 41, 71,137, 86, 80, 80,208,179,195,135, 15,231, 36, 39, 39,227,206,157, 59, - 80,171,213,184,121,243, 38,100, 50, 25,166, 77,155,198, 91,191,126,253, 51,142, 18, 45, 0, 61, 98, 99, 99, 11, 44, 73,150, 73, -196, 98, 49,233,220,185,179,210,203,203,171, 15,128, 76, 71, 48, 95,125,245,213,194,184,184,184, 33,167, 78,157, 90,108,250,242, -212,169, 83,139, 0,224,131, 15, 62, 56,235,227,227,211, 7,128,189, 68, 11, 44,203, 26,254,253,239,127,223,229,243,249,224,114, -185,224,243,249,245, 46, 30,143, 7,138,162,164,166,238,252, 79, 37, 53,132,144,126, 0,222, 71,221,137,172, 37, 44,203, 94,108, - 37,100,235,119, 66, 72,120,116,116,180,153,108, 29, 63,126, 28,163, 71,143, 70, 89, 89, 25,146,147,147, 45, 73,214,195,178,209, -130,193, 96, 0,151,203,197,134, 13, 27,160,213,106,241,233,167,159,226,139, 47,190,168, 55,134,202,100, 50,108,217,178,197,161, -109, 46,134, 97,176,119,239, 94, 44, 94,180,200, 76,178,140,139,107,248, 41, 20,240,242,246, 70,122,122,186, 77,162, 85, 90, 90, -250,206,209,163, 71,209,148, 49,252,209,163, 71,205,247,150,198,240,118,205,115, 52, 13,181, 90,141, 39,159,252, 59, 84,236,171, -175,190,106,190, 87, 42,149,160,105,218, 84, 22,196, 94, 76, 21, 11,140, 21,254,253,221,152, 5, 11,234,105,232, 26,195,108,140, -139,180, 70,237,150,149, 83,135,225, 44,203, 38, 25, 77, 36,162, 1, 28, 51,110, 39, 54,109,163,117,171,176,122, 43,135,228,245, -142,155, 59,114,122, 91, 95,119,176, 85, 5,224, 61,241, 14,254, 40,114,195,134, 77,223, 3, 0,222,156,210, 23,189, 70,172,134, -102,207, 72,204, 27, 68,243,167,102,171, 23, 2, 88,118,111,199, 51,116, 9,108, 19,128, 63,210,174,129, 67,211,224,187,123,195, -221, 83, 1,131, 94,131,242,194, 59, 72,248,242, 35, 0,192,142,189,135, 65, 81, 20, 56, 28, 26,106, 13,131,208,182, 1, 48, 24, - 12, 93,154, 74,103, 55, 66, 30, 31,223,217,127, 64, 80,176,156, 36,123,220, 65,103, 95,175,250, 63,120, 76,128,208, 92, 9, 25, - 36,113,235,223,141,144,199, 83, 88,246,130, 77, 13, 4, 69,129, 34, 4, 34, 30, 15,234, 35, 71,144,100, 36, 88, 0,144, 20, 27, - 11,234,235,175, 33, 21, 8, 64, 19, 2,142, 81, 5,221,156,142, 14, 0, 97, 97, 97,216,177, 99,135, 98,206,156, 57,205, 34, 91, -181,181,181,107,100, 50,217,240,221,187,119, 43,198,141, 27,119,207,243,180,180, 52, 12, 25, 50,164, 32, 63, 63,127,205,253,144, - 44,185, 92,142,172,172,172,251,222, 87, 55,145,172,147, 39, 79, 6, 7, 6, 6, 34, 60, 60,220,231,205, 55,223,116,132,108, 45, -179, 36, 89,179,103,207,190, 10,192,151, 16,210,144,168, 16,227,179,158, 22,100,171, 28,192,250, 38, 86,162,193, 98,177, 24,133, -133,133,152, 62,125, 58,110,221,250, 91, 1, 26, 16, 16, 96, 94,233,165,167,167,195,199,199, 7,132, 16, 95,123,242,236,227,227, -163,208,104, 52,120,233,165,151,144,149,245,183, 57, 99,155, 54,109, 76,101,234,237,104, 57, 42, 20, 10,133, 74,165,194,224,193, -131, 81, 91, 91, 11, 0,152, 56,113, 34,184, 92, 46, 10, 11, 11,193,229,114,189,155, 81, 61,222,209,209,209,141,186, 86,145,201, -100, 90, 15, 15,143,174, 14, 98,122, 61,243,204, 51, 57,241,241,241,247, 28,108,185,116,233,210,191, 60, 61, 61, 79,121,122,122, -118,118, 16,211, 96, 73,170,120, 60, 94, 61,162,197,229,114, 65, 81,148, 1,255,124,121, 15,128,233, 20,220,199, 0,122,183, 34, -205,150,153,108, 29, 63,126, 28,221,187,119, 71,105,105, 41, 82, 83, 83, 31, 58,201,178, 32, 38,224,112, 56,230, 69,178, 80, 40, - 68,120,120,184,153,100, 17, 66, 80, 83, 83, 3, 14,135, 99, 26,175,237, 26,252,202,202,202,224,239,231, 7,169, 84,138, 78,161, -161,184,109, 28, 71, 76,247, 2,129, 0,132, 16,232,245,122, 91,101, 88,137, 58, 91,171,249,206,174, 30, 19, 41,106, 82,117, 28, - 16, 0,131,193, 96, 26,243, 89,103, 96,122,123,123,163,170,170,202, 94,204, 86, 41,141,104,180,194, 1, 36, 1,136,102, 89, 54, -222,104, 24, 95,207,189,195, 80, 0, 9,176, 56, 82, 73, 8,161,186, 42, 36,187,226,230, 12,159, 62,178,187, 55, 84, 69,119, 32, -148,122,131,200, 67,176, 97,211,247, 72,254,171, 4, 0,176,225,192,111,248,108,229, 24,192,205, 19, 97,238,197,240,147,114,198, - 89, 35, 90, 4, 44, 49,176, 44, 56, 52,101,220,187,165, 65,211, 20,148, 69,121,216,252,206,203, 70,146,245, 5,142,157, 77, 69, - 96,135,238,127,239,227, 18, 2,176, 77, 55,110, 31,119, 94,252,156,241, 3,221, 10, 72, 30,228, 1, 34, 8,133, 13,248,163, 7, - 15, 36,132,194,220,168, 64,209,229,163,181,241, 0,108, 78, 20, 66,138,170, 51,126, 39,196,170, 33, 27,101,124, 70, 19, 82,231, -253,213,224,248,152,110, 34, 44, 18,137, 4, 10,133, 2,107,215,174, 85,188,245,214, 91,159,194,193, 0,212, 44,203,222, 36,132, - 68,205,154, 53, 43,161,164,164, 68, 17, 22, 22, 6,137, 68, 2,137, 68,130,130,130, 2, 76,152, 48,161, 32, 63, 63,191,185,218, -178,253, 49, 49, 49, 10, 30,143,135,180,180, 52,120,122,122,154, 9, 98,115, 73,150, 76, 38,251,245,212,169, 83,193, 29, 59,118, -196,141, 27, 55,208,181,107, 87, 28, 58,116,200,103,242,228,201,118,145, 45, 55, 55,183,177, 70,226,132,216,216, 88,121,108,108, -236, 80, 0, 67,109,189, 59, 54, 54, 86, 62,127,254,252,103,154, 34, 90, 92, 46, 55, 75,169, 84,250,185,185,185,225,203, 47,191, -132, 68, 34,129, 72, 36, 66, 64, 64, 0,148, 74, 37, 68, 34, 17, 88,150,133, 78,167, 51, 13, 22, 37,246,228,187,168,168,168,128, - 97,152,160, 31,126,248, 1, 69, 69,127,251,214, 11, 14, 14, 70,121,121, 57, 24,134, 41,118,180, 44,115,115,115, 11, 8, 33, 65, -127,252,241, 7, 50, 50, 50, 48,122,244,104,124,253,245,215,232,219,183, 47, 0, 64,163,209, 52,199,137, 31, 67,211, 52,219, 68, -253, 17, 0, 30,206,196, 52, 78, 94, 14, 97, 26, 12, 6,131,137,100, 89,254,181, 36, 95, 54,222,249, 79, 17,119,203,117, 66,107, - 77,228,232,209,163,161, 84, 42, 33,145, 72, 90,149,125,142, 73,163,181, 98,197, 10,188,252,242,203, 80, 40, 20, 88,188,120, 49, - 56, 28,142,249,178,220, 25,112, 68,124, 21,138, 38,159,155, 12,226,109,140,151, 82,119,119,247, 21, 20, 69, 61, 79,219, 81,112, - 12,195, 48, 6,131,225,112,121,121,121,147,238, 29, 76,134,235,246,212,133,101, 25,216, 72,235,125, 99, 90,227, 34,173, 65, 26, -158, 54,180,166,209,194,223,167, 14,239, 9, 5,100,202,101,130, 81,101,151, 96, 73,178,222,125,121,216,244,145,221, 61,240,237, -233,139,224,105,203, 0, 77,101, 19, 53,172, 3,225,137,161,112,231, 6, 90,173, 4,138,190,145,157,147, 11, 47, 15,137,145,100, - 25, 47,138, 66,175,238,117,139,217, 99,103, 83, 17,216,190, 59, 56, 52, 13, 14, 77, 67,226, 38, 64, 65,126, 30, 56, 28,234, 70, - 99,175,237,201, 33,227,199,119, 14, 10,241,240,226,162,216, 71, 3,127,133,200,250, 15,251, 72, 17,232,207,199, 40, 47, 97,112, - 79, 14, 25,111,131,184,152,137,150, 86,175, 7,239,185,231,204,219,133, 73,177,177, 8,143,143, 7,243,236,179,168,214,106,235, -169,138, 29, 21, 83,131, 52, 17,162,101,203,150, 21,148,148,148,188,208,204,213,227,205,210,210,210,168, 37, 75,150, 20, 20, 23, - 23, 67, 36, 18, 33, 47, 47,239,190, 72, 22, 0,168, 84,170,105,241,241,241, 5, 9, 9, 9,144, 72, 36,144, 74,165,205, 38, 90, - 38, 77,214, 59,239,188,211, 54, 40, 40, 8,233,233,233,112,119,119,135,151,151, 23,122,245,234,133,243,231,207,251, 4, 5, 5, -253, 96, 52,152,109, 42, 77,223,196,199,199,151, 1, 64,124,124,124, 25, 33, 36,145, 16,178,157, 16,242,113,131,107, 59, 33, 36, -209,242,183, 42,149,234,171,166,176, 53, 26, 77, 98,106,106, 42, 43, 18,137, 64,211, 52,180, 90, 45,132, 66,161,185,190, 42, 42, - 42,160, 82,213,109,115, 95,185,114, 5, 58,157,238,156, 61,121,175,172,172, 60,190,103,207, 30, 93, 80, 80, 16,122,246,236,137, - 62,125,250, 96,208,160, 65, 8, 14, 14,198,138, 21, 43, 52,213,213,213,199,155, 65,180,142, 29, 58,116, 72, 23, 20, 20,132, 62, -125,250, 64, 32, 16,160, 87,175, 94, 8, 8, 8,192,218,181,107, 53,229,229,229,199,155, 81, 77,153,215,174, 93,163,155, 32,185, - 50, 0, 5, 14, 98,102, 93,190,124,153, 30, 56,112,224,183, 13, 31,244,239,223,255, 91,137, 68,226, 14,192, 81,187, 63,214,146, - 92, 9, 4, 2,243,101,250,158,195,225,252, 47,104,180,230, 1,184, 10, 32, 29,192,226,214,148, 48, 75,195,247,146,146, 18,164, -166,166,226,202,149, 43, 24, 56,112, 32,206,157, 59, 7, 24, 13,228, 31, 98,250,192,178, 44,184, 92, 46,194,194,194, 48,127,254, -124,124,255,253,247,184,121,243, 38,116, 58,157,153, 8,153,108, 50, 29,209,104,241,120, 60, 40, 20, 10,232,116, 58,179, 54, 11, - 0,110,223,186, 5, 14,135, 3,131,193, 0,141, 70, 99, 83,163,229,238,238,190, 98,231,206,157,175, 21, 23, 23,251, 23, 21, 21, -249, 90, 94, 5, 5, 5,190,121,121,121,190, 57, 57, 57,190, 89, 89, 89,190,119,239,222,245,189,115,231,142,255,186,117,235, 94, -115,119,119, 95, 97,239, 28,212,171, 87, 47,188,250,234,171,230,107,235,214,173,230, 43, 33, 33,193, 97,227,117,154,166, 17,182, -124, 3,198, 20,177,230,235,123, 31, 98,190,146,223,156,221, 20,102, 61, 46,210,106,218,178,241,180,161,101, 96,105, 43,115,112, - 30,203,178,241,166,237, 66, 75,231,165, 13,141,225, 1, 0, 93,252, 68,171,223,157, 53,100,250,147, 93,221,241,205,233,223,176, -242,171,191,110,132, 78,247, 9,235,232, 81, 4, 67, 81, 42,222,156,210, 23, 27, 14,252, 6,160,110,235,208, 80,152, 12,182, 52, - 29,172, 52, 8,119,148,197, 86,183, 29,244,154,218, 51,127,165,221, 26, 22,214,163, 31,149, 95, 92, 85,239,248,103,120,212, 4, - 16, 66,208,166,125,119,208, 28, 14,104,154, 2,135,166, 33,151, 9,145,250,199, 31, 6,181, 74,117,198, 26,102, 20, 33, 28, 63, - 9,127,235,148, 81,189,132,185,252, 66,248,248,139,193,227,214,145, 0,246,175, 9, 13,102, 8, 14,208, 67,138, 25, 57, 94,110, -103, 10,106,183, 70, 17,242,109, 66, 35, 6,152, 6,131, 1, 18,129, 0,181,106, 53, 84,122, 61,162, 54,111, 54,111, 23, 82,132, -224,119, 0, 61, 55,111,198,133, 35, 71, 32,227,243, 1,129,192,238, 83, 33,214, 52, 90, 5, 5, 5,152, 56,113,226,125, 17, 34, - 75,205,214,156, 57,115, 18,214,174, 93,171, 88,182,108,153,211, 48, 23, 47, 94,156,112,224,192, 1, 69,187,118,237,154,221, 88, - 37, 18,201, 34,131,193, 32, 95,191,126,125,254,198,141, 27,209,208,158,204, 72,116, 4,114,185,124, 3,128, 97, 77, 64,173,156, - 61,123, 54, 15,192,203, 70,205, 86,207,217,179,103, 95, 96, 89,118,105,131,242, 93,190, 99,199,142,137, 22, 91,140,219, 1,108, -110, 42,141, 21, 21, 21, 31,207,159, 63,255,165,159,127,254,217, 91, 40, 20,130, 16, 2, 30,143,135, 78,157, 58,153, 79,209,112, -185, 92,176, 44,139, 5, 11, 22, 20, 23, 22, 22,218,229,222, 65,173, 86,239, 93,185,114,229, 48,149, 74, 21, 60, 99,198, 12,158, -135,135, 7, 10, 10, 10,240,254,251,239,107,246,238,221,155, 85, 93, 93,237,168, 45, 21,116, 58,221,222,255,252,231, 63, 81, 85, - 85, 85,237,103,206,156,201, 43, 47, 47,135, 74,165,194,194,133, 11, 53,187,119,239,206, 86,169, 84, 14, 59,252, 29, 52,104, 80, -218,221,187,119, 35,107,106,106, 74, 69, 34, 81, 67,109, 31, 17,139,197,253, 0,236,119, 4, 51, 60, 60, 60, 61, 51, 51,115,224, -234,213,171, 19,117, 58, 29,247,210,165, 75,102, 99,248, 15, 63,252, 48, 65, 40, 20, 14,135,227, 70,251, 6,129, 64, 80, 79,131, -213,240,158,195,225,252,227, 53, 90, 44,203, 38,160,206,101, 70,171,146,134, 36, 43, 57, 57, 25,195,134,213,117,233,115,231,206, - 33, 34, 34, 2,231,206,157, 67,100,100,228, 67,117,239, 96, 34, 90, 28, 14, 7,147, 39, 79,198,136, 17, 35,208,182,109,219,122, -167, 13, 77,247,142,144, 13,189, 94,143, 30, 61,122, 64,173,209,128,199,227,153,183, 38, 57, 28, 14,124,124,125,145,150,150,102, -151, 70,139,162,168,231,199,142, 29, 75,165,164,164, 96,210,164, 73,248,228,147, 79, 26,253,237,212,169, 83,113,240,224, 65,140, - 29, 59,150,122,251,237,183,155,116,239, 96, 50, 66,183, 39, 79,166,121,218,150, 70,207, 89,152,150, 92,164,181,137,133,107, 7, -107,109, 62,214, 74,251,138,175, 71,180, 44,156,132,161,189,143,104,198,136, 78, 28,124,115,230, 55,172,252, 38,115, 47,195,178, - 95,126,153, 84,250,221,226, 8, 64,123,120, 10,122, 77,216, 95,183, 93, 8,192, 80,152, 12,237,225,169, 32, 34,111,156,205,225, -162, 92,165, 61,102,189,225,105, 63,249,250,211,143,230, 15,220, 22,233,227,239,235, 14,101,185,202, 76,182,146, 18,190, 0, 0, -140,159,189, 6, 28,186,110, 75, 81, 38, 17,194,141, 71,227,200,190, 15,138,181,218, 90,171,173,171,146, 75,189,252,246,227,157, -220,249, 98, 29, 42,252, 88,116,247,249,251,208, 31,105,255,197,189,132,235, 49, 15,120, 39,151, 98, 74, 71,137,236,131,148,178, -151, 1,108,189,103, 66, 44, 43, 83,149,253,241,135,219,232,157, 59,113,105,218, 52,180, 97, 24, 36, 6, 4,192,147,203,133,187, - 64, 0,138, 16,168,190,251, 14, 23,190,252, 18, 10,129, 0,144, 74,161, 95,181, 10,234,212, 84,232, 42, 43, 85,142, 18,173,219, -183,111,223,183,214,201, 26, 49,122,235,173,183, 62, 45, 41, 41,121,193,153,152,211,166, 77, 75, 56,125,250,180,162,185, 56,149, -149,149,111, 0,120,195, 9,233, 49, 16, 66,150, 26, 29,227,189, 28, 27, 27, 43,191,124,249,242, 75,132,144,109,166,213, 4, 33, -196, 55, 38, 38,102, 86, 3,146,101,243,212, 33,203,178,153, 18,137,100,213, 27,111,188,177,102,227,198,141, 18,147,225,251,159, -127,254, 9,189, 94, 15, 46,151, 11,134, 97, 16, 19, 19, 83, 85, 82, 82,178,161, 49,143,206, 86,112,245,132,144,169,107,214,172, -137,249,224,131, 15,158,166,105,218,135, 97,152, 34,149, 74,245,131, 74,165,138,111,206,169, 43, 99, 57,188,184,108,217,178, 23, - 55,109,218, 52,150,162, 40, 95,189, 94, 95, 92, 89, 89,121, 84,165, 82, 53,203, 55,215,133, 11, 23,138,182,109,219,246, 87, 81, - 81, 81,151,192,192,192,114,137, 68,162,209,104, 52,180,155,155,155, 76, 44, 22,135, 3,248, 5,192,117, 71, 48,175, 92,185,146, -191,125,251,246, 12,181, 90, 29,182,125,251,246,179, 50,153,236, 52, 33,132,240,120, 60, 15, 55, 55,183, 97, 0, 18, 1,220,118, - 4,147,162, 40,131,165,246,170,161,125, 22,159,207,255, 95,177,209,106,117, 98,233,222,161,184,184, 24, 41, 41, 41, 38,146, 21, - 14, 0,145,145,145, 73, 38,178,117,229,202, 21,244,233,211, 39,137, 16,194,125,208, 39, 15, 45, 53, 90, 38, 66,213,182,109, 91, -243,103,203,203,194, 70,203, 46, 97, 24, 6, 60, 30, 15, 28, 14, 7,254, 1, 1,230,119,177, 44,139,180,180, 52, 40,149, 74,187, -136, 22, 77,211, 52, 33, 4,147, 38, 77,178,235,189,255,254,247,191,145,152,152, 8,218, 78, 86, 72,211, 52, 66, 66, 66,236,218, -121,129,157,246, 84, 52, 77, 35, 48, 48,176,217,152,150, 92,164, 53, 17, 44,107,247,214, 72,149, 53,177,106, 12,159, 94,168, 90, - 61,245,253,243,111, 95,207,175,253, 50,181,160,102, 62, 0,246,112,178,232,199, 94, 62,244,200,145,157,179,161,142,143, 4,145, -213, 57,111, 99,171,242, 64,196, 10,100, 27,218, 96,249,183, 55,242,245, 32,235, 27, 73, 68, 46, 79, 40, 90,186,111,231,135, 27, - 99,230, 44,144, 36,167, 23,160,188, 74, 13,154,166, 44, 7, 79,112, 56, 52,100, 98, 33,130,252,220,113,224,191,239, 87, 86, 86, -148, 45,107, 44,238, 97, 91, 41,111,246,240,126, 29, 5, 60,255,106,132,245,156, 8, 90,248,183,147, 89, 54,191,145,221,193,136, - 31,241, 84,102,181,240,235,204,234,217, 86,137,150, 70, 51,114,201,168, 81, 39, 86,126,255,189,168,255,222,189, 72,143,137, 65, -128, 74, 5,129,113, 43,145, 34, 4, 18, 30, 15, 18, 30,175,142,100,109,218, 4,149, 94,143,205,211,166,213,168, 53,154, 81, 14, -106, 36,120, 67,135, 14,117, 26,201,178, 36, 70,112,208,206,203, 94,178, 53, 98,196,136, 4,150,101, 5,173, 96, 37,111, 34, 91, -218,203,151, 47,207, 58,123,246,108, 58,234, 7, 22, 45, 59,123,246,108,250,204,153, 51,201,174, 93,187,118, 3,248,143,189, 14, - 60,171,170,170, 62,148,203,229, 24, 50,100,200,127,226,226,226,188,250,246,237, 11, 95, 95, 95, 84, 86, 86,226,202,149, 43,152, - 55,111,158,178,162,162, 34,174,180,180,116,163,131,105,102,140,154,155,120,103,150, 3,128, 61,198,203, 41,242,202, 43,175,252, -153,158,158, 94,226,227,227, 51,128,199,227,245, 68,157, 29, 80, 62,128,221,142, 18, 34,147,188,252,242,203,127,164,167,167, 23, -183,105,211,102,247,187,103,196, 0, 0, 6, 32, 73, 68, 65, 84,160, 17, 83, 14, 32, 7,192,206,102, 96,230,254,246,219,111,129, -253,250,245,163,184, 92, 46, 75,211, 52,184, 92, 46,203,225,112, 88,163, 93, 13, 11, 0, 71,143, 30, 21, 0, 80,194, 37, 15,186, -111,154,221, 59,228,229,229,153, 73,150,133,195,210,240,200,200,200, 36, 35,201, 50, 61,211, 63,164,180, 98,229,202,149,216,177, - 99, 7,108,121, 52, 55,158,238, 35,182,240, 76, 26, 45,134, 97,160,213,106,145,156,156,108,246,217,101,218, 46, 52,185,118,208, -235,245, 77,158, 86,103, 24,134,209,104, 52,248,252,243,207,237, 34, 91,159,125,246, 25,106,107,107,193,216, 96,112,150,174, 24, -122,247,238, 13,165, 82,105, 62,236, 19, 30,254,183,171, 60,173, 86,235, 16,113, 53, 97,134,133,133,161,184,184, 24,222,222,117, -231,113,130,166,253,173,236,209, 87,255, 51,253, 7, 55,165,209, 34,246,186, 36,232, 45,151,187,171,249,186,175,254,213, 93, 16, -245,124,184, 59,218,251, 73,193,229, 9,145, 91,161,199,169,235, 21,216,153,144,159,165,210, 49, 79,223, 44,172,190,214, 20,142, - 80,236,254, 67,223,199, 71, 68, 76,155, 53, 79, 92,165,102,144,145,113, 23, 69,133,121,160, 8, 5,255, 54,129, 8, 14, 14,129, - 27,159,194, 39,241, 27,171,147, 46,156, 62, 95, 89,161, 28,221, 24,214,211,114,254,133, 77,207, 69, 12,236,208, 65, 74,160,215, - 1,140, 14,208,235, 0,131,241,175,233, 59, 67,253, 54,151,146, 82,198,190,253,187,242,215,239,202, 52, 86, 99, 86, 61, 79, 72, -132,220,211,243,196,242,163, 71, 69, 6,173, 22, 37,111,188, 1,145, 94, 15,161,113, 85, 2, 0, 16, 8,160, 95,181,170,142,100, - 77,157, 90, 83, 94, 86,230,112, 8, 30, 31, 31,159, 61,197,197,197,143,156,103,120, 47, 47,175, 37,205,113, 19,209,130,105,242, - 5, 80,198,178,172,214,202,202,218,199,164,229,106, 6,110,136,143,143,207,219, 20, 69, 13, 98, 89,214,139,162,168, 82,131,193, -240, 75, 97, 97,225, 58,150,101,211, 92, 83,234, 67,171,111,147,103,120, 91,251,216,133, 0, 94, 7, 80,201,178,108,134,171,228, - 30,120, 61, 61,134,186, 83, 88,141,134,224,193, 67, 60,121,232,229,229,117,241,196,137, 19,125,219,183,111, 79, 89,154, 49,152, -124,229,153,182,183, 56,156, 58,125,196,207, 63,255,172,159, 52,105,210, 47,249,249,249, 67, 26,195,148,201,100, 63, 94,189,122, -245,201,242,242,242,123, 8,149,165,167,120,211,231,234,234,106,204,153, 51,231,100, 69, 69,133,213, 16, 60,114,185,124,211,198, -141, 27, 95, 27, 63,126, 60,101,114, 71, 97,121,153,194, 5,153, 46,173, 86,139,253,251,247, 27, 62,248,224,131, 45,101,101,101, -141,110, 29, 6, 4, 4,100,229,230,230, 6,154, 92, 45,216,227, 84, 52, 36, 36, 36, 47, 35, 35, 35,224, 65, 98, 62,170,132,171, -161,118,139, 56,226,251,137, 16, 66,194,124,197, 19, 89,224,121, 10,134, 30, 20, 33,124, 61,139,155, 96,241,163,136, 83,179,237, - 74, 46,107,215,214, 25, 79, 36,154, 43,149,120,188, 51,254,133, 87,189, 66, 58,132, 18,133,127, 27, 16, 80, 40,200,207,193,221, -191,110,177, 95,125,250, 81, 73,117,133,114, 69, 77, 77,213, 71, 77,225,116, 35,164, 67, 59, 25,239, 48,159, 65,103,152,242,209, - 32, 62,213, 61, 12, 19,128,150, 75,221,200,168,212, 77, 76,105, 98,219,199, 68,182,150,126,245,149,136,223,185,243, 61,142,226, - 12, 6, 3,212,169,169,216, 60,109, 90,179, 72,150, 75, 92,226,146,251, 30,208,218,195,182,143, 44, 29,128,236,135, 25,188,248, -127,188,142, 90,109, 80,105, 66,136,216,211,211,243, 52, 77,211,193, 38,141,140,165,205,144,149,128,210, 25, 5, 5, 5,195, 89, -150,173,105, 2,179,131, 84, 42,253,136, 97,152,254,246, 4,149,166,105,250, 82,101,101,229,220,166,130, 74,183,196,169, 67,111, -111,239,180,187,119,239,118, 48,157,162,182,156, 43, 27,150, 3, 0,220,190,125, 27, 67,135, 14,189,155,151,151, 23,242, 32, 49, - 91,171, 52,226, 71,235,254, 53, 90, 45,208,200, 3,120, 2,201,139,124, 55,225, 19, 6,157, 62, 12, 4,224,112,185, 55, 52,181, -170, 51,106, 85,213,190,198,182, 11, 31,164, 60, 79, 72,132,128,207,255,145, 39,147,185, 89, 43, 39, 93,101,165, 74,173,209,140, -116,145, 44,151,184,196, 37, 46,113,201, 35, 68,128, 59,123,122,122,158,224,114,185, 2, 75, 50,217,240,222, 36,122,189,190,182, -168,168,104,116, 83,187, 47, 45,129,249,143, 41,111, 71,137,214,177, 99,199, 88,123,189,183, 18, 66, 70,216, 19,179,202,194,240, -205,166,239,140,135,141,217,130,121,183,233, 21,215, 1,204,161,168, 59, 30,187, 34, 58, 58,122,249, 35,144, 78,103,214,145, 83, - 49, 77,117,110, 47,174, 35,152,246,182, 41, 7,211,105, 87,187,111, 13,152,246,244,165,102,166,179,201, 54,218,204,122,111,178, - 47,181,162,116, 58,179,142,156,130,217,176,253,216,131,235, 40,166, 61,125,169, 25,233,180,217,238, 91, 11,230,253,142, 33, 77, -164,179,209, 54,106,111, 91,106,164,238,109,206, 77,173, 85,147, 5, 0, 38,127, 90, 13, 53, 90,141, 25,196,115, 28, 37, 89, 45, -145,120,203, 73, 7,118,250, 41,121, 24,152,205, 33, 92,142,164,213,137,146,224,108,204, 6,229,233, 44, 89,110, 28,208, 19, 97, -135,195, 81, 71,242,238,140,122,111,144, 87,167,224, 90, 98, 58,171, 44,173, 13,138,206, 76,103, 75, 96, 58,171, 47, 53,196,116, - 70,187,183, 86,239, 45, 88, 71,206, 74,167, 83,250, 82, 75,180,121, 43,237,231,190,113, 27, 98, 58,163, 47, 53,196,116, 70,187, -127, 16,152,206,232, 75,214, 48,157,209,238, 27,171,251, 71, 85, 51,101,218, 46, 52, 18, 46, 98,133,124,214,219, 62, 52, 17, 47, -170, 57,133,214, 18,210, 18,129, 36,157, 77,136, 90,138,108, 30, 59,118,140, 53, 50,253, 86,143,233,228, 58, 90,110,196,116,230, -202, 38,202, 89,117,212, 18,237,221, 18,211, 89,248, 13,113,156, 81, 79,214, 48,239, 55,189,141,164,211,233,121,191,223,118,255, -160, 48,157, 92, 71, 78,233, 75, 13, 48,163,156,188, 24,136,178,248,188,220,153,152,206,234, 75, 86,210,121,223,245,100, 13,243, -126,211,219, 72, 58,157,158,119,103,204, 33, 45,133,251,176, 52, 90,215,195, 9,203, 82,214,219,132,209, 97,169,249,106,150, 70, -171, 37, 73, 86, 75, 77,106,206,196,110, 9,173, 78, 75,105,222,156,165,213,177,130,155,232, 68,184, 4,103,167,211,152, 62,210, -154,157,222,185,250,146,171, 47,253, 47,245, 37,107,237, 38, 58, 58,122,249,177, 99,199,222,105, 77,237,188, 33,166,179, 8,145, -149,188,223, 87, 95,106,248,191,206,232, 75, 54, 48, 73, 75,228,223,217,253,233, 65,106,180, 26, 35, 89,141, 61,227,180,150, 12, -152, 26,137,147, 87, 38,112,178, 6,166,197,242,237,228,116, 70,181,132,134,176, 5,196,233,233, 52,174,148,223,105,129,188, 63, - 42,101,234,234, 75,174,190,212,234,250, 82,131, 54, 25,229, 68, 77,145, 83, 53,207, 13, 49,157,241, 14, 75, 12,103,181,209,150, -206,187, 51,251, 82, 75,212,253,163, 38,255, 31, 0, 52, 22,173,101,127,139,184, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130, +137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 2, 90, 0, 0, 2,128, + 8, 6, 0, 0, 0, 68,254,214,163, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, + 10, 79,105, 67, 67, 80, 80,104,111,116,111,115,104,111,112, 32, 73, 67, 67, 32,112,114,111,102,105,108,101, 0, 0,120,218,157, + 83,103, 84, 83,233, 22, 61,247,222,244, 66, 75,136,128,148, 75,111, 82, 21, 8, 32, 82, 66,139,128, 20,145, 38, 42, 33, 9, 16, + 74,136, 33,161,217, 21, 81,193, 17, 69, 69, 4, 27,200,160,136, 3,142,142,128,140, 21, 81, 44, 12,138, 10,216, 7,228, 33,162, +142,131,163,136,138,202,251,225,123,163,107,214,188,247,230,205,254,181,215, 62,231,172,243,157,179,207, 7,192, 8, 12,150, 72, + 51, 81, 53,128, 12,169, 66, 30, 17,224,131,199,196,198,225,228, 46, 64,129, 10, 36,112, 0, 16, 8,179,100, 33,115,253, 35, 1, + 0,248,126, 60, 60, 43, 34,192, 7,190, 0, 1,120,211, 11, 8, 0,192, 77,155,192, 48, 28,135,255, 15,234, 66,153, 92, 1,128, +132, 1,192,116,145, 56, 75, 8,128, 20, 0, 64,122,142, 66,166, 0, 64, 70, 1,128,157,152, 38, 83, 0,160, 4, 0, 96,203, 99, + 98,227, 0, 80, 45, 0, 96, 39,127,230,211, 0,128,157,248,153,123, 1, 0, 91,148, 33, 21, 1,160,145, 0, 32, 19,101,136, 68, + 0,104, 59, 0,172,207, 86,138, 69, 0, 88, 48, 0, 20,102, 75,196, 57, 0,216, 45, 0, 48, 73, 87,102, 72, 0,176,183, 0,192, +206, 16, 11,178, 0, 8, 12, 0, 48, 81,136,133, 41, 0, 4,123, 0, 96,200, 35, 35,120, 0,132,153, 0, 20, 70,242, 87, 60,241, + 43,174, 16,231, 42, 0, 0,120,153,178, 60,185, 36, 57, 69,129, 91, 8, 45,113, 7, 87, 87, 46, 30, 40,206, 73, 23, 43, 20, 54, + 97, 2, 97,154, 64, 46,194,121,153, 25, 50,129, 52, 15,224,243,204, 0, 0,160,145, 21, 17,224,131,243,253,120,206, 14,174,206, +206, 54,142,182, 14, 95, 45,234,191, 6,255, 34, 98, 98,227,254,229,207,171,112, 64, 0, 0,225,116,126,209,254, 44, 47,179, 26, +128, 59, 6,128,109,254,162, 37,238, 4,104, 94, 11,160,117,247,139,102,178, 15, 64,181, 0,160,233,218, 87,243,112,248,126, 60, + 60, 69,161,144,185,217,217,229,228,228,216, 74,196, 66, 91, 97,202, 87,125,254,103,194, 95,192, 87,253,108,249,126, 60,252,247, +245,224,190,226, 36,129, 50, 93,129, 71, 4,248,224,194,204,244, 76,165, 28,207,146, 9,132, 98,220,230,143, 71,252,183, 11,255, +252, 29,211, 34,196, 73, 98,185, 88, 42, 20,227, 81, 18,113,142, 68,154,140,243, 50,165, 34,137, 66,146, 41,197, 37,210,255,100, +226,223, 44,251, 3, 62,223, 53, 0,176,106, 62, 1,123,145, 45,168, 93, 99, 3,246, 75, 39, 16, 88,116,192,226,247, 0, 0,242, +187,111,193,212, 40, 8, 3,128,104,131,225,207,119,255,239, 63,253, 71,160, 37, 0,128,102, 73,146,113, 0, 0, 94, 68, 36, 46, + 84,202,179, 63,199, 8, 0, 0, 68,160,129, 42,176, 65, 27,244,193, 24, 44,192, 6, 28,193, 5,220,193, 11,252, 96, 54,132, 66, + 36,196,194, 66, 16, 66, 10,100,128, 28,114, 96, 41,172,130, 66, 40,134,205,176, 29, 42, 96, 47,212, 64, 29, 52,192, 81,104,134, +147,112, 14, 46,194, 85,184, 14, 61,112, 15,250, 97, 8,158,193, 40,188,129, 9, 4, 65,200, 8, 19, 97, 33,218,136, 1, 98,138, + 88, 35,142, 8, 23,153,133,248, 33,193, 72, 4, 18,139, 36, 32,201,136, 20, 81, 34, 75,145, 53, 72, 49, 82,138, 84, 32, 85, 72, + 29,242, 61,114, 2, 57,135, 92, 70,186,145, 59,200, 0, 50,130,252,134,188, 71, 49,148,129,178, 81, 61,212, 12,181, 67,185,168, + 55, 26,132, 70,162, 11,208,100,116, 49,154,143, 22,160,155,208,114,180, 26, 61,140, 54,161,231,208,171,104, 15,218,143, 62, 67, +199, 48,192,232, 24, 7, 51,196,108, 48, 46,198,195, 66,177, 56, 44, 9,147, 99,203,177, 34,172, 12,171,198, 26,176, 86,172, 3, +187,137,245, 99,207,177,119, 4, 18,129, 69,192, 9, 54, 4,119, 66, 32, 97, 30, 65, 72, 88, 76, 88, 78,216, 72,168, 32, 28, 36, + 52, 17,218, 9, 55, 9, 3,132, 81,194, 39, 34,147,168, 75,180, 38,186, 17,249,196, 24, 98, 50, 49,135, 88, 72, 44, 35,214, 18, +143, 19, 47, 16,123,136, 67,196, 55, 36, 18,137, 67, 50, 39,185,144, 2, 73,177,164, 84,210, 18,210, 70,210,110, 82, 35,233, 44, +169,155, 52, 72, 26, 35,147,201,218,100,107,178, 7, 57,148, 44, 32, 43,200,133,228,157,228,195,228, 51,228, 27,228, 33,242, 91, + 10,157, 98, 64,113,164,248, 83,226, 40, 82,202,106, 74, 25,229, 16,229, 52,229, 6,101,152, 50, 65, 85,163,154, 82,221,168,161, + 84, 17, 53,143, 90, 66,173,161,182, 82,175, 81,135,168, 19, 52,117,154, 57,205,131, 22, 73, 75,165,173,162,149,211, 26,104, 23, +104,247,105,175,232,116,186, 17,221,149, 30, 78,151,208, 87,210,203,233, 71,232,151,232, 3,244,119, 12, 13,134, 21,131,199,136, +103, 40, 25,155, 24, 7, 24,103, 25,119, 24,175,152, 76,166, 25,211,139, 25,199, 84, 48, 55, 49,235,152,231,153, 15,153,111, 85, + 88, 42,182, 42,124, 21,145,202, 10,149, 74,149, 38,149, 27, 42, 47, 84,169,170,166,170,222,170, 11, 85,243, 85,203, 84,143,169, + 94, 83,125,174, 70, 85, 51, 83,227,169, 9,212,150,171, 85,170,157, 80,235, 83, 27, 83,103,169, 59,168,135,170,103,168,111, 84, + 63,164,126, 89,253,137, 6, 89,195, 76,195, 79, 67,164, 81,160,177, 95,227,188,198, 32, 11, 99, 25,179,120, 44, 33,107, 13,171, +134,117,129, 53,196, 38,177,205,217,124,118, 42,187,152,253, 29,187,139, 61,170,169,161, 57, 67, 51, 74, 51, 87,179, 82,243,148, +102, 63, 7,227,152,113,248,156,116, 78, 9,231, 40,167,151,243,126,138,222, 20,239, 41,226, 41, 27,166, 52, 76,185, 49,101, 92, +107,170,150,151,150, 88,171, 72,171, 81,171, 71,235,189, 54,174,237,167,157,166,189, 69,187, 89,251,129, 14, 65,199, 74, 39, 92, + 39, 71,103,143,206, 5,157,231, 83,217, 83,221,167, 10,167, 22, 77, 61, 58,245,174, 46,170,107,165, 27,161,187, 68,119,191,110, +167,238,152,158,190, 94,128,158, 76,111,167,222,121,189,231,250, 28,125, 47,253, 84,253,109,250,167,245, 71, 12, 88, 6,179, 12, + 36, 6,219, 12,206, 24, 60,197, 53,113,111, 60, 29, 47,199,219,241, 81, 67, 93,195, 64, 67,165, 97,149, 97,151,225,132,145,185, +209, 60,163,213, 70,141, 70, 15,140,105,198, 92,227, 36,227,109,198,109,198,163, 38, 6, 38, 33, 38, 75, 77,234, 77,238,154, 82, + 77,185,166, 41,166, 59, 76, 59, 76,199,205,204,205,162,205,214,153, 53,155, 61, 49,215, 50,231,155,231,155,215,155,223,183, 96, + 90,120, 90, 44,182,168,182,184,101, 73,178,228, 90,166, 89,238,182,188,110,133, 90, 57, 89,165, 88, 85, 90, 93,179, 70,173,157, +173, 37,214,187,173,187,167, 17,167,185, 78,147, 78,171,158,214,103,195,176,241,182,201,182,169,183, 25,176,229,216, 6,219,174, +182,109,182,125, 97,103, 98, 23,103,183,197,174,195,238,147,189,147,125,186,125,141,253, 61, 7, 13,135,217, 14,171, 29, 90, 29, +126,115,180,114, 20, 58, 86, 58,222,154,206,156,238, 63,125,197,244,150,233, 47,103, 88,207, 16,207,216, 51,227,182, 19,203, 41, +196,105,157, 83,155,211, 71,103, 23,103,185,115,131,243,136,139,137, 75,130,203, 46,151, 62, 46,155, 27,198,221,200,189,228, 74, +116,245,113, 93,225,122,210,245,157,155,179,155,194,237,168,219,175,238, 54,238,105,238,135,220,159,204, 52,159, 41,158, 89, 51, +115,208,195,200, 67,224, 81,229,209, 63, 11,159,149, 48,107,223,172,126, 79, 67, 79,129,103,181,231, 35, 47, 99, 47,145, 87,173, +215,176,183,165,119,170,247, 97,239, 23, 62,246, 62,114,159,227, 62,227, 60, 55,222, 50,222, 89, 95,204, 55,192,183,200,183,203, + 79,195,111,158, 95,133,223, 67,127, 35,255,100,255,122,255,209, 0,167,128, 37, 1,103, 3,137,129, 65,129, 91, 2,251,248,122, +124, 33,191,142, 63, 58,219,101,246,178,217,237, 65,140,160,185, 65, 21, 65,143,130,173,130,229,193,173, 33,104,200,236,144,173, + 33,247,231,152,206,145,206,105, 14,133, 80,126,232,214,208, 7, 97,230, 97,139,195,126, 12, 39,133,135,133, 87,134, 63,142,112, +136, 88, 26,209, 49,151, 53,119,209,220, 67,115,223, 68,250, 68,150, 68,222,155,103, 49, 79, 57,175, 45, 74, 53, 42, 62,170, 46, +106, 60,218, 55,186, 52,186, 63,198, 46,102, 89,204,213, 88,157, 88, 73,108, 75, 28, 57, 46, 42,174, 54,110,108,190,223,252,237, +243,135,226,157,226, 11,227,123, 23,152, 47,200, 93,112,121,161,206,194,244,133,167, 22,169, 46, 18, 44, 58,150, 64, 76,136, 78, + 56,148,240, 65, 16, 42,168, 22,140, 37,242, 19,119, 37,142, 10,121,194, 29,194,103, 34, 47,209, 54,209,136,216, 67, 92, 42, 30, + 78,242, 72, 42, 77,122,146,236,145,188, 53,121, 36,197, 51,165, 44,229,185,132, 39,169,144,188, 76, 13, 76,221,155, 58,158, 22, +154,118, 32,109, 50, 61, 58,189, 49,131,146,145,144,113, 66,170, 33, 77,147,182,103,234,103,230,102,118,203,172,101,133,178,254, +197,110,139,183, 47, 30,149, 7,201,107,179,144,172, 5, 89, 45, 10,182, 66,166,232, 84, 90, 40,215, 42, 7,178,103,101, 87,102, +191,205,137,202, 57,150,171,158, 43,205,237,204,179,202,219,144, 55,156,239,159,255,237, 18,194, 18,225,146,182,165,134, 75, 87, + 45, 29, 88,230,189,172,106, 57,178, 60,113,121,219, 10,227, 21, 5, 43,134, 86, 6,172, 60,184,138,182, 42,109,213, 79,171,237, + 87,151,174,126,189, 38,122, 77,107,129, 94,193,202,130,193,181, 1,107,235, 11, 85, 10,229,133,125,235,220,215,237, 93, 79, 88, + 47, 89,223,181, 97,250,134,157, 27, 62, 21,137,138,174, 20,219, 23,151, 21,127,216, 40,220,120,229, 27,135,111,202,191,153,220, +148,180,169,171,196,185,100,207,102,210,102,233,230,222, 45,158, 91, 14,150,170,151,230,151, 14,110, 13,217,218,180, 13,223, 86, +180,237,245,246, 69,219, 47,151,205, 40,219,187,131,182, 67,185,163,191, 60,184,188,101,167,201,206,205, 59, 63, 84,164, 84,244, + 84,250, 84, 54,238,210,221,181, 97,215,248,110,209,238, 27,123,188,246, 52,236,213,219, 91,188,247,253, 62,201,190,219, 85, 1, + 85, 77,213,102,213,101,251, 73,251,179,247, 63,174,137,170,233,248,150,251,109, 93,173, 78,109,113,237,199, 3,210, 3,253, 7, + 35, 14,182,215,185,212,213, 29,210, 61, 84, 82,143,214, 43,235, 71, 14,199, 31,190,254,157,239,119, 45, 13, 54, 13, 85,141,156, +198,226, 35,112, 68,121,228,233,247, 9,223,247, 30, 13, 58,218,118,140,123,172,225, 7,211, 31,118, 29,103, 29, 47,106, 66,154, +242,154, 70,155, 83,154,251, 91, 98, 91,186, 79,204, 62,209,214,234,222,122,252, 71,219, 31, 15,156, 52, 60, 89,121, 74,243, 84, +201,105,218,233,130,211,147,103,242,207,140,157,149,157,125,126, 46,249,220, 96,219,162,182,123,231, 99,206,223,106, 15,111,239, +186, 16,116,225,210, 69,255,139,231, 59,188, 59,206, 92,242,184,116,242,178,219,229, 19, 87,184, 87,154,175, 58, 95,109,234,116, +234, 60,254,147,211, 79,199,187,156,187,154,174,185, 92,107,185,238,122,189,181,123,102,247,233, 27,158, 55,206,221,244,189,121, +241, 22,255,214,213,158, 57, 61,221,189,243,122,111,247,197,247,245,223, 22,221,126,114, 39,253,206,203,187,217,119, 39,238,173, +188, 79,188, 95,244, 64,237, 65,217, 67,221,135,213, 63, 91,254,220,216,239,220,127,106,192,119,160,243,209,220, 71,247, 6,133, +131,207,254,145,245,143, 15, 67, 5,143,153,143,203,134, 13,134,235,158, 56, 62, 57, 57,226, 63,114,253,233,252,167, 67,207,100, +207, 38,158, 23,254,162,254,203,174, 23, 22, 47,126,248,213,235,215,206,209,152,209,161,151,242,151,147,191,109,124,165,253,234, +192,235, 25,175,219,198,194,198, 30,190,201,120, 51, 49, 94,244, 86,251,237,193,119,220,119, 29,239,163,223, 15, 79,228,124, 32, +127, 40,255,104,249,177,245, 83,208,167,251,147, 25,147,147,255, 4, 3,152,243,252, 99, 51, 45,219, 0, 0, 0, 32, 99, 72, 82, + 77, 0, 0,122, 37, 0, 0,128,131, 0, 0,249,255, 0, 0,128,233, 0, 0,117, 48, 0, 0,234, 96, 0, 0, 58,152, 0, 0, 23, +111,146, 95,197, 70, 0, 3, 39, 3, 73, 68, 65, 84,120,218,236, 93,119,152, 19, 69, 31,126,103,179,233,185,222, 27, 28,119,244, +222,145,222,139,210,145,206,135, 32, 98,161,136, 21, 4, 11, 74,145,162, 72, 85, 16, 59,160, 72, 85, 16, 84,138,210,123,239, 85, +234,221,113,189,167,151,157,239,143,203,198, 92, 72, 46, 57, 56, 16,113,222,231,217, 39,217,246,238,204,238,148,119,126,243,155, + 25, 66, 41, 5, 3, 3, 3, 3, 3, 3, 3, 3, 67,217,131, 99,175,128,129,129,129,129,129,129,129,225, 17, 17, 90,155, 55,111, +246,217, 4, 70, 8,233,232, 43,167,125,107,243,168,115, 62,192,184,211, 50,228,108, 99,231,252,224, 95, 18,206, 54,143, 42,167, + 24, 95, 95,121, 75,195,233,107,154, 42,101, 56,105, 89,135,243, 65,113,150, 85, 62,114, 19, 78,250, 0,190,251, 7,255,146,112, +182,121,212, 56, 93,211,143, 47,188,165,229,244, 37, 77,221, 67, 56,105, 89,135,243, 65,113,222,111, 62, 42, 33,156,244,126,211, +146,135,111,255, 1,254, 67,224, 31,148,200, 42, 13,186,117,235, 70,156,248,201,163,202,233,252, 30, 68,254,178, 12,107, 25, 98, +103, 89,115,186,188,207,178,194, 7,221,186,117, 35,155, 55,111,222, 5,160, 77, 89,198,189, 44,190,187, 75, 92,203,132,183,180, + 34,171,180,156,101,149,238, 31, 52,103, 89,229, 37, 87,206,178, 72,247,238,190,251, 3,252, 70,101, 21,206, 50,201, 75, 15, 34, +205,187, 73, 63,247,205,235,202, 89, 22,121,201,149,179, 44,210,253,195,224, 44,139,188,228,142,179, 44,210,189,167,111,207, 44, + 90, 15, 87, 16,184,102,240,182,143,178, 32,122, 80, 98,211, 87, 11,204,163,192, 89,198,223,232, 3, 59,103, 89,182,110,218,150, +213, 55,122, 16,233,221,153,179,172,248, 93,121,202,226, 59,185,227,188,223,240,122, 8,103,153,199,253,126,211,253,195,226, 44, +227,111, 84, 38,121,201,133,179,109, 25, 55, 6,218, 58,237,127, 80,150,156,101,149,151,220,132,243,190,191,147, 59,206,251, 13, +175,135,112,150,121,220,203,162, 14,121, 80,188,143,173, 69,235, 65,138,172, 7, 85,169,149, 37,247,131,176,234, 60, 40,203, 91, + 89, 89,117,220,240,238, 42, 67,186,157,101, 29, 78,123,248,200,131,178,190, 62,234, 96,121,137,229,165, 71, 45, 47,185, 75, 55, +221,186,117,251, 96,243,230,205,239, 63,106,141,104,103,206,178, 18, 68,110,226,126, 95,121,201,245,222,178,200, 75, 94, 56,201, +131,136,127, 89,231, 39, 38,180, 74, 97, 41, 42,227,150, 9,202,216, 2,243,192,226, 93,198,225,108,251, 32, 44,132, 15, 0,101, + 30, 78,123, 75,249,253, 7, 16,247,127,203, 59,101,121,137,229,165, 71, 46, 47,185,164,201,182,101,104, 41, 42, 83,203,179, 43, +103, 89, 60,195,153,163,172,210,232,131,142,123, 89,230,165, 7,241,237,255,117,160,148, 62,176, 13, 64, 71,198,201, 56, 25, 39, +227,100,156,140,147,113, 50,206,255,234,198,166,119, 96, 96, 96, 96, 96, 96, 96, 96,120, 64, 32,108,194, 82, 6, 6, 6, 6, 6, + 6, 6,134, 7, 3,143, 62, 90,177,177,177,155,212,106,117, 37, 79,231,181, 90,237,157,148,148,148,118,236, 21, 50, 48, 48,120, +109,209, 17,194,225,239, 81,206, 2, 0, 74, 89, 43,143,129,129,225,191, 44,180, 20, 10, 69,226,133, 11, 23,170, 8,130, 0,155, +205, 6,171,213,234,248, 53,153, 76,104,221,186,117,169, 29,233,163,162,162,118, 75, 36,146, 10,165,185,199,102,179,221, 74, 77, + 77,109, 89, 66, 1,190, 31, 64, 34, 33,196,249, 88,137,191, 0, 82,204,102,115,131,146, 56, 9, 33,137,174,124, 30,184,196,255, + 37,114, 6, 5, 5, 29,229,121, 62,206, 29,151,167,255,130, 32, 92, 75, 79, 79,111,206,146,233,195, 65, 84, 84,212,110,158,231, + 75,157, 62,239,220,185,227, 49,125,198,196,196,156,224, 56, 46,166, 20,148, 18, 65, 16, 46,221,185,115,167,165, 39, 33, 34,166, +121, 47,194,166,216,127, 66, 72,146,213,106,109,228, 45, 31,149,196,229, 38,141,150,200,233, 44,178,120,158,159, 21, 17, 17, 49, + 74,167,211, 25, 0, 80,137, 68, 66, 67, 67, 67,197,176, 1, 0,172, 86,107, 70, 78, 78, 78,109,150, 18, 25, 24, 24,254, 19, 66, + 75, 16, 4,206,104, 52,226,242,229,203,240, 80,222,219,238,225,121, 85,142,253,177, 45,194, 63, 34, 18, 86,179, 25,154,176,112, + 7,119,218,249,179,176, 90,204,176,154, 76, 40,223,184,169, 88,137,161,102,205,154, 18, 47,156,113,179,103,207,142,240,247,247, +135,193, 96,128,193, 96,128,209,104,132,193, 96,128,201,100,130,201,100,130,217,108,134,217,108,134,213,106,133,209,104,196,246, +237,219,189,133, 61,238,195, 15, 63,140, 8, 8, 8,112,240,137,155,200, 41,242, 90, 44, 22, 24, 12, 6,252,249,231,159, 37,114, +242, 60, 31,151,146,146, 18, 33,147,201, 64, 41,133, 32, 8,238,156, 11,139,161, 98,197,138,102,150, 68, 31, 42,170,124,184,114, +115, 68,160, 74, 1,171, 32,160,123,221,138,142, 19,215,190, 90, 3,106,181, 65,176, 90, 81,121,236, 80,160,200, 36,131, 26, 53, +106,148,152, 62, 41,165,241, 31,174,220, 28,228, 43,103,102,102,166,190,122,245,234, 41, 40, 26,250,236,201,226, 19,167,215,235, + 35,196, 48,184, 10, 34,142,227,138,109, 91,182,108, 65,247,238,221,189,197, 61,238,181,215, 94,139,176, 88, 44, 48,153, 76, 48, + 26,141,176, 88, 44,176, 90,173,142,205,102,179, 57, 54,147,201,132, 67,135, 14,249,106,201,154,221,169, 83,167, 17,155, 55,111, +214,252,252,243,207,154, 10, 21, 42, 64, 38,147, 65, 34,145, 64, 34,145,128,227, 56,240, 60,143, 39,158,120,130,176, 36,200,192, +192,240,159, 17, 90, 70,163,241,122,253,250,245,169,253,127,172, 66,161,144,185, 20,160, 49, 85,170, 84,185,228,122,159,183, 46, + 69,255,136, 72, 76, 42, 23, 2, 0,152,124, 51,203, 81, 65,124,212,188,158,227,154,169,201,121, 0, 0,149, 74, 5,226,220,140, +246, 0,141, 70,131, 78,157, 58, 65, 46,151,163, 81,163, 70,144, 74,165,110, 55,153, 76, 6,169, 84,234, 75,229, 0, 63, 63, 63, + 76,153, 50, 69, 20, 73,208, 40, 21,120,185,121, 35, 40, 65,241,197,217, 43, 48, 9, 20, 60,207, 59, 54, 95, 56,101, 50, 25,206, +156, 57, 3,158,231, 33,145, 72, 28,191,226,255,141, 27, 55,162, 95,191,126,224,121, 30, 42,149, 10,248, 15,205, 51,242,168, 32, + 80,165,192,176, 37, 63, 1, 0,110,207, 27,235,248,118,135, 70, 79,118, 92, 19,255,194, 0, 16, 66, 32,149, 74,193,113, 92,153, +113,102,103,103,235, 7, 13, 26,180,215,223,223,127, 75,126,126, 62,188, 8, 56,220,190,125, 27, 60,207,123, 76,239, 28,199, 97, +238,220,185,184,122,245,170, 79,113, 55, 24, 12,248,242,203, 47, 97,179,217,138,241,138,255, 93,143,249, 40,178,166,119,238,220, +121,232,230,205,155,131, 9, 33,248,244,211, 79, 33,147,201,208,181,107, 87,132,134,134, 98,235,214,173,144,201,100,152, 48, 97, + 2, 75,124, 12, 12, 12, 37, 65, 10,160, 30,128,112,187,161,167, 0, 64,144,211,249, 12,251,111,184,211,254, 17, 55, 60,141,237, +215,136,231,197,125, 19, 0,185,155,227, 89, 0, 84,246,205, 8, 96, 63,128, 90, 78,207, 17,239,131,167,231,242, 64,209,250, 67, + 0,118, 2,104, 43, 78,162,119,231,206,157,167,156, 44, 43, 23, 46, 93,186, 84, 77,212, 60,246, 46, 68,153,213,106,173, 34,118, + 39,138,214,162,142, 29, 59,150,216,194,183,154,205,119, 9, 16,119, 90,202, 93,119,133, 39, 1, 99, 54,155, 49, 96,192,128,162, + 47,225,161,210,113,222,124,208,110, 48,153, 76,224,121, 30, 85,203,133,227,189, 46,245,209,132, 90,160, 45, 36,176,230,105,209, +203,207,130, 11, 53, 26, 96,233,173, 12,220,204, 47, 4,207,243, 62,113, 10,130,224, 81,100, 73, 36, 18, 44, 89,178, 4,131, 6, + 13,130, 68, 34,241,137,143,161,236, 97, 21, 4,183,233,208, 83,154,245,229, 59,249,194,153,157,157,173,239,222,189,251, 65,133, + 66,177, 44, 50, 50, 50, 37, 41, 41,201,171,208,114, 21, 63,174,141,138, 79, 62,249, 4, 11, 23, 46, 68,187,118,237,124, 10,167, +209,104, 4, 33, 4, 75,151, 46,189,235,220,180,105,211,238,122, 94, 73,156,246, 6, 18, 23, 19, 19, 51,250,247,223,127, 15, 16, +175, 13, 11, 11,131, 84, 42, 69,237,218,181,225,239,239,143,189,123,247,194,102,179,249,156, 47, 25, 24, 24, 30, 95,184,211, 34, + 78,104, 61,105,210,164, 70,179,102,205,154,209,172, 89,179, 31,247,239,223,191,146, 16,178,201,169, 76,236,110, 47,123, 54, 57, +237, 55,118, 17, 61, 82, 0,225,132,144, 77,226,245,206,251, 78,199, 59, 2,144,139,251,147, 38, 77,170, 53,107,214,172, 25, 19, + 39, 78,124,123,230,204,153,178, 73,147, 38,213,153, 53,107,214, 12,241, 57,238,194,225,206,162, 85,226,172,194, 98, 55,226,197, +139, 23,225,205,127,149, 82, 90, 98,105,169, 9, 11,119, 88,178,166,198,135, 58,142, 79, 73,202,117, 84, 96,139, 26, 86,130, 70, +163, 65,151,169, 31,251,100, 41, 50,153, 76, 72, 79, 79,119, 88, 25,188,109,190,114,170, 85, 74,108,127,173, 54,110,103,201,241, +193,129,108,108, 62,121, 21, 82,169, 20, 79,214,168,141,167,100,254,120, 55, 94,142,215,174,220,128,197, 71,159, 94, 74,169, 91, +129, 37,254, 23,187, 80,152,208,250,231,208,189,110, 69,135,213,233,144,127, 7,199,241,126,218, 51,142,111,242,198,146,143, 0, + 0,237, 26, 60, 1, 95,252,185,189,113,102,101,101,233, 91,118,104,187,203,166, 55,125, 55,116,232,208,235, 59,118,236, 80,249, +212,188,115, 35,180, 68,171,173, 40,178,120,158,135,201,100,242, 41,238, 38,147,201, 99,254,144,201,100,165,182,104, 1,128, 86, +171, 53,109,216,176, 1,139, 22, 45, 66,104,104, 40, 58,119,238,140,232,232,104,172, 89,179, 6,148, 82,140, 29, 59, 22, 42,149, + 74,180, 94,179, 4,200,192,240,223, 70, 73, 90, 68, 49,107,214,172, 25,174, 66,198,121,223, 89, 64,185,136, 41,103,177, 86,203, + 75,253,191,201, 85, 60,137,207, 37,132,108,154, 57,115,102,119, 47,225,200,240, 36,180, 74,156,190,223,104, 52, 94,175, 91,183, +174, 79,106, 66,167,211,165,122, 19, 27,238, 90,245,206, 86, 2, 63, 63, 63,104, 2,252,192,249, 88,238, 90, 44, 22,135, 80,217, +182,109, 27, 84, 42, 21,186,118,237,122, 95, 22, 45,179,217, 12,185, 76, 10, 46, 44, 18,195,230,237, 64, 86,129,222, 81,193,236, +188,118, 29,199,211,210,241, 90,179, 14,208,168,210, 81,104, 50,249,100,121, 19, 4,225, 46,145,197,243, 60, 6, 12, 24,224,176, + 38, 56,251,173,128,117, 29,254, 99,112,151, 62, 93,143, 11, 46,150,170,123,225,204,202,202,210,119,239,222,253,160, 77,111,250, + 46, 57, 57,249, 32, 0,101,147, 38, 77, 74, 45,180, 68,129, 37,149, 74, 49,119,238, 92, 44, 92,184,208,113,222, 87,161,101,181, + 90,139, 9,168, 43, 87,174, 20,123,150,171,176, 43,169,219,148, 82, 74, 9, 33, 2, 0, 33, 49, 49,209,113, 79, 84, 84, 20,130, +130,130, 32, 8, 2, 4, 65,128, 82,169,132, 74,165,130, 76, 38, 99,137,142,129,129,161, 36, 45,162,159, 56,113,226,219,132,144, + 77,118,203,210,217, 18, 4,149, 59, 52,118, 17,107, 25, 30,202,174,238,238,196,150,243,127, 17,147, 38, 77,170,229, 38, 28, 71, + 60, 10, 45,151,105,247,139,193,185, 27,177,172, 42,177,146, 42, 50,191,160, 0,168, 52, 26, 72, 36, 28, 8, 33,212, 27,151,217, +108,118, 20,252,163, 70,141, 42,209,111,197, 87,127, 42,179,217, 12,142,151,224, 78, 84, 2,108,220, 30,199,189,226,198,241, 82, +220,140,170, 6,201,197, 19,144,250, 88,225,186, 90,180,198,142, 29,139, 47,191,252, 18, 28,199, 57,222, 9,207,243,168, 92,185, + 50,174, 95,191,206,114,220, 35, 34,178, 60, 29,183,217, 4,159,173, 48,238,174,203,202,202,210,247,239,223,127, 87, 94, 94,222, +119, 53,107,214,188,130,162,233, 15, 56, 95,249,120,158, 47, 38,176, 68,145,181, 96,193,130, 98,162,200, 98,177,248,212, 16,176, + 88, 44,119, 9,158, 57,115,230, 20,251, 5,128,230,205,155,251,100, 25, 6, 64, 57,142,163, 50,153, 12,157, 58,117, 66,157, 58, +117,240,243,207, 63, 67, 16, 4,140, 25, 51, 6, 42,149, 10,243,231,207,135,213,106,197,236,217,179,153, 69,139,129,129,161, 36, + 45, 98,156, 57,115,230,217,153, 51,103, 58, 44, 75,174, 22, 45, 79,148,118, 81, 21, 46,138, 52, 20,249, 90, 29, 41,161,174,238, +238, 73,128, 57, 31,155, 53,107,214, 12, 55,225,112,237,174,124,248,107, 29,166,158, 59,131,143, 91,212, 7, 80,188,187,112,201, + 19,213,160,241,211, 64,227,239,135,254, 27,247, 0,128,189,208,159,232,147, 69, 75, 20, 90, 89, 89, 89, 37,138,172,210, 88,180, + 56, 57,143,181,113, 57,160,114, 41,120,147,165,152,208,146,240, 82,220, 14, 77, 0, 39,149,129,183, 89,125,226,164,148,222,213, + 85, 56,124,248,112, 16, 66, 28, 35,196,234,214,173,235,204,197,106,158,135,157, 62,143,126,133, 11,235, 70, 3, 0, 90,106,181, +142,111,241, 97,221,191,199,119,204, 59,179,203, 97,125,156,138, 55,239,137, 51, 43, 43, 75,223,164,122,173,131,178,144,192,239, +110,221,186,117, 16, 0, 55,112,224,192,160,186,117,235,250,148, 39,197,193, 21,174, 34,203,217,146, 37,254, 90, 44, 22,159,226, + 46,250, 74,121,131,216,141,232, 45,205, 83, 74,105, 72, 72, 8, 56,142, 67, 64, 64, 0,252,252,252, 28, 35,110,149, 74, 37,212, +106,181,195,191,211, 71,225,198,192,192,240,223, 69,176, 40,116,236, 98,169,152,165,137, 82,218,221, 89, 12,121,234, 66,180, 91, +160,118,123, 51,172,217, 5,154, 91,136,150, 53,151, 50,121,147, 39,145,198,139, 10,210,249, 55, 58, 58,250, 55, 63, 63,191, 4, + 95, 99, 95,154,201, 75,109, 22,243, 93,150, 45, 66, 8,252,252,253,160,242,211, 64,229,239,231,209,234, 85,146,208, 18, 45, 69, + 98,165,179,108,217, 50,248,249,249,225,217,103,159, 45,181,143,150, 67,104,201, 56,108, 85,252, 9,137,156, 47, 38,178,120,158, +135, 68, 42, 69,170, 95, 52, 56,169, 20,188,213, 55, 43, 89, 94, 94, 30,120,158,199,123,239,189,231,104,193, 59,139,172,210,196, +153,225,193,128,218, 44,119, 89,161, 60, 89, 95,239,149, 83,180,100,201, 66, 2,191,171, 86,173,154,195,146,165, 86,171,197,209, +166, 94,193,113,156, 91,145,229, 58, 66,144,231,249,162,180,236,101,116,164,179, 69,107,230,204,153, 14, 94,103, 75,150,136,210, +228, 35, 49,172,187,118,237,194,241,227,199, 49,106,212, 40,168, 84, 42, 44, 92,184, 16, 86,171, 21,211,166, 77,131, 74,165,130, + 92, 46,103,137,143,129,129, 89,179,138,105, 17, 23,100,184,248, 65, 17, 23, 81,147,225, 78, 96, 57,119, 19, 58,253,183,184,225, + 53,185,116, 41,186, 30, 23,127,179,102,206,156,185, 67,180,100, 57, 29, 47, 22, 14,175, 22, 45,133, 66,145,112,249,242,101,199, +100,165, 37,253,154, 76, 38,180,107,215,206,103,203,152, 56,234,144,231, 37,197,132,133,218,223, 15,234, 0,127,168,252,252, 92, + 5, 7,241, 86,136,139, 45, 98,103,161,245,254,251,239,131,231,121,124,249,229,151, 0,128, 55,223,124,211,103, 31, 45,145, 19, + 54,130, 36,250, 23,234,207,235, 7,211,247, 22,164,237, 59, 5,158,231, 17,209,244, 41, 8, 77,250, 65,167,242, 3,111,179,250, + 60,234, 48, 59, 59, 27,215,175, 95,135, 68, 34,193,235,175,191, 94,108,174, 35,215,145,108,219,182,109, 99, 22,173,127, 66,104, + 9, 86,159, 68, 85,105,172,142,206,156,162, 79, 86, 94, 94,222,119,183,110,221, 58, 4,128, 27, 58,116,104,144, 90,173,198,215, + 95,127,173, 3, 32, 95,179,102,141,202,155, 40, 18,211,141, 55,145, 37,149, 74,139,210,178, 47,113,167,197,167, 44,241,230, 24, +239, 75,154, 23,195, 74, 8,129,205,102,131, 74,165, 42,102,201, 82, 42,149, 80, 40, 20, 44,225, 49, 48, 48,120,195,145, 82, 92, +219,216, 73, 52, 29,185, 71,222, 35,101, 21,112,222,147,208, 48, 26,141, 56,127,254,188,175, 60, 62, 79, 94, 90,174,209, 19,152, +154,156, 7, 66, 8,190,104, 94, 19,154, 0, 63,168, 53, 26,244,253,121,151,163,224, 62, 51,227, 77, 40, 52,126,136,105,213,217, +167,130, 92,236, 58,116, 22, 90,185,185,185,144, 74,165,152, 62,125, 58, 56,142,195,236,217,179, 17, 27, 27,139, 59,119,238, 96, +205,154, 53, 62, 89,180, 36, 54, 9,162,159,169, 14,245,240, 64, 4, 60,211, 26,193,157,222, 71,178,137,199,126,131, 26,173, 13, +231, 32,223,186, 0, 38,193,230,243, 8, 44,171,213,138, 93,187,118,185, 58,188,131, 82,234,152,117,223, 98,177,192,108, 54, 99, +246,236,217, 96, 43,148, 60,124, 68, 55, 29,139,240, 70, 47, 1, 0, 54,206,124,206,113,252,189, 51,127,167,207,185,223, 23, 45, + 0, 80,173, 66,231, 82,113,102,101,101,233,159,108,215,124,183, 65,144,126, 91,187,118,237, 98,150, 44,165, 82, 73,236,251, 62, +137,107,142,227, 32,145, 72,238,234, 46,244, 36,182,124,241,209,178, 90,173,142,137, 68, 75,242,103,188, 23,139,214,115,207, 61, +135,232,232,104,135, 37,107,234,212,169, 80,169, 84,152, 52,105, 18, 44, 22, 11, 22, 44, 88,192, 18, 31, 3, 3,195, 63, 33,202, + 30, 56,220,150,164, 6,131,225, 70,157, 58,117,224,225, 92,172, 82,169,148,186, 20,210, 49, 85,170, 84,185,228,218,133, 72, 8, +233, 72, 41,221,238,174, 80, 39,132,192, 63,192, 31, 74, 63, 13,212, 46, 86, 44,165,127, 0, 20,126,126,224,100, 82,119, 21,194, + 93,156,162,111,137,179,208, 18,183,188,188, 60, 72,165, 82, 44, 90,180, 8, 1, 1, 1, 48, 26,141, 94, 57,197, 74, 71, 34,145, + 64,119,187, 0, 23,102,108,135, 92,185, 31,149, 58, 15, 66,180, 84, 5,217,222,245,208,219, 44, 37, 78, 88,234,142,179, 74,149, + 42,152, 60,121,242, 93,211, 58,120, 66,108,108,172,215,184,223, 47, 24,167,123,206,146, 70,197,138, 16,168,205,221,117,110, 57, + 69, 75,150, 65,144,126,123,253,250,117,209,146, 21,168, 86,171,241,249,231,159,235, 0,112,211,166, 77, 83,199,199,199, 75,124, + 73, 75, 18,137, 4,243,230,205,115,235,147,229, 78,116,149, 38, 31, 57,223,219,166, 77, 27,183, 19,150,186, 19,111,238, 56,197, +176,134,134,134, 58, 44, 89, 54,155,205, 49,218, 80,156,125,222, 83,163,130,165, 79,198,201, 56,255, 59,156,143, 43,220,214,242, + 41, 41, 41, 79,122,186,161, 82,165, 74,151, 47, 95,190, 92, 89, 92,138,195, 94,112,202, 12, 6, 67,149,230,205,155,123, 53,237, + 8,130, 0,133, 66, 1, 74, 41,218, 79,158, 5,194, 1, 28,138, 87, 98, 17, 45, 58, 64, 34,225, 33, 20, 45,245,225,117,212,161, + 94,175, 47, 86, 57,184,219, 10, 11, 11, 97, 52, 26,125,158,205,219, 96, 48, 20,155,130,129, 80, 1, 55,255, 88,125,215,232, 67, +113,243,213,111, 71,169, 84, 22,235,250, 41, 9,222,230, 36, 99, 40,123,136, 3, 22, 0,160,106,243,174, 16, 4, 27,168,205, 86, +108,153,164,234, 9, 79, 66,160, 54,152, 45, 58, 24,141, 70,111,102, 71,146,153,153,169,239,223,191,255, 46, 0,223,244,234,213, +235, 18,138, 70,188, 80, 63, 63, 63,133, 84, 42, 21, 0,100, 3,160, 57, 57, 57,129,201,201,201,130,193, 96, 40,239, 45,156,155, + 55,111,198,249,243,231,209,170, 85,171, 98,203, 65,137, 86, 81,231,217,221,125, 73,159, 98,119,185,187, 25,225, 61, 9, 57, 95, + 33,145, 72, 16, 24, 24, 8,153, 76,134,233,211,167, 67, 38,147, 65,173, 86, 3, 0, 22, 44, 88,224,152,124,149,129,129,129,225, + 63, 35,180,188,149,155, 37,116, 43,150,216,133,104,181, 90,147,226,227,227, 75,245, 48,155,205,150,230, 69,184, 37,173, 89,179, + 70,230,108,133,240,246, 75, 41, 77,243, 82,217, 38,109,220,184, 81,230,206,186,225,105,129,105,111,156, 54,155, 45,169, 66,133, + 10, 30, 45, 38,238, 96,177, 88,146, 89, 18,125,120,176,217,108, 37,164,207,119,238, 53,125, 94,169, 90,181,106,114, 80, 80,208, +175,145,145,145, 89,251,246,237, 11,109,220,184,113,168,243, 53,141, 27, 55,142,118,185,205, 4,207,235, 28,130, 16,146,212,171, + 87, 47,183,105, 94, 20, 77,110,210,103,146,183, 52,127,248,240, 97,153,243,253,158,248,157,242, 81,146, 15,194,245,102,253,250, +245, 57,103, 30, 79,105,223, 98,177,100,176, 84,200,192,192,240,159, 23, 90,122,189,254,118,157, 58,117,172, 30,206,221, 42,233, +222,204,204,204, 70,101, 29, 1,179,217,220,252,223,192,153,145,145,209,136, 37,183, 71, 27, 15,226, 27,165,165,165, 53, 41,107, + 78,171,213, 90,230,233,211, 98,177, 52,127, 16,239, 52, 43, 43,171, 25, 75, 89, 12, 12, 12, 76,104,149, 2,190, 78,227,192,192, +192,192,192,192,192,192,240, 95, 7,199, 94, 1, 3, 3, 3, 3, 3, 3, 3,195,131, 1, 65,209, 42,213,119,161, 52,163, 9, 8, + 33, 29, 75,251, 96,111,252,140,147,113, 50, 78,198,201, 56, 25, 39,227,124,252, 56,189,113, 63,118,163, 25,197,209, 84, 15, 98, + 3,208,145,113, 50, 78,198,201, 56, 25, 39,227,100,156,140,243,191,186,177,174, 67, 6, 6, 6, 6, 6, 6, 6,134, 7, 4,158, +189,130,127, 6,132, 16, 9,165,212, 86,134,148,193, 0, 60, 45, 24,103, 2,144,115, 47,193, 4, 32,179,111,226, 68, 71, 22, 0, +102,251,230,195,212,245, 83,184,148,148,224, 90,212, 38,109, 76, 9,145, 10, 2, 78,150, 47, 95,238, 4,240,164, 9, 0,252,162, +106,212,240,211,168, 58, 26,205,166, 4,133, 84,126, 62, 87, 91,184,205,144,118,233, 6, 75, 33, 12, 12,255, 72,185,212, 3,192, + 20,123,222,159, 73, 41, 93,205,222, 10, 3,195, 3, 18, 90,254,254,254, 71, 57,142,139,243, 54, 63,143, 83, 6,133,205,102, 75, +202,206,206,110,228, 99,134,230, 1,244,247,243,243,107, 39,149, 74, 91, 0,128,197, 98,217, 87, 88, 88,184, 3,192, 26, 74,169, +245, 30, 11,138, 0, 0, 3, 0, 12,177, 31,250, 1,192,106, 74,105,254, 61,242,213, 9, 12, 12, 92, 39,149, 74,105,102,102,102, + 83, 0, 8, 13, 13, 61,104,177, 88, 72,126,126,126, 95, 74,233,233, 82,242,113, 82,169,116,110,171, 86,173, 90, 19, 66,190,161, +148, 46, 42,163,111,169,224, 56,206,173, 64, 17, 4,161,194, 61,240,201, 0, 4, 46, 90,180, 40,116,197,138, 21,245,147,146,146, +106, 3, 64, 92, 92,220,153,161, 67,135,158,120,249,229,151,179, 0,228,217, 5,151, 71,164,164, 4,215, 74, 79,189, 54, 42, 45, +253,252, 0, 0,136,138,174,189, 90, 34,225,100,177,177,199, 15,168,195,134,132, 85,173, 86,241,165, 31,191, 94, 36,171,144, 80, + 14,127,238, 63, 94,239,229, 87,222,174,165,140,172,250, 9, 19, 91, 15, 15, 1, 1, 1, 71, 57,142,139, 43, 41,143,187,203,243, + 54,155, 45, 41, 43, 43,171,145, 39, 78,158,231,227, 74, 42, 47,220, 29, 19, 4,225, 90, 70, 70,134,219,169, 38, 2, 3, 3, 15, +240, 60,159,224, 43,151,248,107,181, 90,147, 60, 77, 45, 19, 24, 24,120, 84, 34,145,196,149, 20, 79,119,231, 4, 65,184,150,158, +158,238, 41,156,119,197,189, 44,194,121, 47,156, 37,133, 83, 44,143, 0, 44, 8, 13, 13,125, 34, 43, 43,235,127, 0,222,206,207, +207,175, 43,145, 72, 16, 18, 18,242, 54, 33,228,106, 96, 96,224, 87,121,121,121,251, 1,188, 66, 41, 21, 88,142, 97, 96, 40, 35, +161,197,113, 92, 92,114,114,114,132, 70,163, 1,240,247,122,124,226, 98,210,130, 32,128, 82,234,248,181, 90,173,168, 94,189,186, +175, 98,163,118, 64, 64,192,218, 73,147, 38,149,239,223,191,191, 92, 92,106, 38, 37, 37,165,202,186,117,235,254, 55,125,250,244, +247, 9, 33,253, 40,165,103,124, 21, 47, 0, 58, 0, 24, 94,191,126,253,167,167, 78,157, 42,107,223,190, 61,108, 54, 27,126,253, +245,215, 86,211,166, 77, 91, 68, 8, 89, 15,224, 59, 0,127,248, 90, 88, 16, 66, 90, 70, 69, 69,173,220,187,119,111,244,245,235, +215,109,253,251,247, 95, 5, 0, 71,143, 30, 77,180,217,108,164,105,211,166,155, 9, 33,131, 41,165,123, 75,241,206,159, 30, 55, +110,220,192,177, 99,199, 70, 60,251,236,179, 35, 0, 44,178, 63,139,216,223,115,105, 23, 56,116, 88,178, 40,165,178, 18,174,139, + 42,133,101, 75,115,253,250,245,224,230,205,155,143, 78, 79, 79,127,205,153, 55, 45, 45, 13,199,142, 29, 51,207,152, 49, 99,222, +254,253,251, 23, 39, 36, 36,228, 0,208,122, 34,162, 54,105,227,180,244,243, 3, 90, 55, 91, 20, 8, 0,107, 54,142, 30,116,248, + 68,134,255,166,223,151,254, 79,174,148, 25, 87,124, 49, 79, 86,185, 82, 5,236, 60,122, 5,135,206,103,147,218, 45,187,243,121, +155,150,119, 2,176,148,101,207,135, 3,137, 68, 18,155,148,148, 20,161, 86,171,221, 46, 28,239,226,151, 33, 78,128,138, 42, 85, +170,120, 46, 88,120, 62, 46, 57, 57, 57, 66,169, 84, 58,202, 14,215, 50, 67, 44, 87, 28,105,133, 82, 84,173, 90,213, 92, 66,153, + 20,127,235,214,173, 8,181, 90,237,224,113, 23, 62, 87,193, 81,181,106,213,146,226, 94, 44,156,190,112, 82, 74, 81,185,114,101, +155,183,184,139, 43, 96,120,139,183,200,153,144,144, 64, 75,195,233, 75, 56, 43, 86,172,104,246,242,249, 23, 92,186,116,105,108, +185,114,229, 80,185,114,229,253, 79, 60,241, 68,128, 70,163,193,239,191,255,142, 26, 53,106,212, 10, 8, 8, 56,180,102,205, 26, +233,132, 9, 19,234,125,251,237,183, 0,240, 50,203, 49, 12, 12,101, 36,180, 8, 33,208,104, 52, 88,181,106,149,199,229, 56,156, +255,151, 47, 95,222,167, 7, 18, 66, 26, 37, 36, 36,236,218,187,119,175, 42, 58,250,239, 9,177, 77, 38, 19,130,131,131, 49,102, +204, 24,121,143, 30, 61, 42,119,238,220,249, 32, 33,164, 13,165,244,168, 23,190,167,195,195,195, 63,125,239,189,247, 34, 7, 14, + 28,136,208,208, 98,147,110,163,127,255,254,232,219,183,175,236,210,165, 75,131,150, 45, 91, 54,104,201,146, 37,169,132,144,151, + 41,165,235, 75,226, 85,171,213,189, 42, 85,170,244,249,222,189,123, 35, 34, 34, 34,144,152,152,200, 77,152, 48,161,114,149, 42, + 85, 84,113,113,113,220,157, 59,119,240,243,207, 63,199, 14, 30, 60,120,173, 92, 46,127,201,100, 50,109,240, 33,238,242,208,208, +208,183, 95,122,233,165,176,252,252,124,235,177, 99,199, 46,139,199,229,114,249,180,102,205,154, 53, 38,132,124, 79, 41,253,234, + 94, 44, 89,118,171,157,235, 90, 38, 22,241,188,143,150, 45,249,201,147, 39, 67,154, 53,107,182,222,104, 52, 54, 24, 53,106,212, +173, 25, 51,102,168, 2, 2, 2, 2, 0,144,252,252,252,156, 41, 83,166,152,230,207,159,255, 86,141, 26, 53, 58, 28, 56,112,224, +233,122,245,234, 89,236, 34,238,110,161, 69,136, 35, 60,183,147, 51,176,107,191, 32,159, 60,233,205,184,143, 62, 76,184,121,228, +220,109,129, 87, 5,224,151,221,103,145,150, 85,136,223, 14,156, 67, 84,168, 63,145, 41,164,181,130,226,106,181,201, 75, 62,183, +155,178,149,181, 31, 56, 8, 33, 80,171,213,248,229,151, 95,238, 90,186,202,221,178, 86, 60,207, 35, 40, 40,200,235,234, 6, 74, +165, 18,219,182,109,115,187,246,162,187, 37,125, 2, 3, 3,129, 18, 22,213, 38,132, 64,169, 84, 98,223,190,125,224, 56,206,237, +210, 64,174,199, 52, 26, 13,184, 18,214,186, 18, 57,119,239,222,237,149, 75,252,245,243,243, 3, 0, 73,137,153, 82,161,192,222, +189,123, 61,198,217,245,191,159,125,189, 87,111,156,251,246,237, 43,182,244,151,235,146, 96,206,251, 26,141,198,209,128,243,216, + 74, 11, 14,110, 26, 23, 23,135,195,135, 15, 99,205,154, 53, 33,181,106,213,194,149, 43, 87, 64, 8,193,140, 25, 51, 72,205,154, + 53,165,169,169,169,104,213,170, 21,126,250,233,167,230, 44,183, 48,252,131,144, 2,168, 7, 32, 28, 69,171,208, 20, 0, 8,178, +215, 61,114, 0, 89, 0, 84,246,205, 8,160, 16, 64,152,253,222, 76,123,217,226, 44, 16, 50, 80,124,241,233,198,118,110,113,133, +138,112,167,115,226, 51, 92,247, 93,127,221,114,243, 0,176,121,243,102,177, 50,107,219,173, 91,183, 93,197, 98,230,131,200, 18, +215, 41,115,205,211,110, 22,152, 85,104, 52,154,117, 7, 15, 30, 84,133,135,255, 29, 7,163,209,136,130,130, 2, 20, 22, 22,162, +160,160, 0,254,254,254, 88,179,102,141,170, 67,135, 14,235, 8, 33, 85, 40,165, 70, 79,156, 0,230,221,185,115, 39,210,106,181, + 66, 46,151,123,106, 9,163,122,245,234,120,251,237,183,209,165, 75,151,168,118,237,218,205, 3,176,190, 4, 78,168,213,234,207, +143, 29, 59, 22,161, 86,171,113,249,242,101, 36, 37, 37,225,141, 55,222, 40, 39, 8, 2,110,223,190,141, 43, 87,174, 32, 57, 57, + 25,203,150, 45,139,232,221,187,247,231, 0, 54,148, 20,119, 59, 70,189,246,218,107,213,130,131,131,185,143, 63,254, 56, 87,171, +213,126,102, 63, 62,121,225,194,133,207,180,110,221, 58, 98,228,200,145,148, 16,178,130, 82,122,151,112,113,225,116,103,201,178, + 1,184,224,114, 91,117, 23, 75, 87,148, 61, 17,230,186,225, 36, 0, 2, 59,119,238,252,186,209,104,108,176,119,239,222,171, 45, + 90,180,136, 7,112, 71, 76,124,129,129,129,154,121,243,230, 69,118,239,222,253, 82,251,246,237, 27,116,238,220,249,245,140,140, +140, 25,246,243,212,149, 83, 16,112, 50, 42,186,246,234,221, 7, 94, 30,176,115,159, 73,246,230, 43,239,223, 42, 95,174, 66,222, +201,203,217,182,115,215, 50, 80,160,183,162, 79,251,162, 5,204,155,214, 46,143, 79, 87,237,197,152, 87,223,145,174, 95,189,188, +239, 85, 10, 13,128,205, 37,188,207,251, 2,227,252, 91,108, 8,130, 0,169, 84,138,167,158,122, 10,132,144,187,214,242,148, 74, +165, 56,112,224, 0,218,183,111, 15,169, 84,138,231,158,123,206, 39, 78,158,231,209,185,115,103,199, 58,138,206,124,174,162,193, +157, 38,112,141, 59,165, 20, 60,207,131,227, 56,143, 11,105,187,114,122, 43,151,196,112,150,196,229,124,206, 91, 56, 69,107,146, +175, 34,203, 87, 78, 49,156, 60,207,163,121,243,230, 56,113,226, 68,137,162,203,157,190,116,141,123, 78, 78,206,176, 42, 85,170, +236, 94,180,104, 81, 8, 0,100,101,101, 57, 22,188,151, 72, 36,184,120,241, 34, 76, 38, 19, 62,248,224, 3,115,126,126,254, 72, +150,143, 24,231,131,228, 44, 73,139, 0,104, 61,105,210,164, 70,179,102,205,154,209,172, 89,179, 31,247,239,223,191,146, 16,178, +137, 82,218, 93,252,157, 52,105, 82,173, 89,179,102,205,152, 56,113,226,219, 51,103,206, 60, 75, 8,217, 4, 0,174,251,246,240, +119,119, 17,113,225, 34,143, 61,207, 21,187,214,221,190,235,175, 7,238,191, 45, 90,221,186,117, 35,246, 72, 18,231, 66,205, 87, +161,229,203,218,125, 60,207,143,157, 49, 99, 70,100, 73, 34,171,176,176, 16, 41, 41, 41,136,143,143,199,115,207, 61, 23,185,104, +209,162,177, 0,230,148, 64, 43,147, 72, 36, 56,124,248, 48,210,211,211, 81,167, 78, 29, 36, 36, 36, 20,187,224,175,191,254,194, +175,191,254,138,220,220, 92, 52,108,216, 16, 40,242, 63,114,139,122,245,234,125, 80,189,122,245,206,157, 59,119,182,170, 84, 42, +156, 60,121, 18, 13, 26, 52,192,170, 85,171, 80,190,124,121,168,213,106, 92,186,116, 9,117,234,212,193,174, 93,187, 16, 30, 30, +142,250,245,235, 91, 27, 54,108,184, 39, 59, 59,123,199,141, 27, 55, 62,240,208,114,150,197,198,198,190,255,226,139, 47,202, 83, + 82, 82,132,239,190,251,110, 47,165,116, 47, 33,100,236, 59,239,188, 51,162, 75,151, 46, 17,199,143, 31,207, 59,114,228,200, 33, +119, 34,203, 71, 75,150,213,181, 82,178,217,108, 70,189, 94,111, 50, 26,141, 22,142,227,110, 16, 66, 76, 54,155,205, 83,159,143, +114,248,240,225, 21, 51, 51, 51,199,188,250,234,171,215,237, 34,235, 34,138, 28,224, 1, 0, 86,171,213, 88, 88, 88,152,223,172, + 89,179,248,193,131, 7, 95, 93,185,114,229,152,225,195,135,175,249,238,187,239, 10, 1,232, 93, 9,203,151, 47,119, 66, 34,225, +100,218,130,144,107,107,215,124,245,218,175, 27,199,150,187,125, 59,185,114,104, 88,184, 86,230, 23,158,178,230,135,111,143, 2, + 48,165,100,228,227,244, 95,169,144, 74, 37, 56,127, 59, 15,173,159,236, 47,189,122,249,195,150,162,208, 98,120,160,160,226, 34, +212, 59,119,238, 44,209,162,117,224,192, 1, 72,165, 82,168, 84, 42,204,159, 63,191, 68, 82, 81, 24,136,214, 34,111, 98,134,227, +184, 18,203, 17, 81,108,136, 11,189,187,110,159,125,246, 25, 94,125,245,213, 98,207,176,139, 13,226,141,211, 83,248,226, 43, 84, + 64,122, 90, 90,177, 99,190, 44, 74,111,179,217, 32,149, 74,241,229,151, 95,162,123,247,238,216,180,105, 83,137,191, 79, 61,245, + 20, 56,142,163,190,188,207,230,205,155,195,108, 54, 59,194,124,241,226, 69,183,188, 75,150, 44,241,102,201,236, 1, 96, 74,131, + 6, 13, 2,218,181,107,135,221,187,119,163,111,223,190, 70,179,217,124,217, 94, 39, 84, 93,180,104,145,252,216,177, 99, 8, 13, + 13,149,222,186,117,235, 27, 66, 8,115,144,103,120,160,112,167, 69,196, 58,111,214,172, 89, 51, 92, 69,140, 51,196,243,132,144, + 77, 51,103,206,236,238, 44,138,156,247,157,172, 78,206, 34,174,150,179, 69,202, 89, 68,121, 18, 80, 46,245,173,243,245, 25,110, +133,150, 61, 98,109,157,173, 64, 98,225,235, 77,100,121,106, 57,186, 34, 48, 48,176,107,159, 62,125, 28, 34,199, 96, 48, 56, 4, +150, 40,178,196,253, 75,151, 46,161, 81,163, 70,178,192,192,192,174, 94,132,150, 40,226, 16, 19, 19,131,204,204, 76,156, 57,115, + 6,241,241,241,176, 88, 44,216,178,101, 11,242,242,242, 32,149, 74, 33,147,201, 96, 54,151,236,178, 80,189,122,245,167, 86,172, + 88,209,104,249,242,229, 57, 98,139,238,135, 31,126, 0,165, 20,225,225,225,208,233,116, 72, 75, 75,195,142, 29, 59, 96,181, 90, +225,231,231,135,196,196, 68,121,175, 94,189, 90, 78,153, 50, 69, 10,224, 3, 15,212,205,251,246,237, 27, 24, 16, 16,128, 87, 94, +121,133,154,205,230,153,132,144,230,125,251,246,125,255,229,151, 95, 14,189,113,227,134,233,249,231,159, 63,108, 54,155, 63,182, + 23,130, 82, 74,169,197, 75,139,194,163, 37,203, 98,177,136,239,244,122, 97, 97, 33,194,194,194,226,189,248,112, 1,128,108,223, +190,125,205, 1, 72,166, 77,155,166, 4,144,230, 44,178, 76, 38, 19, 10, 11, 11,161,213,106, 45,121,121,121,233,227,199,143,183, +174, 92,185, 82, 98,191,231,188, 59,161, 5, 60,105,170, 89, 83, 35,167, 84,242,206,210,165, 75,253,186,116,233,194,249,249,249, +161,160,160, 32,224,183,223,127,247,235,208,174,101,226,140, 89, 31,109, 13,136,171,147,182,239,228, 53, 36,167,230,193,100,177, + 32, 49, 58,176,200, 30,198,240,192, 97, 31,200,226,176,104, 57,139,138,221,187,119,227,201, 39,159,116,228,117,153, 76, 86,204, +242,229,141,147,231,121, 60,249,228,147,119, 89,120,118,238,220,233,214,250,228, 13,206,162,200, 85, 28,185, 19, 96, 28,199,193, + 91,239,179,104,205,115, 39,182,156,173,250, 46,226,205, 91,107, 31, 60,207,227,229,151, 95,134, 84, 42,197,132, 9, 19,192,243, + 60,234,215,175, 15,158,231,209,172, 89, 51, 72,165, 82,180,111,223,190,212,113, 63,120,240, 32, 26, 52,104,224, 8, 83,253,250, +245,209,184,113, 99,240, 60,143, 86,173, 90, 65, 42,149,162,115,231,206,190,112,190, 93, 80, 80, 80,215,207,207, 15,151, 46, 93, +130, 68, 34, 1, 33,228, 10,165,180, 46, 0,188,248,226,139, 87,117, 58, 93, 69,131,193,128, 23, 95,124,145,152, 76,166, 58, 19, + 38, 76,120, 7, 0, 19, 90, 12, 15, 12,174, 90,196, 9,250,137, 19, 39,190, 77, 8,217, 36, 90,168, 92, 45, 79,238,246,221,148, + 77,162, 24, 18,187,246, 26,187,136, 56,177,219,175, 91, 9,247,154, 92,132,149,107,215,225, 17,159, 45, 90, 98,225,235,171,208, +242, 6,131,193, 80, 47, 34, 34,194,163,200,114,254, 53,153, 76, 72, 72, 72,128,193, 96,168, 87,218, 74, 35, 58, 58, 26,102,179, + 25, 95,125,245, 21,100, 50, 25,100,178,191,245,133,201, 84,178,177,232,220,185,115,215, 15, 30, 60,216,160, 97,195,134,193, 63, +253,244, 83, 70,155, 54,109,194,187,116,233, 2,149, 74, 5,189, 94, 15,139,197,130,166, 77,155,162,122,245,234, 72, 74, 74,194, +111,191,253,150, 89,165, 74,149,176, 67,135, 14, 9,169,169,169, 55, 75,160,238,212,161, 67, 7, 16, 66,240,251,239,191,103, 82, + 74,143, 40,149,202, 95, 63,252,240,195, 96,147,201, 36, 12, 29, 58,244, 86,118,118,246,171, 0,204, 10,133, 98, 97,231,206,157, +155, 73, 36,146,239,109, 54,219,252,210, 38, 84,215,119,171,213,106,161, 84, 42,125,153, 74, 66,154,157,157, 93, 27, 0, 52, 26, + 77, 8,128,171,142, 20,174,215, 23, 19,195, 38,147,201, 16, 18, 18,162, 1, 0,251, 61, 82, 15,223, 35, 92,173, 86,175,189,121, +243,154,191,179,255, 92, 80, 80, 16,134, 12, 30,204,181,104,222, 92, 94,183, 94,189,206,239,126,178,124, 85, 76,104,128, 41, 49, + 38, 20, 22,155, 5,219,183,110, 17,168, 96,217,202,138,157,135, 35,180, 68,177,225,106,209,146, 74,165,216,181,107,215, 93,199, +100, 50, 25,190,248,226, 11,159,132,129, 40,170, 60,117,157,185,116,117, 17,111, 2, 70, 42,149, 66, 34,145,224,203, 47,191,132, + 32, 8,120,237,181,215,138,117, 39, 58,243,251,216, 5,226,184,167,250,251, 2, 0, 19,146,230, 42, 28,247,187,134,215,126,143, + 79, 86,178, 69,139, 22,249,100,209,234,214,173,155, 87,225,234,220,195,224, 28,174, 19, 39, 78,184,229, 93,186,116,169,215,247, +105,179,217,176,121,243,102,135, 72, 21,241,222,123,239,189, 24, 23, 23, 23,185,103,207, 30,164,166,166, 66,171,213,162,176,176, + 16, 77,155, 54, 77,236,216,177,227,201,212,212,212, 27,231,206,157,235,195,114, 15,195, 67,180,104, 25,103,206,156,121,118,230, +204,153,110, 45, 86,174,150,165,146, 44, 79, 78, 2,235, 8,236, 93,134, 19, 39, 78,124, 27, 69,110, 53, 71,124,184, 87,238,218, +117, 88,162, 33,200, 69, 69, 78,113, 87,248,250,210,125,232,163, 57,157, 39,132,192, 96, 48,184, 21, 88,206,226,192,108, 54, 35, + 59, 59, 27, 54,155,237,158,231,250,114,215,146,245, 38,180,206,156, 57,243,236,136, 17, 35, 82, 2, 3, 3,235,102,100,100,164, + 11,130,208,254,192,129, 3,225, 60,207, 35, 32, 32, 0, 1, 1, 1,248,245,215, 95,161, 86,171,241,242,203, 47,167,219,108,182, +221,254,254,254,161,122,189,254, 84,106,106,234,187, 30, 21,140, 84,218,185, 85,171, 86, 56,118,236, 24,114,114,114,182, 17, 66, +234,143, 28, 57,242,201,114,229,202,145, 15, 63,252,208,240,215, 95,127,205, 7,144,174,209,104, 86,172, 88,177,162, 93,195,134, + 13,253,135, 14, 29, 10, 66,200, 82, 74,169,193,215, 56,107,181,218, 98, 2, 43, 63, 63, 31, 5, 5, 5,208,104, 52, 86, 31,223, +153, 20, 69,190, 86,162,191,149,227,219,216,173, 89,226,247,161, 60,207,211,162, 75,168,212, 19,159, 70,163,153,182,124,249,114, +149,235, 32, 5,155,205,134,180,180, 52, 4, 4, 4,224,189,119,223,149, 77,125, 99,100, 3,137, 95,228, 1,142, 35, 48,153,105, + 46, 21, 76, 91,180,105, 3,247,176, 98,231,225, 64, 20, 6, 61,123,246,188,171,187, 80, 38,147, 97,219,182,109,232,221,187,183, +163,225,210,176, 97, 67,175,141, 43, 81, 24,244,232,209,195, 97, 25,218,178,101,139,219,110, 63,209, 34,229,139, 32, 20,175, 29, + 55,110, 28,120,158,199,167,159,126,138,215, 95,127, 29, 28,199, 97,238,220,185,224, 56, 14,147, 39, 79,246, 89,100, 58, 11,152, + 27, 31, 21,253,198,189,158,143,172, 37,145, 0, 0,255,128, 0, 49, 66,165, 42,123,120,158,119, 88,178,234,213,171, 7,169, 84, +138,102,205,154,129,231,121,135, 37,171,107,215,174,206,239,145,250,194,201,243, 60, 46, 95,190,236, 8,115,179,102,205,138, 89, +178,120,158, 71,183,110,221,124, 9,230,140,160,160,160, 41,213,171, 87,175, 49,111,222, 60,169, 68, 34, 65,135, 14, 29,170, 62, +255,252,243, 55, 67, 67, 67, 67,167, 77,155,166,118,115,143, 10, 64,221, 26, 53,106,104, 88,174, 97,120,128, 22,173, 41,110, 78, + 5, 59,251, 92,149,162, 33,185,201,249,122,145,195, 85, 28,217, 45,100,187,189,113,185,187,215, 27,120, 81, 65,150,100, 82,247, + 69,104,217,205,206, 37, 62, 76,173, 86,159, 78, 79, 79,111,166, 82,169,138,137, 44,119,130, 75, 34,145, 32, 53, 53, 21,106,181, +250,116, 89,126, 68,111, 93,135,118, 81,243,134,211,139,237,216,181,107,215,239,182,109,219, 22,189,125,251,118, 28, 58,116, 8, +225,225,225, 88,180,104,209,157,180,180,180,103, 41,165,219,124,121,110,197,138, 21,107,251,249,249, 97,223,190,125, 0,176, 11, +192,200, 49, 99,198, 16,139,197,130, 37, 75,150,104, 1,252, 30, 20, 20,180,121,205,154, 53, 13,234,214,173, 43,223,190,125,123, +254,161, 67,135,254,240, 81,100,217, 4, 65,184, 75, 96, 57,191, 83,127,127,127, 95, 44, 90,150,192,192,192, 51,249,249,249,253, +245,122,125,190, 66,161,240,207,207,207, 55, 58, 11, 44,145,159,231,121,233,229,203,151, 83, 0, 36, 6, 6, 6,158,129, 83, 23, + 99,177, 4,198,243, 29, 58,116,232,192,187,126,131,180,180, 52,164,166,166,194,108, 54,163, 97,195,134, 68, 66, 44,146,236, 91, +167, 94,100,197,204, 63, 98,209,162, 98, 94, 23, 71, 9,186, 27,105,184,101,203, 22,199, 62,199,113,176, 15,247,247, 42,138,182, +109,219, 86,162,195,186, 75,215,161, 87,211,184,120,253,226,197,139,139,150,183,176, 91,178, 56,142,195,196,137, 19,161, 80, 40, +240,225,135, 31, 98,226,196,137,224,121,222,107,215,161,179,128,169, 48, 65,231,220, 56, 42,202, 20,118,127, 40, 66,136,179,216, + 34,190,138,183,146,172,121,190,244, 4, 56,115,138,247, 41,149, 74,143,142,240, 46,156,164,132,120,255, 66, 8,185, 22, 29, 29, +189,175, 89,179,102,129, 71,143, 30,197,220,185,115,101, 70,163,177,252,246,237,219, 29,207,117,247,190,180, 90,173,138,229, 28, +134, 7, 97,205, 42,225,116,134,139,127, 21,113,238,198, 43,225,215,245,122, 56, 29,115,230,205,112,169,199,156,143,187,138, 43, +215,103, 56, 95,147,225,209,162,229,173,176,240, 38,184,124,177,104,233,116,186, 63,126,255,253,247,198,131, 7, 15,230, 75,234, + 54,212,106,181,136,140,140,196,217,179,103,173, 58,157,238, 15, 31, 44,101,101, 38,180,220, 20, 42,219,163,162,162, 36, 22,139, + 5,149, 43, 87, 70,108,108, 44, 12, 6, 3,114,115,115, 37,190,138, 44, 66,136,172, 81,163, 70, 18, 0,200,205,205, 5,138,134, +154, 86,173, 82,165, 10,142, 29, 59,134,236,236,236,245, 0,186, 76,153, 50,165, 97,211,166, 77,101,171, 86,173,210,141, 26, 53, +106,189,197, 98,249,192, 71,107,132,201,106,181, 38,112, 28,103,206,205,205, 77,118,126,159,145,145,145, 33, 26,141,134,164,165, +165, 89,124, 17, 90,117,235,214, 61,124,235,214, 45, 76,155, 54, 45, 99,198,140, 25, 85, 10, 10, 10,114,242,242,242,172,206, 98, +203, 96, 48,112, 97, 97, 97,138, 37, 75,150,168, 0,160,110,221,186,135, 61, 9, 45,173, 86, 91, 78,173,254,187, 97,108, 52, 26, +145,154,154,138,212,212, 84,164,165,165,161,160,160, 0,137,137,137,208,233,116,241,172,152,249,199,132, 86,177,238, 51,231,252, +237, 92,145,151, 38,175, 59, 11,152,158, 61,123, 58,124,187, 68, 11,153,184,173, 93,187,214,213,193,220, 39,161,181,120,241, 98, +140, 27, 55, 14, 74,165, 18,243,230,205, 43,214,117,232, 42, 14, 4, 65, 32,190,196, 61,225, 45, 61, 82, 23,134, 64, 42,149, 34, +116, 84, 90,177, 46, 58, 55,130,195,167,112,206,152, 49,163, 76,186, 14,157, 57,227,227,139,178,202,151, 95,126,137,254,253,251, + 99,207,158, 61,247,220,117, 88,171, 86,173, 31, 54,109,218, 20,120,238,220, 57,228,231,231, 35, 35, 35, 3, 70,163, 17, 73, 73, + 73, 30,123, 5,236,101,185,146,229, 28,134,135,140, 35, 15,153,183,204,158,199,123,169,192,125, 22, 90,190, 88,180,140, 70,227, +188, 87, 94,121,101, 76,199,142, 29, 67,252,253,253,145,146,146,114,151,200, 42, 44, 44,132,159,159, 31,244,122, 61, 54,110,220, +152,111, 52, 26,231,121, 19, 7, 22,139, 5, 17, 17, 17,200,204,204,132,224,193,127,154,227, 56,168, 84, 42, 20, 22, 22,194,147, + 40, 40,169,194, 48,155,205,176, 88, 44,176, 88, 44, 48,155,205, 40,229,244, 78,106,113,226, 87,173, 86, 11, 0,218,152,152,152, +202, 74,165, 18,215,175, 95, 7,138, 70,246,117,124,242,201, 39,165, 89, 89, 89,244,249,231,159,223, 75, 41,125,209,203,236,248, +166,221,187,119, 39, 0,128, 74,165,186, 4, 0, 73, 73, 73,150,220,220,220, 98,150, 66,181, 90, 77,123,247,238, 29, 77, 41,197, +238,221,187, 19,100, 50, 25,133,135, 57,175, 0, 24, 54,108,216,112, 46, 48, 48,112,229,172, 89,179, 6,119,239,222,253,108,237, +218,181, 19,180, 90,109,186, 94,175,215, 27, 12, 6, 42,145, 72,100,193,193,193,202,173, 91,183, 94, 61,112,224, 64,199,128,128, +128,149, 27, 54,108, 56, 7,192,173,229, 77,163,209, 36,233,116,186, 10,226, 55,117, 22, 89,169,169,169,160,148,226,218,181,107, + 80,171,213,183, 88, 57,242,207, 65,108, 84,185, 90, 94, 92,143,249, 42,178,156,133,193,214,173, 91, 75,156, 67,203, 87, 78,103, + 81,244,250,235,175, 99,225,194,133,119, 89,180, 62,252,240, 67, 0,192,187,239,190,235,179,143,150,104,189, 74, 93, 24,130,168, +113,217,197,194, 14, 0, 68, 12, 95, 41,167,116,227,121, 30,211,166, 77,187,203, 73,221,185,107,207,199, 46,190, 98,225, 76, 79, + 79, 7,207,243, 8, 9, 9,193,144, 33, 67,208,185,115,103, 71, 23,100,105,121, 47, 92,184,176,239,173,183,222,170, 83,171, 86, + 45, 76,159, 62, 61, 59, 40, 40,200,255,133, 23, 94,224,115,115,115, 73, 73, 22, 45, 38,180, 24, 24,202, 64,104,137, 25,204,215, + 81,135,238, 10, 75, 66, 72, 71,231,185, 54, 40,165,121,132,144, 33,157, 58,117,250,105,245,234,213,170,138, 21, 43,226,194,133, + 11,200,206,206,134,201,100,130, 76, 38, 67,116,116, 52,114,115,115,241,237,183,223,234,117, 58,221, 16, 74,105, 94, 73,156, 0, +222,105,212,168,209,231,115,230,204, 81,214,175, 95, 31,217,217,217, 40, 44, 44, 44, 54,139,117, 64, 64, 0, 84, 42, 21, 14, 31, + 62,140, 45, 91,182,232, 1,188,227,133,211,157,154,131,217,108,118, 8, 46,111, 66,203,133, 83, 35, 90,117,116, 58, 29, 0, 88, +202,149, 43, 23, 5, 0,215,174, 93, 3,128, 27,137,137,137, 83, 42, 86,172, 72, 86,172, 88, 65, 41,165, 91,220,137, 44, 23,206, +236, 86,173, 90,229, 0,136, 50,153, 76, 50, 0,200,203,203, 51,135,133,133, 69, 40, 20, 10, 65,165, 82, 9, 74,165, 82, 72, 73, + 73,177, 90,173, 86, 25, 0,180,106,213,202, 4, 32, 21, 78,190, 32, 46,156, 2,128,252,165, 75,151, 78, 25, 58,116,104,179,230, +205,155,215, 26, 61,122,244,153,231,159,127,158,139,141,141, 13, 46, 40, 40, 48, 92,185,114, 37,231,147, 79, 62, 41, 56,120,240, + 96, 71,169, 84,122,115,233,210,165, 83, 0,228,219,239,189,139,211,106,181,254,177,125,251,246,103,187,119,239,206, 39, 39, 39, + 35, 45, 45,205, 33,178,210,210,210, 80,189,122,117, 28, 56,112,192,102, 54,155,183,151,226,125,150,149, 37,135,113, 22, 53, 66, +168,152,215, 61, 9, 44,177, 49,229, 43,167,179, 40,234,223,191,127, 49, 43,150, 76, 38,195,186,117,235,220,150, 27,110,102, 56, +239,232, 58,159,148, 24,166,183,222,122,171,152,104,123,239,189,247, 60, 6,205,219,251, 20,121,242,190,140, 45, 62,234,208, 67, + 62, 47, 41,156, 98,217, 41,149, 74,241,222,123,239,249,108,209,130,139,143,150, 59, 78, 49,238,109,218,180,129, 78,167,115, 8, + 89, 79, 22, 45,111,239,211,102,179,141, 91,184,112, 33, 13, 8, 8,120, 34, 63, 63,255,127,183,110,221, 90,166,211,233,154,228, +229,229,149,104,209, 50, 26,141, 10,150,143, 24,231,131,152, 75,235, 63, 37,180,236,149, 36,202,149, 43, 87,108,237, 44,142,227, +138,109,165,241, 51,176,103,220,173,132,144,167, 91,180,104,241,253,184,113,227,252,235,215,175, 47,173, 80,161, 2,180, 90, 45, +174, 95,191,142,179,103,207, 90, 55,108,216,144,175,211,233,254, 71, 41,221,234, 3,223,114, 66,200,150, 46, 93,186, 76,110,218, +180,233, 75,239,191,255,190,164,106,213,170,200,203,203, 67,112,112, 48, 34, 34, 34,112,241,226, 69,108,220,184,209,150,153,153, +249, 57,128,169,148,210,140,210, 54,248,205,102, 51, 6, 13, 26, 4, 65, 16, 48,127,254,124, 16, 66, 74,211,188, 53,155,205,102, + 10,128,100,102,102, 2,128,206, 62,187, 52,174, 92,185, 2, 0, 55, 19, 18, 18,252, 1, 96,251,246,237, 4,128,175, 75,250, 80, +103,203, 86,245,234,213,175,187, 22,142,162, 37, 75,180,130,193,251, 66,208,134, 1, 3, 6,164,235,116,186, 46,175,191,254,250, +228,197,139, 23, 15, 94,188,120,241, 93, 23, 5, 4, 4,172,156, 59,119,238,212, 1, 3, 6,164,123,178,102,217, 45,120,239, 14, + 27, 54,108,192,233,211,167,253,149, 74, 37,180, 90, 45,178,178,178, 96, 54,155,145,152,152,136,244,244,116, 44, 95,190,188, 64, +175,215,127,192,178,227, 63, 3,103, 97,224,201,170,229, 77,100,149,100,213,249,229,151, 95,220,206, 81, 85, 90, 78, 87,177,225, +235,220, 86, 37, 53,138,196,105,105,220, 77, 25, 81,154,114,205, 29, 47,207,243,248,248,227,143, 29,147,182,186,179,100,149,198, +162, 37,114,134,132,132, 20,153,201,237, 75, 38,117,235,214,237,158,121,237,203,145,189,236,244,140, 25,227,199,143,159, 82,189, +122,245,170, 0, 20,206,239,128, 45,210,192,192, 80,198, 66,203,102,179, 37, 85,171, 86,173, 88, 1,231,109, 49, 83,139,197,146, +228, 99,230,222, 66, 8, 73,156, 59,119,238, 43, 26,141,166,163, 78,167,171, 99, 47, 56, 78,107,181,218,237, 70,163,113, 65,105, + 22,129,182, 11,167,177,132,144,249, 93,186,116,249,176,125,251,246,253,222,120,227, 13, 66, 41,197,146, 37, 75,232, 95,127,253, +181, 22,192, 59,148,210,191,238,229, 37,133,132,132,156,251,246,219,111, 35,127,250,233, 39, 88, 44, 22, 44, 88,176, 0,254,254, +254,231, 74, 17,190,116,158,231,191,107,222,188,249, 51, 7, 14, 28, 88, 78, 41, 61, 37,151,203,151,181,108,217,114,216,129, 3, + 7,126,160,148,158,229,121,126, 89,211,166, 77,135, 29, 57,114,100, 13,165,244, 68, 41,130,231,176,108, 89,173,238,123, 26,221, + 89,178,188, 32,127,196,136, 17,230, 17, 35, 70,188, 49, 96,192,128,175,142, 28, 57,210, 36, 55, 55,183, 14, 0, 4, 5, 5,157, +110,220,184,241,225,213,171, 87, 95,180, 91,178, 12,222,190, 13, 33,164,119,157, 58,117,214, 79,159, 62, 93, 83,171, 86, 45,190, +114,229,202,184,113,227, 6,206,156, 57, 99,253,230,155,111, 10,245,122,125, 79, 74,105, 14,203,142,255,156,208,162,148, 34, 40, + 40,168, 88, 35, 74, 28,242, 95,218,238, 66,231,138, 89, 92,170,199,149,215, 19,103, 73,211, 38,136,240,243,243,115, 76,110,234, +139,203,130, 32,148, 60, 31, 27,165,212,193, 41,110, 62,136, 44,175, 35, 4,237, 75,224,248,204,233,203,244, 14, 26,141, 6, 22, +139,197,193,235,195,200, 79, 82,202,111,246, 11,128, 95, 42, 87,174,124, 5, 64, 37, 38,174, 24, 24, 30,160,208,202,206,206,110, +244, 32, 31,108, 23, 82, 83,237, 91, 89,113,254, 5, 96, 0, 33,100,206,159,127,254, 41,246, 35, 76,243,182, 94,162, 55, 92,184, +112,161,187, 84, 42,253, 98,229,202,149, 77, 41,165, 8, 12, 12, 60,120,227,198,141, 23, 74,195, 97,181, 90, 71, 16, 66,198,136, +163, 8, 77, 38,211, 8, 66,200, 43,148,210, 66,167,243,142,253,210, 70, 29,128,145, 82, 26,227,225,188,177, 20, 34,203, 97,217, + 2, 96, 90,189,122,117, 33,128,147,248,123,158, 44,139,125, 51,192,169,187,208,203,119,217, 65, 8,169,252,222,123,239,205,144, + 72, 36, 29,180, 90,109,172, 70,163,185,109,181, 90,255,208,233,116,239, 80, 74,179, 88, 86,252,231, 96, 50,153,146,171, 85,171, +198,187,107, 64,149, 84,145,151,212,176,178,217,108, 73, 85,170, 84,241,218, 56,115,195,153, 92, 66, 58,186,153,152,152,200,249, +202, 37,194,108, 54,167,151, 20,206,196,196, 68,148,150,211, 91,220, 19, 18, 18,220,198,221,139, 32, 76, 46,161,252,184, 39,206, +146,222,103, 73,208,235,245, 57,225,225,225,133, 6,131, 65,106, 52, 26,165, 86,171,181,152,249, 81,165, 82,101,176,156,195,192, +112,159, 66,235,223, 12,187,176,234, 81,134,124, 70, 0,207,148, 1,143,193,101,191,176,164,253, 82,226, 65, 88,132, 4, 0,186, + 50,122,135,153, 0,158,103, 89,238,209, 67,102,102,230, 19,101,205,153,149,149, 85,230, 13,181,140,140,140,102, 15, 32,238,141, +254,171,156, 37, 33, 57, 57,249, 9,150, 51, 24, 24,202, 6, 28,123, 5, 12, 12, 12, 12, 12, 12, 12, 12, 15, 6, 4, 64, 71,119, + 39, 74, 51,154,128, 16,210,177,180, 15,246,198,207, 56, 25, 39,227,100,156,140,147,113, 50,206,199,143,211, 27,247, 99, 55,154, +145, 82,250,192, 54, 0, 29, 25, 39,227,100,156,140,147,113, 50, 78,198,201, 56,255,171, 27,235, 58,100, 96, 96, 96, 96, 96, 96, + 96,120, 64, 96, 66,139,129,129,129,129,129,129,129,129, 9, 45, 6, 6,134,127, 35, 8, 33, 85,203,151, 47,127,190, 90,181,106, +201,132,144,225, 15,248, 89, 67,154, 53,107,150,165, 84, 42,183, 18, 66,170,178,183,207,192,192,192,132, 22, 3, 3,195, 99, 45, +178,234,212,169,179,247,194,133, 11,213,183,111,223, 30, 19, 27, 27,251,209,131,124, 94,163, 70,141,102,239,217,179, 39,228,247, +223,127,239, 20, 21, 21,181,251, 94,196, 22, 33,164,106,124,124,252,249,106,213,170, 37, 17, 66,134,148,241,251, 24,222,188,121, +243,108,133, 66,177,133, 9, 65,134,255, 64,254,175, 77, 8,169,195,132, 22, 3, 3, 3,195, 3, 20, 89,251,247,239, 15, 53, 24, + 12,184,112,225, 2, 50, 50, 50, 78, 60,200,103, 94,186,116, 41,103,255,254,253,136,139,139,195, 15, 63,252, 16,158,144,144,176, +167, 52,130, 70, 12,243,249,243,231,171,111,223,190, 61, 54, 34, 34,226,147,178, 12, 95,147, 38, 77, 62,220,179,103, 79,240,214, +173, 91, 59,135,135,135,239,102, 98,139,225, 49,204,247, 10, 66,200, 51, 28,199, 29,174, 93,187,246,233, 90,181,106,157,226, 56, +238, 0, 33,164, 63, 33,132,255, 79,190, 19,113,137,133,205,155, 55,239, 2,128,110,221,186,181, 97, 73,133,129,129,225, 62, 11, +219, 90,181,106,213, 58,120,240,224, 65,181, 94,175,199,154, 53,107,240,254,251,239, 91,178,179,179,247, 0,208,186,185,229, 8, +128,207,124, 89,122,139, 16, 18, 0, 96, 12,128,198,110, 78,107, 66, 66, 66, 90, 77,153, 50, 69,250,228,147, 79,194, 96, 48,160, +111,223,190,134, 75,151, 46,213,167,148, 94,242, 85, 24,234,245,122, 28, 61,122, 20, 61,123,246,220,106,177, 88,186,148,213,123, + 9, 12, 12, 60,251,203, 47,191,212,140,137,137,193,181,107,215, 48,108,216,176,140,180,180,180,214,222,194,198,192,240, 47,200, +243, 21, 0,188,228,231,231, 55,178,109,219,182,193, 61,123,246, 68,104,104, 40,172, 86, 43,110,223,190,141, 77,155, 54, 97,255, +254,253, 41, 38,147,105, 33,128, 47, 41,165,185,238,120, 30, 71, 45, 66, 40,165,216,188,121, 51, 5,208,214, 30,185, 93, 44,201, + 48, 48, 48,220,103,161,187, 95,167,211, 53,211,233,116, 40, 40, 40, 64,185,114,229, 32,149, 74,221, 94,155,158,158,142,125,251, +246,225,229,151, 95, 62,151,154,154,218,186,164,117, 47, 9, 33,193, 13, 26, 52,216,191, 99,199,142,170,254,254,254,142,227,130, + 32,192,108, 54,195, 98,177,192,108, 54,195,104, 52,194,104, 52, 66, 46,151, 67,165, 82, 33, 36, 36,228, 12,165,180,142,175, 34, +235,248,241,227, 24, 58,116,104, 70, 86, 86, 86,153,138, 32, 66, 72,213,136,136,136,221,203,151, 47, 15, 79, 76, 76,196,173, 91, +183,240,220,115,207,101,222,188,121,179, 21, 19, 91, 12,255,226,252, 62,241,233,167,159,254, 48, 50, 50,146,171, 93,187, 54,162, +163,163, 97, 52, 26,161,215,235, 65, 41, 5,207,243,160,148, 34, 47, 47, 15,187,119,239,198,142, 29, 59,140, 57, 57, 57,223, 2, + 88, 64, 41,189,236, 36,178, 30, 75, 45,226, 16, 90,221,186,117, 35, 44,185, 48, 48, 48,148, 81,193,123, 58, 47, 47,175,182,209, +104,132, 86,171,245,233,158,107,215,174, 97,248,240,225,231, 82, 83, 83, 91,184,179,108, 17, 66, 2, 26, 52,104,112,104,247,238, +221, 85, 13, 6, 3,242,243,189,175, 59, 47,151,203,161, 84, 42, 17, 26, 26,122,128, 82,218,220, 83, 75,188,118,237,218, 71, 15, + 28, 56, 16,162,215,235,113,226,196, 9, 12, 25, 50,196,156,157,157,189, 23,238,173,111, 0,144,141,162,117, 84,111,186,225,139, + 7,240, 10,128, 10, 30,238,213,132,135,135,183, 92,177, 98,133,172, 98,197,138,208,233,116,232,223,191,127,246,165, 75,151, 26, + 83, 74,175,179,212,195,240, 47,204,239,151, 46, 92,184, 80,197,102,179, 33, 51, 51, 19, 70,163, 17, 58,157,206, 33,180, 36, 18, + 9, 40,165,176, 90,173,142,134,209,177, 99,199,176,125,251,118,122,237,218,181,247, 41,165,211, 68,161,245, 56,106, 17,158, 37, + 17, 6, 6,134, 7,128, 1, 77,154, 52, 57,241,219,111,191, 41,229,114, 57, 54,110,220,232,177,235, 48, 50, 50,178,214,178,101, +203, 18, 18, 19, 19,177,104,209,162,154,125,251,246, 29, 3, 96,134, 27,206, 49, 59,118,236,168,106, 48, 24,112,226,196, 9, 12, + 27, 54,236,122, 90, 90,218, 89, 87, 17,147,144,144,208,234,147, 79, 62,145, 54,108,216, 16,249,249,249,232,212,169,147, 14,192, + 75, 37,132,117,236,206,157, 59, 67,244,122, 61, 10, 10, 10,208,182,109, 91,100,101,101,201, 0,180,247,116,131, 94,175, 71,133, + 10, 21,170, 2,184, 75,188,133,134,134,126,125,235,214,173,118, 42,149,170,196, 23,100, 54,155,145,148,148,132,160,160, 32,108, +218,180, 41,164, 82,165, 74,239, 2, 24,193,146, 14,195,191, 17, 38,147, 9, 63,254,248, 35, 26, 52,104,128, 26, 53,106,160,176, +176,208, 33,186, 76, 38,147, 67,100, 1, 0,199,113,104,220,184, 49,170, 84,169, 66, 94,123,237,181, 33, 0,166, 61,206,239, 70, + 20, 90, 83,152,143, 22, 3, 3, 67, 89,129, 82,122,137, 16, 82,191, 99,199,142,123,214,174, 93, 27,214,181,107, 87, 84,170, 84, + 73,218,167, 79,159,112,173, 86,219,193,165, 53, 28, 60,108,216,176,163,183,111,223, 78,176, 31,106,236,129,182,177,191,191,191, +232,219,116, 61, 45, 45,173,145,107, 55,163, 66,161,216,114,242,228, 73,169, 92, 46,199,145, 35, 71, 48,124,248,240,204,235,215, +175,123,235,150, 11, 50,153, 76,144, 72, 36, 0,128,164,164, 36,175,241,187,117,235, 22, 4, 65, 48,186, 59,199,113,156,226,216, +177, 99,136,137,137, 41,145,131,227, 56,200,100, 50,231, 67,185, 44,229, 48,252, 75, 97, 49,153, 76,104,212,168, 17,174, 95,191, +142, 99,199,142, 57, 4, 87,102,102, 38, 82, 82, 82,138, 93,124,248,240, 97, 28, 63,126, 28,173, 91,183,118,229,121, 44,181, 8, +111,143,208, 7,155, 55,111,102, 2,139,129,129,161,172,197, 86,171, 30, 61,122,236, 94,190,124,121,120,185,114,229,224,239,239, + 31,224,230,186, 28, 66,200, 89,169, 84,154,224, 43,119, 90, 90,218, 89,119,190, 92, 81, 81, 81,245, 77, 38, 19,142, 31, 63,142, + 33, 67,134,100,216,125,190,188,249, 62, 77,239,208,161, 67,143,173, 91,183,134, 40,149, 74,156, 61,123,214,151,174,195, 27, 0, + 22,184, 59,145,145,145, 49,164,117,235,214,239, 1, 8,241,112,175,166, 74,149, 42, 45,143, 30, 61, 42, 35,132,224,198,141, 27, +232,223,191,127, 54,128, 79, 89,170, 97,248,151, 98,242,211, 79, 63,253,205,152, 49, 99, 2,155, 54,109,138,164,164, 36,135,224, +170, 95,191, 62,234,214,173,139,191,254,250, 11, 91,182,108,193,241,227,199,161, 80, 40, 80,169, 82, 37, 20,206,249, 4,248, 4, + 22,145,228,113,213, 34,142, 81,135, 12, 12, 12, 12, 15,164,144, 33,164,170, 76, 38,155, 31, 30, 30, 94, 47, 57, 57,249,117, 74, +233, 15, 46,231,131,251,245,235,119,118,213,170, 85,209, 55,110,220, 64,197,138, 21, 55, 82, 74,123,185,225,217, 64, 41,237,121, +237,218, 53,180,104,209,194,173, 69,139, 16, 50, 60, 42, 42,106,106, 65, 65, 65,158, 78,167,235,239,171,131, 57, 33,164,106,229, +202,149,247,108,220,184, 49, 76,173, 86,227,252,249,243, 15,204, 25,190, 90,181,106,123, 15, 31, 62, 28, 42,149, 74,113,228,200, + 17, 12, 27, 54,140, 57,195, 51, 60, 14,249,220, 31,192,248,196,196,196, 55, 71,141, 26,165,168, 89,179, 38,146,146,146,144,145, +145,129,156,156, 28, 28, 60,120, 16, 0, 16, 27, 27,139,216,216, 88, 92,188,120, 17,251,246,237,203, 47, 44, 44, 28, 65, 41,253, +233,177,126, 55, 76,104, 49, 48, 48, 60,228, 2, 57, 30, 78,206,226,253,250,245,107,180, 98,197,138,232,172,172, 44, 28, 58,116, + 8,125,251,246,125,135, 82, 58,195,205,125,111,167,166,166,126, 8, 0,103,206,156,113,245,209,242,232,156, 94, 26, 17, 84,161, + 66,133, 61,107,214,172, 9, 11, 13, 13,197,133, 11, 23,208,191,127,255,179, 90,173,182,118, 89,197, 93,173, 86,111, 77, 77, 77, +237, 36,147,201,112,224,192, 1, 12, 25, 50,132, 77,239,192,240,184,229,239, 8, 0,239,214,172, 89,243,165,145, 35, 71,242,241, +241,241, 72, 78, 78,198,159,127,254,137, 74,149, 42,225,246,237,219,216,177, 99,135, 41, 35, 35, 99, 62,128, 89,148,210,188,199, +254,165, 60,200, 21,171,193, 86, 54,103,156,140,147,113,222,125,221,150,115,231,206, 81, 17, 54,155,141, 38, 39, 39,211,173, 91, +183,210,168,168,168,179, 0, 2,220,113, 2, 8,168, 81,163,198,133,139, 23, 47,210, 91,183,110, 81,179,217,236,224,184,112,225, + 2, 5,176,235,126,195, 9,160,106,108,108,108,250,206,157, 59,233,197,139, 23,105, 84, 84,212,237,178,140,123,133, 10, 21,210, + 51, 50, 50,232,159,127,254, 73,195,195,195,211, 1, 84,101,105,137,113, 62,142,156,246,134,212,138,134, 13, 27,218, 22, 46, 92, + 72, 95,122,233, 37, 26, 31, 31,111, 3,240, 53,128,216, 7,169, 61, 30,181,141,141, 58,100, 96, 96,120,216, 80, 28, 60,120, 16, + 10,133,194,113,224,212,169, 83,206,243,104,229,123,104, 20,230, 19, 66, 90,116,237,218,117,207,194,133, 11,107, 88, 44, 14,215, + 14,236,220,185, 19, 0,140,101,208,240,188, 68, 8,105,221,165, 75,151, 5,161,161,161,245, 82, 83, 83, 39,151,101,196,111,220, +184,241,122,157, 58,117,102, 20, 20, 20,228,151,166,107,147,129,225, 95,104,196,185, 1, 96, 40, 33,228,163, 99,199,142,189, 3, +128, 2,152, 78, 41, 61,255, 95,123, 23, 76,104, 49, 48, 48, 60,108, 12,127,254,249,231, 93,157,197,125,154, 25,222,238, 56,223, +188, 91,183,110,174, 51,195,123,116, 78,191, 23,177, 5,160,243, 3,170,124,126, 0,240, 3, 75, 2, 12,255, 33,193,117, 22,192, +192,255,242, 59, 96, 66,139,129,129,225, 97, 23,188, 55, 1, 60,119, 31,247,231,195,253, 60, 91, 12, 12, 12, 12,143, 28,216,162, +210, 12, 12, 12, 12, 12, 12, 12, 12, 76,104, 49, 48, 48, 48, 48, 48, 48, 48,252,187, 64, 0,116,116,119,130, 82,186,221,103, 18, + 66, 58,150,246,193,222,248, 25, 39,227,100,156,140,147,113, 50, 78,198,249,248,113,122,227, 46,141,254,248, 87,192,199, 97,156, +132, 13,125,101,156,140,147,113, 50, 78,198,233, 11,167,189, 17, 79, 80,212,107,194,137,251,143,248,116, 4,228, 81,141,251,127, +133,243, 63, 57,189, 3, 33,196,241,178, 8, 33, 2, 0,129,150,193, 12,167,132, 16,241, 67,148, 9, 31,195, 3, 48,117, 22,125, + 35,242,183, 30,103,223,137,129,129,161, 84,101,135,196,169,178,181, 1,176, 17, 66,240,168,149, 37,101, 89,207, 61,136,184,255, +151, 57, 31, 23,240, 37,189, 48,137, 68,178, 53, 44, 44,172, 93,102,102,166, 96, 63, 14,185, 92, 14,142,227, 32,149, 74,245, 5, + 5, 5, 1,247,240, 49,190,142,140,140, 28,158,149,149, 37,112, 28, 7,165, 82, 9, 66,136,131, 51, 55, 55, 55,224,159,126, 41, + 21, 42, 84,200,209,235,245,126,174,199,149, 74,165,225,230,205,155,254,255,133,130, 82, 38,147, 61, 29, 18, 18, 18,148,145,145, + 65,197,197,111, 37, 18,137,184, 16,174, 53, 55, 55,247, 59, 95,249, 66, 66, 66, 14,135,132,132, 4,137,247, 19, 66,144,149,149, +149,155,150,150,214, 4, 0, 84, 42,213, 62,141, 70, 19,202,243, 60, 36, 18, 9, 36, 18, 9,116, 58, 93, 86,102,102,102, 11, 86, +109,253, 59,177,118,237, 90, 73,151,216,231, 42,241, 84, 95,151,227,104,160, 32,144, 60, 43, 81,157,218,146,252,245, 85, 95,238, +239,215,175,159,141,189,197,135, 7,133, 66, 49, 63, 50, 50,114,100, 97, 97,161,142, 16, 66, 9, 33, 40,170, 6,112,215,175,205, +102, 75,202,204,204,108,228,165,178,149,202,229,242,185, 81, 81, 81,195,116, 58,157,206,206, 71, 9, 33,136,142,142, 46,198, 7, + 0, 22,139, 37, 41, 35, 35,163,145, 47, 97,141,136,136, 88,170, 82,169,254,167,211,233,180,118, 97,228,220, 67,227, 92,153,255, +149,145,145,209,202,155, 48,144,203,229, 11, 34, 35, 35,159,181,199, 29,132, 16, 26, 30, 30,126,223,113,143,140,140, 28,166,213, +106,139,197, 61, 34, 34,194, 45,167,167,184,187,227,116, 14, 39, 33, 4,225,225,225,247, 29,206, 71,145,243,177, 23, 90, 0, 56, + 66,200,134, 22, 45, 90,180,221,181,107, 23,119,225,194, 5,174,122,245,234,176,217,108, 16,132,162,116, 29, 23, 23,167,190,135, + 10,124, 89,171, 86,173, 6,237,222,189,155,219,176, 97, 3,215,184,113, 99, 16, 66, 96,179,217, 96,179,217, 80,187,118,109,213, +125, 10, 4, 63,158,231, 95,147,203,229,109,172, 86,107, 13, 0,144, 74,165,231,141, 70,227, 46,171,213, 58,143, 82, 90,232, 11, +143,217,108, 86,167,167,167,223,245,110, 18, 19, 19,229,247, 26,182,128,128,128,253, 28,199, 37, 58, 94,176, 93,112,184,203,204, +226, 47,165,244, 90, 70, 70, 70,115, 79,156,193,193,193, 14, 78, 79, 28,174,199, 4, 65,184,150,158,158,222,220,139,200,234,219, +170, 85,171,192,237,219,183,147,219,183,111, 19,149, 74, 5, 65, 16, 96,179,217, 96,177, 88, 80,179,102,205, 82, 77, 11, 18, 20, + 20, 20, 48,113,226,196, 74, 79, 61,245, 20,214,173, 91,135,103,158,121, 6, 45, 91,182,188, 44,158,215,104, 52,161,231,206,157, +171, 18, 18, 18, 2,157, 78,135,188,188, 60,116,234,212,233, 95,159,185,154, 54, 40, 55,157,112,196, 49, 87, 20,181,218,178, 15, +158, 76,126,247,126,121,131,130,130,142,203,229,242, 72,241,187,114, 28,231,246, 91, 59, 31, 51, 24, 12,105,153,153,153, 13,188, +228,159, 10, 0,122, 72, 36,146,202, 60,207, 87, 3, 80,193,106,181, 70, 2,128, 76, 38, 75,147, 72, 36, 55, 44, 22,203, 69,147, +201,116, 5,192, 47,246, 9, 9,221,162, 75,236,115,149,136, 85,215,175,192, 40,116, 85, 87,156, 85, 85,247,215,196, 75,106,133, +238,215, 46,177,207,173,245, 85,108,253,131, 13,141,170, 0, 86,163,104, 65,233,151,236,243, 0,221, 15, 95, 44,128,158, 0,170, +202,100,178, 4,179,217,156, 9,224, 24,128,237,148,210,203,132,144,248,240,240,240, 31, 4, 65, 48,102,101,101, 61,231,110, 25, +161,102,141,202, 31,229, 56, 46, 14,118, 25, 33, 80, 91,210,129,163,183,203,164,130,146, 72, 36, 11,250,244,233,243,236,218,181, +107,213,199,142, 29, 83,215,168, 81,195, 81, 62, 9,130, 0, 87, 67, 68, 66, 66,137,107,127, 19, 0, 60,199,113,243,251,245,235, + 55,120,197,138, 21,234,155, 55,111,170, 99, 98, 98, 28,156,206, 34, 78, 68, 76, 76,140, 79, 97, 13, 13, 13,253,250,169,167,158, + 26,186,124,249,114,233,198,141, 27, 85, 97, 97, 97, 8, 13, 13,133, 76, 38,187,235,218, 22, 45, 90, 8, 94,232, 56,142,227, 22, +244,234,213,107,232,170, 85,171,212,135, 14, 29, 82,215,174, 93, 27, 18,137,228,190,227,222,187,119,239,193, 63,254,248,163,250, +244,233,211,234,202,149, 43,131,227, 56,112, 28,119, 23, 31,199,113, 40, 87,174,156, 79,156, 61,123,246, 28,188,122,245,106,245, +241,227,199,213,213,170, 85,115,188, 79,167,110,187, 82,135,243, 17,231,124,124,133,150,221,140,186,162, 69,139, 22, 93,118,237, +218, 37, 1,128,227,199,143, 35, 59, 59, 27,177,177,177,240,243,243,131, 66,161,128,193, 96,160,165, 44,108,190,182,139, 44, 41, + 0,172,255, 95,111, 92,147, 2, 47,167,155, 32,147,201,240,215, 95,127, 65, 34,145,208,251, 40,204, 90, 7, 4, 4, 44,255,233, +167,159,130, 27, 52,104,192,101,102,102, 34, 33, 33, 1,217,217,217, 77,118,239,222,221,240,185,231,158,123,142, 16,242, 12,165, +116,183,175,156,191,254,250, 43, 52, 26, 13,212,106, 53, 52, 26, 13, 76, 38, 19,185,231, 23,205,243,113, 55,110,220,136,240,243, +243,131, 32, 8,142,205,165,127,219, 1, 65, 16, 80,165, 74, 21,179,151, 2, 50,238,230,205,155, 17, 42,149, 10,148,210, 98,124, + 54,155, 13, 10,133,194,185,229, 0,155,205,134,196,196, 68,179, 55, 75,150, 40,178, 0, 96,229,202,149,136,138,138, 66, 68, 68, + 4, 52, 26, 13, 84, 42, 85,177,138,221,199,130, 28, 93,186,116,193, 7, 31,124,128, 89,179,102, 97,252,248,241,197, 10, 90,169, + 84,138,144,144, 16,252,254,251,239, 8, 8, 8, 64,124,124, 60,164, 82,233,191,223, 50,200,145,144, 3, 71,111, 57, 44,180, 79, +182,175,206, 55,109, 24,191,216,254,133,193,113,128, 32, 20, 85,157,132,128, 90, 45, 66,206,145, 83,201,147,125,120,159, 49, 55, +111,222,140,112,158, 89,189, 36,216,108, 54,196,198,198, 74,188,228,159,174,181,106,213, 90, 63,122,244,104, 89,229,202,149,137, + 76, 38, 3,207,243,224,121, 94, 76,143,241,148,210,120, 65, 16,218,166,165,165,209, 69,139, 22,125, 68, 8,233, 67, 41,253,213, +109,122,167,250,186, 5, 70,161,235,158, 19,104,210,175,227, 91,248,125,205,196, 38,173,234, 11,240, 87,235,175, 2,120,100,133, + 22, 33,164,106,173, 90,181, 78, 28, 58,116, 72,105, 54,155,209,180,105,211,131,132,144,134,247, 50,131, 59, 33, 36, 24,192, 39, +147, 38, 77, 26, 58,122,244,104, 73, 80, 80, 16,228,114, 57, 10, 10, 10,112,245,234,213, 97,223,125,247, 29, 37,132,124, 6,192, +255,198,141, 27,205, 14, 31, 62,140,118,237,218,189, 2,224,181,187, 21,129, 36,110,223,225,235, 17,226,126,207, 46,117,100,205, + 27,199,167, 21, 53,200, 92,175,166, 16,108, 66,210,161, 19, 73,141,124, 8,227, 71, 79, 63,253,244,144,181,107,215,250, 1,192, +146, 37, 75,240,244,211, 79, 35, 36, 36, 4,106,181, 26, 50,153, 12, 82,169,180,216,175, 23, 11,145, 4,192, 71, 3, 7, 14,236, +183, 98,197, 10,127, 0, 88,177, 98, 5,122,247,238,141,208,208, 80,248,251,251, 67, 46,151, 67, 34,145,148,250,219,132,134,134, +126,221,178, 73,147, 17,203,151, 47, 7, 0,188,243,234,171,120,234,137, 39,224,167, 86, 65,173,146, 67,124, 23,114,137, 20, 79, +190, 60,206, 91,188, 57, 0,115,158,126,250,233, 1,171, 86,173,242, 7,128, 99,199,142, 33, 61, 61, 29,145,145,145, 80,169, 84, +144,203,229,142, 56, 19, 66,160, 82,169,124,138,251,211, 79, 63,221,239,199, 31,127,244, 7,128,101,203,150,161, 75,151, 46,142, +184, 43, 20, 10,200,100,178, 98,155,171,232,116,199,217,167, 79,159,126,171, 87,175,246, 7,128,239,190,251, 14, 29, 59,118, 68, +112,112,176,227,125,138, 92,165,249, 70,143, 50,231, 99, 45,180, 68,223,169,200,200,200, 1,123,246,236,225,156, 68, 2, 20, 10, + 5, 20, 10, 5,228,114,185,163,251,176, 20, 5, 14,137,140,140, 28,190,123,247,110,199, 77, 38,122,151,233,186,212, 21,184, 19, +127,199,118,237,218,253,184,105,211, 38,165, 76, 38,131, 94,175,199,217,179,103, 17, 24, 24, 8,185, 92,142, 94,189,122, 73, 90, +180,104, 17,218,182,109,219,117,132,144,193,190,140,104,160,148,194,207,207,175,152,208,186,223, 46,102,149, 74,133,141, 27, 55, + 66, 34,145,184, 45,192,156,255, 71, 68, 68,248, 18,111, 40, 20, 10,236,223,191, 31, 18,137, 4, 82,169, 20, 60,207, 67, 42,149, + 98,243,230,205,120,227,141, 55,144,153,153, 9, 66, 8,164, 82, 41,252,253,189,246,122,146,144,144,144, 32, 81,100,137, 34, 72, +165, 82, 65, 42,149, 18,158,231,137,216,181, 71, 8, 33,190,246,185,115, 28,135,239,191,255, 30,179,103,207,198,132, 9, 19,176, +116,233, 82,212,173, 91,215, 89,132, 34, 63, 63, 31,193,193,193, 8, 14, 14,134, 82,169,188,231,180,240, 40,193,245,237,204,157, +183, 80, 13,129,162,200, 9, 68, 0, 4,128,130, 66,160, 2,210,146,175,226,253, 15, 62,246,185,246, 81, 40, 20,216,183,111,159, + 67, 12,241, 60, 15, 66, 8,156, 5,146,184, 69, 69, 69,121,229,147,201,100, 83,126,254,249,103,249,247,223,127,143, 85,171, 86, + 57,210,150, 70,163, 65, 80, 80, 16, 66, 67, 67, 29, 91, 92, 92, 28,249,230,155,111,100,117,235,214,157, 2,224, 87,247,223,156, + 6,170, 43,206,170,218,175,227, 91, 0,128,126,111, 81,228, 92,254,176, 30,151, 59, 57,240, 81, 22, 89,117,234,212,217,187,127, +255,126,165, 78,167,131, 32, 8,248,245,215, 95,213, 29, 59,118,220, 67, 8,105, 85, 90,177, 85,161, 66,133,141,251,247,239,111, + 17, 30, 30,142,188,188, 60,228,231,231,195, 98,177, 64, 34,145, 32, 62, 62, 30, 31,125,244, 17,233,213,171,215,216, 97,195,134, + 25, 84, 42,149,104,217,168,224,169, 60,114,198,162, 79, 23, 7, 81, 90,148,126,168, 64,139,253,102,167,223,192,171,175,191,239, + 83, 24,203,149, 43,247,210,186,117,235,252,156, 45, 75,206, 34,192,185,140, 18, 55, 79,194,192,110,213,224,202,151, 47, 63,226, +135, 31,126,112,112,134,133,133, 57,202, 37,158,231,193,113, 28,246,236,217,131,153, 83, 38, 33, 56, 60, 6, 11, 63, 93,226, 53, +156, 17, 17, 17, 75,187,118,237,250,191,101,203,150, 57,142,213,169, 88, 17,221, 90, 60,129,136,176, 0,132, 5, 23,149,109, 84, + 32, 56,117,241,186,215,250, 8, 0, 87,174, 92,185,231,214,172, 89,227,231,220, 32, 20,227, 10, 0, 58,157,206, 97,197, 55,153, + 76,104,212,168,145, 79,113,119,230, 20,173,109,162,104,115, 45,235,197,134, 76, 73,156,229,202,149, 27, 33, 10, 97, 0, 8, 9, + 9, 41,198, 33,149, 74,177,230,247,229,119,213, 13,247,203, 89,218,239,238,202,121,227,198, 13,204,152, 49,195, 81, 38,137, 86, + 61, 66, 8, 98, 99, 99,177,112,225,194,146, 56,221,161, 49,128,112,167,125, 19, 0,185,211,111, 6,138, 86,152,112,189, 78, 60, + 46, 5, 80,207,126,206, 6,160, 0, 64,144, 27, 62, 79, 60,153, 40, 90, 70, 40,220,229,122,215,231,184, 23, 90,155, 55,111,166, + 0,176,113,227,198,118, 61,123,246,220,151,153,153, 41, 92,184,112,129, 59,118,236, 24,164, 82, 41, 34, 34, 34,208,184,113, 99, +177, 91, 13, 82,169, 20, 26,141,134, 4, 5, 5,165,137, 21,175,248, 18,157,251,218,157, 4, 13,151,157,157, 45,108,219,182,141, + 91,209,167, 51, 76, 20,168,255,222, 76,116,233,222, 29, 91, 98,229,144, 0,104,114, 33, 19,106,181,154,151, 74,165, 22,241, 99, +136,156,206,190, 91,174, 34,137, 16,226,175,209,104,190,249,229,151, 95,148, 28,199,161,160,160, 0,130, 32,160, 69,139, 22,224, + 56, 14,103,206,156,193, 59,239,188,131,245,235,215,227,231,159,127, 86, 53,104,208,224, 27, 66, 72, 13, 74,105,129, 83, 33,182, +221, 93, 34,245,247,247,135, 90,173,118, 8, 45, 49,206,206, 38,112,241,122, 74,105,114,102,102,102,195,146, 56,109, 54, 27,122, +247,238, 13, 66, 8, 36, 18, 73,177,194,199,249, 87, 38,147,225,204,153, 51,119, 37, 66,119, 2, 81, 16, 4,180,108,217, 18, 0, +160, 86,171,225,231,231, 39,174,251, 6, 0,168, 95,191, 62, 76, 38, 19,194,194,194,112,254,252,121,119, 5,120, 49,206,140,140, + 12,154,146,146, 66, 86,172, 88, 1,169, 84,138,208,208, 80,168,213,106,178,124,249,242, 73, 50,153, 44,206, 96, 48, 8, 38,147, + 9,114,185,124,161,104,221,226,121, 94,155,151,151, 23,234,137, 83, 34,145, 96,244,232,209,120,243,205, 55,177,116,233, 82,188, +248,226,139,119, 89,188, 12, 6, 3,194,194,194, 28, 98,203,151,184,223,191, 16,122,192,156, 2,197,217,227, 91,112,238,244,118, + 8, 54, 1, 54,129,130, 82, 27, 4, 43,112,108,219,193, 42,119,174,165,196, 82, 80,192,222,193,161,200, 43,180,182, 13, 83, 84, + 3,176, 97,103,166,113,190,183,244,201,243, 60, 44, 22, 11,126,249,229, 23, 92,189,122, 21, 91,183,110,133, 94,175,119,188,199, +102,205,154, 97,196,136, 17,110,133,150, 43, 39,165,116,217,237,219,183,235,183,108,217,146,228,230,230, 34, 55, 55, 23,122,189, + 30, 54,155, 13, 86,171, 21, 60,207, 67,169, 84, 66,165, 82, 33, 50, 50, 18, 6,131,129, 26,141,198,101,158, 56, 5,129,228,233, +254,154,120,233,247, 53, 19,155,244,123,139, 98,237,108,130, 74,229, 21,186, 63,142,250,143,216,176,119,124, 39, 0, 84,176,107, + 7, 14,160, 22,155,144,249,230,164, 79,198, 62,244,111,116,183,200, 10,213,235,245, 40, 40, 40, 42, 30,228,114, 57,214,174, 93, + 27,214,163, 71,143,221,132,144,214,158,196,150, 59, 78,127,127,255,120,137, 68,130, 51,103,206,224,243,207, 63,199, 31,127,252, +129,180,180,180,156,152,152,152,192,182,109,219,114,175,190,250, 42,234,215,175,143,111,191,253, 86,233,141,147, 82,138, 27,151, +247,224,198,149,189, 16, 4,234,100, 21,119,255,159,250, 24,119,173, 86,107, 56,113,226,132,223, 87, 95,125,133,136,136, 8, 36, + 36, 36, 64,173, 86, 67,169, 84, 22,171,100,157, 43, 94,111,121, 83,175,215, 27,110,220,184,225,247,227,143, 63, 34, 52, 52, 20, + 21, 42, 84,128, 90,173,134, 92, 46,119, 52, 8, 86,172, 88,129,149, 31, 12,193,141,139,167,209,187, 91, 39,175,225, 84,171,213, +255, 91,182,108, 89, 49, 19, 72,100,112, 48,120, 41, 7,137,148, 32,184, 67, 31, 0, 64,206,159, 63,121,156, 29,210,133,147, 20, + 20, 20, 24, 14, 29, 58,228,119,244,232, 81, 8,130,128, 10, 21, 42, 64,167,211, 33, 32, 32,192, 17,255,109,219,182,161, 87,175, + 94,248,254,251,239,209,172, 89, 51,175,113, 47, 44, 44, 52,156, 62,125,218,239,135, 31,126, 64, 72, 72, 8,202,149, 43,231,136, +187,184, 73,165, 82, 72, 36, 18, 36, 38, 38, 34, 47, 47, 15,126,126,126, 94,191,209,177, 99,199,252,126,248,225, 7, 4, 7, 7, + 35, 46, 46,206, 97,113, 19,197,209,236,197, 31, 20,227, 80,146,232,251,230, 44,237,119,119,229,236,221,187, 55, 42, 85,170,132, +128,128, 0,104, 52, 26, 7,119, 73,156,162, 22, 1,208,182, 91,183,110,187, 92, 62, 97, 56, 33,100,147,211,243,187, 19, 66, 54, + 57,255,122,186,206,254,183,245,164, 73,147, 26,205,154, 53,107, 70,179,102,205,126,220,191,127,255, 74, 79,124,158,120, 38, 77, +154, 84,107,214,172, 89, 51,156,175,119,243, 28,207, 22,173,110,221,186, 17,123, 36,121, 0,168, 94,189, 58,178,179,179,161, 80, + 40,208,184,113, 99,100,102,102,194,207,207, 15, 50,153, 12,148, 82,140, 29, 59, 86, 50,126,252,248, 8,142,227, 96,181, 90, 29, + 5,191,135,190,118,129,227, 56, 52,111,222, 28,103,237, 61, 66, 93,186,119, 71, 92, 92, 28, 68, 39, 15,165, 82,137,177, 99,199, +146, 55,222,120,131, 23,173, 25,148, 82,232,245,122, 68, 71, 71,171, 74,232,146,123,117,221,186,117,129,162, 73, 94,236, 58,147, + 72, 36,184,112,225, 2,230,204,153,131, 97,195,134,225,214,173, 91,136,137,137,193,155,111,190,233, 55,107,214,172, 87, 1, 76, +245, 86, 32,251,249,249, 57, 68,150, 90,173,198,171,175,190,202,183,104,209, 34,194,207,207, 15,254,254,254, 16,187, 1,109, 54, + 27, 42, 86,172,232, 85,154, 11,130,128, 45, 91,182,128,231,121,175, 22, 45,123, 2,244,137,243,208,161, 67, 14,145,230,220, 74, + 34,132,224,236,217,179, 14, 81,231, 3, 39,229, 56, 14, 26,141, 6, 81, 81, 81, 80,169, 84, 80,171,213,228,199, 31,127,124, 55, + 33, 33, 33,250,141, 55,222,224,242,243,243,185,230,205,155,227,233,167,159,230, 5, 65,128,217,108, 70,173, 90,181,188, 90,222, +118,237,218,133,207, 63,255, 28, 47,190,248,162, 91,139,150,232, 44, 25, 16,240,143,143,133, 40, 51, 8, 0,204, 86, 11,116,133, +122, 71,215,174,205,102,195,233,157, 39,171, 92, 59,121,185,214,166, 31,191,151, 2,128, 97,231, 79,206,183, 69, 63,189,120,117, +213,182, 33,178, 67, 59,179,205,135,188, 89, 10,199,141, 27,135,201,147, 39, 99,224,192,129,216,182,109, 27,222,121,231, 29, 60, +247,220,115,197, 44, 90,190,192, 98,177,124,241,204, 51,207,188,184,118,237,218,106,111,189,245, 22, 39, 90,180,212,106,181,232, +227, 5,163,209, 8,189, 94,143,139, 23, 47, 10,207, 63,255,252, 37,147,201,244,133, 39, 62, 43, 81,157, 82, 43,116,191, 86,140, +227, 42,105,175,127,236,223,242,137, 10,122,162,106,152,215,167,106, 71,218,117,120,133, 96, 80, 10, 42, 0, 2, 5,140, 70, 45, +198,142,125, 69,242, 79,125, 39,103,145,101, 48, 24,112,226,196, 9,180,107,215, 14,183,111,223,198,249,243,231, 81,165, 74, 21, + 44, 95,190, 60,124,240,224,193, 37,138, 45, 87,156, 62,125,122, 82,189,122,245, 22, 20, 22, 22,102, 23, 22, 22, 46, 0,176,146, + 82,154, 75, 8,169,113,245,234,213, 69, 91,182,108,105,245,254,251,239, 75, 92,124,116, 36,158,204,163, 22,139, 21,122,189,177, + 68,129, 37,238, 83, 42,248, 26,119, 90,173, 90, 53,244,232,209, 3, 82,169,212,209, 88,115,238, 54,115, 21, 92, 37,149, 31, 0, + 4, 66, 8, 98, 98, 98,208,181,107, 87,200,100,178, 98,156, 98,197,218,181,107, 87,140,155,250, 30,190, 24,215, 30,159, 63, 83, + 5, 29,167,167,149, 24, 78,157, 78, 87,184, 99,199, 14,213,155, 47,190,136,122,149, 43, 35, 44, 32, 0,229, 35,195,161, 82,200, + 33,115, 14, 19,241,110,100,167,148, 82, 66,136, 32,145, 72, 80,187,118,109,164,165,165,225,250,245,235,184,126,253, 58, 56,142, + 67,203,150, 45, 29, 86,152, 43, 87,174, 96,234,212,169, 48, 26,141, 62,199,189,114,229,202,104,223,190, 61,228,114, 57,212,106, +117,177, 46, 67,241,157, 22, 20, 20,160, 82,165, 74,216,176, 97, 3,170, 86,173,234,149,179,122,245,234,104,211,166, 77,177,247, +169, 82,169, 28,245, 6, 0,220, 62, 84,232,120, 70,108,108,108,169, 56,183, 30,190,133,175,182,237,128,209, 36, 32, 95,103, 41, +118, 67,116, 88, 0,246,254,240,150, 79,113, 23, 57,191,252,242, 75,228,230,230, 58,202, 32,209,104, 34, 26, 41,202,149, 43,135, + 37, 75,220, 91, 50,157,180, 8,241,240,253,186,251,216,160, 18,175, 19, 19,151, 98,214,172, 89, 51, 92,239,247,198,231,124,222, +229,126,147,139, 56, 75,243,169,235, 80,172, 31,196,204, 16, 27, 27, 11,209, 15, 68,204, 40,142,130,212,106,197,250,245,235, 17, + 17, 17,225,216, 2, 3, 3, 61, 38,108,209,143,104, 92, 70,145,139,208,239, 49, 50,220, 0,208, 45,131, 58,252, 72,108, 54, 27, +214,173, 91, 7,103, 33,227,239,239, 95, 98, 55,146, 92, 46,111,219,184,113, 99,206,104, 52,222, 37,178,102,205,154,133,193,131, + 7,163,106,213,170, 16, 4, 1,133,133,133,104,215,174,157,116,225,194,133,109, 75, 35,180,212,234, 34,191,127,147,201,132,157, + 59,119, 34, 56, 56, 24,161,161,161, 8, 9, 9,129,191,191,191, 56,114,146,122, 19, 27,148, 82,244,238,221,219,145,248,156,173, + 88,174,162,107,255,254,253, 62,117,201, 81, 74,241,196, 19, 79, 64,163,209,192,207,207, 15,126,126,126,216,178,101,139,227,154, + 38, 77,154, 64, 16, 4, 68, 68, 68,224,192,129, 3, 37,118,127, 82, 74,169, 76, 38,115, 92, 47,149, 74,201,242,229,203, 39, 37, + 38, 38, 70,191,254,250,235,156, 68, 34,193,241,227,199,113,238,220, 57, 84,168, 80,193,103,159,173,220,220,220, 59,147, 38, 77, +178, 77,154, 52, 9, 0, 80,171, 86, 45,228,230,230,166,139,231,243,243,243,179, 58,119,238, 92,204,111, 35, 51, 51, 51,235, 95, + 47,180, 4, 1, 86,179, 21, 58,131, 1,133, 5, 58,135,117, 40, 61, 37, 45,232,173, 55, 94,147,206, 25,251, 44, 0,224,141,249, +159,162, 96,233,223, 5,217, 79,111, 12,138,232,243,201,170,137, 0,122,121,169,124, 96, 52, 26, 17, 31, 31,143,195,135, 15,163, +160,160, 0, 29, 59,118, 44,102, 49, 21,223,169, 55, 19, 61,165,212, 68, 8,105,209,189,123,247, 35,243,230,205,171, 88,163, 70, + 13,162,213,106,161,211,233,224,252,123,250,244,105,186,114,229,202,107, 58,157,174, 57,165,212,228,137,111, 75,242,215, 87,187, +196, 62,183,246,143,227,146,238, 17,149, 46, 5, 36,231, 84,180,102, 37, 43,180,249,250,139, 6, 27, 61, 7,106, 3,108, 16, 64, +173, 2,108,246,110,175,127, 10, 42,149,106,209,222,189,123, 67, 13, 6, 3,142, 29, 59,134,161, 67,135,154, 50, 51, 51,229, 0, +240,191,255,253,207,180, 98,197, 10,121,165, 74,149,176,124,249,242,240,167,159,126,122, 13,128,218, 62, 22,244,223, 3,248,222, +245,120,104,104,232,194, 91,183,110,181,117,246,249, 17, 27,171, 0,220, 54, 42,169, 0, 88, 44, 22,232,245, 70,228,229, 21,192, +100,182,216,203, 76, 1, 54,155,213,254, 43,192,106, 47, 71,229, 50,222,191, 97,157,232, 66, 74, 41, 56, 66,114,143,158,190, 83, +206, 83,185,228,169,139,203, 23,107,150, 27,216,196, 81,102,161,161,161,144, 74,165,248,254,251,239,113,106,223, 22,200, 37, 20, + 54,171, 5, 86,139, 25, 54,139, 9, 82,137, 4,127, 28,191,142, 78,213,189, 15,228, 38,132,208,176,176, 48,116,107,214, 12,221, +155, 53, 43, 26,222,198,243,240, 83, 40,160,150, 41,139, 44, 89, 0,168,141, 3,124, 75, 74,130, 24,206,200,200, 72, 28, 61,122, + 20,227,198,141,195,236,217,179,161, 82,169, 28,163,159, 47, 92,184,128,213,171, 87,163, 83,167, 78,165,142,187,104,193,155, 56, +113, 34, 82, 82, 82, 48,127,254,124, 52,108,216, 16, 82,169, 20,185,185,185,104,222,188, 57,210,210,210,124,226,116,238,222,147, +203,229,197,172, 79,162, 0, 44,237, 55,114,230,124,182,119, 52, 54,238, 91, 9, 2,130,131, 63,188, 86,172, 46, 90,178,106, 79, +169, 57, 39, 79,158, 92, 44,156,190, 88,179, 74,209, 48,218,228,139,216,114,186,238,152,104,108,157, 56,113,226,219,132,144, 77, + 19, 39, 78,124,123,230,204,153,103,125,225,243,112,126,179,168, 11,157,142, 29,243, 89,104, 81, 74,169, 92, 46,135, 32, 8,197, +196,149,171,227,173,104, 10,116, 54, 53,122, 19, 5,130, 32, 56, 18,133,107,179, 77, 34,145,224,192,129, 3, 56,112,224, 64,177, +227, 95,125,245, 85,137, 21,185,213,106,173,225,239,239, 95,204,154, 37,147,201, 48,113,226, 68, 12, 29, 58,212, 33,178,100, 50, + 25,190,251,238, 59, 52,106,212, 8, 38,147,169,134, 23,127, 21, 93, 84, 84, 20, 39, 22, 68, 26,141,134,140, 27, 55, 78, 98,181, + 90, 29,239, 68,220, 68,223, 53,111,137, 70, 28,197,178,117,235, 86,159, 44, 90,190,250, 40, 81, 74,113,242,228,201, 98,226, 77, + 28, 53, 3, 0, 39, 79,158,116,248,111,249,194, 41,145, 72, 96,179,217,160, 82,169,136, 76, 38, 35, 50,153, 44, 78, 20, 89, 18, +137,196,241,189,157,125,246,188,197, 61, 57, 57,185, 93, 73,231,211,211,211, 31,219,105, 28,204, 22, 11,244, 58, 19, 10, 10,245, +152, 50,243,219,162,131, 83,112, 8,192,161, 22, 47,141,195,232, 46,157,218,187,248, 1,248, 82,208, 56, 42,199,117,235,214, 65, + 42,149, 98,195,134, 13, 8, 8, 8, 64,207,158, 61, 17, 16, 16,128,183,222,122, 11, 3, 7, 14,244,217,162,101, 79, 75,121,132, +144, 22,175,190,250,234,145,143, 63,254,184,124,185,114,229, 96, 50,153, 96, 54,155, 97, 50,153,112,245,234, 85,172, 92,185,242, +182, 78,167,107, 65, 41,205,243,198,183, 37,249,235,171,235,119,191,145,210,113,224,211,250, 11,105,191, 35, 53, 53, 11, 86,107, + 50, 4,155, 21,102,107,209, 8,102,155,213, 10,171,213, 6,153, 76, 18,240,241,135,175,109, 19, 64,193,113,196,212,175, 95,191, +167, 30,214, 55, 10, 10, 10,170,149,145,145,129,203,151, 47, 99,216,176, 97,169, 89, 89, 89,231, 1,116, 0,128,172,172,172,189, + 67,135, 14,173,177,108,217,178,168,132,132, 4,248,249,249, 5,248,240,125,252, 0,140, 6,208,217,238, 7, 34, 34, 27,192,180, +240,240,112,197,177, 99,199,238,178,254,239,222,189, 27, 0, 14,185, 55, 25,216, 45, 90, 6, 3, 50,178,114, 48,242,165,119, 29, +166, 4,128, 22, 19, 23, 20, 20,163, 94,134, 18, 0, 50,211,174,226,217,145,227, 20,222, 26, 4,238, 42,194, 82,248,232, 56, 91, +138, 28,105,212,207,207,175,168,251,109,195, 74,108,254,228, 37,192,102, 6,181,232, 1,179, 14, 48, 23, 66, 48,233, 64,100, 42, +192,162,247, 73,104,249,249,249,193, 79,165, 66, 68, 80, 80,209, 36,144, 18, 9,164, 82, 30,130, 5, 32, 54,226, 16,164,130,205, +167,180, 78,195,194,194, 32, 8, 2, 84, 42, 21,110,220,184,129,209,163, 71,195,108, 54,163,119,239,222, 48,153, 76, 48, 24, 12, +208,235,245, 72, 76, 76,132, 78,167,243, 41,238, 98, 57, 47,246,254,188,246,218,107,104,212,168, 17,166, 78,157,138, 9, 19, 38, + 32, 49, 49, 17,163, 70,141,194,202,149, 43, 81,171, 86,173, 18,121,157,223,167,200, 41,126, 23,215, 46, 62, 0,165,254, 70,174, +156, 69,227, 3,112,215,119,127,229,153, 14,165,230,156, 53,107, 22, 50, 50, 50,238,178,100,137,255, 99, 99, 99,177,120,241,226, +123,237,250, 23,173, 71,145,238, 12, 98,110, 44, 81,141, 81,228, 59,101,156, 57,115,230,217,153, 51,103,118, 39,132,108,154, 57, +115,102,247, 18, 44, 90,221,188, 88,188,186,161,200, 39,203, 39,240, 46,125,163,109,157, 45, 37, 98, 69, 42, 86,232,206,133,188, + 90,173,198,250,245,235, 33,142, 0,113,190,166, 36,161,245,107,184,221,116,108,183,100, 57,239,247,232,209, 3, 9, 9, 9,197, +172, 89, 42,149,170,196,196, 35, 8, 2,110,222,188,137,179,103,207,162,105,211,166,200,203,203,131,148,227,240,198,233,211,168, +249,204, 51, 48,217, 45, 52,114,185, 28, 47,190,248,162, 79, 14,237,215,175, 95, 15,118,222, 15, 11, 11, 75,106,213,170, 85,236, +225,195,135, 29, 14,242,246,110, 53,135,224,240, 69,196, 80, 74,209,183,111,223, 98, 86, 44,103,145,229,188,253,254,251,239, 62, +117, 29, 82, 74,209,170, 85, 43,135, 53,203,223,223, 31, 63,255,252,179,227, 91,181,110,221,186,200,159, 33, 50,210, 39, 78, 49, + 30,118, 7,120, 24, 12, 6,161,160,160,128, 59,118,236, 24,228,114,185,195,130,167, 82,169,160, 84, 42,161, 80, 40,238,105, 4, +209,127, 1,148, 10, 48, 89, 44,208,235,245, 40, 44, 44,154, 89,228,234,153,117,197,133,152, 49,255,158,249, 69,171, 85, 65, 65, + 1,254,248,227, 15,252,244,211, 79,104,216,176,225, 93,206,240,190, 88,180,156,210, 83, 6, 33,164,229,248,241,227, 15, 78,159, + 62, 61, 38, 36, 36, 4,102,179, 25,183,110,221,194, 55,223,124,147,162,211,233, 90, 82, 74, 51,124,127, 9,128,197, 98,133, 65, +103, 68, 94,126, 1, 62,248,240, 59,143, 73, 15, 0,178,211, 47,162, 71,207,254,242,135,249,157, 82, 82, 82, 94,111,217,178,229, +135, 5, 5, 5,185, 58,157,174, 63,128, 57,206,134,195,172,172,172, 86, 61,123,246,156, 23, 18, 18,210, 48, 61, 61,253,109, 31, + 40, 39,222,184,113,227,237,248,248,248, 98, 7,237,214,199,170,233,233,233, 67, 90,183,110,253, 30,128, 16,167,211,254, 0,182, + 2, 88,236, 41, 45,137, 93,135,133,133,122, 4, 4, 69, 35,249,250, 46,175, 1,145, 73, 12,160,130,224,181, 1,232,206,138,229, + 92, 62,149, 34,253, 80,209, 39, 80,172,176,159,234,251, 12,158, 26, 61, 11,106, 41, 48,227,217, 22, 72, 12, 2,160, 10,129,172, +245, 91, 32, 65,246,119, 52,250, 23,159,248, 39,124,254, 57,142, 95, 46,154, 25, 38, 46, 60, 28,227, 7, 14, 4,181, 0,251,207, +157,195,170, 29, 59, 48,176, 93, 59,168,149, 74,159, 27, 44, 98, 35,252,234,213,171,216,191,127, 63,170, 87,175,142, 43, 87,174, + 20,155,134,130, 82,234, 83,252, 41,165, 84, 28,196,164, 80, 40, 32,149, 74,145,154,154,138,238,221,187, 59, 26,250,187,118,237, +194,248,241,227, 49, 98,196, 8,180,109,219,214,173,223,172, 43,103,120,120,184,195,128,224, 58, 80,193,185, 59,183, 52,223,200, + 29,167,136,123,253,238,206,156,211,167, 79,119, 59,160,194, 23, 78,103, 45, 82, 2,142,185, 88,147, 32,250, 75,137,194,200,117, + 31, 64,176,120,108,226,196,137,111,251,122,159,243,190,104, 17, 43, 77, 23,166, 67,104,117,235,214,141,184,171,108, 69, 51,178, + 59,104, 52, 26,140, 25, 51, 6,147, 39, 79, 70, 88, 88,152, 87,223, 26, 81,201,150,132, 95,126,185, 59,179,109,216,176,193, 91, +215,225,133,192,192,192, 70,237,218,181, 67, 94, 94, 30,110,223,190, 13,141, 70,131,154,159,124,130,211,163, 71,163,222,231,159, +131,107,223,222, 49,217,234,233,211,167,161, 82,169, 46,148,214,130,224,239,239,143,224,224, 96, 71,159,187, 40,184,156, 44, 90, +212,135,196,136, 95,127,253,213,109,171,241, 94,124,180,196, 66,224,224,193,131,197,252,179,156,133,207,193,131, 7, 29, 22, 45, +241, 54, 95,186,188, 84, 42, 21, 21,249,212,106, 53, 66, 66, 66,160, 80, 40,160, 82,169,138,137, 44, 95,172,121,222, 38, 36, 85, +169, 84,135, 53, 26, 77,144,120, 94, 42,149,162,160,160, 32, 55, 43, 43,171,201,191,186,235, 16, 20, 86,179, 21,122,189, 1,133, + 5,250, 50,231, 23, 7,166,172, 95,191, 30, 79, 60,241,196, 93, 34, 75,124,215,247,208, 98, 76, 34,132,180, 93,176, 96,193,161, +185,115,231, 6, 23, 22, 22,226,219,111,191,205, 43, 44, 44,108, 75, 41, 77, 42, 21,151, 64, 97, 49,155,161, 51, 24,161, 45, 44, +122, 7,127,157, 93,247,136, 9, 98,186, 18,192, 74, 87,139,161,211,249,191, 0,116, 47, 5,229, 19,241,241,241, 72, 77, 77, 45, +118,240,230,205,155,176,217,108, 70,251, 60, 89,207, 57, 61, 79, 66, 41,181,121, 43, 59,204,246,174,195,194,194, 34, 43,136, 65, +155, 89, 54,233,212, 46, 54, 60,249,100,221, 75, 23,143, 56,210, 89, 34,145, 96,236,216,177, 56,125,234, 20, 58,196,228, 35, 49, +202, 31, 52, 63, 25,178,246,239,227,100,134, 10,115,230,253, 90,106,238,213, 78,131,125,230,172, 94,237,246,220, 95,189,122,149, + 42,238,151, 46, 93,130, 74,165,130,205,102,187,171,190, 41,109,252,157, 5,204,188,121,243, 48,126,252,120,124,247,221,119, 56, +125,250, 52,234,213,171,135,142, 29, 59, 34, 61, 61, 29,167, 78,157,130,209,104,244, 57,156,206,126,115,151,174,157,195,246,253, +191,225,102,210,117,164,164,222,190,231,239,238,204,233, 42,180,214,111, 63,129,190,157, 26,220, 19,231, 7, 31,124,128,244,244, +244, 98,150, 44,231, 1,100,158, 44, 90,174, 90,196, 5,153, 46,190, 80,226,190,201, 69,244,184,238,187, 94, 15, 0,233, 0, 36, + 94,238,115,221,207,156, 57,115,230, 78,209, 18,102,231,149,120,243,207,114,219,117, 40,138, 34, 49,163,184, 90,170,196,255, 26, +141, 6,254,254,254,240,247,247, 71, 64, 64,128, 87, 75,145, 40,180, 90, 93, 43, 40,230,235, 37, 90,182, 0, 96,196,136, 17,119, + 89,180,156, 39,246,116, 7,163,209,184,107,215,174, 93,245,123,244,232, 33,185,112,225, 2, 36, 18, 9, 4, 65,128,169, 89, 51, +212,251,252,115,156,121,237, 53,180,185,113, 3, 6,179, 25, 74,165, 18, 91,182,108, 49,235,116,186, 93,165, 45, 55,156,133,150, + 70,163, 65, 96, 96,160, 67,104,248,162,210,197,204, 91,146,255,131,184, 57, 15, 6,240, 37, 83,139, 21,170,179, 95, 14, 33, 4, +122,189,222,225,212,233,139,213,209,185,235,208, 57, 3,114, 28,135,160,160, 32, 71,225, 33, 90,180,124,181,230,121,155,144, 84, +173, 86, 7, 92,188,120,177,146, 56,253, 68,102,102, 38,218,183,111,127,249, 95,111,210, 18, 0,179,213,134, 66,189, 1,133,122, + 93,153,209,138,105,237,251,239,191,199,213,171, 87, 97, 54,155, 49,115,230,204,187, 4, 86,105,156,225,221,164,171,171, 13, 26, + 52, 16,158,124,242, 73, 28, 60,120, 16, 10,133,194, 66, 41, 45,245,252, 87, 2, 21, 96,182, 90, 97,208,235, 81,168,213,254, 87, +140,153, 14, 85,125,254,252,121,152, 76, 38, 76,157, 58,213,118,228,200,145,157, 0, 94,178,127, 67, 14,192,144, 54,109,218, 76, +235,214,173, 91, 16, 33,228, 21, 74,233,119, 37,229,115,139,213, 46,218,203,240, 61,138,105,201, 83,153,116, 47,211,172, 56, 87, +172,130, 32,224,133,231,159, 71,199,152,124,244,105, 24, 14,237,157,203, 80, 7,134,131, 4, 85,192,156,121,191,226,236, 53,159, + 93, 49, 41, 0, 60,217,166, 23,234, 86,191,123,122,176,150, 29,138,218,100,123,255, 56,140,180,204,148, 82,199, 93,171,213,122, +180, 92,249,106,209, 18, 57,197,105, 86,164, 82, 41,234,215,175,143, 42, 85,170, 96,231,206,157,104,208,160, 1,174, 92,185,130, + 43, 87,174,224,198,141, 27, 56,125,250, 52,114,114,114, 74,253,141,126,222,186, 10, 57, 5,217,144,203,228,200,206,205,196,205, +228,235,136, 12,141,186,239,239, 46,162, 90,183, 15, 0, 0, 49,225,129,165, 18, 90,206,156, 31,125,244,209, 93,226,189, 12,166, +236, 57,236,101,191,180,247, 63, 52,240, 30,172, 68,250,144,144, 16,149,115,255, 42,199,113, 8, 12, 12, 36,179,103,207,150,112, + 28, 7,127,127,127, 4, 6, 6, 66, 52, 23,122,131, 92, 46,215, 87,168, 80, 65, 37, 38, 68, 49, 35, 6, 4, 4, 72,102,207,158, + 77,190,250,234, 43,143, 86, 46, 47, 62, 90,115,135, 14, 29,250, 92, 82, 82, 82,112, 68, 68, 4,238,220,185, 3,185, 92, 94,148, + 57,218,181, 67,171,107,215, 96, 46,242, 57,194,165, 75,151,240,197, 23, 95,104,141, 70,227,220,210,190, 40, 63, 63, 63,132,134, +134, 58,186, 12, 69,139,142,147,104,244,201, 5,179, 36, 19,189,216, 2,188,151, 46, 36, 87,177,245,210, 75, 47, 21, 19, 93,190, + 66, 38,147, 89,197,153,223, 57,142,131,217,108, 70,131, 6, 13,144,158,158,238,200, 52,206,150, 60, 95,132,150,183, 9, 73,121, +158,135,201,100, 66,235,214,173, 65, 8,193,167,159,126,250,120,116, 71, 10, 2,241,243, 11, 69, 76, 76, 85,132, 71, 24, 32, 8, +101,183,170,140,213,106,197,168, 81,163,138, 89,176,196,145,141, 98,215, 63,165, 20, 22,139,229,158, 39,127, 21,243,245,253,204, + 31, 71, 1, 71,151,151, 86,107,248,215,125,194,136,136,136,166,132,144, 13, 46,135,179, 1, 76,115, 55,131,187, 29,142, 15,125, +251,246,109,116,233,210, 5,191,253,246,155,228,167,159,126,234,176,113,227,198,115,149, 42, 85,186, 61, 96,192,128,114, 47,190, +248,162,162,117,235,214,200,204,204, 68,195,134, 13,167, 0, 40, 65,104,217,223,163,193, 8,173,182,236,173,163, 37, 53,248,238, + 71,192, 77,158,252, 30, 58, 70,231,162,119,189, 64, 44,219,180, 15, 67,234,171, 0,147,162,212,124, 98, 88, 66, 98, 18, 80,161, + 86,211,187,206, 43, 2,138,186,236, 42,212,106, 10,238,246,149, 82,199,221, 57,204,174,229,229,189, 88,244,156,223,231,200,145, + 35,241,214, 91,111,161,115,231,206,184,114,229, 10,118,239,222,141, 43, 87,174, 96,220,184,113,168, 85,171, 22,234,213,171, 87, + 42,206,141,219,215, 34,191, 48, 15, 28,225,144,157,151, 5,131, 81,143, 9,163, 38,223,247,119, 23,113,125,251, 76, 0,192,186, +109,199,239,153,243,157,119,222, 65,106,106,106, 49, 75,214,253,248,101,253,219,225, 86,104,101,101,101,185,237, 7, 12, 15, 15, + 79,235,212,169, 83,196,157, 59,119,224,231,231,231, 85,100, 17, 66, 58,138,115,109,164,166,166,186,229,244,247,247, 55,119,234, +212, 73, 26, 29, 29, 93,108,180,161, 70,163,185, 43,147,185,114,218, 43,129, 2, 66,200, 11, 45, 90,180, 88,246,251,239,191,171, +171, 84,169,130,252,252,124, 80, 74,241,221,119,223, 97,236,216,177, 80, 42,149,184,116,233, 18,122,246,236,169,211,233,116, 47, + 56,207,161,229,142,211, 83, 11, 77,156, 21,223,141,200, 42, 49,238,206,153,117,193,130, 5,152, 49, 99, 6,222,126,187,100, 87, +143,165, 75,151, 2, 46,221,124,238, 56, 41,165,152, 51,103, 78,153,113,102,101,101,125,231, 98,141,250,180, 79,159, 62,252,237, +219,183,139,137, 43,231,205, 77,193, 84,140,211,219,132,164, 18,137, 4,145,145,145,152, 62,125, 58, 66, 67, 67, 17, 21, 21,117, +151, 37,198,219, 55,186,199,202,224,129,114,218,168,112,236,227, 89,239,181,252,118,197, 70,169, 66, 14, 28,216,189, 14,249, 57, +197,187,147,140,230,191,135, 82,203, 27,116,128,233,248, 31, 62,133,211,104, 52,226,163,143, 62,194, 7, 31,124,128, 15, 62,248, +192,151,239,126, 95,113,247, 69,108,185,229, 20, 40, 81,107,130,161,212,196,160,102,173, 96, 8,212,250, 72,125, 35, 15, 56,114, +248,240,225,158,161,161,161, 72, 74, 74, 10,151, 74,165, 61,139,153,171,244,122, 84,168, 80,161, 42,128,230,222, 56,199,141, 27, +103,124,247,221,119, 21,131, 6, 13, 66,159, 62,125, 48,104,208, 32,133, 76, 38,171, 76, 41,133,217,108, 70, 82, 82, 18,254,248, +227, 15,100,100,100, 92, 40, 41,156, 2,165, 68,165, 14,130, 82, 19,141,154,181,131, 32, 8,214, 50,137,187, 88, 9,186, 90,179, + 74, 57, 33,181,219,178, 14, 0,142,252,177, 1,147, 95,171,141,239, 54, 31,194,194,195, 64,221,160,116,212, 12,207,128,144,113, + 1,111, 14,105,132, 57, 63, 28, 5, 0,236,222,229,245, 27,149, 56, 63,178, 65,111,190,175,184, 59, 91,174,156,159,227,205, 71, +203, 29,167,216, 72, 44, 40, 40, 64,110,110, 46,150, 45, 91,134,103,159,125, 22,233,233,233,184,113,227, 6, 46, 95,190,140, 31, +127,252,209, 49,154,189,180,223,232,141,231,223,193,187,115, 94, 7, 5, 69,181, 74, 53, 49,113,244, 7,104, 92,183,217,125,127, +119, 87,120,179,102,149,196, 57,127,254,252,123, 74, 75,255, 41,161, 85, 82,171,130,227, 56,132,133,133, 57, 18,137,115, 2,188, +151,150,175, 68, 34,129,213,106,117,248,254,136, 27, 0,244,232,209, 3,191,252,242,139, 47, 35, 41,126, 39,132,252,175, 70,141, + 26,223, 76,153, 50,197,175, 77,155, 54,124, 76, 76, 12, 26, 55,110,140, 75,151, 46, 97,243,230,205,150,197,139, 23,107,117, 58, +221, 8, 74,233,182,123, 41,159,196, 37,109,156,183,210,180,122,204,102,243,237, 43, 87,174, 68,207,153, 51, 71,194,113, 28,230, +207,159,239,200,148,226,132,175,206,216,189,123,183, 85, 16,132, 18,187,106, 44, 22,203,237, 43, 87,174, 68,127,242,201, 39, 18, + 66,136,131,147,227, 56, 56, 47,224, 92, 26, 78,119, 34, 83, 28, 24,225,110,115, 23,118,119,223,184,164, 9, 73,121,158,199,165, + 75,151, 48,121,242,100, 16, 66,176,110,221,186,199, 34,115,157,190,144,249, 85,189,154, 17,193, 61,158,106, 89, 7,132,192,108, +186,123, 54, 4,191,156, 66,135,200,234,243,201, 42,252,244,198, 64, 95, 68,207,213,189,123,247,134,124,244,209, 71,188, 68, 34, +193,188,121,243,138, 77, 26,236,250,221,247,236,217, 99,189,151,110, 63, 49, 63,155,205,102,232,245,247,102, 69,161,148,238,159, +249,225,187,157,150,127,255,171,148, 16, 19, 14,236, 90,135,188, 92,247,238, 12,114, 41,143,175,150,173,183,202,164,146,219,255, +240,167,251,172,119,239,222,131, 22, 45, 90, 84,211,221,201,219,183,111, 67, 16,132,146,156,107,110, 24, 12, 6, 36, 39, 39, 67, +167,211,173,157, 52,105,146,249,215, 95,127,125,238,233,167,159, 70,189,122,245, 16, 29, 29,141, 59,119,238,224,234,213,171, 88, +182,108, 25,221,183,111,223, 90, 0, 99,188,188,199, 13,179, 62,124,119,216,178, 31,126,149,115,196,140, 3,187,215, 33,207, 69, +180,223,109,157,150,226,235,239,214,155,101, 50,233, 69,111,229,186,179, 53,171, 44, 43,198,158, 67, 71,163,207,130,133,168,216, +184, 11,102,205,238,136,175, 63,236,143,185, 79,202, 96, 94, 51, 4,117,251, 45,199,202,169, 93, 1, 0, 49, 95,251,104, 45,225, +101,184,229,198, 98,149,155,167,180,139,155,210, 89, 77,197,184,151, 84,134,151,214,162,197,113, 28, 18, 18, 18, 80,177, 98, 69, +180,104,209, 2, 13, 26, 52, 64,187,118,237,112,234,212, 41,156, 58,117, 10,227,198,141,243, 40,178,124,249, 70,109,155,119,194, +161, 86, 23,239,251,219,184,126,247,178,128, 47,105,105,244,232,209, 0,240,159,178,110,241,247,242, 18,197,132,121,191, 75,210, +136,156, 38,147,201,209, 37,231, 60, 47,147,232, 28,239,227,136,190,109,132,144, 90,239,189,247,222,107, 74,165,178,157, 78,167, +171,106,183,200, 92, 50, 26,141, 59,244,122,253, 60, 74,105,238,253,132,213,121, 58, 7,119, 65, 40,233,222,156,156,156, 46, 93, +186,116,217,198,243,124,130,235,130,191,238, 50,178, 32, 8, 55,210,210,210, 74, 28,226,158,149,149,213,165,115,231,206,110, 57, +221, 21, 16,190,112,186,251, 62,130, 32,120, 20, 89,190, 20, 68,222, 38, 36,229,121, 30, 26,141, 6, 63,255,252, 51,194,194,194, + 30,171, 12,118,242, 92,250, 71, 37,157,111, 27,166,216, 5, 32,188,207, 39,171,110,237,204, 52,197,183, 13,147,223,252,233,141, +129,229, 75,186, 39, 51, 51,179,243,179,207, 62,251, 27,207,243, 9,174,239,223,221,183,176, 90,173,215, 83, 83, 83, 75, 61, 93, + 2,165, 20, 23, 47, 94, 20, 70,142, 28,153,153,145,145,209,255, 94,226, 63,113,242,194,185, 51,166,140, 13,125,178, 83,211,198, +224, 0,147,103,231, 95, 74, 0,202, 75, 37,183,199,191, 61,255,249,127,242,155, 81, 74,243, 9, 33, 45,250,246,237, 59, 6, 69, + 67,195,239, 18, 82, 0, 22,148, 64,177,160, 92,185,114,181, 37, 18,137, 2,192,100, 74,233, 77, 66,200,103,251,246,237,235, 12, +224, 9,137, 68, 18,109,179,217,146, 81,180,230,227, 42, 74,233, 73,239,233, 40,237,197,122, 53,194,227,158,236,248, 68, 23, 16, + 66, 77, 38,163,151, 6, 18, 40, 40,165, 50,153,244,226,225,147, 41,117,189, 89,235,237, 43,112,148,121,151,253,152, 49, 99, 48, +102,204, 24, 71,122,250,244,211, 86, 88,123,102, 47,250,213, 77,130,241,139,150, 32, 1,229,125,110,240, 1,192, 59,239,141, 44, + 75,203,102,177, 65, 90,101,229,163, 37,145, 72,144,153,153,137, 75,151, 46, 33, 45, 45, 13, 58,157, 14,231,207,159,135,217,108, + 70, 78, 78, 14,106,215,174,125,207,225, 44,171,111,244, 79,114,254, 23,187, 15, 75, 37,180,172, 86,107,146,183, 85,214, 45, 22, + 75,169, 70, 37, 73,165, 82, 67,149, 42, 85,136,187,209, 9,226,127,141, 70,163,247,177,128,204, 5, 48, 25,192,100,251,122, 86, +200,206,206,190,111, 53,104,179,217, 82,226,227,227, 37,158, 4,140,253,221,164,121, 9,155, 22, 64,179, 50,174, 16,202,156,211, +205,247,209, 86,175, 94,221,225,235,229, 58, 39,138,125,177,213, 18,189,115,189, 77, 72,170,213,106,239,116,233,210,197,230,124, +222,121, 66,211,199, 26,132,222,236, 58,232,185,248,157,153,166,120, 0, 16,197, 22, 60,251,255,128, 82,170, 7,208,230, 65, 7, +237,218,181,107,166, 39,158,120,226,251,130,130,130,209,148,210,123,246,230,127,251,253, 79,223,254,183,125, 22, 74,105, 62,128, + 25,247,120,239, 77, 0,237, 93,142,157, 4,112,242,126,194,116,242,124, 70,153,207, 45,102,181, 90,147, 42, 86,172, 88, 42,203, +141,183, 50,222, 98,177,148, 88, 79,156, 69, 32,222, 62, 8, 20, 45, 19,151,229, 19,167,193, 96,200,110,214,172,153,180,148,113, + 75,247, 53,238,209,209,209,136,137,137,113,252,138,112, 61,238, 45,156, 86,171, 53, 41, 46, 46, 14, 97, 97, 97, 30,103,124,119, +245,201,242,133,179,172,191, 81, 73,156, 49, 49,203,203,156,179,172,244,194,127, 66,104,137,107, 24,150, 37,210,210,210, 30,200, +154, 43,180, 44,204,109,127, 91,142, 26,227, 63,138,172,172,172,208,251,229,240, 54, 33,105, 90, 90, 90,187,255,234,251,221,153, + 97, 26,126,215, 49,187,232,250,167,161,213,106,203,123,155,118,192, 19,250,245,235,103, 3,195, 35,143,204,204,204, 50, 47,211, + 31, 68, 61,145,157,157, 93,231,191, 26,247, 7, 17,206,127, 11,231,227, 2,230,165,198,192,192,224,169,177,194,196, 18, 3, 3, + 3,195,125,130, 0,232,232,161,144,245,121,164, 15, 33,164,227, 61, 20,226,219, 25, 39,227,100,156,140,147,113, 50, 78,198,249, +223,226,244,198, 93,214, 35,141, 31,133, 86,235, 3,219, 0,116,100,156,140,147,113, 50, 78,198,201, 56, 25, 39,227,252,175,110, +172,235,144,129,129,129,129,129,129,129,225, 1,129, 9, 45, 6, 6, 6, 6, 6, 6, 6, 6, 38,180, 24, 24, 24, 24, 24, 24, 24, + 24,152,208, 98, 96, 96, 96, 96, 96, 96, 96, 96, 96, 66,139,129,129,129,129,129,129,129,225,193,129,148,225,188,158, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 78,224, 1, 96,243,230,205, 14,181,213,173, 91, 55,194, 94, 11, 3, 3, 3, 3, 3, 3,195,195,196,227, +170, 69,120, 38,176, 24, 24, 24, 24, 24, 24, 24, 30, 5, 60,142, 90,132,115,167, 36, 25, 24, 24, 24, 24, 24, 24, 24, 30, 54, 30, + 71, 45,194, 61,206, 42,146,129,129,129,129,129,129,225,223,131,199,222,162,197,172, 90, 12, 12, 12, 12, 12, 12, 12,255, 20,254, +173, 90,132, 16, 66, 9, 33,212,121,223,241,159,141, 58,100, 96, 96, 96, 96, 96, 96, 96,184, 55,129, 69, 41, 37,158,126, 1, 54, +143, 22, 3, 3, 3, 3, 3, 3, 3,195, 61, 65, 20, 83,206,251,206,214,172, 7, 46,180, 8, 33, 29, 25, 39,227,100,156,140,147, +113, 50, 78,198,201, 56,255, 43,130,139, 82, 74,156,247,121,246,122, 24, 24, 24, 24, 24, 24, 24, 24,238, 91,124, 82,119,194,139, + 9, 45, 6, 6, 6, 6, 6, 6, 6,134,251, 20, 89,206,226,138,249,104, 49, 48, 48, 48, 48, 48, 48, 48, 60, 4, 48,139, 22, 3, + 3, 3, 3, 3, 3, 3,195,125,192,213, 9,158,117, 29, 50, 48, 48, 48, 48, 48, 48, 48,148,177,216,114,119,156, 0,232,232,225, +134,237,190,146,223,203,232, 3,111,252,140,147,113, 50, 78,198,201, 56, 25, 39,227,124,252, 56,189,113,151, 70,127, 60, 42, 32, +132,180, 1,176, 19, 64, 91,251,239,223,194,139, 82,250,192, 54, 0, 29, 25, 39,227,100,156,140,147,113, 50, 78,198,201, 56, 31, +231,173, 72, 78,253,253,235,188, 49,103,120, 6,111, 42,157, 39,132,240,247,122,254, 97,113, 50, 48, 48, 48, 48, 48,252,195,245, + 37, 21,127,157,253,181,120, 15, 23, 87, 6,240, 54,128, 64,167,195,135, 41,165, 51, 93,174,251, 1,128,218,233,144, 22,192, 84, + 74,233, 21, 31,194, 36,179,243, 43,236,155, 0,192, 0,192, 8,160, 0,128,133,125,182,127, 60,209, 52, 3,208,221,254,127, 19, +165,244, 64,105,206, 63, 44,206,135,133,152,152, 24, 85,112,112,112,231,227,199,143,203,207,159, 63,143, 61,123,246,208,175,190, +250,202,156,147,147,179, 53, 37, 37, 69,207, 82,204, 99,145,230,187, 0,152,104,223,157, 69, 41,221,114,159,124, 68,173, 86,143, +211,104, 52, 93, 21, 10, 69,140,213,106, 37, 58,157, 46, 69,171,213,110,179, 90,173,159, 80, 74,133,123,224,236, 21, 18, 18,242, + 92,181,106,213, 42,223,184,113, 35, 57, 37, 37,229, 7, 0,107, 0,244,143,137,137, 25, 82,161, 66,133,216,139, 23, 47, 94,201, +206,206,254,154, 82,186,225,159, 10, 39, 3,195,127, 9,158,252,179, 60, 10, 45, 0,147, 41,165, 67, 92, 50,226, 93, 23,181,111, +223,190,231,214,173, 91,213,130, 32, 64,220, 84, 42,149, 21,192,112, 47, 97, 10,221,191,127,127,252,232,209,163,251,164,164,164, + 52, 42, 40, 40,104, 2, 0,106,181,250, 80, 68, 68,196,145, 5, 11, 22,252,216,185,115,231, 36,187,224, 42,149,165, 68, 42,149, + 62, 27, 28, 28,220,213,106,181, 54,160,148, 66, 42,149, 30,207,201,201,217, 98,177, 88,190,166,148,150, 90,188, 17, 66,228, 60, +207,143, 81, 40, 20, 93,172, 86,107, 29, 0,224,121,254,180,209,104,220, 98,181, 90, 63,163,148,154,238,129, 83, 41,151,203,199, + 4, 4, 4,116, 50,153, 76,117, 0, 64, 46,151,159,206,207,207,223,102, 50,153, 62,163,148, 26, 30,129, 10,135, 7,208,157, 82, + 42, 5, 0,137, 68,210,171, 89,179,102,241,132, 16, 65,156, 31,132,227,184,250, 54,155,141,179, 95,223,157, 16,114,132, 82,106, + 45, 13,231, 19, 79, 60, 81,142,231,121,106,159, 73,151,227, 56,174,110,105, 56,203, 10,225,225,225, 51, 4, 65,136, 41,233,154, +192,192,192, 70,199,143, 31,175,182,122,245,106,219, 23, 95,124,145, 59, 98,196, 8,191,209,163, 71,243,159,126,250,233,103, 0, + 94,113,189, 62, 44, 44,108, 46,199,113, 97,190, 60, 95, 16,132,204,204,204,204,215, 89,113,245,143, 99,226,226,237, 5,173, 41, + 5,198,116,242,231, 0,220,151,208,138,141,141, 93, 54,108,216,176, 65,117,234,212,225, 41,165,176, 88, 44, 48, 26,141,213, 14, + 28, 56,208,118,221,186,117,141, 0,244, 47,101,190,124,254,173,183,222,154, 62,109,218,180, 48,169, 84, 74, 44, 22, 75,165,213, +171, 87, 55,120,241,197, 23, 95, 93,186,116,105,185, 1, 3, 6,248,139,199, 39, 79,158,220,152, 16,146, 72, 41,253,228, 97,135, +147,129,225, 63,216, 72,107,131,226, 62, 90, 83, 40,165, 31,148, 36,180, 52,246, 27,211, 0, 28, 22, 45, 90,174, 23,253,249,231, +159, 27,121,158, 23, 45, 90, 77,180, 90,109,164,139, 21,204, 29, 42, 12, 29, 58,180,217,218,181,107,103, 12, 24, 48, 32, 85,173, + 86, 87,121,250,233,167, 11, 8, 33,146,213,171, 87,215,175, 88,177,162,170, 71,143, 30, 67,219,183,111,255,198,111,191,253,182, + 7, 64,134,143,145,172, 25, 18, 18,178,254,163,143, 62,138,239,210,165,139, 44, 44, 44, 12,148, 82,164,164,164,196,110,222,188, +249,201, 41, 83,166,188, 65, 8,233, 77, 41, 61, 87,138, 23,215, 88,165, 82,173,157, 50,101, 74,244,147, 79, 62,201, 71, 69, 69, +193, 96, 48,224,252,249,243, 29,183,108,217,210,122,233,210,165,175, 16, 66,250, 81, 74,143,148,130,179, 73, 96, 96,224,186,111, +223,122, 43,178,233,179,207,242, 33, 33, 33,160,148, 34, 35, 35,163,227,222,229,203,219,142,250,232,163, 87, 8, 33,125, 41,165, +135, 31,165, 68, 36,151,203,185, 21, 43, 86,212,147,203,229, 0, 0,147,201,132, 90,181,106,145,251,225,148, 74,165,220, 39,159, +124,210,128,231,121,152,205,102,161,160,160,128, 62,253,244,211,220, 63,148, 73,226, 82, 82, 82, 2,101, 50,153,219,243, 54,155, + 13,173, 91,183, 78,144,201,100,248,228,147, 79, 44,153,153,153,245, 23, 45, 90,116,124,229,202,149, 97,159,125,246, 89, 63,119, + 66,139,227,184,176,164,164, 36,183,156, 54,155, 13,102,179, 25, 86,171, 21, 38,147, 9, 53,106,212, 96, 37,213,163,129,120, 0, +248,245,148, 1, 0, 66,238,151, 76,163,209, 84, 31, 60,120, 48,159,145,145, 1,169, 84, 10,179,217,140,212,212, 84,212,170, 85, + 75,242,253,247,223, 87, 45, 45, 95,165, 74,149, 70,204,154, 53, 43,252,215, 95,127, 53,175, 88,177,194,212,169, 83, 39,233,136, + 17, 35, 2, 90,183,110, 93, 35, 46, 46,142,251,230,155,111,140,219,182,109,179, 12, 29, 58, 84, 62,115,230,204,240,205,155, 55, +247, 0,240,201,195, 14, 39, 3,195,127, 16, 59, 93, 23,149, 6, 80,162,208, 18,113,152, 82,218, 11, 0,100, 50, 89,253,114,229, +202, 45,179, 90,173, 81,118,171, 78,170, 84, 42,253,196,108, 54,159,176, 87, 84, 27, 4, 65,232,233,205,146, 53,116,232,208,102, +191,253,246,219,156, 3, 7, 14,228,101,101,101, 69,109,220,184,209,240,198, 27,111,220, 0,128,107,215,174, 37,246,232,209, 35, +118,236,216,177, 73,157, 59,119, 94,208,174, 93,187,151,119,236,216,177, 13, 69, 93,146, 37,138,172, 90,181,106,237,223,189,123, +183,127, 80, 80, 80,113, 85, 87,161, 2, 94,126,249,101, 89,207,158, 61, 43,118,232,208, 97, 31, 33,164, 21,165,244,140, 47,130, +168,114,229,202,219,255,252,243, 79,191,224,224, 96,228,230,230, 34, 53, 53, 21, 58,157, 14, 1, 1, 1, 24, 48, 96,128,172, 77, +203, 22,229,198,142,123,101, 59, 33,164,163, 47, 98,139, 16,210,164, 69,205,154,219, 87,206,156,233,103,185,117, 11, 42,149, 10, +133,133,133, 0, 0,127,127,127, 52, 74, 72,224,143, 46, 95, 30, 59,100,194, 4,145,243,161,139, 45, 66,136,194,110, 6, 53, 18, + 66, 54, 73, 36,146, 94,114,185,156,235,213,171, 23,182,111,223, 78, 12, 6, 3, 15, 0, 74,165,210,218,171, 87, 47,168, 84, 42, +152, 76, 38, 1,192, 38, 79,150, 39,119,156, 82,169,148,107,215,174,157,238,240,225,195,217, 34,167, 90,173,182,180,107,215, 46, + 84, 46,151,171,172, 86, 43, 45,137,243, 1,137, 73, 92,189,122,181,216,177,130,130, 2,100,100,100, 32, 43, 43, 11, 70,163, 17, +185,185,185, 16, 4,129,168, 84,170, 12, 65, 16,192,113, 69,198, 55, 79,156, 50,153, 12,151, 46, 93, 42,118,204,106,181, 66,171, +213,194,104, 52,194,108, 54,163,160,160, 64,229,239,239, 95,185,102,205,154, 73, 0, 54,100,103,103,127,146,154,154,122,147,149, + 91,255, 8,110,109, 58, 97, 40, 15,192, 4,224,122, 25,240, 9, 0,176,103,207, 30,164,165,165, 33, 51, 51, 19, 25, 25, 25,136, +139,139,195,189,116,199, 93,189,122,117,113,237,218,181,201,217,179,103,183, 0,248,116,245,234,213,195,179,179,179, 39,142, 31, + 63, 62,228,227,143, 63,206,158, 48, 97,194, 44, 0,223,173, 94,189,250,165,234,213,171,119,189,112,225,194,210,127, 34,156, 12, + 12, 15, 0,141, 1,132,219,255,103,218,203,221, 80,167,253, 83,246,124, 43, 94,103, 2, 32,119,243, 43, 66,220,207, 0,112,196, +233, 62,113,255, 94,234, 79,234,252,235,104,116, 3,192,230,205,155,169,184,185,187, 57, 50, 50,114, 92,251,246,237,231, 28, 59, +118,172,198,157, 59,119,130,239,220,185, 19,124,236,216,177, 26,237,219,183,159, 19, 25, 25, 57, 78,188,206,238,113, 15,167,125, +231, 33,154,178,253,251,247,199,175, 95,191,126,214,246,237,219,243,234,215,175,111,250,243,207, 63,173,157, 59,119, 78, 7, 96, + 5, 96,237,220,185,115,250,142, 29, 59,108, 77,155, 54, 85,253,246,219,111,183,247,237,219, 55,119,237,218,181,145, 0, 36, 30, + 56, 65, 8,145, 6, 5, 5,253,188,107,215,174,187, 68,150, 51,202,149, 43,135, 77,155, 54, 5, 4, 5, 5,109, 32,132,200, 74, + 8, 39, 8, 33, 74,165, 82,185,110,199,142, 29,126,254,254,254, 72, 79, 79,135, 84, 42, 69, 68, 68, 4,242,242,242,144,122,231, + 14,110, 94,190, 12,206,100,194,188, 15,167,249,171, 84,170,181,132, 16,185, 55,206,192,192,192,117, 43,103,204,240,203,218,190, + 29, 39,167, 79,135,217,108,118,116,185,154,205,102,236, 27, 61, 26, 25,127,252,129,111, 38, 79,246, 11, 12, 12, 92, 71, 8, 81, +150,196, 89, 22,112,230, 36,132,140, 6,144, 13, 32,155, 16, 50,154, 82,122,160, 86,173, 90,199,206,159, 63,143, 86,173, 90, 97, +205,154, 53,117,199,143, 31, 63,122,252,248,241,163,215,172, 89, 83,183, 85,171, 86, 56,127,254, 60,106,213,170,117,204,217,151, +202, 23,206, 93,187,118,161,125,251,246, 57,107,214,172, 73,156, 60,121,242,140,201,147, 39,207, 88,181,106, 85,197,246,237,219, +231,204,159, 63,223, 88, 18,231,131,136,187,179,165,201,121, 19,132,191,235,152,152,152,152,244,245,235,215, 99,192,128, 1,156, + 92, 46,191, 51,112,224, 64,197,222,189,123, 41,128, 77,165, 9,167,193, 96,128, 94,175,135, 86,171,197,181,107,215, 84, 31,125, +244, 81,203, 15, 62,248,160,210,246,237,219, 99,223,126,251,237, 81,225,225,225,199,163,162,162,226, 31,118,220, 25, 39, 0, 32, + 21,128,217,222,184,187,121, 63,156, 29, 58,116,168, 93,169, 82,165,200,213,103,131,145, 35,171, 6, 65, 22, 4, 65, 22, 4, 91, +104, 99, 92,149, 63,133,242,229,203, 71,250,251,251, 55, 43, 13, 39,165,116,197,153, 51,103,158,160,148,126, 64, 41,205,162,148, +206,153, 48, 97,194, 20, 66,200,158, 9, 19, 38, 76,163,148,206,177, 31,159,126,254,252,249,166,148,210,149,255, 68, 56, 89, 90, + 98,156,247, 2, 47, 90, 36,156, 16,178,137, 16,178,105,210,164, 73,237, 0,132,186,236, 55,119,190, 14,128,220,221,175,184, 57, + 29, 15, 7,208,205,233,190,240,123,124, 31,196,117, 43, 38,180, 0,160, 91,183,110,164, 91,183,110,226,137,195,132,144,141, 0, + 14,203,100,178,250,245,234,213,235,245,251,239,191,251,135,135,255,253,252,240,240,112,172, 93,187,214,191,102,205,154,189,100, + 50, 89,125, 0,135, 3, 2, 2, 54,194, 77, 23,163, 29, 65,163, 71,143,238,243,204, 51,207,228,215,175, 95, 31, 0,114,207,157, + 59,167,110,218,180,169,214,106,181, 18,171,213, 74,154, 54,109,170, 61,119,238,156,218, 98,177, 20, 52,110,220, 88,211,161, 67, +135, 27,175,191,254,250, 80, 0,202, 18,226, 55,120,246,236,217,113,193,193,193, 37,189, 0, 20, 20, 20, 32, 50, 50, 18,163, 71, +143,142,146, 74,165,207,149,244,194,120,158, 31, 51,123,246,236,136,160,160, 32,228,228,228, 32, 46, 46, 14, 38,147, 9,151, 46, + 93,130, 65, 91, 8, 75, 65, 62, 44,249,185,200,248,235, 10,130,164, 60,134,246,236, 30,201,243,252, 24, 47,214,146, 49, 95, 79, +152, 16,105,186,113, 3,215,214,172,129,205,122,183,161,198,106, 54,227,244,151, 95,194,144,148,132, 89, 35, 71, 70,202,229,242, + 49, 15,217,146,245, 49,165, 84, 69, 41, 85, 17, 66, 22, 52,111,222,252,123,149, 74, 53,122,230,204,153, 93,182,110,221,250,228, +238,221,187,219, 90,173, 86,169,213,106,149,238,217,179,167,149,193, 96,224, 21, 10, 5,120,158,167,190,114, 54,107,214,108,153, + 74,165, 26,181,100,201,146, 46, 59,118,236, 24,122,244,232,209, 49, 54,155, 77,110,179,217,228, 71,143, 30,125, 81,175,215, 75, + 41,165, 54, 79,156, 15, 27, 82,169, 20, 50,153, 12, 42,149, 10, 45, 91,182,252,235,171,175,190,178,196,197,197, 73,215,173, 91, + 23, 28, 19, 19,163,249,244,211, 79,115, 11, 10, 10,102,251,202,103, 54,155, 97, 52, 26,161,215,235, 97, 48, 24,240,231,159,127, + 38,140, 29, 59,150, 55, 24, 12,182, 30, 61,122,100, 91, 44, 22,227,132, 9, 19, 2, 66, 66, 66,222, 96, 13,216,127, 4, 86, 0, +133,118,161,101,116, 78,203,132,144, 58,162,117,214, 23,228,230,230, 46,253,250,235,175,227, 56, 69, 16,246,154,186,226, 71, 97, + 10,182, 6,126,138,244,248, 55, 17, 17, 87, 9,131, 6, 13,138,160,148,126, 90, 6, 21,222, 34, 74,105,107, 74,233,130,123,185, +255, 65,135,147, 16, 18,239,231,231,183, 38, 32, 32, 96,175,159,159,223, 26, 66, 72,252,253,198,185,115,101,210,177, 87, 13, 73, + 82,231, 74,132,246,170, 33, 73,234, 92,185,244,115, 61, 49, 60,154,112,209, 34,206,200,160,148,118,167,148,118,159, 53,107,214, + 12,167,244, 47,238,171,124,204, 47,221, 41,165,221, 93,210,232,166, 50,168, 67,169,235,230,208, 20,206, 74, 82,140,156,243,232, +194,114,229,202, 45, 91,182,108,153,191, 43,233,157, 59,119,144,159,159,143,119,223,125,215,255,153,103,158,121,229,246,237,219, +195,188,132, 67,158,154,154,218, 96,200,144, 33, 74,179,217,156, 35, 8, 2,151,159,159,207, 7, 6, 6,218,196, 11, 2, 3, 3, +109,121,121,121, 82,173, 86, 43,177,217,108,198,103,158,121, 70, 62,114,228,200, 70,206, 22,173,187, 36,110,120,120,167,174, 93, +187,202, 61,157,183, 88, 44,208,106,181,208,106,181, 48,155,205,104,217,178,165,226,171,175,190,234, 12, 96,137,167,123, 20, 10, + 69,167, 78,157, 58, 73,179,179,179, 17, 24, 24,136,155, 55,111,226,250,245,235, 48, 22, 22,194, 92,152, 15,115, 97, 1,172, 5, +249,160,249,121,200,186,114, 17, 77,171, 87,147,253,160, 80,116, 1, 48,215, 19,103, 64, 64, 64,167,166,195,135,243, 26,141, 6, +109,135, 20,141, 51,248,173,122,117, 80,155, 13,130,205, 6,155,213,138, 46,151, 46,193, 98,177,128,227, 56, 52,206,206,230, 3, +150, 47,239, 4, 96,206, 63,145,216, 21, 10, 5,191, 98,197,138,193,114,185, 28,148, 82, 98, 50,153,176,117,235,214,251,230, 92, +190,124,249, 80,145,211,108, 54,211,218,181,107,223,149,161,140, 70, 35,125, 84, 50,189, 92, 46,135, 82,169,132,217,108, 70,133, + 10, 21,244, 67,134, 12,217,255,225,135, 31,150,231, 56, 78, 35,147,201,126,207,202,202,154,145,146,146,114,205, 87, 62,139,197, + 2,147,201, 4,147,201, 4,189, 94,143,191,254,250, 43, 42, 33, 33,129,140, 30, 61,218,166,211,233, 18, 23, 46, 92,120,117,235, +214,173,234,217,179,103, 63, 13,224,101, 86,236, 62, 60,216,173,210,129,229, 67,121,173, 84,130, 66, 0,254,118, 81,240, 52, 33, +164,105,141, 26, 53,130,207,159, 63,159, 67, 8, 57, 8,224, 71, 74,233,157,146,248, 4, 65, 32,130, 32,224,197, 38,185, 24,221, + 76, 2,139, 37, 15,121,121,121,184,121,243, 38,206,157, 59,135, 67,135,206,221, 83, 56,149, 74,229,115,126,126,126,157,149, 74, +101, 5,171,213,202, 21, 22, 22,222,212,233,116,219, 5, 65, 88, 74, 93,187, 21,124,192,131, 10,167, 8,141, 70,243,209,219,111, +191,221, 34, 48, 48, 16, 39, 78,156, 72, 92,181,106,213, 71,184, 79,231,122,165,148,251,102,238,252, 79, 99, 99, 35,130,112,106, +247, 47,177, 51, 62, 95,253, 13,128, 56,150,138,255,253,112,214, 34, 46, 56, 2,160,155,125, 52,122,247,251,200,231,247,117,127, + 73, 22, 45,215,133,165,239, 18, 90, 30, 34, 6,171,213, 26,229,108,201,162,148,226,206,157, 59, 72, 78, 78, 70, 70, 70, 6,130, +131,131, 97, 54,155,163,124,169,103, 11, 10, 10,154,132,134,134,234,164, 82,169, 81,175,215, 67,173, 86, 11, 82,169,148,218,159, + 67,236,163, 22,109, 70,163,145,240, 60,111,241,247,247,247, 51, 26,141,213, 80,130, 47, 25,165,180, 73,104,104,168,219,115, 70, +163, 17,133,133,133,208,106,181, 40, 44, 44,132,209,104, 68,100,100, 36,172, 86,107,131, 18,155,180, 86,107,157,240,240,112,164, +164,164, 64,165, 82, 33, 41, 41, 9,166,194, 2,152, 11, 10, 96,213,230,195,150,151, 7, 33, 63, 31,130, 54, 31, 22,147, 14,177, + 85,170, 67, 28,145,232, 9, 38,147,169, 78,104,104, 40,180,218,191,221,205,168, 93, 96, 89,173, 86, 88,237,206,209, 98,119, 98, + 88, 88, 24,196, 17,137, 15, 3,118,255,169,241, 28,199, 45, 80, 40, 20,252,168, 81,163,112,231,206,157, 98,105, 98,212,168, 81, + 14,159,172,214,173, 91,239, 81, 42,149,214,140,140, 12, 24,141, 70,169, 47,156, 21, 42, 84,184,249,238,187,239, 30, 54,153, 76, +113, 49, 49, 49, 65, 70,163, 81, 95,181,106,213, 24,149, 74, 21,105, 50,153,108,141, 26, 53, 90,170, 82,169, 44,133,133,133,212, +106,181,146, 71, 33,211, 19, 66, 64, 8, 41,250, 70, 86, 43,194,194,194,180,153,153,153,135,114,114,114, 6,223, 11,159,197, 98, + 17, 71,116, 65,175,215,131, 82,138, 19, 39, 78, 64,169, 84, 74,109, 54,219, 89,171,213,170,150, 74,165,224,236,206, 95, 12, 15, +237, 59,183,173, 22, 36,159, 59,179,105, 68, 80,189, 30, 26,173, 90, 46,209, 10, 55,235, 85,248,246,227,115,171,158, 25,250,156, +255,212,169, 83,227,195,194,194,148, 87,175, 94, 53, 76,155, 54, 45, 97,197,138, 21,196, 91, 35,232,214,173, 91, 63,189,253,246, +219, 33, 93,187,118, 77, 84, 40, 20, 36, 47, 47, 15, 25, 25, 25, 72, 75, 75,195,245,235,215,233,169, 83,167,254, 50, 26,141,107, + 74, 19,206,152,152,152,175,198,142, 29,251, 76,195,134, 13,165,162,133, 84,171,213,214,223,181,107, 87,207,223,126,251,173, 21, +128, 82,167,203,219,183,111,175,121,231,157,119, 52, 79, 61,245, 84, 53,133, 66,193,149, 69, 56,157,193,113, 92,164,159,159, 31, +182,111,223,142,160,160, 32,112, 28, 23,121,191,223,203, 96, 22, 98, 99,162, 66, 97,216, 55, 23,213,194,227, 97, 48, 11,177, 44, + 21, 63, 62, 22, 45, 15,167, 26,139, 22, 41, 47, 98, 73, 63,113,226,196,183, 9, 33,155, 38, 78,156,248,182, 59,139,150,253,175, +205,249, 58,167,235,141,101, 45,182, 74, 53, 41,164, 32, 8, 72, 78, 78, 70, 74, 74, 10,146,147,147,145,149,149, 5,142,227, 74, +156, 63,194, 57, 12,132, 16, 97,219,182,109,193,251,247,239,215, 54,110,220, 56, 87,244,127,177, 90,173,196, 98,177, 16,187, 95, + 12,185,121,243,166,108,239,222,189, 65, 23, 46, 92,136, 68,145,195,154,224, 37,114,119, 29, 19, 5,150,243,102, 48, 24,160, 84, + 42,125,138,171, 88, 17,158, 56,118,172, 72,100, 21, 22,216,187, 12,243, 96,203,207, 3,213, 22, 64,110,179, 64, 14, 10, 98,208, +249,252,254,156, 33,138, 44,179, 93,104,153, 76, 38, 88, 44, 22, 8,130, 0,171,213,250,208, 19, 56,165,116,113,253,250,245, 27, +252,244,211, 79, 35,146,147,147,239, 58,223,187,119,111,188,252,242,203, 24, 59,118,236,133,110,221,186,157,250,229,151, 95, 48, +102,204, 24, 8,130, 80,143, 16,146, 71, 41,253,173, 36,206,137, 19, 39, 30,189,125,251,246,206,203,151, 47,143,138,136,136, 80, +212,169, 83,231, 74,157, 58,117, 36, 63,253,244, 83,228,243,207, 63,127,236,201, 39,159,188,241,199, 31,127,132,108,223,190, 93, + 41, 8, 66, 67, 66, 72,242, 63, 61,143,150,209,104,116, 88,160, 12, 6, 3,204,102, 51, 80,130,243,187,183,180, 41,126, 91,171, +213, 42,114,147,159,126, 90,143, 61,123,246,112,231,206,157,141, 27, 53,106,180,232,112,207, 74,220,135, 35,176,158,146,115,228, +139,241,245, 66,149,111,212, 13,213,202,121, 82,120,233,139,183, 11,175,151, 15,208, 70,150, 83,155,226, 18,130, 98,102,204,248, + 48,250,194,133,139,198,119,223,125,247,252,192,129, 3, 35,222,120,227,141, 26,235,214,173,107, 69, 8,249,154, 82,154,235,129, + 87, 57,124,248,240,131, 17, 17, 17, 9,159,127,254,121,250,237,219,183,131, 45, 22,139,198,108, 54, 11, 90,173,246,186, 94,175, +223,110, 54,155,183, 83, 74,143,149, 38,188,254,254,254,117,135, 15, 31, 46,205,205,205,133,125,180, 46,210,211,211,209,162, 69, + 11,201,198,141, 27,107,222,203, 59,200,206,206,158, 75, 8,217,185,114,229,202,206, 1, 1, 1, 13, 21, 10, 69, 20, 0, 91, 65, + 65, 65,154, 86,171, 61,121, 47,225, 44, 86,206,217,108,105,199,142, 29,171, 24, 16, 16,128, 91,183,110,193,102,179,165,221,239, +119, 83,202,184,219,167,119,111, 44, 87, 61, 44, 1,123,247, 31,132, 82,198,221,102,169,249,177,135,232, 67, 5,103, 1,229, 70, + 32,237,159, 57,115,166,106,214,172, 89,152, 57,115,230, 89,119, 22, 45, 81,112,205,156, 57,243,172,120,157,211,245,187,239,163, + 60,241,108,209, 42, 65, 65,130,231,249,212,140,140,140,224,160,160, 32,135,192, 74, 73, 73, 65, 74, 74, 10,228,114, 57,110,222, +188, 9,185, 92,126,199,151, 70,136, 74,165, 58, 90,191,126,253,170,215,174, 93,147, 77,155, 54,173,220,177, 99,199, 2, 90,180, +104, 81, 91,165, 82,217, 40,165, 48, 24, 12,220,249,243,231,253,230,204,153, 19,219,164, 73, 19, 83,147, 38, 77,142,175, 94,189, + 90,143, 18, 38, 47, 37,132, 28,190,115,231, 78, 98,133, 10, 21, 68,209, 86, 76, 92, 57, 11, 46,160,168,203,147,231,249,227, 37, + 5,148,231,249,211,151, 46, 93,234,168, 86, 42, 96, 42,200,135,185, 48, 31,214,130, 2,216, 10,242, 96,203,203, 3,180,249,144, + 91,173,144,218, 44, 80, 41,149, 72, 78, 74, 2,207,243,167, 75,226,148,203,229,167,211,210,210, 58, 6, 5, 5, 57, 42, 81,139, +213, 90,180,217,108, 48, 89,173, 14,139,150, 84, 42,197,237,219,183, 33,151,203, 79, 63,236,148,204,113,156, 77,156,194,193, 67, + 60, 16, 25, 25, 41, 52,109,218, 20, 99,198,140,129,205,102,179,127, 6,210,150, 16,178,151, 82, 90,232,137, 83, 16, 4,238,252, +249,243,125,174, 94,189, 42,145, 74,165,220, 19, 79, 60, 81,171,101,203,150, 38,185, 92, 14,153, 76,198, 23, 22, 22,250,111,223, +190, 93,105,177, 88,136,157,243,161,205,163, 37,166,157,187,154, 70,118,167,117,189, 94,143,194,194, 66,228,228,228,240, 42,149, +170,106,237,218,181, 15,154, 76,166, 53, 86,171,245,155,107,215,174,229,123,226,180, 11, 51,135,232, 18, 4, 1,148, 82,216,108, + 54, 88, 44, 22,200,100, 50, 97,215,174,221,152, 51,239, 35, 44,251,102, 5,237,217,179, 39,217,184,113, 35, 4, 65, 72, 98,229, +234, 67,193, 39,185, 63,126,168,132,213,166, 53,238, 90, 89,248,253,229,124,237,212,239,231, 31, 53,201, 37,249,141,218, 68,214, + 73, 76,168, 42, 9, 10, 10,230,150, 44, 93,144,245,195,138,181, 87,111,221,186,149,255,217,103,159, 53,171, 90,181,106,224,201, +147, 39, 99, 1,184, 21, 90,106,181,186,242,115,207, 61, 55, 60, 39, 39, 71,182,108,217,178,213,119,238,220, 57, 10,224, 28,165, + 84,235, 84,118,117, 35,132,124,135,162,145, 79,145,246,114,110, 47,165,116, 90, 73,237, 53, 66, 8,118,236,216,113,215,232, 64, +225,254,212,121, 80,165, 74,149, 6, 92,187,118,109, 79,106,106,106, 95, 55,249,126,106,149, 42, 85,186,156, 61,123,118, 10,165, +244,215,210, 16,235,116,186, 9,107,215,174,253, 88, 34,145,196,216,108,182, 20,189, 94, 63,225,190, 45, 90, 22, 97,228,204, 37, +171,190,212,155,108,229, 85,114,201, 45,131, 69,120,158, 37,229,199,218,154, 5,216,125,180,196,255, 0,136,203,254, 73,251,127, +147,211,181, 25, 78, 86, 44,147,139, 21,204,221,185, 12,220,227,100,233,238, 70, 28,138,162,203,211,204,240,147, 0, 52, 1,112, + 88, 42,149, 46,120,230,153,103,230,252,240,195, 15,254,249,249,249, 72, 75, 75, 67,122,122, 58,120,158, 71, 64, 64, 0, 22, 47, + 94,172, 79, 75, 75, 91,224,124,143,235, 12,242, 98,222, 8, 11, 11, 59,186, 98,197,138,168, 47,190,248,130, 31, 54,108,216,205, +110,221,186, 85, 91,188,120,241, 53,153, 76, 70,109, 54, 27, 49, 26,141,228,197, 23, 95,172, 56,111,222,188, 27, 18,137, 68, 61, + 96,192, 0,162,209,104, 14,163,200, 65,213,253,155,207,200,216,246,243,207, 63,247,121,253,245,215, 21, 38,147,201,173, 37, 75, + 60, 22, 20, 20,132,125,251,246,153,114,114,114,182,122,177, 98,108,251,253,215,205,173,255, 55,112,160,204, 82,144, 15, 75, 65, + 62,172,249,249,176, 21,228,130, 20,230, 67,106,179, 66, 37, 19, 16, 21,167,132, 85,239,135,205, 71, 78, 90,140, 70, 99,137, 19, + 27,230,231,231,111,219,187,108, 89,219, 38,241,241,252,190,113,227, 96,182, 88,240,212,165, 75, 14,113,101, 54,155,177,161, 78, + 29,216, 8, 65,189, 23, 94,192, 21,171,213,154,159,159,191,237, 81,204, 12,167, 78,157, 74, 31, 50,100,200, 49, 65, 16, 26,148, +198,186, 35,194,207,207,175,160,176,176, 16,153,153,153,182,172,172, 44, 3, 0,164,167,167,231,108,220,184,241,188, 32, 8, 77, +238,133,179, 44, 96,177, 88,238,178, 70,217,108,182, 34,171, 99,145,229, 64,190,121,243,230,214,231,207,159,151,157, 57,115, 6, +123,246,236,169,247,195, 15, 63, 76,138,143,143,175,115,243,230,205, 84,111,226,205,221,164,191,176,251, 31,174, 94,185, 6, 47, +189,244, 18, 73, 77, 77,197,143, 63,254, 8,111,147,167, 50,148, 25,180,176,218, 84,166, 93, 43, 11,187,253,122,171,224,192, 29, +253, 52, 0, 91,168,222, 74,203,149, 43,119,170, 97,195,224, 48, 0, 48, 26,108, 81,149, 43, 87,110,195,243,188,220,158,134, 27, +134,134,134, 46, 6,208,210, 77,249, 41, 25, 56,112, 96,211,136,136,136,250,191,253,246,219,201, 59,119,238,156,165,148, 30,114, +189,174, 98,197,138,239, 94,184,112,161,177, 84, 42, 37, 94,210, 8, 0,160,109,219,182, 85,227,227,227, 67,127,189, 28,136,124, + 89, 37, 80, 73, 30,192, 43, 97, 11,170,139,155,178, 26,136,139, 59, 24, 26, 20, 20, 84, 47, 55, 55,247,100, 41, 43,136,118,125, +250,244,249,102,217,178,101,113,109,218,180,161,132, 16,206,117, 74,135,138, 21, 43,118, 62,112,224, 64,131,231,159,127,254,115, +251,232, 97,159,157,135, 41,165, 55, 1,244, 43,203,143,182,245, 10,221, 14,251,156,103, 12,255, 25, 28,121, 64,215,150, 9,238, +101,102,248, 38,130, 32,244,228, 56, 14,102,179,121,102,100,100,228,134, 1, 3, 6,244,158, 52,105,146, 95,104,104,168,195,146, +181,120,241, 98,253,245,235,215,215,153,205,230, 19,132,144,201, 41, 41, 41, 61, 99, 98, 60,214, 15, 5, 11, 23, 46, 92,213,163, + 71,143, 97, 47,188,240,130,190, 78,157, 58, 1,213,170, 85,211,237,223,191,223,175, 83,167, 78,249, 18,137,132,238,219,183,207, +191, 98,197,138, 6, 66,136,226,143, 63,254,200, 58,120,240, 96,197,153, 51,103,126,141,162,225,214,158,176,114,250,244,233,239, +246,236,217,179, 98,104,104, 40,242,243,243,139,137, 45,241,191, 82,169, 68,106,106, 42,214,175, 95,127,199, 98,177,124,237,197, +178,241,217,167,139,151,188,210,174,233, 19,177, 1,106, 21, 82,147,110,194,150,151, 3,104, 11, 33,183, 90,160,146, 83,196, 86, + 82,131,151,104,112, 53,181, 16,203,246, 31, 73,181, 90,173,159,149,196,105, 50,153, 62,123,121,222,188, 87, 14, 44, 89, 18, 27, +223,191, 63,206, 45, 95,238,232, 42, 20,133,150,141, 16,148,239,208, 1, 92, 96, 32,102,124,254,121,154,201,100,250,236, 97, 39, + 22, 65, 16, 36, 38,147,169,164,120, 64, 16,132,164,115,231,206,173, 34,132, 20, 16, 66,218,218, 79,237,116,103,205,114,230,228, + 56, 78,168, 81,163,198, 79,145,145,145,125, 0,104,107,212,168,241,147, 66,161,104,111, 50,153,158, 16, 4, 33,233,196,137, 19, +235, 9, 33,169,132, 16,177,213,241, 80,231,209,178, 88, 44,152, 60,121, 50,102,205,154,133,137, 19, 39, 58,226, 43,118, 31,230, +230,230, 38,236,221,187, 87,182,107,215, 46,250,249,231,159,103, 13, 27, 54, 44,232,133, 23, 94, 8,250,226,139, 47, 94, 3, 48, +193, 19,231,132, 9, 19,240,249,231,159,227,165,151, 94,186, 91,101, 73, 36, 66, 82,210,109, 24, 12, 6,186,112,225,194, 20,169, + 84, 26,252,245,215, 95,171,158,127,254,121,194,202,213,135,130,119, 84, 67,222,123,213, 94,198, 44,160,148,238, 20, 79, 4, 4, + 4,168,126,250,233,103, 30, 0,214,173, 93, 47,165,148, 6,138, 19,204,126,255,253,247,202, 22, 45, 90, 68,120, 40,112,109, 74, +165,210, 56,123,246,236,208,145, 35, 71, 62,249,231,159,127, 6, 19, 66,154, 2, 56, 10, 32,205, 46,174, 35, 0,156, 11, 11, 11, + 11, 88,189,122,117,108,231,206,157, 53,222, 2, 90, 80, 80,240,245,170, 85,171, 42,204,219, 27,136, 95,181,125,112, 91,232, 15, + 26, 68, 17, 18, 81,128, 26,126,183, 48,120,240,224,152, 5, 11, 22,124, 9,160, 97, 41, 68,214,224,222,189,123,207, 90,182,108, + 89,204,200,145, 35, 83,143, 31, 63,158, 6, 96,153, 27,193,151,249,204, 51,207,220, 89,190,124,121, 52,165,116, 9, 33, 68, 78, + 41, 93,199,146, 15, 3,131, 35, 47,181, 65,209,140,240,119,137, 47,226,206,191,137, 16,178,193,106,181,246,228,121,126,163,243, +132,165,145,145,145,175,152, 76,166,104, 66, 8,149,201,100,169,105,105,105, 11,156, 39, 44, 77, 74, 74,234, 25, 23, 23,231,184, +199, 62,233,166,243, 92, 27, 1, 79, 61,245, 84,199, 3, 7, 14, 44,218,180,105, 83,122, 65, 65,129,223,218,181,107, 85,179,102, +205,186, 41, 8, 2,125,235,173,183,226,187,116,233,162,179,217,108,119, 94,120,225,133,138, 9, 9, 9, 47, 92,184,112, 97,187, +179,208,114,195, 9, 66, 72,205, 74,149, 42,237, 91,183,110, 93, 64, 80, 80, 16,210,211,211,145,157,157, 13,173, 86, 11,155,205, + 6,169, 84,138,140,140, 12, 76,155, 54, 45, 63, 37, 37,229,174, 9, 75, 61,112, 54,169, 16, 27,187,109,193,148,201,254, 65, 60, +135,172,139,231, 97,205,201,130,212,106, 65,185,154,129,144,201, 85,184,114,169, 0,175,173, 92, 95,112, 43, 59,247,174, 9, 75, + 61,113, 54,170, 92,121,251,231,227,199,251, 25,110,223, 70,244,179,207, 66,167,211,193,108, 54,131,227, 56,252,181, 96, 1,100, +225,225,120,119,245,106,237,217, 91,183, 58,184, 78, 88,234,142,179, 12, 18,135,131,147, 16, 50,154, 16,226,112,134,239,221,187, +119,177,107,127,254,249,103, 44, 89,178, 4, 70,163,209, 74, 41,125,133, 82,186,152, 16,226,103, 79, 80,133,222, 56, 43, 84,168, +112,171, 86,173, 90, 71,108, 54, 27,111, 23, 25,244,220,185,115, 13,175, 95,191, 94,206,133,147,183,115, 90, 31, 86,220, 67, 67, + 67, 23,252,246,219,111, 21, 34, 34, 34,136,243,140,237,118,161, 8, 0, 24, 51,102, 76,135,131, 7, 15, 42,234,215,175,111,204, +204,204,108, 28, 30, 30,254,231,138, 21, 43,194, 6, 12, 24,144,114,246,236,217, 88, 87,206,176,176,176, 57,235,214,173,171, 84, +169, 82, 37, 78,180,138,185,118, 79,142, 24, 49,162,227,138, 21, 43,228,125,250,244, 49,106,181,218, 72,127,127,255,171,235,214, +173, 11,235,213,171, 87,234,217,179,103,163, 31, 70,220, 25,167,123,212,170, 85,235,202,217,179,103, 43,137,251,122,189, 30, 25, + 25, 25,200,204,204, 68, 80, 80, 16, 58,117,234,244,215,245,235,215, 43,185,227, 36,132,212,239,215,175,223,148, 47,191,252,178, +163, 70,163,145,237,222,189, 91,187,125,251,118,195,205,155, 55,173, 22,139,133, 70, 71, 71,243, 45, 91,182, 84,118,237,218, 85, +163, 80, 40,184,247,222,123, 47,243,195, 15, 63, 12, 35,132,172, 20,151, 63,115,229,108,208,160,193,161,223,127,255,189, 9, 33, + 4, 18,137, 4, 38,147, 25,185,185,185, 72, 78, 78,194,185,115,231,112,224,192, 1,108,221,186,245,100, 97, 97, 97,125, 31,243, +123, 40,128,221, 70,163,177,154, 92, 46,247, 89,216,219,108, 54,240, 60,127, 17, 64,103, 74,105, 18, 75, 75,140,147,225,111,255, +172, 82, 57,195,219, 5, 88, 19, 66,200, 6,251,161,195,174, 83, 56, 16, 66, 38, 17, 66, 38, 59, 89,193,188,133, 37,255,183,223, +126,219,211,177, 99,199, 49, 29, 58,116,152,215,185,115,231, 59,119,238,220, 73,156, 59,119,110,156,213,106, 53,159, 59,119,142, +187,122,245,234,205,163, 71,143, 86,170, 82,165,202, 11, 23, 46, 92,216,229,197,154, 37,134,245, 28, 33,164, 69,187,118,237,214, +191,240,194, 11,229,155, 54,109, 42, 15, 10, 10, 2,207,243,184,118,237, 26, 78,158, 60,105, 90,189,122,117, 82,110,110,174,207, + 75,240, 80, 74, 15, 19, 66, 58, 13, 24,251,202,186, 23,122,247, 8,123,162, 90, 85,121,116,116, 52,160,215,227,226,173, 84, 28, +188,120,210,252,213,158,131, 25, 70,163,177,175,175, 75,240,216, 57, 59,182, 31, 63,126,221,212,255,253, 47, 18,119,238,240,209, +209,209,144,203,229,184,126,253, 58,174, 10,130,117,246,210,165,105,249,249,249, 15,125, 9, 30,113,206, 43, 65, 16,120, 0, 80, +169, 84,120,249,229,151,225,188,228,206,146, 37, 75,160,215,235, 1,128, 39,132,124, 76, 8,249,198,147, 21,203, 3,103,249, 95, +127,253,181,188, 51,103,245,234,213,221,113, 26, 31,118, 38,201,206,206,126,247,169,167,158,154,201,243,188,199, 89,111,131,131, +131, 81, 80, 80, 0,171,213,106, 75, 78, 78,190, 24, 28, 28, 12,169, 84, 10, 74,169,219,124,148,149,149,245,110,223,190,125,167, +115, 28, 23,225,137, 51, 32, 32,224,230,159,127,254, 89,249,249,231,159,231,190,253,246,219,107, 35, 71,142, 84,252,249,231,159, + 54, 74,233,122, 86,116, 61, 90,112,110,148,218, 27,113,180,132,107, 79, 16, 66,230, 29, 61,122, 52,124,204,152, 49,137,255,251, +223,255, 2,218,181,107,231,231,124,141, 94,175, 23,126,249,229, 23,237,146, 37, 75,242,246,236,217,115, 99,196,136, 17, 77, 81, +228, 95,226, 22,183,110,221,218, 60, 99,198,140,192,174, 93,187, 86, 1,224,240,207,202,200,200,192,205,155, 55,113,230,204,153, +155,102,179,121, 99, 41,226,147, 69, 8,153, 58,104,208,160,143,151, 47, 95, 30, 51,114,228,200,212,213,171, 87,159, 65,209, 4, +195,174, 8,234,221,187,119,157,229,203,151, 71,143, 28, 57, 50, 21,192, 52, 74, 41,243, 35,100, 96,248, 27,109, 93,253,180, 74, +244,209, 2,144, 39, 8, 2, 12, 6, 67,164, 32, 8, 61, 5, 65,128,159,159,159,187,235,154,164,164,164,244,116, 94, 84, 26, 94, +150,203, 1,144,177,125,251,246,109, 43, 87,174,236,240,214, 91,111,253, 47, 55, 55,183,201,169, 83,167,154, 2,128, 84, 42, 61, +160,209,104, 14,205,156, 57,243,217, 9, 19, 38,100,248, 34,178, 92,196, 86,141, 57,115,230,148,217,162,210,118, 97, 84,249,179, + 53,235,199,124,173, 80,116,114, 89, 84,122,155,125, 81,105,195,189,112,142,255,242,203, 49, 1,107,214, 60,178,139, 74, 27,141, + 70,107,159, 62,125,190,230, 56, 78,176,183, 98,121,163,209,248, 44, 74, 57, 82,213,149,179,119,239,222,223, 74, 36, 18,171,221, + 82,196, 25,141,198,231,238,135,179, 12, 43,209, 66, 0, 99, 75,186,166,118,237,218, 43, 54,110,220, 56,164,103,207,158, 54,179, +217,156,222,163, 71, 15,254,208,161, 67,148,227,184,237, 30, 56,141, 0,222, 44,137, 51, 42, 42, 42,254,211, 79, 63, 61, 62,110, +220,184,128,149, 43, 87,134,236,221,187,215,182,112,225,194,252,236,236,236, 79, 88,185,245,104, 65, 42,149, 66,173, 86,195,100, + 50, 33, 35, 35, 3,222,166,172,162,148,238, 32,132,116, 29, 63,126,252,211,227,199,143,239, 26, 21, 21, 85,177, 66,133, 10,106, +142,227,144,156,156,108, 77, 73, 73, 73,183, 88, 44,219, 0,172, 7,128,138, 21, 43, 62, 3,224, 43, 79,124, 89, 89, 89,211, 9, + 33, 59,150, 47, 95,222, 77,163,209,212, 80, 42,149, 33, 22,139,133, 43, 40, 40,200,214,235,245,231, 13, 6,195, 38, 74,233,254, + 82,166,251,213,132,144,204, 97,195,134,125,179,108,217,178,184,107,215,174, 21, 28, 61,122,244, 41,215,235,106,212,168,177,119, +249,242,229,209,207, 63,255,252,157,213,171, 87,151,202, 71,139,129,225, 63,210, 16,219, 5, 15,254,197,158, 42,184, 25,114,185, +156,135,125,113,105,209,162,229,230,186,195, 46, 62, 89,121, 0,102,248, 16, 38,237,224,193,131,175, 15, 30, 60,248, 99,123, 24, + 36, 40,154,194,193,138, 34,143,127, 51,188, 76,233,224, 33,162, 86, 0, 95,218,183,178,122,121, 6, 20,205,151, 51,231, 81,230, + 44,131, 48, 25, 9, 33,227, 9, 33, 31,219, 15,141, 63,113,226,196, 98, 23, 11,213, 41,231,243,222, 44, 79,238, 56, 79,158, 60, +233,202,121,166, 52,156,255, 36,114,115,115, 95,249,244,211, 79, 15, 79,156, 56, 81, 49,124,248,112,156, 57,115, 6,179,102,205, + 50,230,230,230,174,188, 87,206,212,212,212,155, 81, 81, 81, 13,230,207,159,255,198,188,121,243,122, 17, 66,216, 90,135,143, 8, +244,122,253, 95,117,235,214, 5, 41,114, 88,162, 86,171,213, 49, 90,212, 62,195,255, 95,190, 88,141, 0, 44,181,111, 32,132,132, +160,104,148, 97, 22,165,212,181, 33, 57,222, 7,190, 3, 0, 14,148,113,222,223, 65, 8,121,246,234,213,171, 51,254,250,235, 47, +183, 66,237,202,149, 43, 59, 91,182,108,233,127,234,212,169,119, 40,165,155, 89,234, 96, 96,240, 29,188,135,140,119, 5,192,255, +124,200,160, 51,239,227,217, 54, 31,172, 95, 12, 15, 87,108, 45, 38,132,124,227,100,141, 41,213,249,135,197,249, 79, 33, 41, 41, + 41, 7,128, 99, 41,146,196,196,196,187,252,216,238, 85,108,161,104, 22,120, 54, 19,252, 35,132,107,215,174, 61,245, 0,242, 88, +246, 35,154,247,119, 2,104,234,233,188,197, 98,153, 12, 96, 50, 75, 21, 12, 12,165, 7,155,125,154,193,181,192, 53,150, 36,120, +188,157,127, 88,156, 12, 12, 12, 12, 12, 12,143, 10,220,172,117,216,198,113, 14, 64, 71, 15,149,223,246, 82, 60,160,212, 11,122, +122,227,103,156,140,147,113, 50, 78,198,201, 56, 25,231,227,199,233,196, 61,207,195,169,139, 46,124, 95,252, 27,133,151, 99,244, + 33,165,244,129,109, 0, 58, 50, 78,198,201, 56, 25, 39,227,100,156,140,147,113,222,227,115, 94,120, 24,207, 41,227, 48, 83, 0, +109,196,125, 30, 12, 12, 12, 12, 12, 12, 12, 12, 12,101, 2,159,230,209, 90,187,118,173, 68,252, 63,104,208,160, 17, 54,155,205, + 49,236, 93, 34,145,124,250,227,143, 63,126, 83,210, 67,250,245,235,103, 43,137,211, 29,188, 61,199, 29,103,173,170,129,163, 66, + 3,213,175,228,230,233,230, 95, 75,177,237, 49, 24, 12, 53,196,115, 74,165,242,252, 55,223,124,115,185,172,195, 57, 98,196,136, + 42,174,207,169, 16, 39,109, 27,226,175,124, 57, 59,183,112,238,153,203, 5, 95,176,100,246, 96,209,191,127,255, 82, 93,127,253, +122, 16,142, 35, 26, 1, 26, 25, 10,181, 22,216,142, 61, 30, 62,189,209,209,209,213, 2, 2, 2,134, 2,168,169,211,233, 34,212, +106,117, 58,128,115,249,249,249, 43,238,220,185,115,209, 87,158,182, 9,228, 38,128,242,246,221, 91, 59,175,211,120, 95,206,121, + 67,151, 74,196, 64, 1, 5, 33, 48,111,185, 66, 29, 11,104, 62, 89,153, 24, 4,122,247,241, 46,149,137,137, 82,200, 8, 96,220, +114,149, 42, 31,151,244, 74, 8, 9, 0,208, 9, 64, 45, 0,167, 0,108,165,148,234, 88, 78,102, 96,120,124,224, 58, 81,169,243, + 62,239, 65, 76,180,150,241,100, 17, 5, 13, 2,104,168,209,104,148,202,229,114,152, 76, 38,168,213,170,207, 94, 28, 57, 98, 10, + 56,228, 90,172,120,249,155,111,190,185,231,149,174, 75,243,156,126,253,250,237,112,189, 63, 56, 64, 53,125,231, 47,111, 5,183, +238, 54,123,150,233,122,230,132,130,130, 2, 78,161, 80,192,104, 52, 34, 48, 48,176,197,168, 23, 94,104,200, 73,169, 73, 38,211, +236,159, 55,111, 94,234,189,134,243,181,215, 94,139, 50,155, 13,205, 5, 65,144,155, 76, 38,133,235,115, 2,213,154,217, 59,127, +121, 75,221,166,251,172, 41, 0,152,208,122,132, 80, 36,178,162,240,234,224, 39,240,209,184,142, 8,106, 59,251,113,200,208,146, +196,196,196, 49,241,241,241, 3,151, 46, 93, 42, 75, 76, 76,132, 82,169,132, 94,175,143,254,235,175,191,162, 71,141, 26,213,166, + 98,197,138,171,174, 93,187,246, 25,165,212,230, 3,101,249,157,223,189, 7, 0,104, 49,116, 90,121, 66,200,155, 0,116, 0,208, +166,194,223,231,218, 14,159, 86,158, 16, 50, 30,197, 71, 11,223,161,148,186,157, 36,147, 2,242, 77,203,231,160,231, 51,111,242, +132,144, 81,226,241,174, 85,128,223,191, 95,128, 39, 7,189, 82,236,120,151,138,224,127, 89, 62, 7,221,159,121,211,227,170,230, + 79, 86,225, 44,130, 64, 61, 90,226, 57,142, 88,183, 92,161,238, 22, 24, 78,163,148,110,113,243, 46,187,160,104, 65,103,183,215, +119,175,206,167,153, 45, 54,183, 19,206,202,164,146,244, 77, 23,172,119,221, 59,188, 1,177, 88,108, 69,101,171,140,135, 45, 48, + 48,112,231, 59,239,188,195,119,239,222, 29, 95,125,245, 85,203, 47,190,248,226, 5, 66,200, 31, 0, 54, 82, 74,175,178, 92,202, +192,240,248, 10, 46,143, 66,139,151,224,243,141,235,190,169,148,150,158,137, 97,207,191,129,149, 43, 87, 34, 39, 39, 7,193,193, +193,144,203,100,210,249, 31,191, 23, 21, 16,160,137, 26,246,194,132,207, 1, 84,187,215, 0,149,242, 57,149,239,138,144,125, 66, + 83, 94,194, 73,229,114, 57,183,106,213, 42,228,230,230, 34, 40, 40, 8,114,185,148,155, 55,107,146, 42, 32,192, 79,245,220,232, +137, 45, 1,172,185,215,112,154, 76,133, 45,127, 90,249, 77, 64, 70, 70, 6,134,191, 52, 1,174,207,145,201,100, 54,177, 98, 97, +201,236,159, 67,102,102, 38, 0, 32, 44, 44,204, 69,100, 53,197,188,215, 59,227,181,185, 91,161, 51,152,254,245,241, 76, 76, 76, + 28,211,191,127,255,129,211,167, 79,151,113, 92,209,192, 97,173, 86, 11,189, 94,143,216,216, 88,236,220,185, 83,246,238,187,239, + 14,252,249,231,159, 1, 96, 97,105,249,207,158, 61, 91,161,124,249,242, 6, 0,232, 81,199,223,245, 92,188,120, 14, 0,252,253, +253,189,242,133, 6,105,140,103,207, 30,172, 41,222, 55,166, 67,172,205,195,113, 3, 0,117, 73, 92,130, 64,249,173,139, 70,121, + 60,255,252,244, 31,172,167,214,236,169,150,152,152,168,119, 62,238, 97,194,101, 0,136, 44, 44, 44, 44,239,122, 80,188,222,108, +177, 69,120,122, 94,231,151,151,184, 21, 96, 22, 27,248, 31,126,248, 1, 0,240,201,155, 67, 36, 95, 30,202,228,121,190,168,168, +253,248,227,143, 49,117,234, 84,249,150, 45, 91,186, 46, 95,190,188, 43, 33,100,190, 39,161,202,192,192,240,239, 19, 89,206,191, + 37, 10, 45,142, 16,255, 0,127, 63,244, 27,252, 34,126,251,237,119,180,110,221,218,113, 46, 33, 33, 1,253,251,246,194,143,223, +205, 3, 0,255,251, 9,212,253, 62, 39, 39, 79,251,254,147, 3, 23, 77,187,149, 90,120, 96,211,166, 77,104,213,170, 85,177,251, + 7, 15,232,135,239,191,254, 24,148, 82,217,125,189, 60,202,201,252, 3, 52, 24, 52,236, 37,184,123,206, 11,195,123,111,234,210, +127, 65,199,180, 44,237, 60,150,212, 30, 46, 46, 92,184, 0,163,209,136,128,128, 0, 72,165, 82, 40,130,202, 35,133,111,130, 12, +146,136,244, 8, 29, 94,239, 24,137, 79, 94,109,135,215,230,110,197,252,149, 7,209, 0,169,255,234,248, 70, 71, 71, 87,139,143, +143, 47, 38,178, 10, 10, 10, 80, 88, 88,136,252,252,124, 20, 20, 20,128,227, 56, 76,152, 48, 65,182,107,215,174,129,209,209,209, +219,125,232, 70,188,213, 98,232,180, 34,177, 33,145, 22, 78,158, 60,217, 24, 17, 17, 97, 84,171,213,148,151, 41, 10,218, 14,159, +230, 15, 0, 28, 47, 43,152, 63,127,190, 41, 54, 54,214,192,243,188,252,149, 87, 94,241,105,122, 24,163,209, 72,157, 57, 77, 38, +163,227,248,236,217,179, 77,145,145,145, 70,181, 90, 77,205,102,223, 69,240,233,235,217, 80,200, 36, 80,200, 36, 80,202,165,240, +175,208, 24,138,156, 51,176, 90,173,248,232,163,143,204, 81, 81, 81, 38,181, 90, 77,229,114,185,108,220,184,113, 94,195, 57, 98, +196, 8, 26, 20, 20,100, 86,171,213,178,169, 83,167,222, 53,187,243,159,167,146,161,146, 75,161, 86,240,168,156, 16, 7, 5,213, +251, 28, 86,137,164,184, 55,130, 66,161, 64,203,150, 45, 81,179,102, 77,108,216,176,161, 45, 0, 38,180, 24, 24,254,229,112,181, + 98,221, 37,180, 54,111,222,220, 6,246, 85,167,187,117,235, 86,180,218, 52, 40,198,143,233,139,231,134, 15,130,205, 38, 56,150, +155, 32, 28,193,232,103,187, 66, 16,108,190, 60,216,235, 16,207,210, 62,199,153,147, 18, 78, 2, 0,149,226,163,233, 11,207,253, + 15, 54, 65, 40,154, 6, 21, 0, 36,192,139,195,159, 44, 58, 86, 6,225,148,192,134, 55, 70, 61, 13,119,207,169, 86, 41,134,179, +154, 13, 32, 78,139, 61, 62,136,197, 54, 25,103,113,236,223,191, 31,106,181, 26, 67,134, 12,193,184,113,227, 96,227,131,176,246, + 64, 22,222, 90,124, 0, 58,163, 25,131,219, 85,192,235,255,171,131,215,231,255,233, 16, 89, 9, 9,185,255,234,184, 7, 4, 4, + 12, 93,186,116,233, 93, 34, 43, 45, 45,141, 43, 44, 44,132,217,108, 22, 10, 10, 10, 96,179,217, 48,113,226, 68,233,187,239,190, + 59,148, 16, 50,213,206, 99,116,199,185,243, 58,141, 39,132,140, 63,123,246,108,252, 59,239,188, 99,110,223,190,253,173,132,132, + 4,173, 68, 34, 65,116,116,244,130, 78,157, 58,133, 76,159, 62,221,220,181,107,215, 27, 18,137, 4,149, 43, 87,214,158, 57,115, + 38, 30,128,202,215,184, 59,115,126,243,231,167, 98,171, 15,157, 58,117,186, 89,185,114,101,173, 68, 34,193,229, 95,102, 83, 95, +223,167,148,231, 80, 37, 54, 80,108, 70, 2, 42, 63, 32,167,104,183, 83,167, 78, 73,213,170, 85, 43,228, 56, 14,167, 79,159,142, + 3,160,244,198,169, 82,169, 44,131, 7, 15,190,117,241,226,197,187,174, 7, 0, 94,194,161,105, 53,187, 1, 43,182, 1,144,180, +215, 99, 56,165, 18, 88,223, 29, 51,132, 15, 82, 2, 10,255, 48, 99,126,126, 62, 2, 2, 2,138, 44,100,102, 51, 78,156, 56,129, +102,205,154,181, 89,179,102,205, 46,150,223, 25, 39,227,252, 27,238,180,200,191,205,154, 37, 10, 46,119, 62, 90, 59, 93, 35,101, +179, 89,145, 80, 62, 18,179,223, 27, 1,155, 77,128,205,102,131,213,254,107,179,217, 96, 49,155,203, 36,112,247,243,156,224, 0, +213,244,223, 87,189, 28,220,190,247,199, 29,102,190, 51,124,155,205, 6, 8,130, 5, 22, 11, 96, 19, 44, 16,108, 54, 88, 44,101, +211, 85,100, 17, 4,196,199, 69, 97,230, 59,195,225,250,156, 21, 63,174,233,241,231,198, 9,234,214,221,103,189, 1,224, 35,166, +237, 31,142, 37, 75,173, 86, 99,197,138, 21,104,220,184, 49, 0, 96,207, 37, 43,222, 90,124, 0, 91,102,182, 64,139,154,161, 72, +207, 53,226,149,207, 78,226,183, 3,233,119,137,172,127, 49,106, 38, 38, 38, 22, 19, 89,115,230,204, 9, 91,188,120,113, 44, 0, +244,237,219, 55,185, 67,135, 14,153,151, 46, 93, 66,116,116, 52,201,204,204,236, 6,224, 21,123,198, 31, 79, 41, 93,236,129, 87, + 91,190,124,121, 67,120,120,184, 81, 20, 68, 28,199,129,231,121,148, 47, 95,222, 16, 17, 17, 97,172, 92,185,178, 86, 38,147,129, +227, 56,136, 66,207,199, 2, 8, 18,137, 4, 34,167,171,181, 71,228, 44, 13,164,188,211,245,244,110, 11, 18,199,113,110,159,231, + 9, 74,165,146, 2,240,120,189,132,115, 42, 30,249,146, 61, 4,190, 59, 78,165,132,144,157,148, 82, 28, 63,126, 28,215,174, 93, +131, 76, 38, 67, 84, 84, 20,166, 78,157, 10,163,177, 72,239,246,239,223,191, 13,128,211, 44, 55, 51, 48, 56,176,243,223, 38,176, + 92,173, 90,238,124,180, 56, 55,106,210, 33,128,138,196,142, 27,241, 99,177,194, 98, 49, 3, 94, 22, 85,245, 85,104,121,122,142, +205, 38,148,248, 28,209, 71, 75, 16, 40,239, 86,100, 9, 2,172, 22, 75,153,188, 64,193,102,129, 32, 88,224,238, 57,132,112, 54, +123,129, 47, 99,249,228,225,192,104, 52, 98,208,160, 65, 14,145, 5, 0,153, 5, 22,232,140, 22,180,168, 25,138,134,237,250, 35, + 34, 72,129,213,187,147, 17, 17,164,126, 92, 68, 22,116, 58, 93,132, 82,169,132, 86,171,117, 88,178, 22, 47, 94, 28,107, 50,153, + 56,147,201,196,173, 94,189, 38,110,229,182, 75,229, 86,108,185, 84,110,233,250, 99,229,114,114,242,106, 82, 74, 85,148, 82, 21, +128,143, 9, 33,138,146,248,101, 50,153, 67,160, 56, 11, 32,133, 66,113, 79, 2,198, 81,208,216,197,153, 76, 38,115,123,220,181, +123,205, 27,100,206, 66, 11,180,200,170,229, 34,182, 36, 18, 9, 68,223, 40,111,144,203,229,142,184,187, 3, 47,113,122,158,164, +244,174,152,102,179, 25,133,133,133,200,205, 45,102, 81,133, 40,130, 25, 24, 24,220,107,145,127,171,216, 42, 86,126,184,170, 73, +216, 87,159,182, 90,204,110,197,207,154, 95,246,225, 86,170, 22, 81, 97,135, 65, 61,172, 84,237, 9, 3, 7, 14,252, 46, 58, 58, +218,177,158,150, 66,229, 23,250,194,203, 31,192,106, 53,195, 95,197,225,249,161, 79, 22, 19, 89, 69, 22, 45, 19, 60,201,185,156, + 60,237,251, 79,246, 95, 56, 45, 48, 32,244,128,171,248,153,185,236, 88,191,156,124, 99, 28,199, 29, 65, 14,137,182,245,127,241, +131, 17, 78,133,251,169, 85, 75, 38,191,238,243,139, 35,156,180,223,168, 5, 47, 80,222,175,134,154, 43,216,253,214,240, 39,126, +114, 22,115, 33, 33, 33,155, 58,247,155,223, 49, 45,155,249,104, 61, 44,200,229,114,140, 27, 55,174,216,177, 48,127, 41,212, 10, + 41,246,157,203,196,177, 29,107,176,231,108, 38,148, 50, 9,194,233,181,199, 38,222,106,181, 58, 93,167,211, 69,235,245,122,228, +231,231, 35, 63, 63,191,184, 32,144, 74,201, 11, 47,141, 13,147,202,228,176,152, 77,248,109,197,135, 94, 57,219, 38,144,155,109, + 42,160,124,143, 58,254,144, 72,229, 5,231, 18, 19, 23,240, 60, 15,142,227,240,203,103,111,189,178,126,238,203,254, 0,112,106, +211,103,249,131, 38,124,186,144,227, 56, 24,141, 70, 69,105,194,125,251,246,237, 56,163,209,104,176, 11, 52,209,180,142,235,215, +175,151, 51, 26,141,122,231,227,190, 64,165,246, 7,130, 18, 0,117,196, 93,214,179, 27, 55,110,196, 88, 44, 22, 29,207,243, 48, +153, 76, 62,169, 34,142,227,100,167, 79,159,142, 19, 4,193,237,245, 53, 43,198, 0, 81,117, 0,121, 96,105, 10, 92,159,174,113, +215, 2,102, 96,248,175, 91,182, 80, 74,125,241, 40, 8, 44,119,255,157,133, 86,219,205,155, 55, 83,231, 22,162,213, 98,177,139, +172,191, 69,143,205, 38, 32, 37,195,128, 75,151, 46, 99,254,252,249,216,119,240,205,192,233,211,167, 43,222,125,247, 93,227,192, +129, 3,231, 10,130, 80,151,227,184, 83,253,250,245,115,219, 74, 19, 4,161,220,177, 99,199, 18,197,125,139,197, 2,127,127,127, +248,251,251,163, 90,229,184,187, 68,150,205,102,131,185,132,174, 67,209, 71,139, 80,129, 90, 44, 54,216, 4,193, 33,126,114,242, +141,113, 27,183, 31,175,228,116,121, 85,241, 79,203,198, 53, 60,139,193, 81, 83, 29,241, 88,181,100,242,235,211,191,250, 74,145, + 99, 11, 31, 55,168,223,115,181,250, 15, 26,138,193, 79, 63,213,198,104, 50,109,144,112, 84,176, 56,158, 7, 14, 20,197,124,180, + 24, 30, 28, 50, 51, 51,161,215,235, 17, 20, 20, 84,172,194,138,214,104, 49, 97, 64, 21,116,122,107, 47, 12,102, 27, 20, 82, 14, +175,244,138,199,161,159, 87, 35,211,152,233, 24,141,248, 47,199,185,171, 87,175, 70,151, 43, 87, 14,249,249,249,176, 90,173, 66, +223,190,125,147,121, 94, 26,199, 75,165,164,251,160,177, 66,106,106,138,133,227, 36,160,212,134,167,250,143, 34, 10,165, 74,102, + 54,153,172, 0,198,123, 88, 83,210,121, 10, 7,255, 78,157, 58,133,136, 35, 1,215,207,125,217,223,233, 92, 64,195,134, 13, 67, +156, 71, 29,250, 40,138,201,192,129, 3, 85,229,203,151, 39, 0,112,100,197, 59,162,245,140,244,232,209, 67, 89,190,124,145, 31, +254, 31,159,249,190,166,118,152,154, 2,121,215,129,188, 27,119, 89,178,122,244,232,161, 72, 76, 76, 44, 85, 94,180, 59,192,123, +156,187, 75,195, 91,129,212,227, 62,113, 13,111, 64, 44,239,180, 6, 63,247, 41, 14,114,191, 80, 99,211,183,182, 28, 98, 98,139, +129,193, 39,184,104,145,127, 15,236,107, 27,238, 4,208,214,254,139, 98, 62, 90,221,186,117,219, 85, 76, 61, 82,192, 98, 53,223, + 37,178,108, 54, 27,164,196,136,249,243,231,227,213, 87, 95, 5, 0,217,235,175,191,254,211,244,233,211,251, 8,130, 80,151, 82, +218,138, 16, 82, 82,171,113,103,116,116,116, 26,165, 84,202,113, 92,171,207, 62,251, 44,164,107,215,174,240,247,247, 7, 21,232, + 93, 34,203,102, 19, 96, 54,155,224,201,164, 21, 28,160,154,254,251,154,113,193,237,123,125,220,193, 38, 8,219, 68,145, 37,216, +108,128, 80,116, 83, 86,122, 50,182,254,182, 1,159, 47,249, 60, 7,132, 94, 0,133,192,113,220, 41, 79, 97, 20, 4,161,238,222, + 35,231, 91,181,108, 92, 3,211,191,250, 74,113,246,216,157,159,198,190,246,118,173,254,131,134, 98,205,143, 43,192, 89,115,143, + 59,139, 44,155, 69, 64, 94, 78,102,143, 29,204, 71,235, 31,131,197, 98, 65, 78, 78, 14, 44,133, 57,104, 20,173,197, 7,253, 35, +144,150, 99,128, 84,208,161,122, 64, 58,118,100,223,128, 90,173,126, 44,226,154,159,159,191, 98,212,168, 81,109,118,239,222, 45, +227, 56, 14,249,249,249,104,215,174, 93,102,134, 16,171,124,225,165,177, 97, 41, 41,201,214, 0, 21,111,148,201,164, 72, 79, 79, + 23,218,116, 29,162, 31, 52,226,213,152, 87,223,153,185, 52,101,223,226,197,190, 60,195,121, 36,160,235,185, 47,191,252,210, 20, + 27, 27,107, 80, 40, 20,242,225,195,135,251,212,127,104, 50,153,232,236,217,179,141,174,163, 11, 77, 38, 19,157, 63,127,190, 41, + 46, 46,206,168, 82,169,168,197,226,221,239,147,227,136,245,249,233, 63, 88,173, 86,107, 49, 43,150, 40,178, 44, 2, 41, 92,180, +104,145, 57, 46, 46,206,164, 86,171,169, 66,161,144,249, 18,206,177, 99,199,210,224,224, 96,179, 70,163,145, 77,152, 48,225,190, + 70, 29, 90,108,224,167,127,230,152,222, 65,225,239,239,143,130,130, 2, 71, 88,163,163,163,153,216, 98, 96,112,131,187,180,200, +191,204, 10,231,201, 71,203,173, 3,131, 0, 20,166,165,103, 70,132, 69, 86,128,213,106,181,111, 22, 88, 45, 22,140,123,113, 16, +230, 46, 89, 4, 0,162,216,234,244,250,235,175,255, 4, 23,127, 47,119, 88,181,106,213,180,215, 95,127, 61, 32, 45, 45,109,203, +119,223,125, 23, 50,100,200, 16,140, 31, 63, 30, 31,127,252, 49,164,114, 37, 66,194,203, 57,158, 35, 62, 55, 51, 35, 27, 20,180, +208,173,130,180,251,104, 81, 10, 62, 52, 60, 30, 22,155, 5,130,197, 2,139,197, 2, 34, 41,138,218,214,223, 54, 96,200,179, 99, + 33, 85, 4, 4,127, 58,255, 35,125,173, 70,209,125,222, 29, 57,210,232, 93,158,130, 59,123,236,206, 79, 99, 95,157,208, 73, 20, + 89,235, 86, 44,185,240,201,196, 94, 43, 21,114,222,241, 28,139, 32,128,227, 36,204, 71,235, 33, 34, 44, 44, 12, 25, 25, 25,200, +205,205,133, 70,163, 65, 86, 86, 22,178,179,179,145,155,155, 11, 99,126, 14, 66,109,185, 32,214,108,240, 60,143,244,219, 69, 62, +128,143,137, 53, 11,119,238,220,185, 88,177, 98,197, 85,111,191,253,246,160,137, 19, 39, 74, 5, 65,192,165, 75,151, 0, 66,168, + 84, 38, 7,199,113,144, 74,121,228,229,229, 11,106,191,160, 59,102, 42, 81,255,159,189,171, 14,143,226,120,195,239,236,185,228, +114,113, 39, 33, 88, 18, 18,188, 56, 65, 74,144,162, 45,238, 80,138, 21, 43, 20,135, 98, 45,133, 98,165, 88,145, 82,160, 56,252, +104,241, 34,197, 29,130,135, 32,129,184,187, 93,114,186,243,251,131, 92,122,164,145,187,132,150, 66,247,125,158,125,246,110,118, +247,221,153,217,221,217,119,191,249,230, 27,129, 80, 4,134, 39, 44,109,152,112, 84,235,161,175,194, 59, 48,124, 97,182,113, 36, +160, 80, 40,196,245,253,203,179, 90, 15,253,218, 26, 0,132, 98,105,122,251,246,237, 35,107,214,172,153,123,251,246,109, 47, 20, + 25,117, 88,204,243,169,255,120,232, 52,158, 76, 42,201,109,215,174, 93,148,145, 51,226,244,218,172, 65,159,207, 38,132, 39,202, +237,210,165, 75,100, 64, 64, 64, 46,143,199,195,227, 67, 75,179, 62, 30, 58, 77, 66,254, 28,211,251, 23,156,124, 78, 71,220,223, +127,201,119,209,162, 69,186, 78,157, 58, 69, 27,253,197, 34, 34, 34,220, 58,119,238, 44,254,254,251,239,117,157, 59,119,142,169, + 85,171, 86, 14,195, 48, 8, 14, 14,246, 40,205, 82,101,132, 84, 42,213, 13, 31, 62, 60,234,225,195,135,229, 26,117, 88, 22, 42, + 85,170, 4,150,101,209,166, 77, 27,228,231,231,115,150, 45, 14, 28,222, 67, 20,141,163, 85,106,100,120,157, 94, 55,110,212,196, + 5,107, 1, 98,101,210, 10,252,105, 88,162, 32, 83,166,124, 41, 7, 32, 53,138,173, 73,147, 38,165,151,149, 9, 19,145,245,193, +128, 1, 3, 48,115,230, 76,172, 88,177,194,176,108,217, 50,222,147,103,225,218,161,159,207,203, 40,114, 30, 80,208, 28, 86,199, +142, 43,142, 47, 61, 51,119, 94, 96,231, 37, 11, 98, 19, 85,151,135,142,153, 83,216,122, 25, 0,100, 17, 87, 3, 0,108,248,241, +199, 92,129,216, 90,222,187,223, 32, 0,104,183,118,213,210, 95,191,193, 79,101,139, 45, 74,252,198, 77,154,102,107, 20, 89,235, +190, 95,244, 80, 73, 18,215,140,255, 50, 68,103,122, 30, 0,176, 83,224,215,192,206, 75, 58, 36,165,229,254,192,221,106,255, 12, + 52, 26, 13, 86,175, 94,141, 57,115,230, 32, 45, 45, 13, 41, 41, 41, 72, 79, 79, 47, 92,114,114,114,224,226,226,130,223,127,255, +253, 47,126, 76,239, 58, 94,190,124,185,238,240,225,195,184,112,225, 66,223, 25, 51,102, 8, 92, 92, 92,136, 82,153, 72,116, 90, + 13, 0, 74,147,147,147, 89,153,149, 77,188,131,179, 71, 84, 92, 66,146,159, 78,171, 1,107,208,150,232,109, 94, 16,222, 97,202, +163, 71,143, 42, 47, 95,190, 92, 99, 58, 18,176,223,180,181,171, 27, 52,104, 96,183,102,205, 26, 77,151, 46, 93, 34,141,206,235, +230, 56,195,159,122,129,137,143, 30, 61,240, 47,202,217,122,228,242, 45, 70, 78,211,209,136, 93,191,220,184,165,122,245,234,118, + 1, 1, 1,145,165,241, 86,169, 82, 37,207,213,213, 85,227,235,235,155, 35, 16, 8, 94, 89,178,116, 58, 85,149, 42, 85, 88,103, +103,103, 77,205,154, 53,115, 44,117,218,151, 74,165,212,104, 21, 43, 14,150,140, 58, 20,240,160, 31, 48, 96, 64, 97,100,248, 41, +213,171,199, 15, 26, 52,200,117,242,228,201,216,178,101, 11,174, 92,185,146, 86,244,152, 86,173, 90,225,226,197,139, 11, 0,204, +227,158,110, 14, 28,222, 61,148, 25, 71,171, 40,182,110,221,241, 7, 76,124,154,138,195, 55,223,124, 35, 46,176,100,181,251,226, +139, 47,144,151,151,103, 91,140,186, 11, 50,198,218, 40, 78,100, 45, 93,186,116, 55,165,212, 3, 64, 11,131,129,189,177,249,167, +173,109,204, 80,140,133,156,148, 48, 60,134, 33, 57, 34, 1,189,251,227,166, 45, 59, 77,247, 43,112,126,247, 1,193,253,181,171, +150,230, 1,104, 87, 84,108,245,234,213, 75, 85,148,211,136,209, 99, 70, 23,138,172,181,171,150,158, 14,248,192,243,147, 57,159, +125, 93,172, 56,251,122,222, 40, 57,195,144,102,166, 62, 90,197,113,190, 1,181,204,113, 22, 64, 44, 22, 99,207,158, 61, 8, 12, + 12, 68,157, 58,117,144,150,150,134,156,156, 28,228,228,228, 20, 90,189, 30, 63,126,140,200,200, 72,136,197,226,247,170,236, 5, +211,234,172,118,117,117, 61, 51,119,238,220, 65, 41, 41, 41,157,211,211, 51,236,143,110,253, 26, 29,123,143, 33,173, 58,245,207, +213, 80,190, 36, 38, 62,209,247,252,241, 93,118, 39,246,174,131, 86,163, 25, 69,200,143,161,198,240, 14,197,228, 83,101, 12,227, +224,235,235,155,107, 42, 84, 60, 61, 61,243,221,220,220,212, 1, 1, 1,133,233,197,141,230, 43,174,236,150,114, 22,248,127,229, +150, 85,159, 70,209, 86, 52,108,132, 76, 38,131, 81,124, 89,146, 79,211,209,150,197, 54,148,101,140, 58, 52,229,220,118,135, 10, + 76,183,109, 35,132,183, 99,199,142,160, 29, 59,118,124, 0,224, 46,128, 83, 0,116, 5,199, 21, 58,205, 83, 74,231, 3,152,207, + 61,239, 28,231,127,149,243, 29,183,102,181, 66,129,111, 86, 1, 90, 83, 74, 47,148, 40,180,202,130,209,241, 29, 0, 51,105,210, +164,244,188,188, 60,219, 65,131, 6,149,122, 76, 66, 66,194,150,237,219,183,191, 38,178,122,244,232, 49,236,192,129, 3,103,146, +146,146,202, 85, 48, 91,107,233, 55, 23,142, 76,183,109,213,101,201, 23, 0,150, 21, 47, 51,193, 6,124,224,250,201,218, 85, 75, +127, 45, 34,182,126, 1,208,163,184,250, 2,128,246, 31,117,199,174,173,107,141,190, 93,210,135,183, 99, 79,244,189,179,176,216, +209,138, 54, 86,226,133, 5,249,152, 12,206, 71,235, 31,129,159,159, 31,174, 94,189,138, 49, 99,198,160,109,219,182,232,222,189, + 59, 42, 85,170, 4,177, 88,140, 23, 47, 94,224,210,165, 75,120,249,242, 37, 84, 42, 21,234,212,169,243, 94,214, 65,124,124,252, +147,130, 96,164, 19,141, 95, 83, 98,137, 84,216,255,211, 47, 60, 10, 71, 29,238, 93, 7,117,126, 30, 0,240, 9, 33,203, 8, 33, + 63,151,224, 16,255, 74, 80,240,249,194,123,247,238,121, 25,173, 86, 90,173, 86,108, 76,191,125,251,182,151, 49,182, 86,126,126, +190,217,163, 14,255, 46,206, 7, 15, 30,120, 24, 71, 71, 26, 71, 23,242,249,124, 97,112,112,176,135,145, 83,173, 86,155, 53,234, + 80, 36, 18, 9,239,221,187,231, 97, 48, 24,222,216,168,195, 34,194,248,100,193, 98,108,148,141, 34,203,232,211,193,117, 27,114, +224,240,110,227,124,209, 73,165,141,122,162, 92, 66,203,232,248,110,129,210,227, 87,174, 92,185,125,191,126,253, 94, 19, 89,189, +122,245, 50, 28, 60,120,240,188,171,171,107, 34,195, 48, 79, 44,205, 71,161,143, 22, 32, 40,186,141, 97,152,251, 45, 26,214, 4, +195, 48,247,231,124,246,153,250, 27,252,244,154,216, 58,244,235,190, 14, 37,181,139, 0, 96,239,228,142, 1,195,198, 97,192,176, +113,182, 0,154, 3, 37,143, 86, 44, 45, 31, 28,254, 62, 52,107,214, 12,161,161,161, 56,125,250, 52, 46, 94,188, 8,149, 74, 5, + 66, 8,164, 82, 41, 52, 26, 13,196, 98,241,123, 43,178, 74,130, 86,171,213,207, 88,176,124, 59,143, 47,212,179,172,150,104,181, +218, 79, 45,121,206,103,204,152,193,160, 24,223,171,241,227,199, 23,155,254,182, 56,103,205,154, 85,236, 40,193,241,227,199,151, + 58,122,176, 36,124,249,229,151,111,108,212,161,153,226,139, 19, 84, 28, 56,188,127, 86,173, 98,135,238,149, 75,104, 49, 12,115, +191,152,209,133, 4, 0, 45,110, 68, 31,165, 84,207,227,241, 22,216,216,216,140,202,205,205,253,189, 71,143, 30,147,122,245,234, +101, 0, 94, 57,200,151,183, 80,233,153,185,243, 90,119,253,110,114, 70,142,122, 77,209,109, 69, 45, 79, 70,177,181,238,135,165, +235,127, 61,176,167, 87, 66, 92,204,250,146,202, 86,146,160, 42,105,180, 98,102, 86,222,130,214, 93,191,251, 34, 61, 43,143,243, +209,122, 11,150, 45, 35,138, 78, 42,253, 95, 0,165, 84, 77, 8,153, 74, 8, 49, 90,116,167,190, 60,247,195,250, 63, 31,252,213, + 15, 76,183,149, 98,205,138, 55,103,130,232,226,142, 43,109,219,223,192,153, 88,202, 4,209,165, 33,209, 66,190, 68, 0, 16, 10, +120, 73, 37, 77, 30, 45, 20,240,146,222,208, 53, 52, 6, 56, 92,192, 61,209, 28, 56,188,179,109,177,101, 62, 90, 70, 17, 84, 18, + 74,138,147, 85, 26, 12, 6,195,119, 0,190,123,147, 5,123,248, 44,123, 19,128, 77,230,238, 95,224,147, 53,164, 96, 41, 62,159, +169,143, 44, 46, 91,175, 94,189, 54, 0,216,192,221,106,255, 12,246,239,223,207, 85,194,235, 15,248,122, 66,200,207, 70,225,101, +238,182, 34,251, 29,254, 27,242,245,119,112,158,252, 39,249,142,134,234,157,223,118, 35,205,129, 3,135,127, 63,138,179,102,149, + 58,234,144, 3, 7, 14,239,156,216, 82,151,103, 27, 7, 14, 28, 56,112,120,115, 31, 75,197,249, 90, 18, 0, 65, 37, 28,100,246, +104, 2, 66, 72, 80, 57, 50,117,134,227,228, 56, 57, 78,142,147,227,228, 56, 57,206,255, 22,103, 89,220,166,199, 19, 66, 70, 82, + 74, 55,225, 29, 64,137, 3, 90, 40,165,127,219, 2, 32,136,227,228, 56, 57, 78,142,147,227,228, 56, 57, 78,142,179,156,231, 25, +249, 79,156,231, 13,228,147, 22, 93,140,219,184,174, 67, 14,127, 59, 60, 60, 60,192,178, 44, 24,134, 65, 76, 76, 12, 87, 33, 28, + 56,112,224,192,225,189,130,197,206,240, 28,138, 49, 9,122,125, 60, 7, 44,102,189,250,131,165, 52,234,183,249,239, 91, 25,123, +247,238,205,179,100,255,240,112, 27,230, 14, 92, 87, 88,203,133, 93,115,114,117, 43, 12,193,115,215, 20,183, 31,203,178, 56,114, +228, 8,186,118,237,106, 52,175, 2, 0, 92, 93, 93,113,228,200,145,194,253, 26, 52,104, 80, 24,188,145, 3, 7, 14,127,115,155, +102,235, 95, 9,132,124, 10,208, 63,135, 93,178, 52,132,102, 60,222,250,218,126, 54, 53,135,129, 33,254, 38, 73,121,160,216, 76, +211, 67,162, 75,232, 62, 49,190,112,108,194,194,194,188,170, 85,171, 22, 9, 32,163,200,110,127,217, 70, 75,121,248, 9, 33,196, +161, 74,253,193, 50,137,236,115,141, 70,227,109,165, 80, 36,165,165, 38,111, 72,139,122,176,206,100, 55,235, 27, 55,110,184, 54, +110,220, 56, 14, 64,118, 89,156, 28, 56,188,209,231,233,175, 1, 75,223,156, 51, 60,169,209,211, 27,122,102, 8, 40, 6,130,224, + 30,125,185,191,103,185,120,170,245,112, 7,203,111, 4,160, 62, 64,235,203,165,146,122,121, 26,109, 18, 75,233, 96, 26,182,247, +174,197,124, 85,122, 31, 3,208,169,132,173, 11,232,203,125,150, 9, 37,150,206,190,117,241,160,216, 70, 70, 80,173, 65,143,105, + 48,137,224, 92,129, 11, 35, 5, 48,148, 16,210, 86, 38,147,213, 80,169, 84, 17,148,210, 7, 0,214, 83, 74,227,202,201,201, 0, + 24,110, 37,151,119,244, 82,136,234, 71,165,100,198,102,235, 12,151, 0, 44,163,148,166,191,169,155,234,149,200,114,217,244, 69, +255,198, 67,151, 78, 8,130, 77,235,239,166, 1, 88, 83,218, 49, 12,195,140,112,115,115,243,118,119,119, 15, 95,219,173,238,230, +113,135,239,161,123,247,238, 0, 48,130,101, 89,111,119,119,247,112, 66,200,102,115,219, 70, 66,136, 43, 0, 62,165, 52,186,224, +191, 28, 64, 0,128, 42, 0, 94, 2,120, 68, 41,205,173,224, 53,122, 39, 56, 61, 60, 60,220, 88,150,253,204,217,217,185,115, 98, + 98,226, 49,134, 97,126,138,137,137,137,123,203,109,207, 70,163,127,133,185,107, 0,163, 44, 57,129, 84, 42, 77,204,207,207,119, + 2, 0,137, 68,146,148,151,151,247,183,141, 18,252, 39,207,245,207,188, 25, 48,226,212,229, 71, 29, 77,147,218,183,240, 47,230, +193, 37,254,167, 46,135,180,124,125,191, 0, 67,113,109, 96, 65,244, 85, 44, 88,176,128, 44, 92,184,112, 88,213,170, 85,171, 51, + 12,243,116,238,220,185,175,133,190, 41,186,109,222,188,121,127, 70,110, 45,134,211,195,167,217,161,190,253,122,183, 30, 59,114, +168,149,187,163, 21,226, 83,114,237,127,220,178, 99,249,142, 29,187,186,124,214,183, 93, 71, 0,248,250,235,175, 63,174, 84,169, + 82,101, 30,143, 23,254,213, 87, 95,253, 82, 26, 39, 7, 14,127, 3, 44,155, 84,186,204,231,211,191,183, 28,249,180, 23, 64,134, +182,106,218,160,197,168,193, 93, 9,229, 73,208,127,196,116,189,197, 92,149,135,137,193,203,251,166,118,128,255,164,222, 93,131, +152, 15, 2, 42,195,213, 81, 9, 48, 2,108, 60, 30, 97,191,102,233, 87,235, 1, 52, 46, 71, 54, 59,189,184,182, 27,241, 25, 6, + 16, 2, 16, 2, 48, 4,200,201,103,209,254,227, 33,243, 44, 23, 74,132,177,145, 17, 76,218,157, 15, 0,188, 10,183,113,132,212, +119,116,116, 92, 55, 97,194, 4,219,218,181,107,187, 74, 36, 18, 89, 94, 94, 94,245,176,176, 48,239, 57,115,230,180, 35,132, 44, +161,148, 30,180,144,211,179,154,135,219,190, 53,147,134, 55,170, 83,197, 11, 2, 77, 14, 88,117,110,165,103, 97,207,155,142, 94, +191,127, 4, 33,164, 95,121,166, 76, 72, 73, 73, 33, 0,224,224,224, 64, 95, 23, 89, 77,134,126, 63,185, 61, 38,173, 60, 5, 85, +190,102,103, 73,199,199,197,197, 25, 45, 91,222, 71,142, 28,241,239,218,181, 43, 26,121,123,224, 70,215,100, 52, 60, 20, 3, 0, +133,233, 22,148,117, 33,128, 89, 5,237,240, 46, 30,143,119, 58, 40, 40,200,251,179,207, 62, 35, 13, 26, 52, 64,112,112,112,149, +221,187,119, 7,241,249,252,112,131,193,240, 0,192, 83, 74,169,206, 76,110, 1, 0, 31, 30,143, 87,251,223,204,233,230,230, 38, +213,104, 52, 67, 60, 60, 60, 70,118,235,214,173,118,215,174, 93,137,143,143, 15,158, 60,121,210,224,196,137, 19,243,234,214,173, +251, 32, 38, 38,102,147, 72, 36,218, 30, 23, 23,151,247, 22,190,240, 70, 2,112, 43, 48,112, 44, 48, 99, 29, 7, 96, 1,165, 52, +222,220,115,228,231,231, 59, 25,223,163,132, 16,167,191,179, 60,150,156,139, 16,242,152, 16, 98, 87,240, 27,165,173, 25,134,129, + 94,175,207,213,235,245, 85,203,224,244, 1,192, 88,144,101, 74, 41, 45, 45, 16,180, 20, 0,218, 55,247, 79, 3, 65,136,209,162, + 85,204, 71,102, 72,161, 0,163,240, 63,117, 37,196,238, 53, 43, 88, 17, 44, 88,176,128,204,155, 55, 15,243,231,207,239, 10, 32, +144,101,217, 75,126,126,126,171, 95,163,100,217,194,109,243,230,205,251, 97,193,130, 5, 4, 64,177,130,200,174,114,221, 65,159, +124,210,189,245,162,217,227,173, 98, 83,181,184, 23,158, 7, 59, 43, 33,230, 77, 29, 35, 82,171,117, 77,215,255,178, 99,228,218, + 37,211, 55, 27, 12,134, 15, 1,124, 96, 48, 24,110, 3,248,165, 52, 78, 14, 28,254, 6,180,182,104, 82,233, 18, 30,114,130,170, + 61, 91,194,128,161, 94,149,156,123, 77,248,172,143, 52,192,175, 26,242, 97,133,136, 20, 3,142, 31, 61, 1, 0,123, 45,179, 58, +245,253,128, 47,196,246,165,243,167,250, 6, 54, 10,192,195, 88, 29,110,199, 26,160, 10,215,129,199,232, 96, 96, 41, 64,145, 95, +222, 82,199,164,235,113,249,169, 6, 12, 1,120, 12,192, 48, 4, 60,166,156,100,172,230,217,215, 91,239, 4,164, 36,178, 0,171, +121, 86,193, 23,208,135, 53,106,212, 88,181,112,225, 66,151,196,196, 68,187,219,183,111, 67, 44, 22,195,214,214,150,239,230,230, +230,187,106,213,170,204,241,227,199, 79, 37,132,220,165,148, 70,152,201,233,215,233,131,218, 87, 55, 45,253, 90,169,187,113, 2, + 25,123,254, 7, 30, 67, 33,148, 91,193, 91, 42,197,137, 79,170,217,245, 58, 26,126,144, 16,226, 71, 41,141, 45,139, 47, 52, 52, +148,167, 86,171,251, 89, 91, 91, 55, 17, 8, 4,206, 98, 27, 79, 54,142,223, 40, 53,153, 84,121,153,228,164,106, 57, 57,200,185, +227,138, 47,218, 96,210,202, 83, 88,181,251,250,182,250, 72,152,107, 73, 29,100,220, 58,135,123,233,127,189,180, 46,114,129, 57, +101,181, 5, 48, 93,163,209, 48, 66,161,144, 72, 36,146, 65,139, 22, 45,210,246,239,223,191,208, 1, 44, 48, 48, 16,129,129,129, + 36, 59, 59,187,202,185,115,231,170,236,216,177, 67, 79, 8,121, 76, 41, 61, 84,178,197, 66, 22,149,159,159, 87, 73, 34,149,170, +126, 92,191,126, 69,203,150, 45, 89,211,121, 18,203,195, 9, 0, 54, 54, 54,155,107,212,168, 65,102,206,156, 25,247,166, 56,189, +189,189, 79, 5, 6, 6,182,105,223,190, 61,191,121,243,230,112,115,115, 43,220,230,224,224,128,192,192, 64, 18, 29, 29, 93,231, +210,165, 75,235, 79,157, 58,181,218,219,219,251, 92,120,120,120,251,127,178,213, 41,176, 84,193, 2,225,180,169,152, 64,200,239, +166,177,136, 16,171,141, 27, 55, 58, 25,231,100,212,233,116, 48, 24, 12,133,107,227,194,178, 44, 12, 6, 3, 22, 45, 90,100, 48, +179, 78,115, 81, 16, 28,218,100, 97,139, 91,139, 68, 34,243, 34,247, 18,132,184,138, 51,106,202,229,114, 47, 0,157,106,212,168, + 49,221,116,115,117,199, 87,235,220,220,220,200,120,181, 77, 8,128,150,165,221,238, 11, 23, 46, 28, 50,127,254,252,238,248,115, +206,202,218,189,123,247, 62, 87,100,191,218, 5,235, 92, 66,200,121,134, 97,142, 0,216, 10,224, 47, 86,119,153,204,106,212,132, +207, 63,179,138, 73,209,226,155,131, 41,216,122, 49, 11, 67, 2, 21,152,244,145, 18, 3,250,247,149,239,255,223,129, 81, 0, 54, +155, 28,242,196,207,207,143,132,134,134,114, 34,235,253, 66, 67, 0,142, 38,255, 53, 0,140, 83,102,165, 20, 60, 23,246, 69,210, + 77,247, 51,174,147, 11,210, 29, 11,142,163, 38,188,201, 0,110,149,179,189,187, 80,144,135,191,128, 15, 0,199,142, 29,163,157, + 59,119, 38,198,117,241, 45,123,175,227,195,251,119,235,216,185,109, 51, 48, 18, 91, 60, 75, 2,174, 69, 81,240, 25, 29, 24, 80, +220,184,114,142,130,207,110, 47,114,226, 18,173, 39,196,187,215,151,181,107, 5,124,247,211,210,137,188,199, 73,124,108,189,164, +130, 54, 63, 7,201, 9, 81, 72,138,139, 68,124,204, 75,196, 70,189,124, 0,144,121,230,114,254,181,224,128,129, 45,248, 6,100, + 81, 80,159,197,142,188, 44,155, 83,155, 27, 90,197, 39, 32, 32, 93,100, 0,180,185,161,102, 84,250,153, 18, 26,224,118,213,170, + 85, 91, 54,123,246,108,143, 71,143, 30, 89,231,230,230,230,158, 56,113,226, 66,100,100,164,179,139,139, 75,244,152, 49, 99,154, +185,187,187, 59,125,252,241,199,178,125,251,246,205, 6,240,153, 25,156, 1,221,154,212,187,182,101,245,247,242,212,253,107,160, + 9,187,143,227,241,185,184,146,168,162, 85,148, 98, 50,174,142, 35,172,196,124,124,221,220,205,170,211,175, 97,223, 1, 24, 80, + 26,231,213,171, 87, 93,101, 50,217,202, 1, 3, 6,184, 77,152, 48, 65,100,224,219,240, 15, 92, 75, 85, 78, 95,127,205, 77,165, +214,242,250,183,169,140,201, 3,107, 99,242,170,179, 70,145, 53,210,219, 59,131, 45,142,211,195,195, 99, 4,203,178,222, 5,127, + 43, 27,215,109, 47,103, 47, 54, 57,101, 97, 58, 81, 56, 44,118,115,115, 3,195, 48,225, 49, 49, 49,155,205,189, 70, 18, 73,241, +179,167,216,218,218,162, 85,171, 86,240,243,243,227,183,108,217,178, 54,128, 67, 37,113,106,181, 26, 87,150,165, 80, 40, 20, 82, +123,123,123, 91,133, 66,145,170,213,106, 43,196, 9, 0,118,118,118, 61, 91,181,106,197,223,189,123,119, 74,120,120,248,141,254, +253,251,191,180,182,182,126,205,250, 43,151,203, 81,189,122,117,124,245,213, 87,252,142, 29, 59,150,201,233,236,236,220,110,199, +142, 29, 32,132, 20,190,180,139,194,203,203, 11, 46, 46, 46,232,212,169, 19,191,103,207,158,237,202,251, 28, 89,208,208,156, 41, +198,162,181,224,117, 49, 91,114,247, 91,113,251,155,113,221,147,140,214, 37,137, 68,146, 84,158,124, 22, 65,137,221,157, 98,177, +184,208, 10, 85,244, 92,197,113, 50, 12,131, 57,115,230,128, 16, 2,129, 64, 0,161, 80, 88,236,186,117,235,214,150,230, 51,154, + 16,194, 8,133,194,233,124, 62,255, 51,181, 90,237, 33,145, 72,226, 12, 6,195, 54,181, 90,189,168,192, 34,106, 83,220,189, 91, + 18,167, 92, 46,247,122,246,236, 89,141,146, 42, 69,173, 86,163,118,237,218,128, 26,143, 75,227, 12, 11, 11,243,170, 90,181,170, + 15, 0,227, 20,109, 23, 41,165, 45, 77,254,155,226, 34,165,244,163,130,223, 79, 95,188,120,225,101, 20, 90,166,156, 58,173,214, +219,195,201, 26,247, 34,242,176,245, 98, 22,254,152,237,134,182,139,226,208,163, 62, 31,126,158, 86,208,107,117, 62,189,123,247, +222, 14,192,167,224, 37,249,113,239,222,189,125,121, 60,222, 89, 0,191, 1,200,252,167,238,121,142,179, 98, 40, 67,139, 56, 18, + 66,142,154,156,191,139,241,255,140, 25, 51,102, 45, 94,188,248, 17, 33,228,168,105,186,233,126,166,235,130,246,230, 40,165,180, +203,204,153, 51, 3,150, 44, 89,242,173,113,223,191, 67, 33, 90,210,117,104,157,156, 47,199,165, 40,107,240,121, 6,240, 25, 2, + 62, 15, 0, 37,136,140, 8, 67,118, 86,198,101,250,242,127,225,230, 89,178,122, 55,175, 91,175,246,210, 93,171,166, 49, 63, 95, + 82, 33, 35, 55, 31,161,119,207,227,214,249,223, 18, 12,122,195,111, 32,244, 54,192, 4,227, 37,251,132,210,253,134,242,223, 8, +120,101, 21, 3, 41, 34,182,222,218, 87,238, 71,190,190,190,139,231,204,153,227,117,247,238, 93, 69, 86, 86, 86,242,206,157, 59, +159,168,213,234,187, 0,126,136,138,138,106,245,195, 15, 63,200,150, 47, 95,222,190,118,237,218, 62,251,247,239, 87,153,193, 89, +103,234,208, 1,215, 62,155,240,133,228,241,190,117, 16, 61, 14,198,156,251, 41,134, 63,226, 85,179, 1,172, 66,116, 78,243,228, +124,253,233,239, 91, 85, 98, 42, 43,132,168,102, 35,106, 93,150, 37, 75, 38,147,173,220,177, 99,135, 87,195,134, 13, 25, 0,184, +244, 84, 47,158,190,254,154,219,201,197,205, 73,115,127,123, 36,101,168, 49,113,221, 61,156,184,150,244,123, 81,145,245, 23, 67, + 96, 65,119,161,105,218,145, 35, 71,100, 0,254,226, 12, 98,154, 94, 90, 55, 34,165, 52,157, 16,242,157, 72, 36,154, 67, 8,161, + 13, 27, 54,188, 87,171, 86,173, 28, 91, 91, 91,228,229,229, 65,173, 86, 67, 40, 20, 34, 47, 47, 15,145,145,145,184,113,227, 6, +108,109,109, 45,186, 86, 57, 57, 57, 80, 40, 20, 96, 89,182,194,156, 6,131,129,108,216,176, 65,254,232,209, 35,249,129, 3, 7, +156, 39, 77,154,148, 90,179,102,205,219,125,251,246,125,238,228,228,164,190,127,255, 62,174, 94,189,138,244,244,116, 52,105,210, +196, 44, 78,141, 70, 3, 62,159,143,188,188, 60,136,197, 98,240,249,124,232,245,122,176, 44, 91, 40,190,114,114,114,144,150,150, + 6,161, 80, 8,141, 70,243,143,223,239, 70,139,150, 41, 74,235,126, 43,110,255,178,240,166,253,164, 74,235,238,204,200,200,144, +218,216,216, 76, 55,199, 66, 71, 8, 1,143,199,131, 80, 40, 4, 33, 4, 45, 91,182,196,240,225,195, 81,191,126,125,132,133,133, + 97,207,158, 61,184,117,235, 22, 4, 2, 65,225,254,102,247, 79,180,110,205,147, 72, 36, 87,187,117,235, 22, 48,123,246,108, 73, +229,202,149,241,248,241, 99,207, 37, 75,150, 76, 63,115,230, 76,119, 66,200, 7,148, 82,182,108, 43,125, 65,151,224,171,238,194, + 78,106,181, 26,143, 31, 63,182,228,152,191,160, 90,181,106,145, 12,195, 60,103, 89,246, 18,128,218,148,210,150,132,144, 19, 0, +228, 69,118,205,165,148,126, 68, 8,201, 2,240,128, 97,152,167, 44,203, 70, 22,231, 78,165, 80, 40,146, 99,146,178,156,237,173, + 36, 24,220,194, 10,109, 23,197,161,215, 7, 98,136,133, 4, 79,194, 19, 80,173,106,101,114,239,242,161, 15, 10, 68, 86,195,248, +248,120, 0,248, 0, 64,120,116,116,180,171, 81,104,113,120, 63, 80, 84, 12, 25, 5,212,226,197,139,187, 20, 39,174,138,121, 54, + 95, 75, 95,178,100,201,183, 38,255,211, 43,208,118,180,194,235,206,240,173, 11,172, 92,127, 10,173, 99,199,142,149,174, 64, 88, +244, 56,122,112,247,245,182, 90,226, 21,208,160,133,137,117,136, 34,248,198, 85, 0,116,155, 89,153,113,235, 42,101,100,242,109, + 27,190, 29,207,108, 60,175, 66,116, 92, 18,174, 30,223,134,228,248,136,173, 0,157, 68, 95,238,207,170,112, 99, 89,165,119,128, +147,131, 61,242,181, 20, 44, 5,240, 23,177,245, 86, 68, 86, 87, 31, 31,159,133,215,174, 93,243,202,207,207, 87, 92,185,114, 37, + 99,199,142, 29,207, 53, 26,205, 79,148,210,157, 5,251, 28, 78, 73, 73,249,154, 82, 10,133, 66,193, 23, 8, 4,210,210,156, 57, + 9, 33,245,167,126, 54,228,242,119, 27,182, 72,158, 63,188,135, 31, 14, 28, 71,134, 74,101, 56,159,148,247, 49,165,244,104,193, + 62,103,239,164,228,197, 82,208, 74, 2,134,192, 85, 46,112, 33,132, 72, 40,165,249, 37,124,185,246, 31, 48, 96,128,155, 81,100, + 1, 64, 74,182,142,175, 82,235,120,205,253,237,209,160, 77,111, 4,159,219,143,125, 23, 99, 81,213, 81,118,209, 91,158, 81,106, +141, 50, 12, 19,110, 34,154, 42, 31, 57,114, 68,214,181,107, 87, 21, 0,211, 46,209,191,164, 51, 12, 19, 94,198,195, 54,151, 16, +226,188,125,251,118, 70,167,211,229,132,133,133,193,197,197, 5,206,206,206, 80, 42,149, 8, 13, 13,197, 31,127,252,129, 39, 79, +158,128,101, 89,212,173, 91,215,162,235,149,154,154,138,251,247,239,163, 83,167,206,147,146,147,147,172,109,237,236,115, 47, 95, +186,184,188, 60,156, 44,203, 18, 0, 8, 8, 8, 64, 64, 64,128, 36, 54, 54,214,227,232,209,163, 78,223,124,243, 77,148,151,151, +215,174,188,188,188,215, 44, 7,230, 10,173, 2,225, 82, 40, 2, 37, 18, 9,132, 66, 33,178,178,178,144,152,152,136,236,236,236, + 87,125, 57, 54, 54,111, 69,104, 21,103,161,122,147,251,255,157,226,176, 56, 49, 69, 8, 25, 8, 96,186,153,101,129, 94,175,135, + 80, 40, 68,227,198,141,177,102,205, 26,220,186,117, 11,191,253,246, 27, 60, 61, 61, 49,116,232, 80, 48, 12,131, 71,143, 30, 89, +154, 69,246,218,181,107,211, 63,254,248,227,128,237,219,183, 75, 34, 35, 35,241,228,201, 19,216,216,216, 96,205,154, 53,226,145, + 35, 71, 86, 59,119,238,220, 92, 0,203,202, 44,171,201,232, 66, 55, 55,183, 62,181,107,215,254,203, 62, 46, 46, 46,202,147, 39, + 79, 58, 25, 5, 88,209, 17,137,197, 32, 99,238,220,185,223,251,249,249,173, 42,232, 46, 12, 4, 32,167,148,182, 62,112,224, 0, + 1,128, 94,189,122, 81, 66,136,241,133,244, 96,255,254,253,109, 66, 67, 67,233,252,249,243,139,109,231,146,147,226, 55,124,191, +102,227,247,223, 45,152, 42,154,220, 73,137, 94, 31, 8, 32, 17, 18, 88,203, 4, 88,180,122,179,238,206,141,139,247, 93, 93, 93, +143, 2,248, 56, 62, 62, 30,174,174,174, 57, 0,158,242,120,188,112,131,193, 16,199,249,194,191, 91, 40, 78,139, 20, 88,149,227, +139, 19, 74,229, 17,106,166, 22, 47, 35,102,206,156, 25,176,120,241,226,155, 21, 17, 89,166, 78,240,132, 16, 74, 8,105, 77, 41, +189, 80,248, 50, 45,177,203,176,208,246,197,184,186, 56, 59,216,205, 24,218, 28, 44, 11,232, 13,128,222, 64,145,171,202,195,227, +135,183, 84,144,144, 3,102,229, 72, 44, 90,250,205,236, 47,170,220,139, 97, 16,151,174,197,133, 67, 27,105,114,124, 68, 79,250, +114,223,167,111, 74,100,185, 56, 57,156,223,189,241,107,220,122,169,129,129,125,165,179, 88,150, 22,254,126, 11, 47,156,234, 14, + 14, 14,203,175, 95,191, 94, 89, 44, 22, 43,158, 61,123,102,216,191,127,127,156, 70,163, 89,111, 20, 89, 5, 24,216,160, 65, 3, +157, 92, 46, 71, 78, 78,142, 90,171,213,230,148, 34,178, 60, 90,215,175,115,241,187, 13, 91, 36,249, 26, 13, 50,243,212,224,217, + 59,189, 38,178, 10,208,172, 77, 13,119,119, 34, 81,128, 2,136,200,210,198,149, 36,178, 0, 64, 36, 18, 5, 77,152, 48,193,180, +127, 27, 14, 10,129, 94, 38, 22, 24,174,132,164,176,193,231,246,227,210,163, 20, 86, 34,228, 25, 28,233,203, 42,101,149, 61, 38, + 38,102,115, 92, 92,220,204,184,184,184,153, 38,226, 42, 2,192,204,154, 74,225, 95,210,253,109, 68, 51,227,226,226,102,178, 44, +187,217,140,170,141, 27, 48, 96, 64,140,191,191,127,166,159,159, 95,102,106,106, 42, 66, 66, 66,144,158,158,142, 31,126,248, 1, +143, 31, 63, 6,203,190,210,129,197,117,163,152, 33,144,144,158,158,102, 69, 41, 69,122, 90,170,124,246,236,217,202,242,112, 26, + 12,134,215,158, 45,119,119,119,140, 25, 51, 70,168, 82,169,108,162,162,162,172, 77,183,153,203,169,209,104, 10, 67, 97, 80, 74, +161,209,104,144,153,153, 9,141, 70,131,231,207,159, 23,138,172,130,243,191, 53,139,150,241,183, 84, 42, 77, 52, 58,136, 74, 36, + 18, 16, 66,138,235,126,123, 35,209,159,141,231, 34,132, 80,169, 84,154, 88, 14,113, 88,102,121,204,188,238, 16, 10,133, 24, 62, +124, 56,110,222,188,137,176,176, 48,240,120, 60,228,230,230, 66,165, 82,161, 93,187,118, 16,137, 68,150, 90,180,168, 80, 40, 28, + 56,107,214, 44, 73,120,120, 56, 82, 82, 82,140,206,244, 48, 24, 12,152, 52,105,146, 84, 44, 22, 15,180,212,116, 31, 23, 23,215, +225,217,179,103, 62, 69,151,132,132,132, 76, 83,159,194,242,226,192,129, 3,164, 87,175, 94,180, 87,175, 94,212, 40,184,204, 69, + 70, 76,200,134,223, 14, 31, 61,253,229, 87, 75,115, 84,185,217,168,234, 38, 69, 78,118, 38, 22, 45,254, 78,119,237,218,165,243, +211, 39,141,110,186,127,255,254, 37, 0,158, 22, 28,242,116,255,254,253, 67,190,250,234,171, 95, 80, 16,230,129,195,187,131,226, +180,136,233,179,247, 38,186,247,138,227, 40,232, 62,148,150,147,210, 56,226,176,149, 81,120, 21,136,174,243,175, 89,180, 74,109, +124,170,245,173,231,236, 96,127,110,251,218, 5, 86, 71, 31, 2, 49,209, 17, 72,142,143,196, 7, 77, 91,227,241,195,123, 96,117, +134,131,244,217,254, 50,135,167, 19,239,222, 53,252,106,250,127,222,170,105, 45, 44, 61,154,131,103,193, 39,145,145, 28,191,150, +134,239, 59,248, 38, 46, 16,169,210, 59,192,217,209,225,252, 47,235, 22,218,157, 8, 97, 16, 29, 29,129, 67,191,172,130, 78,251, + 23, 93,113,220,226,198,155,213,136,114, 50, 18,161,201, 54, 64,194,168, 36, 22, 94,212,231,142,142,142,219,191,255,254,251,209, + 77,155, 54,149,245,239,223,255, 89,122,122,250, 55,148,210,125, 38, 13,252,135, 62, 62, 62, 83,214,174, 93, 91, 45, 58, 58, 26, +127,252,241,199, 51, 0,183, 75,225,140,225,241,120,235,255,248,101,243, 84,105, 21, 95,252, 48,235, 75,253,129, 91, 33,221, 40, +165, 39, 76, 56,253,130,106,215, 56,250,205,148,177, 12,123,231,119,220,143, 76,196,203, 76,245, 31, 37,113,166,164,164,144,188, +188,188,202, 54, 54, 54,166,231,129,171, 60, 87, 61,173, 79,141,184,118,211, 47,187,229,107, 13, 16, 11, 24, 58,177,187, 87,220, +141,223,246,217,167,168, 83,136,113, 52,162,165,120,150, 99, 0,159,207,135,147,211,159, 61, 72, 33,233, 22,141,125,176,186,121, +243, 38,195,227,241, 94, 19,232,166, 22, 34, 75, 45, 69,150,192, 92,206,162, 66,203, 8,189, 94, 79,202,203,169, 86,171,139,141, + 57, 86,156,175, 22,203,178,127, 75,249, 45,177, 80,153,118, 25, 26,253,233,242,243,243,157,164, 82,105,162,177,251,239, 77, 89, +180, 42, 50, 18,177,180,238, 75, 75,242,199, 48, 12, 88,150,133, 80, 40, 68,221,186,117,113,244,232, 81,216,217,217,193,218,218, + 26,214,214,214,144, 74,165,176,183,183, 47, 20, 90, 12, 99,246, 40, 29,170, 86,171, 61, 61, 61, 61,241,252,249,115, 72, 36,146, +194, 69, 44, 22, 35, 32, 32, 0,185,185,185,238,111,207,118,255,247, 96, 68,223,160,238,235,118,252, 58,248,232,209, 99,159,107, +213,249,181,124,125,125,232,237,107,231,238, 79,159, 52,186, 35, 39, 77,254, 91, 48, 90,163, 76,125,173,102,204,152, 49,171,188, +124, 51,102,204,152, 85,156,133,171,188,130, 11,175,186,250,140,107, 20, 10, 45,163,130, 44, 78, 73, 26, 69,214,214, 53,243,173, +127,189, 11,196,196,132,227,244,190,213,217, 58,173, 38,157,101,117, 94, 47,159,220, 3, 24,108, 51, 43, 11, 12,109,212,189, 83, + 27,114,250,145, 6, 89, 25,201,120,122,251,100, 4,242, 68, 51,223,164,200,218,190,110,129,221,145,135, 4,209,209, 17, 56,177, +103, 85,166, 78,175,253,144,190,220,127,183, 34,220,131, 68,162,238,125,107,218,116,249, 44, 48, 14, 6, 98,192,192,199,161, 31, +185, 5,146,238,113,151, 74, 31, 25,102,138,228,228,228, 69, 86, 86, 86,204,178,101,203, 62,205,207,207,159, 79, 41, 61, 96,114, +227,180,171, 90,181,234,210, 13, 27, 54,120, 68, 69, 69,137, 46, 95,190,156,118,254,252,121, 10, 96,113, 25, 47,240,105,132, 16, + 94,253,202,238,227,239, 68,196,118,163,148,254,110,194, 25,208,165,129,255,149, 45,139,231, 42,116, 87, 14, 32, 39, 62, 26, 51, +175,196,100, 1, 48,187,190,117, 58, 29,210,211,211,161,203, 73,215,127,224,154,155, 57,191,183,147, 58, 49, 61,159, 47, 96, 85, +122, 63,235, 36,245,185,180, 8,158, 76, 38, 43,119,189, 10, 69, 34,232,116, 58,184,187,187, 23,166,101,101,231,128, 16, 2, 87, + 87,215,178, 30,182,133, 0, 38, 53,107,214,140, 52,110,220,248,198,170, 85,171, 78,149, 38, 86,202, 99,209, 42, 11,230,114,178, + 44,203,148, 80,191,164,188,156,166, 22,173,178,132,214,219,180,104, 21, 39, 90, 76, 69,162,169, 16, 42,143,143,214,223, 41, 14, + 45, 17, 97,197,240, 20, 90,180,238,221,187,135, 74,149, 42, 65,171,213, 66,161, 80, 64,161, 80,192,202,202, 10,217,217,217, 16, + 8, 4,176,176,204,172, 68, 34,137, 10, 9, 9,241,113,116,116,132,193, 96,120, 77,108, 61,123,246, 12,114,185, 60,214, 82,139, +150,155,155,219,201,130, 81,135,175,193,197,197, 69,249, 38,234,213,212,146,213,171, 87,175,114,125,152,173, 91, 60,117, 7,128, + 29,189,123,247,222,254,224,218,177, 15, 92, 93, 93,143,249,249,249, 17, 0,224, 70, 24,190, 95,214,172, 18,122,216,146,139, 88, +162, 52, 38,255,147, 1,144,130,255,201, 38, 66,204,244,183,166,152,180,212,197,139, 23,159, 51,241,239, 74,174, 96, 17,140, 33, + 30, 94,243,133,230,151,101,201,114,178,183, 59,247,211, 15,243,173,247, 5, 3,177,209,225,184,112,112, 77,166,222,160,253, 16, + 44,141,191,118,230,224, 1, 16,168,240,242,192, 5, 96,159, 25, 77, 4,234,215,175,233,133,223, 30,233,144, 28,243, 12,148,178, + 91,105,226, 47,170, 10, 55,142, 5, 34,107,235,154,249,118,191,222, 35,136,137, 14,199,233,125,171, 51,245, 6,237,135,229, 9, +118,106,196,103,132,216,242,228,146,245,131,219, 55,236,227, 85,213, 3, 44,213,129, 21, 82,244,152,230,192,127,122, 71,245,155, +103,123,222, 62, 54,135,253, 60,230,154,121,129, 64,115,114,114,190, 38,132,252, 74, 41,125,108,210, 32,127, 84,173, 90,181,111, +127,252,241,199,202,177,177,177,138, 59,119,238,100,109,218,180, 41,156,101,217,133,148,210, 50, 71, 81, 81, 74,191, 36,132,252, +100, 26, 47,135, 16, 82,103,234,167, 3,174, 13, 24,246,153, 36,252,204, 14,216,134, 63,198,148, 43,113,134,167,233,154,254,148, +210,132,146,184, 28, 28, 28,104,114,114,114, 68, 70, 70,134,143, 92, 46, 71,106,106, 42,210,210,210,144,145,145, 1,117, 86,186, +222,222,144,145, 75,244,105,224,243,249, 72,138,214,195, 96, 48, 36,148,101,205, 42,105,212, 33,128,197,121,121,121, 70,145, 85, +152,110,109,109,189,216,218,218,218,232,163,181,185,132,151,152, 49,188, 3, 41, 8,239,208,228,247,223,127, 15,237,216,177, 99, + 76,113, 98, 69, 44, 22, 35, 63,223,178, 40, 33, 37,141, 98, 44, 15,103, 73, 22,173,162,233,150,112, 26,187, 47,141, 78,240, 69, +211,141,224,241,120, 96, 89,246, 47,233,255,180,104, 49, 29, 29, 88, 30,145,243,154,117,185,140,192,161,229, 25,137,248,166, 45, + 90,198,107, 33, 20, 10,113,248,240, 97, 12, 27, 54, 12, 6,131, 1, 50,153, 12, 86, 86, 86,144,203,229, 56,120,240, 32,140,225, + 31, 44,201,162, 78,167,219,185,120,241,226, 89, 27, 54,108,144, 82, 74, 33, 18,137, 10,133,214,252,249,243,243,180, 90,237, 78, +115,132, 86, 97,196,119,150,134, 84,119, 44,125,212, 97,113,199,148,224,175,101,179,112,225,194, 33, 44,203,118, 71,145, 16, 14, + 69,246,123, 45,244, 67,105,225, 29, 0,216, 46, 92,184,112, 4,203,178,198, 1, 52,175,141, 46, 52,217,207,248, 46,241,233,221, +187,247,246,162,163, 14, 57,188,243,184,245, 47,206, 91,107,147, 64,165,164,160,189, 40, 20, 92,252,146, 69, 86,111, 63, 39,123, +135,115,155, 87,205,183,222,117, 19,136,139,126,137,171,135,215,102, 26, 88,157,169,120,105, 97, 97,203, 91,223,205,201, 6,105, +215,243,144,149, 18, 5, 80,220,169,184,200,234, 91,221,201,193,254,252,150,213,243,237,246,223,101, 16, 27, 21,142,243, 5, 98, +176, 34, 34,107,144, 72,212, 61,160,134,199,150,126, 31, 53,183, 85, 18, 61,244,145,161,248,105,104, 31, 4,119,213,162,121, 95, + 37, 26,117, 82,160, 90, 61, 73,159,227,155,211,218,186, 5,146,207,204,181,110, 21, 17, 89, 93, 43, 87,174,188,224,198,141, 27, + 94, 44,203, 42, 46, 92,184,144,189, 97,195,134,151,249,249,249,171, 41,165,199, 44,120, 57,152,138,172,250, 51, 70, 14,189,252, +237,143, 63, 73, 66,130,111, 97,233,206, 35,200,211,105, 12, 39, 99,114,122,155,118, 43,150, 98, 41, 57,179,122,245,234,202,115, +230,204, 17,165,165,165, 33, 37, 37, 5,233,233,233,133, 75, 78, 78, 14, 92, 92, 92,240,251,239,191,107,179,178,178,174,155,241, +178,121,227,163, 14,139,131, 66,161,128, 80, 40,132, 86,171, 45,180,104,137,197, 98, 40,149, 74,164,166,166, 98,239,222,189, 0, +144, 86,170,133, 77, 40,138,103, 24, 82, 73, 42,147,169, 37, 18, 9, 91,156, 85,205, 82,206, 2,196,124,244,209, 71, 30, 11, 23, + 46,148, 52,104,208,224, 47, 22,173,242,112, 82, 74, 85,237,219,183,151,173, 94,189, 26, 94, 94, 94,208,104, 52,175, 9, 42,134, + 97, 32, 20, 10, 17, 29, 29,141,111,190,249, 6,148, 82,213, 63,221,242,152,138, 22, 83, 49, 84,224, 67,245, 23, 33,100,174,197, +168,172,174, 65, 75, 71, 34,154, 10, 55,177, 88,140,140,140, 12, 41, 33,100, 96, 9, 17,236,205,182,104, 25,133,214,227,199,143, +177,125,251,118,116,234,212, 9,182,182,182, 72, 79, 79,199,190,125,251, 16, 26, 26, 10,145, 72, 4, 66,136, 37, 86, 45,182,113, +227,198,223, 93,186,116,169,107,255,254,253,253,167, 76,153, 34,173, 85,171, 22,158, 62,125,138,133, 11, 23,230, 7, 7, 7,135, +229,229,229, 45,132, 57,129, 77, 11, 34,190, 27,131,145,154, 53,234,176,200, 49, 69, 81, 66,120,135,143, 74, 96, 51, 13,253,240, + 90,120, 7, 83, 92,189,122,213,187,114,229,202,126,120, 53,146,208,248,194, 53, 29, 93,248,218,203, 56, 62, 62,190, 33,184, 81, +135, 28,254,217,182,238, 2, 33,164, 48, 96,169, 81,124,253,101,212,225, 95,143, 36,147,250, 15, 29,105,189,243, 38, 65,116,100, + 24,110, 31, 95, 95, 84,100,153,211,216, 4,153,198,218,144, 72,229,181, 88,242,106, 56,115, 86, 74, 52, 64,121, 22, 11,173,162, +156,160,236,151,253,135,140,180,219,125,155, 32, 46,250, 5,174, 28, 90,103,177,200, 50,229, 28, 36, 18,125, 37,224,145, 57,157, + 91,214, 23,182,168, 87, 3,242,164, 8, 36,196,196, 97,239,227,228,180,176,116,245,103, 87,136, 22,145, 47,212, 63,117, 26, 97, +103,103,235, 34, 64,151,209,246,118,215,143,100,253,230,254, 33,163,165, 90,186, 56,238, 50,157, 95,108, 62,255,122,206,234,214, +214,214,203,130,131,131, 29, 37, 18,137,245,237,219,183, 13, 27, 55,110,140,206,207,207, 95, 78, 41,221, 99, 86,217,255,186,221, +163, 97,141,170, 23,190, 93,183, 89,146,147,171, 66,174, 70, 11,177,179,171,225,215,107, 15,123,150, 20, 0,179, 40,167, 88, 44, +222,189,103,207,158, 78,129,129,129, 94,117,234,212, 97,210,210,210,144,147,147,131,156,156, 28,163,213, 11,143, 31, 63,102, 35, + 35, 35, 99,197, 98,113,153,249,124, 83,163, 14, 77, 57, 77,194, 59,204, 2,192, 16, 66,110,221,187,119, 47,167, 99,199,142,144, + 74,165,200,205,205,133,167,167, 39,244,122, 61,142, 31, 63,142,224,224,224, 92,150,101, 47, 0,184, 87, 90,217,243,242, 84,158, +132, 16, 38, 79,165,170, 59,100,200,144, 86,147, 39, 79,126,109, 72,186,147,147, 19,236,236,236, 44,226, 4,128,180,180,180,154, +191,255,254,251, 23,247,238,221,251,178, 83,167, 78,202, 89,179,102,137,189,189,189, 97, 48, 24,152,242,114,166,167,167, 43,239, +220,185,179,188, 69,139, 22, 99, 59,118,236,200,255,246,219,111,161, 84, 42, 97, 48, 24, 32,149, 74,145,149,149,133,133, 11, 23, +226,242,229,203,122, 74,233,186,204,204,204, 41,150,220, 75,229,180, 96,189,198, 89,146, 5,168, 36, 33, 84,220,254,255, 68, 62, +139, 8, 55,216,216,216, 76, 7, 48,189,132, 8,246, 48,247,217, 52, 10, 45, 30,143,135,136,136, 8,108,220,184,241, 47,113,180, +140,225, 31,138,227, 46,161,236,244,252,249,243, 6, 66, 72,211,219,183,111, 79, 31, 60,120,240,103,185,185,185, 30,114,185, 60, + 78,167,211,109,203,203,203, 51,198,209, 18, 90,210,134,228,230,230, 70, 22, 55,234,176,232, 62,128, 77,169,156, 69,194, 59,188, + 22,194,161,200, 97,175,133,126, 40, 26,222,193,148,179, 89,179,102,225, 12,195, 60, 41,232,130,127,130, 34,163, 11, 77, 56,125, +226,227,227, 27,186,186,186, 94, 0, 32, 43, 58,234,240,159,184,151, 56,206,255,182,216, 66,105, 1, 75,139, 63, 10,146, 51, 55, + 34, 32,146,166,225,254, 31, 91, 45, 22, 89,197, 65,157,175, 10,155,187, 59,170,158, 70,157,143,220,204,196,167, 52,124, 79, 82, +197,175, 54,228,103,110, 69, 66, 34,207,192,221, 51, 63,103, 24, 12,249, 31,210,176,255,221, 43, 63, 29,102,254,120,226,128,144, + 40,237,112,255,139, 97,136,203,200,197,137,151,233,251,168, 74,253,249,142,130,185, 2, 61,154,146, 75, 91,102, 39,172, 15,236, +161,236,227,224, 46,192,202,169,219, 32,153, 97, 47,108,212,182,165,217,115, 32, 26, 29,228,127,248,225,135, 49,129,129,129, 86, +125,250,244,121,150,150,150,246,154,131,124, 57, 46,116, 12, 33,228,199, 99, 27, 86, 76,181,175,221, 4,107,191,154,102,216,125, +237, 97,209, 81,136,165,194,207,207,207,112,245,234,213,201, 99,198,140, 89,217,182,109, 91,247,238,221,187, 11, 43, 85,170, 4, +177, 88,140, 23, 47, 94,224,210,165, 75,218,151, 47, 95,198,170, 84,170,201,117,234,212, 41, 51,198, 89, 76, 76,204,102,145, 72, +132,144,144, 16,180,106,213,106,113,129,197, 42,226,234,213,171, 51,179,178,178,144,149,149,133,126,253,250, 21,166,143, 27, 55, +110,102,213,170, 85,145,150,150, 86, 86, 89,231, 18, 66, 54,224,213, 92,135, 9, 59,118,236,104,122,232,208,161,166,147, 38, 77, + 18,118,234,212, 9,215,175, 95,199,233,211,167,181, 90,173,246, 26,128,107,230, 78,107, 83, 16,127,232, 14, 33,228,225,210,165, + 75,155,242,120,188,194,136,247, 33, 33, 33,216,186,117,107,121, 56,245, 0,150, 19, 66,126,220,177, 99,199,220, 51,103,206,124, + 58,100,200, 16,107,157, 78,135,199,143, 31,227,231,159,127, 46, 47,231, 23,142,142,142,115,142, 31, 63,190,237,212,169, 83, 31, + 15, 26, 52,136,153, 48, 97, 2,214,172, 89,131,255,253,239,127,172,193, 96, 56, 36, 16, 8,134, 36, 39, 39,231,190,165,134,103, + 83,193,180, 58,155, 44,152,243,176, 76,222,138,116, 13,154,153,239,248, 10, 55, 75, 5,229,104,221,186,117,161,149,145, 82,250, +154, 95,157, 81, 96, 89,218,117, 8,192,166,224, 62, 93,135, 87,243,139,154, 70,133,231,225,207,200,241,230, 50,250,199,171,109, + 66,160,198,227,210, 39,149,182, 1, 40,252,203, 96,203,152, 59,119,238,247,243,230,205,251,190,104, 8, 7,211,157,138,134,126, + 88,176, 96, 1, 74, 10,239, 0, 32,125,238,220,185,223, 21,180, 79,164,160,187,240, 3, 20,140, 46, 52,225,220, 94,144, 46,155, + 63,127,254, 96, 0,165,113,114,224,240,143,161, 20, 31, 45, 58, 43,228,210,110, 29, 0,123, 16,102, 38,125,177, 55,164,194, 13, + 24, 75,103,156,221, 53,127, 13, 40,210,169, 65, 63,253,141,148,128,229,205, 14,185,180,139, 5,136, 13, 8, 51,131,190,248, 95, +133,243, 73,148,118,200, 94, 56, 6,255,123, 20, 71, 19,114,117,159,236,208,104, 94,179, 6, 21,248,100,245,117, 11, 36,123,109, +221, 4,191,126,241,161, 61, 57,150, 54,216,226,243, 36, 39, 39,127,107,101,101,197, 91,190,124,249,167,121,121,121,175, 57,200, + 87,224, 37, 49,141, 16,194,107, 84,221,107,252,205,231,145,221,205,233, 46, 44,138,102,205,154,197,135,134,134, 14, 56,125,250, +116,255,139, 23, 47, 6,169, 84,170,202,132, 16, 72,165,210, 8,141, 70,115, 70, 44, 22,239, 54, 71,100,153,190, 80, 76,167,136, + 1,128,172,172, 44,100,103,103,191, 22,134, 0,120,229, 95,149,156,156, 12, 79, 79, 79, 75, 95,136, 23, 9, 33,193, 11, 23, 46, +108,185,112,225,194,186, 5, 86,161,139,229,237, 50, 43, 16, 60, 23,165, 82, 89, 28, 33,196, 67, 40, 18,231, 94,189,122,245, 76, + 5, 57, 85, 5,150,146,149, 43, 87,174, 92, 36,151,203, 27,134,132,132,252, 81, 17,206, 2, 17,213,211,222,222,222,109,251,246, +237,251,183,108,217,210,132,207,231, 95, 39,132,244,206,200,200,120,219,147, 74,143,130,121,115, 28,150,105, 49, 50,199, 34, 86, + 94,252, 29,194,205, 96, 48,228,204,153, 51, 39,169,168,240, 42,106,189, 50,254,215,106,181,249,102, 62, 75,150,140,162, 44, 67, +100,144, 28, 0,120, 53,119,225,171,105,117,204,157, 84, 26, 64,137,115,103,206,155, 55,143, 46, 88,176,128, 48, 12,115, 8,192, + 83,134, 97,158, 23,117, 86, 55,221,182, 96,193, 2,204,155, 55,143,206,159, 95,242, 55,170,145, 51, 52, 52,148,242,120,188, 63, + 0,132,243,120,188, 8, 83, 94,211,116,227, 49,165,113,114,224,240,214,133, 22,125,185, 63, 26,192,176, 55,250,165, 24,190,255, + 12, 94, 57, 50,190, 57,206,136, 61,145, 0, 6,189, 41, 62, 22, 88,246, 89,163,214, 83, 1, 16, 10,172, 44, 42,178, 76, 17,119, +137, 30,114,109, 78, 22, 55,106,219,114, 82,129, 53,236, 91, 75,207, 87,156,131,252, 27, 16, 91,127,113,144,183, 20,126,126,126, + 6, 0, 59, 0,236, 40, 58,169,116, 57, 94, 58,144, 74,165,133,221,136, 12,195,132,103,100,100,192,104,209, 50, 77, 47,168, 19, + 40,149,202,242, 10,153, 19,132,144, 83,148, 82,195,155,168,203,188, 60, 85,165,130, 23, 28,239, 77,113, 22, 12,114,248,236, 77, +114,166,166,166,198, 1,104, 86,173, 90, 53, 81, 88, 88,152,230,223,210,192,188, 9,235,208,223,141, 55, 45,220, 10, 62, 24,106, +254, 13,117,249,244, 13, 19,254,220,190,133, 63, 15,166,177,131,202,154, 84,218, 40,208, 40,126, 46, 33,143,148,188, 82,146, 20, +192,246, 23, 47, 94,120,177, 44, 27, 89,140,101,233,181,109,243,231,207, 71, 73, 49, 3,139,112, 2,192,111,209,209,209,110, 6, +131, 33,190, 8,239,107,233,165,113,114,224,240, 47,177,104,253, 55,177, 83,163,153, 7, 96,158,185,251,199, 95,161,179, 1,204, +174, 96, 3,250,248, 77,151,163, 60, 34,107,255,254,253,134,191,163, 78,117,186, 87,189, 97,166,115, 23,154, 98,240,224,193,155, +223,112,217, 13,127, 67,125,190, 19,156,255, 38,145,197,225,223, 13,154, 30, 18, 13,224,171, 50,247, 43, 59, 26,252, 95,132, 81, +193,207,116, 0,233, 37,104,157,210,182,149,198, 9, 0, 89, 0,178,138, 57,182,164,116, 14, 28,222, 42, 24,174, 10, 56,112,224, +192,129, 3, 7, 14, 28,254, 30, 16, 0, 65, 37,124, 65,152, 61,154,128, 16, 18, 84,142,175,249, 51, 28, 39,199,201,113,114,156, + 28, 39,199,201,113,254,183, 56,203,226, 46, 58,122,249, 77, 77,207,245,143,138, 43,211,124, 27, 71,194,252, 29, 11,128, 32,142, +147,227,228, 56, 57, 78,142,147,227,228, 56, 57,206,114,158,103,228, 63,113,158,191,115,225,124,180, 56,112,224,192,129, 3,135, +119, 8,237,124,136, 43,223, 0,230, 68, 24,141,125, 19,124, 31, 85, 35,238, 0,240,166,248,254,139, 32,132,184, 2,232,108,146, +116,204, 56, 24,136, 19, 90,239,238, 69,173, 14, 96, 22, 0,165, 73,242, 77, 74,233,226, 34,251,237, 2, 96, 58, 33, 97, 46,128, +133,148,210,231,150,156,143,199,227, 45,110,217,178,229,231,151, 47, 95, 94,161,211,233, 22,150, 35,191, 94,174,174,174,223, 17, + 66, 26, 0, 16, 16, 66, 94, 36, 38, 38, 46,214,233,116,103, 42, 80, 7, 85, 92, 92, 92,150, 0,168,199, 48,140,128, 16, 18,150, +152,152,248,141, 78,167, 59, 95, 1, 78,133,179,179,115,115, 74,169, 11, 0,158, 64, 32, 72,141,141,141,189, 81,222,209,115,189, + 23,132, 10,179,114,245, 2, 0,176,150,243,117,251,231,249,105,205, 77,227,238,114, 14, 28,254,243, 13, 61,175,104, 82,135,170, + 88, 68, 40,166, 24, 0,210,161, 10, 89,125, 50, 28, 83, 74, 60,190,184, 1, 55, 69, 56, 59, 84,197, 34, 74, 95,113,116,168, 70, +150,159,124, 81,198,224, 46, 51, 56,141,216, 4, 48, 35,205,153,224,252,111, 24, 24,244, 22,208,217,180,139,179, 32, 0,243,166, + 50,133, 86, 63, 31,226,106,224,131,191, 63,132, 70, 27, 95, 66, 0,234, 2,168, 14,224, 57,128,123,148,210,236, 10, 10,134,119, +130,243, 95,136,185,148,210, 1, 69,202,253,151,157, 62,252,240,195,110,167, 78,157,146, 25,167,103, 97, 89, 22, 82,169, 84, 15, + 96,168, 5,245,233,212,191,127,255, 25, 63,253,244, 19,250,244,233, 51,135, 16,242, 61,165, 52,199,220,227,237,236,236,122, 85, +169, 82,101,205,230,205,155, 29,155, 52,105, 74, 68, 34, 17, 94,188, 8,243, 24, 53,106, 84, 45,103,103,231, 67,137,137,137,159, + 89, 90,120,123,123,251,129, 85,171, 86, 93,185,113,227, 70,135, 22, 45, 90,128, 16,130,224,224, 96,143, 47,190,248,162,174,139, +139,203,158,132,132,132,177,150,114, 58, 56, 56,212,168, 90,181,106,155,181,107,215, 74,155, 55,111, 14,137, 68,130,123,247,238, + 89,141, 30, 61,218,197,197,197,229,113, 66, 66,194, 5, 75, 69,214,131,224, 35, 31,235,181,234,165, 0,192, 23,138,167, 53,253, + 62,235, 72, 90,240,197,174,101,165,245, 94,128,223, 56,177,197,129, 3, 7, 83, 12,116,131, 11,165,152,122,234,231,175, 24, 0, +104,255,233,215, 19, 6,186, 97,197,206, 56, 36,188, 33,190, 41, 67,220,177,102,123, 44, 18, 43,146,207, 77, 0,243, 5,159, 63, +161, 81,227,198, 14,227,174, 92, 9,211, 2,219,254, 35, 6,144,145,197,165,151, 40,180,122,249,147,133,224, 99, 22, 0,242, 81, +117,178,231,116, 56,239, 82,187,118,237,170, 13, 31, 62,156,212,175, 95, 31,193,193,193, 53,246,236,217,211,153,207,231,135, 25, + 12,134, 96, 0,143,204,141,106, 77, 8, 17, 0, 8,224,241,120, 13,254,205,156,255,114,200, 11,202,157, 8,224,166,209,162, 85, +116,167,179,103,207, 30,230,243,249, 70,139, 86,163,220,220, 92,231, 34, 86, 48,115, 80, 89,167,211,225,201,147, 39, 96, 24, 70, + 0,192, 27,127,157, 82,163,164,235,226,225,225,225,177,254,218,205, 96,123,194,151, 34, 61, 31, 64,190, 22, 34, 43,103,252,180, +117,135,221,228,137, 99,123, 90, 91, 91, 95,202,202,202,250,197,130,155,217,219,211,211,243,251,251,247,239,219,203,100, 50,176, + 44,139,236,236,108,184,184,184, 96,243,230,205, 54,147, 39, 79, 30, 32,149, 74,207,231,229,229,253,207, 18,113, 94,181,106,213, + 54, 15, 31, 62,148, 26, 39,148,214,104, 52,240,240,240,192,174, 93,187,196, 19, 38, 76,168, 41, 22,139, 99,212,106,245, 75,115, + 57,179,114,245, 2,189, 86,189,116,251,186,249,149, 0, 96,200,216,249, 75, 69,217,214,199,205, 73,203,202,213, 31, 3,192, 9, + 45, 14,255,244,139,162,129,131,131,195,129,148,148,148, 11, 0, 62,123, 19, 33, 72, 8, 33,110,124, 62,223,155, 82,106, 83,240, + 63, 67,175,215,135, 83, 74,203, 29, 80,215,161, 90,155,174, 16,203,134,129,178,117, 25, 0,132, 97,238, 25,180,170,173, 41, 79, +207, 29,169, 16,167, 72,250, 41, 64,235, 50, 0, 75, 24,230, 62,171, 87,109, 78, 14, 61,119,226,223,114,125,174,103,194,167,170, +139,249, 19, 99,190, 9,190,126, 85,224,202,176, 96,118, 69,192,236,110,197,241, 64,167,137, 19, 39,186,140,253,252,115, 50,108, +232,208,234, 23, 46, 95, 38,173, 44,153,173,224, 29, 68,105, 14,251,197, 10,173,222,254,196, 22,192,244, 61,107,102, 49,124, 30, +143,244,159,184,120,192,150,117,203,153,118, 93,123, 23,118,159, 4, 6, 6, 34, 48, 48,144, 44, 93,186,180,250, 31,127,252, 81, +125,215,174, 93,122, 66,200,125, 74,233,222,146, 78,214,177, 26,201, 99, 1, 73,103, 95,126,110,255,175,126,217,216,184,113, 99, +136,197, 98, 84,132, 19, 0,218, 87,231,189,236,212,184,218,253,254,227,231, 70, 54,105,210,140,190, 9,206,119, 8, 55, 41,165, +221, 11, 26, 48, 91, 79, 79,207,230,122,189, 94, 2, 0,124, 62, 63, 31,192,120, 90, 48,117, 16, 33,228, 16,203,178,221, 44,104, + 32, 25, 0,243,186,117,235, 54,103,220,184,113,240,244,244,196,132, 9, 19,160,211,233,130, 9, 33,115, 1, 44, 41, 43, 32,160, +147,147,211,220,245,235,215,219,241, 69,114,212,159, 30,142,248, 12, 61, 0,192, 74, 12, 28, 30, 67, 49, 97,194, 4,235,219,183, +111,127, 3,192,108,161,229,228,228,180,112,243,230,205,118, 50,153, 12,148, 82,228,228,228, 32, 59, 59,187,112, 78,198,177, 99, +199, 90, 63,126,252,248, 59, 0,102, 11, 45,103,103,231,230,107,215,174,149, 74, 36, 18,228,228,228, 8,181, 90, 45,201,206,206, +134, 74,165,162, 26,141, 70, 59,126,252,120,241,163, 71,143, 90, 3,120, 9, 14,255, 22, 81,192, 3,240,137, 64, 32,232, 81,173, + 90,181, 15,158, 63,127,126, 87,175,215, 31, 4,112,176,162, 31, 83,132,144,182,110,110,110,139,226,226,226,214, 82, 74,119,252, + 87,234,212,217,217,249,224,213,171, 87, 43,173, 95,191,126,232,138, 21, 43,142, 91,242, 12,149,240,241,219,180, 81,163, 70, 14, + 61,122,244, 16,184,184,184, 64,165, 82, 33, 44, 44, 76,118,230,204, 25, 71,137, 68,146,170, 86,171,175, 89,114,173, 28,124,154, + 91,129,111,189,167,105,155,160, 22,125,122,126,162,112,182, 87, 34, 79, 99,192,243,200,120,207,223,143, 31,110,229, 86,171,243, + 85,173, 54,179, 95,202,211, 43, 57,150,114,182,233,216,165, 69, 80,219,182, 10,165,141, 18,153,185, 90,188,136,136,245, 58,119, +250, 72,160,107,173,206, 23, 89,162, 27,148,248,224,148,234,109, 94,155, 9, 0, 63, 87, 98, 95,167,110,179,250,183,219, 15,255, +230, 3, 74, 41, 24,138,213, 69,173, 89, 19, 0,254,106, 64,111, 41, 31, 40,165,132, 96,185,169, 53,171,176, 91,145, 1,233,224, +141,210,187, 41,141,239, 99, 64,108, 99,103,215,120,244,200,145, 36, 59, 43, 11,247,238,221, 83, 21, 21, 89,223,187, 67,120,145, + 65,229, 67,209,120,246, 62, 89,179,138,118, 29, 26,255,155, 29, 71, 75, 38,147, 21,155,174, 84, 42,209,166, 77, 27, 44, 94,188, +152, 15,160, 65, 17,133,247,250, 36,171,128,248,232,134,153, 80,202,197,140,167,167,167,194,218,218,186,194,156,175, 18, 89,239, +102,158,244,163, 91,191,204, 26,122,102,215,202,128,220,236, 12, 65,209, 93,172,172,172,224,227,227,131, 57,115,230,152,199, 89, +113,117,251,143,114,186,186,186,250, 6, 6, 6, 54, 56,123,225,130, 77, 92, 92,156, 56, 46, 46, 78,124,234,236, 89,155,166, 77, +155, 54,112,117,117,245, 53,225,176, 36,159, 95,175, 91,183,110,238,161, 67,135,152,192,192, 64,216,218,218,162, 77,155, 54, 56, +126,252, 56,127,197,138, 21,223, 2,152, 83, 86, 62, 25,134,105, 17, 24, 24, 72, 64, 41, 18, 50,245,184,177,216, 23,247,150,251, + 33, 59,159, 34, 45, 51, 11,121,121,249,144,201,100,146,130,238, 94,115,203,222,172,105,211,166, 4, 64,161,184,202,206,126,181, +228,228,228, 66,163,209, 66, 44, 22, 43, 8, 33, 18,115, 57, 41,165, 46,205,155, 55, 7, 0,104,181,218,194, 47,188,140,140, 12, +146,153,153, 9,141, 70, 3,129, 64, 32, 36,132,240,205,229,180,150,243,117,124,161,120,218,144,177,243,163,135,140,157, 31,205, + 23,138,167,105, 20, 89, 6,115,210,172,229,124,221,219,188, 63, 9, 33,142, 60, 30,239,231,106,213,170, 61,230,241,120,219, 9, + 33, 46, 21,225, 36,132, 52, 36,132,124, 43,147,201,206,212,172, 89, 51, 90, 46,151,159, 37,132, 44, 33,132, 52, 45, 15, 39, 33, + 68, 36,147,201,206,126,251,237,183,251,239,222,189,219,231,143, 63,254,240,126,240,224, 65,207,165, 75,151,238,177,178,178,186, + 68, 8,145, 85,228,217,244,246,246,222,114,227,198,141,134,205,154, 53,251,137, 16, 34,126, 19,207, 59, 33,132, 71, 8,169, 71, +204,156,107,232,159,190,238,132, 16,183,250,245,235, 87,146, 72, 36, 8, 10, 10, 2,128,214, 21,228,108, 58,122,244,104,151,201, +147, 39, 11,238,221,187,135,159,126,250, 9,135, 14, 29, 66, 82, 82, 18,186,116,233, 34,252,240,195, 15, 93,196, 98,113, 83,139, + 56,249,214,123, 38,126, 49,169,227,212, 9, 35, 20,247,163,180,216,122, 38, 10,191, 93,139, 71,146, 74,132,174, 61,135, 40, 59, +116,239,219, 65, 36, 86,238,177,148,115,198,244,233, 29, 71,126, 58, 64, 17, 18,207,226,240,245, 4, 92,127,146, 9,189,192, 6, +157,122,126,102, 91,183,121,199,206,124, 8,182,189,237,107,180, 25,104, 50,113,226, 68,199,105,203,119, 94,113,107,248,201,234, +228,116, 4,154, 10,159, 26,128,141,157, 92,254,201,147, 86,173, 70, 72, 95,205,249, 88, 42,231,107,124, 13,186,175, 73, 74, 71, + 75, 83,255,172,150,118,168, 94,208,173,200, 59,245,243, 87, 12, 37,152, 48,208, 13, 46,101,229,243, 60,208,103,226,164, 73, 2, +165,173, 45,214,173, 91, 7,117,110,238,107, 62,179,109, 43,161,227, 25, 25, 63,166,138,159,199,227, 54, 94,228,210,123,248, 1, + 56,178, 68,139,214,177, 99,199,104,231,206,157, 9, 0,236, 15,161,233,189,252,201,119,125,199,125, 59,135, 48,132, 86, 14,104, + 22,226, 94,213, 63,215,222,222, 30, 42,149, 10,106,181, 26, 66,161, 16,249,249,249,136,138,138,194,245,235,215, 97,107,107,107, + 81,102,178,178,178, 96,101,101, 5, 43, 43,171, 55,194, 57,115,104,144,248, 69,116,178,248,228,245,243,173,126,248,252,127, 77, +170,214,107,253,160,109,223, 9, 15,173, 29,221,242, 31, 60,120,128,171, 87,175, 34, 61, 61, 29,141, 27, 55,126, 95,174,231,205, +130,246,250, 38, 33,196, 54, 48, 48,208,227,228,153,139,182, 57,249,172,117, 68,162, 78,192,178, 44,100, 50, 87,253,222, 3,135, + 51,251,244,236, 74, 8, 33, 73, 0,110, 22,136,219,155,101,220, 40, 18, 0,190,189,122,245,154,241,249,231,159, 35, 44, 44, 12, + 35, 70,140,200,187,121,243,102,106,179,102,205,236, 55,111,222, 44,157, 60,121, 50, 46, 92,184, 48,143, 16,242, 43,128,112, 74, +105,126, 9,141,134, 80, 40, 20, 66, 95, 32, 27,180, 6,182, 80,223,103,101,101,129,230,165, 67, 40, 20,242, 0, 56, 2, 48,203, +143,142,101, 89,161, 64, 32, 40, 20, 89, 81,137, 89,136, 74, 82, 33, 43, 71,131,188, 60, 61, 52,121, 20, 60,153, 61, 31,136,112, + 6, 16, 97,102,125,242, 36, 18, 9,244,122,125,225,252,139, 70, 75,153, 70,163, 65,102,102, 38,120, 60,158, 21, 0,107, 0,105, +230, 16,190,114,114,199,111, 5,221,128,184,181,179,155,195,243, 99, 51,181,189,230, 63, 46, 76,179,150,243,117, 7, 38,215,228, +217,123,212,189, 92,175,207, 54, 63, 99,218,219,244,207, 34,132,136, 29, 29, 29,207,237,223,191,191,102,245,234,213, 17, 30, 30, +238,215,187,119,239,198,132,144,122,150,206,201, 72, 8,145, 49, 12,243,221,176, 97,195, 62,239,223,191, 63,169, 81,163, 6,248, +124, 62,244,122,189, 71, 88, 88, 88,155,125,251,246, 77,231,243,249,155, 13, 6,195,151,230,250,253, 17, 66, 24,145, 72,180,119, +227,198,141, 45, 27, 55,110,140,237,219,183,227,230,205,155,108,195,134, 13,153,193,131, 7,195,203,203,171,241,224,193,131,127, + 35,132,116, 42,143,101,139, 16,226, 53,112,224,192, 74, 60, 30, 15,205,154, 53, 19, 94,189,122,181, 62,128,171, 21,172, 83, 43, + 15, 15,143, 11,173, 91,183,174,119,230,204,153, 59,132,144,214,150,248, 57, 18, 66,186,187,185,185, 45, 85, 42,149,182, 22,180, +177,170,216,216,216, 41, 22,204,161,218,164, 65,131, 6,136,140,140,132,175,175, 47,132, 66, 97, 83, 66,200, 40, 0, 29, 1,204, +182,100, 6, 11, 66,136, 91,211,166, 77, 29, 90,183,110, 77,150, 44, 89, 2, 0, 16, 8, 4, 48, 24, 12, 96, 24, 6, 2,129, 0, +126,126,126,228,229,203,151,118,132, 16, 55,115,186, 17, 29,170,181,233,218,172,109,199, 22, 45, 27,215, 97, 86, 28,120, 14, 3, +107, 0,143,232,193, 39, 44, 88,157, 24, 98, 33, 15, 53, 2, 62,224, 61,121,116,191,177,131, 79,187,174, 41, 79, 79, 31, 49,135, +179, 99,215,110,129, 53,125,107, 48, 63,252,246, 2, 25,177,143, 13,177,161, 23, 83, 24, 30,131,154, 13, 62,116,168,225, 95,143, + 87,175,113,107, 65, 92,248,163, 54,118,213, 91, 5,165, 61,191,112,230,109, 60,147, 11, 0,158,135,187,195, 39, 93,218,181, 22, +198,199,197,229,238, 59,112,228,161, 74,135,235, 0,112, 1, 32,157,128, 58,181, 27, 53,106,181,121,201, 18,123, 87, 87, 87,193, +160,254,253,245,155,238,220,185, 51, 18, 48,148,196,231,224,226, 18, 52,122,244,104, 94,124, 92, 28,221,119,240,216, 3, 35, 31, + 0,200,128,218,117, 60,252,186, 32,247,137, 69,221,148, 93, 1,145,179,139, 75,205, 81,163, 70, 33, 33, 46, 14,219,119,236,200, +201, 7,174, 25,173, 88,135,121, 88,235, 95,213,101,216,180,207,186,145, 74,174, 14, 24, 61,111, 83,211, 54,218,164,170,231,240, +167,101,203, 84,139,188,171, 34,171,168,216, 42,241,235,252, 64, 8,157,107, 45, 34,222,251,246,237,102,146,179,181,185, 97, 97, + 97,112,112,112,128,171,171, 43,148, 74, 37, 66, 66, 66,112,246,236, 89, 60,125,250, 20, 44,203,162,110,221,186, 22,101, 40, 37, + 37, 5,247,239,223,135,173,173,237, 27,227,172, 90,201, 17,227, 42, 57, 10, 19, 83,179,132,103,110, 62,109,188,105,102, 79,127, +198,175,231,150,252,252, 63, 53,128, 70,243,126,204, 80, 98, 58,186,208,211,211,179,249,214,173, 91,133,106, 61, 20, 53, 70, 93, + 91,150,155,111,144, 3,128, 92,194,203, 13, 94,234,243,229,215, 95,127,157,251,233,167,159,250, 69, 69, 69, 45, 46,139, 87, 36, + 18, 45,250,232,163,143,166, 82, 74, 5, 19, 39, 78, 4, 0, 12, 25, 50, 36,235,250,245,235, 53, 40,165, 73,132, 16,183,225,195, +135, 63, 59,119,238,156,108,210,164, 73, 60,189, 94, 31,194,231,243, 41, 33,100, 33,165,116,126, 81, 62,134, 97,110,223,185,115, +167,178,155,151, 15,188,236, 25, 4,206,121, 53, 93,155,189,140, 69, 76,196, 11,132, 62,184, 9, 23, 23, 23,165,171,171,235, 99, + 95, 95, 95,109,108,108,236,244,156,156,156,245,165,229, 81, 40, 20,222, 11, 14, 14,118,245,242,242, 66, 78, 78, 14, 98,146, 85, +152,112, 80,134,172,188, 87, 70, 12, 1,242, 80,175,146,143, 66,202,104,110, 58, 59, 59,107, 53, 26,205, 87, 25, 25, 25,165, 78, + 35, 34, 16, 8, 82, 31, 60,120, 96,229,233,233,137,252,252,124,154,150,150, 70,114,115,115,145,157,157, 77,142, 29, 59,246,113, +124,124,124, 67,111,111,111,226,225,225,177,176,122,245,234,121,177,177,177, 35,204,241, 1,219, 63,207, 79, 75, 8, 49,240,249, +252, 21, 35, 71,142,236,243,235,175,191,222, 62, 48,191,102,119, 74,169,182,224,129, 84, 6, 4, 4,156,172, 83,199,223,109,199, +242,218,171, 41,165,203,254, 5,183,215,176, 89,179,102,213,180,179,179,195,232,209,163,177, 96,193, 2,204,157, 59,183,250,232, +209,163, 71, 2,248,222,130, 70, 71,234,226,226,114,235,135, 31,126,240,107,222,188, 57,142, 31, 63,142,221,187,119,227,229,203, +151,122,111,111,111,126,227,198,141, 49,111,222, 60,116,232,208, 97,196,248,241,227, 91, 17, 66,234,155, 41, 62, 62,157, 55,111, + 94,247, 22, 45, 90, 96,232,208,161,234,243,231,207,247, 1,112,234,244,233,211, 31, 94,184,112,225,192,206,157, 59,165,223,126, +251,109,208,228,201,147, 71, 3, 88, 83,142,242,127,220,178,229,171, 57,148, 91,180,104,129,165, 75,151,118,168,136,208, 34,132, +136,236,237,237,143,109,223,190,189,158,143,143, 15, 6, 13, 26, 84,191, 79,159, 62,199, 8, 33,237, 40,165,102, 53, 72,238,238, +238,223, 29, 58,116,168, 90, 73, 61, 11,197, 65,173, 86,219,125,242,201, 39, 75, 0, 88, 36,180,118,237,218,133, 41, 83,166,160, +110,221,186,117,154, 52,105,178, 97,212,168, 81,232,213,171, 87, 91, 66,136, 51,165, 52,215, 28, 34, 62,159,239,221,165, 75, 23, +193,193,131, 7, 95, 89, 71, 90,182, 68, 80, 80, 16, 30, 62,124,136,203,151, 47,131,199,227, 65, 46,151,163,121,243,230,162,184, +184, 56,111, 0,101, 10, 45, 70, 44, 27,214,189, 75, 39,197,225,235,241, 48,176,122,124, 80,205, 26,141,253,156,240, 36, 38, 11, +193,143, 99, 96,208, 8, 97,109,103,143,166,173,218,219, 37,196,190, 28, 6,160,108,127, 45,177,108, 88,143,238,157,173, 14, 95, +139, 67, 70, 92, 40,125,126,243,215,179,186,252,220, 17, 0,112,251,143, 61, 27, 92,236,165,237,106, 52,248,128,215,186, 93, 55, +219,131,187, 19,134, 1,120, 43, 66,235, 66, 37,108,244, 18,164, 12,153, 54, 32,144, 10,108, 61,110, 42,116,186,181,198,109, 29, +128,246,211,103,205,106,242,217,200,145, 18,150,101,177,243,151, 95,178,238,223,185,243,164,180,209,126,107, 1,175, 62,221,187, +139, 21,214,214,248, 98,194, 4, 40,116,186,115,133, 85, 2,180,253, 98,234,212,230, 99,199,142,149,110, 88,248,249,237, 14,195, +191,105,192, 82, 74,138,235,166, 44,138, 51, 64,195,225,221,187, 67, 97,109,141,137, 19, 39,130,104,181, 39,141,219,142,242,113, +238,211,143, 3, 27, 15,232,218, 2, 4, 4,187,143, 94,198,243,200,228, 7,231,226,241,226, 61,121, 39, 91,230,163,101, 68,182, + 22,137,109, 59,247,196,157, 59,119, 0, 0,169,169,169, 72, 77, 77, 69,181,106,213,176,102,205,235,237, 87,121, 4, 12,203,178, +111,156, 19, 0,156,237,173, 49,168, 83, 35,254,229,251,187, 37,185,201,201, 18, 43, 43,171,252,247, 77,104,153, 66,175,215, 75, +188,189,189,145,149, 7,146,169,210, 89,165,236,121,101,241,119,232,119,222, 74,163,209, 48, 86, 86, 86, 80,171,213, 18, 51, 94, + 8,130,238,221,187, 79,221,187,119,175, 32, 52, 52, 20, 85,171, 86,133, 86,171,197,245,235,215, 99, 10, 38, 66, 6,165, 52,142, +199,227,197,177, 44, 91,189,110,221,186, 88,188,120, 49,252,252,252, 72,167, 78,157,166, 23,136,173,215, 30,238,248,248,248,239, + 70,141, 26,245,225,190, 3,191,218,109,236,155,135,172,204, 44,228,228,228,224,222,221,219, 72, 75,204,199,166, 77,155, 32,145, + 72, 9, 0, 97, 82, 82,162,112,210,164, 73,171, 61, 60, 60, 58,198,196,196,116, 41, 41,159,113,113,113,139,198,142, 29,219,116, +207,158, 61, 54,217,217,217,200,203,203, 71, 90,174, 12,143, 87,189,154,199,183,230, 23,143,177,110,237,122,166,118,101,185,131, + 74,165,194,231,159,127,190,210,205,205,173,121, 92, 92,220,240,146, 56, 99, 99, 99,111,140, 27, 55,206,121,231,206,157, 18,141, + 70,163, 53, 24, 12,200,203,203, 99,246,236,217, 51,189,114,229,202,182,155, 55,111, 38, 18,137,180, 96,223, 24,225,152, 49, 99, +246,186,184,184,236, 76, 72, 72, 24, 90, 86,119, 17,143,199, 91,181, 99,199,142,193,125,251,246, 85,196,199,199,251, 31, 58,116, + 72, 12, 32,175, 96, 23,215,118,237,218, 85, 94,190,124,185, 99, 64, 64,192,116, 66,136,128, 82,250,237,219,188,159, 28, 28, 28, +198,119,239,222, 29, 75,150, 44,193,145, 35, 71, 38,219,217,217,173, 92,176, 96, 1,220,220,220,198, 17, 66, 86, 89, 48, 81,239, +178,239,191,255,222,207,207,207, 15, 67,134, 12,209,156, 57,115,102, 22,128,223, 0, 68, 94,186,116,201,115,219,182,109, 93,247, +238,221,187,228,135, 31,126,144,172, 89,179,166, 90,207,158, 61, 87, 1, 24, 94,230,243,237,236, 60,169,127,255,254, 88,190,124, + 57,206,159, 63,223,147, 82,122,188, 96,211, 9, 66, 72,215,111,191,253,246,143, 57,115,230,224,251,239,191,159,104,169,208, 34, +132, 88,213,172, 89,243,171,142, 29, 59,226,210,165, 75, 8, 12, 12, 68,211,166, 77, 39, 19, 66, 86, 83, 74, 83,202, 33,178, 24, + 43, 43,171,189, 91,183,110, 13,172, 92,185, 50,190,249,230, 27, 76,157, 58, 21, 91,182,108, 9, 28, 52,104,208, 94, 66, 72,143, +162,207, 76,113, 80, 42,149, 86, 50,153, 12,211,167, 79,167, 47, 95,190, 76, 47,107,255, 74,149, 42,217,174, 92,185,146,216,218, +218, 42,205, 21,197, 18,137,164, 89,173, 90,181, 48,111,222, 60,156, 62,125, 26,115,230,204, 65,173, 90,181, 16, 25, 25,137,126, +253,250,201,102,207,158,221, 11,192, 86, 51, 95, 58, 74,123,123,123, 36, 37, 37, 65, 32, 16,160,121,243,230,248,237,183,223,160, + 86,171,225,228,228,132,140,140, 12, 52,106,212,200, 40,202,148,102,190,202,106, 57,216, 41,145,244, 40, 22,124,232,209,160,134, + 3,206, 61, 76,133, 86,199,194,201,222, 6, 9, 73,137,104, 82,203, 3, 26,141, 39, 40,101,107,153,195, 40,226, 49, 13,196, 18, + 41,210,178, 83, 16,251,248,124,170,214,160, 30,149,241,242,114, 52, 0,216, 85,109, 57,234,246,229,211,183,123,119,110,233,148, +147, 91, 9,132,178,141,222,198,243,216,219, 19,149,228, 18,254,144,163, 27,103, 18, 61,203,226,163,225,139, 26,118,116,134, 10, +137,128, 35,224,221,187, 95,191,102, 95,126,249,165,232, 89, 88, 24, 59,105,194,132,140,187,183,110,157,255, 29,184, 93, 26,103, + 14, 80,189, 93,187,118, 96, 0,252,126,234, 84,110, 10, 16, 3, 0,206, 64,165,110,159,124,210,114,214,140, 25,162, 23, 17, 17, +236,245,176,156,195, 47,146,232,226,102,118,184,191, 39,242,213, 62,165,193, 0,212, 54,242,158, 60,121,146,230, 21,228,163,117, + 37,140,235,208, 60,160,241,224,238, 45, 17,147,144,138,165, 63, 29,198,131,103,241, 39,237, 89, 12,124, 95,222,195,165, 69,176, +103,204,120, 96,254,146,166, 82,253,181,247,160,162, 2,230,239,224, 44, 14,239,163,208, 50,194, 56,121,179, 70,199, 66,163, 99, +141, 95,181,200,203,203, 51, 87,145,235, 78,158, 60,185,125,194,132, 9, 88,185,114, 37,158, 61,123, 6,161, 80,136, 90,181,106, +185, 18, 66,172,140, 22,152, 6, 13, 26, 56, 49, 12,131, 39, 79,158, 96,197,138, 21,248,244,211, 79,233,213,171, 87,183, 20,247, +194,160,148,222, 77, 75, 75, 91, 59,106,196,167, 25,233,137, 81,208,229,165, 35, 41,246, 5,212,185, 25,248,102,241,119, 80,233, +248, 72,200,212, 34, 33, 83, 11, 70,108,135, 13,155,183,242,106,214,172,217,145,207,231,119, 41, 37,159,215, 19, 19, 19, 55,143, + 25, 51, 38, 35, 33, 33,161,176,124, 26, 29,133, 70,247,250,253, 42,147,201,176,106,213, 42,101,141, 26, 53,186, 11, 4,130, 54, +165,112,198, 71, 71, 71,135,142, 25, 51, 70,147,152,152,136,204,204, 76, 28, 62,124,184,107,229,202,149,109,151, 44, 91, 73,114, +181,124, 36,100,104,145,144,161,133,200,202, 9,123, 15,252,202,243,241,241, 25, 32, 16, 8,154,150, 37,178,118,238,220, 57,184, +111,223,190,138,101,203,150,165, 29, 58,116,104, 29,165,212,244,130, 60, 89,181,106,213,190,189,123,247,102, 79,157, 58,213,110, +233,210,165,147, 9, 33,179,222, 98, 99,209,166,111,223,190,190, 44,203, 98,255,254,253, 15, 40,165,223,255,250,235,175,183,212, +106, 53,250,245,235,231, 93,208,141,100, 14, 79,195, 1, 3, 6,124, 30, 24, 24,136, 47,190,248, 66,123,230,204,153, 6,148,210, +149,148,210, 8,250, 10,145,148,210,213, 23, 46, 92,168, 59,126,252,120,117,163, 70,141, 48,116,232,208, 79, 9, 33,129,101,240, + 54,235,223,191,191, 31,203,178,216,179,103,207,125, 19,145,101,188,142,103, 15, 28, 56,112, 93,163,209, 96,224,192,129, 85, 8, + 33, 31, 90, 80,118,161, 88, 44,222,255,245,215, 95,219,196,198,198, 98,240,224,193,234, 39, 79,158, 96,254,252,249, 82,165, 82, +121,220,248, 12, 88, 2,177, 88,188,233,199, 31,127,236, 94,187,118,109,140, 25, 51, 70,179,126,253,250, 9,159,127,254,185,166, + 65,131, 6, 88,183,110, 93,119,145, 72,100,209,212, 34,113,113,113, 25, 33, 33, 33,246,101, 45, 49, 49, 49,137,102,150, 89,166, + 80, 40,174, 5, 4, 4,100,213,170, 85,235, 3,189, 94,143,144,144,144, 23,219,183,111,103,107,213,170,133,181,107,215, 98,233, +210,165,232,210,165, 11,120, 60, 94, 47, 75,242,154,155,155, 11,137, 68, 2,161, 80,136,224,224, 96,168,213,106,200,100, 50, 72, + 36, 18,240,120, 60,216,216,216, 64,161, 80, 0,102,142, 70, 35, 4, 52, 75,165,131, 64,192,128,207,176, 8,141,204,132, 86,199, + 66, 34,228, 65,192, 39, 0,101, 97, 35, 23, 64, 34,226,129, 33,132, 53,147, 19,153,185, 90,136,132, 12, 4, 66, 17, 97,244, 6, +105,225,203,145,111,144, 74,165, 34,226, 96, 45,134, 68,248, 47,154, 22,152,188,170,175, 97,128, 64,238,233,217,103,249,138, 21, +162,172,156, 28,244,236,217, 51, 45,226,214,173, 29,121,192,173, 86,101,212, 41,195,231,215,104,221,170, 21,130,239,220, 65,118, +122,250,115,224,149,115,188,200,205,173,239,170, 85,171, 68,121,249,249,232,217,163, 71,198,179,203,151,119, 70,231,224,168, 57, + 34, 11, 0,120, 66,161,139,145, 55, 51, 61, 61, 29,120, 21, 66,194,217,209,106,201,216, 1, 29,144,173,202,199,180,239,118,176, +119, 66,227,199, 93,138, 65,231, 95,227,144,249, 62,189,131, 9, 33, 35, 77, 23,179, 44, 90, 70,171,147, 57, 98, 69,173, 86,191, +113, 1, 84, 81,206,226, 68, 98, 69, 57,255,141,224,243,249,249, 79,159, 62, 21, 89,219,187,177,246, 10, 65,122,229, 79, 47, 43, + 1,192,206,138,159,169, 53,232,216,184,184, 56,136,197,226,124,115,184,242,243,243, 71, 16, 66,190, 1,224,207,231,243,143,110, +221,186,149,236,216,177,195,182,127,255,254, 97,132,144,216,128,128, 0,175,173, 91,183, 90, 3,192,234,213,171,233,222,189,123, + 59,224, 85,200,140, 18, 77,202, 9, 9, 9,243, 5, 2,193,213,177, 99,199,174, 17,137, 68,182,114,185,220,254,210,165, 75, 36, + 95, 75,209,112, 86,100,225, 72, 68,107, 41,131,139, 51,173, 49,114,228, 72,222,227,199,143, 23, 3, 56, 90, 10,231,116,177, 88, +124,233,217,179,103, 43,149, 30,245, 28,229, 94,179,148,141,103, 62, 1, 0,120, 57, 8,192, 20,180,139, 25, 25, 25, 72, 78, 78, +198,231,159,127,110, 27, 22, 22, 54, 29,192,185,146, 56, 99, 98, 98, 46,136,197,226,152, 71,143, 30,181, 22, 8, 4, 34,185, 92, +222,240,218,181,107, 36, 95,195,162,206,244, 72,164,229,188,202,167,157, 21, 31,183,191,118,198,184,113,227,248,207,159, 63,255, + 14, 64,139, 98, 27, 51,134, 89,106, 42,178,166, 77,155,118, 15, 64, 21, 66,200,107, 93,163, 6,131,129, 12, 28, 56,240, 33,128, + 90, 83,167, 78,181,163,148, 78, 38,132,164, 81, 74, 55,254,211,247,146,181,181,245,146, 81,163, 70, 97,239,222,189, 72, 79, 79, + 95, 5, 0, 89, 89, 89,223,239,218,181,107,207,136, 17, 35,240,203, 47,191, 44, 33,132,252,110,134, 85,235,163,126,253,250,225, +196,137, 19,248,227,143, 63,190,162,148,134,148,240,140, 62, 35,132, 76, 63,116,232,208, 15,253,251,247,199,207, 63,255,220, 17, + 64,105, 14,178,237, 58,116,232,128,227,199,143, 35, 53, 53,117, 93,113, 59,100,100,100,172, 63,124,248,112,147, 14, 29, 58, 96, +241,226,197,237, 0,156, 53,163,129,244, 83, 42,149, 91,127,248,225,135,134,181,107,215,198,128, 1, 3,242,181, 90,109,199,169, + 83,167, 30,217,189,123,183, 98,251,246,237, 31,140, 28, 57,242, 6, 33,228, 51, 74,233,117,179, 94, 58, 60,222,183,107,214,172, + 25,222,186,117,107, 76,158, 60, 89,127,242,228,201,110,148,210, 83,132,144,176,105,211,166, 29, 91,177, 98, 5,111,249,242,229, +195,121, 60, 94,178,193, 96,120, 91,226,250,235,213,171, 87, 55,105,223,190, 61, 94,188,120,129,235,215,175, 67,171,213,254,114, +237,218,181,139,213,171, 87,255, 90,163,209, 28,145,203,229, 67, 20, 10, 69, 64,189,122,245, 62, 36,132,200,204,241,211, 35,132, +100,132,133,133,201,157,156,156, 32, 16, 8,112,255,254,125, 56, 57, 57, 1, 0,146,146,146, 80,171, 86, 45,240,120, 60,100,100, +100, 0, 48,239,101, 75, 8,243, 32, 44, 34,174,138,157, 66, 14, 24, 36,184,251, 36, 6,142, 14,182, 48, 16, 6, 9, 9,241,168, +231,235, 1, 66, 8, 50, 82, 19, 64, 8,121,104, 14,167,129,178,193, 81,113, 73,238,246, 10, 49,106, 55,105,111,127,237,247,228, + 29,202,170, 45, 70,242,121,132, 39,150, 88,111, 28, 62,116,168, 3,203, 82,100,164, 38,130,207, 48, 55,223,198, 5,218, 31,133, +232, 86, 85, 37,119,219, 15,255,166, 30,161,160,121, 90,108,255, 57, 17,233, 50,160,222,234,217,179,109,236, 29, 28, 48, 96,192, + 0, 54, 53, 54,246,140, 10, 48, 43,176,114,149,234,213,157,173, 20, 10, 92,185,114, 5, 60, 32, 28, 0,182, 0,126, 75,167, 77, +179,119,114,113,193,167,195,135,179,137, 81, 81,103,243,204,232,210,125,141,183,106, 85,129,145,151, 41,224,141,231, 97,194,212, +110,129, 98,185, 84,140,111, 55,252,138,232,148,220, 61,215,226,177,225,125, 52,118,148,105,209, 42,201,249,236,149, 83,181,172, + 84,177, 34,145, 72, 10,173, 41, 22,124,233,189,113,206,178,240,119,112,190, 69,229, 60,147, 16,114,136, 16, 50, 51, 58, 58, 58, +116,248,240,225, 90,189, 86,157,125,245,155, 42, 51,238, 44,174, 60,230,218,124,215, 49,191, 77, 80,206, 80,101,166,101,175, 94, +189, 90, 23, 29, 29, 29,106,122, 76, 25, 55, 75, 20,165,244,248,182,109,219,214,239,223,191, 31,181,106,213, 66, 72, 72,136, 83, +110,110,110,253,135, 15, 31,218,249,249,249, 97,199,142, 29,216,187,119,239, 74, 74,233,233,210, 68,150,137,181,237, 76,124,124, +188, 79,100,100,100, 53, 27, 27, 27,157,141,141, 13,138,142, 68,204,202, 99,145,154,145, 9, 59, 59,123, 88, 91, 91,123,151,197, +169, 86,171,143,199,199,199,215, 96,109,125, 91,214, 72, 89,149, 25,252,109, 37, 4,127, 91, 9,199,167,187,193,213, 70,132,244, +244,116, 36, 39, 39, 35, 57, 57, 25,132, 16,232,116,186,154,102,112,190,140,139,139,251, 41, 42, 42,234,144,179,179, 51, 20, 10, + 5, 40,128,132, 12, 29,238, 45,247,195,189,229,126, 72,200,208, 33, 43, 59, 27,149, 43, 87,134, 66,161,168, 85, 82,151,145,187, +187,123,167,190,125,251, 42, 0,160, 64, 64,181,165,148,142, 41,102, 25,173,215,235,155, 27,247,157, 50,101,138, 29,128, 14,255, +240,253,196, 35,132,140, 29, 49, 98,196, 7, 18,137, 4,107,215,174,125, 9, 96,167,177,173, 95,191,126,253, 19, 0,152, 48, 97, + 66, 0,128,201,164,132, 72,208, 70, 8,133,194, 6, 53,107,214,196,181,107,215, 0,224,215, 50, 78,127,224,234,213,171,168, 94, +189, 58, 36, 18, 73,195, 50,246,245,174, 84,169, 18,158, 60,121, 2, 0,119, 75,216,231,238,147, 39, 79, 80,169, 82, 37, 16, 66, +188,205, 40,123,247,246,237,219, 63, 56,119,238, 92,195,102,205,154, 97,248,240,225,154, 27, 55,110,116,162,148, 94,188,123,247, +110,155,129, 3, 7,230,214,168, 81, 3, 23, 46, 92,240, 27, 56,112,224, 85, 30,143,247,141, 25,156,159, 46, 92,184,112,230,199, + 31,127,140,133, 11, 23,210,125,251,246, 13,160,148,158, 42,120,190, 78,238,217,179,103,240,162, 69,139,104,143, 30, 61,176, 96, +193,130,153,132,144, 49,101, 88,135, 50, 13, 6, 3,114,115,115,205, 50,201,155,187,191,131,131,195, 71,237,219,183,199,156, 57, +115,224,238,238,142, 35, 71,142, 80, 0, 71, 41,165,151,212,106,117, 75, 74,233,138,220,220,220,223,174, 93,187,134,118,237,218, + 9,241,250, 20, 35, 37, 66,175,215, 71,156, 59,119, 78,107,111,111, 15, 15, 15, 15,120,122,122, 34, 55, 55, 23, 25, 25, 25,168, + 85,171, 22,154, 52,105,130,220,220, 92, 28, 61,122, 84,155,145,145, 97,214,128, 21,189, 38,119,251,233, 99, 7, 51,237, 21, 98, +120, 56, 41, 81,217,221, 14, 57, 25, 41, 72, 78,136, 67,131,154,158,104,213,160, 50, 82, 50, 53, 56,121,244, 96,122,118,182,106, +187, 89,189, 0,106,213,214, 51,191, 31,201,180, 85, 8,225,227, 27,128,129,195, 39,212,171, 87,191,241,233, 70,141,154,159, 92, +182,228,219, 58,109,155,214, 36, 49, 41,249, 56,113,244,215,244,204,172,172,173,111,163,173, 95, 0,240,242,149, 53, 46,174, 59, + 20,252,147,127,199, 17, 63,133,198, 96, 21, 0,232,120, 60,191, 78, 31,125,132,152,152, 24, 28,220,191, 63, 94, 5,220, 55,151, + 79, 42,149, 50, 0,144,153,153, 9,241,171,217, 66,160, 7,124, 59,119,238,140,228,148, 20,236,218,185, 51,249, 4,112,199,146, +124,118, 5, 68, 50,233, 43,131, 96,102,102, 38, 8,144, 5, 0,132,143, 78,141,106, 85, 71,114, 90, 22,206,221, 12,205,169,156, +135,207, 75,227,121, 87, 29,225, 75,243,209, 42,203, 30,154, 50,121,242,100,136,197, 98,184,186,186, 22,138, 35,163, 88, 17,137, + 68,112,117,117,133, 94,175,199,158, 61,123, 0,160, 84, 31, 6, 6, 80,119, 27,179,152, 85,235,168, 74, 32, 16,188, 17,206, 2, +203,129,186,231,180,159,217,223,175, 22, 63, 40,166, 60,156,239, 0, 26, 21,196,196,106, 68, 41, 77,143,136,136,136,233,211,179, + 91,102,100,216,163,132,220,140,184,248,172,212,232,248,232,151, 15, 19,102, 77,159,156, 25, 19, 19, 19, 93, 16, 75,171, 81, 92, + 92, 92, 55, 0,230,250, 26, 76,238,211,167,207,143, 35, 70,140,160,247,238,221, 3, 0, 4, 7, 7, 99,232,208,161,116,240,224, +193,171, 0,204, 40, 71,190,115,243,242,242, 94,179,134,104, 13,108, 97,151, 95, 86, 86, 22,226,226,226,160,209,104,204, 86,196, +207, 78, 46,127,154, 22,113, 91, 23,224, 37, 71,128,151, 28,126,149,100, 32,250,156, 66,145,149,156,156,140,196,196, 68, 0,200, +183, 32,159, 89,106,181,250,181,124,154,118, 77,102,101,101, 33, 33, 33, 1, 6,131, 65, 83,194, 67,199,198,198,198,158,220,187, +119,111, 54, 0, 44, 91,182, 44,141, 16,242, 7, 33,228,199, 98,150, 13,124, 62,255,138,113,223,229,203,151,167, 1, 56,254, 15, +138,172,143,107,215,174,157, 62,115,230,204,181, 19, 39, 78,196,134, 13, 27, 16, 31, 31, 63,131, 82,170, 55,150, 37, 37, 37,101, +218,186,117,235, 48,108,216, 48,204,157, 59,119,121,253,250,245,179, 8, 33, 37,250, 87, 56, 58, 58,122,240,249,124,220,185,115, + 39,139, 82,250,162,140, 6, 42,225,206,157, 59,137,132, 16,184,186,186, 86, 45,109, 95, 59, 59,187,106, 10,133, 2,177,177,177, + 64,193, 23,115, 49,136,136,139,139,163, 34,145, 8,110,110,110,213,203, 42,191,173,173,237,180,159,126,250,137,255,232,209, 35, +180,109,219, 54,230,194,133, 11,237, 40,165,231, 11,242,118, 39, 56, 56, 56,176, 77,155, 54, 79, 79,159, 62,141,239,190,251,142, +212,173, 91,119, 76, 89,156, 94, 94, 94,163, 63,253,244, 83,172, 89,179, 6, 27, 55,110, 28, 67, 41,221, 95,164,204,187,215,173, + 91, 55, 97,227,198,141, 24, 62,124, 56,188,189,189, 75,245, 85,137,140,140,156,222,186,117,235,224,103,207,158,153, 53,227,129, + 57,251, 19, 66,218, 52,110,220,184, 90, 94, 94, 30,182,110,221,250,162, 90,181,106,183,246,239,223, 63,153, 82, 90,244,133,253, +219,193,131, 7, 49,104,208, 32,212,173, 91,119, 43, 33,164,191, 25, 47,157,184,200,200,200,148,251,247,239,179, 60, 30, 15, 30, + 30, 30,232,212,169, 19,250,245,235,135,186,117,235, 34, 41, 41, 9, 23, 47, 94,100,195,194,194, 82,204, 13, 92,154,242,244,220, +145,240,240,167, 87,238,220,184,168,227,243, 24,120,186,218,225,147,160,122,248,172, 87,115, 52,240,115, 71,100, 82, 30,206,158, + 61,173, 11, 15,127,113,205,156, 17,135, 70,206,208,144,251, 87, 31,221,185,172, 23,240, 9,252,124,107, 96,206,172,105,182,139, +230, 77,183,169, 81,213, 19,247, 95,102,226,244,169, 19,186,184,152,232,115,111,107,196,225, 5, 64,104, 37, 38,114, 30,195,192, +192,136,115,121, 5,129,140,107,249,251,251, 56,187,184,224,216,177, 99, 96,128,199, 22,241, 89,189,234, 5,207,201,201,129,145, +175,154,175,175,175,167,151, 23,142, 31, 59, 6, 30,203, 62,110,101, 97,128,209, 39,128,204,148,151, 0,249,159, 87,130,162, 90, + 37, 39, 95, 91,165, 28, 55,238, 63,135, 90, 71,111,238, 76,135, 10,239, 33,138,118, 27, 90,210,117,184,108,195,134, 13,141,126, +250,233,167,118,147, 39, 79,182, 26, 50,100, 8, 36, 18, 9, 84, 42, 21, 60, 60, 60, 96, 48, 24,240,251,239,191,227,246,237,219, + 57, 44,203,158, 70,145,176, 1,132,144, 32,211, 88, 27,191,135, 81,233,171, 32,152,170, 70,135,122,247,126, 35,156, 0, 96,245, +156,181, 78,173,172,217,177,122,255,229, 30,187, 78,222, 33, 95,244,111,197, 52,240,173, 4, 0,112,118,118,134,181,181,181,197, +156,111,160,210,255,118, 78,211,110,221,248,248,248, 39,132,144,164, 17, 35, 70,248, 25, 29,223,197, 98,113,126,116,116,116,168, + 49, 96,105,209, 99,202,202,103,193,200,184,207, 9, 33,135, 51, 51, 51, 79, 78,157, 58, 21,139, 22, 45,194,145, 35, 71, 2, 41, +165, 87,202, 83,118, 74,169,193,219,219, 59,227,230,205,155,206,213,107,214, 71, 21, 39, 1, 90,126,245, 12,148, 82,216,203, 40, +178, 51,210,112,247,238, 29,100,103,103,223,176, 36,159,110,110,110, 25, 73, 73, 73, 14, 78, 78, 78, 72, 75, 75, 67, 74, 74, 74, +161,200, 74, 79, 79, 71, 90, 90, 26, 37,228,245,152, 45,101,112,230, 86,171, 86, 77, 21, 26, 26, 42,114,174, 84, 29, 85,157,132, +104, 60,235, 9, 64, 41, 60,237, 24,100,103,101,224,218,181,107,200,204,204, 60, 95, 18, 39,203,178, 95, 14, 28, 56,144, 7, 96, +240,212,169, 83,237, 0,212,157, 54,109,218,233,162, 35, 11, 5, 2,193,247, 59,118,236,168,101,236, 98,156, 62,125,250, 74, 74, +233, 79,255,212,189,100,111,111,255,229,177, 99,199, 20, 90,173, 22,171, 87,175,198,202,149, 43,183, 80, 74,255, 87,164, 62,142, +241,120,188,117, 12,195,140, 29, 55,110, 28, 70,141, 26, 37,251,224,131, 15, 38,155, 88,189, 94,227,140,141,141,157,211,160, 65, +131,185, 73, 73, 73,102, 57,246, 63,123,246,108,100,131, 6, 13,230, 36, 37, 37, 45, 45,237, 26,201,229,114,185,193, 96, 64,120, +120,120, 58,165, 52,179,132,107,151, 95,163, 70,141, 88,131,193,224, 33,147,201,236,202,186, 63,211,211,211,191,253,224,131, 15, +230, 39, 38, 38,158, 2,240, 77,209, 80, 37,148,210,123,132,144,128,137, 19, 39,142, 95,178,100, 73,143,132,132,132, 61,101,113, + 70, 70, 70,126,219,166, 77,155,175,158, 62,125,186,173,164, 46, 96, 74,233, 90, 66,136,118,199,142, 29, 99,194,195,195, 23,151, +198, 73, 41, 61,138, 82,186,210,139,225, 46,118,127, 83, 78, 30,143, 55,109,201,146, 37,204,134, 13, 27, 64, 41, 93,174,215,235, + 75,202,231,125, 30,143,183,189,121,243,230, 67,246,239,223, 47, 9, 8, 8, 24, 5, 96,119, 89,247,167, 90,173,190,126,245,234, +213, 38, 17, 17, 17, 14,109,218,180, 17, 26, 63, 80, 50, 50, 50,112,244,232, 81,109, 88, 88, 88, 74,110,110,238,117, 75,218, 16, +189, 38,171,255,213,179,135,118, 71, 60,123,216,180,117,199,238,182, 26,173, 7,196,169, 60,100,164, 38,224,247,163, 7,211,195, +195, 95, 92, 83,169, 50,250, 91,194,169, 85,103,246,187,118,238,240,158,152,240,208, 38, 45,219,116,178,205,215,120, 65, 44,100, +144,154, 24,139,223,143, 29, 74, 11, 15,127,121, 41, 95,167, 30,250,182,218,121,158, 55,190,225, 37,220, 30, 49,186,107, 61, 72, +109, 61,238, 10,128,213,205, 1,169,131,179,179,176,224,217,129, 21, 16,105, 46,103, 34, 32,170, 94,208, 75,165, 82,169, 32, 0, + 52,195, 0,129,163,163,163, 20, 0,158, 62,125, 10, 25, 16,101,105, 62,115, 0,185,204,132,151, 1, 84,169,124,184, 87,179,150, + 19, 0,136, 73, 72,133, 70,135, 43,120, 79, 97,180,104, 21,231, 20, 95, 86,240, 69, 22,192,117, 66,200,157,165, 75,151,182,252, +241,199, 31, 91, 77,154, 52, 73,244,209, 71, 31,225,214,173, 91, 56,115,230,140, 70,173, 86, 95, 0,112,209, 56, 92,221,140,204, +188,113,206,253,175,246,235,211,200,157,216,105,217,188, 95,231,252,120,162, 69,101, 23, 27,170, 55,176,228,225,195,135,184,122, +245,170,197,156,239,200,133, 5,128, 70,132,144, 67, 5, 73, 55,139,134,112, 40,232, 46,108,100, 98, 5, 43,207,169,238,242,249, +124,234,235,235, 75, 10,166,167, 9,169, 72,190, 19, 18, 18, 6, 76,159, 62,253,212,190, 3,191,242, 15,142,147, 34, 51, 35,243, + 85, 3,156,153,129,212,196, 56,156, 61,123, 86,155,156,156, 60,202, 18,206,228,228,228,207,251,247,239,191,111,247,238,221,118, +233,233,233,133, 66, 43, 61, 61, 29, 44,203, 98,203,150, 45,201,137,137,137,179, 45,225,140,143,143, 31, 62,117,234,212, 3,187, +246, 28,224,159,158, 97,139, 28, 99,244,249,220, 76,164, 38,197,227,200,145, 35,234,148,148,148,137,165, 92, 31, 3, 33,228,139, +129, 3, 7,194, 40,182,174, 93,187, 54,129, 16,178,214,248, 50, 39,132, 84,249,242,203, 47,251,155,248,113,173,252,167, 71, 29, +166,166,166, 46,106,210,164,201,202,228,228,228,151, 90,173,118, 63,165,180,216, 40,253, 6,131, 97, 28, 33,228,234,218,181,107, +251, 57, 56, 56, 56, 39, 36, 36, 44,177,244, 69, 95,209,253,163,162,162,102, 54,104,208, 96, 86, 82, 82,210,146,210,246,123,254, +252,249,216,130,253,150,154,113,238, 99, 0,142,149,177,143, 30,175, 66, 91,124,111,102,121, 14, 1, 56,100,102,227,188,233,109, +180, 31, 6,131, 97, 89,237,218,181, 37,122,189,254,116, 89,254,128, 44,203,142,156, 52,105, 82,204,148, 41, 83,234, 25, 12, 6, +115,235, 64, 7,224, 18, 33,196, 45, 37, 37,197, 27,128, 13, 0,240,249,252,140,140,140,140,114, 77,193, 83, 16,241,189,139,131, + 79,187,174,251,183,173, 25, 70, 89, 67, 93, 66, 8,120, 12,239, 94,118,142,106,171,185,150,172, 98, 56, 59, 59,248,180,235,154, + 24, 27,249, 41,101, 13,117, 1,194,242,249,204,253,236, 28,213,230,228,208,211,111,109, 10,158, 33,238,112,230, 17,140, 59,245, +243, 87, 4, 0,218,125,250,117,189,202, 54,176,210,103, 32, 3, 5,109,121,124,124, 60,108,129,116,115, 57,101,128, 94, 91,224, + 19,157,158,150, 6, 25,144, 23, 15,240, 10,252, 46, 73, 98, 66, 2,172, 44,224, 43,252, 96, 4,180, 69,120, 51, 1,136,141,238, +156,105, 89,185,128,249,113, 13,223, 73,139, 86,209,223,133,130,139, 82,106,246,130, 87,243,235,125, 2, 96,113,193, 90, 94,198, +254, 65,111,131,179,137, 43,124,130,170,145,208, 78,190,252, 52, 0,189,222, 4,167,165,203,223,205, 9, 96,155, 70,163,161,249, +249,249, 84,165, 82,209,156,156, 28, 10,224, 80, 49,199, 28,138,139,139,163, 49, 49, 49, 52, 42, 42,138, 70, 68, 68, 80, 0, 59, + 45,205,167,181,181,245, 79,189,123,247, 54, 8, 4,130, 53,111,162,236,118,118,118,139, 27, 55,110,172,253,225,135, 31,232,111, +191,253, 70, 55,111,222, 76,199,141, 27, 71,107,213,170,165,182,177,177,233, 95, 30, 78, 23, 23,151, 57,190,190,190,169, 91,182, +108,161, 59,119,238,164,171, 86,173,162,179,103,207, 54,120,120,120, 36, 40, 20,138, 14,229,225,116,114,114,218,212,162, 69, 11, +237,166, 77,155,232,233,211,167,233,174, 93,187,232,151, 95,126, 73,253,252,252,212,114,185,188,167, 57,156, 0,120,124, 62,127, +197,232,209,163, 19,220,220,220,142, 21,217, 38,243,247,247,191, 53,112,224,192, 56, 0,211,223,151,251,147,227,228, 56, 57,206, +138,115, 14,118,135, 91,187, 42,208,211,139, 95, 81,122,241, 43, 26, 84, 5,236, 0, 55,184, 83,128, 39, 19, 10,251,181, 10, 12, + 92, 46, 4,250, 81,128, 87,236, 82, 92, 62, 1,158,132,199,235,213,188,113,227,229, 66,160,191,113, 95, 9,143,215,171, 85, 96, +224,114, 1,143, 55,168, 68,190, 82, 56, 41,192, 19,242,249,211,155, 55,109,186,130, 15,204, 50,166,125, 88,133, 60,254,178, 99, + 37, 26,232, 69,158, 15,114,130,172, 52,206, 18,234, 99,228,155,174,227,127,122, 41,239,141,192,127,211, 55,225,187,194,249, 47, + 18, 90,213, 11,186,109, 14,153, 44, 51,139, 57,102,102,145,125,182, 1,168, 94,206,250,148,190,201,178, 3,168,237,224,224,112, +162,122,245,234,201,149, 43, 87,142,179,181,181,221, 13,192,163,130,156, 1, 46, 46, 46,191, 56, 59, 59, 63,115,117,117,189,239, +224,224,240, 61, 0,199,138,112, 10, 4,130,198,206,206,206,231,189,189,189, 51,188,188,188, 18, 29, 28, 28,246, 0,112,182,148, + 19,128, 43,138,105, 84, 0, 8, 1,184,114, 47, 29,142,147,227,228, 56,139, 10,152,246, 85,177,164, 93, 21,232,219, 85,129,161, +189, 55,190, 55, 21, 40, 93, 0,105,121, 69,209, 80, 64, 92,116,255, 50,249,202,224,164, 0,175, 25, 96, 85,244,152, 78, 30,240, + 55,135,243, 93, 22, 90,198,124, 22,180,243, 35, 77,243,205, 47,143,137,204,232, 36,251,134,187,193,222, 9,206,127, 81,183,225, +115,160,236, 96,111,166, 17,228,223,192, 57,243,222,112, 25, 30, 0,248,232, 13,115, 62, 2, 48,248, 77,114,106,181,218, 27, 48, +115,222,183, 50,242, 22, 95,138, 47, 92, 60, 56,112,224,192,225,245,198,193,112, 18,152,209,206,135,172,230, 27,192,156,120, 65, + 99, 77, 55, 31,249, 51,240,177, 69,156, 0,176,181,152,233,121,202,197,103,194, 9, 0, 87,128,191,204,238,112,172,130,238, 38, +239,216,187, 57, 30,192, 38,139,226,104,113,224,192,129, 3, 7, 14, 28,222, 30, 78, 63,165,220,135,216,191, 31,199,138,204,113, + 88,232,247, 73, 0, 4,149,160,202,204, 30, 73, 65, 8, 9, 42,135,234, 59,195,113,114,156, 28, 39,199,201,113,114,156, 28,231, +127,139,211,132,187,164,129, 21, 79,138,240,189,149, 1, 35,111, 10,196,252,105,203,202, 65,254,142,134, 77,224, 56, 57, 78,142, +147,227,228, 56, 57, 78,142,243,159,229,124,167,197,212,235,214,172,215, 4, 34,215,117,200,129, 3, 7, 14, 28, 56,112,224, 80, + 1,148,102,117,227,132, 22, 7, 14, 28, 56,112,224,192,129, 67, 5, 64, 8,113,197,171, 41,170,142, 21,172, 57,139, 22, 7, 14, + 28, 56,112,224,192,129,195, 27, 66,103, 74,233,166,226, 34,195, 51, 92,221,112,224,192,129, 3, 7, 14, 28, 56, 84, 12, 70, 63, + 45, 75,231, 58,228,192,129, 3, 7, 14, 28, 56,112,224, 80, 10, 74,243,209,122,109,212,225,177, 99,199,104,231,206,157, 9, 87, +101, 28, 56,112,224,192,129, 3,135,183,129,119, 81,139,152, 88,176,142, 21, 13, 78,205, 89,180, 56,112,224,192,129, 3, 7, 14, + 28, 42, 0,163, 69,171,160,219,240,181, 52, 78,104,113,224,192,129, 3, 7, 14, 28, 56, 84, 0,165, 89,180, 24,224,149,153,142, +171, 38, 14, 28, 56,112,224,192,129,195,219,194,187,172, 69, 40,165,155, 10,150,191, 76,151,100, 28,117,216,186,160,128,173,185, + 75,205,129, 3, 7, 14, 28, 56,112,120, 11,120,103,181, 8, 33,196,181,160,219,208,245, 47,219,254,206, 41,120, 56,112,224,192, +129, 3, 7, 14, 28,222,119, 24,227,103, 21, 23, 71,139, 19, 90, 28, 56,112,224,192,129, 3, 7, 14, 21, 20, 90, 69,211, 10, 29, +228, 57,161,197,129, 3, 7, 14, 28, 56,112,224,240,247,224,111,141, 12, 79, 8, 9,226, 56, 57, 78,142,147,227,228, 56, 57, 78, +142,147,227,124,223, 97,140, 8, 95,212,186,197,133,119,224,192,129, 3, 7, 14, 28, 56,112,168,160,200, 50,245,205, 50,253,207, +205,117,200,129, 3, 7, 14, 28, 56,112,224,240, 55,129,179,104,113,224,192,129, 3, 7, 14, 28, 56, 84, 0,198, 17,135,166,255, + 57,161,197,129, 3, 7, 14, 28, 56,112,224,240, 6,197, 86,113,233, 92,215, 33, 7, 14, 28, 56,112,224,192,129, 67, 5, 80,212, + 1,222,244, 63, 1, 16, 84,130, 50, 59, 99,193, 9, 44, 30,125, 80, 22, 63,199,201,113,114,156, 28, 39,199,201,113,114,156,239, + 31,103, 89,220,150,232,143,127,147,208, 42,201, 25, 30,148,210,191,109, 1, 16,196,113,114,156, 28, 39,199,201,113,114,156, 28, + 39,199,249, 62, 47, 0, 92, 1,140, 52, 89, 92,141,219, 56, 31, 45, 14, 28,222,117, 28, 32, 60,164,251,122,131, 82, 55,240, 68, +241,136,127,240, 2,243, 40, 91, 97,206, 68,127, 47, 72,117,206,208, 75,146,145,120,255,101,133, 57, 57,112,224,192,225, 61, 69, +193,100,210,197,250,104,113, 66,139, 3,135,119, 29,201,126, 62,224, 99, 49, 24,184,130,106,195,224,232,191, 24,192,195, 10,115, + 10,217,111, 96, 96, 60, 64,181, 79,225,228,187, 4, 64, 8, 87,217, 28, 56,112,224, 96, 25,254,113,103,120,129, 64,144, 72, 8, + 97,197, 98,241,193,226,102,185,230,192,225, 77,129, 16,226, 42,149, 74, 15, 18, 66, 88,161, 80,152,248, 94, 22,114, 71,109, 25, + 24,195, 71, 26, 29,235,254,251,131, 12, 39,149,218,224, 3, 70,223, 9, 63,251, 88, 85,136,147, 79,218,231,107, 89,207,157, 55, + 85,206,185, 26,125, 77, 80, 84,140,243,207,107, 98, 35, 18,137,126, 39,132, 56,112,119,232,251, 9,127, 66, 62,104, 40, 16, 76, +169, 73,200,135,132, 16,194,213, 8, 7, 78,104,253,195,208,235,245, 78,209,209,209,100,243,230,205,221,172,173,173,195, 4, 2, +193, 76, 66,136,240,191, 82,225, 10,133,226,170, 82,169, 76,180,177,177, 73, 84, 42,149,119,202, 74,127, 79, 5,144,143,147,147, + 83,164,189,189,253, 83,211,116,167,186, 61,154,213,104, 49,100,158, 67,192,199,173, 42,200, 47, 20, 8, 4, 51,149, 74,101,216, +166, 77,155,186,133,134,134, 18,157, 78,231,244, 94, 86,102, 62,235, 12,134,215,230, 81,188, 74, 22,159,165,115, 14,142, 80, 41, + 0, 94,107,104, 80,254,143,152, 76,214, 25,160, 31,222,139,201,147, 95, 77,115,116,190,244, 66,109, 13,134,105,131,124,226, 82, +225, 6,135, 97,198,176, 44,219, 78, 40, 20,126,193, 53,191,239, 39, 68, 12,211,252,106,183,110,223, 76,175, 83,103,188, 31,208, +181, 56,177, 69, 94, 97, 66,205,154, 53, 79, 16, 66,250,189,193,182,229, 59, 63, 63,191, 88, 66,200, 68,238, 74,112,248,135,223, +107,245,141, 31,248, 5,211,240,184, 90, 44,180,122, 87, 33,205, 7, 84, 37, 23,250, 86, 33,217,253,170,146,156,193, 85,201,229, + 94, 85,200,135,229,201,144,135,135, 7,154, 53,107,198,139,138,138,146, 78,156, 56,113,158, 88, 44, 14, 39,132,116, 40, 15,151, + 76, 38,187, 45,151,203,163, 5, 2,193,107,121,145,203,229,183,173,172,172,162, 5, 2, 65, 91,211,116,107,107,235,171, 74,165, + 50,209,218,218,250, 78, 9, 66,232,182, 82,169, 76, 84, 40, 20,183, 77,211, 5, 2, 65, 91,133, 66, 17, 99,109,109, 93, 52,253, + 67,107,107,235,232,162,233, 37, 65, 32, 16,120, 68, 71, 71, 59,197,196,196, 56,137, 68, 34,103,211,244,168,168, 40,167,232,232, +232,215,210, 45,129, 64, 32,248,208,202,202, 42, 90, 46,151,223, 46, 46,189,104,153, 74,130, 73,221,125,104, 78,186,165, 34,171, +125,251,246,151,227,227,227, 61,109,108,108,108, 76,183,217, 41,109, 58,252,178,101,221,228,238,157,218,143,113,242,255,164,118, + 57,249, 59,136,197,226,240, 73,147, 38,205,139,137,137,145, 54,110,220,152, 39, 20,190,167, 58,254,128,191, 16,132,109,201, 82, +234,248, 56, 54,223,177,115,183,222,252,187,209,121,142, 58,131,193, 14,224,181,198,182,202,226,114,113,242,117,129, 44,165,206, +127, 68, 8, 28,219,244, 25,207, 59, 27,193,119,212, 25, 12,246, 96,208,170, 92,156,127, 94, 27, 1,143,199,155,188, 98,197, 10, + 6,192, 56, 66,136,232,191,212, 16, 55,118, 39,238,109,171,243,111, 54,112, 35,205,223, 96,227, 30, 32,151,203,111, 19, 66,124, +254, 45,229,212,176,236,147, 61, 47, 95,158, 28, 84,173, 90,151,233,117,234, 12, 43, 42,182, 10,126, 79, 95,178,100,201,224, 71, +143, 30, 57, 86,169, 82,101, 20, 33,132,121, 3,117,177,106,201,146, 37,211, 30, 61,122,228,230,237,237,189,224, 77,112,114,248, +119,105,120, 0,109, 0,116, 6,208, 22, 64,163,130,223, 13, 11,150,206,120, 21, 69,193,116,221,176,224, 88,227,246,198, 37,112, +116, 46,230,184,134, 38,233,166,255,139,254, 54,162,126,193,186,115,193,104,195,206,133, 91, 40,165, 56,122,244, 40, 53, 93, 23, + 93,250,122, 99,254,248,102,238,170,199, 71,118,209,156,232,151, 52, 61,244, 46,189,187,233, 91, 58,190,161,163,106, 64, 21,124, +103,161,103, 62,165,148,210,157, 59,119,210,179,103,207,210,140,140, 12, 26, 18, 18, 66, 27, 53,106,148, 39,147,201,254, 0,224, +109, 9,159, 66,161, 72,252,227,143, 63,104,251,246,237, 51,173,172,172,150, 3, 96, 40,165,176,182,182, 78,188,114,229, 10,109, +223,190,125,166, 66,161, 88, 5,128, 71, 41, 69,207,158, 61,147, 40,165,212,209,209, 49,174, 56,190,238,221,187,167, 83, 74,169, + 82,169, 76, 44,200, 47, 79,161, 80,172, 26, 59,118,108,206,173, 91,183,168,173,173,173, 49,157,177,182,182, 94, 62,110,220,184, +156,224,224,224,194,244,178, 22, 59, 59,187,104,131,193, 64,143, 28, 57, 66,157,156,156, 10,243, 96,107,107, 27,109, 48, 24,232, +161, 67,135, 74,204, 91, 41,117,202, 88, 89, 89, 45, 27, 52,104, 80,118, 68, 68, 4,181,183,183, 79, 52, 73, 95, 62,100,200,144, +236,168,168, 40,234,224,224, 96, 86, 30,237,237,237, 19,175, 94,189, 74,123,244,232,145,101, 90,167,246,246,246,137,215,174, 93, + 51,166, 47, 51,166,151,182,184,185,185,141,114,114,114,138,115,114,114,138,179,177,177, 89,228,234,234,154,144,156,156, 76, 41, +165,180,106,213,170, 73,148, 82, 56,214,249,164, 89,245,230,131,231, 57, 5,116,155,180, 97,255,181, 27, 23, 31,166, 38,215,105, + 55,102,153,178, 78,119,165, 5,117,224, 45,145, 72,254,104,217,178,101, 94, 68, 68, 4,205,201,201,161,183,111,223,166,151, 46, + 93,162,143, 31, 63,166, 5,247,221,251, 53,210,101,157,191, 7,221,232,187, 39,100,174,103,232,197, 37, 29,117, 52,226, 44,221, + 53,204, 81,119, 97,146,123, 24,253,209,239,127,116, 99,205, 74,229,226,252,177,230,174,251,179, 61,159,172, 89, 48, 65, 23, 25, + 25, 73,167, 12,233,168, 63, 53,222,253, 5,221,224,183,191, 92,156,127, 94,163,254,159,124,242, 73, 78, 84, 84, 20,245,247,247, +207,229,241,120,195,255, 43, 35,146, 26,185,193, 61,200, 71, 20,123,127,231, 20,182,107,128, 44,181,190, 43,154,191,129, 81, 78, + 1, 78, 78, 78, 41,219,182,109,163, 10,133, 34, 9,128,207,191,100,244, 21,241, 3,186,109,175, 83,231, 16,219,171,151, 97,123, +157, 58,135,252,128,110,120, 21, 78,136, 0,152,177,116,233,210, 96,157, 78, 23,188,117,235,214,224,110,221,186, 5, 3,152, 82, +193,115,254,240,221,119,223, 81,157, 78, 71,183,110,221, 74,187,117,235, 70, 1,172, 54,247,120, 43, 43,171,234,181,107,215,222, +225,239,239, 31, 85,183,110, 93, 77,205,154, 53,243,125,124,124, 34, 2, 2, 2,182,137,197, 98,111,110, 84,221, 63,179,148,161, + 69, 26,205,152, 49, 99, 38, 0, 58, 99,198,140,153,148,210,206, 5,237,122,103,211,223, 69,215,148,210, 32,211,255,197,113, 24, +151,226, 56,139, 59, 71,145,223, 69, 71, 29,186, 22,252, 31, 89,184,205, 88,168,163, 71,143,182, 58,122,244,232,133,162,133,235, + 93, 5,205,198, 55,115,207,203, 75,142,167, 15,191,253,130,158,107,227, 65,175,180,118,161, 79, 39,127, 66,227,119,174,162,159, +215,179, 85,245,170,130, 54,150, 10,173,131, 7, 15,210, 67,135, 14,209,227,199,143,211,135, 15, 31,210,212,212, 84,186,115,231, + 78,131,189,189,125,158, 88, 44, 94, 2, 64,106, 14,159,181,181,117, 34,165,148,170,213,106,186,104,209,162,124,133, 66,113, 7, +128,115,129, 80,162, 25, 25, 25,116,201,146, 37,249, 74,165,242, 62, 0, 55, 7, 7,135,232,151, 47, 95, 82,103,103,231, 98,197, +140,173,173,109,226,147, 39, 79,168,173,173,109, 34, 0,119, 91, 91,219,135,135, 15, 31,214, 82, 74,105, 76, 76, 12,181,179,179, + 75, 4,224,108,111,111,127,247,232,209,163, 90, 74, 41,141,139,139,163,118,118,118,102, 11,173,188,188, 60,122,234,212,169,215, +242, 96, 76, 63,113,226,196,107, 2,204,140,250,116, 86, 42,149,193,123,247,238,213, 24, 12, 6,250,240,225, 67,170, 84, 42, 19, + 1, 56,219,216,216,220,217,191,127,191,198, 96, 48,208,208,208, 80,179,197, 96,229,202,149,147, 40,165, 84,175,215,211, 13, 27, + 54,168,141,117,106, 76,215,104, 52,116,253,250,245,106,107,107,235, 96, 0,206,165,113, 57, 56, 56,196,105, 52, 26,154,145,145, + 65, 27, 55,110,156,115,229,202, 21,154,149,149, 69, 41,165,180,128, 15,190,173,134,127,125,227, 89, 78,214,167,211,214,237,243, +110, 52,224,219,147, 55, 99, 99,126,250,237,118,176, 67, 64,247,142,102,148, 95, 42, 20, 10,151,184,186,186,230,159, 61,123,214, +160,209,104,232,243,231,207,233,213,171, 87,233,245,235,215,233,237,219,183,233,195,135, 15,223, 63,161,181, 31, 60,186,209,183, + 59,221,232, 27,188,109,144, 67, 74,246,157,221,148,158,158, 72, 95,124, 93,133,206,237,168,200,102, 55,250, 6,211,141,126,189, +232,252, 86,124,139, 56, 55,213,236, 74, 55,250, 6,127,215,219, 43,245,110,240, 45,122,225,194, 5,186,126,213, 82, 58, 62,200, + 61,151,221,232, 27, 76,127,172,217,195, 34, 78,147, 69, 44, 22, 63,187,124,249, 50,189,120,241, 34, 93,176, 96, 1,149,201,100, + 81, 21,175,135,154, 66,250,163,143, 23,221,236,211,138,110,169,225, 74,207,151, 47,111,127,183,200,106,231, 35,138, 73,185,251, + 27,165,105,207,105,194,114,127,218,209, 87, 80, 33,177, 85, 32,178,146, 35, 34, 34,104, 66, 66, 2, 93,185,114, 37,181,182,182, +254, 87,139, 45, 95,160, 59,128,153,203,150, 45, 43, 20, 89,235,214,173, 11,126,240,224, 65,176,167,167,231,241, 10,156,107,245, +178,101,203, 10, 69,214,186,117,235,232,131, 7, 15,168,151,151, 87,116, 89,199, 14, 26, 52, 72,214,172, 89,179,224,129, 3, 7, +170,182,109,219, 70, 35, 34, 34,232,253,251,247,233,178,101,203,232,188,121,243,232,207, 63,255, 76,123,244,232,145,219,184,113, +227, 27,189,122,245,146, 88,152, 55, 62,165, 84, 84,176, 8, 40,165, 70,161,201, 7, 32, 48,126,252,115,203,235, 66,171, 36, 45, + 82,146,152, 42, 73, 96, 21,221, 86,138, 16, 43, 85,176,149,117,190,162,162,170,184,197,212,180,122,190,115,231,206,127,241,141, +225, 83, 44, 28,249,229,215,146,240,109, 43,145,184,119, 45,120, 25,137, 16,100,167, 66,125,249, 24,116,151, 15, 99,112,211,166, + 82, 41, 33,223, 88,106, 3,148, 72, 36,144, 74,165, 16,139,197,200,200,200,192,139, 23, 47,208,172, 89, 51,230,246,237,219,146, +145, 35, 71, 78,148, 74,165, 81,132,144,143,205, 48, 23, 3, 0,174, 94,189,138, 17, 35, 70,136,119,236,216, 81,215,209,209,241, +158,193, 96, 16, 1, 64,104,104, 40,250,246,237, 43,222,189,123,119, 45, 55, 55,183, 59, 90,173, 86, 38, 22,139,193,227,241, 74, +228, 19,137, 68,208,233,116,226, 26, 53,106,220,191,119,239, 94, 64,151, 46, 93, 4,145,145,145,120,249,242, 37,116, 58,157,200, +199,199,231,193,157, 59,119,234,118,238,220, 89, 16, 29, 29,141,200,200, 72,152,235,243, 73, 8,129, 70,163,129, 88, 44, 6,195, + 48,175,165,171,213,106,136, 68, 34,179,185, 4, 2,193,135,126,126,126, 15,238,221,187, 87,191,123,247,238,194, 91,183,110, 33, + 38, 38, 6, 6,131, 65, 84,179,102,205, 7,247,238,221,171,215,173, 91, 55,225,253,251,247,145,152,152,248,218,249,202,240,163, + 1, 0,220,187,119, 15, 3, 7, 14, 20,253,254,251,239,245, 92, 93, 93,239,235,245,122, 17, 0, 60,120,240, 0,125,251,246, 21, +157, 60,121,178,126,165, 74,149,238,151,209,149,200, 3, 0,157, 78,135, 81,163, 70,201,173,173,173, 17, 29, 29, 13,150,101, 97, + 48, 24, 0, 0,169,233,169, 15,238, 61,120, 24, 58,184,127,239, 86,121, 90,181,250,218,205,219,143,171, 86,246,242, 32,132, 86, + 46,163, 46, 63,150,201,100, 81,223,125,247,221,164,240,240,112,177,175,175, 47,115,255,254,125,100,100,100, 64, 36, 18, 65, 34, +145, 64, 44, 22, 67, 32, 16,188,127, 70,244, 44,127,123,176,104, 23,153,172, 17,139,109, 60, 20, 86,174, 62, 64,212, 69, 84,113, + 20,131,199,240, 36,183, 94,170,228, 0,109, 7,207, 20,123,203, 56,217,118, 47,147, 52, 98,157, 93, 45, 43, 55, 15, 79,164,166, +166,162, 82, 85, 63,228,139, 28, 69, 87,159,231, 90,129, 88,200,249,231,181, 10,172, 81,163,134, 75,245,234,213,145,146,146,130, +250,245,235,195,214,214,214,150, 16,210,174,220,117,176,173,178, 24, 89,104, 14, 48,203, 97, 32, 11,160,227, 47,198,243,228,250, +216,212,224, 95,115,193, 27,187, 19,119,107, 43,209,245,221,123,246,186,219,123,214, 4,142,125, 10,103, 27, 49,182,140,169,111, +231,168, 20, 31, 42, 79, 55, 34, 33, 36,192,217,217,249,236,141, 27, 55, 28, 36, 18, 9,238,220,185, 3,127,127,127,172, 92,185, +210,209,214,214,246,226,191,161, 27,145, 82, 74, 67,129, 35,223,221,191,191,117, 71, 88,216,209, 65,213,170,117, 25,232,227,179, +104,116,191,126,195, 39, 76,152,128,165, 75,151,226,208,161, 67,104,222,188, 57, 70,142, 28,169,139,138,138,218, 94,206,238,194, +181,203,151, 47, 31, 63,113,226,196,162,156,218,200,200,200,239, 74, 59, 54, 32, 32,192,227,217,179,103,177,147, 39, 79,174,191, + 99,199, 14,169, 76, 38, 67, 70, 70, 6, 54,111,222,140,153, 51,103,130, 16, 2, 74, 41,126,254,249,103,217,176, 97,195, 26,133, +133,133,197, 86,174, 92,217, 28,183, 14, 2, 64, 2, 64, 86,176,200, 1,200,118,239,222,173,236,222,189,187,117, 65,154, 20,128, +148, 16, 34, 6,135,162, 40, 86,139,152, 92,243,163, 69,238,181, 46, 69,211,138,110,163,148,118, 41,141,195,194,123,187,184,243, + 29, 43, 26, 25,254,181,119,170,201,239,214,199,142, 29,187,240, 23, 82,160,142,139,183, 47, 50, 79,239,135,148, 79, 32,229, 21, + 44,124, 2,230,197, 3, 84,146, 8,160,163, 52,160, 60, 66,203, 40,182,164, 82, 41,132, 66, 33,114,114,114,160,211,233, 48,107, +214, 44,241,233,211,167,237, 25,134,249, 95, 89, 60,166,130,233,233,211,167,168, 89,179, 38, 57,114,228,136,243,184,113,227,164, + 0, 32, 18,137,144,153,153,137,234,213,171,147, 19, 39, 78, 56,205,158, 61,219,170, 52, 49, 67, 8,129, 80, 40,196,196,137, 19, +165, 55,111,222,180,115,115,115,195,139, 23, 47,144,150,150, 6, 43, 43, 43, 76,156, 56, 81,122,227,198, 13, 71, 55, 55, 55, 68, + 68, 68, 32, 51, 51, 19, 86, 86, 86, 22, 11, 45,161, 80,248,218, 49,132, 16,104,181, 90,136, 68, 34,179, 5,145, 82,169,220, 21, + 28, 28,236,168, 84, 42,113,255,254,125,232,245,122, 40,149, 74,140, 31, 63, 94, 26, 28, 28,236,104, 99, 99,131,208,208, 80,163, +229,207,162, 60, 2, 0,203,178, 8, 13, 13, 69,229,202,149,113,241,226, 69,167,209,163, 71, 75,140,233,207,159, 63,135,135,135, + 7, 46, 94,188,232, 36,151,203,119,149,196,197,178, 44,226,227,227,241,232,209, 35,188,120,241, 2,201,201,201, 72, 73, 73, 65, +118,118, 54,244,122,253, 43, 63,187,236,172, 99,187,247, 29,185, 39,149, 74,101,254, 62, 53, 60, 31, 60, 12, 73,146, 74,165, 50, + 47, 79, 79, 31, 66, 22, 48,165,228,243,127, 97, 97, 97,246,195,134, 13, 19, 62,123,246, 12,113,113,113, 16, 8, 4,133,247,150, +113, 17,139,223,179,182,140, 16, 2,162,169, 1, 66,234, 95,127,145,107, 23,216,165,191, 16, 47,127, 7, 88, 29,192,240,209,186, +142, 7,255,208,131, 92,103, 80,212,129, 26,126,128, 25, 23,158, 16, 2,104,171, 3,228,131, 83,207,244,246,205, 63, 25, 35,140, +141,141,133, 80, 40,132, 88, 44, 70,253, 15,123,242,119,223,211,185,128,160, 46,180,240, 53,139,211, 4, 82,169,244,171,121,243, +230,201, 77, 57,135, 15, 31, 46, 87, 42,149,243,202, 45,178,114,101, 77,161,167, 19, 31,197,170, 42, 47, 58,150, 80, 51, 44, 41, +207, 23,148, 78, 6,116,245, 42, 42,182, 8, 33,173, 37, 18,201, 75, 66, 72,139, 10,137, 44,133,232,218,158, 61,123,221,237, 42, +189, 18, 89,208,231, 3, 2, 41, 92, 28,109,176,101, 82, 27, 59, 71, 27,169, 69, 98,171, 64,100,253,113,253,250,117, 7,137, 68, +130,224,224, 96, 8,133, 66, 72, 36, 18,212,174, 93, 27, 27, 55,110,116,180,179,179,251, 87,137,173, 37,247,239,111, 91,252,232, +209,211, 25, 1, 1,126, 31,203,229,118, 99, 7, 14, 84,206,158, 61,251,232,225,195,135,183,118,238,220, 57,229,230,205,155,223, + 83, 74,247, 91,120,125, 8, 33,100,221,138, 21, 43,198, 26,133,219,236,217,179,127, 62,124,248,240,226,206,157, 59,199,223,188, +121,115, 50,165,116, 93,105, 28, 57, 57, 57,135,231,204,153,163,252,228,147, 79,140,255,113,249,242,101,108,223,190, 29,114,185, +252,181,125,187,117,235,134, 17, 35, 70,216,106, 52,154, 82,223, 73,206,206,206,109,175, 95,191,238, 15, 64, 8, 64,108, 20, 90, + 15, 31, 62,180,201,202,202,178,177,178,178,178,113,117,117, 85, 24,197,214, 39,159,124, 98, 35, 16, 8, 90,128, 3,202,210, 34, +166, 66,199,156,180,242,238,111,174,216, 42,242, 63,190,164,121, 14, 95, 19, 90,157, 59,119,190, 0,160,101,113, 59,105,211, 18, + 33,134, 1, 82, 30,129,140,103, 34,182,192,130,159,153,132,242, 12,224, 45,250, 50,148, 74,165,144, 72, 36, 16, 8, 4,208,233, +116,200,204,204,180, 72, 20, 88, 91, 91,195,202,202, 10,121,121,121,208,235,245,144, 72, 36, 70, 49, 2,107,107,107, 8, 4,130, +194,151,112, 81,107, 82, 81,107,142, 80, 40,132, 92, 46, 71,124,124, 60, 34, 35, 35,193,178, 44,172,172,172, 32,151,203, 33, 18, +137, 16, 23, 23,135,184,184, 56, 80, 74, 33,151,203, 33,151,203,205, 22, 71, 0, 96, 48, 24, 32, 18,253,213, 15, 88,167,211, 89, +100,209,210,235,245,120,252,248, 49,162,162,162, 32,145, 72, 10,203, 42, 22,139,241,252,249,115, 36, 36, 36, 64, 38,147,193,218, +218, 26, 74,165,210,108, 94, 99, 89, 20, 10, 5,164, 82, 41,210,211,211,161, 82,169, 10,235,212,218,218, 26,114,185, 28,153,153, +153, 72, 74, 74, 42,181,236, 6,131, 1,113,113,113, 72, 78, 78, 70,116,116, 52, 82, 82, 82, 10,197, 22,203, 86, 60,254,229,197, +139, 23,241,226,197, 11, 99,215, 84,225,245, 53, 93, 27,243,253,222, 96,125,128, 18, 58, 65,251,148, 28,157, 56, 89, 43, 84, 58, + 7, 4, 1, 47, 79, 0, 12, 31,144,216,162, 73,173, 42,136, 76, 55,200,159, 36,106, 36, 32,232,128,117, 62,182,102,113, 26, 4, +237,146,179,117,226, 8,173,163,117,205, 58, 13,144,152,152, 8,177, 88, 12,177, 88,140, 15,154, 7,225,101,170, 65, 22, 18,155, + 39, 3, 69,123,179, 56,255,124, 70,171, 90, 89, 89, 53,109,209,162, 5, 49,229,236,212,169, 19, 8, 33,181, 9, 33,126, 22,149, +127, 77, 53, 17,180,178, 38,224,211,137, 33,241, 42,183, 67, 15,243,125,186,126,220,211,238,135, 51, 73, 53, 31, 39,168,189, 65, +117, 95,130,106, 27,148, 87,108, 17, 66, 90, 41, 20,138,163,107,214,172,241,150, 72, 36, 39, 8, 33,129,229,225,177,146,242, 54, +124, 53,182,191,187,173, 81,100,233, 84, 0, 95, 10, 8,164, 0, 95, 10, 23, 39, 7,124, 51,162,157,157, 76, 34, 56,104,129, 96, +221,189,110,221, 58,199,162, 34,203,184,212,175, 95, 31,115,231,206,117,180,179,179,219,245,150,191, 5,218,219,216,216,236, 8, + 10, 10,186, 30,167, 80,140,136,111,208, 64,244,135, 82,153,217, 54, 51, 83,233,245,240,161,214, 23,120, 0, 96,125,116,116,116, + 71,115, 69, 22, 33,164,159, 82,169, 12, 14, 10, 10,210, 42, 20,138,168,149, 43, 87,126, 62,110,220, 56, 44, 93,186, 20,115,230, +204,217, 12,224, 51, 74,233,172,232,232,104,183,178, 68, 22, 0, 36, 36, 36, 12,152, 62,125,122, 74, 74, 74, 10, 0,160,118,237, +218,200,200,200,192,148, 41, 83,240,197, 23, 95, 0, 0,234,213,171, 7, 74, 41, 18, 19, 19,177,124,249,242,196,132,132,132,161, +101,180,237,209,251,247,239,111,164,213,106, 61, 10,186, 7,197, 25, 25, 25,214,105,105,105, 10,173, 86, 43,103, 89, 86,110, 99, + 99, 99, 5, 64, 54,120,240, 96,126, 72, 72, 72, 77,189, 94, 31,203,105,171, 63, 81,154, 22, 41, 39,142, 85,196,114, 85,156, 69, +172,132,251,179,116,139, 86,231,206,157,137,233,250, 53,139, 17,193,253,168,219, 23, 97, 23,208,224, 53,107,150,140, 71, 32,181, + 86,226,101,116, 36,132, 32,143, 44, 45,132, 81, 88, 21, 21, 91,153,153,153, 24, 51,102, 76, 94,159, 62,125, 82, 89,150,237,105, +174, 40, 80, 42,149, 80, 42,149, 8, 9, 9,161, 61,122,244, 72, 92,185,114,101,158,169,208,122,250,244, 41,109,223,190,125,210, +188,121,243,114, 74, 19, 90, 70,139,214,146, 37, 75,242, 90,183,110,157,252,232,209, 35,106, 20, 83, 86, 86, 86, 88,190,124,121, + 94,155, 54,109, 18,111,221,186, 69,141,105,150, 88,180, 24,134, 41, 20, 90,166,199, 48, 12, 3,150,101, 45, 18, 90,185,185,185, + 3, 58,119,238,156, 24, 26, 26, 74,141,229, 84, 42,149, 88,185,114,101, 94,187,118,237, 18, 31, 61,122, 68,141,105,214,214,214, +102,139, 65,227,249, 21, 10, 5,172,173,173, 17, 18, 18, 66,219,183,111,159,184,122,245,234,124,211,244,199,143, 31,211,110,221, +186, 37,102,103,103, 15, 40,205,162,245,226,197,139, 66, 11, 86,126,126, 62, 82, 82, 82, 16, 29, 29, 93,216,117,152, 39,183,238, +216,191, 79,215,186,121,121,121,170,144,167,207,162,106,215,242,119,202,203,203, 83, 69, 70, 69, 61,165,116, 30, 91,202,131,208, +243,211, 79, 63, 77,157, 57,115,102, 94, 86, 86, 86,177, 34,203,184,126,175,192,176, 46, 32,180,197,165,103, 57, 54,237,186,246, + 21,145,132,155,128, 54, 7, 16,219, 2, 98, 91,240,229,246,248, 40,176, 30,111,219,245, 44, 23, 80,182, 25,132, 98,143, 50, 57, + 5,212, 25, 96, 3, 79, 63,205,183,109,209,107,188, 40, 45, 45, 13, 60, 30,175, 80, 20,201,228,114,180,253,120, 48,243,243, 77, +181, 11, 64,155,131,240, 60,204,205,174, 72, 36,154,246,213, 87, 95, 9,211,211,211,193, 48,204,159,156, 50, 25, 70,143, 30, 45, +182,182,182,158, 99,118,217, 15,248, 11, 33, 16, 55, 1,232, 23, 79, 18,242,221, 14, 63,200,243,253,114,201, 22,105, 64,189, 70, + 24,213,218, 73,186,228, 88, 82,192,189,232,188, 42,128, 97, 18,244,154, 15, 44, 21, 91,132,144, 64,133, 66,113,236,246,237,219, +178, 78,157, 58, 97,249,242,229,114,169, 84,122,130, 16, 98,113,195,159,155, 99, 24,183,112,245, 47,137,247,191,239, 0,104,115, + 95, 9, 44,147, 37, 41,135,197,220, 45,103, 51,117, 58,218,223, 92,206,188,188,188, 33,159,125,246, 89,234,193,131, 7,255, 34, +178, 36, 18, 9,194,195,195,177,104,209,162,180,180,180,180,161,111, 83,100,141, 27, 55,110, 81, 76, 76,140,239,233,211,167,249, +201,201,201, 78, 43,126,250, 41,243, 64,102,102,218,226,135, 15,159,204,170, 85,171,198,140, 58,117,134,150, 20,250,161, 36,145, + 53,118,236,216,221, 49, 49, 49,245,207,156, 57, 35, 72, 78, 78,246, 24, 59,118, 44,150, 45, 91,134, 57,115,230,108, 4, 48,138, + 22, 56,203,152, 11,141, 70,243, 36, 61, 61,189, 75,135, 14, 29, 50,210,211,211, 81,167, 78, 29,116,237,218, 21, 46, 46, 46,112, +115,115, 67,247,238,221,225,227,227,131,212,212, 84,244,239,223, 63, 45, 57, 57,185, 3,165,244, 69,105,156,169,169,169, 97,187, +118,237,122, 58,126,252,248,250, 49, 49, 49, 53, 1,216,103,103,103,203,179,179,179,197, 26,141, 70,106,107,107,107, 91,175, 94, + 61,135,145, 35, 71, 90,221,189,123,183,102, 76, 76, 76, 14,128, 72, 78, 94, 21,138,172, 18,181, 8,128,228, 2,193,163, 41,178, + 78, 46, 99,155,185,199, 22,251,219,140,253, 94, 19, 91,166,203, 95, 44, 90, 37, 65, 11,204,221,190,127, 91,190,200,179, 58,148, +190,117, 33,147, 72, 32, 21,137, 32,181,181,135,154,101,241, 83,120,130, 42,151,210, 57,150, 86,168,105,183,161, 68, 34, 1,143, +199,195,250,245,235,245, 77,155, 54,205, 63,123,246,236, 26,149, 74,229, 73, 41,253,205, 18, 81,176,122,245,106,213,196,137, 19, +239, 37, 37, 37,213,149, 72, 36, 26, 99,250,154, 53,107, 84,131, 7, 15,126, 24, 19, 19, 83, 95, 38,147,169, 74,242,207, 50, 21, + 90, 98,177, 88,157,148,148,212,104,248,240,225,161,235,215,175,207,149,201,100,144,203,229, 16,139,197,154,164,164,164,186,159, +127,254,249,189,101,203,150,169,164, 82, 41,228,114,185, 69,221,114,148,210,191, 8, 42,211,116,115,161,211,233,206, 38, 37, 37, +213,157, 56,113,226,221, 31,126,248, 33,215, 40,128, 76,243,184, 98,197, 10,149,149,149,149, 69, 22, 45,227,126,114,185, 28,171, + 86,173, 82,141, 31, 63,254, 94, 82, 82, 82, 93,177, 88,172, 49, 73,207, 29, 55,110,220,221,164,164,164,186, 58,157,238,108, 41, + 95,120,134,172,172, 44,240,249,124, 60,124,248, 80, 45, 20, 10,193, 48, 12,158, 63,127, 94, 40,180,236,236,236,252,235,214,174, +229,247,203,238,253, 23,164, 66,177,184,105,163, 15,106,190,136,136,140,161,148, 68,148,241,197,241, 91,126,126,190,231,229,203, +151,215,116,232,208, 33,127,243,230,205,122, 62,159,255,151,151,207,251, 39,180, 32, 3,129,244, 89,146, 90, 33, 97,244, 4, 79, +127,123, 37,178, 36, 54,128,196, 22,144,216,194,221,221, 3, 55,195, 85, 10, 48, 16,193, 96, 70, 12, 49, 74,229, 32,144, 61, 76, +132, 66, 32,146,146,132,132,132, 66, 65,100, 92,188,171,215,196,157,200, 28, 43, 16, 42, 6, 15,150,132, 32,233, 98,111,111,207, +143,143,143,255, 11,167,191,191, 63, 79,167,211,153, 31,218, 37,206,224, 10,176, 99,159, 38,228,187,254,122, 47,215,119,210,226, +159,165, 82, 67, 6,112,123, 53, 2,170,186, 97, 82,175,122,162,217,135,147, 3,110, 69,168,170,130, 71, 71,129,205,113,180, 64, + 32,180, 80, 40, 20, 39,110,221,186, 37, 83, 40, 20,120,241,226, 5, 26, 53,106,132, 77,155, 54,201,100, 50,217,113, 66, 72,107, + 75, 46,211,245, 4, 26,153,147,109,104, 58,109,127, 84,194,253,120,253,107, 34, 43, 57,151,226,179,239, 14,103,164,103,229,247, +188, 22, 85,242,243, 83,204, 61,127, 55, 35, 35,163,253,156, 57,115, 82,147,147,147, 95,187,199, 35, 35, 35,141,130,160, 53,165, +244,209,219,186, 61,149, 74,229,192,197,139, 23,227,214,173, 91,232,212,169, 19, 46, 94,188,136,180,180, 52,236, 57,113,226,217, +174,103,207,102, 25,125,182,138, 11,253, 80, 18,172,173,173,191, 92,188,120, 49,110,223,190, 93,200,153,154,154,138,197,139, 23, +199, 0, 24, 99,169,200, 50, 34, 49, 49,241,230,147, 39, 79, 58,212,169, 83,231,241,154, 53,107, 98, 92, 93, 93,217,145, 35, 71, +226,179,207, 62,131,163,163,163, 97,213,170, 85, 81,129,129,129, 15,195,194,194,130,114,115,115, 31,152,113,125,104, 74, 74,202, +213, 77,155, 54, 93,255,240,195, 15,101, 67,134, 12,113, 60,116,232,144,189, 74,165,114, 19,139,197, 78, 26,141, 70,244,248,241, + 99,222,129, 3, 7, 92, 66, 66, 66,194,243,242,242,110,150, 55,239,255, 65,220, 42,176, 78,157, 41,178,190, 85,198, 54,115,143, + 45,233,119, 89,251,153, 94,255, 77,166,139,233,134, 50,151,129, 85, 49,127,116, 45,133,234,234,160, 38, 52, 97,100, 11,154,216, +183, 38,189,220,202,142, 14,175, 70,114,135,148, 51,188, 67,108,108, 44, 77, 76, 76,164,169,169,169,116,239,222,189,212,197,197, + 37, 87,161, 80, 88, 28,222,193,197,197, 37, 49, 43, 43,139, 54,108,216, 48,205,209,209,177, 48, 20,129,171,171,107, 98,110,110, + 46,109,210,164, 73,154,147,147,211, 42, 20,140,240,240,240,240,136,166,148, 82, 47, 47,175,184,146,248,244,122, 61,117,113,113, + 49,134, 72, 16,216,217,217,253,216,184,113,227,180,196,196, 68,234,234,234, 90, 24, 58,193,209,209,113,121,163, 70,141, 94, 75, + 55, 35,191,209, 49, 49, 49, 52, 38, 38,134, 86,170, 84, 41,206, 52, 61, 50, 50,146, 70, 70, 70, 82, 15, 15, 15,139,195, 59, 56, + 58, 58, 46, 43,154,151,242,230,209,211,211, 51, 49, 47, 47,143, 54,107,214,236,181, 58,245,244,244, 76,204,207,207, 55,166,155, + 21,222, 65, 42,149,142,146, 72, 36,113, 18,137, 36, 78, 44, 22, 47,170, 92,185,114,210,190,125,251,232,170, 85,171,168, 66,161, +120, 21,222,193,191, 91,211,234,205,134,206,114,244,239,254,101, 69,194, 59, 40, 20,138, 63, 92, 92, 92,114, 15, 28, 56, 64,213, +106, 53,213,233,116,212, 8,188, 79,163, 14, 55,249, 84,167, 63,250, 29, 14, 91,232, 29, 50,177,165, 44,255,193, 55,117, 41,253, +223, 39,148, 30,255,140,210,179,211,232,205,141, 35,105, 51,111,177,225,202,148, 74, 79,233, 6,223, 95,205, 10,201,176,169,118, +117,250,163,223,241,103, 11,188, 67,134, 4,186,229,255,180,126, 21,189,113,227, 6,125,248,240, 33,125,241,226, 5, 61,254,219, + 62,218,172,170,236, 21,231,143,126,135, 45, 9,243, 0,160,185, 88, 44,206, 89,185,114, 37,189,126,253,122, 33,231,225,195,135, +169, 76, 38, 83, 1,102,142, 90, 6, 8,253,209,255, 99,253,122,223, 75,179,219, 89,101,167, 30,157, 70,233,131,109,148,110, 10, +160,116,107, 99, 74,247,117,166,244,200, 80,122,125, 85, 47,218,220, 91,168,163, 27,124, 47,210,141,254,237,204,205,167, 64, 32, +200, 58,120,240, 32,141,139,139,163, 23, 47, 94,164,183,111,223,166,161,161,161, 52, 42, 42,138, 30, 59,118,140, 10, 4,130,124, + 0, 22,143,106,108,236, 12,175,160, 26,194,248,123, 75,154, 83,122,168, 63, 77,222, 53,144,118,169,165, 72,107, 82,137,255, 97, + 5, 70,218,213,179,183,183, 79, 57,118,236, 24, 13, 15, 15,167, 23, 46, 92,160, 78, 78, 78, 41, 0, 2,222,246,253, 25, 20, 20, +116,131, 82, 26,220,169, 83,167, 96, 0,191, 7, 5, 5, 5,191,124,249, 50,184, 81,163, 70,215, 81, 74,232,135,210, 56,219,182, +109,171,165,148,210, 78,157, 58, 81, 0,113, 65, 65, 65,244,229,203,151,180, 81,163, 70,154, 55, 52, 74,146, 7, 96,168, 64, 32, +248,201,206,206,238,156,173,173,237, 89, 30,143,183, 9,192, 32,115,218,185, 82, 56,221, 0,248, 3,248,160, 96,169, 89,144,198, +141, 56,252, 47, 77, 56,109,238,142,189,188,209,124, 88, 85,114, 97, 64, 21,100,247,175,130,156, 79,171,145,203, 61,189,241,161, +165,179,123, 27,133, 86, 90, 90, 26,189,123,247, 46,109,213,170, 85,174, 92, 46,143, 5,208,161, 60, 51,134, 59, 56, 56,220,118, +114,114,138,230,243, 95,111,180, 76,210,219,154,166, 59, 57, 57, 93,117,117,117, 77,116,116,116,188, 83, 28,167,131,131,195,109, + 87, 87,215, 68, 7, 7,135,219,166,199,241,120,188, 78, 14, 14, 14,177, 69,211,249,124,254,135, 78, 78, 78,209, 69,211, 81,194, +204,230, 46, 46, 46,209,113,113,113, 52, 57, 57,153,122,122,122,198, 21, 21, 96, 9, 9, 9,175, 9, 48, 75,102, 75, 47, 41, 47, + 37,165,151,196,105, 70,157, 90,124,221, 77,182,249,184,187,187, 39,173, 88,177,130, 90, 89, 89, 37,153,110,243,109,249,233, 87, + 55,158,229,100,125, 54,253,199,125,142, 53, 63,174, 93,158,153,226, 1,116,144,203,229,177,109,218,180,201,125,254,252,121,169, + 66, 11,239,200,140,246,127,225,220, 95, 83, 72, 55,214,108, 78, 55,212, 60, 22, 58,207,235,241,208,198,114,117,240,138, 78,148, +158,157, 70,175,255,248, 25,109,234, 45,122, 37,136, 54,250,157,160, 63,251,180,164,171,171,138,204,226,252,169, 90, 32,221,232, +119, 34,100,174,215,227, 79, 26, 56,106,118,111,219, 72,159, 63,127, 78, 15, 31,216, 69,155, 84, 41, 16, 89, 27,106,158,162, 63, +214,108, 99, 22,103, 49, 98,107,203,150, 45,244,249,243,231,244,215, 95,127, 53, 75,100,189,198,105, 34,180,102, 6, 89,101,124, +214, 88,162,238, 95, 79,164,233, 30, 32,212,182,175, 46,212, 55,243,226, 27,234,186, 50,108, 77, 71,208,246,190, 82, 53,221,224, +123,145,110,168,217,193,220,124,138, 68,162, 40,152,196,212, 41,186,136,197,226,228,146,132, 86, 89,215,189,177, 51,188,130,124, +196,241,127, 44,252,144,118,173,163, 72, 53, 71,100,149,197, 9,160,158,131,131, 67,202,214,173, 91,169,179,179,115,178, 57, 34, +235,159,184, 63,149, 74,229,142,156,156,156,224,147, 39, 79, 6, 7, 5, 5, 5,239,216,177, 35,248,242,229,203,193, 50,153,108, + 71, 73,161, 31,106, 22,105,255,139,114, 90, 91, 91, 7,103,103,103,211,147, 39, 79,210,160,160, 32,186, 99,199, 14,122,249,242, +101, 42,147,201,130,255, 85,207, 38,199,249,223, 21, 83,175, 98,104,189,182, 88, 44,180,222,212,133, 0, 64, 51, 50, 50,232,164, + 73,147, 52, 18,137, 68, 37, 20, 10,103, 2, 16,254, 87,110, 66, 7, 7,135,171,206,206,206,137,206,206,206,175,137, 61,211,116, + 7, 7,135, 59,239,243, 3, 8,192, 71, 40, 20, 70, 10, 4,130,167,166,233,142,254,221,154, 86,107, 62,100,142,115, 64,183,143, + 42,146, 79, 0, 66,161, 80, 56, 83, 34,145,168,166, 76,153,162,201,201,201,121,191,132, 22,165,160,171,171,138,140, 98,235,193, + 28,175,208,174,181,100,218, 77,147,219,211,166,149,139,136,172,173, 94, 98,139, 56, 11,196,214,221,217,158,161,109,124,172,244, +139,231, 76,162, 77,170, 72, 95, 23, 89,150,112, 22, 17, 91, 50,153, 44,123,222,188,121,102, 91,178,254,194,249,147,175, 39,221, +232,183,227,149,136, 42, 99,249,209,119, 51, 93,235,235,249,111,185,238,141,157,225,213,214, 71,252,200, 92, 75,150, 57,156, 0, +234,217,218,218, 62, 54,215,146,245, 79,148, 29, 64,251,209,163, 71, 7,191,124,249, 50,248,197,139, 23,193,151, 47, 95, 14,254, +248,227,143,131, 1,180, 47, 46,206,150,182, 71, 15,117, 61,134,153, 84, 6,103,191,209,163, 71,211,151, 47, 95,210, 23, 47, 94, +208,203,151, 47,211,143, 63,254,152, 2,232,199, 9, 24, 78,104,253,219, 23,254, 63,221,201, 42,145, 72,146,108,108,108, 28,173, +172,172,142,229,231,231,143,167,148,198,255,151, 58,153,147,147,147,155, 89,146,254, 62,130, 82,250, 20,128, 87,209,244,164, 71, +135,174, 1,184,246, 6,248,181, 0, 22, 19, 66,182,111,220,184,113,205,242,229,203, 63,150, 72, 36,201,239, 85, 37,142, 15,211, + 96, 77,181,219, 16,137,150,212,114,151,205,248,170, 19, 37,139, 79, 94,245, 90,218,195, 41,170, 89, 53,121, 56, 4,236,119, 32, +234,155, 24, 26,161,182,144,243, 38,164,186, 37,117, 43,201,102,124,219, 29,228,187, 19,219,188,150,125,108, 31,213,172,170, 85, + 20, 40,190,131, 88,117,205, 34,206,215,175,203, 21, 66,200, 71, 43, 86,172,216,174, 82,169, 70, 80, 74,207, 89, 76,162, 96, 18, +144,171,155, 7, 29,175, 22, 40, 68,165,156, 76, 5,134,247, 16, 73,248,215, 76, 38,126, 61,129, 70, 2, 8,120,195,207,210,221, +130,238,168,127,211,243,125,138, 16,130, 93,187,118, 13,244,243,243,171, 26, 18, 18,242, 66,165, 82,237,164,148,158, 50,245,101, + 34,132, 28,249,238,254,253,220,181, 33, 33, 87, 52, 44,123,165, 12,206, 61, 5,156, 95,250,249,249, 5,132,132,132, 60, 82,169, + 84, 43, 40,165,123, 56,215, 37, 14,255,118,252,227, 66, 43, 47, 47,207,153,171,118, 14,255, 80,131, 31, 15,160,199,123, 91, 64, + 19,177,213,192, 83, 58,254,224,104,169, 10,148,196, 64,192,174,178, 88,100, 21, 35,182, 26,121, 73,191,248,117,148, 84, 5,138, + 4, 80,124, 95, 17,145,101, 42,182, 0, 84, 41, 55, 65,175, 16, 45,128,112, 16, 18,129,249, 40,217,137,122, 62, 10, 63,187, 57, +188, 29,177, 5,224, 84, 25,251, 80, 0,103, 11, 22,115, 56,247, 0,224,132, 21, 7, 78,104,113,224,192,225, 31, 22, 91, 7,252, +111, 33,133, 55, 5, 12,170, 0,250, 72,228,234, 19, 48, 62, 66, 83, 65,206, 27, 72, 33, 19,193,131, 15, 68,250, 48,228,104, 18, + 48,186, 2,156,127,195,155, 28,175,124,167,138,199, 60,238,214,224,192,129,195, 63, 7, 66,200, 72,211,145,134,166,255, 57,161, +197,129,195,187,142, 87, 86,158,152,130,229,223,203,201,129, 3, 7, 14,255, 49,193, 5,188,154,147, 41,168,132, 15,198, 51, 22, + 16, 7,149,227,131,244, 12,199,201,113,114,156, 28, 39,199,201,113,114,156,255, 45,206,178,184, 45,209, 31,255, 38,129, 85, 76, + 57, 54, 25,127,252,163,163, 14, 57, 78,142,147,227,228, 56, 57, 78,142,147,227,228, 56,255, 43, 11, 3, 14, 28, 56,112,224,192, +129, 3, 7, 14, 21,177,104,213, 47, 88,187, 22, 76,193,227,106,220,246, 86,125,180,100, 14, 62,174,224, 51,117, 8, 75,253, 0, +128, 50, 36, 20,122,246,190, 42,229,105,133, 67, 62, 40,220,125,237, 40, 68,251, 9, 52,189,179, 99,159,164, 85,148,175,182,175, +178,135,179,131, 98, 96, 66,106,230,246,135,161,217,135, 44, 57,214,198,166,178, 82, 98,103,219, 75,173,213,213, 18, 9,133, 81, +218,140,172, 77,105,105, 97,217,220,173,201,129, 3, 7, 14, 28, 56,188, 23,168, 15,224, 14,128,206,148,210, 77, 5, 93,137,165, + 59,195, 87, 14, 8,188, 37,145, 72,189, 1,128,165, 20, 44, 5,114,179, 50,130,227,195,110,117, 0, 0, 71,239, 6, 39, 5, 18, +235, 6, 44,125,181,221,192, 2,122,109,126,120,102,196,245,134,230,228,200,202,201,247,147,160,246, 65, 61,186,116,233,236, 91, +187, 86,237,106, 0,240,224,225,131,176,163, 71,143, 61,177,114,242, 61,152,147,244,228,215,138,148,152, 66,242,245, 7, 31,212, +107,113,251,246,157,133, 0,198, 86,180, 6,237,237,173,198,159,250,223,148,150,109,123, 44,151, 3,176, 72,104, 73,236,108,123, +117,239,218,177,222,212, 9,163,153,207,166,124,235,125,235,202,249,165, 10,183, 90, 25,148,213,157,202, 77,236,123,169,180,137, +147, 57,112,224,192,129, 3, 7, 14,255,122, 28, 43, 16, 87,199,138,110, 40, 81,104, 73, 36, 82,239,235,231,143,218,253,122, 57, + 26, 0, 16, 84,223, 5,179,190, 89,211,158, 16,242, 4, 0,186,125, 54,223,103,225,204, 9,184,250, 40, 9,148, 82,212,171,110, +143,143,186,247, 54, 43, 55, 82, 23,255,134,125,251,244, 25, 48,101,202,151,221,158, 63,127, 30,177,123,247,238, 75, 0, 16,216, +178,101,245,111,191,253,182,207,114, 91, 59,177,212,197, 63, 54, 47, 33,228, 86,121, 74, 43,117,175,230,238, 95,163,206,192,189, + 63,175, 97, 90,119,232,217, 95,234, 94,109,113, 94,108, 88,172, 57,199, 58, 58, 58, 78, 20, 8, 4, 74, 0, 96,217, 63,245, 79, +213, 74, 60, 23, 0,208, 27, 88,133,157,187, 95, 54, 79, 40, 49,136,197,194,144,236,156,156,237,153, 49, 33, 63,149,198,169,214, +233, 2,190, 24, 51,140,185,251, 34, 21,222, 1,129,188, 85,139,103,131, 53,232,108, 39,205,252,166,215,237, 27,123, 1,204,187, +192,221,163, 28, 56,112,224,192,129,195,187,137,130,184,141,155, 76,254,111, 42, 83,104, 1,128,149,148,143, 39, 47, 19, 0, 0, + 54, 82, 96,252,168, 33, 72, 77, 73,246,209,232, 89,124, 58,100, 16,238,132,198,227, 73,120, 50, 40,165,240,241,144,153,157, 33, + 30,216, 15, 62, 29,254,105,171,147,167, 78,221,252,106,206, 87,191, 16,242, 42, 26,248,198, 77,155,155,206,157, 55,119,196,160, + 33,131,218, 29, 56,112,224, 17,138,204,140,109, 46,248, 68,177,102,217,146, 69,162,152,148,252,252,137, 83,102,176, 95, 78,158, +184, 10, 64, 79,115,142, 21, 8, 4,202,152,152, 24, 43,134,121,221,125,237,187, 69, 51, 46,182,235,177,252, 89, 68, 84,198,221, +147,135, 15, 55,244,247,247, 71, 76,108, 66,243,165, 63,108,168,235, 90,173,225,176,236,172,188, 30,185,201, 33,197, 70,161, 22, + 11, 4,143, 22, 44,253,177, 30,107, 83,157,153, 53,162, 19, 2,170,185, 33, 54, 41, 3, 45, 59,116,227, 7,223,186,213, 30, 0, + 39,180, 56,112,224,192,129, 3,135,119, 20,165,141, 58,100, 0,224,216,177, 99,197, 6,254, 51, 24, 40,158,132,199,227, 73,120, + 60,110,134, 38, 67, 75, 5, 88,181,116, 1, 86, 44,158,135,180, 60, 6,191, 94,141,198,211,240, 4, 60, 13, 79, 64, 74,122, 78, +113, 10,239,181, 33,154, 43,150,200,234,175, 90,165, 92,214,190,165,188,181,157,173,173,237,179, 71,191,228,206,157,156, 88,115, +193, 23,209, 66,129, 70, 28, 35,183,146, 55,219,191,127,159,191,179,163,147,220,202, 74, 49, 77,238, 81,111,139,141, 77, 93,101, +105,156, 69, 33,115,174,217,173, 91,231,142, 31,186,184, 56,179,163, 87, 5,135,214,170,233,167,171, 81,189, 70,115,153,179, 79, +183, 82,148,104, 33, 39,203,178, 96, 24, 6,137,137,137,136,139,139,195,203,151, 47,241,244,233, 83, 68, 71, 71, 36,178,148, 10, + 12, 96, 25, 87, 87, 15,240,249, 34,120, 87,246,194,143,171, 22,203,190,153, 63,171,145, 68, 46, 58, 68, 8, 33,197,113,230,167, +165, 31, 56,254,251,169,216, 19,187,127, 52, 0, 64, 82,122, 14,206,222,122,142, 59, 33,209,150, 42,230, 55, 62,228,149,227,228, + 56, 57, 78,142,147,227,228, 56,255, 13,156, 37,105,145,119, 1,148,210, 77, 69, 23,227,182, 82, 71, 29,134, 69,167,225,201,203, + 4, 52,240,115, 71,181,202,174,184,249, 52, 29, 59,207, 70, 99,203,201, 72,156,189,151, 12,150,175, 64, 66, 22,240, 44, 34, 17, +207, 34, 83, 74,139,211, 12, 0,224,137, 5,125,191,248, 34,115, 74,109,255,172, 38,231, 79,140,135,187,227, 51,255,233,211, 51, +198,243,196,130,190,182,149, 20,187,103, 76,153, 52, 80, 33,147,137, 52,106, 13,170, 86,241,146, 76, 24, 55,126, 24,177, 21,239, + 54,183,160,214, 30,254,182, 98,169,244,167,111,230, 79, 19,127,255,235,179,168, 92, 13,114, 15, 94, 75,124,241,229,140,185,105, +124,129,228, 71,107, 15,127, 91,115,185,116, 58, 29,212,106, 53, 52, 26, 13,180, 90, 45, 98,163, 31,119,251,227,215,169, 29,170, + 84,178,235, 32,150, 72, 64, 1,100,229,233,241, 50, 94,133, 54,109,219,241, 26,212,175, 31, 96,229, 90,115,120,113, 92, 25, 25, + 17,153, 44,229, 41,142,254,182,139,183,239,244, 93,252,114,244, 22, 14,157,187,139,155, 23, 78,232, 41,171, 43,156,166, 66,225, + 86,195, 71,225, 86, 39, 82,225, 94, 55,177,112,241,168,125,155,251, 86,224,192,129, 3, 7, 14, 28,254,189, 40, 24,105, 56,178, +232,136, 67,160,148,174,195,252,252,188,240,158,125, 7,193,213,201,197,170,123,235,161,194,224,176, 12, 36,199, 71,226,249,211, +135, 80,229,235, 32,180,173, 2, 72, 92, 80,217,219, 11,247,159, 28,210,174, 94,118, 44,135,213,171,195, 75,226,235,222,221,205, +195,213, 81,206, 44, 91,234,121,253,233,147,244, 6,187,230,108,197,128, 1, 86, 14,203,150,122, 94,143,120, 33,103,100, 18,218, +108,216,144,254,132, 33, 20,211,167, 79, 65,247, 46, 29,241,233,176,193,100,251,246,109, 77,204, 45, 40, 11,193,218,153,179, 23, +136, 18, 51,244,154,155, 79,115,212, 50,185, 84,122,229, 89, 78,110,128,183,167,180, 83,143,161,113,199,246,255,244, 61,128, 33, +230,112, 25, 5,150, 78,167,131, 86,171, 5, 0, 3, 0, 48,204,171,117,106,182, 6, 73, 25,106, 36,102,168,161, 55,176,232,209, +119,136,244,214,237,123, 67, 0,148,224,175,197,178, 58,189, 14, 7, 79,223, 65,236,173, 3, 44, 97,120,153, 70,103,120,163,200, +114,113,241,188,216,165,199, 96, 71,145,228, 85, 55,108,118,174, 26,219, 55, 44,229,238, 96, 14, 28, 56,112,224,192,225, 95,140, +162,211,239, 16, 66, 80,230, 20, 60, 17,143, 46, 53, 4, 0,223,134, 29, 82,173, 36,124, 59, 62, 67,144, 24, 19,134,237,203, 39, +130,101, 41, 58,141, 88, 6,133,183, 11,164, 66, 30,212, 57,169, 57,169,207,207,219,151,174,246,116,237,214,109,140,245,254,124, + 76, 85,235, 93,187,114, 4, 0,176,107, 87,142, 96,204,232, 74,214,235, 55,134,123, 55,110,209, 0,212, 96, 64,151,238, 61,209, +183, 95, 95, 68, 36,168,240,191,139, 81,200,205,211,152, 53,191,154,204,177,102, 93, 39, 55,247,142, 95, 12,237, 40,231,243, 8, +169,225,165,228, 69, 39,235,244, 60,158,192,112,228, 86,102, 92,143, 30,253, 28,206, 30,223,247,161,204,177,102, 93, 85,242,227, +123,101,241,169,213,106, 24, 12, 6,168,213,106,232,116, 58,216, 57, 84, 57,222,174,231,242,152,248,132,236, 99, 9,233,249,141, +115,117,122, 36,102,168,145,148,161, 70, 70,174, 22, 46, 10, 91,232,117,154,218,165, 92,132, 95, 62,238, 57,104, 48, 0,134, 48, +250,173,217,113,143,159, 26,183, 25, 69, 86,199,238, 3, 28, 47, 6,135,225,249,237, 19,233,148,213,235, 94, 85, 28,203, 77,129, +194,129, 3, 7, 14, 28, 56,252,203, 97,226,167,117,172,192, 57, 30,175, 9, 45, 99,223,104,231,206,157, 73,209,131, 99, 19,211, + 96,111,197,135,163,155, 55, 6, 78, 92,129, 95,190,159, 12,131, 65, 7, 74, 1,189,193,188,200, 4,148, 10, 78,143, 29,227,237, + 87,217,155,231, 56,112,128, 44,111,231, 46,149,116,224, 0, 89, 94,173,218,246,153, 99,199,120,135,103,231,123, 54,215, 27, 12, +184,242, 40, 9, 15,195, 51,241, 48, 34, 11, 86, 82,243,195,124,241, 68,194, 49, 75,151, 44, 22,242,121,132, 60,138,204,201,137, + 73,213,231,240, 4, 2,173, 76, 42,162, 26,202, 87, 71,164,208,212,182, 31, 15,203, 59,178,227,135,225, 0,198,149,196, 99, 28, +105,104,180,100, 25,215,148, 82, 74, 0,150, 37, 6, 67, 76, 74, 62,114,180, 58, 36,166,255, 41,180,136,190,228,158, 83,133, 91, + 13, 31,165,181,221,239, 60, 30, 79, 76, 41,160,211,234,251, 40,220,106,116,200,142,123,246,212, 84,100, 93,127, 20,135,176,187, +103, 18, 13, 90,213,160,220,196,208, 63,184,219,150, 3, 7, 14, 28, 56,252,151, 80,154, 22,249,183,195,104,193, 42,214,162, 85, + 90,129, 40, 5,158, 69,166,160,178,135, 35, 60, 42, 87,195,211,199,247,255,220, 6, 64,111, 48,207,119,237,208,161,184,152,149, + 43,149,236,228,201,153, 77,151, 46,245,188, 54,102,116, 37,101,173,218,246,153,211,166, 69, 53, 93,185, 82,121,237,244,117,129, +129, 22,196,235, 50,198,230, 42, 8,243,111, 38,152, 70,117,253,171,240, 22,236,122, 22,245,199,131,236, 36,161, 80,168,115,177, +149, 16,133,149,136,199, 99, 4, 34,181,142, 81,251, 4,212,231, 29, 97, 94, 69,111, 45, 75,104, 21,237, 58, 76, 77, 14,235,118, +234,127, 83,106,181,254,120,153, 93,108,114, 30, 50, 53,188,194,174, 67, 30, 67,240,224,113, 36,192, 19, 62, 44,142,211, 90, 97, +119,114,247,206, 95, 60, 87, 46, 93, 4,173,222,128,177,147,191,194,176, 33,131, 78, 42,220,106,116,240,244,246, 13,190,116,100, +171,172,195,232, 31, 17,249,228,118,130, 94,157,181,135, 19, 89, 28, 56,112,224,192,225,191,134,119, 81, 92, 25, 81,100,212, 97, +241, 22,173,210,224,229,225,140, 27, 15,195, 81,219,175, 10,148,214, 10,132,134,197,128,199, 8,192, 16, 64,167, 55, 95, 12, 81, +173,110,239,202,149, 74, 68,134,203,153,245, 63,134,123,143, 29,227, 29,190,114,165,242, 26,213,234,246, 2, 24, 68,233,171,185, + 23,141, 1, 82, 13, 22,132,241,164,172,174,146,179,157,140,119,251, 69,110, 42,195,240,212,246, 74, 9,107,175, 20, 51,246, 10, +145, 64, 40,224,177,122,202,104, 61,156,188,243, 41,203,214, 53,135,207,180,235,208, 96, 48,128, 16,198, 80, 32,196,228,209,169, +121,200,204,231, 33, 49, 67,141,244,108, 45,106,184,203,113,230,236, 1,149, 65,151,183,171, 56, 46,158, 64,168,172,230,237,129, + 89, 95,175, 68,158,218,128,103,177, 57, 16,138,197, 46,206, 46, 1,247, 6,125, 62, 67, 60, 97, 83, 24,134,127,104,143,201,151, +194, 98, 85,137,146, 25,220,227,198,129, 3, 7, 14, 28, 56,188, 59, 48,245,209, 42, 10,179,132,150,149, 76, 2,202,147,224, 82, +112, 24,124,253,235, 96,219,225,155,168, 94,187, 9,226,179,245,160, 96,202, 28,109,104,196,151, 51, 84,119, 0,220,233,222,221, +205,227,147, 79,220,219, 81, 42, 56,189,126, 67,102, 12, 0,252,184,167, 21, 40, 0,150,165,160, 20,160,236, 43,193,101,190,156, +228, 71,134,199,103, 85,246,118,145, 35, 36, 70,171,150,139,133,140,173, 92,196,115, 84,138,132, 66, 62, 31, 6, 74,212,241,241, + 97,106, 2, 68,152, 67, 87,180,235, 80,102,229,122,188,237,199,203,146, 35,162, 50,111,215, 72, 83,213,205,212,138, 64, 41, 80, +195, 93,142,135,215,143, 25, 18, 99,159, 63,203, 75,124,178,161, 56, 46,150, 5, 79,171,103,113,239, 69, 38, 50,114,117,200,200, +209,162,121,155,174,194,230, 65,221,112,233, 97, 10, 88,189, 14, 75, 55, 31,203, 54, 80, 93, 95, 74, 67,116,220, 45,203,129, 3, + 7, 14, 28, 56,188, 59, 40, 24,105,216, 25,175, 34,195,119, 54, 21, 95,102, 77, 42,109, 96, 41, 28,236,237, 32,145, 91, 35, 60, + 81,139,108,226,132,116, 21,133,193,240,202,162,197,150,124,226,160,226,210, 15, 29,138,139,249,237,183,228, 45,135, 14,197,153, + 56,122,255,105,201, 42, 92,179,212,108, 78, 66, 13,103, 14,159, 56,159,217,173,177,163, 45,195,227,229, 9, 5,140,154, 47,228, +105,133,124, 70, 39,228, 51, 26,103,107, 1,239,252,145, 61, 34, 74,112,190, 44,206,252,252,124, 4, 5, 5,161, 83,167, 78,232, +222,189, 59,122,247,238, 13, 31,159,154, 78, 12,143,104, 40, 97, 89, 71, 81, 54,170, 57, 18,240,243,163,241,199,158,239, 84, 15, +175,252,118,207,160,206,239, 74, 77,250, 58, 95,227,164,148, 77,203, 84, 35, 95,107, 64,122,142, 22,233,185, 90,232, 29,155,226, +183,171,113,200,211, 24, 16, 25,124, 32, 47, 57, 33,102, 98,126,226,179,240, 50, 46,100,208,223,112,115,112,156, 28, 39,199,201, +113,114,156, 28,231, 91,231,124,199,209,185, 64, 88,117, 46, 26, 71,203, 12,139, 22, 69, 85, 87, 57,170,187,203,145,175,117, 66, +190,198,128,220,124, 3,178, 84, 90,100,169,116, 8, 79, 80,225,225,225,138,231,240,149, 21, 11, 32, 5,191, 65, 94, 9, 60,115, +109, 90, 34,173,230,235, 21, 75,191,237,179,167,126, 61,205,132,206,174,149,238,135,107,226, 8, 97,242, 24, 30, 95,103,167,224, + 11, 66, 67,239, 39, 95,187,120,188,165, 68,111, 24, 92, 26,143, 94,175,207,116,119,119, 7,240,250, 20, 60, 53,171, 73,187, 95, + 57, 54,189, 74,171,110, 75, 29,191, 95, 52, 69,197,240,132, 44,225, 11, 31, 26,116,121,187,243, 18,159,252, 72, 75,113, 40, 99, +132,146,199, 55,238,134, 52,177,177,171,132,231,177,185,200,205,215, 67,171,103, 97,107, 37, 68,204,131,147,218,240,208,219,251, +178, 99,239,109,227,238, 83, 14, 28, 56,112,224,192,225,221,132,209, 79,203,184, 46, 51,188,131,137,117, 39,188, 69, 80, 87,176, + 44,133,129, 2,172,161,192,242,196,254,105,125, 50,232,242,195, 43,154, 65,150, 53,220, 92,187,105, 75,167,250,141, 90,241,252, + 61,173,144,149,154,128,235, 87,206,233,193,210,107,230, 28,159,146,242, 52, 71,230, 82,163,103,159, 94,159,236, 31,242,233,232, +140,150,109,218,200,157,156, 92,212, 49,177, 49,170,159,119,236,212,157, 60,126,168, 37, 11,125,191,148,148,103, 57,165,241,100, +100,100,252, 80, 92,122,219, 22,149,154, 3,168,194,227, 19,141, 42,233,169,220,146,178,165,196, 70,247,248,246,235,249, 17, 3, + 70, 76, 18, 85,117,175,134,164, 76, 30,194, 99, 18, 16,122,241,144, 58,246,233,173, 95,179, 98,238, 12,231,110, 81, 14, 28, 56, +112,224,192,225,221, 68,133,124,180,162, 66, 94,197,211,250,187,145,157,144, 52,104,219,182, 95,190,249,101,199,158,230,249, 26, +141, 59,133, 48,218,160,215, 92,200, 49, 96,174,185, 28,170,132,103,183, 29, 28,124,106,253,188,121,237,236,159,183,172,111, 5, +214,224, 71,128, 8, 74,112, 94,162, 51, 12, 41, 75,100,149, 46,228,178, 55,182,235,185, 60, 47, 53, 53,231, 23, 75,143, 85,165, +132, 38, 88, 57, 87,173,180,113,213,215,203, 24,134,215,222, 96, 96, 5,172, 65,247,220,160,205,255, 46, 47,249,201, 97,106,217, +240, 74, 14, 28, 56,112,224,192,129,195,191, 8,132,144,145, 69,131,150,154,109,209,250,167,144,150, 22,150, 13, 96, 66, 69,121, + 82, 82,158,230, 0,120,227, 35,247, 30, 60,205,252, 31,128,255,149,247,248,156,196, 23,201, 48, 51, 42, 61, 7, 14, 28, 56,112, +224,192,225,221, 23, 92,128,153,206,240, 28, 56,112,224,192,129, 3, 7, 14, 28, 74, 23, 89,166,235,194,116, 0,197,142, 28,176, +100,102,238,242,140, 62, 40,139,159,227,228, 56, 57, 78,142,147,227,228, 56, 57,206,247,143,179, 44,110, 75,244,199, 59, 33,192, +254, 78,247, 32, 66, 72,208,155,174, 48,142,147,227,228, 56, 57, 78,142,147,227,228, 56,223, 63,206,119, 90, 76, 21,177, 98, 21, + 8,198,127,151,143, 22, 7, 14, 28, 56,112,224,240, 79,193,193,193,199, 10, 40,244,235, 45, 19,114, 71,127,103, 0,200, 77, 14, + 73,228,106,143, 67, 73,162,170, 56, 31,173,114, 9, 45, 66,136,128,225,139,190,144, 72,173,134, 18, 6,214, 57, 25, 41,238,255, + 97, 21, 75,124, 42,203,199, 85,170,228,216, 38, 38, 54,113,123,232, 11,213,161,183,193,105,229, 92,213,145,136,108,127, 37,172, +250,219,172,152,135, 39,222,112, 25,197,254,254,254,245, 0, 32, 36, 36,228, 46,165, 84, 93, 81, 78,185,179,111,127, 91,107,155, + 81, 90, 86, 99, 80,229,170,126,204, 73,120,122,224, 77,230, 89,225, 86,195, 30,124,197, 6, 24,244,109, 64,193, 3,143,127,143, +168,243, 63,203, 74, 14,121, 81,218,113,158,221, 23,251, 13,239,211,121,206,150,125,199,190,137, 58, 52, 51,180,232,118,187,143, +214, 40,198, 15,110, 63,125,221,158, 67, 75, 82, 14, 79,203,225,154, 23,203,225,217, 98,128,141,158,239,194,139, 59,191, 60,213, +146,227, 60,124,155, 62, 18, 8, 4,142, 90,173, 54, 41,246,233,245, 90,230, 28, 83,201,175,217, 29, 30,143,113, 51,232,217,152, +232, 39, 87, 63,224,106,191,108, 72,157,170, 54,133, 94, 63,139, 2, 4,132,191, 34, 63,245,197,185,138,240,185,185,185, 73,149, + 74,101, 75,107,107,235, 74, 50,153, 76,146,158,158,158,151,158,158, 30, 21, 25, 25,121,150, 82,170,127, 27,101,148, 59,251,206, + 36, 2, 50,175,224,247,130,220,196, 39,139, 75,111, 95,253,190, 33, 12,157, 89,240,123,113, 78, 98,232,156,127,195,181,146,184, +248,122,241, 40, 38,240, 24,126, 51, 61,171, 91,164, 74,124,122,196,146,227,237,236,236,218,243,249,124,169,241,191, 94,175,207, + 75, 75, 75, 59,197, 61, 5,229,122, 79,142, 44,250,187,220, 22, 45, 66, 8, 79, 32,150, 93, 30,240,233,216, 90, 75,230,207,144, +172,218,242, 27, 36, 86,182, 33,249, 57,233,254,255,198,194, 59, 86,109,124,155,199,240, 60, 76,211, 12,172, 33, 38,249,197,141, + 55,210,232,250, 86,150, 14,159, 61,109,208,228,254,125,130,188,130,186, 76, 36, 0,138, 21, 69, 10,207,134, 87, 9, 97,170, 48, + 4, 96, 24, 2,134, 0, 0,141, 75,121,113,163,126,121, 57,141, 80, 58, 85,171, 34,178,114,188,216,162,251, 88,151,224, 51, 59, +183,201, 29,253,219,229, 38,135,220,127, 3, 55,142, 99,181,106,213, 26,250,248,248,216,143, 31, 63, 94, 8, 0,223,127,255,125, +245,234,213,171,167,134,133,133,221,162,148, 38,151,171,145,115,242, 27,244,195,242,133,191,124,244, 81, 39,196,165,228, 98,233, +202,117,173,173, 92,124,122,191, 41,177,101,107, 91,197,154,111,109,251, 96,226,180,133, 78, 29, 91, 55,228,229,228,235,241,251, +197,187,129, 59,215, 45,188,105,237,232,223,168, 52,177,197,170, 50,231, 56, 91,209,142,172, 42, 19, 0,250, 23,221,238,110,165, + 11,114,148, 26, 58,186,138,249,119, 1, 28, 44, 51, 47,222, 45, 78, 10,196, 98, 47,134, 97, 96,188,246, 60,242,234,250,235,180, +121,145, 49,143, 47,118,248, 55, 60, 39,214, 94,141, 19,192,227,219, 51,228,207,252,145,130,251,148, 80,154, 21,255,244,146,253, + 27,184,159,148,181,170,219, 4,116,110,222,226,231, 11, 47,211,228,158,173, 38, 29, 35,148, 89, 31,121,113,197, 61,179, 94, 42, + 18,137,237,145, 35, 71, 28, 59,118,236,168,116,174,245,241, 5,115,142,177, 18, 73,252,143, 30, 61, 44,236,216,177,131, 5,247, +167,111, 59, 48,204, 14, 2, 8, 88,150,126,207, 99,233,190,156,212,167, 97,150,134, 97,145, 57,251, 13,103, 64,205,110,103, 88, +144,219,170,196,208, 45,229,173, 95,129, 68,217, 86, 32, 20,126, 81,197,167,118,253,216,136,231,183,115,115,178, 87,234,242, 51, + 46, 88, 76,164,211, 79, 61,115, 41,248, 35,190, 64, 64, 58,182,109,204, 3, 80, 33,161,229,236,236,252,241,154, 53,107,170, 54, +109,218,212,248, 50,183,222,191,127,191,203,215, 95,127, 45, 55,231, 25, 42,225, 94,114,119,116,116,244, 20,137, 68,238, 0,160, +209,104, 98,147,147,147,163, 40,165,177,101,222, 19, 46,213, 28, 8,248, 11, 47, 93,188,200, 7,128,192,192,150,223,120, 5,142, +183,229, 9,173,242,138,173, 14, 77,182, 28,192,164,235, 55,174, 17, 0,104,210,184,233, 12,185,163,255,218,183,105,217,146, 58, +251, 53,102,128,201,205, 91,182,235,209,183,223, 32, 38,160,134, 39,218,183,251,112, 58, 0,139,132, 22,159,207,151,222,188,121, +179, 26,195, 48, 60,189, 94,159,223,164, 73,147,168,138,228,203,221,183,217, 85, 2,166,146, 86,175,217,156,252,226,246, 55,148, + 82,182,168,126, 80, 86,170, 63, 27, 60,254, 8,150,101,163,179, 34,111, 53,123,223, 44, 90,197,214,179,165,100, 12, 95,244, 69, +255, 97,159,215,154,244,229, 44,201,196, 85,103,113,108,221,140,148,127,171,200, 2, 0, 30,195,243, 56,121,234,164,147, 76,196, + 3, 0,228,228,235,241, 81,199,142,101, 30,103,227,221,248, 60, 67,136,175,113, 42,113,131, 94, 43,225, 11, 68,249, 4, 0,200, +171, 81, 4, 14,110,149,207,186,186,218,201,250,247, 9,242,218,177,231,116, 76, 84, 76,106,137,141, 26,195,240, 60, 14, 29, 62, +226,228,110, 47, 1,159, 71,144,147,167, 71,199, 78, 93, 13,197,237,235,234,106,215,185,127,159, 32,175, 93,123,207, 68,197,199, +167, 29, 43,181, 49,119,245,105, 32, 87, 58,255,222, 99,212,215,246,249,140, 29,230, 46,250,193,225,226,137, 93, 23, 90,117, 30, +196, 70, 70, 70,231, 83, 66, 66,210,211,226,191,200,137,127,254,196, 92, 33,109,101,101, 85,213,202,202,170,238, 71, 31,125, 36, +153, 50,101,138,160,117,235,214,133,219, 71,142, 28, 41, 60,127,254,188,235,242,229,203, 59,185,185,185,229,231,228,228,220,203, +201,201,121, 65, 41, 53,152,123, 77, 92, 92, 28,199,245,252,164, 43, 62,236, 49, 22, 6,150, 96,228,231,147,112,242,196,193,209, + 0,222,136,208,210,201,172,191, 30, 49,106,138, 99,147,134,245,120, 11,119, 61,129, 84,196, 71,135, 15,124,201,176,241,115,108, +182,172, 94,248, 19,128, 86,197, 89,178, 88, 85,230,156, 90, 14,154,126,221,154, 86,193,225,221,154,126, 30, 65,211,193,200,148, +133,150,173,106, 31, 77, 80,216, 74,165,107,220,108,120, 78, 98, 67,242,154,106, 31, 77, 56, 19,118, 98,117,118,169, 47, 63,177, +216,107,247,174, 93, 53,108, 21, 66,240, 25, 2, 30,143,128,207, 99,144,175, 49,160,119,159,126,111,234, 75,138, 39,117,170,209, +137, 1,134,189,122, 97, 99,107, 94,210,179,227,150, 92, 19,194, 19,218, 31, 61,252, 43,223, 73, 41, 6,143, 71,192, 99, 0, 30, + 67, 16,145,152,135,225,195,135, 41, 43, 42,216, 63,106,238,212,240,252,218, 86, 29,154,212,178,171,179,247, 26, 81, 54,249,168, +175,125, 74,190,108,232,158, 67,231,250,121,182,156,124,131, 82,118, 89,244,165, 85,165,126, 73,171,213,234,196, 14, 29, 63,178, + 38,124,185,236,204,111,219, 90,242, 25, 2,157,129, 66,111,160, 48, 20,204,141,250,234,121, 37, 96, 24, 2,202, 82,140, 24, 49, + 28, 29, 58,126,164, 98,245,108,140,249,141, 28,179,227,247, 51, 87, 28,213, 58, 22,203,215,108, 89,152,155,153,188,240,101,168, +125,132,204,217,103,146, 42,241,169,217,243, 96, 48,160, 31, 68,191,120, 56,106,215,209,235,168,229, 95, 19, 6,246, 85, 62,125, + 61,228,216,117,236, 58,252,124,253, 94,229,155,165,240,169,100,133,134, 31, 52, 4,128,114, 9, 45,129,196,122,110,171,206,131, + 23,116,233,253, 41,156, 28, 29,193, 80, 93,151, 51,199,118,117, 17, 72,149, 83,117,121,153,203, 45,123, 99, 24, 10,223, 11,148, +101, 43,236, 94,226,230,230,230,216,176,225,159,225, 24,245,122, 61,188,189,189, 17, 27, 27,235, 91,142,123, 73,230,234,234,218, +121,227,198,141, 78,157, 58,117, 18,184,184,184, 0, 0, 18, 18, 18,220,127,255,253,247,250,110,110,110, 73,241,241,241,199, 40, +165,170,146, 56, 12, 58, 70,200,240,193,147, 72,100,175,202, 8,194, 76, 25, 55,184,142,179,171, 91,177,150,250,228,228, 4,209, +180,177,231, 8,159, 47, 44,216, 31, 12,165, 44, 41,197, 74, 20, 36, 16, 8,164,197,109,211,242,172,155, 80,129,242, 51,134,199, +188,186, 89,245,186,228,180,200,224,154, 22, 88,226, 2, 4, 34,225,143, 3,134,140,106,214,171, 71,119,184, 58, 42,113,230,242, +125,140, 30, 55, 89,167,215,234, 86,150,235, 29,201,227,241,147,146,146, 34,108,109,109, 93, 42,254,190, 37, 85, 78,159, 60,225, +116,230,143,179, 51, 86,172, 90, 61,198,205, 39, 80,199, 82, 90, 56,143,177,103,173, 15, 5,237,186,244,177,118,170,214, 68,178, +122,222,103,130,247,205,162, 85,146,216,178,248, 33, 18, 73, 21,125,190,154, 54, 94,242,245,206,235, 56,182,110,116, 74,110,102, +178, 99,225,151,130,210,246, 78, 78,102,122,253,242,100, 82,225,228,219,148,240,248,163, 8,143, 39, 39, 12, 17,177, 6, 54, 90, +175,209,124,163, 74,121, 26, 95,209, 10, 96, 89,138,255, 93, 77,178,172,210, 40,170,239,216,251,171,147,179,141, 24,249, 90, 3, +250,246, 31,132, 95,126,249, 69,225,168, 20, 33, 95,163,199,178, 21, 43,178,115, 34,142, 57, 69, 68,167,199, 6,117,157,124,234, + 69,120,210,195,168,248,252,125, 37, 95, 4, 6, 78, 74, 49, 22,237,121, 10,107,169, 0,182, 10, 33, 24,134,152, 94,164,194,238, +194,184,248,244, 76, 19,206,157, 37, 62,116,174,181, 59, 40,109,221,118,127, 50,106,145,205,179, 36, 62, 40,180, 8,179,150,160, +207,208, 9,214, 85, 93,164,144, 75,120, 54, 47, 35, 99, 93,167, 76,157,122, 89,233, 84,173, 81,102, 82,216,203,178,202, 93,185, +114,229, 30, 93,186,116,145,125,249,229,151,130, 74,149, 42, 97,235,174,253, 94,129, 29,122,119,141,139, 79,172, 68, 41,133,179, +147, 83,244,136, 97,189,143, 28, 63,126, 60, 50, 58, 58, 90,176,116,233,210,198,191,254,250,171,191, 37, 95,166, 6, 74,145,175, + 54,192, 80,240,130, 76,206, 84, 91,122, 67, 19,119,119,119,113,108,108,172,218,104,101, 32,255,103,239,188,195,162, 58,218, 54, +126,207,118,150, 93, 88,122, 83, 64, 69, 17, 44,168,216,123, 47, 17,123,111,209, 88, 99,137,137,198, 24, 91, 44,137, 26,163,177, +199, 88, 98,139,189,198,216,123, 79,172,160, 40, 22, 80,138,136,244,178,189,151,249,254, 0,124,137,161, 44,106,190,247, 77, 50, +191,235, 58, 23,236,238,217,123,231,156, 51,231,156,251, 60,243,204, 12, 33,175,119,166,180, 66,189,206,237, 91, 55,230,109, 60, +149, 8,181,222, 10,137, 3, 31,137, 25, 90, 52,168, 23, 70,126,178, 90,234, 22,167, 57,106, 64,196, 28,111, 41,237,210,163,105, + 21,120,185, 58, 98,235, 15,139,112,244, 70, 66,151, 12, 53,129, 71,143,165,227,124, 69,188,142,158,142,130,181,109, 26, 84,245, +105, 87, 63, 16,119, 26, 84,245,185, 26,249, 52, 54,108,192,138, 79, 94,169,249,231,115, 79,125,162, 42,254,194,195,129,155,147, + 0, 91,206,188,128,163, 3, 15, 18, 7, 30, 36,162,252,191, 69,143,255, 91, 61,213,250,213,244,231,218,172,163,156,253,106,142, + 26, 52,160,191,223,144, 65,253, 41,184, 28, 28, 56,116,172,231,174, 93, 59,211,164, 62, 33,155,173, 28,238, 22, 93,234,163,151, +101,238, 83, 14,224, 37, 19,226,139,205, 15,225, 44,230,195,201,145, 15,103, 71, 62,218,213,241, 4,151,243,214, 23, 30,215,143, +123, 6,117,141,222,209,161,109, 72,128, 52,248,254,115,197,163, 81, 11,239,174,186, 44,111,251,217, 15, 43,107,186,171,229, 70, +222,220,105, 99,120, 41,169,169,109, 15, 28,187,210,206,175,209,168,167, 22,147,102, 86,230,253,253,197, 70,112, 95, 62,249, 61, +188, 98,211,254, 14, 38,181,249,193,253,167, 41, 85,243, 12, 34,196, 36, 41, 33,113,224, 65, 90,184,111, 29,120,144, 56,240, 33, +117,224, 33, 53, 37, 17,185, 26,238,245, 87,238,156,182,244,242,239,229,106,162,210,155,172,184,151,160, 70,165,144,122,240,245, +245,131,177,235,208, 74,183, 46, 30,250, 85,226, 91,227, 91, 77,218,227, 89,246,234,236, 62,126, 19, 51,166,140,139, 36, 64, 84, +193, 77, 58,124,238,146,117,245,191,158, 49,241, 15,239, 77, 91,176,166,254,219, 71,178,156,231,180,235, 61, 97, 65,203,142,189, +161,202,205,192,239,103,247,163,115,183,190, 24, 58,242, 83,184,184,120, 44,227, 59,200,238,155,245,138,139,127,186,230,250,214, +104, 17, 86,187,198,174, 10,126,126,254, 54, 91,254, 44, 31,148, 2, 45, 90,183,195,244,207,198,192, 70, 41,234,134, 55,106,215, +117,208, 39,148, 22,204, 6,146,157,147,173,121,250,228, 81, 7, 93,198,147, 91,118,239, 75,189,222,156,149,149,133,123,247,238, + 33, 54, 54, 22, 49, 49, 49,200,201,201,129, 76, 38, 83,151,179, 62, 57,215,169, 83,103,200,197,139, 23, 29, 92, 93, 93, 95,191, +111, 52, 26,225,228,228,132, 33, 67,134,240, 59,117,234, 84, 33, 34, 34, 98, 56, 33,100, 55,165, 84, 89,156,142, 46, 39, 46,213, +217, 39,116, 67,235, 54,173,199, 3,128,216,217, 55, 97,237,182, 99, 49,165,158,107, 50,191,192,102,205,154, 87, 5,165, 32,160, +171, 53,217, 79,211, 75,137, 18, 73,110,222,188, 25,196,229,114,121,255,185, 7,217,240,227,214,125,161,231,174, 61,232,179,100, +217,247, 14,206, 18, 17,178, 20, 70,140, 30,218,219,238,123,176,163, 79,104,215,230,205, 91,255,250,245,130,175,120, 82,137, 4, +103,111,197,227,147,207,190,208,167, 37, 61,252,158,218,248,235, 52,153, 79, 51,223,241, 86,249, 94,122,198, 5, 87,148,194,169, + 71,103,135,143, 63,236,225, 96, 52, 91, 33,215,152, 97, 48, 89, 97,181, 81, 40, 52,102, 60, 74, 86,193,195, 89,248, 54,210, 13, + 1,120, 2,200, 2,112,231,141,215, 40,248, 31,197,188,206,206, 15,143,192, 29,128, 17, 64,209, 31, 47,124, 93,210,251,133,223, +127, 4,160, 70,129,166, 21,192,109, 0,121,197,153,173,226,162, 92,188, 19, 39, 78,208,136,136,136,215, 87,252, 55, 95,191,137, + 72,192,247,147,200, 60, 65,233, 99, 20,185,183,193,219,183, 98,206,250, 13, 63,185,201, 92,221, 95, 40,242,114, 2, 11,126,228, +188, 61, 55, 11, 30,225,174,104,221,166, 85,167,241, 19, 38, 32, 36,168,162,192,106,181,210,135,177, 9,230,237, 91,182,142,144, +249,135,173, 82,166, 60,156, 83, 24,130, 44,111, 47, 7,171,205,154,242,102, 4,203,106,179,166,188,177, 51,206,255,121,135, 1, + 46, 82, 33, 54,156, 74, 4,165, 0, 1,133, 76,194,199,222,203, 41, 72,136, 60,172,236, 86, 87,169, 25,178,100,126,187,182, 93, + 39, 95,124,244, 92,191, 63, 51, 83,127,134, 82,154, 94,146, 38,135, 0, 60, 46,129,179, 35, 31, 50, 71, 1, 92, 36, 2,144, 34, + 55,176,162,205,133,109,186, 78, 62,119,241,183, 23,179, 0,100, 21,205,135, 42,170, 41,246, 9,110,232,236, 82,113,127,159,241, + 75,157, 30,164, 88,192,227, 2, 85,124,196,112,115, 18,192,104, 33, 72,202, 50, 21,156, 57, 46,248,100,218, 2,183, 25, 83,199, +159, 36,164,102,109, 74, 31,153, 74,219,118,173, 86, 43, 28, 54,108, 24,223,108, 54,155,134,140,254,180, 83,122,122, 86,207, 31, + 87,127, 39,242,242,242,134, 86,111, 65,100,204,179, 26, 95,127,189,160,202,177,211,151,143,204,255,226,227, 95,187,116,233, 34, +219,183,111,159,173,172,253,249,135, 39,196,140,236, 31,182,238, 58,184, 99,229,247,139,241,244, 69, 30,182,108, 92, 7,106,181, +108, 40, 35, 44,123,190,200,255,116,214,172, 89,226, 35, 71,142, 84,148, 72, 36, 74,173, 86,155,245,135,120, 4,135,240, 50,114, +181,240,112, 18, 66,192,227,192,219,213, 1, 94, 50, 17,248, 92,128, 67,136,181, 56,205, 45,251, 79, 44,180,105, 21, 56,186,199, + 56,104,235, 15,139, 48,114,210,108, 60,204, 22,158,230, 56,202, 22, 78, 28,212,103,134,167,216,218,197,207,133,227,213,174,126, + 37, 72, 28, 4,152, 57,121, 24, 26, 69, 38,121,189,146,219,102,103,233,184,245, 0,204, 46,246,184,115,242, 35, 88, 78,142,124, +156,222,181, 44, 83,163,200, 82, 20, 54,201, 25, 13,250, 23,118,134,164,207, 23,243,100, 59,163,126,189, 58,139,198,143, 29,197, +105,222,180, 17,229,112,248,200, 86, 25, 9,165,192,103,159,124,140,137, 31,143,241,121,153,154, 57,119,221,186, 13,115,164, 94, + 53,190, 81,103, 62,158, 95,154, 38,135,228, 71,129,164, 14, 60, 72,197,249,198, 69,234,192,131,222,104, 5, 33,224,186, 6,214, + 87,144,252, 72,110,106, 78, 82,241, 79,224,111,106,186, 5,212,186,112, 46,193, 41, 52,111,127,222,141,196,212,152,133,145,209, + 25,183, 41,165,185, 1,173,167, 14, 55, 89, 40,212,122, 11, 18, 51,180,176,152, 40, 25,249, 65, 32, 42,247, 35, 33,139,183, 70, +237, 32,132, 56, 23, 26,232, 55, 53, 83,110, 28,208,123,132,245, 25,184,114,205,198, 59,223, 47,154,205,205, 86, 24, 97,163, 20, + 14, 66, 46,196, 66, 94,193,194,133, 78,163,192,186,245, 63,165, 91, 64,250,208,203,151, 45,229,169,159,176,209,161,189,187,182, +218, 75, 0, 33,225, 8, 82,252, 2, 43, 5,182,239, 62,194,161,125,143, 97,176, 90,140, 51, 36,222,161,151, 52, 25, 79, 46,216, +163, 89,187,102, 13, 16, 32, 74,157,241,244, 99, 0,144,122,135,108, 8, 13, 9,173,255,230,123,213,170,133,212,183,231,184, 23, + 34, 16, 59, 79,114,117,243,156, 29, 82,171,158, 87, 80, 88,107,226,228, 94, 17,137,113,247,176,103,253,220,157, 54,189,113,193, +133, 19,251, 23,173,218,242,203,128,246, 93,122, 99,235,143,223,205, 4,112,241, 79,231,145,205, 54,116,251,230, 77,254,124,161, + 8,102,139, 13,102, 43,205,255,107,177, 34, 55, 55, 15,102,139, 13, 14,142, 78,176,216, 8,204, 86, 27,204, 22, 27, 12, 70,139, +228,227, 97, 17, 19, 0,220, 42,174,156, 21,107,180, 57, 35, 16,137, 2, 41,242,231,174,165,148,130,107, 49,114,124,125,125,119, + 3,128, 72, 36,130, 72, 36,130,205,102, 67,228,211,172, 73,158,161, 29,198,163,192,224, 89, 77,198, 23,121,137,215, 59,151,180, +237, 62, 62, 62,221,223, 52, 89,122,189, 30,106,181, 26,215,110,220,145,109,222,113,176, 75,226,139,148, 32, 27,149, 25,156,188, +130, 58, 3,232, 94,210,254, 84,166, 63,153,224,223,116, 44,231,243,137,195,171,173,217,126,252,118,220,233,111,102,150, 86, 37, +170,116,152, 97,252,124, 92,223, 6, 75, 86,111,137,203,189,190,126, 74, 89,199,136,199,227,241,179,178,178, 94,159,223,107,127, +218,211, 32,234,233,171, 94,171, 86,174,114,136,140, 87,225, 65, 98, 42,134,119, 8,192, 31,110, 2,165,104, 74,125,170,122, 84, +173, 26,186,123,221,234, 37,188,184, 84, 61,126, 56,124, 27, 23,127,221,112, 45, 61,243, 86, 23,154,158,170,123,155,107,200,187, + 26,173,210, 52, 47, 69,103, 67,173,183,192, 96,180,192,108,163, 80,106,205,200,148, 27,161,212,154,160,214, 89, 48,188, 99, 64, +177,223, 43,195,143,120, 18, 66,142, 83, 74,187, 33,127, 88, 42, 97,145,215, 32,132, 28, 47, 40,215, 31, 94,207,152, 49, 99,214, +183,223,126, 27, 83,184,110,225,251,133,235,150,246,126,145,239,187,207,156, 57,179,246,146, 37, 75, 22, 55,109,218,116,239,239, +191,255,158, 80,156,209, 42, 53,162, 85,184, 49, 39, 78,156,160,101, 60, 81, 4, 57, 58,187,139,156,197,124, 84,169, 28,128,143, +102,109,245,112,118,243,206,116, 16,242,184,167, 78,157,118,203, 49, 74,193,225,112, 53,246, 71,177,170, 55, 19,139, 29, 79, 44, + 95,190, 28,131,186,183, 20, 39,103,155,213,209,201,186, 12,141, 17, 22, 47,207,234,194,133,139,151, 72,151, 44, 93, 54,241,248, + 81,155, 28,192,178,226,155,248, 26,222,229,146, 34, 57, 88,132,128,218,172, 41,185,137,183, 27, 0,192,187,228, 98,169,245,102, +112, 11,114,107, 8, 1,180,122, 11,184, 92,146, 41,127,186,255,209,144,111, 22,182,219,185,247, 92, 42,229,184,168, 52,154, 68, + 71, 74,105, 74,233, 17, 3, 2,165,214, 12,153, 35, 31, 46, 82, 62,100, 18, 1,184, 69, 78,178,194,230,194,157,123,206,190,122, +241, 34,231, 78,129,201, 42, 81,147,199,229, 36, 80,171, 89, 79,169,213,169, 91, 67, 79,120,185, 8,225,235, 42,130, 72,200,131, +217, 2,232,140, 54,232,141, 86, 36,101,234,160,210,137, 17,214,186,127, 21,119,223,187, 6,247,192,134, 71,114, 94,220,233, 83, +170, 57,181, 90,177,125,247,193,106,169,169, 25, 61, 79, 30,217, 37,202, 82,154, 17,157,164, 65,166,220, 0,112, 61, 49,111,241, + 15,162, 47,167,140,237,181,125,207,161, 23,237, 91, 54,126, 81,222,253,170,201,124,178, 51,172, 89,196,134,110,221,122,137, 99, +110,157, 68,220,189, 11,139,212, 25,246,231,103, 17, 66, 56, 7, 14, 28,176,140, 29, 59, 86,181,120,241, 98,255,163, 71,143, 86, +206,202,202,186, 7,192,236,226,226, 18, 90,189, 90,224,253,179,167, 79, 85,136,232,213,159,159,146,173,131,204, 81,128, 64, 47, + 71,220,184,118,198, 44, 20,242,139,205, 55, 41,104, 30, 28, 92,177,195,151, 56,122, 35,161, 75, 76,142,195,229, 49,163,134,191, + 56,123,245,105,206,218, 29,103,191,171, 32, 53,223,115,176,101,173,189,219,160,170,207,140, 79,134,225,219, 53, 59,113, 37,242, +105,166,134,227,187, 40,205, 96, 57, 55,127,224,244, 18, 66,233,249, 6,219, 73,204,135, 70,153,165,120, 22,121,170,250,123,138, + 84, 15, 63,123,100, 39, 39, 87,101,198,203,108, 61, 73,205, 85,193,106,163,112,113, 20,192, 98,163,144,231,102,147, 93, 59,119, +224,206,157, 27, 28,112, 57,163, 1,204, 47,181,153,139,228, 55, 21, 74, 29,248,249, 17, 33,113,254, 95,179,213,134,144,106, 85, +177,105,237, 10,103, 15, 47,111,180,104,213,214,254, 40,181,123, 96,221,189,219,214,226,242,239, 81,109,174,172,250,161,161,212, +207,115,141,115,197,154,223,203, 42,119,212, 27, 76, 86, 40,228,121, 16, 26, 95,162, 81,133, 44,184, 57, 90,145,164,244,197,195, +244, 56,105, 89,185, 80,217, 15, 14,223,243,172,221,123,206,193, 99, 23,191,237,220,177, 13, 30, 38, 41, 33, 22,242,224, 32,228, +194, 65,200, 5,159, 88,177, 98,253, 6,115,158, 66,213, 45,251,225,145,236,183,168,159,231, 11,158,126,243,111,114,222, 65,158, + 59,215,204,249,121,204,244,165,157,187,244, 30, 65, 30,222,185, 52, 11,192, 5,251, 30,244,168, 93,239,217,108,246,223,227,196, +206,158,171,167,206, 89, 54,185, 83,183,254,224,114,121, 48,155,205, 56,180,111, 39,182,253, 48,239,137, 81,157, 51,130, 82,106, + 35,196,109,236,254,157,235,251, 79,159,187,130,212,174,219,168,113,177,126,146, 75, 54,126, 56,106,220, 64,111,111,111,167,255, + 68,180, 40,170,135,212, 68,215, 30,125,113,230,215, 95,240, 40, 38, 26, 54,154,111,152,108, 54, 10,121, 94, 78,186,197,108,220, + 94, 98,139,135,131, 67,224,214,109, 59,130, 57, 28, 2,147,217, 6,163,197,134, 41, 19, 62, 50,126,252,217,172, 22, 93, 59,181, +142, 17,114,161, 76, 74, 78,115,185, 17,245, 56,204,198,151,250,143,154,182, 66,160, 55, 88,161,208,154,113,114, 75,201, 94, 71, +236, 22,216,180,110,179, 94,163, 62,254,106,147, 72,196,229,152,106, 85,247, 79,104,221,164,214,203, 0, 63, 15,213,215, 75,126, +104,116,253, 86, 84,215, 1, 67, 70, 57, 12, 15,173, 79,252,220,197, 78, 31, 13,233, 93, 71,226, 30,240,161, 38, 39,185,196, 41, +211,248,142,174,242,128,202,213,180,255,137, 24,133, 28, 38, 20, 85,254,112,227, 36, 72,208,166, 63,237, 3, 0,190,126, 1,122, +190,200, 89, 85, 14, 35, 66, 1, 96,205, 79,123, 26,220,143, 77, 29,179,114,229, 42,199,200,120, 21,238,197, 43, 32, 18,112, 96, + 50,219, 64,236, 12,106,219, 40,119,220,236,153, 51,156,243, 52, 86, 92,142,206, 66,204,221, 75,212,168,214, 15,113,180, 56,247, +145,120,135,124, 8,160, 42,128,231,132,208,141,154, 12,159, 95, 41,189, 92,238, 78, 6, 54, 91,254,243,178,204,171,106, 21, 43, + 79,212,149, 47,148, 52, 37,132,214, 34, 20,174, 0,125,149, 83,112, 79,181,215,169,105, 50, 98,177,116,241, 92,172,222,252, 11, + 82,115,244,144, 89, 95,226,215, 45, 11,241,249,183,187,161, 51,148,156,213, 80,150, 31, 41,206, 24,189,105,184, 10,255, 47, 92, +239,219,111,191,237,246,198,177,233, 86,194, 49,251,211,122,133,223, 95,178,100,201,226, 34,159,107,237, 53, 89,175,141, 86,225, + 70,149,177,113,213, 61,125, 3,127,255,245,200, 97,215, 60,181, 9, 14, 2, 46, 2, 42, 87,195,252,181,191,122,126,208,192, 3, +217, 38, 25,246,108,250, 62, 87,175, 85,237,179,235, 98,225, 29,218,216,201,201,233,228,225, 67,191, 32, 40,192, 75,176,235, 90, +110, 98, 84,130,238,117,168, 87,153,245, 66, 88,217, 89,203,235,211,187,183,227,133,139,151, 62, 43,201,104,113, 9,183,226, 79, + 59, 14,121, 57,137,249, 32, 4, 80,233, 44, 24,243, 97,223,119,191,141, 81, 27,119,212,136,225, 32, 5, 38, 75,153,147,142, 89, + 95, 78,208, 75,204,113,143,146,147,146, 95,117,232,254,249, 5,165,154,232, 7, 14,155,112,231, 81,236,183,121,101,215, 98,115, + 74,215,136,174,130,252,200, 1,192, 37, 4, 54,106,203, 8,169, 44,253,228, 79,205,133,233,134,159,202, 50,110,170, 87, 79,115, +157,124,195,250,237, 92, 62,233, 39, 63,111, 47,119,169, 68, 76,165,142, 34, 82, 43, 52, 88,208,164, 73, 51, 97,229,144, 58,130, +107,143,117, 72,206,210, 33, 33, 85, 1,145,119, 61,222,160,118, 31, 96,231,170,105,109, 8, 33,156, 55,147, 20,223,228,220,229, +155,221, 55,175, 95, 41,202,144,155,240, 36, 89,141,244, 60, 61,210,242, 12, 72,207,213, 67, 42,230,163, 85,143,177,162, 19,191, +110,236,222,190,101,227, 53,111,179,123, 19, 18, 18, 79, 36,189, 74,235, 95, 39,188, 17,118,254,188,173,165,171,107, 21,231,188, +188, 4,165,189, 71,103,225,194,133,194, 37, 75,150,240,214,174, 93,171,108,210,164,137,207,204,153, 51, 59,103,102,102,222,174, + 84,169, 82,200,153,195,219, 47,214,107,213,179, 33,108, 38,207,150,173,219, 10, 68, 54, 30,206, 30, 63,110,218,191,111, 87,142, + 78,167,250,184, 84,195,225, 40, 91,152,161, 38,240,172, 80, 33, 70, 42,180,118,228,113,228,177,185,167, 62,217, 1,224,112,213, + 15, 38,159,191,116,247,105,108,131,200, 36,175,139,145,207, 50,115,181,166,234,207, 79, 77, 45,245,194,203, 37, 4,124, 46, 7, + 78, 98, 30, 56, 5, 87, 85,167, 10,117,159,129, 16,207,194,200, 41, 1, 41,248, 11, 16,130,212,220, 23, 81,118,228,108, 16,106, +163,192,211, 20, 13,212,250,252,208,124, 69, 15, 71,100,101,164,224,199, 53,219, 17,117,247, 14, 58,125,208, 3,235,126,218,133, + 49, 31,246,215,151,165,198,225, 20, 68,180,138, 68,179,164, 98, 30, 0, 2,185,198,140, 67,215, 95,162,106, 21,142,221, 55, 6, + 0,112,146, 58, 66,161,210,129, 35,112,194,243,200,147,142,167, 46,221,154, 57,231,155,149, 95,228,165, 69, 39, 63,123,112, 13, + 33, 30, 10, 84,169, 96, 66, 76,186, 51,238,230, 84, 70, 72,181, 32,112, 4,119,236,210,206,142, 9, 91,250, 43,231, 80,183, 6, +245,106, 54, 13,244,114,129,206,104, 45,136,106,113,177,109,235, 14, 36, 37,166,140,202,142, 57, 18,245, 62, 28,173, 58, 35, 62, +203,193, 59,120,226,131, 91, 23, 18,122, 15,153, 8,223, 10, 1,117,203,147,182, 96,207,123, 86, 59,141,150, 80,226, 58,115,218, +220,229,147, 59, 69,244,195,205,107, 23,112, 47,230, 57, 26, 55,110,136, 15,122, 13,130, 74,153, 27,122, 96,199,170,142, 0,206, +240, 68,150,201,141,154,181, 35, 54,171, 21,113, 79, 30, 62, 47, 78, 75,155,250,228, 30, 0,231, 63, 52, 79,121,214,168, 43,149, +185,221, 51,152,172,120,245, 42, 5,191,253,126, 57,188, 96, 61,187, 17, 9,184, 56, 27,149, 9,147,217, 6,147,197,134, 86,173, + 59, 26, 5, 28, 67,203, 69, 43,183, 54, 73, 75, 77,227, 72,156, 61,108,110, 21,106, 8,124, 69, 38,195,253,120,133,192,100,182, + 33,200, 79, 82,170,166,167, 95,181,197,211,166, 77,169,193, 21,136,161,210, 24,140,105,169,175,124, 54,237,185,164,126,252,228, + 65,133,138, 94, 50,231,239, 86,109, 20, 40,245, 4,153, 10, 3,114, 85, 74, 50,100,220,116,191,205, 63,124, 59, 20,128,221,115, +211, 18,138, 42, 39,206, 94, 11,117,117, 18, 16,181,222, 98,203, 81,154,172, 67,122,181,125,167,186, 83, 96,178,198,174, 92,177, +202, 49, 42, 94,133,251,241, 10, 56, 8,184, 16, 10, 56, 48,154,109,176,231,116, 34,132,112,170,212,110,253,113,179, 6, 97, 56, +115, 47, 27, 92, 46, 7, 58, 85,158,150,135,156,216, 6,109, 58, 57,214,111,212, 4,109,219,180,198,179,216,167, 1,199,143, 30, +106,127,227,183, 43,233, 82,175,144, 73,234,204,167,191,148,171,158,107,181, 92,179,208,231, 35,223, 10,149,154,247, 25,244,145, + 44, 48,160, 2,241,242,112,135,133,242, 48,246,195,190,118,159,249,249,198, 28, 88,242,205, 76, 24, 12, 70,120,186, 8, 65, 41, +176,117,205,124, 24,141, 70,248,185,139,160,208,152, 75,252,126, 89,126,164,164, 40, 84, 57,155,161,143, 23,103,182,222,124,159, + 16,114,124,198,140, 25,179, 0,208, 25, 51,102,204, 42,124,253,237,183,223,234, 0,164,150,214,116, 88,212,120,241,138,110, 92, +137,133, 18, 10, 67, 60,124, 3,111,156, 61,115, 90,118,228,190, 13, 55,127,185,139,136,198,190, 16,240, 56,112,148,249,225,126, +162, 2, 39, 14,175,151,255,186,119,227, 43,131,193,176,172,236,182,230,224, 6, 78, 18,231, 51, 63,239,220,103,243,112,119,231, +252,120, 54, 43, 62, 71,101,121,221,164, 21,123,235,168,237,238,153, 77,190, 20,228,180,131,131, 67, 53,163,209,232, 90,214,129, +221,122,246, 69, 65, 18, 47,121, 31,215, 86, 16, 46,215,186,115,215, 78,120, 56, 11, 97, 48,219, 48,227,139, 79,117,195, 59, 73, +229, 67, 6, 12,106,215,182,235,228,139,124, 73,240,133,102,225,193,180, 94,189,122,114, 46,151, 91,166, 94, 78,194,237, 63,245, +174, 8,173,236, 56,122,246,244,225,179,139,105, 46,180, 43,113, 87,149,246,224, 58,128, 63, 68, 72, 72,213,170,194,221, 7,126, +253,180,223,128,129,115, 42,212,237, 37, 77, 76, 83, 64, 64, 76,104, 88,195, 23,151, 78,255, 66, 83,146, 98,167,148,101,178, 0, + 32, 51, 43,215,223,211,211, 27, 81, 9,106,188,202,209, 33,189,192,100,165,229, 25,160,210,169, 80, 39,208, 15,114,133,194,255, +173,247, 47,240,203,153, 51,103,250,119,237, 57, 16,147,191, 88,208, 98,203,250,239,163,165, 62,213, 71,170,211, 99, 47,219,243, +164, 72, 8,201,253,242,203, 47,171,254,244,211, 79,156,161, 67,135,234,194,194,194, 28,134, 13, 27,214, 98,199,142, 29, 14,142, +142, 14,186,251,215,142,206, 25,253,201,140,158,155, 86, 47,172,155,151,151, 71, 44,102,243, 41, 83, 94,222, 12, 85, 25,102, 46, +249,215,153, 79, 72,205, 5, 35, 58,182,244, 60,234,230,200,169, 37,162,198, 65,164,230,130,125,244,209, 60,211,243, 83,107, 84, + 97, 3, 86,124,146, 42,183,205,214,115,188, 22,149,101,178, 0,128,195, 37, 48, 90,172,112, 18,243,193,225,112, 10, 77,188,239, +182,125,167, 28, 61,101, 66,240,185, 28,240,184,249,209,206,108,165, 9, 19, 63,234,105,247,147,128,197, 74,161, 51, 90,160, 45, +120, 58, 84, 41,179, 49,243,139,169,248,160,123,111,140,254,120, 42,242,116,192,221, 4, 21, 76,102,115,153, 39, 5,135,112,160, + 53, 88, 48,178, 83, 32,114,213, 38,104,116, 22, 24, 45, 54, 56, 10,121,224,243, 56,144, 56,240,224,236,200, 7, 40, 21, 20, 94, + 76,248,124,190,222,100, 50,237, 44,229, 56,161,178,191, 55,116,102, 14, 26, 13,252, 30, 29,154, 86, 71,204,245, 67,188, 43, 55, + 31, 84,249,236,139,217,248,116, 76,119, 28,124, 82, 21,110, 94,129,144, 74,196, 48, 83, 14, 0,251,134, 14,161,116,158,205, 55, +180,207,224, 13, 63,109,125,250,245,220, 25, 14,114, 13,129, 72,192,197,197, 11,231,113,227,214,221,213, 89, 49, 71,118,226, 61, +194,167, 28,111,103,103,103, 56, 8,185, 48,154, 12, 70,251, 83, 23, 40, 40, 16, 46,245, 14,217, 80,240,196, 31,110,181,161,152, +247,202, 54, 90,124,177,108,198,228, 47, 23, 46,238, 20,209, 15,103,143, 31,196,129,131,251,172, 77,187,140,226,238,218,182, 30, + 45, 58,244, 64,139, 78, 3,113,234,151, 29, 83,249, 98, 89,205,177,159,126,245, 77,171,118, 93,113,246,196, 65,100,164,167, 44, +183,183,188, 92, 62,153,220,174, 99,119,232,141, 86,180,108,223, 13,167,143,253,242, 9, 10, 58, 89,216,127, 19,123,227,250, 12, +142,101,234,148,201,252, 76,185,145,159,165, 52, 34, 37, 75,139,196, 12, 45,126,221,187,133,218,127,189, 48, 54,108, 85,167, 34, +127,236,210,139, 47,253, 43,250, 26,248, 6,157, 56,246,121,124,232,232,143,134,243,171, 84, 11,229,100, 42, 12,200, 82, 24,144, +173, 48, 64,173,183,160, 90,197, 96,142,217, 66,154,150,247, 56,123,200,132,252,117,199, 18,224, 44,225,163, 89,232,219,119,180, +181,217,108,255, 49, 89, 43,243, 77, 86,116,130, 2, 34, 1, 23, 34, 1, 7, 34, 1, 23, 22, 43,181,235,193, 69,236, 85,189,235, +196, 73, 19,252,140, 22, 32, 71, 97, 4,143, 75,224,229,225, 42,105, 88,119, 48,182,126,255, 9, 0, 96,204,151, 63, 98,244,200, + 97,168, 81, 43, 12,242,188, 60,159,193,253,186,174, 4,240,139,189,101, 61,121,246,114,192,217,171, 81, 95, 78,156, 54, 79, 58, +160,123, 91,238,189,120, 5,210,114, 13,120, 30,171, 42, 87,228, 13, 0, 44, 86, 27, 40, 40,182,239, 59, 14,177,144,135, 44,133, + 9,148, 82, 44, 92,187, 31, 78, 98, 62,210,242,242,155,251, 75,163, 52, 63, 82, 90, 68,170, 28,209,198,110,200,207,229,242,180, + 55,162,245,237,183,223,198,124,251,237,183,197, 70,200, 10, 77,214, 91, 79, 42, 45, 20, 74, 67, 61,220,253,110,158, 61,125,210, +233,151,251, 86, 92,186,159,131,126, 45, 43, 66,157,155,140,101, 95, 12,200, 37,160, 70, 14,151, 43, 55,232,180,135,117, 58,205, + 34, 74,169,169, 84,147,229, 27, 18, 46, 17, 59,159, 95,183,233,103,139,135,151, 23,118, 94,203, 77,201,211, 88,204,255,105,182, + 50,147,187,103, 54, 85,177,216,204, 93,116,233,113,101, 62,222,218, 40, 4,223,174,255, 21, 0,133,205,102, 3,181,217,192,119, +144, 74, 60,171, 54,205, 40,184,208, 57,240, 56, 68, 95,244, 10, 64,109,150,148,172,248,210,195,160, 4,128,204,145,143,125, 87, + 94, 1, 64, 6, 87, 21,249,120,200,128,252,230, 66,189,209, 65, 89,171,106, 85,218,176, 97, 67,185, 88, 44,126,235,131, 93,222, +230, 66,187, 42,208,243,231, 70, 0, 75,253, 66, 90,246,238, 44,173,211, 72,200, 17,160,126,136, 47, 46,157, 57, 66,111,158,222, + 58, 70,155,241,244,103, 59, 43, 34,212,122, 51, 82,115,244,120,149,163, 71,122,158, 30,233,185, 6,164,231,233, 65, 8,129,222, +248,110,195,223,104, 50,159, 30,216,249,243,230, 30, 6, 19, 6,181,234,212, 27, 83,231,173, 11,220,185, 97,201,121,177,119,104, +115,123, 18,109, 41,165, 86, 66, 72,210, 71, 31,125, 84,119,207,158, 61,220,218,181,107,235, 30, 63,126,236, 8,192, 6,192, 36, +149, 58,138,183,252,240,237,153, 70,141, 26,237,125, 21,251,228, 34,128, 60,123,186,231, 87,106,243,145, 40,212, 57,119,108,128, +164, 89,231, 32, 31, 71, 4, 72, 84,157, 67,165,247,151,121,181,255,108,113,230,133, 85,153,105, 6,203,185, 44, 29,183,222, 43, + 53,223,174, 92, 65,179, 65,255,162, 79,191, 65,224, 18, 14, 76,122,237,139,194,202,229, 37, 19, 98,254,174, 39,144, 58,240,225, + 36,230, 65, 42,230,163, 69, 77, 55,148,227,122, 70,205, 86, 27,180, 6, 43,116, 6, 11,244, 70, 11, 60,252, 93,241,211,206, 3, + 72,206,212,225,215, 59,217,120,250, 66,133,224,138, 18, 80, 90,246,101,210,102, 53,107,186,247, 29,234,196,229, 16,112, 57,132, + 83, 51,180, 58,114,213, 38, 8,120, 28, 8, 28,196,144,136,120,112, 22,243, 33, 16,240,145,153,153, 9,131,193,128,128,128, 0, +135,210,173, 32,133,147, 84,140,224, 42,126, 48,153, 45, 56,121,245, 17, 22, 77,233,131,142,173, 26,128,240,165,120, 98, 8,135, +147,155, 19,108, 28, 14, 76, 22, 27,140, 38, 43, 0, 78,137,209,183,128,128,128,118, 18,137, 68,162,213,106, 85, 47, 94,188,184, +156,246,228,112,178, 87,173, 94, 99, 79,159,189,184,179,219, 7, 29, 17, 21, 29,131,131,191, 28,189,150,237,174,152, 86,248,157, +218,181,107, 55,241,240,240,144,230,228,228, 40, 31, 60,120,112,251, 45,159,126,137,196, 59,244,179,166, 45,218, 64, 45,207, 68, +198,203, 68,187,159,162,107, 4, 58,225,171,111,215,213, 15,169, 30, 82,223, 74,243,141, 87,205, 0, 39,124, 62,111, 77,253,170, +193,213,235, 23,118, 8,169, 17, 32, 45,221,100, 73,156, 59,125, 56,246,243,111,123,244, 27,129,139,103,143, 98,197,162, 47,118, + 74,100,158, 53,220, 92,101,245,106, 55,233,132,107,231,143,194,193,201, 7,174,238, 62, 45,134,142,156,212,161,223,208,113,184, +113,237, 60, 86, 47,153,181,195,106, 80,237,182,167,172, 82,239, 32,207,122, 13, 91, 13,113,114,243,134, 92,161,130,147,171, 23, +106,212,105, 56, 68,234, 29,244,165, 58, 35, 62,235,109,207,117, 27,165, 48,152, 40,242,212, 38,188,204,210, 33, 41, 61,223,104, +217,108,229,200, 9,178,218,136,212,129,199,115, 51, 63, 11,120,112,254, 34, 13,244,247, 38, 75,191,249,130,107,130, 3,178,228, +249, 38, 43, 75,105, 68,150,194, 8,181,222, 12, 55, 9, 15, 54,171,173,220, 79,221,121,106, 19,156, 10,242,104,173,182,183,207, + 13, 95,191,109, 95,200,253,216,212, 94, 43, 86,172,114,188,151, 80,196,100,241,243,163, 89, 34, 1, 23, 86,155,173,224, 78, 83, +134,193,230,241, 39,247,236,218, 1, 47,179,117,249,189,150, 57, 4,193, 97,141,224, 33,182,161,253,192, 25, 0,128,238, 93,243, +135, 47, 73, 72,211,224,216,205, 44,224,143,137,221,165, 95,139,117, 58,238,166, 93, 39, 62, 59,176,127,175, 76,111,229, 97,227, +169, 36,104, 13, 22, 56, 8,184, 16, 9,184, 16, 11,184,127,200,199, 46,219,104,229,231,220, 37,103,155,161,213,235,161,212,153, + 65, 1,220,126,166,134,206,104,129, 66, 99, 70,147, 80,215,119,125,246, 57, 1, 32,226, 77, 67,244,166, 89, 42, 18,145, 42,142, + 59, 69, 53, 10,215, 47,201,200, 21,205,217, 2, 80,174, 30, 92,188, 55,157, 99,209,215, 66,169, 91, 13,153,187,231,205,211,167, +142, 75,127,185,111,195,229,232,124,147,101,214,101, 99,249,151,131, 83,148,242,236,182,148,210,120,123,127, 76,226, 89,179,142, +216,209,241,226,119,171, 54,154,188,188, 43,216, 14,223,148,103, 42,180,214, 63,196, 16,173, 6, 3,135,218,168,192, 30,147, 85, +208,228, 97,154,247, 73,111,216, 40,197,252, 85, 7,176,120,218, 64, 72,197, 67, 29, 9, 33,142, 26,189, 5, 83, 22,108,198,242, +175, 70, 57, 57,138,120, 32, 4,208, 27,173,248,112, 80,111,251, 42,160,222,130,231,183,246,168, 85, 9,199, 31, 23,109, 46,108, +220,226,131,187,141, 27, 55,150,187,186,186, 66, 44, 22,255, 39, 82, 97,231, 69,187,184,222,133,153,114,164, 56, 57, 57,181,118, +118,118, 46,170,167,145,203,229, 71,222,166, 22,170,228,217, 23,211,147, 30, 52,106,222,182, 59, 46,159, 57, 66,111,158,218, 50, +166, 60, 99,244,184,186,185,190,140,124,240,188, 6, 33,110,249, 17,173, 2,147,101, 52,219, 16,232,237,136,151, 73,207,225, 34, +147,189,180, 87,207,209, 43,180, 39,225,208,143, 9,232, 86,117,122,236,129, 2,211, 51, 88,226, 19, 26, 29,243,240,222,162,110, + 67, 38,243, 58,245,155,192,221,240,237,164, 89,120, 35,137,181, 20, 76, 79,159, 62,125, 52,106,212,168,102, 55,110,220,176, 2, +208, 18, 66,204, 92, 46,215,209,104, 52, 10,218,182,109,171,120,242,228,201, 21, 20,147,180,248, 38, 45, 71, 30,244, 32, 34,213, + 7, 85,131, 27, 14, 14,116, 82,117,108,219,178, 41,154,214,242,199,203,150, 77, 1, 96,242, 11,181, 52,164,197,248, 45,251,170, +120, 86, 60,185, 97,219,177,197, 99, 6,118,152,226,215,125,193,138,212, 99,243, 74, 77, 68, 77,126,116,185,115,113, 54,158,199, +229,192, 73,204,135, 84,204,131,147,152, 15, 39, 7, 62,204, 22, 90,158, 39, 71,106,182,216,242, 35, 90, 70, 11,212, 58, 11, 46, +222,203, 64,186,194, 8,185,202, 4,157,201, 10, 10,154,255, 52,106,199,213, 60, 51,238,186,203,235, 99, 31, 88, 95,177,105,237, +247,206,135,174,167,188,238,209, 39,115, 20,194,201, 49,191, 55,246,213,171, 87,225,238, 94,246,211,190,205,102,195,193,211,183, +177, 98,251, 69,156,222, 58, 29, 14, 2, 46,234,244, 92,128, 17,189, 26,195, 70,109,120,254, 52, 38, 35,184,102, 93,111, 14, 71, + 12, 14, 33, 48,152,109, 0,104,137,251,211,104, 52,186, 39, 39, 39, 43,171, 85,171,230, 83,161, 66,133,126, 92, 46,151,138, 0, +195,145,189,185,218, 11,199,119, 59,106,116, 6,171,163, 69,177,181, 90,154, 46, 34, 56, 56, 24,132, 16,234,225,225, 33,184,120, +241,162, 58, 44, 44,204,243, 45, 77, 22, 71,236, 85,125,245,232,241,159,245,171, 26, 20,132, 3,187,183,130, 82,114,200,222,239, +239, 58,118, 3,223,204,252, 99, 15,195,207,231,173,169,191,124,193,228, 63,188, 55,126,230,138, 82,123, 29,138, 69,210,105,125, + 6,143,197,221,219,191, 99,217,130,207,247, 26,212,185, 35,204, 22,115,255,220,180,132,189, 85,106, 54, 6, 53,169,112,118,255, +247, 24, 56,108,140,168, 83,183,126,184,113,237, 60, 22,207, 26,191, 75, 43,207,252,200,222,241,191,108,148,255,113,219,206,189, +248, 58,131, 9,107,150,206,197,184,105,139,208,164, 93,119,254,195,123, 55, 63, 6,240,181,189,219,108, 48, 89,209, 54,204, 35, +223, 60,155,109, 56,154,192,229, 21, 87, 3,121, 92,194,169, 23,228, 2,157,209, 2,165,214, 92,250,141, 74,192, 79,151, 43,148, +149,126, 88,252, 25, 87,163,183, 32, 75, 97, 68,166,194,128,108,249,127, 12, 86,182,194,128, 44,133, 17,124, 30, 65,108,252, 11, +112,248,188,114,231,231,229,169,205,104, 84,221, 53,255, 28,125,203,214, 17, 51,207,185,241,233, 43,247,251,172, 88,177,210,225, +126,162, 10,209, 9,202,130, 72, 22, 23, 34, 62, 7,194,130,255,173, 54,160,172,159,144,121, 85,173, 50,124,212,152,246,206, 82, + 49, 82,227, 50,193,227,230, 15, 17, 35,243,242,135, 76,164,199,164,241, 99,225,225,238,130,228,108, 3, 86,255, 18,139,232, 71, +207, 96,211,149,111,179,215,108,220,219,101,244,196,207, 93, 56,124, 33,118,156, 73,204, 47, 39,215,138, 39, 55,143,233, 83,159, + 63,208,168,149, 57, 20,212,106,103, 0,128, 80,139, 53,191,186, 45,158, 63, 3,123,183,255,136, 51,145,153,175,147,183,174, 31, + 90,142,207,102, 46, 68,182,210, 88, 80,245, 75,143,100,189,241, 58,171, 72, 36,234, 79,175,139,152,163,226, 94,147,130,215,198, + 18, 52,140,111,152, 43,227, 27,239, 27,223,208,187, 95,204,195,255,166, 50,155, 14,255,100,138, 92,189,106,203,156,100,191,159, + 58,117, 76,114, 36,154,190, 54, 89, 38,109, 54, 93, 52,185,123,138, 82,158,213,169, 92, 38,203,171,122,109,145, 68,114,101,206, +194,213, 6,239, 10,149, 44, 39,239, 41,115, 84,122,235,159,194, 34, 2, 71,137, 85, 34,243,212,187, 4,134,175,224,235,140,115, +179,178, 30,105,202,138, 60,217, 40,197,241, 91,233,160, 52,255, 17,105,255,213, 87, 40,120, 50,135,213,150,223,172,114,238, 94, + 38,120, 5,121, 40,246,134,191,215,111,252, 81, 25, 17,166,208, 12, 89, 60,255,117,115, 97,147,186,249,145, 44,103,103,103,184, +184,184, 64, 42,149,194,158,166,195, 66, 74,234, 93,232,228,228,212,250,222,189,123, 14,206,206,206,224,114,185, 48, 24, 12,168, + 85,171,214, 91,157,232, 82,159,208,137,141,218,245,158,213,162, 93,119, 92, 60,125,152,222, 60,189,109,108,121, 7, 66,140,232, +208,236,216, 55,223,204,175, 50,103,209, 15, 34, 39, 7, 30, 30,171,141,224, 16,130, 64,111, 71,184, 75, 56,184,124,100,135,126, + 96,247,102,118, 15,142,231,239, 95, 97,231,242,181,155, 36,203,151, 44,104,235, 84, 33,228,162,234,213,211, 92, 0,208,164, 63, + 89,234,232, 19,250,168,226,239,103, 79,214,109,221, 27,222,126, 65, 29,203, 17,254,165,132, 16,109,124,124,124,194,156, 57,115, + 66,150, 44, 89, 66,185, 92,174, 13,128,104,213,170, 85,218,184,184,184,123,200,239,154,139,178,110, 54,237, 59,214,154, 34, 21, + 90,155,184, 57,114,106, 5,249, 56,162,105,173,252, 86,209,129, 17, 45,224, 31, 16,128,248,116,109,189, 92,173,141,175, 54,114, +131,214,109,140,190, 83,217,131, 59,198,162, 51, 62, 66, 25,131,201,150, 84,103, 11, 19,228, 11,163, 89, 78, 98, 62,108,249, 55, +246,114, 25, 45,131,201, 10,157,193, 10,157,209, 2,141,209, 10,173,209, 10, 27,205, 63, 39, 8, 33, 48, 89,108,176,235,177,249, +141,186,239,236,230,129,160,202,249,189,100,157,196,249, 67, 61, 56, 59,242,243,251, 72,187,187,195,203,203,203,174,168,168,209, +148,127,138, 27,205,182,215,205,250, 70,147, 5,148, 82,196,198, 62,157,158,148,144,208,179, 90,112,181, 86, 53,235,212,117,115, + 20,113, 0,160, 68,163,165,213,106,173, 78, 78, 78, 94,110,110,110,156, 87,175, 94,189, 54,207,213,234,181,181,252,114,248, 16, +250,244,233,173,126,124,251,254,235, 46,238, 58,157,142, 52,111,222,220,217,223,223,159, 99, 48, 24,148,229,219, 7,132, 72, 60, +171,247,242, 15,109,182,232,195,143,198, 85,111,219,161, 11, 46, 93, 56,139, 95, 15,239,249, 89,147,249,212,238,145,179, 67, 66, + 66,255,212,235,176,106,112,245, 63,245, 58,172, 84, 37,184, 84,163, 85,179, 78,195,198,148,240,112,230,248,126,170,231,152,198, +231, 39,188,147,253,251,214,127,245,245,224,143,103, 86,237,218, 99, 48, 62, 28, 54, 2, 60, 30, 23,151,207, 29,195,242, 5, 83, + 79,168, 21,153,195,237, 73, 19, 0, 0, 82,179,166,160, 90, 64,165, 79, 3,170,214, 70,228,205,107,120, 30,251, 48,230,254,157, + 27,181,170,133, 53,129,167, 95,224,167,164,102,205, 37,244,209, 35, 83, 89, 58, 70,189,254,197,136,225,195, 80,180,215, 97,211, +240, 16,119,242,230, 9, 0, 64,171,202, 52,109,249,126, 74, 92, 97,175, 67,155,201,248,162, 36, 93, 69, 94,214,193,203,191,221, +154,214, 51,162, 11, 39, 91,105,204,143, 96, 41,140, 5,139, 1,217,133,255, 43, 13, 8,246,147,226,105, 76,164, 77,175,200, 62, + 84,206,243, 82, 63,162,127,231, 71,133,117,215,102,163, 32,128,190,188,231, 55,229, 59,143, 93,186,108,133,195,253, 4, 53,162, + 19,149,249, 77,133,124,110,190,193,226,115, 94,155,174,252,222,236,101, 68,135, 8,119,241,200,225,131,144,173, 52,193,102, 3, +120, 92, 78,193, 34, 64,178,138,224,165, 74,139,236,188, 44, 36, 36,189,128, 60,253, 57, 56, 28, 14, 60,252,170,195,222,240,163, +149, 10,125,181, 70, 26,214, 47,162, 21,239,240,239,105,112, 20,241, 96, 80,101,224,212,190,239,179, 12,106,229, 34,157, 86,125, + 88,151, 19,151,106,239,182,115, 8,201, 82,170,245,222, 34, 62, 23, 7,182,255,128,254, 35,198, 23,236,148,252, 63,211,103,127, + 3,112, 8,114,243, 84, 32,132,148, 55, 74,122,167,140,215,111,195,251,208, 64,113,230,234, 15, 15, 10, 37, 63,141,210, 83,103, + 79, 31,147, 92, 79, 18,225,246,211,180, 2,147,149,101, 91,248, 73, 68,138, 74,145,219,153, 82, 26, 91,174, 18,112, 56,157, 7, +142,156, 22, 19, 84,189,166,225,210, 67,117,162, 92, 99, 46, 49,207,161,105,191, 57, 49,119, 79,172,237,170, 48,199, 79,144,250, +213,178,218, 44,150,165,218,204,167, 11, 74,104, 58, 20, 46, 88,125,224,117,179,225,151, 75,118,228,255,111,181,194, 74,109,160, + 54, 96,210, 87,235, 97,177, 89, 97,179, 90, 97,179, 82,152,173,212,177,172,226,122,249, 85, 58,156,247,100,127,232,144,175,255, +220, 92,232,226,226, 2,119,119,119,184,187,187,163,208, 24,189,107,115,161,179,179, 51,164, 82, 41,174, 93,187, 6,177, 88, 12, +137, 68, 82, 46,221, 34, 38,107, 66,195, 54, 61,127,104,215, 99, 20,206, 29,222, 72,239, 92, 61, 54, 78,155,241,116,179,221, 17, +122,171,149,152,205,102, 68,116,106,243, 34, 42,230,217,233,217,211, 62,238,210,172,219, 56, 81,211,144, 10,208, 27,173, 72, 73, +122,142,203, 71,182,233,171, 87,241, 61,211,190,101,227, 23,102,179, 25, 86,171,181,204, 27,185,222,104,202,230,242,197,146, 65, +131,134,240,239,220,190,125, 72,234, 85,253,128,149,112,238, 19,106,171, 67, 8,233, 83,167, 78, 13,152,204, 54,104,181,202,188, +242,110,179, 74,165, 74,216,186,117,107,149,225,195,135, 59,214,172, 89,147,255,252,249,115, 44, 95,190, 60, 71,165, 82, 37,216, +171,113,246,234,211, 85, 60,146, 23, 39,180,153, 6, 7, 58,169, 58, 38,183,104,138, 65,221, 90, 96,239,137,235,184,124,237, 6, + 94,168,165,247,212, 22,222,145,151, 47, 82, 13,181,220,148,135,122, 52,173,196, 61,176, 61,239,144, 87,219,153, 3, 40, 21,157, +205,186, 60, 79, 99,255, 77, 28, 80,233,204,112,118,204, 31,239,169, 48,178,197, 37,196,110, 71, 68,128,132,107, 55, 34,107, 55, + 8,174,137,168, 4, 5, 50,229, 6,232, 12, 22,216,108, 20, 54, 80,184, 59, 9,225, 32,224, 32, 57, 41, 1, 54,106, 74, 44,231, +229, 34,171,117,171,214, 60,128,128, 16,202,227,243,120,160,200, 31, 95, 81, 44, 22,171,189,188,188,236,138,104,153, 44, 22,244, +233,210, 24, 77, 26,214, 65,207,113,249, 99,102, 94,248,121, 6, 92,165,124,236,221,185, 25,201, 87, 86,238, 12,106, 54,254,236, +195, 7, 49,125, 99,162,126, 31,242, 65,125,113, 61, 31, 94,170,160, 36, 61,181, 90,125,136, 16, 34, 20, 8, 4, 93, 90,181,106, +229,118,232,208, 33,185,135,135,135, 77, 40, 16,100,245,232,222,205,198, 23, 8,114, 11,215,253,237,183,223,248,227,198,141,115, +202,203,203, 75,206,200,200,184, 65, 41, 53,151,254, 32, 24,218, 1, 28,236, 1, 33, 14, 82,177,227,139,166, 29, 6,249, 53,108, +210, 88,214,171, 79,127,136,132, 34,156, 59,123, 26,107, 86, 46,217,175, 78,123, 60,178, 60,123,242,125,245, 58, 76, 73, 78, 76, +208,234, 12, 97,181, 27,180, 33,215,206, 30,153, 76,136,231, 74,174,200,249,251, 14,125,198, 87, 77, 72, 85, 99,205,183,211,225, + 42,147, 32,241,249, 19, 93,220,227, 7,235,205,122,229,116,123, 77, 22, 0, 56,230, 88,251, 54, 29,214,197,213, 96,178,226,234, +197, 19,122,155,197,214,229,198,149,147,207, 43, 86,111,232, 80,187, 97,123,215,236, 95, 55,247, 1,176,183, 44,157,148,199,127, +142,224, 6,132, 52, 74,188,112,241,188,204, 59,176, 22,151,128,192,100,208, 35, 43,254,142, 69,155,241, 68,169, 72,121, 96, 87, + 47,220,156,151,248,106,230,188,239, 38, 52,108,208, 64, 66,225,240,135, 8, 86,161,193,202, 86, 26,225,225, 36,132, 78,153,133, +184, 59,167,245,218, 44,110,169,227,157, 89,140, 26,199,236,204,140,215, 77,108,234,140,167, 77, 74, 91, 63, 59, 51, 67,104, 49, +106, 28,203,190,213,113,225, 44, 17,226, 65,226,171,215,137,239, 34,126,126,110,150,144,207,125,157,167, 85,120, 45, 40,131, 54, + 2, 7, 23,188,202,209,131,128,194,102,181,192, 98, 54, 66,165, 84,226, 85,106, 58, 50,210, 51,160, 82,201,225, 40,117, 69,237, +122,141,224, 36,113,192,253,203,251, 65, 41,181,107, 92, 67, 51,225,135, 52,108,210, 82,244, 48, 41, 63, 23,203,129, 79,113,108, +207,146, 28,181, 50,179,165, 42, 53, 54,174,188,215, 98,139,213,122, 62,250, 81, 92,173,138,190,149,201,189,231, 10,236,252,105, + 45,140, 5,145, 77,179,217,138,135,201, 26,164,229,106,145, 28,255,152,218,172,214,127,205,132,212,188,146, 3,128,224,213,169, + 93, 3,157,134,246,194,143, 63,174, 71,124, 66,146,109,209,228,174,201,106,149,252, 3,123, 77, 86,209,217,189, 53,233, 79,150, +142,252, 49, 49,229,104, 84, 46, 71,103, 44,125,126, 43, 7,207, 64,180, 28,185,252,140, 78,149, 43,180, 26,180,188, 99, 59, 71, +238, 41, 78, 51,223, 65,195,184,232,243,129,144,138,121, 32,132,160,176,185,112,221, 55, 99,225, 40,202,111, 91,214, 25, 44, 24, + 58,101, 5,118,174,152, 10, 10, 96,112,255,235,218,146,202, 89,164,105,175,226,139,164,204, 87, 29,186,127,126, 65,111, 18, 25, +186,245, 30,126,183, 65,131, 6,114,177, 88, 12,177, 88, 12,103,103,103,184,186,186,194,197,197,165,204,109, 47,113, 48,210, 34, +189, 11, 57, 28, 14, 56, 28, 14, 36, 18, 9,164, 82, 41, 36, 18, 73,169,154, 37,154,172,214, 61,214,181,239, 57, 26,231, 14,111, +162,119,174, 30,251, 88,155,241,244, 39,123,143, 81, 65,115,207,253, 62,125,250,132,141, 27, 55, 78, 48,111,218,184, 51, 39,206, + 94,142, 61,112,124, 83,247,188, 60,185, 63,165, 20, 46, 50,217,203,129,221,155, 29,107,219,188,225,139, 11, 23, 46,216,246,236, +217, 99, 32,132, 60, 40,171,156,217,153,153, 63, 95, 56,127,113,126,203,214,109,176,121,251,158,214, 49,143, 30,183,126,254, 60, + 14,254,129, 65,168, 92, 37, 24, 90,226,138,139, 87,174, 65, 45,207,252,217,158,114,190, 17,213, 34,121,121,121,191, 15, 28, 56, +176,211,245,235,215, 57, 3, 7, 14,212,102,103,103,255, 86,248, 28, 85, 82, 52,171,168,230,239,235,123,101, 1,248,185, 82,155, +143,246,191, 50,201, 63, 5,176, 36, 32, 48, 0,151,175,221,192,141,235,183,214,103, 59, 6, 44, 24, 57,244,163,177,149,122,112, + 71,247,104, 90,137,235,229,234,136,221,155,150,115,143,222, 72, 90,145,148, 99,221, 12,224, 27,123,142,209,235, 27,135,202,132, +230, 53,220, 96,182, 82,216,104,254, 5,215,201,129, 95,236,133,183, 56, 77,158, 81, 52,242,227,113,227,158,215,174, 83,239,179, +161, 31,125, 44,168, 23,228,143,219,207,228, 0, 33,112,243,145, 32, 45, 45, 13, 87, 15,110,178,228,189,122,178,158,203,181,125, + 93,158,186,148,155, 20, 85,173,200,122, 99,179,179,179,113,249,242,101, 20, 26, 44, 79, 79,207, 98,141,214,155,154, 57, 25,169, +191,125,179,108, 99,243, 49, 31,246, 70,183, 54,181,112,229,206,115, 24, 11,198,107, 42,236, 74,158,112, 99,131,240,211,129, 65, +198, 9,125,170, 43,117,102, 97,210, 87,137,138,171, 69,123,197,190,169, 73, 41, 53, 18, 66,142, 62,125,250,180, 69,221,186,117, + 43,157, 60,121, 50, 55,230,214,153,201, 69,203,241,249,231,159, 75,127,252,241, 71, 71, 74,233,111, 6,131, 33,222,174,109,231, + 96,119,228,221,187,238, 38,179, 13,215,110,221,175,209,190,121, 61,216, 40,112,231,206, 29,108,222,178, 89,255, 32,250,222,247, +154, 12,159,175, 75, 50, 47, 37,237, 79,235, 59,244, 58, 44,170,153,246, 42,233,251,115, 39, 14,238,108,216,186, 59,134, 76,250, +250,235,203, 39,246,204,175,223,178, 27,167, 70,195, 78,136,188,113, 17,231, 79,158,254,206,164,206,157, 95,214, 60,164, 37,149, + 83, 36,118,252,164,102,253,214, 72,126,145,132,196,184,135, 63,235,114,226, 82,165, 62,161, 63,167,166,188,248,184, 74,173,230, +184,126,102,239,228,146,140, 86, 89,117,222,223, 83,188,233,228,241,163,131, 82, 82, 54,248,104,116,122, 17,165, 84, 47, 18,242, +210,165,156,146,123,168,255,249,184, 63, 50, 73,220, 42,247,233, 63,244,227, 19,107,214,172,228,123,187, 56, 34, 61, 79, 15,165, +206, 4,149,214, 4, 14, 33,168,230, 39,129, 86,149,139, 43, 7,151,153,141,234,188,129,148, 62, 51,149,164, 41,245, 14, 93, 8, +208, 73,159,143,191, 4,161,204,223,175, 74,251, 89,165, 70,235, 84,169,209,221, 63, 31,127, 44,132, 82,218, 94,234, 29,170, 42, +156,235,176,184,109, 39, 36,255,252, 30,210,214, 31, 38, 75,254,248, 99, 22, 27, 96,181,217, 10,162,124, 0,125,221,158, 79,202, +216,118, 98,219,119,226, 55,164,102,200,161, 51,154, 97, 48, 90, 96, 50, 91,193,225,114,225,226,234,130,224,202,225,144,185, 56, + 35, 35, 61, 21, 55, 46, 28, 69,108,244,149,223, 8,197, 2,109,102,236, 5,123,142,145, 64,236, 18,226,235,231,195, 73, 83, 26, + 33, 22,114,113,239,202, 73,147,217,104,248,222, 30,147, 85,156,166, 60, 39,119,197,103,211,190, 24,188,109,235,118,159,176, 42, +206, 72,201,214, 33, 37, 75, 15,149,222, 92, 96,196,108, 48,168,179, 17,125,113,123,186, 85,175, 90,241,175, 55, 90, 22,147, 94, +117,232,244,109,247, 25,243,151,113,159, 61,143, 55, 47,252, 52, 34, 69,167, 86,118, 45,119, 36,171, 8, 91, 39, 84,222, 91,190, +111, 20, 12,105,242,117, 82,233,207,223,111, 54, 23, 82, 27,108,148,226,216,173,244,215,205,133,182,130,204,203,168,231,242,114, + 53,237, 69, 63, 85,237,210,233, 50,100, 79,158,125,159, 7, 0, 92, 46,247,245, 82,152, 75,165,215,235,141,111,211, 92,248,102, +226,187,205,102,131,179,179, 51,196, 98,113,185,155, 36, 37,222, 33,131, 26,182,233,249, 67,251, 94, 99,112,254,151,159,232,157, + 43, 71,199,107, 51,159,110, 42,119,142, 66, 94, 94, 12, 33, 36,238,251,239,191,175,183,121,243,230, 42,211,166, 77,139,223,241, +195,252, 53, 0,144,147,147, 63, 7,112, 84, 84, 20, 29, 63,126,188, 65,175,215, 39,228,229,229, 69,150,213, 1, 2, 0,116, 89, +142,139, 55,175, 91, 82,251,229,171,180,222, 65,181, 27,193,179, 74, 35,248, 84,107,140, 60,149, 9,183,159,165, 34,254,241, 5, + 60,190,118,240,164, 86,106,153, 95,222, 50,215,173, 91,215,159,195,225, 84, 86,171,213, 62, 53,107,214,172, 43,145, 72,162,234, +214,173, 27,206,227,241, 82,238,222,189,155, 84, 30,173,164,203,219, 12,149,218,124,180,250,133,202,169,109,124,186, 54,252,133, +202, 41, 74, 43,146, 77,205,188,176,202,224,221,233,251, 21,212,148, 29,115, 96,187,242,208,238, 77,203,185, 67,199,126,110,125, +168,112,253,148, 39, 22,158,251,118, 68, 88, 57,154,165, 56,105, 19,134,247,252,207,240, 14, 5,145,172,130,255,237, 10,211,203, +229,247, 21, 0,190, 20,251,213,250,225,225,167,227,190,169,211,176,249,176, 86, 31, 12,228, 88, 4, 82,156,249,101, 3, 77,136, +190,120,128, 71,173,179,181,118,204, 6, 80,102,115,144,209, 88,166,201, 42,182,185,231,165,164,205,129, 61, 91, 70, 28,250,229, +240,183,189,122,244,116, 95,247,213, 0, 44,219,120, 4, 18,177, 8,212,102,195,192,118, 1,253, 30,239,233,220,221,223,219,161, +194,161, 75, 41, 87, 39,173,124,248,165, 86,107,138, 45, 43, 18, 83, 96,156,175, 57, 57, 57,101,181,104,209,162,137, 72, 36, 34, +217,217,217, 60, 47, 47, 47,139, 76, 38, 51,166,164,164,104, 13, 6,195, 33, 74,169,166, 60,219,105, 50,219,144,152,161,199,175, +135, 15,225,254,173, 11,120,252,248,169,234,241,163,199,107, 9,143,174, 84,167,199,230,190,205,190,179, 21,219,235,144,150,187, +215,161,213,160,218,189, 99,253,194,118, 90,189, 97, 68,221,102, 17,168, 84,163, 57,199,100,182,226,193,157, 75,184,116,112,229, + 50,163, 42,103,198,187, 28, 99,191,138, 85,130, 41, 87,136,223, 47,159, 0,181,217,214, 3, 0,181,217,214, 71, 93, 63,249,113, +227,174,163,225,230, 85,169, 46, 33,132,148,119,190, 71, 0, 16,240, 56,154, 83,135,182,253,146,152,152,136, 39, 79,158,224,217, +179,103,200,205,205,197,238,221,137,229, 58, 62,154,220,196,115, 82,247,160,206,125, 7, 12, 57,214,111,208,135, 14, 85,130,195, + 56, 33, 21, 93,225, 46,229,225,233,179, 36,196,222,141,182, 61,189,125, 82,111, 82,102,246,210,230, 38,150,104,252, 36,158, 53, +189, 9,135,206, 40,156,187,176,105,211,230, 33, 95, 44,250,182,137,187,167, 87,177,215,241,156,172, 76,225,244, 73, 71, 67,110, +220,252,221,174,185, 14,109, 86,107,206,216, 17, 3,109,220,252,137, 66,241, 58, 78, 77,242, 15,118,254,195, 84,254,251,212,102, + 41, 51,130,255, 81,239,150,176,216,108,208,232, 76, 80,106, 12, 80,168,244, 72,203,204,193,253,232,104, 92, 57,118, 20,207,159, +222, 79, 48, 27,141,103, 57, 28,114, 80,155,254,244, 74,249, 90,154,120, 85,220,221,220,144,144,171,134,131,144,135,164,216,187, + 6,141, 82,177,235,109,235,145, 54, 59, 54, 77,226, 29,210,105,224,192, 65,167,219,117,238, 33,107,216,172,131,163,135,179, 11, + 4, 60,138,184,196, 84, 68,254,118, 90, 19,127,255,170,210,108, 84,119,121, 31,179,190,252, 47, 99, 87,175, 67,147, 65,211,125, +112,207,214,135,185, 92,158,208,102,179, 24, 76, 70, 67,223,119, 49, 89,127, 21,148, 90, 83, 70, 12,238,253,135,103, 3,139,141, +138, 7,247, 63,163, 43,250,172, 96,182, 82,199,193,253,127,211,230, 95, 64, 74, 78,236,123,221,180,183,247, 92,202,139, 23, 57, +119,114,115, 13,151,222,181, 39, 96,209,185, 11, 75,233, 93,168, 9, 13, 13,125,109,174,184, 92, 46,172, 86,171,221, 23, 34,129, + 72, 60,166, 93,143, 81,228,252,145,159,232,237,203, 71, 38,104, 51, 99, 55,190, 67, 59,179, 9,192, 45, 66,200,195,217,179,103, + 55,244,246,246,246,158, 59,119,174,131, 82,169,228,175, 91,183, 78,159,157,157,157,174, 84, 42,111, 80, 74,117,246,107, 70,154, + 1,244,145,122, 87,111, 75, 15,253,212,209,197,163, 66, 39,153,103,197,170,242,172, 87, 9,138,172,212,179, 0,206, 23, 12, 20, + 89, 46,194,195,195,131, 56, 28,206, 64, 0,181, 37, 18, 73, 53,169, 84, 42,162,148,134, 18, 66, 98,108, 54, 91,116,205,154, 53, +143, 3, 40,215,241, 75,186,188,205,208,106,194,150, 61,185, 90,155,192,200, 17,236, 73,186,188,205, 0, 0, 25,103,167,105, 1, +252,234,221,118, 70,159,163, 55,146,214,196,228,201, 38,103, 94, 90,124,180,188,101,150,191,188, 87,237,125,213,127, 93,106, 76, + 10,128, 17, 18,239,144,229, 15,162,110,204, 35, 20,124, 43, 44, 11,181, 25,113,119,223,135, 62,159,207,215, 87,168, 80,161,216, +222,133, 34,145, 72, 95,250, 49,191,108, 1,176,153,144, 54,219, 15,239,223, 62,226,200,209, 95,191,109,213,190,151,187, 67,197, +138,168,236, 69,176,125, 70,253,201, 23,162,178,110,247,248,226,234,143,241,169,250,104, 74,105,185,242, 97, 84, 42, 85, 44, 33, + 36, 79,173, 86,247,164,148,190, 36,132,248,231,229,229,221, 51,155,205, 15,202,109, 8,108, 24,210,180,105,163,221,132, 16, 30, +181,216,150,222,224,115,247,232,211, 30,167,188,141,177, 40, 74, 88,101,103, 76,153,187,186,126,213,106,213,235, 23,206,117, 88, +171,146, 19,198,125,185,188,126,165, 42,193,245,255, 51,255,161,180,172,115,146, 18, 66, 70, 30,222,178,244,106,212,205, 75,179, + 60,124, 43, 85, 74, 79,137,127,252,242,217,189,111, 44, 58,197,225,119, 61,206,137,207, 98, 86,110,254,254,203,105,105,175, 18, + 54,107, 50, 99, 31, 2,128, 38, 51,246,161,163,119,245,175,178,211, 83,166,229,100,198,127,255,182,251, 66,163,209,164,238,218, +181,203,165,121,243,230, 28,111,111,111,100,101,101,225,210,165, 75, 54,155,205,246,170,188, 90,234,156,248, 75,132, 84,117,251, +121,227, 15, 75, 5, 18,167,174, 22,139,197,143, 82,128,199,227,165, 25,181,202,211, 42,142,228, 11,154,155, 88, 70,189,180, 17, + 0,156,194,185, 11,109, 54, 27, 89,186,102,123, 18,223,193,169,216,249, 17,205,122,149,163,205,102,179,123,174,195,188, 23,119, +171,190,183,155, 53,165, 11,234, 54,104, 50,203,108, 54,233,145,159, 47,166, 7,160,167, 20, 57, 28, 14,185,194,181,153,207, 40, +222,225, 97,138, 16, 56, 83,194,131,147,152, 7, 2, 2,181, 34,151,150, 39, 39,171,216,227,157,241, 52,134,144, 54,129,167,140, +251,135, 95, 60,119,178,191,213,106,173, 92, 80,115, 18, 13, 58,205, 1,117,154,235,207,148,222,177,224,159,207,137, 66,179,197, + 43,229,196,142, 69,254,220, 62,255,211,228, 36,220,110,240, 62,245,210, 50,114,183,119,238, 53,141, 38, 38,101,222, 78, 78, 55, +252, 92,116, 90,157,119,213,124,249, 50,235, 82, 65,115,161,225,207, 17,138,183,235, 93,248,218, 24,235,117,223,173,154, 61, 8, +122,157,102,135, 54, 51,118,251,251, 49,177, 84, 7,224, 10, 33, 68, 54, 97,194,132,112,169, 84,202,207,206,206,190, 69, 41, 85, +188,173,166, 58, 35,246, 18,128, 75, 0,102,188,143, 50, 70, 69, 69,197,215,171, 87,111, 39,135,195,169, 76, 41,245,166,148,202, + 10,140,108, 54,143,199,123,245,232,209,163, 87,111,181,237, 6,167, 83,106, 35, 55,216, 66, 93, 79,255,201,124,184,123,157,123, +145,107,253,137, 43,113,248,159,201, 49,208,100, 60,141, 1,208,247,125,235,150, 54, 78,150,253,245,232, 63,134,235,242,137,109, + 35, 56, 66,217,194,246, 33,122,109,167,207, 94,125,115,237, 65,214, 45, 74,169,234, 29,234,104,150, 80, 40,212, 17, 66,252, 5, + 2,129,206,104, 52, 70,191,213,254,203, 55,249,158,239,115,223,217, 64,238,214,175,223,160, 92,235,219, 17,201,219, 94,176,188, + 87,212,233, 79,190, 65, 65,243,247, 31, 34, 20, 25,177, 11, 1, 44,124, 23,237, 59,119,238, 28,251,254,251,239, 21,107,214,172, + 9,176, 90,173,142, 70,163, 81,171,211,233, 18, 83, 82, 82,126,127,187, 99,254,220, 8,224,211,130,229, 45,162, 46, 79,210,165, +222,213, 87, 55,107,218,236,211,252, 7,116,186, 58,241,202,234, 41,165,125, 71,234, 93, 93, 87,116,253,210,230, 58,124,175,199, + 37, 51,118, 61,128,245,127, 93,164,194,150, 53,164, 95, 79,160, 96, 96,110,155,197,146,245, 94,100,243,207,249, 45,120,203, 73, +210,255, 9, 80, 74,211, 0,108, 42, 48,204,244, 47,251, 33,123,243, 85,152, 38,211,100,154,255, 46, 77,123,102, 39, 96,251,147, +105,254,149,154, 98,191,154,254, 0, 96,207,164,235, 37,173,207,246, 39,253,215, 36,180,219,177, 63,198, 22, 99,182,236, 27,176, +148,193, 96, 48,254,130,167, 61, 27,219, 11,140,255, 38,246, 26,172,183, 93,159,241,175,187,166,149,152, 19, 77,144, 63, 11,118, +113, 95,178,219,169, 18, 66, 58,188, 69,161,206, 51, 77,166,201, 52,153, 38,211,100,154, 76,243,223,165, 89,150,246,223, 49, 82, + 86, 76, 68,235, 68, 65,243, 97,254,192,108,127,213, 2,160, 3,211,100,154, 76,147,105, 50, 77,166,201, 52,153,230,191,105, 1, + 48,182,240,127, 14, 24, 12, 6,131,193, 96, 48, 24,127, 9, 44, 71,139,193, 96, 48, 24, 12, 6,227, 29, 40,174,233,144, 25, 45, + 6,131,193, 96, 48, 24,140,247, 64,105,201,240,172,233,144,193, 96, 48, 24, 12, 6,227, 29, 40,140,104, 17, 66,124, 9, 33, 99, +139, 70,184,152,209, 98, 48, 24, 12, 6,131,193,120, 15, 80, 74,211,222,140,110, 17, 74, 41, 78,156, 56, 65, 35, 34, 34, 8,128, + 63,252,207, 96, 48, 24, 12, 6,131,241,255,193,223,217,139, 16, 66,124, 1, 68, 20,221,156,194,225, 29, 56, 69, 55,144, 29,102, + 6,131,193, 96, 48, 24,255, 77,179,245,119, 44,119, 97, 36,171,200,242,122,210,236,215, 70, 43, 34, 34,130, 48,179,197, 96, 48, + 24, 12, 6,227,191,197, 63,209,139,112,222,220, 64,118,152, 25, 12, 6,131,193, 96,252, 55,205,214, 63,105,123,216,240, 14, 12, + 6,131,193, 96, 48, 24,239, 64,105, 57, 90,164, 96,168,120, 6,131,193, 96, 48, 24, 12,198,219, 25,173,177, 69,123, 27, 22,125, +205, 34, 90, 12, 6,131,193, 96, 48, 24,239,193,108, 21,251, 62,139,104, 49, 24, 12, 6,131,193, 96,252, 53,252,165, 3,150, 18, + 66, 58, 48, 77,166,201, 52,153, 38,211,100,154, 76,147,105,254,147, 41, 28, 17,190,224,255,177, 5, 57, 91,127,189,209, 98, 48, + 24, 12, 6,131,193,248, 23, 16, 65, 41,221, 84, 36, 55, 43,130, 25, 45, 6,131,193, 96, 48, 24,140,247, 72,113,147, 75, 51,163, +197, 96, 48, 24, 12, 6,131,241, 30, 13, 86,209,215,204,104, 49, 24, 12, 6,131,193, 96,252, 69, 48,163,197, 96, 48, 24, 12, 6, +131,241, 23, 65, 0, 20,219,115,128, 82,122,222,110,145,183,232,125, 80,150, 62,211,100,154, 76,147,105, 50, 77,166,201, 52,255, +121,154,101,105,151,199,127,252,207,152,169,255,140, 12,127,162,224,239,127,154, 15, 41,165,127,217, 2,160, 3,211,100,154, 76, +147,105, 50, 77,166,201, 52,153,230, 63,121, 1, 48,182,232,223,162, 11,107, 58,100, 48, 24, 12, 6,131,193,120,247,168, 86,209, +113,180, 94,143, 18,207,166,224, 97, 48, 24, 12, 6,131,193,120, 7,138, 27,214,161, 16, 22,209, 98, 48, 24, 12, 6,131,193,120, + 7,222,156,231,176,232,107,102,180, 24, 12, 6,131,193, 96, 48,254, 2,195,197,140, 22,131,193, 96, 48, 24, 12,198,123, 52, 89, +127,138,110, 21,100,201,227,196,137, 19, 52, 34, 34,130,176, 93,197, 96, 48, 24, 12, 6,227,191,193, 63,209,139,112,138,110,216, +137, 19, 39, 40, 59,204, 12, 6,131,193, 96, 48,254, 91, 38,235,239,232, 69, 8, 33,190,133,189, 13, 11, 22,223,194,207, 88,175, + 67, 6,131,193, 96, 48, 24,140,119, 35,162,104,207,195,130,230,195, 77,204,104, 49, 24, 12, 6,131,193, 96,188, 7,138, 75,132, + 7, 88,142, 22,131,193, 96, 48, 24,140,255, 17,254,137, 94,228,181,209, 98, 48, 24, 12, 6,131,193, 96,188,133,153, 42, 38,154, + 85,216,148,200,140, 22,131,193, 96, 48, 24, 12,198,123, 50, 92,111,142, 18,207,198,209, 98, 48, 24, 12, 6,131,193,248, 11, 76, +214, 95,110,180, 8, 33, 29,152, 38,211,100,154, 76,147,105, 50, 77,166,201, 52,255,233, 38,171,240, 47,155, 84,154,193, 96, 48, + 24, 12, 6,227, 61,194, 38,149,102, 48, 24, 12, 6,131,193,248,139, 96,147, 74, 51, 24, 12, 6,131,193, 96,252, 63, 27, 46,102, +180, 24, 12, 6,131,193, 96, 48,222,163,201,122,211,108,177, 28, 45, 6,131,193, 96, 48, 24,140,119,160,180, 28, 45, 2,160, 67, + 9, 95, 58, 95, 14, 23,215,225, 45, 10,117,158,105, 50, 77,166,201, 52,153, 38,211,100,154,255, 46,205,178,180,203,227, 63,254, + 87,249,195, 80, 15,148,210,191,108, 1,208,129,105, 50, 77,166,201, 52,153, 38,211,100,154, 76,243,223,180, 0, 24, 91,248, 63, +107, 58,100, 48, 24, 12, 6,131,193,120,199, 8, 86, 73,159, 49,163,197, 96, 48, 24, 12, 6,131,241, 14,176,113,180, 24, 12, 6, +131,193, 96, 48,254, 34, 8, 33,190, 5, 35,194, 23,254, 13,103, 70,139,193, 96, 48, 24, 12, 6,227,253, 16, 81, 16,213, 42,252, +203,140, 22,131,193, 96, 48, 24, 12,198,251,162,164,113,180, 8,165, 20, 39, 78,156,160, 5,175,219, 68, 68, 68, 92, 97,187,139, +193, 96, 48, 24, 12,198,255, 39,255, 84, 47,242, 58,162, 21, 17, 17, 65, 0, 92,102,135,154,193, 96, 48, 24, 12,198,127,131,127, +162, 23,225,188,225, 36,219,176,195,204, 96, 48, 24, 12, 6,227,191,193, 63,209,139,240,222,112,145, 12, 6,131,193, 96, 48, 24, +255, 21,254,174, 94,132, 16,226, 11, 32, 2,192,137,130,191,175,135,124, 96,227,104, 49, 24, 12, 6,131,193, 96,188,163, 71,164, +148,110,250,195,212, 59,133, 38,172, 96,168,120, 6,131,193, 96, 48, 24, 12,198, 91, 80,220,200,240,133,134,139, 25, 45, 6,131, +193, 96, 48, 24,140,191, 8,214,116,200, 96, 48, 24, 12, 6,131,241,142, 20,141,106, 21,109, 62,228,252,197, 63,218,129,105, 50, + 77,166,201, 52,153, 38,211,100,154, 76,243,159,110,178, 40,165,155, 10,151,162,166,139,141, 12,207, 96, 48, 24, 12, 6,131,241, + 23,193,154, 14, 25, 12, 6,131,193, 96, 48,222,129, 55,163, 88, 69,155, 14,153,209, 98, 48, 24, 12, 6,131,193,120, 15,102,171, +184,247, 89,211, 33,131,193, 96, 48, 24, 12,198, 59, 80,220,240, 14,204,104, 49, 24, 12, 6,131,193, 96,252,197,134,139, 0, 40, +182,231, 0,165,244,124, 57,132,203,221,251,160, 44,125,166,201, 52,153, 38,211,100,154, 76,147,105,254,243, 52,203,210, 46,143, +255,248, 95, 54, 88,175,155, 18, 41,165,127,217, 2,160, 3,211,100,154, 76,147,105, 50, 77,166,201, 52,153,230,191,117, 97, 77, +135, 12, 6,131,193, 96, 48, 24,127, 17,118, 27, 45, 66,136, 39,159,207,159,229,232,232,248,163,163,163,227, 70, 62,159,255, 61, + 33,196,181,188, 63, 40,149, 74, 39,251,250,250, 62,241,245,245, 77, 9, 12, 12, 60,233,236, 44,249,172,170, 3,105, 69, 8,225, +191,135,208, 29,135, 16, 18, 66, 8,249,204,209,209,241,177, 88, 44, 78, 34,132,236, 36,132,124, 70, 8,241,120, 23,237,133, 21, + 72,223,152,207,122, 29, 89, 88,129,244,125,227, 55, 35,124,124,124,174, 17, 66, 58,189,175,131, 50, 88, 66, 58,244,151,146,228, +254, 82,146, 60, 88,242,246,131,194, 57, 59, 59, 15,243,243,243,187,225,225,225,241,202,207,207,239, 55,177, 88,220,175,156,251, +211,203,199,199,103, 89, 64, 64, 64,108,133, 10, 21, 86, 21,204, 78,254, 63, 75, 43, 7,210,178,169, 3,201,106, 38, 34,170, 22, + 34,242, 99, 51, 17,233,216,137, 16,199,183,172, 75, 45, 8, 33, 7,101, 50,217, 61, 62,159,127,156, 16,210,167,160,126,245,225, +243,249,199,101, 50,217, 61, 66,200, 65, 66, 72,139,183,172,167,203, 8, 33,175, 8, 33,139, 11, 94,127, 18, 16, 16,160,170, 91, +183,110, 82,221,186,117,183, 5, 7, 7,127,104,175,158, 68, 34,233, 24, 16, 16,112, 40, 48, 48, 48,169, 89,179,102,185, 21, 43, + 86,124,234,239,239,191,221,193,193,161, 13,187,196, 49, 24, 12,198,127, 25, 59,194,131,221, 1,124, 11, 96,109,116,116,116, 36, +165, 52,146, 82, 26, 25, 29, 29, 29, 9,224, 71, 0, 75, 80, 66, 8,241,205,247,221,221,221, 23, 44, 92,184, 80,159,150,150, 70, +179,178,178,104,108,108, 44, 93, 57,231, 75, 91,103, 55, 30, 13,242,116,213,250,250,250, 62, 15,172, 88,113,111, 45, 41,231, 75, + 0, 85,203, 19,174, 4,224, 42, 22,139,111,205,153, 51, 71,125,237,218, 53,181,209,104, 84,219,108, 54,117,106,106,170,250,252, +249,243,234,230,205,155,171, 1, 76, 1,192,125,155, 16,232,215,126,184, 66,183,124, 69,191,246,195,149,162,239,135,134,134, 62, +178,217,108,180,111,223,190, 6, 0, 21,222, 37,172, 90, 1,112,168,229, 12,151,126, 82,100, 88,182,127, 67,233,186,105,180,159, + 4,201,111,163,233,229,229,245,235,228,201,147,149,175, 94,189,162, 6,131,129, 38, 39, 39,211,113,227,198, 41,188,188,188,118, +217,185, 63,221,195,194,194, 50,110,220,184, 97,147,203,229,244,242,229,203,182,218,181,107,103, 0,240, 45,111, 72,217,203,203, +107,147,159,159,223,201,242, 44, 94, 94, 94,155,203,123,140, 26,139,144,108,138,188, 68,233,157,179,244,104,223,166,116,101,131, +138,180,143,155, 80,222, 66,136, 79, 90, 3,188,114,212,165,254,173, 91,183,214, 60,120,240,192,154,147,147, 67, 31, 61,122,100, + 27, 51,102,140, 30, 64,204,152, 49, 99,244,143, 30, 61,178,229,228,228,208, 7, 15, 30, 88, 91,183,110,173, 1, 48,218,222,114, + 22, 60,220,108,157, 63,127, 62,165,148,210,133, 11, 23,210, 58,117,234,208,118,237,218, 81,181, 90, 77, 41,165, 73,148,210,109, + 22,139,101,132, 61,154, 50,153,108,216,228,201,147,213, 90,173,150, 22, 98,179,217,168, 92, 46,167,107,215,174,213,248,248,248, +156, 4,224,193,154, 39,152, 38,211,100,154,172,233,240, 47, 77,149,242, 5, 48,182,200,242,250, 94, 89,214, 23, 7,127,249,229, +151,133,166,234, 84,139, 22, 45,110,143, 24, 49, 34,114,196,136, 17,145, 45, 90,180,184, 12,224,204,221,187,119, 35,167, 79,159, + 30, 9, 96,112,105, 7, 2,128,107,179,102,205,228,233,233,233, 52, 56, 56,152, 86,170, 84,137,166,167,167, 83, 74, 41,189,211, +191, 62,189, 80, 3,244,229,213, 83,244,236, 47, 7,233, 24, 95, 30,109,233, 43, 51,251,250,248,228,120,120,120, 44, 66,193,228, +215, 37, 29, 92, 0,189,107,212,168,161,138,137,137, 81,199,197,197,169, 23, 44, 88,160,110,215,174,157, 58, 44, 44, 76,221,167, + 79, 31,245,154, 53,107,212, 38,147, 73,189,121,243,102,181,179,179,115,204,155,102,235, 93,140, 22,143,199, 91, 29, 29, 29, 77, +159, 63,127, 78, 1, 44, 43, 73, 19,128,204,197,197,165,139,171,171,235, 20, 23, 23,151, 46, 0,100,148, 82, 4, 3,210,186, 50, + 4,124, 82, 55, 40,244,248,224, 14, 85,215,118,104, 88,191,159, 19, 71,110,254, 97, 26,165,125, 3,222,202,104,201,100,178, 97, +159,125,246,153,202, 96, 48, 80,173, 86, 75,213,106, 53,213,106,181, 84,165, 82,209,193,131, 7, 43, 29, 28, 28,122,151,165,233, +225,225,241,205,213,171, 87, 45,233,233,233,244,234,213,171,244,228,201,147,116,221,186,117, 54, 47, 47,175, 21,229, 61, 1,125, +124,124,206,157, 61,123, 54, 50, 42, 42, 42,242,214,173, 91,145,102,179, 57,210,100, 50, 69,154, 76,166,200,227,199,143, 71, 30, + 62,124, 56,114,223,190,125,145, 70,163, 49,210,104, 52, 70, 26, 12,134,200, 42, 85,170,156, 46,239, 49,106, 36,194, 75,227,181, +163,148,174,152, 72, 21,223,141,167,242,169, 93,105,230,184, 86,244,199,134, 21,105, 43, 49,142, 21,173, 71,165,105,242,249,252, + 43, 73, 73, 73,182,153, 51,103, 26,107,214,172,169, 24, 57,114,164,222, 96, 48, 80, 74, 41, 53, 24, 12,116,228,200,145,250,154, + 53,107, 42,102,206,156,105, 76, 76, 76,180,241,120,188,243,229, 48, 90, 75, 10, 77,214,149, 43, 87,104, 81,212,106, 53,109,215, +174, 93, 82,157, 58,117,182, 85,174, 92,121, 72, 89,154, 82,169,180,231,140, 25, 51,212,180, 24,204,102, 51, 85,169, 84, 52, 49, + 49,209, 86,169, 82,165, 84, 0,238,236, 98,206, 52,153, 38,211,100, 70,235, 47, 51, 90, 99, 75,122, 93,234, 78,156, 62,125,122, + 36,165, 52,114,246,236,217,145, 5,145, 45, 1, 0,105,193,194, 3, 48,104,198,140, 25,145,148,210,200, 47,191,252, 50, 18, 64, +247, 82,140, 86,247, 3, 7, 14,152, 86,173, 90, 69,189,189,189,169,143,143, 15, 93,189,122, 53,181,217,108, 52,253,248, 46,122, +161, 6,232,227, 89,195, 41,165,148,198, 46,154, 68, 47,212, 0,141, 95,255, 53, 29, 58,116,168,214,209,209,113,112, 41, 6,198, +173,126,253,250, 42,157, 78,167,222,190,125,187,218,209,209,241, 14,128,154, 0,248,200,239, 85, 41, 5,240, 97,205,154, 53,149, + 15, 31, 62, 84,239,217,179, 71, 13, 96,129,157,145,141,170, 0,218, 74, 36,146, 62, 51, 42,240,227,232,150,175,232, 12,111, 60, + 0, 80, 27,128,103,193, 58,126, 95,126,249, 37,165,148, 82,127,127,255,171, 37,108,187, 44, 44, 44,236,203,184,184,184,121,102, +179,121, 94, 84, 84,212,188,234,213,171,207,236, 81,197,183,233,145,193, 29,195, 21, 95,143, 15,167,203,167,134,125,255, 65,163, + 14,123, 7,182, 25,252, 81,101,143,107, 35,189, 28,180, 3,100, 92,213, 32,199, 63,232,216, 85,177, 43, 84,168,112, 43, 57, 57, +249,181,185, 82,169, 84,244,213,171, 87, 52, 33, 33,129, 94,187,118,141,250,250,250, 94, 40, 75,211,199,199,231, 81,114,114, 50, + 93,191,114, 37,237, 91, 59,148,182,114,113,162,173, 93,157,104, 3,169,131,166, 6,208,160,188, 70,235,222,189,123,145, 0, 34, + 1, 68,230,228,228, 68,230,228,228, 68,230,229,229,189,126, 15, 64,164, 66,161,136, 84, 40, 20,145, 70,163, 49, 50, 40, 40,168, +220, 70,171,185, 3,154, 55,118, 64,110, 83, 17,116,221, 43,120,164,142,175,226, 97,189, 57,184, 41,205,155,216,142,174, 10,175, + 64, 91, 8,241,137,157,199,189,187, 80, 40,188, 12, 96, 26, 0, 46,128,225, 93,186,116,209, 82, 74,105,151, 46, 93,180, 0,134, + 23,188,255, 25,143,199, 59, 15,160,139, 61,229, 4,192,169, 86,173,154,166, 48,146, 5,224,247,106,213,170,105,234,212,169, 67, +235,212,169, 67,253,253,253, 85, 0,134,219,123, 65,171, 90,181,106,172, 78,167,123,109, 0,229,114, 57, 77, 77, 77,165,241,241, +241, 52, 38, 38,134,222,185,115,135, 38, 37, 37,209,253,251,247, 91, 93, 92, 92, 78,176,139, 57,211,100,154, 76,147, 25,173,191, +206,104,189,185,252,201,104, 29, 63,126,156,190,241,165,239,238,222,189, 27, 57, 99,198,140,200, 55,157,218,155,226,179,103,207, + 46,140,122,125, 91,202,205,127,115,108,108, 44, 29, 62,124, 56, 13, 9, 9,161, 33, 33, 33,116,196,136, 17, 84,161, 80, 80,245, +179,135,244, 66, 13,208, 59, 3, 26, 80, 74, 41, 85, 61,142,162, 23,106,128, 70, 14,109, 70,239,223,191, 79, 43, 86,172,120,182, +148,223, 63,246,219,111,191,101,237,218,181, 43, 29,192,206, 2,131,213, 4,192,106,177, 88,188,181,160,185,176, 18, 0,215,224, +224,224, 92,173, 86,171,238,219,183,175, 26, 64, 64, 41,154,173, 67, 66, 66,158,111,222,188,153,102,102,102,210,220,220, 92,186, +180,121,117, 74,183,124, 69, 23, 54,168,100, 91,191,126,189, 97,218,180,105, 26, 55, 55,183,227, 0,252,250,246,237,107,161,148, +210, 86,173, 90,101, 20,167,231,226,226,210, 37, 46, 46,110,158, 94,175,159, 39,151,203,231,229,230,230,206, 59,122,228,200,188, +206,181,171, 15, 87,124, 61, 62,252,200,224,142,225, 31, 84,112,237,179,162, 83,195,143, 95,205, 28,221,119,118,179,154,143,245, + 75, 62,189,212,191,138,247,178,183, 57,224,158,158,158,105, 6,131,129, 2,248,211,242,252,249,115,234,238,238,158, 92,150,134, +155,155,219,236,207, 6, 13,180,246,174, 84,129, 62, 95, 53,135,154,207,237,161,230,147,219,233,179,239,166,210, 30, 62, 30,202, + 38, 2,206, 12,123,203,227,227,227,115,238,214,173, 91,127, 48, 90,121,121,121,197, 26, 45,165, 82, 25,105, 52, 26, 35,171, 85, +171,118,250, 93, 43,126, 19, 33,130, 90,139,185,119,162,134,183,164, 89,227,219,209, 46, 50,126,210, 59,156, 68,131, 0, 92, 6, + 48,180,156,223,227, 0, 88, 82,104,168,190,251,238, 59, 74, 41,165,213,170, 85,211, 0,224,188, 67,121,100,161,161,161, 9,163, + 71,143,182,212,168, 81, 35,179,121,243,230,242,219,183,111,211, 43, 87,174,208,147, 39, 79,210,131, 7, 15,210,135, 15, 31,210, + 87,175, 94,209,216,216, 88, 26, 17, 17, 33, 7,208,154, 93, 16,217,194, 22,182,252, 47, 47,111,122,145,127, 76,175,195, 19, 39, + 78,208,136,136, 8,114,226,196, 9, 90,144,172, 43, 3,224,208,160, 65,131,172, 37, 75,150, 44, 47,152,195,135,212,225,145,254, +237, 29,249,247,219, 59,242,239,215,225,145,254,132, 16, 66, 41,221,180,104,209,162,111,234,212,169,147, 6, 64, 76, 8,241, 41, + 33, 23,172,165,187,187, 59,146,147,147, 33,147,201, 32,147,201,144,156,156, 12, 74, 41, 44, 20, 48, 83,192, 96, 50, 65,167,211, + 65,111,163,208,217, 0,165, 90, 13, 31, 31, 31,152, 76,166,160, 18,146,138,235, 14, 24, 48, 32, 40, 44, 44, 44,107,250,244,233, +169, 0, 70, 3,216, 58,106,212,168,115,191,255,254,123,152, 90,173,206,141,137,137,209,215,174, 93,187, 11, 0,159,184,184,184, + 97,107,215,174,197,240,225,195, 1,160,117, 9,154,181, 35, 34, 34, 78, 62,124,248, 48,104,232,208,161,184,124,249, 50,150, 46, + 93,138,236,236,108, 10, 0, 6,131,129, 90,173, 86, 83,179,102,205, 76,171, 86,173,106,212,170, 85,171, 91, 85,170, 84,225, 2, + 64, 66, 66,194,179, 18, 52,171, 7, 6, 6,194, 96, 48, 32, 43, 43, 11, 15, 31, 62,132,147, 76,134,232,212,108,239, 54, 43,214, +231,204, 58,114,142, 63,168, 81,152,219,148,142,205, 13,139,207, 94, 14,174,233,231,237,109, 52,153,125, 98,211, 50, 82,223, 38, +239, 78, 32, 16, 36,103,103,103,195,104, 52, 66,167,211, 65,169, 84, 34, 39, 39, 7,217,217,217, 72, 77, 77,133, 64, 32,120, 94, +102, 34,125,110,238,213,132,223,174,144,253, 27,190, 67,144, 37, 23,188, 67,171,193,251,245, 71, 84, 53,102, 97,227,156,113, 78, + 70,119,207,249, 50,103,231, 60, 87, 87,215, 77,132,144,106,101,233,133,135,135, 35, 39, 39, 7, 57, 57, 57,112,119,119,135,171, +171, 43, 92, 93, 93, 33,151,203,161, 80, 40,160, 84, 42, 17, 28, 28,140,186,117,235, 98,199,142, 29,239, 37,255,240,134,129,198, + 91, 96, 29,127,238,105, 42, 4, 18, 9,170,184, 74, 3, 27, 57, 17,183, 82,146,212,219, 9, 4,130, 3,238,238,238,103, 9, 33, + 19, 9, 33, 18, 66,200, 68,119,119,247,179,124, 62,191, 23,128,133,148,210, 93,229, 44,198,226,249,243,231,127, 25, 23, 23,231, +120,255,254,125, 76,159, 62, 29, 11, 22, 44,192,179,103,207,126,160,148,218, 10,126,119,130,135,135,199,113, 46,151,251, 19, 33, +164, 43, 33,164,139,159,159, 95,251, 50,116,123, 77,155, 54, 77, 95,191,126,253,216,199,143, 31,247,250,237,183,223, 26, 76,157, + 58, 85,241,226,197, 11,196,198,198,194,215,215, 23,254,254,254, 80,171,213,200,203,203, 67,175, 94,189,100,206,206,206,131, 89, + 86, 42,131,193,248, 95,229, 77, 47,242,119,226,205,113,180,138,190, 46,182,215,161,163,163,227,252,200,200,200,166,117,234,212, +225, 1,216, 15, 0, 97, 92,244,235,213,172,222,214, 35,155,190,171,115,120,213,156, 58,157,235, 4,111, 13,227,162,176, 23,219, +241, 6, 13, 26,184, 70, 70, 70, 54, 19,137, 68,159,148,148,119, 15, 0,174,174,174,144,201,100,112,113,113,129,171,171, 43,108, + 54, 27,212, 90, 61, 52, 86, 64,165, 55, 66,161, 80, 64, 85,240, 90,109, 48, 65,163,209,188,254,110, 49,180, 25, 61,122,116,214, +218,181,107, 51,211,210,210,190, 3, 80,123,248,240,225, 61,215,172, 89,131,139, 23, 47,234,187,134, 84,117, 95,212,178,222, 55, + 53,211,158,205, 11,225, 99, 12,128,171, 87,175, 94, 69,179,102,205, 64, 8, 25, 88,156,160, 88, 44,254,113,239,222,189,226,152, +152, 24, 84,173, 90, 53,102,224,192,129,253,191,251,238,187, 32,137, 58,247, 58, 0, 88,114,210, 99, 38, 77,154,244,213,162, 69, +139,178,178,178,178, 76, 90,173,214,171, 71,143, 30, 72, 78, 78,198,171, 87,175,126, 47,193,100,198, 70, 69, 69, 81,133, 66,129, +248,248,120, 68, 69, 69,137,191,250,234,171, 70, 86, 14,167,103, 10,156, 62, 26,222,188, 65,163,161, 77,234, 97,215,141,251,130, +107, 79, 19, 92, 26, 84,170,224,122,239,101, 90,101, 51,193,243,183, 57,224, 42,149,106,245, 55,223,124,163, 86,171,213, 72, 73, + 73,193,131, 7, 15,240,248,241, 99, 36, 37, 37, 97,233,210,165,234,220,220,220, 53,101,105,248, 57,240, 62, 95, 54,117, 20,225, + 61,250, 29,184,127, 5,208,170, 0,157, 26,134, 39,145,216,246, 36, 29,235, 14,253, 34,124,145,156,236,178,111,223,190,209, 1, + 1, 1,145,132,144,224,178, 58, 93, 0, 0,135,195,121,179,114,130,195,225,168, 0,164, 75, 36,146,151, 78, 78, 78, 47, 57, 28, + 78, 58,165, 84,243, 62, 42, 63,199, 2, 19,184, 92, 64, 40, 6,135,207, 43,237, 36,233, 63,112,224,192,189, 47, 95,190,236, 28, + 31, 31,223,116,205,154, 53,223, 56, 56, 56, 68,175, 89,179,230,155,248,248,248,166, 47, 95,190,236, 60,112,224,192,189,132,144, + 15,203,243,251,213,170, 85,155, 52,111,222, 60, 44, 93,186, 20,117,235,214, 69,112,112,176,118,254,252,249,171, 1,204, 33,132, +124, 18, 28, 28,124,125,210,164, 73, 35, 51, 51, 51,125, 82, 82, 82,234,254,240,195, 15,227, 86,175, 94,221, 48, 53, 53,213,161, + 12,233, 22,157, 58,117,194,169, 83,167, 0, 32,141, 82, 26,159,147,147, 99, 73, 77, 77, 69,104,104, 40, 26, 53,106, 4,181, 90, + 13,181, 90, 13,185, 92,142,192,192, 64,216,108,182,166,236, 82,206, 96, 48, 24,255,127,134,171, 68,163,229,224,224,224, 26, 30, + 30,142, 42, 85,170,184, 22,228, 98,193, 93,200,155, 57,101,244, 32, 71,105,228,105,144,168, 11, 24,216,178,150,163,187,144, 55, +179,224, 43,188,192,192, 64, 81,120,120, 56, 36, 18, 73,133, 18,126,255,114,122,122, 58,194,195,195,225,226,226, 2,153, 76,134, +240,240,112,152, 76, 38, 40, 84, 42,104,172,128,214,108,131, 66,161, 64,110, 86, 6,180, 86,192,226,228,142,164,164, 36,112,185, +220,132, 18, 52,125,171, 86,173,154, 21, 29, 29,157, 5,224, 42,128,143, 23, 44, 88,128, 25, 51,102, 96,238,220,185,123, 29,211, + 18, 59,237, 61,245,171,251,238,249, 19, 60,131,133,100, 16, 0,211,203,151, 47,225,226,226, 2,137, 68, 82,172, 49,104,213,170, + 85,125,137, 68,130,237,219,183,211,148,148,148,230,148,210,131,148,210, 4, 66,242,205,158,152, 3, 5,165,116,117,100,100,100, +227,175,190,250,234,105,135, 14, 29,248, 77,154, 52,193,194,133, 11, 1,224,120,113,154,114,185,252,230,135, 31,126,104,188,116, +233, 18,158, 60,121, 34, 57,114,228, 72,191,133, 11, 23,214,122,241,226,133,232,216,201,211, 31,236,124,169,236,247,221,217,107, + 14,139,206, 92,190,233,225, 44,169, 89,217,195, 13, 81, 47, 94, 9,172, 92,220, 46,235,160, 54, 17,240, 70,183, 21,243,163, 90, + 57,112,211,218,138,249,145,141, 4,188, 81, 74,165,114,223,209,163, 71,207, 76,157, 58, 85,157,153,153, 9, 39, 39, 39,228,228, +228, 96,241,226,197,234,168,168,168, 67, 6,131,225, 88, 89,186, 86, 27,173,239, 95, 41, 0,120, 30,253,250, 61,147,141,226,182, + 81,128,110, 31,127,138,144,208, 80, 24,141, 70,212,174, 93,155, 44, 88,176, 64, 34,147,201,190, 40,211,244,112,254, 84,221, 44, +132,144,116, 74,233, 43,181, 90,157, 34, 22,139, 95, 8, 4,130, 23,185,185,185, 41,148,210,140,247, 80,225, 57,148,131,207,155, +213,174, 6,136,196,120,145,163, 78,189,173,162,185,197,173,235,228,228, 52,106,221,186,117, 14, 91,182,108, 49, 79,154, 52,201, + 48,110,220, 56,190, 78,167,243, 26, 55,110, 28,127,210,164, 73,134, 45, 91,182,152,215,173, 91,231, 32,149, 74,251,188, 77, 89, +204,102, 51,162,163,163,191,139,139,139,147, 80, 74, 63, 3,240,233,252,249,243,135,199,197,197, 57,172, 93,187, 22, 7, 15, 30, +196,193,131, 7,209,179,103, 79, 76,158, 60, 25,243,230,205, 43,109,187, 28,235,212,169, 19,238,238,238,142, 43, 87,174,164, 82, + 74, 95, 16, 66,234, 75,165, 82,167,158, 61,123,162,115,231,206,208,235,245, 48,153, 76,175,141, 22,151,203,133,139,139,139, 59, +187, 12, 50, 24, 12,198, 95,107,178,222, 52, 91, 60, 0, 40, 12,213, 69, 68, 68,144,210,110,140,214,188, 76,200, 53, 90, 36, 41, +180, 72,206,179,253,225, 51,155,205, 86,106, 1, 82, 83, 83,143,221,184,113, 99, 84,120,120, 56, 47, 53, 53,191, 69, 44, 60, 60, + 28, 90,173, 22,169,247,111, 65, 99, 3, 36, 85,195,160,209,104,144,247,248, 30,164,117,154,194, 61, 98, 40, 86,172, 93,107,200, +201,201,217, 80,156,166, 80, 40,228, 87,172, 88, 49, 43, 33, 33,193, 2, 32, 87, 38,147,117, 10, 8, 8,192,229,203,151, 1, 96, + 23, 5,150, 33,234, 18,112,229, 48,104,126, 72, 69, 26, 24, 24,136,204,204, 76,168,213,234,203,197,105,222,184,113, 35,206,108, + 54,215,238,209,163, 7,249,249,231,159,247, 19, 66,230, 2,120, 48,203, 7,220,251, 47, 51,160,177,194,129, 16,210,209,213,213, +245,179,121,243,230,181,159, 52,105, 18,142, 30, 61,138,179,103,207,154,144,159, 11,118,163,152,104,142,130, 16,178,113,218,180, +105, 77, 56, 28,206,199,231,206,157,179, 4, 7, 7, 43, 77, 38,147,181,122, 72, 8,103,238,130,175, 5, 19, 63, 30,235,146,163, +197,163,206,213,125,155, 17, 2, 60,122,149,249, 34, 78, 69,115, 74,219,167,173, 69,188,227, 3, 91,214,105, 53,106, 96,119,169, +164,106, 77,104, 30,222,242,217,120,224,228,138, 54, 98, 94,183, 12,157,165,167, 76, 38,235,119,249,242,229,137, 70,163,177,138, + 72, 36,122, 46,151,203, 87,169, 84,170, 50, 77, 22,143,199,139, 8,243,175,232, 42,207,205,133, 67, 65, 36, 74,105,182, 33,219, + 96,193, 19,151, 96, 12,174,232,255,186, 25, 52, 61, 61, 29, 62, 62, 62,196,106,181,118, 47, 77,243,236,217,179,232,214,173, 91, +161,241, 4, 33, 4,132,144,236,144,144,144, 12,145, 72,148, 35, 16, 8,148,203,150, 45,211,235,245,122,240,120, 60, 7,171,213, +202,125,151, 10,223, 88, 66,188, 90,137,201,143,227,122,180,237, 80,183,102, 40,189,122,231, 62,201,211,234,183,149, 18, 5,252, +161, 90,181,106,188,220,220,220, 99, 0,158,152,205,230,221,251,247,239,119, 24, 54,108,152,254,192,129, 3, 67, 0, 4, 45, 95, +190,188,159, 90,173,222, 84,158,114, 60,123,246,236,135, 69,139, 22,125, 57,123,246,108,236,216,177, 99, 18,128, 25, 5,145,174, +158,243,230,205,195,178,101,203,176, 99,199, 14,219,147, 39, 79, 78,218,108,182,103, 83,167, 78,173,227,237,237,157,157,150,150, +246,108,193,130, 5, 37,201, 54,232,210,165,139,225,250,245,235, 66,149, 74,117,141, 16,242,217,248,241,227, 71, 55,110,220, 88, + 57,112,224, 64,105,110,110,174,220,209,209, 81,184,121,243,102, 87, 30,143, 7,141, 70, 3, 66, 8, 84, 42,149,145, 93, 10, 25, + 12,198,255, 42, 37,121,145,191, 3,175,167,219, 41,238,158, 90,220, 6,106,181,218,140,228,228,228,208, 87,175, 94, 89, 0, 88, + 0, 32,199,104,249,118,209,230,195, 91,250, 52,169, 38, 73, 51,155,113,228, 78,140, 54,199,104,249,182, 48, 50,241,234,213, 43, +213,139, 23, 47,156,116, 58,157,186,132,223,250,253,199, 31,127,212, 93,186,116,201, 41, 62, 62, 30, 86,171, 21,245,235,215, 71, +108,108, 44,242,158, 68, 67, 18, 90, 31,146,214,221, 16, 19,121, 7, 81,103,207, 35, 81,109,180, 60,157,179, 72,161,214,104,230, + 25,141,198, 35,197, 9,242,249,252,220,252,237,163, 86, 0, 80, 42,149, 15,212,106,117, 75,111,111,111, 60,122,244, 72,162,177, + 98,114,191,153, 43,214, 80, 74,173,130,252,158, 98, 83, 6, 14, 28,136,187,119,239, 2,192,221,226, 52,149, 74,229,164, 49, 99, +198, 92,218,190,125, 59, 47, 62, 62,190,243,150, 45, 91, 58, 63,125,250,148,146,220,100,235,117, 45, 31, 65,195, 39, 55, 92, 31, + 24,114,182, 91,183,110,240,245,245,197,230,205,155,177,106,213, 42,243,132, 9, 19,226, 86,173, 90,213, 16,192,238, 18, 14,130, + 2,192,105, 15, 15,143,137,181,106,213, 82,105, 52, 26,228,228,228, 32, 53, 53, 21,110,238,238, 28, 11, 56,205, 60, 93, 92,118, + 31, 75, 87, 73,120,167,111,226, 86, 74, 90,169,209,172,166, 2,222,135,131,218,212,107,245,201,236,153, 82, 92, 63, 2, 50,102, + 30,232,150,111,240,233,136,126, 78,122,195,238,214, 13,120,188, 97, 10,139,101, 39,128,131,229,116,228, 93, 90,182,108,185,119, +209,162, 69,226, 89, 75, 23, 97,121,104, 5, 88,114,114,144,101,176, 34,219, 96,129, 50,239, 9, 30, 61,138,129,187,187, 7, 18, + 19, 19,161,215,235,241,248,241, 99,202,229,114,143,149, 21,209, 41,242, 27,133,205,133,114,145, 72,148,195,231,243, 51,120, 60, + 94,110,124,124,188, 70,175,215,131,195,225, 72,172, 86,171,216,142,178, 86,244,240,240,152, 10,160, 15,128,163,170,236,236,213, +225,124,184,128,135, 54, 85,188,220, 63,152, 51,110,152, 71,128,159,151, 60, 62,238,185,121,195,153,223,178,245, 6,124, 91,202, + 73,114,188,104, 68,146, 16,242,233,129, 3, 7, 70, 3,216, 90, 48,239,214,121, 0,235,223,226,252,155,115,232,208,161, 47,103, +207,158, 13,177, 88,252,122,240, 84,177, 88,236, 0, 0,123,246,236,193,163, 71,143, 26, 23,230,107, 1,216,107,135,102, 80, 88, + 88, 88,252,225,195,135,133, 0,252,198,143, 31,223,116,205,154, 53, 24, 49, 98, 68, 86, 76, 76, 76,147,252, 8, 44, 9,250,248, +227,143,111,239,216,177,195,213,102,179, 33, 47, 47, 15, 70,163, 49,129, 93,202, 25, 12, 6, 51, 91,127, 73, 52, 43,156, 82, 26, + 85, 48,176,119, 4,128, 19,148,210,180, 63, 24,173,194, 13, 4, 0,189, 94,255, 67, 96, 96,160, 12,128, 63,128,110, 0,142, 62, +176,226, 32,158, 38, 33, 58, 49,101,102,161,241,122, 96,125,125, 19, 31,112,251,246,109, 99,165, 74,149,238, 3,248,166,132, 27, +153,210,195,195, 99,225,212,169, 83, 23, 47, 92,184,144,199,227,241,112,233,210, 37,220, 56,115,194,246,248,218, 45,146,164,179, +234,148,119,166,189,226, 81,235, 77,111, 93,238,195,123, 90, 28,162,148,166,148,182, 97, 26,141, 38,249,217,179,103,194, 90,181, +106, 89,239,221,187,231, 65, 41,253,229,228,201,147, 45,167, 79,159,142,203,151, 47,239, 62,167,183, 14,166,212,182,159, 16,194, + 3, 48,184,123,247,238,159,245,235,215, 15,117,235,214, 53, 1,216, 81, 66, 57,175, 19, 66, 6,191,124,249,114,227, 23, 95,124, +225,242,197, 23, 95,128,195,225,144,162,251, 42, 59, 59, 27,247,239,223,199,192,129, 3, 21,191,253,246,219,228,246,237,219,143, +108,209,162, 5, 78,157, 58,229,103,199,193,248,253,241,227,199,189,101, 50, 25,121,246,236, 25,148, 74, 37,174, 95,191,206, 15, + 12, 12,108,182,127,255,126, 81,149, 42, 85, 16,243,240, 33, 78, 14, 30, 28, 65, 8, 9,164,148,190, 40, 78, 71,204, 39, 19,135, +247,239, 46, 53, 92, 63, 6, 68, 93, 5, 0,168,149, 42,232, 18,163,209,175, 81, 53,231,203,143,147,198, 35,191, 23,102,185,112, +115,115,251,116,249,242,229,146,224,224, 96,124,190,104, 41,166,206,158,142,143,189, 2,161,124,149,140,108, 43, 32,116,116,196, +194, 57,179,209,189,255, 64,120,121,121,225,225,195,135,116,243,230,205, 26,133, 66,177,204, 30,163,197,229,114, 65, 8, 1, 0, +141, 66,161, 80, 11,133, 66, 5,143,199,203,177, 90,173, 25,199,215,174,174,207,201,201,248,136, 16,194, 21,219, 56,199, 11, 58, + 91, 20,155,159,231, 66, 72, 96,213,160,160,135, 63,109,222, 44,105,220,184, 49,185,115,231,206,196,241, 99,199,140,238, 19, 86, +249,100,175, 14,173,224,227,235, 99,176,153,140,242,147, 71,143,155,215, 31, 56,121,197, 72,108, 95, 68, 82,170, 43,199,211,201, +222,162,166,135, 16, 50, 8, 64,127, 0,135, 41,165,187, 8, 33,195, 1,244, 2,112,168,164, 4,121, 66, 8, 7,192,166,190,125, +243, 39, 19,208,233,116,218,194,247,235,212,169, 83,244,183,108,229, 57, 70,142,142,142, 78, 14, 14, 14,207, 79,157, 58, 37, 30, + 56,112,160,235,226,197,139, 95,141, 24, 49,162,194,238,221,187,127, 0,144, 72, 8, 9, 1, 80, 85,163,209, 88, 57, 28, 14, 66, + 66, 66,176,110,221, 58,181,213,106,221,202, 46,227, 12, 6,227,239, 96,182,254,134,197, 14, 7, 16, 5, 32,162,160, 3,225, 88, + 0,165, 79, 42, 13, 96, 81,116,116,116,225, 24, 90,227, 75, 27,222, 97,198,140, 25,145,119,239,222,141, 4,176,164,172,110,142, + 60, 30,239,151, 9, 19, 38, 80,111,111,111,181,151,151,215, 47,124, 46,119,180,191, 24,225,120,139,174,238, 0, 90,238,220,185, +179,231, 15, 63,252, 16, 1,160, 49, 0,126,133, 10, 21, 82,211,211,211,213,191,253,246,155,186,121,243,230,106, 15, 15,143,204, +176,176, 48,245,242,229,203,213,102,179, 89, 61,117,234, 84, 53,222, 24,239,171, 4,109, 7, 0, 19,133, 66,225, 47, 53,106,212, +136,158,211,163,157,121,233,228,209,116,120, 53, 79, 53,128, 31, 0, 76, 0,224, 2,128,223,175, 95,191, 11,143, 31, 63, 62, 19, + 22, 22,182,209, 14, 93,191, 90,181,106, 93,220,187,119,239,221,195,135, 15, 71,126,241,197, 23,119,221,221,221, 83,226,226,226, +108,122,189,158,230,229,229, 81,185, 92, 78, 79,156, 56, 97,117,115,115, 91, 91,146, 78, 75, 17, 55,141,158,221, 85,236, 16, 14, + 47,103, 15,165,205,133,156, 87,111,211, 13, 85, 34,145,228,230,228,228,208,244,244,116, 26, 31, 31, 79, 15, 29, 58, 68,187, 52, +107, 68,247,125,220,135,238, 26,213,147, 46,235,210,136, 54,118,114,208,248, 56, 73,239, 58, 57, 57,101,186,184,184,108, 2, 80, +173,172,225, 29, 12, 6,195,235,225, 27, 42, 86,172, 24, 25, 18, 18,114, 56, 44, 44,108,197,209,163, 71, 63, 93,185,114,101,207, +182,149, 3,191, 92,220,185,153, 78,123,254, 0, 85,237,255,129,206,168, 31,172, 15,227,162,127,137,195,133,184,187,237,188,114, +249,178,173,112,128, 78,139,197, 66,143,252,242, 11, 29,240, 65,199,104,197,233, 61, 63, 93,155, 55,105,239,212,250,193, 71,154, + 59, 96, 16,222, 24,168,180,184, 37, 92, 10,247, 86,206,156,117, 93, 3,220,210, 90,202, 56, 63, 52,113,130,107,145, 99, 54, 32, + 56, 56, 56,158, 82,154, 22, 26, 26, 26, 15, 96, 87,104,104,104,209,215, 31,149, 53, 56,233,252,249,243, 41,242,103, 81,224, 0, +152,187,104,209,162, 72, 74,105,100,181,106,213,174, 83, 74, 81, 87, 2,143,214, 50,206, 79, 61,130,188,115, 90,203, 56, 63,213, +149,252,121, 52,119, 74, 41, 2, 5,168,222,210,211,241, 90,207,106,190,170, 54, 21,100, 87,119,109,219,178,180,107,215,174,155, + 1,172, 5,240,141,187,187,251,181, 65,131, 6, 61,218,177, 99,199,163,229,203,151,155,226,226,226,232,200,145, 35, 53, 34,145, +232, 27,214,117,156, 45,108, 97, 11, 91,254,242,145,225,125,203, 51, 96,105,247, 47,191,252, 50,146, 82, 90, 56,150,214,176, 98, +214,233, 49,123,246,236, 72, 74,105,225,232,240, 29,202, 26,208, 12,192,252,117,235,214, 81,145, 72,244,211,187, 14,146, 6,192, +167, 87,175, 94, 77,148, 74,101, 67,111,111,239,134, 5, 81, 39,127, 15, 15,143,248,221,187,119,171,117, 58,157,154, 82,170,182, + 88, 44,234,187,119,239,170,219,180,105,163, 70,254, 16, 16,118,141, 16, 94,116,153,229,131,235,119,230,140,162,179,124,112,253, +141,239, 14,221,186,117,235,169,132,132,132, 99,206,206,206,211,237, 28,184,210,223,211,211,115,174,155,155,219, 25, 15, 15,143, + 89,110,110,110,105, 38,147,137,230,229,229,209,216,216, 88,122,249,242,101,122,227,198, 13,234,230,230,150, 82, 82, 57,219,139, +121, 55,243,150, 78,164,182,173,139,168,113,205, 76, 10,128,202, 87,206,160,217, 63, 46,160,119,198,116,166,109, 28,184,191,191, +205,160,115, 46, 46, 46,155,126,249,229, 23,219,179,103,207,232,241,227,199,233,137, 19, 39,232,228,201,147,105,117, 63, 95, 67, + 19, 33, 39,163,165,136,119,230,109, 6, 44, 53, 24, 12,145, 74,165, 50, 82,173, 86, 71,214,168, 81, 35,178, 81,163, 70,135,155, + 52,105,178,226,192,129, 3,159, 46, 94,188,184,103,123, 39, 81,172,246,252, 1, 74,191,248,128,210,137, 45,232,243,209,109,104, + 59, 49,239,126,137,154,222,222, 41,133,163,181,107, 52, 26,122,245,234, 85,122,241,226, 69,234,227,225,161,108, 37,230,142,109, + 46, 66,235,230,206,112,177,183,156,109,101,156,109, 55,127,252,214,170, 59,181,131,238, 25,254,129,165,141, 11,103, 93,145,245, +246, 81, 74,211,250,246,237,155, 72, 41, 77, 59,116,232,208, 75, 74,105, 90,159, 62,125, 18, 11, 66,195,123,139,211,124, 99,112, +210,173, 5, 38,107,226,252,249,243, 35, 41,165,145,243,231,207,143, 4,242, 7, 81,109, 45,227,108,191,181,113,153,205,112, 98, + 59, 61, 48, 50,194,218, 90,198,217, 94,108, 57, 93,120,199,162,182,174,164,198, 51,187,232, 47,147,135, 88, 91,248, 56, 95, 9, + 14, 14, 94,246,233,167,159, 30,190,113,227,198, 3,171,213,250, 40, 62, 62,254,209,218,181,107, 31, 53,109,218,244,186,187,187, +123,180, 80, 40,156,192, 6, 69,100,154, 76,147,105,178, 1, 75,255, 59, 11,175,148,166,147, 99,132, 16, 9,165,116,106,191,126, +253,176,100,201,146, 1,181,107,215, 30, 84,161, 66, 5, 79, 0, 72, 77, 77,213, 2, 80,246,235,215, 15,115,231,206,197,210,165, + 75, 87, 20,228,178,252,127, 38,159,165, 19, 66, 42, 78,154, 52, 41,115,241,226,197,182,145, 35, 71,134, 82, 74, 31, 18, 66,170, + 15, 25, 50,100, 34,143,199,235, 23, 24, 24, 24,150,150,150,150,165,211,233,118, 1,216, 88,216,102, 90, 94, 68, 28, 88, 27, 84, +242,197, 25, 14,172, 69,154,134, 62,152, 59,119,238,192, 62,125,250,152, 86,174, 92,105, 81, 42,149, 71,237, 44,247, 75, 0, 95, + 23,190,118,119,119,247,185,127,255,254, 4, 47, 47, 47, 78,124,124, 60, 12, 6, 3,158, 61,123,102, 3,240,107, 73, 26,106, 11, + 93,189,254,208,185,144,169, 67,187, 57,107,159,220,131,128,203,133,153, 47, 68,250,205, 51,216,122,245,137, 82, 99,194,154,183, +217, 78,185, 92,254,253,228,201,147,135, 76,159, 62,221, 33, 48, 48,144,252,254,251,239,216,191,127,191, 33, 51, 51,179, 11,165, +244,202,219, 30, 43,155,205, 6,161, 80, 8, 0,152, 49, 99, 6, 56, 28, 14, 63, 51, 51, 83, 72, 8, 17, 17, 66, 28, 9, 33, 92, +115,194, 35,216,148,121,200,200,147,227,101,134,188, 84, 61,171,205,182,255,214,173, 91, 83,234,213,171,199,185,115,231, 14,178, +178,178,240,236,217, 51,106,165,116,239, 21,173,101, 83,121,203,231,232,230,222,171,174,171,136, 35,220, 54, 23,173,140, 28,238, + 6, 27,250, 2,152, 88,240,241, 86, 66,136, 0, 64, 78,141, 26, 53,218, 62,126,252, 88, 92,163, 70, 13,221,147, 39, 79, 78, 17, + 66, 42, 0,216, 94,108,243,174, 88,156, 13, 32,251,208,161, 67, 0, 48,134, 82,106, 35,132,212,159, 55,111, 94,218,213,171, 87, + 49,127,254,252, 12, 0,235, 0, 64,234,234,222, 35, 76, 38, 32,194,159,231,163,169, 1,156, 53, 54, 90,108,231, 2,169,151,119, +187, 90, 18, 14,248, 91,190, 66, 67,159, 16,142,208, 98,170,189, 96,193,130,171,106,181,218,176,111,223, 62,227, 71, 31,125,196, +141,139,139,187, 13,224, 90, 65,179,166,133, 53, 68, 48, 24, 12,198, 95,158,163,245,230,176, 14,197,231,104, 21, 99, 8,246, 16, + 66,178,151, 46, 93,218, 14,128,243,129, 3, 7, 26, 84,175, 94, 29, 0, 16, 27, 27,235, 24, 18, 18,242,180, 78,157, 58,143, 1, +220,164,148, 30,179,179, 60,133, 23,126,219,123,218,190,152,233,211,167,147, 29, 59,118, 88,128,124, 19, 84,112,115, 89, 13, 96, +117,105,121, 62,239, 74,112,112,112,199,175,190,250,202,184,101,203, 22,235, 55,223,124,115,148, 82, 26,247, 54, 58,185,185,185, +203,135, 13, 27, 54,100,222,188,121, 50, 39, 39, 39, 18, 29, 29,109,219,186,117,171, 50, 55, 55,119,121, 73,223,185,101,180,236, +107, 45,226,245,145,107, 14,116, 28, 16, 94,201,233,241,164, 8,196,222,186,134, 93, 87, 30,169,226,114,117,103,239, 88, 44,251, +223,210,188, 62, 35,132,212,157, 59,119,238, 12,147,201,212,135,207,231,223, 86, 42,149, 11, 40,165,191,191,237,126, 50,155,205, + 25, 85,170, 84,121,243,119,204, 54,155,141, 82, 74,249, 22,139, 69,226,102,178,157,152,183,106,203,199, 31,133,200, 68,217,217, +114,252, 28,167, 52, 20,233,108,241, 39,178,178,178, 86,140, 30, 61,122,196,188,121,243, 92,157,157,157, 73, 76, 76, 12,221,183, +111,159, 58, 43, 39,103,201,219,148, 81,155,151,123,246,248,193, 3,253, 90, 24, 45,100,103,162,138,242,184,228, 84,145,178,158, + 3,112,174,224,100, 26, 74, 8,233, 11,224, 8,165,244,231, 82, 53,181,218,179, 0,132,125,251,246, 69,116,116,244, 0, 0,123, + 0,236,253,250,235,175,155,204,157, 59, 23, 11, 22, 44,192,188,121,243, 58, 2, 56,163,202,203, 57,113,120,239,174,193,109,204, +102,206,206, 36,149,141,203, 33, 39,139,213,204,206, 56,119,234,220,249, 30, 13,157,253,200,166, 51,215,108, 90, 27,189, 55,124, +248,240, 60,163,209,120, 6,192, 26, 0,209,148, 82,214,187,144,193, 96, 48,254,127, 3, 63,155,138, 49, 94,155,202, 52, 90, 5, + 95, 62, 15,224, 60, 33,196,167,121,243,230,139,100, 50,153,196,106,181, 34, 55, 55,247, 21,128, 85, 5,209,153,242,176, 79,161, + 80,124, 33, 18,137, 54,188,167,141,211, 19, 66,188,106,212,168,193, 7, 96, 40,230,243,247, 99,178, 40, 14, 61,139,123,230, 12, +138, 67,133,111,197,197,197,237, 13, 11, 11,235,249,228,201,147,223, 40,165, 39,223, 97, 27, 94, 16, 66,234, 77,158, 60,249,115, + 0, 61, 1,252,154,155,155,187,188,164, 68,248, 66,174, 24, 44,253, 26,242,120, 67,238, 37,165, 79, 48,218,104,101, 33,135,147, +160, 49,209, 31,111, 91, 44,123,222,113,159, 62, 3, 48,178, 96,121,103,178,179,179,203, 28,228,147, 16, 66,174, 60, 79,189,249, +232,101,102,113,157, 45,138, 43, 99, 26, 33,164,238,212,169, 83,167,218,108,182,254, 28, 14,231,151,236,236,236, 50,247, 89,137, +145, 60,163,117,202,134, 75,119, 4,171,172,182, 14, 34, 14,231,140,218,108,157, 89,194,239,238, 2, 96,215,232,240,207,159, 63, +255,105,193,130, 5,181,230,205,155,135,245,235,215, 23,118,187, 60, 63,111,222,188, 76,171,213,234,191, 96,193, 2,108,220,184, +209, 2, 0, 6,179,109,218,150,171,247, 56, 27,108,182, 15,248, 28,206, 41,131,217, 54,173, 88, 83,174,183, 76, 92,115,248,180, +201,100,179,117,228,130,156, 74, 51,218,230, 24, 12, 52,137, 93,230, 24, 12, 6,227,127, 19,158,189, 43, 82, 74,211,223,199,141, +151, 82, 26, 15,192,121,214,172, 89,239,211, 73,102,254,213, 59,234,171, 84,250, 3,128, 31,190,250,110, 95,209,223,189, 13,148, + 61,168,168,189,102, 11,192, 39, 5,139,221,220,177, 88,118,163,132, 33, 37,254,102, 79, 3, 20,192,129,130,197,222,239,164, 32, +127, 46,203, 41,239,250,251,247,180, 52, 13,249,189, 8,223,231, 54, 69, 33,191, 23, 10, 94,189,122, 85,116, 59, 31, 20, 44, 40, + 28, 83,238,150,134,102, 2, 24, 98,103, 57, 7,176, 75, 23,131,193, 96,252,239, 80, 92,211, 97,185,141, 22,131,193, 96, 48, 24, + 12, 6,163,216, 7,235, 18,115,131, 9,128, 14, 37,124,201,238,196,118, 66, 72,135,183, 40,212,121,166,201, 52,153, 38,211,100, +154, 76,147,105,254,187, 52,203,210,254,255,238, 88,247,255,225,194,254,202,113, 37, 88,215, 87,166,201, 52,153, 38,211,100,154, + 76,147,105,254,107, 23, 14, 11,248, 49, 24, 12, 6,131,193, 96,188, 61,132,144,240,130,191,190,132,144,177, 5, 83,241, 0, 40, + 33, 71,139,223,120, 81,134,197, 98,241, 2, 0, 30,143,151,105,190, 61,199,183,180, 31,224, 3,237, 45,192, 79, 5,130, 99,204, +249,221,225,223,212, 60,103,177, 88, 92, 11, 52,243,204,183,231,116, 46, 85,179,209,194, 51,127, 88,255,214,236,142,197,108, 25, +151,223,104, 97,234, 27,101,245,179,123,207, 20,204,145,248, 87,151,243,239,162,249,111, 70,208,100, 81,134,217,156, 95,143,248, +124, 94,166,233, 86,233,245, 72,208,120, 97,234, 31,214,191, 57,219,187, 52, 77, 71,177, 40,167,106, 5,207, 21,165,105,198,167, +102, 79,213,104,245,238,165,105,150,247,220,244,247,245,109,111, 45, 56, 55,185,192,152,151,169,169,231,254,151,234, 18, 33,164, + 1,128, 57, 0,156,139,188, 29, 77, 41,253,140,213, 74, 6,131,241, 55,162,196, 41,120,138, 53, 90, 22,139,197, 43,242,151,121, +208, 24,128,246, 31, 46,244, 10,234,181,241, 79,189,218, 44,250, 60,161, 60,102, 95, 24,215,172,116,245,228,153,156, 83, 83, 83, + 73,193,133,243, 39, 0, 1,197,104,186, 70,254, 50, 15, 90, 35,208,106,208, 2,215, 0,192, 57, 75, 32,248, 92, 44,145,180,213, +233,116,181, 0, 64, 44, 22,199,232, 52,154, 75,158, 38,211,242, 55,215, 47,105,203,138,150,181,221,176,133, 94,161,189, 54, 78, +182,218,108,194, 87,119, 54,180,210,103,199,241,248, 22,195,186, 89,192,169,121,128,213,158, 61,245,135,223,237, 63,211,157, 15, +180, 19, 58, 56,212,117,113,117,109,105,163,180,134,205,102, 35, 86,139,229,145, 82,161,184,102,179, 88,238, 91,140, 26,247,200, +163,223,218, 74, 43,231,155,219,210, 31,224,253, 2,244,147, 72,165,109,185,124,126, 51, 0,176,154,205,191,107,212,234, 75,189, +129,131,246,108,187,189,251,231,109,215,255,183, 97, 54, 91,188, 18,206,204,131,193, 12,132,247,253,214,171,206,144,159,119, 3, +128, 49,243,190,183, 58,238,104, 99, 0,144, 84,237,118, 75,228, 19,158, 1, 0,188, 23,105, 94,177,199,103,195, 96, 6,106,116, + 91,224, 85,150,230, 71,115,247,187, 79, 31,219, 71, 4, 0,103, 15,253, 80,253,226,225,245, 31, 0, 64,187, 62,227, 79,117,234, + 59, 41, 22, 0,150,110, 58,236,190,247,219, 1,165,106,218,119,110, 42, 4,138,184,227,213,140,202, 52, 23,127, 9,207, 39, 46, + 46,142, 3, 0,126,126,126,118,157,155, 21, 1, 89, 26, 48,145,195,229,182,172, 90,173, 90, 56, 0, 26,255,252,121,148,213, 98, +185,238, 11,172,123,207,117,105, 50,165,127, 28,156,181, 96, 46, 76, 6,131,193,248, 59,113,162,192, 92,157,120,243,131, 18,123, + 29,106, 12,192,149,103, 64,235, 38,117, 48,118, 72, 87,105,209,207, 14,110, 92, 16, 16,119,231,215,208, 45, 63, 47,231,212,169, + 83, 7, 9, 9, 9,118,149, 66,107, 4, 46,199, 1,144, 63,118,202,147, 72,158,175, 92,182,204,185, 99,199,142, 60, 63, 63, 63, + 16, 66,144,158,158,222,228,252,249,243, 13,166, 76,153,242, 49,228,143,243,180, 70,168, 46,219, 49, 4,104, 97, 89,107, 85,175, +132, 57,147, 6,200, 0, 96,214,135,235, 26,220,121,154,225,246,252,249,243,246, 95,126,249,101, 14,247,210,165,245, 30,192,182, + 12,224,165, 61,229,220,113,236,150,131, 44,109, 79,208,208, 73,147, 14, 85,171, 86, 77, 26, 24, 24, 72,156,156,156,192,229,114, +145,151,151, 23,240,240,225,195, 15,110,223,190,173, 57,127,229, 39,225,221,219, 61,226, 51, 29, 26,235,237,218,118, 93,170,195, + 89, 39,167,152, 97,189,123, 87, 28, 48, 96,128, 67,213,170, 85, 1, 0,207,159, 63, 15, 62,120,240,224,160, 67,135, 14,205,133, + 46,213,162, 53, 66, 95,214,182,191,214, 4,224, 0, 52,115,241,242, 26,202,229,243,107, 89, 44,150, 10, 5,209,134, 87, 86,179, + 57, 70,158,153,185,235,205,245, 25,127,198, 96, 6, 30,167, 1, 29, 90,134, 99, 88,159, 14, 18, 0,248,114,224,162, 38, 47, 18, +159, 9,140, 70, 35,170,135,212,104,254,205,183, 43,206,128,195,193,206,195,231, 95,175,111,143,102,244,227, 4,204,251,102, 37, + 82, 31, 28,108, 98, 85, 60,107,171, 82, 42,184, 0,224, 44,147,245, 57,184,111,207, 37,191,176,126, 55,159,101,155,236,210, 44, +237,220, 60,189,111,173,111,202,195, 75, 53,127, 60,187,149, 31, 16, 16,128, 7, 15, 30,148,239,220, 84, 60,117,178,249,250, 62, + 90,254,197, 23, 62,173, 90,181,130, 84, 42, 5,143,199,131,197, 98,233,112,253,250,245, 14,243,230,205, 27, 15,197, 83,141,189, +231,166, 29, 44, 39,132,180,253,104,236,100,223,174, 61,251,161, 79,151,230,172, 34, 50, 24,140,191, 21,132,144,177, 5,189, 14, + 95,247, 60, 44,218, 11,177, 88,163,197,227,241, 50, 59, 14, 95,236,213,178,113,109,220,185, 31,171, 72, 74, 78, 83, 23,126,150, + 27,115,176,122,207,230, 21,106, 94,189,122, 5, 6,131, 1,191,255,254, 59,238,223,191,143,196,196, 68,140, 27, 55,206,192, 3, +198,148,160,153,215,106,208, 2, 87, 40,226,164,193,194,167,149,207, 63,121,194,213,235,245,184,122,245, 42,242,242,242, 32, 20, + 10, 81,177, 98, 69,116,234,212,137,247,228,201, 19,183,246, 29,187,200, 90,117, 25,156, 0, 89,176,154,199,227,229,149,180,129, + 60, 30, 47,179,253,135, 11,189,106, 6, 87,194,243,164, 84,197,156,111,183,168,109, 54,202,139, 79,124, 97,186,114,229, 10,194, +195,195,113,238,220, 57,247,220,220,220,175,214,173, 91, 55,135,255,221,143,171,205,198,156,105,165,232,229,181, 26,180,192,213, + 61,243, 64,224,197,211, 71, 4, 49, 49, 49,130, 13, 27, 54, 32, 39, 39, 7, 66,161, 16, 46, 46, 46,240,241,241, 65,245,234,213, +201,172, 89,179,164,221,186,197,224,147, 49,253, 2, 77, 65,163,159,150, 84,206,215,219,174,126,225,232,161, 60, 91,245,240,137, + 19,156, 22, 45, 90,252,225,177,189, 74,149, 42,232,220,185,179,195,208,161, 67,171, 14, 24, 52,196,214, 42,226,163,231,144, 6, +106,203,212,212,188, 20,187,107,111,248,117, 24, 52,232,232,130, 5, 11, 92,124,124,124, 32,145, 72, 0, 0, 10,133,162, 98, 82, + 82, 82,147,185,115,231,246,189, 21,189,143,215,170,219,203, 84, 72,252,117,165,237,207,127, 43,124, 62, 47,179, 48,138,228, 36, + 17,231,189, 76,201,208, 0,128,209,104,132,209,104,132,193, 96,192,132,241,227,184, 99,250, 54,170, 22,216,114,242,189,196, 87, + 25,185, 53,206,223,116, 43,252,110, 89,154, 60,109,162, 92,158,124, 97,204,188, 47,190,240,241,246,254, 79,139,224,206, 29, 59, +184,185,185,185, 29,230,205,155, 87,147, 58,182,145,215,232,182,192,165, 52,205,210,206, 77,121,236,137,202,223, 76,234, 92,119, +227,183,199, 97,181, 90,113,227,198, 13, 92,189,122, 21, 43, 86,172,160,167, 78,157, 82, 56, 75, 36,101,156,155, 79,157, 90,248, +166, 7,125,247,221, 33, 34, 18,137,240,235,175,191,226,201,147, 39,224,112, 56,168, 83,167, 14,134, 13, 27,134, 14, 29, 58,248, +140, 29, 59,142,182,234, 50, 48, 30,178, 16,213,187,212, 37, 66, 8, 7,192,228,153,243,190,243,253,112,244, 68, 44,253,102, 22, + 51, 90, 12, 6,227,111, 27,205, 42,113,136, 7, 74, 41,142, 31, 63, 78, 11,150,214,148, 82, 80,128, 83,165,215,198,189, 7,238, +218, 78, 84,233,181,113, 47, 5, 56, 20,224, 56, 3,149,234,213,171,103,150,203,229,244,246,237,219,116,194,132, 9,154,213,171, + 87, 95, 58,113,226,196, 65,139,201,180,217,207,215,247,123, 10,112,138,205,188, 7, 56,129,128,204,209,209, 49, 43, 57, 57,153, +158, 60,121,146,206,159, 63,159,238,218,181,139,158, 58,117,138,158, 63,127,158,158, 58,117,138,238,221,187,151, 70, 71, 71,211, +216,216, 88, 42,145, 72,178, 2, 1, 89, 41,154, 92, 10,112,171,247,218, 48,237,208, 29,243,130,144, 94, 27,167, 80,128,235, 10, +132,214,171, 87,207,122,240,224, 65,186,115,231, 78,250,243,207, 63,211,232,232,104,154,157,157, 77,121, 34, 73, 86,225,247, 74, + 42, 39, 5, 56, 21, 42, 84,200,146,203,229,212,223,223,159, 10,133, 66,234,237,237, 77,171, 87,175, 78,155, 52,105, 66, 63,248, +224, 3, 58,100,200, 16,250,213, 87, 95, 81,185, 92, 78, 29, 28, 28, 50, 10,191, 87,146,102, 56, 32,150, 72, 36,201,145,145,145, +180, 36,116, 58, 29,205,206,206,166,103,206,156,161, 18,137, 36, 57, 28, 16,151,166, 41, 6,234,135,133,133,101,101,103,103, 83, +147,201, 68,147,147,147,233,195,135, 15,233,147, 39, 79,104,114,114, 50,213,233,116,175,181, 99, 99, 99,105, 80, 80, 80,150, 24, +168, 95,162,230,191,121, 41,172, 19,111, 44, 1,222,222, 31,248,248,248,232, 14, 29, 58, 68, 95,189,122, 69,183,111,223, 78, 57, +192,162, 63,173, 91,138,166, 16,232,212,162, 69, 11,235,141, 27, 55,232,189,123,247,232,140, 25, 51,104,231,206,157,105,151, 46, + 93,232,188,121,243,104, 74, 74, 10, 77, 73, 73,161, 31,124,240,129, 85, 8,116, 42,171,126, 22,119,110,202,128,128,110,221,186, +233, 76, 38, 19,141,143,143,167,181,106,213, 74,225, 2, 67, 37, 64,205,214,128,168,172,250, 89, 1,112,245,245,245, 77,187,113, +227, 6, 61,124,248, 48, 13, 12, 12,204,226, 2, 31, 57, 3, 85,156,129, 42, 92,224,163, 42, 85,170,100,221,184,113,131,230,228, +228,208,128,128,128,180, 10,128,235,219,214, 37,228, 79,176,189,117,230,188,239,232,211, 20, 13,157, 57,239, 59, 10, 32,185, 96, + 64,215,115,172, 78,178,133, 45,255,190,229, 79, 94,228,159,214,235, 48, 34, 34,130, 0,184, 92,154,101,211,113,185,139,151, 46, + 93,202,211,235,245,216,178,101,139,170,127,223,190, 7, 90,183,108, 25, 95, 57, 48, 80, 78, 56,156, 50,231, 46,204, 18,137, 62, + 93,186,116,169,139,209,104,196,221,187,119,209,160, 65, 3,248,248,248, 64, 42,149, 66, 42,149,194,203,203, 11, 33, 33, 33,200, +204,204,132,147,147, 19,166, 79,159, 46,203, 18,137, 62, 45, 75,215,102,163, 60, 0,176,218,108, 66, 1, 48, 54,168, 97,195,187, +115,231,206,229,184,187,187,195,205,205, 13, 82,169, 20, 79,158, 60,129,209,104,132,163,216,209,174, 65, 90, 57, 28, 14, 71, 42, +149,226,226,197,139,152, 60,121, 50,154, 53,107, 6, 23, 23, 23, 56, 57, 57,161, 86,173, 90,232,212,169, 19,198,140, 25,131,248, +248,120, 16, 59,146, 74, 30,241,120, 19,199,140, 25,227, 21, 30, 30, 94,236,231,122,189, 30,114,185, 28, 89, 89, 89,168, 88,177, + 34,250,245,235,231,245,136,199,155, 88,146,158, 59,224, 83, 49, 56,248,232,237,219,183, 61, 36, 18, 9,118,238,220,137, 35, 71, +142,224,244,233,211, 56,121,242, 36,142, 31, 63,142, 95,127,253, 21, 89, 89, 89, 0,128,224,224, 96,236,223,191,223, 67,234,229, +117,220, 29,240, 97, 15, 32,246,241, 34, 35,227,108,173,244,116,143,161, 67,134, 92, 83,171,213, 24, 58,116, 40, 22, 47, 89, 50, +139,111,231,104,244, 33,128,204,205,215,119,219,119,223,125,199, 73, 79, 79, 71,239,222,189,179,151, 47, 89, 50, 42,234,204,153, +170,145,167, 79, 87, 93,188, 96,193,168,214,173, 91,103,167,164,164, 96,199,142, 29, 28,239,128,128,109, 33,128,172,188,229, 84, + 1,147, 87,173, 90,229,160,215,235,209,177, 99,199,120, 91, 76, 76,136, 5,216,163, 6,158, 92, 6, 76,101,125, 63, 13,152, 56, +125,250,116, 31,145, 72,132,207, 63,255, 60, 91,251,226, 69,109, 11,240,179, 2, 72, 82, 0, 73, 22,224,103, 85, 66, 66,237, 15, + 63,252, 48, 91, 36, 18, 97,229,202,149, 62,105,255,153,116,219,222, 8, 86, 3, 66,200, 81, 66,200, 21, 0,169, 31,141,157,252, + 81,120,163,166,216,177,121, 29,190, 93,240,229, 54, 0,253, 9, 33,187, 0, 76, 99, 53,143,193,248,119, 98,143, 23,249, 95,109, + 62, 44,177,165,236,117,220,235,196, 9, 10,160, 77,105, 66,174,238,238, 13,106,215,174,141,171, 87,175, 34, 44, 44,236,182,139, +139,139, 69, 32, 18,129,207,231,131,218,202,158, 35, 90, 44,145,180,239,208,161, 3,239,230,205,155, 8, 10, 10,130, 88, 44, 6, +159,207,255,195, 34, 16, 8,224,235,235, 11,165, 82,137,246,237,219,243,215,172, 89,211, 30, 6,195, 55,101,222, 16,227, 30, 74, +179,110,126, 55,228,167,237,219,170,180,106,213, 10, 10,133, 18, 54,155, 13,142,142,142, 48, 26,141,224,241,120,249, 77, 64,102, +170,180,103,167, 89,173, 86, 43,151,203, 69, 80, 80, 16, 22, 47, 94, 12,189, 94, 15,129, 64, 0, 0, 80, 42,149,144,203,229,120, +248,240, 33,146,146,146,236,154, 79,209, 73, 38,235, 58, 96,192, 0, 97,113,159, 25, 12, 6, 40, 20, 10, 40, 20, 10,200,229,114, +232,245,122, 52,109,218, 84,120,226,248,241,174,200,201, 41,118, 98,105,131,131, 67,223, 29, 59,118,120, 9,133, 66,232,116, 58, +168, 84, 42,188,124,249, 18, 47, 94,188,208,103,102,102, 90,156,156,156, 56,129,129,129, 28,145, 72, 36,234,213,171, 23, 81, 42, +149, 32,132,160, 91,183,110,238,187,119,238, 28, 0, 96, 5, 59,165,237,227, 44, 96,168,111, 52,118,111,220,168,209,197,219,119, +238,132,127,250,233,167,136,142,142,254,206,113,223,190, 43, 90,224,126,105,223,141, 7, 38,126, 95,196,192,208, 23, 47,194, 76, + 64, 86,145, 85,146, 2, 19, 18, 78,127,248,225,135, 15,162,163,163, 61, 86,174, 92,233,211,191,119,239,137, 0, 22,149,167,140, + 78, 50, 89, 67, 95, 95, 95,156, 58,117, 10,201,137,137, 95, 90, 0, 93,121,190,207,225,114, 91,180,106,213, 10,191,254,250, 43, + 82, 94,188,248,210,242,199, 50,230, 63, 40, 1, 89,188,248,248, 47,183,109,219,182,117,228,200,145,224,242,120, 45, 96,177,148, +231,103,254,148,248, 62,114,220,167,216,182,105,205, 54, 0,163, 41,165, 54,188,167, 41,173, 24, 12,198,223,180, 13,206, 14, 47, +242,119, 49, 91,133, 77,137,229,138,104,121,121,121, 85,144, 74,165, 72, 77, 77, 69,141,208,208, 76,145, 72, 4, 33,159, 15, 7, +161,208,174, 66,104,181,218, 48, 63, 63, 63, 40, 20, 10,120,120,120, 64, 32, 16,188, 94,132, 66,225,235,255,157,156,156,192,225, +112, 16, 16, 16, 0,173, 86, 27, 86,166,110,198, 67,175,125,107,198, 79,184,113,229, 84,149,222,189,251,192,213,213, 13,254,254, + 21,225,229,229, 5,177, 88, 12,127,127,127, 84,173, 90,149, 46, 95,190, 28,142, 94,117,236,186,144, 23, 53, 79, 60, 30, 15, 86, +171, 21, 25, 25, 25,120,250,244, 41,162,163,163,113,227,198, 13,220,187,119, 15, 42,149, 10,246,204, 91,173,213,233,234,242,120, +188, 98, 77,150, 92, 46,135, 92, 46,127,109,180,178,178,178,144,148,148, 4,181, 70, 83,175, 20,211,219,167,118,237,218, 92, 0, + 16,139,197,168, 87,175, 30, 54,110,220,104, 57,118,228,200,192,154, 55,110,184,249,159, 57,227,242,211,134, 13, 3,251,245,235, +103,189,121,243, 38,148, 74, 37, 30, 63,126, 12, 79, 79, 79,158,208,193,129,205,149, 87, 78, 34, 1,141,135, 74,213,165, 89,179, +102, 9, 10,133, 2,203,150, 45,227,240,157,156, 54, 45, 0,184,165,126,145,203,109,222,170, 85, 43, 28, 61,122, 20,169, 47, 94, +204,120, 81,140,129,121, 1,100, 37,199,199,207,216,182,109, 27, 58,117,234, 4,194,227,149, 59, 81,169, 73,147, 38,181,109, 54, + 27, 30, 60,120, 0, 23,224, 86,121,191, 95,181, 90,181,240,194,200,175, 4,184, 86,210,122, 18,224, 90, 84, 84, 20,196, 98, 49, +106,212,172, 89,191,156, 63,179,156, 16,146, 54,114,220,167, 56,124,250, 55, 0,192,182, 77,107, 50,138,152, 44, 6,131,193, 34, + 90,127,203,136, 86,161,177, 42,186,188,126,144, 45,167, 8, 0,128,207,231, 67, 40, 18, 65, 40, 20,230, 27, 36,145,168, 60,142, + 15, 14, 14, 14,175,141, 85, 81,131, 85,244,127, 71, 71, 71,187, 12, 12, 0,228, 61, 59,221,114,244,168,145, 66,145, 72, 4,163, +209, 0, 74, 41, 68, 34, 7,184,184,184, 32, 40, 40, 8, 74,165, 18,205,154,183, 54,188,148, 11,142,187,215,232, 21,253, 54, 59, +208, 98,177, 64,163,209, 32, 47, 47, 15,185,185,185, 80, 42,149,208,233,116,118,119, 69,183,217,108,220,151, 47, 95, 98,207,158, + 61,200,201,201, 1,144,159,104, 93,104,174, 10,255, 38, 36, 36, 96,231,206,157, 72, 76, 76, 44,215,241,105,217,178, 37,142, 31, + 63,206,109,211,190,253,230,115,129,129,169,231, 2, 3, 83,219,180,111,191,249,232,209,163,220, 10, 21, 42, 32, 41, 41, 9,119, +239,222, 69, 94, 94, 30, 40,165,172,255,252, 91,240, 28,200,211,230,230,142,156, 53,107, 22,149, 74,165, 88,246,253,247,117, 23, + 1,131,237, 53, 48,178, 82, 12,140,236,221, 12, 12, 40,165,176,217,108,176, 90,173,111,181,109,132, 16,194,231,243,203, 59,180, + 2, 41,135,254,235,196,247,233, 95, 45,198,201, 95, 15, 22,126, 20,199, 76, 22,131,193,248,187, 83,218, 92,135,188, 34, 14,242, +245,223,146,200,200,200,120,165,209,104,170, 4, 6, 6, 34, 37, 37,197, 43, 32, 32,224,133,144,207,135, 64, 40, 4,225,148,237, + 9, 28, 29, 29, 31,164,166,166, 54,175, 80,161, 2, 44, 22,203,107, 83,245,102,211, 97, 97,148,230,222,189,123,112,116,116,124, + 0,125,169, 35, 39,192,106,204,171, 84,191,126,253,215,145, 33, 23, 23, 23,184,184,200, 32, 18, 57, 96,246,236,217,182,149,203, +151,175, 11,104,183, 64, 49, 98,202, 44, 58,107,209,230,247,186,115,237,189, 49, 57, 58, 58, 62,240,247,247,111, 42,147,201,112, +248,240, 97, 36, 37, 37, 33, 47, 47, 15, 90,173, 22, 6,131, 1, 90,173, 22, 70,163, 17, 14, 14, 14,168, 89,179, 38,156,157,157, +113,254,252,249, 7, 48, 24,138, 55,151, 57, 57,135, 31, 60,120,208,180, 81,163, 70,175, 35, 42,109,219,182, 37,109,219,182,245, +120, 29, 69,211,106,145,157,157,141,219,183,111,227,252,249,243, 32,132, 32, 46, 46,206,106,208,233,246,178,211,226,237,208, 3, +191,115,183,109,219,250,241,199, 31,143,106,222,188, 57,172,192, 7, 0,118,254,183, 12, 76, 33, 55,110,220,120,104,181, 90,155, + 87,175, 94, 29,114,160, 49,128, 95,203,101, 34,159, 61,139,178, 88, 44,237,235,214,173,139,195, 7, 14,180, 4,144, 84,220,122, + 26,160,101,120,120, 56,116, 58, 29, 30, 63,122, 20, 89, 14,147,181,121,230,188,239, 62,250,112,244, 68,236,216,188, 14,219, 54, +173,121,185,117,227,106,127,216,145, 63,198, 96, 48,254, 85,209,172, 50,189,200,255, 34,197,229,104, 21,154, 47, 94,121,132, 20, +121,121,145, 81, 81, 81, 85,234,215,175,143,205,155, 55, 55,106,214,180,233, 43,129, 80,104, 17, 10, 4,224,216,113, 35,209,105, + 52, 23, 46, 92,184,208,184, 87,175, 94,188,155, 55,111,194,199,199,231,181,209, 42,252,203,227,241, 64, 41,133,163,163, 35,126, +249,229, 23,147, 78,163,185, 80,102,180,200,106,179,114, 10,140, 30,165, 20,114,185, 28, 2,129, 0, 43, 86,172,196,218,229,203, +135, 88,129,131,193, 18,207, 47, 0, 56,252,215,110,208, 90,237,197,147, 39, 79, 54,152, 59,119, 46,191, 98,197,138,144,203,229, +200,203,203, 67, 78, 78, 14,148, 74, 37,148, 74, 37,242,242,242, 32,151,203,225,224,224,128,232,232,104,179, 94,171,189, 88,146, +158, 72,175, 63, 52,124,248,240,233, 81, 81, 81,190, 60, 30, 15,102,179, 25, 54,155, 13, 54,155, 13, 38,147, 9,207,158, 61, 67, + 76, 76, 12,158, 60,121,130,220,220, 92,240,249,124,112,185, 92,220,187,119, 47, 79, 98, 54, 31, 96,167,244,219,195, 7, 14, 95, +191,126,125,212,176, 97,195,224, 87,177, 98,107,164,164,216,101, 96,142,148, 98, 96, 20,111, 97, 96,254, 96,128, 84,170, 59, 9, + 9, 9,205,219,180,105, 3,223,138, 21,191,171,153,146,114,238, 81, 57,242,180,172, 22,203,181,235,215,175,183,255,240,195, 15, +177,121,243,230,239, 60, 19, 18, 78,103,189,209,204,233, 9,120, 86,174, 90,245,187,143, 62,250, 8,103,207,158,133,213, 98,185, + 86,202, 69,167,232,136,239,149, 62, 26, 59,217,255,141,196,247,141,132,144, 73, 0,150,177, 26,197, 96, 48,254,201, 17,173,114, + 53, 29,138,173,214,153,211,166, 77, 51,115, 56, 28,244,233,211,199,233,215,163, 71,251,221,187,127, 63, 40, 51, 51,211,197,106, +181,150,169,229,105, 48,172,158, 54,109,154,220,104, 52, 34, 36, 36, 4,185,185,185,176, 90,173,224,241,120,224,241,120, 32,132, +128,195,225, 64, 42,149, 34, 42, 42, 10, 91,183,110, 85,122, 26, 12,171,203,188, 73, 88,173, 15,118,238,220, 9, 46,151, 75, 29, + 28, 28, 64, 8, 1,143,199,195,202,149, 43, 51,215, 2,135, 1,128,203,225, 24, 1,128,195, 33,246,102,239,150,217,110, 41, 20, + 10, 97,203,239, 4, 80,230,186,174, 6,195,170,165, 75,151,170, 30, 63,126, 12,141, 70,243, 58,250,166, 86,171, 95, 39,215,203, +229,114, 16, 66,160,209,104,112,244,232, 81,149,171,193,176,170, 36,189, 28, 32, 61, 37, 46,174, 71,163, 70,141,114, 18, 18, 18, +160, 80, 40,240,224,193, 3,156, 63,127, 30,251,247,239,199,217,179,103,241,236,217, 51, 88, 44, 22, 84,168, 80, 1,148, 82, 28, + 57,114, 68, 97, 81,169, 62,200, 1,210,217,105, 81, 50,149,124,124,218,123,123,121, 37,123,122,120,164, 84,242,241,105,255,230, +231, 50, 32, 54, 54, 54, 22, 22,139, 5, 65, 65, 65,110,165,229,105, 81,139,229,250,245,235,215,241,225,135, 31,194,191, 74,149, + 37,129,128,231,155,235, 4, 2,158,129, 85,171, 46, 41, 52, 48,212, 98,185, 94,222, 50, 59, 1,107,190,248,226, 11,157, 64, 32, +192,190,125,251,130,204,213,170, 61,225, 1,131,165, 64,104, 27, 64, 80,214,247,125,129,117, 95,125,245, 85, 58, 33, 4,187,118, +237,242,144, 85,173,250,144, 7, 12,151, 1,149,100, 64, 37, 30, 48, 92, 86,181,234,195,125,251,246,121, 88, 44, 22, 76,153, 50, + 37,221, 23, 88, 87,138,228,100, 74,105,119, 74,105, 43, 74,169,255,214,141,171,113,242,215,131,133, 38,107, 52,165,244, 54,165, +116, 24,165,244, 33,171,113, 12, 6,227,159, 12, 41, 46, 15,138,223,120, 81, 6, 64,189, 90, 55,169,131, 59,247,159, 42, 60, 92, +157,207, 20,126,150, 27,115,176,122,187, 48,231, 58, 63,254,248, 35,248,124, 62, 94,190,124,137, 71,143, 30,193,217,217, 25, 67, +134, 12, 49,232, 84,170, 30,133,115, 29, 18, 66, 58, 80, 74,207, 23,104,230,207,167,166,136,147, 86,229, 69, 87, 57,125,242, 56, + 87, 38,147, 65,173, 86,131,195,225,192,193,193, 1,142,142,142, 16,139,197,184,123,247, 46, 34,186,247,180,102, 57,182,122, 61, + 96,105,225,124,106, 69, 53, 65, 8, 23, 0, 26, 3,142, 81,192,231, 94,126,126,211,230,204,153, 35,238,220,185, 51, 4, 2, 1, + 42, 86, 10, 78, 15,234,178,108, 13,135, 67, 44, 41, 57,202,217, 85, 43,249,201, 30,197, 37, 1, 32,249,115, 34, 22,204,117, 88, + 92, 57, 3,140, 87,130,126,249,121,185,115,189,122,249,249,232,114,185, 28, 25, 25, 25,200,204,204,132, 92, 46,135, 70,163, 1, + 0, 28, 63,126, 28, 39,175, 62, 81,234, 42,246,139, 47,169,156,255,217,246,167, 78,126,166, 91,149,119,239,252,153,235,233,233, +137,140,140, 12,100,101,101, 65, 46,151, 67,167,211,193,106,181, 34, 55, 55, 23, 91,182,253,108,205,145,182, 74, 44, 28, 16,178, + 84, 77,205, 75,177,155,250,183, 10,225, 53, 3,233,168, 81,163,156,156,157,157, 97,179,217,144,151,151,135,228,228,100, 36, 36, + 36,224,234,213,171,154, 76,185, 17, 26,143,142, 41,133, 3,150, 22,187, 63,223, 95, 8,245,239,167, 89, 80,151, 0,192,207,215, + 55,245,197,139, 23, 94, 86,171, 21, 21, 42, 84,176,200,115,115,151, 8,129,179, 78, 64, 26, 0,154, 13,204, 89,181,102,205,200, +158, 61,123,162, 97,195,134, 47,211, 51, 50, 42, 23, 87,151, 64, 8, 55, 4,144,105, 43, 86,140,185,125,251,182, 79,114,114, 50, + 62,252,240,195,236, 23,207,159,207,144, 21,228,107, 41,128,150,129, 85,171, 46,217,183,111,159, 71,149, 42, 85, 16, 22, 22,150, +238,144,156, 92,235, 41,160, 40,161,126,150,120,110,202, 99, 79, 84, 30,223,187,118,195, 9, 19, 38,192, 98,177,224,234,213,171, +184,117,235, 22, 94,188,120,129,223,126,251, 77,238, 44,145, 12, 44,156,235,176,164,250,249, 65,176, 38,104,215,174,157, 68, 32, + 16, 96,219,182,109,136,138,138, 2, 0,132,135,135,227,163,143, 62,130,197, 98,193,208,161,195,232,137,167,226,248,210,234, 39, + 33,164, 54,128,239,145,111,242, 26, 82, 74, 29, 8, 33,169, 0,252,203,147,147,197,234, 39,211,100,154,255, 30,205,127, 42,101, +206,117,184,112, 61,100,127,156,230, 99, 76,234,193,141, 11,120, 45, 90,182, 10, 93, 48,127, 30,167, 81,163, 70,240,247,247, 71, +120,120, 56,146,147,147, 69, 46, 46, 46,101,205,167,166,110,213,101,112, 66,157, 58,117, 92,102,204,152, 33,235,212,169, 19,223, +223,223, 31,148, 82, 68, 69, 69,225,240,225,195,166,205,155, 55, 43,181,222,221,229,145,151,246,168,237,153, 79,237, 22,160, 5, +240,117,197,212,212, 77, 19,199,143,159, 87,175,126,253, 81,243,231,207,231, 72, 29,197,252,197,179, 71, 59, 0,192,194, 31,246, +203,122,246, 27,130, 85,213,128,214,131,139,159, 71,174,104, 57,147, 83,198,188,232,218,187,125,181,207, 39,141,180, 14, 24, 48, + 64,226,236,236, 12,127,127,127,184,186,186, 34, 62, 62, 30, 41, 41, 41,244,216,177, 99,234, 27,247, 98,249, 71,206,222,121,225, + 32,243,181,103, 94, 66, 85,171,206,253, 19,187,118,237,234, 58,124,248,112,167, 6, 13, 26,240, 69, 34, 17, 68, 34, 17, 50, 50, + 50,240,236,217, 51,211,177, 99,199,212, 90,175, 15,242, 34, 47,237, 83,217, 57,215,161,174,213,160, 5,207,174,157,155, 63, 37, +230,193,131, 97, 54,160,174,201,100,170, 96,181, 90, 9,135,195, 73,179,217,108, 15, 76, 42,213, 86, 67,248,252,149,108,174, 67, +251,176, 90,173, 2,171,213, 10,185, 92,142,115,231,206,241,158, 63,127, 62,231,254,253,251,115, 82, 83, 83, 97, 54,155,209,183, +111, 95,132,135,135,227,210,165, 75,200,202,200, 56, 86,154,214, 83, 64, 33, 74, 73,249,104,204,152, 49,167,118,238,220,201,185, +127,255,190,199,182,109,219,182, 20,103, 96,134, 13, 27,102,203, 72, 78,254,200, 0, 40, 74,169,159,165,157,155,217,167,247,173, +189,223,171, 79,191,154,243,231,206,225, 55,107,214, 12, 30, 30, 30,104,217,178, 37, 76, 38,147, 75,141, 26, 53,202, 58, 55, 85, +173,186, 12,140,175, 91,183,174,100,229,202,149, 62, 35, 71,142,196,164, 73,147, 0, 0, 58,157, 14,103,207,158,197,148, 41, 83, +210,147,121,141, 53,101,213,207,130, 72, 85,161, 1,187, 2,160, 21,128,120,150,248,206, 96, 48,254,145, 81, 43, 66,194, 41,165, + 81,132, 16, 95, 0, 17, 0, 78, 80, 74,211, 74, 52, 90,192,127,230, 83,187,118,235, 33,138, 78,243,145,143,239, 35, 75,192,240, +231,227,166, 45, 9,227,154,149,174,124,162,119,142,139,141, 37,101,205,121,248,122, 62, 53, 89,176,218, 61, 97,111,163,197, 11, + 23,126,186,106,213,170,246,133, 67, 56, 56, 58, 58, 62,208,105, 52, 23, 60, 13,134,213, 90, 89,240,133,242,206,205,151, 2,100, + 0, 24,239, 26, 25,185,166, 91,207,190, 75, 29,220,130,248,179, 22,109,214,115, 57, 28,227,179,212, 44,172,170, 6, 72,236,232, + 32,169, 53, 2, 49,114, 95, 75,134,123,191,167, 95,125,241,197,231, 11,191,254,186,145, 84, 42,109,109,178, 88,130,109, 54, 27, + 96,179,197,105, 53,154, 43,212,100,186,109, 8,159,187,220, 65,230, 75,237,158,151,208,165,134,202, 45,241, 96,163,237, 91,183, + 78, 62,112,224,192,159,182,221,221, 96, 88,163,117,169,113,222,158,109, 47,186,142, 30,248, 29,153,153,191,151, 88, 9,192,230, + 58,180,251,233,195,102, 27,235,234,234,186,163,125,251,246, 14, 29, 58,116, 64, 68, 68, 4,154, 53,107, 6,155,205, 6, 74, 41, + 84, 42, 21,246,239,223,143,165, 75,151,198, 85, 6,190, 46, 75,207, 0, 92, 16,157, 60,249, 65,221,186,117,183,149,102, 96, 10, + 76, 86,153, 57,137,165,159,155,162, 56,139,172, 71,210,160,137,139,171, 25,149,105, 46,238,142, 22,159,152,135, 15, 56,246,159, +155, 33, 42,107,212,254,198,125,123,247,158,200,229,241, 90, 22,244,128,164,143, 31, 61,138, 44,156, 84, 26,225, 31,157, 43,103, + 93, 42, 28,187,142, 37,190, 51, 24,140,127, 42,225, 0,162, 0, 68, 80, 74, 55, 21, 36,199,151,156, 12,207,227,241, 50, 11,163, + 62, 60, 30, 47, 51,254,200,184, 33,165,169,243,129,246, 5,145, 44,148, 57,215, 97,193,255, 73,128, 10, 6,195, 55,127, 24,140, +180, 72,239, 66,254, 27,235,151,103,107,243,128,167,176, 24,186, 33,243, 17,112,116,124,190, 94,163,133, 95, 22,221,166, 18,111, +178,127,248, 93, 65,174, 30,184, 6,181,250, 26,212,234, 98,147,118,249, 60, 65,110, 89,229,124,115,219,147, 1,229,187,110, 59, +175,156,251,135,247, 14,251,243,223,198,171,236,236, 35, 0,164, 21,143, 31,247, 62,125,252,248,128,207,167, 78,237,235,235,231, + 87,213,195,195,195,213,201,201,137,115,243,230,205, 4,139, 94,191,166, 30,176,189, 32,154, 90, 38, 6,224, 66, 72,114,114,173, +254,189,123, 79, 36, 60, 94,139,162, 6,134, 90, 44,191, 5, 1,235, 74,139,100,189,237,185,233, 47,242,109, 95, 16,201, 2,215, +206,115, 51, 37,191, 28,139, 96,177, 44, 66,116,116, 49,117,190,220,117,105, 33, 33, 68, 5,150,248,206, 96, 48,254,185,156, 40, + 48, 87, 39,254,244,201, 95, 57,191, 15,128, 14, 76,147,105,254, 83, 52,243,189, 10,156,217,254,100,154, 76,147,105, 50,205,247, +175,249, 79, 93,120,204,132, 50, 24,246, 65,243,147,211,149,108, 79, 48, 24, 12, 6,163, 40, 69,114,179,138,222, 51, 54, 1,249, +169, 59, 29, 74,184,169,156, 47,199, 15,116,120,139,155,214,121,166,201, 52,153, 38,211,100,154, 76,147,105,254,187, 52,203,210, +254, 59,246,102, 36,132,140, 45,204,205,122,115, 76, 45, 98,239, 52, 55,111,249,195,172,235, 43,211,100,154, 76,147,105, 50, 77, +166,201, 52,255,209,148, 22,209,226,176,221,195, 96, 48, 24,192,130, 5,132, 3, 16, 2, 44,224, 0, 7,185, 64,127,110,254,235, +183,167,127,127, 82,236, 96,182,147,135,186, 57,177, 61,206, 96,252,115,160,148,166,149, 52,169, 52,203,209,250,239, 58,224, 0, + 31, 31,159,141, 0, 72,122,122,250, 88, 74,105, 50,219, 43,255,123,184,187,187,183,183, 88, 44, 80, 40, 20, 23,254,137,219, 87, +171, 26,233, 77, 57,168,241,159, 43, 6,146, 31,197,209, 29,197,173, 91, 51,152,124, 8,242,159,177,184,136, 13,143, 99,158,209, + 95,202, 81,231, 57, 31,116,240, 95, 7, 0,167,206,191,156,248, 87,140,171, 69, 8,169,238,233,233,121,134,199,227,241,172, 86, +235,248,140,140,140,227, 37, 27,161,254, 92, 0,224,211, 75, 51, 61,220, 66,103,124,246, 49,225,107, 13, 91,229, 6,157, 70,193, +229,115, 19, 69,124,159,235,224, 86, 56,149,167,110,250,168,184,239, 31, 56,112,160,196, 89,188,107, 7,147, 15, 66,107,214,236, + 94, 63, 76, 28,255,253,234, 70,171, 90, 7,121,240, 19, 94,222,147,126,183, 65,177,209,217,173, 82,247,225, 3,221,143,243, 28, +201,176, 45, 91,178,213,236, 44,179,159,111, 9,113, 51, 1, 97,124,145,200,223,106,177,120, 19,128,114,121,188, 12,179,193,240, + 82, 0, 68,207,160, 84,254, 79,215, 20,136, 68, 21,173, 22,139, 55, 0,252, 47,150,147,241, 71, 74, 52, 90, 78, 78, 78,119, 57, + 28, 78,197,162,147,225, 22,206, 39, 88,248, 94,209,207, 8, 33,176, 90,173, 41,185,185,185, 13,202,113, 65,116, 6, 48, 0, 64, + 97, 23,245,221, 0,246, 83, 74,149,111,121,129,117, 22, 8, 4,211, 36, 18, 73, 59,157, 78, 87, 11, 0,196, 98,113,140, 70,163, +185,104, 50,153,190,127, 27, 93, 66, 8, 15, 64,127,169, 84,218,150,195,225,180,165,148, 18, 74,233, 37,181, 90,125, 17,192, 1, + 74,169,229, 45, 52,197, 94, 94, 94,139, 66, 67, 67, 7,207,156, 57, 51,199,221,221, 61,100,202,148, 41,119, 60, 61, 61,247,100, +103,103,207,166,148,234,254, 23, 42, 7, 33,164,170,143,143,207,110, 62,159,207,125,249,242,101, 91, 0,240,247,247,191,100, 52, + 26,173,153,153,153, 67, 40,165,207,203,169, 39, 1,208, 68, 42,149, 54,144, 74,165,173,172, 86,107,141,130,249, 25, 31,171,213, +234,171, 38,147,233, 46,128,155,148, 82,205,255,144, 25,118,242,242,242,218, 73, 8, 1, 33, 36,152, 82,170,250,199, 61,137,113, + 80,227, 81,204,147,144,215,102,170, 86,104, 41, 59, 4, 1,197,172,107,183,209,106,215,218,183,123,143, 30, 29, 57, 0, 96, 52, +159,234,142,114, 78,126,109,143,201,234,211,167,207,239, 59,119,238,116, 53, 24, 12, 24, 59,118,236,110,153, 76,182, 78,161, 80, +204, 44,237,123,206, 82,215, 41,203, 86,158,117,204,159,255, 26, 94, 54,155,213,235,213,171,231,193,143, 30,254,222, 37, 38,230, +198, 98,221,147,139, 55,109,132, 63,206,132,150, 79,236, 41, 71,205,170,164, 91,207,254,189, 35,190,254,122, 62, 6, 15, 28, 92, + 41, 38, 70, 47,174,224, 28, 47,204,213, 73,170,185,123,122,245,248,122,225, 65,114,253,218,145, 30, 59,183, 45,184, 56,106,148, + 71, 59,102,182,236, 58,182,100, 33,143,215,196, 53, 52,180,213,192, 35, 71, 32,245,247,231,241, 68, 34, 14, 0, 88, 12, 6,127, +245,203,151,190,251,122,244,104,188,128,144,203,243, 40,189,197, 52,255,255, 53, 25,229, 52, 90, 28, 14,167,226,171, 87,175,188, + 36, 18, 73, 97, 88, 12, 86,171, 21, 86,171,245,245,228,197,148,210,215,127, 45, 22, 11, 66, 67, 67,237,122,162, 5,208, 14,192, +136, 54,109,218,244,251,254,251,239,249, 97, 97, 97,133, 83,134,180,156, 53,107,214, 15,132,144, 67, 0,182, 3,184, 96,239, 19, + 47, 33,164,179, 68, 34,217,181,108,217, 50,231,142, 29, 59,242,252,252,252, 64, 8, 65,122,122,122,147,243,231,207, 55,152, 50, +101,202,120, 66,200, 80, 74,233,153,114,156,216,181,157,156,156, 14,246,238,221,187, 98,235,214,173, 29,106,214,172, 9,171,213, +138,123,247,238,141,188,123,247,238,160, 67,135, 14,205, 35,132,244,179,119,190, 54, 66, 8,145, 74,165,195, 43, 84,168,176,104, +238,220,185,110, 67,135, 14, 21, 62,124,248, 48, 47, 40, 40,136, 92,191,126,221,115,255,254,253,227,151, 44, 89,210,223,201,201, +105,182, 90,173,254,153,218,145, 64,231,236,236,124,151,195,225, 84,180,199, 8, 3,176,219, 12, 19, 66,234, 85,174, 92,121,255, +181,107,215, 42, 39, 37, 37, 89,123,245,234,181, 3, 0, 46, 94,188, 24,102, 54,155, 73,167, 78,157, 78, 17, 66, 6, 80, 74,239, +217,185,237,117,220,220,220,126, 29, 60,120,176, 91,213,170, 85, 29, 43, 87,174, 76, 36, 18, 9,184, 92, 46, 20, 10,133,223,195, +135, 15, 59,220,186,117, 75,119,254,252,249, 92, 66, 72, 15, 74,105,116, 57,142, 83, 51, 47, 47,175, 97,124, 62,191,182,197, 98, +169, 0, 0, 60, 30,239,149,217,108,126,152,153,153,185,147, 82,250,251,219,158, 32,222,222,222,107, 23, 45, 90,228,145,153,153, + 73,151, 44, 89,178, 22,192,240,127,234,197, 96,247,158, 3,184,123,231, 22, 0, 8, 8, 33,228,205,250, 71, 8, 33, 53,130, 33, +248,236,179,169,104,208,176, 49,134, 12,238, 95,166,102, 68, 7,255,101,124,161,192, 93,175,215,255,174,208, 26, 14,120,187,187, + 12, 24, 60,168, 91, 28, 0,156, 58,125,121, 64,227,198,110,151,100,142,162,254, 14, 14, 14,205,204, 70, 83,206,137,243, 47,191, + 40,143,169,170, 80,161,194, 25, 87, 87, 87,199,220,220,220,244,172,172,172,245,125,250,244, 89,184,125,251,118,215,132,132, 4, +188,124,249, 18,159,126,250,169, 52, 37, 37,101,162, 72, 36,186, 97, 48, 24, 74,140,108,169, 84,185,171,103,205,232, 57, 87, 38, +243,224, 74, 28,157,225, 36,115, 67, 80,213,186,104,210,172, 59, 62,136, 24,133,103,113, 81, 77,182,111,251, 58,234,213,171,243, +223, 74,221,170, 44,148,203, 43,151,120, 93,170, 21, 66, 90, 23,154,172,185,115,231, 35,246,201, 19, 85, 82, 34,231,147, 19, 71, +120,142, 31,180, 15, 21, 89,140,233, 73,215,175, 29,169,220,162,101, 47, 0,104,176,115,219,130,139,147,135,186,181, 95,179, 43, + 87,197,110, 73, 37, 95, 59,191,230,243,135,119, 94,185,210, 43,124,252,120,129, 58, 49,209, 20,191, 97,131, 54,227,234, 85, 43, + 79, 36,162,254, 93,186, 16,207,182,109, 29,198, 63,126, 44,248,109,201,146, 86,139,133,194,160, 89, 70,227, 46,166,249,255,167, +201,234,232,235,100,248,215,185, 90,133,205,135,188, 82,190, 4,137, 68,130,125,251,246,129,207,231,131,199,227,129,207,231,151, +248,127, 64, 64,128, 61, 5,233,227,227,227,243,195,186,117,235,188, 59,119,238, 12, 7, 7,135,215,159,113,185, 92,116,236,216, + 17, 29, 58,116,224,167,166,166, 14,218,183,111,223,160,197,139, 23,103, 16, 66, 38, 81, 74, 15,151,161,219, 54, 36, 36,228,240, +217,179,103,197,122,189, 30, 87,175, 94, 69, 94, 94, 30,132, 66, 33, 42, 86,172,136, 78,157, 58,241,158, 60,121,226,214,177, 99, +199,195,132,144,110,148,210, 75,118,148,181,129,151,151,215,149, 3, 7, 14, 56,212,173, 91,151, 60,123,246, 12,225,225,225, 0, + 0,133, 66,129, 94,189,122, 57, 12, 29, 58,180,234,160, 65,131,110, 18, 66, 90, 83, 74,239,150,161, 87,223,199,199,231,231,222, +189,123,251, 45, 94,188,216,217,201,201, 9, 73, 73, 73,105, 62, 62, 62,193,133,251,123,208,160, 65,194,238,221,187,251, 46, 93, +186,116,245,193,131, 7,191, 32,132, 12,167,148, 70,150,166, 91,104,136, 29, 29, 29,145,145,145,129,221,187,119, 99,226,196,137, +224,114,185,200,204,204,196,254,253,251,241,201, 39,159, 20, 26, 26,187,204,176, 68, 34,233, 80,183,110,221, 45, 23, 47, 94,172, +232,226,226, 2, 63, 63, 63,206, 87, 95,125, 85, 59, 40, 40, 72, 92,169, 82, 37,110, 90, 90, 26, 14, 31, 62, 28, 52,108,216,176, + 95, 29, 28, 28, 70,234,245,250, 50,155,212,188,189,189,183,158, 56,113, 34, 32, 38, 38, 6, 27, 54,108, 64,110,110, 46,132, 66, + 33, 92, 92, 92,224,227,227,131,224,224, 96, 50, 99,198, 12,199,238,221,187, 59, 78,154, 52,105, 43,128,122,118, 28,163,186, 94, + 94, 94, 27, 7, 13, 26, 20,180, 96,193, 2, 23, 31, 31, 31, 20, 62, 24, 40, 20,138,138, 73, 73, 73, 77,230,206,157,219,207,219, +219, 59, 33, 51, 51,115, 28,165,244,126, 57, 79,156,122,237,219,183,239,214,171, 87, 47,110, 90, 90, 26,118,238,220,217,141, 16, + 82,207, 94,115,249,119,227,238,157, 91, 24, 59,225, 83,181,159,191,191,224,236,153, 45,125,228,242,154,119, 92,196,249, 19, 82, +203,117, 48,181,107,205,109,216,169,243, 40, 65,215,136, 94,234, 77, 63,174,150,218, 99,180,248, 66,129,251,238, 93, 43,146,175, + 93,191, 91,251,220,249, 91, 93,250,244,232, 65, 5, 2,151, 32, 0,248, 98,202,103,252,195, 71,143,110,235,216,161,113,106,203, + 22, 13,146,135, 12,157, 26, 80,142, 99, 83,189,122,245,234,151,163,162,162,188, 69, 34, 17,114,115,115,221, 55,109,218,180,162, + 69,139, 22,156,248,248,120, 60,121,242, 4,137,137,137, 80, 40, 20,232,216,177,163, 52, 50, 50,114, 61,128, 18,141,150,137,211, +110,145, 95, 37,243, 26,119,177,164,178,201,170,244,162,230,180,154,231, 78,156,171,179,119,167, 46,220,219, 55, 52,120,196, 71, +243,240,245,194, 67,252, 61,187,191,155,123,225,252, 94,128, 83,185,228, 25, 1, 40,154,205,154, 61, 19, 74,149, 1, 67, 7,143, +193,176,193, 99,220, 41,140,190,212,170,151, 24,117,121, 46, 78,130,199,199,215,109, 94,209, 27, 64,197, 34,102,235, 2, 51, 91, + 37,243, 53,143,215,184,219, 15, 63,120,214, 30, 61, 90,116,127,193, 2, 77,246,213,171,186,106, 93,187,230,133,127,252,177, 1, + 0, 84,137,137,130,216,121,243, 28, 61, 91,181, 18, 55,157, 54,205,213,106, 52,250,124, 67, 72,163,175, 40,189, 93, 94,205,128, + 1, 3,172,115,183,109,107,120,117,234,212, 54,196,108,230,118,105,218,244,222,146,157, 59, 95,189,139,230,251, 44,103,234,149, + 43,134,220,160, 32,132,247,234,149, 19,224,229,101,120,159,219,254, 46,229,100,160, 48, 40,149, 6,160,112,100,248,252,235, 21, +165, 20, 39, 78,156,104, 13,224, 50,128, 5, 17, 17, 17,243, 1,192,197,197, 37, 67, 46,151,123, 29, 62,124,184, 76,147,197,231, +243,225,235,235,139,224,224,224,204,140,140, 12,239, 82, 46,142, 47,109, 54, 91, 69, 74,233,235,232, 75, 73, 24, 12, 6,196,197, +197,161, 78,157, 58, 41,148, 82,255,210,154,118, 28, 29, 29,227,159, 60,121,226,241,232,209, 35,220,189,123, 23, 65, 65, 65,112, +117,117, 5,159,207,135,217,108,134, 82,169, 68, 72, 72, 8, 68, 34, 17,234,215,175,159,173,209,104,130, 74,107, 2, 34,132,136, + 36, 18, 73,220,149, 43, 87,252,195,195,195,113,251,246,109,248,251,251,195,199,199, 7, 0,144,152,152,136,235,215,175,163,107, +215,174,136,138,138, 66,223,190,125, 95,106, 52,154, 96, 74,169,161, 36, 77,119,119,247,180,139, 23, 47,166,132,133,133,233, 53, + 26, 13, 39, 35, 35,131,127,245,234, 85,139, 74,165,146, 42, 20, 10,190, 92, 46,231, 43,149, 74,158, 70,163,225,115, 56, 28,129, + 78,167,227, 95,184,112,129,107, 52, 26,157, 75,219, 79,133,199,233,232,209,163, 8, 11, 11,195,225,195,135,241,249,231,159,227, +183,223,126,131,191,191, 63, 14, 28, 56,128,105,211,166,225,233,211,167,240,240,240, 64,205,154, 53, 75, 61, 70, 0, 80,173, 90, +181,103, 15, 30, 60,168, 42, 16, 8, 10,231,117, 44,156, 47, 15, 89, 89, 89,120,254,252, 57, 94,189,122,133,106,213,170, 97,240, +224,193,207, 83, 82, 82,170,149, 85,249, 42, 86,172,152, 21, 19, 19,227, 81,167, 78, 29,100,100,100,192,197,197, 5, 50,153, 12, + 46, 46, 46,175,255, 15, 10, 10,194,212,169, 83,225,227,227,147,169,211,233,188,203, 50, 65, 97, 97, 97,103, 46, 92,184,224,225, +236,236,140,244,244,116, 40,149, 74,240,120, 60, 56, 58, 58,194,195,195,227,181,145,143,139,139, 67, 68, 68, 68,118,124,124,124, +231,114, 68,224, 56,222,222,222, 79,162,163,163,131, 41,165, 72, 78, 78,198,211,167, 79, 49, 97,194,132, 56,189, 94, 31,250, 79, +154,179,175, 72,222,149, 96,248, 71, 99, 5,189,123, 54, 51, 62,142, 57, 78, 68,182,167,168, 87,219, 89, 1, 0,247, 30, 42,101, + 6, 78, 8,106,212,234, 70,127,249,245,119,225,207,219, 55,241, 97,131, 55, 8,158, 62,138,165,223,148,164,221,185,157,223,232, +207, 62, 27, 89,187, 77,139,214, 28,149, 70,227,181,126,253,202,250,241,241,143,189, 0, 32, 40,168, 70,230,248,241, 83, 34,157, + 36,146,204,203,215,175,216, 86,173,218,250,240,204,197,212,205,118, 28,155,160,224,224,224, 27, 71,143, 30,245,240,242,242,130, + 76, 38,131, 70,163,129,201,100,194,163, 71,143,244,251,246,237, 51, 59, 59, 59, 59,165,167,167, 67, 46,151,131, 16,130,163, 71, +143, 38, 83, 74, 3,223,212, 42,204,209, 2,128, 9, 31,212,224,215,108, 23,236, 42, 16, 89,196, 98,126,172, 47,136, 85, 68,168, +212,251,212,153,123,117, 78,157,187, 61,164,119,159,207, 61, 91,182,238,141,185,115,250,153, 83, 83,147,195, 77,104,249,164,184, + 28,173, 26,193,164, 93,175,190,189,251,127,253,245,124,204,159,187, 0,199,143, 30, 81, 72, 37, 28,131,179, 11, 95,214,170, 73, +115,253,212,137, 61, 95,170,213,169,254, 95, 47,221, 55, 56,162,231,212,138, 45, 90,246,194,245,107, 71,176,115,219,130,187, 68, + 76, 89, 51,226, 27, 44, 32,196,213, 37, 40,104,220,228,184, 56,193,253,249,243,213,150,212,212,188, 6, 83,166,100, 23,183,110, +202,185,115, 18,161,159,159,179,107,143, 30,110,171, 3, 3,169, 57, 51,115, 99,113, 57, 70,197,105,158,151, 74, 93,246,158, 58, +213,158,242,249,173,167,127,249,165,184, 91,183,110, 80, 42,149, 56,116,232, 16, 54,110,216, 96,240,245,245,125,224,247,240, 97, + 84,109,165,114,142,189,154, 13,166, 76,201,182, 90,173,164,255,180,105, 29, 99, 18, 19,219,165,103,102, 86, 2, 0, 95, 55,183, +151, 13,130,130,238,110, 61,126,252,233,218,202,149,109,246,150,243,167,211,167,189, 15, 38, 37,141,118,115,115, 19,103,100,102, +242, 68, 66, 97, 78,147,154, 53, 15,252, 56,123,246,101, 75,116,180,192,161, 98, 69,103, 89,183,110,229,222,246, 6, 83,166,100, +231,170, 84,188,201, 11, 23, 54,127,145,145, 81, 73,109, 48, 84,147,171, 84, 62, 86,179,153,227,236,232,152, 83, 37, 36, 36, 83, +119,245,106, 90, 21,173,246,211,159, 40,205,252,171,142,117,113, 94,228,111, 20,209,122,179,215,225,159,230, 58,188, 28, 17, 17, + 65,138,113,102,118, 69,179,248,124,254, 31,154,169, 74, 65, 64, 8, 65,100,100, 36,220,221,221,225,227,227, 3,145,232,143,147, + 15,102,101,101,225,183,223,126,195,227,199,143, 81,183,110, 93, 0,249, 79,212, 37, 33, 18,137, 62, 91,186,116,169,139,209,104, +196,221,187,119,209,160, 65, 3,136, 68, 34, 8, 4,130, 63,152,192,204,204, 76,212,170, 85, 11,211,167, 79,151, 45, 94,188,248, + 51,148, 50, 71, 29,143,199,155, 52,102,204, 24,175,194, 8,214,203,151, 47, 81,191,126,253,215,159,123,122,122,226,222,189,123, +104,208,160, 1, 42, 86,172,136,126,253,250,121,237,220,185,115, 18,128,239, 75,210, 20, 10,133,156,176,176,176,134, 5, 17, 35, +112, 56,156, 88,103,103,103, 79,111,111,111,137,179,179,243,159,182,113,219,182,109,114, 14,135, 99, 46,107,135,114, 56, 28,164, +167,167,163,118,237,218, 80, 40, 20, 0, 0,141, 70,131,106,213,170, 65,169, 84,190, 54,173,126,126,126,208,233, 74, 79,253,170, + 91,183,238,252,208,208,208, 78,109,218,180, 17,241,249,124,220,191,127, 31,225,225,225,216,183,111, 31, 2, 2, 2,224,232,232, +136,184,184, 56,132,133,133,225,202,149, 43,240,244,244, 68,173, 90,181, 68,245,235,215,191,150,155,155,123, 41, 41, 41,105,126, + 41,229,228, 72,165, 82, 92,185,114, 5, 91,183,110, 69, 98, 98, 34, 82, 83, 83,225,228,228,132,122,245,234,161,102,205,154,104, +214,172, 25,226,226,226, 64,202,168, 76,132, 16,159,224,224,224,227,183,111,223,246,160,148, 98,231,206,157, 80,171,213, 48, 26, +141,224,112, 56,112,112,112,128,171,171, 43,218,181,107, 7, 79, 79, 79, 4, 7, 7, 99,255,254,253, 30, 31,124,240,193,201,130, +136, 84,122, 89,251,213,213,213,245,211,121,243,230,249,123,121,121, 33, 41, 41, 9, 10,133, 2,222,222,222,104,211,166, 77,133, +243,231,207,127, 10, 96,229, 63,229, 70, 86,152,248, 78, 8, 33,103,207,108,233, 19, 92, 37, 47,172,110,136,163,255,225,227,222, +254,251,142,103,214, 2,128,218, 53,188, 99,250,116,115,124,121, 63,230,248,203,179,103,142,220,125, 28,139,195,246, 52,109, 43, +180,134, 3,231,206,223,234, 18, 94,183,190,109,233,119,211, 34, 38, 78, 24, 45,242,242, 30,133,140,228, 35, 56,127, 49, 50, 96, +218,231, 99, 60,191, 95,254,211,169,115,231,111,113, 20, 90,195, 28,123,202, 91,189,122,192,218,237, 63, 54,243, 80,101, 31,196, +179, 39, 66,136,157,106, 35, 40,168, 58,148, 74, 37, 28, 28, 28, 28, 6, 15, 30,108,157, 57,115,166,214,217,217,217,145, 16,130, + 75,151, 46,101, 2,232, 92,150,174,222,203,149, 90, 77,102, 11, 21,114,109,148, 56,233,136, 53, 87,248,240, 81, 2, 58,117,104, +155,209,162,113,237,197, 51,191, 94, 62, 43,184,122,184,231,200,209, 11,248, 11,231, 15,217, 0,130,150,197,233, 60,142,163, 23, +107, 86, 37, 98, 0, 17, 95,127, 51, 31,241,241,113,174, 99, 71,200, 23,240, 68, 98,191,208,192,230, 78, 27,182, 94,234, 82,173, + 90,229, 74, 83, 39,245, 59,177,226,135, 21, 17, 69, 35, 91,219,183,205,251,149, 16,210,158,254,149,227,238,252,253,168, 51,236, +248,113,168,147,147,205,185,215,174,233,219,255,240, 67,182,127,231,206, 43,141, 38,147, 71,225,165,130, 67, 8, 72, 97,234,132, +205, 70,120,211,167,115, 40,143, 7,179,171,235,136, 25, 64,245,178, 52, 63, 79, 75,235, 51,100,244,232,136, 95, 79,159, 70,229, +202,149, 95,223,207, 92, 92, 92, 48,109,218, 52, 76,153, 50, 69,116,239,222,189, 70, 7, 15, 30,108,244,253,178,101,222, 51,128, + 62,246,148,243,236,205,155,174, 31,127,253,245,236,186, 13, 26, 4,236,216,189, 91, 84,181,106, 85, 0,192,243,231,207,131,191, + 91,178, 36,176,118, 88, 88,198,226,207, 62,219, 30, 51,115,102, 45, 0,215, 74,211, 76,191,122,213,120, 48, 41,105,244,197, 75, +151, 92,106,215,174, 13, 0,120,250,244,169,215,234,213,171,199,212,234,215,111,232,215,227,199,207,233,166,215,203,157,179,178, + 68,221,214,174,229,237,237,223,191, 76,205,194,114, 2, 64,155,145, 35, 63,107,217,182,109,205, 62,163, 71,187, 5, 4, 4, 16, +169, 84, 10,147,201,132,212,212, 84,215,152,152,152,170,199, 85, 42,229, 47, 55,111,238,252,169, 96,178,248,191,136, 98,189,200, +223, 41,146, 85,172,167, 40,248,219,230,196,137, 19, 20, 64,155,136,136,136, 43,133, 55,112,171,213,106,151,201,226,241,120, 40, + 72, 22,182,183, 64,200,206,206, 70,118,118,246,235,166,163,204,204, 76, 92,188,120, 17,113,113,113,224,243,249, 16, 8, 4, 48, +153,202,158,131, 86, 34,145,116,232,208,161, 3,239,230,205,155, 8, 10, 10,130, 88, 44,126, 93,174,194, 69, 32, 16,192,215,215, + 23, 74,165, 18,237,219,183,231,175, 89,179,166, 67,105, 70, 75, 38,147,117, 29, 48, 96,128,176,240,181, 90,173, 6,151,203,125, +109, 90,212,106, 53,114,115,115, 33,151,203,161,215,235,209,180,105, 83,225,241,227,199,187,150,102,180,138,162,213,106,213,153, +153,153, 46, 45, 91,182,116,221,190,125,251,211,166, 77,155,134,252,161,166, 93,190,172,215,235,245,124, 14,135, 99,215, 60,122, +187,118,237,122,189,239, 95,189,122,133, 13, 27, 54,188,254, 44, 46, 46, 14,107,214,172,121, 61, 21, 64,105,199, 40, 52, 52,244, +131,157, 59,119, 54,216,177, 99, 71, 30,151,203,197,211,167, 79,177,123,247,110, 80, 74,225,233,233, 9,173, 86,139,140,140, 12, + 92,186,116, 9, 22,139, 5, 82,169, 20, 21, 42, 84,112,152, 52,105, 82,139, 5, 11, 22,240, 1,148,104,180,172, 86,171,149,203, +229, 34, 48, 48, 16,115,231,206,133, 94,175,135, 64,144,239, 47,149, 74, 37,228,114, 57,162,162,162,144,148,148,132,178,110, 50, + 14, 14, 14,253,118,236,216,225, 37, 20, 10,161,211,233,160, 82,169,240,242,229, 75,188,120,241, 66,159,153,153,105,113,114,114, +226, 4, 6, 6,114, 68, 34,145,168, 87,175, 94,164,208,112,118,235,214,205,125,231,206,157, 3,203, 50, 73,132, 16,207, 26, 53, +106,204, 26, 51,102,140, 67,209, 58,155,158,158,142, 62,125,250, 56,254,254,251,239, 51, 9, 33,187, 41,165, 89,255,176,144, 55, +149,203,107,222,185,123,254,105,216,225,227,222,254, 47, 82,172,205,167,125,177,156, 7, 0,155, 54,126,219,252,240,241, 87,191, +133, 86,206,120,121,240,151,234,119, 92, 92, 30,209,178, 34,130,237, 90,251,118,247,118,119, 25,208,167, 71, 15,186,126,253,202, +250, 19, 39,140, 22, 5, 86,159, 6, 0,168,192,247, 66,123,203, 55, 68,171,123,238,176,126,253,202,250,125,122,244,141, 74, 76, + 76,218,216,190,141,223,254,139, 87,210,142,149, 22, 49,244,114,119,168,224, 40,210,160, 66, 80, 77,132,212,144,224,222,253,167, + 56,116,224, 6,106,212,106, 2,131,193, 0,139,197, 34,233,222,189,187,118,223,190,125,250,216,216, 88,149, 78,167,107, 77, 41, +141, 45,107,251, 83, 82, 30,217, 66,124,154,152, 4, 98,145, 69,165, 16,104,103,204, 57,216,191,126,227, 78, 13, 92,125, 43,240, + 61, 37,182, 99, 31,116,108,180,123,235,230,185, 83,230,204,219,141,134,141, 58, 53,125,252,244, 90, 77, 0, 15,138, 53,175,207, +233,241,218,193,196, 18,255,236, 89,196,139,164,164,148,234,222, 62,198,231,114,106,254,116,198, 79, 29, 91,182,238, 87,167,106, +141, 86,194,199,143,174,144,185,211, 7,238,249,122,233,138,193,133,102,235,194,185, 61,173, 71,140,184, 33, 4, 96, 96,254,170, +224,233, 92, 36,170, 40, 13, 12,228, 37,110,223,174, 11,234,222, 61, 15, 0,140, 38,147, 71, 98, 82,146,204,209,209, 17,148, 82, +152,205,230, 63,228, 16, 23,230, 13,215, 14, 9,241,182, 71, 51,241,171,175,234, 76,159, 62, 29,233,233,233,176, 88, 44,224,243, +249,111, 94,179,161,209,104, 48, 98,196, 8,172, 93,182,172,137, 61,154, 86,171,149,124,252,245,215,179,191,156, 61,187,234,184, +113,227, 56, 69,175,189,110,110,110, 56,120,232,144,112,221,186,117, 21,103,173, 93, 59, 98,136, 72, 20, 95,150,102,118,181,106, +112,203,200, 16, 23,154, 44, 0, 8, 9, 9,193,134, 13, 27, 68,163, 70,141, 18,118,239,222,125,249,189,186,117, 87,175,108,209, +226,153,123,245,234,206, 66,145,168,162,189,251, 19, 0, 84,122,125,237,149,171, 87,187,222,186,117, 11, 25, 25, 25, 72, 79, 79, + 47, 60,151,209,176, 97, 67, 50,108,216, 48, 89, 21,127,255, 70,127,241,225,254,147, 23,249, 27, 69,180,198, 22,115, 77,253, 79, +142, 86,193, 6,145,130, 13, 36, 69,110,142,127, 48, 44,101, 25,173,183, 65, 46,151, 67, 46,151, 99,243,230,205, 16, 8, 4,175, +111,190, 0, 96, 52, 26,237, 49, 45, 97,126,126,126, 80, 40, 20,168, 94,189,250, 31, 34, 89, 2,129, 0, 60, 30, 15, 2,129, 0, + 34,145, 8, 6,131, 1, 1, 1, 1,208,106,181, 97,165,105,234,116,186,122,110,110,110,175,111,176, 6,131,225,181,201, 42, 44, +175,209,104, 68, 94, 94, 30,212,106, 53, 84, 42, 21, 52, 26, 77,184, 61,219,107,179,217,240,240,225,195,231, 33, 33, 33,245,184, + 92, 46,164, 82,169, 68,163,209,188,206, 45,202,205,205,197,207, 63,255,172,249,240,195, 15, 61,142, 30, 61,170,181,227,224,226, +147, 79, 62,129, 72, 36,130, 86,171,197,250,245,235, 49,121,242,100, 8, 4, 2,168, 84, 42,108,216,176, 1, 83,167, 78, 5,143, +199,131,209,104,196,234,213,171, 75,142,108, 60,122,148,120,243,230,205,240,250,245,235,187,254,242,203, 47, 89, 29, 59,118,244, +236,220,185, 51,196, 98, 49,116, 58, 29,204,102, 51,154, 52,105,130,208,208, 80,100,102,102,226,212,169, 83,217,193,193,193, 30, +183,110,221,178,165,167,167,191, 40,235, 38, 94, 36, 98, 8,171,213,138,140,140, 12,200,229,114,100,101,101, 33, 53, 53, 21, 41, + 41, 41,224,241,120, 40,235, 97,222,221,221,189,111,237,218,181,185, 0, 32, 22,139, 81,175, 94, 61,204,158, 61,219,162,211,233, + 6, 0, 56, 85,176,218, 7, 63,253,244,211, 47,215,175, 95,231,249,249,249,225,201,147, 39,240,244,244,228, 57, 56, 56,148,105, +180,124,124,124,182, 29, 59,118,204,173,208, 92, 23,238,103,173, 54,255,112,244,233,211,199,109,199,142, 29,219, 0,116,253,167, +221,212, 92,196, 16,212,171,237,172,216,119, 60,179,214,180, 47,150,243, 66,107,231, 63,188,142, 29, 7,222,247,203, 62,175, 53, +180,167,243, 9, 23,177, 82, 80,150,206, 7, 29,252,215,245,232,209,145, 51,120, 80,183, 56,129,192, 37,104,227,166, 5, 94, 94, +222,163,138,132, 56,157,225,238,225,140,160, 64,225,255,177,119,213,225, 85, 28,111,247,204,238,213,220,184,123, 66,144, 36, 16, +130, 75,139, 83,156, 64,113, 43, 45, 80,138,150, 22, 40, 20, 41, 90, 42, 72,161, 72,113,104,139,187,150,224,148, 32,197, 61, 9, + 16, 8,144,132,184,235,245,221,157,239,143,200, 47,164,145,155, 64,141,111,207,243,220,231,222,221,187,123,118,102,103,118,231, +204, 59,239,188, 67,246, 7, 63,116,154, 49,243, 27,221,142,109, 63, 62,219,181,251, 88, 87,185,244, 76,103, 0,227,202,226,142, +136,204, 60,170,214, 41,235,100,167,221, 39,118,206, 45,209,176,129, 63,156, 28, 51,176,233,215, 61,240,169,222, 20, 58,157, 14, + 86, 86, 86, 42,158,231, 13, 44,203,238, 48, 69,100, 1,192,185,115,153, 66,221,186,153,122, 54, 71,224, 62,253,124,105,159, 78, +221,222, 15,120,239,189,142,194,233, 51,167, 13, 45, 27, 25, 18,186,117,105,152,116,242,204,154, 39, 9,241,207,125,235,214,107, +133,240,176,243, 93, 1, 18, 10,148, 94, 97, 67,159,208,147, 53,107,146,243,123,246,140, 22, 52,194, 29,179,111,191,123,208, 45, + 40,104, 88, 96,155,214,109,132, 51,103,127,215,203,145,250,208,170, 85,139,184, 79, 63,233,118,232,231, 29, 43, 59,159, 60,241, +107,173,172,236,232, 99,191,254, 74, 69,145, 85,188,147,198,113,206, 18,133,130, 73, 57,127,158,171, 55,114,164,174,240,121, 84, +169, 84, 56,114,228, 8,228,114,121,209, 71, 38,147, 21,253,118,118,118, 46,156,124,101, 18, 39, 0, 36, 36, 36, 32, 49, 49, 17, +214,214,214,112,116,116, 68, 98, 98, 34,174, 92,185,130,136,136, 8, 72,165, 82,116,237,218, 21, 76, 25,190,205, 37, 57, 7, 76, +157,218,169, 78,189,122, 94, 37, 69, 22, 0, 24, 12, 6,164,167,167,163, 87,175, 94,204,137, 19, 39, 92, 78,198,196,188, 63, 7, +216, 81, 30,103,163,160,160,180,164,253,251, 75,189,118,227,198,141,201, 31,127,252,161,232,218,165,203,228, 41,223,125,183,230, +167,109,219, 94,242, 28,231, 82,153,188, 51, 12,195, 16, 66,224,233,233,137,244,244,116,228,230,230,143, 96, 91, 88, 88,192,214, +214, 22, 70,163, 17, 2,165,210,191,178,172,203,210, 34,255,145,142,234,198, 66,193, 85, 50, 50,188,164, 96, 92,180,240, 69,209, +174,120,195, 34, 8,130, 73, 34, 75, 42,149, 86,232,115,101,138,149,171, 36, 76, 17, 90,133,105, 85, 42,149, 69, 15, 90,113,129, + 85,152, 78,134, 97,192,178, 44, 76,177,200, 11,130,192,230,228,228,224,192,129, 3,104,219,182,109,209,176, 84, 86, 86, 22, 50, + 51, 51,145,149,149, 5,173, 86,139, 23, 47, 94,224,220,185,115,168, 85,171, 22, 96, 98,240,215,103,207,158,221,242,241,241,105, + 82,216,136,183,111,223,222, 99,203,150, 45,241,221,187,119,119,163,148, 98,246,236,217,169,239,188,243,142, 67,241, 70,190, 34, +176, 44,139, 43, 87,174,160, 86,173, 90,160,148, 66, 38,147,225,241,227,199,112,114,114,130, 32, 8,144, 72, 36, 72, 73, 73,129, +165,101,249, 49, 18, 67, 67, 67, 71,124,252,241,199,241,214,214,214,245,211,210,210, 18, 20, 10, 69,235,139, 23, 47,122, 26, 12, + 6, 88, 89, 89,193,202,202, 10,199,143, 31,135,141,141, 13, 38, 77,154, 20,163,209,104,174,152,155,155, 59,107, 52,154,251,137, +137,137,179, 43, 83,222, 28,199, 33, 47, 47, 15, 25, 25, 25, 72, 79, 79, 71,118,118, 54,180, 90,109,133,105, 44, 13,173, 91,183, +198,177, 99,199,216,133, 11, 23,254,252,236, 89,126,199,176, 70,141, 26,152, 52,105, 18,235,238,238,142, 23, 47, 94,224,214,173, + 91, 48, 24, 12,160,148,150,251,240, 74,165,210,246, 83,166, 76,105,229,229,229, 69, 12, 6, 3, 4, 65,128, 78,167, 67,225,239, +152,152, 24,212,169, 83,135,241,246,246,126,151, 16,210,222,148,137, 21, 34,242,145, 20,115, 24,238, 82, 39,128,177, 2,213, 28, + 70, 90,106,213,150,141, 76, 78, 78,254,110,218,156, 63, 70,254,180,196,224, 28,155, 0,248, 7,246,134,111, 64, 7,140,248,144, +195,194, 31, 14,192,203,219, 31,209,209,209,104,223,190,189, 44, 62, 62,254, 99, 0, 83, 77,229, 62,115,230, 26,127,250,248,137, +254, 3, 6, 13,107,210,177, 99,119,238,212,169,227, 8,189,127, 42,236,227, 65,253,146,169,144, 75,236,108,204,238, 60,126,116, +211,183,126,195,118,208,115,124,107, 96,254, 18, 0,101,190, 84, 34, 35,169,254,235,175,191,102,130, 15,255,250,225,144,161,195, + 27,116,232,208,217,120,234,204,111,184,117,245,204,189,101, 75, 70, 93, 88,184,114,111,251, 78, 93,251,213,117,116,190,114, 60, +208, 79,247,137,167,189,117,164, 88, 83, 74,135, 68,169, 20, 80,240, 94,100, 8, 1,165,244, 21,145, 85, 82,104, 49, 12, 83,161, + 1,160, 56,103,241,182,168,176, 67,189, 97,195, 6, 40, 20, 10,200,229,114, 72,165,210, 10,221, 47,138,115,134,189,120,241,222, +214, 29, 59, 20,165,137,172,180,180, 52,164,165,165, 33, 55, 55, 23,131, 7, 15,150,125,125,243,102,227,138, 56,189, 92, 93,117, +230,102,102, 73,225,225,225,110, 1, 1, 1,175,164, 55, 59, 59, 27,102,102,102,216,177,115,167,172, 71, 80,208,248, 14,199,143, + 47, 3,144, 89,217,188, 19, 66,224,228,228, 4, 91, 91, 91, 16, 66,192,113, 28, 18, 19, 19, 17, 22, 22,134,155, 55,111,130, 37, +132,251, 43,203,184, 52, 45,242, 95,179,106,149, 20, 89,197, 45, 90,164, 44,235,139,169, 66,139,101,217, 42, 91,181,202,130, 41, + 67,135, 42,149,234, 65,124,124,124, 75,119,119,119,112, 28, 87, 36,180, 74, 14, 29, 22, 90, 63,238,222,189, 11,149, 74,245,160, + 34, 78, 74,233,187,205,154, 53,195,193,131, 7,113,254,252,121, 60,127,254, 28,106,181, 26, 58,157, 14, 26,141, 6, 97, 97, 97, + 16, 4, 1,129,129,129, 48, 55, 55,175,144, 19, 0,242,242,242, 18,164, 82,169,191,153,153, 89,209, 62, 87, 87, 87,164,165,165, + 9, 70,163, 17, 91,183,110,205,118,113,113, 49, 55, 51, 51, 51, 89,184, 18, 66,144,156,156, 12, 15, 15,143, 34, 31,173,156,156, + 28, 56, 57, 57, 21, 10, 11,232,116, 58, 88, 90, 90, 86, 56,116, 72, 41,213, 2,152, 82,140,187,233,128, 1, 3,118,237,217,179, +167,250,217,179,103,113,253,250,117, 56, 58, 58,226,251,239,191,127, 30, 21, 21, 53,132, 82,122,243, 47,168,168, 21, 30,147,150, +150,118,224,193,131, 7,239, 54,107,214,172,232, 45,209,190,125,123,210,190,125,123,135,226,166,254,148,148, 20,220,184,113, 3, +103,207,158, 5, 33, 4, 79,158, 60,225, 53, 26,205,174,114,174, 45,243,246,246,222, 50,107,214, 44, 11,142,227,138,234,182,153, +153, 25,148, 74, 37,100, 50, 25, 88,150, 69, 84, 84, 20,122,245,234,101,189,122,245,234, 95, 9, 33, 53, 41,165, 6,188, 37,200, +212,192,112, 55, 52,219, 58,176,142,115,216,198, 13, 11, 91,142, 30,131,194,161, 67, 46,176,142, 83,216,221,208, 36,235, 38, 78, + 48,216,200,203,231, 57,113,246,229,167,122,227,137,158, 39, 78,134, 12,252,114,242, 36,105,141, 26,117,146,207,254,126,219,171, + 3,247, 13,177,119,176, 66, 90,106, 54,162, 98,146,240, 44, 90, 79,107,212,168,147,124,235,198, 3,197, 15,203, 87,248,230,169, +181,123,127,191,144,240, 91, 5,157, 50, 45, 33,164,247,178, 85,138, 11,195, 62,110, 42, 55, 51,115, 67,122,234, 3,120,121, 57, +162, 87,143,250,248,101,219, 21, 88, 91,219,193,217,217, 25, 12,195,152,155,154,247,212,212, 84,114, 96,247,165,145, 31, 13, 31, +245, 78,151,206, 65,220,201, 83,193,146,243,167,143, 94,249,117,227, 87,135, 40,155,167, 34, 52,199,172,154,143,203,253,200,167, +119,135,188,215,113, 48,204,100,150,181,128,218,165, 86,216,162, 9, 6, 20, 49, 12, 3,229, 71,195, 71,183,232,210,229,125,238, +212,169,195, 56,117,124,219,181,121,243,170, 29,127, 30,183, 83,118,245,102,172,178,119,255,113, 25,199, 78, 60,212,247,235,233, + 19,225,102,222, 80, 3, 17,175,118, 36, 37,146, 36, 78,167,243,244,232,210,133, 85, 71, 71, 75, 45,156,157, 57, 0, 48, 26,141, + 21, 10, 45, 0,130, 41,156,166,166, 69,173, 86, 67, 0, 56, 83, 56, 19,147,147,171, 21,116,194,139, 96, 52, 26,139, 68, 86, 90, + 90, 26, 50, 51, 51, 97,110,110,142, 20,157,206,217, 20,206,206,205,155,111,253,122,254,252,169,251, 15, 28,144, 21, 23, 89,133, + 31,169, 84,138,197, 75,150,200, 62,255,242,203,113,227, 37,146,137,149,185,159,133,157,118,150,101, 33,145, 72, 16, 29, 29,141, +152,152, 24, 68, 71, 71, 35, 58, 58, 26,102,102,102,160,101,220,207, 55,104,209, 34,255,213,122, 90, 56,116, 88,124, 8,209,164, +240, 14,149,113,134, 55, 85, 24,240, 60,255, 70,133, 86, 94, 94,222,217,115,231,206, 53,239,221,187,183,228,218,181,107,112,113, +113, 41, 18, 90,133,223,133,195, 81, 42,149, 10,135, 14, 29, 50,228,229,229,157,173,224, 97, 58,119,252,248,241, 38,115,231,206, +149,142, 24, 49, 2,225,225,225, 24, 51,102, 12, 50, 51, 51,145,157,157,141,180,180, 52,168,213,106, 52,111,222, 28, 74,165, 18, +247,239,223, 55,170,213,234,115, 21, 52, 14, 52, 57, 57, 57,215,209,209,209,181,228,127,253,251,247,119, 94,187,118,173,250,209, +163, 71,198,150, 45, 91, 90,153, 42, 56, 10,177,123,247,238, 34, 75, 93, 68, 68, 4,214,174, 93, 91,228,147,117,251,246,109, 44, + 93,186,180, 40,246, 89, 37,173,140, 55,235,214,173,203, 25,141, 70,212,170, 85, 11,238,238,238,208,106,181, 88,177, 98, 5,247, + 87,136, 44, 83,161,213,106,247, 15, 27, 54,108,250,157, 59,119, 92, 37, 18, 73,190, 73,187, 32,127, 6,131, 1, 79,159, 62, 69, + 88, 88, 24, 30, 61,122,132,244,244,244,162,142,192,221,187,119, 51,140, 70,227,222,178,120, 29, 29, 29,103,255,242,203, 47, 46, + 42,149,234,149,250, 92,104, 13, 45,180,146,166,164,164,192,198,198, 6, 29, 58,116,112, 58,119,238,220,108, 0,115,223,134, 6, +141, 16, 66,222,107,203, 54,253,252,211,222,232,219, 67,245,242,224,177,184, 63,150,254, 48,165,192, 25,222, 41,172,111, 15,247, +151,247, 30,219,160,127,159,195, 77,127,191, 64, 98,203,243,165, 43,240,177, 58,210,188,185,221,249,131, 71,143,254, 58,115,218, +228,219, 83,167,140,114, 84,107, 34,149, 53,188,229, 4, 0,158, 69,235,233,253,112, 65,187,116,217,228,219, 11,151,172,102,146, +210, 50,199, 92,191, 94,118,120,131,226,226,165,174, 31,148, 53,106,183,141,247,245,107,229,115,237,202, 14, 88,168, 52,240,175, +221, 20, 93, 58,191,139,243, 33,119,145,152,162, 69, 66, 66, 2,116, 58, 93,185,225, 18, 30,221, 63,244, 33, 37,212,139, 80, 18, + 67, 24,170,252,112,216, 39,173,131,130,222,167,199,142, 29,229, 14, 31,218,113,121,239,246, 85,251, 25,153, 84,162,209, 91,235, + 9,209,102,129, 9, 13,207,205,203,239,208, 72, 21,178,178,205,175, 5,129, 93, 3,234,214,118,249,112,216, 24,235,238,221,122, +209,227,199, 15, 11,123,247,108, 61,191,119,115,189, 29, 2,147, 45, 75,120,169, 86,100,101, 27,179, 40,145,219,228,102, 11,234, +164,103, 53,181,110, 65,253,223, 26,209,254,198, 58,220, 58, 93,108,238,203,151,174,118,109,219, 42,158,206,159,175,114,110,222, + 92, 75, 10,124,136,203, 19, 90, 44,203, 2, 12, 35,152,194,105,106, 90, 52, 26, 13, 4,192, 88, 21, 78,142,227, 94, 17, 89,133, + 66,171,208,174, 97, 10,231,198,121,243,174,121,117,233,146, 30, 18, 18,226,220,174, 93, 59,146,147,147,131,156,156,156, 87,196, +150,155,155, 27, 9, 8, 12, 84,237, 62,127,190,198, 92, 19,239,167, 41,121,103, 24,230, 47, 23, 90,255,101,148,102,201,122,197, +162, 85, 22, 10, 45, 90,166, 8, 45, 19, 45, 90, 70,163,209, 8, 39, 39, 39,164,166,166,150,217,240, 51, 12, 3, 51, 51,179,194, + 49,226,114,103,222,233,116,186, 21, 83,167, 78,157,208,173, 91, 55, 7,127,127,127,164,164,164,192,217,217, 25, 74,165,178,200, +119,172,144,239,246,237,219,248,229,151, 95,178,117, 58,221,138, 10, 56,151, 47, 89,178,228,211,190,125,251,218,185,184,184,192, +214,214, 22,247,239,223,135,173,173, 45,178,179,179,241,248,241, 99, 88, 90, 90, 22,249,237, 28, 61,122, 52, 71,167,211, 45,175, + 64,188,209,139, 23, 47, 26, 44, 45, 45,239,167,164,164,176,233,233,233,146,140,140, 12, 73,118,118,182, 52, 43, 43, 75,122,242, +228, 73, 7,107,107,107,245,239,191,255,158,226,229,229,197, 62,127,254,156, 53, 26,141,140, 9,141, 35, 38, 78,156, 8,153, 76, + 6,157, 78,135, 21, 43, 86, 96,234,212,169, 69, 62, 89, 75,150, 44,193,172, 89,179,138,132,243,166, 77,155, 42, 91,121, 96, 48, + 24, 96, 52, 26, 97, 52, 26, 77, 18,191,175, 3, 83, 4, 59,165, 52,145, 16,210,163, 89,179,102,167,247,237,219,103, 95, 16,147, + 12, 73, 73, 73, 72, 74, 74, 66, 74, 74, 10,114,115,115,193,113, 28,220,221,221,145,148,148,132,195,135, 15,103,229,228,228,116, + 41,111,198, 33,203,178,195, 90,183,110, 45, 41,153,134,194, 94, 94,161,120, 87, 40, 20,136,143,143, 71,251,246,237,229, 33, 33, + 33,195,254,235, 66,171, 80,192,212,241,133,172,115,151,145,178, 58,117, 91,232,239,133, 29,123, 89,219, 39,233,229,208, 94, 86, +193, 0,112, 55, 52,201,250,222, 99, 27,212,169,219,131,118,238, 98,219, 36, 41,113, 99,189, 0, 63, 98, 40,111,185, 30, 0,176, + 86, 41, 6,116,234,216, 60,222,210,220,156, 89,186,108,211,137,117,235,150, 55,222, 31,252,191,240, 14, 75,151,229,135,119,232, +212,177,185,240,232,225,163, 1, 0, 54,155, 42, 94,122,244,232,121,231,151, 45,191,224, 81,216,239,110,211, 39,214,151,167, 39, + 25, 97,102,225,137, 38, 13,157,177,113,203, 3,220,187,119, 47, 81,175,215,183, 47,183, 46, 17,234, 21, 22, 30,234, 87,175,110, +128,203,135,195, 70, 91,245,232,209, 11,199,142, 29,193,246,173,155, 47,246, 27,220,247,231,184,140,108,214, 73,170,146,169,168, + 32,103,101,214, 18,153,194, 44, 89,175,207,159, 3, 33,149, 42,173,128, 1, 66, 57, 35,135, 24, 59,122,168,245,123, 29,123, 33, +248,248, 17,108,223,186,241,194,156,186,253, 55,251, 52,170, 67,154, 55,254, 97,156, 79,117, 31,239,188,220,164,108,134,200, 13, + 90,173, 96,249,195,214,168, 31,159,205, 26,246,236, 78,232,128,101,226,172,195, 87,112,127,123,247,238,205, 62,143,140,148, 57, +182,106,101, 22,127,254,188,170, 96, 37,146,114,133,150, 68, 34, 1, 45,123,168,235, 21, 78,178,109, 27, 3,160,220, 73, 88, 50, +153, 12,106,181, 26, 70,192, 96, 10,167,235,169, 83, 47, 35, 35, 35,125,237,236,236, 94, 17, 89,233,233,233, 69,191,181, 90, 45, +212,106, 53,204,204,204,194, 76,225, 76,186,120, 81,187,104,226,196,185, 67, 6, 15, 94,117,246,220, 57,165,189,189, 61,178,178, +178, 94, 17, 90,122,189, 30,239,117,232, 32, 91,114,231,206,135, 0,230,153,114, 63,157,219,183,175,208, 31,152,101, 89, 8,127, +241,208,225, 91,208, 89, 29, 93,154,240, 98, 42, 26,194, 49,117,214, 97,105, 13, 36, 33,164, 99,137, 93,179,154, 52,105,162,141, +136,136,128,151,151, 87,145, 88, 41,126, 77, 43, 43, 43,216,216,216,224,246,237,219,248,238,187,239, 52, 0,102,149,199, 73, 41, +205, 81,171,213,131, 58,117,234,164,145, 72, 36,168, 93,187,118, 81,252, 44, 65, 16, 32,151,203, 97,110,110,142, 59,119,238,160, +103,207,158,106,181, 90, 61,168,100, 12,173, 82, 56,179,212,106,245, 7,157, 59,119, 86,135,135,135,163,117,235,214,184,119,239, + 30,114,115,115,145,155,155,139, 23, 47, 94, 32, 32, 32, 0,106,181, 26,107,215,174,213,168,213,234, 15, 40,165, 89,229,113,230, +228,228,244,156, 58,117, 42,187,107,215, 46, 31,119,119,247,186, 77,155, 54,245,239,208,161, 67,205, 62,125,250,120,119,239,222, +221,213,215,215, 87,219,165, 75, 23,199,110,221,186, 57,170,213,106,233, 31,127,252,145, 96, 52, 26,187, 85,112, 63,139,196, 73, + 68, 68, 68,209, 80,161, 68, 34, 65,106,106,106, 81,228,254,194,151, 82,105, 66,184, 44,206,226, 98,187, 80, 96, 21, 10,174,138, +218,128, 50, 56, 43,108, 56,228,114,121,161,197,147, 86,196, 73, 41,189,251,240,225,195, 78,109,219,182,189, 59,114,228,200,156, +196,196, 68, 88, 90, 90,162, 70,141, 26,240,243,243,131,131,131, 3, 12, 6, 3, 14, 29, 58,148,119,248,240,225, 7, 89, 89, 89, +237, 75,198,208, 42,201,201, 48,204,139,210, 94,178,133,214,172, 66,161,165, 84, 42,225,238,238, 94,120,111, 95, 84,230,126, 86, +241,225,253,107, 57, 11, 4, 76,135,247,186, 84,239, 30,212,219,250,208,145, 43,242, 85,107, 14, 63,104,210, 17,155,236,171,101, + 31,181,175,150,125,180, 73, 71,108, 90,181,230,240,131, 67, 71,174,200,187, 7,245,182,238,240, 94,151,234,225, 97,143,252, 95, + 89,247,176,148,116, 42,149,202, 22,173, 91, 53,201, 8,185,124, 65, 88,184,100, 53,243, 94,251,126,119, 54,255,124,232,208,230, +159, 15, 29,122,175,125,191, 59, 11,151,172,102, 66, 46, 95, 16, 90,183,106,146,161, 84, 42, 91,152,146,247,177,163,135, 90, 7, +117,239,133, 99,199, 14,113,251,119,175, 93,178,231,192,147,182,159, 76,184,152, 20, 17,113,143, 38,199,158,130,148,137,198,195, +135, 15,179,244,122,125,251,210, 28,225, 75,227, 28, 51,106,104,113,145,117,201,222,165,245,166,135, 15,193,159, 57,243,155,241, +220,185, 59,154, 75,119,147,179,110,133,167,166,199,167,164, 63,207,206, 78,211, 11, 2, 15,158,231,217,175,191,206,119,216, 45, +171,140, 90,182,108,135,223,207,238,196,214, 45, 27,178, 4, 1,218,254,251,246,241, 3, 6,204,167,222,213,170,121,239,216,189, +147,244,120,191,183, 53, 5,132,158,125,123,217,236,218,179,139, 84,175, 85,189, 90,141, 26,249, 33,109,254,147,117,233, 47,224, +156, 71,105, 70,118,116,244,133,219,171, 87,235,156, 7, 13,178,147, 59, 59, 91,129,231, 73,225,251,189,172,143, 68, 34,121,197, + 2, 83, 30,167,187,131, 67,220,209,163, 71,225,231,231, 7,119,119,119, 20,247,145, 45, 12,200,109,111,111,143, 3, 7, 14,128, + 2,183, 76,225,108,228,227,115,123,241,162, 69,122, 65, 16,144,145,145,241, 39,107, 86, 70, 70, 6, 4, 65,192,241,224, 96,125, +118,110,238, 86, 83,243,222,158,101,115,135,180,105,179, 48, 40, 40,200, 16, 25, 25, 9, 65, 16, 80,220,178,149,156,156, 12, 11, + 11, 11,104,117, 58, 79, 66,136,202, 20,206,228,147, 39,205, 81,193,123,189,164, 69,235,175, 40,247,255,186,200, 42,190,160,116, +113,209, 85,174, 69,139,227, 56,120,122,122,190,178,164, 11,195, 48,175,124, 42, 51,227,144, 82,186,141, 16,114,170, 75,151, 46, +115,223,121,231,157,177,115,231,206,101,253,253,253,145,149,149, 5, 91, 91, 91, 56, 57, 57,225,241,227,199, 56,122,244, 40,159, +154,154,186, 30,192, 2, 83,166,208, 83, 74,207, 19, 66,122,212,175, 95,127,207,140, 25, 51,172, 59,119,238, 44,245,244,244, 4, +165, 20,119,238,220,193,193,131, 7, 13,155, 55,111,206, 46, 16, 89,231, 77, 76,235,105, 66, 72,191,110,221,186,237, 24, 54,108, +152, 37,207,243,210, 23, 47, 94, 64,167,211,193,104, 52, 34, 38, 38,198,112,236,216,177, 92,181, 90, 61,148, 82,122,218, 4,190, +219,132,144,128, 51,103,206, 12,251,227,143, 63,190, 27, 57,114,164,125,135, 14, 29,100, 28,199,225,242,229,203, 41,141, 26, 53, +114, 74, 78, 78, 54, 28, 56,112, 32, 77,171,213,206,226,121,222,164, 37,120, 8, 33,200,206,206,134,131,131, 3,116, 58, 29, 4, + 65,128, 94,175,135,133,133, 69,209,178, 73,148, 82, 84,198,185,190, 68, 29, 96, 13, 6, 3, 6, 15, 30, 12, 65, 16,176, 98,197, + 10,112, 28, 87,105, 50,107,107,235, 91,119,239,222,237,209,176, 97,195, 34,241, 82, 88,135, 20, 10, 5, 28, 28, 28, 96,111,111, +143, 99,199,142, 65, 42,149,222, 50,177,140,238, 1,104, 68, 8,105,241,224,193,131,143, 0, 52, 52, 24, 12,238, 60,207, 19,134, + 97, 18, 40,165,247,179,179,179,127, 54,117, 9,158,228,228,228,239,134, 15, 31,222,104,231,206,157, 22, 18,201,255, 30, 13,137, + 68, 2,133, 66,129,194,224,152,148, 82,232,245,122,204,158, 61, 59, 59, 47, 47,239,187,183,229, 69,209,164,105,115,108, 92,187, +210,226,220,239,167, 82, 30, 62,193,193,226, 33, 28,108,228,192,239, 23, 72,108, 82,226,198,122,241, 47, 95, 90, 52,105,218,220, + 36, 78,163,222,144,246,193,208, 47,188, 10,150,224,153,253,226, 69,212,134, 29,219,126,124, 6, 0, 63, 44, 95,225,155,148,150, + 57,230,209,195, 71, 3, 54,108,216,221,194,168, 55,164,153,194,249, 63,241,178, 35, 11, 20, 90, 74,233,117, 66,136, 79,207, 65, + 39,103,213,170,110,245,126,114,154, 38, 46, 55, 87,253, 25,165,244,153,169,121,111,213,178, 45,126, 63,189, 11,219,183,238,200, +166, 2,171,117,112,112,160, 0,240,240,161, 3,125,248, 48,147,254,207,175,216, 38, 79, 74,239, 45,248,226,179, 14, 95,100,101, +167, 47, 95,190,166,252,192,181,245, 27,188,131,250, 13,222,193,132,207,190,178, 14,168, 91,219, 11, 0,246,237,163,124,160, 47, +249,109,238,156,249,239, 47, 88, 48, 31,217, 57, 58, 44, 88,144,191, 92,207,227,208,240,224,200, 72,170, 23,155,173, 87, 49,151, +227,174,227,139, 47,124,213,233,233,142,173,166, 79,119,144,124,249, 37, 83,158, 51,124,241,231,215, 20,206,155,247,239, 7,143, +249,228,147,184,121,115,231,118, 89,191, 97,131, 89,189,122,245,144,152,152,136,218,181,107,195,221,221, 29,103,206,156,193,129, +189,123,243, 50,115,114,102, 1, 88,103, 10,231,182,227,199, 31,251,215,173,155,186, 97,195, 6,183,160,160, 32,146,151,151,135, +172,172, 44,100,101,101, 65,167,211,161, 32, 32, 52,141,120,242,228,161,209,104, 92,111,106,222,249,148, 20,229,130,230,205, 99, +101,130,176,184, 95,223,190, 83, 23,124,243,141,162,122,245,234, 68,167,211, 21, 89,181, 12, 6, 3, 44, 44, 44, 12,122,189,222, + 30,128,218, 20, 78,197,230,205, 92, 74, 74, 10, 28, 29, 29,139,194, 53, 21,143, 75,152,147,147, 3, 74,169, 24, 76,183, 42, 34, +172,172,182,220,206,206,238,150, 68, 34,241, 40,110,221, 42,109,237,188,226,251,140, 70, 99,108, 74, 74, 74,147,226,138,151, 82, +122,182, 12,129, 80, 3,192,247,239,189,247, 94,191, 41, 83,166,144,144,144, 16, 28, 62,124,152, 62,123,246,108, 63,128, 89,101, +189, 36, 43,224,180, 84, 40, 20,147,204,205,205, 59, 22,134,112, 80,169, 84, 15,242,242,242,206,234,116,186, 21,101, 69,131,175, +128,211, 74,161, 80, 76, 52, 55, 55,239,148,147,147,211, 16, 0, 44, 45, 45,239,230,229,229,157,209,233,116, 43,203, 90,168,186, + 2, 78, 51,107,107,235,239, 28, 28, 28, 62,248,242,203, 47,237, 47, 94,188,152,240,251,239,191,203, 50, 51, 51,119,234,245,250, + 50, 23,149, 46,141,211,222,222,254, 22,203,178, 30,127, 69, 25, 1, 64,131, 6, 13,142,245,236,217, 51,104,232,208,161, 48, 26, +141, 88,183,110, 29,206,156, 57, 19,252,228,201,147, 30,229,245, 70, 75,114, 18, 66, 28, 60, 60, 60, 66,198,142, 29,235, 61,120, +240, 96,149,173,173, 45, 36, 18, 9,242,242,242,240,244,233, 83,220,185,115,135, 30, 57,114, 36,247,246,237,219,177,106,181,186, + 29,165, 52,213,212,251,249, 58,189,230,146,156, 82,169,180,173,167,167,231,238,121,243,230, 89,118,234,212,201,204,222,222, 30, + 44,203,194,104, 52, 34, 33, 33, 1,161,161,161, 56,117,234, 84,222,254,253,251,243,210,210,210, 6, 83, 74, 47,252, 19,233,124, +147,156, 1,126,100, 78,137,133,162,203,140,246, 94,222,177,166,164,179, 67, 59,183, 94, 3,250,117,235, 10, 0,251, 14,156, 56, +121, 46, 36,254, 72, 85,211, 89, 81, 90, 77,225,172,227,203,206, 11, 11, 15,125, 37,160,101,221,128,192,136, 58,245,250,126,107, + 10, 87, 97,100,248,146,121, 47, 22,109,191,184, 77,247,149, 97,214,194,133,167,191,154, 53, 19,223,127,183, 16, 71,246, 29, 10, + 14,143,164,199,254,203,117,233,175,228, 44, 92, 4, 89,229,234,218,102,133, 32,204,188, 23, 26,106, 81,188,195, 86,104,121, 46, +222,169,116,115,115, 75,142,143,143,119, 54,133,179,199, 79, 63, 25,212,230,230,138,153,139, 23,183,205,213,106,219, 46, 88,176, + 64,114,243,230, 77,172, 93,189,154,211,198,198,238, 72, 1, 38,150, 54, 26, 82, 30,167,247,196,137,202,105,107,215,142,168, 81, +171,150,211, 71, 31,125, 36,149, 74,165,200,203,203,195,203,151, 47,113,250,212, 41,125,248,195,135,225,217,217,217,239, 83, 74, +227, 77,229,236,241,211, 79, 6,155, 26, 53,160,114,116,164,231,206,159,183, 30, 51,105,210,216,106, 62, 62,214, 93,186,118,149, + 90, 89, 89, 33, 35, 35, 3, 47, 94,188,192,161, 67,135,146,115,115,115,221, 40,165,188, 41,156, 59,254,248,163,254,241, 11, 23, +250,127,251,237,183,242,192,192, 64, 88, 91, 91, 35, 39, 39, 7,161,161,161,184,112,225,130,110,253,250,245, 89, 89, 89, 89, 99, + 57,142, 59,250, 87,149,251,219, 58,116, 72,254, 74, 87, 0, 83, 10,130, 16,210, 4,192,156,130,205,111, 76, 88, 51,240,173,121, +249, 16, 66,188,236,236,236, 54,106,181, 90,170,209,104,198, 80, 74, 99,254,109,233, 36,132, 72,154, 52,105,178, 54, 57, 57,185, + 5,165, 20,214,214,214, 87,194,194,194,198, 83, 74,185,202,114, 18, 66, 88, 0, 45, 44, 44, 44,154, 91, 90, 90,182,213,233,116, +117, 10,134,223, 30,230,229,229, 93, 48, 24, 12,215, 1, 92,161,148,242,255,100,222, 11,210,217,201,205,205,237, 19, 65, 16,106, + 17, 66,108,120,158,135,209,104,204, 20, 4,225,105, 86, 86,214,102, 0,103,254,233,116,190, 41,206,186,181, 72, 31,202,160, 78, + 89,130,224, 21, 97, 83, 66, 64, 16, 1, 15,195,158,210, 67,149,168,243, 76,183,142,158,107,128,252,153,137, 21, 45,101,244,138, +208, 50, 65,188, 84, 90,100,214,146, 12,167,132,122,189,218,251, 36, 49,181,235,247,217,254, 58, 66,203, 84,212,245, 39,109, 65, +209, 66,160,184,254,240, 9,253,253,109,125,215,189, 73,206,133,132,216,173,182,181,189,194, 72, 36, 46, 0,152, 2,235,139, 32, + 16,194, 83, 66,184,226,195, 91,197, 59,150, 21,113, 26,128,122, 82,133,194,147,231, 56,231, 68,192,226, 56,207, 55,214, 82,154, +235, 1,204,185, 67,233,227,170,164,211, 0,212, 99, 21, 10,175,227,148,246, 74, 49, 55,175,159,172,209, 56, 2,160, 22,230,230, + 15,179,243,242,182,106,181,218, 53,165, 44,222, 94, 33,167, 76,161,240,224, 57,206, 25, 0, 24,137, 36,121,143, 78,231, 25,107, +101,245,145, 86,167,243,182,176,176, 48,234,245,250,108,173, 86, 59,212,104, 52,158,171, 76,222,159,114, 92,192, 31, 12,211,218, + 96,110,110,111, 32,196, 92,207,113, 6,189,193,240, 82,171,213, 62, 0,240, 35,165, 52,242,175, 44,247,183, 22,133,179,211,254, +138, 15,128,142, 34,167,200, 41,114,138,156, 34,167,200, 41,114,254,245,156, 0, 84, 0,188, 0,176,255,197,188,191, 77, 31, 0, +163, 11,127, 75, 68,169, 41, 66,132, 8, 17, 34, 68,188, 21,134, 19, 53, 74,241,201, 18,241,207,130, 0,232, 88, 70,129,153,108, + 18,172,202,236, 3, 19,134, 24, 68, 78,145, 83,228, 20, 57, 69, 78,145, 83,228,124,203, 56, 43,226,254, 47, 14, 73,150,183,214, +161, 56,116, 40,114,138,156, 34,167,200, 41,114,138,156, 34,167, 56,116,248, 23,125, 24,136, 40, 75,157, 58, 19, 66,156,223,244, +177, 34,222,238,186, 80,202,185,238,132, 16,247, 74, 30,239, 42,222,117, 17, 34, 68,136,120, 59,240,183, 11, 45, 83, 27,173,215, +108,220, 94, 75,248, 16, 66, 22, 18,130,248,252, 15, 89,248,166,142, 53,225,186,110,142,142,142,159,215,173, 91,119,135,139,139, +203, 4, 66,136, 83, 37,207,247, 53, 55, 55, 95,105, 97, 97, 17, 98, 97, 97, 17, 98,110,110,190,146, 16,226,251,134,202,141, 16, + 66,198, 40,149,202,243,110,110,110,113, 10,133,226, 60, 33,100, 44,169,226, 2,151,132, 16,127, 66,200, 2, 66,200, 55,132,144, +250,149, 57,215, 57,176,247, 94,167,192,222,247,157, 2,123,135, 58,212,123,223,215, 41,176,119,168, 83, 96,239,251,206,129,189, +247,254, 5,245,181,202,229, 91,112,110, 76,254,167,226,115, 9, 33, 63, 18,224, 37, 33,136,125,221,186, 36, 66,132, 8, 17, 34, +254, 29,168,148, 51,188,187,187,123, 63, 74,233, 24, 0,148, 16,178, 49, 46, 46,238, 64, 21, 26,158,105, 5,191,151, 80, 74,103, +190,206,113, 38,156,187,156, 82, 58,181,242, 34, 13,211, 4,129, 50, 0,192, 48,100,186,179,179,179,138,101,217, 63, 57, 24,242, + 60,175, 34, 4, 19, 4,129,146,130, 99,167, 17, 66, 86, 82, 74,147,170, 34, 14, 63,252,240,195,229, 43, 87,174, 84,170, 84, 42, + 68, 71, 71,119, 30, 59,118,108, 75, 66,200, 23,148,210,132,138,206, 55, 51, 51, 27,210,172,121,139, 47, 22,255,176,204,194,217, +201,201,156,227, 5,195,139,232, 40,213,236, 25, 83,155,155,153,153,173, 44,111, 49,229,146,130, 10,192,104,137, 68, 50, 80,169, + 84,214,212,106,181,145, 28,199,237,103, 89,182,203,119,223,125, 23,216,189,123,119,101,118,118,182,156,227,184, 90,219,183,111, +255,226,151, 95,126,233, 70, 8,233, 85,222, 52,253, 66,139, 14,165, 52,174,216,238,254,209,209,209, 77,100, 50, 25,169, 81,163, + 6, 3,224,126, 5,199, 23,129, 2,190, 97,151,247,213, 3,128,186,173, 6, 68,132, 93,222,135,130,223,127, 65,167,224,213,186, +160, 84, 42,215,107,181,218,152,194,255, 11,210,153,100,202,185,132,144, 85, 5,203, 7, 53, 1,240, 81,193,161,219, 40,165,183, + 8, 33, 46, 74,133, 98,146, 70,171, 37, 0,200,235,212, 37, 17, 34, 68,136, 16,241,183, 27,145, 26, 81, 74,239, 20,140, 72, 4, + 1, 8, 46,108,187, 43, 59,235,240,211, 39, 79,158, 88, 0,128,159,159,223,120, 0, 7, 42,145,136, 63, 53, 60, 29, 58,116,104, +100,102,102,246, 74, 20,100,141, 70, 35, 39, 4, 29,170, 34, 94, 10,175,161,215,235, 24,169, 84, 14,134, 33, 95,212,175, 95,191, + 90,106,106,234, 69,134, 97,118,196,198,198,102, 84,225,230, 97,211,166, 77,126,174,174,174,127,138,214,156,144,144, 32,239,213, +235,253, 74,241,141, 32, 68,161, 83, 40,154,203, 8,113,229, 57,206, 6, 0, 36, 18, 73,134,191,181,117,147,239,191,253, 86, 69, + 8, 17,210,210,210,160,209,104, 48,121,242,100,179,240,240,240,222, 0,214, 84,144, 70,191,119,222,109, 57,249,212,169,147,117, +178,211, 51,180,155,150,111,184,173,145,200,212, 62, 1,181,101,107, 55,110,181, 29, 61, 98,232,103,132,144,187,165, 45, 71, 82, +130,135, 1,112,104,210,164, 73,117,123,244,232, 33,207,201,201, 81,106, 52,154,106, 59,118,236,152,221,164, 73, 19,139,134, 13, + 27,202,119,239,222, 77,178,178,178, 64, 41, 85,213,174, 93,155, 14, 28, 56, 80,187,103,207,158, 9, 0, 86, 85, 36,124, 89,150, + 93,225,239,239, 63,175, 32,207,178, 98,199, 72, 3, 2, 2,204, 1,224,241,227,199, 95, 19,130, 73,229,137,108, 2, 60,169,219, +106, 0, 64, 80, 43,236,242, 62,101,221,214, 3,180,160,120, 74,128, 39, 5, 29,130, 5, 64,177,184, 80,175,226, 97, 92, 92, 92, +149,214, 38, 12, 10,234, 65, 8, 33,251,221,220,220, 14, 36, 39, 39,251, 16,130, 81,166,118, 6, 8, 33,196,222,222,126, 56,128, +133, 0, 62,121,248,240, 97, 35, 0,168, 83,167,142, 12,192, 45, 43, 43,171,150, 6,189,158,136,175, 43, 17, 34, 68,136,248, 79, +162, 17,128, 59, 0,130,138, 45,193,179,177, 42, 66, 75, 14, 0, 23, 47, 94, 4, 0, 69, 85, 68, 95,113, 1, 51,113,226, 68,184, +186,186,150, 20, 47, 8, 9, 57,255, 58,153,125,229, 26,223,124,243,141, 69,102,102,102,199,159,127,254,185,141,187,187,251,210, +184,184,184,107,229,157, 76, 41, 77, 34,132, 44, 41,176, 64, 64,161, 80, 70,140, 29, 59,246, 78,193,223,213,126,251,237, 55, 85, +207,158, 61,213, 0,162, 0, 64,161, 80,186,179, 44,227,151,239,244,134, 37,229, 9,194, 1,132,212,144,203,229,239,141,249,233, + 39,174,113,207,158, 18,115, 71, 71, 2, 0, 81,143, 30,217, 47,249,225,135,150, 25,207,158,201, 53,246,246,105,105,121,121,154, +136,136, 8, 40, 20, 10,194,178,108,227,138, 50,108,110,110,254,249,183,223, 47, 54,207, 78,207,212,104,179,115,244, 44,103,212, + 89,154,169,248,164,196,228, 52, 11, 51,115,245,244, 57,243,229,159,142, 26,246, 57,128,241, 21, 80, 77,248,226,139, 47,234, 52, +107,214,204,125,239,222,189, 36, 43, 43, 11, 18,137,196,162, 97,195,134,104,210,164, 9,255,251,239,191, 19, 31, 31, 31, 4, 6, + 6,226,242,229,203,184,114,229, 10,105,212,168,145,234,224,193,131, 31,150, 38,180, 74,138,107,150,101, 38,215,174, 93,187,161, +185,185,185,222,207,207, 15,163, 70,141, 2,165, 20, 29, 59,118, 12,180,176,176, 56,144,151,151, 39,127,252,248, 81,155,138, 68, +118, 82,232,225,129, 0,224, 20,216,251, 62,128,122,160,120,154, 28,122,184,126,177, 67,234, 60,126,252,248,157,140,140,140, 34, +103,196,194, 5,204,219,180,105, 99,114, 69, 42,172, 11, 61,123,246,152, 14, 16,210,177, 99,199,204, 9, 19, 38, 48,143, 30, 61, +250,160, 79,159,222,129, 79,158, 60, 69, 89,233, 44, 81,143,200,240,225, 35,146, 44, 44, 44,250,186,185,185, 61, 6, 32,145,201, +138,116, 38,235,236,236,236, 88,191,126,253,113,118,118,118,201, 44,195, 56, 81, 80, 90, 81, 93, 18, 33, 66,132, 8, 17,255, 42, + 4, 23,136,171,224,146,127, 72, 0, 32, 56, 56,152,254,175,215, 30, 68,202,107,120,238,221,187,231,169, 86,171, 97, 74, 35, 80, +124,138, 38,165, 52,137,101,217,181, 12, 67,198, 19, 66, 16, 24, 88,239,249,138, 21, 43, 74, 91,211, 75, 31, 24, 88,239, 57,203, + 50,213, 41,165, 32,132, 89, 39, 8,124, 82,105,156,101, 53,140,114,185, 98, 26, 0,184,184,184, 62, 59,113,226,132,190,127,255, +254,248,225,135, 31,100, 51,102,204,152,234,237,237, 61, 33, 58, 58, 58,177,172,116, 22,108,207,116,118,118, 86,109,218,180,201, +111,236,216,177,119,226,227,227,103, 2,128,155,155,219, 66, 0, 1, 0,162,138,237,195,250,245,123,226, 70,141, 26, 21,145,148, +148, 52,179, 44,206,126,132,212,244,174, 93,251,189, 5, 23, 47, 82, 70,167, 35,169,151, 46,101,167, 36, 37, 25, 35, 83, 82, 84, + 91,110,221,234, 49,123,225, 66,169,167,151, 23, 66,142, 30,117, 72, 85,171, 83,178,116, 58,109, 82, 82, 18,229, 56,238,138, 9, +121,175,235,228,232,164,218,240,227,186,155,150, 82, 86,112,242,112, 39, 82, 59, 59, 9,163,178,146,179, 18, 70, 87,189,154,175, + 28, 64,221,138,202, 72, 38,147,125,216,185,115,103,213,158, 61,123, 72, 96, 96, 32,108,108,108,112,233,210, 37,220,189,123, 23, + 25, 25, 25,140,209,104, 68,211,166, 77,177,120,241, 98,120,121,121, 33, 51, 51, 19, 49, 49, 49, 14,114,185,220,177,156,251,249, + 74,125,154, 54,109, 26, 92, 93, 93,193,113, 28,210,211,211,193,113, 28, 44, 44, 44, 0, 0,177,177,177, 56,122,244, 72,133,117, +201, 68,145,132,119,223,125, 55,135, 16,242,176,164, 69,171, 50,156,238,238,238,187, 83, 82, 82,187,189,247,222,123,200,200,200, + 48,206,159, 63, 31,245,235,215,135,159,159,159, 41,117,126,166, 66,161,248,217,219,219,251,199,137, 19, 39,186,218,217,217, 65, +167,211,205, 78, 76, 76,196,184,113,227, 0, 0,221,187,119,175, 47,149, 74, 79,140, 28, 57, 18, 62, 62, 62,113,233,233,233, 49, +183,111,223, 30,149,151,151, 23, 90,213,188,155,120,127, 68, 78,145, 83,228, 20, 57,255, 85,156,166,106,145,127, 35, 10,134, 9, + 55, 22,219,222,248,138,208, 10, 10, 10, 34,193,193,193,212,132,140,165,121,120,120,120,154,153,153, 1, 64, 90,101, 19,194,243, +252, 4, 7, 7,135,228,153, 51,103,182,242,243,243,211, 79,152, 48, 33,244,197,139, 23,179,138, 31,227,227,227,243,221,234,213, +171, 17, 17, 17, 17,181,112,225,194,203,169,169,169,223, 84, 50,179, 51, 8, 33, 43, 10,172, 99,169, 71,143, 30,173,127,241,226, +197,241,203,151, 47,119,252,244,211, 79,101,159,127,254,249, 80, 0, 63, 84,196,195,178,172,186,180,225,194,210,224,234,234,170, + 47,205,135,171, 16, 61, 9, 49,179,146,203,219, 47,184,120,145,234,163,162,212,191, 44, 91,102,185,225,198,141,121, 70, 74,157, +157,156,156,208,186,101,203, 92, 37,203,166, 38, 39, 38, 10, 78, 53,107,178, 47, 78,156,112,208,200,229,241,123,246,236,201, 74, + 75, 75, 59, 92,161, 9,143,144,108,129, 82,189,133,135,151,177,127,239, 78,129, 55,175,223,125,100,233,228,192, 52,106, 24, 88, +255, 81, 68,212,109, 8,130,129, 16,146, 93, 17,143,181,181,181, 95, 90, 90, 26,178,179,179,225,232,232,136, 21, 43, 86,192,197, +197, 5,106,181, 26, 97, 97, 97,212,195,195,131, 92,188,120, 17, 30, 30, 30, 72, 73, 73,129, 94,175, 71, 78, 78, 78,178, 78,167, +211,148, 37,124, 37, 18,201,175, 12, 67, 70, 16, 66, 80,189,122,141,232, 53,107,214,232, 5, 65, 64,157, 58,117,208,167, 79, 31, + 28, 60,120, 16, 97, 97, 97,133,150, 39,189,183,119,181,104,134, 33,222, 5, 90,169,202, 86,157,194,165,125,226,226,226,250, 86, +201, 44, 74, 8,227,230,230, 54,212,215,215,119,252,144, 33, 67,140,114,185, 28,121,121,121,133,247,194,216,173, 91,247,204,158, + 61,123, 88, 7, 7, 7,151,155, 78,157, 78,247,204,217,217,249,147, 47,190,248, 98,199,250,245,235,109,103,205,154, 5, 65, 16, + 64, 41, 5,199,113, 69,139,126, 11,130,128, 67,135, 14, 33, 50, 50,242,187,226, 34, 75,132, 8, 17, 34,254,191,160, 18, 90,228, + 95,135, 98,190, 89, 40, 41,182,254,246,200,240, 44,203,110, 56,125,250,116,195, 54,109,218, 72, 58,116,232, 16,232,225,225, 17, + 24, 27, 27, 27, 10, 0, 30, 30, 30,129, 93,187,118, 13,116,114,114,194,202,149, 43,213, 44,203,110,168,162,178, 44,222,232,221, +113,117,117, 93,122,240,224,193, 37, 99,198,140,129,139,139, 75,192,223,157,103, 43,133,162,209,200, 21, 43, 56,169,209,200,252, +180,116,169,213,178,243,231,151,236,221,183, 79,242,238,187,239, 18, 74, 41, 30,220,191,111,182,120,213, 42,213,224,222,189,163, + 30, 63,123,198, 29, 57,117,202,152, 20, 23,151, 30,151,146, 50,151, 82,154, 94, 17,191,209,104,188,250,228,201, 19,183,214,109, +223,117,191,112, 35,244,110,255,222,221,223,147, 74, 24,242, 52, 42,246,150,171,139,131,117,200,249,179, 26,163,209,120,181, 34, +158,188,188,188, 23, 28,199,217, 81, 74, 29, 67, 66, 66,224,232,232,136,140,140, 12, 24,141, 70,232,245,122,189, 90,173, 86,166, +165,165, 65,171,213, 66,167,211,193,202,202, 10, 15, 30, 60, 72,226, 56,238,247,178, 56, 57,142, 27,169, 84, 42,191,145, 74,165, +114,153, 76, 22,127,235,214, 45,100,103,103, 87,179,177,177,249,129,227, 56,196,199,199,227,226,197,139, 95, 90, 89, 89, 69, 1, +128, 82,169,132, 92,174,176,215,233,116, 92, 89,206,240,166, 90,180,170, 10, 87, 87, 87,175,234,213,171, 47,152, 62,125, 90,157, + 6, 13, 26, 34, 37, 37, 5,130, 32,192,220,220, 28,106,181, 26, 86, 86, 86,104,209,162,197,139, 5, 11, 22, 36, 80,138,209, 21, +137,193,164,164,164, 20,119,119,247, 9, 99,198,140,249,198,207,207,175, 58,165, 20,190,190,190,232,220,185, 51, 78,156, 56,129, +136,136, 8,228,229,229,241,215,174, 93,219, 21, 31, 31,255,155,248,186, 21, 33, 66,132,136,255,158, 78, 44,244,205, 42,110,205, +250, 71,132, 86, 82, 82, 82,138,135,135,199,201,219,183,111,247, 24, 56,112, 32, 66, 66, 66,134, 3,248, 2, 0, 20, 10,197,240, +129, 3, 7,226,246,237,219,120,244,232,209,201,164,164,164,148, 55,113, 77,185, 92,174,213,235,243,141, 83, 74,165, 82, 89,201, +211,171, 21, 12, 25, 2, 64,181,114,246,149, 9, 70, 34,113,173,215,181,171, 36,227,238,221,236, 77,215,175,127,179, 99,199, 14, + 73,171, 86,173,136,209, 96, 0, 47, 8,168, 81,163, 6,233,208,177,163,249,175, 59,118,216,241,121,121, 23,191,157, 62,253,210, +198,145, 35,115, 35, 40,141, 50, 37,129, 58,157,110,213,248,113,159,116, 60, 31,114,201, 61,160,118, 77,187,147,167,207,223,177, +183,183, 86,249,213,170,101,158,150,145,206,207,154,241,165, 68,167,211,253, 84, 17,143, 70,163, 57,116,246,236,217,222,158,158, +158,142,161,161,161,208,235,245,224,121, 30, 29, 58,116, 0,165, 84, 1, 64,144, 72, 36,120,244,232, 17, 12, 6, 67,242,147, 39, + 79,226,159, 62,125,170, 0,176,168, 60, 94,173, 86, 27, 93,124,219,211,211,179, 83, 80, 80, 16, 56,142, 67,215,174, 93,113,228, +200,145, 78,225,225,225,203,138,107,190,215, 45,243, 2, 11, 89, 29,119,119,247,131, 5,187, 76,114,130,247,240,240, 8,244,245, +245, 93,191,104,209, 34,153,135,135, 7, 40,165,176,181,181,129, 90,173, 70,106,106, 26, 2, 2, 2,224,233,233,137, 69,139, 22, + 1,192, 46, 83, 45,110,113,113,113, 79, 1, 12, 12, 8, 8,144,101,102,102, 54,233,212,169,211,202,142, 29, 59,226,206,157, 59, +184,116,233,210, 96,133, 66,145,108, 48, 24, 56, 87, 87,215,209,132, 16, 43,131,193,176, 51, 53, 53, 53, 65,124,119,137, 16, 33, + 66,196,127, 2,133, 62, 90, 69, 81,226, 43,109,209, 10, 8, 8, 48,207,202,202,250,168, 90,181,106,114, 0, 48, 51, 51, 11,168, + 89,179,230,212,200,200,200,156,202,166, 70,173, 86,239,221,177, 99, 71,231, 31,127,252, 81,214,189,123,247,154, 30, 30, 30,205, + 0,160,111,223,190, 53, 45, 45, 45,177, 99,199, 14,131, 90,173,126, 99, 49,145,140, 70, 99,155,166, 77,155, 34, 61, 61, 29, 81, + 81, 81,149, 26,150,249,237,183,223, 84,200,247,203, 42,119, 95,121,224,244,122, 91, 27,119,119, 38,238,252,121, 67,122,118,182, +107,155,182,109,137,209, 96, 0,195, 48, 72, 75, 75, 67, 76, 76, 12,172,109,108,200,163, 39, 79, 44, 54, 79,155,246, 91,181, 6, + 13,228,188, 94,111, 95, 9, 81,145, 71, 8, 25,241,217,132, 79, 15,237,220,185,203, 49, 51, 59, 59,210,204, 76,165, 83, 40,100, + 46, 19, 63,251,140, 79, 79, 79, 31, 70, 41,205, 53,129,106,209,206,157, 59,187,118,237,218,245,190,151,151,151, 83, 74, 74,138, + 75,102,102, 38,159,158,158,206, 34,223,215,138, 0,192,249,243,231,145,157,157,205,241, 60,127, 17,192, 2, 74,169,222,212,180, + 86,171, 86,205,186,121,243,230,237, 28, 29, 29,145,149,149, 5,123,123,123, 52,108,216,176, 93,181,106,213,126,142,138,138,202, +122,147,181,254,204,153, 51,150,148,210,119, 40,165,232,218,181,171, 73,231,240, 60,255,113, 80, 80,144,140, 16, 2,141, 70, 13, +165,210, 12,230,230, 22,176,180,180,130,159,159, 63,226,227,227,209,165, 75, 23,125,100,100,228,218,132,132,132, 74,215,209,172, +172,172, 94, 45, 90,180,152, 50,110,220, 56,112, 28,135, 94,189,122,225,229,203,151,203, 94,188,120,177,199,205,205,109,232,199, + 31,127,236,104,111,111,143, 41, 83,166,152, 1,248, 90,124,119,137, 16, 33, 66,196,191, 31, 37,125,180, 74,181,104,149, 55, 38, +234,234,234,218,218,206,206,110,182, 70,163,145, 23, 14,201, 16, 66,228,142,142,142, 71,220,220,220, 22,198,199,199, 87,202, 41, + 46, 35, 35, 35,219,213,213,245,200,213,171, 87, 7,244,237,219, 23,103,206,156, 25, 86, 32,180,112,245,234, 85, 60,127,254,252, + 72, 70, 70, 70,246,155,200,188,135,135, 71,183,118,237,218,245,109,218,180, 41,142, 29, 59, 6,158,231,175, 84,230,252,226, 51, + 12, 81,202,172,195,194,125, 38,145,177, 44, 8, 33,224, 56, 14, 0,144,154,146,130,136,199,143,145,158,145, 1,157, 86,139, 60, +181,154,247,243,241,209,100,233,245, 82, 2,208, 74, 22,114,180,133,133, 69,140, 58, 47,207,201,222,214, 78,163, 82, 41,144,153, +157, 37,187,117,243, 90, 46,165, 52,210, 68, 14, 61, 33,164,237,137, 19, 39,230,178, 44, 59,208,194,194, 2,227,199,143,103,219, +181,107, 7,153, 76, 6,157, 78,135,204,204, 76,236,216,177, 35,133,227,184,234, 5,245,192,194,220,220,124, 43,203,178,177,217, +217,217,179, 43,186,134, 94,175,239,222,163, 71, 15,137, 94,175,199,183,223,126,139,121,243,230,161,107,215,174,146,155, 55,111, +118, 7,176,243, 77, 85,122, 65, 16,208,169, 83,167,226,206,240, 15, 77, 57, 79, 42,149, 6,214,170, 85, 11, 41, 41, 41, 72, 73, + 73,129,163,163, 35,220,220,220,224,226,226,130,101,203,150,209,149, 43, 87,158, 52, 24, 12,107, 83, 82, 82,146,170, 80, 23, 71, + 15, 31, 62,124,244,128, 1, 3,144,155,155,139,171, 87,175,162,101,203,150, 88,178,100,137,235,197,139, 23,191,104,218,180, 41, +164, 82, 41, 66, 66, 66,192,113,220, 75,241,213, 37, 66,132,136,255,111,248, 47,250,103, 85,132,114, 45, 90, 94, 94, 94, 54, 60, +207,127,217,179,103,207, 78,189,123,247, 70,151, 46, 93, 94,249,127,231,206,157,150, 7, 14, 28, 88,232,233,233,217,213, 96, 48, + 44,170,204, 80,159, 32, 8,135,118,238,220,217,253,221,119,223, 85,181,111,223,190, 6, 0, 40, 20, 10,253,206,157, 59,213,130, + 32, 28,170,108, 70, 74, 6,143,116,119,119,175, 47,145, 72,250,246,232,209,163,254,136, 17, 35, 16, 22, 22,134, 29, 59,118, 60, +245,243,243,187, 92, 73,234,168, 10,102, 29, 46,172,200,186,197,202,229,105,153,137,137, 54, 22, 94, 94, 82, 91, 75,203,132, 99, +199,142,121,118,236,216,145,188,124,249, 18, 25, 25, 25,208,106,181,184,121,243,166, 32, 1,162, 37,182,182, 36,250,234, 85,194, +202,229,149,158,108,224,233,106,235, 59,103,198,216,106, 90,157,182,110, 86, 86, 22, 39,145, 74,165, 30, 46, 54,149,106,176, 41, +165, 58,115,115,243, 38, 0, 36,130, 32,168,237,236,236, 84,167, 79,159,134, 92, 46, 7, 33, 4,245,234,213,131, 82,169,148,153, +155,155,199, 0,128,139,139,139,124,195,134, 13,214, 67,135, 14,189, 84, 17,119,227,198,141,165, 62, 62, 62,239,251,249,249,225, +234,213,171, 8, 13, 13,141,190,122,245,170,119,163, 70,141,224,229,229,245,126,227,198,141,247,221,190,125,219,248,134,122, 23, + 85,114,134,231,121, 94, 32,132,128, 97, 24, 8,130,128,148,148, 20, 84,175, 94, 29,107,214,172,193,138, 21, 43,190,141,143,143, + 63, 90,149,244, 4, 4, 4,200, 26, 54,108, 56,108,192,128, 1,120,246,236, 25, 22, 46, 92,152,154,144,144,112,254,212,169, 83, +253,198,141, 27,199,182,108,217, 18,105,105,105,248,245,215, 95,185, 91,183,110,253,146,152,152,184, 77,124,229,138, 16, 33, 66, +196, 91, 44,180,188,188,188, 6,200,100,178, 41,131, 6, 13, 98,253,253,253,145,148,148, 4, 43, 43, 43, 35, 33, 68, 10, 0, 54, + 54, 54, 70, 51, 51, 51,140, 29, 59, 22, 13, 26, 52,104, 61,109,218,180,150,238,238,238,107,226,226,226,182,154,114,225,164,164, + 36,181,171,171,235,254,241,227,199, 47,186,123,247, 78,117, 0,184,113,227,198,243,248,248,248, 25, 73, 73, 73,234, 74,138,172, +194,160,152,196,204,204,236,186,175,175,239,139,110,221,186, 89,245,238,221, 27,142,142,142,184,125,251, 54, 22, 47, 94,252, 68, +175,215,207, 13, 9, 9,225,254,238,155,204,233,116,137,183, 14, 31,182,108,247,193, 7, 86, 19,131,130,150,126, 58,126,252,143, +115,230,204,145,248,251,251, 19,181, 90,141,235,215,175,211, 3, 7, 14, 24,127,253,230,155, 21, 48, 55,151, 94, 61,112, 64,174, +215,235,163, 43,105, 45,105,219,189,107, 91,255,165, 63,174,130, 86,147,139,235, 87,130,145,145,145,130, 13, 27, 15,250,123,120, +120,180,141,141,141,189, 80,137,251,233,119,230,204, 25, 39, 74, 41,228,114, 57, 22, 44, 88, 0, 55, 55, 55, 88, 89, 89, 33, 39, + 39, 7, 95,124,241,133,245,164, 73,147,172, 1, 32, 44, 44,172, 40, 60, 67, 69,136,143,143,111, 49,118,236, 88, 75,142,227,112, +242,228, 73, 61, 33,100,246,217,179,103,127,174, 87,175,158,188,117,235,214,150,219,182,109,107, 9, 32,228, 77, 9,173, 42,158, +247,244,244,233,211, 77, 7, 14, 28, 72,165, 82, 41,201,204,204,132,141,141, 13,214,172, 89,147,151,144,144, 16, 92,229, 58,192, +113,114,149, 74, 37,167,148, 98,255,254,253,136,142,142,254, 56, 53, 53, 53,209,217,217,249,224,151, 95,126, 57,213,223,223,223, +231,241,227,199,209, 57, 57, 57, 75,146,146,146, 94,136,175, 38, 17, 34, 68,136,248,239,160,208, 9,190, 82,145,225,121,158, 31, +123,234,212, 41, 86, 16, 4,108,220,184, 17,183,110,221,162, 42,149,106,182, 74,165, 90,109,102,102,198,107, 52,154, 49,163, 70, +141, 26, 58,111,222, 60,166,117,235,214,184,122,245, 42, 83,189,122,245, 97, 0,182, 22,187,112,199,242, 98,109,100,101,101,221, + 76, 74, 74,172, 94, 44, 64,101,117,133, 66,121,179,130,204,188,194, 89, 74, 80,204,230, 11, 22, 44,200,115,117,117,213,135,134, +134, 98,253,250,245,194,173, 91,183,206,203,229,242, 13,241,241,241, 58, 83, 56,223,208, 77, 47,226,148,115,220,237,237, 83,167, +214,105,220,171,151,240,201,148, 41,185, 50, 51,179,207,151,174, 90, 53, 45, 51, 39,199, 13,132, 80,123,107,235,232,141, 11, 22, + 44,236,250,254,251,185, 97, 23, 46, 40,239,158, 57, 35,117, 52, 26,239, 85, 38,157,177,177,177, 23,124,107,122, 97,203,166, 31, + 97, 48,232,144, 16,151,175,211, 82,211,178, 80,158,200, 42,141,147,227,184,172,126,253,250,201, 0,152,125,248,225,135,242,228, +228,100,212,172, 89, 19, 0,144,157,157,141,224,224, 96,212,174, 93, 27, 0,240,224,193,131,162,223, 21,165,211,220,220,252,253, +150, 45, 91, 34, 58, 58, 26, 97, 97, 97,231,226,227,227,211,220,220,220,206,189,124,249,178,123,211,166, 77,113,232,208,161,158, +101, 9,173,202,150,145, 41, 66,171, 52, 78, 51, 51,179, 25, 7, 15, 30,252,248,202,149, 43, 3,167, 78,157, 42,237,208,161, 3, + 0, 32, 39, 39, 71, 77, 41,229,171,194, 89, 60, 77, 70,163, 17,130, 32,192,206,206, 46,175,160,195,241, 2, 21, 4,146,253,171, +235,167,200, 41,114,138,156, 34,231,191,129,243, 45,129,233,145,225, 41,165,156, 32, 8, 8, 9, 9,193,193,131, 7,121,131,193, + 48, 58, 62, 62,254, 65,177, 67, 86,185,185,185,157,233,215,175,223,214,199,143, 31,179,225,225,225, 48,165, 33, 42, 14,173, 86, +107, 44,185, 36,177, 86,171,125,237,161,163, 45, 91,182, 32, 49, 49,209,240,242,229,203,179, 28,199, 29,122,205,217,139,175, 61, +235,240, 87, 74,117, 31, 16,114,118, 94,171, 86,157,230,158, 57,163,248,228,171,175,116,195, 71,140,248,146,215,235,141,172, 76, + 38,200,205,205, 25, 94,161,144,134, 93,184,160, 92, 57,110,156,157, 70,167, 59,185,189, 18, 14,230,197, 44, 90, 24,254,201,100, +104,138, 89,180,174,222,140, 64,101, 45, 90, 90,173,182,110,129,232,136, 1,224,242,209, 71, 31, 65, 16, 4,104, 52, 26,228,228, +228, 32, 62, 62, 62,107,196,136, 17,124,129,120,146,244,237,219,215,202, 20,222, 26, 53,106,184, 73,165, 82,156, 60,121, 18, 82, +169, 52, 24, 0,164, 82,105,240,153, 51,103,186, 15, 30, 60, 24,238,238,238, 53, 8, 33,132, 86,160,146,156, 3,123,239,165,128, + 47, 8,106,229, 63,241,168,229, 20,216,251, 62, 1,158, 20, 68,141,127,216,168, 81, 35,192, 68,191,172,226, 40,152,220,177,194, +193,193, 97,223,180,105,211,198, 55,111,222,188,243,188,121,243, 8, 0,246,141, 88, 55, 57,238,181, 66, 79,136, 16, 33, 66,132, +136,127,175, 85,171,180,253,146,114, 78,216,216,182,109,219,209, 0, 88, 66,200,250,184,184,184, 7, 37,143,137,143,143,143,112, +119,119,255,193,199,199,167,104,161,233,202, 36,170, 32,146,251, 98,134, 33,211,242,183, 43, 31,160,178,216, 82, 39,211, 0, 16, +134, 97,183,222,185,115,231,171,152,152,152,148,202, 10,191,210,240, 38,102, 29, 2,192, 78, 74, 95, 12, 38,228,212,148,192,192, +142, 93,199,141, 67,253,174, 93,173,220,188,189,121,141,193, 32, 60,184,124,153, 92,217,191, 95,118,247,204, 25,169, 70,167, 59, +121,144,210,152,202,166, 51, 54, 54,246, 66,205, 26, 30,167,251,247,237,222,185,134,143, 27, 0,224,217,139,120,164,166,103,157, +174,140,200, 42, 33,184,122,173, 89,179,230,168, 76, 38,147, 20, 95,202,198, 96, 48,164, 23,138, 49, 66,136,219,198,141, 27,119, + 51, 12, 19, 93, 17, 95,120,120,248,145,185,115,231,246,141,138,138, 58, 29, 19, 19, 19, 5, 0,209,209,209, 81,110,110,110, 91, + 19, 18, 18,250, 70, 71, 71, 31,160, 38,168,144, 18,139, 74, 35,236,242, 62, 37,128,122,133,139, 74, 87,117, 45,195,226, 40, 8, +173, 48,219,213,213,117,103,231,206,157, 71, 1,136,123, 29, 62,189, 94,111,212,104, 52, 28,207,243, 18,131,193, 64,245,122,189, + 81,124, 45,137, 16, 33, 66, 68,165,208, 20, 64,225, 74, 36,133, 6, 20,199, 18,191,245, 40, 88, 46,176,240,245, 91,176,157, 2, +224,102, 49,142,226,251, 43, 58, 23, 0, 82, 1,220, 47,216, 87,154, 22,217, 88,214,118,153, 66, 43, 46, 46,238, 0, 76, 88, 52, +218,212,227,202, 17, 74, 51, 9, 33, 43, 11, 69,211,235,114,112, 28,247, 70,214,135, 99, 24,230, 69,207,158, 61, 43,117,124, 69, +199,236,166, 52,250,115, 66,182, 29,251,233,167,134, 39,215,175,119,231, 57,206,158, 0,148,149,203,211,244,122,125,148,163,209, +120,175,178,150,172, 87,172, 49,207, 98,187, 0,128,175,175, 47,125,250,244, 41, 40,165,175, 53,123,131, 82,122, 15,128,103, 5, +199,196, 3,104,109,162, 24,220, 5, 96, 87, 41,130,125, 55,128,221, 38,247, 26, 10, 23,149, 6, 24,129, 8,253,235,182, 26,176, + 31,128, 80,184,168,244,155, 68, 66, 66,194, 99, 20,196,121,123, 29, 68, 69, 69,233,124,124,124,182, 47, 94,188,248,195,187,119, +239,238,137,139,139,211,137,239, 76, 17, 34, 68,136,168,156,200, 34,132, 28, 43,104,123,122, 20,116,246,143,149,252, 93,120, 76, +225,113,197,143, 41,228, 40,185,191,188,115, 1, 96,198,140, 25, 95, 45, 92,184, 80, 5,192,164,197,152,139, 7, 46,149,252, 27, +238,222,155, 88, 60,247, 77, 47,192, 27, 27, 27,187,233,175,200,235,170,124, 33,117,237,175,188,159, 79,158, 60, 33,111,243,211, + 86,184,168,116, 49, 4,254, 23,210,253,226,197,139, 53,237,218,181,219, 16, 23, 23,199, 65,132, 8, 17, 34, 68, 84, 6,142,165, + 9,163, 50,244, 64,143,242,254, 47, 33,136,254,116, 92,105,219,132,144, 99, 11, 23, 46,236, 97,106, 98,139, 91,180, 24,177,236, + 68,136,248,251,240, 79,204,122, 21, 33, 66,132, 8, 17,101, 10,162, 87,172, 88,133,226,171,228,246,140, 25, 51,190, 66, 25,195, +134, 5,199,184, 18, 66, 70, 23,204, 58,124,197, 95,139, 0,232, 88,198,197, 77,158, 77, 64, 8,233, 88,133,204,157, 21, 57, 69, + 78,145, 83,228, 20, 57, 69, 78,145,243,255, 23,103, 69,220,101,156, 31, 84,214, 80, 95,121,195,136, 37,127, 87,116,174, 9,199, + 6,151,145,151,209,197,215, 58,124,101,205,195, 66, 39,231,191,226, 3,160,163,200, 41,114,138,156, 34,167,200, 41,114,138,156, + 34,231,107,126,154, 82, 74,131,144,191,106, 10,165,148, 6, 81, 74,187,206,152, 49, 99,102,225,190, 25, 51,102,204,164,148,118, + 40, 60,174,224,152,162,115, 10,247,149,252, 46,185,175,130, 99,203,186, 31,163,139,255, 46,190,253,175,240,209, 18, 33, 66,132, + 8, 17, 34, 68,136, 40, 7, 55, 1, 52, 45,102,109, 74, 1,240, 96,225,194,133, 25,197,124,167, 82, 0,220, 3,208,160,224,184, +148, 2,131, 82,113,223, 42,125,193,182,190,148, 99,244,166, 28, 91,134, 21,110, 99,105,191, 1,136, 66,171, 44, 52,116,101,191, +241,242,112,106, 82,100,245, 19, 4, 0,128, 80, 16,125,160, 40, 12,129, 32,128, 82,138,248,228,204,219,247,147,232,156,170, 94, +207,223,157,216, 57, 41,149, 43, 4, 74, 91, 21,236,186,144,149,166,155, 28,154, 69, 51, 77,229,168,227, 66,234, 40, 25,124, 41, + 80,212, 7, 0,134,224,190, 86,192, 15, 15, 19,233,195,215,189, 31,132, 16, 82,215, 17,163,229,102,170, 65,214, 54,182,181, 50, + 50, 82,159, 24,180,186,125,225, 41,216, 64,171, 16, 24,170,166, 29,121, 71,160,248, 10, 0, 35,101,176, 44, 34,141,158, 23,107, +157, 8, 17, 34,254, 38,188,110, 92,188,210, 66, 7,189,238, 36, 36, 49,192,158,105, 98,171, 36,110,152,120,220, 63,134, 74, 9, +173,186, 78,100, 28, 8,230, 3,160,160,248, 58, 44,153,174,171,212,249,110,164,163,146,101, 55, 3, 96,181, 6,126, 10, 21,112, +177,212, 70,157, 65, 27,165,140, 93, 6, 64,208,242,252,200,176,120,211,253,197, 2, 61, 72, 87,137,192,108, 23, 40,149,242, 2, +221, 10,138, 99, 22, 50,252,113, 53,150,106, 43,147, 86, 47, 15,167, 38,135,111, 36,116, 62,191,110, 34,154,215,175, 9,202,115, +128, 96,132,170,245,151, 56,183,252, 35, 52,175,227, 5, 42, 24, 1,129,131, 69,183,165,232, 22,104, 93,229,135,196,223,157,216, +121, 59, 56,133,110,218,180,217,197,173, 70, 0, 17, 56, 3, 30,223, 56, 61,116,210,180,185,239, 5, 90,147, 64, 83,196, 86, 3, + 55,242, 73,205,234,254, 95, 78,158,255, 35,235,234,230,105, 46, 24,117, 92,226,139,135,141, 86, 45,153,123,160,129, 27, 89,118, + 47,158,110, 54, 85, 80, 5, 56, 98,140, 68, 33, 31, 96,166, 52,175,165, 86,231, 60,229, 13,198,125,129,110,146,174, 63, 44, 93, +209,176, 93,167,238, 22,124, 78, 34, 99, 20, 16,176,119,207,110,239,159,214,172,237, 78, 8,121,159, 82, 42, 84, 38,207, 2,197, +180,136,109,163,187, 75, 37, 44,169,243,241, 38, 22, 38, 78,153, 45,137, 0,103, 50,132,208,138,195, 75, 80,130, 75,225, 73,116, + 87, 85,174, 81,199,153,252, 76, 40,252, 64,176,159, 80,236, 14, 75,166,201,226,251, 78,132,136,183, 11, 12,195,156, 23, 4,161, +253,155,228, 36,132,188, 67, 41,189, 38,222,221,255,223,168,156, 69,139,224,219,176,200,151,182,224, 13,168,235, 87,227, 27, 0, +149, 18, 90, 74,150,221,122,243, 73,146, 11, 56, 3, 54,125, 55,126,143,222, 8,112, 70, 3,120,206, 8,158, 51,130,227, 12,224, +141, 70, 80,163, 14,115,127, 57, 15,232,115,208, 36,208,119, 43, 0, 87, 83,175, 33,165,204,246,219,151, 79,219, 17,125, 22,118, +173, 91,248,217,203,148,220,207,206,222,143, 79,173,235, 76,102,134, 39,227,215,202, 8,130,243,235, 39, 98,199,161,224,216,149, + 63,231, 61, 18, 40,133,157,149,153,255,208, 30, 97,158,219,142,156,127,185, 98,171,246, 17, 0, 88,155,203,253,135,221,127,226, +245, 58,133,224,164, 84,174,216,176,246, 39, 23, 87,123, 51,194, 93, 89, 4,142,231,225,233, 29,196,206,156, 48,212,245,219,229, +155,151, 3, 24, 94,222,249,181,157, 73,128, 95,205, 58, 83,182, 6, 95,241,202,203, 78,214,159,222,249, 85, 36,116, 48,186,184, +215,145,126,179,240, 71,118,214,244,137, 95,212,118, 38,215, 31, 37,209,240, 10, 94, 10, 76, 29, 39, 28, 89,184,104,105,253,247, +186,245,176, 16,114, 83, 88,109, 94,174,223,166, 95, 54,207,175, 93,191,153,170,117,160,135, 44,121,223, 88,162,201, 73,135,129, + 81, 42,222,171,219,209, 74,243,225, 96,227,166, 45, 59, 38, 0, 88, 85,169,238, 96,177, 97,107, 65,168,122,239,146, 80,180,190, +123,237,252, 24, 62,254, 38, 40,111, 4,120, 67,209, 55,120, 35,168,144,255,221,124,236, 47, 64, 41, 49,188, 76,122, 1, 83,116, + 62,123,249,166,107, 82, 98, 66,211,229, 75,191,159, 25,224, 68, 78,128,199,246,135,233,184, 80, 89,129, 41, 66,132,136,127, 47, + 8, 33, 28,165, 84,242,134, 57,187, 83, 74,143,191, 38,199,151, 0, 62, 41,216,220, 76, 41,253,225, 13,164,203, 3,128, 75,193, +102, 34,165, 52, 86,172, 1,175,117, 63, 71, 23, 31, 50,124,157, 56, 90, 74, 80, 1,216,223, 27, 0,204, 42,155, 16, 10, 40, 65, + 88,192,152,135, 94,221, 58,193,193,201, 5, 48,170, 1,131, 26, 48,106, 0, 99, 30, 96,212, 32, 53, 33, 26, 48,228, 1,207, 78, +128,163, 84, 81,233, 28,235,178,128,136,125,232,208,200, 11,142,214, 74, 76,236, 21,224,176,241,100,196,230,205,167, 31,119, 4, + 48,200,164,180, 82,138,230,245,106, 97,229,230,188, 71, 71,111, 39,119, 1,128,160,134, 14, 39,155, 7,120,123,174,216,170,125, + 20,124, 63,189, 43, 0,116, 11,180, 62,209,204,223,213, 75,120, 13,171,175, 64,105,107,183,106,181, 8,127,119, 3,132,236, 88, +100,103,107, 16,251, 98, 27,108,221, 27, 51,188,128,182, 21,157,111,198, 98,198,231,179, 22, 75,213,217, 73,122,193,144,194, 59, +178, 25,172, 68, 46, 16,196, 93,208,229, 10,153,252,228,209, 31,113, 83,230,124, 55, 3,192,208,114,173, 67, 78,152,176,108,217, +138,122, 45,155,212,118, 74, 60, 48,145,228,102, 36,129, 99, 85,138, 94,239,182,132,141,111,128,144, 20,178,140,200,107,116,132, +141,125, 13,196, 93,217,137,168,107, 7, 73,171, 70,125, 21,191,238,146,125, 88,150,208,242,117, 36,173,186,180,105,182,167,134, +151,155, 43,165, 2, 4,129,130, 10, 60, 62,238,223, 25, 51,247, 62, 3,207,243,232,215,165, 85,135,197, 99,222,163,130, 32,128, + 82, 1, 47, 19,211,212,191, 95,127,212, 33, 50,157, 94, 55,197, 82,213,224,157,246,173,238,223,190, 86,219, 24,241, 27,154, 12, + 93,248,136, 0,151,139,213,185, 86,119, 78,253, 90, 27,248,165,170, 15, 15,169,227, 4, 62,234,228, 34,120,181, 25,205,110,216, +117,210, 49, 43, 37,110,216,129,109,107,251,175,219,176, 97, 7,128,177,226, 43, 70,132,136,183, 3,148,210, 55, 46,182,162,163, +163,227, 95, 71,108,121,120,120,180, 1,176,164,208, 67,131, 16,178,196,199,199,103,238,255, 58,170,175,244,245,178,120,158, 31, + 26, 27, 27,123,177, 60,206, 30, 61,122,184, 1,240, 41,198,233, 67, 8,241, 41,237, 88, 27, 27, 27,190, 69,139, 22, 81,199,142, + 29,139, 23,107, 72,229, 5, 87, 85,132,214,163,152,125, 19, 27,233, 18,114, 1,224,145, 9,149,246,149, 33, 63,173,145, 95,180, +101,254, 71,139,234, 86,179, 67, 78,158, 30,167,111, 69,129,231,141,224, 57,174,192,178,197,129,231,140,232,210,192, 1, 45,180, + 99,177,234,216, 99,112,188,176,176, 60,206,146, 48, 80, 97, 72,195,142, 3,247, 10, 2,149, 43,164, 76,150,159,167,189,211,148, +126, 13,152,137,189,234, 66, 99,224, 6, 6, 56,147,223,195,147,232, 38,147, 56,133, 63,135, 60,162,165,237,227,185, 10,243, 94, +142, 53,170,249,224, 30,157,172,168, 46, 11,198,212,103,200, 81, 27,241, 44,205,136, 68,109, 38, 20, 36,193, 36, 78,129,162,190, +135,187,171,234,143, 61,211, 95,216,179,217, 18, 39,150,147,201, 25, 14,188, 64, 89,154, 25,174,179,171,221, 73, 90,232,183, 85, + 94, 58,205, 84,150, 31,181,233, 28,100, 29,179,115, 52, 49,243,235, 2,167, 70,158,120,113,113, 11,146,111, 29, 67, 90,124, 20, +177,210,102,194,217,190, 38,186, 13, 29,132, 31, 6, 53, 69, 78,118, 14,216,132, 72,107,185, 84, 97, 83, 22, 39,229, 49,116,217, +226,239, 92, 37, 44,147,127, 63, 11, 63,188, 17, 26,157, 14,224, 57, 40, 37, 2, 8, 45,252,207, 8,222,104, 80,213,239, 59,125, + 60,128,235, 21,229, 61, 60,137,238,170,235, 68, 90, 67, 48,214,166, 70, 13, 8,112, 57, 44,153, 22,137,159, 0,103, 50,164,113, +151, 17,173, 41,193,165,170,148, 81,160, 61,122, 52,241,177, 48, 55,207,126,132,216,253,159, 33, 18, 74,234,220,242, 19, 12,249, +120,130,106,227,198,141, 61, 9, 33,227,138,251,168,253, 21,139,172,138,156, 34,231,127,149,211,218,218,186,122,181,106,213,230, + 26,141,198, 54, 50,153,204,217, 96, 48, 64, 16,132, 68,185, 92,126, 41, 42, 42,106, 65, 86, 86,214,243,127, 91,222,239,223,191, +111,178,216, 50,133, 83, 42,149,226,241,227,199, 79, 77, 21, 91, 37, 57,165, 82,233,246,203,151, 47, 99,239,222,189, 0,128,136, +136, 8,248,250,250,154,151,118,238,139, 23, 47,204,219,181,107,183, 29, 37, 86,244, 40,201,249,224,193,131,234,191,253,246, 27, +246,239,223, 15, 0,120,252,248, 49,252,252,252, 74, 77,207,229,203,151,217, 15, 62,248,160, 58,128,248,191,186,140,222, 6,145, + 85,252,251, 21,161, 21, 28, 28, 76,131,130,130, 72,201,223,165,224,153,151,173,188, 17,180, 60, 0, 60,171,108, 34,194, 19,233, +226, 6,174,210,174,231,246,175,105,163,148, 49,152,183,105,202,203,148,244,156,119, 36, 4, 2, 0,112, 20,140,173,133,252,234, +194, 97, 13,188, 50,114,181, 56,122, 35,238, 98, 88, 82,229, 76,164, 97,241,244, 12, 0,155,255, 53,148,196,111,216, 15,103,118, +239,158,209,181,254,228, 94,245,113,228, 74,212,100, 0, 21, 70,125,167,130, 0, 42,112, 69,206,239, 5, 93, 7, 64,120,117, 81, + 96, 1, 52,127,159, 80, 57,139, 86, 59, 66, 36, 25, 78,232,102,167,146,175, 30, 51,102,148,149, 49,229, 9,210,245, 50,188,204, +208, 34, 81, 35, 69,174,196, 9,113,143, 30,240, 12,193,153,138, 11, 23,217,148,211,218,216,202, 45,152,192, 78,227,221,179, 79, +126,149, 33, 39, 28,107,213,231, 91,155,212,115, 63, 70,113,121, 41,121,132,160,194,181,245,172,173,109,124,181,105, 81,108, 86, + 70, 42,108, 92,234,162,235,192, 30,248, 58, 40, 0, 57,217,121, 72, 73,191, 74,107,185, 90,145,232, 75, 59, 48,171, 91, 29,164, + 37, 37, 64,103, 4, 72,158, 46, 93,171,215,230,150,121, 31, 25,108,152, 52,117,218, 16,111, 87, 71,243,194, 73, 5, 84,224,209, +160, 78, 13,116,106,211, 28,103, 46,255,129,155, 15, 34, 32, 20, 76, 42,160,130,128,216,228,140, 36,173,129,223, 82,169, 27,202, +115,160, 70,109,169, 66, 12, 85, 24, 50,172,231, 76, 84, 60, 48,231,157, 90,150, 35,103,244,240,182, 52, 87, 16,104,141, 60,180, +122, 35,114,254, 88, 13,251,106,245,160, 82, 42, 73, 35,104, 36, 0,196,117, 11, 69,136, 40,134, 1, 3, 6, 40,147,146,146, 66, +130,130,130, 2, 58,117,234,164,106,221,186, 53,242,242,242,112,250,244,105,228,229,229,121,123,122,122,122,159, 62,125,186,239, + 59,239,188, 19,238,225,225,209,110,223,190,125,149,241,161,149,224,127,206,236, 2, 0,142, 16,130,130,125, 4,128,240, 58,235, +220,202,229,114, 68, 71, 71,191,113,203, 86, 92, 92,220,211,170, 88,182,114,115,115,101,238,238,238,112,116,116, 4,207,243,200, +203,203,195,225,195,135,145,149,149, 5, 65, 16, 96,102,102,134,111,151,109,194,163, 59, 33,184,126,253, 58,178,178,178,100, 21, +113,198,198,198,146, 6, 13, 26, 64,167,211,129,227, 56,104,181, 90,156, 61,123,182,104, 91, 34,145, 96,218, 55,203, 17,113, 43, + 4,119,239,222, 69,108,108,236,223,178,218, 72, 37,180,200,191,209, 26,186,177,188, 10,251,183,130,231,185,153, 27,183,238,190, + 58,115,236, 32, 76, 24,220,209,115,193,154,131, 29,195, 83,232, 86, 0, 8,112, 36,195, 62,108, 95,203,203, 70, 37,197,215, 59, +111, 1,148,206,124,221,235,133,166,209,136,186, 46,100,242,161,235,209, 33, 95, 13,106,132, 26,174, 86,190, 53,107, 18,121,100, +164, 9,107, 10, 10, 28,108, 45, 20,254, 65, 13, 29, 78, 66, 16, 96, 99,169,168, 13,158,131,141,133,194,191, 91,160,245, 9, 0, +176, 81,201,106,151,102,249, 42, 11, 77,189,100,163, 85, 10,201,104,243,198,174, 94,195,123,118, 50,235,222,179,175,153,133,148, + 67,218,245,211,200,150,122,192,104,231, 13,157, 49, 29,177,207, 35,249,115,215, 30,198,165,230,232,166, 84,152, 76,138,139,113, +207, 31, 59, 86,175,223,201, 54,245,216,172,228,234, 35,118,250, 48, 16,152,156, 29,125,146,204,157,154,153,221,120,246, 60, 87, +160,127,182,232,148, 68,118, 86, 86,148,145,135,171,134,151, 88, 70,158,255, 21, 51,186,213, 67, 70,122, 50,180, 6, 14, 89, 26, +206,224, 98,163, 84,232,158,135, 66,103,224,160, 55, 10,144,218,184,227,244,213, 7,169,130,209,120,162, 44,206,200, 84,122, 23, +128, 69,241,125, 53, 29, 73,131,233, 86,102,119, 97,212, 32, 58, 54, 30, 91,131,175, 54, 42, 56,174,234,149, 92,224,242,135,159, +139, 89,178, 8, 69,235,170, 56,193,215,113, 38,205,204,148,178,159,150, 76,254, 32,224, 93, 63, 59,133, 16,123, 21, 68, 48,192, +156,151, 64, 35,231, 97,237, 89, 3,130, 62,135,170,181,218,204, 48, 64,140,244, 46, 66, 68, 49,212,174, 93,219,197,218,218, 58, +108,234,212,169,118,125,250,244,193,161, 67,135,144,157,157,141, 45, 91,182, 96,197,138, 21,152, 63,127, 62,140, 70, 35, 54,110, +220,168, 58,112,224, 64,179,181,107,215,198,122,123,123,215,141,142,142, 78,172,168, 79, 9, 64, 1, 64, 90,208,118, 17, 0,194, +241,227,199,209,189,123,119, 28, 63,126, 92, 40,216,199, 19, 66,140,148,210, 42,173, 39, 42,151,203, 33,151,203,145,149,149,245, + 70,196,150, 84, 42,133,133,133, 5,228,114, 57,114,114,114, 42, 45,182, 56,142, 99, 99, 99, 99,145,149,149,133, 78, 61,123, 98, +249,194,133,104,223,190, 61, 58,117,234, 4, 74, 41,206,158, 61,139,142, 45, 3, 49,232,253,118,120,248,240, 33, 56,142, 51, 41, +189,137,137,137, 72, 74, 74, 66,215,158, 61,177,105,237, 90, 52,111,222, 28,254,254,254,224, 56, 14, 33, 33, 33,232,223,165, 37, +148,189, 59, 34, 34, 34, 66,172,212, 38, 90,179,222,148,143,214,107, 35, 52,153, 94, 11,112, 36,199, 6,119,105,214,163,103,171, + 0,108,218,115,238,187,128, 0,178, 27, 0,236, 45, 21,223,126,212,190, 6,194, 99, 50,112,238,110,252,177,240,148, 55, 51, 91, + 67,224,225, 96,111,165, 2, 88, 57, 52, 6,129,179,122,134, 10, 29,152, 5, 74,161,106, 51, 29, 31,246, 12,247,108, 30,224,233, + 89, 56,235,208,162,251,143, 24,246,224,169, 87, 83,127, 23, 47,240, 70,128, 55,194,106,208, 78,224, 27,243, 10,211,209,170,186, +226,204,244, 41,147, 91,116,235, 61,208, 76,174,178, 6,159,253, 18,198,196, 7, 72,123,114, 17,121, 42, 95, 36, 70, 63,195,222, + 83,215,179,158,196,166,101, 51, 12, 78, 39,101,233,190,140, 76,167,185, 21,241,106,141, 88, 56,119,214,148,160,189,187,247, 88, + 42,106,180, 34,145,171,187,103,201, 37,156,194,209,167, 49,163, 86, 58,208,239,183,236,177,202,211, 99, 81, 69, 60,234,188,236, +131,103, 79,159, 28, 84,171,122, 43,203, 23, 55,131,161,209,234,160, 51, 2,117,155,181, 3,207, 83, 57, 97,136, 96,197,178, 36, + 57, 45, 3,196,200, 39, 93,186,247, 34,225,242,189,103,172,206,178, 98,238, 87,212, 61, 97, 63,239,217,174, 33, 96,212,224,253, + 54,245,176,124,199,185,207, 0,140,120,189, 66,206,183,104, 81,160, 85, 93, 39,178, 30, 64,171, 91,135, 87,212,110,210,123, 18, + 42, 99,209, 10,116, 36,221, 2,107,186,253,186,252,219,233,118,246, 30,190, 44, 17,140,160, 46,245,129,236, 88, 74, 98,175,194, +218,189, 57,120,183,150,216,184,106,105,174, 32,208,221, 85, 9,109, 33, 66,196,219, 12,173, 86,123,112,241,226,197,118, 61,122, +244, 40,180,200,224,234,213,171,216,188,121, 51,204,205, 95,125, 79,118,239,222, 29,148, 82,187,121,243,230, 29, 4,240,110, 89, +156, 45, 91,182,236,185,106,213,170,248,134, 13, 27, 62, 43, 16, 91, 50, 0, 76,104,104, 40,243,242,229, 75, 98,107,107, 75,221, +220,220,140,241,241,241, 2, 0,254,227,143, 63,102, 45, 44, 44,106,229,230,230, 94,168,170,208,146,203,229,111,196,103, 75, 42, +149,130, 16, 2,185, 92, 14,153, 76, 6, 74,105,165,196, 22,207,243,146,227,199,143,227,214,173, 91,152,223,176, 33, 38,187,187, +195,206,206, 14, 33, 33, 33,160,148,194,220,220, 28,233,233,233,216,189,123, 55,222,123,239, 61,112, 28, 39, 51,133,119,255,254, +253,184,125,251, 54,190,105,210, 4,147,173,173, 97, 97, 97,129,179,103,243, 71, 3, 21, 10, 5,162,163,163,113,246,236, 89,180, +107,215, 78,172,212,175, 9,147, 43, 79, 59, 66, 36,196, 25, 46, 6,189, 6,148,163, 0,129, 91, 64, 0,145,133,135, 83, 67,101, + 47,202, 48,152,181,106,235,177,160, 31, 39,245, 36,163,123, 53,114, 91,240,235,249,113, 0, 48,178,159,159,187, 74, 33,193,202, + 35,225,148, 97, 48,235, 77,100, 48, 32,128,200, 24, 6,227, 58, 53,247, 71,124,166, 30,145,241,153,191,135, 83,106,210, 80,207, +185, 31, 63,196,182,163, 33, 47, 87,108,211, 62,162,148,194,198, 66,225, 63,236,126,164,215,175,199,111,199, 44,219,171,125, 68, + 5, 10, 27,149,180,246,136,135, 45, 43,156,117,216,212, 75, 54,122,230,244, 47, 91,246, 26, 49, 85,201, 61,218, 7,125,228, 41, + 8, 6, 13,178, 13, 50,100,178, 46,136,141,137,193,247, 27,143,189,204,206,211, 15, 10, 77,174,156,192,140, 72,165,185, 1,142, +164,207,247, 95,127,117,102,225,183,243, 44, 52,207, 66,114, 89,194,105,216,106,109, 37,223,206,255,145,228,232,244, 3, 35,211, +105, 78, 69, 60, 58, 75, 44, 90,188,108, 85,208,168,161,125, 31,249,249,182,181,231,227,159,219,107,179,179,147,119,158,188,237, + 82,208, 83, 36, 0, 16, 25,155,134,148,172, 60,142,231,140, 23, 44,165, 88, 16,102,138,117,176, 0, 53,156,137, 99,159,214,245, + 63,112,180,148, 65,147,155, 9, 39, 75, 41,186, 52,175,249, 65, 13,103, 50,253, 89, 18, 77,169,186,208, 50,130, 26, 53,184,182, +232,189,218,148, 55,214, 6,111,132,225,254,246,202, 91,198, 8, 38, 79,104, 99, 97,101,171,127,193, 32,207, 28, 48,115, 0,177, +242, 6,172,125,136,180,206, 64,196, 63, 11,227, 62,251, 96,104,218,243,168,216,159, 29,204,240,131,248, 10, 17, 33,226, 85, 68, + 71, 71,127, 52,115,230,204,203,205,155, 55,119,118,112,112, 64,189,122,245,112,244,232, 81, 76,157, 58,181,232,152,134, 13, 27, +130, 82,138,244,244,116, 44, 94,188, 56, 49, 62, 62,254,163,242, 56,195,194,194, 30,109,219,182,173, 77, 64, 64,128, 65, 38,147, +101, 2, 80,100,102,102, 42,211,211,211,137, 86,171,133, 32, 8,130,181,181, 53, 31, 31, 31,111, 28, 52,104,144,238,202,149, 43, + 53,243,242,242,162, 95,199,162,229,233,233, 25,154,150,150,150, 69, 8,121,237,208, 15,133, 34,203,193,193,193, 49, 55, 55, 87, + 0,144, 81,149,208, 15, 28,199,161, 73,147, 38, 56,117,241, 14,142,159,187,130,236,248,199, 24, 55,234, 35,212,171, 87, 15,167, + 78,157,170,114,153, 53,104,208, 0, 39,207, 94,198,229, 91,247, 16, 29,113, 31,159,141, 27,133,186,117,235,226,228,201,147, 98, +133, 54, 29,193, 37,124,179,130, 75, 10,173,118,193,193,193,133, 61,243, 63,201,215, 58,142,164,129, 91, 45,249,246,121,221,106, +214,145,118,154, 7, 34, 53,195, 62,223,147, 45,103,125,191,250, 81, 61,103, 50,244, 65, 82,197,179,195, 94,177,106, 37,209,176, +186, 78,100,215,189,135,181, 63,120,191,185, 39, 54, 29, 85,205, 1,128,129,173,171,227,198,147, 20, 92,143, 72,222, 21,150, 76, +195, 94, 55,215,245,156,137, 10, 20,187, 22,127,222,171,157,183,135, 11, 54, 31,186, 12, 66,112,208,164, 6,151, 82,218, 60,192, + 27, 43,182,149,156, 97,232,226,181,108,175,246,209,169,208,236,110, 0,208,185,142,249,137,166, 53,109,189, 42,178,108,152,201, + 37, 99,186,245,253, 80,201, 69, 28, 5,162,206,130,112, 58,104, 12, 2, 18, 82,115,160,182,246, 68,200,213,123,154, 44,173,126, + 82, 88,114,213,172,120,225, 41,244, 89, 67, 87, 18,147,155,167,113, 85, 57,214,212,178,140, 32,228,234, 40,110,132, 71,101,135, + 37,208,199,166,112, 68, 70, 82,253,187, 30,164,245,250,173,123,231, 74,101,242,129, 44, 1,113,178, 49,119, 92,255,227, 55,176, +180,180,128,160,207, 5,242, 82,208,231,211,239, 83, 30,196, 25,170, 3,128,159, 3,177,104, 83, 67,182, 85,194,144,216,223,159, +234,103, 87,104, 94, 53, 98,236,208, 46, 13,165,130, 62, 15,159, 47,222,131, 13,211,123,225,195, 14,117,164,193,127, 68,140, 5, +176,160,170,101, 77,121, 14,212,168,193,187, 95, 93,124, 68,128,203, 20,104,117,107,239,183,181,129, 59, 38,115, 52, 38, 68, 42, +113, 37,117,234,123,153,203,132,216, 63, 32,196,254, 65, 89,207,150, 32, 94,109, 8,113,105, 66,127, 90, 50, 63,111,211,166,205, +167, 5, 6, 95, 87, 20, 42, 67,132,136,255,175,160,148, 62,179,177,177,233,218,189,123,247,115,167, 78,157,178, 11, 12, 12, 4, + 0,220,186,117, 11, 0,208,164, 73, 19,248,249,249, 33, 41, 41, 9,131, 7, 15, 78, 77, 72, 72,232, 74, 41, 45,215,231, 55, 39, + 39,231,249,254,253,251,157,243,242,242, 26,206,158, 61, 59,217,219,219, 59, 91,171,213,146,204,204, 76,129,227, 56,216,218,218, +202, 27, 54,108,136, 22, 45, 90,228, 94,189,122,181,218,203,151, 47,115, 0, 68, 85, 37,253,189,122,245,194,197,139,249,147,246, +222, 68, 92, 45,153, 76,134,192,192, 64,247,103,207,158,197, 21,220,159,107, 85,184,167, 69,191,239,221,187,135, 11,119, 98, 33, +209,107, 32, 79,137,199,181, 67,251,209,115,204,120,112, 92,213,189, 24,238,221,187,135,195,103,175,193, 92, 33,193,227,199, 97, +216,191,127, 63,198,141, 27,247, 90,156, 85, 68,185, 90,228, 95, 94,239, 19, 0,108, 44,211,162, 21, 20, 20,116, 1,165, 68,181, +173, 89,147,200, 21,185,152,215,165,137,251,180,129,173,106,178,198,236,120, 8,188, 0, 86, 10, 56, 57, 88, 97,251,246, 93,213, +119,237,217,115,181,129,187,116,149,192,113,179, 30, 36, 81,117, 37,210, 53,239,199, 61,151, 7,110,159,210, 78, 50,174, 91,109, + 59, 0,144, 73, 24,172, 60, 26,198, 1,152,247, 58, 25,126,215,131, 40,115,141, 24,237, 98,111, 61,103,230, 39, 65,118,237,154, +248,225,194,245, 80,172,218,127,245,162, 60, 25,219, 76,190,113,130, 17, 37,245, 83,105,179, 14, 33, 84,236,119,201,243,212, 69, +102,110, 11, 67,212,121,192,160,133, 86,103,192,203, 52, 30, 47,211,181,144,168,100,184, 21, 17,171,177, 79,196,177,170,230,153, + 16, 66, 90,213, 80,186,205,253,110,153,135, 86,147,203,101,103,164,114, 50,249, 53,169,202, 76,145, 80, 25,158,171,177, 84,219, +182,186,172, 49, 32,176,114, 37, 85,127,245,197,112,243,184,240, 83,168,197,196,131, 80, 10,179, 58, 65,176, 52, 99,101,173,125, +100, 49, 0,224,227, 98, 45, 95,252,245, 84,235, 73,211,191,174,208, 7, 44,128, 16, 89,189,166, 46,147, 2,189,109,113,241,246, + 35, 92,124, 16, 29,118,241,214,227,186,237,235,185,193,207,195,102, 98, 0, 33,139,194,105,229, 45,164,249, 5,195, 1, 70,109, +209,172,195, 0,103, 50,164,233,192,217,165,206, 54, 44, 11, 62,128, 16,193, 83, 16,150, 5, 8,147, 63, 3,242,229, 31,144,216, +212,160,187,246, 30, 86,111,222,188,237,155,240, 20, 42, 90,177, 68,136,168, 0,153,153,153,247, 85, 42, 85,151,250,245,235,111, +249,252,243,207, 45,135, 14, 29,234, 54,106,212, 40, 6, 0,146,146,146,132, 21, 43, 86,196,255,244,211, 79, 89,169,169,169, 35, + 12, 6,195, 3, 83, 58,190,132,144, 43, 63,255,252,115,202,165, 75,151,234, 54,107,214, 76,209,184,113, 99,193,214,214, 86,162, + 80, 40,120,189, 94,175,141,136,136,224,159, 61,123,230,154,153,153,249, 20, 64,100, 85,134,245, 11,172, 87, 11, 88,150,157, 75, + 41, 13,124, 19, 62, 90, 42,149,202, 13,192, 83, 66, 72,173,202, 14, 27,254,169,193,150, 72,144,145,145, 1,117, 98, 24,148,177, + 79, 80,223,156, 65,128,173, 5,172,172,172, 94, 75, 20,101,101,101, 1,121,113,184,124,249, 30,192,113,176,182,182,134,181,181, +245,223, 46,180,202,210, 34,255, 5,148,156,105, 88, 80,111,203,247,209,170,235, 68,198,217,202,177, 98, 76, 80, 77,153,143,151, + 7,116,177,183,112,239,101, 46,102,189,211, 44,156, 85, 88,106,199,124,212,171, 73,223,254,213,208,174, 69, 83,226,227,106, 61, +113,209,143,235, 62,173,235, 76,166,134, 37,209,149,166, 36, 42, 44,153, 62,175,227, 68, 54,159,191, 31, 59,214, 67,165,129, 32, + 80,156,127,144,128, 7, 81, 25,155, 31, 38,211,231,149,201, 96, 93, 55,210, 81, 2,102, 15,165, 84,105,109,110,158,211,176, 65, +109,135,142,239, 54, 96,186,182,109, 2, 25, 11, 92,190,113, 15,147,127, 60,120, 77, 16,104,208,109, 19,135, 13,243,103, 24,190, + 42,160,242,103, 24, 26, 95,153, 97, 72, 41,165,249,179, 14,203,119,251, 98, 89,146,168,142,190,233, 34,181,247,133, 38,242, 60, +162, 50, 4, 68, 39,231, 32, 91,226, 2, 93, 92, 28, 64,133,152, 16, 74,171, 92,171, 29, 28, 28,156,170, 7,248,213, 92,189,117, + 63, 12,234, 44, 60, 15,217,130,220,140, 4,124,187,254,104, 77, 15, 15,143,182,177,177,177, 23, 42, 81, 97,252,206, 29,219,229, + 4, 10,176, 82, 5,130,215,238, 69,170,189, 25, 28, 84, 50, 8,154, 20,140,153, 52,212,186, 91,167,161,214, 0, 16,253,248, 46, +188, 85, 26,147,120, 13,246,232, 59,176,189,191, 13,140, 26,108, 61,121, 87,203, 0, 93,183,157, 14,139,108, 95,219, 70, 57,176, +149,183,237,130,248,204,126,168, 98, 80,209, 66,139, 86,145,133,175, 10,179, 13,247, 81,202,215,113, 36,145,123,174, 36,155,247, +239,212, 88, 37,147, 16, 66,115,227, 64,205, 28,176,110,235,190, 92,185, 17, 27,197, 38, 84,132, 8,211,160, 86,171,111, 19, 66, +234,125,249,229,151, 67,190,250,234,171, 54,230,230,230,213, 1, 32, 47, 47,239,185,209,104,188, 8, 96, 87,101,102, 7, 22, 8, +167,167,132,144,231,145,145,145,206, 59,118,236,176, 1,160, 44,248, 91, 11, 32, 19, 64,210,235,204, 56, 44, 20, 85,132,144,185, +111,208,210,113,188,128,179, 86, 85,206,103, 24,134, 39,132,128, 16, 2,133, 66,129, 75,151, 46, 97, 64, 80, 39, 60, 12,206, 68, +160,141, 5,154,141, 24,131, 61,103,206,128,101, 89, 16, 66,192,178,108,165,218, 17,137, 68,130,203,151, 47,227,195,193,253,161, +144, 0,214,214,214,248,242,203, 47,113,228,200, 17, 72, 36,226, 42,125,149, 40,231,141,133,130,203,244, 56, 90, 4, 11,206,108, +249, 94, 6,222,136,223,182, 44,197,177,208, 92,253,227, 20,204,242, 79,193,138,253,200, 17, 82,126,220, 54,246,204,229,208, 31, + 62, 30,212, 67,245, 94,251, 78,120,175, 93,123, 73,221,166,109,231, 0, 88, 89,172,193,238, 88, 94,172, 13, 94,192, 55, 27, 79, + 62, 26,179, 39, 36,130,192,144,131, 65,157,155, 82, 94,192, 55, 21,136,128, 63,113, 90,155, 89,236,185,124,245,170, 45, 12,185, +136,186,251,187,178, 90,245,154, 0,111,192,211,167, 79,240,211,214, 67, 66,200,141,199,219,245, 28, 62,143, 76,167,121,166,114, +230, 43, 43, 14,214,230,114,255,110,129,214, 39, 4, 80,216,168,100,181,169,192,195, 70, 37,173,221,185,142,249, 9, 74, 41,181, + 52,147,214,166,188,177, 66, 78,141,158,219,176,245,151,205,203, 70,142, 28,105,158, 26,155,136,248,236, 80,228,202,221, 97, 84, +121, 34,242,238, 69,141, 90,199, 85,216,136,151,119, 63, 83, 83, 83,147,111, 95, 79,199,158,245, 11, 97,212,235,144, 28,155,175, + 85,227, 83,179, 97,229,224,126,181, 50,156, 6, 78,200,234, 59,116,180,204,204, 18,102, 31,246,237, 33,143, 76,211,161,145,155, +101,126,101,202, 77,193,195,179,151,209, 46, 47, 95,183, 61,123,201,192,187,129,155, 73,233,180, 84,202, 62,239,214,216, 29,207, + 99, 18,112, 41, 44,110,235,179, 52, 26, 95,195,158,108,141,140,207, 28,219,235, 29, 47, 44, 63, 18,254, 89, 89,226,168, 44,206, + 0,103, 50, 4, 64,171,124,103,120, 13, 40,208, 42,192,153, 12, 49,101,166, 97,105,156, 18, 25, 62, 88,118, 34,122,246,190,155, +169,189,166,125,208,218,170, 69,139,238,114,112,122,228,104,116,198,240, 12,154,253, 58,101,244, 26, 61, 37,145, 83,228,252, 79, +114, 22,136,158,237, 5,159, 55,201, 25,143, 18,113,157, 94, 55,239,197,135, 9, 41,165,146, 2,107, 86,185,206,240, 21,113, 22, + 31, 38,164,148, 30, 47,176,102,149,107,213, 42,201, 41, 8, 66,124,147, 38, 77,236,122,246,236, 9,158,231,241,228,201, 19, 68, +191,124,137,142, 99, 63,131,141,141, 13, 46,222,191,143,199,143, 31, 99,238,220,185, 48, 26,141, 56,124,248,112,108, 69,156, 18, +137,196, 80,179,102, 77, 89,239,222,189,193,113, 28,158, 61,123,134,184,184, 56, 76,158, 60, 25,214,214,214,184,125,251,118, 17, +103,106,106, 42, 36, 18,137,225,239,168, 75,255,117,148, 38,178,202, 23, 90, 0, 15,222,136,172, 51,243,176,242, 18, 12, 6, 35, +106,135, 37,211, 23,197,254, 95, 87,223,158,252,118, 63,244,209,243,219,127,188, 39, 71,242,131,252,115, 42,129,136, 84,154,208, +212, 83,146, 3, 67,142, 21,158,157,192,139,164,156,220,136, 84,154, 80,217,204, 81,129, 39, 48,168,129,132, 91,184,114,241, 2, + 66,174,221,195,205, 7,143,248, 43,183, 35,246, 48, 2,190, 9, 79,165, 79,170,160, 78, 97, 17,180, 28,195, 31, 60,245,106,234, +231,236, 5,158, 3, 21,140,176, 30,180, 11, 35,194, 91,120, 53,173, 97,227,149,111,201, 50,194,246,147,223,129,101,202,114,249, +110,198, 24, 54,182,170,174,232,151,147,153,246, 78,135,182,239,154, 91,215,233,134,212,167, 17,120,114,239,178,230,118,104,228, +149,155, 49,134,215,178,150,184,187,187,183,233,208,214, 31,131,198,204,132, 65,157,133,103, 33,191, 32, 55, 61, 17,151,174, 90, +224, 81,118,246,187, 0, 76,182,104, 93,137, 54,214, 5,128, 86, 62,178, 24, 75,232, 92, 62,234,209, 19, 10,162,133,160,203, 6, + 81,167, 34, 50, 78,159,213,111,253, 75, 30, 0, 84, 10, 34, 49,167, 89, 86,166,240, 6,120,219,251,170, 88, 35,182,157, 9,131, + 32,228, 47,223, 36, 8, 88,183,237,247,200,177,223,124,216, 8, 1, 94,182, 13, 8, 33,164, 50, 38,127, 66,209,250,230,158,175, +107,107,207,205, 1, 4, 3, 46, 79,180,171,221,122,101,122,235,170, 90,198, 30,196,209, 56, 0, 99,235,184,145, 13, 19, 87,158, +156,211,228, 76,120,171, 41,159,244,178, 2, 21, 23, 96, 23, 33, 66,196,223,143,220,220,220, 49, 35, 70,140,216, 32,149, 74, 29, + 1, 16, 65, 16, 32, 8,130,228,135, 31,126,144,242, 60,207, 48, 12,195,179, 44,203, 29, 63,126,220,200,243,124,138, 86,171, 29, + 83, 17, 39,199,113,145,227,199,143,175, 89,209, 12,197,221,187,119, 67, 34,145, 24, 56,142,139, 20, 75,162, 98,145, 85,252,187, +184,149,171,236,198,131,226,235,150, 31,206,155, 7,128,128, 98,126, 9,145, 5, 0,184,159, 70,227,235, 58,145,201,117,155,182, +157, 87,120, 78,101, 19,167,229,249,254, 77,235,249,237, 6, 0, 29,229, 63,172, 74, 6,179,117,154,129, 13,155,190,187, 71,160, + 84,194, 81,186,153, 17,112, 64,203,225,161, 41, 51,237,202, 66,124,114,230,237,194,133,162, 5,208,255, 13, 23, 22,132,113,160, +148,210,162,225,194,165, 74,164,102,233, 42,140, 3,117,249,185,174, 83, 83, 47,217,232,211,127,220, 29,195,243,212,133,101, 73, +162, 70,207,109,120, 93,145, 5, 0,177,177,177, 23, 2,156,200,233,251, 13,156, 59, 59,168, 10,172, 92,106, 32, 85,141,211,177, +201, 57, 23,170,194,153,145,103,236,245,213,138, 35, 71,229, 82, 86, 2, 74,243, 3,138, 82, 10,173,129, 79, 47, 20, 99,245,237, +137,219,151,135,185,221, 44, 75,162, 43,226,187,254, 56, 97,249,160, 69,103,167,134, 69,101,108,126,145, 65, 67, 1,224, 69, 6, + 13,173,101, 79,230, 68, 38,230, 76, 13,141,206, 88, 90, 89,191, 10, 74,112,169,233,160,121,127,218,247,186,247,243, 97, 60,189, + 7,160, 79, 93, 39,210,105,208,148,159,166, 16, 2,113,249, 9, 17, 34,254, 31,161,208,170,197, 48,204,130, 55,200,121,156, 16, +210, 29,192,211, 74,156,115, 29, 64,189, 55,156,183, 52, 0,105, 98, 41,191,209,123, 90,249,128,165, 97,201,116, 29, 76, 88, 52, +218,212,227,202, 60, 63,158,158, 5, 96,255, 58, 25, 44,224,176,123,147, 55,237,126, 18,157,243, 87, 20, 70,129,168,250, 75,124, +125,194,147,105, 23, 0,240,245,245,165, 79,159, 62, 5,165,244,181,156, 10, 31,166,208,123, 40,177,148, 67,105, 98, 27, 64,107, + 83,248, 34, 82,233, 55,192,159,135,134,159,166,209,111, 1,124, 91,165, 60, 87, 49,242,187,201,117, 43,153,158, 1, 42,142,206, + 47, 66,132,136,183, 83,108,253, 5,156,199,197, 59,251,246,161,188,128,165,140,120,123,222, 62, 60,121,242,132,188,174,200, 18, + 33, 66,132,136,183, 24,252,107,126, 74,213, 80,175,249, 17,241,150, 8,174,146,251, 68,161, 37, 66,132, 8, 17, 34, 68,136, 16, +241,134, 68, 86, 73,177, 69, 0,116, 44, 85,154, 87, 98, 54, 1, 33,164, 99,101, 19, 84, 17,191,200, 41,114,138,156, 34,167,200, + 41,114,138,156,111, 31,103, 69,220,111,221,108, 70, 90,204,201,249, 77,127, 0,116, 20, 57, 69, 78,145, 83,228, 20, 57, 69, 78, +145, 83,228,124,155, 63, 0, 70,151,181, 45, 14, 29,138, 16, 33, 66,132, 8, 17, 34, 68,252, 69, 16, 99, 3,137, 16, 33, 66,132, + 8, 17, 34, 68,188, 30, 42, 92, 84, 90,132, 8, 17, 34, 68,136, 16, 33, 66, 68, 21, 80,225,162,210, 34, 68,136, 16, 33, 66,132, + 8, 17, 34,170,134, 42, 45, 42, 45, 66,132, 8, 17, 34, 68,136, 16, 33,162, 98,148, 23, 25,158, 84,114,197, 19, 17, 34, 68,136, + 16, 33, 66,132, 8, 17,229,224, 79,145,225,131,131,131,105,241,111, 17, 34, 68,136, 16, 33, 66,132,136,191, 19,111,171, 22, 17, +135, 14, 69,136, 16, 33, 66,132, 8, 17, 34, 94, 3,165,249,104,137, 66, 75,132, 8, 17, 34, 68,136, 16, 33,226, 13,160, 60, 31, +173,194,128,165,237, 10, 76,117,237,196,219, 37, 66,132, 8, 17, 34, 68,136,248, 7,240, 86,106,145, 34,103,248,224,224, 96, 26, + 20, 20, 68,196,114, 22, 33, 66,132, 8, 17, 34, 68,252, 19,120, 27,181,136, 56,235, 80,132, 8, 17, 34, 68,136, 16, 33,226,117, +196, 84,177, 89,134, 37,183,197,181, 14, 69,136, 16, 33, 66,132, 8, 17, 34,222,144,224, 42,185,143,249,139, 47,216, 81,228, 20, + 57, 69, 78,145, 83,228, 20, 57, 69, 78,145,243,255,139,200, 42, 41,182,196, 89,135, 34, 68,136, 16, 33, 66,132, 8, 17,175, 1, + 83,102, 29,138, 16, 33, 66,132, 8, 17, 34, 68,136,168, 2, 8, 33,163, 9, 33, 61, 10,126,247, 40,110,213, 18, 45, 90, 34, 68, +136, 16, 33, 66,132, 8, 17,175, 1, 74,233, 70, 66,136,107,129,192, 10,166,148, 38,136, 66, 75,132, 8, 17, 34, 68,136, 16, 33, +226, 13,160,132, 95, 86, 16, 33,164,104, 56, 81, 20, 90, 34, 68,136, 16, 33, 66,132, 8, 17,175,129,242,124,180, 8,128,142,101, +156,116,182, 18, 74,174, 99, 21, 18,117, 86,228, 20, 57, 69, 78,145, 83,228, 20, 57, 69,206,255, 95,156, 21,113, 87, 70,127,252, + 91, 80, 90, 88,135, 34,241, 69, 41,253,203, 62, 0, 58,138,156, 34,167,200, 41,114,138,156, 34,167,200, 41,114,254,127,253,188, +241, 89,135,141, 9, 49, 19,141,136,111, 31, 8, 33,206,132, 16,103,241, 78,136, 16, 33, 66,132, 8, 17,166, 91,184,222,168,143, + 86, 0, 33,159,124, 18,232,184,190, 30, 33, 86, 15, 40, 85,151,119,172,147,147,211, 6,149, 74, 53, 84,173, 86,231, 17, 66,132, + 98,166, 54, 0, 40,190, 46,208,179,228,228,228,214, 21, 93, 91,161, 80,172,112,118,118,254, 36, 55, 55, 87, 77, 8,161,132, 16, + 16, 66, 10, 51,252,202, 55,207,243,177,169,169,169, 77,254,211,133, 8,176, 14,206,206, 55,164, 44,235, 94,217,115,121, 65,120, +145,148,152,248,110, 37, 42,204, 66, 66, 48,173,224,247, 18, 74,233,204,183,240,169, 96, 77, 57, 44, 16,176,140, 0, 6,241, 12, +243,153, 20, 88,163, 19,132,245, 5, 21,151,175,234,165,245, 55, 72, 77, 66,209,128, 16, 88, 83,138, 44, 74,112, 79,222,140, 70, +254, 67, 47,135,190, 82,169,180,151,149,149,149, 69, 90, 90,218, 5, 0,187, 1, 12,182,183,183,111,155,157,157,157,107, 52, 26, +143, 80, 74, 15, 86,133,187, 77, 67, 50, 93, 46,147,126,172, 53, 24, 23, 95,190, 75,127,105,215,152,216,115, 2, 22, 41,101,146, +214, 58, 61,183,228,210, 61,186,185,146,105, 37,249,143, 66,225,171,163,242,235,137,237, 55,177,220, 1,224,176,173,173,159,194, +209,234,156, 84,206,190,200, 76,202, 29,218, 63, 57,249,101,255,215, 40,247,127, 35, 28, 29, 29,135, 51, 12,243, 29,165, 20, 60, +207,207, 74, 75, 75,219,242,134,234,213, 44, 0, 54, 5,155,153,148,210,239, 94,147, 47, 26,128, 87,193,102, 12,165,212, 91,108, +218,171,124, 47,215, 29, 58,116,104,108,251,246,237,177,124,249,114,172, 91,183, 46, 42, 37, 37,101, 17,128,173,148, 82,253,223, +205,243, 54,226,141, 9,173,186,132,116, 31,222,165,249,134, 9, 3,187,147, 73,195,103,171, 43,120,152,127,238,218,181,235,135, + 91,183,110,149, 70, 68, 68,152,249,248,248,128, 97,152, 34, 33, 84,252,125, 89,173, 90, 53,161,162,107,179, 44,187,178, 79,159, + 62, 35,246,239,223,175,186,125,251,182,170, 78,157, 58, 69,124,130, 32,160,228,251,215,199,199,167, 92, 62,107,107,235, 91, 44, +203,122,148, 38,210,202,250,205,243,124,108, 90, 90, 90, 19, 19, 42, 99, 23, 0, 51, 76,184,165,139, 40,165,167,202, 59, 64,202, +178,238,241,241,241, 78,149, 45, 43, 79, 79, 79, 67, 37, 30, 30,103, 66, 48, 77, 16, 40, 3, 0, 12, 67,166, 43,149,202,245, 90, +173, 54,166,240,255,130, 50, 75,170, 76, 26,220,221,221,251, 81, 74,199, 0,160,132,144,141,113,113,113, 7, 42,115,190,149,149, +213, 45,185, 92,238, 33,145, 72, 72,105,229, 82,114,155,231,121,106, 48, 24, 98,211,211,211, 43, 45,176, 47, 0,164, 43,208,134, + 99,217, 73,246, 14, 14,173,111,159, 62,109, 30, 24, 24,200,176, 44, 59, 19,192,250,215,121,110,244, 55, 72, 77,222,136, 1, 26, +163,162,135,194,123,190,159, 46,122,126,132,153, 84,119, 76,127,131,236,251,187,197, 22, 33,100,216,176, 97,195, 38, 45, 94,188, +216, 65, 46,151, 51,123,247,238,245,155, 60,121,114,223,229,203,151, 59, 12, 28, 56,208, 82,175,215, 11,211,167, 79, 15, 32,132, + 56, 81, 74,215, 86,134,187, 69, 67,242,142,191,143,235,220, 9, 67,223,195,212,133,187, 39,180,170, 71, 82,205,204,101,235,250, +181,174,105, 83,183,186, 45,190,222,112,229,115, 0,155, 43,145, 86, 34,145, 72,222,117,115,115,243,213,106,181, 92, 65,231,141, + 22,123, 39,228,223, 95,189, 94,159,158,158,190,239,117,239,205, 84,165,178,121,115, 27,139, 51,243,134, 12, 51,203,206, 72,119, + 94, 25,124,244,254,126, 56,213,239, 15, 68,189, 77, 13, 2,195, 48,223,197,197,197,185, 82, 74,225,234,234,250, 29,128, 45,111, +136,218,166,240, 61, 76, 8,177,121, 3,124, 94,197,248,188,222, 64,221, 87, 74, 24,102,188, 92, 42,237,204,243,124,189,130, 58, +244, 64,111, 52,158,225, 4, 97, 13,165, 84,251, 22,235,128,105, 99,199,142,237,244,213, 87, 95,249, 76,155, 54, 13,211,166, 77, +171,182,105,211,166, 13,223,127,255,253,116, 66, 72,125, 74,105,238,223,204,243,159,183, 96,253, 37, 66, 43,128,144, 38, 29, 26, +212, 58, 48,113,248, 32, 8,251, 87, 16, 12,159, 93,174,200,122,183, 73,147,143,183,110,221, 10, 0, 24,218,171, 23, 58, 55,107, + 6, 75, 11,115,200,229,249,201, 33,148, 64, 38,149,161,247,228, 47, 76,201,220,146,190,125,251,126,176,127,255,126, 11, 0, 88, +183,110, 29,250,246,237, 11, 59, 59, 59,168, 84, 42,200,100, 50, 72,165,210, 87,190, 77, 16,110, 30,113,113,113, 78, 74,165,178, + 72,248, 9,130,240,202,167,216, 56, 53, 56,142,131,175,175,175,169,183,107, 70, 86, 86, 86,155,188,188,188,114,199,116,171, 87, +175, 14, 0,167, 76, 33,252,238,219,111, 32,112,121,144, 72, 0,142, 3,116, 6, 6, 66, 41,125,123, 55, 55, 55,140, 31, 63, 30, +175,179,144,120, 80, 80, 15, 66, 8,217,239,230,230,118, 32, 57, 57,217,135, 16,140,170,162,165,235,211, 39, 79,158, 88, 0,128, +159,159,223,120, 0,149, 18, 90, 18,137,196,227,254,253,251, 78, 10,133,162, 76,203,101, 49, 17, 12,131,193,128, 70,141, 26,113, +149,185,134, 51,224,149,206, 48,163, 26, 54,110, 60,122, 94,239,222,202, 27, 55,110, 40, 25,134, 1,199,113,248,225,135, 31, 56, + 74,169, 77, 0, 96, 21, 14,100,151, 83, 63,191, 2, 48,188,192, 74,187,153, 82,250,195, 43,255, 83, 52,208, 24, 21, 61,158,229, +246,110,214,188,218,116,132,135, 61,104, 86,195,226, 48, 44, 37,186, 72, 0,127,171,208,178,178,178,234,181,124,249,114,199,205, +155, 55,103, 63,126,252,216,176,126,253,122,199, 49, 99,198, 88, 26, 12, 6,140, 29, 59, 54,197,223,223, 95,182,124,249,114,199, +131, 7, 15,190, 7,160, 82, 66, 75, 66,240,205,224, 94,157,161, 53, 50, 48, 26, 57, 71, 87, 71,203,237, 19,135,181,147, 82,170, +199,182, 35,183, 97,228,132, 95, 42,105,201,122,183,127,255,254, 53,118,237,218, 37,121,244,232,145,164,118,237,218, 16, 4, 1, + 60,207,195,104, 52, 2, 0, 4, 65, 64,173, 90,181, 94,251,190,124, 12,248, 57, 56,219,157,121,183,123, 55, 51, 87,165, 2,118, + 25, 41, 24, 41,147, 88,110, 81,233,118, 0,104,241, 54, 53, 22,148, 82, 72, 36, 18,188,124,249, 18, 78, 78, 78,102,118,118,118, + 9, 0,230,167,167,167,111,124,139, 27,200,102,114,137,228,192,182, 95, 86,186, 52,111,209,130,117,118,117, 66,196,147, 24, 72, + 8,223,241,254,205,219,237, 62, 30, 55,101, 34, 33,164, 31,165,244,198,219,150,119,215,150,159,246,113,109,245,217, 58, 66, 5, +124,189,250,104,206,194, 37, 43, 84, 99, 71, 13, 99, 39, 79,158, 12, 79, 79, 79,159, 62,125,250, 44, 1, 48,174, 66,158,119, 62, +237,227,210, 98,194, 58, 80,138,121, 63, 29,205,249,126,201, 10,213,184, 42,240,252,199,159,157,141,127,153,208, 10, 32,164, 70, + 93, 79,167,211, 11,167,141,147,210, 19,191, 50,234,180,100,148, 37,101,156,156,156, 54,116,235,214,109,232,150, 45,255,235, 36, +189, 27, 24,136, 62,239,181,130,147,189, 53, 84,230,242,252,230, 72, 32,184,247,248,133, 73,130,192,211,211,115,236,129, 3, 7, + 44,138,139, 9,153, 76, 86,244, 41, 46,178, 10, 63, 37, 45, 31,165, 65,169, 84,226,236,217,179,144, 72, 36, 96, 89, 22, 18,137, +164,232, 83,124,155,101, 89, 56, 59, 87,202,117,105,145,181,181,117,253,156,156, 28,171,204,204, 76,120,121,121,101, 3,184, 95, +236,255,250, 41, 41, 41, 86,149, 33, 20,184, 60, 76, 30, 89, 7, 82,253, 53,232,165,205,160,145,180,196,149,155, 15,113,236,212, + 5,196,197, 39,162,213, 59, 13,241,209,144,254, 56,115,230, 12,120,158,175,108,229, 73, 34,132, 44,233,217,179,199,116,128,144, +142, 29, 59,102, 78,152, 48,129,121,244,232,209, 7,125,250,244, 14,124,242,228,105, 65, 79,152, 76, 35,132,172,172,132,101, 75, + 14, 0, 23, 47, 94, 4, 0, 69, 85,234,158, 66,161,192,213,171, 87, 81, 56, 76,204, 48, 12, 24,134, 1,203,178,248,237,169, 3, +242,244, 12,212, 73,161,248,172,135, 23,170, 87,175, 14,134,169,216, 37,177, 29,160,188, 2,244, 33, 82,233,100, 87, 55, 55,159, +182, 53,106,168,206,158, 61,203, 2,128,183,183, 55, 77, 72, 72,200, 60,114,228, 72,142, 4, 88,231, 77,233,214,242, 68,150,151, +151, 87, 75,134, 97,190, 43,188,231,132,144, 37, 62, 62, 62,115,139,202, 77, 16, 48,164,147,157,116,226,196, 73,178,230,237,242, + 59, 39,205,123,238, 66,246,179,133,117, 72,250, 87,214,127,247,139, 34, 59, 59,123, 79,173, 90,181,216,180,180,180, 43, 0,162, +141, 70,227,140,237,219,183, 59,141, 28, 57, 50,121,199,142, 29,139, 0,184, 45, 94,188,184, 93, 94, 94,222,222,202,240,182,110, + 64,186, 55,105, 24,248,142,151,167, 39, 46, 92,185, 1,153, 92,106, 51,126,120, 15, 88, 88, 72,176,116,115,176, 16, 29,155, 62, +225,210, 61,186,181, 18, 34,171, 89,255,254,253,125,118,237,218, 37, 7,128,251,247,239, 35, 49, 49, 17,142,142,142, 48, 51, 51, +131, 84, 42, 5,203,178,144, 74,165,111, 68,100, 89,123,218, 95, 63,124,248,136,153,157,157, 13, 86,127, 49, 17, 31, 37, 39,193, +198,210, 2,198,220, 60,159,183, 76,112,248,245,235,215, 79,201,243, 60,242,242,242, 16, 18, 18, 98,109,102,102,102,237,225,225, + 49, 15,128,201, 66,203,204,204, 44, 73,171,213, 58, 21,188, 71,147, 53, 26,141, 51,128,108,133, 66, 81,248,158,206, 45,184,158, + 73,195,137,101, 12, 19,198, 20,179,100,197,188, 70,158,155, 54,107, 90,255,236,193,253, 59, 45,178,114, 18, 97, 99,155, 12, 6, + 89,216,184,113, 13,204,204,172, 48,111,222, 87,146, 23, 29,223,115,239,210,189,223, 89, 66, 72,199,183, 78,108, 81,178,177, 99, +207,161,118,102, 42,203,130,182,196,136, 45,155, 38,130, 97, 24,204,157, 59, 23,117,235,214, 29, 77, 8,153, 77, 41, 77, 47,159, + 6, 27,235,181, 25,104, 39, 87,230, 23,177,192, 27,177,126,247,212,124,158,153, 99, 48,184,103,245,209,247,118,144,147,117,107, + 32, 39,191, 93,129, 70,202, 32, 6,205,104,114, 33, 71,112,112,112,219,160,160,160, 11,101,109,255, 7,158, 31, 87, 0, 65,165, +137, 47, 73,112,112, 48, 13, 10, 10, 34,197, 50,247,202,118,121,104, 72,136,131,179,181,234,236,186,249, 19, 45, 36,215,130, 89, + 77,204, 83,196,107,249,162, 39,167,228, 20, 77,149, 74, 53,116,203,150, 45,175,232, 48, 47,103, 39,200,100, 82, 72,101, 4, 54, +173,123,228, 63,113,151,142,129, 16, 90, 86,195,255, 10,103, 94, 94,158,246,238,221,187, 22,155, 55,111,134,147,147, 19,124,124, +124,160, 82,169,160, 84, 42, 95, 17, 87,197, 5, 87, 73,161, 85,146,179,240,127,137, 68, 2,134, 97,112,230,204, 25,112, 28,135, +254,253,251,255, 73,100, 73, 36,146, 82,133, 91, 89,211, 83, 41,165,167, 8, 33,247, 41,165,109, 10, 26,224,251,148,210,182,197, +174,221,197,209,209,113, 6,128, 69,166,114,178, 44, 5,171,189, 2,193, 99, 5, 36, 47, 39, 66, 47,109,128,243,151,111, 99,203, +134,229, 0, 0,159,218, 77, 49,160, 79,143, 34,107,156, 41,156,197,225,238,238,190, 59, 37, 37,181,219,123,239,189,135,140,140, + 12,227,252,249,243, 81,191,126,125,248,249,249,153, 84, 70,101, 9,184,251,247,239,123,106, 52, 26,147,134, 29, 75,227, 36,132, + 96,251,246,237,208,106,255,108,213,183,109,251, 61,166,246,245,198,136,207,182, 98,201,227,189, 88,187,118,109,185,121, 87, 1, +245,181,214,181, 86,202, 89,174,254,162,175, 62, 85,124,244,209, 71,236,136, 17, 35, 16, 19, 19,131,145, 35, 71,106,207,156, 57, +163, 79, 76, 72, 56, 34, 23,132,213,134, 87,133,113,153,156, 10,133, 98,219,169, 83,167,176,119,111,190, 46,137,136,136,128,175, +175,175,249, 43, 34, 57,125, 31,114,162, 87,227,250,111,143,208,188,231, 46, 92,255,109, 8,248,204, 96,105, 19, 95,100, 85,230, +126, 86,161,247,117,182,148,125,123, 1,236, 45,118,127,205,118,236,216,209, 27,192,209,130,255, 0,224,199,202,112,230, 19, 97, +196,192,190,189, 33,145, 89,226,209,211, 88,180,125,183, 17,156,157,156,112,255, 97, 36,162,227,210,147, 8,193,240,174, 45, 21, +139, 52, 26,253,236,139,119,233,207, 21,112, 18, 15, 15, 15,191,125,251,246,201,138, 89,160,139,158,113,150,101,139,182, 11,133, +119, 85,234,103,161,200,178,244,176,184,254,205,154,150,230,215, 31,236,128,175,119,119,216,118,239,129,159, 79,159,198,147,176, +112,173, 94,205,117,248,187,203,232,175,226, 36,132,248,245,237,219,247,202,206,157, 59,109, 94,190,124,137,139, 23, 47,194,199, +199, 7,106,181,186,194, 14,111, 73, 78,173, 86,235, 84,108, 88,175,208,181,225, 59,189, 94, 95, 88, 24,133, 15, 98,153,195,137, + 37, 56,255, 52, 76, 88, 21,159,172, 82,222,243,114,165, 76,182,239,240,193,221, 22,225,143, 46,162, 97,131,119, 96, 97, 29, 0, +129, 79, 68, 90,122, 46, 50,158,198,227,219,111,151, 96,222,252, 89, 56,122,104,191,133,127,157, 6, 7, 8, 33,181,138, 15, 35, +254,215,203, 29,132,142, 62,251,219,142,117,132, 10,208, 36, 61, 82, 72,243,158,171,134, 14,233,199, 14, 26, 52, 8, 71,143, 30, + 69, 88, 88,216,186,178, 68, 86,113, 78, 66, 49, 58,244,226,222,117,160, 20,154,228, 71, 10,153,230,185,106,216, 7, 3,216,143, + 6,119,198,181,223, 87,162,115,195,231,161,110, 78,232,147, 81, 48,120, 40, 97,145,166, 80,226, 15,179, 27,228, 90, 49,177, 21, + 2,128, 20, 19, 88, 33,248,159, 15,230,127, 1, 65, 5,209,225, 71,151,180,110, 73,170, 34,176, 0,192,143, 16, 11,149, 92,118, +125,203,188, 79,221, 84, 49, 97, 18, 93,232, 85,196,235, 4,186, 62,138, 19,174, 19, 98,118,155, 82, 77,201,115,212,106,117, 94, +100,100,164,217,240, 62,125,208, 34, 48, 16,174,246,246,168,229,225, 1, 51,133, 28,114,153,180,216,123,185, 82, 42,146,250,251, +251,163,103,207,158,144, 74,165, 80,169, 84,176,176,176,128, 92, 46, 47,213,154,101,106, 47,151, 82, 10,150,101, 17, 26, 26,138, +232,232,104,216,216,216,224,143, 63,254, 64,135, 14, 29,254,100,213, 42, 46,206, 42, 99,162, 47,217,240, 23, 10, 49,152, 56,100, + 88, 8,158, 39,200,165, 13,160,140,154, 0, 53,105, 4,157,142,131, 78,167,195,207,151, 13,184, 17,153, 7,131, 65, 15,157, 78, + 87,230, 53,203,185,183,140,155,155,219, 80, 95, 95,223,241, 67,134, 12, 49,202,229,114,228,229,229, 65,173, 86, 35, 44, 44,204, +216,173, 91,247,204,158, 61,123, 88, 7, 7, 7, 83, 74,177,164,146,126, 90,105,238,238,238,158, 5,195,179,105, 85,236, 65, 20, +137,152,146, 24,254, 99, 56, 36,108,126,153,172, 91,183, 14, 60,207,131, 82, 90,102, 33,105, 9, 57, 55,255,251,101,214,139, 87, +252, 2,107, 59,103, 92,184,112,129, 63,121,242,100, 14, 1, 34,158,132,133,253,248, 62,112,124, 31, 96,168, 76,250, 50, 50, 50, +204,124,124,124,224,225,225, 1, 65, 16, 96, 52, 26,139,172, 47,105,105,105,208,104, 52,176, 51,207, 68, 77,123, 15,112, 57, 33, + 72, 8,253, 26,174, 22,143,176,245,148,222,216,216, 15,247,254, 5,166,240, 95, 1,252,250,250, 68,112,119,114,241, 4, 67,141, +136, 79, 78, 67,239,160,206, 96,101, 22,120,241, 50, 21, 13, 2,106,184,126,240,126, 75, 87,150,112,152,182,104,215,120, 0, 63, + 87, 68,151,155,155,203, 63,122,244, 8,247,239,231,235, 93, 43, 43, 43,152,155,155,191,242,140, 51, 12,243, 90, 22,173, 66,145, +245,253,186, 14,230,140, 52, 15,217,252, 89,108,222,126, 27, 13,252,123, 96,253,245,155, 90, 62, 41,189,227, 82,173, 54,226, 63, + 61,108,228,234, 58, 70, 16,132,121,148,210,204,190,125,251, 58,239,218,181,203, 54, 46, 46, 14,183,111,223,198,220,185,115, 83, +120,158,231, 40,165,132, 82,250,245, 27,168, 75, 66, 49,129,245, 38,173, 8, 82,149, 18,159, 57, 88,145, 94, 18,198,202,135,203, +206,125,145,170,167, 71,212,156,240, 19,165,212, 88,222,185, 12,195,124,178,127,207, 58, 55, 7, 71, 1,237, 28,223, 67, 66,146, + 1,223,127, 49, 12,105,105, 57,248,121,211, 66, 0,114, 24, 56, 22,109,218,245,131,147,147, 59, 70,143, 26,237,178,110,195,250, + 79, 1, 44,125, 91, 12, 90, 9,127,172, 57, 68, 8, 57,235,232,232, 24,246,233,232,209,142, 62, 62, 31, 66,169, 84, 98,247,238, +221,216,181,122, 53,191, 2, 24,176,129,144,243, 99, 40, 61, 84, 46,207,181,255,241, 76, 28, 59,214,177, 78,157,177, 80, 40, 20, +248,253,228,175,208, 38,110,207, 9,106, 1,131, 90,139,160,106, 61,169, 93,212,111, 36, 93, 42,197, 83, 0,144, 42,145, 32, 5, +146, 75,208,253,215, 4, 86,145,140, 42,244,211, 42,252,126,237,200,240, 84, 42,127,176,105,210, 96,111,103,232,136,254,242,111, +136,211, 9,252,226, 39, 6,246, 78, 22,157, 26, 94,138,200, 42,168,216,130,151,151, 23,222,107,210, 4,125, 90,183,134, 68, 34, +129, 82, 46,131,165,210, 12,148,207,183,100, 21, 14, 29,150,211, 38,162, 52,235,147,189,189, 61,100, 50, 89,145,192, 50,213,154, + 85, 22,167, 32, 8,144, 72, 36,184,127,255, 62, 90,181,106, 5, 79, 79, 79,236,221,187, 23, 93,186,116,249,211, 80, 98,101, 69, + 86,161,208, 42, 62,140, 87,204, 73,190, 66, 39,248, 63,137, 4, 61, 65,170,190, 1, 8, 9, 4,199, 1, 60, 5,116, 90, 45, 40, + 5, 40, 5,140, 6, 61,180, 90,109,209, 53, 77, 25,146,117,117,117,245,170, 94,189,250,130,233,211,167,213,105,208,160, 33, 82, + 82, 82, 32, 8, 2,204,205,205,161, 86,171, 97,101,101,133, 22, 45, 90,188, 88,176, 96, 65, 2,165, 24, 93, 89,103,248, 55,240, +130, 5, 0,156, 62,125,250,149, 97,195,194, 79, 94, 66, 44, 70,124,190, 3,114, 73,254,208, 82,161, 15, 79,121,239,221,246,109, + 90,226,202,157, 8,238,147,105, 43,117,210,180,219,139, 92, 4, 97, 75, 44,144,244, 26,141, 11, 82, 83, 83,145,148,148,132, 94, +189,123, 99,215,206,157,136,138,138, 66, 64, 64, 0,218,183,111, 15, 39, 39, 39, 68, 69, 69,225,198, 37, 29,116, 25,233, 72,215, +223,134,202,178, 57, 14, 95,136,212,205, 89,171,143,252,167,222, 22,132,144, 94, 0,134, 89, 89, 89, 85, 87,171,213, 9, 28,199, +237, 3,176, 15,192, 0,137, 68, 50, 64,165, 82,185,102,103,103, 63, 71,254,108,162, 35, 21, 14, 37, 41,149,246, 10,165, 21, 4, + 78, 7,137, 68, 2, 79, 79, 31, 80, 94,143,140,108, 13,134, 15,234,137, 59,247, 31,226,228,249,107,156,209, 40,172, 50,229,182, +178, 44, 75,253,252,252,144,156,156, 12,169, 84, 10, 51, 51, 51, 88, 88, 88, 96,230,204,153, 88,189,122,117,145,200,170,170,208, +250, 24,240,179,242,178,184,246,221,154,124,145,149, 24,159,128,164, 88, 41, 28,237,157,177,106,245,138,188,140,168,196,230,191, + 0,255,105,145, 5, 0,130, 32,124, 29, 23, 23,231, 36,145, 72, 92, 56,142,195,203,151, 47,113,235,214, 45, 76,152, 48, 33, 41, + 45, 45,173, 29,165,180, 74,121, 84, 42,149,201,133,150, 44,165, 82,153, 12,148, 57,156,152, 89,204,146,149, 89, 14,101,169,195, +132,132,144, 26, 62, 30,150,103, 54, 45,159,236,213,180,121, 11, 70, 37,177,202,200,125,154,216,234,242,197, 11, 45, 38, 44,255, +249, 83, 66, 72,103, 74,233,179,178, 72, 21, 82,105,183,119, 90,182,148,128, 38, 65, 34,111,133, 37,139, 7, 33, 37, 53, 27, 25, +233, 57,144,201,204,161, 55,178,224, 5,130, 22,173, 90,227,215,173,123, 80,119,212, 72, 86, 46,149,118,122,155,132, 86, 1, 22, +254,244,211, 79, 94,254,254,254,216,178,101, 11,206,111,219,134,143,178,178,112,129, 97, 88,163, 84,234,112,220,104,220, 8,224, +144,169, 60,117,235,214,197, 47,191,252,130,237,219,183,199, 12,237,144,124, 96,242, 80, 56, 25, 12,232,122,251, 49,236,170,245, + 4,110, 63,134, 93, 99,127,212,226, 36,120, 74, 8, 94, 9, 7, 21, 28, 28,220,182,248,247,127, 9, 5,107, 27,150, 58,196, 46, + 1,208, 46, 56, 56,152, 22,255,174,136, 80,229,228, 55,118,251,160,247,188, 3,107,122, 17,227,222,149,120,153,199,233,103, 63, + 54,200,159,228,210,201,225,148,174, 40,167, 7, 65, 89,150,133,165,153, 25, 28,109,108,242,205,252, 12, 3, 8,128, 96, 4, 8, +159, 47, 0,168, 64, 80,153, 73,211,130, 32, 64, 46,151,151,234,248, 94, 89,223,172,226,156, 57, 57, 57,120,241,226, 5, 70,143, + 30, 13,149, 74, 5, 0, 72, 76, 76,132,183,183, 55, 36, 18, 9,226,226,226,240,251,239,191,163,122,245,234, 80, 40, 20,164,146, +133, 82,216,240,215, 39,132, 92, 0, 80, 63, 33, 33,193,202,213,213, 21,149,182,104, 9, 20,106, 29,129, 94,207,227,201,147, 39, +136,143,143,199,139,231, 79,209, 52, 47, 27, 20, 44, 40,165,149,178,104,121,120,120, 4,250,250,250,174, 95,180,104,145,204,195, +195, 3,148, 82,216,218,218, 64,173, 86, 35, 53, 53, 13, 1, 1, 1,240,244,244,196,146, 37, 75, 0, 96,215,223, 45,178, 74,212, +169, 34,161, 85, 92,112,125,254,190, 23,210,211, 45,192,178,255,155,125, 90,129,143,150, 12, 0,218,117,238, 43, 57,115,242,184, + 57, 7, 44, 72,100,217, 5,146,138,203,209,200, 11,130,170,172,255, 95,190,124, 9,169, 84,138,253,251,246, 33, 61, 41, 9, 13, + 26, 52, 64,179,102,205,240,244,233, 83,220,185,115, 7,246,246,246,112,244,120, 23, 23,158, 27, 16, 30,175,129,181,181, 53, 34, + 99,153,127, 44,100, 0, 33,100, 84,199,142, 29,231,254,248,227,143, 78, 46, 46, 46,210,148,148, 20,255, 53,107,214, 52, 88,179, +102,205,196, 79, 63,253,212,249,211, 79, 63,181,117,116,116,148, 36, 38, 38,250,125,241,197, 23,141, 9, 33,213, 41,165,203,202, +227, 52, 55,183,180, 99,101,230, 32, 68, 2, 27,107, 91, 72,228,230, 16, 56, 9,120, 1,176,178,118,196,149, 59,251,241,199,131, +156, 49,201,105,216,103,194,115, 67,237,237,237,193, 48, 12,236,237,237,255,100,169,158, 48, 97, 2, 54,109,218, 84, 52,140, 88, + 85,145,245,253,154, 14, 22,164, 64,100, 37,190,148,128,232,170,227,183, 67, 87, 51, 51,162, 18, 91,189, 13, 34,171,240, 29, 71, + 41,197,243,231,207,161, 86,171,113,233,210, 37,124,253,245,215, 41, 37, 69,150,179,179,243, 40, 43, 43,171,249,185,185,185, 75, + 18, 18, 18, 86, 86,196, 91, 32,162, 94,237, 12,150, 50,156,104,106,136,135,210,134, 9, 9, 33, 82, 79, 87,229,169, 59,151,118, +120, 91,211,123, 4,209,163,129, 39,217, 97,150,215,157,218,116,111, 26,196, 52, 90,251, 77,181,102, 99,102,158, 34,132,248,151, +101,217, 18,120,190,145,185,133, 37,128,100,220,190, 21, 82, 36,178,210,210,179,160, 51,176,208,233, 9,180, 6, 6,239,117,236, +138,213,235,183, 35, 46, 57, 29,133, 51, 18,223, 22, 16, 66,236, 2, 3, 3,199, 14, 24, 48, 0, 11, 22, 44,192,217, 31,127,212, +143, 35, 36, 91, 2,208, 96,158,135, 64, 41, 97, 76,112, 98, 47,201,179,116,233,210, 67, 0, 6, 47,154,128,119, 51,114, 49,220, +173, 39,181,171,214, 51,255,216,254,211, 41, 0,216,165,156,125,181,201, 12, 10, 10, 34,133, 35,107,149, 29, 97,251,183, 67, 18, + 20, 20,116, 33, 56, 56, 24,197,191,203, 59,193,202,165,118,247,153, 95, 78, 88,220,180, 75,107,146, 48,165, 19,210,179,181,220, + 87,225, 6,121,172,166,124,145, 85, 28, 95,174, 89,131, 59, 17,249,207,177,135,147, 19,166,125,240, 1, 40, 7,252, 17, 22,142, + 61,103,207, 98, 80,199,142, 48, 47,152,241,103,170,245,169, 52, 43, 86,113,107, 86,101,173, 78,153,153,153,216,183,111, 31,154, + 53,107, 6,149, 74, 5,137, 68,130,250,245,235,227,225,195,135,168, 81,163, 6, 8, 33, 56,124,248, 48,250,244,233,131,103,207, +158,225,221,119,223,181,168,138,208, 10, 15, 15,183,162,148,182, 41,180,126, 84, 21, 58,157, 14,143, 30, 61, 66,207,158, 61, 97, +107,107, 11,119,247, 93, 56,123,106, 7, 84,129, 31,129, 16, 84, 74,104,241, 60,255,113, 80, 80,144,140, 16, 2,141, 70, 13,165, +210, 12,230,230, 22,176,180,180,130,159,159, 63,226,227,227,209,165, 75, 23,125,100,100,228,218,132,132,132,189,149, 77,107, 64, + 64,128,121, 86, 86,214, 71,213,170, 85,147, 23,244,118, 3,106,214,172, 57, 53, 50, 50, 50,167,178, 86,173, 66,129, 69, 8, 1, +203,178, 69, 66, 75,194, 48,112,117,113, 42,218, 46,240, 79, 35,229,112,101,199,165,233, 20, 0,224,229,229,133,213, 27,142, 50, + 65, 65, 65,152, 56,113, 34,140, 70, 35,214,174,205,159,100, 55,100,200, 16, 24, 12, 6, 28, 56,144, 63, 73, 82, 34,145,148,107, + 54,185,117,235, 22,110,223,190, 13,163,209,136,172,172, 44,156, 56,113, 2, 23, 46, 94,196,238,195,231, 16,245,252, 41,234,251, +123, 99,228,200,143, 33,149, 74,177,117,235, 86,180,106,213,234, 31,125, 33, 72,165,210,161,155, 54,109,114,221,178,101, 75,230, +225,195,135,243,222,121,231, 29,197,138, 21, 43,156, 86,175, 94,237,168,215,235, 49,105,210,164,228,107,215,174,233,122,247,238, +109,190,113,227, 70,215,154, 53,107,118, 2,176,172,148,251,105, 14, 96, 16,128, 15,219, 53,179,150,100,230,104, 32,112,122, 60, +143,122,129,172, 92, 61, 4,222,128,152,216,120,228,106,121,164,165,231,160,126,163,206, 63,133,132,132,204, 34,132,124, 69, 41, + 61, 86, 81, 58,195,194,194,112,237,218, 53, 68, 69, 69,225,249,243,231,175,252, 55,106,212, 40,108,223,190,189,210, 22,173,210, + 69, 22, 11,162,171,129, 99,135,175,103, 38, 63, 77,120,107, 68, 86,193, 59,104,158,171,171,235, 60, 87, 87, 87,229,233,211,167, +173,171, 85,171, 6,142,227,244, 37, 45, 89,237,218,181,155,189,105,211, 38,215, 26, 53,106, 76, 0,176,242,223,144,118,134,193, +168, 37,235,198, 58, 88,202, 99,226,241,100, 89, 65, 44, 65, 22, 80,103, 3, 33, 59, 33,105, 57,231,197,132,222,211,109,103,108, + 89, 48, 10,229,204,144,141,124,246, 18,235,214,173,198,228, 73,195,241,235,207, 75, 32, 8, 18,232,140, 44,188,124,222,129,206, + 32,128, 48, 18, 52,104,212, 4,231, 67, 46, 65,202, 0,251,182,172,123,171, 76, 89,148,210,116, 66,200,218,195,135, 15,127, 54, +113,226, 68, 8,130, 32,159,191,110,157, 38, 37, 37,101, 33, 42, 17,255,170, 20,158, 62,235,214,173,139,152,177, 58,229,208,228, +161, 96,163,126, 35,233,183, 31,195,174,255,116,138,253,139, 9, 26,251, 35, 93, 85,122, 19,127,177,196,247,219, 33,180, 10,149, +100,241,239,210,208,216,175,198, 55,214,118,182, 31, 55,171,239,231, 48,109,226, 56,201,179, 68, 45, 14, 84,251, 32,247,247,109, +171,204, 19, 57,197, 79, 79,169,102, 69,101, 46,188,231,247,223,139,126,255,176,107, 87,169,255, 37,244,239,111,114,207,172, 44, + 43, 86,101, 45, 89, 0,160, 82,169,108, 58,117,234,132, 14, 29, 58,160, 95,191,126, 69, 62, 89, 13, 27, 54,196,238,221,187,209, +183,111, 95,220,189,123, 23,174,174,174,168, 93,187, 54,106,215,174,141,227,199,143, 87,182,130,131,231,121, 4, 6, 6, 22,206, + 58,172, 31, 27, 27,107, 85,213,130,212,233,116, 72, 75, 75,131,157,157, 29,228,114, 57,154, 55,111,134,207, 62,111, 14, 7,215, + 95, 16, 88,199, 31,121,121,121, 69,211,223, 77,104,108, 3,107,213,170,133,148,148, 20,164,164,164,192,209,209, 17,110,110,110, +112,113,113,193,178,101,203,232,202,149, 43, 79, 26, 12,134,181, 41, 41, 41,149,182,100,185,186,186,182,182,179,179,155,173,209, +104,228,197,122,184,114, 71, 71,199, 35,110,110,110, 11,227,227,227, 43,179,198, 38, 12, 6, 3, 8, 33, 8,126,238,134, 60, 61, + 65,118,236,109, 76,124,223,251, 21,225, 37,149, 74, 77,113,232,205, 27, 60,120,176,147,167,167, 7, 94, 70,134, 97,255,126,138, + 31,127,252,177,112, 86, 36, 34, 10, 58, 6,133,219,237,219,183,135,143,143, 15, 42, 19, 36, 83, 16, 4,220,191,127, 31,187,142, + 92,128,171,119, 29,196, 60,121,132, 59,199,127, 67, 53, 71, 59,212,109,212, 4, 70,163,241,181, 66,111,188, 9, 24,141,198,205, +190,190,190, 84,175,215, 95, 0,176,250,193,131, 7,195, 19, 18, 18, 38, 29, 61,122,212,109,192,128, 1,241,191,253,246,219, 10, + 0, 91, 30, 60,120, 48,246,219,111,191,237,192,113, 92,169,179, 5, 89,150,253,245,139, 47,190,104, 55, 96,192, 0, 34, 99,140, +250,211,167,182, 74, 56,206, 72,190,252,106, 51, 31,114,249, 2,195,113, 70,210,111,240, 23,194,241,223, 31, 48, 99, 62,255,129, +111,248, 78, 16, 66, 67, 67, 93,122,244,232,241, 45,128,114,133, 86,161,165,170, 44, 11, 37,203,178, 24, 62,124, 56,118,239,222, +109,114,190, 71, 2, 53,172,188, 45,174,125,191,166,163, 5,145,228, 22, 19, 89, 53,113,236,240,245,204,164, 39,241,111,149,200, + 2,128,212,212,212, 13, 0, 54,216,217,217, 37,153,155,155, 35, 39, 39,231, 79,245,143, 16,162,244,247,247, 87,202,229,114,116, +238,220,217,206,213,213, 53,130, 97,152,149,113,113,113,101, 42,142,210,134, 9, 75, 27, 78,124,157, 89,135,182,142,232,209,188, +117, 35,203,199,214, 11, 44,149, 18,237,221,106, 17, 74, 43, 2, 32, 75,231,252,252, 74,244,160,108,146,172,104,216,164,125, 99, + 88, 73,204,123,148, 37,180, 24,150,189,147,149,145,217, 45, 59, 71,143,203,127,132, 98,240,160, 90,208, 25, 8, 4,129, 65,110, +158, 14, 96,165, 96, 0, 12,249, 96, 24, 40,145, 32, 61, 41, 30, 44,203, 62,192,219,135,153, 99,199,142,237,246,213, 87, 95, 85, + 47,136,127,229, 93, 16,255,106, 26, 33,164, 30,173, 32,248,120, 57, 60,213,126,219, 61,103,202,145, 75,235,179,130, 90,104,158, + 52,246, 7, 0,216, 53,246, 71,186, 84,138,167, 18, 22,105,148, 66, 83,194,170,213,182,248,247,127,204, 58,248,138, 19,124,241, +109,147,124,180,124,107,120,116,109,219,180,201,231,179,190,154,101,249,240, 74, 8,102,124,179,154,250, 54,233,148,179,225,210, + 29,125,174,185, 79,183,156,148, 39,127,152,170, 47, 0,160,235,123,125, 81, 63,160,217,159,254,108,213, 62, 63,150,228,229,243, +183,144,148, 18,103,114, 99, 91, 32, 14, 74,245,201, 50,101, 74,127, 41,166,239,204,208,208, 80,167,216,216,216, 87, 28,223,125, +124,124, 64, 8,193,245,235,215,113,237,218, 53, 12, 30, 60, 24, 18,137, 4, 82,169, 20, 23, 46, 92,168,148, 53,166,152,117,233, + 62,165,180, 45, 33,164,139,135,135, 71,169,179, 13, 77,225,210,104, 52,200,202,202,194,169, 83,167, 80,171, 86, 45,124,255,253, +247,112,115,117,198,172, 89, 83, 32, 8, 2,178,179,179,193,243,188,169, 22, 45,161,208, 90, 36, 8, 2, 82, 82, 82, 80,189,122, +117,172, 89,179, 6, 43, 86,172,248, 54, 62, 62,254,104,101,211,232,229,229,101,195,243,252,151, 61,123,246,236,212,187,119,111, +116,233,210,229,149,255,119,238,220,105,121,224,192,129,133,158,158,158, 93, 13, 6,195,162,164,164,164, 20, 83,120,127,249, 37, + 63,252,146,234,157,121,152, 49,160, 26, 62, 28,191, 21,203,150, 29,132, 66,161,120,165,225, 93,176, 96, 65,185, 34, 70,160,212, + 87,150,122, 37,126,202,244,165, 78, 11, 23,158,197,217,179,201, 96, 24, 6,174,174,174, 96, 24, 6, 47, 94,188, 0,195, 48,240, +246,246, 6,195, 48,136,139,139, 43,244, 9,204,128,214,180, 88,134, 12,195, 64,171,213,226,101, 76, 20, 98, 35, 35, 96,145,157, + 8, 71, 43, 21, 50,194,238,163,254,200, 81, 69,241,159,254,225, 30,238,118, 0,219,139,237, 90, 74, 8,209, 19, 66,250, 1, 56, + 68, 41, 45,180,104,124, 91,240, 41, 21,239,188,243, 78,195,175,190,250, 74, 90, 24,110,195,205,235, 59,206, 96, 48, 8, 0,224, + 95,191,205, 43,106,255,233,211,167, 88,182,108, 25,242,242,242, 32, 51, 37,208, 93,129,104, 45,156, 97, 88,154, 8,171,140,200, + 2, 0,123,111,143,159,174,223,190,192,223,139, 92,175,121,240,248,132, 89, 66, 12, 3, 70,255,246,138,172,146,150, 45, 15, 15, +143,121,130, 32, 80, 74,233,156, 98,239, 86,133,151,151,215,165,211,167, 79,219,115, 28,135, 85,171, 86,217, 36, 38, 38,218,180, +105,211,102, 6,128, 50,133, 86,105,195,132,165, 13, 39,162,216,172, 67,133, 66, 97, 87,222,235,163,228,172, 67,158,135,159,149, +165, 13, 50, 16, 11,157,131,177, 97,166, 61,151,126, 38, 97,212, 93,183,232, 70, 1,230,188,177, 58,147,173,135,187,202, 6, 2, +165,126,101,118, 78,141,198, 19,119,111,223,233,236,229, 89,139, 61,122,236, 34,122,245, 25, 0,157,142,129,214, 72, 64, 88, 41, + 8, 43, 67,189,250,141, 80,187,110,125, 80, 0,183,110, 92,225,244, 70,227,153,183,169,236,221, 90,125, 62,216,173,213,103, 43, + 65, 5, 90, 74, 28,173,234,125,250,244, 89, 8,224,243,138,120,156,223,253,124,176, 75,139,124,158,226,113,180,190,248,108, 44, +194,110, 72,173, 47,222, 94, 44,235,242, 14,130, 83,206, 18,168,148,255,155,117, 40,101,170, 30,154,227,191, 34,184, 76, 18, 90, + 94, 94, 94, 54, 78, 22,170, 95, 62, 29,249,177,101,244,189,171, 72, 12,191,142, 63, 46, 70,100,236, 57,112, 48, 61, 47, 45,121, +100, 37, 68, 86,209, 48,159,189, 75, 53,248,212,249,179,208, 82, 90, 56, 2, 0,124,234, 52, 3,107,110, 93,217, 33,143, 63, 89, +179,170, 34,178,138,191,176, 75,139,161, 53,102,204, 24,108,218,180, 9, 45, 91,182,132,175,175,111,209,203,190,178, 86,179,146, +214,165,170,204, 54, 44,142,156,156, 28,120,123,123, 99,227,198,141,120,240,224, 1, 44, 45, 45, 49,120,240, 96,228,228,228, 20, + 9, 44, 83,157,225, 41,165, 79, 79,159, 62,221,116,224,192,129, 84, 42,149,146,204,204, 76,216,216,216, 96,205,154, 53,121, 9, + 9, 9,193, 85, 16, 89, 3,100, 50,217,148, 65,131, 6,177,254,254,254, 72, 74, 74,130,149,149,149,145, 16, 34, 5, 0, 27, 27, + 27,163,153,153, 25,198,142, 29,139, 6, 13, 26,180,158, 54,109, 90, 75,119,119,247, 53,113,113,113, 91,203,171, 75,132,144,162, + 6,117,228,202, 71,208,235,243,133,202,218,181,107, 81,224,235,246,191, 33,130,200, 72,192,132,153, 44, 22, 22, 22,240,245,245, + 45,181,236, 91,183,110,141, 91,183,110,229, 15, 77, 74, 36,112,114,114,194, 31,127,252, 97,210, 76,170,194, 64,144,161,161,161, +168,227,227,128, 7,103, 79,195, 65, 37, 69, 3, 55, 23,120,180,110,139,136,136,136,127,204,154, 85, 16,155,106, 28,128,142, 5, +117,112, 51,128, 49,197,182,215, 80, 74,127,170, 12, 39,199,113,148, 97, 24,242,242,229, 75,131, 74,165, 34,118,118,118, 18,133, + 66, 1,157, 78, 87, 36,184,158, 62,125,138, 99,199,142, 33, 54, 54, 22,118,118,118,140,181,181, 53, 12, 6, 67,134, 41,252,126, +126,126,112,113,113,121,197,241,125,228,200,145, 85, 18, 89,195,129,192, 77,223, 45,170,166, 96, 88,235, 58, 14, 93,241,252,209, + 11, 45,163,135,242,255,131,200, 2,128,140,140,140, 13, 0, 54, 20,110, 59, 58, 58,142, 96, 89,118,150,181,181,181,245,133, 11, + 23,108, 28, 29, 29,201,214,173, 91,141,115,230,204,201,100, 89, 54,131, 16,178,252,159, 23,135, 8, 79,205,138,244,150,218,186, + 9,247,180,244,202,164,151, 51,106,103, 72,107, 57,146,186,129,232,147,252,240,242, 8, 46,178, 69, 82, 66, 34, 67, 33,132,151, +243, 14,222, 60,227,171, 5, 95, 70, 60,186,227,165,180, 82, 98,204,216,175, 16,124,242, 60, 8, 35,197,165, 43,215,161, 55,240, + 72, 77,207,194,160, 33, 67,225,225,234,128,240,107,167, 82, 56, 65, 88,243,118,137,108, 97,117,231, 94, 35,108, 21,102,170,130, +123,194, 99,251,207, 83,192, 48, 43, 49,119,238, 92, 4, 6, 6,142, 39,132,124, 93, 81, 28, 45, 66,132,213,245,218, 14,177,149, + 41,242,121,168,192, 99,227,190, 25, 5,113,180, 38, 99,205,134, 3,245,234,250, 60,159, 95, 94, 28,173,183, 69,100, 21,255,174, + 80,104, 85,171, 86, 77, 97, 46,197,104, 59, 51,217,180, 79, 63,232,237,152, 28, 25,134,216,135,119,242,135, 23, 12, 26, 67, 66, + 68,184,175, 9, 23,237, 88, 34,126, 7, 45,111,232, 74,171, 53,162,178,156,133, 13,110, 73,107, 86,101, 68, 86,105,156,197,197, + 86,241,184, 89,158,158,158, 88,184,112, 97,133,113,180, 74,201,123,225,254, 46, 0,234, 23,138, 45,228, 59,195,119, 49,101,166, + 97, 89,156,142,142,142, 72, 75,203,143,144,208,174, 93, 59,180,107,247,191,249, 12, 6,131,161,200,138,101,105,105,249, 39,139, + 86,105,156,102,102,102, 51, 14, 30, 60,248,241,149, 43, 87, 6, 78,157, 58, 85,218,161, 67,135, 66, 49,167,166, 38,172,237, 86, +146,147,231,249,177,167, 78,157, 98, 5, 65,192,198,141, 27,113,235,214, 45,170, 82,169,102,171, 84,170,213,102,102,102,188, 70, +163, 25, 51,106,212,168,161,243,231,207,103, 90,183,110,141,171, 87,175, 50,213,171, 87, 31, 6, 96,107, 69,121,191,126,253, 58, + 24,134, 1,151, 30,131,241, 51,246,192,220, 76,130, 71,143, 30, 33, 61, 61,253, 79, 65, 76, 77,185,159,197, 45, 37,133,159,214, +173, 91, 23, 13, 67, 54,111,222, 28, 44,203,226,238,221,187,165, 14,195,150,224,164,246,246,246, 69,245, 67, 38,147,225,252,249, +243,248,230,155,111,224,101,103,131,140,135, 15,224,210,238, 61,116,250,120, 20, 6, 15, 30, 12,150,101, 97,103,103, 87,100,249, +173, 40,239,175,249, 66, 40,206,249,113,157, 58,117,134,133,135,135,123,212,171, 87,207, 53, 52, 52,180,125, 96, 96,160,247,131, + 7, 15, 10,183, 21, 48,193, 55,167, 56,231,205,155, 55,247,175, 94,189,122,236,240,225,195,101,130, 32,240,209,209,209, 70, 0, +196,197,197,133,189,121,243,166,112,244,232, 81,104, 52, 26,120,120,120, 48,238,238,238,228,204,153, 51,194,195,135, 15,175, 83, + 74,191, 50, 37,239, 60,207,191, 18,198,161,240,247,206,157, 59, 43,253,188, 87,171,237,247,125,135, 54,254,158,169,241,119,145, + 16, 23, 9, 62,203,209,112,236,240,111,186,202,136,172,191,161,140,254, 78,206, 5, 79,158, 60,113,215,233,116,144,203,229, 88, +187,118,173, 97,225,194,133,225,169,169,169,173,104, 41, 51,202, 75,114, 86,113,214, 97,122, 57,156,127,154,117,152,149,134,224, +195, 71,110, 54,181,232,179, 25,227,227, 83,138, 28, 27, 41, 33,118, 7,157, 3, 90,169,154,213,139, 99,142,207, 99,114,120,117, +112, 89,233,164,148,234, 9, 33, 3,250,244, 29,114,110,247,238, 93, 22,115,230,205,195, 31,215, 31, 32, 45, 51, 23, 2,101, 33, + 16,130, 89,179,230,192,197,193, 14,217,241, 79,212, 58,131,161, 79,201,165,120,254,235,229, 78, 8, 51,225,204,209,173, 43, 25, + 2, 33, 47,233,177,130,205,137, 84,125, 56,184,143,100,192,128, 1, 56,120,240, 32, 66, 67, 67,215,151, 37,178,138,115, 82,202, + 76,120,112, 97,207, 74, 2, 8,154,148,199, 10, 73,238,115,213,176, 15,250, 72, 6, 15, 30,140, 67,199,174, 96,247,111,207,215, +237, 58, 74,127,123,155, 59, 44, 85,138, 12,111, 41, 65,104,171,128, 26,238,173, 27,213, 85, 74,120, 13, 98, 31, 70, 34, 61, 79, +139, 51, 97,209,153, 12,101,170, 28, 91, 39,255, 5, 41, 67, 76,204,147, 63,253,151,153,169, 44,104,208, 43,183,172, 20,195, 48, +175, 88,179, 94,199,146, 85, 60,157,206,206,206,175, 44,231, 82,188,225, 46,244, 1,170, 66,104,135, 25, 49, 49, 49, 86, 49, 49, + 49,160,148,226,250,245,235, 86,205,155, 55,159,241, 58,214,172, 41, 83,166, 20, 89,173, 74,126,151,182,175, 34, 20, 56,165,175, +112,112,112,216, 55,109,218,180,241,205,155, 55,239, 60,111,222, 60, 2,128,173, 98, 5,228, 4, 65, 64, 72, 72, 8, 14, 30, 60, +200, 27, 12,134,209,241,241,241,197,125, 29, 86,185,185,185,157,233,219,183,239,214,199,143, 31,179,225,225,225, 48, 69,208,105, + 52, 26,248,250,250,130,227, 56, 44, 30,239,137,156,156,122,224, 56, 14, 60,207,195,220,220,252,149,117, 46, 77, 41, 39,134, 97, +192,243,252,159,132,214,245,235,215,193,178, 44, 90,181,106,133, 59,119,238, 20, 89,180, 42,178, 64, 25, 12,134, 24,103,103,103, +231, 5, 11, 22, 20,165, 43, 37, 37, 5,167, 79,159,198, 59,239,182, 64,192,232, 49,136,143,143,199,242,229,203,225,230,230,134, +239,191,255, 30,233,233,233,224, 56,238,239, 54,167,119, 11, 15, 15,247,248,224,131, 15,146, 31, 60,120,224,113,236,216, 49,155, + 30, 61,122,152, 15, 25, 50, 36,249,193,131, 7, 30,132,144, 22,168,164, 19, 52,207,243, 51, 9, 33, 39,191,255,254,251, 25,159, +127,254,121,243,225,195,135, 75,165, 82,169, 16, 23, 23,199,237,218,181,139,248,250,250, 50, 50,153,140,156, 58,117, 74,184,113, +227,198, 53,142,227, 22, 83, 74, 47, 85,198,226, 92, 92,100,177, 44,107,146,200, 42,137, 73, 78,138, 97,150, 76, 74,171,213,107, + 23, 50,254, 62, 30,134,109,187, 78,191,188,116,245,201, 51, 86,199, 77,250, 5,120,134,255,135, 96, 89,118,111,157, 58,117, 70, + 76,152, 48,193,172, 75,151, 46,138,249,243,231,103,229,228,228,148, 42,178,202,120, 46,255,242, 89,135, 0,126,158, 57,245,216, +164, 47,234,141,168,241,137, 75, 53,156,205, 75, 70,134,132,101,172,108, 24, 52,242,102,145,147,250,212,241,183,115, 91, 94,160, +130,184,108,148,210,155,132,144,142,117,235, 53, 60,176,248,251,197, 78,179,167, 79,147, 30, 56,118, 2,148, 51,224,250,133, 11, +176,144,241,244,225,237,179, 73, 58,131,190,247,219,184, 4, 79,252,229, 85,187, 9, 33, 71,236,236,236,238,125, 60,124,184,111, +157, 58, 67,160, 82,169,176,127,255,126,108, 95,181,138, 95, 1, 12,220, 64,200,157, 49,249, 49,245,202, 68,210,213, 34,158,187, +163, 62,254,216,175, 81,163, 79,160, 82,169,176,111,223, 62,108, 93,177,194,100,158,255,184, 53,171, 48, 50,124,112,193,183, 9, +113,180, 24,146,115,237, 73,116,238,245, 39,209,185, 16, 40, 21, 40,213, 49, 12, 94,230, 25, 12,223, 71, 60,139, 61, 85,197,132, + 64, 16, 4,124,251,221,132, 55,153,185, 34,241, 83,213, 41,221,165, 52, 18,177,197,215, 72,171,104, 65,105, 0, 48, 26,141,177, + 38,210, 47,242,242,250,211, 26,168,139,170,154,214,194,225, 64, 83, 69,150,169,113,180, 0, 32, 53, 53, 53, 1,192,108, 87, 87, +215,157,157, 59,119, 30, 5, 32,174,138,101,180,177,109,219,182,163, 1,176,132,144,245,113,113,113,127,114, 40,141,143,143,143, +112,119,119,255,193,199,199,167,104,161,233,242, 56, 5, 65,120, 94,175, 94, 61, 67,105,101, 81,214,182, 32, 8, 21,150, 81,102, +102, 38,154, 53,107,246,167, 53, 45, 41,165,136,142,142, 46,180, 56, 21,221,251,242, 4, 92,110,110,238,152,207, 62,251,108,131, + 84, 42,245, 2, 64, 10, 69, 46,207,243,236, 79, 63,253,164,228,121,158, 5, 64, 24,134,225,164, 82,169,246,224,193,131, 28,199, +113, 49, 58,157,110,204,223,252,142,216, 71,242,151, 98,200, 11, 15, 15,247, 47,176,100,197,134,134,134,222,221,189,123,183, 35, +128, 61, 85,172,155,151, 0, 92, 34,132,180, 94,187,118,237,204, 49, 99,198, 52, 27, 60,120,176,164, 93,187,118, 8, 14, 14,230, + 67, 66, 66,174,107, 52,154, 69,149, 17, 88, 5,101,153,229,233,233, 89, 36,184, 42,120,150,203,117,228,181,247, 86,172, 30, 58, +206, 77,185,113,209,233,220,212,120,253, 21, 99,174,254,171, 45, 64, 40,254, 31, 35, 49, 49,113, 42, 33,100,206,242,229,203,227, + 27, 52,104,160,144,201,100,122, 83, 69,214,223,104, 61,224, 8, 33,221,127,236,212,255, 72,219, 89,159,249,116,106,223, 74,229, + 89,205,201,253, 97,100, 18,158, 94, 13,206,187,247,219,119, 81, 84,151,209,139, 82,202,153,192,117,131, 16, 82,107,202,180, 41, +133,139, 74,215,239,112,230, 48,253,127,180,168,244,183, 63,252,240,131,111,157, 58,117,176,127,255,126,156,217,177, 3,131, 82, + 83,113,158,101, 89, 70, 38,179,255,205, 96, 88, 10,211, 2, 23,127,187,108,217, 50,191,192,192, 64,236,221,187, 23,167,182,110, +197,192,170,241,148,133,166, 0, 28, 11,155, 39, 0,143, 1, 52, 6, 96, 6, 64,135,252,165,157, 28,138, 29,159, 86,240, 95,225, +255, 23, 1,252,149,142,176, 21, 71,134, 47,137, 7, 79, 94, 52,126,211,169,208,104, 52,233,190,190,190,149,154,115,109, 52, 26, +203, 29,195,229, 56, 46,182, 70,141, 26, 38, 91, 45, 76, 17, 69,105,105,105, 77,254,194, 23,196,107,249, 98,189,210,136, 8, 66, +148,171,171,171, 80,216,232,151, 38,194, 74,219, 71,129, 23,149,185, 78, 66, 66,194, 99, 0, 95, 84, 53,157,113,113,113, 7, 96, +194,162,209,166, 30, 7, 0,233,233,233,111,124, 49, 95, 66,105,220,252,249,243, 43, 37,176, 65,105, 92, 57,101,253, 0, 64,243, +127,251, 91,182,112,233, 29, 66, 8, 19, 26, 26, 58,170, 96,120,251, 44,128,245, 5, 17,189, 95,151,191, 72,112,109,220,184,113, + 18,165, 20,217,217,217, 43, 42, 43,176,138,122,207, 73, 73,193,111, 42,239,233, 73,250,223,119,173,143,125, 79,147,105,152,180, + 41, 87,191, 21, 34, 10,203, 76,235,228,228,244,235,135, 31,126,248, 14,128, 45,175,203, 87,218,112,226, 27, 72,227, 11, 66, 72, +131,243, 83,190,249,248,188,141,101, 16,120,137, 63,244,204,111,208,167, 5, 3,248,197, 20,171,120,241,252, 34, 63, 76,201,178, +255, 79,229, 92, 16,255,106,210,136, 17, 35, 48,103,206, 28,156, 90,186,212, 48,142,144, 44, 41, 64, 79,230,119, 52, 25, 2, 76, + 55,149,103,216,176, 97,152, 51,103, 14,142, 47, 94, 92, 37,158, 10,224, 72, 8, 57, 6, 0, 51,102,204,248,106,225,194,133,182, + 51,103,206,172,191,104,209,162,239, 11,182,195, 10,255, 47, 40,211, 30, 51,103,206,172, 91,236,255, 28, 0, 55,255,226,251, 89, +106,100,248, 87,122,236,111,250, 3,160,163,200, 41,114,138,156, 34,167,200, 41,114,138,156, 34,231,107,126,130,242, 37, 75,217, +223,101,253, 46,182, 15,255,196, 71, 34,246,221, 68,136, 16, 33, 66,132, 8, 17,255, 81,171,220,177,215,249,255, 13,166,163,208, + 71,171,184,165,116, 35,144, 63,221,189, 99, 25,166,212,202, 4,142,236, 88, 5,179,239, 89,145, 83,228, 20, 57, 69, 78,145, 83, +228, 20, 57,255,127,113, 86,196, 93,198,249, 65,132,144, 99,148,210, 30,101,125, 23, 10,171,146,191,139,237,123, 99,110, 7,165, +228,101,116, 89, 62, 90,226,208,161,200, 41,114,138,156, 34,167,200, 41,114,138,156,255,137,161, 67, 0,116,198,140, 25, 51,255, +109, 67,135, 0, 92, 1,140, 46,254, 49, 97,232,112, 63, 27, 23, 7, 43,185, 92, 37, 3, 0,189, 94,109,112,119, 71, 54,208,255, + 31, 91,240, 86,196,127,214,180,235, 92, 32,234,147,222,228,177, 34, 68,136, 16, 33,226,255, 13, 82, 10, 45, 85, 0, 82, 0,144, +130,109,125,193,119, 74, 65,219, 81,242,247, 43,255,255, 85,160,148, 38, 0, 40,117,182,188,164, 44,145,149,154,170,114,144, 72, + 50,252,120, 94, 91, 27, 0, 36, 18,230, 81,106,170,109,132,131,195,254,212,170,136, 45, 71,103,231,219, 82,150,117, 55,229, 88, + 35,207,199,165, 38, 37,189, 18, 58,158, 2,255,121,129,103,170,136,120, 29,177,241,119, 8, 21, 71, 71, 71,103,103,103,231,247, +173,172,172,222,205,204,204,188,145,146,146,114,168,172,117, 15, 9, 33, 11, 9,193,180,130,223, 75, 40,165, 51,203, 73,187,201, +199,150,114,174,175, 74,165, 26, 79, 8, 9, 44,200,127,168, 90,173, 94, 75, 41,125,242,255, 80,216,154, 1,232, 45,145, 72,134, + 57, 56, 56, 52, 75, 76, 76,156, 79, 41, 93, 94, 69, 46, 9,128, 41, 54, 54, 54,131,109,108,108,170,167,167,167, 63,203,206,206, +222, 11, 96, 25,165,180,194,169,210, 95, 79,116,123,183, 93,151,118,179, 67, 78,133,124, 59,111,101,252,213, 63,253, 63,213,205, +190,115,167,150,115, 66,126,187,178, 96,230,234,184,244, 74,166,141, 1, 80, 24, 52, 79, 40,232,181,210, 55,124, 47,165, 0,122, + 2,104, 7, 32, 4,192,111,166,228,187, 12,174,119, 0,124, 85,144,230,101,148,210,243,255,242,122,100,238,236,236,188, 24, 64, + 79,137, 68, 18, 30, 23, 23, 55,154, 82, 26,251, 15,167, 73,130,252,105,254,129,200, 15,195,113,211,148, 16, 14,166,192,193,193, +161,135, 68, 34, 25, 95, 16,218,101,109,106,106,234,177,127,107,217, 40, 20,138, 21, 46, 46, 46,159,104, 52, 26, 53, 33,132, 22, +143,247,200,113, 92,108, 74, 74, 74,147,183,240,213,118,243, 95,254,188,140, 46, 69,124,149, 29, 71, 43, 46, 14, 86, 18, 73,134, + 95,114,226,131, 65,241, 9,247, 7, 2,128,155,107,253,189, 78, 46,245,246,196,197,201, 13, 77, 59,245,181,144,170, 36,107, 89, + 86,218, 80,171,215, 57, 72, 37,210, 84, 3,103,188,203,232,233,248,132, 71, 7, 75, 13,182, 40,101, 89,247,168,136,243, 78,156, + 33, 29, 82,165, 27,164,102, 94,101, 38,216,205,205,173, 74, 25,181,179,171,105,105, 80, 40, 39, 73,165,108, 39,129,114,129, 84, + 0, 24, 34, 13,229,120,227, 57,153, 78,247, 99,122,122,100, 78, 85,111, 98,109, 7,226, 66,129,193, 32,232, 4,138, 51, 4,216, +253, 40,149, 38, 86,162, 16, 76, 18, 17,175, 41, 54,138,159,187,156, 82, 58,245, 77, 87, 38, 15, 15, 15,219,126,253,250,173,248, +230,155,111,204, 44, 44, 44, 72, 76, 76, 76,151,233,211,167,183,241,240,240,248, 34, 54, 54, 54,190,164,232, 35, 4,211, 4,129, + 50, 0,192, 48,100,186,179,179,179,138,101,217, 63,197, 54,226,121, 94, 69, 8, 38, 8, 2, 37, 5,199, 78, 35,132,172, 52, 69, + 48,154,153,153, 13,105,214,188,197, 23,139,127, 88,102,225,236,228,100,206,241,130,225, 69,116,148,106,246,140,169,205,205,204, +204, 86,106, 52,154, 93, 85,120,104, 8,203,178,131, 20, 10, 69, 15, 0,117, 10,118, 63,212,233,116,199,120,158,223, 99,106,131, +238,226,226,114,145,101,217,106,149,185, 54,207,243, 49,137,137,137,173,170,248,176, 15,240,242,242,250,165,109,219,182,170,102, +205,154, 65, 46,151, 99,206,156, 57, 83, 0, 44, 55, 69, 80,169, 84,170, 65,230,230,230, 53,114,115,115, 35, 53, 26,205, 1,185, + 92,222,113,229,202,149,158, 45, 91,182,180, 76, 74, 74, 34, 44,203, 58, 31, 59,118,236,163, 85,171, 86,117, 33,132,116,168,168, +145,203,138,164,179, 21, 61,235,180,206,138, 60, 63, 27, 64,183,146,255,115, 90,229, 48,202,122,246,208,208, 59, 47, 81,137,169, +245,132, 16, 70, 42,149,174,116,113,113, 25,161,213,106,181,200,143,189, 70,157,157,157,139, 26, 28, 0,208,235,245, 25, 25, 25, + 25,254, 85,184,143,254, 0, 70,218,216,216,140,248,242,203, 47,109,187,117,235,134, 29, 59,118,124,186,105,211,166, 12, 66,200, +175, 0,126,166,148, 62,174, 36,237,180,196,196,196,238, 82,169,148,120,122,122,178, 0,206, 87, 34, 61,126, 0,102, 21, 52, 54, +107, 41,165, 60, 33,164, 61,144,255,188, 3, 88, 82, 40,220, 88,150, 93,235,239,239,255,254,195,135, 15,215, 81, 74,191,173,234, +179,238,226,226,178, 97,205,154, 53, 3,123,245,234,197,166,164,164,184, 55,104,208, 96, 39,128,214,111,160, 65,250, 88,161, 80, + 76,174, 95,191,126,192,227,199,143, 35,178,179,179,151, 21,220, 79, 90,206, 57, 30, 0, 58,218,216,216,116,152, 53,107,150, 69, +143, 30, 61,176,113,227,198,238,155, 54,109,202, 37,132,156, 3,112,246,117, 69,160, 68, 34, 25, 31, 27, 27,235, 64, 41,133,171, +171,235,120, 84,176,184,249, 63, 5,150,101, 87, 14, 26, 52,104,196,206,157, 59, 85, 81, 81, 81, 42,119,119,247,162,224,217,132, +144, 42,183,159, 34, 94,219,162,181,177, 80,112,153, 20, 71, 75, 46, 87,201,120, 94, 91, 59, 62,225,254,192, 54,109,127,178, 6, +128,139, 23, 62, 27,232,228, 82, 55, 84, 46, 87, 69, 40,172,148, 7,251,246,236,216,176,127,143,182,196,195,213, 9,177, 9,201, +206, 63,239, 62,213,245,216,169,243, 7,145, 31, 64,172, 84,112,134,116,152, 25,206,226,241,229, 85,112,104, 23,143,213,199, 99, +113,245,222, 11,168,179, 82, 81,205,197, 12, 63, 76,234, 12, 23, 91, 85,149, 50,105,225,236,215,158, 81,170,246,124, 48,228, 67, +235,247,123,215,145,122,187,184,128, 82, 5, 34, 34,115, 91,156, 56,125,190,233,129,125,187,198, 91, 56,251, 13,202, 77,138, 48, +249,229,214,216,141,152,229, 25,208, 91,194,146,143, 90, 55,175,219, 97, 72,247,214, 76, 64,157, 90, 8, 15,123,216,249,200,239, +215,127, 8,112,102,206,113, 60,221,102, 46,195,225,219,241,101, 7,244, 43, 77,112,116,234,212,169,181, 66,161, 48, 20, 63, 78, +167,211,201, 8,193, 59, 85, 17, 27,133,215,208,235,117,140, 84, 42, 7,195,144, 47,234,215,175, 95, 39, 53, 53,245, 60, 33,228, +151,184,184,202, 89, 11, 62, 39, 68,158, 33,145, 52,102, 20, 10, 87, 94,175,183, 7, 0, 34,151,103,120,216,218,214,155,245,213, + 87, 22, 44,203, 10,105,105,105, 80,171,213,100,212,168, 81,202,200,200,200,190, 0, 86, 85,144, 70,108,218,180,201,207,213,213, + 85, 95,242,191,132,132, 4,121,175, 94,239, 87,229,165,237,247,206,187, 45, 39,159, 58,117,178, 78,118,122,134,118,211,242, 13, +183,141, 74,149,174,122, 29,127,233,218,141, 91,173, 71,143, 24,250, 25, 33,228, 46,165, 52,162, 18,156, 94,102,102,102, 7,151, + 46, 93, 26,216,190,125,123,169,147,147, 19,146,146,146,240,240,225,195,192,223,127,255,189,247,214,173, 91,167, 16, 66,250, 82, + 74, 77,137,224,238,123,110,219, 47, 78,230,118,246,224,141, 70,184,213,111, 84, 20,223,236,233,239,167,193, 25, 12, 16,140, 70, +212,233,209, 59,223, 44, 35, 8, 8, 8, 8,168, 82,212, 93, 66,136, 91,221,186,117,183,127,255,253,247, 50,157, 78,135,235,215, +175,227,252,249,243, 66, 66, 66,194,162,138, 68, 22, 33,228,244,188,121,243, 60, 90,181,106,101,153,154,154, 10,158,231, 29, 14, + 31, 62, 60,190, 81,163, 70, 86,158,158,158,242,109,219,182, 33, 55, 55, 23, 28,199,217,213,168, 81,195,110,200,144, 33,250,109, +219,182, 77, 1,176,184, 44, 75, 86,118, 36,157,157, 72,106,116,245,111, 60, 12,137,228,100,215, 47,186,185,158,176,170, 73,138, + 44, 91,221,106,214,180,172, 81,219,124,186,133, 85, 61,187,236,184,179,211,187,213,172,185,233, 68,100,197,157, 33, 66, 8,195, + 48,204,202,190,125,251,126,176,123,247,110,213,195,135, 15, 85,117,234,212,129, 32, 8, 69, 17,248, 11, 3,206,250,250,250, 86, +229, 62, 46, 26, 59,118,236,244,129, 3, 7,162,126,253,250, 69, 65, 81,231,206,157,139,233,211,167,219, 94,188,120,113,202,174, + 93,187,166, 16, 66, 22, 83, 74,103, 84,166, 45, 47,222, 94, 86, 50, 89, 95, 63,127,254,124,192,193,131, 7,135, 78,155, 54,205, + 23,192, 4, 0,115,210,210,210,218, 2,128,189,189,189, 28,192,121, 66,200,199, 95,126,249,229,184, 25, 51,102,160,123,247,238, +115, 8, 33,223, 85,197,202, 71, 8, 97, 29, 28, 28,186,247,234,213,139, 53, 26,141, 48, 55, 55,135,209,104,172,249,154, 2,139, + 0, 88, 51,102,204,152,113, 99,199,142,133,173,173, 45,140, 70,163,223,238,221,187, 55,205,153, 51,231, 93, 66,200,200,210,210, + 74, 8, 25, 54,110,220,184,126, 31,126,248, 33,154, 52,105, 2,137, 36,255, 54, 46, 93,186, 20, 11, 22, 44,176, 56,125,250,116, +239,109,219,182,245, 38,132, 28,160,148, 86, 57, 22,154, 32, 8,144, 72, 36,120,249,242, 37,156,156,156, 20,118,118,118,167, 8, + 33, 27,211,210,210, 14,253,139,172, 38, 75, 6, 13, 26,244,193,206,157, 59, 45, 0,224,135, 31,126,192,228,201,147,225,236,236, + 12, 11, 11, 11, 81,237,252, 75, 44, 90, 37,227,104, 85, 41,188,131, 90,173,110, 52,243,243,143,192, 48,249,189,198, 90,213,189, +176,240,171,209,228,200,177, 83,141,202, 59, 79,170,116,195,227,203,171,160,240,156, 4,157,145,195,181,123,207,113,230,135, 46, + 0, 0,191,110,179,160, 51,116, 40, 84,134,118,114, 51,179, 37,122,158,255, 3, 46, 46,215, 17, 29,157, 82,145,200,114,116,113, + 62,182,126,253, 98,179,192,154,254, 48,112, 70,196, 37,199,129, 16, 5, 60,220, 45,241,241,176,110,210,182,109,221, 28,190,254, +122, 67,176,185,163, 95,159,188,148,136, 10, 3,134,250, 59,146, 45,173, 27,249, 14, 28, 18,212, 74, 81, 47,176, 46,100, 10,179, +255, 9,176, 38, 77,208,184, 73, 19,102, 70,110, 78,167, 27, 55,111,119,218,127,250,154,206,223,145,236,125,156, 66,135,151, 87, + 14,197, 5,199,196,137, 19, 81,216,251, 46, 68, 82, 82, 18,126,255,253, 92,169,231,152, 90,214,197,175,241,221,119,223, 89,102, +100,100,116,219,188,121,243,123,174,174,174,223, 37, 36, 36, 92, 54,133,228, 35, 66,170, 65,161,232, 48, 98,217, 50,161,225,251, +239,179, 54, 46, 46,140,192,243, 36,254,217, 51,251,229,171, 86,181, 75,127,250,212, 44,207,206, 46, 61, 67,163, 81, 71, 68, 68, + 64,169, 84, 18,137, 68,210,180, 20,133,159, 68, 8, 89,194, 48,100, 58, 33, 4, 10,133, 50, 98,236,216,177,119, 10,254,174,246, +219,111,191,169,122,246,236,169, 6, 16,149,111, 14, 87,186,179, 44,227,151,239, 64,136, 37,166, 8, 76,115,115,243,207,191,253, +126,177,121,118,122,166,198,144,151,103,116,180,178, 32,196,194,146,205,206,202,201,137, 75, 72,209,205,154,191,128, 29,243,241, +135,159, 3, 24,111,170,200,106,208,160,193,141,131, 7, 15, 58,217,219,219, 35, 51, 51, 19,105,105,105,184,113,227, 6, 4, 65, + 64,223,190,125, 21, 45,154, 55,107,244,213,172,217, 87, 9, 33,239,154, 34,182,204,237, 28,240, 67,171,134,249,141,117, 84, 90, + 81,249,108, 28,208,163,232,152, 5,177, 89, 0, 0,165, 82,249, 58, 75, 72,189,219,161, 67, 7, 25, 0,140, 28, 57, 50, 59, 39, + 39,103, 33,128,157,180,156,160,170, 5,152, 50,123,246,108,247,234,213,171,123,239,220,185, 19,185,185,185, 0,224, 84,189,122, +117,248,251,251,243, 33, 33, 33,240,243,243,131,165,165, 37, 46, 94,188,136,107,215,174,161,113,227,198,150, 50,153,108, 96, 89, + 66,171, 93,151,118,179, 21, 61,235,180,246,111, 60, 12, 22, 86,174,216,180,107, 15, 30,223,222,218, 90,103,120, 56,123,225, 4, +247, 15, 53, 84, 49,220,195,215,114, 70,181, 38,109,237,107,213,125, 31,222,141,239, 56,104,249, 75,207,231,124, 90, 99,145, 68, +169,221, 58,111,105,124, 90, 89, 34, 11,192, 15,125,251,246, 29,176,123,247,110, 27, 0,120,240,224, 1,146,146,146,224,232,232, + 8,165, 82, 9,169, 84, 90,180, 62,105, 21, 49,124,237,218,181, 69,162,141,227,184,162, 85, 0, 84, 42, 21,218,180,105,131,134, + 13, 27,226,208,161, 67,195, 1,204, 40, 37,141,173,154, 55,111,190,195,219,219,219,179,248,254,160,160, 32, 12, 30, 60, 24, 0, +208,182,109,219, 14,253,251,247,167,133,130, 48, 33, 33, 33,247,230,205,155,157, 40,165,215, 75, 75, 16,195, 48,154,184,184, 56, +124,249,229,151,120,241,226,197,167,132,144,104, 0, 74,185, 92, 94,212, 63, 38,132,248,213,173, 91,119,229,228,201,147, 17, 25, + 25,137,240,240,240, 27, 85, 29, 74,165,148,242, 62, 62, 62, 79,141, 70, 99, 19,142,227,160,209,104,208,167, 79, 31,165,157,157, + 93, 18,203,178,143, 82, 83, 83,135, 22,248,164,152,218, 8, 41, 1, 44, 27, 59,118,236,184,105,211,166,225,220,185,115, 56,114, +228, 8, 62,252,240, 67, 76,154, 52, 9, 22, 22, 22, 35, 38, 77,154,116, 21,249, 11,154,151, 68,135,181,107,215,130,231,249, 63, + 61, 27, 74,165, 18,173, 90,181, 66, 64, 64, 0,142, 28, 57,210, 1,197,214, 71,173,100, 35,233,221,183,111, 95,185, 32, 8,200, +203,203, 67, 72, 72,136,133,153,153,153,133,135,135,199, 40, 0,255, 26,161,229,237,237, 61,118,247,238,221, 22,197, 71,127, 20, + 10, 5,138,213, 3, 17,255,176, 69,171,162, 30, 86, 17,244,122,181, 65, 34, 97, 30,185,185,214,223,123,241,194,103, 69, 67,135, + 0,243, 72,175, 87, 27, 0,128, 23, 40,178,213, 28,204, 20, 12,162, 18,115, 16,246, 44,181,180, 11,191, 50, 69, 83,106,230, 5, + 69,179, 40, 80, 74,161, 55,240,208,101, 37, 98, 97,176, 26, 15, 99,181,208,231,101, 64,111,200,119,195,114,112,112,144,156, 58, +117, 98,242,217,179,191,143,251,245,215, 95,217, 88,107,235,112,100,101, 53, 42,141,211,206,174,166,165,196,220,108,239,186,245, +115,204, 40,251, 12, 17, 49,121,168,229,209, 12, 14, 54,158, 72, 76,205,195, 31,225,199,241,232,201, 49, 84,119,245,198,164,207, +187, 42,191,253,126,231, 30, 91,219,234, 94, 25, 25,207,179,203, 74,103, 1,134,109, 56, 25, 1, 46,253, 25,248,180, 72,240, 57, +241,127, 22,120,142, 94,104,220,222, 29,142,158, 53, 21,195, 39, 45, 24, 6, 96,120,105,156,148,210, 36,150,101,215, 49, 12, 25, + 71, 8, 65,253,250, 13, 98,151, 45, 91,102, 40,229,154,134,250,245, 27,196,178, 44,227,145,255, 98,103,214, 10, 2,159, 84, 65, + 58, 95, 17, 53,114,185, 98, 90,190,217,223,245,101,112,112,176, 97,192,128, 1, 88,186,116,169,124,250,244,233,179, 60, 60, 60, + 70,150, 28,222, 43,201,217,151, 16, 47,247,154, 53, 59,127,247,199, 31, 84,106, 52,146,244, 27, 55,178, 51, 19, 18,184,196,156, + 28,249,190, 71,143,186,127, 50,117,170,220,211,211, 19,151,143, 29,179, 79,201,203,163,153, 58,157, 38, 51, 51,147,114, 28,119, +163,140,188,207,116,118,118, 86,109,218,180,201,111,236,216,177,119,226,227,227,103, 22,188, 32, 22, 2, 8, 0, 16, 85,108, 31, +214,175,223, 19, 55,106,212,168,136,164,164,164,153,229,165,179, 24,234, 58, 57, 58,169,118,109,216,118,223,206,210,140,113,244, +112, 99,164, 54, 54, 18, 78,110, 38, 19, 0, 77,117,207,154,230, 0,234,150,113,207,206,150,236,113,155,153,153, 29, 60,122,244, +168,147, 84, 42, 5,207,243,112,116,116,196,139, 23, 47,144,153,153,137,156,156, 28, 60,127,244, 16, 62,158,158,248,122,198,116, +215, 9,211,103, 28, 36,132, 52, 41,222,152,149,186, 0,178,209,240, 39,203, 94, 25, 11,145,191,242,109, 74,185,151,192,139,152, +152, 24, 88, 88, 88, 32, 48, 48,208,226,143, 63,254,184, 84,150,200, 42,177, 8,240,192,150, 45, 91, 90,238,218,181, 11,141, 27, + 55,134,181,181, 53, 66, 66, 66,240,224,193, 3, 24, 12, 6, 38, 55, 55, 23,150,150,150, 88,180,104, 17,188,189,189,145,157,157, +141,152,152, 24,123,169, 84,234, 80, 22,103,200,169,144,111,179, 34,207,207, 78, 36, 39,187,110,218,181, 7,163,134, 12,130, 11, +125,118,201,186, 38,249,182,115,207,150,115, 41,235,217,195,220,178,190,173,111, 96, 79,200,228, 22,152, 48,109, 1, 34, 66,127, +179, 85,231,220,255,148,240, 47, 61, 1, 76, 44,201, 89, 96, 17, 97, 60, 61, 61, 63,217,183,111,159,101,177,161,148,162, 53, 15, +139, 47, 2, 95,214,130,239,166,220, 79, 66, 8, 94,188,120, 1, 39, 39, 39, 88, 88, 88, 20, 45, 32,254,240,225, 67, 92,187,118, + 13,133,171, 81,148,193, 57,244,236,217,179,158,230,230,230, 37,143, 65,106,106, 42, 56,142,131, 74,165, 2,207,243, 48, 24, 12, + 48, 26,141,208,106,181, 22, 1, 1, 1,227, 1, 92, 47,141, 83, 16,132, 47, 6, 14, 28,216,242,250,245,235, 53, 86,173, 90, 5, +189, 94,255, 67, 98, 98, 34,250,245,235, 7, 65, 16,208,161, 67,135,119, 40,165,143,103,205,154, 5, 0,152, 60,121,178, 49, 47, + 47,111,108, 85,242, 94,144,255,128,254,253,251,215, 56,119,238, 28, 90,183,110, 13,157, 78,135,165, 75,151, 90,173, 95,191,222, +106,219,182,109,142,211,166, 77,251, 5, 64,151,242, 56, 11,202,235, 7, 23, 23,151,113, 67,134, 12, 49, 43, 88,195, 20, 91,183, +110,197,215, 95,127,189, 27,192,172, 19, 39, 78,204, 59,114,228,200,176, 79, 62,249, 4, 95,127,253,245,164, 66,161, 85, 26,231, +243,231,207,225,232,232, 8, 43, 43,171,252,151,165,193,128,187,119,239,226,204,153, 51,168, 93,187,182, 41, 13,225,217,114, 68, +214, 47,187,118,237,178,124,249,242, 37, 46, 94,188, 8, 31, 31, 31,168,213,234, 10,215,134,125,211,139, 63, 87,196,169,209,104, +180, 49, 49, 49, 22,139, 23, 47,134,171,171, 43,188,189,189,161, 84, 42, 65, 8,129,209,104, 44,115,121, 53, 83,210,217,174, 29, +145,164,198,217,246,178,182,177,253,148, 82, 42,201,202,202,216, 96, 64,230,254,200, 72,170,255,187,242,254, 31,183,104, 53,162, +148,222, 41,190,230, 97, 97,103, 68, 2, 0,193,193,193, 52, 40, 40,136, 20,126,187,187, 35, 59, 53,213, 54,194,201,165,222, 30, + 39,151,186, 5,235,126, 49,143, 88,214, 54,194,217, 89,157, 13, 0, 6,142,226,202,163, 76,220,127,154,136, 7, 79, 19, 97,174, + 48,205,248,162, 51,112,249,243, 51, 41,133, 54,247,127,157, 86,131, 58, 3, 58, 67,190,187,135, 94,167, 70, 86, 74, 56, 25,208, +167,147,114,220,184, 49,112,117,117,119, 44,139,207,160, 80, 78,154, 48,185,187,141,157,141, 20,199,254, 56,137,119,106,247,129, + 82, 33, 69, 90,150, 22, 32,192,147,103,103, 0,193, 18,161, 17, 49,104, 94, 87,133, 46,157,235, 88, 28,218,255,120, 42,128, 57, +166,164,151,139,189, 1,153,111, 55, 72,121, 35,140,169,143, 33,100, 70, 3,230, 46,208, 16, 11,164, 37, 68,227,209,165, 3,249, + 19, 78, 43, 0,207,243,159, 58, 58, 58,102,206,154, 53,171, 93,173, 90,181, 12,227,199,143,191, 23, 21, 21,245,202,178, 54,213, +170, 85,251,113,237,218,181,120,250,244,105,220,119,223,125, 23,146,146,146, 50,187,146, 15,232, 12, 66,200,138,130,161,184,255, + 99,239,170,195,163, 58,222,238,153,245,221,100,227, 46, 36, 72, 8, 16,220,157, 16,164, 72,128,226, 94,180, 80,220, 75,176,226, + 36, 45,174,197,138,123,177,226, 78,144,224, 16,129, 64,128, 16, 79,136,251,250,189,119,190, 63, 34, 13, 33,178, 1,250,253,108, +207,243,236,179,123,247,222,125,119,238,204,220,153, 51,231,157,121, 39,229,204,153, 51,141,253,253,253,167,111,216,176,193,110, +202,148, 41,226, 41, 83,166,140, 6,176,188, 44,119,161,177, 68,210,105,229,157, 59,148,137,141, 85, 31,220,188, 89,188, 53, 32, + 96,129,150,227, 28,173,109,109, 73,171,230,205,115,141,120,188,148,212,196, 68,198,166, 90, 53,126,196,181,107, 86, 84, 38,139, +191,116,233, 82, 86, 78, 78, 78,169, 91,231,240,249,124, 69, 73,238,194,146,224,224,224,160, 41,105, 14, 87, 25,149, 59,139,163, + 84,107, 94,181, 42,253,174, 99,203,234,239,222,132,135, 75,205,205,249,238,213,171,212,124,249, 58,226, 49,101, 89, 21, 33, 36, + 75, 31, 91,124, 62,127,208,134, 13, 27,234,153,154,154,130,227, 56,152,153,153, 33, 57, 57, 25, 26,141, 6, 89, 89, 89,208,100, +103, 66,147,153,137,224,168, 8,180,110,223, 30, 3,186,126,231,113,224,204, 95,131, 0, 28, 45,203,174, 99,253, 70,133, 74,214, +178,202, 86,127,251,130, 98, 50, 10, 73,215,175,141,220, 33,146,203,209,121,166,207,215, 52,208,207,197, 98,241,197,190,125,251, +118,159, 61,123, 54, 47, 33, 33,225, 50, 33,164, 53,165,244, 85,153,138,176, 92,238,150,146,146,130,236,236,108,152,153,153, 97, +195,134, 13,176,179,179,131, 66,161,192,147, 39, 79,168,179,179, 51,185,117,235, 22,156,157,157,145,146,146, 2,173, 86,139,220, +220,220,143, 26,141,166, 84,119,121,190,123,176,219,204,110, 14,151,222, 60,219,223,214,137,124,120, 50,112,150,231,187, 55,193, +175,163,175, 94,187,191,156, 81, 73, 99, 50, 98,175,207,173,218,244,185,245,164, 57, 75,177,101,245, 98,188,121,116, 39,205,206, + 37,107,171,140,168,247, 53,239, 92,122,122,115,115,115, 85,175, 95,191, 54, 9, 12, 12, 4, 33, 4,102,102,102, 48, 50, 50, 42, +145,108,125, 65, 99,201, 43,242, 63,200,205,205,133, 72, 36,130,149,149, 21,118,239,222, 93,216,241, 86,169, 82,165, 44, 51, 59, + 58,119,238, 60,200,197,197,197,164,232,151, 77,155, 54,197,248,241,227,241,251,239,191, 35, 32, 32,224,147,253, 52, 63,126,252, +152,160,211,233,246,149, 81,182, 25,132,144,174,125,250,244,121,118,247,238, 93,211,221,187,119,131, 97,152, 18, 95,187,118,237, +194,195,135, 15, 23, 81, 74, 95,127, 97,135, 81,171, 95,191,126,119, 14, 29, 58,100,158,156,156,140,148,148, 20,228,228,228, 32, + 55, 55, 23, 44,203,162,102,205,154,132, 97,152,154,229,229, 35,159,207, 63,179,121,243,230,158, 63,254,248, 35, 4, 2, 1, 52, + 26, 13, 54,111,222,140,185,115,231, 38, 2, 24, 73, 41,213, 18, 66, 22,236,219,183,111, 68,175, 94,189,208,160, 65, 3,143,178, +108,230,228,228, 32, 39, 39, 7, 66,161, 16,246,246,246, 88,177, 98, 5, 52,154,188,102,165, 70,141, 26,133, 46, 79, 0, 59,106, +212,168,209, 51, 44, 44,108, 13,165,244,183, 82,218,153, 62,148,210,113, 44,203,102,247,237,219,215,234,200,145, 35, 38,113,113, +113,120,246,236, 25, 22, 45, 90,148,206,113, 28,203,113, 28, 81, 42,149, 31,236,236,236,158, 73, 36, 18,153, 66,161, 72, 75, 77, + 77, 93, 69, 41,189,252, 47,236,204,137, 80, 40,196,152, 49, 99, 32, 16, 8, 32,147,201,160, 82,169,160,211,233, 10,201, 60, 42, +232,150,118,119, 55,177, 18, 64,244, 99,141, 26,237,166, 15,152,214,195,198,193,209, 9,230,166, 18,132,134,190,106,125,243,198, +181,205,181,107,218,108,231, 52,186,237,175, 35, 50,254,241,205,238,139,115,145,255, 48,174,213, 8,192,115, 20,217,243, 16,249, +171, 16, 75,105,137,250,179,214,214,127,166,196,197,137,181, 98,177, 81, 88,129,202,149, 71,178,250,179,192, 17, 48, 90, 93,126, + 67, 65,243, 95,122, 18, 45, 29,139,119,111, 66,112,247,234, 95,176, 86,196, 33,229, 67, 67, 64, 84, 15, 26,101, 38, 84, 26,109, +254,232,141, 69,224,179, 27,200,202, 76, 67,221, 38, 61, 0, 30,239, 97,105,246,204,172, 72,143, 86,141,235,243,223, 69,135,160, +105,141,254,168,230,220, 22, 81, 9, 89,200,200, 81, 35, 61, 75,133,134,117,125,144,156,174, 68,150, 66,133, 87,239, 14,192,201, +177, 26,143, 8,194, 59,234, 75,180,212,175, 78, 65,253,250, 44, 68,174,173, 33,174,217, 11,124,215, 54,136, 14,186,133,192, 75, +235, 17,251,242, 30, 40,199,194,161, 70, 51,125, 31,146,205,151, 47, 95,110,214,186,117,107, 65,167, 78,157, 26, 56, 58, 58, 54, +136,143,143, 15,204, 87,115, 26,116,239,222,189,129,141,141, 13, 54,110,220,168, 36,132,108,254,194,206,182,168,187,237,177,157, +157,221,202, 83,167, 78,109, 30, 63,126, 60,108,109,109,235,149,245,219,100,161,176,193,200, 85,171,168,144,207,167, 71,183,108, + 17, 45,189,124,121,237,222,125,251, 68, 29,188,188, 8,165, 20, 47, 94,188, 48,250,117,203, 22,163,161,223,127, 31, 25,149,148, +196,248, 7, 4,104, 19, 98, 99,179,147,114,115,151,198,199,199,127,252, 87,212,108,157, 78,247,224, 67,196, 7,167, 38,205, 27, +218, 60, 15,253,240,178, 75,135, 86,173,120, 60, 30,239, 77,120, 84,128,141,141,169,209,181,171,215,180, 58,157,238,129, 62,182, + 36, 18, 73,143, 14, 29, 58, 8,210,211,211,225,232,232,136,228,228,100,196,197,197,229, 41, 14,153,233,208,102,102, 66,151,149, + 1, 54, 55, 7, 31,158, 60, 70,195,106, 85, 37, 39,242, 38,203, 31, 45,167, 76, 74, 84,170,138, 42, 91, 98, 19, 19,136,229,114, +144, 10,186, 13, 9, 33,223,155,155,155,207,205,200,200,184, 72, 41, 93,161,213,106, 39,207,157, 59,183,233,166, 77,155,172, 87, +174, 92,105, 58,110,220,184, 19,132,144,134,148, 82,117, 25, 29,216,123,134, 97,172, 1,216,222,184,113, 3,182,182,182,200,204, +204, 44, 80, 90, 52, 10,133, 66,154,154,154, 10,181, 90, 13,141, 70, 3, 83, 83, 83, 60,125,250, 52,157, 97,152,191,202, 75,159, +169, 27, 89,161,214,134, 46,180,242, 48,142,215, 50, 22,158, 73,105, 92,250,226, 53,241,203, 0,172,237,230,230,182, 75,203,221, +249,240, 54,228,156, 69,196,147,219,105,241,111,115,171,237,186, 16,158, 93, 70, 62, 82, 66, 8, 71, 8,161, 53,106,212, 64,114, +114, 50,248,124, 62,140,140,140, 32,151,203, 49,111,222, 60,108,222,188,185,194, 68,139, 16, 34, 53, 54, 54, 94,197,227,241, 6, +153,153,153,217,176, 44, 11, 31, 31, 31,244,236,217, 19, 98,177, 24, 90,173,182, 80,209, 44, 80,169,202, 82, 58, 40,165, 47, 0, +152, 22,251, 15, 47,107,107,235,155,106,181, 26,225,225,225, 56,115,230, 76,123, 74,169,127, 5,159,237,112, 66, 72,215, 54,109, +218,236,111,220,184,177, 27,165, 20,245,234,213,195,224,193,131,113,224,192, 1, 4, 6, 6, 34, 51, 51,147,187,118,237,218, 94, + 0,107, 42,218,129,231,231,111,205,126,253,250,221, 59,124,248,176, 69,106,106, 42,148, 74, 37,114,115,115,113,226,196, 9,180, +110,221, 26,214,214,214, 56,116,232, 16, 67, 41, 61, 87, 22,201,226,241,120,187,183,111,223,222,115,236,216,177,216,186,117, 43, +142, 30, 61,138, 94,189,122, 97,208,160, 65, 72, 78, 78,182, 91,189,122,245, 8, 66,200,110, 0,139, 7, 15, 30,140,156,156, 28, + 60,121,242, 36, 84,207,103, 30, 25, 25, 25,200,200,200,128, 76, 38, 43,250,140, 17, 0, 7,214,175, 95, 63,100,250,244,233,168, + 86,173,218,226,252, 69, 65,159,173, 18,229, 56,238,167,184,184, 56, 11,129, 64, 96,197, 48, 12, 98, 98, 98,240,244,233, 83, 76, +154, 52, 41, 45, 45, 45,109, 60,165, 52,138, 16,178, 96,204,152, 49, 43,102,206,156, 89, 88,151,102,206,156,121,158, 16,210,245, +255, 91,205,169, 89,211,162,142,152, 47,153, 38, 18, 9,173,210,211,211, 11,219, 14,141, 70, 3,181, 90,253,137,146, 37, 18, 9, +173,154, 53,114,189,160, 84,100,207,127, 25,150, 94,234, 6,233,181,171,155,215, 55, 50, 54,155,238,221,117,192,176,239,186,246, +230, 51, 58, 29,174, 92, 57,135, 63,254,216, 6,175, 54, 53, 80,173,122, 61, 76,153, 58,205, 76,173, 97,124,174, 93,187, 60,183, + 85,179,170,151,179,179, 50,230,149,101,243,127, 28, 23,242,201,213,133, 18, 93,135, 37, 51,200,254,172,147, 19,210,243, 31, 28, +107, 11, 11,139, 45, 44,203,122, 1, 63, 66, 40,183,199,171,167,143,144,150, 46,132, 90,201,130,163,121,100, 75, 47,226,162,214, +224,206,149,179,216,176,126, 45, 82, 83, 83,209,166, 93,123,228, 8, 42,193,165,146, 11, 84, 74, 69,254, 67, 3,104, 53, 58,216, +216,185,226,249,243, 64, 93, 86,110,110,169, 13,146, 72,170,245,112,177,171, 1,181,182, 37,164, 98, 49, 50,179, 53, 72,207, 39, + 89,135,254, 28, 8,181, 66, 9, 70,163, 5,163,209,193,198,165, 31,106,217,117, 0,199,158,171, 83,161,236,227, 88,104, 35,238, + 64, 27,113, 7,178,150, 83,241,151,239,144, 98, 13,160,126,251,238, 38, 37, 37, 37, 57, 58, 58,158,123,241,226, 69,159,129, 3, + 7,226,214,173, 91,227, 0, 76,200,119,223,140, 27, 56,112, 32, 94,188,120,129,151, 47, 95,158, 75, 74, 74,250, 38, 27,175,138, +197, 98,165, 90,157,215,199, 26, 25, 25, 73,203,185,214,169,105,223,190,188,204,231,207,179,214,223,191,191,120,215,238,221,162, + 78, 29, 59, 18, 29,195,128, 99, 89, 84,119,119, 39,223,125,247,157,241,129,227,199,173,248, 58,221,195, 57,147, 39,223,248,125, +248,240,236, 71, 57, 57,250, 78, 52,175,156,239, 50, 4,128,202,101,124,167, 55,212,106,245,166,159,126, 28,213,201,255,206,189, + 74, 46,149,156, 76,175, 92,243, 15,148,200,196,188,106, 85,220,248,233,153,105,130,101,139,231,203,212,106,181,190,164,213,195, +218,218, 26, 31, 63,126,196,187,119,239,160, 86,171,161,211,233,192, 41,114,161, 73,207,128, 38, 51, 13, 68,165,132,132,101,161, + 74, 73, 68,229,106, 85,129,191, 87, 36,150,235,138, 42,137,104, 21,188, 75, 77, 77, 33, 50,150,131, 39, 20,234,189, 57, 58, 33, +164,113,179,102,205,142,159, 60,121, 82, 52,122,244,232,230,132,144, 45,249, 29, 68,199, 69,139, 22, 61,222,178,101,139,100,252, +248,241, 53,215,172, 89, 51, 2,192,142,210,236,168, 84,170,227, 23, 46, 92, 24,234,234,234,106, 27, 28, 28, 12,149, 74, 5,142, +227,208,173, 91, 55, 0, 40,172, 51,111,222,188, 81,170, 84,170,164,144,144,144,172,168,168, 40, 13,244, 88, 37,184,120, 99,252, +131,153, 3,156,251,218,217, 59, 61,148,202, 42, 87,161, 57,207,251,204, 28,224,188,122,221,137, 88,213,165,247,239,179, 23, 77, +170,230,151,155, 29, 52,201,220, 57,103,235,165,115,225,250,172, 10,166, 5,203,217,173,172,172, 32, 16, 8, 32, 20, 10, 33, 18, +137, 64, 8,193,212,169, 83,177,115,231,206, 50, 93,135,197, 73,150,137,137,201,203,165, 75,151, 58,143, 31, 63, 94, 36,149, 74, +145,158,158,142, 67,135, 14, 97,204,152, 49,248,227,143, 63, 74,156,255, 82,158, 75,169, 4,181,116,250,240,225,195,161,209,104, + 48,120,240, 96,236,218,181,107, 58, 0,255,138,214,119, 74,233, 67, 66,136,123, 96, 96,160, 41,128, 94,131, 6, 13,218,215,175, + 95, 63,248,251,251,227,220,185,115,237, 1,132, 1, 80, 2,240,205,223,196,217,183,172,133, 32,249, 33, 28,182,217,216,216,244, +170, 83,167, 78, 96,191,126,253,234, 30, 62,124,216, 60, 41, 41,169, 96,241, 3, 34, 34, 34,176,103,207,158,132,221,187,119,103, +177, 44,107,197,227,241, 46,100,100,100,204, 43,195, 93,184,123,253,250,245,163,242,221,129, 56,121,242, 36, 93,187,118, 45, 89, +180,104, 17,210,211,211,225,229,229,133,237,219,183, 79,203,201,201,105,176,118,237,218, 31, 7, 12, 24,128,101,203,150, 33, 55, + 55,119,125,121,131,149, 50,200, 23, 1,208,106,253,250,245,174,211,167, 79,199,201,147, 39,209,184,113, 99,217,135, 15, 31,126, + 7, 48,182,164,242,163,148,226,195,135, 15, 80, 40, 20,184,119,239, 30, 22, 47, 94,156, 94,132,100, 77,155, 48, 97,194,138,105, +211,166, 97,213,170, 85, 52, 56, 56, 56,169, 95,191,126,118, 59,119,238,228, 87,175, 94,125, 26,242, 54, 93,255,127, 65, 45,119, + 43,191,102, 77, 61,231, 58, 56, 85,199,161,195, 71,144,150,150, 86,152, 39, 5,249, 66, 41, 69,118,118, 54, 62,126,252, 8, 51, + 83, 19,172, 94,179,162,251,196,113,163, 42, 33, 47, 12,198,231, 13,157,155,229,154,254,131,199,206, 26, 60,116, 20,130, 3,159, +225,192,190, 29, 8, 9,126, 81,104,143,209,105, 17, 22,250, 20, 97,161, 79, 97,103,239,138,239, 58,181, 39, 67,134, 12,233, 54, +124,232, 32, 27, 0,255, 88,232,136,255, 96, 53,235,179, 56, 90, 69,231,108, 9,202,147,235,242, 73,214,203, 99,199,142, 89,181, +105,211,134,207, 48, 12, 46, 95,185,130, 73, 19,126,192,136,225, 62,208,194, 2,140, 70, 4, 78, 36,213, 43, 49, 74,165, 2, 20, + 20,185,185,185, 8, 8, 8, 0,229, 24, 28,216,185, 22,148,114,133, 68, 11,160,208,104,181,112,114,169,137,109,187, 86, 50, 16, + 10, 31,151,102, 47, 43,149,207,234, 24,138,184,164,104, 68, 39,132,192,204,196, 5, 2,161, 11, 82, 51, 20, 16,240,236,161, 83, +189, 1,155, 47,171, 42,114, 99,161,212,126, 93,249,177,153,159,171,167,180, 2,141,174, 82,169, 60,120,240,224,193,238,235,214, +173, 19,123,123,123,215,112,116,116,108, 5, 0,253,251,247,175, 97,106,106,138,131, 7, 15,106,148, 74,229,193,111,168,248,116, +104,214,172, 25,210,211,211, 17, 17, 17, 17, 88,230,189,105, 52, 86,114, 91, 91,126,210,173, 91,186,228,244,244, 74, 29, 58,116, + 32, 58,134, 1,143, 16,164,101,102, 34, 42, 50, 18,230,230,230,228,229,155, 55,242,205, 83,166,156,174, 81,183,174,160, 96, 69, +162, 62, 56,119,238,156, 17,242,230,101,149,249, 93, 5, 43,119, 46, 33,100,212,228,201,147, 79, 31, 60,120,200, 44, 49, 41, 49, + 76, 34, 22, 51,114,185,212,113,248,176,137,130,140,140,140,161,148,210, 28,125,237,165,167,167,227,195,135, 15,144,201,100, 16, + 9,133,224,148, 10,176,185, 57, 80,165, 37,131,175,213, 64,204,178,176, 52,146,160,146,157, 29, 92,108,172,245,178,249,238,230, +213,194,137,239, 69,221,133,171,155,121, 64,108, 44,135,216, 68,142,137,231,111,231,143, 70, 69,192,162,229,250,144, 44,107, 39, + 39,167,191, 14, 31, 62, 44, 74, 78, 78,198,139, 23, 47, 2, 41,165,153,132, 16, 19, 0, 92,104,104,232,245,144,144,144, 30,249, +171,238,202, 91, 45,182,246,212,169, 83,157,219,180,105,195, 84,169, 82,197, 56, 49, 49,209, 37, 53, 53,149, 36, 36,124, 58,215, +249,226,197,139, 82,165, 82,153,203,113,220,105,228,197,129, 42, 55,126,209,204, 1,206,210,128,231,152,234,217,165,114, 61, 83, +235,250, 72, 99,158,215,123, 24,152, 48,117,230, 0,231, 77,235, 78,196,170,100, 68,189,143,176, 49,149, 4, 82,213,126, 61,203, +155, 90, 91, 91, 35, 52, 52, 20, 1, 1, 1,136,138,138,194,135, 15, 31, 62, 33, 84,227,198,141,195,129, 3, 7,244, 82,180,140, +141,141, 87, 45, 89,178,196,121,250,244,233,162, 34,164, 8,147, 39, 79, 70,102,102, 38,118,237,218,133,201,147, 39, 87,184,227, + 47, 86, 86, 85, 59,119,238,236,237,224,224,128,212,212, 84,216,219,219,163, 77,155, 54, 61, 9, 33, 85, 40,165, 17, 95, 88,245, + 39,118,233,210,101,197,210,165, 75,161,211,233, 48,102,204, 24,188,125,251,246,248,219,183,111, 55,184,184,184, 76,253,249,231, +159,237,236,236,236, 48,112,224, 64, 99, 0,125, 75, 51, 98,105,105,233,187, 99,199,142,161,222,222,222, 60,173, 86,219,238,230, +205,155,136,140,140,132, 70,163, 1,195, 48,120,255,254, 61, 38, 79,158,156,144,154,154,234, 73, 41,125,175, 71,186, 70, 47, 88, +176, 96,212,212,169, 83,241,235,175,191, 98,201,146, 37,123,205,204,204,234, 54,108,216,176,209,146, 37, 75, 48,103,206, 28,184, +186,186,194,202,202,170,214,162, 69,139, 60,102,206,156,137, 77,155, 54, 97,241,226,197,123, 1,236,249,146,140,224, 56,142,248, +249,249, 53, 88,191,126,189, 67, 1,201,226,241,120, 56,118,236, 24,158, 63,127,222,179,148,223,108,183,183,183, 31,231,224,224, + 32,190,118,237,154,220,213,213, 21, 12,195,232,242, 73,214,102, 23, 23,151, 73,239,223,191,135,183,183, 55,194,195,195, 15, 82, + 74, 71,120,122,122,230,206,156, 57,211, 72, 38,147,153,253,127,118,224,124, 30, 25,185,106,217, 28, 60,121,254, 6,167, 78,137, +240,228,201, 19,216,217,217, 65, 34,145,128, 82, 10,181, 90,141,228,228,100,232,180,106,212,171, 83, 21,251,119,251, 33, 41, 41, + 25,224,145, 82,167,220, 16, 30, 25, 54,234,135, 62,184,123,239, 10,126,255,125, 7,114,114,114, 75, 25,124, 75, 81,189,134, 7, +156, 28,109, 17, 19, 27, 3,194,131,245, 63,121,175,255,225,174,195,130,231, 93,191,240, 14, 69, 97,110,110,190,225,232,209,163, + 86, 94, 94, 94,252,220,220, 92,112, 28,135,182,109,218, 96,234,244,233, 56,119,248, 48,220,155, 15, 6,209,200,193, 24,233,183, +234, 65,165, 84,160,118,163, 86, 24, 48,112, 16,162,163,162,208,165, 71, 63,168, 84,138,194, 17, 70,129,162,165,209,104, 97,109, + 91, 9, 87,175, 94,229, 99,204,152, 82,231,152,176, 90,113, 80,216,123, 85,235, 12,229,115, 4, 60, 57, 0,173, 90,139,122,245, + 22, 65,203, 89,193,214,121, 28,116,186, 51,200, 74,190,153,231,198,176,242, 66,108,116, 52,120,124,209,203, 47,205, 68, 46, 55, +249,171, 26,221,140,140,140, 76, 71, 71,199, 63, 3, 2, 2,134,245,237,219, 23, 87,175, 94,253, 17, 0,250,246,237,139,128,128, + 0,124,248,240,225,207,140,140,140,204,111, 81,224,142,142,142,189,188,188,188, 6, 55,109,218, 20,231,207,159, 7,165,244,174, + 94, 15,182, 80, 72,121, 60, 30, 56,142, 3, 1,144,154,145,129,183,111,223, 34, 53, 37, 5, 58,157, 14,185, 57, 57,156, 71,141, + 26, 57,148,227, 76, 42,146,158,162, 43, 12, 81,194,170,195,130,239,190,128,108, 69,201,229,242,232,236,156, 28, 27, 11,115,139, +108,177, 88,204,166,103,100,100,190,122, 25,172,209,179,115, 40, 64,104, 72, 72, 72,221,248,248,120, 68, 71, 71,131,201,205, 6, + 95,173, 1, 79,173, 64,199, 86, 45, 33, 3,133, 20, 28,132,156, 14, 66,190, 16,217,121,171,243,202,117,119, 20, 16,253,162,202, + 22, 33, 36,207, 93,104,108, 12,177,220,228, 19,133, 75,159,250, 36,145, 72, 14,159, 56,113,194,193,201,201, 9,203,150, 45,131, +179,179,115,173,122,245,234, 41,218,182,109, 43,179,179,179, 67,237,218,181,209,170, 85, 43, 92,186,116, 9, 0,222,151,147,127, + 12, 33,228,187,187,119,239,206,186,127,255,254, 0, 66, 8,241,241,241, 65,215,174, 93, 33,149, 74,161, 80, 40,144,158,158,142, +157, 59,119, 18, 74,105,163,252,180,186, 74,165,210, 35,132,144, 88,165, 82, 57,176,184,205, 3,235,235, 59, 38,165,113, 99,236, +236,157,250,120,118,169, 92,175, 67,151, 78,168,234,222, 1, 29,186, 68, 3,128,159,165, 32,114,240,234,133,117, 79, 91, 87,178, +220,115,245,242,181,197,109, 60, 59, 44,240, 25,111,177,194,111, 71,122,150, 30, 13, 25, 56,142,251, 36,118, 80,241,243, 35, 70, +140,192,177, 99,199,202,205, 71, 30,143, 55,104,252,248,241,162,162,223, 21,184,140,123,244,232,129,190,125,251,126, 66,180,172, +173,173, 97,111,111,143,200,200, 72, 0, 72,213,179, 94, 77, 29, 61,122, 52, 81, 42,149, 24, 59,118, 44,118,237,218,133,193,131, + 7, 19,127,127,255,169, 0,166, 87,180,190,243,120,188,213, 63,255,252,243,172,201,147, 39, 35, 45, 45, 13, 23, 47, 94, 68,183, +110,221,112,236,216, 49,155,139, 23, 47,174,242,242,242, 2,159,207,199,249,243,231,193, 48, 76,153,177,190, 68, 34, 81, 47,111, +111,111, 94, 76, 76, 12, 68, 34, 17,154, 52,105,130,216,216, 88, 40, 20, 10,196,197,197, 97,218,180,105, 31, 83, 83, 83,219,235, +251, 28,137, 68,162,233, 83,167, 78,197,209,163, 71,225,227,227,179, 15,192,216,204,204,204, 1,247,239,223, 63,250,253,247,223, + 35, 46, 46, 14,167, 79,159,198,226,197,139,201,136, 17, 35,176,117,235, 86, 76,155, 54,109, 47,128,177,101,172,144,204, 78, 74, + 74, 50,115,115,115, 67, 98, 98, 34,114,114,114,112,250,244,105,219, 75,151, 46, 85,113,114,114, 50,253,240,225, 3,187,124,249, +114,241,244,233,211,177, 97,195, 6,188,120,241, 2, 7, 14, 28, 64,135, 14, 29,152,240,240,240, 18, 85,178,252,144, 13,167, 45, + 45, 45,175, 25, 27, 27, 35, 59, 59,187, 96,101,233,108, 31, 31,159,201,190,190,121, 34,123,124,124, 60, 70,142, 28, 57,156, 16, +194, 45, 93,186,212, 72, 36, 18, 65,165, 82,229,254,127,118,220, 28,203, 1,224, 80,165,146, 28, 87,206,237,198,179,192,112, 60, + 11, 12,129, 88,146, 55, 9, 94,169, 84,160, 81,189,234,104,222,164, 25,226, 19,226,112,240,192,110, 88, 90, 59,149,217,142, 80, + 74, 33, 18,176,240,168, 97,143,195, 7,118,224,252,197, 27, 56,112,240, 72,225,156, 55,129, 64,136,134,141,154,163, 73,147, 54, + 8,255,240, 30,187,119,255, 14, 27,219, 74, 6,231,224, 23,162,208,117, 88,244,189, 24,243,239,208,166, 77, 27,126, 78, 78, 14, + 84, 42, 21, 62,126,252,136,200,200, 72,152, 91,152, 35, 60, 62, 2,237,141,180,248,200,101, 33, 52,240, 37, 75,248,194, 23,229, + 74,131,158, 13, 1,207,134,152, 52,122,112,233,149, 0, 20,198,166,214,121,174, 27,134,121,135, 77,155, 74, 29, 57, 51,172,238, +250,149,107, 55,155,141, 30,209, 75,120,245,230, 46,232, 52, 28,148, 58, 51,228,170, 52,200,213, 10,193, 51,235, 6,164,248,131, + 47,144,160, 69,131,234, 56,125,234,146,150, 50,186, 27,122,103,144, 93, 93, 48,137, 33, 69,136,214,167, 30, 61,169,137,165,222, +174,195,194,142,151,101,143, 29, 58,116,168,119,203,150, 45,141,188,188,188,220,242, 59, 78,237,161, 67,135, 20, 44,203, 30,171, +104, 33, 22,143, 6,239,224,224,208, 72, 36, 18, 13,238,213,171, 87,163, 81,163, 70,225,213,171, 87, 56,120,240, 96, 88,245,234, +213,203,140, 33,198, 23,139, 83,115,146,146,204,229, 85,170, 8, 44, 76, 76,226, 47, 93,188,232,218,169,115,103, 18, 29, 29,141, +212,212, 84,168, 84, 42,188, 8, 12,164, 66, 62, 63,150,152,154,242,222, 60,127,206,227,139,197,169, 21, 72,106,100, 57,171, 14, +125,191, 84,221,170,228, 96,225,182,216,231,167,170, 42,181,170,110, 86, 86, 22, 35, 16, 10,133,206,246,230, 81, 21,116, 67,158, +191,126,253,122,239, 78,157, 58, 73,194,130, 94,128,201,204,132, 38, 51, 29, 34,142,133,101,163, 6,224,107,213,128, 70, 7, 39, + 15, 10, 85,134, 17,252, 31,189,209,169,213,234,114,131, 26, 22, 16, 45, 94, 49, 98, 32,150,203, 33, 49, 49,133, 68, 46, 47, 78, + 24, 72, 57,229,109,212,171, 87,175,142, 45, 90,180, 0,165, 20, 59,119,238,132, 86,171, 21,107,181, 90,104, 52, 26,104,181, 90, +100,101,101,225,192,129, 3,216,182,109,219,125, 0,123,245, 32,171,140, 80, 40,156,204, 48,140,173, 68, 34,209,218,216,216,136, +142, 31, 63, 94, 24,110,162, 97,195,134, 48, 54, 54, 86, 19, 66,180, 0, 96,111,111,175,219,183,111,159,224,251,239,191, 23,149, +100,175,102,189, 90,115,170, 50, 22,158, 82, 89,229, 42,166,214,245, 81,213,189, 3, 0,160,115,143,209,168, 90,221, 5, 89, 41, + 65, 85, 84,202,200, 62, 34, 65,186,197,203, 77,113,175,100,222,117, 71,229, 38,221,126,139,146,151,247,151,216, 81,240,120,188, + 82,221,177,250,144, 44, 66, 8,207,204,204,204,166, 96,158, 79,126, 7,140,132,132, 4,132,134,134,162,102,205,154, 72, 75, 75, +131,147,147, 19, 52, 26, 13,154, 54,109, 10,165, 82,137,245,235,215,227,222,189,123,247,145,191, 50,178,156,255,144,185,187,187, +143,108,212,168, 17, 46, 94,188,136, 39, 79,158,196, 93,185,114,197,169, 77,155, 54,168, 82,165,202, 40, 66,200,124, 74, 75,143, +193, 87,146,171,175, 93,187,118, 83, 38, 79,158,140,144,144, 16,252,244,211, 79,169, 49, 49, 49,167,143, 31, 63, 62,118,241,226, +197,188, 46, 93,186, 32, 33, 33, 1,171, 87,175,102,239,221,187,183, 6,192,178,114,242,241,117, 76, 76,140,179, 74,165, 66, 90, + 90, 26, 24,134,129, 66,161,192,165, 75,151,112,224,192,129,196,124,146,245, 78,223,244, 53,104,208,160, 54,143,199,195,209,163, + 71, 1, 96, 33,165,148, 35,132,156,238,211,167, 79,220,242,229,203,157,230,205,155,135, 31,127,252, 17, 90,173, 22,191,254,250, + 43,230,205,155,119, 33,159,100,149,213,136,174,179,183,183, 31,247,211, 79, 63,213,154, 57,115, 38, 2, 2, 2,108,159, 62,125, +218,228,197,139, 23,168, 84,169, 18, 82, 83, 83, 5, 86, 86, 86,216,176, 97, 3,102,204,152,113, 18, 64,202,131, 7, 15, 6,125, +248,240,193,151, 82,186,186,156,252,220,238,228,228, 52,142, 82, 74, 21, 10, 69,164,143,143,207,234,149, 43, 87, 98,198,140, 25, +120,249,242, 37, 50, 51, 51, 97, 98, 98, 66,126,254,249,231,145, 11, 23, 46,196,152, 49, 99,104,110,110,238,182,255,127,183, 20, + 11, 69,122, 8, 88,181, 5, 26,214,171,137,134,117, 43,227,202,205,103, 0,128,142,253,218, 64,145,155,141,125,251,118,226,221, +187,183, 16, 8,133, 48,183,180,215, 71, 9,132, 38,235, 53, 50,180, 9,232,228,213, 4,221,186,180,199,222,253,199,192,232,180, + 24, 59,122, 40,210, 51, 50,176,127,255,110,132,127,120, 15,129, 80, 8, 43,235,127, 62, 16,106, 89, 92,228, 63,158,104,233,225, +126, 2,199,113,136,139,139,195,211,167, 79, 17, 17, 17, 1, 35, 35, 35, 40, 25,150,251,253,250, 61,142, 16, 81, 44, 71,233,125, +202, 20, 70, 41,254,220, 6,203,198, 21,137, 88,107,102, 97, 97, 33, 86,171,149, 96, 24, 93,145, 94,133, 0, 4, 16, 9, 0, 7, +199,170,136,137,142,161, 42,149,234,118,153, 35, 40,181,106,195,217,211, 39, 38,183,106,221,198,186, 91,199,165, 56,125,102, 17, +210,179,178,160,210, 10,145,171,210, 66,161, 2,204, 45,107,160,105,189,250,136,143, 79, 69,208, 19,255, 28,129, 90,161,207, 68, +209,183,155, 23,140,118, 31, 61,105, 14,100,174,173,161, 14, 61, 13, 46, 39,177, 80,209,146,202, 45, 96,233,226,129,140, 92, 53, + 78,220,120, 6, 0,122,111,245,146,152,152,168,112,116,116, 60, 52,121,242,228, 95,159, 61,123,234, 12, 0,207,158, 61,139, 77, + 72, 72,152,155,152,152,168,168, 72, 1, 22,137, 6, 79,140,140,140,158, 85,175, 94, 61,222,219,219,219,172, 79,159, 62,176,182, +182,198,139, 23, 47,224,235,235,251, 90,171,213,206,185,125,251,118,153,174, 30,141, 70, 19,247,236,204, 25,211,246, 63,252, 96, + 62,167,103,207,213,147, 39, 79,222,176,108,217, 50,161,187,187, 59,209,105,181, 8, 14, 14,166,135, 15, 29,210,109,155, 55,111, +189,216,216, 88,240,248,236, 89, 33,163, 86,199,253,171, 43,177,179,179,179,103,247,174,158, 30,107,214,109,130, 74,153,131, 71, + 1, 23,144,158,158,140, 29, 59, 79,121, 56, 59, 59,123,198,198,198,250,235, 75,128,247,236,217, 51,171,121,163, 70,141,170, 85, +170,132,224,168, 8,136, 57, 22, 34,134, 1, 95,171, 6,143, 81,161, 82, 93, 10,194, 51, 65,194,199, 44,172, 60,250,103,136, 62, +196,184, 86,247, 94, 88, 22,155, 9, 66, 8,214,182,172, 11,177,137, 28, 34, 99, 57, 38,254,117,179,144, 24,156, 95, 54, 15, 98, +185, 28,110,205,219,232,209,232, 82,133,137,137,201,211,224,224,224,166,117,235,214,197,172, 89,179, 16, 25, 25, 9,142,227,144, +152,152,168, 74, 72, 72,136, 75, 78, 78,142, 68, 94,252,159, 93, 84,207,145, 0,195, 48,182,207,158, 61, 3, 0, 17, 0,220,184, +113, 3,142,142,142, 48, 51, 51, 67, 86, 86, 22,230,204,153, 35,249,229,151, 95, 0, 0, 79,159, 62, 21, 22, 37, 40,197, 17,252, + 44,116, 77, 70, 54, 77,167, 57,207,251,164, 49,207,235,117,232, 18,131,206, 61, 70,225,218,249,189,184,121,229, 58, 44, 5,145, + 17, 48,206,190,148, 18,145,146, 21,155,235,190,221,163,241, 88,126, 66,238,149,237, 83,191,183,224, 59, 56,112, 39,124,182,101, +102,148,149, 86,119,119,119,216,217,217, 21,206,209, 18, 8, 4, 24, 51,102, 12, 40,165,122,145,172,252,124,228, 76, 77, 77,147, + 85, 42,149,157, 84, 42,197,199,143, 31,241,254,253,123,132,135,135, 23,134, 14,224, 56, 78, 55,123,246,108,225,148, 41, 83,240, +251,239,191,227,246,237,219,247, 1, 44,165,148,234, 59, 88, 27, 58,112,224, 64, 19,141, 70,131, 35, 71,142, 48, 0,122,156, 56, +113,226,105,211,166, 77, 5, 93,187,118, 53,217,186,117,235, 80, 0,187, 42, 80,221,141, 77, 77, 77, 69, 90,173, 22, 91,183,110, + 69, 76, 76,140, 39,165, 52,148, 16,178,125,224,192,129,219,234,214,173, 91, 61, 36, 36,228,109, 78, 78,206, 68, 74,105,144, 30, +109,209,232, 38, 77,154,156,224, 56,206,181, 83,167, 78,198,235,214,173, 51,125,243,230, 13,156,157,157,193,113, 92,112, 69,183, +176,122,251,246,109,104, 66, 66,130, 71,251,246,237,113,233,210, 37, 63, 66,200, 42, 0,191, 78,152, 48,193, 41, 42, 42, 10,141, + 26, 53,130,165,165, 37,222,188,121,147,157,144,144,176, 13,192,252,242, 98,125, 81, 74, 63, 0,152, 75, 8,169,191,125,251,246, +193,150,150,150, 45, 94,188,120,129,187,119,239, 98,205,154, 53,248,229,151, 95,208,182,109, 91,204,154, 53, 43, 5,192,224,124, +151,182, 94,113,243, 10,148, 45, 0,104,210,164, 73,188,175,175, 47,198,142, 29, 75,255,248,227,143,141,135, 14, 29,154, 62,116, +232,208,194, 62,112,228,200,145,244,224,193,131, 35,203, 90, 8,240, 15, 65,167,213,106, 96,106, 89, 21, 57, 25,209, 72,142, 9, +128,145,137, 61,186,116,104, 0,133, 82,131,115,103, 79, 34, 40, 56, 16, 60, 30, 15,118,246,149, 96,110, 97,141,176,176,183, 0, +240,170,108,155, 90,152, 88, 84, 70, 78,102, 12, 52, 73,207, 32,147,219, 98,212, 15,125,160, 80,106,113,234,244, 73,132,132, 4, +129,207,231,195,222,161, 18,204,204,243,108, 18, 90,166, 77, 3, 80,114, 60,173,114,137, 22,159,207,191,117,249,242,229,254,205, +155, 55, 23,188,123,247, 14,239,222,229, 13,110,210,211,211, 25, 2,246,207,196,160, 51, 67,202, 32, 1,157, 10, 86,103, 20,221, +187, 80,110, 98, 18,247,230,117,168, 93,122, 90, 34, 2,159,223,195,187,176, 96, 68,132,135, 66,171, 85,129,207,227,129,199,231, +161,114,213, 58,184,119, 63, 64,163, 98,152,128,210,108, 2, 64, 90,218,251,108,185, 93,141, 65, 43,150,205, 63, 63, 99,206, 18, +217,128,254,191, 35,232,205, 43,228, 48,246,160, 20,176,183, 50, 70,195,106, 63, 35, 46, 62, 25, 71,247,110, 85,112, 90,237,176, +162, 49,180, 74,178, 9, 0,118, 41,168,189,109,231,222, 49,187, 14, 28, 94, 50,103,202,120,187,239,251, 14,131, 56,237, 21,116, +241,207, 80,181,105, 55, 16,137, 57, 46, 94,189, 9,255,167,175, 18, 57,150, 46,177, 75,197, 31,229,217, 44,230, 66,124,240,241, + 99,130,115,145, 40,240,206, 18,137,244, 65, 57,164,170, 83,177,184, 66,159, 68,156,231,243,121,141, 87,172, 88,161,179,179,179, +211,134,132,132,224,247,223,127,231,158, 61,123,118,149,199,227,109,142,143,143, 87,149,103,211, 70,167, 11, 60,236,227, 83,187, + 89,223,190,116,200,148, 41, 10, 72, 36, 83, 87,175, 93,235,147,156,158,238, 72, 57, 14, 54,150,150,177,171,231,205,243,237, 63, +112, 96,250,203,123,247,100, 1,103,206,200,196, 12,243,172,188,116,126, 35,191,119,169, 54, 99, 99, 99,253,221,221, 92,176,111, +215, 58,104,181,106, 36,196,229, 9, 89, 41,169,153, 40,139,100, 21,183,153,191,234,170,239,194, 95,126,121,184,112,198,116,251, +118, 29, 59, 33, 58,240, 5,180,105,201, 32, 58, 6, 66, 34, 64,110,146, 17,146, 18,115, 48,247,224,241,164, 28,133,162,111,241, + 78,162,180,116, 22, 40, 86, 18, 83, 19,136,140,229, 16,203, 77, 62, 81,177,164,166,166, 16, 27,203, 33, 16,139, 75, 82,105, 62, +179,153,147,147,211,175,127,255,254, 65,143, 31, 63,182, 24, 59,118, 44, 90,181,106,245, 92,169, 84,122, 81, 74,179,191, 52, 63, + 5, 2, 65, 82,227,198,141,109,133, 66, 33, 51,102,204, 24, 65, 74, 74, 74, 97,100,245,156,156, 28, 92,186,116, 9, 53,107,230, +173,234,127,249,242, 37,234,212,169, 83,170,205,177, 63, 7,199, 1, 88, 54,115,128,243,234,135,129, 9, 83, 1,248, 85,173, 94, + 9, 55,175, 92,199,221,155, 1, 62, 45,234,114,155,186, 15,107,186,220,200,107,224, 28,143,198, 99,249,114, 83, 7,236, 63,117, +146, 31,250,108,247, 74,133, 34,216, 13,192,236,210,210, 73, 8, 1,165,244,179, 80, 14,124, 62, 31,135, 14, 29,170,232,189, 31, +223,181,107,215,132,159,126,250, 73,148,144,144,128,215,175, 95, 35, 55, 55, 23, 82,169, 20, 87,174, 92, 97, 0,108, 61,116,232, +208,149, 67,135, 14,117, 69, 94, 92,156, 27, 21,169,159,198,198,198,147,187,116,233,130,215,175, 95,227,201,147, 39, 39, 41,165, + 65,132,144,147,239,222,189, 27,212,182,109, 91,236,221,187,119,114,105, 68,171, 52,155, 28,199, 21,141,153,148,150, 95,119, 3, + 1,180,168,104,185,231, 79,224,109, 13, 0, 86, 86, 86, 49,118,118,118,166,129,129,129,112,113,113,129, 86,171,109, 94,209,186, +148,153,153,185,110,243,230,205,127,140, 30, 61, 26,203,151, 47, 31,118,252,248,241, 97,221,187,119,135,183,183, 55,246,236,217, +131,160,160, 32, 63,125,182, 21, 43,233,222,243,137, 99, 80,237,218,181, 39, 85,170, 84, 9,107,214,172, 65,112,112,176,239,178, +101,203,230, 5, 5, 5,161,102,205,154,146, 87,175, 94, 49, 95,210,134, 0,128,169,169,169,169, 78,167,195,153, 51,103, 30, 81, + 74,103, 16, 66,108, 55,108,216, 48, 88, 46,151, 35, 45, 45, 77, 25, 18, 18, 50,148, 82,122,246,255,187,173,163,132, 44, 24,251, +227,212,237, 63,142, 29, 42,109,210,184, 33, 20, 89,177, 80,230, 36, 66,145,253, 17,155,119, 93, 5, 33, 60,216,216, 56,192,214, +222, 25, 81, 81,209,184,127,225,162, 38, 87,161,220, 32,214,113,126,101,219,156,146,103,179, 81,158, 77, 69,110, 18,148, 57, 73, +133, 54,109,109, 29,243,109, 70,225, 94,192, 69,149, 50, 55,119,157,134,146,223,254,201,123,255, 79, 70,133,247, 58, 44,138,244, +244,244,105,227,199,143,247,154, 59,119,174, 21,195, 48,124, 75, 75, 75, 68, 69, 69, 49,127,254,249,103, 90, 78, 78,206,180, 47, + 73,144, 64, 40, 12,114,175, 81,211,235,251,239,191,103,122,245,234, 41, 26, 62,186,171,192,198,214, 22,153, 25,169, 8,123,253, + 2,111, 94, 61,131,123,205, 6, 88,188,108, 61, 96,110, 94,238, 70,146, 57,137, 97,183,228,118, 53,122, 44, 93, 56,251, 88,107, +207,239, 76,107,214,105, 32,106,232,102, 6,173,142, 65,108,108, 44,206,158, 9,212,134, 60,189,155,197, 49,154, 65,185,201,250, +109,193,115, 59,111, 84,180,163,158, 29, 57,180,106,245,230, 89, 91,119,236,155, 51,119,234, 88,227,182,109, 58, 35,248,250, 94, +156, 60,127, 44, 87,165,214,172, 22,241,177, 54, 56,133, 42, 42,154, 7, 42,149, 74, 91,124, 65,148, 74,165,210,126,109, 97,239, +217,179, 7,137,137,137,154,200,200,200,203, 12,195, 28, 47,109,179,231,146,176,137, 82, 77, 95, 66,174, 47,108,211,166,235,194, + 43, 87,164, 35,127,254, 89, 51,108,248,240,217, 80,171,181, 16,139,169,192,216,152, 7,137, 68,248,242,222, 61,217,198, 9, 19, + 44,137, 70,115,109,111, 25, 97, 3, 74,192, 55, 95,117, 88, 68,209,194,200,177, 51,160, 44,162,104, 61,120, 18,134,138, 40, 90, +249, 15, 70, 52, 33,164,197,212, 5, 11, 79, 13,234,210,209,163,174,107,101,137, 77,149,202,144,219,219, 35, 53, 57, 25,247,158, +188,209, 45, 59,118, 42, 36,159,100,233, 21, 87,134,227,184,188, 73,238, 0, 58, 78,155, 11,194,231, 3,249, 97, 28, 10, 86, 14, + 85,105,218, 10, 68, 32, 0, 75, 57,168,213,106,170, 71, 58, 99, 9, 33,253,134, 13, 27,118,227,252,249,243,188, 46, 93,186, 52, + 60,125,250, 52,247, 53,117, 71,167,211, 57,231, 19,174, 44, 35, 35, 35,193,168, 81,163,160,211,233,160, 80, 40,144,153,153,137, +208,208, 80,245,128, 1, 3, 36,249, 4, 66, 55,104,208,160,114,219,143,117, 39, 98, 85, 51, 7, 56,111,178, 20, 68, 14,206, 74, + 9,170, 98, 41,136,140,104, 81,151,219,180,238, 68,172,106,233, 12,243, 21, 41,145,254, 97, 9,185, 87,182,239, 63,117,146, 63, +162, 79, 63,214, 89,254,214, 71,106, 75,255,236,208,179,220, 70,237,179,224,164,250,144,172,226,200,206,206,158,183,104,209, 34, +239,244,244,116,231,174, 93,187,138, 60, 60, 60,240,240,225, 67,156, 63,127,158,121,240,224, 65, 76,110,110,238,124, 74,169, 10, +192,213, 47,201,211, 26, 53,106, 84, 17, 8, 4, 5,174,180, 45,249, 95,111, 57,125,250,244,160,177, 99,199,162,114,229,202,181, + 9, 33, 18, 90,129,231,136, 82, 90,232,101,248,198, 29, 69,248,198,141, 27,157,236,237,237,201,165, 75,151, 24, 62,159, 95, 97, +229,134, 82,186,135, 16,210, 92,167,211,253, 56,110,220, 56,120,122,122,130, 97, 24, 28, 60,120, 16,187,119,239,246,171,200,222, +173,165, 33, 44, 44,236, 89, 76, 76, 76,187,217,179,103, 99,205,154, 53,243,102,207,158,141,152,152, 24,132,133,133,189,248, 26, +187, 89, 89, 89,202,232,232,104,163,150, 45, 91, 54,113,113,113, 9, 25, 57,114,100,157,177, 99,199,194,207,207,143,222,190,125, +187, 63,165,244,210,191,162, 3,127,253, 54,245, 64,189,106,118, 87,150,173, 88,247,139, 91,181, 42, 63,141, 25, 53,144, 95,195, +189, 14,114, 51, 99, 97,101,109, 7,231, 74, 85,145,156,148,130,203,151, 47,177, 41, 41, 25,123, 88, 30, 89,250,246,109,106,252, +215,216,116,114,174,138,164,164, 36, 92,188,120,145,205, 72,207,218, 9, 29,111,217,171,200,244, 68, 24, 80,174,146, 85,210,100, +120,162,207,196,219,252,149,135, 27,243,194, 59,228,169, 92,233,233,233,211, 40,165, 41,250, 50,115, 82, 60,136,218,128, 1, 34, + 92,184, 80, 31, 58, 93, 11,115, 19,147,142,148,227,154, 54,104,208, 64, 62,112,224, 64,174, 77,155, 86, 98, 83, 83, 83, 82,187, +118,221,172,204,140, 12, 75, 0,160, 0, 91, 30,139, 46,216, 84, 90,192, 23,118, 98, 89,109,189,188,180,150,191,169,180, 62,204, +188,154, 29,177, 17,112, 88,204, 35,100, 20, 71,233, 94,134,135,165,225,137, 52,249, 75, 71, 79,197,220,126, 5, 91,206,204,171, +232, 40,175,168,235,144,199,227, 31,112,112,112,152, 31, 27, 27,155, 68, 41,101,191, 84,217, 40,216,130,167,199,244,233,186,198, +223,125,199, 88, 86,170,196, 81, 74,217,136,103,207,200,131,179,103,133, 15,206,158,149,234,212,234, 91, 39, 40, 13,215,199,166, +163,163,163,239,185,115,231,244,158,123,213,179,103,207, 87, 5,243,182,244,205, 79,183,106,206, 87,170, 85,113,250,174, 90,149, + 60,247,116,120, 68, 60,194, 35,226,174,190, 15,143,237,242, 37,101, 84,116, 83,105,146, 31,194,129,234,177,169,116,113,155,214, +214,214, 79, 5, 2,129,115, 69, 30, 88,150,101,227,147,147,147, 27,233,153,206, 33, 85,170, 84,241,139,138,138, 58,197,178,236, +140,111,161, 16, 18, 66, 90,241,249,252,139, 44,203,202,138, 43, 94, 5,100,140, 16,226, 42,145, 72, 62,153, 12, 95,150,205,213, + 11,235,254,210,178,109,219, 62, 15,238,222, 61, 61,103, 69,200, 39,243,134,166,246,177, 28, 61,100,210,180,223,142,108,221,248, +243,166,211,105,123,202, 85,155,237,236,110, 3,112, 47, 32, 92,122,228,101,147,114,148, 97,169,137,137,137, 47,128, 65, 28,199, + 89, 19, 66, 82, 40,165, 71,139,144,172, 47,206, 79, 62,159,239, 87,171, 86,173,105,111,222,188, 57,194, 48,204,152, 34,215,175, +113,115,115,155, 20, 25, 25,185, 69,167,211,205,169,192,243,110,218,182,109,219,244,141, 27, 55,242,102,204,152, 1,127,127,127, + 75, 74,105,250, 55, 42,119,123, 11, 11,139, 63, 88,150,245,160,148,158,203,206,206,158, 71, 41,205,173,168,205,252, 16, 15,131, +156,156,156,230,184,187,187,187,191,125,251, 54, 40, 46, 46,110,117,113, 53,232, 43,210,233,221,187,119,239,115, 27, 54,108, 32, +149, 42, 85, 66, 76, 76, 12,166, 79,159, 78,207,156, 57,211,147, 82,122,225, 75,219,100, 66,200,130, 9, 19, 38,172, 24, 62,124, +120, 33,161,245,245,245,165, 23, 46, 92, 24, 73, 41, 61,240,165,237,252,183, 84,239,107, 87,179,169, 70,249,236,202, 6,117, 61, +250,255, 48,172, 15,121,240,228, 45, 30, 62, 8, 64,108,124,252,105,142,199,155, 31, 22,150,242,246,107,109, 6, 60, 9,195,195, +128, 0,154, 16,159,112, 2,148,191,240, 85,120,114,248,255,215,189,255, 55,168, 90, 37,185, 14,201, 23,110,133, 85,225, 10, 67, +244,137, 86,235,232,232,136,212,212,230, 82,129,160,141, 68, 34,241,226,241,249,183,210,146,147,167,235, 75,180,254,137,138,253, + 89,135,238, 70,196,165,109, 73,240, 37, 54,139, 79,100,255, 18,155, 21,177,161,175,205,210, 54,149,230,212,234,120, 43,134,121, +186,137,150,158, 7,197,109, 58, 59, 59,255,200,113, 92, 21,125,211,196,227,241, 34, 98, 99, 99,119,125, 73,126,186,187,187,211, +119,239,222,129, 82, 74,190,101,185,255, 19,117,233,127,201,230,129,245,245, 29,107,214,171, 53, 39,248, 89,232,154,124,183, 98, + 33,150, 78,181, 52,105,211,161,253,162,123, 55,111, 47, 95,188, 41, 45,251, 95,153, 78, 66, 8,143, 86,116,117,203, 23,218, 44, + 8, 18, 90, 81,155, 34,145,104,123,179,102,205,126,124,248,240,225, 31, 12,195,140,251, 95,172,159,132, 16,111, 62,159, 63,187, + 70,141, 26, 13,195,194,194, 94,176, 44,187,166, 44,146, 85,129,193,239,252, 42, 85,170, 76, 20,137, 68,146,156,156,156,244,248, +248,248, 69,148,210,227,255,110,249, 89,219,221,170, 9,165,133, 65,183, 87,134,190, 75,125,252,205,108, 82,142,229, 40,127,197, +155,240,148,231,255,223,229,254,159, 78,178, 74, 83,185, 4,255, 95,137, 40, 32, 74,101, 34, 62, 62, 6, 64, 12,128, 19,255,174, +153,169, 15,201,170,160,220,152,248,239, 96,163, 56,242,137, 84,192,183,176, 85,156, 52,253,147,120,251,246, 45, 49, 60,242,255, +126,248, 97, 70, 80, 60,128,233, 77,188, 62, 63,151, 79,174,230,120,245,250,215,167,243, 75, 72,214,151,218,252,210, 13,159,181, + 90,237, 79,132,144,153, 21, 89,173,248,223,134,124, 82,117,225, 31,176,187, 10,192,170,127,247,251,127,245, 54,245, 41,128,158, +255,238, 54,255,199,234,100,197, 54,149, 54,192, 0, 3, 12, 48,224,223,186, 81, 87, 26,114,193, 0, 3,254,189, 80, 84,213, 42, + 74,188, 8,128, 78,165, 60,200,215, 43, 96,188,211, 23, 52, 20,215, 13, 54, 13, 54, 13, 54, 13, 54, 13, 54, 13, 54, 13, 54,255, +183,108,254,183,146,172, 79,200, 85,209,227,130, 85, 79,255,196, 11, 64, 39,131, 77,131, 77,131, 77,131, 77,131, 77,131, 77,131, + 77,131,205,255,230, 23,128,113,165, 29, 27, 92,135, 6,252,227,216,220,151, 56, 1,192,148, 83, 52,238,159,184,222, 0, 3, 12, + 48,192, 0, 3,254,149,160,148,238, 44,205,117,248, 47, 39, 90,132, 16, 71,228, 5,218,115, 3,240, 6,192,221,138, 44, 87, 46, +193,158, 53,128,129,132,144, 1,249, 55,123, 2,192,241,242, 66, 81, 20, 64, 38,147, 37,170, 84, 42, 91, 0,144, 74,165, 73, 42, +149,170,232, 94, 6, 4,159,111,143, 66,243,254,166,244,137,173, 85,171, 86, 77, 84,171,213,182,122,252,125, 38,165, 52,136,199, +227, 5,203,229,242,155,111,222,188, 57, 95,145,123,239,208,161,195, 72, 62,159,191, 18, 0, 88,150, 93,112,243,230,205,125,255, + 96,185, 53,175,228,104,191, 87,171,211, 50,137,201,105,139, 74, 91,186,189,173, 39,241, 21, 16,204,201,255,188,122,226,185,178, + 67, 88, 84,244,250, 50,210,215, 68, 40, 20, 78,182,179,179,235, 22, 27, 27,251, 20,192,207,148,210,114,163, 26,187,184,184,252, + 32, 16, 8,134,177, 44, 91,141,207,231,135, 51, 12,115, 40, 58, 58,250,128,161, 25, 49,192, 0, 3, 12, 48,160, 60,178, 85,210, +247, 21, 34, 90,181,172,137, 61, 5, 6,131,160, 51, 40,174, 17,224,232,235, 20,250, 81,223,223,123,215, 34, 58, 29,147,247,159, + 34, 30,216, 75,239,121, 59,189,189,189,157,167, 76,153,130, 86,173, 90,225,225,195,135, 45,247,236,217, 51,154,207,231, 7,113, + 28,119, 11,192, 67, 74,245, 10,165, 96, 12,224,123, 0, 67,187,117,235,214,105,229,202,149,252, 58,117,234, 64,169, 84,226,246, +237,219,109, 86,175, 94,189,129, 16,114, 29,192, 97, 0,103,203,138, 13,163, 82,169,108, 11, 56, 19, 33,196,182,127,255,254,143, +139,146,171,252,253,213, 8,165,244, 1, 33, 36,128,101,217,135, 39, 78,156,136,169, 69, 72,243,241, 85, 68,127, 78,251,160,249, + 44,102,146, 90,173,182, 61,243,219, 42, 8, 36, 18,168,179,179,208,114,212,223,171, 64,175,253, 50, 7,132, 99,192, 7, 77,247, + 90,177, 33, 8, 64,112,124,124,124,144,167,167,103, 68, 69, 11,153,207,231,175,188,124,249,178, 3,165, 20, 93,186,116, 89, 9, +224, 31, 33, 90,132, 16, 73,139, 38, 13,110,157, 59,121, 68,154,147,150,136,174,223, 15, 58, 68, 8, 25, 73, 41, 61,249, 9,105, +234, 78,236,136, 0,115, 38,172, 58,204, 7,128,109,243,135,254,188,161, 11,217, 52,253, 10,253, 72, 8,241, 2, 10,183,108,250, +141, 82,122,107, 91,119, 98, 7, 62,230, 78, 88,117,152, 0,192,239,243,135,206,217,214,157,108,156,120,177, 98,171, 42, 9, 33, + 19, 71,142, 28,185,105,229,202,149,124, 7, 7, 7,196,197,197,117,173, 93,187,118, 13, 66, 72,237,178, 38, 17, 87,169, 82,229, + 88,251,206,189,171,246, 29, 48,216,200,198,218, 2,241, 9, 41,166,199,142,252, 49,190, 74,149, 42,221, 34, 34, 34, 6, 25,154, + 17, 3, 12, 48,192, 0, 3, 74,233,119,190, 60,188, 67, 99, 71, 34,203,213,162,183,128, 79,126,104,219,188, 78,199, 33,221,219, +242,106,123, 84,199,171,151,161,223,157,189,249,104,117,109, 59,222, 13,134,165, 7,140, 69, 56,243, 44,190,236,149, 48, 58, 6, +130,171,103, 14, 3, 0, 38,142, 30,202,127,252,248,113,245,198,141, 27, 23, 6, 4,236,216,177, 35, 58,118,236, 72,182,109,219, +214,224,234,213,171, 13,118,239,222,173, 37,132,236, 45, 39, 8,221,100, 55, 55,183,213,155, 54,109,146,120,122,122, 66, 34,145, + 20,158,147,203,229,232,217,179, 39,122,246,236,201,143,143,143,239,114,238,220,185, 46,191,253,246,155,134, 16, 50,155, 82,186, + 69,159,204, 91,180,104, 81,147, 18,190,190, 76, 8,121,207, 48,204,139,250,245,235,199,212, 36,164,250, 79,221, 91, 93,155,216, +218,221,184, 52, 59, 2,177, 24,251, 71,230,245,213, 69,137, 86,196,205, 75,144,155,154,164, 26,153,152, 4, 1, 8, 6, 16, 68, + 41, 13,126,255,254,125,168, 7, 33, 13, 90, 88,240,246,238, 78, 99,235, 87,128,108, 33, 38, 38, 6,102,102,102,178,246,237,219, + 39, 16, 66,150,220,186,117,107,231, 55,174, 83,205,151,204,153, 40, 74,143, 12,194,199,215, 15, 48,115, 64, 27,163,233,155,255, + 90, 14,224,100,217, 21,145,199,251, 45,128,243,153,158,183, 25,239,162,212,212, 84, 79, 0,176,178,178, 18, 3,184,181,254, 17, +186,207,104, 77,200, 87, 84,116, 17,159,207,223,186,127,255,254,177, 63,252,240, 67,222,214, 17,247,238, 65, 46,151, 99,217,178, +101,149,103,205,154,229,139, 82, 54, 2,118,113,113,249,161,125,231,222, 85, 55,174, 89, 94, 59, 59, 45, 83,189, 99,235,241, 39, +142,117,107,242, 38, 76,158,101,178, 81,171,182,119,113,113,249,193,160,108, 25, 96,128, 1, 6, 24, 80, 17, 53,171, 92,162, 85, +211,134,236,107,219,200,125,224, 16,239, 54,146,122,117,235, 64, 36,249, 59, 80,116,227, 38, 77,208,184, 73, 19,158, 79, 78,118, +231,199, 79,158,117,254,243,234, 67,117, 77, 27,114,252, 77, 50, 29,169,111,194, 10, 54,165, 93,249,189, 93,135,220,140, 36, 41, + 0, 24,155,219,170,230,159,249,120,179,117,235,214,112,118,118, 22,221,184,113, 99, 12,202,142,151, 50,255,205,155, 55, 18, 62, +191,236,120,168,142,142,142,232,223,191, 63,106,214,172, 41,110,223,190,253,124,252,189, 29,198, 39,144, 74,165, 73,132, 16, 91, + 0,176,180,180,100,151, 44, 89,242,130,210, 66,207, 32,165,148, 62,224,241,120, 15, 57,142,123,116,246,236,217,216, 58,132,216, +246,104, 92,243,238,196,225,253,141,232,159, 27, 74, 37, 9,170,172,172, 18,191, 55,146, 27, 39,203,140,141,131, 36, 70,210, 96, + 0, 65, 0,130,157,156,156, 66,235, 16,226,220,162,102,149,171,219,102, 12, 53,209, 39, 47, 27, 55,110, 92,195,203,203, 75,202, +178, 44,114,115,115,241,251,239,191,155,201,100, 50,179,110,221,186, 45, 6, 80, 88, 1,106, 19, 82,175,159, 35,127,220,146, 56, +102,210, 23, 16, 25,243,182, 45,155, 68,110,246, 91,108,218,164, 69, 91,188,189,117, 16,105,105,217,200,204,200, 1,199,113,159, +237, 48, 60,241, 34, 77,220,214,147,172,222, 54,111,232, 92,194,227,145, 6,125,126, 70, 47,251,204,169,132,144,151, 0,132, 98, +177,184,176, 30, 18, 66, 28,235,214,173,187,186,250,119,109,241,251,130,225,160, 28, 71, 1,172,214, 87,205, 34,132,216,154,152, +152,156,189,122,245,106,243,166, 77,155,226,225,195,135,248,240,225, 3, 38, 78,156,168,153, 52,105,146,104,196,136, 17,100,230, +204,153, 83, 8, 33,127, 82, 74,239,127,246, 32, 8, 4,195,190,239, 59, 72,156,147,145,165,210,168,181, 26, 75,107,115, 78,157, +171, 82,164,164,103,169, 6, 13,253, 81,243,242,249,163, 97, 0, 62, 35, 90, 95,147,159, 6, 24, 96,128, 1, 6,232,141,166, 0, +108, 0, 36, 3,120, 82,236, 24,249,159, 81,194,113, 10,242,188, 82, 86, 69,108,165, 32,111,218,143, 13,242, 98,124, 62, 6,144, +254, 53,137, 43, 45, 42, 60,144, 31, 25, 62, 63, 64,113, 65,160, 98, 82,132,104,209, 55,201, 20, 76, 90, 56,216,212,247, 96,179, + 63,223, 62,137, 72,205,145,169,100, 17, 19, 30,138,145,211,151,225, 77,114,233, 17,185,189,107, 17,157,153, 24, 2, 19, 17, 32, + 50, 50, 87, 15,241,187, 18,208,164, 73, 19,213,124, 79,158,183,239,182, 60,165,107,230,184,161,104, 57,227,207, 43,225,225,225, +140,163,163, 35,126,248,225, 7, 80, 74,123,148,113,115,137,217, 79, 2,108, 95,247,104,133,102,137, 37, 79,147, 10, 11, 11,195, +157, 59,119, 16, 29, 29,141,106,213,170, 97,204,152, 49, 73,148, 82,187,210,108,118,237,218,245,246,111,191,253,230,185,118,237, +218,192,253,251,247,183, 46,205,221, 84,155, 16,227, 6,149,237,159,236,246,157, 91,141, 92,218, 43, 84, 68,191,131,185,191,146, +148, 64,242,104,124,252,223,121,247,107, 13, 7, 24,155,153,192,216, 84,158, 56,226,234,211, 66, 37, 43,255,253, 77, 99, 66, 76, +157, 29,172,158, 30, 93,191,200,137,119,243,152, 84,180,227, 1, 41,143,100,181,111,223, 62, 96,229,202,149, 22,241,241,241,184, +126,253, 58, 42, 87,174, 12,133, 66,129,117,235,214, 37,220,189,123,215, 49, 63,189,118,205,106,186, 6,253, 62,107,148,153,104, +204, 47,146,138, 86, 36,145, 64,176, 37,224,242,177, 73,102, 18,138,140,248, 15,120, 31,250, 18,143, 95, 69,232, 14, 92, 11, 98, +179,148,106,111, 74,233,205,146,126, 55,185, 13,169,126, 43,222,230,220,229,219, 79,220, 29, 28, 28, 48,126,252,120,124,252,248, + 17,148, 82,112, 28, 87,184, 74, 99,254,252,249,168, 81,163, 6, 70, 14,238,165,144,164, 61,107,127,238, 21,125,170,103, 5,175, +235,234,234,122,245,214,173, 91,118, 78, 78, 78,184,123,247, 46, 62,126,252, 8,123,123,123,220,184,113, 3,126,126,126,251, 39, + 76,152, 48, 96,229,202,149,210, 33, 67,134,196, 93,185,114,165, 82,241, 57,117,149, 43, 87, 14, 61,119,229,174,252,230,233,171, +239, 45, 76,140, 96,108,107, 5,190,220, 84, 69, 65, 20,246,182, 22,162, 65,189, 59, 86,143,140,140,244, 40, 86,254, 95,149,159, + 6, 24, 96,128, 1, 6,252,141, 11, 23, 46, 80,111,111,111, 82,240, 94,156, 66, 16, 66,206,231,243, 1, 13, 0,113,145, 99, 16, + 66,206,231,171, 33,159, 28,251,248,248,204,247,245,245,125, 89,112, 92,112,205,188,121,243,234,248,249,249,173,106,217,178,229, +209,128,128,128, 37, 0,222,125, 45,209, 42, 77,229,210,107,142, 22, 19,251, 24, 34,247,110, 16,178, 58,232, 82,222,128,203,136, + 2,140,237,161, 36,114,164, 38, 68,225,245,221,147,121,220,176,188, 76,124, 77,133,132,144, 27,161,161,161,120,253,250, 53, 98, + 98, 98, 96,100,100,244,217,117,247,238,221,131, 76, 38,131,131,131,131,126,146,157,230,211,253, 88,131, 26,187, 66,222,210, 19, + 41, 67,126,194,141, 27, 55,144,148,148, 4,145, 72, 4,177, 88, 12,134, 97,202,181,199,227,229,237,248, 91,160, 98,149,116, 77, +123, 66, 4,206,150,242,115,219, 22, 79,171,194,123,112, 94,168,140,126,135,120, 21, 11,115,125,148, 60,185, 49,140,140,141, 18, +100, 50,163,226, 36,235,109, 99, 66,132,198,114,233,185,189, 43,102,218,243,159,223,144, 42,223, 5, 65, 84,130,141,206,157, 59, +143, 7,176,152, 82,154,209,190,125,123,187,149, 43, 87, 90,196,197,197,225,213,171, 87, 56,126,252,120, 50,147,119,163,132, 82, +186, 20, 0, 90, 18, 34,117,177, 49,191,178,229,151,105, 38,184,117, 76,140, 49,191, 84,184, 34,153,121,244,188,208,111,196,132, + 73,155,166,245, 68,110,182, 18,135,175, 61,199,229,103,239,123, 1,184, 87,214,188,183, 45,247,232, 59, 66, 72,199,190,125,251, +190,184,115,231,142,245,238,221,187,193, 48, 76,137,175,221,187,119,227,250,221,103, 83, 41,213,155,100, 57, 86,169, 82,229,250, +163, 71,143,108,140,140,140,112,237,218, 53,100,100,100, 20, 42, 89, 35, 71,142, 36, 25, 25, 25,131,127,255,253,247,126,145,145, +145,107,238,222,189,155,138,188,237,160, 62,169, 8,124, 62,255, 61,195,104,107, 57,120, 84, 23, 12,232,217,182,109, 78,106, 16, +228, 86,245,241, 32,240,253,185,140,244, 84, 37,159,207,127, 95,244,250,111,145,159, 6, 24, 96,128, 1, 6, 84,152,208,156,167, +148,246, 40, 74,156,138, 19,174,130,207, 5,215,249,250,250,246, 40, 74,194, 0,192,207,207,111, 85,145, 99,197,183, 72, 91,121, +147,225,219, 19, 66, 40,128,246, 37, 93,164,126,117, 10,234,215,103, 33,114,109, 13,113,205, 94,224,187,182, 65,116,208, 45, 4, + 94, 90,143,216,151,247, 64, 57, 22, 14, 53,154,233,155, 22, 85,173, 90,181,160, 82,229, 77,205, 82,171,213, 16, 25, 91,168,102, +142, 27, 42, 5, 0, 78, 32, 85, 23, 73,180, 94, 6, 77, 90,123,161, 89, 34,197, 99,187, 60, 2, 92,160,108,173, 24, 53, 10, 34, +145, 8, 34,145,168,112,243, 89,125,136, 86,254,166,168,224,242,220, 87,180,164,243, 77, 36,194,195, 71, 23, 79,110, 38,137, 12, + 22,171, 67, 30, 32, 94,205,209,115,137,236, 5,125,118, 78, 54, 50, 54,138,147, 25, 25, 5,203,228,198, 69,137,214,123, 0,160, + 66,225,129,131, 75, 39,215, 55, 78, 12, 55, 86, 61,185,129, 4, 21,167, 53, 45,217,204,210, 75,151, 46,217, 10, 4, 2,123,150, +101, 17, 29, 29,141,151, 47, 95, 98,227,198,141,137,217,217,217,237,159, 61,123, 22, 86, 36,189,188,166, 50,241,241, 3,203,166, + 85, 21, 4,249, 75,213,239, 67, 74, 36,111,101,193,166, 94,159, 46,189,218, 55,184, 48,126,248, 2,244,238,254, 29, 70,180,175, + 77, 35,226,211, 84, 0,174,233,179,129, 53,165, 52,142, 16,210,185, 93,187,118,135, 26, 54,108,232, 65, 41, 69,189,122,245, 48, +120,240, 96, 28, 56,112, 0,129,129,129,200,202,202,210, 94,189,122,117, 3,165,116,143,158, 15,156,145,133,133,197,229,155, 55, +111,218, 24, 25, 25,225,234,213,171, 80, 42,149,112,112,112,192,164, 73,147,196,126,126,126,251,179,178,178, 6,248,250,250, 74, + 35, 34, 34,182, 92,185,114,165, 50, 0, 30,165,244,179, 74,160,209,104,118, 30, 62,176,111,211,164,201, 83,156,110, 62,124,117, + 67,157,147,109,230,234, 26,147,101, 99, 33, 55,217,240,235, 82, 23,141, 70, 51,190,228,252,188,253, 69,249,105,128, 1, 6, 24, + 96,192,231, 26,198,133, 11, 23, 74,229, 34, 69,201, 83,113,178, 85, 17,146, 6, 64,233,227,227, 51,159, 16,114, 62, 95,241, 82, + 2,136,255, 39, 72, 86, 33,209,162,148,250, 19, 66, 64, 41,245, 47,213, 10,199, 66, 27,113, 7,218,136, 59,144,181,156,138,191, +124,135, 20,251,147, 47,223, 34,172,231,178,107, 55,213,106,181, 96,223,190,125,133,243,182, 0,128,101,217,111, 94,138, 21, 33, + 90,249, 68,239,179, 68, 84,145,200,253,119,206, 24,208,194,138, 85, 8, 53,247,206, 33, 78,205, 49,107,222,105, 21, 79, 50,232, +111,243, 75,177,121,102,250,120,196,220,189, 14, 35,185, 60,102,236,157,224,162, 42, 86, 16,128, 15, 0, 80, 69,106,122,227,248, +204, 33,109,236, 69, 16,105, 46,156, 64,188,154, 83,111,143,212,237,217, 88,114,161,130, 82,138, 15, 31, 62, 64,161, 80, 32, 32, + 32, 0, 39, 79,158, 76, 46, 78,178,242,211,123,251,143,159,135, 53, 55,205,254, 40,210, 60,185,142,120, 53,167,174,161, 15,185, +170,223,167,181,136, 71,174, 18, 30, 95,214,189,109,109, 76,255,177, 15,214,255,241, 23,163,177,109,219, 99,211,217,139, 3,115, +212,218,249,250,144,172, 34,105, 14, 2, 80,155, 16, 34, 1,224, 53,120,240,224,139,253,250,245,131,191,191, 63,206,157, 59,231, + 14, 32, 33, 63,255,151, 1,176, 67,222,106,196,210,118,142,231,137, 68,162,163,215,175, 95,175,227,232,232,136,235,215,175, 67, +169, 84, 98,194,132, 9,154,201,147, 39,139, 70,142, 28, 73, 50, 51, 51, 11,149,172,128,128,128,212,210, 72, 22, 0,196,198,198, + 94,114,117,117,109,213,174, 93,187, 62, 85,221,107,154,134,103,103, 37, 25, 25, 73,101,119,253,111,137,158, 60,186,191, 37, 54, + 54,246,113,201,249,121, 67,239,252, 52,192, 0, 3, 12, 48,160,116,120,123,123,251, 95,184,112, 1,222,222,222,254,229,244, 37, + 61,190,144, 12, 21,252, 78,232,235,235,251,210,215,215,247, 19,197,235, 43,149,182,226,174,195, 11,148,210,132,162,138, 86,133, +192,102, 70,127,126, 3, 28, 87,145,155,253,236, 59, 11, 11, 11, 70, 38,147,125, 66,180, 56, 61,109,166,157, 62,130,240,137, 67, + 11,149,172, 2,101, 11, 93, 71,126, 21,209,226, 56, 46, 0,192, 39,137, 48,182,171, 57,228,232,240,206,173,107, 87,117,226,233, +142,111, 68,172,130, 81, 45,126,163, 85,189,206,166,189, 94,149, 48,201,186,208, 38,163,131,212, 88, 22, 37,147, 27, 23, 39, 89, +145, 0, 32,183,175,209,111,255, 16,175,246, 13,106,186,241,152, 99,235, 16,167,208,229,248,132,106,181,225,185,244, 84, 41,121, +184,248,187,239,190, 91,108,101,101, 37,221,180,105,147,153,171,171, 43, 24,134,209, 20, 39, 89,198,118, 53,135, 28, 27,217,181, +117, 13,123, 11,158,238,207,205,136, 81,178,138,141,225,186,253,219,245, 32, 89,214,102,242, 43,219, 87, 77,148, 25, 73,132, 80, +169, 84,240,219,246, 39,174,222, 15,233,145, 28,124,250, 10,128, 43, 95, 81, 39,199,246,232,209, 99,253,178,101,203,160,211,233, + 48,102,204, 24,188,127,255,254,234,155, 55,111, 54,186,184,184,204,254,249,231,159, 29,237,237,237, 49,112,224, 64, 17,128,145, +165,216,248,245,240,225,195, 61, 26, 52,104, 0,127,127,127,100,100,100,192,193,193, 1,147, 39, 79, 22,251,250,250,238,207,202, +202, 26,176,106,213, 42,233,135, 15, 31,202, 84,178, 62,169,215, 44,187, 98,199,250,137,179,155,182,104,195,123,247, 46,140,137, +110,230,201,187,117,253,220, 29, 43, 43,171,253,159,228,231,168,110, 21,206, 79, 3, 12, 48,192, 0, 3,190, 25, 46, 0,240, 46, +174,114, 21, 39, 97, 5,138, 85,209,227,226,215,231,159, 87,127,109,130,138, 43, 90,249,196,235,211, 57, 90, 69, 39,193,151, 7, + 46, 55, 89, 47,242,244, 25, 91,173, 69,116,227,155, 66, 48,223,147, 7,145,177,133,170,231,178,107, 55, 75,187,214,216,216, 88, +111, 69,139, 83,171,202, 35, 78, 21, 34, 90,249,115,180, 46, 83, 74, 63, 33, 90,230,246, 53, 61, 23,206,157,182,161, 77,191,174, +188,196, 31, 91, 34, 35, 71,173,254,249, 21,195,197, 42,202, 38, 89,121,189,184, 46,194,200, 88, 30, 44, 53,254,100, 94, 86, 52, + 0,200,236,170, 55,243,153, 49,101, 91,135, 33, 61, 73,242,132, 54, 72,207, 80,170,103,191,100, 72,156,146, 14,120, 69,233,173, +146,204,221,184,113, 99, 7,128, 29,237,219,183, 79, 52, 54, 54, 70, 78, 78,206,103,101, 80,144,222,214,253,186,242, 18,199, 54, + 71, 90,174, 86,253,243, 75, 6,241, 74,238,104,121, 36,203,198,220,228,202,246,149, 19,141,226, 99, 35, 33, 18,137, 32,151,203, +113,237, 94, 48,146, 67,206,124, 13,193, 2,159,207, 95, 50,127,254,252,197,147, 38, 77, 66,106,106, 42,206,157, 59,135,238,221, +187,227,200,145, 35,174, 23, 47, 94, 92,239,229,229, 5, 62,159,143,243,231,207, 67,167,211,189, 45,165, 60,251,140, 27, 55,110, +118,191,126,253,240,248,241, 99, 36, 36, 36,124,162,100,101,100,100, 12,222,182,109, 91,191,136,136,136,114,149,172, 98,104, 86, +197,173,145,104,222,162,181, 80, 43,146, 4,201,113, 15,253,111, 92,227, 61, 72, 75, 75, 51, 2,144,249,165,249,105,128, 1, 6, + 24, 96,128,222,170, 86,105, 92, 36, 57,159, 68, 37,151,116, 92,132, 96,149,116, 76,138,169, 96,154, 98,231, 3,255,201,123,210, + 75,209, 18,216,213, 5,147, 24, 82,132,104, 37,125,114, 94,106, 98,169,151,235, 80,199, 64,176,125, 79, 97, 28, 45,105,106,106, +170,212,218,218, 90, 85,148, 32, 24, 25, 25,193,209,209, 17,233,233,233,216,185,115, 39, 0,148, 55, 41,154, 49,237, 55, 28,205, +134,140,193, 19,103, 49,168, 78, 91,168,108,109, 31, 53,234, 19,178, 37, 18,137, 10,230,134,149,215,233, 62, 34,132, 68, 2,120, + 64, 41,165,141,107, 84, 91, 46, 53, 54, 30,213,164,190,155,245,244,137, 99,133, 17, 73,106,220,108, 51, 47,227,207, 95,231,202, + 99,168,124, 82, 20,205,184, 95,142,189,240,239,127, 63, 88, 92,201,138,109, 84,163,218, 2,169,145,244,199, 22,117,107,216,251, +204,156, 40,140, 72, 84,147,155,205,126,206, 58,249,219,207, 70, 31, 96, 50, 59,134,166,223,210,163,120, 22,119,239,222,125, 49, +165,148,114, 28,183, 8, 0,138,166,119,230,228, 31,133,225, 31, 85,184,209,102, 65,250,201, 95,231,154,196,160,236,244,218,212, +239,211,218,206,194,244,202,246, 85,147,140, 18,226,162, 32,145, 72, 96, 98, 98,130,152,196, 76, 8, 5,124,229,215, 84, 54, 66, +136,196,211,211,115,238,196,137, 19, 17, 28, 28,140, 9, 19, 38, 36, 68, 71, 71,159, 58,118,236,216,132, 95,126,249, 69,208,165, + 75, 23, 36, 36, 36, 96,245,234,213,186,123,247,238,173, 2,176,186,196,250, 40, 16,140, 93,190,124, 57,141,143,143, 39, 31, 62, +124,128,131,131, 3,166, 76,153, 34, 94,181,106, 85,225,156,172,138, 40, 89, 5,136,141,141,245,119,119,115, 65,175, 75, 27,192, +232,212,254, 25,169,209,119, 94,135,167,251, 91,138,197,179,218, 52,174,255, 69,249,105,128, 1, 6, 24, 96,192, 55,193,147,114, +142,255,165, 40,201,117,168, 47,209,122,187,121,193,104,247,209,147,230, 64,230,218, 26,234,208,211,224,114, 18, 11, 21, 45,169, +220, 2,150, 46, 30,200,200, 85,227,196,141,103, 0,240,182, 34, 9,203,206,206, 70,227,198,141,177,117,100,141, 14,170,236, 84, +169, 12,128, 90, 98,170, 58, 35,110,123,243,226,197,139, 10,142,227,142, 2,184, 88,142,153, 37,117,234,212,217,178,118,237, 90, +177,199,144,209,200,121,120,183,184, 58, 5,153, 76, 6,137, 68,130,160,160, 32,220,188,121, 83, 3, 96, 73, 57, 25,246,136, 97, +152,192,163, 71,143,198,186, 87,115,238,218,190,105,179,169,243,231,249,152,188,186,123, 21,139, 86,109,225,170, 55,233,146,233, +119,228, 76,118,166,220,165,163, 34,254,245, 11, 61,110, 53,176, 24,201,138,247,168,234,210,161,101,163,134,115, 22, 45, 90, 96, +250,242,238, 53,252,242,219,118,234,222,160, 83,230,111, 39,207,102,165, 24, 85,254, 78,153, 24,250, 88,159, 60,188,125,251,246, + 14, 0, 59, 10,142,139,167,215,103,217, 70,174, 70,211,174,233,126, 71, 78,230,102,153,184,116, 42, 43,189,182,181,251,182,170, +228, 96,121,101,243,138,159,140, 62,198, 69, 67, 34,145, 64, 46,151, 35, 58, 33, 3,139, 55, 28,207,213,114, 92,215,175,172,139, + 18, 19, 19, 19,137, 86,171,197,214,173, 91, 17, 29, 29,221,146, 82, 26, 77, 8,217, 62,104,208,160, 77,245,234,213,171,245,242, +229,203,183, 57, 57, 57,147, 40,165,175, 75, 51, 98,110,110,222,210,198,198,134, 60,120,240, 0, 63,253,244,147,102,202,148, 41, +162, 17, 35, 70,144,244,244,244, 47, 85,178, 0, 0,206,206,206,158,223,123,183, 66,235,206, 19,252, 53,170,140, 59, 17,175,247, +251,243,232,125,105,227,134,245,191, 40, 63, 13, 48,192, 0, 3, 12,248,223, 64, 89,147,225,203,220,141,218, 19, 16,212,176,194, +248, 58, 78,162,143, 7,126,157, 66,179,195, 3,168,242,241, 14,154,117,250, 71,122, 97,245, 8,122,113,243,116, 58,193,187, 14, +173,101, 75, 62,214,176,194,120, 79, 64, 80,214,238,222,221,107, 66,215,217, 13,180,179, 27,168,119, 13,232, 0,204,111,212,168, +209,153,201,205, 64,233,171,195,148,190, 58, 76, 39, 55, 3, 5,240, 19, 0,185,190, 59,134, 3,112, 0,176,179,113,227,198,204, +173, 91,183,232,155, 1,157,232,243, 90,214,116,210,164, 73,244,151, 95,126,161, 67,135, 14,165, 54, 54, 54, 12,242,252,165, 14, +229,217,236,213,171,151, 51,165, 20,149, 42, 85, 50,111,226, 81,253, 99,208,141,115,244,206,129, 77,244,143,201,125,105,243,122, + 30, 41,246,181,218, 5,202, 28,106, 54,212,119,103,115,123,123,251,121,148,210,174,148, 82, 7, 74, 41,220,221,173,228,141,106, + 85,143, 15,188,126,142,222, 61,184,133,254, 49,185, 47,109, 81,191,118,170,179,135,215,107,169,109,173,102, 95,186, 91,122,137, +233,173, 91, 43,197,174,122,171, 23,165,165,183,168,205,170,205, 6,158,141,141, 79,164,143, 30, 61,162, 23, 47, 94,164,119,239, +222,165, 7,142,157,165, 46, 77, 7,228, 88,215,235,221,250,107,119,117, 7, 96,230,237,237, 77,223,190,125, 75,187,117,235, 70, + 1,152,125,137, 77, 0,103, 34, 34, 34,104, 72, 72, 8,157, 63,127, 62, 5,176,111,226,196,137,202,204,204, 76,218,169, 83,167, +104, 0, 60, 20,171,139,250,166,179, 90, 21, 39,191, 62, 61,219, 46,153,252, 83, 63,207,175,205,207,111,184, 43,188,193,166,193, +166,193,166,193,230,127,189,205,255,228, 87, 62, 15, 25, 87,228,189, 81,193,185, 50, 21,173,219,121,106,192,142,122,118,228,208, +170,213,155,103,109,221,177,111,206,220,169, 99,141,219,182,233,140,224,235,123,113,242,252,177, 92,149, 90,179, 90,196,199,218, +224, 20, 90,110, 28,138, 11,175,169,176, 4,245,200,200,210, 13,133, 49,152,222,165, 3,148,210,237, 21,100,146, 9, 0,198, 17, + 66,214,122,121,121,173,252,177,117,179,190,147, 91,117,128, 78,167,195,129, 3, 7, 16, 21, 21,117, 10,192, 2, 74,169, 94,138, + 91,112,112,112, 74,157,234,149,167, 89,202, 68,115, 38, 13,237, 99,147,252,254, 21, 98, 67,159, 3, 0,212,106,165, 46, 33,204, +191, 65, 69,210, 39,147,201, 30,217,216,216,188,177,177,177, 73,103,213, 57,227,164, 2,211, 69, 19, 6,127,111,155, 26,241, 26, + 49, 47,243, 60,163,106,149, 66, 27, 19,118,179,214,151, 48,233,202,149, 43, 75,140,133, 24, 95, 98,122, 53, 42,221,199,183,161, + 13,245,177,163, 80,107, 86, 45, 93,127,224,187, 21,115, 70, 73, 76, 77, 77,241, 44,228, 29, 22,173, 59,146,171,212,232,186, 38, + 7,157,190,255,141, 88, 63,116, 58,157,222, 11, 29, 74,193,220, 6, 13, 26,212, 92,185,114,165,251,200,145, 35,241,181, 74, 86, + 81,188,255, 16,235,211,190,125,251,218,239,222, 60,243,178,148,137, 14,125, 77,126, 26, 96,128, 1, 6, 24,240, 63, 3,111, 74, +233,206,130, 8,241,249,174,196,231,250,184, 14,243,136, 71, 34, 85, 0, 88, 86,205,142,108,159,183,114,253, 98, 30,217, 48,138, +163,116, 47,195,195,210,240, 20,154,252,149, 29,175,194,187, 22, 97,190,235, 61, 84, 0, 0, 66, 1,152,175,176,245, 22, 64, 63, + 66, 72,211, 93,247, 31, 47,204,255,122, 5,165,180, 66,190, 92, 19, 1, 66,218,212,174,230,212,182, 81, 29, 41,159, 85, 34, 54, +244, 61,210,114, 85,184,246, 50, 42,131, 71,121,123, 43,154,174,240,240,240,219, 0, 80,183,122,229,208,182,181,221, 92,218, 53, +174, 99, 36, 36, 26,196,190,122,134, 76,165, 6, 87, 95, 70,101,130,144, 47,158, 80,253,173,210,251, 49,232,204, 19,155,250,125, + 58, 17, 66,174,207,159, 60, 68,178,120,221,209,111, 74,178, 0, 40,226,226,226, 82, 21, 10,133, 85,124,124,188, 6, 95, 24, 36, +142, 82,250,142, 16, 82,111,250,244,233,203,102,207,158, 61,231,215, 95,127, 21,125,201,156,172,210,144, 30, 23,117,186, 93,157, +111, 87,254, 6, 24, 96,128, 1, 6,252,247,163, 96,158, 86,241,249, 90, 21, 10,239, 16,158, 72,147, 1, 76,114,115, 35, 51,223, +191,167,154,111,149,184,146,148,174,175, 36,111, 79, 0,244,252, 98, 3, 60,146,253,240,109, 84,206,163,183, 81, 57,224, 40,229, + 40, 85,243,120,136,201,213,106, 87,133,133,199, 94,249,138, 82, 96,159,188,139, 86, 62,125, 31,163,162, 28, 71, 57, 74, 53,132, +224,163, 78,199,173, 10, 9,143, 60,251,239,144,222,228,160,211,247,237,107,247,109,123,255, 81,200,204,220, 92,237,150,228, 87, +167, 3,190, 97,185,232, 8, 33,195, 90,182,108, 57,154,101,217,237,148, 82,221, 87,216,210, 0,152, 75, 8, 57, 21, 28, 28,124, + 60, 32, 32, 32,225, 91,144,172,127,180,252, 13, 48,192, 0, 3, 12,248,175,196, 23,111, 42, 93, 26,190, 37,201,250,119, 68,240, +219,136,198,255,132,221,144,183, 17,117,255, 19,210,251,241,213,169,167, 0, 6,255, 67,149,241, 42,128,171,223,146, 84, 19, 66, +170, 0,224,127, 19,146,245, 15,150,191, 1, 6, 24, 96,128, 1,255,157,248,234,189, 14, 13, 48,224,223,124, 36, 65, 1, 48,134, +156, 48,192, 0, 3, 12, 48,224, 95,212, 15,149,170,104, 17, 0,157, 74,249,209,245, 10, 48,185, 78, 95,144,168,235, 6,155, 6, +155, 6,155, 6,155, 6,155, 6,155, 6,155,255, 91, 54,255, 27, 65, 8,113, 64, 94,180,250,194,168,245,133,228,235, 31, 94,238, +104, 88,250,106,176,105,176,105,176,105,176,105,176,105,176,105,176,249,223, 30,222, 97, 92,209,247,162, 47,158, 65,240, 51,192, + 0, 3, 12, 48,224, 31, 28,233, 75,242, 55,146,255,162,243, 6, 24,240, 31, 84,215, 11, 87, 29, 22,157,179, 37,248, 2, 67,213, +243,149,176,119,255, 96, 98, 39, 59, 56, 56,140,171, 95,191,190,135, 72, 36,226,101,103,103, 47,189,121,243,230,146,226,215,181, +171, 35,124,202,231,193,185,200, 47, 1,194, 7,120, 60,176, 20,177,119, 2, 21, 77, 12, 69,255,111, 93, 41, 93,101,166, 54,127, + 17, 30, 95,204, 50, 90,176, 58, 45,128,191,183, 99,226, 56, 38,138,209,168,186,148,246,123,135,134,125, 93, 24,150,250, 1,220, + 54, 2,222, 4, 10,238,119, 66,121, 19, 40, 15,219, 8,135,159, 32,208,173, 6, 35,156, 45, 16, 9, 22,196, 63, 59, 17,243,223, +144,103,127,254,249, 39,255,107,126,223,191,127,255, 18, 55, 16,117,114,114, 58,111,100,100,228, 86,218,239,114,115,115, 19,226, +227,227,189,254,203,235, 99, 59, 0,155, 1,212, 41,118,234, 53,128,105,148,210, 27, 95,251, 31,237, 9, 17,216, 1,227, 69,192, +207, 0,160, 5,126, 75, 4,118,220,254, 70, 11, 57,190, 5,108,109,109,239, 8, 4, 2,247,220,220,220,220,172,172,172,106,166, +166,166,225,198,198,198,198, 12,195,188, 77, 74, 74,106, 87,193, 60,157,136,252,173,180, 8, 33,115, 40,165,219, 42,114,222, 0, + 3,254, 83,240, 85,171, 14, 9, 33, 53, 0,120,230,191,218, 53,109,218,212, 46, 55, 55, 23,132,144, 68, 0,119, 0,248, 3,240, +167,148,134,125,139,196,242,249,252, 53, 27, 55,110,156, 53,101,202,148,194,205,160,131,130,130, 74,190,150, 7,231, 91,231,174, +219, 62, 9, 14, 67,211, 78,253,243,137, 22, 15,200, 77,128, 87,231,102, 95,218,216,154, 88, 88, 88, 44, 37,132, 12,224,241,120, +229,118,106, 28,199,177,148,210, 19,233,233,233,139, 41,165,217, 21,249, 47,185,177, 84,199,176,108,137,255, 33,224,243,217,156, + 92, 85,169, 97, 47,172,172,172, 2,120, 60, 94,213,162, 27,102,231,167,191,196,207, 69,143, 25,134,137, 77, 78, 78,110,162, 71, + 94, 72,121, 2,209, 52, 66, 68,157,193,227,106, 0, 4, 4,188, 48,142,213, 92,227, 24,237, 70, 74,169,234,107, 72,150, 67,165, +106,119,103, 44,240,115, 14, 9,125,141,249,147,135,226,215,205,251, 48,111,218,104,108,220,121, 4,211,198, 13, 65,237,218,117, +202,180,193, 82,178,116,209,180, 97, 94, 43, 55, 30,110,186, 96,218, 80,227,149, 27, 15, 55, 93, 48,125,168,124,229,166,195, 77, + 22, 76, 31, 38, 95,177,233, 80,147,133,211,135,153,174,220,116, 88, 11, 96,204,151,164,115,104, 13,167, 92,194, 48, 37,142,182, +169, 64,160, 62, 28, 22,103,252,175,120,168, 71,142, 28, 89, 95,169, 84, 62, 27,218,185,145, 95,195, 26, 78,113, 37, 93,147,250, + 49,206, 41,252,205,115, 31,161, 72,214,248,123,159,125, 65,101,217,147, 72, 36, 85, 95,191,126,237,206,113, 28, 88,150, 5,195, + 48,133,239, 26,141, 6,237,218,181,251, 38, 11,103, 8, 33, 61, 1, 44,205,123, 88,225, 75, 41, 61,254, 21,182,228, 2,129, 96, +134, 88, 44,246,100, 24,198, 3, 0,132, 66, 97,168, 90,173,246,103, 24,102, 61,165, 52,167,130, 38, 55,196,197,197,213,150,203, +229,208,106,181,133, 27,208,243,249,252, 90, 46, 46, 46, 91, 1,184,127,237,253,219, 1,227, 91,181,105,179,113,196,172, 89,124, +229,157, 59,216,184,103,207, 6,100,101, 1,192,214,242,126, 43,145, 72,174,240,120, 60,215,138,252, 31,199,113, 81,106,181,186, + 75, 69,126, 35, 16, 8,220,227,227,227,109, 29, 29, 29, 1, 0,198,198,198,198, 69,143, 43,162,100, 1, 88, 77, 41,149, 1, 0, +143,199,219,216,170, 85,171,150,132, 16, 6, 0,229, 56,142, 71, 8, 25,194,113,156, 32,255,250,213,132,144, 61,148, 82,181,161, +219, 54,224, 63, 81,205, 42,141,108, 9,202,248,209, 69, 0,158, 77,155, 54,149, 13, 30, 60, 24,158,158,158,112,119,119,135, 84, + 42,205,107,196, 83, 83,237, 94,188,120, 49,240,206,157, 59, 3,207,157, 59, 7, 66,136, 18,192, 61, 74,105,137, 15,117,167,158, +109,167, 72,229,146, 77, 0,144, 28,155,154, 16,251, 33,105, 83, 66, 66,194,106, 90,100, 55,106, 66, 72,181, 17, 35, 70,204,156, + 58,117, 42,206,159, 63,143, 35, 71,142, 64,173, 86, 35, 59, 59, 27, 55,111,222, 44, 57,161,138, 36,164,223,244, 3,140, 35,128, +104,127,192,200, 22, 48,182,251,226,204,178,176,176, 88, 58,109,218,180,233,181,107,215, 46,140, 98,174,211,233,192, 48, 12,116, + 58, 29,210,211,211, 49,115,230,204, 2, 6, 11,142,227,112,233,210,165, 41,227,198,141, 3,128, 25, 37,217,108,217,196,229, 41, +143,240,156, 11,180, 26,202,178,177, 15,158,199, 52, 97, 88,150,175, 82,105, 75,220,169, 92, 42, 21,149, 73,242,132, 66,161,243, +171,191,254,178,229,137,197,160, 44, 11,112, 28, 40,199, 1, 40,242,162,121,223, 81,150, 3,213,177,224, 24, 14,140, 82,141,102, + 19, 39,234, 83,105, 90, 9,197,178, 35,195,126,156,101,223,188, 69, 11, 97,229, 74,142, 96, 88, 14,239, 35, 98,237,159, 61,125, +216,250,196,254,173, 19, 8, 33, 67, 40,165, 95, 20,103, 75,108,100,122,117,203,239,187,156,159,188, 8,193,141, 91,119,112,253, +166, 63, 0,224,202,173, 60,115, 60, 30,175,188,244, 89, 88,185,123,213,159, 50,186,183,241,138,181,187, 37, 83, 70,247, 22,252, +253,190, 75, 50,101,244,247,130,149,235,119, 73,166,140,254, 94,184,252,183, 45, 13, 9, 33, 22,148,210,244,210,236,149, 86, 70, +132, 97, 36,135,194, 19,249, 0,144,188,125, 59,116, 73, 73,112, 92,188, 24, 0, 48,172,154,157,222,238, 14, 27, 27,155,167, 66, +161,208,185,188,235,116, 58, 93,185, 36,120,228,200,145, 13,148, 74,229, 83,134, 97,168, 64, 32,240, 25,218,231,187, 51, 93,219, + 54, 72, 45,122, 77, 80, 80,160,213,170, 85,127,245, 62,254, 44,155, 14,108,108,242,236,252,154,145, 77,122,204,222, 23, 88, 70, +135,204, 83,171,213,120,251,246, 45,138,110,242, 94,148,215,126, 97,227,195, 3,176,209,202,202,170,121,106,106,234, 48, 0,243, +179,178,178,234,243,249,124, 88, 90, 90,206, 39,132,188, 55, 51, 51,219,157,153,153, 25,144,175, 26,113,122,218,109,103,106,106, +122,224,244,233,211, 22,141, 26, 53,226,165,164,164,160, 74,149, 42, 72, 75, 75,107,118,231,206,157,198, 99,198,140, 25, 67, 8, +249,129, 82,122,167, 2,201,173,105,100,100, 68, 71,140, 24, 65, 88,246,239,219,253,227,143, 63,208,165, 46,227,246, 83, 87, 99, +133, 74, 67, 51,111,188, 53,251, 73, 36, 18,221,139,140,140,204,172,104,126,136,128,159, 71,204,154,197,151, 71, 70, 66, 30, 24, +136, 97, 89, 89,130, 95,243,212,173,114,137, 22,143,199,115, 61,112,100,175,187, 88, 44, 6,195, 48,133,100,176,160,141,210,233, +116,208,106,181,208,233,116, 96, 89, 22, 58,173, 14,190, 43,126,251,226,182,208,200,200,200,200,209,209, 49,209,200,200,200,232, + 91,116, 68, 18,137, 68,176,127,255,254, 33, 98,177, 24, 0,160,209,104, 80,183,110, 93, 98,232,162, 13,248,111, 34, 91, 37,169, + 92,101,141, 82,187,101,101,101,129,101, 89,152,152,152,128,207,231, 23, 87, 84,208,185,115,103,180,107,215, 14,131, 7, 15,198, +171, 87,175,100,131, 7, 15,238, 92,170, 50, 48,171, 7, 42,185,219,229,119, 38,156,195,253, 11, 47,252,254, 88,254,167, 13,128, + 89, 69, 46, 27, 51,126,252,120,146,154,154,138, 1, 3, 6,220, 81,171,213,189, 40,165, 89,165, 42, 26, 28, 98,189, 6, 15, 3, + 71,137,108,253,163, 93, 68,163, 82, 82, 30,143,167, 44,112, 29,126, 97, 70, 13,112,116,116,196,209,163, 71,161,209,124, 30, 46, +204,212,212, 20, 47, 95,190, 44,170,192,161, 69,139, 22,124, 66,200,128,210,136, 22, 33, 60,231,251, 79, 34,109, 11,142,123,116, +174, 35,106,217,196, 53,209,198,202,132, 2, 32, 11, 22, 44, 40, 36,110, 0,176,116,233, 82,125,210, 9,158, 80,136,100,127,255, +191, 27, 98, 1, 15, 60, 17, 1, 17, 2, 60, 65,158, 23, 21, 20,160, 44,192, 49, 0,167, 3,164, 14,149,244,177,221,204,201,197, +253,252,170,117,219,204,213, 58,138,163,103,111, 32, 34,226, 3,248, 60, 30,170,185,185,227,187,246,109,133,141,155,182,172,244, +219,146, 89,231, 8, 33,221, 40,165,143, 43,156,209, 28,149,186,185, 88, 99,247, 31,207, 96, 99, 33,199,128,222,221, 33,147, 74, +240,235,230,189, 88, 49,111, 50,220,171,185, 98,199,134,149,165,254,220,204,204,108, 89,163,122,181,170,237, 61,126, 25,158,237, + 90, 9,246, 29,191,130,246,237, 90, 11,246, 30,191,140,246,158,109, 5,251,142, 95, 70,251,118,109,132,251,142, 95, 70,139, 38, +245,220, 2, 82,131,150, 1,152, 92,250, 61, 23, 43,163,239,242,202,200, 93, 32, 42,236, 8, 34, 39, 76, 0,128, 66,162, 85, 17, + 8,133, 66,231,248,248,120,219,242,174, 43, 79, 53,200, 87,178,158, 50, 12,131,164,164, 36,146,145,145, 65,205,205,205,123, 95, +222, 49,255,116,151, 54, 13,210, 0, 32, 48, 48,208,210,215,119, 85,239, 99, 79,179,160,124,184,133, 28,250,203,159, 27,214,203, +243,233, 89,191,145,141,251,247,239,255,188, 36,187,106,181, 58,162, 97,195,134, 52,255,179,147, 68, 34, 17, 21,171, 19,142,238, +238,238,159,169,214,122,184, 20, 55, 62,120,240, 96,114,237,218,181, 81,171, 86,173,128,230,205,155,155, 26, 27, 27,227,242,229, +203,240,240,240,168, 99,106,106,250,232,196,137, 19,194,185,115,231, 54,216,179,103, 15, 0, 76,209,163,126,118,242,242,242, 58, +122,254,252,121,169, 72, 36,130, 82,169,196,203,151, 47, 97,102,102, 6,177, 88,140,239,191,255,158,223,186,117,107,171,246,237, +219,159,204, 31, 12,232,189, 2, 74,165, 82,209,249,243,231,195,200,200, 8, 70, 70, 70, 48, 54, 54,134,177,177, 49,228, 82,144, +237,211, 92,100, 83,119,102,200,102, 44,222,238,119, 96,219,146, 91, 46, 46, 46,191, 68, 71, 71,103, 84,180, 46, 40,239,220,129, + 60, 48, 16, 40,242,236,234, 11, 51, 99, 75,248,248,248,148,167, 72, 65, 36, 18,161, 85,171, 86,229,218,179,178,178, 58, 37, 16, + 8,236,138,117, 14, 82, 31, 31, 31, 54, 44, 44,204,152,199,227, 25,115, 28, 7, 31, 31, 31,150, 97, 24,169,157,157, 93, 0,199, +113,137,201,201,201,125,203,179, 77, 41, 85, 19, 66,230,240,120,188,141, 18,137, 68, 80,185,114,229,168, 69,139, 22, 61,200, 87, + 51, 65, 41,229, 85,174, 92,185,153, 76, 38,115, 85,171,213, 12,128, 57, 6, 53,203,128, 50,208, 56, 79, 20, 46,132, 6,128,184, + 64,192,207,235,237, 96, 93,236,123, 0, 72,201, 31, 40,218,149,114,156, 10,224, 21,128,154, 0,108,243,207, 61, 1,144, 86,209, + 4,150,169,104, 17, 66,104,145, 11, 11, 59, 22, 19, 19, 19, 60,121,242, 4,132, 16,152,152,152,192,212,212, 20,102,102,102,200, +202,202,194,171, 87,175,240,250,245,107, 68, 70, 70,130, 16,130,106,213,170,161,224, 1, 42, 98,171,176,129, 59,188,246, 60,164, +114, 9, 8, 1, 26,117,168,143,250,237,234,162,233,227,240,105,142,142,142, 59,227,227,227,223, 18, 66, 4,117,235,214, 29,211, +162, 69, 11,172, 91,183, 14,106,181,122, 93, 73, 36,171,168,205, 59, 47,117, 77,242, 59,167,217, 7, 47,191, 55, 26,222,213, 77, + 17, 31, 31,191,230, 11, 50,231,147,134, 56, 37, 37, 69,239,189,248, 56,142, 67,122,122,122,153, 54,139, 43, 4,235, 55,110, 49, +207,206, 76,196,242, 95, 15, 66,167,211, 97,214,172, 89,224, 56,174,240,149,145,145,161, 87, 58, 41, 91, 76,100,224,229,189, 8, + 15, 32, 2,192,101, 80, 30,175,136, 62,186, 5,132, 2,132, 5, 80,236,190,138,219, 36,132, 72,249, 34,217,177, 37,191,110, 50, +127,254, 58, 22,103,111, 60,135, 54, 43, 14, 9,129,167, 1, 0,213, 90, 13,193,113, 53, 31,205,235,187, 97,250,130,223, 44, 22, + 78,255,225, 24, 33,164, 86, 81, 55,162, 62, 29, 27,165, 44,150, 47, 91,134,157,155,214,225,183,117,155,144,149,153, 1,161,208, + 26, 0,192, 48, 44,216, 98,247,246,217,189, 83,218,117,225,236,241,100,227,174,147,168, 91,221, 30,231,174, 5,160, 73, 29, 87, + 92,186,249, 24, 45,234, 85,193, 21,255,103,104, 81,191, 42,252, 31,190,196,172, 73, 35,200,253, 75,251,186, 86,164,140, 54,108, +216, 98,158,157,149,136,243, 43,247, 35,105,235, 86, 68, 77,158,140,102,249,215, 60, 38, 4, 34,103,103, 64, 84,126, 25, 21, 71, +104,104, 40,212,106,117, 73,163,125,120,120,120,148, 91,238, 74,165,242, 25,195, 48, 52, 49, 49,145, 36, 38, 38,194,216,216,152, +188,124, 25,194,214,169, 83,183, 15,125,253,231, 46, 0,240,245, 93,213,231,248,179, 44, 40, 2, 54, 65,249, 96, 51, 68, 85,130, +120, 59,151,142,215,142, 91,188,227, 89,145, 78,238,147,116, 38, 36, 36,116, 43,248, 92,173, 90,181,215, 97, 97, 97, 53, 11, 92, +205,249, 46, 68, 17,195, 48,238, 5,238, 68,134, 97,160, 86,171,209,169, 83, 39,126, 89,247,110, 97, 97,209,194,195,195, 3,207, +159, 63,199,166, 77,155, 44,189,188,188,240,238,221, 59, 16, 66,176,106,213, 42, 82,187,118,109, 97, 74, 74, 10,186,116,233,130, + 83,167, 78,181, 42, 47, 63, 9, 33, 38,198,198,198,123,206,157, 59, 39,229,241,120,200,206,206, 6,199,113,104,221,186, 53,120, + 60, 30, 66, 66, 66,176, 96,193, 2,156, 58,117, 10,103,206,156,145, 53,110,220,120, 15, 33,196,163,168, 91,191,140, 50,162, 42, +149,138, 74, 36, 18, 72, 36, 18, 72,165, 82, 72,165, 82,136,197, 98,228,168,128,113,235,163,212,124,169, 53, 87,167, 97, 27,183, + 81, 83, 87,241,214, 44, 26,125, 19,192, 89,125,235, 60,144, 55, 39,107,227,222,189,155,134,101,102,242, 0, 96, 55, 33,156,150, +210,223,244,121,222, 1, 32, 71,149, 9,215,106,206, 56,121,236, 12,250, 13,234, 93, 34,201, 18, 10, 69, 16, 9,133, 48,181, 52, + 46,215,166, 72, 36,178,123,253,250,181,149, 80, 40, 4,165, 20, 44,203, 66,171,213, 38, 46, 92,184,208,198,219,219,219,228,210, +165, 75, 60,111,111,111,206,194,194, 34,247,241,227,199, 73, 12,195, 88,181,109,219, 86,239, 58, 79, 41,221,214,176, 97,195, 70, +167, 79,159, 30,237,227,227,243,116,246,236,217,203,139,158, 95,189,122,245,178,139, 23, 47,186,246,233,211,231,192,139, 23, 47, +182, 85,164, 13,249,218,118,222, 96,243,223,207,230,133, 11, 23, 10, 27, 98,111,111,239,226,106,167, 29, 33,228,124,145,255,239, + 81,112,236,227,227, 51,223,215,215,247, 37, 33,228,124,209,239, 11,174,203,111, 59,206,151,116,156,255, 91,203,121,243,230,213, +245,243,243, 91,213,178,101,203,163, 1, 1, 1, 31, 42, 74,180,202,157,163, 85, 64,174,138, 18,174, 98, 6,144,149,149,133,172, +172, 44,196,196,196, 96,251,246,237,249, 15,180, 16, 2,129, 0, 2,129,160,112, 62, 67,105,184,126,238,238,102, 0,155, 27, 55, +110, 44, 12,126,112,226,210,207, 59,167,118,108,210,169, 17,255,217,141,224,254, 0, 86, 0,232, 54, 98,196, 8,107, 0,216,191, +127,127, 10,128, 75,255, 10,202, 76, 41, 61,241,246,237,219,233, 14, 14, 14,133,115, 84,138,186, 15, 25,134,129, 84, 42, 69,193, + 92, 22,149, 74,133,237,219,183, 51,148,210, 19,101,216, 68,216,203,155,120,251,242, 86,222,239, 56, 14, 28,251,247,239,151, 44, + 89, 82,116,137, 40, 38,228, 43, 39,229,146,188,146,242,156, 22,123, 47,246,253,103,228,236, 51,247,132,104,106,255, 31, 38, 59, +112, 68,128,191,110,190,128, 80, 40, 4, 87, 68,205, 20,242,243, 70,203, 47,223,197,195,209,174, 14,122, 13, 25,111,127,250,192, +150,169, 0,126,173,104, 94,215,170,223, 18,211,166, 79,199,174,157, 59,177, 96,241,178, 66,150,206,176, 44,152,114,211,201,227, +181,110, 82, 27, 57,169,177,224,243,249,104,213,208, 13,124, 62, 31,109,155,212, 0,159,207, 71,155,166, 53, 33, 16, 8,208,190, + 69,109, 84,175, 94, 29, 2,129,128, 87, 78,185, 35,236,229, 13,188,125,121,187, 8,233,165,160, 0,180, 9, 9,159, 93,175, 75, + 72, 0,117,177,170,104,221,194,152, 49, 99, 50, 98, 98, 98,180,197,207, 85,170, 84, 73,116,231,206, 29,243, 82,220,118,133,144, +201,100,141, 5, 2,193,179,180,180, 52,206,200,200,136,199,113, 44, 87,167, 78, 93,254,229, 29,243, 79, 23, 92, 51,111,222,252, +211, 3, 27,155,246, 57,120,226, 60, 21, 85,110, 67,136, 80,194,252,184,120,135, 72, 40,146,233, 21,241,190,192,141,248,230,205, + 27,148,151,158,162, 3,179,146,144,158,158, 62,194,195,195,227,206,230,205,155, 45, 9, 33,184,123,247, 46,248,124,126,225, 43, + 60, 60, 28, 60, 30, 15, 63,255,252,179, 54, 43, 43,107,108,121,105, 19, 8, 4,211, 79,158, 60,105, 38, 22,139,145,157,157, 93, +248,220,240,249,124,188,126,253, 26,107,214,172,193,136, 17, 35, 16, 29, 29, 13, 71, 71, 71,204,154, 53, 75,238,231,231, 55, 29, +192, 50, 61,110, 61, 72,163,209, 52, 49, 50, 50,130, 84, 42, 69, 1,225, 2,128,171, 47,133, 33, 10,133,162,158,181,181,181,189, +141,255,249,191, 90,121,245,106, 96,101,227,208,178,128,104,233,139,247,192,206, 8,150, 93,216,237,244,105,219,251,167, 79,115, + 15,207,157,139,149,100,103,239,208,187, 14,233,120,136, 10,143, 69,227,198,141,241,236,217, 51, 52,110,220,184, 40,105,130, 88, + 44,134, 72, 36,130, 72, 36,130,181,133, 94, 83, 40, 40,143,199,195,253,251,247,193,178, 44, 52, 26, 13, 52, 26, 13,106,215,174, +157,118,235,214, 45, 57, 0,132,135,135,211,225,195,135,103, 60,122,244, 8, 13, 27,150,189,159,186,189,189,253, 29, 62,159, 95, +185,216,179,106,209,183,111, 95,164,167,167,119,239,219,183,111,155,252,239,226,254,252,243,207,225, 0, 32, 22,139,193,227,241, + 88, 24,240, 63,143, 2,114, 85,148,112,149,208,230,244, 40,126, 76, 8, 57,239,235,235,219,163,248,119, 69, 73, 85, 73,159,139, +254,214,207,207,111, 85, 17,219,202, 47,240,134,149, 63, 71,139, 16, 66,203,107, 52,203, 66,121, 68,171, 0,207,158, 61,211, 57, + 57, 57,237,122,251, 34,178,163, 91,253,106,144, 25, 75,190, 35,132,108,150, 72, 36, 51,127,248,225, 7, 60,124,248, 16, 33, 33, + 33,127,124,237,118, 42,245,234,213,187, 34,145, 72, 92, 75,113,147, 68, 5, 7, 7,119, 41,165, 99, 88,156, 63,231,172,212,201, +240, 69,231,139, 21,157, 12, 95,106,197,224, 40,116, 90, 29,114, 21,202,191, 59,241,124,162,149,155,155,139, 65,131, 6,125,162, +104, 37, 37, 37,233, 83,168, 88,115,246, 44,174,157, 56,129,238, 13, 26,224,212,227,199,240,251, 97, 40,106,185, 58,129,178, 4, +148, 0,209, 71,182, 32, 53, 43, 7,135,111,220, 71, 90,182, 2,195,218,182,133,187,169,117,217,118,133,162,206,205, 90,180, 20, + 93, 15,120, 5,161, 80, 0, 30, 56, 80,157, 2,142, 30,237,193,231,241, 96,102, 87, 5, 34,161, 16, 66,161, 0,225, 49, 41,240, +168,219, 84,124, 94, 44,237,252, 37, 68,171,146,107, 21,176, 44,139, 17, 35, 70,224,232,209,163,176,178,119,133, 89,165,186, 88, +177,110, 39,186,119,106, 91,238,253, 23,140,224, 5, 2, 1,248,124,254,103,239, 5,159,245, 81, 39, 41, 71,161, 45, 94, 70, 28, + 5, 40,133,243,202,149,112, 94,185, 18,143,243,255,179,118,110, 46,148, 74, 37,208,188, 78,133, 72,150, 70,163, 65, 76, 76,140, + 54, 33, 33,193,174,132, 14, 42, 81,163,209,148, 75,108,246,237,219, 23, 52,114,228,200, 38,150,150,150, 79,131, 2, 3,117,245, + 27, 52, 16, 94,218, 62,255, 76,129,219, 16, 0, 26, 52,104,144, 54,127,254,252, 51,195, 7,244,232,189,205,103, 48, 59,113,217, + 1,129, 68, 38,107,210, 99,118,217, 19,226,139, 60, 31, 17,245,235,215,167,250, 92,171, 80, 40, 62,150, 81, 70, 61, 1, 44,109, +212,168,145,169,151,151, 23,238,220,185,131,126,253,250,169,181, 90,237,219,252, 70,181,198,225,195,135,197,175, 94,189,130,141, +141,141, 48, 42, 42,106, 15, 33,164,204, 9,242, 98,177,184,125,211,166, 77,121,106,181,250, 51,146,229,231,231,135, 33, 67,134, +160, 70,141, 26,224, 56, 14, 57, 57, 57,240,242,242, 18,110,218,180,169,189,158, 68,107, 90,173, 90,181,214, 32,111,213, 97,209, +182, 48, 20,192,156,124,181,251, 99,143,126, 35, 94,182,237,212,183, 73,229,234,117, 29,202, 51,104,103,103, 55,143,199,227, 13, +228, 56,142,159,149,149, 21,163, 33,164,122,109, 87, 87,187,214,189,123, 35, 83, 40,228,111,188,113,131,151,152,157, 45, 7,160, +151, 11, 82,165,203,133,107,181,188,169,126,253, 6,245,198,179,103,207,208,127,112, 31,136, 68, 34, 8, 4,194,188,103, 83,148, +167,104,153, 91,155,234, 85, 55,117, 58, 93, 97, 27, 94, 48,207, 75,171,213,162, 96,106,150,145,145, 81,225, 57,181, 90, 93,234, +128, 60, 31,238,199,151, 45,178,149,153,154,129,213,233, 80,167,119,255,194, 58,253,104,247, 54, 25, 56, 78,150, 17, 21,129, 41, + 39,206, 9, 97,128, 1,165,168, 90, 37,168, 89, 69,219,149,243,197,201,214,151,130, 16,114,222,199,199,103, 62, 0,234,227,227, + 51,191,224,216,215,215, 87, 9, 32,238, 75,200, 86, 73, 42,151,224, 91,144,172, 2,247, 66, 89,232,208,161,195, 20, 19, 19,147, + 77, 0,208,164, 73, 19,196, 60,140, 67,204,195, 56,120,212,172,211,186, 81,131, 38,153, 67,134, 12,129,149,149, 21,102,207,158, + 77, 1,252, 81,209,255, 15, 15,123, 41, 7, 64, 29, 29, 29,103, 3,128,163,163, 99,131,199,143, 31,219, 60,121,242, 4, 77,155, + 54,253, 91,186,215,106,209,166, 77,155,178, 58,196,108,228,205,181,154,241,237, 84, 50, 14, 90,173, 22, 10,133, 18, 26,141, 22, +140,142, 3,195, 48,104, 92,199, 4, 7,118,250,228,125,199, 20,168,103,121,170,153,179,189, 9, 26,215,179,215,241,120, 68,249, + 36, 48,161,196, 22, 83,163,209, 32, 40, 42, 10,129,145,145, 0,128, 94,190,101, 79,124, 61,112,227, 14,106,215,174, 93, 94,106, +221,156, 29,237, 17,127, 45, 40,175,241, 86,198,224,201,189,227, 48, 49,145, 3, 0,234,120, 14,131, 72,148, 71,180,114,149, 90, + 88,215,172, 4, 66,105,169, 97, 1,140, 45, 29,174, 8, 68, 82, 87,202,114,160,148, 3,229, 88, 80,202, 65, 98, 98,101, 52,101, +194,104,112, 28,139,102,205,154,129,240,249, 96,117,106, 12,232,217, 25,233,153,217,176, 50,215,175,147, 16,137, 68,240,244,244, +148,149,118,254,221,187,119,202,162,196,172,236, 50,210, 33, 55, 87, 9,181, 90, 13,173,134,129, 86,199,128,173, 42,194,242,133, + 67,193,104, 25, 40, 6,183,132, 86,199,128,155,222, 7, 90,141, 14,209, 70, 60, 94,131,218, 54, 58, 30,136,242,249,171, 36,211, +242,136, 86, 1, 57, 40, 13, 37,205, 9, 44,133,108, 5,142, 28, 57,178,113,253, 6, 13,158, 13,236,212, 96,109,112,200,203,248, +224,144,151,159, 93,231, 90,163, 65,196, 68,191,163,179,132, 34, 89, 99,125, 73, 22,240,169, 27,241, 43, 49, 63, 59, 59,187,190, + 92, 46, 71, 88, 88, 24,248,124, 62, 8, 33,239, 40,165,245, 1, 96,252,248,241,239, 5, 2, 65, 53, 62,159,143,173, 91,183, 18, +129, 64, 80,175,101,203,150,243, 1, 28, 47, 99, 64,231, 97, 98, 98,242,137,154, 37, 18,137,224,227,227,131,225,195,135, 23,146, + 44,145, 72,132,125,251,246,161, 73,147, 38,208,104, 52, 30,122,146,225, 39, 0,218,234,161,248,145,124,114, 94, 46, 25,101, 24, +102,100,234,192,129,213,225,239,143,214,213,170,213,110,220,184, 49,180,218,191, 5,205,106,213,170, 85,202,206,206,254, 72, 8, + 57, 4, 96, 27,165,244, 69,153,164, 72,197, 33, 42, 60,182, 96,208,138,102,205,154, 21, 42, 88, 69,213, 44,145, 72, 4,153, 88, + 94, 33,162,197,113,121,237, 82,118,118, 54,207,223,223,223,186, 86,173, 90, 4, 0,106,213,170, 69, 94,188,120, 97,105,100,100, +148,226,230,230, 86,238, 0, 88,102,106,134,125, 35, 7, 1, 0,126,233,212,181,112, 96,116,121,233,124, 8,133, 66,116,156, 61, +255,179,122,207,113, 28, 31, 6, 24, 72, 86, 57, 36,171, 36, 69,235,235,250,230,191, 21, 45, 95, 95,223,151,190,190,190,159,169, + 99, 21,180, 87,190,162,165,143, 43,160,188,135,181, 52,172, 91,183, 14,245,234,213, 43,179, 35,218,180,105, 19, 14, 30, 60,184, +142, 82, 26, 94,209,255,239,209,177, 81, 29,172, 63,253,178, 90,141, 58, 4, 0,150, 77,239,201,203,205,205,197,253,251,247, 97, +102,102,134,119,239,244, 11,251, 69, 8, 49, 49, 51, 51, 91,202,227,241, 6,240,139,175, 0, 40,153, 96,178, 28,199,157,200,204, +204, 44, 53,188, 3,165,128, 86,199, 32, 87,161,130, 70,163,193,244,159,183,148,155, 14, 95,128,104, 53,217, 2,207,118, 45,101, +165, 41, 58,205,234,181,199,164, 31,228,159,117,222,124, 30,192,227, 1, 13,155,229, 41, 46, 47, 30,191, 4,199, 1, 44, 7, 88, +219, 90,224,143, 35,107,203,204, 2,134,229,242, 71,199, 44,114,212, 44, 60, 90,244, 64,108,168,127,161,130, 36, 22,229,185,140, + 69, 66, 33, 56, 74,242,162, 62,148, 70,132,196, 50,215,244,132,112,247,157,231,131, 49,174, 71, 61,252,121, 61, 8,253, 59,213, +199,173, 71,175,224,213,188, 54, 94,190,141, 68, 29,247,202,216,186,231, 4, 40, 69,246,239,235, 87,124,252,187, 67, 99,162,244, + 81,180, 30, 62,124,168, 44,174, 98, 21,125,167,229,247,135,160,244,111, 69, 75,169, 82, 99,246, 60,189,194,249,228,149, 81,219, + 22, 50,125, 46, 46, 75,177,210,135,136, 21, 87,182, 80, 78,120,150,170, 0,154, 0,115,255,149, 13, 39,203,178,184,112,225, 66, + 97,121,148, 84,142, 69,203, 78, 15,146,131,168,168, 40,188,124,249, 18, 45, 90,180, 64,102,102, 38,132, 60, 30,102, 5, 7,163, +246, 15, 63, 64, 35, 18,129,227, 56,136,197, 98,140, 31, 63, 94,239,252,172, 96,107,154, 63,207,141,165,229,180, 37,107,123,244, +232, 81, 61, 44, 55, 23, 47, 95,191, 70,167, 37, 75, 0, 0, 23, 47, 94,252,164, 78,204,156, 57, 83,252,234,213,171, 49, 79,159, + 62, 29, 67, 8, 89, 71, 41,157, 85,106, 59, 75,213,133,115,180, 6, 14,237,135,234,181,170,226,224,222, 35,133,231,103,206,153, + 6,161, 80, 4,161, 72, 8,115, 51,115,189,238, 70,167,211, 21,146, 86,133, 66,193,187,120,241,162,115,231,206,157, 69,211,166, + 77, 35, 0,112,240,224, 65,222,230,205,155,141,175, 93,187, 38,114,114,114, 74, 40,151, 92,106,181,159,149, 49, 33, 4, 66,161, + 16, 34,177, 8,224, 56, 16, 66,140, 87,175, 94,189,236,229,203,151, 77,107,213,170, 5,181, 90,253, 3, 33,228,185, 33,142,150, + 1, 5,110,195,210, 8, 87, 73,115,173,242, 85,169,210,144, 92,116,222, 86,105, 68,173,232,156, 45, 0,234,138, 55, 11,122,206, +209, 42, 9,124, 62,191, 92,181,138,199,227,149,235, 58,156, 57,115, 38, 76, 76, 76, 74,235,128,104,112,112,240,171,132,132,132, +157,148,210, 45, 95, 82, 56,231,111, 60,127,185,116, 70,159,108,228,251, 86,205,205,205, 83, 58,116,232,144, 3, 64,123,252,248, +167, 3,100,181, 90, 93,106, 7,110,102,102,182,116,247,238,221, 83,123,247,238,205, 43, 30, 98,160,168,123,175,224,165,211,233, +112,252,248,241,169,115,231,206, 69,105, 42, 88, 65, 39,174,200, 85, 66,153, 63, 17,250,125,200,159,250,150, 94,169,167,228,230, + 14,112,174, 90,191,212,206,132, 39,202,155, 67,100,231,242,119, 7,102, 98, 34, 5, 91,134, 77, 66,120,225,145,209,241, 78,149, +236, 45,241, 62, 38, 25,118,149,235, 33, 61,238,239,124, 16, 8,248, 16,230,187, 14,205, 77,141,145,156,148, 4, 30,143, 95, 38, + 49, 94,113,248, 57, 30,133, 68,226,228,245, 23,208,170,114,177,126,255,101,104,213, 57,208,170,114,161, 85,229,189,175,154,251, + 35, 8,193, 71,173, 42,167, 70, 69,202, 93, 32, 16,160,121,243,230,165, 18,157,184,184, 56, 61, 21, 45, 90,168,104, 41, 85, 21, + 44, 35,253, 30,194, 50, 21,171,130,243, 95, 74, 12, 10, 66, 62,200,100,178, 38,251,246,149, 30,198,161, 36, 56, 56, 56, 92,146, +203,229, 85,244,189,190, 2,193, 75, 87,153,155,155, 47,173, 85,171,150,199,250,245,235,133,124, 62, 31, 29, 59,118,172,241,227, +143, 63, 70, 1, 64,189,122,245, 28, 11,218,152,137, 19, 39,210,135, 15, 31,134,228,141, 49, 74,135, 88, 44,126,109,102,102,214, +196,203,203, 11,153,153,153,136,137,137,129,177,177, 49,106,175, 93,139,224,137, 19,209, 96,251,118,240, 58,116, 0, 33, 4, 98, +177, 24,193,193,193,144,201,100,175,203, 32, 67,205, 1,252, 6,160, 53,254,118, 23, 82, 0,247, 1,252, 76, 41,125, 84, 66,123, +199, 3, 0,150,227,202, 43,172,161,179,103,207, 70,134, 80, 8,120,123, 67, 20, 30, 14,173, 86,139, 22, 45, 90, 20,170,236, 45, + 90,180,128, 64, 32, 64,253,250,245,225,232,232,136,173, 91,183, 14,197,167, 43,177, 63,129, 42, 71,139,168,240, 88,180,108,217, +178, 80,185,242,246,246, 46, 84,180,132, 66, 97,161,178, 69,216,242,137, 43, 33,132, 22, 29, 36,179, 44, 75, 4, 2,129, 96,198, +140, 25,164, 95,191,126, 84,163,209,112, 98,177,152,119,242,228, 73,114,235,214, 45, 65,110,110,110,185, 3,241,186,125, 6,224, +151,206,121,162,232,138, 42, 54, 16,138,132, 16,139, 68,152,253, 58,182,176, 92, 76,247, 29, 21,251,249,249,245,175, 85,171, 86, +158, 27, 30, 16, 24,226,104, 25, 80,142,154,149, 92,140, 36,105,138, 28, 39, 3, 32,249,199,201, 69, 8, 85, 50,242, 86, 16, 54, + 45,118,109,193,121, 77,177,247,130,243,129, 21, 77,123,145,189, 14, 63, 35, 95,101,141,136,223, 62,120,240,192,189,113,227,198, +136,142,142,254,108, 37, 92, 65,199,101,108,108, 12,153, 76,134,128,128, 0, 0,120, 91,154,177,155, 55,111,110, 70, 94,212,101, + 0,128,163,163, 99, 75,175,129,237, 3,154,117,109,138,195,190, 71, 50, 19, 18, 18,234, 23,196,208, 33,132, 16, 71, 71,199,225, + 66,177, 96, 80,181,186, 46,158,224,184,223,174,255,117,111, 73, 89, 55, 89,173, 70,157, 28, 0,202, 34,171, 14,215,124, 73, 65, +243,120,188, 1,189,123,247,230,189,122,245, 10,131, 6, 13,194,193,131, 7, 75,189,118,248,240,225, 56,122,244, 40,122,247,238, +205,155, 55,111,222,128,242,136, 86,158, 90,162,249,102,149, 50,236, 93, 32, 14, 28,221, 93,234, 28, 36, 91,219,188,249, 88, 73, + 73, 41,133,223, 53,109, 92,182,103,132, 99, 52,215,158, 63,125,220,178, 85,187,142,162,152,196, 12,112,140, 26,170,236,191,127, +175,200, 72, 4,101, 84, 16, 25, 89,194,222,218, 12,207, 30, 92,213,104, 53,170,107,101,217,156,218,187, 14, 38,246,244, 0, 40, +135, 62,179,254,192,249, 45, 83, 10, 71,208,109,250, 77,195,141,227, 27,245,158,227, 87, 28, 66,161, 16,193,193,193,202,210,212, + 44, 62,159, 95,110, 76,174,191, 85, 71, 29, 20, 10, 37, 20, 74,213, 55, 43, 35, 66,136,141,157,157,221,239,150,150,150,210,146, +136, 20, 33,196,198,198,198,230,119, 43, 43, 43,169,190,174,195,210, 72, 86,126, 92,173,167, 35, 71,142,172, 16,217,146, 72, 36, + 85,222,190,125, 91, 24,172,180,172,119,141, 70, 3, 47, 47, 47,189,130,151, 82, 74,207, 17, 66, 62, 56, 56, 56,220,175, 93,187, +182,217,251,247,239,113,228,200, 17,145, 80, 40,116, 41,104, 63,178,179,179,193,231,243,145,148,148,164, 3, 48,186, 60,215,153, + 90,173,246,247,247,247,111,216,179,103, 79,254,235,215,175,193,231,243,243,210,213,178, 37, 26,108,223,142,144, 25, 51,224, 25, + 25, 9,149, 86, 11,169, 84,138, 43, 87,174,104, 21, 10,133,127,105,246,100, 50,217,206,136,136,136, 58, 82,169, 20, 90,173, 22, + 28,199,129,199,227, 17,129, 64,208,198,220,220,124, 19,128,166,159, 62, 83,182,182,227,103,254, 90,147,101, 24, 54, 33,250,125, +114,121,121,144,154,154,138,115,231,206,161, 69,139, 22,240,244,244, 68, 92, 92, 28,194,195,195,209,189,123,247,194,107, 2, 3, + 3,241,252,249,115,184,185,185,149,175,232,241,116,112,171, 89, 5, 34,145, 40, 79, 33, 18,138,242, 7, 62,194, 66, 37, 75, 36, + 20, 65, 40, 16, 66, 42,147,234,173,104, 17, 66,192,227,241, 64, 8,129, 76, 38, 43, 24,100,115,206,206,206, 9,105,105,105, 14, + 0,248, 50,153, 12, 44,203,234, 53,104, 41,232, 35, 10, 72,150, 72, 44, 42, 84,182, 0, 32, 35, 35, 67,213,187,119,239, 67,106, +181,122, 20,190, 96,135, 18, 3,254, 39,241,228, 95,244, 91,189,121, 34,165,116,103, 73,147,226,203,170,224,221, 91,181,106,181, +125,200,144, 33, 29, 55,108,216, 0,185, 92,142,132,132,132,194, 14, 81, 44, 22,163, 82,165, 74, 72, 75, 75,195,142, 29, 59, 16, + 27, 27,123, 19,192,120,125, 83,148,144,144,240,240,221,139,183,169, 94,253, 91, 89,213,105, 85,211, 60,230,109,108, 11, 0, 1, +249, 36,235,143, 33, 51,187,143,242,234,219, 12, 34,177, 16, 49,239, 62,254,191,149, 36,159,207,231, 19, 66, 48,104,208, 32,189, +174, 31, 60,120, 48,252,253,253, 81,150,155,145, 43, 80,180, 20, 42,228, 42,191,221, 96,109,210,148,225,152, 52,101,120, 33,153, +208,199,245,146, 71,114,143,149, 65,180,180, 27,206, 31,219, 49,174, 81,179,150,174, 77,234, 84,193,163,167, 47,112,120,251,223, + 34,195,158,205,203,240,235,158,155,168,100,103, 1,173, 58, 23,151,254,220,245, 81,171, 86,108,248, 66, 81, 46,143,220, 18, 2, + 61,227, 84,126,162,162, 22, 16,173,186,117,235,150,170,104,165,165,165, 41,203,235, 24, 10,203, 72,163, 67, 78,174, 18, 74,197, +183, 33, 90,132,144, 6,109,218,180,185,118,226,196, 9, 43, 91, 91, 91,196,199,199,127, 66,180, 8, 33, 13, 90,183,110,125,237, +196,137, 19, 86,118,118,118,136,137,137,209, 59,172, 72, 9, 36, 11,201,201,201, 36, 61, 61,157,179,176,176,168, 16,217,226,241, +120, 80,171,213, 8, 13, 13,213,247,111,245, 94, 33,102,102,102,182,239,232,209,163,102, 41, 41, 41,224,243,249, 8, 13, 13,253, +100,213, 97,193,235,143, 63,254, 16,245,233,211,103, 55,128, 50,151,181, 49, 12,179,110,248,240,225, 99,226,226,226, 44,108,109, +109,145,144,144, 0,177, 88, 12, 74, 41,136,151, 23,218,126,248, 0, 45,203, 66, 38,147, 33, 44, 44, 12, 59,119,238,204, 85,171, +213,235, 74, 41, 31,177,145,145,145,187, 72, 36,194,176, 97,195, 62, 57,183,127,255,126,244,106,194,111, 50,174,179, 36,135,129, + 84,157, 40,235,118,137,207,231,147,241,179,127,171,209,188,157,119,221, 55, 33,143,222, 39, 39,198,222, 47,231,246,117, 26,141, + 6,181,106,213,194,147, 39, 79,112,253,250,117,116,232,208, 1,158,158,158, 8, 10, 10,194,213,171, 87,241,252,249,115, 16, 66, + 96,101,101, 85, 48,253,162,204, 57, 24, 26, 5,131,164,248,212,207,212,171,226,199, 34,145, 8,106,165, 86,175, 50,122,253,250, + 53,158, 60,121, 82, 24, 90,134,207,231, 51, 63,252,240, 3, 40,165, 52, 34, 34, 2, 38, 38, 38,116,228,200,145,172, 64, 32, 96, +226,226,226,244,173,251,121,234, 85, 62,201, 18,136,132,159, 16, 52,142,227,178, 3, 3, 3,199, 17, 66,130, 8, 33,171,243,191, + 54,196,209, 50,224, 63, 25, 23,138,238,117,168,151,162, 69, 41,253, 0,160, 19, 33,100,232,153, 51,103,214,109,218,180,201,166, + 71,143, 30, 72, 79, 79,135,171,171, 43, 28, 28, 28,112,254,252,121, 92,188,120, 49,133,101,217, 89,148,210,131, 37, 60,108,157, + 74,139,181, 65, 41,165,142,142,142, 39,212, 57, 57, 19, 27,123,122,224,230,241,187,190, 14, 14, 14,227,157,156,156,166,143,156, +255,253,168,246,189,155, 34,236,121, 4, 30, 94, 13, 70, 98,116, 10, 70,182,253,185, 76,155,197, 39,195,155,155,155,143, 49, 50, + 50, 18, 3,208,150, 48, 42,254,100,213, 97, 81,155, 44,203,178, 26,141, 6,199,142, 29,211,139,108, 29, 57,114, 4, 42,149, 10, +108, 49,255,106, 81,155,148,163, 68, 32,148,192,177, 82, 45,104,181,185,224,184, 47, 83,111,138,218, 44, 24,129,190, 23,139, 97, +155,146,130, 71,143, 30,233, 43,205,150, 89, 70,148, 82, 21, 33,100,216,198,149,179,207, 79,246,249,205,188, 67,171,134,248,101, +237,126,104,181,123,192,227,243, 32,147,136,208,184, 89,107,240,161,198,239,126,115, 50, 20, 89,233,195,138,111,197,243,153,205, +178, 60, 44, 20, 96, 57, 14,215,239, 60,214,251,222, 11,123,123,150,133, 64, 32,192,187,119,239,148, 37,173, 54,228,243,243,220, +156, 5, 35,245,178,108, 82,142, 35, 66,145, 20,149, 92,107, 67,163,206,249, 38,101,100,107,107, 59,231,244,233,211, 86, 5,161, + 18,130,130,130, 64, 8, 9, 45,162,142,204, 57,125,250,180,149, 82,169, 68, 72, 72, 72,193, 86, 83,161, 21,121,142, 10,148,172, +228,228,100,146,144,144, 0, 35, 35, 35, 94, 80, 80,144,186,126,253,250, 79, 81,246,206, 15,133, 54, 85, 42, 85,100,105,243, 39, + 85, 42,149,147, 84, 42, 21, 22,251,173,163,187,187,123, 88,113, 23, 98, 73,233,204,204,204,124, 52,119,238,220,198, 93,187,118, +197,156, 57,115,210, 44, 44, 44, 76,126,255,253,119, 1,159,207, 39,147, 39, 79,102,147,146,146,114,118,237,218,101,118,230,204, + 25,100,100,100, 4,148,119,239,148,210,108, 66,200,184, 86,173, 90,237,191,124,249,178,145,187,187, 59,178,178,178, 64, 41,197, +190,125,251, 48,121,242,100, 72,165, 82,132,133,133,161, 87,175, 94, 10,133, 66, 49,174,248,220,201, 34, 54, 9, 33,132,114, 28, +135, 69,139, 22, 21, 6, 39, 45, 8, 86,106, 34, 35,216, 57,179,170,241,180, 93,153,198, 67,127,217,245, 3, 0,176, 12,195,190, + 9,121,244,126,223,150, 95,110,137, 68,162, 59,229,148,209,130,105,211,166,253,238,237,237, 45,147,203,229, 72, 75, 75,195,253, +251,247,241,224,193, 3, 60,124,248, 16, 26,141, 6, 86, 86, 86,176,176,176, 64, 66, 66, 2, 94,191,126,173, 4,176,160, 44,155, + 98, 35, 33,170,213, 40, 88,249,155,167, 96, 9,139,172, 54, 44,170,110,137,132, 66,189,158,163,118,237,218,161,121,243,230, 5, + 4,136,141,138,138, 74, 80,171,213,164, 8,233,143, 43, 32,228, 46, 46, 46,204,193,131, 7,105, 89, 54, 31,238,220,138,203,203, + 23, 64, 44, 18, 97, 86,104, 76, 33,233,218,223,161, 17,132, 98, 17, 60,122,246, 43,218, 15,108, 35,132,236,201,255,172,214,167, +206,127,197,192,199, 96,243,223,220,230,127, 50, 40,165, 9, 0, 42,182, 5, 79,145, 31, 31, 38,132, 92,250,241,199, 31,253, 26, + 52,104,240,227,250,245,235,137, 72, 36,194,146, 37, 75,104,124,124,252,222,252, 81, 72,250, 23, 38,108,239,237, 83, 1, 19, 70, +248,244, 38, 51, 55,140,108,243,244, 70,200,235,122,173,220, 81,175,149, 59,158,222,124,133, 45,243,143, 28,100,117,236,162,132, +132,132,232,114, 76,169, 59,181,174, 89,124, 50,188,149,255,173, 27, 86, 21, 93,117,200,113,220,137, 35, 71,142, 76,237,219,183, + 47,239,241,227,199,159,205,201, 42,216,118,135,227, 56, 92,187,118, 13, 90,173, 22,123,247,238,229, 56,142, 43, 61,142, 22,232, +217,141, 27,252, 70,236, 61,112, 86, 44, 22, 17, 60,184,115, 18,153,233,101,171,116, 34,145, 16,127,236, 59,165, 21,137,132,111, + 74, 58,175,213,106, 99,110,220,184, 97,215,133,101,133, 60, 30,239, 51, 2, 85, 26, 78,156, 56,161,227, 56, 46,170,156,114, 9, + 32, 68,216,115,197,156,209, 71,188, 7,254,104,215,170, 85, 27,161,181,173, 29, 8, 33, 72, 74, 76, 66, 88,200, 99,221,165,147, +187, 19,115, 21,217,122,109,193, 51,122,205,237,194, 57, 89, 0,208, 99,242,166,194,249, 89, 0,208,115,228, 92,120,181,168, 3, +162,143,244,244, 55,201,226, 24,134,129,177,177, 49, 24,134, 41, 49,196,131,153,153,153, 76,165, 82, 41,243, 3, 49,150, 41, 21, + 81,224,155,151, 17,203,178, 30,233,233,233,200,205,205,197,131, 7, 15,232,202,149, 43,147,147,147,147, 11, 39,109,234,116, 58, +143,180,180, 52,228,228,228, 32, 32, 32,128,250,249,249, 37,167,166,166,206,175,200, 51, 36,147,201,154, 8, 4,130,167,233,233, +233,156,145,145, 17, 79,167,211,233,234,215,175, 47,145,201,100,122,111,168, 30, 31, 31,223,181,180,115,110,110,110,111,223,190, +125, 91,157,101,217,162,123, 32,138, 84, 42,149,123,171, 86,173,244,113,249, 76,219,179,103, 15, 78,157, 58,213, 44, 43, 43,107, +120, 84, 84,212,126, 0,205, 4, 2, 1, 94,188,120, 17,170, 82,169,134,244,237,219,119, 95,122,122,250, 35, 0,211,244,108, 55, + 46, 19, 66,134,121,120,120,236, 89,186,116,169,220,211,211, 83,224,232,232,136,166, 77,155, 34, 44, 44, 12, 23, 46, 92,208,109, +219,182, 45, 87,161, 80,140,166,148, 94, 43,187,216, 65, 24,134,129, 88, 44, 46,124, 73, 36, 18,136, 68, 34,100, 43, 41,198,174, + 13, 87, 50,144, 41,215, 45, 25,119,129, 2,228, 99, 76,120, 74,210,199,152, 71,132,144, 59,241,241,241,153,165,228,153, 88,165, + 82, 53,116,112,112,224, 19, 66, 54,104,181,218,145, 83,166, 76,113, 88,181,106, 21,106,214,172,137,148,148, 20, 24, 27, 27,195, +221,221, 29,201,201,201,120,252,248, 49,171, 80, 40,182, 3, 88, 70, 41, 45,211, 29,153,145,146, 5,103,123,151, 79,148, 79, 74, + 41, 40, 11,232,212, 44, 88, 45,133,134,232, 32, 20,234, 32, 18,137,244,233, 44, 41,199,113, 72,119,112, 0, 23, 18,130,135, 15, + 31,130, 82, 90,170,170, 86,171, 86, 45, 61, 10,136,131, 88, 34,254,196, 93, 72, 8,129, 72, 44,134, 80, 44,250,108,229,140, 65, +197, 50,224,191, 29,250,206,181,200, 0, 48,158, 16,178,191,125,251,246,231, 41,165, 66,228,249, 35,239,126,205,159, 39, 36, 36, + 60,115,116,116,156,103,231,108,225,215,109,120, 27,212,108,232, 10,150, 97,113,255,226, 11,236, 93,117,230,104, 92, 76,220, 72, +125,246, 62,227, 56,238, 86,235, 38, 53,121, 40, 18,171,219,209,209,145,251,146, 85,135,153,153,153,139,103,205,154,133, 57,115, +230, 84,120,213, 97,105,215, 4,133, 38,141,111,224, 97,227,220,179, 91,219, 46, 32, 60,170,209,168,203,104,248, 80, 24,185, 84, + 36, 18,190,121, 28, 24, 95,191,164,235,146,147,147,187,140, 26, 53,234,154, 64, 32,168, 82,145, 60,231, 56, 46, 42, 49, 49,177, + 99,249,101,174,187, 79, 8,113, 63,119,116,199,140,203,167,246,116,225, 56,214,141, 0,224, 11, 68,239,117, 90,237, 21,181, 50, +107,189,190,155, 74,175, 30,223, 18,211, 54, 94,197,214, 57, 61, 49,197,239, 56,118, 47, 26,139,121,107,143,224,183, 57,211,176, +114,211, 33,252, 50,109, 24,250, 15, 29,197, 81,194,187,167,239,125,240,249,252,203, 59,118,236, 24, 49,118,236,216,194, 69, 11, +148,210, 79, 26,118,157, 78,167,228, 56, 14,219,183,111,231, 0, 92, 46,203,222,167,101, 68,104, 89,243,165,244, 45,163,172,172, +172,209, 45, 91,182,220, 7, 64, 66, 41,125,151,158,158,254, 19,165,180,112,107,168,156,156,156,209,173, 90,181,218, 71, 41,149, + 16, 66, 62, 59,175, 15,242, 67, 61, 52,177,176,176,120,154,175,100, 73,190,100, 66,124, 89, 89, 93,134, 91,145,213,163,237,224, + 80,100, 91, 29, 66,200,170,102,205,154, 21,221, 84, 58, 20, 64,147,138, 38,138, 82,122,141, 16, 82,103,209,162, 69, 51,164, 82, +169,151, 66,161,168, 1, 0,198,198,198, 97,106,181,250,150, 82,169, 92,159,223,110,149,101, 67, 99,100,100, 20,198, 48, 76, 93, + 27, 27,155,188, 21,181,249,100, 11, 0,254,122,202, 62,165,148,105, 90,209,180, 93,188,120,177,178,133,133,197,119,132,144,254, +148,210, 90,217,217,217,234, 69,139, 22, 5,156, 56,113, 34,179, 74,149, 42,221,188,189,189,137,165,165, 37,158, 60,121, 66, 83, + 83, 83, 79, 2,152,175,207, 74,107,142,227,162, 86,175, 94,141,138, 62,239,101,157,215,106,181, 31, 47, 94,188,104,221, 53, 41, + 73,192,113, 28,122,246,236,249, 9,129, 43,142, 55,111,222, 64,173, 86,151, 25,204, 81,157,153,142, 14, 51,230, 2,249,171, 63, + 11,144,167,100, 81, 80,141,129, 87, 25,240,191, 5,242,143, 44,127,174,160,180,232,232,232, 56, 72,106, 44,153,228, 90,195,161, +126,124,120,210,171,236, 76,197,193,132,132,132, 29,148, 82,246, 75,109, 86, 36, 96,169, 65,254,253,231,108,254, 29, 71,139, 5, +165, 44, 40, 71, 65, 41, 7,142, 99,243, 54,188,166, 28, 40,203, 18, 66,112, 79,173,200, 28,171,111, 58, 9, 33, 22,214,214,214, +203, 40,165, 93,249,124, 62,175,168, 24, 86,244,115,190,146,117, 57, 57, 57,249,151,226,202,235,127, 98,126,254,249,231,159, 37, +146,127,125, 87, 29,246,239,223,159,173,224,179,121,203,216,216,184,196,192,156,185,185,185,209,241,241,241,223,253, 59,228,103, +129, 26, 74,245,104,208,138,185,224, 43,188,234,176, 60,155,149, 43, 87,150,104,181,218, 70, 0,220, 9, 33,230, 0,210,180, 90, +237,149,228,228,228, 68, 66, 72, 19, 0,139,242,127,182,156, 82,250,244, 95,249,188, 19, 66,100,214,214,214,123,120, 60,158,179, + 62,191,103, 24, 70,147,150,150, 54,162,232,128,160,168, 77,107,107,235,167, 2,129,192, 89, 15, 59,177, 41, 41, 41, 77, 12,237, +167,193,230,127, 13,153, 42, 54, 9,190,232,241,191,197,106,143,248,248,248, 99, 0,142,125, 75,155,165, 69,126, 55,224,255, 23, +185,105, 9,255, 72, 57,228,147,166,201,255,107,249, 89, 64,148, 74,248,254, 25, 0,242, 15, 60,155, 94,255, 9,249, 66,191,112, +196,152, 79,164,218,126,203,180, 68, 70, 70,170, 1, 4,228,191,138,255,223, 83, 0, 61,255,141,242, 77, 9, 96,208,183,178, 87, + 22,121, 50,192,128,255, 85, 24,150,213, 26, 96,128, 1, 6, 24, 96,128, 1, 6,124, 29, 46, 20,219,130,231, 66,193, 7, 2,160, + 83, 41, 35, 29,189, 37, 65, 66, 72,167, 47, 24, 73, 93, 55,216, 52,216, 52,216, 52,216, 52,216, 52,216, 52,216,252,223,178,249, + 63,135,130,192,145,255,196, 11, 64, 39,131, 77,131, 77,131, 77,131, 77,131, 77,131, 77,131, 77,131,205,255,230, 23,128,113,165, + 29,243, 12, 84,211, 0, 3, 12, 48,192, 0, 3, 12, 48,224,159,129,222, 68, 75,110,239,225, 97, 83,185,193, 62,203, 74,245,131, + 44, 43,213, 15,178,169,220, 96,159,220,222,195,227,127, 49,211, 8, 33, 50, 66,200, 80,161, 80,120,205,193,193, 33,139, 16, 50, +227,191,244, 62, 77, 9, 33,253, 9, 33,203, 8, 33,125, 8, 33, 70,223,210,126,123, 66, 4,131, 9,153, 52,130,144,232, 17,132, + 68, 15, 38,100, 82,123, 66,254,235,230, 13, 46,157,230,216,242,238,229, 97,151,150, 78,115,108, 89,226,249,217,142, 86,143,174, + 13,220,232, 59,217,201,242, 27,149,155,137,157,157,221, 78,123,123,251, 72, 59, 59,187, 40, 59, 59,187, 61,132, 16, 51, 67,115, +103,128, 1, 6, 24,240,143,225, 2, 33,100, 92,193, 11, 69,230,104, 9, 0,224,194,133, 11,158, 0,110, 3,104,239,237,237,237, + 95,252,215,150,174,245,198,122,212,170, 57,103,197,146,249,196,222,214,218,136, 97, 57,109, 68,100, 76,237,197, 43,252,254,180, +116,173,183, 46, 45, 42,120,247, 23,116, 6,132,207,231, 15,146, 72, 36, 61, 0, 20, 16,182, 80,181, 90,125,158,101,217, 99,250, +174, 34,178,183,183,191,195,231,243, 43, 87,228,191, 89,150,141,254,248,241, 99,155, 47,236,196, 6,184,184,184,236,241,244,244, + 52,106,214,172, 25,196, 98, 49, 22, 45, 90, 52, 11,192,122,125,109, 88, 90,186,153,104, 37,210,233, 2,177,184, 51,213,105,234, + 82, 80,128, 39, 9,225, 24,245, 13,145, 90,189, 46, 45,237,125,182,158,105,153, 15, 96, 36,242,150,163,239,166,148,174,254,154, + 90, 50,178, 17,209,233,216,188, 58, 33, 18,128, 53, 51, 51,187,189, 96,193, 2, 65,143, 30, 61,176,123,247,238, 54, 59,119,238, + 28, 71, 8,185, 1,224, 47, 74,233,251,175,173,149,118,192,248, 86,109,218,108, 28, 49,107, 22, 95,121,231, 14, 54,238,217,179, + 1, 89, 89, 0,176,181,162,117, 73, 36, 66,127,107,107, 97, 15, 74,209,136, 0,132, 0, 47,146, 83,185,139, 90, 45,123,140, 86, +116,127,159, 79,109, 15,197,167,203,241, 15, 87,212, 70,230,123,186, 80,210,211,163,109,230,251, 91, 11, 1,116, 43,126,158, 81, + 73, 71, 80,126,165, 30, 74,250, 60, 6,192,218,175, 36, 89, 70, 54, 54, 54, 65,103,207,158,117,110,214,172,153, 0, 0,158, 62, +125,250, 67,143, 30, 61, 58, 16, 66,234, 82, 74,179,254, 69,164, 93, 42,224,241, 38,137,133,194,206, 44,203,214, 3, 0, 62,159, + 31,172,209,233,174, 49, 28,183, 85,223,152,108, 6, 24, 96,192,127, 49, 83, 41,135,139,252, 59, 67,159,200,240,183,189,189,189, +201,133, 11, 23, 40,138, 45, 17,151,219,213,170, 93,167,142,199,172,203,167,247, 87,202, 72,203, 80,109, 94,179,255, 89,174, 64, +172,112,175,237, 46,218,188,126,181,197,164,105, 51,167,203,237,106, 61,202, 73,124,253,170, 2,141,174,139, 76, 38, 59,181,102, +205,154,186, 94, 94, 94, 66, 91, 91, 91, 36, 38, 38, 34, 52, 52,180,238,205,155, 55,123,239,223,191,127, 22, 33,164, 47,165, 52, + 90, 15,115,238, 55, 14,236,177, 53,182,180, 2,171,211,193,177,126,163,194, 64,123,239,110, 94, 5,163,213,130,211,233,224,209, +163, 55, 0,128,227, 56,212,174, 93,155,255, 37, 25, 73, 8,113,172, 83,167,206,193, 85,171, 86,137,212,106, 53, 30, 61,122,132, + 91,183,110,113, 9, 9, 9,126,250,218,144,219,213,240,226,201,140,143, 13, 26,246,163,217,247, 61,170, 10, 93,236,108, 0, 24, +225, 77, 4,211,234,210,213,155, 77, 79, 31,219, 59, 81,110, 87, 99, 80, 78, 98,216,173,178,201,154,101, 11, 66,200,202,130, 8, +209,132,144,223,170, 84,169,242, 75,209,107,138,239,155, 71, 41,133, 64, 32, 72,204,206,206, 30,148,146,146,242,188,184, 77, 29, + 11,193,225,195,121, 60, 98,225,164,161,252,123,247,238, 25,215,174, 93, 91, 13, 0,171, 87,175,198,178,101,203,196, 87,174, 92, +233,126,224,192,129,238,132,144, 13,148,210,191,190,166, 98,138,128,159, 71,204,154,197,151, 71, 70, 66, 30, 24,136, 97, 89, 89, +130, 95,129,159, 43, 66,180, 8, 33, 85,237,237,133,127,206,154, 57,202,163,154, 91, 11,145, 72,100,157,183,137,183, 38,165, 70, +116,244,243,254,126,191,238,244, 33,132,244,163,148,190,211,211,158, 0,192, 82, 0, 82, 0, 11, 1, 44, 74, 78, 78,118,103, 89, + 22,246,246,246,139, 8, 33,103, 0,172,176,177,177,161,201,201,201,115, 41,165, 76, 89, 74, 86,214,123,186,240, 35,169,214,181, +102,227, 17,248, 72, 46,119,157,217,205,225,146,169, 27, 89,177,120, 99,252, 3, 0,232,230,230,102, 82,173,150,241, 92,185,105, + 61,203,172,184,235,115,187,185,185,237,186,244, 94, 63,162, 93,156,108, 2,128,163,163,227,234, 3, 7, 14, 84,106,222,188,121, + 97, 29,111,216,176, 33,127,245,234,213, 78, 51,102,204,216, 0, 96,148,158,246,106,216,216,216, 92, 97, 89, 86,157,154,154, 90, +163,224,123,219, 6,125, 91, 89,153, 24,119, 76, 78,207,190,147,242,242,140,191,158,182,154, 73, 69,162,147,127, 29,220,232,208, +176,121, 75,158,220,218, 22,170,184,120,228,232,180,157,110,221,127,216,126,220,164,159,167,229,151,209, 99, 67, 87, 99,128, 1, +255,211, 40,149,139,252, 39, 67, 80,132, 73,150,168, 32, 73, 36, 98,159,197, 11,230,146,140,212, 12,165, 42, 43, 91,163, 83,169, + 84, 60, 17, 85, 5,191,250,144,196, 19,240, 51,102, 76,155,106,226, 51,111,129, 15,128, 97,250,146,172, 6, 13, 26, 60, 62,117, +234,148,173,165,165, 37, 50, 51, 51,145,154,154,138,199,143, 31,131, 82,138,190,125,251, 74,154, 55,109,218,104,225,162, 69, 15, + 8, 33, 45,245, 33, 91,198,150,214, 88,221, 38,111, 47,218, 95, 34, 83, 11,254, 7, 59, 7,244, 40,188,102, 89,108, 38, 0, 64, + 42,149, 22,110, 72,252, 5,104,217,177, 99, 71, 17, 0,140, 25, 51, 38, 43, 59, 59,219, 23,192, 97, 74,169, 94, 59,173,202,237, +106,120, 89, 59, 56,158,255,125,251,106, 89, 61, 55,119,104,117, 12,162, 62,198, 67, 32, 52,135,179,179, 8,163,134,117, 22,182, +107,101,105,189,114,249,206, 11,198, 54, 53,250,228, 38,135, 93, 41,205,150,185,185,249,254, 99,199,142,225,248,241,227, 0,128, +176,176, 48,184,187,187, 27,151,151,134,144,144,144,106,189,122,245, 58, 10,160,122,121,215, 22, 15,140, 47,145, 72,208,166, 77, + 27,212,174, 93, 27,103,207,158,109, 15,224,175,175,173,128,202, 59,119, 32, 15, 12, 4,252, 43, 62,120, 33,132, 84,109,220,216, +245,225,197, 11, 7,173, 47, 92, 12,197,218,181,123,240,254,125,158,208, 86,173, 90, 53, 12, 29, 50, 64, 24, 28, 28, 80,167,127, +255,161, 1,132,144, 54,148,210, 48, 61,204, 46,221,181,107,215,252, 42, 85,170,160,127,255,254, 3,234,212,169, 99,111,106,106, +138, 29, 59,118,192,193,193,161,154, 70,163,121,119,246,236, 89,199,143, 31, 63, 98,234,212,169, 0, 48,171, 52, 67,237,187,180, + 95, 40,233,233,209,182,102,227, 17,144,155, 58, 96,215,145, 99,120,243,108,127, 91,181, 54,116,161,239,100,167,225, 74, 42, 25, +233,236,110,226, 83,185,137,167, 85,245, 58,189,224,218,248,185,181,138,189,251, 97,209,164,106,126, 2,169,106,255,226, 53,241, +169,159,221,243,128, 63,249,117,179, 94, 91,134, 92, 67, 42,165,139,185,124,130, 85,216, 32,177, 20,189,218,181,107, 87, 88,112, +145,145,145, 80,171,213,240,240,240,224,105, 52, 26, 47, 61,243,181,198,119,223,125,119,239,226,197,139, 86, 53,106,212,248,100, + 75, 24,123, 43,243, 46,254,167, 54, 76, 93,185,241, 80, 45,219,218,125, 50,146, 94,157, 14, 46,143,100,181,110,209,248,250,165, + 83, 7,229, 36, 39, 6, 98,243, 20,128, 75, 69,248,209, 63, 64,140, 44, 49,104,194, 76,129, 87,199, 14, 78,157,187,245,187, 78, + 8,233, 72, 41,125, 98,232,107, 12, 48,224,127, 90,213,162,255,109,247, 84, 72,180,138,176,200, 79,192, 81,174,190,157,173,149, +108,195,154,125, 79,248, 90,141,198,216,220, 76, 35, 52, 51,229,136,137, 25, 95,171,209,229,184, 86,115, 21,115,148,171, 95,138, +148,118,189,248,168, 91, 38,147,157,250,235,175,191,108,133, 66, 33, 56,142,131,141,141, 13, 34, 34, 34,144,145,145,129,236,236, +108,188, 15, 13, 69, 21,151, 74, 88,226, 51,215, 97,234, 92,159, 83,132,144, 38, 69,221,136, 37, 45, 27,101,117,218,226,141,123, +105,155, 8,127,242, 94,150,205, 82, 16, 17, 29, 29, 13,185, 92,142,186,117,235,202,239,223,191,127,183, 52,146, 85,220,166,165, +165,155,137, 64, 46, 59,190,237,247, 69, 50,173, 46, 4,175,194,211, 80,179, 74, 91,216, 89,185, 32, 62, 77,131,135,143,255, 66, + 72,208, 97,184, 57,185, 96,242,132, 14, 82,191,213,127, 30,179,176,168,234,146,158,254, 33,171, 36,155, 89, 89, 89,242,170, 85, +171,194,197, 37,111,223, 51,150,101,241,234,213, 43,176, 44, 91,120, 92,244,125,223,201,155, 96,178,162, 48,226,135, 31,144,154, +154, 42, 47,201,166,144, 15,102,230,184,161, 2,153, 16, 16, 27, 91,106,114,114,114, 10,213, 65,173, 86,139, 23, 47, 94,160,101, +203,150,158, 39, 78,156,240, 47, 71, 66,213, 43, 63,181,192,111, 27,247,238,221, 52, 44, 51,147, 7, 0,187, 9,225,180,148,254, +166,111, 93,178,181, 21,158,188,124,233,128, 53,159,247, 26,150,102,191,226,241,227, 40,104,181,121,233, 77, 77, 77,194,148, 73, + 89, 16, 9, 77,112,246,236, 33, 43, 15,143, 54, 39,243, 93,103, 92, 57,233,148, 94,186,116, 9, 83,166, 76,193,171, 87,175, 28, +249,124, 62, 30, 61,122, 4,153, 76,134, 53,107,214,240, 61, 60, 60, 28,141,141,141,113,249,242,101, 36, 38, 38,146,178,210,121, +251,202,237, 21,153,239,111, 45,252, 72, 46,119,221,117,228, 24,126, 28, 50, 8,246, 52,252,174,153, 27, 89,241, 93,207,214,191, + 80,126,165, 30,198, 38,245, 45,220,235,246,132, 72, 44,199,228,159,151, 33, 44,228,156,133, 34, 59,104, 18, 97, 99, 42, 33,127, +239,191, 79, 54, 85, 62,209,159,221,116, 36,160,241, 53,151, 39,174,142,141,199, 63, 2, 16,244, 55,209,170, 38, 32, 60,214,172, + 64,189,124,247,238, 29,222,191,127, 15,129, 64, 0,165, 82, 9,134, 97, 74, 76,167,147,147,211,120,134, 97,126,201, 47,231,125, + 14, 14, 14,163, 15, 30, 60,104, 85,148,104, 23, 40, 89,105, 25, 89,233, 1, 79, 94,190,153, 57,190,127,251, 59, 15, 67, 98,204, + 27,244,142,206, 8, 60,147, 89, 74, 25, 73,101, 98,241,201,203,167, 15,201,117, 31,110,194,216,163, 61,132,114,119,176,186, 56, + 40,210,115,145,253, 62, 1,234,223,183,160,225,164, 25, 56,119,230, 79,121,157,122, 77, 78, 16, 66,220, 41,165,154, 47,120, 54, + 43, 34,241, 27,108, 26,108, 26,108,254, 27,218, 44,139,139, 0,104, 12,192, 46,255,115, 42,242,166,204, 88, 3, 72, 65,222,118, + 96,118, 0, 52, 0,196, 69,126, 83,252,184,232,181,197,143,139,126, 78,205,255,108,155,255,254, 4, 64, 90, 57,131, 74, 7, 0, +222,200,155,155,229,157,159, 71,250, 69,134, 39,132,151,197,178,156, 68,100, 99,171, 26, 51,176, 99,189,171,215,159,190, 48,178, + 54, 21,116,105,223,200,243,113,240,135, 7,132, 71,116,132,240,244,154,247,193,231,243, 7,109,216,176,161,158,169,169, 41, 56, +142,131,153,153, 25,146,147,147,161,209,104,144,153,153, 9,117,118, 22,180,217, 89, 8,140,137, 68,107,207,246,232,215,245, 59, +143, 67,103,254, 26, 4,224,104, 89,118, 29,235, 55, 42, 84,178,150, 85,182,250, 91,154,136,201, 40, 36, 93,191, 54,114,135, 72, + 46, 71,231,153, 62, 95, 83,177,158,139,197,226, 75,125,251,246,237, 54,123,246,108, 94, 66, 66,194,101, 66, 72,107, 74,105,185, +110, 83,173, 68, 58,125,226,244, 30, 22, 22,114,138, 19,215,254, 66,187, 70, 67, 96, 36,230, 35, 53, 75, 11, 66,128,208,151,167, + 64,136, 37,130,194, 18,208,182,161, 41,190,235,226, 33, 63,243,103,232,108,252, 61, 63,232,179,162, 73, 79, 79, 71, 82, 82, 18, +116, 58, 29,116, 58, 29,250, 15, 24,128, 3,251,247, 35, 55, 55, 23, 74,165, 18, 26,141, 6, 44,203,130,199,227,225,218,249, 19, +136,249, 16,138, 86, 45, 91,162, 52, 73,118,223,115, 42, 36,132, 60,124,243,230, 13, 66, 67, 67, 17, 27, 27, 11,169, 84, 10,123, +123,123, 44, 91,182, 12,106,117,222, 30,101, 3, 6, 12,240, 4, 16,252,181, 15,212,123, 96,103, 4,203, 46,236,118,250,180,237, +253,211,167,185,135,231,206,197, 74,178,179,119,232,243, 91,145, 8,253, 87,255, 54,161,166,177,177, 49, 98,163, 55,160, 86, 45, + 17,102,205,176,130,239,175, 41, 0,128,169, 83,156,209,180,137, 53,178, 50,254,132,181,237,124,108,218, 52,205,109,228,200,117, + 63, 0,216, 87,142,233,133,127,253,245, 87, 63,119,119,119,167,231,207,159, 19,177, 88, 12,153, 76, 6,153, 76, 6,169, 84,138, +164,164, 36, 68, 68, 68,208,213,171, 87,199, 33,207,181, 88, 42,242,221,131,221,102,118,115,184,244,230,217,254,182, 78,252, 15, +129,253, 38,183,137, 12,122,248, 60,251,234,181,251,203, 25,149, 52, 38, 35,246,250,220,170, 77,159, 91, 79,154,179, 20, 91, 86, + 47,198,155, 71,119,210,236, 92,178,182,202,136,122, 95,243,206, 37,168,100,237,151, 10, 38, 45, 26,200,140, 31,217,207,252,156, + 93,192,248,139, 2,146,252, 49,229,217, 26, 68, 60, 87, 74,170, 55, 26, 94,163, 26, 79,115,243,230, 77, 89,187,118,237,160, 82, +169, 10,149,201,131, 7, 15,114, 12,195,148,232,142,214,106,181,191,196,197,197, 57, 40,149, 74,116,237,218,117,234,154, 53,107, +140, 11,246,168, 99, 89,246, 19, 37,107,197,250, 3, 87,166,255,178,245,214,149,163,191, 58,174,240, 25,221,126,216,228,149,183, + 80,202, 62,146, 2, 30,111,210,185,211,123,236,165, 22, 58,200, 44,191,131, 42, 81,137, 55, 59,127,132, 34, 75,133,166, 43,150, + 2, 16, 67,163,227, 97, 71,207,254, 16, 90, 57, 98,241,216,209,142, 11,118,236,154, 0, 96,131, 97, 92,111,128, 1, 6, 20,131, + 29, 33,228, 60, 0,248,248,248,204,247,245,245,125, 73, 8, 57, 79, 41,237,145, 79,116,206, 83, 74,123, 20, 92,147,223,103,127, +118, 92,112,109,241,227,226,159,231,205,155, 87,199,207,207,111, 85,203,150, 45,143, 6, 4, 4,124, 40,143,104, 33,111,255,231, +157,197,183,226, 1,242, 87, 29,122,123,123,147,162,239,159, 40, 90, 28,119,231,221,135, 72,197,119,157,154, 59,159,247, 15,126, + 50,106,148,119,199, 65, 61,219,117,137,136, 78, 13,117,115,181,183,126,249, 50,216,148,227,184, 59,250,228,146, 68, 34,233,209, +161, 67, 7, 65,122,122, 58,140,140,140,144,156,156,140,184,184, 56,104,181, 90,168, 50, 51,160,206,204,128, 42, 35, 29,218,204, +116,188,127,250, 24,245,221,170, 73,242, 39,203,151, 71,128, 74, 84,170,138, 42, 91, 98, 19, 19, 72, 76, 76, 64, 42,232, 54, 36, +132,124,111, 97, 97,241,144, 16,178, 48,191, 83,154, 52,119,238,220, 20,142,227,176,114,229, 74, 83,185, 92,126,130, 16, 34, 41, +207,142,137, 13,191, 71,203,134,117,121,175, 35,130,208,166,193, 8,212,168,218, 29, 17,137, 74,164,100,107,145,148,161, 69,211, +118,155, 81,185,193, 82, 84,106,232,139,208,168, 52, 56, 58,185,243, 32,144,148,185,249,115, 76, 76,204, 39,199, 71,143, 28,129, + 66,161,128,155,155, 27,134, 12, 25,130,185,115,231, 98,200,144, 33,112,116,116,196,176,129,189,176,120,241, 98,124,252,248,177, +188,164,170,107,212,168,161,118,117,117, 85,187,186,186,170,181, 90, 45,114,114,114,144,145,145, 81, 60,191,167, 85,248, 41,177, +179,155,231,224,224, 16,100,103,103,247, 82, 42,149, 94,124, 65,200,107,149,171,171, 93,235,222,189, 73,237,129, 3,249, 81, 50, + 25,241, 7,228,250,216,178,182, 20,122,123,117,232, 38,206, 72,223, 3, 32, 79,164, 26, 61,202, 6,247,252,235,224,254,221, 38, +152, 50,201, 13,132, 39, 5,225,137,161,200,189,137,230,205, 90,138,204,205, 73,143,114,202,122, 40,128, 23,173, 91,183,118,156, + 60,121, 50,145, 72, 36,152, 58,117,170,118,236,216,177,111,135, 12, 25,242,246,198,141, 27,172,171,171, 43, 42, 85,170, 68, 42, + 85,170,228, 0,224, 69,254,111,202,132,169, 27, 89,161,214,134,222, 53,119, 55,254,192,194,186, 85,142, 78,210,127,241,154,248, +212,229, 91,195,215, 70,188, 81, 84,123,243,232, 78,234,219,144,115, 92,196,147,219, 41,241,111,179,171, 45,223, 26,190,118,222, +150,184, 18, 31,106,127,127,112,167,206,251,107, 21,185, 10, 65,239,158, 94,138,241, 99, 6,213,176,148,215, 57, 8,167,239, 26, + 84,118,113, 30,182,120,213, 38,237,216, 9,211,181,187,255,216, 67,179,179,179,145,149,149,133, 77,155, 54, 49,231,206,157,139, + 99, 89,118,122,105, 99, 32, 0,208,233,116, 24, 63,126,188,177,169,169, 41, 98, 98, 98, 10, 21, 81, 0, 72, 72, 78, 13,190,255, + 36,228,245,204,159, 6,120,230,170,213,234, 43,183,159,134,214,118,119,117, 38,132,150,186, 16, 69, 44, 20,118,110,210,188, 57, +159,210, 12, 16,129, 11,222,239, 95,141,172,143,105,200, 74, 74, 3, 95,104, 12, 6, 18,232, 56, 49,204,235, 55, 67,216,147,231, +112,178,177, 19, 72,132, 66,195,214, 89, 6, 24,240, 63,138,178,184, 72, 81,178,228,231,231,183,170,172,243, 69,222, 53,197,142, + 11,137, 84,113, 18, 86,244, 51, 0,248,249,249,173,162,148,246, 8, 8, 8, 56, 2, 64,169, 39, 95, 24, 87,240, 94, 52, 74,124, +185,172,131,175,210,248,206,158,187, 16, 22,102, 50,179,102,141,220,237,207, 94,246,127,122, 39,224,105,104,229, 74,214, 54, 84, +167,177,248,109,221, 22,103,162, 80,234, 59, 25,220,195,218,218, 26, 90,173, 22,239,222,189, 67,108,108, 44,180, 90, 45,152,220, + 92,168, 51, 50,160, 74, 79, 7,155,155, 13, 17,203, 66,153,156, 4, 43, 35, 41,240,247,138,196,242,110,176, 68,162, 85,240, 46, + 53, 53,133,196,196, 20, 60,161,176, 68,183, 98, 41, 54, 27, 55,107,214,236,120, 72, 72, 72,243, 78,157, 58, 45, 39,132,152, 81, + 74,163,226,226,226, 58, 46, 90,180, 72,109,103,103,135,241,227,199,215, 4, 48,162, 92,146, 41,214,120,184,218,215, 68,141,106, + 35, 80,185, 82, 7,100,228,234,144,156,165, 67, 82,134, 22, 59, 54,183,196,201,221,205,112,239,100, 91,132, 92,233,140, 12,157, + 61,228,142,223,131,178,154, 58,101,217,188,118,237, 26,150, 45, 91,134,229,203,151, 99,229,202,149, 88,190,124, 57,226,226,226, + 80,183,110, 93, 68, 71, 71,227,210,165, 75, 72, 72, 72,128,181,181, 53, 30, 63,126,140,245,235,215,227,222,189,123,250, 40,119, +122, 93, 67, 8,169,144, 47,157, 97,152,145, 9,189,123,215, 75,180,180,172,221,168, 81,163,110, 83,167, 78,173,214,186,117,235, +194,243,213,170, 85,115,145,201,100, 31, 9, 33,187, 9, 33, 13,203,178,197, 1,141,108,108,234, 66,163,126,157, 95, 86, 66, 16, + 34, 69,135,206,161,104,221,246, 41,180, 58, 17,120, 68, 2, 30, 79, 10,134, 73,133,133,133, 35, 40, 37,117,203, 73,226,162,228, +228,100,247,235,215,175,243, 34, 34, 34, 32,149, 74, 1, 32,114,201,146, 37, 91,214,174, 93,251,202,202,202,138, 61,127,254, 60, +206,156, 57,131, 30, 61,122,240,199,142, 29,235, 94,169, 82,165,237,229,221,247,226,141,241, 15, 14,175,187, 52, 88,168,179,104, + 40,149, 85,174,130, 92,249,247,147,218,219, 24, 3,192,165,247,239,179,109, 93,178,252,114,179,131,162,205,157,115,126, 45,111, + 34, 60,165,139,185,103,111, 95, 63, 60,124,250,114,102, 82, 98,186,176, 81,189, 58, 74,223,101,115, 68,149,171, 84,255,109,241, +220,159,236,227,178,164, 25,157,167, 94,122,125,234,242,227,156,225,163,126,100,198,140,155,172,186,116,249,218,105,142,227,234, +149,182,226,144,227, 56, 36, 36, 36,224,229,203,151, 8, 15, 15, 71,114,114, 50, 82, 82, 82,144,157,157, 93,232,110, 52,202,206, +186,176,101,239,185, 64, 99,153,204,168,121, 61,119,151, 71,207, 95, 37, 25,203,100, 70,238, 85, 92,106, 16,178,180,196,118,132, +101,217,122, 82, 35, 25, 0,130,140,144, 59,200, 73,207, 65, 78, 70, 14,178,211,114,160,214,242,161, 82,243,160,212,240,224,234, +249, 29,114,114, 85,200, 73,205, 4,199,178, 13, 12,221,141, 1, 6, 24, 80, 70,191,124,222,199,199,103,190,158,151,235,237,222, + 44, 78,188,124,124,124,230, 19, 66,206,207,155, 55,175, 14,244,152,211, 76, 41,221, 89,252, 85,112,174,220,240, 14, 41, 41, 97, + 57,166, 54,181,251,206,248,249,151, 75, 71,254,216,108,171, 86, 43,162,173, 44,228,172,220, 72,108, 61,102,252, 74,100,231,164, +247,201, 73,211,127,149, 84,122,122, 58, 62,124,248, 0,153, 76, 6,145, 80, 8, 86,169, 4,171,204,133, 50, 61, 21, 60,173, 26, + 34,150,133,165,145, 12,174,142,246,168,108,103,175,151,205,119, 55,175, 22, 78,124, 47,234, 46, 92,221,204, 3, 98, 99, 57,196, + 38,114, 76, 60,127, 27, 0, 32, 18,137,128, 69,203,245, 41, 76,107, 39, 39,167,191, 14, 31, 62, 44, 74, 78, 78,198,139, 23, 47, + 2, 41,165,153,132, 16, 19, 0, 92,104,104,232,245,144,144,144, 30,238,238,238, 0,224, 86,158,189,172, 20, 30,171, 99, 40, 98, + 62, 70, 34, 34,246, 57, 44,205,170, 66,104, 84, 3, 73, 25, 90, 72,100, 85,161, 83,255,237,125, 84,101, 69, 65,169,213,111, 97, +164, 70,163, 1,195, 48, 96, 24, 6, 26,141, 6,227,198,141,195,253,128, 0, 28, 61,115, 3, 31,222,135,161,102, 21,123,252,240, +195,112, 52,107,214, 12, 1, 1, 1,101,218, 26,217,136,232, 22,180,131, 96, 93, 55, 30,196,114, 43,117,139,185, 87, 30,233, 67, +182, 40,165, 68,143,252, 92,219,163, 71,143,234, 97,185,185,120,249,250, 53, 58, 45, 89, 2, 0,184,120,241,226, 39,247, 50,115, +230, 76,241,171, 87,175,198, 60,125,250,116, 12, 33,100, 29,165,180,228,201,230, 20,184,112,225, 1,126,250,233, 21,146,147,243, +230,107, 31, 59,242, 55, 47,141,248,160, 69, 87,239, 60,143,150,185,185, 57,214,173,171,171, 87,126,178, 44,139,157, 59,119, 22, +186, 11, 1, 64, 32, 16,180,158, 57,115,102,223,146,174,175, 94,189,186,168, 60,155, 51, 7, 56, 75, 95, 68,201, 38,153, 85,175, + 92,199,212,186, 62, 82,117,207,235, 62,143, 75,152, 50,115,128,243,134,117, 39, 98, 85, 50,162,222, 71,216,152, 74, 2,169,106, +191, 62,105,124,127,105,147,198,188,242,168,253, 31,147,179, 22, 76,254,113,168,149,169,185,109,238,238, 45,190, 22, 60, 62,143, +254,245, 84,155, 81,167,154,149,249,247, 45, 54,230,252, 52, 99,209,115, 13, 19, 51, 25, 49,127,133,149, 21,226,130,101, 89,196, +199,199, 35, 57, 57, 25,209,209,209, 72, 73, 73,201,127,246, 83, 62, 91,185, 90,193, 6, 17,202,232,104, 68,157,222,141,202,195, +135,163,233,242,101, 96, 57, 1,148, 10, 22,235, 90,117, 68,122,166, 18,106,142,192,177,113, 43,252,120,241, 46,120,148, 5,118, +108, 53,244, 36, 6, 24,240, 63, 10,125,194, 59, 20, 16, 34, 95, 95,223, 30,223,250,255,139,146, 45, 95, 95,223,151,190,190,190, +122,255, 87,113,151, 97,209,227,114,195, 59, 0, 64, 86,242,171,112, 43,215,250,241,185,202, 92, 35, 59, 91, 27,181,145, 84,194, +101,102,101,243,159, 7, 7,106,115, 18,222,189,169,192,125,132,134,132,132,212,141,143,143, 71,116, 84, 20, 24,101, 46,120,106, + 13,168, 74,129, 78,109, 90, 65, 10, 64,202, 35, 16,113, 90, 8,248, 98,100,231,100, 1, 64,104,185,157,163, 78,247,153,178, 69, + 8,129,216,196, 4, 98, 99, 99,136,229, 38,159, 40, 92,250, 40, 54, 18,137,228,240,137, 19, 39, 28,156,156,156,176,108,217, 50, + 56, 59, 59,215,170, 87,175,158,162,109,219,182, 50, 59, 59, 59,212,174, 93, 27,173, 90,181,194,165, 75,151, 0,160,220,152, 82, + 58, 70, 26,244, 38, 18,173, 83,210, 2,112,247,246,239,208, 40,213,104,228,249, 59,180,130,202,176,169,179, 20,220,187,131, 80, +124, 60,155,167, 30,216,247, 68,108,116, 36, 8, 95,252, 82, 95,229,169,224,115, 96, 96, 32,142,156,245,135,131,171, 7,162,223, +190,198,235, 91,215,113,223,198, 10,174, 30,181, 11,221, 64,165,166,145,133, 96,197,214,194,240, 14,146,180,180, 52,137,165,165, +165,186, 32,239, 28, 28, 28,190,134,108, 13,157, 61,123, 54, 50,132, 66,192,219, 27,162,240,112,104,181, 90,180,104,209, 2, 77, +155, 54, 5, 0,180,104,209, 2, 2,129, 0,245,235,215,135,163,163, 35,182,110,221, 58, 20,165,172,234,227, 17,188, 96,152,212, + 90,213,170, 85, 43, 36, 90,251, 15, 36,227,249,211,206, 32, 16, 99,211,150,191,163, 57,184,184,184,224, 99, 66, 56, 8,161, 33, +229,164,113,185,189,189,253, 34, 7, 7,135,106,107,215,174,229, 75,165, 82, 76,152, 48,161,106, 78, 78, 78,229,124, 41, 25,243, +230,205,203, 83,169, 22, 47,198,146, 37, 75,160, 86,171, 21,165, 25, 59,176,190,190, 99, 82, 26, 55,198,206,222,169,143,151,117, +229,122, 29,186,116, 66, 85,247, 14,232,208, 37, 26, 0, 86, 89, 10, 34, 7,174, 94, 88,247,180,117, 37,203, 61, 87, 47, 95, 91, +220,198,179,195, 2,159,241, 22, 43,252,118,164,151, 59,231, 49, 51,106, 95,246, 27,241,160,245,155,183, 31, 88,255,203,188,105, +210,232,100, 77,122, 92, 58,205,145, 75, 4,114, 55, 59, 34,159,242,243,242, 15,241,241,225,179, 16,115,185,220,149,150, 28,199, + 33, 60, 60,188,112, 78,159, 74,165, 66,110,110, 46, 98, 98, 98, 10,235,140,210,216,180,235,228, 81, 61, 27,228, 42,149,138, 71, +193,111,163, 23, 78, 29,214, 50, 87,169, 84,188,141,136, 14,163,116, 99,137,108,140,199,227, 5, 43,178, 21,157, 20, 25, 42, 36, +191,120, 3,231,142,174,208, 49, 4, 26,134, 69,114,106, 54,212, 12,192,242,132,168, 51,240, 7,176, 68,128,148,248, 56,240,248, +252, 64, 67,119, 99,128, 1,255,179, 40, 55,188, 3, 33,228,124,203,150, 45,143, 22, 85,157, 10, 62, 3, 80, 3, 40,107, 42, 79, +114, 81, 50, 85,224, 78, 44,237,127,138,217,213,119,128,249,217, 28,173,114,195, 59,228,255,144, 52,168,231,234,184,122,241, 48, +103,142, 97,106, 38,165, 36, 50, 2,129, 68, 88,201, 76,153, 80,145, 28, 84,171,213,231,175, 95,191,222,187,115,231,206,146,183, +193,129,208,100,102, 66,147,153, 1, 33,199,192, 82,214, 4, 60,173, 26, 68,163,129, 83, 45, 14,170,108, 25,252,239,135,232,212, +106,245,121,125,137, 22,143,207,255,116, 94,150, 92, 14,137,137, 41, 36,114,121,113,215, 34, 41, 39,163,140,122,245,234,213,177, + 69,139, 22,160,148, 98,231,206,157,208,106,181, 98,173, 86, 11,141, 70, 3,173, 86,139,172,172, 44, 28, 56,112, 0,219,182,109, +187, 15, 96,111,185,157, 25,163,185,126,229,218,205,102,163,135,245, 16, 94, 60,191, 14,140,134,133,146, 56, 35, 55, 87,135, 28, +141, 17, 88,171,225, 64,226, 5,240, 5, 82,180,172, 95, 21,103,255, 60,165, 5,163,190,161, 39, 11,255, 68, 21,138,137,142, 68, +236,251, 48,200,179, 62,194,198,212, 8,138,240, 48, 52,250, 97,196, 23,169, 19,149, 42, 85, 2,199,113,240,242,242, 42,156, 92, +253,165,100, 43, 53, 53, 21,231,206,157, 67,139, 22, 45,224,233,233,137,184,184, 56,132,135,135,163,123,247,238,133,215, 4, 6, + 6,226,249,243,231,112,115, 43, 91, 36, 76, 73,211, 93,140,141,121, 49,224,251,239,191, 23, 61,124,248, 16,148, 82,184,187,155, +194,212,196, 24,132, 39,129,135,135, 45,128,188, 49, 64,251,246,237,145,149, 21,206,164,167,211,139,229,228,227, 97, 66,200, 25, +141, 70,243,174, 93,187,118,142,239,223,191,199,140, 25, 51, 4,199,142, 29, 43,144,146,225,227,243,233, 98, 10,165,178,116,215, +125,205,122,181,230, 84,101, 44, 60,165,178,202, 85, 76,173,235,163,170,123, 7, 0, 64,231, 30,163, 81,181,186, 11,178, 82,130, +170,168,148,145,125, 68,130,116,139,160, 77,113,175,100,222,117, 71,169,146,110,191, 5,160, 79, 0, 96,170,124,123, 44, 49, 90, + 56,252,248,153,191, 46,141,239,222,163,151, 80,199, 50, 76, 93, 87,161,249,137,211, 23,146,226,162,162, 55, 34,250,114,200,223, +250, 95,153, 42, 30,155,149,149, 5, 99, 99, 99,132,132,132,168,189,189,189, 37, 60, 30, 15,239,222,189, 43, 36, 90,182,214,150, +181, 91, 55,173, 91,107,197,250, 3, 87,140, 37, 18, 73,151,246, 77, 60, 94,189,141,138,165,148, 68,150,170,182,234,116,215,130, + 95, 4,122,217, 56, 86,231,135,223,126, 8,171,182,221,161, 86,243,160,212,112, 80, 51, 0,195, 23,193,161, 97,115,152,187,121, +128, 2,120,242,240,190, 78,173,211, 93, 49,244, 53, 6, 24,240, 63,173,106,209,178, 72, 82,254,231, 52, 0,145,190,190,190, 41, + 69,212,166,100, 0,129, 0, 26,228, 95,151, 92,236,119,201,200, 91, 61,216,180,136,157,228, 34,132,171,232,103, 77,177,107,244, + 26, 0, 22,157,163, 85, 34,209, 42, 99, 73, 37,172,173,173,109, 27, 53,106,226,182,235,143,227,160,148,226,205,243, 53, 72, 79, +122,141, 69,171, 30,184, 57, 59, 59,123,198,198,198,250,235,147, 8,150,101,143,237,217,179,103, 86,243,198,141, 26, 85,113,118, + 70, 96,100, 4, 68,148,133,136,101,193,211,170, 33, 96, 53,112,174,203,130, 71,228,136,143,207,132,223,225,227, 33, 44,203, 30, + 43,207,110,173,238,189,176, 44, 54, 19,132, 16,172,109, 89, 23, 98, 19, 57, 68,198,114, 76,252,235,102, 33,185, 58,191,108, 30, +196,114, 57,220,154,151, 31, 16,158, 82,170, 48, 49, 49,121, 26, 28, 28,220,180,110,221,186,152, 53,107, 22, 34, 35, 35,193,113, + 28, 18, 19, 19, 85, 9, 9, 9,113,201,201,201,145, 0, 78, 3,216,165, 79,228,113,145, 90,181,225,252,201,253,147, 91,182,241, +180,254,190,207, 54,156,249,115, 38, 50, 50,179,160, 96,100,200, 85, 49,200, 85,243, 97,105, 85, 15,205,235,215, 71,124, 92, 18, + 94, 62,188,146, 35, 80, 43,214, 84,164,130, 18, 66,240,252,249,115, 84,115, 52, 65,216, 93,127, 88, 27, 9,209,192,209, 30,142, +173,219, 20,198,151, 42, 11, 66, 62,152,161, 67,135, 22, 70,134,255,238,187,239, 34,134, 15, 31,238, 48,115,230, 76,252,241,199, + 31,184,127,255,254,103, 19,180, 61, 61, 61,113,231,206,157,165, 0, 22,151, 39,234,105, 52, 26,212,170, 85, 11, 79,158, 60,193, +245,235,215,209,161, 67, 7,120,122,122, 34, 40, 40, 8, 87,175, 94,197,243,231,207, 65, 8,129,149,149, 21,116,121,228, 89, 87, +154, 49,173, 22, 39,126,253,109,207,252,245,235,183,213, 25, 54,108, 24, 78,158, 60,138,209,163,106,130,240, 36, 32, 68,130, 94, + 61,107, 98,217,242, 39,104,222,188, 61,172,173,133, 88,191,238,236, 7,165,146, 61,160, 71, 54,174,184,122,245,170,163, 74,165, + 66, 70, 70, 6,149,203,229, 36, 53, 53,111, 69,107, 73,138,150, 66,161,144,150,102, 40,248, 89,232,154,140,108,154, 78,115,158, +247, 73, 99,158,215,235,208, 37, 6,157,123,140,194,181,243,123,113,243,202,117, 88, 10, 34, 35, 96,156,125, 41, 37, 34, 37, 43, + 33,215,125,187, 71,227,177,252,216,220, 43,219,167,126,111,193,119,112,224, 78,248,108,203,204, 40,163,142, 82, 66, 8, 73,123, +117,240,175,211, 20,189, 90,181,108, 94,189,174,139,131, 56, 61, 37,137,254,121,246, 82,136, 54,226,228,185, 2,130, 85,222, 46, + 11,148,210,101, 62, 62, 62,191,228,127,222,183,112,225,194,177,126,126,126, 54, 31, 63,126, 44,156,163,149,148,146,118,179,149, +247, 20, 54, 53, 35, 83,179,103,253,207,253,101, 82,137,120,161,223,158,219, 58, 62, 30,150,102,151,225,184,173, 3,103, 44,154, +246,246,205,115,167,202, 50, 49,206,254,188, 24,129, 87,111, 65,199, 19,225,167,235,143,160,214,178,200, 72, 73,197,141, 49,147, + 32,183,179,192,182,219, 39, 19, 57,142,251,221,208,213, 24, 96,192,255, 46,202,224, 34, 37,197,216, 75,212,227,186, 39,122,216, +249,106, 20, 87,177,138, 66,175, 37,120, 41, 41, 41, 73,119,238, 60,194,237,243, 43,224,127,126, 5, 94, 62, 15, 68,124,156, 6, +113,137, 42,152,154,154, 62, 40,163,227,239, 84,188,115, 80, 40, 20,125, 23, 46,250,229,163, 84,102,132,118, 29, 59,194,222,198, + 22, 70, 34, 33,248, 12, 7, 62, 17, 34, 39,217, 28, 97, 65, 10,204,221,115, 48, 41, 71,161,232, 91,188,147, 40,110,179, 40,201, + 32,132, 64, 98,106, 2,177,220, 4, 18, 19,211, 79,220,136, 82, 83, 83, 72, 77, 76, 33, 16,139, 75,154, 52,255,153,205,156,156, +156,126,253,251,247, 79,207,204,204,196,216,177, 99,225,239,239,255,252,202,149, 43,166,129,129,129,178,164,164,164,234,148,210, +239, 40,165, 59, 74, 35, 89,197,109,166,165,189,207,166,140,122,144,239, 47,211,149, 42,198, 10, 3, 70, 28,131, 49, 47, 6, 12, +203,129, 2,112,180, 20,163,117,167,229, 72,210,180,194,177,237, 43, 21,156, 86, 53,172,104, 12,173,226, 54, 41,165,212,206,206, +238,179, 60,184,126,253, 58, 6,244,239,135, 46,125,122,195,166, 74, 53,216,118,234,142, 46, 99,127,194,246,237,219,193,227,241, + 96,109,109,253,137,194, 81,212,230,190,231, 84,120, 56,136,146,195, 65,148,236,125, 70, 5, 0,126, 56,120,240,224,175, 13, 26, + 52,184,117,255,254,253, 53, 0, 6, 21,253,175, 34,105, 89, 82, 84,205, 42,165,140, 22, 76,155, 54, 77,249,246,237, 91, 24, 27, + 27,131, 97, 24,220,191,127, 31,219,182,109,195,218,181,107,241,252,249,115, 88, 89, 89,193,205,205, 13,106,181, 26, 79,158, 60, + 81, 2, 88, 80, 70, 93,226,146,147,153,126,155, 54,249,165,246,232,209, 22,123,246,108,129,189,125, 43, 8, 5,246, 16, 8,109, + 96, 44,175,133,221,187,126, 69,183,110,141,240,215,217,227,105, 41,169, 76,191,226, 81,220, 75, 73,167,234,209,163, 71,216,190, +125, 59,250,247,239, 31, 55, 96,192, 0, 54, 51, 51,179, 80,209, 42,216,141,125, 73,254, 28, 51,181, 90, 45, 41,205,230,216,159, +131,227,230,172, 8, 89,150,248, 49,174,133,255,173, 7, 67,111, 94,185,142, 15,111,111,226,230,149,235,184,123, 51,192, 39,241, + 99, 92,139, 70,205,106,136,250,142,157, 60,103,255,169,147,124,185,169, 3,246,159, 58,201, 31, 50,101,250,202, 38, 93, 58, 44, + 40,175,206,231,151, 35,205, 73, 74,156,183,106,205,230, 28, 70,171,226,173,222,184, 53, 94,153,156,176, 0, 5, 75, 49, 75, 81, +179,138,218, 84, 40, 20, 59,148, 74,165,163, 82,169,116, 84,169, 84, 11, 34, 35, 35,219,205,154, 53, 43,153,101,217, 66,181, 52, +233,229,217, 7,161,119,247,174,178,181,182,144,181,106, 90,167,230,186, 29,127,222,142,142, 73, 60, 84, 16, 67,171,148, 50, 82, +229, 40, 85,253,122,247, 29,158,155,145,174, 70,203,233, 62,224,164,114,168, 89, 64, 71,249, 96,136, 0,193, 43,214, 65,102,105, +130,195, 17,207, 20,153, 58,109,191,162, 49,180,202,185,247, 47,134,193,166,193,166,193,230,191,167,205,255,100, 16, 66, 28,138, +238,117,152, 31, 87,235,111, 69,171,188, 37,149, 78, 78, 78,237,190,239,213, 9,237,123, 44, 4,165, 20,175,159,253,134,244,228, + 55,112,178,151, 32, 60, 58,171, 37, 0,127,125, 19, 67, 41,141, 38,132,180,152,182, 96,225,169, 1,223,117,244,168, 91,165,138, +164,114,101, 87, 24,219,218, 34, 37, 37, 25,247, 30,190,210,173, 60,114, 34, 36,159,100,233,179, 5, 15, 56,142,203,155,228, 14, +160,227,180,185, 32,124, 62,144, 31,198,161,160, 99,172,210,180, 21,136, 64, 0,150,114, 80,171,213, 84,143,116,198, 18, 66,250, + 13, 27, 54,236,198,249,243,231,121, 93,186,116,105,120,250,244,105,238,107, 10, 34, 39, 49,236,150,220,174, 70,143,149,243,198, + 31,107,209,161,183,169,123,157, 38,162, 38,149,249,208,234, 8,226,227,162,112,254,212, 99,237,171, 71, 87,178, 40,163, 26,148, +155, 92,246, 22, 60, 90,173, 54,186,122,245,234,118,219,183,111, 47,156, 12,207,178, 44, 82, 82, 82,240,224,193, 3,212,107,218, + 28, 30,163,198, 32, 57, 57, 25,155, 54,109,130,139,139, 11,122,246,236,137,180,180, 52, 48, 12, 19,173,103, 89,177, 0,174,228, +191, 62, 33,180,249,130, 10, 45,207,109,232,230,230, 38, 86,169, 84, 13, 29, 28, 28,248,132,144, 13, 26,141,102,228,188,121,243, + 28, 86,173, 90,133,154, 53,107, 34, 37, 37, 5,198,198,198,112,119,119, 71,114,114, 50, 30, 63,126,204, 42, 20,138,237, 0,150, + 81, 74,147,203, 73,223, 59, 66, 72,139,169, 83, 39,158,250,213,111,188,187, 74,221, 94,108,105,217, 6,148, 50, 72, 78,142, 68, +118,214,125,237,242,101,123,223, 39, 38,233,250, 82, 74,223,234, 89, 76,139, 39, 79,158, 12,228,111,193, 19, 30, 30,254,194,195, +195,195,189, 52, 69, 75, 31,172, 59, 17,171, 2,112,100,245,140, 86, 51,178, 82,130,220, 45, 5,145, 17, 45,234,114,155,214,157, +136, 85, 45,157, 97,190, 34, 37,210, 63, 44, 33,247,202,246,253,167, 78,242, 71,244,233,199, 58,203,223,250, 72,109,233,159, 29, +122,150, 91, 62,180, 97,195,134,149, 8, 73,171,154,148,250,230,233,232,177,227, 7,154,137,148, 23, 27, 56,167,186,241, 92, 26, + 73,159, 63,127, 30,161,239,158,161,197,236,134, 17, 66,218,205,155, 55,239, 10,165,244,147,185, 9, 73, 41,105, 55, 91,246,152, + 76, 51, 50, 50, 95, 36,189, 58, 27,172,135,173,199,132,144,142,117,235, 53, 58,249,235, 42, 63,187,246,211,102, 9,194,110,221, + 6, 88, 29,162,252,111,131,149,104,184,117, 1,215, 18, 51,181,218, 62,134,168,240, 6, 24, 96, 80,179,202,226, 34,255,238,201, + 47, 62, 25, 30,249,123, 31, 10,244,249,117,108,108,172,191, 91, 53,231,171, 97, 97,237,190,115,113,182, 1, 0,132, 71,196, 35, + 46, 81,125, 85, 95,183, 97, 9,100,171,201,193,115, 23, 7, 73, 36,146, 30, 36, 63,132, 3,253,130, 77,165, 25,134,137,173, 82, +165, 74, 41,103, 75, 14,245,196,178,108,162,158,233,188, 77, 8, 25,238,230,230,230, 23, 21, 21,117,138, 82,154,251,181, 37,145, +147, 24,118,203,210,210,173, 90,192,245,147,211, 31,222, 62,223,137, 50,154,122, 0, 64, 4,226, 10,109, 42,157,147,147, 51,126, +194,132, 9, 59,132, 66,161, 11,242,231,156, 21,204,193, 98, 89,150,175,213,106,165, 44,203,242, 1, 16, 30,143,199, 8,133, 66, +213,169, 83,167, 24,134, 97,162,213,106,245,248,175,144, 71, 43,244, 0, 92,188,120,177,178,133,133,197,119,132,144,254,148,210, + 90,217,217,217,234, 69,139, 22, 5,156, 56,113, 34,171, 74,149, 42, 93,189,189,189,137,165,165, 37,158, 60,121, 66, 83, 83, 83, +255, 4,176,128, 82, 26, 94,129,244,252, 31,123,215, 29, 30, 85,241,181,223,185,119,123,205,166,119, 2, 4, 82,232,132, 46,189, + 40, 72,148, 38, 69,164,119,196,130, 40, 8, 10, 74, 71,249,161, 32,162, 2,210, 17,149,170,244, 46, 93, 58, 82, 67, 11, 4,210, +219,166,103,251,189,243,253, 65,118, 93, 66,202,110, 8, 10,126,123,158,231,102,115,247,238,190, 59,125,222, 57,115,230,156, 88, + 66, 72,131,209, 99,126,120,211,195, 99, 89, 52,165,104, 0, 10, 66, 24, 92,201,201,225,119, 23, 22,114, 63, 21, 17, 70, 71,241, + 44,197, 52,105,179,174, 94,189,186, 26,128,176, 36, 27, 45,167, 68,158,191, 93,175,139,123,131, 40, 11,183,125,253, 77,130, 30, + 0, 62, 95,152,157, 3, 96,197,123, 61, 61,248, 27, 23, 86,204, 15, 84,223,158,244,205, 54,237, 42, 71,224,162,162,162, 66, 25, +134,233, 7,160,174,143, 36,187,166,183, 56,135, 35,132,182, 39,132,241, 2,112,185,118,237,218, 59, 1, 36, 84,176,158,111, 1, + 8, 41,254,126,218,181,223,255, 4,240,167,147, 88,103, 9, 33, 53, 63,248,104,194, 56,177, 80,248, 50, 56,174,254,172,223, 54, + 81, 87, 80,105,151,184,196, 37,255, 49,173,214,168,146,222, 23, 56, 10,112, 55, 54,161, 51, 0,132,133,133,209, 59,119,238, 56, + 61,225,150,180, 26,199, 35,143,239,191, 60, 13, 78, 70, 70, 70,227,103, 89,112,148,210,159, 1,252, 92,153,152, 69, 68,106,102, +209, 85,209,116, 93, 1,208,236,223,108, 84, 86,173, 22, 30, 5, 97, 46, 81, 94,121,229,149, 7, 38,147,233, 32,128,120, 66,136, + 6,128,214,100, 50,237, 51,155,205,169,132,144,198, 95,127,253,181,213,243,253, 44, 74,233,249, 10,166,131, 7,176,161,232,170, +236, 60,110, 8, 8, 8,152,224,233,233, 89, 67,175,215,139,245,122,189,200,126, 13, 32,147,201,210, 29,197,210,168,200, 26,145, + 32,203, 83,163, 34, 79, 16, 41,143, 64,108,209, 21, 92,141,240, 8,196, 22, 71,241, 46, 94,188, 24,219,176, 97,195,245, 12,195, + 84,163,148,250, 2,212,141, 82,164, 83, 74, 51, 4, 2, 65,226,245,235,215, 19,159,151, 1,168,136, 72, 45, 40,186, 92,226, 18, +151,184,228, 63, 37,101,217,104, 9,156, 5,187,125,251, 54,113, 21,169, 75,236,201, 86, 89,207,227,226,226, 12, 0, 78, 21, 93, +197,191,123, 30,192,235,207,123, 30,147,146,146,162, 42, 3,103,196,164, 43,137, 0,198, 55, 46, 33,180,243,231,139,181,121, 0, + 38,182,239,230, 28,230,165, 75,151, 30, 2,120,232,106,137, 46,113,137, 75, 92,242,239, 73, 73,218, 44,135, 99, 29,186,196, 37, + 46,113,137, 75, 92,226, 18,151,184,164,116,177,146,170,146,252,104, 17, 0,157, 74,249,146,195,174,235, 43,114,250,160, 60,124, + 23,166, 11,211,133,233,194,116, 97,186, 48, 93,152,255, 61,204,255,170,148, 68,178, 0,128, 84,224, 80,146, 51, 63,218,169,178, + 11,220,133,233,194,116, 97,186, 48, 93,152, 46, 76, 23,230,127, 15,243, 69, 39, 89, 37, 16, 78,215,214,161, 75, 92,226,146,255, +223,178,121,243,102,135,130,138,190, 57,105,197,107, 74,165,251,180,252,220,156, 47,126, 89, 48,108,155,245,253,222,189,123,115, +174, 82,116,137, 75, 92, 82, 33, 99,248,208,208,224,218, 12,199,183,164,148, 97, 41, 67,205, 36, 87,247,235, 93,173,246, 49,183, + 3, 85,170, 84,209, 8, 25,188, 78, 40, 85, 16,194,115, 60,203,156,140,141,141,191,238, 4, 3, 20,187,187,187,191, 35, 18,137, + 58, 25,141,198, 32,134, 97, 18, 12, 6,195,193,194,194,194, 37,197, 29, 23,254,155, 18, 17, 17,209,255,200,145, 35,154, 86,173, + 90, 25,100, 50,153, 69,167,211, 9,246,238,221, 43,121,245,213, 87,179,239,220,185, 83,161, 19,137,129,129,129, 29, 86,172, 88, + 81,189,115,231,206,168, 89,179,102, 65,191,126,253, 68, 45, 90,180, 16,141, 24, 49,226, 94, 98, 98,226, 97, 39,153,116,109, 66, +200, 58, 66, 8,203,243,252,160,162, 19,137,207,130,177, 51, 12,195,140, 38,132,244,164,148,134, 18, 66, 98, 41,165,219,120,158, + 95,230,136,119,252, 18,240,222, 0,208,149, 97,152, 40, 0,224,121,254, 34,128,221,148,210, 45, 79,145,198,103,134, 41,151,203, + 27, 2, 64, 97, 97,225,165,202,194, 36,132, 52, 44,234,164, 21,194, 36,132, 12,149,201,100, 35, 1, 64,167,211,253, 72, 41, 93, +237,116, 98,150,213,162, 81, 51, 98, 0, 0, 23, 63,143, 4, 0, 56,117, 63,250, 6,113,230,183, 74,194,115, 10,227,201, 50,232, + 58, 96,192,128,185, 63,253,244,211,231,148,210,223,159, 69,219,247,243, 11, 94,242,213, 55,203, 3,198,191, 51,252, 11, 60,138, + 8, 81,166,212, 33,228,101, 49,203,118, 51,114,220,241,235,192, 38, 0, 2, 15, 15,143,254, 98,177,184,141,209,104,244, 23, 8, + 4,201, 70,163,241, 88, 78, 78,206,207,148, 82,243, 83, 39, 48,134,184,155, 10,225, 71,248,191,227,188, 81, 6, 6,145, 28, 41, +136,164, 89,207,193,106,159,193, 35,127, 59,102, 0, 43, 43,226,206,131,101,217,241, 1, 1, 1, 61,115,115,115, 11, 89,150,165, +143, 96,201,163, 63, 0, 24,134, 33, 60,207,167,101,102,102, 14,250,127,164, 69, 9, 41, 42,215,170, 69,111, 9, 1,248, 2,184, + 12, 96, 60,165, 52,223, 69,129,254,177,186, 40,174,209,218, 69, 41, 77,182, 17, 45, 59,119,247,237,162,163,163,143,134,134, 6, +215,238,221,163,215,220, 49,163,199, 18,150,101,112,245,218, 53,193, 91,131,134,190,226,225,225, 17,168, 52, 24,106,129, 16,190, + 80, 42,189,106, 54,155, 18, 55,253,252,147, 42, 50, 34,130,227, 56, 30, 75,151,253,240,106,104,104,240, 39,142,144, 45, 66, 72, +184,159,159,223,186,201,147, 39,251,117,235,214,141,245,243,243, 67, 92, 92,156,230,151, 95,126,137,248,246,219,111,251, 18, 66, + 6, 21,249,242,113, 54,179,173,253, 60,152, 87, 84, 50,210, 17,121, 28,242,204, 56,148,162,195,126, 74,233,241,138, 22, 96, 97, + 97,225,187,133,133,133,205,154, 52,105, 66, 87,174, 92, 73,134, 12, 25, 66, 9, 33, 68,167,211,173, 65, 5, 93, 63, 40, 20,138, +239, 58,119,238, 28, 22, 22, 22, 22,123,247,238,221,174, 27, 55,110,220, 61,120,240,224, 80,133, 66,113, 27, 64,184,147,112,171, + 51, 51, 51, 27,232,116, 58, 4, 5, 5,173, 4,208,232, 25, 52, 34,194,178,236,182,192,192, 64, 58,127,254,252,223, 27, 52,104, +224,171,213,106, 45, 19, 39, 78,236,116,250,244,233, 87, 9, 33,221, 28, 37, 91,132, 16,119, 66,200, 50, 63, 63, 63,175, 47,190, +248,226, 78,227,198,141, 47, 75, 36, 18,241,237,219,183,229, 19, 38, 76,248,128, 97,152,190,148,210,209,148, 58, 62, 65, 88, 49, + 3, 3, 3,189,230,206,157, 27, 23, 21, 21,117, 85, 36, 18,137,110,223,190,173,248,248,227,143,199, 87, 20,147, 97,152,165, 45, + 90,180,112,255,252,243,207,111, 68, 68, 68,156, 98, 89, 86,156,144,144,192, 76,159, 62,253, 29,150,101,251,240, 60, 63,166, 34, +233,244,245,245,117,159, 62,125,250,141, 22, 45, 90,156, 22,137, 68,162,155, 55,111, 50,147, 39, 79,126,199,153,116,122,122,122, +182,247,244,244, 92,158,146,146, 34, 0, 0,127,127,255,166, 53,106,212,248,214, 62,166,165,213, 52,192,108, 54,231,233,245,250, + 1,153,153,153, 37, 58,194, 29, 50,101,241,235, 0,240,173,201,122,255,232,181,188,123, 96,233, 14, 71,242, 29,229, 79, 40, 0, +244,255,112, 65,143, 71,175,143,222,255,170, 0, 16, 8, 4,252, 58,127, 66, 47, 38, 59,238, 50,134, 16,210,189, 67,135, 14,211, + 15, 31, 62,252, 67,187,118,237, 62, 94,191,126,189, 79,124,124,252,151,132,144,224, 55,223,124,115,200,161, 67,135,230,165,167, +167,111,174,172,246, 47, 22, 73, 36,132, 33,144, 73,229,106, 71, 62, 47,100,152,215, 78,117,239, 62,242,199,155, 55,163,190,141, +137,169, 94,224,239,223,236,189,247,222,243,237,213,171, 23, 19, 28, 28,140, 59,119,238,120,174, 95,191,190,214,143, 63,254,216, +147, 16,242, 62,165,244,193,211,144,172,130,108,212, 51, 24, 17, 69, 41, 52,127,151, 17,178, 37, 38, 92, 84,196,144, 43,207, 1, +217,250,108,245,234,213,159,223,185,115, 7,243,230,205, 3,128, 37, 78,142, 63, 19,122,246,236, 25,189,117,235, 86,217,166, 77, +155,100, 77,154, 52,129,159,159, 31,138, 22, 83, 54,199,212,213,171, 87,255,127, 53,185,123,122,122,174,188,119,239, 94,123,133, + 66,241,216,251,177,177,177, 13,195,194,194,114, 0,124,232, 44,113,243,246,246,222,192,243,188, 33, 51, 51,115, 56, 0,168, 84, +170,159, 20, 10,133,123,114,114,242, 39,207,106, 33, 99, 99, 38,197,184,200,139,172,209, 42,209, 97,169,125,196,108,134,227, 91, +142, 25, 61,150,244,235,255,102,202,157,216,123,188, 64, 40,238,191,119,223, 62,121,237,218,181, 25,195,146, 37,176,164,167,195, +252,193, 7, 47, 29, 60,120,208,220,167,255, 64,157,144, 37,171, 67,171, 87,147,255,250,243, 47,126, 91,183,108,110, 9,224,122, +121,154, 44, 63, 63,191,117, 71,142, 28, 9,172, 94,189, 58,178,179,179, 17, 23, 23,135,130,130, 2,244,237,219, 87,216,178,101, +203,192,222,189,123,175, 35,132,180,114, 84,179, 69, 8,241,173, 25, 36,216,249,213,103,125,195, 95,125,165,165, 34, 48,184, 6, +104,138, 30,241,119, 99,154,236, 60,114,250,189, 48, 13,115,235, 78, 14,125,141, 82,154,234,108, 1,102,100,100, 76,234,217,179, +231,150,246,237,219,123, 75, 36, 18, 4, 4, 4,144,110,221,186,165, 37, 37, 37,205,120, 10,226,130,162, 85, 24,103,255, 90, 60, + 60,144,131, 18,228,238,238, 14,119,119,119, 0, 8,124,218,149,167, 70,163, 89,162, 82,169,122,231,230,230,234, 24,134,161,132, + 16,170, 80, 40,100,238,238,238,127,221,136,185, 21, 96, 48, 24,106, 46, 88,244,227, 55, 29, 90, 55, 80, 31, 56,112, 0,189,122, +245,162,251,247,239, 31, 13,224, 7, 7,127, 99, 89,207,158, 61, 11,167, 77,155,166,191, 19, 27, 23,120,227, 86, 44, 81, 72,197, +188,151,151,151,240,236,217,179,130,133, 11, 23, 74,167, 79,159,190, 12, 64,111, 39,210,189,236,205, 55,223, 52,125,244,209, 71, +201, 55,239,220,243,185,114,227, 14, 85, 74,133, 22, 47, 47, 79,246,244,233,211,124, 69, 48, 25,134, 89, 58,105,210,164,220,209, +163, 71,103,101,106,115,252,178,114,243,169, 68,200,154,253,252,252, 4,191,255,254,187, 97,195,134, 13,204,200,145, 35,151, 2, +232,227, 68, 17, 47,237,214,173, 91,222,228,201,147,179,111,199,222,247,187,114,253, 22,228, 18,161,217,215,215,135, 61,119,238, +156,105,193,130, 5,204,236,217,179, 29, 74,167, 66,161, 88,187,113,227, 70,193,239,191, 63, 26,251,254,252,243, 79, 38, 52, 52, + 84,110,255, 25,157,222, 0,134, 0, 25, 25, 25,242, 22, 45, 90,172, 5, 16,244, 4, 9,154, 17,131, 33, 83,128,119,223,125, 55, +217,217,246, 18,229,255, 30, 46,150,227,254,150, 95, 90,139,246,255,112, 65, 15,129, 64,192,143, 28, 57, 50,165,248,115,189, 94, + 79, 0,116,139,114,130,108,117,237,218,245,211, 93,187,118,213, 88,191,126,253,215, 27, 54,108, 48, 2,128, 84, 42,245,250,229, +151, 95,230,245,237,219, 23,125,251,246,157, 6,160,210,136, 22, 71, 57, 19, 0, 72,164, 18, 73, 76, 76, 12,137,140,140, 44,211, +184,213,196,243,231,127,188,121,179,241,219,145,145, 77,180, 60, 95, 83,244,234,171,249, 19, 38, 76,200,200,205,205, 69, 92, 92, + 28, 76, 38, 19,134, 12, 25,194,182,107,215, 46,160,111,223,190,139, 9, 33,111, 80, 74, 77, 14,104,117, 22, 4, 6, 6,142,202, +201,201,201,183,106,117,106, 85, 83, 9,218, 52,180, 72,234,215, 52,139, 69,172, 69,244,250, 7, 60,217,191,132, 20, 68, 86,199, + 9, 0, 16, 21, 34, 93, 4, 60, 53,209,114, 11, 38,213, 57, 33,102,123, 87,149,191,156, 30, 91,248,121,254, 3,186,164, 44,141, +173, 66,161,232, 81, 80, 80,176,185,104,114, 14,127,237,181,215,112,250,244,105, 0,104, 9, 96, 9, 33,164, 3,195, 48,111,241, + 60,191,130, 82, 90, 86, 40,183,247,186,119,239,254,242,214,173, 91, 85, 0,176,121,243,102,152,205,102,132,134,134, 66, 36, 18, + 65, 44, 22, 67, 40, 20,218,162,131,252,127, 18,134, 97, 36,151, 47, 95, 70, 64, 64, 64,241,118, 2, 0,109, 42, 0, 57, 45, 54, + 54,182,197,133, 11, 23,208,190,125,251,105,245,234,213,235,114,244,232, 81,191,204,204, 76,180,111,223,126, 49,128,223,159,117, +158,236,185,200,127,166,158,138, 49,201,118,143,152, 25,195,178, 44,131,123,177,113,230,246,237, 59, 14,126,248,240,161,178, 89, +179,102,140, 80, 40, 68,193,225,195,208,159, 59, 7,165, 82,137,158, 61,123, 10,143, 29, 59,166, 86, 43,213, 35,238,223,187,159, +199,178, 12, 40,101,202,181,121,112,119,119,127,231,147, 79, 62,241, 11, 11, 11,131,197, 98,177,121, 52,183, 88, 44,136,143,143, +135, 82,169,196,160, 65,131,124,228,114,249, 59, 14, 78,178, 85,195, 67,125, 46, 30,217,189,172,209,132, 49, 93, 21,225,242, 3, + 80,196,191, 15,229,230,183, 81, 43,105, 47, 38,247,104,166,216,255,221,180,168, 26, 1, 30, 23, 9, 33, 85,157, 45, 36,189, 94, +127,226,234,213,171, 35,142, 30, 61,202, 3,192, 31,127,252, 65,111,220,184, 49,250,105, 86,161, 60,207, 35, 59, 59, 27, 60,207, +179, 69,247,214,215,127, 85,189,175, 86,171,151,118,233,210,229,205, 7, 15, 30,200,246,236,217,227,249,240,225, 67,175,251,247, +239,123,135,135,135, 11,230,205,155,183, 75,111, 48,177,102,142, 26, 45,156, 57, 47,249,218,181,216,172,212,212,139,171, 86,173, +210, 17, 66,122, 58,248, 27,111,248,251,251,123, 78,153, 50, 5, 68, 40,111, 26, 81,171, 94, 24, 43,148,185, 49, 66,177,155, 78, +167,231,238,221,187, 23, 63,101,202,148,106, 13, 26, 52, 8, 40,218, 94,115, 8, 51, 32, 32,192,235,163,143, 62,130, 64,162,106, + 88,191, 65, 84, 13,177, 68,161, 98,133, 50, 85,179,102,205,218,197,198,198, 38, 77,158, 60,217,191, 73,147, 38, 78, 97, 54,105, +210,196,125,228,200,145, 22,169, 76,213,162,122,245,208, 90,245,235,212,138, 14, 15, 15,239, 33, 16, 8, 44,233,233,233, 15, 6, + 13, 26,228,255,250,235,175,251, 58,131,233,227,227,227, 62,121,242,100, 75,112, 72,104,231,206, 47,191,210, 92, 36, 83,185, 9, +196, 10, 77, 97,161,158,187,121,243,230,131,169, 83,167,250, 55,108,216,208,199, 17,204,194,194, 66,161,151,151, 23,234,214,173, +139,218,161,161,200,201,201,193,214,173, 91,177,122,245,106,172, 88,177, 2, 63,255,252, 51, 26,183,122, 5, 42,149, 10, 73, 73, + 73,200,205,205, 21,254,211,109,138, 95, 90,139,126,107, 28,213,109,236,216,177, 73, 35, 71,142, 76,145,201,100,124,241,203,195, +195,131, 27, 48, 96, 64,234,160,143, 23,117,179,110, 45,150,165,201,234,216,177,227,229,221,187,119,223, 93,191,126, 61,106,215, +174,141,206,157, 59,139, 1,224,157,119,222, 17,247,237,219, 23, 27, 55,110,196,230,205,155,175,135,135,135,159, 36,132,116,119, + 36,157,131, 6, 13,106,213,167, 79,159,227,125,250,244,185,212,175, 95,191,229,163, 71,143,126,108,230, 74, 78, 74, 56,111, 52, + 26,209, 32,170,137,124,214,202, 51, 3,202,195,187, 1,172, 95, 30, 19,179,250,139,107,215, 30, 76,171, 93, 91, 19,114,255,190, +199,154, 5, 11,188,172, 65,186,205,102, 51,226,227,227,225,238,238,142, 1, 3, 6,120, 73, 36,146, 65, 14,180,159,133,221,187, +119, 31,250,240,225, 67,229,143, 63,254,232,127,233,210,165,128,228,228,100,255, 67, 7,247,121, 79,252,240, 29,149,155, 82, 44, + 78, 74,127, 68, 84,239, 39, 65, 17,115, 15,173, 40,133,198,126, 59,177, 66,227, 66, 0,145,201,131,201,183, 53, 90,105,110,125, +180,177, 97,191,201,191, 53,116,247, 10,150,126, 82, 70, 58,235,207,159, 63,127,211,142, 29, 59,250,183,106,213,106, 11, 33, 68, + 86,194,103,164,141, 27, 55,222,186,113,227,198,161,173, 91,183, 62, 65, 8,169, 91,234, 42, 50, 40,168,231,111,191,253,230,105, +189,247,242,242,130, 84, 42,125,130,100,137, 68, 34, 48, 12,131,255, 79,146,158,158,254, 86,155, 54,109, 54,117,237,218,213,112, +225,194, 5,164,167,167, 35, 48,208,182,214, 78,169, 0,164,135, 92, 46, 71,112,112, 48,194,194,194,250, 31, 59,118,204,207,108, + 54,227,254,253,251, 72, 75, 75,187,248, 79,228,201,158,139,188, 72, 82, 44,206,225, 40, 0,187,158, 32, 90, 69,177,133,142, 0, + 0, 37,164,224,242,213,171, 66, 86, 44, 30,248,211,134, 13, 18,145, 72,132, 7, 15, 30,224,250,245,235, 40, 60,116, 8,186, 83, +167,144,154,154,138,252,252,124,248,250,250, 98,217,202,149, 10, 35, 71,135,221,188,117,139,165,204,223,246, 6,165,157, 72,144, + 72, 36,157,122,245,234, 85, 42, 33, 75, 74, 74, 66,215,174, 93,133, 44,203,118, 42, 65, 61,119,176, 88,230, 72,128, 55,217,113, +104,203, 44,127,127,241,117,224,206, 4, 32,239, 34, 64, 13,128,197, 8, 36, 94, 1,118,205, 64, 72,126, 12,217, 55,107,176, 95, +160, 92,176,131, 20, 83, 27, 57,112,188, 53, 52, 50, 50,114,197,192,129, 3, 25, 0,232,208,161, 3,137,140,140, 92, 78, 8, 9, + 45, 67,141,120,176,156, 73,242,116, 86, 86, 22,250,246,237,235, 89,163, 70,141,131,125,251,246,245,180,190, 95, 81, 76,171, 54, +185, 78,157, 58,153, 50,153,236,103, 66, 72,185, 3,172, 61,166, 70,163, 89,210,181,107,215,222, 27, 54,108, 16, 1,192,145, 35, + 71,176, 99,199, 14, 92,187,118, 13,183,111,223,230,163,162,162,188, 23,173,216,180,116,201, 15,107, 23,246,104,217, 32,160, 93, +211,168, 90,202,252,172,124, 95, 95,223,150,148,210, 80, 7,211,217,117,198,140, 25,215,111,220,125,224,198, 8,132, 2,145, 80, + 32, 81,171, 21,190,238, 42, 69,144,135, 92, 26, 40, 97,136,178,176,176, 48,229,231,159,127,230, 1,116,117, 20,115,214,172, 89, +247,110,220,121,160, 33,140, 64, 32, 20, 8, 69, 74,165, 92,243,106,231,246, 77, 0, 64, 4, 42,202,205,205, 77, 93,189,122,181, +201, 25,204,207, 63,255,252,170, 54, 59,223, 93, 32, 20, 10, 5, 2,214, 86,150, 10,153,204, 91, 46,145,136, 13, 6, 67,226, 55, +223,124,163,115, 6,115,198,140, 25,215,111,222,125,232,193, 16,194, 18,194, 8,212, 42,133,167,167,155,220,219, 91, 41,243,146, + 11, 88,113,110,110,110,226,186,117,235, 28,194, 52,153, 76,162,212,212, 84,220,184,113, 3,193, 77,154,224,192,129, 3,168, 82, +165, 10,250,246,237,139, 55,223,124, 19, 50,153, 12, 29, 90,212,195,148, 41, 83,112,247,238, 93,152, 76, 38, 73, 73,152, 54, 59, +169, 98, 18, 16, 16,112,161,188,246, 99,255,221,226,233,140,242, 39,244, 91,227,168,110,246, 4,171, 52,124, 15, 15, 15,174, 36, +109, 87,113,204,174, 93,187,126,122,232,208,161, 26,235,214,173,235, 54,104,208,160, 19,235,214,173, 67,243,230,205,113,227,198, + 13, 84,171, 86, 13,107,214,172,193,155,111,190,121, 98,241,226,197,221, 46, 92,184,208,160,122,245,234,159,148,135,217,175, 95, +191,113, 13, 27, 54, 60,156,146,146,210, 66,171,213,214,221,186,117,235,176,158, 61,123,222,235,223,191,127, 71,155, 70,203,108, +222,176,107,251, 22, 68,119,235,133,136, 58,117,151, 14,249,100,125,189,178, 48, 41,165,244, 26,176,124,117,114,114,250, 6,189, +190,176,175, 80, 40,151,159, 57,227,177,249,135, 31,188,236, 79,122, 39, 38, 38,226,245,215, 95, 23,138, 68,162,214,101,165,147, + 16, 50,191, 71,143, 30,125,183,110,221,234,110,213,234,156, 58,117, 10, 87,174, 92, 65, 92, 92, 28,178,179,179,209,113,116, 62, +198,206,123,132, 61,118, 30,197, 43,239, 80, 69, 5,199, 16,155,200, 67,136,159,167, 90,112,114,216, 55, 17,239,140, 90, 90, 91, +160,244, 16,226,167,143,111, 35,245,142,126,115, 41,233, 36, 45, 90,180, 88,223,167, 79, 31, 98, 52, 26, 97, 52, 26,141,148, 82, + 93, 73,216,129,129,129,210,250,245,235, 99,244,232,209,140, 90,173, 94, 92, 90, 58, 11, 10, 10, 12,187,119,239,198,160, 65,131, +240,254,251,239,163,102,205,154,112,119,119,135, 80, 40,196,218,245,191,122,189, 57,108, 76,120,163, 86,109, 26,212,110,212,188, +126,158,129,109, 34,146,123,140, 36, 37,108, 13, 60,139, 19,114,207, 3,102,189,122,245, 90,157, 61,123, 86,210,166, 77, 27, 60, +120,240, 0, 66,161,109, 61,197, 61, 77, 58,103,204,152, 33,209,235,245,248,235,175,191, 48,120,240,224, 68,147,201,244,193,179, +206,123,113, 46,242, 34, 9,165,116,121,177, 43,185, 52,141,214, 12, 0, 48,243,216, 49,112,240,176,194,157, 59,119,202,197, 98, + 49, 30, 60,120,128,228,228,100,172, 93,189,154,235,224,227,147,215, 57, 48, 48,119,237,234,213,212,104, 52,130, 82,138,200,200, + 72,244,238,221, 91,246, 70,223,254,105, 36, 87,247,171, 3,204,207,223,186,191, 62,108,216,176, 39,158, 79,156, 56, 17,106,181, + 26,132, 16, 63, 7,242,215,231,189, 25, 61,130,220,171,107, 82,105,202, 90, 45, 88, 41, 32, 80, 1, 2, 53, 32,117, 3, 36, 42, + 64, 44,135,225,194, 97, 45, 67, 59,199,245,106, 61, 60,208,201,173, 30, 4, 4, 4, 76, 59,124,248,176,247,133, 11, 23,104,110, +110, 46,146,147,147,233,220,185,115,189, 3, 2, 2,166, 85,180, 82,146,146,146,102, 69, 71, 71,167, 14, 30, 60,216,109,239,222, +189,193,131, 7, 15,118,139,142,142, 78, 77, 74, 74,154,245, 52,149, 45, 18,137,216,107,215,174,121,204,158, 61,251, 77, 0,231, +235,214,173,155, 25, 20, 20,116,190,200,104,178, 76, 81,169, 84, 54,146,101,213,174, 9, 4, 2, 8,133, 66, 4, 4, 4, 24,181, + 90, 45,215,186, 81,168, 44,210,141, 49, 7, 72, 68, 50, 15,153, 52, 72,165,118,107,150,153,153,121,153, 16,226, 80,124, 66, 66, + 72,195,166, 77,155, 10, 57, 42,228,199, 14,236, 16,240,206,208,246, 62,223,207, 30, 89,229,155, 89,163, 2,231, 79, 31, 17, 57, +107,210,128,246, 12,207,235,171, 85,171,230,103, 53,104,119, 64,125, 30,213,184,113, 99, 1, 15, 33,110,220,138, 75,125,144,144, +152,247,114,187, 22, 54,205,101,237,134, 81,157,189,189,189,219, 68, 70, 70, 54,118,212, 39,140, 76, 38,107, 24, 17, 17, 33, 96, + 88, 33,241,116, 87, 5,171,148, 50, 95,235, 51,181, 70,243,146,135,183,119, 31,134,210, 28,127,127,127, 31,153, 76,214,208,137, +188, 11,120,136,224,235,227,225,230,237,165, 81,118,110,223,178,102,139,151, 90,132,215,107,214,188, 69,157, 70,141,223, 32, 22, + 75,110,104,104,168,143,213, 72,190, 44, 49, 24, 12,210, 13, 27, 54, 96,246,236,217,168, 31, 18,130,192,192, 64,248,248,248,224, +212,169, 83, 56,123,246, 44,220,221,221,145,150,150,134, 5, 11, 22, 96,219,182,109, 48,153, 76, 42,103,219,147, 35,100,171, 44, +177, 88, 44, 76,113,130, 85, 26,190, 76, 38,227,173, 70,242,165,201,238,221,187,215, 91, 53, 89,227,199,143,111,181,104,209,162, + 19, 49, 49, 49, 80, 42,149, 56,123,246, 44,134, 13, 27,118, 98,241,226,197,173,198,140, 25,131,213,171, 87,227,222,189,123, 43, +203,194,235,215,175,223,244, 17, 35, 70,124,115,244,232, 81,198,215,215, 23,238,238,238,232,209,163, 7, 86,174, 92, 41,176, 88, + 44,171,250,244,233,115,169, 79,159, 62,151,184,248,253,159,110, 90, 49,247,212,213,203,151, 48,238,189,143,196, 70,139,121,178, + 3, 3, 47,213, 41,149,121,150, 54,109,180, 27,205,230,194,126, 34,145,220,237,210, 37,143, 29,171, 86,217,200,214,148, 41, 83, +224,230,230, 6, 60, 50, 96, 70, 25, 90,157, 81,219,182,109,179,141,135,158,158,158, 16,139,197, 16,137, 68, 16, 10,133, 96, 89, + 22, 7,151, 42,240,195,148, 71,252,226,135, 41, 4,251,151,144,167,138,205,170, 8, 34,117,221,125,197,151,222, 94, 83,167, 65, +221,142,158, 56,245, 75, 10,230, 70, 95, 72, 56,187, 49,125,130, 62,173,212, 80, 74,141, 38, 78,156, 88, 59, 45, 45, 13,231,206, +157,195,185,115,231,102,151, 82, 54,250,237,219,183,127,153,159,159,143,234,213,171,163,123,247,238,109, 8, 33, 77, 74,233, 55, +104,220,184, 49, 94,127,253,117,180,111,223, 30,245,235,215,135,209,100, 17,246, 25, 56, 42,226,218,189,244,192,185, 11,230,202, + 15,255,177,149, 57,113,226, 40,187,126,203,126,183, 22,237, 95,249, 70,164,242, 63, 77,228, 94,254,255,117,141,150, 84, 42, 93, +116,244,232, 81, 63,147,201,132,171, 87,175,226,253,247,223,127,218,152,161, 54, 5, 72,112,112, 48,142, 28, 57,130, 1, 3, 6, +232, 83, 83, 83,255,252,167,242,100,207, 69,254, 43, 34,176, 99,144, 54,121,248,240, 97,182,135,135, 71, 96, 68, 68, 4, 99, 52, + 26, 31,109, 73,108,222,204,173, 88,181,106,151, 94,175,127, 15,128,104,201,247,223, 47, 13, 12, 10,106, 63,112,208, 32, 98, 54, +155, 17, 29, 29, 45,222,185,115,167,231,221,212,212,114, 3, 34, 23, 95,109, 12, 25, 50, 4,139, 22, 45, 2, 0,188,251,238,187, + 54,213, 58,113,192, 96, 73,233,134,174,157, 95,107,172,142, 87,124,171, 54,189,100,206,175,122, 87,117, 90,145, 47,107, 12, 70, + 44,128,148, 5,111, 50, 91,110,167,245, 60,127,247,118,173,218, 50,109,102,181, 78,117,218, 98,197,129,117, 93, 1,108,116,120, + 85, 39,151, 55, 85, 42,149, 56,127,254,188,182,113,227,198,217,148, 82,183, 89,179,102,121,201,229,242,166, 79,193,126,239, 19, + 66,218,180,108,217,242, 29,134, 97, 58,241, 60,127, 48, 53, 53,117, 9,165,244,190,131,147,246, 88, 0,159,195,206, 14,197,104, + 52,130, 97, 24, 80, 74,209,175, 95, 63, 76,153, 50,165,246,149, 43, 87,112,248,240, 97,143, 78,157, 58,157, 38,132,100, 3, 24, + 78, 41, 45, 81,107,150,155,155,171, 59,123,246,172,236,240,225,195,224,121, 30, 30, 30, 30, 80,171,213,144, 72, 36,232,209,163, +135,114,242,228,201, 29,247,237,219,151,150, 91,181, 10, 43, 77, 78, 44,144, 40,149, 42,248, 5,182, 30,211,255,173, 24, 74,233, + 54, 39, 6, 7,177, 76, 96,209, 19,206,192,204,255,108, 49, 35, 23,137,136, 84, 36,128,132, 47,196,167, 95,206, 33, 34,202, 9, +224,228,254,188, 72, 36, 18,169, 36, 48,178, 98,214, 44, 39,168, 20,231,112, 44,203,138,165, 34, 24, 74,123, 46,100, 24,134, 97, + 24, 17, 0,139,163,152, 18,137, 68,164,146,208, 82, 49,101, 44, 97, 9, 33, 98, 60, 58,157,245,132, 68,249, 19,106,167, 69, 50, +216,147,226,214,173, 91, 99,215,225,243,216,188,227, 32, 50, 30, 92,198,212,143,199,163, 73,147, 38,216,185,115,103,153,105,178, +218,104,149,166, 93, 14, 8, 8,184,144,148,148,212,168,180,239,150,100,163,197, 47,173, 69, 7,125,188,168, 91, 73, 90,170, 18, +241, 63,115,123,132, 85,134,141, 22, 33,164,123,235,214,173,199,109,216,176,193,216,165, 75, 23,113,191,126,253, 80,183,110,221, + 86, 67,135, 14, 5, 0,116,234,212, 9,139, 22, 45,106, 53,116,232, 80,252,250,235,175,216,186,117,171,161, 93,187,118, 31, 19, + 66, 18, 41,165,187, 75,194,228,121,254,245,101,203,150, 21,215, 20,194, 98,177,192,108, 54,251, 91, 44, 22,255,162,177, 8,223, +124,179, 56, 99,255,190,157,248,248,147, 25,240,241,246,107,232, 96, 27, 34, 67, 62,250, 40, 99,205,130, 5, 88,240,235,175,248, +168, 90, 53,249,186,235,215,177, 95,175,199,198,195,135, 51,138,126,167, 92,219,204,130,130, 2,221,238,221,187,213, 27, 55,110, +132, 70,163, 65,205,154, 53,225,225,225, 1,161, 80, 8,134,149,129, 21,185, 35,162, 78, 83, 0,103, 1, 0,213, 2, 80, 16, 89, + 29, 39, 8, 65, 54,101, 74,111,195,165,246,209, 16, 82,213, 55, 68,122,116,220,234,186, 26,181,143, 8,123,151, 60,196,190,111, +227,183,233, 51,240, 53, 44,184, 89,198, 97,141,198,213,171, 87, 71, 90, 90, 26,118,239,222, 93, 0,224,171,210,126,131,231,249, + 47,191,255,254,251,137,159,124,242,137, 36, 50, 50, 18, 0, 26, 2, 56, 87, 34,233, 83, 40, 16, 24, 24,104, 35,150,253, 6,143, + 9, 29, 61, 97,140,172,231, 43,237, 33, 16,120, 33,187,192,140,204, 60, 51,220,189,148,248,120, 66, 31,233,193,198,129, 77,150, + 45,254,105, 59, 33,164, 9,125,150,206, 34,255,101,241,244,244,108,152,153,153,137,251,247,239, 99,240,224,193,137, 25, 25, 25, + 7, 10, 10, 10,134, 37, 37, 37, 1,128,182, 2,144, 54, 50,223,176, 97, 67, 52,109,218, 20,125,251,246,149, 22, 22, 22,246, 9, + 13, 13, 13, 4,240,210,179,204, 79,113, 46,242,159, 34, 90, 37, 78, 8,102,115,132, 97,233, 82, 20, 28, 60, 8,241,254,253,216, + 24, 16,144,175,215,235, 63,164,148,198, 23, 13,122,227, 87,175, 89,115,178,219,159,127,170,141, 49, 49, 8,189,114, 5, 66,141, +166,161,179, 9, 88,181,106, 21,114,115,115,145,147,147, 3, 0,248,246,219,111,145,155,155, 11,171, 45, 67,185, 25, 16,161,149, +159, 79, 53,164,224, 54,120, 1,163,140,139, 40,108,174,212,171,146, 2, 31,250, 22,228, 48,129,136,121,208, 76,161,203, 52, 54, + 39,172, 17,250,140, 66, 4,182,172, 9, 1, 4,173,156, 73,163,117,223, 95, 32, 16,104,111,221,186,245,122,120,120,248, 14, 0, + 94, 79,107, 15, 64, 41,189, 3,224,189, 10,146,128,207,239,221,187,231,179,114,229,202,119,102,205,154, 69,237,137,150,245,127, +129, 64, 0, 74, 41,220,220,220, 32, 20, 10,125, 79,157, 58,229,219,172, 89,179,239,138, 6,180,146,242, 73,235,214,173,139,123, +247,238, 65, 32, 16,192,205,205, 13,188,197,132, 25, 19,198,128, 99, 37,130, 73,147, 38, 53,236,213,171,215,213,149, 43, 87,154, +213, 45, 90,190,148,153,153,121,109,220,128,129, 87,127,255,253,119, 35,207,243,203, 28,204,243,165,219,183,111,179, 65, 1,190, + 44,181, 20,242, 10, 17, 32,189,252, 13, 21, 43,253, 32, 21,176, 84, 68, 24, 72,164, 50,183,251, 9, 9,153, 60,207,223,112, 4, +147,231,249,139,247,238,221,147,249,250,120, 10, 10,117,198,124,153,144,138,227, 46,158,143,173, 26,213, 56, 20, 0,244, 23,207, + 30,145, 68,212,146,197,165,166, 43,170, 85,171,230, 16,166, 78,167,187,148,152,152,200,250,250,250, 10, 30,196, 39,108,215, 40, + 21,222,106,141,166, 57, 0,152,242,114,206, 50, 6, 67, 58, 43, 20,248,166,103,102,106,117, 58,221, 61, 71,243,126,247,238, 93, +129,191,191, 15,187,119,255,161, 29,190,114,137,143, 74, 44, 80, 75, 8, 33,114,150,228,138, 44,124,134, 84, 46,247,185,159,144, +160,165,148,150,170, 33,252, 34,123, 96,207, 71,245, 53,227, 87, 59,108, 92,190,124, 25,123, 78,220,128,130, 26, 65,244, 57,216, +191,250, 71, 12,152,244,201, 83,219,253,149, 71,182, 42,164,205, 90, 86,235, 66, 49,124, 36,149, 99, 8, 63, 96,192,128, 25,235, +215,175,183, 25,160,220,184,113, 3, 29, 58,116,176,110,115,160,115,231,206,104,214,172, 25,110,220,184,129,176,176, 48, 28, 62, +124, 88,194,178,172,100,224,192,129,115, 1,236, 46, 47,189,203,151, 47,199,176, 97,195, 74, 50,172,190, 11, 64, 79,220, 35,243, +167,124,177,214, 75,155,153,129,180,244,148, 75,142,150, 3, 33, 4, 67, 62,250, 40, 99,153,209,136, 13,103,206, 96,144, 66, 33, + 95,115,231, 14,162,155, 53, 67,189, 14, 29, 50, 28, 25,235,172, 90, 29,189, 94, 15,161, 80, 8,181, 90, 13, 79, 79, 79,136, 68, + 34,176,194, 0, 8,196, 13,192,136, 68,136,106,221, 0, 11, 62, 84, 20, 14,126, 21,139, 9, 65,182, 68,140,139, 34,121,201,182, + 58,132, 16,162,168,130, 30,148, 34,183, 48, 30,127, 88, 9,137,166, 42,113, 83,170,133,251, 71,124, 23,169, 81,251,136,176,103, +241, 3,236,255, 46, 97,139, 62, 5, 83, 1,220, 45,235,116,177, 68, 34,169,167,209,104, 16, 31, 31,143,135, 15, 31, 94, 47,203, +192,159, 82, 90,216,162, 69,139, 88,137, 68, 82,219,219,219, 27, 0,170,151,150, 78,158,231,109,118, 88,235, 54,108,242,106,216, + 38, 84,250,114,171,218, 88,187, 99, 14,222,238,179, 24, 66,150,128,227, 76,248,122,209,107,224, 12,249,232,211,109, 20,105,219, + 41,172,193,193, 29,198, 17, 0,126,252,175, 18,173,132,132,132,247,218,180,105, 51, 55, 47, 47, 47,171,160,160, 96, 0, 0, 84, +175, 94, 61,132, 97, 24, 9,128, 89,101,180,167, 16,148,236, 22, 66,116,229,202, 21,168, 84, 42, 36, 38,254, 29,147, 62, 62, 62, + 30, 60,207, 27,224,146,178,250,104, 20,165,244, 34, 33,196, 31, 64, 52,236,220, 59, 48, 69,170,186,182,187,118,237,162,187,118, +237,106,107,155,188, 40,229, 45, 90, 45,168,225, 81,217, 10,133, 66, 10,192,254, 68,147, 92,163,209, 16, 97, 80, 16,136,228,145, +233, 7,181,219, 19,126, 90, 49,155, 29,115, 45,195,115, 96, 65, 76,160,118, 74,140, 2, 41,193, 28,175,142,120, 79, 60, 13, 41, + 98,141,125,207, 6, 44, 20, 28,120,214,201,228,208,130,130, 2, 88, 44, 22,247, 26, 53,106,236,178, 88, 44,238,214,173,129,127, +171, 82, 57,142,139,101, 89, 22,239,188,243, 14,172,218, 31,163,209,136,148,148, 20, 24, 12, 6, 24,141, 70,220,187,119, 15, 57, + 57, 57, 48, 26,141,184,118,237, 26,170, 87,175, 14,150,101,253,203,104, 40,148, 82,138,224,224, 96, 84,173, 90, 21, 44,161, 88, + 49,127, 58, 62,125,127, 12,222,172,206, 99,213,146,175,209,174, 93,187, 90,213,170, 85,107, 33, 16, 8, 56, 63, 63, 63,209,214, +173, 91,183,115, 28,215,195, 9, 63, 90,187,167, 76,153, 82,181, 78,157, 58, 62, 26,181,202, 44, 17,179, 16,155, 11,168,196,144, + 73, 5,133, 25, 8, 14, 14,177, 64, 38, 15, 27, 52,104, 16,231,200,228,104,197,252,240,195, 15,253, 35, 35, 35,221,220, 53,170, + 2,177,144, 77, 19,129,102,228, 92, 62,119, 26, 0,196,222, 62,122, 72,229,181, 7, 15, 30,108,113, 6,115,218,180,105,213,189, +189,189, 53, 12,104, 30,103, 50,253,189,223,110, 48,102, 18,161, 80, 7,145,184,241,187,239,190, 75,156,193,156, 56,113, 98,181, +218,181,107,107, 52,106, 69,190, 64,200, 38,139,120, 62, 89, 10, 62, 69,104, 52,101, 73,189,189, 10, 33, 87, 70, 13, 26, 52,168, + 84, 76,171, 54,107,242,228,201,241,197,136, 55,180, 90, 45,244, 41, 87, 33, 74,140, 65, 3,165, 16, 77,188,221, 33,145, 72,108, + 71,223, 75,107,174,165,217,104,149, 68,182, 28,253,110,227,153,101,108, 1, 46,171,117,161,184,223,172, 34,252, 50,251,211, 79, + 63,253,244, 73,251,246,237,211, 58,119,238,108,220,181,107, 23, 8, 33, 56,124,248, 48, 18, 19, 19,209,185,115,103, 80, 74,173, +167,218,112,233,210, 37,116,234,212,201,216,166, 77,155,196,159,126,250,233,115, 71, 42,103,216,176, 97, 48,155,205,200,207,207, +135, 86,171,197,206,157, 59,209,160, 65, 3, 42,151,203,123,177,193,175,204,233, 51,226,147,151,234,214,111,136,239, 22, 47, 48, +138, 5,194, 47,156, 28,132, 49,248,195, 15, 51,114,162,162,180,235, 10, 10, 10,135,168,213,242, 26,241,241, 30,231,247,237,243, + 50,153, 76, 14, 97, 88,181, 58, 65, 65, 65, 54,146, 37, 18,137, 32, 16,123,131, 85,212,131,216,179, 51,228,126,189,240,199, 69, +137,193, 77,129,109, 42, 37,246, 42, 52, 40,213,181,131, 60, 24,115, 94,234,231,191,181,229,155,254,135,228, 85,176,146, 16,194, + 16, 66, 24, 42, 32, 91,135,126, 29, 94,195,187,170, 12,127,110, 74,193,254,239, 18,126,211,167, 96, 58,128, 59,229,245,115,147, +201,164,231, 56, 14, 12,195, 64, 32, 16,216,219,136,158,252,237,183,223,112,254,252,121, 0,176,185,237,201,203,203,227, 88,150, +133, 84, 42, 5, 0,101, 25,227, 29,132, 66, 33,132, 66, 33,142,156, 62,230,249,230, 27,175,145, 83,127, 29, 64,203, 6,253,145, +153,111, 66,106,142, 9,217,133, 64,157, 38, 83, 81,183,211, 54, 92,190,151,135,134,245,235,178,172, 88, 49,248, 5,159,188, 67, +124,124,124, 78,121,121,121, 29, 38,132,132, 16, 66, 66,212,106,245,201,128,128,128, 24, 66, 72,119, 74,233,239, 73, 73, 73,145, +249,249,249, 45, 41,165, 15, 40,165, 15, 50, 50, 50, 58,164,165,165,189, 84,214, 97, 45, 79, 79,207,149,185,185,185,227, 57,142, +235, 86,116,189,202,113, 92,195,219,183,111,215,110,216,176,225,245,208,208,208, 75,161,161,161,123, 66, 67, 67,183,135,134,134, +110,111,223,190,253, 34,171,187,135,103, 41, 37,113,145, 23, 72,172,166, 46,209, 69,174, 30,162,109,115, 70,209,235,145,226, 6, +104, 22,137,228,154,101,220, 56,104,182,111,135,240,246,109, 12, 29, 60, 88, 45,151,203, 23, 19, 66, 26, 17, 66, 90, 42,149,202, +239,166, 79,159,174,242,154, 55, 15, 1,199,142, 33,110,231, 78,152,133,194,115, 21, 73,157, 78,167,131, 64, 32,176,105, 98, 20, + 10, 5, 56,142, 43,226,110,229, 16, 14, 11,254, 76, 76,141,129, 24, 85,193,131,230,239,205,109,115,166,127,236, 84,159,157,185, +213,195,238, 20,136,194,102,122, 55,247, 89, 28,210,234, 76, 1, 17,228,139, 53, 82, 60,124, 24, 15, 14,188, 83,251,205,122,189, + 62,167,160,160, 0, 13, 27, 54,244, 60,127,254,124,141, 6, 13, 26,120, 20,189,127,246, 41, 59, 81,139,192,192,192, 77, 65, 65, + 65,247, 3, 3, 3, 55, 17, 66, 90, 56,241,245,149,199,143, 31, 7,203,178,152, 62,125, 58,242,242,242, 96, 50,153,144,153,153, +137,135, 15, 31,194,104, 52, 34, 33, 33, 1, 55,111,222,132,209,104, 68, 92, 92, 28, 12,134,242, 23, 36, 60,207, 67,173, 86, 67, +175,203,199, 15,115, 62,197,180,201, 19,144,115,247, 2, 18,146, 82,161,113, 83,224,189,247,222, 99,221,221,221,121,142,227,170, + 90, 44,150, 78, 28,199, 45,117,148,112, 22, 57, 45, 60, 17, 28, 28, 92,119,254,252,249,181, 63,157,179, 84,164, 22,228, 83,137, + 74,202,139, 85, 18, 42,174,213, 28,195,166, 46, 22,125,179,240,171, 91,127,254,249,103,162, 35,206, 59,173,152, 81, 81, 81,225, +137,137,137, 13, 34, 35, 35, 35,188, 66,170, 73, 36,254,129,217, 34,255, 42,185,212,160, 63, 67, 2,171,180, 94,186,116,233,213, +147, 39, 79, 38, 57,131,169, 80, 40,106,173, 93,187,182,174,175,175,111, 93,161, 76, 38, 45,204,201,217,104, 41, 44,216,196,106, +220,165,140, 90,243,234,182,109,219, 46,108,217,178, 37,197, 25,204,176,176,176,200, 57,115,230,212,169, 87,175, 94, 29,191,234, + 53, 36,178,192,224, 76,105, 80, 72,166,172, 94, 3, 9,130,170,118,249,238,187,239, 46,253,249,231,159, 14, 97,178, 44,107, 97, + 24, 6, 66,161, 16,114,185, 28,123,247,238,197,184, 17,253, 17, 28,232,137,136,200, 72,116,124,123, 60,182,108,217, 98,179,225, + 97, 89,182,212, 25,125,205,188,247,118, 68,249,147, 11, 88, 86,235, 2,150,213,186, 16,229, 79, 46,148, 74,182,138,158,151,244, + 25,135, 70,163, 82,236,176,202, 35, 91,148,210,221, 71,142, 28,249,114,200,144, 33,226,174, 93,187,226,204,153, 51, 24, 54,108, +216,137,173, 91,183, 2, 0,206,156, 57,131, 15, 62,248,224,196,161, 67,135, 48,102,204, 24,116,232,208, 65,124,252,248,241,239, + 28,241,253, 99,177, 88,176,106,213, 42, 88, 44, 22, 40,149, 74,120,120,120,224,181,215, 94,195,213,171, 87,199,172, 94,189, 58, +134, 21, 10,223,138,238,246, 6,118,109,223,138,155,215,174,142, 89, 51,119,160,211, 78,129, 25,134, 65,215,193,131, 51, 50,234, +212,209,174,201,205, 45, 28,238,238, 46,143, 76, 73,241,248, 99,211, 38, 47, 7,218, 15,225, 56,206, 70,174,172,164,195,122, 9, +196,222, 16, 40,234, 66,160,106,130,203,119, 68,102, 97, 83,122, 81,212,152,222, 40,203,127,150, 80,204, 12,235,245,105,117,244, +250,180, 58,186, 79,170, 54, 84, 94, 5, 43, 20, 85, 48,182,235,251, 85,219,135, 54,113, 67,110,154, 9, 59,191,142,123,160,207, +196, 60, 0, 55, 29,233,231, 60,207, 95, 79, 76, 76,132, 88, 44, 70,149, 42, 85,194, 9, 33, 86,187,192,149, 35, 71,142,124,119, +230,204,153, 19, 0,204, 44,202,147,178,125,251,246,117,242,243,243,113,251,246,109, 0, 56, 95, 70,221,219, 78, 25,106,115,227, + 36,213, 2,234,161, 65,173,209,112,119,175,143, 68,173, 17, 73, 90, 35, 86,252,208, 3, 23,142,207,198,249,253,131,240, 32, 37, + 5, 50,191,158,224, 44,134,186, 47,184,162,100, 90,108,108,108,139, 77,155, 54,181, 7, 48,173, 94,189,122,127, 62,124,248,240, +165, 99,199,142, 69, 4, 5, 5, 45,174, 40,168,213, 45, 68, 92, 92,220, 99, 87,145, 91, 8, 35,165, 52,138, 82,218,149, 82,218, +189,232,250,224,169,124,189, 57, 46, 71, 94, 84, 99,120, 0,187,138,159, 54, 44, 78,180,236, 29,133,161,134,135,135,202,108, 54, + 37, 28, 56,112,192,196, 48, 12,228,114, 57,134, 12, 27,198,252,240,253,247,173,251,183,104,113,120,212,203, 47,239, 57,124,232, + 80, 84,179,102,205, 64, 41, 5,195, 48,248,245,215, 95,117,122,189, 46,179, 74,149, 42, 26, 71, 6, 13,251, 14,148,155,155,107, + 35, 90, 57, 57, 57,240,245,245,117,120,235,176, 32, 23, 7, 15,237,189,144, 69,185,183, 31,118,189,179,208,244, 69, 74,143,102, +217, 60, 39,200,225,204,200,209, 81,228,233, 33, 56,195,120, 52, 27, 18,214,211,116,175, 83,179,155, 71, 99, 78,101,234, 57,189, + 83,167, 37,210,210,210, 62,237,211,167, 79,166,191,191, 63, 81,171,213, 8, 12, 12,100,186,119,239,158, 17, 31, 31, 63,179,162, + 53,226,229,229,245,102,251,246,237,119, 36, 38, 38,246, 62,122,244,104,213, 99,199,142,245,110,223,190,253, 14, 47, 47,175, 55, + 29,132,216,248,201, 39,159, 20,136,197, 98, 52,111,222, 28,121,121,121, 40, 58,229, 83,230, 85,222, 68, 0, 0, 34,145, 8,203, +230,127,142,105,147, 39, 64, 27,115, 6,151, 79, 28,192,145, 20,130,169,115,190,130, 72, 36,170,144,175,175, 48, 31, 69,189,122, + 1,170, 27, 31, 12,235,151, 52,101,242,100,213,165, 75,151,132,239,190,255, 1,141, 75,214, 66,220,117, 1,139,182,159, 50,127, + 21,120, 35,250,213,142,152, 62,237,163,122,148,210,209,229, 97,214,246, 81,212,171, 27,160,186,254,209,168,254,177,239,191,255, +190,236,139, 47,190,208,183,104,209, 66,151,154,154, 42, 83,184,123, 68, 10,220, 52,117,227,146, 83,148, 45, 90,180,184,247,246, +219,111,103, 59,139, 57,117,234, 84,249,190,125,251, 4,125,250,244,177,100,101,101, 41,133, 50, 89, 67, 34,145, 54, 77,207,202, +114,235,221,167,207,157,222,189,123, 23,242, 60, 63,198, 25,204,207, 62,251, 76,126,243,230, 77, 65,139, 22, 45,204, 41, 41, 41, + 42,133,167, 87, 3, 86,227,209,228,126,114,170,186,105,179,102,119,223,125,247,221,130,178,210,105, 79, 82, 84, 42, 85, 98,203, +150, 45,241,245,215, 95,227,155,111,190, 65,151, 46, 93,112,245,218, 85, 68,191, 59, 1,181,199,126,128,237,167, 78, 35, 49, 49, + 17,179,102,205, 66,131, 6, 13, 32, 18,137,110,150, 8, 58,250, 6,185,152, 76,201,197,100, 74, 48,250, 6,177,222,151, 74,134, +102,230,224,177,207,151, 32,231, 63, 43, 89,211, 21,229, 79, 46,148,101,135, 85, 30,217,234,221,187,247, 56,171, 11,135,225,195, +135,159, 88,188,120,113,171,225,195, 31, 45,180,155, 55,111,142,217,179,103,183,154, 58,117,234,137, 57,115,230,160, 99,199,142, + 8, 13, 13, 45,247,224, 11,199,113,176, 88, 44,232,223,191, 63, 44, 22, 11,210,211,211,113,235,214, 45, 44, 95,190, 28,148, 82, + 41, 0,248, 7, 4, 53, 22,139,197,248,235,226,185,194,105,195,155,253,228,196, 98,138,216, 47, 98,242,243,243,209,123,236,216, +140,132,154, 53,181, 75, 51, 50, 10, 71,184,187,203,171, 61,120,224,161, 50, 26, 3,203,178, 73, 37,132,128,231,121, 27,177,178, + 18,174,226, 87,209, 68,233,144,152, 10,249,221,199,214, 39, 1, 0,218, 12, 12, 64,247, 73,213,134,250,135,201,191,109, 61,224, +145,210,123,203,236, 88,154,151,196,125, 1, 51,174, 59,161,177, 62,115,230,204, 25,104, 52, 26,244,233,211, 71,194, 48,204,188, +162,113, 94, 79, 41, 93, 66, 41, 93,104,197,146, 72, 36, 11, 6, 13, 26,196,100,103,103,227,242,229,203, 0,112,168,180,113,137, + 82,106,203,123,190,150,128,227,197, 56,121,113, 47,246, 31,219,140,251,137,233,120,144,166, 7, 4,110,208, 23, 36,192,164, 75, +132, 49,251, 34,114, 13,242,255,194,142,212, 51,113,183,240, 12,220, 66, 84,166, 86,235,133,180,169,163,148, 38,219,159, 54,180, +119, 96, 90,146,195, 82, 80,181,172,223,230,239,126,112,235,211,127, 96, 65,131, 6, 13,220, 3, 3, 3, 65, 8, 65,143,158, 61, + 73,251,163, 71, 85,194,128, 0,120, 54,106,100,219,142, 56,120,224, 0,246,238,221, 91,176,235,183,109,129,195, 70,140,120, 29, +192,218, 50, 6, 12, 65,141, 26, 53,108,191,155,156,156, 12,137, 68, 98,179,137,200,205,205,133,183,183, 55,146,147,147,225,160, +162,100,221,148,201,167, 39,167, 53,251,180,122, 51,149,144,236, 41, 72, 1, 71, 41,132,132, 3,116, 20,102, 14, 48,152, 41, 26, + 87, 99, 61,246,235, 44,238, 59,207,108,189, 7, 96,157,147, 26,173, 63, 8, 33,163,121,158,223, 12,128, 57,122,244, 40,127,253, +250,245,113,142, 26,174,151,168,182,151,203, 39, 29, 62,124,216, 99,210,164, 73, 89, 59,119,238,204,121,237,181,215,220,150, 47, + 95,238,209,161, 67,135, 73, 0,126,113,160, 82,117,132,144,181,241,241,241,227,154, 52,105, 2,173, 86, 11,147,201,132, 11, 23, + 46, 32, 44, 44, 12,231,207,159, 71,120,120, 56,206,157, 59,135,136,136, 8,112, 28, 7,189, 94, 15,158,231,185,242, 6,115,109, + 70, 58,144,249, 16, 73,103,246,224,214,149, 11, 56,156, 68,176,228,151, 29,168, 82,181,122,133,252,212, 68,248, 42,234, 4,250, +120,238,255, 98,198,103, 62,113,127,252,138,173,171,150,240, 71,246,236,169, 45, 86, 97,116,219,254,227,223, 48,154, 17, 2, 64, +252, 82,179, 38,232,234,126,147,147, 87, 69,202,161,107,101,123,178,142,240, 85,212, 9,240,246,220,247,191,121, 51, 85,119,247, +174,193,198,101, 95,211, 45,235,127,110,160, 7,154,213,169, 83,167, 43,195, 48, 26, 0,250, 34, 59, 47,135, 66,219,148,132,121, +112,199,142, 40, 61,208,236,247,223,127,239, 42,151,203,253, 0,152, 11, 11, 11, 99,159, 6,243,208,206,157, 81,214,116, 18, 66, +124, 0,152, 40,165,119,225,100, 8,158,190,125,251,206,254,224,131, 15, 38,115, 28,231,109,125,207,108, 54,179, 11, 22, 44, 16, +240, 60,207, 82, 74, 77, 12,195,152,246,237,219,199, 89, 44,150, 36,189, 94, 63,246,105, 6,146, 55,222,120, 3,167, 79,159,158, +129, 71,135, 48, 28,213, 86, 63,102,167, 85,214, 54,165, 35,248, 71,143, 30,157,245,214, 91,111, 77,249,229,151, 95,110, 45, 94, +188,184,219,152, 49, 99,240,235,175,191,162,102,205,154,248,235,175,191,240,233,167,159, 2, 64,171,169, 83,167,110, 95,185,114, +101,104, 92, 92,220,130,242,210,104, 54,155, 97,177, 88,240,243,207, 63,163, 71,143, 30,240,246,246, 70, 64, 64, 0, 8, 33,127, +140, 24, 49,226,123, 0, 96, 9, 43, 2, 0,131,222, 96,136,140,108,226,176, 6, 55, 52, 52,212, 54,214,165,164,164,216, 78, 10, +190,242,214, 91, 25, 43,190,248, 2, 63,233,116, 24,225,238, 46, 79, 8, 10,242,223,126,247,238, 40, 66,200,242,210, 52, 71, 86, +173, 78,121, 36,203, 81, 13,179, 46, 25,159,252, 54,247,190, 31,128, 46,109, 6, 6,160,205,192, 0, 52,233,238, 67, 24,150,224, +202,254, 76, 92, 61,168,221, 98,206,197, 31,206,132,203,161,148, 94,247,244,244,220,222,182,109,219,110,181,106,213,194,200,145, + 35,223, 22,137, 68, 34,179,217,252,190,213,205, 3, 33,196,141, 97,152,153,171, 87,175, 30,229,225,225,129,227,199,143,227,216, +177, 99,127, 80, 74, 31,150, 54, 46, 1,176,249,204,170, 18, 28,174,191, 25,151, 47, 79, 75, 60,137, 19,199,127, 67,205, 6,227, + 33,243,123, 29, 30,145,115, 96,138,249, 6,198,204,253,240, 8,126, 13, 9,113,119,193, 10, 36, 87,241, 31, 17,171,187,133,171, + 87,175,150,232,110,193, 89,169, 87,175, 94,171, 99,199,142, 73,244,122, 61,142, 28, 57,130,166, 77,109,103,187,254,213,248,157, +246, 92,228, 69,146,178,130, 74,151, 56,107, 18,158, 8, 35,194,195, 57, 17,131,213, 61, 94,127,189,240,210,165, 75,182, 85,159, +254,236, 89, 20,236,221, 11,142,227, 64, 41,197,177,163, 71, 49,104,224,192,124, 33, 75, 86, 84,171, 86,149, 18,250,183,239,150, +146,142,210,139, 68,162, 62,125,250,244,177, 13, 62,241,241,241, 80, 40, 20, 16,139,197,224,121, 30, 22,139, 5, 44,203,194,205, +205, 13, 22,139,197, 88, 66,102, 58, 21,203,136,153,211, 22,244, 94, 25, 61, 32, 57, 32,223, 68, 71,107,170, 33, 68, 36,179,117, + 78, 63, 53, 65,183, 6, 66,120, 9,210,232,161, 5, 47, 39,241,134,204,222,197, 99,139,149,119,228,159, 16, 18, 94,191,126,253, +239, 7, 13, 26,196, 0, 64,167, 78,157,152,250,245,235,127, 75, 8, 9, 47,227, 59,101, 98, 74,165, 82, 9, 0,236,216,177, 67, +123,235,214,173, 46, 59,118,236,208,218,191,239, 32,230,242,249,243,231, 67, 46,151,195, 98,177,192,104, 52,218,236,179,236, 95, + 77, 38, 19,188,188,188,176,107,215, 46,112, 28,183,171,188,116, 6,135, 84, 5,241,174,129,181, 59, 14,227, 88,134,200,105,146, +101,143, 89,211, 95, 25,225,231,229,121,224,127,115,103,121,103,221,185,128,132,132, 4,186,111,239,174, 63,117,148, 38,102,231, +210,105, 89,249, 52,162,208, 64,165, 77, 67,241,240,192,178,143,233,212, 54, 48,163,132, 83,131,246,152,117,252,149, 17,129,222, +158,251,190,250,223, 92, 85,246,157, 11, 72, 78, 73,193,238, 93, 59, 46,233, 40, 77,164,148,110,161,148, 14,229, 56,174, 46,199, +113,117, 41,165, 67, 75, 35, 47,206, 98, 22, 20, 20,212, 43, 40, 40,168, 87,153,152, 60,207,215,227,121,222, 97, 76,123,162,178, +112,225,194,152,228,228,228, 65,105,105,105,157,173, 87, 86, 86, 86,167,252,252,252,118,133,133,133,173,117, 11,171,186, 21, 20, + 20,248,228,229,229,249,235,116,186,198,148,210, 11,142,182, 79,123,177,247, 58,157,148,148, 52, 61, 41, 41,137,148,151, 78,102, +204, 13,178,225,171,143,126, 91,182,108,153,255,211,224, 23, 79,103,122,122,250,230,159,127,254,185, 97,245,234,213, 67,135, 14, + 29,138,165, 75,151, 98,241,226,197, 6, 0, 88,185,114,165,193, 78,147, 21,124,255,254,253, 38, 37,109, 27, 62,150, 78,134, 89, +247,202, 43,175,208, 99,199,142,161, 71,143, 30, 54, 71,162, 63,254,248, 35, 44, 22, 75,110,199,142, 29,121, 0,208,233, 11,115, + 41, 79, 97, 52,149,188,255, 94, 82,121,138,197,226, 87,237,253, 5, 90,157, 49,139,197, 98, 80, 74, 17,209,170, 85, 70,118,131, + 6,218, 85, 57, 57,133,211,235,213, 83,143,138,140, 28, 90, 11, 24, 88, 18, 38, 33,228, 49,173, 78,241,203, 81, 77,150, 61, 38, +165, 52, 77,151,132,145,191,205,189,191,215,170,217,146, 42, 5,208,231, 89,176,237,139,251,233,250,116,252, 8,224,161, 51,152, + 0,160,213,106,223,253,226,139, 47, 12,238,238,238,120,227,141, 55, 48,103,206,156, 17,173, 90,181,202,241,245,245, 61, 29, 22, + 22,118,165, 95,191,126,201, 23, 46, 92,120,183,125,251,246,184,125,251, 54,190,250,234,171,236,172,172,172, 1,101, 97, 18, 66, +108,154,188,238,209,157,180, 63,124,251, 53,223,177,237, 56,200,101,106,152,133,193,208,230,155,145, 85, 64, 97,148, 52,131, 88, + 36, 65,231, 22,117,112,122,223,154, 66,206, 88,176,182, 34,109,222,137,201,245, 89, 99, 86,138,187,133,226,233,172, 12,183, 16, +207, 34,239, 47,178,148,224, 71,235,113,141,150,245, 72,165,245,149, 16,158,227, 56, 30,213,170, 87, 83,197,221,127,184,164,111, +223, 62,195,187,118,141,150, 71, 71, 71, 75,235,196, 60,218,186,216,177, 99, 7,182,110,221, 90,184,127,255,254, 92,137,144, 93, + 25, 92, 37,216,151,227,120, 16,194,151,201,134, 85, 42,213,251,159,124,242,137, 44, 39, 39, 7,139, 23, 47,230, 27, 54,108,200, + 40, 20, 10,152, 76, 38,172, 92,185,210, 92,167, 78, 29, 33,195, 48,200,201,201, 1,195, 48, 55, 29,204,224,101, 66, 72,231,239, +219,247,218,218,228,157, 97,158,181,219,191,228,222, 46, 56, 16,230, 70, 20, 73,241,247,113,235,208,254,172,107,251, 22,101, 66, +159,218,139, 82,122,221,217, 2, 12, 8, 8,248,124,255,254,253, 62,239,190,251, 46,213,235,245,228,225,195,135,116,238,220,185, + 62, 35, 71,142,252, 28,192,155, 21,237, 79,217,217,217, 32,132,240, 69,141,214,186,234, 39, 78, 84,236, 85, 66,200,239, 61,123, +246,236,222,177, 99, 71,196,196,196,216,182, 8,237,137,150,245,244,225,188,121,243,178, 1, 76, 41, 15, 87, 40, 20, 98,241,218, +205,200,206,202,128,175,111, 0,164, 50, 89,133, 61, 46,139, 25,102,250,151,179, 62,243,201,184,113,154, 92,253,243, 48,191,233, +114,106,154,133,163, 37,123,252,207, 75,162, 69,236,191,236,213, 12,195, 78,255,114,238, 76, 55,235,182,230, 47, 23,147,115, 9, + 71,223,125,170, 94,242,162, 96,254,195, 18, 16, 16,128,164,164, 36, 18, 16, 16, 64,173,219,122,165, 17,173, 39, 26,248,163,237, + 50, 82,214,182, 97, 69,241,239,221,187, 55,183, 81,163, 70, 31,221,190,125,123, 83,237,218,181,199, 0,168, 98, 48, 24,178,167, + 78,157,250,191,149, 43, 87, 14,119, 68,147, 5, 0,191,254,250,235,162, 97,195,134,237,125,253,245,215, 63,230,121,190,190,221, + 36,114,207,199,199,199,182,133,155,158,154, 50,121,244,240,254,147,243,243,179, 28,246,115,167, 84, 42, 71, 77,157, 58, 85, 90, + 80, 80,128,239,190,251,142,175, 83,167, 14, 99, 93, 20,173, 95,191,222, 18, 30, 30, 46,232, 51,110, 92,198,194,148, 20,204, 62, +126,188, 96,114,221,186, 13, 87,221,186,213,184, 36,141,187,117,225, 88,146, 38,203,106,118, 81,193,201, 33,137, 16, 50,242,183, +185,247,127, 4,208,229,165,190,126,248,125,254,125,100,197, 25,255, 7, 11,238, 58, 18, 22,168, 4,204, 4, 66, 72,231,212,212, +212,223, 63,251,236, 51,183,198,141, 27,163,110,221,186, 66,165, 82,217,204,234, 46, 38, 39, 39, 7, 7, 15, 30,196,210,165, 75, +141,215,174, 93,235, 73, 41, 45,117,187,138,227,184,180,240,240,112,107, 57, 80, 66, 72,102,174,129,184,109,172,213, 76, 57,116, +244, 38,114,226,220, 41, 36,153,120, 24,204, 60,170, 85,143, 66,187, 46, 11,177,125,207, 21, 46, 41,238,250,117,179, 46,107,197, + 11, 62,127, 63, 19,119, 11,207,192, 45, 68,165,105,179,236, 95,255, 43, 82, 98, 15,229, 89,230,228,210,101, 63,188,250,235,207, +191,248,177, 44,227,119, 55, 54,246, 92,183, 94,189, 19, 15, 28, 56,224, 33,114,115,107, 10,128, 55,142, 25,243,167,201,160,211, +238,252,253,247,144,106,213,170, 54, 40, 10, 42, 77,121,150, 57, 89,214, 15,230,231,231, 23, 28, 63,126,188,112,202,148, 41, 36, + 62, 62,126,131,175,175,111,191, 61,123,246, 40,123,245,234,165,139,137,137,217,226,231,231,215,189,125,251,246,170,143, 62,250, +200,144,159,159,191,196,137,206,125,157, 16, 82,235,236,103, 11,222, 58, 59,255,135,151, 33, 96, 91,194, 32, 4,120,243, 73,152, +242, 14, 0,216, 64, 41,181, 84,164,144, 20, 10, 69, 3,185, 92,142, 75,151, 46,101, 53,107,214,204,168,215,235, 69,115,230,204, +241, 84, 40, 20, 13,158, 98,128,163, 89, 89, 89,224,121, 94, 0,128, 20,189,130,119,254, 44,254,155,221,186,117,251,125,227,198, +141,175, 68, 71, 71, 35, 52, 52, 20,102,179, 25,225,225,225, 48, 26,141, 8, 11, 11,131,193, 96,192,140, 25, 51,144,147,147, 51, +161,172, 96,197,132, 16, 88, 44, 22,155,177,109, 96, 80,200, 35, 63, 61, 79,225,198, 66, 33,100, 66,111,238, 92,133,180,204, 12, +126,227, 95,169,169,133, 38,174,243,237,180,130,107,197, 63, 87,200,161,160,253,208,247, 18, 1,192,192,163,204,136,243, 10, 49, + 66,111,237,250, 17,169,105, 25,248,245, 98,114,118,129,137,239,114,179, 4, 76,167,210,249,130, 96, 70,205,136, 65,239,247, 28, +255,236,197,209, 21,255, 45, 71, 9, 85,105,114, 49,153, 18,126,105, 45,138,101,171, 74,244,145,245, 52,248, 69,154,170,223,139, +218,109,124,255,254,253, 39,223,191,127,127, 86,145,191,172,101,206, 96,173, 90,181,234, 54,128, 97,101,125,230,151, 5,195,182, + 1,216,230, 12,110, 94, 94,158,254,194,133, 11,250,143, 62,250,136,196,199,199,239,241,243,243,123,101,239,222,189,242, 94,189, +122, 25,174, 94,189,122, 40, 32, 32,160, 77,167, 78,157,148,187,207,156, 73, 44,188,123,119,231,206,251,247,131,204, 60,191,179, +172,254, 89,153, 36,171, 56,217,218, 54,251,254,151,191,127,121,191, 19,111,192, 22, 99, 22,254, 4,144,240, 20,152,199, 8, 33, +181, 7, 14, 28,184,241,181,215, 94,123,169,118,237,218,168, 82,165, 10,110,221,186,133,244,244,116, 92,190,124, 25, 59,118,236, +216,161,215,235,203, 13,168,157,153,153,249, 68,120, 34, 34,243, 12, 88,243,221,244, 29,231, 78, 52, 13,111, 29, 61, 68, 86, 55, +128,135,209, 68, 17,255,224, 46,102, 76, 91, 81,152,252,224,246,117,147,197,212,243, 63,224, 67,235, 88,108,108,108, 20,203,178, +149,234,110,161,162,110, 33, 92, 82,137, 68, 43, 54, 54,254,122,104,104,240, 39, 91,183,108,110, 73, 41,195, 82, 66, 10, 52, 26, +247, 29, 15, 31, 62,204,182,255, 92, 13, 15, 15,213,176,145,195,250, 17,158, 8, 9,225, 57,158,101, 78,198,198,198,151,169, 49, + 50, 26,141,163,251,245,235,183, 88, 46,151, 79,213,106,181,151, 52, 26,205, 95, 13, 26, 52,152, 69, 41,157,166,211,233,126, 87, +169, 84,103, 94,122,233,165, 57, 33, 33, 33,139, 40,165,231,157,236,220, 22, 60,178, 15, 91, 91,201,170,220,153,148, 82, 55,129, + 64,144,115,229,202,149,159, 35, 34, 34,250, 83, 74,221, 8, 33, 57, 21,197,212,235,245,239,102,103,103,123,141, 26, 53,202,188, +124,249,242,136, 33, 67,134, 76,190,118,237,154, 80,175,215,199, 58,153,103, 3, 33,164,123,223,190,125, 87, 8,133,194,142, 12, +195, 16,158,231,169,221,115, 80, 74,193,113,220,246,242,202,133,227,184,196, 90,181,106, 61,182,130, 46,201, 62,215,108, 54, 39, + 58, 60,217, 24,185,241, 63, 28,190, 54, 79,111,166,212,194,211,209, 55, 83, 11, 74, 60,114,118,246, 38,173,227, 48,166,158, 31, +191,120,223,245,121, 6, 51,207, 91,120, 58,166, 52, 76,167, 38,197, 23, 4, 19, 0, 38,107,214,111,195,178,245, 54,195,120,235, +118, 98,241,251,202, 20,171,214, 9, 78,122,108,102,198, 60, 50,150, 47,143,240, 85, 20,191, 56,233,114, 86,122,247,238,253,204, +236, 81, 76, 38,211,167,221,186,117,155,165,209,104,254,151,158,158,126, 73,163,209, 92,143,140,140, 28,207,243,252,162,194,194, +194, 29, 42,149,234,245, 38, 77,154, 76,168, 90,181,234,154, 56, 74,215,148,215, 55,173, 90, 29, 0,212,218, 47,173, 68,194,158, + 80,152,205,230,132, 10,148, 97, 18, 33,228, 67, 0,213,240,200, 1,239, 29, 74,233, 83,149, 13,165, 52, 9, 64, 75, 66, 72,117, + 0, 29,241,200,127, 95, 54,128,123, 0,206, 83, 74, 47, 87, 24, 91,151,153, 68, 8,105,116,227,226,241, 49,183,174, 95,124,203, +122,186,144,101,197, 87, 57, 83,225, 90,179, 46,107,197,127,196, 81,233,244,176,176, 48, 55, 0,245, 1,164,226,111, 71,198,113, + 0,190,169,140,133,138,157,116,112, 81,162,167,226, 9,163,236,183, 11, 31,123,246, 44,219, 34, 33,164, 83,101,199, 67,114, 97, +186, 48, 93,152, 46, 76, 23,166, 11,211,133,249,223,195,124,209,137, 86, 9,132,118,121,169, 26, 45,151,184,196, 37, 46,113,137, + 75, 92,226, 18,151, 56, 46,165,106,180, 0,116, 42,229, 11, 14, 51,213,138,156, 62, 40, 15,223,133,233,194,116, 97,186, 48, 93, +152, 46, 76, 23,230,127, 15,243,255,155,184,182, 14, 93,152, 46, 76, 23,166, 11,211,133,233,194,116, 97,254,235,152, 47, 52,153, +114,109, 29,186,196, 37, 46,113,137, 75, 92,226, 18,151, 60, 27,177,146,170,146,140,226, 93, 68,203,121,214,202, 0,120, 27, 64, +111, 0, 53, 0,220, 5,176, 25,192,247, 78,132,169,176,199, 83, 3,152, 12,160, 37, 30, 69,175,191, 7,224, 56,128, 47, 40,165, +249,174, 18, 47, 89,188,189,189, 63, 17, 10,133, 26,224, 81,104, 19,235,171,253,255, 28,199,101,231,228,228,204,125, 70,237,128, +117,244, 84,150, 53,173,246,105,179,127, 53,155,205,207, 44,157, 46,121,110,199,145,112, 15, 15,143,159,180, 90,237, 0, 74,233, + 45, 87,137,184,228,191, 36, 62, 62, 62, 99, 76, 38,211, 84,145, 72, 52, 39, 45, 45,237,135,255, 71,253,186,196,147,135, 54,162, +181,107,215,174,163, 0, 16, 29, 29,221, 22, 0, 84, 42,213, 41,134, 97,170, 23,125, 25,192,223,177,240,138, 31,253,183,190,242, + 60,127, 47, 51, 51,179, 84, 7,106,114,185,252, 20,203,178,213, 9, 33, 96, 24,198,118,153,205,102, 21,203,178,121,165, 96, 38, +104,181,218,198,207, 73, 33, 18, 0, 59,221,221,221,245,179,102,205,250,190, 93,187,118,193, 73, 73, 73,150, 73,147, 38,181,249, +235,175,191,162, 9, 33,175, 58, 67,182, 8, 33, 45, 8, 33,107, 26, 54,108,184,109,240,224,193, 27,155, 53,107, 38,206,204,204, + 84,109,222,188, 57,112,237,218,181, 23, 8, 33, 3,156,117,113,241, 2, 52, 68, 65,105,254,204,202,122, 86, 92,132, 66,161, 38, + 33, 33, 65, 85,180,146,176, 18, 43,152,205,102,152,205,102, 20, 20, 20,160, 65,131, 6,149,158,126,127,127,255, 40, 66,200,146, +176,176,176,198, 1, 1, 1,231, 0,140, 75, 74, 74,250,203,153,180, 90, 44, 22, 80, 74,109,233,172, 93,187,182,107,100,118,174, + 13,141, 16,139,197, 93,194,194,194,154, 26, 12,134,172,123,247,238,157,229, 56,238,179,178,156, 94, 58,137,239, 6,224, 51,137, + 68,210,172, 70,141, 26,193,183,111,223,142, 55,153, 76,103, 0,204,164,148,230, 84, 6,201,106,219,182,237,137,239,190,251,206, +115,236,216,177, 39, 8, 33,173, 92,100,203, 37,255,150, 84,169, 82, 69, 83, 80, 80,176, 2, 64,148, 80, 40,244,147, 74,165,144, +201,100, 41, 18,137,228,146, 76, 38, 27,126,226,196,137,108,103, 49, 57,142,251, 44, 46, 46,206,175,121,243,230,243,235,214,173, + 59, 35, 35, 35, 67,111, 50,153, 14,101,101,101, 77,160,148,230,150,245,221,226, 92,228, 69, 34, 89,246,175, 69,227,253,223, 91, +135, 69,113,133,218, 61,198,192, 4,130,160,184,184, 56, 31,149, 74, 5,142,227,108,218, 2,235,164,102,111,219, 85,228,167, 9, +145,145,145,166,114, 38,156,224,132,132, 4, 31,165, 82,105,123,207,100, 50,193,207,207,143, 79, 76, 76,244,145, 74,165,143,125, +222,104, 52, 34, 40, 40,232,121,242,133,242,182,135,135, 71,206,195,135,241, 13,244, 6,211,204,145,239, 78,249,100, 64,239,151, +221, 79,157, 58,197,191,250,234,171,134,163, 71,143,190, 13, 96,137,131,149,226, 70, 8, 89, 59,105,210,164, 25, 82,185,218,243, +240,169,235,134,181,155,119, 37, 54, 12,175, 70, 38, 76,152,192,190,247,222,123,199,162,162,162,126, 34,132, 52,114, 70,179,165, + 82,169,246, 74, 36,146,170, 44,203,194,100, 50, 61,212,106,181,175, 60, 71, 13,177, 33,128,139,132,144, 40, 74,233, 37, 71,159, +149, 37,153,153,153,208,233,116, 79, 92,181,107,215, 70,101,219, 31, 18, 66, 4,193,193,193,191,207,155, 55, 47, 48, 37, 57, 25, + 95, 47, 92,216, 28,192,247, 0,154, 59,242,253,180,180,180, 39,210, 25, 25, 25, 9,151, 56, 85, 7,147,103,204,152, 49,239,173, +183,222, 2,199,113,208,233,116, 1,119,238,220,169, 51,117,234,212,158,132,144,166,148,210,216,167,196,247, 14, 11, 11,139, 25, + 63,126,188, 71,211,166, 77, 81, 20,165, 34,224,248,241,227,205, 87,174, 92, 57,136, 16, 18, 73, 41, 77,127,154,223,240,240,240, +248,233,199, 31,127,244,148,203,229,216,190,125,187,103,199,142, 29,143, 19, 66, 90, 87,148,108, 17, 66, 24, 79, 79,207,247, 0, +116,224,121, 94, 12,224, 76, 86, 86,214,108,103,189,186, 19, 66,252,149, 74,229, 22,134, 97,170, 21, 91, 96,123, 17, 66, 50,172, +239, 17, 66,124,120,158,255,179,172, 69,181, 75, 94, 12,241,242,242, 26,145,151,151,247,157, 68, 34, 17,185,187,187, 67, 46,151, + 67, 32, 16, 64, 32, 16, 84,145, 72, 36, 85, 36, 18, 73,215, 14, 29, 58,140, 59,124,248,112,153, 30,246, 95,138,242, 27, 10,134, +204,100, 9,195, 2, 64,237, 48, 79,181,155,155, 27,102,206,156,169,232,222,189,187, 2, 0, 78,156, 56, 49,120,200,144, 33, 29, + 9, 33,117, 75, 35, 91, 37,113,145, 23, 69, 74, 59,113,248,152, 70, 43, 58, 58,250,104,177, 78, 7,153, 76,134,141, 27, 55,130, +101,217,199,162,198,151,244,127,149, 42, 85,202, 77,136, 85, 35,182, 99,199, 14,168,213,106,184,185,185,217, 38, 26,137, 68,130, + 67,135, 14, 65, 40, 20, 66, 32, 16, 64, 40, 20,162,113,227,198, 40, 35,160,253, 51,145, 62,117, 8, 5,128, 77,239, 60, 74, 87, +159, 37,143,156, 64,110,122, 39, 18,173,107,200,208,251,189,233,253, 10,245,166, 38, 0, 10,178,179,178,178,206,109,221,154,212, + 48, 60, 92,244,211, 79, 63, 53, 13, 12, 12,236,237, 40,209, 2, 48,185, 81,163, 70, 91, 88,153,155,215,224, 33, 67, 7, 15, 23, + 48,166, 65,163, 63,154, 19,159,156, 81, 48,106,212,168,173,219,183,111, 31,252,229,151, 95,222,152, 56,113,226,100, 0,159, 58, +154,126,177, 88, 92,245,206,157, 59, 97, 60,207,163, 94,189,122,207, 77, 24, 3, 43,145,162,148,130, 16,242, 24,161, 42,235, 89, +121, 98,213, 96,149,116, 85,182, 4, 6, 6, 70, 14, 28, 56,208, 75,155,145,129,175, 23, 46,180,190,221,184,188,109, 68,235, 22, +161,209,104,196, 27,111,188, 49,144,227, 56,129,149, 4, 26, 12, 6, 99, 78, 78,142,222,238,100, 79, 58,165,244,101, 7,202,179, +186, 66,161,248, 31,128, 40,157, 78, 23, 8, 0, 10,133, 34,145,231,249,109, 5, 5, 5,159, 90, 3,248, 86,160,158,130, 1,212, + 65,233,161,160,232,188,121,243,110, 79,158, 60, 57,246,159,198, 36,132, 84,245,245,245,157,219,167, 79, 31,236,218,181, 11,187, +119,239, 54,203,100, 50,193,144, 33, 67,200,184,113,227,220,199,143, 31,223, 21, 79,225,196,177, 72,186,206,152, 49,195,163, 86, +173, 90,216,188,121, 51, 46, 95,190,172, 11, 11, 11,147,181,107,215, 14, 2,129,192,227,147, 79, 62,121, 21,192,154,167,249, 1, +173, 86, 59,251,163,143, 62, 90,251,243,207, 63,171,238,221,187,135, 37, 75,150,120,245,235,215,239, 40, 33,164,173,163,100,139, + 16, 34, 1,240, 30,128,246, 44,203,182, 30, 50,100,136,229,221,119,223, 21, 50, 12, 99, 94,184,112,161,247,202,149, 43,251,121, +121,121, 69,101,100,100,228, 59,128,197, 0,152, 57,124,248,240, 97,127,252,241,135,251,217,179,103,197,158,158,158,182, 5,118, +209,171,143,181,205, 90, 44, 22, 68, 70, 70, 6,253, 23,136, 6,203,178, 38,158,231,133, 0,164,148, 82, 67,121,247,255, 37,146, +229,233,233, 57, 54, 43, 43,235,123, 63, 63, 63,248,250,250, 62, 49,215, 26, 12, 6, 72,165, 82,145,159,159,223,143, 61,122,244, + 16,254,246,219,111,165,110, 1, 18,150,124,182,253,151, 89,129, 30,238, 42, 0,192,162,165,251, 10, 1,224,183,223,126, 67, 82, + 82, 18,220,221,221, 81,183,110, 93,118,214,172, 89,254, 19, 38, 76,248, 26,192,240,210,176,138,115,145, 23, 73,163,101, 79,182, +236,239,203,180,209,226,121,222, 22,176,212, 74,168,172, 36,168,248,255,246, 43, 32, 59,134,119,176, 88, 66, 72,126,126,190,141, +100,169,213,106, 20, 77,174, 48,155,205, 79,224,114, 28, 7, 66, 8, 45, 11,179,148, 12,143, 5,112,136, 82,122,215, 65, 38,106, +195,220,244, 78, 36,214, 74, 38,245,183,186, 80,239,250,209,163,215,181, 0, 78,221, 31,190,228,187,182,109, 3,223,155,182,120, +186, 46, 51, 41,227,147,129,175, 87, 13,243,243,148, 41,178,211,114, 60, 34, 34, 58,227,145, 71,101, 71,211,217,102,240,224,193, +235,246,159,142, 35, 82,169, 72, 36, 96, 89, 97,171,122,225,158,193,110,172,155, 10,112,139,143,189,125,106,232,208,161,245, 38, + 78,156,216,218,153,188, 51, 12, 3,181, 90,141,117,235,214,129,113, 32,118,206,179, 56, 53, 82, 66,189, 11,172, 68, 74,171,213, + 98,215,174, 93,136,142,142,190, 72, 8,137, 42,250,200, 69, 74, 41,114,115,115,145,156,156, 12,127,127,255,139,132, 16,161,253, + 54, 98,113, 76,171, 86,213, 74,170,134, 12, 25, 50,208, 98,177, 8,236, 6,137,226, 4,230, 9, 18,227,104,222, 3, 2, 2,246, + 3,120,153,101, 89, 24,245,122,227,255,190,250,202,254,241,121,123,146, 85, 26,166, 53,173, 28,199, 9, 46, 94,188, 40,180,246, + 25, 0, 66, 0, 10, 0, 94,148, 82, 48, 12,115,197,129,242,140,148,203,229,167,118,236,216,161,110,220,184, 49, 17,139,197,176, + 88, 44,184,122,245,106,240,151, 95,126, 57,250,224,193,131,175, 18, 66,106, 23, 15,158,238, 96,189,215, 57,126,252,120, 65,104, +104,104,137,196, 49, 55, 55, 87, 16, 30, 30,222, 22, 64,236,191,128,153,144,154,154,218,227,229,151, 95, 30,147,146,146, 18, 99, +177, 88, 62, 6, 80,215,203,203,235, 98,175, 94,189, 32,147,201,218, 59, 66,180,202,170,119, 31, 31,159,238, 47,189,244, 18,150, + 44, 89,130, 47,191,252,178, 19,165,244, 16, 33,164, 99,110,110,238,193,110,221,186, 65,163,209,244, 40,137,104, 57,218,150, 8, + 33,225,109,218,180,249,113,230,204,153,170, 93,187,118, 33, 44, 44, 12,121,121,121,248,240,195, 15,125, 62,255,252,243, 35,132, +144,118, 86,178, 85, 26, 38, 33,164,182, 68, 34, 89,243,243,207, 63, 43, 67, 67, 67, 67, 69, 34, 17, 19, 26, 26, 10,173, 86, 11, +189, 94, 47,153, 51,103, 78, 61,153, 76,246,215, 55,223,124,179, 6, 64,175,114,218, 18, 3, 96,246,178,101,203,198,140, 26, 53, + 74, 51,112,224, 64,206,104, 52, 62,182,192,150,203,229,143, 45,174, 35, 34, 34, 28,206,123, 81,244, 12, 53, 0,141, 51,219,174, +101,228, 61, 7,128,196,214,121,132, 66, 72,165, 82, 72,165, 82, 72, 36, 18,220,188,121,115,154, 84, 42, 93,104, 63, 22,151,133, + 73,254,158,180, 26, 16, 66,206,178, 44, 91,230,125,113,211,144,127, 98,252, 44, 33,205, 65,132,144, 69, 0,218, 63, 26,242,153, +163, 94, 94, 94,239,167,164,164, 60,112, 20, 51, 32, 32,192, 51, 63, 63,255, 27,127,127,127,248,250,250,218,230,142,192,192, 64, +152,205,102,164,166,166,130, 82,138,236,236,108,200,229,114, 4, 4, 4,124, 51,122,244,232,205,203,150, 45,203, 44, 17,147,199, +151,221,250, 77,253,140,101, 89, 6, 0, 88,129, 82, 57,126, 10, 80,181,106, 85,180,106,213, 10,122,189, 30, 57, 57, 57,168, 83, +167,142,128, 16, 50,152, 97, 24, 53,165,244, 7, 74,233,225,255,160,214,189, 84, 99,248, 25,197,247, 69, 9, 33,224,121, 30, 2, +129,224, 49,162, 85,252,178,146,162,162,246, 74,202, 91, 57, 25,141, 70, 27,201,114,115,115,179,145, 52,139,197, 82, 26,209,170, + 8, 83,175,207,243,124,117, 66,200, 50, 71,201, 86,113, 25, 60,120,240, 19,246, 30, 19, 38, 76, 72, 72, 75, 75,163,111,116,110, +160,136,217,147,148, 92,195, 93, 41,243, 86,169,170, 73,221, 61, 52,153,153,153,127, 2,208, 56,241, 19, 53, 27, 53,106, 36, 91, +187,245,120,194,200, 15,230,205,106, 28,234,169,174, 31,228,229,238,231, 38, 19, 43, 25, 82, 32,181,152, 19, 60, 60, 60,194, 42, +176, 66, 3, 0,104, 52, 26, 8, 4,130,231, 66,163, 69, 41,181, 16, 66,162, 8, 33, 23,119,237,218,133,102,205,154,217,200,150, +149,132,228,228,228,224,234,213,171,104,211,166, 13, 0, 68, 57, 98,171,197,243, 60, 76, 38, 19, 76, 38,147,141,192,136, 68,162, + 39, 8,140,245,179, 44,203, 94,169, 96, 22,102,185,187,187,183,105,223,190,189,248,151,141, 27,197,148,210, 2, 60, 10,124,157, + 79,105, 41, 1,178,139,137,197, 98,177,105,217,132, 66, 33, 30, 62,124,104,155,184,172,154,225,226, 91,231,165,137, 68, 34,249, +232,215, 95,127, 85, 55,109,218,148,100,102,102,130,231,121,219, 32,249,253,247,223, 75,123,247,238, 29,120,225,194,133, 79, 80, +129,112, 54, 0, 72,105,132, 8, 0,212,106,181, 5, 0, 83, 25,152, 22,139,133,180,108,217,114, 98, 70, 70, 70, 61,157, 78, 55, +199,145,118, 4, 96,123,209,101, 29, 83,254,138,137,137,209,245,237,219, 87, 86,173, 90,181,102, 79,219, 86,195,195,195, 91, 8, +133, 66,156, 57,115,198, 0,192,186,178, 62,122,249,242,101, 67,175, 94,189, 36,193,193,193, 45,156, 24,112,195, 35, 35, 35, 15, +248,248,248,200,172,218,160, 62,125,250, 8,151, 47, 95,174, 74, 76, 76,132,201,100,194,228,201,147,241,218,107,175,193,203,203, + 11, 19, 38, 76,240,157, 63,127,254, 79, 0, 26,149,129, 41, 21,139,197,235,238,220,185, 19,230,239,239, 47, 59,125,250, 52,234, +215,175,143,140,140, 12,164,164,164, 32, 63, 63, 31, 41, 41, 41, 24, 62,124,184,207,215, 95,127, 29,224,128, 38,203, 70,178,150, + 47, 95,158,189,101,203, 22,118,197,138, 21, 42,251, 5,118,241,197,117, 73,139,106, 7, 36, 91, 36, 18, 65, 46,151,107,178,179, +179,115,158,162,138, 36, 0,196,246, 36, 75, 34,145, 64, 34,145, 64, 42,149, 62, 85, 92,214, 23,100, 18, 15, 36,132, 92, 23,137, + 68, 18,185, 92, 46, 98, 24, 6, 18,137,164,179,135,135,199,181, 87, 94,121,165,238,254,253,251,227, 28,193,209,235,245,235, 36, + 18,137,208,199,199, 7, 0, 16, 22, 22,134,250,245,235,163,160,160,128,207,201,201,129, 70,163, 97, 30, 60,120, 0,157, 78,135, +228,228,100,132,132,132, 8, 25,134, 89, 7,224,213,146,240, 78, 94, 72, 94, 10, 96,169,245,222,219,219, 59, 21,128,204,122, 47, +149, 74, 17, 24, 24,136,196,196, 68,168, 84, 42,246,243,207, 63,239,181,113,227,198,158,132,144,193,148,210,245,118, 80, 51, 94, + 84, 27, 45, 43,201,178,127,125,140,104, 69, 71, 71, 79,223,181,107, 87,219,146, 38,178,162,253,218, 82, 53, 89,214,203,145,142, + 71, 8, 1,199,113,240,245,245,133, 92, 46,135, 92, 46,183,238,249,131,227,184, 39,240,139, 86,248, 78,103, 86,161, 80,224,173, +183,222,162, 63,252,240,195,152, 34,178,117,199,209,239,246, 89, 18, 99,211, 98, 21,151,218,181,107,159,250,228,147, 79,186,255, +241,199, 31,137,141, 67,171, 9, 20, 73, 15,242,165,106,141, 6, 65, 85,162,135,244,232,117, 25,143, 78, 31, 58, 42,119,242,242, +242,100, 53,130,228, 70,134,209,147, 42, 18,129,202, 95, 33,146,248,185,187, 7,138,140,134, 52,181,187,187,216, 96, 48,100, 3, +200, 42, 11, 68,173, 86,239,147, 72, 36, 33, 44,203,130,101, 89,120,121,121,185, 81, 74,161,209,104, 16, 20, 20,164,140,136,136, +184, 37, 16, 8,192, 48, 12,242,243,243, 31,220,191,127,191,115,121, 9,115,119,119,223, 39,145, 72, 66, 24,134, 1, 33, 4, 44, +203,218, 14, 46, 88,255,103, 89, 22,132, 16, 20, 22, 22, 58,132, 73, 41,189, 68, 8,137,138,142,142,182,145,173, 61,123,246,160, + 75,151, 46,200,206,206,198,181,107,215,236, 73,150, 67,219,134,246,198,239,148, 82,136, 68, 34,220,188,121,243,177, 45,109,235, +165, 82,169, 42,220,121, 60, 60, 60, 78,244,233,211, 7, 63,254,248, 35,165,148, 18, 0, 10, 66, 72,125, 55, 55,183,155,215,175, + 95,119,200, 14,134, 82, 10,147,233,239,143, 90,219,184,125,255,114,130, 76,119,110,212,168, 17,201,201,201,177, 18, 72,219,130, +136,101, 89,124,247,221,119,178,166, 77,155, 78,149, 74,165, 19, 69, 34, 81,174,217,108,254, 69,175,215,207,161,148,102, 63, 79, +131, 82,235,214,173, 63,136,143,143,127, 45, 36, 36,100,199, 83,144,120,218,164, 73, 19, 35, 0, 25,203,178,194, 74, 24, 40,217, +162,182,165,183,146,125, 74,169,165, 81,163, 70,250,162, 73,158,117, 20,203,203,203,235,167,221,187,119, 7,133,132,132,192,108, + 54,195, 98,177, 32, 63, 63, 31, 71,143, 30,133,193, 96,128,197, 98, 65, 88, 88, 24, 62,251,236, 51,253,251,239,191, 47, 93,182, +108, 89, 90,126,126,254,128,114, 96,223,223,188,121,179,194,223,223, 95,166,211,233, 16, 27, 27,139, 70,141, 26, 33, 47, 47, 15, + 5, 5, 5, 40, 44, 44,132,201,100, 66,110,110,174,134,227, 56, 99, 57, 88,211,236, 73,214,232,209,163,175,136,197,226, 70,239, +190,251, 46, 18, 18, 18,108,125,126,228,200,145,240,245,245, 45, 62,214, 59,197,180, 4, 2, 1, 36, 18, 9, 68, 34, 81,118, 72, + 72, 8, 8, 33,210,184,184,184,138,108,197,169, 1,228, 10,133, 66,177, 61,193,146, 72, 36, 56,115,230,204, 39, 98,177,184, 68, +109, 86, 89,237,199,153,251,231, 96, 34, 95, 36, 18,137, 36, 30, 30, 30, 34,187,121, 90,164, 84, 42,225,227,227,179, 4, 64, 87, + 7,243,221,208,195,195,195, 54,190, 55,104,208, 0,241,241,241,219,114,114,114, 6,165,165,165,129, 97,152,117, 12,195,244,180, +242,128,172,172, 44, 4, 7, 7, 55, 44, 13,175,101, 35,255, 49, 32,212,166,209,170, 93,211, 67, 89,108,158,130, 90,173,198,253, +251,247, 81, 80, 80, 64,111,223,190, 77,198,142, 29, 75,140, 70,227,106, 66,200,159,148,210,123,101,113,145, 23, 65, 42,100,163, +101, 45,224,210,136, 85,113,226,229, 8, 33, 50, 26,141,202, 70,141, 26,241,214, 9,220,122, 1, 32,165, 17,173, 34,205,129,211, + 34, 20, 10, 85, 99,199,142,205,251,225,135, 31, 70, 19, 66,150, 83, 74,111, 87,180, 0,119,108,249,217,247,203,207, 38,127,230, + 17, 80,173,198,196,137,211, 4,175,191,254,250,233,181,107,215,114, 30,181,186,118, 60,188,111,189,239, 55, 31, 78,218,179,123, +247,110,224,145, 97,180,163,114, 98,231,206,157,126, 19,222, 27,135,207, 62,122,127,175, 58,204, 75,172, 36, 30, 10,169,161, 32, + 93, 9,170,147,212,140,124,109,235,142, 29,201, 0, 46,148, 5, 34,147,201, 66,110,223,190, 29,102, 79, 36, 76, 38, 19, 52, 26, + 13,214,174, 93,235,173, 82,169,188,149, 74, 37, 4, 2, 1,234,215,175,239,168,198, 36,228,214,173, 91, 97, 42,149, 10,133,133, +133, 48, 24, 12, 48,155,205,224,121, 30,132, 16, 8,133, 66,136,197, 98, 40, 20, 10,167, 78,246,217,147,173, 61,123,246,160, 78, +157, 58,200,202,202, 66, 76, 76,140,211, 36,203, 94, 75,100,111,143, 37, 16, 8,240, 83,104, 40, 70, 38, 37,217, 8,204, 34, 55, + 55,124,198,243, 21,170,251,122,245,234,209,147, 39, 79, 98,239,222,189,232,214,173, 27,249,253,247,223, 77, 28,199,137, 18, 19, + 19, 29,214,142,241, 60,111, 75,171,117,220,182, 39, 88,206, 18, 45,139,197,162, 18,139,197,208,235,245,182,173,125,251,171,122, +245,234,208,106,181,130,220,220, 92, 65, 82, 82,146,124,246,236,217,239, 30, 57,114,196, 31, 64,255,127,115, 32,250,225,135, 31, + 66, 70,142, 28,249, 80, 32, 16,208, 46, 93,186, 12,124,240,224, 65, 15,127,127,255, 67,127,252,241,199, 87, 0,194,157,197,243, +246,246, 62, 47, 16, 8,130,148, 74,165,104,211,166, 77,230,188,188, 60,145,143,143, 79,170,149,216, 90,203,218,108, 54, 39,228, +228,228, 52,118, 4,207,219,219, 91,244,237,183,223,154, 51, 51, 51, 69,126,126,126,169, 86, 28,133, 66, 33,218,180,105,147, 57, + 55, 55, 87,164,209,104,206,103,103,103,151,139,151,145,145, 49, 96,240,224,193,199, 15, 29, 58,228,197,178, 44, 30, 60,120,128, +204,204, 76,104, 52, 26,172, 91,183, 14, 33, 33, 33,216,188,121,179, 86,171,213,142,248,223,255,254, 55, 53, 63, 63,223, 17, 87, + 15,109,154, 53,107, 22,146,157,157, 13,141, 70,131,130,130, 2,156, 63,127, 30,181,107,215, 70, 82, 82, 18, 24,134,129, 70,163, +193,247,223,127, 95, 72, 8,209,150, 51,118,244, 24, 53,106,148, 6, 0, 70,141, 26,165, 25, 53,106, 84,137, 19, 92,139, 22, 45, +176,100,201, 18,167, 22,213,197,181,236, 86, 82,100, 71,142,244, 45, 90,180,192,145, 35, 71, 38, 57, 67,142, 40,165, 70,161, 80, +248, 24,193,178,251,223,226,108, 27,226, 56, 78, 84,100, 35, 74, 28,185,127, 14,164,173, 76, 38, 19, 21,127,179,176,176, 80,228, +239,239,223,218, 9,226,235, 41,147, 61, 82, 56,133,132,132, 32, 39, 39,135, 51, 26,141,253,214,173, 91,103, 6,128, 70,141, 26, +245,227, 56, 78,111,177, 88, 88,177, 88,140,130,130, 2,248,248,248,120,150, 10,200,224,227,237,191,204,246, 43,110,163,229,239, +239,143,168,168, 40, 24, 12, 6, 36, 39, 39,227,232,209,163,102,142,227, 54,252,240,195, 15,188,183,183,247,176, 55,222,120,131, +189,112,225,194, 59, 0, 62, 40,139,139,188, 40,218,172,210,200,150,245,212, 97, 91, 0, 71, 0,180,179,102,210,126,235,176, 44, + 77,150, 51,171, 28,150,101,179, 19, 18, 18, 20, 10,133,194,246,158,217,108, 70, 64, 64, 0,207,243, 60, 41,254, 59, 21, 84, 81, + 63, 70,182,166, 76,153,146,253,253,247,223, 15,130,131, 6,229,155,222,137,196,218, 98, 36,107,233,151, 51,151,124,251,229,108, +143,187,123, 87, 99,197,226, 5, 28,199,225, 66,189,122,245, 90,231,231,231, 11,220, 20,102,100,100, 99, 15, 30,249,209,162, 14, + 86, 8, 3, 96,213,217,179,103, 47,116,237,218,245,228,170, 95,183,122, 36,197,198,254, 41,201,205, 72, 86,215, 12, 19,136, 2, + 67,122,230,233,245,162,126,253,250,121, 3,120,163, 44, 44,134, 97, 16, 27, 27,139,184,184, 56, 40,149, 74,168, 84, 42, 40,149, + 74,168,213,106,168, 84, 42,168, 84, 42,167,203,144, 97, 24,112, 28,135, 45, 91,182, 64, 46,151, 67,161, 80, 60,118, 89, 73,214, +211,212, 77,151, 46, 93,160,213,106,161, 84, 42,109,219,157,206,136,213, 70,203,104, 52,194,104, 52,194,100, 50,113, 0,132, 2, +129, 0,195, 19, 18,108, 90, 30,103, 8, 76,113,169, 95,191, 62,253,243,207, 63,113,242,228, 73, 20, 20, 20,224,219,111,191,133, +191,191,127, 7, 0,211,156,197,178, 51,210,231,114,115,115,133,185,185,185, 54,237,160, 80, 40,180,105, 15, 28,157, 28, 4, 2, +129,109, 53,106,189,236,181, 90, 44,203,194,215,215, 23,126,126,126, 88,186,116,169,168, 90,181,106,175,253,155,131,208,252,249, +243,107, 46, 90,180,104,229,218,181,107,247, 12, 24, 48, 96,227,213,171, 87,135,186,185,185, 93, 57,124,248,240,108,137, 68,194, + 87,176,127, 7, 37, 37, 37,249,216,191,197,243,188,220, 98,177,216,136,109, 97, 97, 33,234,214,173,235, 48,222,245,235,215,229, + 0, 48,123,246,108, 33, 0,185,213, 24,220,138, 89, 88, 88, 40,172, 93,187,182, 67,134,224,148,210, 91,132,144,214,157, 58,117, + 58,117,224,192, 1,247,144,144, 16, 36, 38, 38, 34, 49, 49, 17, 53,107,214,196,220,185,115, 11,114,115,115, 91, 22,145,171,223, + 29,204,118,128,187,187,187,240,225,195,135,176, 88, 44,104,216,176, 33,190,255,254,123,244,235,215, 15,117,235,214, 69,110,110, + 46,174, 95,191,142, 53,107,214,184,139, 68,162, 50,199, 14,157, 78,247,251,242,229,203,131,139,107,180, 6, 14, 28,168, 72, 77, + 77,181,181,201,153, 51,103, 62, 54, 46, 59,179,203, 80,180,181, 85,234, 85, 17,177, 88, 44,106,169, 84,154, 43,145, 72,196, 86, +251,172,163, 71,143, 58,173,205,178, 95, 0, 58,115,255,111,138,149,180, 22, 23,177, 88, 12, 63, 63, 63,135,113, 36, 18, 9,177, +142,141, 22,139, 5, 57, 57, 57,156,191,191,191,109,123,255,226,197,139, 92,213,170, 85, 57,150,101, 89,177, 88, 12, 66, 8,228, +114,121,169, 3, 62,229,232,204,215,251, 77,179,157, 58,100,132, 10,245,248, 41,143, 22,253, 23, 47, 94,132,201,100,194,209,163, + 71,205,255,251,223,255,146,178,179,179,199, 3, 16,236,219,183,111,240,164, 73,147, 88, 31, 31, 31,155, 29,109, 73, 92,228, 69, + 35, 91, 37,105,185,172,179,208,145,232,232,104, 82,116,180,146, 88, 9, 14,165,244, 9,114, 85, 26,241, 42,234,124,164,188, 78, +199,178, 44,246,238,221,107, 35, 4,214, 83,135,148, 82, 84, 54,209,242,244,244, 44,104,214,172,153, 58, 62, 62,254,231,138,106, +178,150,126, 57,115,201,188, 89,159,123,104,111,156, 70, 66, 82, 50,180,105,230, 11, 39,174,220,223, 6, 96, 27, 0, 96, 89,173, + 35, 24,125,227, 59, 71, 49,107,121,203, 27,212, 11, 80,109,123,185,235,107,193,125, 71,125,192,188,253,246,219,173, 6, 15, 30, +156, 51, 96,192,128,247,148, 74,101,184,201,100,202,218,186,107, 87, 92,223,190,125,171,113, 28, 55,184, 60,159, 35,102,179,249, + 65,175, 94,189,108,101,235,231,231,167,254,229,151, 95,124, 85, 42, 21, 6, 14, 28,152, 30, 23, 23,103,219, 46,202,203,203,123, +224, 72, 26, 77, 38,211,131, 6, 13, 26,148,186, 93,104,213, 72, 58,131, 89, 84,151,182,211,133,153,153,153,184,121,243, 38, 4, + 2, 1,154, 55,111,142, 19, 39, 78,160, 85,171, 86, 78,157, 56,212,235,245, 8, 9, 9,129, 94,175, 71, 65, 65, 65, 33, 0,201, +186,106,213, 0, 0,239,100,102,226,252,255,254,135,211,243,230, 85,168, 29, 53,104,208,128,158, 57,115, 6, 87,174, 92,129,193, + 96,192,136, 17, 35, 80,180,109, 8, 0,175, 56,145,231, 80, 63, 63,191, 46, 93,187,118, 13, 0,128,130,130, 2,114,246,236, 89, + 72,165, 82, 16, 66,144,156,156,140, 29, 59,118, 32, 49, 49, 17,132, 16,184,187,187, 7, 17, 66,170, 81, 74,239,151, 49, 49,144, +251,247,239,227,139, 47,190, 0,207,243,152, 52,105, 18,194,194,194,108, 4,235,193,131, 7,152, 61,123, 54, 56,142,195,231,159, +127,142,154, 53,107,194,108, 54, 75,157,241, 83, 86,217, 50, 97,194,132,187,219,182,109,219, 19, 31, 31,255,234,151, 95,126,217, +150, 16,194, 79,156, 56,241, 11,181, 90,205, 61, 13,110, 86, 78, 30,110,222,121, 96, 35, 66,197, 47,111, 47, 15,167,241,110,199, +198,219,190,207,113,246,120, 28, 60, 61,220,157, 77, 98,161,217,108, 46,232,217,179,167,102,203,150, 45,164,102,205,154,184,119, +239,158,117,113, 90, 88, 1,151, 14,137, 90,173, 54,140,101, 89,209,157, 59,119, 80,181,106, 85, 52,107,214, 12,115,230,204, 65, + 70, 70, 6, 44, 22, 11,124,124,124,120,179,217,124,209,104, 52, 30, 43, 7,107,230,232,209,163, 69, 0,198, 20,105,182,234,141, + 31, 63,158, 95,176, 96, 1, 46, 94,188,104, 27,143,237,141,225,157,221, 58,180,215, 58,217, 95, 71,143, 30,157, 36, 22,139, 41, +128, 51, 0,156, 34,218,148, 82, 99,149, 42, 85,138, 99, 91,158,151,201,246, 89,158,100,244,247,247, 63,170, 82,169, 94,203,202, +202,122, 76,171,213,178,101, 75,147,175,175,239,113, 71,113,148, 74,101, 22,203,178,158, 0,144,152,152, 8,133, 66, 33,138,141, +141,157, 71, 8,153, 12, 0,213,170, 85,155,167,213,106, 69,213,138,198, 83, 63, 63, 63, 24,141,198, 82,205, 88, 78, 93, 76, 89, + 13, 96,181,221,220,155,156,147,147, 35, 91,176, 96, 65,254,188,121,243,116, 28,199, 25, 0, 28,206,206,206,182,249,209,170, 90, +181,106,142, 80, 40,244,208,104, 52,129,118, 80, 79,112,145,255,194,246,161,189,195, 82, 90,194,151, 74,212,100,149, 68,182, 28, +209, 74, 16, 66,160,211,233, 30,211,142, 88, 79, 29,150, 68,180,138, 38,244, 10,109, 29, 22,145, 44,217, 47,191,252,178, 97,241, +226,197, 39, 29,253,158,189,141,214,178,175,102,125,105, 37, 89,151, 79, 30,192,239, 49, 57, 25,147,230, 45, 92, 84,209, 74,168, +237,173,168,239,231,235,117,228,127,115,103,170,239,238, 93,131,141,203,190,166,151,207,157,107,122,238,220,185, 65,227,198,141, +171, 82,212,176,180, 0,254, 2,208,215,145, 83, 58,233,233,233,143,217, 71,133,133,133,221,210,104, 52,190, 82,169, 20,177,177, +177,249,215,174, 93,115,122, 75,166, 56,102, 37, 49,253,199, 72,214,181,107,215,208,190,125,123, 0,192,137, 19, 39,208,178,101, + 75,167,200,150,217,108,206,174, 85,171,150, 77,187,149,147,147,195, 3,192,168,228,100, 44,247,247,135, 64, 32,192,233,121,243, +240,169,217,140, 57, 66,231, 76,119, 26, 54,108, 72,207,157, 59,135,184,184, 56, 88, 44, 22,116,239,222,221,158,100, 57,147,231, +186,145,145,145, 7, 15, 31, 62,236,173, 84, 42, 81, 80, 80,128,252,252,124, 12, 25, 50, 4,253,250,245,131,193, 96,192,166, 77, +155,176,125,251,118,168, 84, 42, 20, 20, 20,160,160,160,192, 61, 58, 58,250, 20, 33,164, 77,105,182,133,148, 82,218,185,115,103, + 28, 63,126, 28, 44,203,162,105,211,166,200,204,180, 29, 6,130,175,175,111, 73,207,216,162,254,254,175, 76, 72, 2,129,128, 30, + 61,122,244,203,182,109,219, 34, 62, 62,254,213, 70,141, 26,125, 59,116,232,208,196,167,197,117,119, 83,161, 65,237, 80, 24, 12, + 6, 24, 12, 6, 4, 4, 4, 32, 47, 47, 15,119,239,222,133,193, 96,128,175,143,198,105,188,168,186, 53,109,120, 62, 62, 62, 40, + 40, 40,192,253,251,247, 97, 52, 26,225,229,229,238, 76,253, 7,119,238,220,249,143, 13, 27, 54,120,174, 89,179,198,216,174, 93, + 59,241,183,223,126, 75,212,106, 53,210,210,210, 42,154,229,163, 39, 78,156, 8,233,212,169, 83,196,141, 27, 55,112,244,232, 81, + 24,141, 70, 68, 69, 69,225,246,237,219,104,209,162, 5,242,243,243,207,156, 59,119,110,187, 3,147, 2, 79, 8,153, 58,122,244, +104, 88,201,214,241,227,199,145,156,156, 12,149, 74,245, 4,209,178,218, 62,138,197, 98, 0, 8,112, 80,115, 98, 59, 21, 88,164, +121,250, 84,163,209,152, 0, 44,122,154,182,248,240,225, 67, 73,253,250,245, 13, 82,169, 84, 92, 68,218, 22,254, 91,109,187,132, +122,127,170,147,140,101,137,159,159,223,120, 47, 47,175, 78,213,171, 87, 71,106,106,170, 72, 44, 22,163,101,203,150,166, 38, 77, +154,152,252,252,252,222,113, 20, 71, 34,145,220, 16,137, 68,109, 30, 45, 38, 56, 60,124,248, 16,148,210, 73,117,235,214,125, 63, + 47, 47, 15,153,153,153, 98,181, 90,109, 91, 84, 71, 68, 68,192, 96, 48,220,112,130,108,206,172, 90,181,234, 84,145, 72, 52, 39, + 61, 61,253,135, 18,202, 72,220,160, 65, 3,181, 72, 36,130,201,100,122,140,108,150,196, 69, 94,100,146,245, 24,209,178, 99,145, +197,213,233,229,110, 27, 58,106,163, 69, 8,129,209,104,132, 66,161,176,109, 73,217,123,130, 47,137,104, 85, 68,130,131,131,209, +172, 89, 51,217,198,141, 27,127, 90,176, 96,193,169,138, 96,108,222,176,222,223,141, 47, 12, 78, 58,179, 27,183,174, 92,192,182, +235,217, 25,147,230, 45,124,239,245, 55,250,167, 22, 39,102,155, 70,151,143, 23,238,163,168, 27,232,235,121,228,171,249,243,212, +218, 27,167,145,156,146,130,221,103,206, 93, 48, 82,122, 29,192,164,202,170,108,251,211,107, 21, 37,169,207, 96,224,177,185,119, +200,200,200,192,245,235,215,173, 36, 43, 10, 0, 90,181,106,117,209, 74,182, 46, 92,184,128, 70,141, 26, 61,225,222,225, 9,205, + 67, 86,214,220, 98,191,209, 9,128,151,149,240, 11, 4, 2,180,156, 58,213,105,146, 69, 8,161, 28,199, 65,171,213, 90, 87,138, + 21, 34, 89, 69,131,226, 71,135, 15, 31,246, 94,181,106, 85,238,218,181,107, 51,121,158, 23, 54,104,208, 32,168,113,227,198,100, +221,186,117, 0,128,190,125,251, 98,210,164, 73,184,118,237, 26, 20, 10, 5, 90,181,106,197, 77,159, 62,221,103,252,248,241,239, +224,145,159,164, 39,132,227, 56, 81,181,106,213, 14, 1,232,112,227,198, 13, 0, 56, 69, 41,109,105,125, 94,214, 51, 7,132,207, +203,203, 19,170, 84,170, 18, 93, 67,136, 30, 29,235,116,118,171,207,134,121,242,228,201, 47,190,250,234,171,109, 31,126,248,225, +157,167,196, 44, 81,163,245,218,107,175, 65,103, 48, 33, 33, 53, 7, 28,103,129,206,148,230, 52,158,189, 70,235,181,215, 94, 67, +161,222,136,135,201, 90, 88, 44, 28,242,116, 22, 71,219,145,252,229,151, 95,222,247,203, 47,191,248,253,249,231,159,224, 56,142, +191,125,251,246,253,158, 61,123,170, 39, 78,156,232,105,103,131,234,172, 44,238,223,191,127,239,147, 39, 79,106, 35, 34, 34, 60, +206,156, 57,131,180,180, 52, 88, 44, 22,116,232,208, 1, 98,177,248,225,188,121,243, 68, 0, 22, 59, 56, 57, 88,201,150,233,220, +185,115, 35, 79,159, 62,237,225,225,225, 33,230, 35, 35,145,124,224, 0,182,108,217,242,196,119,150, 45, 91, 6, 0, 14,121,225, +183,106,156,206,158, 61, 91, 41, 4,171,248,118, 89, 69,183, 31, 95, 84, 57,115,230, 76,226,184,113,227,106,171,213,234, 69,173, + 91,183,110,239,233,233,201,184,187,187, 31, 13, 12, 12,124,191,126,253,250, 15,156,152, 39,134, 42, 20,138,187, 22,139,133,205, +207,207, 71, 65, 65, 1, 0,192, 98,177,136, 25,134, 65,181,106,213,108,202,147,166, 77,155,194,207,207,143,139,137,137, 25,234, + 40,126, 90, 90,218, 99,167, 16, 75,144,209, 45, 91,182, 20, 24, 12, 6,196,197,197,157,176,127, 80, 26, 23,121,222,165, 66, 65, +165, 25,134, 1,165, 20,210,198,141, 75,237,112, 37,116, 62, 82,124,242,179,247,181, 97, 61, 93, 56,114,228, 72,219,103, 46, 92, +184, 96, 51,138,239,222,189,251, 99,152,103,207,158,125,130,108, 57, 18, 49, 60, 45, 45,237,198,166, 77,155,206,205,159, 63,255, +140,131, 5,100,195,180,218,104,245,126,107, 96,242,146, 47, 62,187,186,118,199,225,186,201, 58,154, 60,105,222,194, 15,139,147, + 44, 71, 49,107,249, 41,107, 5,249,120, 30, 93, 48,127,158,155, 85, 59,246,203,197,148, 28, 88,232,104, 39, 43,178,220,188,219, +107, 22, 9, 33,124,101, 96, 86,160,193, 61,134,105,239,222, 33, 57, 57,217, 70,178,236, 28,150, 70,181,106,213,234, 98, 17,201, +178, 62,179, 84, 36,157, 2,129, 0, 31,230,231, 67, 32, 16,160,221,140, 25,232, 48,107,150,211,121,231, 56, 14, 2,129, 0, 97, + 97, 97, 78,147, 44,123, 76, 66, 72,203,194,194, 66,172, 89,179, 38,239,206,157, 59,161,213,171, 87, 31,191,122,245,234,133,114, +185,252,177,239, 20, 22, 22,226,245,215, 95,199, 15, 63,252,128,206,157, 59,155,135, 14, 29, 42, 97, 24,166, 83, 89,233,140,139, +139, 27,221,177, 99,199,101,122,189, 94,144,153,153, 57,218,209,103,229,229,125,211,166, 77,119,194,194,194,218,162,116, 23, 14, + 60,128, 63,159, 6,115,209,162, 69, 0, 16,241, 52,152,165,105,180,126,253,245, 87,240, 60,143, 96, 63, 13, 12, 6, 3,138,151, +117,121,152,197, 53, 90, 27, 55,110, 4,207,243,168,226,239, 1,163,209, 8,171, 1,113,121,152,158,158,158, 95,175, 93,187, 54, + 40, 38, 38, 6, 9, 9, 9, 88,184,112,225,131,236,236,236,174,217,217,217,146,233,211,167, 31,121,235,173,183,124,121,158, 55, + 56,219, 55, 41,165, 6, 66,200,208,151, 94,122,105,221,236,217,179,239, 69, 70, 70, 86,105,217,178,165, 38, 51, 51, 51,253,210, +165, 75,247,151, 45, 91,166,180, 88, 44, 67, 75,219,146, 42, 5,147, 7, 48,157, 16,242,131, 70,163,217, 22, 23, 23,215,180,102, + 86, 22, 27, 64, 8,154, 54,109,250,152,233, 0,195, 48, 56,126,252, 56,120,158,191,235, 72,121, 38, 38, 38,206, 40,210,166, 58, + 69,176, 28,233,239,103,207,158,157, 82,132,125,206, 17,236,127, 98,172,179,106,156,157,185,119, 54,157,223,125,247, 93, 2,138, +249, 71,115, 54,157,103,207,158,141,235,212,169,211, 44, 95, 95,223,233, 82,169, 20,233,233,143,130, 29, 88, 53,143,214,249,186, +113,227,198,232,220,185, 51,110,221,186, 53,107,234,212,169,113, 79, 83,158, 69, 11,238, 80, 0,131, 58,118,236, 56,177,119,239, +222,248,238,187,239, 64, 41, 93,249, 95, 32,193,229, 6,149,142,142,142, 38,246,175, 69, 91, 51,241,119,239,222,245,183,239,112, +246, 49, 10,173,157,206,106, 80,119,236,216, 49,139,125,231, 43,101, 37, 30,127,242,228, 73,223, 3, 7, 14, 8,173, 21, 90,100, +212,201, 39, 37, 37, 49, 71,142, 28,177,105,199, 4, 2, 1,142, 30, 61,106, 49,153, 76, 15,157,205,240,173, 91,183, 22, 87, 70, +193, 29,187, 22,247,254,190,221,191,121, 53,111,214, 58, 91,237,225, 81, 98, 71,182,122,144, 47,179,129, 9,152, 57, 95,206,157, +169,177,146,172, 95, 47,166,100,235, 13, 92,251, 27,233,133,151, 43,187,178,243,242,242,226,172,167, 11,243,243,243, 31, 62, 71, +141,240, 18, 33, 36,202,223,223,255, 34,138,157, 46,180, 62,107,212,168,209, 19,207,156, 82,155,240, 60,220,220,220,108,131,132, +179,118, 89,132, 16,106,221,202, 46, 74, 23,121,202, 60,159,188,122,245,106,213, 33, 67,134,168,194,194,194, 98, 9, 33,194,225, +195,135,155,252,252,252, 68, 39, 78,156, 48, 3, 32,109,219,182, 21,164,164,164,208,196,196, 68,109,183,110,221,242, 70,142, 28, +233,249,215, 95,127,137,121,158, 63, 88, 14,246, 61, 0, 29,157,125, 86,158,244,238,221, 59, 22, 37, 56, 14,125, 26,121, 22,152, + 86,209,102,231, 34, 54, 46,177,200,131, 57, 15,238, 65,170,205,174,202,108,182, 64,155,155,233,180, 70,235,238,253,196,162,144, + 99, 28, 56, 46,169, 8,239,145, 65, 60,205, 42,116, 68, 91,208,106,209,162, 69, 93, 25,134, 97, 78,159, 62,109,152, 63,127,126, +124,122,122,122,119, 74,233,195,162,118,214,110,205,154, 53, 63, 57,224,202,161,180,186,191, 78, 8,105,241,241,199, 31,191, 7, +160, 21,128, 42, 0, 30, 2, 56, 1, 96,113, 69, 61,152, 83, 74,211, 8, 33,175,116,237,218,245, 0,203,178,213,236,250,145, 23, +128, 12,187,126,225,147,154,154,250,170,131,176, 11,159,225,176,178, 16,207,161,188, 40, 39, 25, 15, 30, 60, 56,163, 71,143, 30, +130,144,144,144, 79, 66, 66, 66,152,172,172, 44,228,231,231,131, 97, 24,248,249,249,161, 78,157, 58,240,243,243,227,111,220,184, + 49,247,227,143, 63, 46,215, 39, 95,237,218,181, 67,205,102,115, 13,134, 97, 66, 1,132, 82, 74, 67, 9, 33,161, 0, 60,138, 52, + 99,234,170, 85,171, 10,154, 55,111,142,102,205,154,225,200,145, 35,216,188,121,243,106, 74,233, 62,123,109, 86,113, 46,242, 60, +200,245,198,164, 45,225,113,132, 50,104, 87,251, 60, 61,122, 35,138,208, 90, 23,159,156, 31,202, 13, 42,253,196,128,147,149,213, +185,132, 14,103, 15,248,216, 43,207,243,113,229,117,190,172,172,172,206,239,191,255,254, 1,150,101,171, 89, 53, 85, 22,139,197, +160,213,106,223,110,215,174,221,247, 66,161, 80, 98,143,203,243,252,131,212,212,212,127, 52, 86, 95,113, 63, 90,157,187,246,200, +120, 90, 76,165,136,169,113,107,215,143, 72, 77,203,192,175, 23, 83,178,242,140, 92,187, 91,233, 5, 87,159, 69,250,227,226,226, +186, 60,199,140,255, 82,105, 91,130,101, 61,115, 80,210, 29,112, 72,154, 94, 78,250, 72, 17,217,170,148, 78,158,146,146,178, 96, +234,212,169,175,204,157, 59,215,123,207,158, 61,234,162,223, 64,175, 94,189,210,174, 94,189,218, 26,128, 68,175,215, 31,156, 59, +119,174,247,204,153, 51, 61, 1,120, 22, 13, 50,169,169,169,169, 75,224,146, 50,197,108, 54, 39,212,169, 21, 97,173,187,199, 92, + 58,216,255,111,177, 88, 18,156,193, 43, 9,199,254,158,227,184,132,114,180,202, 31, 54,107,214,140,253,240,195, 15, 83,247,236, +217, 99, 13,164, 91,104,215,206,110,161, 12,167,164, 14,246, 37, 3,128,249, 69, 87,101,246,209, 2, 0, 45, 92,173,235,233,199, + 58,103,238,255, 45,249,237,183,223,166,245,235,215,111,141,135,135,199,250,208,208,208, 8, 95, 95, 95,181, 76, 38,131,193, 96, +200, 51, 26,141, 55,111,221,186, 53, 96,234,212,169,247, 28,193, 90,179,102, 13, 11, 64,196,243,188,148, 97, 24, 5, 0, 53, 33, +196,221, 74,180, 8, 33, 48,153, 76,136,139,139,195,167,159,126,202, 29, 58,116,232,127, 0, 62,119, 34,185, 77, 0,120,219,141, +227,222, 0,140,120,228,192, 54,189, 72,179,249, 76,132,240, 56, 82,235, 34, 37, 55,162, 72,169, 70,250,229, 6,149,254,167, 58, + 92, 57,152, 33,207, 75, 39, 25,108,152,255, 51,150,205,127, 44,206,161,149,132,149,120, 95,206, 6, 96,142,206, 50,110,241,190, +107, 11, 12, 22,202,155, 44,252,176, 91,105, 5,215,255, 31, 15, 64,150,138, 60,115, 0,247,229, 74, 74, 31,169,196,188, 94, 37, +132,188, 52,110,220,184,105,114,185,188, 41, 0, 20, 22, 22,158, 78, 74, 74,154,101, 61, 85, 88,222,115,151,148,193,154,211,211, + 27, 63,143,120, 70,163,241,253,151, 94,122,233, 27,142,227,190, 50,155,205, 39, 92, 53,229,146,231, 89,126,253,245,215,123,214, +121,185, 79,159, 62, 44, 0,108,218,180,201,233,211,192, 67,134, 12,225,138, 2,153,235, 1, 20, 0,200,197, 35,135,219, 4, 0, + 10, 10, 10,178,146,146,146,110,112, 28,119, 3,192, 79, 21, 56,113,235, 77, 8,217, 73, 41,125,173,104,236,220, 73, 41,125,205, +254,189,103, 45,118,100,171,164,241,190,124, 99,120,151, 60,146, 77,215,254,158,104,139, 19,168,242,238, 75,147,155, 41,249, 71, +159,118, 5,235,146, 23,150, 88,198, 2, 24, 92,209,231, 46,121, 33,235,252, 33,128,238,174,146,112,201, 11, 55,255, 85,128, 96, + 89,229,250,245,235,207,204, 68,224,223, 22,251,109,194,146,182, 12,173, 82,146, 54,203, 69,180, 92,226, 18,151,184,196, 37, 46, +113,137, 75,202, 34,145, 69, 54, 90, 54, 18, 85,100,171, 85,156,100,217,147, 43,251,123, 2,160, 83, 41,171, 50,103, 78, 19,116, +170,192,170,239,160, 11,211,133,233,194,116, 97,186, 48, 93,152, 46,204,255, 95,152, 21,148,232,114,182, 14,119, 61, 43,162,101, + 53,126,191, 30, 69,166,215,190, 72,167,151,100, 12, 95, 22,209,122,204,216,179,178, 47, 0,157, 92,152, 46, 76, 23,166, 11,211, +133,233,194,116, 97,186, 48,159,242,106, 63,121,242,228, 41,120, 20,255,152, 78,158, 60,121, 10,165, 52,250, 17,141,161,209,207, +242,183,175, 53, 66,219,235, 13, 65,173,215,181, 70,104, 91, 74,153,140,178, 94,246,239,187,182, 14, 93,226, 18,151,184,196, 37, + 46,113,201,243, 46,167,230,205,155, 87, 56,111,222, 60,171,225,123, 58, 0, 82,164,205, 74,127,150, 63, 92,180, 77, 88,238, 65, +169,114, 67,240,252,211, 66, 8, 9, 96, 4,162,129, 66,145,164, 61, 40, 95, 7, 0,192,176,215, 56,163,254, 15,139,197,180,158, + 82,154, 84, 81,236, 90,132,212,170,169,145,109, 55,112,156, 40, 62,207,216,251, 6,165,103, 43,130,211,135,144,150, 18,177,120, +191, 68,163, 41,209, 75,161, 33, 59, 91,103, 48, 26, 95,217, 68,233, 73, 87, 31,112,137, 75, 92,226, 18,151,188, 8, 66, 8, 81, +184,187,187, 31, 98, 24, 38,196,238, 61,148,244, 63, 0,112, 28,151,172,213,106, 95,161,148,102,252,147,152,197,196, 8,224,236, +243, 80,126,206,110, 29, 10,128,199, 98, 11,149, 27, 49, 59,210, 95,217, 58, 34, 52,100, 67, 82, 74,234,197, 92,189,113,248,205, +196, 60,173,179,137, 20,136,164, 35, 53, 94,126,115,222, 28,250,190,103, 88,120, 4, 9, 14, 14, 4, 40,240, 48, 62,193,247,238, +157,219, 29, 55,174, 93, 60, 65, 36,149,126,106,210,235,127,116,154,121, 18,162, 8, 81, 74, 78,252, 56,249, 45,141, 0, 22,244, +159,189, 97,111,109, 66,130,175, 63,114, 45,225, 20,201,210,120,122,238,155,119,240,160,204,189,200, 1,168, 29,107,125, 20, 95, +239,242,101,217, 39,175,188,178,175, 15, 33,157, 93,100,235, 63, 57, 24,249,169,213,234,241, 66,161,176,157,201,100, 10, 17,139, +197,241, 28,199, 29,205,202,202, 90, 68, 41, 77,116,149,144, 75, 92, 82,110, 31, 42, 53,144,249,191, 25,228, 28, 0, 84, 42,213, +121,134, 97,130,236, 73,128,213,191, 99,113, 63,145,118,254, 34,239,101,102,102,190, 84, 70,126, 67, 61, 60, 60,190, 7,208,164, + 60,135,201, 69, 91, 77,231,180, 90,237,219, 69,167,143, 75,194, 83,185,187,187,207, 32,132,244, 97, 24,166,220,128,194, 60,207, +115,148,210, 77, 89, 89, 89,159, 83, 74,243, 74,251,156,187,187,251,193,152,152,152, 38, 62, 62, 62,229,106,105, 44, 22, 11, 30, + 62,124,232,221,180,105,211, 99, 0, 34,159, 37,166, 51, 92,228,223,148,178, 78, 30,150,200,121,172,255, 56, 26, 49,155,231, 49, +112,213,156,183, 3,147, 31,220, 9, 28, 61,247,231,240, 72, 47,121,187,152,140,194, 20, 71,127, 80, 44, 83,109,111,213,225,181, +246, 99,223,251, 80,113,233,234, 77,236, 63,242, 39,114, 11, 12, 96, 25, 6, 26,149, 28,225,225, 53,200,194,229, 91,188, 86, 47, + 93,248,149, 76,169,137,214,229,103,119,115, 38, 67, 10,185,224,211, 73, 61,155, 42, 60, 61, 56,128,231,240, 81,215, 6,138, 79, +118, 94,252, 20,192, 20,167, 73,214,161, 67,242,180,212, 84,204, 12, 8,128,192, 98,129,148, 97, 32, 37, 4, 82,134,129, 66, 42, + 69,151,149, 43, 49,107,207, 30,249,180, 87, 95,117,145,173,255,152,168, 84,170,161,225,225,225,243, 87,172, 88,225, 89,189,122, +117, 40, 20, 10,104,181, 90,175, 91,183,110, 53,252,224,131, 15, 6,187,185,185, 77,205,201,201, 89,230, 42, 41,151,184,164, 84, +210,209, 16, 64,137, 65,226,203,122,246, 79, 9,195, 48, 65,137,137,137, 62,114,185, 28, 28,199, 21, 69, 3,224,109, 11,105,251, + 72, 57, 69,142,106, 17, 25, 25,105, 42,103,220,248, 46, 45, 45,173,147,125, 40,180,178, 34,238, 36, 38, 38,118,170, 93,187,246, +119, 0, 94, 41,133,188,204,120,239,189,247,198,215,173, 91,215,170, 5, 42,138,130,240,232, 53, 35, 35, 3,227,198,141,179,253, + 6,207,243, 56,112,224,192,123, 67,135, 14, 5,128, 15,202,200,123,136,143,143, 15, 41, 10, 40, 94,170, 76,159, 62, 29,211,167, + 79,199,226,197,139,137, 80, 40,212,148, 83,158,149,130,233, 40, 23,249, 55, 52, 88,197, 61,196, 23,251,216,174, 98,241, 14,119, + 61, 65,180, 28,110,156,148,223, 61,123,209,138,225, 51,135,180, 34,171, 62,232, 20, 54,102,241,193, 63,107, 7,200,218, 92, 79, +210,197, 59,160,201, 26,214,188,205,171,237,198,141,159,164,248,249,183,195,184,117,227, 50, 98, 78,252,242,216,103, 26,191, 50, + 20, 41, 25,121, 24, 58,246, 35, 37, 97, 5,237, 68, 82,249, 48,147,190,112,149,131,218, 44,223,218, 30,242,119,155, 55,173, 35, + 76,148,221,130,159,187, 12,173, 26,213, 20, 6,239,187,242,110,109, 66,190,185, 78,105,185,177, 10,139,147,172, 21,111,189,133, +214,102, 51,124, 88, 22, 44, 33, 96, 1, 48,132, 64,111, 48,224,220,192,129,104,186,110, 29, 62,223,177, 67, 62,227,245,215,157, + 38, 91,114,185,124,181, 78,167,251,178, 2,142,219,254,205,193, 51, 92,165, 82,125,154,155,155, 59,240, 57, 74,147, 63,128,244, + 18,226, 35,138, 0,104, 40,165, 78, 69, 22,150, 74,165, 35,251,247,239,191,112,201,146, 37,242,212,212, 84, 36, 37, 37,129,227, + 56, 72,165, 82,132,133,133,145,131, 7, 15,122, 78,154, 52,105,129, 90,173,150,228,230,230,126,227, 68, 58, 25,161, 80, 56,196, +195,195,163,135,175,175,175, 79,122,122,122,122, 86, 86,214, 14,131,193,176,170,162, 43,251, 34,204, 1, 85,171, 86,237, 17, 16, + 16,224,155,152,152,152,145,144,144,176,221, 96, 48,172, 46,138, 97,247, 52,101, 90, 31, 69,222,234, 1, 36, 87,173, 90,245,218, +253,251,247,211, 42, 17, 51,169,106,213,170,215,157,197, 36,132, 40, 0,108, 4, 16, 80,206, 71,147, 0,244,165, 78,106,179, 93, + 82,121, 36,171, 40,164,213, 99,132,170,172,103,255,180,200,100, 50,252,242,203, 47, 16, 10,133, 16, 10,133,200,202,202, 66, 80, + 80,144,237, 94, 36, 18,217,254,175, 82,165, 74,185,120, 28,199, 53,101, 89, 22,249,249,249,224, 56,206,118,101,103,103,131, 82, + 10,137, 68, 2,142,123, 20,206,201,238,121,211, 50,202,177, 79, 64, 64, 0,126,254,249,103, 24,141,198, 39,158,171,213,106, 92, +189,250,119,144, 17,150,101,209,172, 89, 51,134, 16,210,167, 44,162, 69,200, 35,167,155,163, 70,141, 2,203,178,143,197,179,180, +191, 56,142,195,244,233,211, 97, 31,154,236,159,196,124,238,218,117, 25, 30,226, 41,165,201, 0, 74,180,209, 98,202, 2,141,244, + 83,190, 61,225,173,151, 11,167, 14,143,166,159, 12,126,133,126,252, 86, 59,250,106,155,122,191,177, 2, 1, 57,115,253, 33,130, +220,128,213,227,154,132, 4,123, 41,174,214,245, 84,133,151,160, 26,181, 15, 40, 29, 32, 87,168,191,120,251,253,143,148,187,142, + 93,193,195,248,135, 79,144, 44, 0, 56,191,127, 53,146,147, 18,113, 49, 38, 1, 3,134,189,163, 84,171, 53, 95, 16, 66, 2, 74, +194, 44, 46,110, 42,209,255, 38,247,109, 37,205, 55, 39, 33,207, 29, 96, 67,197, 16,202, 11, 48,233,181,250, 18,181, 74, 52,191, + 12, 21,174, 13, 83, 34, 22,239,159,119,240,160,141,100,181, 52, 24, 32,225, 56, 88, 56,206, 70,178,140, 22, 11,116, 70, 35,252, +243,243,113,119,232, 80, 80,179, 25, 83,183,109,147, 75,196,226,253,142,164,211,110, 5,208, 85,173, 86, 31, 33,132,132, 59, 82, +201,207,226,200,172,147,110, 60,194, 85, 42,213, 17, 66,200,171,207, 67, 58, 9, 33, 12, 33,100,246,240,225,195, 47,212,168, 81, +227,112, 17,177,178, 62, 19,212,168, 81,227,224,240,225,195, 47, 17, 66,166, 19, 66, 24, 7, 49, 3, 3, 2, 2,230, 44, 89,178, + 68,126,251,246,109, 36, 38, 38,194,108, 54,163,127,255,254,224, 56, 14, 58,157, 14, 70,163, 17, 95,126,249,165,194,211,211,243, + 83, 66, 72,136, 35,121, 39,132,176,110,110,110,107,214,174, 93, 59,234,254,253,251,126,127,252,241, 7,115,229,202, 21,223,175, +190,250,106,168,167,167,231,186,162,128,171, 78,149, 39, 33,132,241,247,247, 95,245,251,239,191,191,125,245,234,213,160,173, 91, +183, 10, 79,159, 62,237,191,116,233,210, 17,254,254,254,235, 8, 33,108, 69,234,136, 16,210, 80, 46,151,119,156, 56,113, 34,127, +234,212,169,196, 83,167, 78, 37, 46, 92,184, 16,173, 91,183,110, 57,107,214,172,168, 10, 98, 54, 82,169, 84, 29, 38, 78,156,200, + 31, 63,126, 60,233,204,153, 51, 9, 11, 22, 44, 96, 58,116,232,208,106,238,220,185,245,157,196,220,120,234,212,169,182,241,241, +241,213, 19, 18, 18,170, 37, 36, 36, 84, 77, 72, 72,168,154,152,152, 24,146,156,156, 92, 37, 37, 37, 37, 56, 45, 45, 45,248,232, +209,163,173, 0,108,120,222,250,209,127, 29,179,168, 45, 95,164,148, 66,171,213, 98,215,174, 93, 40,210, 94, 53,180, 39, 89,185, +185,185, 72, 78, 78,182, 62, 19,252, 11,233, 4,199,113, 54, 34,117,224,192, 1, 12, 31, 62, 28, 90,173,214,246,158, 64, 32,176, +253,111,253, 78,121,152, 86,205, 19,199,113, 56,115,230, 12, 70,143, 30,141,133, 11, 23, 98,195,134, 13,216,185,115, 39,180, 90, +173,141,108, 89, 44,150,114, 49, 51, 50, 50,192,243,188,163,121, 68, 78, 78,142,195,245,110, 79,128, 4, 2,193, 19,164,200,122, + 57,211,150,158, 6,243,121,150,210, 60,194, 59, 34,182,198, 93,164,170,107,103,255, 48,162,170,223,167,243,199,247,145,129, 51, +129,154,117,128,169, 16, 48,229,131, 55, 22,130,136,100,128, 89, 7,111,137, 22, 27,199, 70,168, 63,254, 57,246, 70, 45,111,117, +244,141,244,220,189, 37,146, 10,129,104, 64,159, 33,239,121, 38,164,229, 34, 49, 53, 7, 44,243,247,188, 23,213,105, 8, 4, 44, +131,179,251, 30, 41,174, 24,150, 69, 78,129, 1,217,249, 38,244, 30, 50,222,227,199,133,159, 13, 0,240,101, 89, 25,169, 71, 72, + 88,139, 0,143,158,181,107, 87, 97,110, 72, 98, 16,245,234, 9,112, 60, 64,143,191,142,134, 89, 62,108,228,126,113,207,122,132, +204,185, 66,233,237,178,112, 36, 26,141,204,189,126,125,204, 12, 8, 64, 27,179, 25, 34, 74,241,114,106, 42, 46,143, 31, 15,195, +150, 45, 96, 0,136,222,120, 3,237, 23, 45,194,177,128, 0,248,233,116,200,158, 48, 1,222,123,247, 66,164, 86,203,156, 41,124, +145, 72,100, 90,177, 98, 69,192,136, 17, 35,142, 16, 66,218, 61,207,154, 45, 66, 72,184,135,135,199,145, 47,190,248,194,119,218, +180,105,201,149,132,233,171, 80, 40, 54, 21, 20, 20,140,119,118, 69, 91, 68,156,102, 47, 91,182,108,204,168, 81,163, 52, 35, 70, +140,160,119,239,222,213, 0,176,106, 71,188, 91,183,110, 93, 99,197,138, 21,126, 77,154, 52,121,111,244,232,209, 34, 66,200,212, +242,180, 60, 74,165,114,236,138, 21, 43,188, 50, 50, 50,144,159,159,111, 27,100, 19, 18, 18, 32,147,201,108, 65,213,133, 66, 33, +190,248,226, 11,207,177, 99,199,142, 7, 48,190,188,244, 74, 36,146, 33,223,127,255,125,205,206,157, 59, 11,226,226,226,192, 48, + 12, 36, 18, 9,222,122,235, 45, 97, 97, 97, 97,200,204,153, 51, 71, 1,248,222,153, 50, 16, 10,133, 3,150, 47, 95, 30,222,178, +101, 75, 65, 76, 76, 12, 90,180,104,129,179,103,207,226,141, 55,222, 16,230,229,229, 85,155, 52,105,210,240,210, 86, 88,101,105, +157,228,114,121,221, 63,254,248, 35, 62, 56, 56,216, 54,176, 84,171, 86,141,139,142,142,214,198,196,196, 68,252,249,231,159,153, + 45, 90,180,120,232, 4,102,160, 92, 46,143,220,189,123,119,242,204,153, 51, 59, 46, 91,182,172, 59, 0, 52,109,218,116,251,172, + 89,179, 14,107,181,218, 58,199,143, 31,215,182,110,221, 58,193, 65,200, 0,127,127,127,110,220,184,113,202,178, 62,180,114,229, +202,108, 0, 85, 8, 33,213,139, 2,109,187,228, 31, 16, 74,169,133, 16, 18, 69, 8,185,184,107,215, 46, 52,107,214, 12,187,118, +237, 66,116,116,244, 69,123, 50,112,245,234, 85,180,105,211, 6,120, 20, 72,254, 95,177,213,226, 56, 14, 2,129, 0, 9, 9, 9, + 88,185,114, 37,230,206,157,139,176,176, 48,152,205,230, 39,200, 86, 17, 33,114, 72, 5, 99,177, 88,112,238,220, 57,172, 95,183, + 14, 83, 63,253, 20, 42,149, 10, 0, 96, 50,153,160,205,202,130, 84, 42,181,145,177,114,202,114,211,157, 59,119,198, 7, 5, 5, + 61,182,101,104,125, 45, 26,179,192,243, 60, 44, 22, 11,244,122, 61, 22, 46, 92,104,161,148,110, 42,167, 79,218, 72,209,248,241, +227, 97, 48,252, 29,135,188,126,145, 77,114,213,170, 85,209,160, 65, 3,219, 61,195, 48,212, 81,204, 31, 95,170, 11,157,221,167, + 35,166, 47, 0, 0, 4, 5, 5, 33, 34, 34, 2,254,254,254,165, 98,150,196, 69,254,109, 41,110,147, 85, 33, 27,173,210, 34,101, +223,184,159,242,229,136, 73, 11, 22, 40,164,172,240,253, 30,245, 80, 69, 35, 2,100, 30, 16,181,249, 24, 68,243,104, 33, 79,181, +247,128,253, 31,227,171,158, 90,102,212, 79,250,223,106,120,120,120,223,213,106,159, 48,194, 19,138,164,237, 67,107,134,147,135, +201, 90, 8, 4, 2, 40,220,188,240, 82,143, 15,192,178, 12,148, 26, 47, 16, 78,247, 55, 35,102, 88, 8, 88, 1,180,121, 58, 84, +173, 94,147,145, 72,101,237,203, 35, 90,106, 55,225,247, 19,251,189, 36,205,180, 36, 64, 86, 69, 10,206, 58,157, 6,136,193,120, +230,225,195, 46, 97,178, 81,219,175,124, 15,160,131, 35, 5,195, 90, 44,240, 97, 89,152, 40,197,229,241,227, 17,181,124, 57, 46, + 90,137,225,242,229,184, 56,106, 20, 60,132, 66, 72, 24, 6,212,108,126, 98, 79,223,193, 9, 8, 61,122,244, 64, 70, 70,134,239, +167,159,126, 90, 97,178, 37,147,201,214, 19, 66,186, 10,133, 66, 19, 33, 4, 12,195,216,130,128, 91,255, 55,153, 76, 34,150,101, +119,103,100,100, 56,189,229, 71, 8, 9,119,119,119, 63,114,234,212, 41, 95,133, 66,129,233,211,167, 87, 10,201, 82,169, 84,167, +135, 15, 31, 94,101,253,250,245,123, 9, 33, 93, 28, 37, 91,197, 73,214,242,229,203,179, 87,174, 92,249,163,253, 22, 33,165, 52, +153, 16,178,170, 73,147, 38,111,143, 26, 53, 74, 3, 96,204,232,209,163, 81, 30,217,146, 72, 36,237, 66, 67, 67, 31, 91,213, 74, + 36, 18, 0,128, 66,161,128,155,155, 27, 68, 34, 17, 12, 6, 3,162,162,162,136, 88, 44,110,229, 72,154, 85, 42, 85,215,158, 61, +123, 10, 78,158, 60,137,148,148, 20,184,185,185, 65,161, 80,128,227, 56,140, 28, 57, 82,180,104,209,162, 87,157, 37, 90,193,193, +193,221, 59,118,236, 40,184,118,237, 26,238,223,191, 15,131,193,128, 91,183,110, 65,173, 86, 99,208,160, 65,162,249,243,231,191, +238, 44,209, 2, 80,119,212,168, 81,169,246, 36,203, 42, 10,133,130,132,135,135,107, 61, 61, 61, 27, 1,120,232, 12,230, 59,239, +188,147, 54,111,222,188, 54, 7, 15, 30,252,216,250,230,193,131, 7, 39, 1,192, 55,223,124,115,220,219,219,187, 17, 0, 71,137, + 22, 40,165,252,155,111,190,249, 64, 44, 22, 67, 40, 20, 66, 44, 22, 63,118,137, 68, 34, 48, 12,163,178,118,231,255, 42,169, 33, +132, 52, 1,240, 53, 30,157,200,250,148, 82,122,230, 57, 33, 91,151, 8, 33, 81,209,209,209, 54,178,181,103,207, 30,116,233,210, + 5,217,217,217,184,118,237,154, 61,201,250,183,108,180,192,243, 60,132, 66, 33, 22, 44, 88, 0,147,201,132,159,126,250, 9,155, + 55,111,126,108, 12, 85,171,213, 88,188,120,177, 83,219, 92, 28,199, 97,205,154, 53,248,120,210, 36, 27,201, 42, 90, 92,195,207, +215, 23,158, 94, 94,136,141,141, 45,151,104,101,101,101,125,190, 99,199, 14,148,101, 12,191, 99,199, 14,219,255,246,198,240, 14, +205,115, 44, 11,131,193,128,151, 95,254, 59, 84,236, 59,239,188, 99,251, 95,171,213,130,101, 89,107, 89, 16, 71, 49,117, 20,232, + 33,253,251,189,174, 31,126,248,152,134,174, 52,204,210,184,200,243,168,221, 42,225,212, 97, 20,165,244, 98,145,137, 68, 52,128, + 93, 69,219,137,101,219,104,221, 78, 43, 88, 34, 32,201, 13,230,141,123,101, 72, 21, 31, 55,208,252, 84,136, 58,124,142,191,210, +101, 88,176,112, 55, 0,224,163,183, 26,163,126,167,217, 48,174,126, 5,227, 91,176,226,129, 9,134,137, 0,166, 61,217,241,248, +200,160,192, 0,252,117,247, 42, 4, 44, 11,177,155, 23,220, 60,124,193, 91,140,200, 73,187,143, 35, 91,191, 3, 0, 44, 91,179, + 9, 12,195, 64, 32, 96, 97, 48,114, 8,171, 18, 0,158,231, 35,203, 74,103,109, 66, 94,234, 21,238,223, 44, 56, 68, 67,174,185, +223, 71,184,143,231,227, 31,104, 40, 65, 88,146,146,180, 80,202,154,214, 38,228,165,235,148,158, 42, 87, 3,193, 48, 96, 8,129, + 92, 36,130, 97,203, 22, 92, 44, 34, 88, 0,112,113,212, 40, 48,191,253, 6,149, 68, 2,150, 16, 8,138, 84,208, 21,233,232, 0, + 16, 17, 17,129,101,203,150,249,142, 29, 59,182, 66,100, 75,175,215,207, 81,171,213, 29, 87,173, 90,229,219,179,103,207, 39,158, +223,189,123, 23,109,218,180, 73, 77, 73, 73,153,243, 52, 36, 75,163,209, 32, 62, 62,254,169,247,213,173, 36,235,192,129, 3, 33, + 65, 65, 65,136,138,138,242,254,232,163,143,156, 33, 91,211,236, 73,214,232,209,163,175, 0,240, 33,132, 20, 39, 42,164,232, 89, + 61, 59,178,149, 3, 96,126, 25, 43,209, 16,133, 66,129,180,180, 52, 12, 25, 50, 4,183,111,255,173, 0, 13, 8, 8,176,173,244, + 98, 99, 99,225,237,237, 13, 66,136,143, 35,121,246,246,246,246, 53, 26,141, 24, 54,108, 24,226,227,255, 54,103, 12, 12, 12,180, +150,169,151,179,229,232,235,235,235,171,211,233,208,186,117,107,232,245,122, 0, 64,223,190,125, 33, 20, 10,145,150,150, 6,161, + 80,232, 85,129,234,241,138,142,142, 46,213,181,138, 90,173, 54,185,187,187,215,114, 18,211,243,245,215, 95, 79, 92,190,124,249, + 19, 7, 91,206,158, 61,219,205,195,195,227,160,135,135, 71,184,147,152,188, 61,169, 18,137, 68,143, 17, 45,161, 80, 8,134, 97, +120,252,247,229,127, 0,172,167,224,126, 0,208,224, 57,210,108,217,200,214,158, 61,123, 80,167, 78, 29,100,101,101, 33, 38, 38, +230, 95, 39, 89,118,196, 4, 2,129,192,182, 72,150, 74,165,136,138,138,178,145, 44, 66, 8, 10, 11, 11, 33, 16, 8,172,227,181, + 67,131, 95,118,118, 54,252,253,252,160, 82,169, 80, 51, 44, 12,119,138,198, 17,235,255, 18,137, 4,132, 16, 88, 44,150,242,202, + 48, 15,143,108,173, 62,168,236,234,177,146,162, 50, 85,199, 1, 1,224,121,222, 58,230,211,202,192,244,242,242, 66,126,126,190, +163,152,207,165,148,162,209,138, 2,112, 17, 64, 52,165,116,121,145, 97,252, 99,238, 29,218, 2, 56, 2,187, 35,149,132, 16,166, +150,175,114,229,188,177, 29,135,188, 82,199, 11,186,244,251,144,170,188, 64, 52, 85,177, 96,225,110, 92,187,151, 9, 0, 88,176, +225, 60,126,158,217, 21,144,121, 32,194, 45, 3,126, 42, 65,207,146,136, 22, 1, 37, 60,165, 16,176, 76,209,222, 45, 11,150,101, +160, 77, 79,198,162,207,199, 20,145,172,205,216,117, 60, 6, 65,161,117,254,222,199, 37, 4,160,101, 55,110,111, 55,209,242,177, +189,154,203, 82, 73, 50, 52, 1,114, 72,165,197,248,163,187, 8,164, 42,131,113,237,130,228,231,118,232,151, 3, 40,119,162,144, + 50,204, 35,227,119, 66, 74, 52,100, 99,138,158,177,132, 60,242,254,202, 59, 63,166, 91, 9,139, 82,169,132,175,175, 47,230,206, +157,235, 59,121,242,228,159,224,100, 0,106, 74,233, 45, 66, 72,187,145, 35, 71, 30,201,204,204,244,141,136,136,128, 82,169,132, + 82,169, 68,106,106, 42,122,247,238,157,154,146,146, 82, 81,109,217,186,225,195,135,251,138, 68, 34,220,189,123, 23, 30, 30, 30, + 54,130, 88, 81,146,165, 86,171, 79, 31, 60,120, 48,164, 70,141, 26,184,121,243, 38,106,213,170,133,141, 27, 55,122,247,239,223, +223, 33,178, 37,147,201,122, 20, 17, 39,140, 26, 53, 74, 51,106,212,168,182, 0,218,150,247,219,163, 70,141,210,124,240,193, 7, +175,151, 69,180,132, 66, 97,188, 86,171,245,147,201,100,216,186,117, 43,148, 74, 37,228,114, 57, 2, 2, 2,160,213,106, 33,151, +203, 65, 41,133,217,108,182, 14, 22,153,142,228, 59, 61, 61, 61,149,227,184,224,189,123,247, 34, 61,253,111,223,122, 33, 33, 33, +200,201,201, 1,199,113, 25,206,150,101, 82, 82, 82, 42, 33, 36,248,175,191,254, 66, 92, 92, 28,186,116,233,130,223,126,251, 13, +141, 27, 55, 6, 0, 24,141,198,138, 56,241,227, 88,150,165,101,212, 31, 1,224, 94,153,152, 69,147,151, 83,152, 60,207,243, 86, +146,101,255,106, 79,190,202,249,205,255,138,184,217,175, 19,158,215, 68,118,233,210, 5, 90,173, 22, 74,165,242,185,178,207,177, +106,180,102,204,152,129, 49, 99,198,192,215,215, 23, 31,127,252, 49, 4, 2,129,237,178,223, 25,112, 70,124,124,125,203,124,110, + 53,136, 47,103,188, 84,185,185,185,205, 96, 24,166, 15,235, 64,193,113, 28,199,241, 60,191, 41, 39, 39,167, 76,247, 14, 86,195, +117, 71,234,194,190, 12,202, 73,235, 83, 99,150,196, 69,158, 7, 41,126,218,176, 36,141, 22,254, 62,117,248, 68, 40, 32,107, 46, +143, 20,169,236,142,216,147,172, 47,198,180, 31,242, 74, 29,119,108, 63,116, 6, 34, 83, 54, 96,204, 43,163,134,205, 32, 34, 5, +124,221,132, 65, 37, 86, 2,195,222, 76, 72, 76,130,167,187,178,136,100, 21, 93, 12,131,250,117, 30, 45,102,119, 29,143, 65, 80, +245, 58, 16,176, 44, 4, 44, 11,165, 76,130,212,148,100, 8, 4,204,205,210,126,182,158,128,244,234, 21, 30, 92,213,221, 83,136, + 12,111, 35,252,125,229, 37,127,176,145, 10, 65,254, 98,116,246,148,134,212, 19,144, 94,229, 16, 23, 27,209, 50, 89, 44, 16,189, +241,134,109,187,240,226,168, 81,136, 90,190, 28, 92,247,238, 40, 48,153, 30, 83, 21, 59, 43,214, 6,105, 37, 68,211,166, 77, 75, +205,204,204, 28, 80,193,213,227,173,172,172,172,118,159,126,250,105,106, 70, 70, 6,228,114, 57,146,147,147,159,138,100, 1,128, + 78,167, 27,180,124,249,242,212, 35, 71,142, 64,169, 84, 66,165, 82, 85,152,104, 89, 53, 89,159,127,254,121,149,224,224, 96,196, +198,198,194,205,205, 13,158,158,158,168, 95,191, 62, 78,158, 60,233, 29, 28, 28,188,183,200, 96,182,172, 52,253,190,124,249,242, +108, 0, 88,190,124,121, 54, 33,228, 40, 33,100, 41, 33,228,135, 98,215, 82, 66,200, 81,251,207,234,116,186,109,101, 97, 27,141, +198,163, 49, 49, 49, 84, 46,151,131,101, 89,152, 76, 38, 72,165, 82, 91,125,229,230,230, 66,167,123,180,205,125,225,194, 5,152, +205,230, 19,142,228, 61, 47, 47,111,207,234,213,171,205,193,193,193,168, 87,175, 30, 26, 53,106,132, 22, 45, 90, 32, 36, 36, 4, + 51,102,204, 48, 22, 20, 20,236,169, 0,209,218,181,113,227, 70,115,112,112, 48, 26, 53,106, 4,137, 68,130,250,245,235, 35, 32, + 32, 0,115,231,206, 53,230,228,228,236,169, 64, 53, 61,188,122,245, 42, 91, 6,201, 85, 3, 72,117, 18, 51,254,220,185,115,108, +243,230,205,183, 23,127,208,180,105,211,237, 74,165,210, 13,128,179,118,127,212,158, 92, 73, 36, 18,219,101,125, 95, 32, 16,252, +127,208,104,141, 7,112, 5, 64, 44,128,143,159,167,132,217, 27,190,103,102,102, 34, 38, 38, 6, 23, 46, 92, 64,243,230,205,113, +226,196, 9,160,200, 64,254, 95, 76, 31, 40,165, 16, 10,133,136,136,136,192, 7, 31,124,128,221,187,119,227,214,173, 91, 48,155, +205, 54, 34,100,181,201,116, 70,163, 37, 18,137,224,235,235, 11,179,217,108,211,102, 1,192,157,219,183, 33, 16, 8,192,243, 60, +140, 70, 99,185, 26, 45, 55, 55,183, 25, 43, 86,172,120, 47, 35, 35,195, 63, 61, 61,221,199,254, 74, 77, 77,245, 73, 78, 78,246, + 73, 76, 76,244,137,143,143,247,121,240,224,129,207,253,251,247,253,191,252,242,203,247,220,220,220,102, 56, 58, 7,213,175, 95, + 31,239,188,243,142,237, 90,178,100,137,237, 58,114,228,136,211,198,235, 44,203, 34, 98,250, 2,116, 77,167,182,107,183, 55,177, + 93,215, 62, 26, 93, 22,230, 99, 92,228,185,105,203, 69,167, 13,237, 3, 75,151, 48, 7, 39, 83, 74,151, 91,183, 11,237,157,151, + 22, 55,134, 7, 0, 68,250,201,103,127, 49,178,205,144,151,107,185,225,247, 67,231, 49,115,219,189,155, 97, 67,188, 35,106,184, +167,131, 79,143,193, 71,111, 53,198,130, 13,231, 1, 60,218, 58,228,211,174,129,102,197,130,170,130,113, 95,155, 81,226,182,131, +197,168, 63,124,239,238,237,246, 17,117,155, 48, 41, 25,249,143, 29,255,140,106,215, 27,132, 16, 4, 86,175, 3, 86, 32, 0,203, + 50, 16,176, 44, 52,106, 41, 98,254,250,139, 55,232,116,135, 75,194,108, 71,136,192, 79, 41, 94,242, 86,231,250,210, 36,113, 26, +188,253, 21, 16, 9, 31,145, 0,122,175,119,177, 25, 66, 0,212, 85, 97,104,162,167,236,112,170,126, 73, 59, 66,182, 31, 41,197, + 0,147,231,121, 40, 37, 18,232, 13, 6,232, 44, 22,180, 91,180,200,182, 93,200, 16,130, 75, 0,234, 45, 90,132, 83, 91,182, 64, + 45, 22, 3, 18,137,195,167, 66, 74,210,104,165,166,166,162,111,223,190, 79, 69,136,236, 53, 91, 99,199,142, 61, 50,119,238, 92, +223,105,211,166, 85, 26,230,199, 31,127,124,100,195,134, 13,190,213,170, 85,171,112, 99, 85, 42,149,147,120,158,215,204,159, 63, + 63,229,171,175,190, 66,113,123,178, 34,162, 35,209,104, 52, 11, 0,180, 47, 3,106,230,232,209,163, 69, 0,198, 20,105,182,234, +141, 30, 61,250, 20,165,116,106,177,242,157,190,108,217,178,190,118, 91,140, 75, 1, 44, 42, 43,141,185,185,185, 63,124,240,193, + 7,195,142, 29, 59,230, 37,149, 74, 65, 8,129, 72, 36, 66,205,154, 53,109,167,104,132, 66, 33, 40,165,248,240,195, 15, 51,210, +210,210, 28,114,239, 96, 48, 24,214,204,156, 57,179,189, 78,167, 11, 25, 58,116,168,200,221,221, 29,169,169,169,248,250,235,175, +141,107,214,172,137, 47, 40, 40,112,214,150, 10,102,179,121,205,103,159,125,214, 46, 63, 63,191,250,136, 17, 35, 68, 57, 57, 57, +208,233,116,152, 56,113,162,113,213,170, 85, 9, 58,157,206,105,135,191, 45, 90,180,184,251,224,193,131, 86,133,133,133, 89,114, +185,188,184,182,143, 40, 20,138, 38, 0,214, 57,131, 25, 21, 21, 21,251,240,225,195,230,179,103,207, 62,106, 54,155,133,103,207, +158,237,110, 37, 89,223,126,251,237, 17,169, 84,218, 17,206, 27,237,243, 18,137,228, 49, 13, 86,241,255, 5, 2,193,127, 94,163, + 69, 41, 61,130, 71, 46, 51,158, 43, 41, 78,178,174, 93,187,134,246,237, 31,117,233, 19, 39, 78,160,101,203,150, 56,113,226, 4, + 90,181,106,245,175,186,119,176, 18, 45,129, 64,128,254,253,251,163, 83,167, 78,168, 82,165,202, 99,167, 13,173,255, 59, 67, 54, + 44, 22, 11,234,214,173, 11,131,209, 8,145, 72,100,219,154, 20, 8, 4,240,246,241,193,221,187,119, 29,210,104, 49, 12,211,167, + 71,143, 30,204,245,235,215,209,175, 95, 63,172, 95,191,190,212,207, 14, 28, 56, 16,191,252,242, 11,122,244,232,193, 76,153, 50, +165, 76,247, 14, 86, 35,116, 71,242,100,157,167,203,211,232, 85, 22,166, 61, 23,121,222,196,206,181, 67, 73,109,126, 84, 9,237, +107,249, 99, 68,203,206, 73, 24,170,123,203,135,118,170, 41,192,239,135,207, 99,230,239, 15,215,112,148,110,221,122, 49,107,231, +199, 45, 1,211,166,183, 80,191,247,186, 71,219,133, 0,248,180,107, 48,109, 26, 8, 34,247,194,241, 68, 33,114,116,166, 93, 37, + 55, 60,211,250,223,126,250,238,131,230,223,183,242,246,247,113,131, 54, 71,103, 35, 91, 23,143,108, 6, 0,244, 26, 61, 7, 2, +246,209,150,162, 90, 41,133, 76,196, 98,203,218,111, 50, 76, 38,125,137,173, 43, 79,200,140,153,242, 82, 77, 55,177,194,140, 92, + 63,138, 58,222,127, 31,250, 35,213, 55, 63, 73,184, 26,186,195,235, 90, 22,222,170,161, 84,127,115, 61,123, 12,128, 37, 79, 76, +136,217,217,186,236,191,254,146,117, 89,177, 2,103, 7, 13, 66, 32,199,225,104, 64, 0, 60,132, 66,184, 73, 36, 96, 8,129,110, +231, 78,156,218,186, 21,190, 18, 9,160, 82,193, 50,107, 22, 12, 49, 49, 48,231,229,233,156, 37, 90,119,238,220,121,106,173, 83, + 73,196,104,242,228,201, 63,101,102,102, 14,168, 76,204, 65,131, 6, 29, 57,116,232,144,111, 69,113,242,242,242, 38, 0,152, 80, + 9,233,225, 9, 33, 83,139, 28,227,141, 25, 53,106,148,230,220,185,115,195, 8, 33,223, 91, 87, 19,132, 16,159,225,195,135,143, + 44, 70,178,202, 61,117, 72, 41,125,168, 84, 42,103, 77,152, 48, 97,206, 87, 95,125,165,180, 26,190, 95,190,124, 25, 22,139, 5, + 66,161, 16, 28,199, 97,248,240,225,249,153,153,153, 11, 74,243,232, 92, 2,174,133, 16, 50,112,206,156, 57,195,191,249,230,155, +215, 88,150,245,230, 56, 46, 93,167,211,237,213,233,116,203, 43,114,234,170,168, 28, 6, 79,155, 54,109,240,194,133, 11,123, 48, + 12,227, 99,177, 88, 50,242,242,242,118,232,116,186, 10,249,230, 58,117,234, 84,250,247,223,127,127, 47, 61, 61, 61, 50, 40, 40, + 40, 71,169, 84, 26,141, 70, 35, 43,147,201,212, 10,133, 34, 10,192,159, 0,110, 56,131,121,225,194,133,148,165, 75,151,198, 25, + 12,134,136,165, 75,151, 30, 87,171,213,135, 8, 33, 68, 36, 18,185,203,100,178,246, 0,142, 2,184,227, 12, 38,195, 48,188,189, +246,170,184,125,150, 88, 44,254,255, 98,163,245,220,137,189,123,135,140,140, 12, 92,191,126,221, 74,178,162, 0,160, 85,171, 86, + 23,173,100,235,194,133, 11,104,212,168,209, 69, 66,136,240,159, 62,121,104,175,209,178, 18,170, 42, 85,170,216,238,237, 47, 59, + 27, 45,135,132,227, 56,136, 68, 34, 8, 4, 2,248, 7, 4,216,126,139, 82,138,187,119,239, 66,171,213, 58, 68,180, 88,150,101, + 9, 33,232,215,175,159, 67,191,251,230,155,111,226,232,209,163, 96, 29,100,133, 44,203,162,106,213,170, 14,237,188,192, 65,123, + 42,150,101, 17, 20, 20, 84, 97, 76,123, 46,242, 60, 17,172,146,254, 47,137, 84,149, 36, 37, 26,195,199,166,233,102, 15,252,250, +228,148, 27, 41,250,173, 49,169,133, 31, 0,160,155,174,201,247,215,247,102, 95,121, 37, 60, 1,134,229,173, 64,212,143,156,183, +209,252,100, 16,133, 47, 18,248, 64, 76,223,126, 51,197, 2, 50,191,148, 68, 36,137,164,242,169,107, 87,124,251,213,240,177, 31, + 42,175,197,166, 34, 39,223, 0,150,101,236, 7, 79, 8, 4, 44,212, 10, 41,130,253,220,176,225,199,175,243,242,114,179,167,149, + 22,247,176,138, 74, 52,186, 99,147, 26, 18,145,127, 1, 34,234,245, 5, 43,253,219,201, 44, 77, 41,101,119,176,229,126,188,250, +176, 64,250,219,195,130,209, 37, 18, 45,163,241,149, 79, 59,119,222, 55,115,247,110,121,211, 53,107, 16, 59,124, 56, 2,116, 58, + 72,138,182, 18, 25, 66,160, 20,137,160, 20,137, 30,145,172,133, 11,161,179, 88,176,104,208,160, 66,131,209,216,217, 73,141,132, +168,109,219,182,149, 70,178,236,137, 17,156,180,243,114,148,108,117,234,212,233, 8,165, 84,242, 28,172,228,173,100,203,116,238, +220,185,145,199,143, 31,143,197,227,129, 69,179,143, 31, 63, 30, 59, 98,196, 8,178,114,229,202, 85, 0, 62,115,212,129,103,126, +126,254,183, 26,141, 6,109,218,180,249,108,222,188,121,158,141, 27, 55,134,143,143, 15,242,242,242,112,225,194, 5,140, 31, 63, + 94,155,155,155, 59, 47, 43, 43,235, 43, 39,211,204, 21,105,110,150, 87,102, 57, 0, 88, 93,116, 85,138,188,253,246,219,151, 99, + 99, 99, 51,189,189,189,155,137, 68,162,122,120,100, 7,148, 2, 96,149,179,132,200, 42, 99,198,140,249, 43, 54, 54, 54, 35, 48, + 48,176,121, 17,166, 6, 64, 34,128, 21, 21,192, 76, 58,127,254,124, 80,147, 38, 77, 24,161, 80, 72, 89,150,133, 80, 40,164, 2, +129,128, 22,217,213, 80, 0,216,177, 99,135, 4,128, 22, 46,249,167,251,166,205,189, 67,114,114,178,141,100,217, 57, 44,141,106, +213,170,213,197, 34,146,101,125,102,249,151,210,138,153, 51,103, 98,217,178,101, 40,207,163,121,209,233, 62, 82, 30,158, 85,163, +197,113, 28, 76, 38, 19,174, 93,187,102,243,217,101,221, 46,180,186,118,176, 88, 44,101,158, 86,231, 56,142, 51, 26,141,248,245, +215, 95, 29, 34, 91, 63,255,252, 51,244,122, 61,184,114, 24,156,189, 43,134, 6, 13, 26, 64,171,213,218, 14,251, 68, 69,253,237, + 42,207,100, 50, 57, 69, 92,173,152, 17, 17, 17,200,200,200,128,151,215,163,243, 56,193,131,254, 86,246, 88, 10,254,155,254,131, +203,210,104, 17, 71, 93, 18, 52,208,104,220, 12, 98,243,182,110,117, 36,237,250, 68,185,161,186,159, 10, 66,145, 20, 73,185, 22, + 28,188,145,139, 21, 71, 82,226,117,102,238,181, 91,105, 5, 87,203,194,145, 42,220,246, 54,126,169, 83,203, 65, 35,199, 43,242, + 13, 28,226,226, 30, 32, 61, 45, 25, 12, 97,224, 31, 24,132,144,144,170,144,137, 25,172, 95,254, 85,193,197, 83,135, 78,230,229, +106,187,148,134,245,154, 70,124,106,225, 27, 45,155,135,134,170, 8, 44,102,128, 51, 3, 22, 51,192, 23,189, 90,223,227, 31,111, +115,215,175,103,211, 41,151,180,167,119,102, 27, 75,140, 89,213,135,144,150, 26, 15,143,125,211,119,236,144,243, 38, 19, 50, 39, + 76,128,220, 98,129,180,104, 85, 2, 0,144, 72, 96,153, 53,235, 17,201, 26, 56,176, 48, 39, 59,219,233, 16, 60,222,222,222,171, + 51, 50, 50, 94, 56,207,240,158,158,158,159, 86,196, 77,196, 51, 76,147, 15,128,108, 74,169,169,132,149,181,183, 85,203, 85, 1, +220,170,222,222,222, 83, 24,134,105, 65, 41,245,100, 24, 38,139,231,249, 63,211,210,210,190,164,148,222,117, 77,169,255, 90,125, + 91, 61,195,151,183,143,157, 6,224,125, 0,121,148,210, 56, 87,201,253,227,245,212, 16,143, 78, 97,149, 26,130, 7,255,226,201, + 67, 79, 79,207, 51,251,246,237,107, 92,189,122,117,198,222,140,193,234, 43,207,186,189, 37, 16, 60,210, 71, 28, 59,118,204,210, +175, 95,191, 63, 83, 82, 82,218,148,134,169, 86,171,247, 95,185,114,229,229,156,156,156, 39, 8,149,189,167,120,235,125, 65, 65, + 1,198,142, 29,123, 32, 55, 55,183,196, 16, 60, 26,141,102,225, 87, 95,125,245, 94,175, 94,189, 24,171, 59, 10,251,203, 26, 46, +200,122,153, 76, 38,172, 91,183,142,255,230,155,111, 22,103,103,103,151,186,117, 24, 16, 16, 16,159,148,148, 20,100,117,181,224, +136, 83,209,170, 85,171, 38,199,197,197, 5,252,147,152, 47, 42,225, 42,174,221, 34,206,248,126, 34,132,144, 8, 31, 69, 95, 10, +244, 97,192,215,101, 8, 17, 91, 40,110,129, 98,191, 92, 80,248,253,133, 36,234,208,214,153, 72, 46, 31,167, 82,186,127,222,107, +192, 59,158, 85, 67,195,136,175,127, 32, 8, 24,164,166, 36,226,193,189,219,116,219, 79,223,101, 22,228,106,103, 20, 22,230,127, + 87, 22, 78,109, 66, 66,171,169, 69,155,196, 28,194, 97,205, 71,177,248, 84, 79, 48, 76, 0, 38, 33,115, 51, 46,207,220,247,122, + 25,219, 62, 86,178, 53,117,219, 54,185, 56, 60,252, 9, 71,113, 60,207,195, 16, 19,131, 69,131, 6, 85,136,100,185,196, 37, 46, +121,234, 1,173, 58,202,247,145,101, 6,144,240,111, 6, 47,254,127, 94, 71,207,109, 80,105, 66,136,194,195,195,227, 16,203,178, + 33, 86,141,140,189,205, 80, 9, 1,165,227, 82, 83, 83, 59, 82, 74, 11,203,192, 12, 85,169, 84,223,113, 28,215,212,145,160,210, + 44,203,158,205,203,203, 27, 87, 86, 80,233,103,113,234,208,203,203,235,238,131, 7, 15, 66,173,167,168,237,231,202,226,229, 0, + 0,119,238,220, 65,219,182,109, 31, 36, 39, 39, 87,253, 39, 49,159, 87, 41,197,143,214,211,107,180,158, 65, 35, 15, 16, 73,148, +131,197, 50,105, 7,222,108,137, 0, 1, 4, 66,225, 77,163, 94,119,216,160,203, 95, 91,218,118,225, 63, 41,125, 8,105, 41, 17, +139,247,139,212,106, 89, 73,229,100,206,203,211, 25,140,198, 87, 92, 36,203, 37, 46,113,137, 75, 92,242, 2, 17,224,112, 15, 15, +143,125, 66,161, 80, 98, 79, 38,139,255,111, 21,139,197,162, 79, 79, 79,239, 82,214,238,203,179,192,252,207,148,183,179, 68,107, +215,174, 93,212, 81,239,173,132,144, 78,142,196,172,178, 51,124, 43,215,119,198,191,141,249, 12,243, 94,174, 87, 92, 39, 48,219, +226,209,241,216, 25,209,209,209,211, 95,128,116, 86,102, 29, 85, 42,166,181,206, 29,197,117, 6,211,209, 54,229,100, 58, 29,106, +247,207, 3,166, 35,125,169,130,233, 44,179,141, 86,176,222,203,236, 75,207, 81, 58, 43,179,142, 42, 5,179,120,251,113, 4,215, + 89, 76, 71,250, 82, 5,210, 89,110,187,127, 94, 48,159,118, 12, 41, 35,157,165,182, 81, 71,219, 82, 41,117, 95,238,220,244,188, +106,178, 0,192,234, 79,171,184, 70,171, 52,131,120,129,179, 36,235, 89, 36,222,126,210,129,131,126, 74,254, 13,204,138, 16, 46, +103,210, 90,137,114,164,178, 49,139,149,103,101,201,244,162, 1,253, 40, 28,112, 56,234, 76,222, 43,163,222,139,229,181, 82,112, +237, 49, 43,171, 44, 75, 26, 20, 43, 51,157,207, 2,179,178,250, 82,113,204,202,104,247, 37,213,251, 51,172,163,202, 74,103,165, +244,165,103,209,230, 75,104, 63, 79,141, 91, 28,179, 50,250, 82,113,204,202,104,247,255, 4,102,101,244,165,146, 48, 43,163,221, +151, 86,247, 47,170,102,202,186, 93, 88, 68,184, 72, 9,228,243,177,237, 67, 43,241, 98, 42, 82,104,207, 66,158, 69, 32,201,202, + 38, 68,207,138,108,238,218,181,139, 22, 49,253,231, 30,179,146,235,104,122, 17,102,101,174,108,218, 85, 86, 29, 61,139,246,110, +143, 89, 89,248,197,113, 42,163,158, 74,194,124,218,244,150,146,206, 74,207,251,211,182,251,127, 10,179,146,235,168, 82,250, 82, + 49,204,118,149,188, 24,104,103,119, 63,189, 50, 49, 43,171, 47,149,144,206,167,174,167,146, 48,159, 54,189,165,164,179,210,243, + 94, 25,115,200,179,194,253,183, 52, 90, 55,162, 8,165, 76,201,109,162,200, 97,169,237,170,144, 70,235, 89,146,172,103, 53,169, + 85, 38,246,179,208,234, 60, 43,205, 91,101,105,117, 74,192, 61, 90,137,112, 71, 42, 59,157, 69,233, 35,207,179,211, 59, 87, 95, +114,245,165,255, 79,125,169,164,118, 19, 29, 29, 61,125,215,174, 93,159, 63, 79,237,188, 56,102,101, 17,162, 18,242,254, 84,125, +169,248,119, 43,163, 47,149,131, 73,158, 69,254, 43,187, 63,253,147, 26,173,210, 72, 86,105,207, 4,207, 75, 6,172,141,164,146, + 87, 38,168,100, 13,204, 51,203,119, 37,167,179,221,179,208, 16, 62, 3,169,244,116, 22,173,148, 63,127, 6,121,127, 81,202,212, +213,151, 92,125,233,185,235, 75,197,218,100,187, 74,212, 20, 85,170,230,185, 56,102,101,252,134, 61, 70,101,181,209,103,157,247, +202,236, 75,207,162,238, 95, 52,249,191, 1, 0, 27, 20,197,251,159,141,187,244, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130, 0}; diff --git a/source/blender/editors/gpencil/drawgpencil.c b/source/blender/editors/gpencil/drawgpencil.c index 6651c7745bb..4f6fb92336f 100644 --- a/source/blender/editors/gpencil/drawgpencil.c +++ b/source/blender/editors/gpencil/drawgpencil.c @@ -52,7 +52,7 @@ #include "BKE_context.h" #include "BKE_global.h" #include "BKE_gpencil.h" -#include "BKE_sequence.h" +#include "BKE_sequencer.h" #include "BKE_utildefines.h" #include "PIL_time.h" diff --git a/source/blender/editors/gpencil/gpencil_buttons.c b/source/blender/editors/gpencil/gpencil_buttons.c index 4da5ec02ddc..5deffbabb77 100644 --- a/source/blender/editors/gpencil/gpencil_buttons.c +++ b/source/blender/editors/gpencil/gpencil_buttons.c @@ -187,7 +187,7 @@ static void gp_drawui_layer (uiLayout *layout, bGPdata *gpd, bGPDlayer *gpl) /* new backdrop ----------------------------------- */ box= uiLayoutBox(layout); - split= uiLayoutSplit(box, 0.5f); + split= uiLayoutSplit(box, 0.5f, 0); /* draw settings ---------------------------------- */ diff --git a/source/blender/editors/gpencil/gpencil_edit.c b/source/blender/editors/gpencil/gpencil_edit.c index 2f41d90b37c..e5a0cd0f8cb 100644 --- a/source/blender/editors/gpencil/gpencil_edit.c +++ b/source/blender/editors/gpencil/gpencil_edit.c @@ -493,7 +493,6 @@ static void gp_layer_to_curve (bContext *C, bGPdata *gpd, bGPDlayer *gpl, short Scene *scene= CTX_data_scene(C); bGPDframe *gpf= gpencil_layer_getframe(gpl, CFRA, 0); bGPDstroke *gps; - Base *base= BASACT; Object *ob; Curve *cu; @@ -529,9 +528,6 @@ static void gp_layer_to_curve (bContext *C, bGPdata *gpd, bGPDlayer *gpl, short break; } } - - /* restore old active object */ - // BASACT= base; // removing since this is expected new objects are active. } /* --- */ diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h index c9c4c7af18c..48e2eff0d31 100644 --- a/source/blender/editors/include/ED_anim_api.h +++ b/source/blender/editors/include/ED_anim_api.h @@ -424,11 +424,6 @@ void ANIM_draw_cfra(const struct bContext *C, struct View2D *v2d, short flag); /* main call to draw preview range curtains */ void ANIM_draw_previewrange(const struct bContext *C, struct View2D *v2d); -/* ------------- Preview Range Drawing -------------- */ - -/* standard header buttons for Animation Editors */ -short ANIM_headerUI_standard_buttons(const struct bContext *C, struct bDopeSheet *ads, struct uiBlock *block, short xco, short yco); - /* ************************************************* */ /* F-MODIFIER TOOLS */ @@ -445,7 +440,7 @@ void ANIM_uiTemplate_fmodifier_draw(const struct bContext *C, struct uiLayout *l int getname_anim_fcurve(char *name, struct ID *id, struct FCurve *fcu); /* Automatically determine a color for the nth F-Curve */ -void ipo_rainbow(int cur, int tot, float *out); +void getcolor_fcurve_rainbow(int cur, int tot, float *out); /* ------------- NLA-Mapping ----------------------- */ /* anim_draw.c */ @@ -496,9 +491,11 @@ void ED_nla_postop_refresh(bAnimContext *ac); /* --------- anim_deps.c, animation updates -------- */ -/* pose <-> action syncing */ -void ANIM_action_to_pose_sync(struct Object *ob); -void ANIM_pose_to_action_sync(struct Object *ob, struct ScrArea *sa); +void ANIM_id_update(struct Scene *scene, struct ID *id); +void ANIM_list_elem_update(struct Scene *scene, bAnimListElem *ale); + +/* data -> channels syncing */ +void ANIM_sync_animchannels_to_data(const struct bContext *C); /* ************************************************* */ /* OPERATORS */ diff --git a/source/blender/editors/include/ED_armature.h b/source/blender/editors/include/ED_armature.h index 74f1f7e3b83..9d35121032c 100644 --- a/source/blender/editors/include/ED_armature.h +++ b/source/blender/editors/include/ED_armature.h @@ -27,22 +27,23 @@ #ifndef ED_ARMATURE_H #define ED_ARMATURE_H -struct bContext; -struct Scene; -struct Object; -struct Base; -struct Bone; struct bArmature; +struct Base; +struct bContext; +struct Bone; struct bPoseChannel; -struct wmOperator; -struct wmKeyConfig; +struct DerivedMesh; +struct IDProperty; struct ListBase; +struct MeshDeformModifierData; +struct Object; +struct RegionView3D; +struct Scene; +struct SK_Sketch; struct View3D; struct ViewContext; -struct RegionView3D; -struct SK_Sketch; -struct IDProperty; -struct MeshDeformModifierData; +struct wmKeyConfig; +struct wmOperator; typedef struct EditBone { diff --git a/source/blender/editors/include/ED_keyframing.h b/source/blender/editors/include/ED_keyframing.h index 97a08845020..d16cfe540ea 100644 --- a/source/blender/editors/include/ED_keyframing.h +++ b/source/blender/editors/include/ED_keyframing.h @@ -49,6 +49,13 @@ struct PropertyRNA; /* ************ Keyframing Management **************** */ +/* Get the active settings for keyframing settings from context (specifically the given scene) + * - incl_mode: include settings from keyframing mode in the result (i.e. replace only) + */ +short ANIM_get_keyframing_flags(struct Scene *scene, short incl_mode); + +/* -------- */ + /* Get (or add relevant data to be able to do so) the Active Action for the given * Animation Data block, given an ID block where the Animation Data should reside. */ @@ -149,7 +156,7 @@ short ANIM_driver_can_paste(void); /* Main Driver Management API calls: * Add a new driver for the specified property on the given ID block */ -short ANIM_add_driver (struct ID *id, const char rna_path[], int array_index, short flag, int type); +short ANIM_add_driver(struct ID *id, const char rna_path[], int array_index, short flag, int type); /* Main Driver Management API calls: * Remove the driver for the specified property on the given ID block (if available) diff --git a/source/blender/editors/include/ED_mesh.h b/source/blender/editors/include/ED_mesh.h index 58f4a566ff7..aab364bf686 100644 --- a/source/blender/editors/include/ED_mesh.h +++ b/source/blender/editors/include/ED_mesh.h @@ -147,6 +147,9 @@ void EM_free_uv_vert_map(struct UvVertMap *vmap); void EM_add_data_layer(struct EditMesh *em, struct CustomData *data, int type); void EM_free_data_layer(struct EditMesh *em, struct CustomData *data, int type); +void EM_make_hq_normals(struct EditMesh *em); +void EM_solidify(struct EditMesh *em, float dist); + /* editmesh_mods.c */ extern unsigned int em_vertoffs, em_solidoffs, em_wireoffs; diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h index 2f658e48557..89f032efc21 100644 --- a/source/blender/editors/include/ED_screen.h +++ b/source/blender/editors/include/ED_screen.h @@ -81,7 +81,7 @@ void ED_area_tag_refresh(ScrArea *sa); void ED_area_do_refresh(struct bContext *C, ScrArea *sa); void ED_area_headerprint(ScrArea *sa, const char *str); void ED_area_newspace(struct bContext *C, ScrArea *sa, int type); -void ED_area_prevspace(struct bContext *C); +void ED_area_prevspace(struct bContext *C, ScrArea *sa); void ED_area_swapspace(struct bContext *C, ScrArea *sa1, ScrArea *sa2); /* screens */ @@ -98,9 +98,10 @@ void ED_screen_delete_scene(struct bContext *C, struct Scene *scene); void ED_screen_set_subwinactive(struct wmWindow *win, struct wmEvent *event); void ED_screen_exit(struct bContext *C, struct wmWindow *window, struct bScreen *screen); void ED_screen_animation_timer(struct bContext *C, int redraws, int sync, int enable); -void ED_screen_animation_timer_update(struct bContext *C, int redraws); +void ED_screen_animation_timer_update(struct bScreen *screen, int redraws); int ED_screen_full_newspace(struct bContext *C, ScrArea *sa, int type); -void ED_screen_full_prevspace(struct bContext *C); +void ED_screen_full_prevspace(struct bContext *C, ScrArea *sa); +void ED_screen_full_restore(struct bContext *C, ScrArea *sa); void ED_screen_new_window(struct bContext *C, struct rcti *position, int type); @@ -134,6 +135,7 @@ int ED_operator_logic_active(struct bContext *C); int ED_operator_object_active(struct bContext *C); int ED_operator_object_active_editable(struct bContext *C); int ED_operator_editmesh(struct bContext *C); +int ED_operator_editmesh_view3d(struct bContext *C); int ED_operator_editarmature(struct bContext *C); int ED_operator_editcurve(struct bContext *C); int ED_operator_editsurf(struct bContext *C); diff --git a/source/blender/editors/include/ED_sculpt.h b/source/blender/editors/include/ED_sculpt.h index 764efb4ef0c..aae79e9a1de 100644 --- a/source/blender/editors/include/ED_sculpt.h +++ b/source/blender/editors/include/ED_sculpt.h @@ -28,18 +28,28 @@ #ifndef ED_SCULPT_H #define ED_SCULPT_H +struct ARegion; struct bContext; +struct Object; +struct RegionView3D; struct wmKeyConfig; +struct wmWindowManager; /* sculpt.c */ 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); /* paint_ops.c */ void ED_operatortypes_paint(void); void ED_keymap_paint(struct wmKeyConfig *keyconf); -/* paint_image.c */ -void undo_imagepaint_step(int step); -void undo_imagepaint_clear(void); +/* paint_undo.c */ +#define UNDO_PAINT_IMAGE 0 +#define UNDO_PAINT_MESH 1 + +void ED_undo_paint_step(struct bContext *C, int type, int step); +void ED_undo_paint_free(void); #endif diff --git a/source/blender/editors/include/ED_sequencer.h b/source/blender/editors/include/ED_sequencer.h index 2a3b5445dfe..07c4dd6ca41 100644 --- a/source/blender/editors/include/ED_sequencer.h +++ b/source/blender/editors/include/ED_sequencer.h @@ -28,4 +28,7 @@ #define SEQ_ZOOM_FAC(szoom) (szoom > 0)? (szoom) : (szoom == 0)? (1.0) : (-1.0/szoom) +/* in space_sequencer.c, for rna update function */ +void ED_sequencer_update_view(bContext *C, int view); + #endif /* ED_SEQUENCER_H */ diff --git a/source/blender/editors/include/ED_transform.h b/source/blender/editors/include/ED_transform.h index 065867a3bb3..8750010bed5 100644 --- a/source/blender/editors/include/ED_transform.h +++ b/source/blender/editors/include/ED_transform.h @@ -77,7 +77,8 @@ enum { TFM_BEVEL, TFM_BWEIGHT, TFM_ALIGN, - TFM_EDGE_SLIDE + TFM_EDGE_SLIDE, + TFM_SEQ_SLIDE } TfmMode; /* TRANSFORM CONTEXTS */ @@ -95,7 +96,7 @@ enum { * returns 1 if successful, 0 otherwise (usually means there's no selection) * (if 0 is returns, *vec is unmodified) * */ -int calculateTransformCenter(struct bContext *C, struct wmEvent *event, int centerMode, float *vec); +int calculateTransformCenter(struct bContext *C, int centerMode, float *vec); struct TransInfo; struct ScrArea; diff --git a/source/blender/editors/include/ED_view3d.h b/source/blender/editors/include/ED_view3d.h index 0e7f55bef8d..13ef235d8fe 100644 --- a/source/blender/editors/include/ED_view3d.h +++ b/source/blender/editors/include/ED_view3d.h @@ -30,6 +30,7 @@ /* ********* exports for space_view3d/ module ********** */ struct ARegion; +struct BoundBox; struct View3D; struct RegionView3D; struct ViewContext; @@ -44,6 +45,7 @@ struct ImBuf; struct Scene; struct bContext; struct Main; +struct rcti; /* for derivedmesh drawing callbacks, for view3d_select, .... */ typedef struct ViewContext { @@ -80,6 +82,8 @@ void request_depth_update(struct RegionView3D *rv3d); /* Projection */ #define IS_CLIPPED 12000 +void view3d_calculate_clipping(struct BoundBox *bb, float planes[4][4], struct bglMats *mats, struct rcti *rect); + void project_short(struct ARegion *ar, float *vec, short *adr); void project_short_noclip(struct ARegion *ar, float *vec, short *adr); @@ -131,7 +135,7 @@ short view3d_opengl_select(struct ViewContext *vc, unsigned int *buffer, unsigne void view3d_set_viewcontext(struct bContext *C, struct ViewContext *vc); void view3d_operator_needs_opengl(const struct bContext *C); void view3d_get_view_aligned_coordinate(struct ViewContext *vc, float *fp, short mval[2]); -void view3d_get_transformation(struct ViewContext *vc, struct Object *ob, struct bglMats *mats); +void view3d_get_transformation(struct ARegion *ar, struct RegionView3D *rv3d, struct Object *ob, struct bglMats *mats); /* XXX should move to arithb.c */ int edge_inside_circle(short centx, short centy, short rad, short x1, short y1, short x2, short y2); diff --git a/source/blender/editors/include/UI_icons.h b/source/blender/editors/include/UI_icons.h index b9d5e98b88e..01c15a7d303 100644 --- a/source/blender/editors/include/UI_icons.h +++ b/source/blender/editors/include/UI_icons.h @@ -76,7 +76,7 @@ DEF_ICON(ICON_UNLOCKED) DEF_ICON(ICON_LOCKED) DEF_ICON(ICON_UNPINNED) DEF_ICON(ICON_PINNED) -DEF_ICON(ICON_BLANK015) +DEF_ICON(ICON_SCREEN_BACK) DEF_ICON(ICON_RIGHTARROW) DEF_ICON(ICON_DOWNARROW_HLT) DEF_ICON(ICON_DOTSUP) @@ -871,14 +871,14 @@ DEF_ICON(ICON_BLANK346b) /* vector icons */ -DEF_ICON(VICON_VIEW3D) -DEF_ICON(VICON_EDIT) -DEF_ICON(VICON_EDITMODE_DEHLT) -DEF_ICON(VICON_EDITMODE_HLT) -DEF_ICON(VICON_DISCLOSURE_TRI_RIGHT) -DEF_ICON(VICON_DISCLOSURE_TRI_DOWN) -DEF_ICON(VICON_MOVE_UP) -DEF_ICON(VICON_MOVE_DOWN) -DEF_ICON(VICON_X) -DEF_ICON(VICON_SMALL_TRI_RIGHT) +DEF_ICON(VICO_VIEW3D_VEC) +DEF_ICON(VICO_EDIT_VEC) +DEF_ICON(VICO_EDITMODE_DEHLT) +DEF_ICON(VICO_EDITMODE_HLT) +DEF_ICON(VICO_DISCLOSURE_TRI_RIGHT_VEC) +DEF_ICON(VICO_DISCLOSURE_TRI_DOWN_VEC) +DEF_ICON(VICO_MOVE_UP_VEC) +DEF_ICON(VICO_MOVE_DOWN_VEC) +DEF_ICON(VICO_X_VEC) +DEF_ICON(VICO_SMALL_TRI_RIGHT_VEC) diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index 608954eeed8..8e44d7f386e 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -591,6 +591,7 @@ void UI_exit(void); #define UI_ITEM_R_ICON_ONLY 16 #define UI_ITEM_R_EVENT 32 #define UI_ITEM_R_FULL_EVENT 64 +#define UI_ITEM_R_NO_BG 128 uiLayout *uiBlockLayout(uiBlock *block, int dir, int type, int x, int y, int size, int em, struct uiStyle *style); void uiBlockSetCurLayout(uiBlock *block, uiLayout *layout); @@ -629,13 +630,14 @@ uiLayout *uiLayoutBox(uiLayout *layout); uiLayout *uiLayoutListBox(uiLayout *layout, struct PointerRNA *ptr, struct PropertyRNA *prop, struct PointerRNA *actptr, struct PropertyRNA *actprop); uiLayout *uiLayoutAbsolute(uiLayout *layout, int align); -uiLayout *uiLayoutSplit(uiLayout *layout, float percentage); +uiLayout *uiLayoutSplit(uiLayout *layout, float percentage, int align); uiLayout *uiLayoutOverlap(uiLayout *layout); uiBlock *uiLayoutAbsoluteBlock(uiLayout *layout); /* templates */ void uiTemplateHeader(uiLayout *layout, struct bContext *C, int menus); +void uiTemplateDopeSheetFilter(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr); void uiTemplateID(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname, char *newop, char *openop, char *unlinkop); void uiTemplateAnyID(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname, @@ -686,6 +688,9 @@ void uiItemMenuF(uiLayout *layout, char *name, int icon, uiMenuCreateFunc func, void uiItemMenuEnumO(uiLayout *layout, char *name, int icon, char *opname, char *propname); void uiItemMenuEnumR(uiLayout *layout, char *name, int icon, struct PointerRNA *ptr, char *propname); +/* UI Operators */ +void UI_buttons_operatortypes(void); + /* Helpers for Operators */ void uiAnimContextProperty(const struct bContext *C, struct PointerRNA *ptr, struct PropertyRNA **prop, int *index); void uiFileBrowseContextProperty(const struct bContext *C, struct PointerRNA *ptr, struct PropertyRNA **prop); diff --git a/source/blender/editors/include/UI_view2d.h b/source/blender/editors/include/UI_view2d.h index 8fbff25589d..e3b00c21d04 100644 --- a/source/blender/editors/include/UI_view2d.h +++ b/source/blender/editors/include/UI_view2d.h @@ -195,7 +195,7 @@ void UI_view2d_text_cache_rectf(struct View2D *v2d, struct rctf *rect, char *str void UI_view2d_text_cache_draw(struct ARegion *ar); /* operators */ -void ui_view2d_operatortypes(void); +void UI_view2d_operatortypes(void); void UI_view2d_keymap(struct wmKeyConfig *keyconf); #endif /* UI_VIEW2D_H */ diff --git a/source/blender/editors/interface/interface_anim.c b/source/blender/editors/interface/interface_anim.c index 0925598cc99..acfd48e0269 100644 --- a/source/blender/editors/interface/interface_anim.c +++ b/source/blender/editors/interface/interface_anim.c @@ -147,14 +147,7 @@ void ui_but_anim_autokey(uiBut *but, Scene *scene, float cfra) // TODO: this should probably respect the keyingset only option for anim if(autokeyframe_cfra_can_key(scene, id)) { - short flag = 0; - - if (IS_AUTOKEY_FLAG(INSERTNEEDED)) - flag |= INSERTKEY_NEEDED; - if (IS_AUTOKEY_FLAG(AUTOMATKEY)) - flag |= INSERTKEY_MATRIX; - if (IS_AUTOKEY_MODE(scene, EDITKEYS)) - flag |= INSERTKEY_REPLACE; + short flag = ANIM_get_keyframing_flags(scene, 1); fcu->flag &= ~FCURVE_SELECTED; insert_keyframe(id, action, ((fcu->grp)?(fcu->grp->name):(NULL)), fcu->rna_path, fcu->array_index, cfra, flag); diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index d2545e530e4..88868a61592 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -1079,9 +1079,9 @@ static void ui_textedit_set_cursor_pos(uiBut *but, uiHandleButtonData *data, sho uiStyleFontSet(&style->widget); - origstr= MEM_callocN(sizeof(char)*(data->maxlen+1), "ui_textedit origstr"); + origstr= MEM_callocN(sizeof(char)*data->maxlen, "ui_textedit origstr"); - BLI_strncpy(origstr, but->drawstr, data->maxlen+1); + BLI_strncpy(origstr, but->drawstr, data->maxlen); but->pos= strlen(origstr)-but->ofs; /* XXX solve generic */ @@ -1130,7 +1130,7 @@ static int ui_textedit_type_ascii(uiBut *but, uiHandleButtonData *data, char asc changed= ui_textedit_delete_selection(but, data); len= strlen(str); - if(len < data->maxlen) { + if(len+1 < data->maxlen) { for(x= data->maxlen; x>but->pos; x--) str[x]= str[x-1]; str[but->pos]= ascii; @@ -1365,7 +1365,7 @@ static int ui_textedit_copypaste(uiBut *but, uiHandleButtonData *data, int paste for (y=0; ymaxlen) { + if(len+1 < data->maxlen) { for(x= data->maxlen; x>but->pos; x--) str[x]= str[x-1]; str[but->pos]= buf[y]; @@ -1411,8 +1411,8 @@ static void ui_textedit_begin(bContext *C, uiBut *but, uiHandleButtonData *data) /* retrieve string */ data->maxlen= ui_get_but_string_max_length(but); - data->str= MEM_callocN(sizeof(char)*(data->maxlen+1), "textedit str"); - ui_get_but_string(but, data->str, data->maxlen+1); + data->str= MEM_callocN(sizeof(char)*data->maxlen + 1, "textedit str"); + ui_get_but_string(but, data->str, data->maxlen); data->origstr= BLI_strdup(data->str); data->selextend= 0; @@ -3405,7 +3405,8 @@ static int ui_but_menu(bContext *C, uiBut *but) if((but->rnapoin.data && but->rnaprop)==0 && but->optype==NULL) return 0; - + + button_timers_tooltip_remove(C, but); if(but->rnaprop) name= (char*)RNA_property_ui_name(but->rnaprop); @@ -3498,9 +3499,15 @@ static int ui_but_menu(bContext *C, uiBut *but) //Copy Property Value //Paste Property Value - //uiItemO(layout, "Reset to Default Value", 0, "WM_OT_property_value_reset_button"); + if(length) { + uiItemBooleanO(layout, "Reset All to Default Values", 0, "UI_OT_reset_default_button", "all", 1); + uiItemBooleanO(layout, "Reset Single to Default Value", 0, "UI_OT_reset_default_button", "all", 0); + } + else + uiItemO(layout, "Reset to Default Value", 0, "UI_OT_reset_default_button"); - uiItemO(layout, "Copy Data Path", 0, "ANIM_OT_copy_clipboard_button"); + uiItemO(layout, "Copy Data Path", 0, "UI_OT_copy_data_path_button"); + uiItemO(layout, "Copy To Selected", 0, "UI_OT_copy_to_selected_button"); uiItemS(layout); } @@ -3604,7 +3611,7 @@ static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, wmEvent *event) char buf[512]; if(WM_key_event_operator_string(C, but->optype->idname, but->opcontext, prop, buf, sizeof(buf))) { - + button_timers_tooltip_remove(C, but); uiPupBlock(C, menu_change_hotkey, but); } @@ -3832,12 +3839,14 @@ static int ui_mouse_inside_button(ARegion *ar, uiBut *but, int x, int y) return 1; } -static uiBut *ui_but_find_mouse_over(ARegion *ar, int x, int y) +static uiBut *ui_but_find_mouse_over(wmWindow *win, ARegion *ar, int x, int y) { uiBlock *block; uiBut *but, *butover= NULL; int mx, my; + if(!win->active) + return NULL; if(!ui_mouse_inside_region(ar, x, y)) return NULL; @@ -3859,12 +3868,14 @@ static uiBut *ui_but_find_mouse_over(ARegion *ar, int x, int y) return butover; } -static uiBut *ui_list_find_mouse_over(ARegion *ar, int x, int y) +static uiBut *ui_list_find_mouse_over(wmWindow *win, ARegion *ar, int x, int y) { uiBlock *block; uiBut *but; int mx, my; + if(!win->active) + return NULL; if(!ui_mouse_inside_region(ar, x, y)) return NULL; @@ -4171,10 +4182,11 @@ static uiBut *uit_but_find_open_event(ARegion *ar, wmEvent *event) static int ui_handle_button_over(bContext *C, wmEvent *event, ARegion *ar) { + wmWindow *win= CTX_wm_window(C); uiBut *but; if(event->type == MOUSEMOVE) { - but= ui_but_find_mouse_over(ar, event->x, event->y); + but= ui_but_find_mouse_over(win, ar, event->x, event->y); if(but) button_activate_init(C, ar, but, BUTTON_ACTIVATE_OVER); } @@ -4240,14 +4252,18 @@ static int ui_handle_button_event(bContext *C, wmEvent *event, uiBut *but) if(data->state == BUTTON_STATE_HIGHLIGHT) { switch(event->type) { - + case WINDEACTIVATE: + data->cancel= 1; + button_activate_state(C, but, BUTTON_STATE_EXIT); + retval= WM_UI_HANDLER_CONTINUE; + break; case MOUSEMOVE: /* verify if we are still over the button, if not exit */ if(!ui_mouse_inside_button(ar, but, event->x, event->y)) { data->cancel= 1; button_activate_state(C, but, BUTTON_STATE_EXIT); } - else if(ui_but_find_mouse_over(ar, event->x, event->y) != but) { + else if(ui_but_find_mouse_over(data->window, ar, event->x, event->y) != but) { data->cancel= 1; button_activate_state(C, but, BUTTON_STATE_EXIT); } @@ -4295,8 +4311,12 @@ static int ui_handle_button_event(bContext *C, wmEvent *event, uiBut *but) } else if(data->state == BUTTON_STATE_WAIT_RELEASE) { switch(event->type) { + case WINDEACTIVATE: + data->cancel= 1; + button_activate_state(C, but, BUTTON_STATE_EXIT); + break; + case MOUSEMOVE: - if(ELEM(but->type,LINK, INLINK)) { but->flag |= UI_SELECT; ui_do_button(C, block, but, event); @@ -4341,7 +4361,7 @@ static int ui_handle_button_event(bContext *C, wmEvent *event, uiBut *but) else if(data->state == BUTTON_STATE_MENU_OPEN) { switch(event->type) { case MOUSEMOVE: { - uiBut *bt= ui_but_find_mouse_over(ar, event->x, event->y); + uiBut *bt= ui_but_find_mouse_over(data->window, ar, event->x, event->y); if(bt && bt->active != data) { if(but->type != COL) /* exception */ @@ -4376,7 +4396,8 @@ static int ui_handle_button_event(bContext *C, wmEvent *event, uiBut *but) static int ui_handle_list_event(bContext *C, wmEvent *event, ARegion *ar) { - uiBut *but= ui_list_find_mouse_over(ar, event->x, event->y); + wmWindow *win= CTX_wm_window(C); + uiBut *but= ui_list_find_mouse_over(win, ar, event->x, event->y); int retval= WM_UI_HANDLER_CONTINUE; int value, min, max; @@ -4724,9 +4745,14 @@ int ui_handle_menu_event(bContext *C, wmEvent *event, uiPopupBlockHandle *menu, if(inside==0) { uiSafetyRct *saferct= block->saferct.first; - if(ELEM3(event->type, LEFTMOUSE, MIDDLEMOUSE, RIGHTMOUSE) && event->val==KM_PRESS) - if(saferct && !BLI_in_rctf(&saferct->parent, event->x, event->y)) - menu->menuretval= UI_RETURN_OUT; + if(ELEM3(event->type, LEFTMOUSE, MIDDLEMOUSE, RIGHTMOUSE) && event->val==KM_PRESS) { + if(saferct && !BLI_in_rctf(&saferct->parent, event->x, event->y)) { + if(block->flag & (UI_BLOCK_OUT_1|UI_BLOCK_KEEP_OPEN)) + menu->menuretval= UI_RETURN_OK; + else + menu->menuretval= UI_RETURN_OUT; + } + } } if(menu->menuretval); @@ -4762,10 +4788,10 @@ int ui_handle_menu_event(bContext *C, wmEvent *event, uiPopupBlockHandle *menu, /* strict check, and include the parent rect */ if(!menu->dotowards && !saferct) { - if(block->flag & UI_BLOCK_OUT_1) + if(block->flag & (UI_BLOCK_OUT_1|UI_BLOCK_KEEP_OPEN)) menu->menuretval= UI_RETURN_OK; else - menu->menuretval= (block->flag & UI_BLOCK_KEEP_OPEN)? UI_RETURN_OK: UI_RETURN_OUT; + menu->menuretval= UI_RETURN_OUT; } else if(menu->dotowards && event->type==MOUSEMOVE) retval= WM_UI_HANDLER_BREAK; diff --git a/source/blender/editors/interface/interface_icons.c b/source/blender/editors/interface/interface_icons.c index 23a0ff7d223..e219198da0f 100644 --- a/source/blender/editors/interface/interface_icons.c +++ b/source/blender/editors/interface/interface_icons.c @@ -528,16 +528,16 @@ static void init_internal_icons() } } - def_internal_vicon(VICON_VIEW3D, vicon_view3d_draw); - def_internal_vicon(VICON_EDIT, vicon_edit_draw); - def_internal_vicon(VICON_EDITMODE_DEHLT, vicon_editmode_dehlt_draw); - def_internal_vicon(VICON_EDITMODE_HLT, vicon_editmode_hlt_draw); - def_internal_vicon(VICON_DISCLOSURE_TRI_RIGHT, vicon_disclosure_tri_right_draw); - def_internal_vicon(VICON_DISCLOSURE_TRI_DOWN, vicon_disclosure_tri_down_draw); - def_internal_vicon(VICON_MOVE_UP, vicon_move_up_draw); - def_internal_vicon(VICON_MOVE_DOWN, vicon_move_down_draw); - def_internal_vicon(VICON_X, vicon_x_draw); - def_internal_vicon(VICON_SMALL_TRI_RIGHT, vicon_small_tri_right_draw); + def_internal_vicon(VICO_VIEW3D_VEC, vicon_view3d_draw); + def_internal_vicon(VICO_EDIT_VEC, vicon_edit_draw); + def_internal_vicon(VICO_EDITMODE_DEHLT, vicon_editmode_dehlt_draw); + def_internal_vicon(VICO_EDITMODE_HLT, vicon_editmode_hlt_draw); + def_internal_vicon(VICO_DISCLOSURE_TRI_RIGHT_VEC, vicon_disclosure_tri_right_draw); + def_internal_vicon(VICO_DISCLOSURE_TRI_DOWN_VEC, vicon_disclosure_tri_down_draw); + def_internal_vicon(VICO_MOVE_UP_VEC, vicon_move_up_draw); + def_internal_vicon(VICO_MOVE_DOWN_VEC, vicon_move_down_draw); + def_internal_vicon(VICO_X_VEC, vicon_x_draw); + def_internal_vicon(VICO_SMALL_TRI_RIGHT_VEC, vicon_small_tri_right_draw); IMB_freeImBuf(bbuf); } diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c index ceb5ac10486..b0670be63a2 100644 --- a/source/blender/editors/interface/interface_layout.c +++ b/source/blender/editors/interface/interface_layout.c @@ -714,7 +714,7 @@ void uiItemsEnumO(uiLayout *layout, char *opname, char *propname) if(prop && RNA_property_type(prop) == PROP_ENUM) { EnumPropertyItem *item; int totitem, i, free; - uiLayout *split= uiLayoutSplit(layout, 0); + uiLayout *split= uiLayoutSplit(layout, 0, 0); uiLayout *column= uiLayoutColumn(split, 0); RNA_property_enum_items(block->evil_C, &ptr, prop, &item, &totitem, &free); @@ -880,7 +880,7 @@ void uiItemFullR(uiLayout *layout, char *name, int icon, PointerRNA *ptr, Proper uiBut *but; PropertyType type; char namestr[UI_MAX_NAME_STR]; - int len, w, h, slider, toggle, expand, icon_only; + int len, w, h, slider, toggle, expand, icon_only, no_bg; uiBlockSetCurLayout(block, layout); @@ -912,10 +912,14 @@ void uiItemFullR(uiLayout *layout, char *name, int icon, PointerRNA *ptr, Proper toggle= (flag & UI_ITEM_R_TOGGLE); expand= (flag & UI_ITEM_R_EXPAND); icon_only= (flag & UI_ITEM_R_ICON_ONLY); + no_bg= (flag & UI_ITEM_R_NO_BG); /* get size */ ui_item_rna_size(layout, name, icon, ptr, prop, index, icon_only, &w, &h); + if (no_bg) + uiBlockSetEmboss(block, UI_EMBOSSN); + /* array property */ if(index == RNA_NO_INDEX && len > 0) ui_item_array(layout, block, name, icon, ptr, prop, len, 0, 0, w, h, expand, slider, toggle, icon_only); @@ -948,6 +952,9 @@ void uiItemFullR(uiLayout *layout, char *name, int icon, PointerRNA *ptr, Proper if(toggle && but->type==OPTION) but->type= TOG; } + + if (no_bg) + uiBlockSetEmboss(block, UI_EMBOSS); } void uiItemR(uiLayout *layout, char *name, int icon, PointerRNA *ptr, char *propname, int flag) @@ -1024,7 +1031,7 @@ void uiItemsEnumR(uiLayout *layout, struct PointerRNA *ptr, char *propname) if(RNA_property_type(prop) == PROP_ENUM) { EnumPropertyItem *item; int totitem, i, free; - uiLayout *split= uiLayoutSplit(layout, 0); + uiLayout *split= uiLayoutSplit(layout, 0, 0); uiLayout *column= uiLayoutColumn(split, 0); RNA_property_enum_items(block->evil_C, ptr, prop, &item, &totitem, &free); @@ -1057,38 +1064,72 @@ void uiItemsEnumR(uiLayout *layout, struct PointerRNA *ptr, char *propname) /* Pointer RNA button with search */ +typedef struct CollItemSearch { + struct CollItemSearch *next, *prev; + char *name; + int index; + int iconid; +} CollItemSearch; + +int sort_search_items_list(void *a, void *b) +{ + CollItemSearch *cis1 = (CollItemSearch *)a; + CollItemSearch *cis2 = (CollItemSearch *)b; + + if (BLI_strcasecmp(cis1->name, cis2->name)>0) + return 1; + else + return 0; +} + static void rna_search_cb(const struct bContext *C, void *arg_but, char *str, uiSearchItems *items) { uiBut *but= arg_but; char *name; - int i, iconid, flag= RNA_property_flag(but->rnaprop); + int i=0, iconid=0, flag= RNA_property_flag(but->rnaprop); + ListBase *items_list= MEM_callocN(sizeof(ListBase), "items_list"); + CollItemSearch *cis; - i = 0; + /* build a temporary list of relevant items first */ RNA_PROP_BEGIN(&but->rnasearchpoin, itemptr, but->rnasearchprop) { if(flag & PROP_ID_SELF_CHECK) if(itemptr.data == but->rnapoin.id.data) continue; - - iconid= 0; + if(RNA_struct_is_ID(itemptr.type)) iconid= ui_id_icon_get((bContext*)C, itemptr.data); - + name= RNA_struct_name_get_alloc(&itemptr, NULL, 0); - + if(name) { if(BLI_strcasestr(name, str)) { - if(!uiSearchItemAdd(items, name, SET_INT_IN_POINTER(i), iconid)) { - MEM_freeN(name); - break; - } + cis = MEM_callocN(sizeof(CollItemSearch), "CollectionItemSearch"); + cis->name = MEM_dupallocN(name); + cis->index = i; + cis->iconid = iconid; + BLI_addtail(items_list, cis); } - - MEM_freeN(name); } - + MEM_freeN(name); + i++; } RNA_PROP_END; + + BLI_sortlist(items_list, sort_search_items_list); + + /* add search items from temporary list */ + for (cis=items_list->first; cis; cis=cis->next) { + if (!uiSearchItemAdd(items, cis->name, SET_INT_IN_POINTER(cis->index), cis->iconid)) { + break; + } + } + + for (cis=items_list->first; cis; cis=cis->next) { + MEM_freeN(cis->name); + } + BLI_freelistN(items_list); + MEM_freeN(items_list); } static void search_id_collection(StructRNA *ptype, PointerRNA *ptr, PropertyRNA **prop) @@ -2054,13 +2095,14 @@ uiLayout *uiLayoutOverlap(uiLayout *layout) return litem; } -uiLayout *uiLayoutSplit(uiLayout *layout, float percentage) +uiLayout *uiLayoutSplit(uiLayout *layout, float percentage, int align) { uiLayoutItemSplt *split; split= MEM_callocN(sizeof(uiLayoutItemSplt), "uiLayoutItemSplt"); split->litem.item.type= ITEM_LAYOUT_SPLIT; split->litem.root= layout->root; + split->litem.align= align; split->litem.active= 1; split->litem.enabled= 1; split->litem.context= layout->context; diff --git a/source/blender/editors/interface/interface_ops.c b/source/blender/editors/interface/interface_ops.c new file mode 100644 index 00000000000..25bfaf3d682 --- /dev/null +++ b/source/blender/editors/interface/interface_ops.c @@ -0,0 +1,255 @@ +/** + * $Id$ + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 Blender Foundation. + * All rights reserved. + * + * Contributor(s): Blender Foundation, Joshua Leung + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include +#include +#include + + +#include "MEM_guardedalloc.h" + +#include "DNA_scene_types.h" +#include "DNA_screen_types.h" +#include "DNA_space_types.h" +#include "DNA_userdef_types.h" +#include "DNA_vec_types.h" +#include "DNA_view2d_types.h" + +#include "BLI_blenlib.h" + +#include "BKE_context.h" +#include "BKE_utildefines.h" + +#include "RNA_access.h" +#include "RNA_define.h" + +#include "WM_api.h" +#include "WM_types.h" + +#include "BIF_gl.h" + +#include "ED_screen.h" + +#include "UI_interface.h" +#include "UI_resources.h" + +/* ********************************************************** */ + +/* Copy Data Path Operator ------------------------ */ + +static int copy_data_path_button_exec(bContext *C, wmOperator *op) +{ + PointerRNA ptr; + PropertyRNA *prop; + char *path; + int success= 0; + int index; + + /* try to create driver using property retrieved from UI */ + uiAnimContextProperty(C, &ptr, &prop, &index); + + if (ptr.data && prop) { + path= RNA_path_from_ID_to_property(&ptr, prop); + + if (path) { + WM_clipboard_text_set(path, FALSE); + MEM_freeN(path); + } + } + + /* since we're just copying, we don't really need to do anything else...*/ + return (success)? OPERATOR_FINISHED: OPERATOR_CANCELLED; +} + +void UI_OT_copy_data_path_button(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Copy Data Path"; + ot->idname= "UI_OT_copy_data_path_button"; + ot->description= "Copy the RNA data path for this property to the clipboard."; + + /* callbacks */ + ot->exec= copy_data_path_button_exec; + //op->poll= ??? // TODO: need to have some valid property before this can be done + + /* flags */ + ot->flag= OPTYPE_REGISTER; +} + +/* Reset to Default Values Button Operator ------------------------ */ + +static int reset_default_button_poll(bContext *C) +{ + PointerRNA ptr; + PropertyRNA *prop; + int index; + + uiAnimContextProperty(C, &ptr, &prop, &index); + + return (ptr.data && prop && RNA_property_editable(&ptr, prop)); +} + +static int reset_default_button_exec(bContext *C, wmOperator *op) +{ + PointerRNA ptr; + PropertyRNA *prop; + int success= 0; + int index, all = RNA_boolean_get(op->ptr, "all"); + + /* try to reset the nominated setting to its default value */ + uiAnimContextProperty(C, &ptr, &prop, &index); + + /* if there is a valid property that is editable... */ + if (ptr.data && prop && RNA_property_editable(&ptr, prop)) { + if(RNA_property_reset(&ptr, prop, (all)? -1: index)) { + /* perform updates required for this property */ + RNA_property_update(C, &ptr, prop); + success= 1; + } + } + + return (success)? OPERATOR_FINISHED: OPERATOR_CANCELLED; +} + +void UI_OT_reset_default_button(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Reset to Default Value"; + ot->idname= "UI_OT_reset_default_button"; + ot->description= "Copy the RNA data path for this property to the clipboard."; + + /* callbacks */ + ot->poll= reset_default_button_poll; + ot->exec= reset_default_button_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* properties */ + RNA_def_boolean(ot->srna, "all", 1, "All", "Reset to default values all elements of the array."); +} + +/* Copy To Selected Operator ------------------------ */ + +static int copy_to_selected_list(bContext *C, PointerRNA *ptr, ListBase *lb) +{ + if(RNA_struct_is_a(ptr->type, &RNA_Object)) + *lb = CTX_data_collection_get(C, "selected_editable_objects"); + else if(RNA_struct_is_a(ptr->type, &RNA_EditBone)) + *lb = CTX_data_collection_get(C, "selected_editable_bones"); + else if(RNA_struct_is_a(ptr->type, &RNA_PoseBone)) + *lb = CTX_data_collection_get(C, "selected_pose_bones"); + else + return 0; + + return 1; +} + +static int copy_to_selected_button_poll(bContext *C) +{ + PointerRNA ptr; + PropertyRNA *prop; + int index, success= 0; + + uiAnimContextProperty(C, &ptr, &prop, &index); + + if (ptr.data && prop) { + CollectionPointerLink *link; + ListBase lb; + + if(copy_to_selected_list(C, &ptr, &lb)) { + for(link= lb.first; link; link=link->next) + if(link->ptr.data != ptr.data && RNA_property_editable(&link->ptr, prop)) + success= 1; + + BLI_freelistN(&lb); + } + } + + return success; +} + +static int copy_to_selected_button_exec(bContext *C, wmOperator *op) +{ + PointerRNA ptr; + PropertyRNA *prop; + int success= 0; + int index, all = RNA_boolean_get(op->ptr, "all"); + + /* try to reset the nominated setting to its default value */ + uiAnimContextProperty(C, &ptr, &prop, &index); + + /* if there is a valid property that is editable... */ + if (ptr.data && prop) { + CollectionPointerLink *link; + ListBase lb; + + if(copy_to_selected_list(C, &ptr, &lb)) { + for(link= lb.first; link; link=link->next) { + if(link->ptr.data != ptr.data && RNA_property_editable(&link->ptr, prop)) { + if(RNA_property_copy(&link->ptr, &ptr, prop, (all)? -1: index)) { + RNA_property_update(C, &link->ptr, prop); + success= 1; + } + } + } + + BLI_freelistN(&lb); + } + } + + return (success)? OPERATOR_FINISHED: OPERATOR_CANCELLED; +} + +void UI_OT_copy_to_selected_button(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Copy To Selected"; + ot->idname= "UI_OT_copy_to_selected_button"; + ot->description= "Copy property from this object to selected objects or bones."; + + /* callbacks */ + ot->poll= copy_to_selected_button_poll; + ot->exec= copy_to_selected_button_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* properties */ + RNA_def_boolean(ot->srna, "all", 1, "All", "Reset to default values all elements of the array."); +} + +/* ********************************************************* */ +/* Registration */ + +void UI_buttons_operatortypes(void) +{ + WM_operatortype_append(UI_OT_copy_data_path_button); + WM_operatortype_append(UI_OT_reset_default_button); + WM_operatortype_append(UI_OT_copy_to_selected_button); +} + diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c index 55b908a44ce..8ebfed21dcc 100644 --- a/source/blender/editors/interface/interface_regions.c +++ b/source/blender/editors/interface/interface_regions.c @@ -1377,7 +1377,7 @@ static void ui_block_func_MENUSTR(bContext *C, uiLayout *layout, void *arg_str) } /* create items */ - split= uiLayoutSplit(layout, 0); + split= uiLayoutSplit(layout, 0, 0); for(a=0, b=0; anitems; a++, b++) { if(block->flag & UI_BLOCK_NO_FLIP) @@ -2288,6 +2288,7 @@ uiPopupBlockHandle *ui_popup_menu_create(bContext *C, ARegion *butregion, uiBut /* menu is created from a string */ pup->menu_func= ui_block_func_MENUSTR; pup->menu_arg= str; + // XXX pup->block->flag |= UI_BLOCK_NO_FLIP; } else { /* menu is created from a callback */ diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index 9402da2f2c6..d2b58e61757 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -60,12 +60,58 @@ void ui_template_fix_linking() void uiTemplateHeader(uiLayout *layout, bContext *C, int menus) { uiBlock *block; - + block= uiLayoutAbsoluteBlock(layout); if(menus) ED_area_header_standardbuttons(C, block, 0); else ED_area_header_switchbutton(C, block, 0); } +/********************** DopeSheet Filter Template *************************/ + +void uiTemplateDopeSheetFilter(uiLayout *layout, bContext *C, PointerRNA *ptr) +{ + Main *mainptr= CTX_data_main(C); + ScrArea *sa= CTX_wm_area(C); + uiLayout *row= layout; + short nlaActive= ((sa) && (sa->spacetype==SPACE_NLA)); + + /* more 'generic' filtering options */ + if (nlaActive) + row= uiLayoutRow(layout, 1); + + uiItemR(row, "", 0, ptr, "only_selected", 0); + + if (nlaActive) + uiItemR(row, "", 0, ptr, "include_missing_nla", 0); + + if (nlaActive) + row= layout; + + /* datatype based - only available datatypes are shown */ + row= uiLayoutRow(layout, 1); + + uiItemR(row, "", 0, ptr, "display_scene", 0); + uiItemR(row, "", 0, ptr, "display_world", 0); + uiItemR(row, "", 0, ptr, "display_node", 0); + + if (mainptr && mainptr->key.first) + uiItemR(row, "", 0, ptr, "display_shapekeys", 0); + if (mainptr && mainptr->mat.first) + uiItemR(row, "", 0, ptr, "display_material", 0); + if (mainptr && mainptr->lamp.first) + uiItemR(row, "", 0, ptr, "display_lamp", 0); + if (mainptr && mainptr->camera.first) + uiItemR(row, "", 0, ptr, "display_camera", 0); + if (mainptr && mainptr->curve.first) + uiItemR(row, "", 0, ptr, "display_curve", 0); + if (mainptr && mainptr->mball.first) + uiItemR(row, "", 0, ptr, "display_metaball", 0); + if (mainptr && mainptr->armature.first) + uiItemR(row, "", 0, ptr, "display_armature", 0); + if (mainptr && mainptr->particle.first) + uiItemR(row, "", 0, ptr, "display_particle", 0); +} + /********************** Search Callbacks *************************/ typedef struct TemplateID { @@ -669,12 +715,12 @@ static uiLayout *draw_modifier(uiLayout *layout, Object *ob, ModifierData *md, i if(ELEM3(psys->part->ren_as, PART_DRAW_PATH, PART_DRAW_GR, PART_DRAW_OB) && psys->pathcache) uiItemO(row, "Convert", 0, "OBJECT_OT_modifier_convert"); } - else + else { uiItemEnumO(row, "Apply", 0, "OBJECT_OT_modifier_apply", "apply_as", MODIFIER_APPLY_DATA); - - if (modifier_sameTopology(md)) - uiItemEnumO(row, "Apply as Shape", 0, "OBJECT_OT_modifier_apply", "apply_as", MODIFIER_APPLY_SHAPE); - + + if (modifier_sameTopology(md)) + uiItemEnumO(row, "Apply as Shape", 0, "OBJECT_OT_modifier_apply", "apply_as", MODIFIER_APPLY_SHAPE); + } uiBlockClearButLock(block); uiBlockSetButLock(block, ob && ob->id.lib, ERROR_LIBDATA_MESSAGE); @@ -1444,7 +1490,7 @@ static void colorband_del_cb(bContext *C, void *cb_v, void *coba_v) /* offset aligns from bottom, standard width 300, height 115 */ -static void colorband_buttons_large(uiBlock *block, ColorBand *coba, int xoffs, int yoffs, RNAUpdateCb *cb) +static void colorband_buttons_large(uiLayout *layout, uiBlock *block, ColorBand *coba, int xoffs, int yoffs, RNAUpdateCb *cb) { uiBut *bt; @@ -1469,18 +1515,28 @@ static void colorband_buttons_large(uiBlock *block, ColorBand *coba, int xoffs, if(coba->tot) { CBData *cbd= coba->data + coba->cur; +#if 1 + /* better to use rna so we can animate them */ + PointerRNA ptr; + RNA_pointer_create(cb->ptr.id.data, &RNA_ColorRampElement, cbd, &ptr); + uiItemR(layout, NULL, 0, &ptr, "color", 0); + //uiItemR(layout, NULL, 0, &ptr, "position", 0); + bt= uiDefButF(block, NUM, 0, "Pos:", 0+xoffs,40+yoffs,100, 20, &cbd->pos, 0.0, 1.0, 10, 0, "The position of the active color stop"); + uiButSetNFunc(bt, colorband_pos_cb, MEM_dupallocN(cb), coba); +#else bt= uiDefButF(block, NUM, 0, "Pos:", 0+xoffs,40+yoffs,100, 20, &cbd->pos, 0.0, 1.0, 10, 0, "The position of the active color stop"); uiButSetNFunc(bt, colorband_pos_cb, MEM_dupallocN(cb), coba); bt= uiDefButF(block, COL, 0, "", 110+xoffs,40+yoffs,80,20, &(cbd->r), 0, 0, 0, B_BANDCOL, "The color value for the active color stop"); uiButSetNFunc(bt, rna_update_cb, MEM_dupallocN(cb), NULL); bt= uiDefButF(block, NUMSLI, 0, "A ", 200+xoffs,40+yoffs,100,20, &cbd->a, 0.0, 1.0, 10, 0, "The alpha value of the active color stop"); uiButSetNFunc(bt, rna_update_cb, MEM_dupallocN(cb), NULL); +#endif } } -static void colorband_buttons_small(uiBlock *block, ColorBand *coba, rctf *butr, RNAUpdateCb *cb) +static void colorband_buttons_small(uiLayout *layout, uiBlock *block, ColorBand *coba, rctf *butr, RNAUpdateCb *cb) { uiBut *bt; float unit= (butr->xmax-butr->xmin)/14.0f; @@ -1494,10 +1550,16 @@ static void colorband_buttons_small(uiBlock *block, ColorBand *coba, rctf *butr, if(coba->tot) { CBData *cbd= coba->data + coba->cur; +#if 1 + PointerRNA ptr; + RNA_pointer_create(cb->ptr.id.data, &RNA_ColorRampElement, cbd, &ptr); + uiItemR(layout, "", 0, &ptr, "color", 0); +#else bt= uiDefButF(block, COL, 0, "", xs+4.0f*unit,butr->ymin+20.0f,2.0f*unit,20, &(cbd->r), 0, 0, 0, B_BANDCOL, "The color value for the active color stop"); uiButSetNFunc(bt, rna_update_cb, MEM_dupallocN(cb), NULL); bt= uiDefButF(block, NUMSLI, 0, "A:", xs+6.0f*unit,butr->ymin+20.0f,4.0f*unit,20, &(cbd->a), 0.0f, 1.0f, 10, 2, "The alpha value of the active color stop"); uiButSetNFunc(bt, rna_update_cb, MEM_dupallocN(cb), NULL); +#endif } bt= uiDefButS(block, MENU, 0, "Interpolation %t|Ease %x1|Cardinal %x3|Linear %x0|B-Spline %x2|Constant %x4", @@ -1510,12 +1572,12 @@ static void colorband_buttons_small(uiBlock *block, ColorBand *coba, rctf *butr, uiBlockEndAlign(block); } -static void colorband_buttons_layout(uiBlock *block, ColorBand *coba, rctf *butr, int small, RNAUpdateCb *cb) +static void colorband_buttons_layout(uiLayout *layout, uiBlock *block, ColorBand *coba, rctf *butr, int small, RNAUpdateCb *cb) { if(small) - colorband_buttons_small(block, coba, butr, cb); + colorband_buttons_small(layout, block, coba, butr, cb); else - colorband_buttons_large(block, coba, 0, 0, cb); + colorband_buttons_large(layout, block, coba, 0, 0, cb); } void uiTemplateColorRamp(uiLayout *layout, PointerRNA *ptr, char *propname, int expand) @@ -1541,7 +1603,7 @@ void uiTemplateColorRamp(uiLayout *layout, PointerRNA *ptr, char *propname, int rect.ymin= 0; rect.ymax= 190; block= uiLayoutAbsoluteBlock(layout); - colorband_buttons_layout(block, cptr.data, &rect, !expand, cb); + colorband_buttons_layout(layout, block, cptr.data, &rect, !expand, cb); MEM_freeN(cb); } @@ -1818,7 +1880,7 @@ static void curvemap_buttons_layout(uiLayout *layout, PointerRNA *ptr, char labe /* black/white levels */ if(levels) { - split= uiLayoutSplit(layout, 0); + split= uiLayoutSplit(layout, 0, 0); uiItemR(uiLayoutColumn(split, 0), NULL, 0, ptr, "black_level", UI_ITEM_R_EXPAND); uiItemR(uiLayoutColumn(split, 0), NULL, 0, ptr, "white_level", UI_ITEM_R_EXPAND); @@ -1905,7 +1967,7 @@ void uiTemplateLayers(uiLayout *layout, PointerRNA *ptr, char *propname, PointerRNA *used_ptr, char *used_propname, int active_layer) { uiLayout *uRow, *uCol; - PropertyRNA *prop, *used_prop; + PropertyRNA *prop, *used_prop= NULL; int groups, cols, layers; int group, col, layer, row; int cols_per_group = 5; @@ -2052,7 +2114,7 @@ static void list_item_row(bContext *C, uiLayout *layout, PointerRNA *ptr, Pointe else if(itemptr->type == &RNA_ShapeKey) { ob= (Object*)activeptr->data; - split= uiLayoutSplit(sub, 0.75f); + split= uiLayoutSplit(sub, 0.75f, 0); uiItemL(split, name, icon); diff --git a/source/blender/editors/interface/interface_utils.c b/source/blender/editors/interface/interface_utils.c index 7aaa6cbb42b..a8cd0e017ed 100644 --- a/source/blender/editors/interface/interface_utils.c +++ b/source/blender/editors/interface/interface_utils.c @@ -151,7 +151,7 @@ void uiDefAutoButsRNA(const bContext *C, uiLayout *layout, PointerRNA *ptr, int uiItemL(col, name, 0); } else if(columns == 2) { - split = uiLayoutSplit(layout, 0.5f); + split = uiLayoutSplit(layout, 0.5f, 0); uiItemL(uiLayoutColumn(split, 0), name, 0); col= uiLayoutColumn(split, 0); diff --git a/source/blender/editors/interface/resources.c b/source/blender/editors/interface/resources.c index 26a50cc3c24..b2ae5572a05 100644 --- a/source/blender/editors/interface/resources.c +++ b/source/blender/editors/interface/resources.c @@ -1252,8 +1252,14 @@ void init_userdef_do_versions(void) /* new audio system */ if(U.audiochannels == 0) U.audiochannels = 2; - if(U.audiodevice == 0) + if(U.audiodevice == 0) { +#ifdef WITH_OPENAL U.audiodevice = 2; +#endif +#ifdef WITH_SDL + U.audiodevice = 1; +#endif + } if(U.audioformat == 0) U.audioformat = 0x24; if(U.audiorate == 0) @@ -1274,6 +1280,12 @@ void init_userdef_do_versions(void) if (U.frameserverport == 0) { U.frameserverport = 8080; } + if (U.dbl_click_time == 0) { + U.dbl_click_time = 350; + } + if (U.anim_player_preset == 0) { + U.anim_player_preset =1 ; + } /* funny name, but it is GE stuff, moves userdef stuff to engine */ // XXX space_set_commmandline_options(); diff --git a/source/blender/editors/interface/view2d_ops.c b/source/blender/editors/interface/view2d_ops.c index 6579e30900b..6742df351d1 100644 --- a/source/blender/editors/interface/view2d_ops.c +++ b/source/blender/editors/interface/view2d_ops.c @@ -274,7 +274,7 @@ void VIEW2D_OT_pan(wmOperatorType *ot) ot->cancel= view_pan_cancel; /* operator is repeatable */ - ot->flag= OPTYPE_BLOCKING; + ot->flag= OPTYPE_BLOCKING|OPTYPE_GRAB_POINTER; /* rna - must keep these in sync with the other operators */ RNA_def_int(ot->srna, "deltax", 0, INT_MIN, INT_MAX, "Delta X", "", INT_MIN, INT_MAX); @@ -1403,7 +1403,7 @@ void VIEW2D_OT_reset(wmOperatorType *ot) /* ********************************************************* */ /* Registration */ -void ui_view2d_operatortypes(void) +void UI_view2d_operatortypes(void) { WM_operatortype_append(VIEW2D_OT_pan); diff --git a/source/blender/editors/mesh/editface.c b/source/blender/editors/mesh/editface.c index d034fe4a783..0e1ac1aa7e8 100644 --- a/source/blender/editors/mesh/editface.c +++ b/source/blender/editors/mesh/editface.c @@ -99,15 +99,17 @@ void object_facesel_flush_dm(Object *ob) int totface; int i; - - if(me==NULL || dm==NULL || !CustomData_has_layer( &dm->faceData, CD_ORIGINDEX)) + if(me==NULL || dm==NULL) + return; + + index_array = dm->getFaceDataArray(dm, CD_ORIGINDEX); + + if(!index_array) return; faces = dm->getFaceArray(dm); totface = dm->getNumFaces(dm); - index_array = dm->getFaceDataArray(dm, CD_ORIGINDEX); - mf= faces; for (i= 0; itotface==0) return 0; -// XXX if (v3d->flag & V3D_NEEDBACKBUFDRAW) { +// XXX if (v3d->flag & V3D_INVALID_BACKBUF) { // XXX drawview.c! check_backbuf(); // XXX persp(PERSP_VIEW); // XXX } diff --git a/source/blender/editors/mesh/editmesh_add.c b/source/blender/editors/mesh/editmesh_add.c index fbe72a54e70..26fde849f9f 100644 --- a/source/blender/editors/mesh/editmesh_add.c +++ b/source/blender/editors/mesh/editmesh_add.c @@ -192,7 +192,7 @@ static int dupli_extrude_cursor(bContext *C, wmOperator *op, wmEvent *event) } } - extrudeflag(vc.obedit, vc.em, SELECT, nor); + extrudeflag(vc.obedit, vc.em, SELECT, nor, 0); rotateflag(vc.em, SELECT, cent, mat); translateflag(vc.em, SELECT, min); @@ -1025,7 +1025,7 @@ static void make_prim(Object *obedit, int type, float mat[4][4], int tot, int se mul_mat3_m4_v3(mat, vec); for(a=0;aco, cmat); } diff --git a/source/blender/editors/mesh/editmesh_lib.c b/source/blender/editors/mesh/editmesh_lib.c index 544dd790dc8..1b90dbc3902 100644 --- a/source/blender/editors/mesh/editmesh_lib.c +++ b/source/blender/editors/mesh/editmesh_lib.c @@ -49,6 +49,7 @@ editmesh_lib: generic (no UI, no menus) operations/evaluators for editmesh data #include "BLI_blenlib.h" #include "BLI_math.h" #include "BLI_editVert.h" +#include "BLI_edgehash.h" #include "BKE_customdata.h" #include "BKE_context.h" @@ -527,7 +528,7 @@ void EM_deselect_flush(EditMesh *em) /* flush selection to edges & faces */ /* this only based on coherent selected vertices, for example when adding new - objects. call clear_flag_all() before you select vertices to be sure it ends OK! + objects. call clear_flag_all() before you select vertices to be sure it ends OK! */ @@ -1142,7 +1143,7 @@ short extrudeflag_verts_indiv(EditMesh *em, short flag, float *nor) /* this is actually a recode of extrudeflag(), using proper edge/face select */ /* hurms, doesnt use 'flag' yet, but its not called by primitive making stuff anyway */ -static short extrudeflag_edge(Object *obedit, EditMesh *em, short flag, float *nor) +static short extrudeflag_edge(Object *obedit, EditMesh *em, short flag, float *nor, int all) { /* all select edges/faces: extrude */ /* old select is cleared, in new ones it is set */ @@ -1255,11 +1256,13 @@ static short extrudeflag_edge(Object *obedit, EditMesh *em, short flag, float *n set_edge_directions_f2(em, 2); /* step 1.5: if *one* selected face has edge with unselected face; remove old selected faces */ - for(efa= em->faces.last; efa; efa= efa->prev) { - if(efa->f & SELECT) { - if(efa->e1->f1 || efa->e2->f1 || efa->e3->f1 || (efa->e4 && efa->e4->f1)) { - del_old= 1; - break; + if(all == 0) { + for(efa= em->faces.last; efa; efa= efa->prev) { + if(efa->f & SELECT) { + if(efa->e1->f1 || efa->e2->f1 || efa->e3->f1 || (efa->e4 && efa->e4->f1)) { + del_old= 1; + break; + } } } } @@ -1397,7 +1400,7 @@ static short extrudeflag_edge(Object *obedit, EditMesh *em, short flag, float *n return 'n'; // normal constraint } -short extrudeflag_vert(Object *obedit, EditMesh *em, short flag, float *nor) +short extrudeflag_vert(Object *obedit, EditMesh *em, short flag, float *nor, int all) { /* all verts/edges/faces with (f & 'flag'): extrude */ /* from old verts, 'flag' is cleared, in new ones it is set */ @@ -1568,7 +1571,7 @@ short extrudeflag_vert(Object *obedit, EditMesh *em, short flag, float *nor) */ /* find if we delete old faces */ - if(is_face_sel) { + if(is_face_sel && all==0) { for(eed= em->edges.first; eed; eed= eed->next) { if( (eed->f2==1 || eed->f2==2) ) { if(eed->f1==2) { @@ -1684,12 +1687,12 @@ short extrudeflag_vert(Object *obedit, EditMesh *em, short flag, float *nor) } /* generic extrude */ -short extrudeflag(Object *obedit, EditMesh *em, short flag, float *nor) +short extrudeflag(Object *obedit, EditMesh *em, short flag, float *nor, int all) { if(em->selectmode & SCE_SELECT_VERTEX) - return extrudeflag_vert(obedit, em, flag, nor); + return extrudeflag_vert(obedit, em, flag, nor, all); else - return extrudeflag_edge(obedit, em, flag, nor); + return extrudeflag_edge(obedit, em, flag, nor, all); } @@ -2287,3 +2290,160 @@ int EM_view3d_poll(bContext *C) return 1; return 0; } + +/* higher quality normals */ + +/* NormalCalc */ +/* NormalCalc modifier: calculates higher quality normals +*/ + +/* each edge uses this to */ +typedef struct EdgeFaceRef { + int f1; /* init as -1 */ + int f2; +} EdgeFaceRef; + +void EM_make_hq_normals(EditMesh *em) +{ + EditFace *efa; + EditVert *eve; + int i; + + EdgeHash *edge_hash = BLI_edgehash_new(); + EdgeHashIterator *edge_iter; + int edge_ref_count = 0; + int ed_v1, ed_v2; /* use when getting the key */ + EdgeFaceRef *edge_ref_array = MEM_callocN(em->totedge * sizeof(EdgeFaceRef), "Edge Connectivity"); + EdgeFaceRef *edge_ref; + float edge_normal[3]; + + EM_init_index_arrays(em, 1, 1, 1); + + for(eve= em->verts.first, i=0; eve; eve= eve->next, i++) { + zero_v3(eve->no); + eve->tmp.l= i; + } + + /* This function adds an edge hash if its not there, and adds the face index */ +#define NOCALC_EDGEWEIGHT_ADD_EDGEREF_FACE(EDV1, EDV2); \ + edge_ref = (EdgeFaceRef *)BLI_edgehash_lookup(edge_hash, EDV1, EDV2); \ + if (!edge_ref) { \ + edge_ref = &edge_ref_array[edge_ref_count]; edge_ref_count++; \ + edge_ref->f1=i; \ + edge_ref->f2=-1; \ + BLI_edgehash_insert(edge_hash, EDV1, EDV2, edge_ref); \ + } else { \ + edge_ref->f2=i; \ + } + + + efa= em->faces.first; + for(i = 0; i < em->totface; i++, efa= efa->next) { + if(efa->v4) { + NOCALC_EDGEWEIGHT_ADD_EDGEREF_FACE(efa->v1->tmp.l, efa->v2->tmp.l); + NOCALC_EDGEWEIGHT_ADD_EDGEREF_FACE(efa->v2->tmp.l, efa->v3->tmp.l); + NOCALC_EDGEWEIGHT_ADD_EDGEREF_FACE(efa->v3->tmp.l, efa->v4->tmp.l); + NOCALC_EDGEWEIGHT_ADD_EDGEREF_FACE(efa->v4->tmp.l, efa->v1->tmp.l); + } else { + NOCALC_EDGEWEIGHT_ADD_EDGEREF_FACE(efa->v1->tmp.l, efa->v2->tmp.l); + NOCALC_EDGEWEIGHT_ADD_EDGEREF_FACE(efa->v2->tmp.l, efa->v3->tmp.l); + NOCALC_EDGEWEIGHT_ADD_EDGEREF_FACE(efa->v3->tmp.l, efa->v1->tmp.l); + } + } + +#undef NOCALC_EDGEWEIGHT_ADD_EDGEREF_FACE + + + for(edge_iter = BLI_edgehashIterator_new(edge_hash); !BLI_edgehashIterator_isDone(edge_iter); BLI_edgehashIterator_step(edge_iter)) { + /* Get the edge vert indicies, and edge value (the face indicies that use it)*/ + BLI_edgehashIterator_getKey(edge_iter, (int*)&ed_v1, (int*)&ed_v2); + edge_ref = BLI_edgehashIterator_getValue(edge_iter); + + if (edge_ref->f2 != -1) { + EditFace *ef1= EM_get_face_for_index(edge_ref->f1), *ef2= EM_get_face_for_index(edge_ref->f2); + float angle= angle_normalized_v3v3(ef1->n, ef2->n); + if(angle > 0.0f) { + /* We have 2 faces using this edge, calculate the edges normal + * using the angle between the 2 faces as a weighting */ + add_v3_v3v3(edge_normal, ef1->n, ef2->n); + normalize_v3(edge_normal); + mul_v3_fl(edge_normal, angle); + } + else { + /* cant do anything useful here! + Set the face index for a vert incase it gets a zero normal */ + EM_get_vert_for_index(ed_v1)->tmp.l= + EM_get_vert_for_index(ed_v2)->tmp.l= -(edge_ref->f1 + 1); + continue; + } + } else { + /* only one face attached to that edge */ + /* an edge without another attached- the weight on this is + * undefined, M_PI/2 is 90d in radians and that seems good enough */ + VECCOPY(edge_normal, EM_get_face_for_index(edge_ref->f1)->n) + mul_v3_fl(edge_normal, M_PI/2); + } + add_v3_v3(EM_get_vert_for_index(ed_v1)->no, edge_normal ); + add_v3_v3(EM_get_vert_for_index(ed_v2)->no, edge_normal ); + + + } + BLI_edgehashIterator_free(edge_iter); + BLI_edgehash_free(edge_hash, NULL); + MEM_freeN(edge_ref_array); + + /* normalize vertex normals and assign */ + for(eve= em->verts.first; eve; eve= eve->next) { + if(normalize_v3(eve->no) == 0.0f && eve->tmp.l < 0) { + /* exceptional case, totally flat */ + efa= EM_get_face_for_index(-(eve->tmp.l) - 1); + VECCOPY(eve->no, efa->n); + } + } + + EM_free_index_arrays(); +} + +void EM_solidify(EditMesh *em, float dist) +{ + EditFace *efa; + EditVert *eve; + float *vert_angles= MEM_callocN(sizeof(float) * em->totvert * 2, "EM_solidify"); /* 2 in 1 */ + float *vert_accum= vert_angles + em->totvert; + float face_angles[4]; + int i, j; + + for(eve= em->verts.first, i=0; eve; eve= eve->next, i++) { + eve->tmp.l= i; + } + + efa= em->faces.first; + for(i = 0; i < em->totface; i++, efa= efa->next) { + + if(!(efa->f & SELECT)) + continue; + + if(efa->v4) { + angle_quad_v3(face_angles, efa->v1->co, efa->v2->co, efa->v3->co, efa->v4->co); + j= 3; + } + else { + angle_tri_v3(face_angles, efa->v1->co, efa->v2->co, efa->v3->co); + j= 2; + } + + for(; j>=0; j--) { + eve= *(&efa->v1 + j); + vert_accum[eve->tmp.l] += face_angles[j]; + vert_angles[eve->tmp.l]+= shell_angle_to_dist(angle_normalized_v3v3(eve->no, efa->n)) * face_angles[j]; + } + } + + for(eve= em->verts.first, i=0; eve; eve= eve->next, i++) { + if(vert_accum[i]) { /* zero if unselected */ + madd_v3_v3fl(eve->co, eve->no, dist * vert_angles[i] / vert_accum[i]); + } + } + + MEM_freeN(vert_angles); +} diff --git a/source/blender/editors/mesh/editmesh_mods.c b/source/blender/editors/mesh/editmesh_mods.c index e7986d227cf..0fa6ff0188c 100644 --- a/source/blender/editors/mesh/editmesh_mods.c +++ b/source/blender/editors/mesh/editmesh_mods.c @@ -3629,7 +3629,7 @@ static int mesh_select_random_exec(bContext *C, wmOperator *op) if(!RNA_boolean_get(op->ptr, "extend")) EM_deselect_all(em); - selectrandom_mesh(em, RNA_float_get(op->ptr, "percentage")/100.0f); + selectrandom_mesh(em, RNA_float_get(op->ptr, "percent")/100.0f); WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obedit->data); @@ -3652,8 +3652,8 @@ void MESH_OT_select_random(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; /* props */ - RNA_def_float_percentage(ot->srna, "percentage", 50.f, 0.0f, 100.0f, "Percentage", "Percentage of elements to select randomly.", 0.f, 100.0f); - RNA_def_boolean(ot->srna, "extend", 0, "Extend Select", ""); + RNA_def_float_percentage(ot->srna, "percent", 50.f, 0.0f, 100.0f, "Percent", "Percentage of elements to select randomly.", 0.f, 100.0f); + RNA_def_boolean(ot->srna, "extend", FALSE, "Extend Selection", "Extend selection instead of deselecting everything first."); } void EM_select_by_material(EditMesh *em, int index) @@ -4542,3 +4542,47 @@ void MESH_OT_flip_normals(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } + +static int solidify_exec(bContext *C, wmOperator *op) +{ + Object *obedit= CTX_data_edit_object(C); + EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data)); + float nor[3] = {0,0,1}; + + float thickness= RNA_float_get(op->ptr, "thickness"); + + extrudeflag(obedit, em, SELECT, nor, 1); + EM_make_hq_normals(em); + EM_solidify(em, thickness); + + + /* update vertex normals too */ + recalc_editnormals(em); + + BKE_mesh_end_editmesh(obedit->data, em); + + DAG_id_flush_update(obedit->data, OB_RECALC_DATA); + WM_event_add_notifier(C, NC_GEOM|ND_DATA, obedit->data); + + return OPERATOR_FINISHED; +} + + +void MESH_OT_solidify(wmOperatorType *ot) +{ + PropertyRNA *prop; + /* identifiers */ + ot->name= "Solidify"; + ot->description= "Create a solid skin by extruding, compensating for sharp angles."; + ot->idname= "MESH_OT_solidify"; + + /* api callbacks */ + ot->exec= solidify_exec; + ot->poll= ED_operator_editmesh; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + prop= RNA_def_float(ot->srna, "thickness", 0.01f, -FLT_MAX, FLT_MAX, "thickness", "", -10.0f, 10.0f); + RNA_def_property_ui_range(prop, -10, 10, 0.1, 4); +} diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 089a35f8402..e41d60783fe 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -660,7 +660,7 @@ void extrude_mesh(Scene *scene, Object *obedit, EditMesh *em, wmOperator *op) if(nr<1) return; - if(nr==1) transmode= extrudeflag(obedit, em, SELECT, nor); + if(nr==1) transmode= extrudeflag(obedit, em, SELECT, nor, 0); else if(nr==4) transmode= extrudeflag_verts_indiv(em, SELECT, nor); else if(nr==3) transmode= extrudeflag_edges_indiv(em, SELECT, nor); else transmode= extrudeflag_face_indiv(em, SELECT, nor); @@ -816,7 +816,7 @@ static int extrude_repeat_mesh(bContext *C, wmOperator *op) mul_m3_v3(tmat, dvec); for(a=0; aptr, "proportional", 0); // RNA_boolean_set(op->ptr, "mirror", 0); -// WM_operator_name_call(C, "TFM_OT_translate", WM_OP_INVOKE_REGION_WIN, op->ptr); +// WM_operator_name_call(C, "TRANSFORM_OT_translate", WM_OP_INVOKE_REGION_WIN, op->ptr); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/mesh/loopcut.c b/source/blender/editors/mesh/loopcut.c index e12f3c99fcd..9fea0d08e70 100644 --- a/source/blender/editors/mesh/loopcut.c +++ b/source/blender/editors/mesh/loopcut.c @@ -409,18 +409,24 @@ static int ringsel_modal (bContext *C, wmOperator *op, wmEvent *event) ED_region_tag_redraw(lcd->ar); break; case WHEELUPMOUSE: /* change number of cuts */ - cuts++; - RNA_int_set(op->ptr,"number_cuts",cuts); - ringsel_find_edge(lcd, C, lcd->ar, cuts); - - ED_region_tag_redraw(lcd->ar); + case PAGEUPKEY: + if (event->val == KM_PRESS) { + cuts++; + RNA_int_set(op->ptr,"number_cuts",cuts); + ringsel_find_edge(lcd, C, lcd->ar, cuts); + + ED_region_tag_redraw(lcd->ar); + } break; case WHEELDOWNMOUSE: /* change number of cuts */ - cuts=MAX2(cuts-1,1); - RNA_int_set(op->ptr,"number_cuts",cuts); - ringsel_find_edge(lcd, C, lcd->ar,cuts); - - ED_region_tag_redraw(lcd->ar); + case PAGEDOWNKEY: + if (event->val == KM_PRESS) { + cuts=MAX2(cuts-1,1); + RNA_int_set(op->ptr,"number_cuts",cuts); + ringsel_find_edge(lcd, C, lcd->ar,cuts); + + ED_region_tag_redraw(lcd->ar); + } break; case MOUSEMOVE: { /* mouse moved somewhere to select another loop */ int dist = 75; @@ -455,7 +461,7 @@ void MESH_OT_edgering_select (wmOperatorType *ot) ot->invoke= ringsel_invoke; ot->modal= ringsel_modal; ot->cancel= ringsel_cancel; - ot->poll= ED_operator_editmesh; + ot->poll= ED_operator_editmesh_view3d; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; @@ -474,7 +480,7 @@ void MESH_OT_loopcut (wmOperatorType *ot) ot->invoke= ringcut_invoke; ot->modal= ringsel_modal; ot->cancel= ringsel_cancel; - ot->poll= ED_operator_editmesh; + ot->poll= ED_operator_editmesh_view3d; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; diff --git a/source/blender/editors/mesh/mesh_intern.h b/source/blender/editors/mesh/mesh_intern.h index 4ce9afaf237..5d9da374f2f 100644 --- a/source/blender/editors/mesh/mesh_intern.h +++ b/source/blender/editors/mesh/mesh_intern.h @@ -116,8 +116,8 @@ extern int compareface(EditFace *vl1, EditFace *vl2); extern short extrudeflag_face_indiv(EditMesh *em, short flag, float *nor); extern short extrudeflag_verts_indiv(EditMesh *em, short flag, float *nor); extern short extrudeflag_edges_indiv(EditMesh *em, short flag, float *nor); -extern short extrudeflag_vert(Object *obedit, EditMesh *em, short flag, float *nor); -extern short extrudeflag(Object *obedit, EditMesh *em, short flag, float *nor); +extern short extrudeflag_vert(Object *obedit, EditMesh *em, short flag, float *nor, int all); +extern short extrudeflag(Object *obedit, EditMesh *em, short flag, float *nor, int all); extern void adduplicateflag(EditMesh *em, int flag); extern void delfaceflag(EditMesh *em, int flag); @@ -164,6 +164,8 @@ void MESH_OT_mark_seam(struct wmOperatorType *ot); void MESH_OT_mark_sharp(struct wmOperatorType *ot); void MESH_OT_vertices_smooth(struct wmOperatorType *ot); void MESH_OT_flip_normals(struct wmOperatorType *ot); +void MESH_OT_solidify(struct wmOperatorType *ot); + extern EditEdge *findnearestedge(ViewContext *vc, int *dist); extern void EM_automerge(Scene *scene, Object *obedit, int update); diff --git a/source/blender/editors/mesh/mesh_ops.c b/source/blender/editors/mesh/mesh_ops.c index 866638d2f20..621e952fb6d 100644 --- a/source/blender/editors/mesh/mesh_ops.c +++ b/source/blender/editors/mesh/mesh_ops.c @@ -151,6 +151,8 @@ void ED_operatortypes_mesh(void) WM_operatortype_append(MESH_OT_edgering_select); WM_operatortype_append(MESH_OT_loopcut); + + WM_operatortype_append(MESH_OT_solidify); } int ED_operator_editmesh_face_select(bContext *C) @@ -171,31 +173,31 @@ void ED_operatormacros_mesh(void) wmOperatorTypeMacro *otmacro; int constraint_axis[3] = {0, 0, 1}; - ot= WM_operatortype_append_macro("MESH_OT_loopcut_slide", "Loopcut and Slide", OPTYPE_UNDO|OPTYPE_REGISTER); + ot= WM_operatortype_append_macro("MESH_OT_loopcut_slide", "Loop Cut and Slide", OPTYPE_UNDO|OPTYPE_REGISTER); WM_operatortype_macro_define(ot, "MESH_OT_loopcut"); - WM_operatortype_macro_define(ot, "TFM_OT_edge_slide"); + WM_operatortype_macro_define(ot, "TRANSFORM_OT_edge_slide"); ot= WM_operatortype_append_macro("MESH_OT_duplicate_move", "Add Duplicate", OPTYPE_UNDO|OPTYPE_REGISTER); WM_operatortype_macro_define(ot, "MESH_OT_duplicate"); - otmacro= WM_operatortype_macro_define(ot, "TFM_OT_translate"); + otmacro= WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate"); RNA_enum_set(otmacro->ptr, "proportional", 0); ot= WM_operatortype_append_macro("MESH_OT_rip_move", "Rip", OPTYPE_UNDO|OPTYPE_REGISTER); WM_operatortype_macro_define(ot, "MESH_OT_rip"); - otmacro= WM_operatortype_macro_define(ot, "TFM_OT_translate"); + otmacro= WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate"); RNA_enum_set(otmacro->ptr, "proportional", 0); ot= WM_operatortype_append_macro("MESH_OT_extrude_move_along_normals", "Extrude Along Normals", OPTYPE_UNDO|OPTYPE_REGISTER); ot->poll = ED_operator_editmesh_face_select; /* restrict extrude along normals to face select */ WM_operatortype_macro_define(ot, "MESH_OT_extrude"); - otmacro= WM_operatortype_macro_define(ot, "TFM_OT_translate"); + otmacro= WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate"); RNA_enum_set(otmacro->ptr, "proportional", 0); RNA_enum_set(otmacro->ptr, "constraint_orientation", V3D_MANIP_NORMAL); RNA_boolean_set_array(otmacro->ptr, "constraint_axis", constraint_axis); ot= WM_operatortype_append_macro("MESH_OT_extrude_move", "Extrude", OPTYPE_UNDO|OPTYPE_REGISTER); WM_operatortype_macro_define(ot, "MESH_OT_extrude"); - otmacro= WM_operatortype_macro_define(ot, "TFM_OT_translate"); + otmacro= WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate"); RNA_enum_set(otmacro->ptr, "proportional", 0); } @@ -253,7 +255,6 @@ void ED_keymap_mesh(wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "MESH_OT_extrude_move", EKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "MESH_OT_spin", RKEY, KM_PRESS, KM_ALT, 0); - WM_keymap_add_item(keymap, "MESH_OT_screw", NINEKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "MESH_OT_fill", FKEY, KM_PRESS, KM_SHIFT, 0); WM_keymap_add_item(keymap, "MESH_OT_beauty_fill", FKEY, KM_PRESS, KM_ALT, 0); @@ -261,20 +262,11 @@ void ED_keymap_mesh(wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "MESH_OT_tris_convert_to_quads", JKEY, KM_PRESS, KM_ALT, 0); WM_keymap_add_item(keymap, "MESH_OT_edge_flip", FKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0); - WM_keymap_add_item(keymap, "MESH_OT_extrude_repeat", FOURKEY, KM_PRESS, KM_ALT, 0); - WM_keymap_add_item(keymap, "MESH_OT_edge_rotate", FIVEKEY, KM_PRESS, KM_CTRL, 0); - - WM_keymap_add_item(keymap, "MESH_OT_loop_to_region",SIXKEY, KM_PRESS, KM_CTRL, 0); - WM_keymap_add_item(keymap, "MESH_OT_region_to_loop",SIXKEY, KM_PRESS, KM_ALT, 0); - - WM_keymap_add_item(keymap, "MESH_OT_uvs_rotate",SEVENKEY, KM_PRESS, KM_CTRL, 0); - WM_keymap_add_item(keymap, "MESH_OT_uvs_mirror",SEVENKEY, KM_PRESS, KM_ALT, 0); - WM_keymap_add_item(keymap, "MESH_OT_colors_rotate",EIGHTKEY, KM_PRESS, KM_CTRL, 0); - WM_keymap_add_item(keymap, "MESH_OT_colors_mirror",EIGHTKEY, KM_PRESS, KM_ALT, 0); - WM_keymap_add_item(keymap, "MESH_OT_rip_move",VKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "MESH_OT_merge", MKEY, KM_PRESS, KM_ALT, 0); + WM_keymap_add_item(keymap, "TRANSFORM_OT_shrink_fatten", SKEY, KM_PRESS, KM_ALT, 0); + /* add/remove */ WM_keymap_add_item(keymap, "MESH_OT_edge_face_add", FKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "MESH_OT_skin", FKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); /* python */ diff --git a/source/blender/editors/metaball/mball_edit.c b/source/blender/editors/metaball/mball_edit.c index d4ad833d11e..d8e36a503f1 100644 --- a/source/blender/editors/metaball/mball_edit.c +++ b/source/blender/editors/metaball/mball_edit.c @@ -370,7 +370,7 @@ static int duplicate_metaelems_invoke(bContext *C, wmOperator *op, wmEvent *even if (retv == OPERATOR_FINISHED) { RNA_int_set(op->ptr, "mode", TFM_TRANSLATION); - WM_operator_name_call(C, "TFM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr); + WM_operator_name_call(C, "TRANSFORM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr); } return retv; diff --git a/source/blender/editors/object/object_hook.c b/source/blender/editors/object/object_hook.c index a2feee54c8c..313ffe79c66 100644 --- a/source/blender/editors/object/object_hook.c +++ b/source/blender/editors/object/object_hook.c @@ -491,7 +491,7 @@ static int object_add_hook_selob_exec(bContext *C, wmOperator *op) add_hook_object(scene, obedit, obsel, OBJECT_ADDHOOK_SELOB); - WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene); + WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, obedit); return OPERATOR_FINISHED; } @@ -518,6 +518,7 @@ static int object_add_hook_newob_exec(bContext *C, wmOperator *op) add_hook_object(scene, obedit, NULL, OBJECT_ADDHOOK_NEWOB); WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene); + WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, obedit); return OPERATOR_FINISHED; } @@ -559,7 +560,7 @@ static int object_hook_remove_exec(bContext *C, wmOperator *op) modifier_free((ModifierData *)hmd); DAG_id_flush_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h index c87210d6070..562216e5890 100644 --- a/source/blender/editors/object/object_intern.h +++ b/source/blender/editors/object/object_intern.h @@ -142,7 +142,10 @@ void OBJECT_OT_modifier_apply(struct wmOperatorType *ot); void OBJECT_OT_modifier_convert(struct wmOperatorType *ot); void OBJECT_OT_modifier_copy(struct wmOperatorType *ot); void OBJECT_OT_multires_subdivide(struct wmOperatorType *ot); +void OBJECT_OT_multires_reshape(struct wmOperatorType *ot); void OBJECT_OT_multires_higher_levels_delete(struct wmOperatorType *ot); +void OBJECT_OT_multires_save_external(struct wmOperatorType *ot); +void OBJECT_OT_multires_pack_external(struct wmOperatorType *ot); void OBJECT_OT_meshdeform_bind(struct wmOperatorType *ot); void OBJECT_OT_explode_refresh(struct wmOperatorType *ot); diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c index 0c1e6b86a99..552de1f8f60 100644 --- a/source/blender/editors/object/object_modifier.c +++ b/source/blender/editors/object/object_modifier.c @@ -44,6 +44,7 @@ #include "BLI_math.h" #include "BLI_listbase.h" #include "BLI_string.h" +#include "BLI_path_util.h" #include "BKE_action.h" #include "BKE_curve.h" @@ -185,7 +186,13 @@ int ED_object_modifier_remove(ReportList *reports, Scene *scene, Object *ob, Mod DAG_scene_sort(scene); } else if(md->type == eModifierType_Smoke) { - ob->dt = OB_SHADED; + ob->dt = OB_TEXTURE; + } + else if(md->type == eModifierType_Multires) { + Mesh *me= ob->data; + + CustomData_external_remove(&me->fdata, &me->id, CD_MDISPS, me->totface); + CustomData_free_layer_active(&me->fdata, CD_MDISPS, me->totface); } BLI_remlink(&ob->modifiers, md); @@ -414,7 +421,7 @@ static int modifier_apply_obdata(ReportList *reports, Scene *scene, Object *ob, BKE_report(reports, RPT_INFO, "Applied modifier only changed CV points, not tesselated/bevel vertices"); - if (!(md->mode&eModifierMode_Realtime) || (mti->isDisabled && mti->isDisabled(md))) { + if (!(md->mode&eModifierMode_Realtime) || (mti->isDisabled && mti->isDisabled(md, 0))) { BKE_report(reports, RPT_ERROR, "Modifier is disabled, skipping apply"); return 0; } @@ -745,6 +752,13 @@ void OBJECT_OT_modifier_copy(wmOperatorType *ot) /************* multires delete higher levels operator ****************/ +static int multires_poll(bContext *C) +{ + PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", &RNA_MultiresModifier); + ID *id= ptr.id.data; + return (ptr.data && id && !id->lib); +} + static int multires_higher_levels_delete_exec(bContext *C, wmOperator *op) { PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", &RNA_MultiresModifier); @@ -763,8 +777,8 @@ void OBJECT_OT_multires_higher_levels_delete(wmOperatorType *ot) { ot->name= "Delete Higher Levels"; ot->idname= "OBJECT_OT_multires_higher_levels_delete"; - ot->poll= ED_operator_object_active_editable; + ot->poll= multires_poll; ot->exec= multires_higher_levels_delete_exec; /* flags */ @@ -779,27 +793,158 @@ static int multires_subdivide_exec(bContext *C, wmOperator *op) Object *ob= ptr.id.data; MultiresModifierData *mmd= ptr.data; - multiresModifier_subdivide(mmd, ob, 1, 0, mmd->simple); + multiresModifier_subdivide(mmd, ob, 0, mmd->simple); + + DAG_id_flush_update(&ob->id, OB_RECALC_DATA); WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob); return OPERATOR_FINISHED; } -static int multires_subdivide_poll(bContext *C) -{ - PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", &RNA_MultiresModifier); - ID *id= ptr.id.data; - return (ptr.data && id && !id->lib); -} - void OBJECT_OT_multires_subdivide(wmOperatorType *ot) { ot->name= "Multires Subdivide"; ot->description= "Add a new level of subdivision."; ot->idname= "OBJECT_OT_multires_subdivide"; + ot->poll= multires_poll; ot->exec= multires_subdivide_exec; - ot->poll= multires_subdivide_poll; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/****************** multires reshape operator *********************/ + +static int multires_reshape_exec(bContext *C, wmOperator *op) +{ + PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", &RNA_MultiresModifier); + Object *ob= ptr.id.data, *secondob= NULL; + MultiresModifierData *mmd= ptr.data; + + CTX_DATA_BEGIN(C, Object*, selob, selected_editable_objects) { + if(selob->type == OB_MESH && selob != ob) { + secondob= selob; + break; + } + } + CTX_DATA_END; + + if(!secondob) { + BKE_report(op->reports, RPT_ERROR, "Second selected mesh object require to copy shape from."); + return OPERATOR_CANCELLED; + } + + if(!multiresModifier_reshape(mmd, ob, secondob)) { + BKE_report(op->reports, RPT_ERROR, "Objects do not have the same number of vertices."); + return OPERATOR_CANCELLED; + } + + DAG_id_flush_update(&ob->id, OB_RECALC_DATA); + WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob); + + return OPERATOR_FINISHED; +} + +void OBJECT_OT_multires_reshape(wmOperatorType *ot) +{ + ot->name= "Multires Reshape"; + ot->description= "Copy vertex coordinates from other object."; + ot->idname= "OBJECT_OT_multires_reshape"; + + ot->poll= multires_poll; + ot->exec= multires_reshape_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/****************** multires save external operator *********************/ + +static int multires_save_external_exec(bContext *C, wmOperator *op) +{ + PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", &RNA_MultiresModifier); + Object *ob= ptr.id.data; + Mesh *me= (ob)? ob->data: op->customdata; + char path[FILE_MAX]; + + if(CustomData_external_test(&me->fdata, CD_MDISPS)) + return OPERATOR_CANCELLED; + + RNA_string_get(op->ptr, "path", path); + if(G.save_over) + BLI_makestringcode(G.sce, path); /* make relative */ + + CustomData_external_add(&me->fdata, &me->id, CD_MDISPS, me->totface, path); + CustomData_external_write(&me->fdata, &me->id, CD_MASK_MESH, me->totface, 0); + + return OPERATOR_FINISHED; +} + +static int multires_save_external_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", &RNA_MultiresModifier); + Object *ob= ptr.id.data; + Mesh *me= ob->data; + char path[FILE_MAX]; + + if(CustomData_external_test(&me->fdata, CD_MDISPS)) + return OPERATOR_CANCELLED; + + if(RNA_property_is_set(op->ptr, "path")) + return multires_save_external_exec(C, op); + + op->customdata= me; + + BLI_snprintf(path, sizeof(path), "//%s.btx", me->id.name+2); + RNA_string_set(op->ptr, "path", path); + + WM_event_add_fileselect(C, op); + + return OPERATOR_RUNNING_MODAL; +} + +void OBJECT_OT_multires_save_external(wmOperatorType *ot) +{ + ot->name= "Multires Save External"; + ot->description= "Save displacements to an external file."; + ot->idname= "OBJECT_OT_multires_save_external"; + + ot->poll= multires_poll; + ot->exec= multires_save_external_exec; + ot->invoke= multires_save_external_invoke; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + WM_operator_properties_filesel(ot, FOLDERFILE|BTXFILE, FILE_SPECIAL); +} + +/****************** multires pack operator *********************/ + +static int multires_pack_external_exec(bContext *C, wmOperator *op) +{ + PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", &RNA_MultiresModifier); + Object *ob= ptr.id.data; + Mesh *me= ob->data; + + if(!CustomData_external_test(&me->fdata, CD_MDISPS)) + return OPERATOR_CANCELLED; + + // XXX don't remove.. + CustomData_external_remove(&me->fdata, &me->id, CD_MDISPS, me->totface); + + return OPERATOR_FINISHED; +} + +void OBJECT_OT_multires_pack_external(wmOperatorType *ot) +{ + ot->name= "Multires Pack External"; + ot->description= "Pack displacements from an external file."; + ot->idname= "OBJECT_OT_multires_pack_external"; + + ot->poll= multires_poll; + ot->exec= multires_pack_external_exec; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c index 49c947f52c8..bd43e9c24c4 100644 --- a/source/blender/editors/object/object_ops.c +++ b/source/blender/editors/object/object_ops.c @@ -135,7 +135,10 @@ void ED_operatortypes_object(void) WM_operatortype_append(OBJECT_OT_modifier_convert); WM_operatortype_append(OBJECT_OT_modifier_copy); WM_operatortype_append(OBJECT_OT_multires_subdivide); + WM_operatortype_append(OBJECT_OT_multires_reshape); WM_operatortype_append(OBJECT_OT_multires_higher_levels_delete); + WM_operatortype_append(OBJECT_OT_multires_save_external); + WM_operatortype_append(OBJECT_OT_multires_pack_external); WM_operatortype_append(OBJECT_OT_meshdeform_bind); WM_operatortype_append(OBJECT_OT_explode_refresh); @@ -203,7 +206,7 @@ void ED_operatormacros_object(void) ot= WM_operatortype_append_macro("OBJECT_OT_duplicate_move", "Duplicate", OPTYPE_UNDO|OPTYPE_REGISTER); if(ot) { WM_operatortype_macro_define(ot, "OBJECT_OT_duplicate"); - otmacro= WM_operatortype_macro_define(ot, "TFM_OT_translate"); + otmacro= WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate"); RNA_enum_set(otmacro->ptr, "proportional", PROP_EDIT_OFF); } @@ -212,7 +215,7 @@ void ED_operatormacros_object(void) if(ot) { otmacro= WM_operatortype_macro_define(ot, "OBJECT_OT_duplicate"); RNA_boolean_set(otmacro->ptr, "linked", 1); - otmacro= WM_operatortype_macro_define(ot, "TFM_OT_translate"); + otmacro= WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate"); RNA_enum_set(otmacro->ptr, "proportional", PROP_EDIT_OFF); } } @@ -227,6 +230,7 @@ void ED_keymap_object(wmKeyConfig *keyconf) { wmKeyMap *keymap; wmKeyMapItem *kmi; + int i; /* Objects, Regardless of Mode -------------------------------------------------- */ keymap= WM_keymap_find(keyconf, "Object Non-modal", 0, 0); @@ -244,9 +248,6 @@ void ED_keymap_object(wmKeyConfig *keyconf) RNA_enum_set(kmi->ptr, "mode", OB_MODE_VERTEX_PAINT); RNA_boolean_set(kmi->ptr, "toggle", 1); - kmi = WM_keymap_add_item(keymap, "OBJECT_OT_mode_set", VKEY, KM_PRESS, 0, 0); - RNA_enum_set(kmi->ptr, "mode", OB_MODE_VERTEX_PAINT); - RNA_boolean_set(kmi->ptr, "toggle", 1); kmi = WM_keymap_add_item(keymap, "OBJECT_OT_mode_set", TABKEY, KM_PRESS, KM_CTRL, 0); RNA_enum_set(kmi->ptr, "mode", OB_MODE_WEIGHT_PAINT); RNA_boolean_set(kmi->ptr, "toggle", 1); @@ -261,6 +262,8 @@ void ED_keymap_object(wmKeyConfig *keyconf) /* object mode supports PET now */ ED_object_generic_keymap(keyconf, keymap, TRUE); + WM_keymap_add_item(keymap, "VIEW3D_OT_game_start", PKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "OBJECT_OT_select_all", AKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "OBJECT_OT_select_inverse", IKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "OBJECT_OT_select_linked", LKEY, KM_PRESS, KM_SHIFT, 0); @@ -314,16 +317,10 @@ void ED_keymap_object(wmKeyConfig *keyconf) WM_keymap_verify_item(keymap, "GROUP_OT_objects_add_active", GKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0); WM_keymap_verify_item(keymap, "GROUP_OT_objects_remove_active", GKEY, KM_PRESS, KM_SHIFT|KM_ALT, 0); - kmi = WM_keymap_add_item(keymap, "OBJECT_OT_subsurf_set", ONEKEY, KM_PRESS, KM_CTRL, 0); - RNA_int_set(kmi->ptr, "level", 1); - kmi = WM_keymap_add_item(keymap, "OBJECT_OT_subsurf_set", TWOKEY, KM_PRESS, KM_CTRL, 0); - RNA_int_set(kmi->ptr, "level", 2); - kmi = WM_keymap_add_item(keymap, "OBJECT_OT_subsurf_set", THREEKEY, KM_PRESS, KM_CTRL, 0); - RNA_int_set(kmi->ptr, "level", 3); - kmi = WM_keymap_add_item(keymap, "OBJECT_OT_subsurf_set", FOURKEY, KM_PRESS, KM_CTRL, 0); - RNA_int_set(kmi->ptr, "level", 4); - kmi = WM_keymap_add_item(keymap, "OBJECT_OT_subsurf_set", FIVEKEY, KM_PRESS, KM_CTRL, 0); - RNA_int_set(kmi->ptr, "level", 5); + for(i=1; i<=5; i++) { + kmi = WM_keymap_add_item(keymap, "OBJECT_OT_subdivision_set", ZEROKEY+i, KM_PRESS, KM_CTRL, 0); + RNA_int_set(kmi->ptr, "level", i); + } /* Lattice -------------------------------------------------------------------- */ keymap= WM_keymap_find(keyconf, "Lattice", 0, 0); diff --git a/source/blender/editors/object/object_select.c b/source/blender/editors/object/object_select.c index 5366446c8ae..becad003d5c 100644 --- a/source/blender/editors/object/object_select.c +++ b/source/blender/editors/object/object_select.c @@ -571,6 +571,7 @@ static int object_select_grouped_exec(bContext *C, wmOperator *op) if (extend == 0) { CTX_DATA_BEGIN(C, Base*, base, visible_bases) { ED_base_object_select(base, BA_DESELECT); + changed = 1; } CTX_DATA_END; } @@ -581,17 +582,17 @@ static int object_select_grouped_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - if(nr==1) changed = select_grouped_children(C, ob, 1); - else if(nr==2) changed = select_grouped_children(C, ob, 0); - else if(nr==3) changed = select_grouped_parent(C); - else if(nr==4) changed = select_grouped_siblings(C, ob); - else if(nr==5) changed = select_grouped_type(C, ob); - else if(nr==6) changed = select_grouped_layer(C, ob); - else if(nr==7) changed = select_grouped_group(C, ob); - else if(nr==8) changed = select_grouped_object_hooks(C, ob); - else if(nr==9) changed = select_grouped_index_object(C, ob); - else if(nr==10) changed = select_grouped_color(C, ob); - else if(nr==11) changed = select_grouped_gameprops(C, ob); + if(nr==1) changed |= select_grouped_children(C, ob, 1); + else if(nr==2) changed |= select_grouped_children(C, ob, 0); + else if(nr==3) changed |= select_grouped_parent(C); + else if(nr==4) changed |= select_grouped_siblings(C, ob); + else if(nr==5) changed |= select_grouped_type(C, ob); + else if(nr==6) changed |= select_grouped_layer(C, ob); + else if(nr==7) changed |= select_grouped_group(C, ob); + else if(nr==8) changed |= select_grouped_object_hooks(C, ob); + else if(nr==9) changed |= select_grouped_index_object(C, ob); + else if(nr==10) changed |= select_grouped_color(C, ob); + else if(nr==11) changed |= select_grouped_gameprops(C, ob); if (changed) { WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, CTX_data_scene(C)); @@ -996,11 +997,11 @@ static int object_select_random_exec(bContext *C, wmOperator *op) } CTX_DATA_END; } - percent = RNA_float_get(op->ptr, "percent"); + percent = RNA_float_get(op->ptr, "percent")/100.0f; CTX_DATA_BEGIN(C, Base*, base, visible_bases) { if (BLI_frand() < percent) { - ED_base_object_select(base, BA_SELECT); + ED_base_object_select(base, BA_SELECT); } } CTX_DATA_END; @@ -1013,7 +1014,7 @@ static int object_select_random_exec(bContext *C, wmOperator *op) void OBJECT_OT_select_random(wmOperatorType *ot) { /* identifiers */ - ot->name= "Random select"; + ot->name= "Select Random"; ot->description = "Set select on random visible objects."; ot->idname= "OBJECT_OT_select_random"; @@ -1026,8 +1027,8 @@ void OBJECT_OT_select_random(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; /* properties */ - RNA_def_boolean(ot->srna, "extend", FALSE, "Extend", "Extend selection instead of deselecting everything first."); - RNA_def_float_percentage(ot->srna, "percent", 0.5f, 0.0f, 1.0f, "Percent", "percentage of objects to randomly select", 0.0001f, 1.0f); + RNA_def_float_percentage(ot->srna, "percent", 50.f, 0.0f, 100.0f, "Percent", "Percentage of objects to select randomly", 0.f, 100.0f); + RNA_def_boolean(ot->srna, "extend", FALSE, "Extend Selection", "Extend selection instead of deselecting everything first."); } diff --git a/source/blender/editors/object/object_transform.c b/source/blender/editors/object/object_transform.c index 69a2315fd5d..a16b0f2a7ac 100644 --- a/source/blender/editors/object/object_transform.c +++ b/source/blender/editors/object/object_transform.c @@ -105,8 +105,11 @@ static int object_location_clear_exec(bContext *C, wmOperator *op) } CTX_DATA_END; + /* this is needed so children are also updated */ + DAG_ids_flush_update(0); + WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL); - + return OPERATOR_FINISHED; } @@ -241,6 +244,9 @@ static int object_rotation_clear_exec(bContext *C, wmOperator *op) } CTX_DATA_END; + /* this is needed so children are also updated */ + DAG_ids_flush_update(0); + WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL); return OPERATOR_FINISHED; @@ -299,6 +305,9 @@ static int object_scale_clear_exec(bContext *C, wmOperator *op) } CTX_DATA_END; + /* this is needed so children are also updated */ + DAG_ids_flush_update(0); + WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL); return OPERATOR_FINISHED; @@ -546,17 +555,7 @@ static int visual_transform_apply_exec(bContext *C, wmOperator *op) CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) { where_is_object(scene, ob); - - VECCOPY(ob->loc, ob->obmat[3]); - mat4_to_size(ob->size,ob->obmat); - - if (ob->rotmode == ROT_MODE_QUAT) - mat4_to_quat(ob->quat, ob->obmat); - else if (ob->rotmode == ROT_MODE_AXISANGLE) - mat4_to_axis_angle(ob->rotAxis, &ob->rotAngle, ob->obmat); - else - mat4_to_eul(ob->rot,ob->obmat); - + object_apply_mat4(ob, ob->obmat); where_is_object(scene, ob); change = 1; diff --git a/source/blender/editors/object/object_vgroup.c b/source/blender/editors/object/object_vgroup.c index d9c21a9c9a5..43fabff6793 100644 --- a/source/blender/editors/object/object_vgroup.c +++ b/source/blender/editors/object/object_vgroup.c @@ -1736,7 +1736,7 @@ static int set_active_group_exec(bContext *C, wmOperator *op) ob->actdef= nr+1; DAG_id_flush_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + WM_event_add_notifier(C, NC_GEOM|ND_DATA, ob); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/physics/SConscript b/source/blender/editors/physics/SConscript index 85a40c91b3a..fcf94eae994 100644 --- a/source/blender/editors/physics/SConscript +++ b/source/blender/editors/physics/SConscript @@ -8,6 +8,8 @@ incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include' incs += ' ../../gpu' incs += ' ../../makesrna ../../render/extern/include #/intern/elbeem/extern' +defs = '' + if env['OURPLATFORM'] == 'linux2': cflags='-pthread' incs += ' ../../../extern/binreloc/include' @@ -15,4 +17,9 @@ if env['OURPLATFORM'] == 'linux2': if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'): incs += ' ' + env['BF_PTHREADS_INC'] -env.BlenderLib ( 'bf_editors_physics', sources, Split(incs), [], libtype=['core'], priority=[45] ) + +if env['OURPLATFORM'] == 'darwin': + if env['WITH_BF_OPENMP']: + defs += ' PARALLEL=1' + +env.BlenderLib ( 'bf_editors_physics', sources, Split(incs), Split(defs), libtype=['core'], priority=[45] ) diff --git a/source/blender/editors/physics/particle_edit.c b/source/blender/editors/physics/particle_edit.c index 68e673c31b1..8bacad3c132 100644 --- a/source/blender/editors/physics/particle_edit.c +++ b/source/blender/editors/physics/particle_edit.c @@ -362,7 +362,7 @@ static void PE_set_view3d_data(bContext *C, PEData *data) PE_set_data(C, data); view3d_set_viewcontext(C, &data->vc); - view3d_get_transformation(&data->vc, data->ob, &data->mats); + view3d_get_transformation(data->vc.ar, data->vc.rv3d, data->ob, &data->mats); if((data->vc.v3d->drawtype>OB_WIRE) && (data->vc.v3d->flag & V3D_ZBUF_SELECT)) view3d_validate_backbuf(&data->vc); @@ -373,7 +373,6 @@ static void PE_set_view3d_data(bContext *C, PEData *data) static int key_test_depth(PEData *data, float co[3]) { View3D *v3d= data->vc.v3d; - RegionView3D *rv3d= data->vc.rv3d; double ux, uy, uz; float depth; short wco[3], x,y; @@ -393,26 +392,16 @@ static int key_test_depth(PEData *data, float co[3]) x=wco[0]; y=wco[1]; - // XXX verify .. + x+= (short)data->vc.ar->winrct.xmin; + y+= (short)data->vc.ar->winrct.ymin; - if(rv3d->depths && xdepths->w && ydepths->h) { - /* the 0.0001 is an experimental threshold to make selecting keys right next to a surface work better */ - if((float)uz - 0.0001 > rv3d->depths->depths[y*rv3d->depths->w+x]) - return 0; - else - return 1; - } - else { - x+= (short)data->vc.ar->winrct.xmin; - y+= (short)data->vc.ar->winrct.ymin; + view3d_validate_backbuf(&data->vc); + glReadPixels(x, y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth); - glReadPixels(x, y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth); - - if((float)uz - 0.0001 > depth) - return 0; - else - return 1; - } + if((float)uz - 0.0001 > depth) + return 0; + else + return 1; } static int key_inside_circle(PEData *data, float rad, float co[3], float *distance) @@ -1174,8 +1163,11 @@ static void update_velocities(Object *ob, PTCacheEdit *edit) } } } + void PE_update_object(Scene *scene, Object *ob, int useflag) { + /* use this to do partial particle updates, not usable when adding or + removing, then a full redo is necessary and calling this may crash */ ParticleEditSettings *pset= PE_settings(scene); PTCacheEdit *edit = PE_get_current(scene, ob); POINT_P; @@ -2064,6 +2056,12 @@ static int remove_tagged_particles(Scene *scene, Object *ob, ParticleSystem *psy edit->mirror_cache= NULL; } + if(psys->child) { + MEM_freeN(psys->child); + psys->child= NULL; + psys->totchild=0; + } + edit->totpoint= psys->totpart= new_totpart; } @@ -2330,7 +2328,6 @@ static int remove_doubles_exec(bContext *C, wmOperator *op) BKE_reportf(op->reports, RPT_INFO, "Remove %d double particles.", totremoved); - PE_update_object(scene, ob, 0); DAG_id_flush_update(&ob->id, OB_RECALC_DATA); WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE_DATA, ob); @@ -2507,7 +2504,6 @@ static int delete_exec(bContext *C, wmOperator *op) recalc_lengths(data.edit); } - PE_update_object(data.scene, data.ob, 0); DAG_id_flush_update(&data.ob->id, OB_RECALC_DATA); WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE_DATA, data.ob); @@ -3733,7 +3729,6 @@ void PE_undo_step(Scene *scene, int step) } } - PE_update_object(scene, OBACT, 0); DAG_id_flush_update(&OBACT->id, OB_RECALC_DATA); } @@ -4018,6 +4013,7 @@ static int clear_edited_exec(bContext *C, wmOperator *op) psys->flag &= ~PSYS_EDITED; psys_reset(psys, PSYS_RESET_DEPSGRAPH); + WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE_DATA, ob); DAG_id_flush_update(&ob->id, OB_RECALC_DATA); } } diff --git a/source/blender/editors/physics/physics_fluid.c b/source/blender/editors/physics/physics_fluid.c index 7893b314e3e..eec971e777e 100644 --- a/source/blender/editors/physics/physics_fluid.c +++ b/source/blender/editors/physics/physics_fluid.c @@ -98,6 +98,14 @@ /* enable/disable overall compilation */ #ifndef DISABLE_ELBEEM +#if defined(__APPLE__) && (PARALLEL == 1) && (__GNUC__ == 4) && (__GNUC_MINOR__ == 2) +/* ************** libgomp (Apple gcc 4.2.1) TLS bug workaround *************** */ +#include +extern pthread_key_t gomp_tls_key; +static void *thread_tls_data; +#endif + + /* XXX */ /* from header info.c */ static int start_progress_bar(void) {return 0;}; @@ -320,6 +328,11 @@ static void *fluidsimSimulateThread(void *unused) { // *ptr) { //char* fnameCfgPath = (char*)(ptr); int ret=0; +#if defined(__APPLE__) && (PARALLEL == 1) && (__GNUC__ == 4) && (__GNUC_MINOR__ == 2) + // Workaround for Apple gcc 4.2.1 omp vs background thread bug + pthread_setspecific (gomp_tls_key, thread_tls_data); +#endif + ret = elbeemSimulate(); BLI_lock_thread(LOCK_CUSTOM1); if(globalBakeState==0) { @@ -1036,6 +1049,11 @@ int fluidsimBake(bContext *C, ReportList *reports, Object *ob) // set to neutral, -1 means user abort, -2 means init error globalBakeState = 0; globalBakeFrame = 0; + +#if defined(__APPLE__) && (PARALLEL == 1) && (__GNUC__ == 4) && (__GNUC_MINOR__ == 2) + // Workaround for Apple gcc 4.2.1 omp vs background thread bug + thread_tls_data = pthread_getspecific(gomp_tls_key); +#endif BLI_init_threads(&threads, fluidsimSimulateThread, 1); BLI_insert_thread(&threads, targetFile); diff --git a/source/blender/editors/physics/physics_pointcache.c b/source/blender/editors/physics/physics_pointcache.c index 858ff3637b1..0cd4c2e6ce8 100644 --- a/source/blender/editors/physics/physics_pointcache.c +++ b/source/blender/editors/physics/physics_pointcache.c @@ -86,7 +86,7 @@ void bake_console_progress(void *arg, int nr) fflush(stdout); } -void bake_console_progress_end(void *arg, int nr) +void bake_console_progress_end(void *arg) { printf("\n"); } diff --git a/source/blender/editors/render/render_shading.c b/source/blender/editors/render/render_shading.c index d82ed734831..ff18667888b 100644 --- a/source/blender/editors/render/render_shading.c +++ b/source/blender/editors/render/render_shading.c @@ -444,7 +444,9 @@ static int material_slot_copy_exec(bContext *C, wmOperator *op) CTX_DATA_BEGIN(C, Object*, ob_iter, selected_editable_objects) { if(ob != ob_iter && give_matarar(ob_iter)) { - assign_matarar(ob_iter, matar, ob->totcol); + if (ob->data != ob_iter->data) + assign_matarar(ob_iter, matar, ob->totcol); + if(ob_iter->totcol==ob->totcol) { ob_iter->actcol= ob->actcol; WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob_iter); diff --git a/source/blender/editors/screen/SConscript b/source/blender/editors/screen/SConscript index afd6ce68b68..703a16f753b 100644 --- a/source/blender/editors/screen/SConscript +++ b/source/blender/editors/screen/SConscript @@ -22,4 +22,8 @@ if env['OURPLATFORM'] == 'linux2': if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'): incs += ' ' + env['BF_PTHREADS_INC'] +if env['OURPLATFORM'] == 'darwin': + if env['WITH_BF_OPENMP']: + defs += ' PARALLEL=1' + env.BlenderLib ( 'bf_editors_screen', sources, Split(incs), Split(defs), libtype=['core'], priority=[105] ) diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index f663e5f0a21..d9d76e963a3 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -1089,30 +1089,11 @@ void ED_area_newspace(bContext *C, ScrArea *sa, int type) } } -void ED_area_prevspace(bContext *C) +void ED_area_prevspace(bContext *C, ScrArea *sa) { - SpaceLink *sl= CTX_wm_space_data(C); - ScrArea *sa= CTX_wm_area(C); - - /* cleanup */ -#if 0 // XXX needs to be space type specific - if(sfile->spacetype==SPACE_FILE) { - if(sfile->pupmenu) { - MEM_freeN(sfile->pupmenu); - sfile->pupmenu= NULL; - } - } -#endif + SpaceLink *sl = (sa) ? sa->spacedata.first : CTX_wm_space_data(C); if(sl->next) { - -#if 0 // XXX check whether this is still needed - if (sfile->spacetype == SPACE_SCRIPT) { - SpaceScript *sc = (SpaceScript *)sfile; - if (sc->script) sc->script->flags &=~SCRIPT_FILESEL; - } -#endif - /* workaround for case of double prevspace, render window with a file browser on top of it */ if(sl->next->spacetype == SPACE_FILE && sl->next->next) @@ -1193,7 +1174,8 @@ int ED_area_header_standardbuttons(const bContext *C, uiBlock *block, int yco) ScrArea *sa= CTX_wm_area(C); int xco= 8; - xco= ED_area_header_switchbutton(C, block, yco); + if (!sa->full) + xco= ED_area_header_switchbutton(C, block, yco); uiBlockSetEmboss(block, UI_EMBOSSN); @@ -1343,6 +1325,8 @@ void ED_region_panels(const bContext *C, ARegion *ar, int vertical, char *contex /* only allow scrolling in vertical direction */ v2d->keepofs |= V2D_LOCKOFS_X|V2D_KEEPOFS_Y; v2d->keepofs &= ~(V2D_LOCKOFS_Y|V2D_KEEPOFS_X); + v2d->scroll |= V2D_SCROLL_HORIZONTAL_HIDE; + v2d->scroll &= ~V2D_SCROLL_VERTICAL_HIDE; // don't jump back when panels close or hide if(!newcontext) @@ -1357,6 +1341,8 @@ void ED_region_panels(const bContext *C, ARegion *ar, int vertical, char *contex v2d->keepofs &= ~(V2D_LOCKOFS_X|V2D_LOCKOFS_Y|V2D_KEEPOFS_X|V2D_KEEPOFS_Y); //v2d->keepofs |= V2D_LOCKOFS_Y|V2D_KEEPOFS_X; //v2d->keepofs &= ~(V2D_LOCKOFS_X|V2D_KEEPOFS_Y); + v2d->scroll |= V2D_SCROLL_VERTICAL_HIDE; + v2d->scroll &= ~V2D_SCROLL_HORIZONTAL_HIDE; // don't jump back when panels close or hide if(!newcontext) diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c index 1f6ce4fed73..6bf01a69d12 100644 --- a/source/blender/editors/screen/screen_edit.c +++ b/source/blender/editors/screen/screen_edit.c @@ -1312,7 +1312,13 @@ void ED_screen_delete(bContext *C, bScreen *sc) wmWindow *win= CTX_wm_window(C); bScreen *newsc; int delete= 1; - + + /* don't allow deleting temp fullscreens for now */ + if (sc->full == SCREENFULL) { + return; + } + + /* screen can only be in use by one window at a time, so as long as we are able to find a screen that is unused, we can safely assume ours is not in use anywhere an delete it */ @@ -1462,7 +1468,7 @@ ScrArea *ed_screen_fullarea(bContext *C, wmWindow *win, ScrArea *sa) // default. So use the old headertype instead area_copy_data(old, sa, 1); /* 1 = swap spacelist */ - + if (sa->flag & AREA_TEMP_INFO) sa->flag &= ~AREA_TEMP_INFO; old->full= NULL; /* animtimer back */ @@ -1477,16 +1483,19 @@ ScrArea *ed_screen_fullarea(bContext *C, wmWindow *win, ScrArea *sa) } else { ScrArea *newa; + char newname[20]; oldscreen= win->screen; - /* is there only 1 area? */ + /* nothing wrong with having only 1 area, as far as I can see... + // is there only 1 area? if(oldscreen->areabase.first==oldscreen->areabase.last) return NULL; + */ oldscreen->full = SCREENFULL; - - sc= ED_screen_add(win, oldscreen->scene, "temp"); + BLI_snprintf(newname, sizeof(newname), "%s-%s", oldscreen->id.name+2, "temp"); + sc= ED_screen_add(win, oldscreen->scene, newname); sc->full = SCREENFULL; // XXX /* timer */ @@ -1496,7 +1505,7 @@ ScrArea *ed_screen_fullarea(bContext *C, wmWindow *win, ScrArea *sa) /* returns the top small area */ newa= area_split(win, sc, (ScrArea *)sc->areabase.first, 'h', 0.99f); ED_area_newspace(C, newa, SPACE_INFO); - + /* use random area when we have no active one, e.g. when the mouse is outside of the window and we open a file browser */ if(!sa) @@ -1505,11 +1514,12 @@ ScrArea *ed_screen_fullarea(bContext *C, wmWindow *win, ScrArea *sa) /* copy area */ newa= newa->prev; area_copy_data(newa, sa, 1); /* 1 = swap spacelist */ + sa->flag |= AREA_TEMP_INFO; sa->full= oldscreen; newa->full= oldscreen; newa->next->full= oldscreen; // XXX - + ED_screen_set(C, sc); } @@ -1524,29 +1534,71 @@ ScrArea *ed_screen_fullarea(bContext *C, wmWindow *win, ScrArea *sa) int ED_screen_full_newspace(bContext *C, ScrArea *sa, int type) { wmWindow *win= CTX_wm_window(C); + bScreen *screen= CTX_wm_screen(C); ScrArea *newsa= NULL; - if(!sa || sa->full==0) + if(!sa || sa->full==0) { newsa= ed_screen_fullarea(C, win, sa); - if(!newsa) - newsa= sa; - + } + + if(!newsa) { + if (sa->full) { + /* if this has been called from the temporary info header generated in + * temp fullscreen layouts, find the correct fullscreen area to change + * to create a new space inside */ + for (newsa = screen->areabase.first; newsa; newsa=newsa->next) { + if (!(sa->flag & AREA_TEMP_INFO)) + break; + } + } else + newsa= sa; + } + ED_area_newspace(C, newsa, type); return 1; } -void ED_screen_full_prevspace(bContext *C) +void ED_screen_full_prevspace(bContext *C, ScrArea *sa) { wmWindow *win= CTX_wm_window(C); - ScrArea *sa= CTX_wm_area(C); - - ED_area_prevspace(C); + + ED_area_prevspace(C, sa); if(sa->full) ed_screen_fullarea(C, win, sa); } +/* restore a screen / area back to default operation, after temp fullscreen modes */ +void ED_screen_full_restore(bContext *C, ScrArea *sa) +{ + wmWindow *win= CTX_wm_window(C); + SpaceLink *sl = sa->spacedata.first; + + /* if fullscreen area has a secondary space (such as as file browser or fullscreen render + * overlaid on top of a existing setup) then return to the previous space */ + + if (sl->next) { + /* specific checks for space types */ + if (sl->spacetype == SPACE_IMAGE) { + SpaceImage *sima= sa->spacedata.first; + if (sima->flag & SI_PREVSPACE) + sima->flag &= ~SI_PREVSPACE; + if (sima->flag & SI_FULLWINDOW) { + sima->flag &= ~SI_FULLWINDOW; + ED_screen_full_prevspace(C, sa); + } + } else if (sl->spacetype == SPACE_FILE) { + ED_screen_full_prevspace(C, sa); + } else + ed_screen_fullarea(C, win, sa); + } + /* otherwise just tile the area again */ + else { + ed_screen_fullarea(C, win, sa); + } +} + /* redraws: uses defines from stime->redraws * enable: 1 - forward on, -1 - backwards on, 0 - off */ @@ -1601,10 +1653,8 @@ static ARegion *time_top_left_3dwindow(bScreen *screen) return aret; } -void ED_screen_animation_timer_update(bContext *C, int redraws) +void ED_screen_animation_timer_update(bScreen *screen, int redraws) { - bScreen *screen= CTX_wm_screen(C); - if(screen && screen->animtimer) { wmTimer *wt= screen->animtimer; ScreenAnimData *sad= wt->customdata; @@ -1622,6 +1672,35 @@ void ED_update_for_newframe(const bContext *C, int mute) bScreen *screen= CTX_wm_screen(C); Scene *scene= CTX_data_scene(C); +#ifdef DURIAN_CAMERA_SWITCH + void *camera= scene_find_camera_switch(scene); + if(camera && scene->camera != camera) { + + if(camera && scene->camera && (camera != scene->camera)) { + bScreen *sc; + /* are there cameras in the views that are not in the scene? */ + for(sc= CTX_data_main(C)->screen.first; sc; sc= sc->id.next) { + 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->scenelock) { + v3d->camera= camera; + } + } + sl= sl->next; + } + sa= sa->next; + } + } + } + + scene->camera= camera; + } +#endif + //extern void audiostream_scrub(unsigned int frame); /* seqaudio.c */ /* this function applies the changes too */ diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 78eb0963013..d58e8503001 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -96,6 +96,12 @@ #define KM_MODAL_STEP10 3 #define KM_MODAL_STEP10_OFF 4 +#if defined(__APPLE__) && (PARALLEL == 1) && (__GNUC__ == 4) && (__GNUC_MINOR__ == 2) +/* ************** libgomp (Apple gcc 4.2.1) TLS bug workaround *************** */ +#include +extern pthread_key_t gomp_tls_key; +static void *thread_tls_data; +#endif /* ************** Exported Poll tests ********************** */ int ED_operator_regionactive(bContext *C) @@ -180,10 +186,10 @@ int ED_operator_buttons_active(bContext *C) int ED_operator_node_active(bContext *C) { SpaceNode *snode= CTX_wm_space_node(C); - + if(snode && snode->edittree) return 1; - + return 0; } @@ -232,6 +238,11 @@ int ED_operator_editmesh(bContext *C) return 0; } +int ED_operator_editmesh_view3d(bContext *C) +{ + return ED_operator_editmesh(C) && ED_operator_view3d_active(C); +} + int ED_operator_editarmature(bContext *C) { Object *obedit= CTX_data_edit_object(C); @@ -247,7 +258,7 @@ int ED_operator_posemode(bContext *C) if ((obact != obedit) && (obact) && (obact->type==OB_ARMATURE)) return (obact->mode & OB_MODE_POSE)!=0; - + return 0; } @@ -256,15 +267,15 @@ int ED_operator_uvedit(bContext *C) { Object *obedit= CTX_data_edit_object(C); EditMesh *em= NULL; - + if(obedit && obedit->type==OB_MESH) em= BKE_mesh_get_editmesh((Mesh *)obedit->data); - + if(em && (em->faces.first) && (CustomData_has_layer(&em->fdata, CD_MTFACE))) { BKE_mesh_end_editmesh(obedit->data, em); return 1; } - + if(obedit) BKE_mesh_end_editmesh(obedit->data, em); return 0; @@ -274,15 +285,15 @@ int ED_operator_uvmap(bContext *C) { Object *obedit= CTX_data_edit_object(C); EditMesh *em= NULL; - + if(obedit && obedit->type==OB_MESH) em= BKE_mesh_get_editmesh((Mesh *)obedit->data); - + if(em && (em->faces.first)) { BKE_mesh_end_editmesh(obedit->data, em); return 1; } - + if(obedit) BKE_mesh_end_editmesh(obedit->data, em); return 0; @@ -340,27 +351,27 @@ int ED_operator_editmball(bContext *C) /* *************************** action zone operator ************************** */ /* operator state vars used: - none - -functions: - - apply() set actionzone event - - exit() free customdata - -callbacks: - - exec() never used - - invoke() check if in zone - add customdata, put mouseco and area in it - add modal handler - - modal() accept modal events while doing it - call apply() with gesture info, active window, nonactive window - call exit() and remove handler when LMB confirm - -*/ + none + + functions: + + apply() set actionzone event + + exit() free customdata + + callbacks: + + exec() never used + + invoke() check if in zone + add customdata, put mouseco and area in it + add modal handler + + modal() accept modal events while doing it + call apply() with gesture info, active window, nonactive window + call exit() and remove handler when LMB confirm + + */ typedef struct sActionzoneData { ScrArea *sa1, *sa2; @@ -394,7 +405,7 @@ static int actionzone_area_poll(bContext *C) for(az= sa->actionzones.first; az; az= az->next) if(BLI_in_rcti(&az->rect, x, y)) - return 1; + return 1; } return 0; } @@ -509,14 +520,14 @@ static int actionzone_modal(bContext *C, wmOperator *op, wmEvent *event) return OPERATOR_FINISHED; } - break; + break; case ESCKEY: actionzone_exit(C, op); return OPERATOR_CANCELLED; case LEFTMOUSE: actionzone_exit(C, op); return OPERATOR_CANCELLED; - + } return OPERATOR_RUNNING_MODAL; @@ -532,7 +543,7 @@ static void SCREEN_OT_actionzone(wmOperatorType *ot) ot->invoke= actionzone_invoke; ot->modal= actionzone_modal; ot->poll= actionzone_area_poll; - + ot->flag= OPTYPE_BLOCKING; RNA_def_int(ot->srna, "modifier", 0, 0, 2, "modifier", "modifier state", 0, 2); @@ -541,25 +552,25 @@ static void SCREEN_OT_actionzone(wmOperatorType *ot) /* ************** swap area operator *********************************** */ /* operator state vars used: - sa1 start area - sa2 area to swap with - - functions: - - init() set custom data for operator, based on actionzone event custom data - - cancel() cancel the operator - - exit() cleanup, send notifier - - callbacks: - - invoke() gets called on shift+lmb drag in actionzone - call init(), add handler - - modal() accept modal events while doing it - -*/ + sa1 start area + sa2 area to swap with + + functions: + + init() set custom data for operator, based on actionzone event custom data + + cancel() cancel the operator + + exit() cleanup, send notifier + + callbacks: + + invoke() gets called on shift+lmb drag in actionzone + call init(), add handler + + modal() accept modal events while doing it + + */ typedef struct sAreaSwapData { ScrArea *sa1, *sa2; @@ -569,15 +580,15 @@ static int area_swap_init(bContext *C, wmOperator *op, wmEvent *event) { sAreaSwapData *sd= NULL; sActionzoneData *sad= event->customdata; - + if(sad==NULL || sad->sa1==NULL) - return 0; + return 0; sd= MEM_callocN(sizeof(sAreaSwapData), "sAreaSwapData"); sd->sa1= sad->sa1; sd->sa2= sad->sa2; op->customdata= sd; - + return 1; } @@ -597,22 +608,22 @@ static int area_swap_cancel(bContext *C, wmOperator *op) static int area_swap_invoke(bContext *C, wmOperator *op, wmEvent *event) { - + if(!area_swap_init(C, op, event)) return OPERATOR_PASS_THROUGH; - + /* add modal handler */ WM_cursor_modal(CTX_wm_window(C), BC_SWAPAREA_CURSOR); WM_event_add_modal_handler(C, op); return OPERATOR_RUNNING_MODAL; - + } static int area_swap_modal(bContext *C, wmOperator *op, wmEvent *event) { sActionzoneData *sad= op->customdata; - + switch(event->type) { case MOUSEMOVE: /* second area, for join */ @@ -621,19 +632,19 @@ static int area_swap_modal(bContext *C, wmOperator *op, wmEvent *event) case LEFTMOUSE: /* release LMB */ if(event->val==KM_RELEASE) { if(!sad->sa2 || sad->sa1 == sad->sa2) { - + return area_swap_cancel(C, op); } ED_area_swapspace(C, sad->sa1, sad->sa2); - + area_swap_exit(C, op); - + WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL); - + return OPERATOR_FINISHED; } break; - + case ESCKEY: return area_swap_cancel(C, op); } @@ -645,11 +656,11 @@ static void SCREEN_OT_area_swap(wmOperatorType *ot) ot->name= "Swap areas"; ot->description= "Swap selected areas screen positions."; ot->idname= "SCREEN_OT_area_swap"; - + ot->invoke= area_swap_invoke; ot->modal= area_swap_modal; ot->poll= ED_operator_areaactive; - + ot->flag= OPTYPE_BLOCKING; } @@ -670,10 +681,10 @@ static int area_dupli_invoke(bContext *C, wmOperator *op, wmEvent *event) /* XXX hrmf! */ if(event->type==EVT_ACTIONZONE_AREA) { sActionzoneData *sad= event->customdata; - + if(sad==NULL) return OPERATOR_PASS_THROUGH; - + sa= sad->sa1; } @@ -698,7 +709,7 @@ static int area_dupli_invoke(bContext *C, wmOperator *op, wmEvent *event) /* screen, areas init */ WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL); - + if(event->type==EVT_ACTIONZONE_AREA) actionzone_exit(C, op); @@ -719,33 +730,33 @@ static void SCREEN_OT_area_dupli(wmOperatorType *ot) /* ************** move area edge operator *********************************** */ /* operator state vars used: - x, y mouse coord near edge - delta movement of edge - - functions: - - init() set default property values, find edge based on mouse coords, test - if the edge can be moved, select edges, calculate min and max movement - - apply() apply delta on selection - - exit() cleanup, send notifier - - cancel() cancel moving - - callbacks: - - exec() execute without any user interaction, based on properties - call init(), apply(), exit() - - invoke() gets called on mouse click near edge - call init(), add handler - - modal() accept modal events while doing it - call apply() with delta motion - call exit() and remove handler - -*/ + x, y mouse coord near edge + delta movement of edge + + functions: + + init() set default property values, find edge based on mouse coords, test + if the edge can be moved, select edges, calculate min and max movement + + apply() apply delta on selection + + exit() cleanup, send notifier + + cancel() cancel moving + + callbacks: + + exec() execute without any user interaction, based on properties + call init(), apply(), exit() + + invoke() gets called on mouse click near edge + call init(), add handler + + modal() accept modal events while doing it + call apply() with delta motion + call exit() and remove handler + + */ typedef struct sAreaMoveData { int bigger, smaller, origval, step; @@ -790,25 +801,25 @@ static int area_move_init (bContext *C, wmOperator *op) ScrEdge *actedge; sAreaMoveData *md; int x, y; - + /* required properties */ x= RNA_int_get(op->ptr, "x"); y= RNA_int_get(op->ptr, "y"); - + /* setup */ actedge= screen_find_active_scredge(sc, x, y); if(actedge==NULL) return 0; - + md= MEM_callocN(sizeof(sAreaMoveData), "sAreaMoveData"); op->customdata= md; - + md->dir= scredge_is_horizontal(actedge)?'h':'v'; if(md->dir=='h') md->origval= actedge->v1->vec.y; else md->origval= actedge->v1->vec.x; select_connected_scredge(sc, actedge); /* now all vertices with 'flag==1' are the ones that can be moved. */ - + area_move_set_limits(sc, md->dir, &md->bigger, &md->smaller); return 1; @@ -832,7 +843,7 @@ static void area_move_apply_do(bContext *C, int origval, int delta, int dir, int } if((dir=='h') && v1->vec.y>0 && v1->vec.ysizey-1) { v1->vec.y= origval + delta; - + v1->vec.y+= AREAGRID-1; v1->vec.y-= (v1->vec.y % AREAGRID); @@ -842,7 +853,7 @@ static void area_move_apply_do(bContext *C, int origval, int delta, int dir, int } } } - + WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL); } @@ -882,7 +893,7 @@ static int area_move_invoke(bContext *C, wmOperator *op, wmEvent *event) { RNA_int_set(op->ptr, "x", event->x); RNA_int_set(op->ptr, "y", event->y); - + if(!area_move_init(C, op)) return OPERATOR_PASS_THROUGH; @@ -894,11 +905,11 @@ static int area_move_invoke(bContext *C, wmOperator *op, wmEvent *event) static int area_move_cancel(bContext *C, wmOperator *op) { - + RNA_int_set(op->ptr, "delta", 0); area_move_apply(C, op); area_move_exit(C, op); - + return OPERATOR_CANCELLED; } @@ -907,7 +918,7 @@ static int area_move_modal(bContext *C, wmOperator *op, wmEvent *event) { sAreaMoveData *md= op->customdata; int delta, x, y; - + /* execute the events */ switch(event->type) { case MOUSEMOVE: @@ -918,7 +929,7 @@ static int area_move_modal(bContext *C, wmOperator *op, wmEvent *event) delta= (md->dir == 'v')? event->x - x: event->y - y; if(md->step) delta= delta - (delta % md->step); RNA_int_set(op->ptr, "delta", delta); - + area_move_apply(C, op); break; @@ -928,7 +939,7 @@ static int area_move_modal(bContext *C, wmOperator *op, wmEvent *event) case KM_MODAL_APPLY: area_move_exit(C, op); return OPERATOR_FINISHED; - + case KM_MODAL_CANCEL: return area_move_cancel(C, op); @@ -950,15 +961,15 @@ static void SCREEN_OT_area_move(wmOperatorType *ot) ot->name= "Move area edges"; ot->description= "Move selected area edges."; ot->idname= "SCREEN_OT_area_move"; - + ot->exec= area_move_exec; ot->invoke= area_move_invoke; ot->cancel= area_move_cancel; ot->modal= area_move_modal; ot->poll= ED_operator_screen_mainwinactive; /* when mouse is over area-edge */ - + ot->flag= OPTYPE_BLOCKING; - + /* rna */ RNA_def_int(ot->srna, "x", 0, INT_MIN, INT_MAX, "X", "", INT_MIN, INT_MAX); RNA_def_int(ot->srna, "y", 0, INT_MIN, INT_MAX, "Y", "", INT_MIN, INT_MAX); @@ -968,56 +979,56 @@ static void SCREEN_OT_area_move(wmOperatorType *ot) /* ************** split area operator *********************************** */ /* -operator state vars: - fac spit point - dir direction 'v' or 'h' - -operator customdata: - area pointer to (active) area - x, y last used mouse pos - (more, see below) - -functions: - - init() set default property values, find area based on context - - apply() split area based on state vars - - exit() cleanup, send notifier - - cancel() remove duplicated area - -callbacks: - - exec() execute without any user interaction, based on state vars - call init(), apply(), exit() - - invoke() gets called on mouse click in action-widget - call init(), add modal handler - call apply() with initial motion - - modal() accept modal events while doing it - call move-areas code with delta motion - call exit() or cancel() and remove handler - -*/ + operator state vars: + fac spit point + dir direction 'v' or 'h' + + operator customdata: + area pointer to (active) area + x, y last used mouse pos + (more, see below) + + functions: + + init() set default property values, find area based on context + + apply() split area based on state vars + + exit() cleanup, send notifier + + cancel() remove duplicated area + + callbacks: + + exec() execute without any user interaction, based on state vars + call init(), apply(), exit() + + invoke() gets called on mouse click in action-widget + call init(), add modal handler + call apply() with initial motion + + modal() accept modal events while doing it + call move-areas code with delta motion + call exit() or cancel() and remove handler + + */ #define SPLIT_STARTED 1 #define SPLIT_PROGRESS 2 typedef struct sAreaSplitData -{ - int x, y; /* last used mouse position */ - - int origval; /* for move areas */ - int bigger, smaller; /* constraints for moving new edge */ - int delta; /* delta move edge */ - int origmin, origsize; /* to calculate fac, for property storage */ - - ScrEdge *nedge; /* new edge */ - ScrArea *sarea; /* start area */ - ScrArea *narea; /* new area */ -} sAreaSplitData; + { + int x, y; /* last used mouse position */ + + int origval; /* for move areas */ + int bigger, smaller; /* constraints for moving new edge */ + int delta; /* delta move edge */ + int origmin, origsize; /* to calculate fac, for property storage */ + + ScrEdge *nedge; /* new edge */ + ScrArea *sarea; /* start area */ + ScrArea *narea; /* new area */ + } sAreaSplitData; /* generic init, no UI stuff here */ static int area_split_init(bContext *C, wmOperator *op) @@ -1035,7 +1046,7 @@ static int area_split_init(bContext *C, wmOperator *op) /* minimal size */ if(dir=='v' && sa->winx < 2*AREAMINX) return 0; if(dir=='h' && sa->winy < 2*AREAMINY) return 0; - + /* custom data */ sd= (sAreaSplitData*)MEM_callocN(sizeof (sAreaSplitData), "op_area_split"); op->customdata= sd; @@ -1072,7 +1083,7 @@ static ScrEdge *area_findsharededge(bScreen *screen, ScrArea *sa, ScrArea *sb) else if(sav1==sbv2 && sav4==sbv3) { /* sa on top of sb = S*/ return screen_findedge(screen, sav1, sav4); } - + return NULL; } @@ -1087,24 +1098,24 @@ static int area_split_apply(bContext *C, wmOperator *op) fac= RNA_float_get(op->ptr, "factor"); dir= RNA_enum_get(op->ptr, "direction"); - + sd->narea= area_split(CTX_wm_window(C), sc, sd->sarea, dir, fac); if(sd->narea) { ScrVert *sv; sd->nedge= area_findsharededge(sc, sd->sarea, sd->narea); - + /* select newly created edge, prepare for moving edge */ for(sv= sc->vertbase.first; sv; sv= sv->next) sv->flag = 0; sd->nedge->v1->flag= 1; sd->nedge->v2->flag= 1; - + if(dir=='h') sd->origval= sd->nedge->v1->vec.y; else sd->origval= sd->nedge->v1->vec.x; - + WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL); return 1; @@ -1121,7 +1132,7 @@ static void area_split_exit(bContext *C, wmOperator *op) } WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL); - + /* this makes sure aligned edges will result in aligned grabbing */ removedouble_scrverts(CTX_wm_screen(C)); removedouble_scredges(CTX_wm_screen(C)); @@ -1136,7 +1147,7 @@ static int area_split_invoke(bContext *C, wmOperator *op, wmEvent *event) if(event->type==EVT_ACTIONZONE_AREA) { sActionzoneData *sad= event->customdata; int dir; - + if(sad->modifier>0) { return OPERATOR_PASS_THROUGH; } @@ -1163,7 +1174,7 @@ static int area_split_invoke(bContext *C, wmOperator *op, wmEvent *event) RNA_float_set(op->ptr, "factor", ((float)(event->y - sad->sa1->v1->vec.y)) / (float)sad->sa1->winy); } RNA_enum_set(op->ptr, "direction", dir); - + /* general init, also non-UI case, adds customdata, sets area and defaults */ if(!area_split_init(C, op)) return OPERATOR_PASS_THROUGH; @@ -1209,7 +1220,7 @@ static int area_split_exec(bContext *C, wmOperator *op) static int area_split_cancel(bContext *C, wmOperator *op) { sAreaSplitData *sd= (sAreaSplitData *)op->customdata; - + if (screen_area_join(C, CTX_wm_screen(C), sd->sarea, sd->narea)) { if (CTX_wm_area(C) == sd->narea) { CTX_wm_area_set(C, NULL); @@ -1218,7 +1229,7 @@ static int area_split_cancel(bContext *C, wmOperator *op) sd->narea = NULL; } area_split_exit(C, op); - + return OPERATOR_CANCELLED; } @@ -1227,7 +1238,7 @@ static int area_split_modal(bContext *C, wmOperator *op, wmEvent *event) sAreaSplitData *sd= (sAreaSplitData *)op->customdata; float fac; int dir; - + /* execute the events */ switch(event->type) { case MOUSEMOVE: @@ -1257,9 +1268,9 @@ static int area_split_modal(bContext *C, wmOperator *op, wmEvent *event) } static EnumPropertyItem prop_direction_items[] = { - {'h', "HORIZONTAL", 0, "Horizontal", ""}, - {'v', "VERTICAL", 0, "Vertical", ""}, - {0, NULL, 0, NULL, NULL}}; +{'h', "HORIZONTAL", 0, "Horizontal", ""}, +{'v', "VERTICAL", 0, "Vertical", ""}, +{0, NULL, 0, NULL, NULL}}; static void SCREEN_OT_area_split(wmOperatorType *ot) { @@ -1289,14 +1300,51 @@ typedef struct RegionMoveData { ScrArea *sa; int bigger, smaller, origval; int origx, origy; + int maxsize; char edge; } RegionMoveData; + +static int area_max_regionsize(ScrArea *sa, ARegion *scalear, char edge) +{ + ARegion *ar; + int dist; + + if(edge=='l' || edge=='r') { + dist = sa->totrct.xmax - sa->totrct.xmin; + } else { /* t, b */ + dist = sa->totrct.ymax - sa->totrct.ymin; + } + + /* subtractwidth of regions on opposite side + * prevents dragging regions into other opposite regions */ + for (ar=sa->regionbase.first; ar; ar=ar->next) + { + if (scalear->alignment == RGN_ALIGN_TOP && ar->alignment == RGN_ALIGN_BOTTOM) + dist -= ar->winy; + else if (scalear->alignment == RGN_ALIGN_BOTTOM && ar->alignment == RGN_ALIGN_TOP) + dist -= ar->winy; + else if (scalear->alignment == RGN_ALIGN_LEFT && ar->alignment == RGN_ALIGN_RIGHT) + dist -= ar->winx; + else if (scalear->alignment == RGN_ALIGN_RIGHT && ar->alignment == RGN_ALIGN_LEFT) + dist -= ar->winx; + } + + return dist; +} + static int region_scale_invoke(bContext *C, wmOperator *op, wmEvent *event) { sActionzoneData *sad= event->customdata; - AZone *az= sad->az; + AZone *az; + + if(event->type!=EVT_ACTIONZONE_REGION) { + BKE_report(op->reports, RPT_ERROR, "Can only scale region size from an action zone"); + return OPERATOR_CANCELLED; + } + + az = sad->az; if(az->ar) { RegionMoveData *rmd= MEM_callocN(sizeof(RegionMoveData), "RegionMoveData"); @@ -1309,10 +1357,13 @@ static int region_scale_invoke(bContext *C, wmOperator *op, wmEvent *event) rmd->edge= az->edge; rmd->origx= event->x; rmd->origy= event->y; - if(rmd->edge=='l' || rmd->edge=='r') + rmd->maxsize = area_max_regionsize(rmd->sa, rmd->ar, rmd->edge); + if(rmd->edge=='l' || rmd->edge=='r') { rmd->origval= rmd->ar->type->minsizex; - else + } else { rmd->origval= rmd->ar->type->minsizey; + } + CLAMP(rmd->maxsize, 0, 1000); /* add temp handler */ WM_event_add_modal_handler(C, op); @@ -1335,8 +1386,10 @@ static int region_scale_modal(bContext *C, wmOperator *op, wmEvent *event) if(rmd->edge=='l' || rmd->edge=='r') { delta= event->x - rmd->origx; if(rmd->edge=='l') delta= -delta; + rmd->ar->type->minsizex= rmd->origval + delta; - CLAMP(rmd->ar->type->minsizex, 0, 1000); + CLAMP(rmd->ar->type->minsizex, 0, rmd->maxsize); + if(rmd->ar->type->minsizex < 24) { rmd->ar->type->minsizex= rmd->origval; if(!(rmd->ar->flag & RGN_FLAG_HIDDEN)) @@ -1348,8 +1401,10 @@ static int region_scale_modal(bContext *C, wmOperator *op, wmEvent *event) else { delta= event->y - rmd->origy; if(rmd->edge=='b') delta= -delta; + rmd->ar->type->minsizey= rmd->origval + delta; - CLAMP(rmd->ar->type->minsizey, 0, 1000); + CLAMP(rmd->ar->type->minsizey, 0, rmd->maxsize); + if(rmd->ar->type->minsizey < 24) { rmd->ar->type->minsizey= rmd->origval; if(!(rmd->ar->flag & RGN_FLAG_HIDDEN)) @@ -1360,7 +1415,7 @@ static int region_scale_modal(bContext *C, wmOperator *op, wmEvent *event) } WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL); - + break; case LEFTMOUSE: @@ -1374,7 +1429,7 @@ static int region_scale_modal(bContext *C, wmOperator *op, wmEvent *event) } MEM_freeN(op->customdata); op->customdata = NULL; - + return OPERATOR_FINISHED; } break; @@ -1409,13 +1464,13 @@ static void SCREEN_OT_region_scale(wmOperatorType *ot) static int frame_offset_exec(bContext *C, wmOperator *op) { int delta; - + delta = RNA_int_get(op->ptr, "delta"); - + CTX_data_scene(C)->r.cfra += delta; - + WM_event_add_notifier(C, NC_SCENE|ND_FRAME, CTX_data_scene(C)); - + return OPERATOR_FINISHED; } @@ -1423,12 +1478,12 @@ static void SCREEN_OT_frame_offset(wmOperatorType *ot) { ot->name = "Frame Offset"; ot->idname = "SCREEN_OT_frame_offset"; - + ot->exec= frame_offset_exec; - + ot->poll= ED_operator_screenactive; ot->flag= 0; - + /* rna */ RNA_def_int(ot->srna, "delta", 0, INT_MIN, INT_MAX, "Delta", "", INT_MIN, INT_MAX); } @@ -1443,9 +1498,9 @@ static int frame_jump_exec(bContext *C, wmOperator *op) CFRA= PEFRA; else CFRA= PSFRA; - + WM_event_add_notifier(C, NC_SCENE|ND_FRAME, scene); - + return OPERATOR_FINISHED; } @@ -1454,12 +1509,12 @@ static void SCREEN_OT_frame_jump(wmOperatorType *ot) ot->name = "Jump to Endpoint"; ot->description= "Jump to first/last frame in frame range."; ot->idname = "SCREEN_OT_frame_jump"; - + ot->exec= frame_jump_exec; - + ot->poll= ED_operator_screenactive; ot->flag= 0; - + /* rna */ RNA_def_boolean(ot->srna, "end", 0, "Last Frame", "Jump to the last frame of the frame range."); } @@ -1489,7 +1544,7 @@ static int keyframe_jump_exec(bContext *C, wmOperator *op) scene_to_keylist(NULL, scene, &keys, NULL); if (ob && ob->adt) ob_to_keylist(NULL, ob, &keys, NULL); - + /* build linked-list for searching */ BLI_dlrbTree_linkedlist_sync(&keys); @@ -1509,7 +1564,7 @@ static int keyframe_jump_exec(bContext *C, wmOperator *op) BLI_dlrbTree_free(&keys); WM_event_add_notifier(C, NC_SCENE|ND_FRAME, CTX_data_scene(C)); - + return OPERATOR_FINISHED; } @@ -1518,12 +1573,12 @@ static void SCREEN_OT_keyframe_jump(wmOperatorType *ot) ot->name = "Jump to Keyframe"; ot->description= "Jump to previous/next keyframe."; ot->idname = "SCREEN_OT_keyframe_jump"; - + ot->exec= keyframe_jump_exec; - + ot->poll= ED_operator_screenactive; ot->flag= 0; - + /* rna */ RNA_def_boolean(ot->srna, "next", 1, "Next Keyframe", ""); } @@ -1539,9 +1594,9 @@ static int screen_set_exec(bContext *C, wmOperator *op) int tot= BLI_countlist(&CTX_data_main(C)->screen); int delta= RNA_int_get(op->ptr, "delta"); - /* this screen is 'fake', solve later XXX */ + /* return to previous state before switching screens */ if(sa && sa->full) - return OPERATOR_CANCELLED; + ED_screen_full_restore(C, sa); if(delta==1) { while(tot--) { @@ -1602,7 +1657,7 @@ static void SCREEN_OT_screen_full_area(wmOperatorType *ot) ot->exec= screen_full_area_exec; ot->poll= ED_operator_areaactive; ot->flag= 0; - + } @@ -1610,40 +1665,40 @@ static void SCREEN_OT_screen_full_area(wmOperatorType *ot) /* ************** join area operator ********************************************** */ /* operator state vars used: - x1, y1 mouse coord in first area, which will disappear - x2, y2 mouse coord in 2nd area, which will become joined - -functions: - - init() find edge based on state vars - test if the edge divides two areas, - store active and nonactive area, - - apply() do the actual join - - exit() cleanup, send notifier - -callbacks: - - exec() calls init, apply, exit - - invoke() sets mouse coords in x,y - call init() - add modal handler - - modal() accept modal events while doing it - call apply() with active window and nonactive window - call exit() and remove handler when LMB confirm - -*/ + x1, y1 mouse coord in first area, which will disappear + x2, y2 mouse coord in 2nd area, which will become joined + + functions: + + init() find edge based on state vars + test if the edge divides two areas, + store active and nonactive area, + + apply() do the actual join + + exit() cleanup, send notifier + + callbacks: + + exec() calls init, apply, exit + + invoke() sets mouse coords in x,y + call init() + add modal handler + + modal() accept modal events while doing it + call apply() with active window and nonactive window + call exit() and remove handler when LMB confirm + + */ typedef struct sAreaJoinData -{ - ScrArea *sa1; /* first area to be considered */ - ScrArea *sa2; /* second area to be considered */ - ScrArea *scr; /* designed for removal */ - -} sAreaJoinData; + { + ScrArea *sa1; /* first area to be considered */ + ScrArea *sa2; /* second area to be considered */ + ScrArea *scr; /* designed for removal */ + + } sAreaJoinData; /* validate selection inside screen, set variables OK */ @@ -1655,7 +1710,7 @@ static int area_join_init(bContext *C, wmOperator *op) sAreaJoinData* jd= NULL; int x1, y1; int x2, y2; - + /* required properties, make negative to get return 0 if not set by caller */ x1= RNA_int_get(op->ptr, "x1"); y1= RNA_int_get(op->ptr, "y1"); @@ -1666,9 +1721,9 @@ static int area_join_init(bContext *C, wmOperator *op) sa2 = screen_areahascursor(CTX_wm_screen(C), x2, y2); if(sa1==NULL || sa2==NULL || sa1==sa2) return 0; - + jd = (sAreaJoinData*)MEM_callocN(sizeof (sAreaJoinData), "op_area_join"); - + jd->sa1 = sa1; jd->sa1->flag |= AREA_FLAG_DRAWJOINFROM; jd->sa2 = sa2; @@ -1684,7 +1739,7 @@ static int area_join_apply(bContext *C, wmOperator *op) { sAreaJoinData *jd = (sAreaJoinData *)op->customdata; if (!jd) return 0; - + if(!screen_area_join(C, CTX_wm_screen(C), jd->sa1, jd->sa2)){ return 0; } @@ -1692,7 +1747,7 @@ static int area_join_apply(bContext *C, wmOperator *op) CTX_wm_area_set(C, NULL); CTX_wm_region_set(C, NULL); } - + return 1; } @@ -1703,7 +1758,7 @@ static void area_join_exit(bContext *C, wmOperator *op) MEM_freeN(op->customdata); op->customdata = NULL; } - + /* this makes sure aligned edges will result in aligned grabbing */ removedouble_scredges(CTX_wm_screen(C)); removenotused_scredges(CTX_wm_screen(C)); @@ -1717,17 +1772,17 @@ static int area_join_exec(bContext *C, wmOperator *op) area_join_apply(C, op); area_join_exit(C, op); - + return OPERATOR_FINISHED; } /* interaction callback */ static int area_join_invoke(bContext *C, wmOperator *op, wmEvent *event) { - + if(event->type==EVT_ACTIONZONE_AREA) { sActionzoneData *sad= event->customdata; - + if(sad->modifier>0) { return OPERATOR_PASS_THROUGH; } @@ -1745,13 +1800,13 @@ static int area_join_invoke(bContext *C, wmOperator *op, wmEvent *event) RNA_int_set(op->ptr, "y1", sad->y); RNA_int_set(op->ptr, "x2", event->x); RNA_int_set(op->ptr, "y2", event->y); - + if(!area_join_init(C, op)) return OPERATOR_PASS_THROUGH; - + /* add temp handler */ WM_event_add_modal_handler(C, op); - + return OPERATOR_RUNNING_MODAL; } @@ -1761,7 +1816,7 @@ static int area_join_invoke(bContext *C, wmOperator *op, wmEvent *event) static int area_join_cancel(bContext *C, wmOperator *op) { sAreaJoinData *jd = (sAreaJoinData *)op->customdata; - + if (jd->sa1) { jd->sa1->flag &= ~AREA_FLAG_DRAWJOINFROM; jd->sa1->flag &= ~AREA_FLAG_DRAWJOINTO; @@ -1770,11 +1825,11 @@ static int area_join_cancel(bContext *C, wmOperator *op) jd->sa2->flag &= ~AREA_FLAG_DRAWJOINFROM; jd->sa2->flag &= ~AREA_FLAG_DRAWJOINTO; } - + WM_event_add_notifier(C, NC_WINDOW, NULL); area_join_exit(C, op); - + return OPERATOR_CANCELLED; } @@ -1788,66 +1843,66 @@ static int area_join_modal(bContext *C, wmOperator *op, wmEvent *event) switch(event->type) { case MOUSEMOVE: - { - ScrArea *sa = screen_areahascursor(sc, event->x, event->y); - int dir; - - if (sa) { - if (jd->sa1 != sa) { - dir = area_getorientation(sc, jd->sa1, sa); - if (dir >= 0) { - if (jd->sa2) jd->sa2->flag &= ~AREA_FLAG_DRAWJOINTO; - jd->sa2 = sa; - jd->sa2->flag |= AREA_FLAG_DRAWJOINTO; - } - else { - /* we are not bordering on the previously selected area - we check if area has common border with the one marked for removal - in this case we can swap areas. - */ - dir = area_getorientation(sc, sa, jd->sa2); - if (dir >= 0) { - if (jd->sa1) jd->sa1->flag &= ~AREA_FLAG_DRAWJOINFROM; - if (jd->sa2) jd->sa2->flag &= ~AREA_FLAG_DRAWJOINTO; - jd->sa1 = jd->sa2; - jd->sa2 = sa; - if (jd->sa1) jd->sa1->flag |= AREA_FLAG_DRAWJOINFROM; - if (jd->sa2) jd->sa2->flag |= AREA_FLAG_DRAWJOINTO; - } - else { - if (jd->sa2) jd->sa2->flag &= ~AREA_FLAG_DRAWJOINTO; - jd->sa2 = NULL; - } - } - WM_event_add_notifier(C, NC_WINDOW, NULL); + { + ScrArea *sa = screen_areahascursor(sc, event->x, event->y); + int dir; + + if (sa) { + if (jd->sa1 != sa) { + dir = area_getorientation(sc, jd->sa1, sa); + if (dir >= 0) { + if (jd->sa2) jd->sa2->flag &= ~AREA_FLAG_DRAWJOINTO; + jd->sa2 = sa; + jd->sa2->flag |= AREA_FLAG_DRAWJOINTO; } else { - /* we are back in the area previously selected for keeping - * we swap the areas if possible to allow user to choose */ - if (jd->sa2 != NULL) { + /* we are not bordering on the previously selected area + we check if area has common border with the one marked for removal + in this case we can swap areas. + */ + dir = area_getorientation(sc, sa, jd->sa2); + if (dir >= 0) { if (jd->sa1) jd->sa1->flag &= ~AREA_FLAG_DRAWJOINFROM; if (jd->sa2) jd->sa2->flag &= ~AREA_FLAG_DRAWJOINTO; jd->sa1 = jd->sa2; jd->sa2 = sa; if (jd->sa1) jd->sa1->flag |= AREA_FLAG_DRAWJOINFROM; if (jd->sa2) jd->sa2->flag |= AREA_FLAG_DRAWJOINTO; - dir = area_getorientation(sc, jd->sa1, jd->sa2); - if (dir < 0) { - printf("oops, didn't expect that!\n"); - } } else { - dir = area_getorientation(sc, jd->sa1, sa); - if (dir >= 0) { - if (jd->sa2) jd->sa2->flag &= ~AREA_FLAG_DRAWJOINTO; - jd->sa2 = sa; - jd->sa2->flag |= AREA_FLAG_DRAWJOINTO; - } + if (jd->sa2) jd->sa2->flag &= ~AREA_FLAG_DRAWJOINTO; + jd->sa2 = NULL; } - WM_event_add_notifier(C, NC_WINDOW, NULL); } + WM_event_add_notifier(C, NC_WINDOW, NULL); + } + else { + /* we are back in the area previously selected for keeping + * we swap the areas if possible to allow user to choose */ + if (jd->sa2 != NULL) { + if (jd->sa1) jd->sa1->flag &= ~AREA_FLAG_DRAWJOINFROM; + if (jd->sa2) jd->sa2->flag &= ~AREA_FLAG_DRAWJOINTO; + jd->sa1 = jd->sa2; + jd->sa2 = sa; + if (jd->sa1) jd->sa1->flag |= AREA_FLAG_DRAWJOINFROM; + if (jd->sa2) jd->sa2->flag |= AREA_FLAG_DRAWJOINTO; + dir = area_getorientation(sc, jd->sa1, jd->sa2); + if (dir < 0) { + printf("oops, didn't expect that!\n"); + } + } + else { + dir = area_getorientation(sc, jd->sa1, sa); + if (dir >= 0) { + if (jd->sa2) jd->sa2->flag &= ~AREA_FLAG_DRAWJOINTO; + jd->sa2 = sa; + jd->sa2->flag |= AREA_FLAG_DRAWJOINTO; + } + } + WM_event_add_notifier(C, NC_WINDOW, NULL); } } + } break; case LEFTMOUSE: if(event->val==KM_RELEASE) { @@ -1857,12 +1912,12 @@ static int area_join_modal(bContext *C, wmOperator *op, wmEvent *event) return OPERATOR_FINISHED; } break; - + case RIGHTMOUSE: case ESCKEY: return area_join_cancel(C, op); } - + return OPERATOR_RUNNING_MODAL; } @@ -1879,9 +1934,9 @@ static void SCREEN_OT_area_join(wmOperatorType *ot) ot->invoke= area_join_invoke; ot->modal= area_join_modal; ot->poll= ED_operator_areaactive; - + ot->flag= OPTYPE_BLOCKING; - + /* rna */ RNA_def_int(ot->srna, "x1", -100, INT_MIN, INT_MAX, "X 1", "", INT_MIN, INT_MAX); RNA_def_int(ot->srna, "y1", -100, INT_MIN, INT_MAX, "Y 1", "", INT_MIN, INT_MAX); @@ -1929,10 +1984,10 @@ static int repeat_history_invoke(bContext *C, wmOperator *op, wmEvent *event) pup= uiPupMenuBegin(C, op->type->name, 0); layout= uiPupMenuLayout(pup); - + for (i=items-1, lastop= wm->operators.last; lastop; lastop= lastop->prev, i--) uiItemIntO(layout, lastop->type->name, 0, op->type->idname, "index", i); - + uiPupMenuEnd(C, pup); return OPERATOR_CANCELLED; @@ -1950,7 +2005,7 @@ static int repeat_history_exec(bContext *C, wmOperator *op) WM_operator_repeat(C, op); } - + return OPERATOR_FINISHED; } @@ -1976,7 +2031,7 @@ static int redo_last_invoke(bContext *C, wmOperator *op, wmEvent *event) { wmWindowManager *wm= CTX_wm_manager(C); wmOperator *lastop; - + /* only for operators that are registered and did an undo push */ for(lastop= wm->operators.last; lastop; lastop= lastop->prev) if((lastop->type->flag & OPTYPE_REGISTER) && (lastop->type->flag & OPTYPE_UNDO)) @@ -1984,7 +2039,7 @@ static int redo_last_invoke(bContext *C, wmOperator *op, wmEvent *event) if(lastop) WM_operator_redo_popup(C, lastop); - + return OPERATOR_CANCELLED; } @@ -2084,7 +2139,7 @@ static void SCREEN_OT_region_quadview(wmOperatorType *ot) ot->idname= "SCREEN_OT_region_quadview"; /* api callbacks */ -// ot->invoke= WM_operator_confirm; + // ot->invoke= WM_operator_confirm; ot->exec= region_quadview_exec; ot->poll= ED_operator_areaactive; ot->flag= 0; @@ -2098,7 +2153,10 @@ static void SCREEN_OT_region_quadview(wmOperatorType *ot) static int region_flip_exec(bContext *C, wmOperator *op) { ARegion *ar= CTX_wm_region(C); - + + if (!ar) + return OPERATOR_CANCELLED; + if(ar->alignment==RGN_ALIGN_TOP) ar->alignment= RGN_ALIGN_BOTTOM; else if(ar->alignment==RGN_ALIGN_BOTTOM) @@ -2109,7 +2167,6 @@ static int region_flip_exec(bContext *C, wmOperator *op) ar->alignment= RGN_ALIGN_LEFT; WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL); - printf("executed region flip\n"); return OPERATOR_FINISHED; } @@ -2190,7 +2247,7 @@ static int header_toolbox_invoke(bContext *C, wmOperator *op, wmEvent *event) ARegion *ar= CTX_wm_region(C); uiPopupMenu *pup; uiLayout *layout; - + pup= uiPupMenuBegin(C, "Header", 0); layout= uiPupMenuLayout(pup); @@ -2211,7 +2268,7 @@ static int header_toolbox_invoke(bContext *C, wmOperator *op, wmEvent *event) } uiPupMenuEnd(C, pup); - + return OPERATOR_CANCELLED; } @@ -2231,7 +2288,7 @@ void SCREEN_OT_header_toolbox(wmOperatorType *ot) static int match_region_with_redraws(int spacetype, int regiontype, int redraws) { if(regiontype==RGN_TYPE_WINDOW) { - + switch (spacetype) { case SPACE_VIEW3D: if(redraws & TIME_ALL_3D_WIN) @@ -2275,6 +2332,14 @@ static int match_region_with_redraws(int spacetype, int regiontype, int redraws) if(spacetype==SPACE_TIME) return 1; } + else if (regiontype==RGN_TYPE_PREVIEW) { + switch (spacetype) { + case SPACE_SEQ: + if(redraws & (TIME_SEQ|TIME_ALL_ANIM_WIN)) + return 1; + break; + } + } return 0; } @@ -2346,10 +2411,11 @@ static int screen_animation_step(bContext *C, wmOperator *op, wmEvent *event) } /* since we follow drawflags, we can't send notifier but tag regions ourselves */ + ED_update_for_newframe(C, 1); sound_update_playing(C); - + for(sa= screen->areabase.first; sa; sa= sa->next) { ARegion *ar; for(ar= sa->regionbase.first; ar; ar= ar->next) { @@ -2402,7 +2468,7 @@ static int screen_animation_play(bContext *C, wmOperator *op, wmEvent *event) ScrArea *sa= CTX_wm_area(C); int mode= (RNA_boolean_get(op->ptr, "reverse")) ? -1 : 1; int sync= -1; - + if(RNA_property_is_set(op->ptr, "sync")) sync= (RNA_boolean_get(op->ptr, "sync")); @@ -2413,16 +2479,16 @@ static int screen_animation_play(bContext *C, wmOperator *op, wmEvent *event) ED_screen_animation_timer(C, stime->redraws, sync, mode); /* update region if TIME_REGION was set, to leftmost 3d window */ - ED_screen_animation_timer_update(C, stime->redraws); + ED_screen_animation_timer_update(screen, stime->redraws); } else { int redraws = TIME_REGION|TIME_ALL_3D_WIN; - + /* XXX - would like a better way to deal with this situation - Campbell */ if((sa) && (sa->spacetype == SPACE_SEQ)) { redraws |= TIME_SEQ; } - + ED_screen_animation_timer(C, redraws, sync, mode); if(screen->animtimer) { @@ -2490,23 +2556,23 @@ static void SCREEN_OT_animation_cancel(wmOperatorType *ot) /* ************** border select operator (template) ***************************** */ /* operator state vars used: (added by default WM callbacks) - xmin, ymin - xmax, ymax - - customdata: the wmGesture pointer - -callbacks: - - exec() has to be filled in by user - - invoke() default WM function - adds modal handler - - modal() default WM function - accept modal events while doing it, calls exec(), handles ESC and border drawing - - poll() has to be filled in by user for context -*/ + xmin, ymin + xmax, ymax + + customdata: the wmGesture pointer + + callbacks: + + exec() has to be filled in by user + + invoke() default WM function + adds modal handler + + modal() default WM function + accept modal events while doing it, calls exec(), handles ESC and border drawing + + poll() has to be filled in by user for context + */ #if 0 static int border_select_do(bContext *C, wmOperator *op) { @@ -2541,14 +2607,14 @@ static void SCREEN_OT_border_select(wmOperatorType *ot) RNA_def_int(ot->srna, "xmax", 0, INT_MIN, INT_MAX, "X Max", "", INT_MIN, INT_MAX); RNA_def_int(ot->srna, "ymin", 0, INT_MIN, INT_MAX, "Y Min", "", INT_MIN, INT_MAX); RNA_def_int(ot->srna, "ymax", 0, INT_MIN, INT_MAX, "Y Max", "", INT_MIN, INT_MAX); - + } #endif /* ****************************** render invoking ***************** */ /* set callbacks, exported to sequence render too. -Only call in foreground (UI) renders. */ + Only call in foreground (UI) renders. */ /* returns biggest area that is not uv/image editor. Note that it uses buttons */ /* window as the last possible alternative. */ @@ -2613,7 +2679,7 @@ static ScrArea *find_area_showing_r_result(bContext *C) } } } - + return sa; } @@ -2722,13 +2788,13 @@ static void screen_set_image_output(bContext *C, int mx, int my) /* get the correct image, and scale it */ sima->image= BKE_image_verify_viewer(IMA_TYPE_R_RESULT, "Render Result"); -// if(G.displaymode==2) { // XXX - if(sa->full) { - sima->flag |= SI_FULLWINDOW|SI_PREVSPACE; - -// ed_screen_fullarea(C, win, sa); - } -// } + // if(G.displaymode==2) { // XXX + if(sa->full) { + sima->flag |= SI_FULLWINDOW|SI_PREVSPACE; + + // ed_screen_fullarea(C, win, sa); + } + // } } @@ -2755,7 +2821,7 @@ static int screen_render_exec(bContext *C, wmOperator *op) ED_update_for_newframe(C, 1); WM_event_add_notifier(C, NC_SCENE|ND_RENDER_RESULT, scene); - + return OPERATOR_FINISHED; } @@ -2835,7 +2901,7 @@ static void image_renderinfo_cb(void *rjv, RenderStats *rs) /* make jobs timer to send notifier */ *(rj->do_update)= 1; - + } /* called inside thread! */ @@ -2898,7 +2964,7 @@ static void image_buffer_rect_update(Scene *scene, RenderResult *rr, ImBuf *ibuf rectf+= 4*(rr->rectx*ymin + xmin); rectc= (char *)(ibuf->rect + ibuf->x*rymin + rxmin); - + /* XXX make nice consistent functions for this */ if (scene && (scene->r.color_mgt_flag & R_COLOR_MANAGEMENT)) { for(y1= 0; y1image, &rj->iuser, &lock); if(ibuf) { image_buffer_rect_update(rj->scene, rr, ibuf, renrect); - + /* make jobs timer to send notifier */ *(rj->do_update)= 1; } @@ -2966,6 +3032,11 @@ static void render_startjob(void *rjv, short *stop, short *do_update) rj->stop= stop; rj->do_update= do_update; +#if defined(__APPLE__) && (PARALLEL == 1) && (__GNUC__ == 4) && (__GNUC_MINOR__ == 2) + // Workaround for Apple gcc 4.2.1 omp vs background thread bug + pthread_setspecific (gomp_tls_key, thread_tls_data); +#endif + if(rj->anim) RE_BlenderAnim(rj->re, rj->scene, rj->scene->r.sfra, rj->scene->r.efra, rj->scene->r.frame_step); else @@ -2989,7 +3060,7 @@ static int screen_render_modal(bContext *C, wmOperator *op, wmEvent *event) { /* no running blender, remove handler and pass through */ if(0==WM_jobs_test(CTX_wm_manager(C), CTX_data_scene(C))) - return OPERATOR_FINISHED|OPERATOR_PASS_THROUGH; + return OPERATOR_FINISHED|OPERATOR_PASS_THROUGH; /* running render */ switch (event->type) { @@ -3019,7 +3090,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event) /* handle UI stuff */ WM_cursor_wait(1); - + /* inform Freestyle of the context */ FRS_set_context(C); @@ -3035,7 +3106,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event) /* ensure at least 1 area shows result */ screen_set_image_output(C, event->x, event->y); - + /* job custom data */ rj= MEM_callocN(sizeof(RenderJob), "render job"); rj->scene= scene; @@ -3050,6 +3121,11 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event) WM_jobs_timer(steve, 0.2, NC_SCENE|ND_RENDER_RESULT, 0); WM_jobs_callbacks(steve, render_startjob, NULL, NULL); +#if defined(__APPLE__) && (PARALLEL == 1) && (__GNUC__ == 4) && (__GNUC_MINOR__ == 2) + // Workaround for Apple gcc 4.2.1 omp vs background thread bug + thread_tls_data = pthread_getspecific(gomp_tls_key); +#endif + /* get a render result image, and make sure it is empty */ ima= BKE_image_verify_viewer(IMA_TYPE_R_RESULT, "Render Result"); BKE_image_signal(ima, NULL, IMA_SIGNAL_FREE); @@ -3066,14 +3142,14 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event) // BKE_report in render! // RE_error_cb(re, error_cb); - + WM_jobs_start(CTX_wm_manager(C), steve); G.afbreek= 0; WM_cursor_wait(0); WM_event_add_notifier(C, NC_SCENE|ND_RENDER_RESULT, scene); - + /* add modal handler for ESC */ WM_event_add_modal_handler(C, op); @@ -3104,20 +3180,20 @@ static void SCREEN_OT_render(wmOperatorType *ot) typedef struct OGLRender { Render *re; Scene *scene; - + View3D *v3d; RegionView3D *rv3d; ARegion *ar; - + Image *ima; ImageUser iuser; - + GPUOffScreen *ofs; int sizex, sizey; - + bMovieHandle *mh; int cfrao, nfra; - + wmTimer *timer; } OGLRender; @@ -3133,10 +3209,10 @@ static void screen_opengl_render_apply(OGLRender *oglrender) float winmat[4][4]; int sizex= oglrender->sizex; int sizey= oglrender->sizey; - + /* bind */ GPU_offscreen_bind(oglrender->ofs); - + /* render 3d view */ if(rv3d->persp==RV3D_CAMOB && v3d->camera) { RE_GetCameraWindow(oglrender->re, v3d->camera, scene->r.cfra, winmat); @@ -3144,19 +3220,19 @@ static void screen_opengl_render_apply(OGLRender *oglrender) } else ED_view3d_draw_offscreen(scene, v3d, ar, sizex, sizey, NULL, NULL); - + /* read in pixels & stamp */ rr= RE_AcquireResultRead(oglrender->re); glReadPixels(0, 0, sizex, sizey, GL_RGBA, GL_FLOAT, rr->rectf); if((scene->r.scemode & R_STAMP_INFO) && (scene->r.stamp & R_STAMP_DRAW)) BKE_stamp_buf(scene, (unsigned char *)rr->rect32, rr->rectf, rr->rectx, rr->recty, 3); RE_ReleaseResult(oglrender->re); - + /* update byte from float buffer */ ibuf= BKE_image_acquire_ibuf(oglrender->ima, &oglrender->iuser, &lock); if(ibuf) image_buffer_rect_update(NULL, rr, ibuf, NULL); BKE_image_release_ibuf(oglrender->ima, lock); - + /* unbind */ GPU_offscreen_unbind(oglrender->ofs); } @@ -3169,7 +3245,7 @@ static int screen_opengl_render_init(bContext *C, wmOperator *op) GPUOffScreen *ofs; OGLRender *oglrender; int sizex, sizey; - + /* ensure we have a 3d view */ if(!ED_view3d_context_activate(C)) return 0; @@ -3183,79 +3259,79 @@ static int screen_opengl_render_init(bContext *C, wmOperator *op) /* handle UI stuff */ WM_cursor_wait(1); - + /* create offscreen buffer */ sizex= (scene->r.size*scene->r.xsch)/100; sizey= (scene->r.size*scene->r.ysch)/100; - + view3d_operator_needs_opengl(C); ofs= GPU_offscreen_create(sizex, sizey); - + if(!ofs) { BKE_report(op->reports, RPT_ERROR, "Failed to create OpenGL offscreen buffer."); return 0; } - + /* allocate opengl render */ oglrender= MEM_callocN(sizeof(OGLRender), "OGLRender"); op->customdata= oglrender; - + oglrender->ofs= ofs; oglrender->sizex= sizex; oglrender->sizey= sizey; oglrender->scene= scene; - + oglrender->v3d= CTX_wm_view3d(C); oglrender->ar= CTX_wm_region(C); oglrender->rv3d= CTX_wm_region_view3d(C); - + /* create image and image user */ oglrender->ima= BKE_image_verify_viewer(IMA_TYPE_R_RESULT, "Render Result"); BKE_image_signal(oglrender->ima, NULL, IMA_SIGNAL_FREE); - + oglrender->iuser.scene= scene; oglrender->iuser.ok= 1; - + /* create render and render result */ oglrender->re= RE_NewRender(scene->id.name); RE_InitState(oglrender->re, NULL, &scene->r, sizex, sizey, NULL); - + rr= RE_AcquireResultWrite(oglrender->re); if(rr->rectf==NULL) rr->rectf= MEM_mallocN(sizeof(float)*4*sizex*sizex, "32 bits rects"); RE_ReleaseResult(oglrender->re); - + return 1; } static void screen_opengl_render_end(bContext *C, OGLRender *oglrender) { Scene *scene= oglrender->scene; - + if(oglrender->mh) { if(BKE_imtype_is_movie(scene->r.imtype)) oglrender->mh->end_movie(); } - + if(oglrender->timer) { scene->r.cfra= oglrender->cfrao; scene_update_for_newframe(scene, scene->lay); - + WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), oglrender->timer); } - + WM_cursor_wait(0); WM_event_add_notifier(C, NC_SCENE|ND_RENDER_RESULT, oglrender->scene); - + GPU_offscreen_free(oglrender->ofs); - + MEM_freeN(oglrender); } static int screen_opengl_render_cancel(bContext *C, wmOperator *op) { screen_opengl_render_end(C, op->customdata); - + return OPERATOR_CANCELLED; } @@ -3268,7 +3344,7 @@ static int screen_opengl_render_modal(bContext *C, wmOperator *op, wmEvent *even char name[FILE_MAXDIR+FILE_MAXFILE]; unsigned int lay; int ok= 0; - + switch(event->type) { case ESCKEY: /* cancel */ @@ -3282,26 +3358,35 @@ static int screen_opengl_render_modal(bContext *C, wmOperator *op, wmEvent *even /* nothing to do */ return OPERATOR_RUNNING_MODAL; } - + /* go to next frame */ while(CFRAnfra) { if(scene->lay & 0xFF000000) lay= scene->lay & 0xFF000000; else lay= scene->lay; - + scene_update_for_newframe(scene, lay); CFRA++; } - + scene_update_for_newframe(scene, scene->lay); + if(oglrender->rv3d->persp==RV3D_CAMOB && oglrender->v3d->camera && oglrender->v3d->scenelock) { + /* since scene_update_for_newframe() is used rather + * then ED_update_for_newframe() the camera needs to be set */ + Object *camera= scene_find_camera_switch(scene); + + if(camera) + oglrender->v3d->camera= scene->camera= camera; + } + /* render into offscreen buffer */ screen_opengl_render_apply(oglrender); /* save to disk */ ibuf= BKE_image_acquire_ibuf(oglrender->ima, &oglrender->iuser, &lock); - + if(ibuf) { if(BKE_imtype_is_movie(scene->r.imtype)) { oglrender->mh->append_movie(&scene->r, CFRA, (int*)ibuf->rect, oglrender->sizex, oglrender->sizey); @@ -3316,31 +3401,31 @@ static int screen_opengl_render_modal(bContext *C, wmOperator *op, wmEvent *even else printf("saved: %s", name); } } - + BKE_image_release_ibuf(oglrender->ima, lock); - + /* movie stats prints have no line break */ printf("\n"); /* go to next frame */ oglrender->nfra += scene->r.frame_step; scene->r.cfra++; - + WM_event_add_notifier(C, NC_SCENE|ND_RENDER_RESULT, oglrender->scene); - + /* stop at the end or on error */ if(scene->r.cfra > EFRA || !ok) { screen_opengl_render_end(C, op->customdata); return OPERATOR_FINISHED; } - + return OPERATOR_RUNNING_MODAL; } static int screen_opengl_render_invoke(bContext *C, wmOperator *op, wmEvent *event) { int anim= RNA_boolean_get(op->ptr, "animation"); - + if(!screen_opengl_render_init(C, op)) return OPERATOR_CANCELLED; @@ -3349,30 +3434,30 @@ static int screen_opengl_render_invoke(bContext *C, wmOperator *op, wmEvent *eve screen_opengl_render_apply(op->customdata); screen_opengl_render_end(C, op->customdata); screen_set_image_output(C, event->x, event->y); - + return OPERATOR_FINISHED; } else { /* initialize animation */ OGLRender *oglrender; Scene *scene; - + oglrender= op->customdata; scene= oglrender->scene; - + oglrender->mh= BKE_get_movie_handle(scene->r.imtype); if(BKE_imtype_is_movie(scene->r.imtype)) oglrender->mh->start_movie(scene, &scene->r, oglrender->sizex, oglrender->sizey); - + oglrender->cfrao= scene->r.cfra; oglrender->nfra= SFRA; scene->r.cfra= SFRA; - + WM_event_add_modal_handler(C, op); oglrender->timer= WM_event_add_timer(CTX_wm_manager(C), CTX_wm_window(C), TIMER, 0.01f); - + screen_set_image_output(C, event->x, event->y); - + return OPERATOR_RUNNING_MODAL; } } @@ -3413,11 +3498,11 @@ static int render_view_cancel_exec(bContext *C, wmOperator *unused) if(sima->flag & SI_FULLWINDOW) { sima->flag &= ~SI_FULLWINDOW; - ED_screen_full_prevspace(C); + ED_screen_full_prevspace(C, sa); } else - ED_area_prevspace(C); - + ED_area_prevspace(C, sa); + return OPERATOR_FINISHED; } else if(sima->flag & SI_FULLWINDOW) { @@ -3425,7 +3510,7 @@ static int render_view_cancel_exec(bContext *C, wmOperator *unused) ed_screen_fullarea(C, win, sa); return OPERATOR_FINISHED; } - + return OPERATOR_PASS_THROUGH; } @@ -3446,7 +3531,7 @@ static void SCREEN_OT_render_view_cancel(struct wmOperatorType *ot) static int render_view_show_invoke(bContext *C, wmOperator *unused, wmEvent *event) { ScrArea *sa= find_area_showing_r_result(C); - + /* test if we have a temp screen in front */ if(CTX_wm_window(C)->screen->full==SCREENTEMP) { wm_window_lower(CTX_wm_window(C)); @@ -3460,7 +3545,7 @@ static int render_view_show_invoke(bContext *C, wmOperator *unused, wmEvent *eve if(sima->flag & SI_FULLWINDOW) { sima->flag &= ~SI_FULLWINDOW; - ED_screen_full_prevspace(C); + ED_screen_full_prevspace(C, sa); } else if(sima->next) { ED_area_newspace(C, sa, sima->next->spacetype); @@ -3487,6 +3572,40 @@ static void SCREEN_OT_render_view_show(struct wmOperatorType *ot) ot->poll= ED_operator_screenactive; } +/* *********************** generic fullscreen 'back' button *************** */ + + +static int fullscreen_back_exec(bContext *C, wmOperator *op) +{ + bScreen *screen = CTX_wm_screen(C); + ScrArea *sa=NULL; + + /* search current screen for 'fullscreen' areas */ + for (sa=screen->areabase.first; sa; sa=sa->next) { + if (sa->full) break; + } + if (!sa) { + BKE_report(op->reports, RPT_ERROR, "No fullscreen areas were found."); + return OPERATOR_CANCELLED; + } + + ED_screen_full_restore(C, sa); + + return OPERATOR_FINISHED; +} + +static void SCREEN_OT_back_to_previous(struct wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Back to Previous Screen"; + ot->description= "Revert back to the original screen layout, before fullscreen area overlay."; + ot->idname= "SCREEN_OT_back_to_previous"; + + /* api callbacks */ + ot->exec= fullscreen_back_exec; + ot->poll= ED_operator_screenactive; +} + /* *********** show user pref window ****** */ static int userpref_show_invoke(bContext *C, wmOperator *unused, wmEvent *event) @@ -3532,10 +3651,10 @@ static int screen_new_exec(bContext *C, wmOperator *op) { wmWindow *win= CTX_wm_window(C); bScreen *sc= CTX_wm_screen(C); - + sc= ED_screen_duplicate(win, sc); WM_event_add_notifier(C, NC_SCREEN|ND_SCREENBROWSE, sc); - + return OPERATOR_FINISHED; } @@ -3548,7 +3667,7 @@ void SCREEN_OT_new(wmOperatorType *ot) /* api callbacks */ ot->exec= screen_new_exec; - + /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } @@ -3558,9 +3677,9 @@ void SCREEN_OT_new(wmOperatorType *ot) static int screen_delete_exec(bContext *C, wmOperator *op) { bScreen *sc= CTX_wm_screen(C); - + WM_event_add_notifier(C, NC_SCREEN|ND_SCREENDELETE, sc); - + return OPERATOR_FINISHED; } @@ -3573,7 +3692,7 @@ void SCREEN_OT_delete(wmOperatorType *ot) /* api callbacks */ ot->exec= screen_delete_exec; - + /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } @@ -3585,17 +3704,17 @@ static int scene_new_exec(bContext *C, wmOperator *op) Scene *newscene, *scene= CTX_data_scene(C); Main *bmain= CTX_data_main(C); int type= RNA_enum_get(op->ptr, "type"); - + newscene= copy_scene(bmain, scene, type); - + /* these can't be handled in blenkernel curently, so do them here */ if(type == SCE_COPY_LINK_DATA) ED_object_single_users(newscene, 0); else if(type == SCE_COPY_FULL) ED_object_single_users(newscene, 1); - + WM_event_add_notifier(C, NC_SCENE|ND_SCENEBROWSE, newscene); - + return OPERATOR_FINISHED; } @@ -3607,7 +3726,7 @@ void SCENE_OT_new(wmOperatorType *ot) {SCE_COPY_LINK_DATA, "LINK_OBJECT_DATA", 0, "Link Object Data", "Copy objects linked to data from the current scene."}, {SCE_COPY_FULL, "FULL_COPY", 0, "Full Copy", "Make a full copy of the current scene."}, {0, NULL, 0, NULL, NULL}}; - + /* identifiers */ ot->name= "New Scene"; ot->description= "Add new scene by type."; @@ -3616,10 +3735,10 @@ void SCENE_OT_new(wmOperatorType *ot) /* api callbacks */ ot->exec= scene_new_exec; ot->invoke= WM_menu_invoke; - + /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; - + /* properties */ RNA_def_enum(ot->srna, "type", type_items, 0, "Type", ""); } @@ -3629,9 +3748,9 @@ void SCENE_OT_new(wmOperatorType *ot) static int scene_delete_exec(bContext *C, wmOperator *op) { Scene *scene= CTX_data_scene(C); - + WM_event_add_notifier(C, NC_SCENE|ND_SCENEDELETE, scene); - + return OPERATOR_FINISHED; } @@ -3644,7 +3763,7 @@ void SCENE_OT_delete(wmOperatorType *ot) /* api callbacks */ ot->exec= scene_delete_exec; - + /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } @@ -3673,6 +3792,7 @@ void ED_operatortypes_screen(void) WM_operatortype_append(SCREEN_OT_header_toolbox); WM_operatortype_append(SCREEN_OT_screen_set); WM_operatortype_append(SCREEN_OT_screen_full_area); + WM_operatortype_append(SCREEN_OT_back_to_previous); WM_operatortype_append(SCREEN_OT_screenshot); WM_operatortype_append(SCREEN_OT_screencast); WM_operatortype_append(SCREEN_OT_userpref_show); @@ -3691,13 +3811,13 @@ void ED_operatortypes_screen(void) WM_operatortype_append(SCREEN_OT_render_view_cancel); WM_operatortype_append(SCREEN_OT_render_view_show); WM_operatortype_append(SCREEN_OT_opengl_render); - + /* new/delete */ WM_operatortype_append(SCREEN_OT_new); WM_operatortype_append(SCREEN_OT_delete); WM_operatortype_append(SCENE_OT_new); WM_operatortype_append(SCENE_OT_delete); - + /* tools shared by more space types */ WM_operatortype_append(ED_OT_undo); WM_operatortype_append(ED_OT_redo); @@ -3721,12 +3841,12 @@ static void keymap_modal_set(wmKeyConfig *keyconf) WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_ANY, KM_ANY, 0, KM_MODAL_APPLY); WM_modalkeymap_add_item(keymap, RETKEY, KM_PRESS, KM_ANY, 0, KM_MODAL_APPLY); WM_modalkeymap_add_item(keymap, PADENTER, KM_PRESS, KM_ANY, 0, KM_MODAL_APPLY); - + WM_modalkeymap_add_item(keymap, LEFTCTRLKEY, KM_PRESS, KM_ANY, 0, KM_MODAL_STEP10); WM_modalkeymap_add_item(keymap, LEFTCTRLKEY, KM_RELEASE, KM_ANY, 0, KM_MODAL_STEP10_OFF); WM_modalkeymap_assign(keymap, "SCREEN_OT_area_move"); - + } /* called in spacetypes.c */ @@ -3740,16 +3860,16 @@ void ED_keymap_screen(wmKeyConfig *keyconf) RNA_int_set(WM_keymap_add_item(keymap, "SCREEN_OT_actionzone", LEFTMOUSE, KM_PRESS, 0, 0)->ptr, "modifier", 0); RNA_int_set(WM_keymap_add_item(keymap, "SCREEN_OT_actionzone", LEFTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "modifier", 1); RNA_int_set(WM_keymap_add_item(keymap, "SCREEN_OT_actionzone", LEFTMOUSE, KM_PRESS, KM_ALT, 0)->ptr, "modifier", 2); - + /* screen tools */ WM_keymap_verify_item(keymap, "SCREEN_OT_area_split", EVT_ACTIONZONE_AREA, 0, 0, 0); WM_keymap_verify_item(keymap, "SCREEN_OT_area_join", EVT_ACTIONZONE_AREA, 0, 0, 0); WM_keymap_verify_item(keymap, "SCREEN_OT_area_dupli", EVT_ACTIONZONE_AREA, 0, KM_SHIFT, 0); WM_keymap_verify_item(keymap, "SCREEN_OT_area_swap", EVT_ACTIONZONE_AREA, 0, KM_ALT, 0); WM_keymap_verify_item(keymap, "SCREEN_OT_region_scale", EVT_ACTIONZONE_REGION, 0, 0, 0); - /* area move after action zones */ + /* area move after action zones */ WM_keymap_verify_item(keymap, "SCREEN_OT_area_move", LEFTMOUSE, KM_PRESS, 0, 0); - + /* Header Editing ------------------------------------------------ */ keymap= WM_keymap_find(keyconf, "Header", 0, 0); @@ -3769,39 +3889,40 @@ void ED_keymap_screen(wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "SCREEN_OT_screen_full_area", SPACEKEY, KM_PRESS, KM_SHIFT, 0); WM_keymap_add_item(keymap, "SCREEN_OT_screenshot", F3KEY, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "SCREEN_OT_screencast", F3KEY, KM_PRESS, KM_ALT, 0); - - /* tests */ + + /* tests */ WM_keymap_add_item(keymap, "SCREEN_OT_region_quadview", QKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); WM_keymap_verify_item(keymap, "SCREEN_OT_repeat_history", F3KEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "SCREEN_OT_repeat_last", RKEY, KM_PRESS, KM_SHIFT, 0); WM_keymap_verify_item(keymap, "SCREEN_OT_region_flip", F5KEY, KM_PRESS, 0, 0); WM_keymap_verify_item(keymap, "SCREEN_OT_redo_last", F6KEY, KM_PRESS, 0, 0); WM_keymap_verify_item(keymap, "WM_OT_reload_scripts", F8KEY, KM_PRESS, 0, 0); - + /* files */ WM_keymap_add_item(keymap, "FILE_OT_execute", RETKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "FILE_OT_execute", PADENTER, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "FILE_OT_cancel", ESCKEY, KM_PRESS, 0, 0); /* undo */ - #ifdef __APPLE__ +#ifdef __APPLE__ WM_keymap_add_item(keymap, "ED_OT_undo", ZKEY, KM_PRESS, KM_OSKEY, 0); WM_keymap_add_item(keymap, "ED_OT_redo", ZKEY, KM_PRESS, KM_SHIFT|KM_OSKEY, 0); - #endif +#endif WM_keymap_add_item(keymap, "ED_OT_undo", ZKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "ED_OT_redo", ZKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0); - + /* render */ WM_keymap_add_item(keymap, "SCREEN_OT_render", F12KEY, KM_PRESS, 0, 0); RNA_boolean_set(WM_keymap_add_item(keymap, "SCREEN_OT_render", F12KEY, KM_PRESS, KM_CTRL, 0)->ptr, "animation", 1); WM_keymap_add_item(keymap, "SCREEN_OT_render_view_cancel", ESCKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "SCREEN_OT_render_view_show", F11KEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "SCREEN_OT_play_rendered_anim", F11KEY, KM_PRESS, KM_CTRL, 0); /* user prefs */ - #ifdef __APPLE__ +#ifdef __APPLE__ WM_keymap_add_item(keymap, "SCREEN_OT_userpref_show", COMMAKEY, KM_PRESS, KM_OSKEY, 0); - #endif +#endif WM_keymap_add_item(keymap, "SCREEN_OT_userpref_show", UKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); @@ -3826,7 +3947,7 @@ void ED_keymap_screen(wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "SCREEN_OT_animation_play", KKEY, KM_PRESS, 0, LKEY); RNA_boolean_set(WM_keymap_add_item(keymap, "SCREEN_OT_animation_play", AKEY, KM_PRESS, KM_ALT|KM_SHIFT, 0)->ptr, "reverse", 1); WM_keymap_add_item(keymap, "SCREEN_OT_animation_cancel", ESCKEY, KM_PRESS, 0, 0); - + keymap_modal_set(keyconf); } diff --git a/source/blender/editors/sculpt_paint/paint_image.c b/source/blender/editors/sculpt_paint/paint_image.c index 55f7a6a23b9..1f0d158ece9 100644 --- a/source/blender/editors/sculpt_paint/paint_image.c +++ b/source/blender/editors/sculpt_paint/paint_image.c @@ -86,6 +86,7 @@ #include "ED_image.h" #include "ED_object.h" #include "ED_screen.h" +#include "ED_sculpt.h" #include "ED_view3d.h" #include "WM_api.h" @@ -113,8 +114,6 @@ #define IMAPAINT_TILE_SIZE (1 << IMAPAINT_TILE_BITS) #define IMAPAINT_TILE_NUMBER(size) (((size)+IMAPAINT_TILE_SIZE-1) >> IMAPAINT_TILE_BITS) -#define MAXUNDONAME 64 - static void imapaint_image_update(SpaceImage *sima, Image *image, ImBuf *ibuf, short texpaint); @@ -204,7 +203,7 @@ typedef struct ProjPaintImage { Image *ima; ImBuf *ibuf; ImagePaintPartialRedraw *partRedrawRect; - struct UndoTile **undoRect; /* only used to build undo tiles after painting */ + void **undoRect; /* only used to build undo tiles after painting */ int touch; } ProjPaintImage; @@ -332,32 +331,20 @@ typedef struct ProjPixelClone { /* Finish projection painting structs */ +typedef struct UndoImageTile { + struct UndoImageTile *next, *prev; + + char idname[MAX_ID_NAME]; /* name instead of pointer*/ -typedef struct UndoTile { - struct UndoTile *next, *prev; - ID id; void *rect; int x, y; -} UndoTile; +} UndoImageTile; -typedef struct UndoElem { - struct UndoElem *next, *prev; - char name[MAXUNDONAME]; - uintptr_t undosize; - - ImBuf *ibuf; - ListBase tiles; -} UndoElem; - -static ListBase undobase = {NULL, NULL}; -static UndoElem *curundo = NULL; static ImagePaintPartialRedraw imapaintpartial = {0, 0, 0, 0, 0}; /* UNDO */ -/* internal functions */ - -static void undo_copy_tile(UndoTile *tile, ImBuf *tmpibuf, ImBuf *ibuf, int restore) +static void undo_copy_tile(UndoImageTile *tile, ImBuf *tmpibuf, ImBuf *ibuf, int restore) { /* copy or swap contents of tile->rect and region in ibuf->rect */ IMB_rectcpy(tmpibuf, ibuf, 0, 0, tile->x*IMAPAINT_TILE_SIZE, @@ -374,49 +361,52 @@ static void undo_copy_tile(UndoTile *tile, ImBuf *tmpibuf, ImBuf *ibuf, int rest tile->y*IMAPAINT_TILE_SIZE, 0, 0, IMAPAINT_TILE_SIZE, IMAPAINT_TILE_SIZE); } -static UndoTile *undo_init_tile(ID *id, ImBuf *ibuf, ImBuf **tmpibuf, int x_tile, int y_tile) +static void *image_undo_push_tile(Image *ima, ImBuf *ibuf, ImBuf **tmpibuf, int x_tile, int y_tile) { - UndoTile *tile; + ListBase *lb= undo_paint_push_get_list(UNDO_PAINT_IMAGE); + UndoImageTile *tile; int allocsize; + + for(tile=lb->first; tile; tile=tile->next) + if(tile->x == x_tile && tile->y == y_tile && strcmp(tile->idname, ima->id.name)==0) + return tile->rect; if (*tmpibuf==NULL) *tmpibuf = IMB_allocImBuf(IMAPAINT_TILE_SIZE, IMAPAINT_TILE_SIZE, 32, IB_rectfloat|IB_rect, 0); - tile= MEM_callocN(sizeof(UndoTile), "ImaUndoTile"); - tile->id= *id; + tile= MEM_callocN(sizeof(UndoImageTile), "UndoImageTile"); + strcpy(tile->idname, ima->id.name); tile->x= x_tile; tile->y= y_tile; allocsize= IMAPAINT_TILE_SIZE*IMAPAINT_TILE_SIZE*4; allocsize *= (ibuf->rect_float)? sizeof(float): sizeof(char); - tile->rect= MEM_mapallocN(allocsize, "ImaUndoRect"); + tile->rect= MEM_mapallocN(allocsize, "UndeImageTile.rect"); undo_copy_tile(tile, *tmpibuf, ibuf, 0); - curundo->undosize += allocsize; + undo_paint_push_count_alloc(UNDO_PAINT_IMAGE, allocsize); - BLI_addtail(&curundo->tiles, tile); + BLI_addtail(lb, tile); - return tile; + return tile->rect; } -static void undo_restore(UndoElem *undo) +static void image_undo_restore(bContext *C, ListBase *lb) { + Main *bmain= CTX_data_main(C); Image *ima = NULL; ImBuf *ibuf, *tmpibuf; - UndoTile *tile; - - if(!undo) - return; + UndoImageTile *tile; tmpibuf= IMB_allocImBuf(IMAPAINT_TILE_SIZE, IMAPAINT_TILE_SIZE, 32, IB_rectfloat|IB_rect, 0); - for(tile=undo->tiles.first; tile; tile=tile->next) { + for(tile=lb->first; tile; tile=tile->next) { /* find image based on name, pointer becomes invalid with global undo */ - if(ima && strcmp(tile->id.name, ima->id.name)==0); + if(ima && strcmp(tile->idname, ima->id.name)==0); else { - for(ima=G.main->image.first; ima; ima=ima->id.next) - if(strcmp(tile->id.name, ima->id.name)==0) + for(ima=bmain->image.first; ima; ima=ima->id.next) + if(strcmp(tile->idname, ima->id.name)==0) break; } @@ -435,117 +425,12 @@ static void undo_restore(UndoElem *undo) IMB_freeImBuf(tmpibuf); } -static void undo_free(UndoElem *undo) +static void image_undo_free(ListBase *lb) { - UndoTile *tile; + UndoImageTile *tile; - for(tile=undo->tiles.first; tile; tile=tile->next) + for(tile=lb->first; tile; tile=tile->next) MEM_freeN(tile->rect); - BLI_freelistN(&undo->tiles); -} - -static void undo_imagepaint_push_begin(char *name) -{ - UndoElem *uel; - int nr; - - /* Undo push is split up in begin and end, the reason is that as painting - * happens more tiles are added to the list, and at the very end we know - * how much memory the undo used to remove old undo elements */ - - /* remove all undos after (also when curundo==NULL) */ - while(undobase.last != curundo) { - uel= undobase.last; - undo_free(uel); - BLI_freelinkN(&undobase, uel); - } - - /* make new */ - curundo= uel= MEM_callocN(sizeof(UndoElem), "undo file"); - BLI_addtail(&undobase, uel); - - /* name can be a dynamic string */ - strncpy(uel->name, name, MAXUNDONAME-1); - - /* limit amount to the maximum amount*/ - nr= 0; - uel= undobase.last; - while(uel) { - nr++; - if(nr==U.undosteps) break; - uel= uel->prev; - } - if(uel) { - while(undobase.first!=uel) { - UndoElem *first= undobase.first; - undo_free(first); - BLI_freelinkN(&undobase, first); - } - } -} - -static void undo_imagepaint_push_end() -{ - UndoElem *uel; - uintptr_t totmem, maxmem; - - if(U.undomemory != 0) { - /* limit to maximum memory (afterwards, we can't know in advance) */ - totmem= 0; - maxmem= ((uintptr_t)U.undomemory)*1024*1024; - - uel= undobase.last; - while(uel) { - totmem+= uel->undosize; - if(totmem>maxmem) break; - uel= uel->prev; - } - - if(uel) { - while(undobase.first!=uel) { - UndoElem *first= undobase.first; - undo_free(first); - BLI_freelinkN(&undobase, first); - } - } - } -} - -void undo_imagepaint_step(int step) -{ - UndoElem *undo; - - if(step==1) { - if(curundo==NULL); - else { - if(G.f & G_DEBUG) printf("undo %s\n", curundo->name); - undo_restore(curundo); - curundo= curundo->prev; - } - } - else if(step==-1) { - if((curundo!=NULL && curundo->next==NULL) || undobase.first==NULL); - else { - undo= (curundo && curundo->next)? curundo->next: undobase.first; - undo_restore(undo); - curundo= undo; - if(G.f & G_DEBUG) printf("redo %s\n", undo->name); - } - } -} - -void undo_imagepaint_clear(void) -{ - UndoElem *uel; - - uel= undobase.first; - while(uel) { - undo_free(uel); - uel= uel->next; - } - - BLI_freelistN(&undobase); - curundo= NULL; } /* fast projection bucket array lookup, use the safe version for bound checking */ @@ -3315,7 +3200,7 @@ static void project_paint_end(ProjPaintState *ps) ProjPixel *projPixel; ImBuf *tmpibuf = NULL, *tmpibuf_float = NULL; LinkNode *pixel_node; - UndoTile *tile; + void *tilerect; MemArena *arena = ps->arena_mt[0]; /* threaded arena re-used for non threaded case */ int bucket_tot = (ps->buckets_x * ps->buckets_y); /* we could get an X/Y but easier to loop through all possible buckets */ @@ -3331,8 +3216,8 @@ static void project_paint_end(ProjPaintState *ps) int last_tile_width=0; for(a=0, last_projIma=ps->projImages; a < ps->image_tot; a++, last_projIma++) { - int size = sizeof(UndoTile **) * IMAPAINT_TILE_NUMBER(last_projIma->ibuf->x) * IMAPAINT_TILE_NUMBER(last_projIma->ibuf->y); - last_projIma->undoRect = (UndoTile **) BLI_memarena_alloc(arena, size); + int size = sizeof(void **) * IMAPAINT_TILE_NUMBER(last_projIma->ibuf->x) * IMAPAINT_TILE_NUMBER(last_projIma->ibuf->y); + last_projIma->undoRect = (void **) BLI_memarena_alloc(arena, size); memset(last_projIma->undoRect, 0, size); last_projIma->ibuf->userflags |= IB_BITMAPDIRTY; } @@ -3372,21 +3257,21 @@ static void project_paint_end(ProjPaintState *ps) if (last_projIma->undoRect[tile_index]==NULL) { /* add the undo tile from the modified image, then write the original colors back into it */ - tile = last_projIma->undoRect[tile_index] = undo_init_tile(&last_projIma->ima->id, last_projIma->ibuf, is_float ? (&tmpibuf_float):(&tmpibuf) , x_tile, y_tile); + tilerect = last_projIma->undoRect[tile_index] = image_undo_push_tile(last_projIma->ima, last_projIma->ibuf, is_float ? (&tmpibuf_float):(&tmpibuf) , x_tile, y_tile); } else { - tile = last_projIma->undoRect[tile_index]; + tilerect = last_projIma->undoRect[tile_index]; } /* This is a BIT ODD, but overwrite the undo tiles image info with this pixels original color * because allocating the tiles allong the way slows down painting */ if (is_float) { - float *rgba_fp = (float *)tile->rect + (((projPixel->x_px - x_round) + (projPixel->y_px - y_round) * IMAPAINT_TILE_SIZE)) * 4; + float *rgba_fp = (float *)tilerect + (((projPixel->x_px - x_round) + (projPixel->y_px - y_round) * IMAPAINT_TILE_SIZE)) * 4; QUATCOPY(rgba_fp, projPixel->origColor.f); } else { - ((unsigned int *)tile->rect)[ (projPixel->x_px - x_round) + (projPixel->y_px - y_round) * IMAPAINT_TILE_SIZE ] = projPixel->origColor.uint; + ((unsigned int *)tilerect)[ (projPixel->x_px - x_round) + (projPixel->y_px - y_round) * IMAPAINT_TILE_SIZE ] = projPixel->origColor.uint; } } } @@ -3957,7 +3842,6 @@ static void imapaint_clear_partial_redraw() static void imapaint_dirty_region(Image *ima, ImBuf *ibuf, int x, int y, int w, int h) { ImBuf *tmpibuf = NULL; - UndoTile *tile; int srcx= 0, srcy= 0, origx; IMB_rectclip(ibuf, NULL, &x, &y, &srcx, &srcy, &w, &h); @@ -3984,17 +3868,9 @@ static void imapaint_dirty_region(Image *ima, ImBuf *ibuf, int x, int y, int w, origx = (x >> IMAPAINT_TILE_BITS); y = (y >> IMAPAINT_TILE_BITS); - for (; y <= h; y++) { - for (x=origx; x <= w; x++) { - for(tile=curundo->tiles.first; tile; tile=tile->next) - if(tile->x == x && tile->y == y && strcmp(tile->id.name, ima->id.name)==0) - break; - - if(!tile) { - undo_init_tile(&ima->id, ibuf, &tmpibuf, x, y); - } - } - } + for (; y <= h; y++) + for (x=origx; x <= w; x++) + image_undo_push_tile(ima, ibuf, &tmpibuf, x, y); ibuf->userflags |= IB_BITMAPDIRTY; @@ -4592,7 +4468,8 @@ static int texture_paint_init(bContext *C, wmOperator *op) } settings->imapaint.flag |= IMAGEPAINT_DRAWING; - undo_imagepaint_push_begin("Image Paint"); + undo_paint_push_begin(UNDO_PAINT_IMAGE, "Image Paint", + image_undo_restore, image_undo_free); /* create painter */ pop->painter= brush_painter_new(pop->s.brush); @@ -4656,7 +4533,7 @@ static void paint_exit(bContext *C, wmOperator *op) } paint_redraw(C, &pop->s, 1); - undo_imagepaint_push_end(); + undo_paint_push_end(UNDO_PAINT_IMAGE); if(pop->s.warnmultifile) BKE_reportf(op->reports, RPT_WARNING, "Image requires 4 color channels to paint: %s", pop->s.warnmultifile); @@ -5255,3 +5132,4 @@ int facemask_paint_poll(bContext *C) { return paint_facesel_test(CTX_data_active_object(C)); } + diff --git a/source/blender/editors/sculpt_paint/paint_intern.h b/source/blender/editors/sculpt_paint/paint_intern.h index f86e1077ef3..108be50267d 100644 --- a/source/blender/editors/sculpt_paint/paint_intern.h +++ b/source/blender/editors/sculpt_paint/paint_intern.h @@ -41,13 +41,16 @@ struct wmOperator; struct wmOperatorType; struct ARegion; struct VPaint; +struct ListBase; /* paint_stroke.c */ +typedef int (*StrokeGetLocation)(struct bContext *C, struct PaintStroke *stroke, 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); -struct PaintStroke *paint_stroke_new(struct bContext *C, StrokeTestStart test_start, +struct PaintStroke *paint_stroke_new(struct bContext *C, + StrokeGetLocation get_location, StrokeTestStart test_start, StrokeUpdateStep update_step, StrokeDone done); int paint_stroke_modal(struct bContext *C, struct wmOperator *op, struct wmEvent *event); int paint_stroke_exec(struct bContext *C, struct wmOperator *op); @@ -100,5 +103,14 @@ void PAINT_OT_face_select_all(struct wmOperatorType *ot); int facemask_paint_poll(struct bContext *C); +/* paint_undo.c */ +typedef void (*UndoRestoreCb)(struct bContext *C, struct ListBase *lb); +typedef void (*UndoFreeCb)(struct ListBase *lb); + +void undo_paint_push_begin(int type, char *name, UndoRestoreCb restore, UndoFreeCb free); +struct ListBase *undo_paint_push_get_list(int type); +void undo_paint_push_count_alloc(int type, int size); +void undo_paint_push_end(int type); + #endif /* ED_PAINT_INTERN_H */ diff --git a/source/blender/editors/sculpt_paint/paint_ops.c b/source/blender/editors/sculpt_paint/paint_ops.c index 92812c2ab08..a54c2b71ee7 100644 --- a/source/blender/editors/sculpt_paint/paint_ops.c +++ b/source/blender/editors/sculpt_paint/paint_ops.c @@ -173,12 +173,13 @@ static void ed_keymap_paint_brush_switch(wmKeyMap *keymap, const char *path) RNA_int_set(kmi->ptr, "value", 8); kmi= WM_keymap_add_item(keymap, "WM_OT_context_set_int", ZEROKEY, KM_PRESS, 0, 0); RNA_string_set(kmi->ptr, "path", path); - RNA_int_set(kmi->ptr, "value", 10); + RNA_int_set(kmi->ptr, "value", 9); } void ED_keymap_paint(wmKeyConfig *keyconf) { wmKeyMap *keymap; + int i; /* Sculpt mode */ keymap= WM_keymap_find(keyconf, "Sculpt", 0, 0); @@ -193,6 +194,9 @@ void ED_keymap_paint(wmKeyConfig *keyconf) ed_keymap_paint_brush_switch(keymap, "tool_settings.sculpt.active_brush_index"); + for(i=1; i<=5; i++) + RNA_int_set(WM_keymap_add_item(keymap, "OBJECT_OT_subdivision_set", ZEROKEY+i, KM_PRESS, KM_CTRL, 0)->ptr, "level", i); + /* Vertex Paint mode */ keymap= WM_keymap_find(keyconf, "Vertex Paint", 0, 0); keymap->poll= vertex_paint_poll; diff --git a/source/blender/editors/sculpt_paint/paint_stroke.c b/source/blender/editors/sculpt_paint/paint_stroke.c index 8e795c5542e..e26b1945e7f 100644 --- a/source/blender/editors/sculpt_paint/paint_stroke.c +++ b/source/blender/editors/sculpt_paint/paint_stroke.c @@ -73,6 +73,7 @@ typedef struct PaintStroke { passes over the mesh */ int stroke_started; + StrokeGetLocation get_location; StrokeTestStart test_start; StrokeUpdateStep update_step; StrokeDone done; @@ -100,7 +101,11 @@ static void paint_draw_smooth_stroke(bContext *C, int x, int y, void *customdata static void paint_draw_cursor(bContext *C, int x, int y, void *customdata) { - Brush *brush = paint_brush(paint_get_active(CTX_data_scene(C))); + Paint *paint = paint_get_active(CTX_data_scene(C)); + Brush *brush = paint_brush(paint); + + if(!(paint->flags & PAINT_SHOW_BRUSH)) + return; glColor4ubv(paint_get_active(CTX_data_scene(C))->paint_cursor_col); glEnable(GL_LINE_SMOOTH); @@ -118,13 +123,14 @@ static void paint_draw_cursor(bContext *C, int x, int y, void *customdata) static void paint_brush_stroke_add_step(bContext *C, wmOperator *op, wmEvent *event, float mouse[2]) { PointerRNA itemptr; - float cur_depth, pressure = 1; - float center[3]; + float pressure = 1; + float center[3] = {0, 0, 0}; int flip= event->shift?1:0; PaintStroke *stroke = op->customdata; - cur_depth = read_cached_depth(&stroke->vc, mouse[0], mouse[1]); - view3d_unproject(&stroke->mats, center, mouse[0], mouse[1], cur_depth); + /* XXX: can remove the if statement once all modes have this */ + if(stroke->get_location) + stroke->get_location(C, stroke, center, mouse); /* Tablet */ if(event->custom == EVT_DATA_TABLET) { @@ -211,15 +217,19 @@ static int paint_space_stroke(bContext *C, wmOperator *op, wmEvent *event, const /**** Public API ****/ -PaintStroke *paint_stroke_new(bContext *C, StrokeTestStart test_start, - StrokeUpdateStep update_step, StrokeDone done) +PaintStroke *paint_stroke_new(bContext *C, + StrokeGetLocation get_location, + StrokeTestStart test_start, + StrokeUpdateStep update_step, + StrokeDone done) { PaintStroke *stroke = MEM_callocN(sizeof(PaintStroke), "PaintStroke"); stroke->brush = paint_brush(paint_get_active(CTX_data_scene(C))); view3d_set_viewcontext(C, &stroke->vc); - view3d_get_transformation(&stroke->vc, stroke->vc.obact, &stroke->mats); + view3d_get_transformation(stroke->vc.ar, stroke->vc.rv3d, stroke->vc.obact, &stroke->mats); + stroke->get_location = get_location; stroke->test_start = test_start; stroke->update_step = update_step; stroke->done = done; @@ -229,12 +239,9 @@ PaintStroke *paint_stroke_new(bContext *C, StrokeTestStart test_start, int paint_stroke_modal(bContext *C, wmOperator *op, wmEvent *event) { - ARegion *ar = CTX_wm_region(C); PaintStroke *stroke = op->customdata; float mouse[2]; - - if(event->type == TIMER && (event->customdata != stroke->timer)) - return OPERATOR_RUNNING_MODAL; + int first= 0; if(!stroke->stroke_started) { stroke->last_mouse_position[0] = event->x; @@ -249,26 +256,13 @@ int paint_stroke_modal(bContext *C, wmOperator *op, wmEvent *event) stroke->timer = WM_event_add_timer(CTX_wm_manager(C), CTX_wm_window(C), TIMER, stroke->brush->rate); } - ED_region_tag_redraw(ar); + first= 1; + //ED_region_tag_redraw(ar); } - if(stroke->stroke_started) { - if(paint_smooth_stroke(stroke, mouse, event)) { - if(paint_space_stroke_enabled(stroke->brush)) { - if(!paint_space_stroke(C, op, event, mouse)) - ED_region_tag_redraw(ar); - } - else - paint_brush_stroke_add_step(C, op, event, mouse); - } - else - ED_region_tag_redraw(ar); - } - - /* TODO: fix hardcoded event here */ + /* TODO: fix hardcoded events here */ if(event->type == LEFTMOUSE && event->val == KM_RELEASE) { - /* Exit stroke, free data */ - + /* exit stroke, free data */ if(stroke->smooth_stroke_cursor) WM_paint_cursor_end(CTX_wm_manager(C), stroke->smooth_stroke_cursor); @@ -279,8 +273,22 @@ int paint_stroke_modal(bContext *C, wmOperator *op, wmEvent *event) MEM_freeN(stroke); return OPERATOR_FINISHED; } - else - return OPERATOR_RUNNING_MODAL; + else if(first || event->type == MOUSEMOVE || (event->type == TIMER && (event->customdata == stroke->timer))) { + if(stroke->stroke_started) { + if(paint_smooth_stroke(stroke, mouse, event)) { + if(paint_space_stroke_enabled(stroke->brush)) { + if(!paint_space_stroke(C, op, event, mouse)) + ;//ED_region_tag_redraw(ar); + } + else + paint_brush_stroke_add_step(C, op, event, mouse); + } + else + ;//ED_region_tag_redraw(ar); + } + } + + return OPERATOR_RUNNING_MODAL; } int paint_stroke_exec(bContext *C, wmOperator *op) diff --git a/source/blender/editors/sculpt_paint/paint_undo.c b/source/blender/editors/sculpt_paint/paint_undo.c new file mode 100644 index 00000000000..05f2b565e82 --- /dev/null +++ b/source/blender/editors/sculpt_paint/paint_undo.c @@ -0,0 +1,235 @@ +/** + * $Id$ + * + * Undo system for painting and sculpting. + * + * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include +#include + +#include "MEM_guardedalloc.h" + +#include "DNA_userdef_types.h" + +#include "BLI_listbase.h" + +#include "BKE_context.h" +#include "BKE_global.h" + +#include "ED_sculpt.h" + +#include "paint_intern.h" + +#define MAXUNDONAME 64 + +typedef struct UndoElem { + struct UndoElem *next, *prev; + char name[MAXUNDONAME]; + uintptr_t undosize; + + ListBase elems; + + UndoRestoreCb restore; + UndoFreeCb free; +} UndoElem; + +typedef struct UndoStack { + int type; + ListBase elems; + UndoElem *current; +} UndoStack; + +static UndoStack ImageUndoStack = {UNDO_PAINT_IMAGE, {NULL, NULL}, NULL}; +static UndoStack MeshUndoStack = {UNDO_PAINT_MESH, {NULL, NULL}, NULL}; + +/* Generic */ + +static void undo_restore(bContext *C, UndoStack *stack, UndoElem *uel) +{ + if(uel && uel->restore) + uel->restore(C, &uel->elems); +} + +static void undo_elem_free(UndoStack *stack, UndoElem *uel) +{ + if(uel && uel->free) { + uel->free(&uel->elems); + BLI_freelistN(&uel->elems); + } +} + +static void undo_stack_push_begin(UndoStack *stack, char *name, UndoRestoreCb restore, UndoFreeCb free) +{ + UndoElem *uel; + int nr; + + /* Undo push is split up in begin and end, the reason is that as painting + * happens more tiles/nodes are added to the list, and at the very end we + * know how much memory the undo used to remove old undo elements */ + + /* remove all undos after (also when stack->current==NULL) */ + while(stack->elems.last != stack->current) { + uel= stack->elems.last; + undo_elem_free(stack, uel); + BLI_freelinkN(&stack->elems, uel); + } + + /* make new */ + stack->current= uel= MEM_callocN(sizeof(UndoElem), "undo file"); + uel->restore= restore; + uel->free= free; + BLI_addtail(&stack->elems, uel); + + /* name can be a dynamic string */ + strncpy(uel->name, name, MAXUNDONAME-1); + + /* limit amount to the maximum amount*/ + nr= 0; + uel= stack->elems.last; + while(uel) { + nr++; + if(nr==U.undosteps) break; + uel= uel->prev; + } + if(uel) { + while(stack->elems.first!=uel) { + UndoElem *first= stack->elems.first; + undo_elem_free(stack, first); + BLI_freelinkN(&stack->elems, first); + } + } +} + +static void undo_stack_push_end(UndoStack *stack) +{ + UndoElem *uel; + uintptr_t totmem, maxmem; + + if(U.undomemory != 0) { + /* limit to maximum memory (afterwards, we can't know in advance) */ + totmem= 0; + maxmem= ((uintptr_t)U.undomemory)*1024*1024; + + uel= stack->elems.last; + while(uel) { + totmem+= uel->undosize; + if(totmem>maxmem) break; + uel= uel->prev; + } + + if(uel) { + while(stack->elems.first!=uel) { + UndoElem *first= stack->elems.first; + undo_elem_free(stack, first); + BLI_freelinkN(&stack->elems, first); + } + } + } +} + +static void undo_stack_step(bContext *C, UndoStack *stack, int step) +{ + UndoElem *undo; + + if(step==1) { + if(stack->current==NULL); + else { + if(G.f & G_DEBUG) printf("undo %s\n", stack->current->name); + undo_restore(C, stack, stack->current); + stack->current= stack->current->prev; + } + } + else if(step==-1) { + if((stack->current!=NULL && stack->current->next==NULL) || stack->elems.first==NULL); + else { + undo= (stack->current && stack->current->next)? stack->current->next: stack->elems.first; + undo_restore(C, stack, undo); + stack->current= undo; + if(G.f & G_DEBUG) printf("redo %s\n", undo->name); + } + } +} + +static void undo_stack_free(UndoStack *stack) +{ + UndoElem *uel; + + for(uel=stack->elems.first; uel; uel=uel->next) + undo_elem_free(stack, uel); + + BLI_freelistN(&stack->elems); + stack->current= NULL; +} + +/* Exported Functions */ + +void undo_paint_push_begin(int type, char *name, UndoRestoreCb restore, UndoFreeCb free) +{ + if(type == UNDO_PAINT_IMAGE) + undo_stack_push_begin(&ImageUndoStack, name, restore, free); + else if(type == UNDO_PAINT_MESH) + undo_stack_push_begin(&MeshUndoStack, name, restore, free); +} + +ListBase *undo_paint_push_get_list(int type) +{ + if(type == UNDO_PAINT_IMAGE) { + if(ImageUndoStack.current) + return &ImageUndoStack.current->elems; + } + else if(type == UNDO_PAINT_MESH) { + if(MeshUndoStack.current) + return &MeshUndoStack.current->elems; + } + + return NULL; +} + +void undo_paint_push_count_alloc(int type, int size) +{ + if(type == UNDO_PAINT_IMAGE) + ImageUndoStack.current->undosize += size; + else if(type == UNDO_PAINT_MESH) + MeshUndoStack.current->undosize += size; +} + +void undo_paint_push_end(int type) +{ + if(type == UNDO_PAINT_IMAGE) + undo_stack_push_end(&ImageUndoStack); + else if(type == UNDO_PAINT_MESH) + undo_stack_push_end(&MeshUndoStack); +} + +void ED_undo_paint_step(bContext *C, int type, int step) +{ + if(type == UNDO_PAINT_IMAGE) + undo_stack_step(C, &ImageUndoStack, step); + else if(type == UNDO_PAINT_MESH) + undo_stack_step(C, &MeshUndoStack, step); +} + +void ED_undo_paint_free(void) +{ + undo_stack_free(&ImageUndoStack); + undo_stack_free(&MeshUndoStack); +} + diff --git a/source/blender/editors/sculpt_paint/paint_utils.c b/source/blender/editors/sculpt_paint/paint_utils.c index 496d15d793f..b968930128a 100644 --- a/source/blender/editors/sculpt_paint/paint_utils.c +++ b/source/blender/editors/sculpt_paint/paint_utils.c @@ -96,7 +96,7 @@ void imapaint_pick_uv(Scene *scene, Object *ob, Mesh *mesh, unsigned int faceind DerivedMesh *dm = mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH); int *index = dm->getFaceDataArray(dm, CD_ORIGINDEX); MTFace *tface = dm->getFaceDataArray(dm, CD_MTFACE), *tf; - int numfaces = dm->getNumFaces(dm), a; + int numfaces = dm->getNumFaces(dm), a, findex; float p[2], w[3], absw, minabsw; MFace mf; MVert mv[4]; @@ -106,7 +106,9 @@ void imapaint_pick_uv(Scene *scene, Object *ob, Mesh *mesh, unsigned int faceind /* test all faces in the derivedmesh with the original index of the picked face */ for(a = 0; a < numfaces; a++) { - if(index[a] == faceindex) { + findex= (index)? index[a]: a; + + if(findex == faceindex) { dm->getFace(dm, a, &mf); dm->getVert(dm, mf.v1, &mv[0]); diff --git a/source/blender/editors/sculpt_paint/paint_vertex.c b/source/blender/editors/sculpt_paint/paint_vertex.c index 2512ecbc248..cddfad19fa7 100644 --- a/source/blender/editors/sculpt_paint/paint_vertex.c +++ b/source/blender/editors/sculpt_paint/paint_vertex.c @@ -1122,7 +1122,7 @@ static int set_wpaint(bContext *C, wmOperator *op) /* toggle */ /* verify if active weight group is also active bone */ par= modifiers_isDeformedByArmature(ob); if(par && (par->mode & OB_MODE_POSE)) { - bArmature *arm= ob->data; + bArmature *arm= par->data; if(arm->act_bone) ED_vgroup_select_by_name(ob, arm->act_bone->name); @@ -1300,15 +1300,18 @@ static char *wpaint_make_validmap(Mesh *me, Object *ob) if (md->type == eModifierType_Armature) { amd = (ArmatureModifierData*) md; - pose = amd->object->pose; - - for (chan=pose->chanbase.first; chan; chan=chan->next) { - if (chan->bone->flag & BONE_NO_DEFORM) - continue; - if (BLI_ghash_haskey(gh, chan->name)) { - BLI_ghash_remove(gh, chan->name, NULL, NULL); - BLI_ghash_insert(gh, chan->name, SET_INT_IN_POINTER(1)); + if(amd->object && amd->object->pose) { + pose = amd->object->pose; + + for (chan=pose->chanbase.first; chan; chan=chan->next) { + if (chan->bone->flag & BONE_NO_DEFORM) + continue; + + if (BLI_ghash_haskey(gh, chan->name)) { + BLI_ghash_remove(gh, chan->name, NULL, NULL); + BLI_ghash_insert(gh, chan->name, SET_INT_IN_POINTER(1)); + } } } } @@ -1435,22 +1438,35 @@ static void wpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, P VPaint *wp= ts->wpaint; Brush *brush = paint_brush(&wp->paint); struct WPaintData *wpd= paint_stroke_mode_data(stroke); - ViewContext *vc= &wpd->vc; - Object *ob= vc->obact; - Mesh *me= ob->data; + ViewContext *vc; + Object *ob; + Mesh *me; float mat[4][4]; float paintweight= ts->vgroup_weight; - int *indexar= wpd->indexar; + int *indexar; int totindex, index, totw, flip; float alpha; float mval[2], pressure; - + + /* cannot paint if there is no stroke data */ + if (wpd == NULL) { + // XXX: force a redraw here, since even though we can't paint, + // at least view won't freeze until stroke ends + ED_region_tag_redraw(CTX_wm_region(C)); + return; + } + + vc= &wpd->vc; + ob= vc->obact; + me= ob->data; + indexar= wpd->indexar; + view3d_operator_needs_opengl(C); - + /* load projection matrix */ wmMultMatrix(ob->obmat); wmGetSingleMatrix(mat); - wmLoadMatrix(wpd->vc.rv3d->viewmat); + wmLoadMatrix(vc->rv3d->viewmat); flip = RNA_boolean_get(itemptr, "flip"); pressure = RNA_float_get(itemptr, "pressure"); @@ -1595,13 +1611,17 @@ static void wpaint_stroke_done(bContext *C, struct PaintStroke *stroke) Object *ob= CTX_data_active_object(C); struct WPaintData *wpd= paint_stroke_mode_data(stroke); - if(wpd->vertexcosnos) - MEM_freeN(wpd->vertexcosnos); - MEM_freeN(wpd->indexar); + if(wpd) { + if(wpd->vertexcosnos) + MEM_freeN(wpd->vertexcosnos); + MEM_freeN(wpd->indexar); + + if (wpd->vgroup_validmap) + MEM_freeN(wpd->vgroup_validmap); + + MEM_freeN(wpd); + } - if (wpd->vgroup_validmap) - MEM_freeN(wpd->vgroup_validmap); - /* frees prev buffer */ copy_wpaint_prev(ts->wpaint, NULL, 0); @@ -1620,16 +1640,14 @@ static void wpaint_stroke_done(bContext *C, struct PaintStroke *stroke) } } - DAG_id_flush_update(ob->data, OB_RECALC_DATA); - - MEM_freeN(wpd); + DAG_id_flush_update(ob->data, OB_RECALC_DATA); } static int wpaint_invoke(bContext *C, wmOperator *op, wmEvent *event) { - op->customdata = paint_stroke_new(C, wpaint_stroke_test_start, + op->customdata = paint_stroke_new(C, NULL, wpaint_stroke_test_start, wpaint_stroke_update_step, wpaint_stroke_done); @@ -1931,7 +1949,7 @@ static void vpaint_stroke_done(bContext *C, struct PaintStroke *stroke) static int vpaint_invoke(bContext *C, wmOperator *op, wmEvent *event) { - op->customdata = paint_stroke_new(C, vpaint_stroke_test_start, + op->customdata = paint_stroke_new(C, NULL, vpaint_stroke_test_start, vpaint_stroke_update_step, vpaint_stroke_done); diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c index f4006e63dc0..09b99f4f43c 100644 --- a/source/blender/editors/sculpt_paint/sculpt.c +++ b/source/blender/editors/sculpt_paint/sculpt.c @@ -35,6 +35,9 @@ #include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_dynstr.h" +#include "BLI_ghash.h" +#include "BLI_pbvh.h" +#include "BLI_threads.h" #include "DNA_armature_types.h" #include "DNA_brush_types.h" @@ -52,6 +55,7 @@ #include "DNA_color_types.h" #include "BKE_brush.h" +#include "BKE_cdderivedmesh.h" #include "BKE_context.h" #include "BKE_customdata.h" #include "BKE_DerivedMesh.h" @@ -106,15 +110,6 @@ * */ -/* ActiveData stores an Index into the mvert array of Mesh, plus Fade, which - stores how far the vertex is from the brush center, scaled to the range [0,1]. */ -typedef struct ActiveData { - struct ActiveData *next, *prev; - unsigned int Index; - float Fade; - float dist; -} ActiveData; - typedef enum StrokeFlags { CLIP_X = 1, CLIP_Y = 2, @@ -133,7 +128,6 @@ typedef struct StrokeCache { int flag; float clip_tolerance[3]; float initial_mouse[2]; - float depth; /* Variants */ float radius; @@ -142,6 +136,7 @@ typedef struct StrokeCache { float flip; float pressure; float mouse[2]; + float bstrength; float tex_mouse[2]; /* The rest is temporary storage that isn't saved as a property */ @@ -150,32 +145,24 @@ typedef struct StrokeCache { bglMats *mats; - short (*orig_norms)[3]; /* Copy of the mesh vertices' normals */ + /* Clean this up! */ + ViewContext *vc; + Brush *brush; + float (*face_norms)[3]; /* Copy of the mesh faces' normals */ float rotation; /* Texture rotation (radians) for anchored and rake modes */ int pixel_radius, previous_pixel_radius; - ListBase grab_active_verts[8]; /* The same list of verts is used throught grab stroke */ + PBVHNode **grab_active_nodes[8]; /* The same list of nodes is used throught grab stroke */ + int grab_active_totnode[8]; + float grab_active_location[8][3]; float grab_delta[3], grab_delta_symmetry[3]; - float old_grab_location[3]; + float old_grab_location[3], orig_grab_location[3]; int symmetry; /* Symmetry index between 0 and 7 */ float view_normal[3], view_normal_symmetry[3]; int last_rake[2]; /* Last location of updating rake rotation */ + int original; } StrokeCache; -typedef struct RectNode { - struct RectNode *next, *prev; - rcti r; -} RectNode; - -/* Used to store to 2D screen coordinates of each vertex in the mesh. */ -typedef struct ProjVert { - short co[2]; - - /* Used to mark whether a vertex is inside a rough bounding box - containing the brush. */ - char inside; -} ProjVert; - /* ===== OPENGL ===== * * Simple functions to get data from the GL @@ -192,7 +179,7 @@ static void projectf(bglMats *mats, const float v[3], float p[2]) p[1]= uy; } -static void project(bglMats *mats, const float v[3], short p[2]) +/*XXX: static void project(bglMats *mats, const float v[3], short p[2]) { float f[2]; projectf(mats, v, f); @@ -200,6 +187,337 @@ static void project(bglMats *mats, const float v[3], short p[2]) p[0]= f[0]; p[1]= f[1]; } +*/ + +/*** BVH Tree ***/ + +/* Get a screen-space rectangle of the modified area */ +int sculpt_get_redraw_rect(ARegion *ar, RegionView3D *rv3d, + Object *ob, rcti *rect) +{ + float bb_min[3], bb_max[3], pmat[4][4]; + int i, j, k; + + view3d_get_object_project_mat(rv3d, ob, pmat); + + BLI_pbvh_redraw_BB(ob->sculpt->tree, bb_min, bb_max); + + rect->xmin = rect->ymin = INT_MAX; + rect->xmax = rect->ymax = INT_MIN; + + if(bb_min[0] > bb_max[0] || bb_min[1] > bb_max[1] || bb_min[2] > bb_max[2]) + return 0; + + for(i = 0; i < 2; ++i) { + for(j = 0; j < 2; ++j) { + for(k = 0; k < 2; ++k) { + float vec[3], proj[2]; + vec[0] = i ? bb_min[0] : bb_max[0]; + vec[1] = j ? bb_min[1] : bb_max[1]; + vec[2] = k ? bb_min[2] : bb_max[2]; + view3d_project_float(ar, vec, proj, pmat); + rect->xmin = MIN2(rect->xmin, proj[0]); + rect->xmax = MAX2(rect->xmax, proj[0]); + rect->ymin = MIN2(rect->ymin, proj[1]); + rect->ymax = MAX2(rect->ymax, proj[1]); + } + } + } + + return rect->xmin < rect->xmax && rect->ymin < rect->ymax; +} + +void sculpt_get_redraw_planes(float planes[4][4], ARegion *ar, + RegionView3D *rv3d, Object *ob) +{ + BoundBox *bb = MEM_callocN(sizeof(BoundBox), "sculpt boundbox"); + bglMats mats; + int i; + rcti rect; + + view3d_get_transformation(ar, rv3d, ob, &mats); + sculpt_get_redraw_rect(ar, rv3d,ob, &rect); + +#if 1 + /* use some extra space just in case */ + rect.xmin -= 2; + rect.xmax += 2; + rect.ymin -= 2; + rect.ymax += 2; +#else + /* it was doing this before, allows to redraw a smaller + part of the screen but also gives artifaces .. */ + rect.xmin += 2; + rect.xmax -= 2; + rect.ymin += 2; + rect.ymax -= 2; +#endif + + view3d_calculate_clipping(bb, planes, &mats, &rect); + + for(i = 0; i < 16; ++i) + ((float*)planes)[i] = -((float*)planes)[i]; + + MEM_freeN(bb); + + /* clear redraw flag from nodes */ + BLI_pbvh_update(ob->sculpt->tree, PBVH_UpdateRedraw, NULL); +} + +/************************** Undo *************************/ + +typedef struct SculptUndoNode { + struct SculptUndoNode *next, *prev; + + char idname[MAX_ID_NAME]; /* name instead of pointer*/ + void *node; /* only during push, not valid afterwards! */ + + float (*co)[3]; + short (*no)[3]; + int totvert; + + /* non-multires */ + int maxvert; /* to verify if totvert it still the same */ + int *index; /* to restore into right location */ + + /* multires */ + int maxgrid; /* same for grid */ + int gridsize; /* same for grid */ + int totgrid; /* to restore into right location */ + int *grids; /* to restore into right location */ +} SculptUndoNode; + +static void update_cb(PBVHNode *node, void *data) +{ + BLI_pbvh_node_mark_update(node); +} + +static void sculpt_undo_restore(bContext *C, ListBase *lb) +{ + Scene *scene = CTX_data_scene(C); + Object *ob = CTX_data_active_object(C); + DerivedMesh *dm = mesh_get_derived_final(scene, ob, 0); + SculptSession *ss = ob->sculpt; + SculptUndoNode *unode; + MVert *mvert; + MultiresModifierData *mmd; + int *index; + int i, j, update= 0; + + sculpt_update_mesh_elements(scene, ob, 0); + + for(unode=lb->first; unode; unode=unode->next) { + if(!(strcmp(unode->idname, ob->id.name)==0)) + continue; + + if(unode->maxvert) { + /* regular mesh restore */ + if(ss->totvert != unode->maxvert) + continue; + + index= unode->index; + mvert= ss->mvert; + + for(i=0; itotvert; i++) { + swap_v3_v3(mvert[index[i]].co, unode->co[i]); + mvert[index[i]].flag |= ME_VERT_PBVH_UPDATE; + } + } + else if(unode->maxgrid) { + /* multires restore */ + DMGridData **grids, *grid; + float (*co)[3]; + int gridsize; + + if(dm->getNumGrids(dm) != unode->maxgrid) + continue; + if(dm->getGridSize(dm) != unode->gridsize) + continue; + + grids= dm->getGridData(dm); + gridsize= dm->getGridSize(dm); + + co = unode->co; + for(j=0; jtotgrid; j++) { + grid= grids[unode->grids[j]]; + + for(i=0; ikb) sculpt_mesh_to_key(ss->ob, ss->kb); + if(ss->refkb) sculpt_key_to_mesh(ss->refkb, ob); + + /* we update all nodes still, should be more clever, but also + needs to work correct when exiting/entering sculpt mode and + the nodes get recreated, though in that case it could do all */ + BLI_pbvh_search_callback(ss->tree, NULL, NULL, update_cb, NULL); + BLI_pbvh_update(ss->tree, PBVH_UpdateBB|PBVH_UpdateOriginalBB|PBVH_UpdateRedraw, NULL); + + if((mmd=sculpt_multires_active(ob))) + multires_mark_as_modified(ob); + } +} + +static void sculpt_undo_free(ListBase *lb) +{ + SculptUndoNode *unode; + + for(unode=lb->first; unode; unode=unode->next) { + if(unode->co) + MEM_freeN(unode->co); + if(unode->no) + MEM_freeN(unode->no); + if(unode->index) + MEM_freeN(unode->index); + if(unode->grids) + MEM_freeN(unode->grids); + } +} + +static SculptUndoNode *sculpt_undo_get_node(SculptSession *ss, PBVHNode *node) +{ + ListBase *lb= undo_paint_push_get_list(UNDO_PAINT_MESH); + SculptUndoNode *unode; + + if(!lb) + return NULL; + + for(unode=lb->first; unode; unode=unode->next) + if(unode->node == node) + return unode; + + return NULL; +} + +static SculptUndoNode *sculpt_undo_push_node(SculptSession *ss, PBVHNode *node) +{ + ListBase *lb= undo_paint_push_get_list(UNDO_PAINT_MESH); + Object *ob= ss->ob; + SculptUndoNode *unode; + int totvert, allvert, totgrid, maxgrid, gridsize, *grids; + + /* list is manipulated by multiple threads, so we lock */ + BLI_lock_thread(LOCK_CUSTOM1); + + if((unode= sculpt_undo_get_node(ss, node))) { + BLI_unlock_thread(LOCK_CUSTOM1); + return unode; + } + + unode= MEM_callocN(sizeof(SculptUndoNode), "SculptUndoNode"); + strcpy(unode->idname, ob->id.name); + unode->node= node; + + BLI_pbvh_node_num_verts(ss->tree, node, &totvert, &allvert); + BLI_pbvh_node_get_grids(ss->tree, node, &grids, &totgrid, + &maxgrid, &gridsize, NULL, NULL); + + unode->totvert= totvert; + /* we will use this while sculpting, is mapalloc slow to access then? */ + unode->co= MEM_mapallocN(sizeof(float)*3*allvert, "SculptUndoNode.co"); + unode->no= MEM_mapallocN(sizeof(short)*3*allvert, "SculptUndoNode.no"); + undo_paint_push_count_alloc(UNDO_PAINT_MESH, (sizeof(float)*3 + sizeof(short)*3 + sizeof(int))*allvert); + BLI_addtail(lb, unode); + + if(maxgrid) { + /* multires */ + unode->maxgrid= maxgrid; + unode->totgrid= totgrid; + unode->gridsize= gridsize; + unode->grids= MEM_mapallocN(sizeof(int)*totgrid, "SculptUndoNode.grids"); + } + else { + /* regular mesh */ + unode->maxvert= ss->totvert; + unode->index= MEM_mapallocN(sizeof(int)*allvert, "SculptUndoNode.index"); + } + + BLI_unlock_thread(LOCK_CUSTOM1); + + /* copy threaded, hopefully this is the performance critical part */ + { + PBVHVertexIter vd; + + BLI_pbvh_vertex_iter_begin(ss->tree, node, vd, PBVH_ITER_ALL) { + copy_v3_v3(unode->co[vd.i], vd.co); + if(vd.no) VECCOPY(unode->no[vd.i], vd.no) + else normal_float_to_short_v3(unode->no[vd.i], vd.fno); + if(vd.vert_indices) unode->index[vd.i]= vd.vert_indices[vd.i]; + } + BLI_pbvh_vertex_iter_end; + } + + if(unode->grids) + memcpy(unode->grids, grids, sizeof(int)*totgrid); + + return unode; +} + +static void sculpt_undo_push_begin(SculptSession *ss, char *name) +{ + undo_paint_push_begin(UNDO_PAINT_MESH, name, + sculpt_undo_restore, sculpt_undo_free); +} + +static void sculpt_undo_push_end(SculptSession *ss) +{ + ListBase *lb= undo_paint_push_get_list(UNDO_PAINT_MESH); + SculptUndoNode *unode; + + /* we don't need normals in the undo stack */ + for(unode=lb->first; unode; unode=unode->next) { + if(unode->no) { + MEM_freeN(unode->no); + unode->no= NULL; + } + } + + undo_paint_push_end(UNDO_PAINT_MESH); +} + +void ED_sculpt_force_update(bContext *C) +{ + Object *ob= CTX_data_active_object(C); + + if(ob && (ob->mode & OB_MODE_SCULPT)) + multires_force_update(ob); +} + +/************************ Brush Testing *******************/ + +typedef struct SculptBrushTest { + float radius_squared; + float location[3]; + + float dist; +} SculptBrushTest; + +static void sculpt_brush_test_init(SculptSession *ss, SculptBrushTest *test) +{ + test->radius_squared= ss->cache->radius*ss->cache->radius; + copy_v3_v3(test->location, ss->cache->location); +} + +static int sculpt_brush_test(SculptBrushTest *test, float co[3]) +{ + float distsq, delta[3]; + + sub_v3_v3v3(delta, co, test->location); + distsq = INPR(delta, delta); + + if(distsq < test->radius_squared) { + test->dist = sqrt(distsq); + return 1; + } + + return 0; +} /* ===== Sculpting ===== * @@ -239,433 +557,6 @@ static float brush_strength(Sculpt *sd, StrokeCache *cache) } } -/* Handles clipping against a mirror modifier and SCULPT_LOCK axis flags */ -static void sculpt_clip(Sculpt *sd, SculptSession *ss, float *co, const float val[3]) -{ - int i; - - for(i=0; i<3; ++i) { - if(sd->flags & (SCULPT_LOCK_X << i)) - continue; - - if((ss->cache->flag & (CLIP_X << i)) && (fabs(co[i]) <= ss->cache->clip_tolerance[i])) - co[i]= 0.0f; - else - co[i]= val[i]; - } -} - -static void add_norm_if(float view_vec[3], float out[3], float out_flip[3], const short no[3]) -{ - float fno[3] = {no[0], no[1], no[2]}; - - normalize_v3(fno); - - if((dot_v3v3(view_vec, fno)) > 0) { - add_v3_v3v3(out, out, fno); - } else { - add_v3_v3v3(out_flip, out_flip, fno); /* out_flip is used when out is {0,0,0} */ - } -} - -/* Currently only for the draw brush; finds average normal for all active - vertices */ -static void calc_area_normal(Sculpt *sd, SculptSession *ss, float out[3], const ListBase* active_verts) -{ - Brush *brush = paint_brush(&sd->paint); - StrokeCache *cache = ss->cache; - ActiveData *node = active_verts->first; - const int view = 0; /* XXX: should probably be a flag, not number: brush_type==SCULPT_TOOL_DRAW ? sculptmode_brush()->view : 0; */ - float out_flip[3]; - float *out_dir = cache->view_normal_symmetry; - - out[0]=out[1]=out[2] = out_flip[0]=out_flip[1]=out_flip[2] = 0; - - if(brush->flag & BRUSH_ANCHORED) { - for(; node; node = node->next) - add_norm_if(out_dir, out, out_flip, cache->orig_norms[node->Index]); - } - else { - for(; node; node = node->next) - add_norm_if(out_dir, out, out_flip, ss->mvert[node->Index].no); - } - - if (out[0]==0.0 && out[1]==0.0 && out[2]==0.0) { - VECCOPY(out, out_flip); - } - - normalize_v3(out); - - if(out_dir) { - out[0] = out_dir[0] * view + out[0] * (10-view); - out[1] = out_dir[1] * view + out[1] * (10-view); - out[2] = out_dir[2] * view + out[2] * (10-view); - } - - normalize_v3(out); -} - -static void do_draw_brush(Sculpt *sd, SculptSession *ss, const ListBase* active_verts) -{ - float area_normal[3]; - ActiveData *node= active_verts->first; - float* buffer; - - calc_area_normal(sd, ss, area_normal, active_verts); - - buffer = ss->drawobject!=0?(float *)GPU_buffer_lock( ss->drawobject->vertices ):0; - - while(node){ - float *co= ss->mvert[node->Index].co; - - const float val[3]= {co[0]+area_normal[0]*ss->cache->radius*node->Fade*ss->cache->scale[0], - co[1]+area_normal[1]*ss->cache->radius*node->Fade*ss->cache->scale[1], - co[2]+area_normal[2]*ss->cache->radius*node->Fade*ss->cache->scale[2]}; - - if( buffer != 0 ) { - IndexLink *cur = &ss->drawobject->indices[node->Index]; - while( cur != 0 && cur->element != -1 ) { - sculpt_clip(sd, ss, &buffer[cur->element*3], val); - cur = cur->next; - } - } - - sculpt_clip(sd, ss, co, val); - - node= node->next; - } - if( buffer != 0 ) - GPU_buffer_unlock( ss->drawobject->vertices ); -} - -/* For the smooth brush, uses the neighboring vertices around vert to calculate - a smoothed location for vert. Skips corner vertices (used by only one - polygon.) */ -static void neighbor_average(SculptSession *ss, float avg[3], const int vert) -{ - int i, skip= -1, total=0; - IndexNode *node= ss->fmap[vert].first; - char ncount= BLI_countlist(&ss->fmap[vert]); - MFace *f; - - avg[0] = avg[1] = avg[2] = 0; - - /* Don't modify corner vertices */ - if(ncount==1) { - copy_v3_v3(avg, ss->mvert[vert].co); - return; - } - - while(node){ - f= &ss->mface[node->index]; - - if(f->v4) { - skip= (f->v1==vert?2: - f->v2==vert?3: - f->v3==vert?0: - f->v4==vert?1:-1); - } - - for(i=0; i<(f->v4?4:3); ++i) { - if(i != skip && (ncount!=2 || BLI_countlist(&ss->fmap[(&f->v1)[i]]) <= 2)) { - add_v3_v3v3(avg, avg, ss->mvert[(&f->v1)[i]].co); - ++total; - } - } - - node= node->next; - } - - if(total>0) - mul_v3_fl(avg, 1.0f / total); - else - copy_v3_v3(avg, ss->mvert[vert].co); -} - -static void do_smooth_brush(Sculpt *s, SculptSession *ss, const ListBase* active_verts) -{ - ActiveData *node= active_verts->first; - float *buffer = ss->drawobject!=0?(float *)GPU_buffer_lock( ss->drawobject->vertices ):0; - int i; - - for(i = 0; i < 2; ++i) { - while(node){ - float *co= ss->mvert[node->Index].co; - float avg[3], val[3]; - - neighbor_average(ss, avg, node->Index); - val[0] = co[0]+(avg[0]-co[0])*node->Fade; - val[1] = co[1]+(avg[1]-co[1])*node->Fade; - val[2] = co[2]+(avg[2]-co[2])*node->Fade; - - sculpt_clip(s, ss, co, val); - if( buffer != 0 ) { - IndexLink *cur = &ss->drawobject->indices[node->Index]; - while( cur != 0 && cur->element != -1 ) { - sculpt_clip(s, ss, &buffer[cur->element*3], val); - cur = cur->next; - } - } - node= node->next; - } - } - if( buffer != 0 ) - GPU_buffer_unlock( ss->drawobject->vertices ); -} - -static void do_pinch_brush(Sculpt *s, SculptSession *ss, const ListBase* active_verts) -{ - ActiveData *node= active_verts->first; - float *buffer = ss->drawobject!=0?(float *)GPU_buffer_lock( ss->drawobject->vertices ):0; - - while(node) { - float *co= ss->mvert[node->Index].co; - const float val[3]= {co[0]+(ss->cache->location[0]-co[0])*node->Fade, - co[1]+(ss->cache->location[1]-co[1])*node->Fade, - co[2]+(ss->cache->location[2]-co[2])*node->Fade}; - - if( buffer != 0 ) { - IndexLink *cur = &ss->drawobject->indices[node->Index]; - while( cur != 0 && cur->element != -1 ) { - sculpt_clip(s, ss, &buffer[cur->element*3], val); - cur = cur->next; - } - } - - sculpt_clip(s, ss, co, val); - node= node->next; - } - if( buffer != 0 ) - GPU_buffer_unlock( ss->drawobject->vertices ); -} - -static void do_grab_brush(Sculpt *sd, SculptSession *ss) -{ - ActiveData *node= ss->cache->grab_active_verts[ss->cache->symmetry].first; - float add[3]; - float grab_delta[3]; - float *buffer = ss->drawobject!=0?(float *)GPU_buffer_lock( ss->drawobject->vertices ):0; - - copy_v3_v3(grab_delta, ss->cache->grab_delta_symmetry); - - while(node) { - float *co= ss->mvert[node->Index].co; - - copy_v3_v3(add, grab_delta); - mul_v3_fl(add, node->Fade); - add_v3_v3v3(add, add, co); - - if( buffer != 0 ) { - IndexLink *cur = &ss->drawobject->indices[node->Index]; - while( cur != 0 && cur->element != -1 ) { - sculpt_clip(sd, ss, &buffer[cur->element*3], add); - cur = cur->next; - } - } - - sculpt_clip(sd, ss, co, add); - - node= node->next; - } - if( buffer != 0 ) - GPU_buffer_unlock( ss->drawobject->vertices ); - -} - -static void do_layer_brush(Sculpt *sd, SculptSession *ss, const ListBase *active_verts) -{ - float area_normal[3]; - ActiveData *node= active_verts->first; - float *buffer; - float lim= ss->cache->radius / 4; - - if(ss->cache->flip) - lim = -lim; - - calc_area_normal(sd, ss, area_normal, active_verts); - - buffer = ss->drawobject!=0?(float *)GPU_buffer_lock( ss->drawobject->vertices ):0; - while(node){ - float *disp= &ss->layer_disps[node->Index]; - float *co= ss->mvert[node->Index].co; - float val[3]; - - *disp+= node->Fade; - - /* Don't let the displacement go past the limit */ - if((lim < 0 && *disp < lim) || (lim > 0 && *disp > lim)) - *disp = lim; - - val[0] = ss->mesh_co_orig[node->Index][0]+area_normal[0] * *disp*ss->cache->scale[0]; - val[1] = ss->mesh_co_orig[node->Index][1]+area_normal[1] * *disp*ss->cache->scale[1]; - val[2] = ss->mesh_co_orig[node->Index][2]+area_normal[2] * *disp*ss->cache->scale[2]; - - if( buffer != 0 ) { - IndexLink *cur = &ss->drawobject->indices[node->Index]; - while( cur != 0 && cur->element != -1 ) { - sculpt_clip(sd, ss, &buffer[cur->element*3], val); - cur = cur->next; - } - } - - sculpt_clip(sd, ss, co, val); - - node= node->next; - } - if( buffer != 0 ) - GPU_buffer_unlock( ss->drawobject->vertices ); -} - -static void do_inflate_brush(Sculpt *s, SculptSession *ss, const ListBase *active_verts) -{ - ActiveData *node= active_verts->first; - float add[3]; - float *buffer = ss->drawobject!=0?(float *)GPU_buffer_lock( ss->drawobject->vertices ):0; - - while(node) { - float *co= ss->mvert[node->Index].co; - short *no= ss->mvert[node->Index].no; - - add[0]= no[0]/ 32767.0f; - add[1]= no[1]/ 32767.0f; - add[2]= no[2]/ 32767.0f; - mul_v3_fl(add, node->Fade * ss->cache->radius); - add[0]*= ss->cache->scale[0]; - add[1]*= ss->cache->scale[1]; - add[2]*= ss->cache->scale[2]; - add_v3_v3v3(add, add, co); - - if( buffer != 0 ) { - IndexLink *cur = &ss->drawobject->indices[node->Index]; - while( cur != 0 && cur->element != -1 ) { - sculpt_clip(s, ss, &buffer[cur->element*3], add); - cur = cur->next; - } - } - - sculpt_clip(s, ss, co, add); - - node= node->next; - } - if( buffer != 0 ) - GPU_buffer_unlock( ss->drawobject->vertices ); -} - -static void calc_flatten_center(SculptSession *ss, ActiveData *node, float co[3]) -{ - ActiveData *outer[FLATTEN_SAMPLE_SIZE]; - int i; - - for(i = 0; i < FLATTEN_SAMPLE_SIZE; ++i) - outer[i] = node; - - for(; node; node = node->next) { - for(i = 0; i < FLATTEN_SAMPLE_SIZE; ++i) { - if(node->dist > outer[i]->dist) { - outer[i] = node; - break; - } - } - } - - co[0] = co[1] = co[2] = 0.0f; - for(i = 0; i < FLATTEN_SAMPLE_SIZE; ++i) - add_v3_v3v3(co, co, ss->mvert[outer[i]->Index].co); - mul_v3_fl(co, 1.0f / FLATTEN_SAMPLE_SIZE); -} - -/* Projects a point onto a plane along the plane's normal */ -static void point_plane_project(float intr[3], float co[3], float plane_normal[3], float plane_center[3]) -{ - float p1[3], sub1[3], sub2[3]; - - /* Find the intersection between squash-plane and vertex (along the area normal) */ - sub_v3_v3v3(p1, co, plane_normal); - sub_v3_v3v3(sub1, plane_center, p1); - sub_v3_v3v3(sub2, co, p1); - sub_v3_v3v3(intr, co, p1); - mul_v3_fl(intr, dot_v3v3(plane_normal, sub1) / dot_v3v3(plane_normal, sub2)); - add_v3_v3v3(intr, intr, p1); -} - -static int plane_point_side(float co[3], float plane_normal[3], float plane_center[3], int flip) -{ - float delta[3]; - float d; - - sub_v3_v3v3(delta, co, plane_center); - d = dot_v3v3(plane_normal, delta); - - if(flip) - d = -d; - - return d <= 0.0f; -} - -static void do_flatten_clay_brush(Sculpt *sd, SculptSession *ss, const ListBase *active_verts, int clay) -{ - ActiveData *node= active_verts->first; - /* area_normal and cntr define the plane towards which vertices are squashed */ - float area_normal[3]; - float cntr[3], cntr2[3], bstr = 0; - int flip = 0; - float *buffer; - calc_area_normal(sd, ss, area_normal, active_verts); - calc_flatten_center(ss, node, cntr); - - if(clay) { - bstr= brush_strength(sd, ss->cache); - /* Limit clay application to here */ - cntr2[0]=cntr[0]+area_normal[0]*bstr*ss->cache->scale[0]; - cntr2[1]=cntr[1]+area_normal[1]*bstr*ss->cache->scale[1]; - cntr2[2]=cntr[2]+area_normal[2]*bstr*ss->cache->scale[2]; - flip = bstr < 0; - } - - buffer = ss->drawobject!=0?(float *)GPU_buffer_lock( ss->drawobject->vertices ):0; - - while(node){ - float *co= ss->mvert[node->Index].co; - float intr[3], val[3]; - - if(!clay || plane_point_side(co, area_normal, cntr2, flip)) { - /* Find the intersection between squash-plane and vertex (along the area normal) */ - point_plane_project(intr, co, area_normal, cntr); - - sub_v3_v3v3(val, intr, co); - - if(clay) { - if(bstr > FLT_EPSILON) - mul_v3_fl(val, node->Fade / bstr); - else - mul_v3_fl(val, node->Fade); - /* Clay displacement */ - val[0]+=area_normal[0] * ss->cache->scale[0]*node->Fade; - val[1]+=area_normal[1] * ss->cache->scale[1]*node->Fade; - val[2]+=area_normal[2] * ss->cache->scale[2]*node->Fade; - } - else - mul_v3_fl(val, fabs(node->Fade)); - - add_v3_v3v3(val, val, co); - - if( buffer != 0 ) { - IndexLink *cur = &ss->drawobject->indices[node->Index]; - while( cur != 0 && cur->element != -1 ) { - sculpt_clip(sd, ss, &buffer[cur->element*3], val); - cur = cur->next; - } - } - sculpt_clip(sd, ss, co, val); - - } - - node= node->next; - } - if( buffer != 0 ) - GPU_buffer_unlock( ss->drawobject->vertices ); -} - /* Uses symm to selectively flip any axis of a coordinate. */ static void flip_coord(float out[3], float in[3], const char symm) { @@ -721,9 +612,8 @@ static float get_texcache_pixel_bilinear(const SculptSession *ss, float u, float } /* Return a multiplier for brush strength on a particular vertex. */ -static float tex_strength(Sculpt *sd, SculptSession *ss, float *point, const float len) +static float tex_strength(SculptSession *ss, Brush *br, float *point, const float len) { - Brush *br = paint_brush(&sd->paint); MTex *tex = NULL; float avg= 1; @@ -798,119 +688,725 @@ static float tex_strength(Sculpt *sd, SculptSession *ss, float *point, const flo return avg; } -/* Mark area around the brush as damaged. projverts are marked if they are - inside the area and the damaged rectangle in 2D screen coordinates is - added to damaged_rects. */ -static void sculpt_add_damaged_rect(SculptSession *ss) +typedef struct { + Sculpt *sd; + SculptSession *ss; + float radius_squared; + ListBase *active_verts; + float area_normal[3]; +} SculptSearchSphereData; + +/* Test AABB against sphere */ +static int sculpt_search_sphere_cb(PBVHNode *node, void *data_v) { - short p[2]; - RectNode *rn= MEM_mallocN(sizeof(RectNode),"RectNode"); - const float radius = MAX2(ss->cache->pixel_radius, ss->cache->previous_pixel_radius); - unsigned i; + SculptSearchSphereData *data = data_v; + float *center = data->ss->cache->location, nearest[3]; + float t[3], bb_min[3], bb_max[3]; + int i; - /* Find center */ - project(ss->cache->mats, ss->cache->location, p); - rn->r.xmin= p[0] - radius; - rn->r.ymin= p[1] - radius; - rn->r.xmax= p[0] + radius; - rn->r.ymax= p[1] + radius; + BLI_pbvh_node_get_BB(node, bb_min, bb_max); - BLI_addtail(&ss->damaged_rects, rn); + for(i = 0; i < 3; ++i) { + if(bb_min[i] > center[i]) + nearest[i] = bb_min[i]; + else if(bb_max[i] < center[i]) + nearest[i] = bb_max[i]; + else + nearest[i] = center[i]; + } + + sub_v3_v3v3(t, center, nearest); - /* Update insides */ - for(i=0; itotvert; ++i) { - if(!ss->projverts[i].inside) { - if(ss->projverts[i].co[0] > rn->r.xmin && ss->projverts[i].co[1] > rn->r.ymin && - ss->projverts[i].co[0] < rn->r.xmax && ss->projverts[i].co[1] < rn->r.ymax) { - ss->projverts[i].inside= 1; - } - } - // XXX: remember to fix this! - // temporary pass - ss->projverts[i].inside = 1; + return t[0] * t[0] + t[1] * t[1] + t[2] * t[2] < data->radius_squared; +} + +/* Handles clipping against a mirror modifier and SCULPT_LOCK axis flags */ +static void sculpt_clip(Sculpt *sd, SculptSession *ss, float *co, const float val[3]) +{ + int i; + + for(i=0; i<3; ++i) { + if(sd->flags & (SCULPT_LOCK_X << i)) + continue; + + if((ss->cache->flag & (CLIP_X << i)) && (fabs(co[i]) <= ss->cache->clip_tolerance[i])) + co[i]= 0.0f; + else + co[i]= val[i]; + } +} + +static void add_norm_if(float view_vec[3], float out[3], float out_flip[3], float fno[3]) +{ + if((dot_v3v3(view_vec, fno)) > 0) { + add_v3_v3v3(out, out, fno); + } else { + add_v3_v3v3(out_flip, out_flip, fno); /* out_flip is used when out is {0,0,0} */ } } -static void do_brush_action(Sculpt *sd, SculptSession *ss, StrokeCache *cache) +/* For draw/layer/flatten; finds average normal for all active vertices */ +static void calc_area_normal(Sculpt *sd, SculptSession *ss, float area_normal[3], PBVHNode **nodes, int totnode) +{ + PBVH *bvh= ss->tree; + StrokeCache *cache = ss->cache; + const int view = 0; /* XXX: should probably be a flag, not number: brush_type==SCULPT_TOOL_DRAW ? sculptmode_brush()->view : 0; */ + float out[3] = {0.0f, 0.0f, 0.0f}; + float out_flip[3] = {0.0f, 0.0f, 0.0f}; + float out_dir[3]; + int n; + + copy_v3_v3(out_dir, cache->view_normal_symmetry); + + /* threaded loop over nodes */ + #pragma omp parallel for private(n) schedule(static) + for(n=0; ncache->original) { + BLI_pbvh_vertex_iter_begin(bvh, nodes[n], vd, PBVH_ITER_UNIQUE) { + if(sculpt_brush_test(&test, unode->co[vd.i])) { + normal_short_to_float_v3(fno, unode->no[vd.i]); + add_norm_if(out_dir, nout, nout_flip, fno); + } + } + BLI_pbvh_vertex_iter_end; + } + else { + BLI_pbvh_vertex_iter_begin(bvh, nodes[n], vd, PBVH_ITER_UNIQUE) { + if(sculpt_brush_test(&test, vd.co)) { + if(vd.no) { + normal_short_to_float_v3(fno, vd.no); + add_norm_if(out_dir, nout, nout_flip, fno); + } + else + add_norm_if(out_dir, nout, nout_flip, vd.fno); + } + } + BLI_pbvh_vertex_iter_end; + } + + #pragma omp critical + { + /* we sum per node and add together later for threads */ + add_v3_v3v3(out, out, nout); + add_v3_v3v3(out_flip, out_flip, nout_flip); + } + } + + if (out[0]==0.0 && out[1]==0.0 && out[2]==0.0) { + copy_v3_v3(out, out_flip); + } + + normalize_v3(out); + + out[0] = out_dir[0] * view + out[0] * (10-view); + out[1] = out_dir[1] * view + out[1] * (10-view); + out[2] = out_dir[2] * view + out[2] * (10-view); + + normalize_v3(out); + copy_v3_v3(area_normal, out); +} + +static void do_draw_brush(Sculpt *sd, SculptSession *ss, PBVHNode **nodes, int totnode) { Brush *brush = paint_brush(&sd->paint); - float av_dist; - ListBase active_verts={0,0}; - ListBase *grab_active_verts = &ss->cache->grab_active_verts[ss->cache->symmetry]; - ActiveData *adata= 0; - float *vert; - const float bstrength= brush_strength(sd, cache); - Brush *b = brush; - int i; + float offset[3], area_normal[3]; + float bstrength= ss->cache->bstrength; + int n; - sculpt_add_damaged_rect(ss); + /* area normal */ + calc_area_normal(sd, ss, area_normal, nodes, totnode); - /* Build a list of all vertices that are potentially within the brush's - area of influence. Only do this once for the grab brush. */ - if((b->sculpt_tool != SCULPT_TOOL_GRAB) || cache->first_time) { - for(i=0; itotvert; ++i) { - /* Projverts.inside provides a rough bounding box */ - if(ss->multires || ss->projverts[i].inside) { - //vert= ss->vertexcosnos ? &ss->vertexcosnos[i*6] : a->verts[i].co; - vert= ss->mvert[i].co; - av_dist= len_v3v3(ss->cache->location, vert); - if(av_dist < cache->radius) { - adata= (ActiveData*)MEM_mallocN(sizeof(ActiveData), "ActiveData"); + /* offset with as much as possible factored in already */ + offset[0]= area_normal[0]*ss->cache->radius*ss->cache->scale[0]*bstrength; + offset[1]= area_normal[1]*ss->cache->radius*ss->cache->scale[1]*bstrength; + offset[2]= area_normal[2]*ss->cache->radius*ss->cache->scale[2]*bstrength; - adata->Index = i; - /* Fade is used to store the final strength at which the brush - should modify a particular vertex. */ - adata->Fade= tex_strength(sd, ss, vert, av_dist) * bstrength; - adata->dist = av_dist; + /* threaded loop over nodes */ + #pragma omp parallel for private(n) schedule(static) + for(n=0; nsculpt_tool == SCULPT_TOOL_GRAB && cache->first_time) - BLI_addtail(grab_active_verts, adata); - else - BLI_addtail(&active_verts, adata); + BLI_pbvh_vertex_iter_begin(ss->tree, nodes[n], vd, PBVH_ITER_UNIQUE) { + if(sculpt_brush_test(&test, vd.co)) { + /* offset vertex */ + float fade = tex_strength(ss, brush, vd.co, test.dist); + float val[3]= {vd.co[0] + offset[0]*fade, + vd.co[1] + offset[1]*fade, + vd.co[2] + offset[2]*fade}; + + sculpt_clip(sd, ss, vd.co, val); + if(vd.mvert) vd.mvert->flag |= ME_VERT_PBVH_UPDATE; + } + } + BLI_pbvh_vertex_iter_end; + + BLI_pbvh_node_mark_update(nodes[n]); + } +} + +/* For the smooth brush, uses the neighboring vertices around vert to calculate + a smoothed location for vert. Skips corner vertices (used by only one + polygon.) */ +static void neighbor_average(SculptSession *ss, float avg[3], const int vert) +{ + int i, skip= -1, total=0; + IndexNode *node= ss->fmap[vert].first; + char ncount= BLI_countlist(&ss->fmap[vert]); + MFace *f; + + avg[0] = avg[1] = avg[2] = 0; + + /* Don't modify corner vertices */ + if(ncount==1) { + copy_v3_v3(avg, ss->mvert[vert].co); + return; + } + + while(node){ + f= &ss->mface[node->index]; + + if(f->v4) { + skip= (f->v1==vert?2: + f->v2==vert?3: + f->v3==vert?0: + f->v4==vert?1:-1); + } + + for(i=0; i<(f->v4?4:3); ++i) { + if(i != skip && (ncount!=2 || BLI_countlist(&ss->fmap[(&f->v1)[i]]) <= 2)) { + add_v3_v3v3(avg, avg, ss->mvert[(&f->v1)[i]].co); + ++total; + } + } + + node= node->next; + } + + if(total>0) + mul_v3_fl(avg, 1.0f / total); + else + copy_v3_v3(avg, ss->mvert[vert].co); +} + +static void do_mesh_smooth_brush(Sculpt *sd, SculptSession *ss, PBVHNode *node) +{ + Brush *brush = paint_brush(&sd->paint); + float bstrength= ss->cache->bstrength; + PBVHVertexIter vd; + SculptBrushTest test; + + sculpt_brush_test_init(ss, &test); + + BLI_pbvh_vertex_iter_begin(ss->tree, node, vd, PBVH_ITER_UNIQUE) { + if(sculpt_brush_test(&test, vd.co)) { + float fade = tex_strength(ss, brush, vd.co, test.dist)*bstrength; + float avg[3], val[3]; + + neighbor_average(ss, avg, vd.vert_indices[vd.i]); + val[0] = vd.co[0]+(avg[0]-vd.co[0])*fade; + val[1] = vd.co[1]+(avg[1]-vd.co[1])*fade; + val[2] = vd.co[2]+(avg[2]-vd.co[2])*fade; + + sculpt_clip(sd, ss, vd.co, val); + if(vd.mvert) vd.mvert->flag |= ME_VERT_PBVH_UPDATE; + } + } + BLI_pbvh_vertex_iter_end; +} + +static void do_multires_smooth_brush(Sculpt *sd, SculptSession *ss, PBVHNode *node) +{ + Brush *brush = paint_brush(&sd->paint); + SculptBrushTest test; + DMGridData **griddata, *data; + DMGridAdjacency *gridadj, *adj; + float bstrength= ss->cache->bstrength; + float co[3], (*tmpgrid)[3]; + int v1, v2, v3, v4; + int *grid_indices, totgrid, gridsize, i, x, y; + + sculpt_brush_test_init(ss, &test); + + BLI_pbvh_node_get_grids(ss->tree, node, &grid_indices, &totgrid, + NULL, &gridsize, &griddata, &gridadj); + + #pragma omp critical + tmpgrid= MEM_mallocN(sizeof(float)*3*gridsize*gridsize, "tmpgrid"); + + for(i = 0; i < totgrid; ++i) { + data = griddata[grid_indices[i]]; + adj = &gridadj[grid_indices[i]]; + + memset(tmpgrid, 0, sizeof(float)*3*gridsize*gridsize); + + /* average grid values */ + for(y = 0; y < gridsize-1; ++y) { + for(x = 0; x < gridsize-1; ++x) { + v1 = x + y*gridsize; + v2 = (x + 1) + y*gridsize; + v3 = (x + 1) + (y + 1)*gridsize; + v4 = x + (y + 1)*gridsize; + + cent_quad_v3(co, data[v1].co, data[v2].co, data[v3].co, data[v4].co); + mul_v3_fl(co, 0.25f); + + add_v3_v3(tmpgrid[v1], co); + add_v3_v3(tmpgrid[v2], co); + add_v3_v3(tmpgrid[v3], co); + add_v3_v3(tmpgrid[v4], co); + } + } + + /* blend with existing coordinates */ + for(y = 0; y < gridsize; ++y) { + for(x = 0; x < gridsize; ++x) { + if(x == 0 && adj->index[0] == -1) continue; + if(x == gridsize - 1 && adj->index[2] == -1) continue; + if(y == 0 && adj->index[3] == -1) continue; + if(y == gridsize - 1 && adj->index[1] == -1) continue; + + copy_v3_v3(co, data[x + y*gridsize].co); + + if(sculpt_brush_test(&test, co)) { + float fade = tex_strength(ss, brush, co, test.dist)*bstrength; + float avg[3], val[3]; + + copy_v3_v3(avg, tmpgrid[x + y*gridsize]); + if(x == 0 || x == gridsize - 1) + mul_v3_fl(avg, 2.0f); + if(y == 0 || y == gridsize - 1) + mul_v3_fl(avg, 2.0f); + + val[0] = co[0]+(avg[0]-co[0])*fade; + val[1] = co[1]+(avg[1]-co[1])*fade; + val[2] = co[2]+(avg[2]-co[2])*fade; + + sculpt_clip(sd, ss, data[x + y*gridsize].co, val); } } } } - /* Only act if some verts are inside the brush area */ - if(active_verts.first || (b->sculpt_tool == SCULPT_TOOL_GRAB && grab_active_verts->first)) { - /* Apply one type of brush action */ - switch(b->sculpt_tool){ - case SCULPT_TOOL_DRAW: - do_draw_brush(sd, ss, &active_verts); - break; - case SCULPT_TOOL_SMOOTH: - do_smooth_brush(sd, ss, &active_verts); - break; - case SCULPT_TOOL_PINCH: - do_pinch_brush(sd, ss, &active_verts); - break; - case SCULPT_TOOL_INFLATE: - do_inflate_brush(sd, ss, &active_verts); - break; - case SCULPT_TOOL_GRAB: - do_grab_brush(sd, ss); - break; - case SCULPT_TOOL_LAYER: - do_layer_brush(sd, ss, &active_verts); - break; - case SCULPT_TOOL_FLATTEN: - do_flatten_clay_brush(sd, ss, &active_verts, 0); - break; - case SCULPT_TOOL_CLAY: - do_flatten_clay_brush(sd, ss, &active_verts, 1); - } - - /* Copy the modified vertices from mesh to the active key */ - if(ss->kb) mesh_to_key(ss->ob->data, ss->kb); + #pragma omp critical + MEM_freeN(tmpgrid); +} - if(ss->vertexcosnos && !ss->multires) - BLI_freelistN(&active_verts); +static void do_smooth_brush(Sculpt *sd, SculptSession *ss, PBVHNode **nodes, int totnode) +{ + int iteration, n; + + for(iteration = 0; iteration < 2; ++iteration) { + #pragma omp parallel for private(n) schedule(static) + for(n=0; nfmap) + do_mesh_smooth_brush(sd, ss, nodes[n]); + else + do_multires_smooth_brush(sd, ss, nodes[n]); + + BLI_pbvh_node_mark_update(nodes[n]); + } + + if(!ss->fmap) + multires_stitch_grids(ss->ob); + } +} + +static void do_pinch_brush(Sculpt *sd, SculptSession *ss, PBVHNode **nodes, int totnode) +{ + Brush *brush = paint_brush(&sd->paint); + float bstrength= ss->cache->bstrength; + int n; + + #pragma omp parallel for private(n) schedule(static) + for(n=0; ntree, nodes[n], vd, PBVH_ITER_UNIQUE) { + if(sculpt_brush_test(&test, vd.co)) { + float fade = tex_strength(ss, brush, vd.co, test.dist)*bstrength; + float val[3]= {vd.co[0]+(test.location[0]-vd.co[0])*fade, + vd.co[1]+(test.location[1]-vd.co[1])*fade, + vd.co[2]+(test.location[2]-vd.co[2])*fade}; + + sculpt_clip(sd, ss, vd.co, val); + if(vd.mvert) vd.mvert->flag |= ME_VERT_PBVH_UPDATE; + } + } + BLI_pbvh_vertex_iter_end; + + BLI_pbvh_node_mark_update(nodes[n]); + } +} + +static void do_grab_brush(Sculpt *sd, SculptSession *ss, PBVHNode **nodes, int totnode) +{ + Brush *brush = paint_brush(&sd->paint); + float bstrength= ss->cache->bstrength; + float grab_delta[3]; + int n; + + copy_v3_v3(grab_delta, ss->cache->grab_delta_symmetry); + + #pragma omp parallel for private(n) schedule(static) + for(n=0; nco; + sculpt_brush_test_init(ss, &test); + + BLI_pbvh_vertex_iter_begin(ss->tree, nodes[n], vd, PBVH_ITER_UNIQUE) { + if(sculpt_brush_test(&test, origco[vd.i])) { + float fade = tex_strength(ss, brush, origco[vd.i], test.dist)*bstrength; + float add[3]= {vd.co[0]+fade*grab_delta[0], + vd.co[1]+fade*grab_delta[1], + vd.co[2]+fade*grab_delta[2]}; + + sculpt_clip(sd, ss, vd.co, add); + if(vd.mvert) vd.mvert->flag |= ME_VERT_PBVH_UPDATE; + } + } + BLI_pbvh_vertex_iter_end; + + BLI_pbvh_node_mark_update(nodes[n]); + } +} + +static void do_layer_brush(Sculpt *sd, SculptSession *ss, PBVHNode **nodes, int totnode) +{ + Brush *brush = paint_brush(&sd->paint); + float bstrength= ss->cache->bstrength; + float area_normal[3], offset[3]; + float lim= ss->cache->radius / 4; + int n; + + /* XXX not working yet for multires */ + if(ss->multires) + return; + + if(ss->cache->flip) + lim = -lim; + + calc_area_normal(sd, ss, area_normal, nodes, totnode); + + offset[0]= ss->cache->scale[0]*area_normal[0]; + offset[1]= ss->cache->scale[1]*area_normal[1]; + offset[2]= ss->cache->scale[2]*area_normal[2]; + + #pragma omp parallel for private(n) schedule(static) + for(n=0; nco; + sculpt_brush_test_init(ss, &test); + + BLI_pbvh_vertex_iter_begin(ss->tree, nodes[n], vd, PBVH_ITER_UNIQUE) { + if(sculpt_brush_test(&test, vd.co)) { + float fade = tex_strength(ss, brush, vd.co, test.dist)*bstrength; + int index= vd.vert_indices[vd.i]; + float *disp= &ss->layer_disps[index]; + float val[3]; + + *disp+= fade; + + /* Don't let the displacement go past the limit */ + if((lim < 0 && *disp < lim) || (lim > 0 && *disp > lim)) + *disp = lim; + + if(ss->layer_co && (brush->flag & BRUSH_PERSISTENT)) { + /* persistent base */ + val[0] = ss->layer_co[index][0] + (*disp)*offset[0]; + val[1] = ss->layer_co[index][1] + (*disp)*offset[1]; + val[2] = ss->layer_co[index][2] + (*disp)*offset[2]; + } + else { + val[0] = origco[vd.i][0] + (*disp)*offset[0]; + val[1] = origco[vd.i][1] + (*disp)*offset[1]; + val[2] = origco[vd.i][2] + (*disp)*offset[2]; + } + + sculpt_clip(sd, ss, vd.co, val); + if(vd.mvert) vd.mvert->flag |= ME_VERT_PBVH_UPDATE; + } + } + BLI_pbvh_vertex_iter_end; + + BLI_pbvh_node_mark_update(nodes[n]); + } +} + +static void do_inflate_brush(Sculpt *sd, SculptSession *ss, PBVHNode **nodes, int totnode) +{ + Brush *brush = paint_brush(&sd->paint); + float bstrength= ss->cache->bstrength; + int n; + + #pragma omp parallel for private(n) schedule(static) + for(n=0; ntree, nodes[n], vd, PBVH_ITER_UNIQUE) { + if(sculpt_brush_test(&test, vd.co)) { + float fade = tex_strength(ss, brush, vd.co, test.dist)*bstrength; + float add[3]; + + if(vd.fno) copy_v3_v3(add, vd.fno); + else normal_short_to_float_v3(add, vd.no); + + mul_v3_fl(add, fade * ss->cache->radius); + add[0]*= ss->cache->scale[0]; + add[1]*= ss->cache->scale[1]; + add[2]*= ss->cache->scale[2]; + add_v3_v3v3(add, add, vd.co); + + sculpt_clip(sd, ss, vd.co, add); + if(vd.mvert) vd.mvert->flag |= ME_VERT_PBVH_UPDATE; + } + } + BLI_pbvh_vertex_iter_end; + + BLI_pbvh_node_mark_update(nodes[n]); + } +} + +static void calc_flatten_center(Sculpt *sd, SculptSession *ss, PBVHNode **nodes, int totnode, float co[3]) +{ + float outer_dist[FLATTEN_SAMPLE_SIZE]; + float outer_co[FLATTEN_SAMPLE_SIZE][3]; + int i, n; + + for(i = 0; i < FLATTEN_SAMPLE_SIZE; ++i) { + zero_v3(outer_co[i]); + outer_dist[i]= -1.0f; + } + + #pragma omp parallel for private(n) schedule(static) + for(n=0; ntree, nodes[n], vd, PBVH_ITER_UNIQUE) { + if(sculpt_brush_test(&test, vd.co)) { + for(j = 0; j < FLATTEN_SAMPLE_SIZE; ++j) { + if(test.dist > outer_dist[j]) { + copy_v3_v3(outer_co[j], vd.co); + outer_dist[j] = test.dist; + break; + } + } + } + } + BLI_pbvh_vertex_iter_end; + + BLI_pbvh_node_mark_update(nodes[n]); + } + + co[0] = co[1] = co[2] = 0.0f; + for(i = 0; i < FLATTEN_SAMPLE_SIZE; ++i) + if(outer_dist[i] >= 0.0f) + add_v3_v3v3(co, co, outer_co[i]); + mul_v3_fl(co, 1.0f / FLATTEN_SAMPLE_SIZE); +} + +/* Projects a point onto a plane along the plane's normal */ +static void point_plane_project(float intr[3], float co[3], float plane_normal[3], float plane_center[3]) +{ + float p1[3], sub1[3], sub2[3]; + + /* Find the intersection between squash-plane and vertex (along the area normal) */ + sub_v3_v3v3(p1, co, plane_normal); + sub_v3_v3v3(sub1, plane_center, p1); + sub_v3_v3v3(sub2, co, p1); + sub_v3_v3v3(intr, co, p1); + mul_v3_fl(intr, dot_v3v3(plane_normal, sub1) / dot_v3v3(plane_normal, sub2)); + add_v3_v3v3(intr, intr, p1); +} + +static int plane_point_side(float co[3], float plane_normal[3], float plane_center[3], int flip) +{ + float delta[3]; + float d; + + sub_v3_v3v3(delta, co, plane_center); + d = dot_v3v3(plane_normal, delta); + + if(flip) + d = -d; + + return d <= 0.0f; +} + +static void do_flatten_clay_brush(Sculpt *sd, SculptSession *ss, PBVHNode **nodes, int totnode, int clay) +{ + /* area_normal and cntr define the plane towards which vertices are squashed */ + Brush *brush = paint_brush(&sd->paint); + float bstrength= ss->cache->bstrength; + float area_normal[3]; + float cntr[3], cntr2[3], bstr = 0; + int n, flip = 0; + + calc_area_normal(sd, ss, area_normal, nodes, totnode); + calc_flatten_center(sd, ss, nodes, totnode, cntr); + + if(clay) { + bstr= brush_strength(sd, ss->cache); + /* Limit clay application to here */ + cntr2[0]=cntr[0]+area_normal[0]*bstr*ss->cache->scale[0]; + cntr2[1]=cntr[1]+area_normal[1]*bstr*ss->cache->scale[1]; + cntr2[2]=cntr[2]+area_normal[2]*bstr*ss->cache->scale[2]; + flip = bstr < 0; + } + + #pragma omp parallel for private(n) schedule(static) + for(n=0; ntree, nodes[n], vd, PBVH_ITER_UNIQUE) { + if(sculpt_brush_test(&test, vd.co)) { + float intr[3], val[3]; + + if(!clay || plane_point_side(vd.co, area_normal, cntr2, flip)) { + const float fade = tex_strength(ss, brush, vd.co, test.dist)*bstrength; + + /* Find the intersection between squash-plane and vertex (along the area normal) */ + point_plane_project(intr, vd.co, area_normal, cntr); + + sub_v3_v3v3(val, intr, vd.co); + + if(clay) { + if(bstr > FLT_EPSILON) + mul_v3_fl(val, fade / bstr); + else + mul_v3_fl(val, fade); + /* Clay displacement */ + val[0]+=area_normal[0] * ss->cache->scale[0]*fade; + val[1]+=area_normal[1] * ss->cache->scale[1]*fade; + val[2]+=area_normal[2] * ss->cache->scale[2]*fade; + } + else + mul_v3_fl(val, fabs(fade)); + + add_v3_v3v3(val, val, vd.co); + + sculpt_clip(sd, ss, vd.co, val); + if(vd.mvert) vd.mvert->flag |= ME_VERT_PBVH_UPDATE; + } + } + } + BLI_pbvh_vertex_iter_end; + + BLI_pbvh_node_mark_update(nodes[n]); + } +} + +static void do_brush_action(Sculpt *sd, SculptSession *ss, StrokeCache *cache) +{ + SculptSearchSphereData data; + Brush *brush = paint_brush(&sd->paint); + PBVHNode **nodes= NULL; + int totnode; + + data.ss = ss; + data.sd = sd; + data.radius_squared = ss->cache->radius * ss->cache->radius; + + /* Build a list of all nodes that are potentially within the brush's + area of influence */ + if(brush->sculpt_tool == SCULPT_TOOL_GRAB) { + if(cache->first_time) { + /* For the grab tool we store these nodes once in the beginning + and then reuse them. */ + BLI_pbvh_search_gather(ss->tree, sculpt_search_sphere_cb, &data, + &nodes, &totnode); + + ss->cache->grab_active_nodes[ss->cache->symmetry]= nodes; + ss->cache->grab_active_totnode[ss->cache->symmetry]= totnode; + copy_v3_v3(ss->cache->grab_active_location[ss->cache->symmetry], ss->cache->location); + } else { - if(b->sculpt_tool != SCULPT_TOOL_GRAB) - addlisttolist(&ss->damaged_verts, &active_verts); + nodes= ss->cache->grab_active_nodes[ss->cache->symmetry]; + totnode= ss->cache->grab_active_totnode[ss->cache->symmetry]; + copy_v3_v3(ss->cache->location, ss->cache->grab_active_location[ss->cache->symmetry]); } } + else { + BLI_pbvh_search_gather(ss->tree, sculpt_search_sphere_cb, &data, + &nodes, &totnode); + } + + /* Only act if some verts are inside the brush area */ + if(totnode) { + /* Apply one type of brush action */ + switch(brush->sculpt_tool){ + case SCULPT_TOOL_DRAW: + do_draw_brush(sd, ss, nodes, totnode); + break; + case SCULPT_TOOL_SMOOTH: + do_smooth_brush(sd, ss, nodes, totnode); + break; + case SCULPT_TOOL_PINCH: + do_pinch_brush(sd, ss, nodes, totnode); + break; + case SCULPT_TOOL_INFLATE: + do_inflate_brush(sd, ss, nodes, totnode); + break; + case SCULPT_TOOL_GRAB: + do_grab_brush(sd, ss, nodes, totnode); + break; + case SCULPT_TOOL_LAYER: + do_layer_brush(sd, ss, nodes, totnode); + break; + case SCULPT_TOOL_FLATTEN: + do_flatten_clay_brush(sd, ss, nodes, totnode, 0); + break; + case SCULPT_TOOL_CLAY: + do_flatten_clay_brush(sd, ss, nodes, totnode, 1); + break; + } + + /* copy the modified vertices from mesh to the active key */ + if(ss->kb) mesh_to_key(ss->ob->data, ss->kb); + + if((brush->sculpt_tool != SCULPT_TOOL_GRAB) && nodes) + MEM_freeN(nodes); + } } /* Flip all the editdata across the axis/axes specified by symm. Used to @@ -932,6 +1428,7 @@ static void do_symmetrical_brush_actions(Sculpt *sd, SculptSession *ss) copy_v3_v3(cache->location, cache->true_location); copy_v3_v3(cache->grab_delta_symmetry, cache->grab_delta); cache->symmetry = 0; + cache->bstrength = brush_strength(sd, cache); do_brush_action(sd, ss, cache); for(i = 1; i <= symm; ++i) { @@ -944,110 +1441,6 @@ static void do_symmetrical_brush_actions(Sculpt *sd, SculptSession *ss) cache->first_time = 0; } -static void add_face_normal(vec3f *norm, MVert *mvert, const MFace* face, float *fn) -{ - vec3f c= {mvert[face->v1].co[0],mvert[face->v1].co[1],mvert[face->v1].co[2]}; - vec3f b= {mvert[face->v2].co[0],mvert[face->v2].co[1],mvert[face->v2].co[2]}; - vec3f a= {mvert[face->v3].co[0],mvert[face->v3].co[1],mvert[face->v3].co[2]}; - vec3f s1, s2; - float final[3]; - - sub_v3_v3v3(&s1.x,&a.x,&b.x); - sub_v3_v3v3(&s2.x,&c.x,&b.x); - - final[0] = s1.y * s2.z - s1.z * s2.y; - final[1] = s1.z * s2.x - s1.x * s2.z; - final[2] = s1.x * s2.y - s1.y * s2.x; - - if(fn) - copy_v3_v3(fn, final); - - norm->x+= final[0]; - norm->y+= final[1]; - norm->z+= final[2]; -} - -static void update_damaged_vert(SculptSession *ss, ListBase *lb) -{ - ActiveData *vert; - - float *buffer = ss->drawobject!=0?(float *)GPU_buffer_lock( ss->drawobject->normals ):0; - for(vert= lb->first; vert; vert= vert->next) { - vec3f norm= {0,0,0}; - IndexNode *face= ss->fmap[vert->Index].first; - - while(face){ - float *fn = NULL; - if(ss->face_normals) - fn = &ss->face_normals[face->index*3]; - add_face_normal(&norm, ss->mvert, &ss->mface[face->index], fn); - face= face->next; - } - normalize_v3(&norm.x); - - ss->mvert[vert->Index].no[0]=norm.x*32767; - ss->mvert[vert->Index].no[1]=norm.y*32767; - ss->mvert[vert->Index].no[2]=norm.z*32767; - - if( buffer != 0 ) { - IndexLink *cur = &ss->drawobject->indices[vert->Index]; - while( cur != 0 && cur->element != -1 ) { - int i = ss->drawobject->faceRemap[cur->element/3]; - if( ss->mface[i].flag & ME_SMOOTH ) { - VECCOPY(&buffer[cur->element*3],ss->mvert[vert->Index].no); - } - else { - float norm[3]; - if( ss->mface[i].v4 ) - normal_quad_v3( norm,ss->mvert[ss->mface[i].v1].co, ss->mvert[ss->mface[i].v2].co, ss->mvert[ss->mface[i].v3].co, ss->mvert[ss->mface[i].v4].co); - else - normal_tri_v3( norm,ss->mvert[ss->mface[i].v1].co, ss->mvert[ss->mface[i].v2].co, ss->mvert[ss->mface[i].v3].co); - VECCOPY(&buffer[(cur->element-cur->element%3)*3],norm); - VECCOPY(&buffer[(cur->element-cur->element%3+1)*3],norm); - VECCOPY(&buffer[(cur->element-cur->element%3+2)*3],norm); - - /* maybe this was a quad - need to update the other triangle of the quad */ - if( ss->drawobject->faceRemap[cur->element/3-1] == i ) { - VECCOPY(&buffer[(cur->element-cur->element%3-3)*3],norm); - VECCOPY(&buffer[(cur->element-cur->element%3-2)*3],norm); - VECCOPY(&buffer[(cur->element-cur->element%3-1)*3],norm); - } - if( ss->drawobject->faceRemap[cur->element/3+1] == i ) { - VECCOPY(&buffer[(cur->element-cur->element%3+3)*3],norm); - VECCOPY(&buffer[(cur->element-cur->element%3+4)*3],norm); - VECCOPY(&buffer[(cur->element-cur->element%3+5)*3],norm); - } - } - - //VECCOPY(&buffer[cur->element*3],ss->mvert[vert->Index].no); - cur = cur->next; - } - } - } - if( buffer != 0 ) - GPU_buffer_unlock( ss->drawobject->normals ); -} - -static void calc_damaged_verts(SculptSession *ss) -{ - int i; - - for(i=0; i<8; ++i) - update_damaged_vert(ss, &ss->cache->grab_active_verts[i]); - update_damaged_vert(ss, &ss->damaged_verts); - BLI_freelistN(&ss->damaged_verts); - ss->damaged_verts.first = ss->damaged_verts.last = NULL; -} - -#if 0 -static void projverts_clear_inside(SculptSession *ss) -{ - int i; - for(i = 0; i < ss->totvert; ++i) - ss->projverts[i].inside = 0; -} -#endif - static void sculpt_update_tex(Sculpt *sd, SculptSession *ss) { Brush *brush = paint_brush(&sd->paint); @@ -1065,28 +1458,15 @@ static void sculpt_update_tex(Sculpt *sd, SculptSession *ss) } } -static void sculptmode_update_all_projverts(SculptSession *ss) -{ - unsigned i; - - if(!ss->projverts) - ss->projverts = MEM_mallocN(sizeof(ProjVert)*ss->totvert,"ProjVerts"); - - for(i=0; itotvert; ++i) { - project(ss->cache->mats, ss->vertexcosnos ? &ss->vertexcosnos[i * 6] : ss->mvert[i].co, - ss->projverts[i].co); - ss->projverts[i].inside= 0; - } -} - /* Checks whether full update mode (slower) needs to be used to work with modifiers */ char sculpt_modifiers_active(Object *ob) { ModifierData *md; for(md= modifiers_getVirtualModifierList(ob); md; md= md->next) { - if(modifier_isEnabled(md, eModifierMode_Realtime) && md->type != eModifierType_Multires) - return 1; + if(modifier_isEnabled(md, eModifierMode_Realtime)) + if(!ELEM(md->type, eModifierType_Multires, eModifierType_ShapeKey)) + return 1; } return 0; @@ -1094,7 +1474,7 @@ char sculpt_modifiers_active(Object *ob) /* 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 */ -static struct MultiresModifierData *sculpt_multires_active(Object *ob) +struct MultiresModifierData *sculpt_multires_active(Object *ob) { ModifierData *md, *nmd; @@ -1108,7 +1488,7 @@ static struct MultiresModifierData *sculpt_multires_active(Object *ob) if(nmd->mode & eModifierMode_Realtime) break; - if(!nmd && mmd->lvl != 1) + if(!nmd && mmd->sculptlvl > 0) return mmd; } } @@ -1116,48 +1496,28 @@ static struct MultiresModifierData *sculpt_multires_active(Object *ob) return NULL; } -static void sculpt_update_mesh_elements(bContext *C) +void sculpt_key_to_mesh(KeyBlock *kb, Object *ob) { - Object *ob = CTX_data_active_object(C); + Mesh *me= ob->data; + + key_to_mesh(kb, me); + mesh_calc_normals(me->mvert, me->totvert, me->mface, me->totface, NULL); +} + +void sculpt_mesh_to_key(Object *ob, KeyBlock *kb) +{ + Mesh *me= ob->data; + + mesh_to_key(me, kb); +} + +void sculpt_update_mesh_elements(Scene *scene, Object *ob, int need_fmap) +{ + DerivedMesh *dm = mesh_get_derived_final(scene, ob, 0); SculptSession *ss = ob->sculpt; - int oldtotvert = ss->totvert; - DerivedMesh *dm = mesh_get_derived_final(CTX_data_scene(C), ob, CD_MASK_BAREMESH); - + ss->ob= ob; - if((ss->multires = sculpt_multires_active(ob))) { - //DerivedMesh *dm = mesh_get_derived_final(CTX_data_scene(C), ob, CD_MASK_BAREMESH); - ss->totvert = dm->getNumVerts(dm); - ss->totface = dm->getNumFaces(dm); - ss->mvert = dm->getVertDataArray(dm, CD_MVERT); - ss->mface = dm->getFaceDataArray(dm, CD_MFACE); - ss->face_normals = dm->getFaceDataArray(dm, CD_NORMAL); - } - else { - Mesh *me = get_mesh(ob); - ss->totvert = me->totvert; - ss->totface = me->totface; - ss->mvert = me->mvert; - ss->mface = me->mface; - ss->face_normals = NULL; - } - if( GPU_buffer_legacy( dm ) ) { - ss->drawobject = 0; - } - else { - ss->drawobject = dm->drawObject; - } - - if(ss->totvert != oldtotvert) { - if(ss->projverts) MEM_freeN(ss->projverts); - ss->projverts = NULL; - - if(ss->fmap) MEM_freeN(ss->fmap); - if(ss->fmap_mem) MEM_freeN(ss->fmap_mem); - create_vert_face_map(&ss->fmap, &ss->fmap_mem, ss->mface, ss->totvert, ss->totface); - ss->fmap_size = ss->totvert; - } - if((ob->shapeflag & OB_SHAPE_LOCK) && !sculpt_multires_active(ob)) { ss->kb= ob_get_keyblock(ob); ss->refkb= ob_get_reference_keyblock(ob); @@ -1166,6 +1526,28 @@ static void sculpt_update_mesh_elements(bContext *C) ss->kb= NULL; ss->refkb= NULL; } + + /* need to make PBVH with shape key coordinates */ + if(ss->kb) sculpt_key_to_mesh(ss->kb, ss->ob); + + if((ss->multires = sculpt_multires_active(ob))) { + ss->totvert = dm->getNumVerts(dm); + ss->totface = dm->getNumFaces(dm); + ss->mvert= NULL; + ss->mface= NULL; + ss->face_normals= NULL; + } + else { + Mesh *me = get_mesh(ob); + ss->totvert = me->totvert; + ss->totface = me->totface; + ss->mvert = me->mvert; + ss->mface = me->mface; + ss->face_normals = NULL; + } + + ss->tree = dm->getPBVH(ob, dm); + ss->fmap = (need_fmap && dm->getFaceMap)? dm->getFaceMap(dm): NULL; } static int sculpt_mode_poll(bContext *C) @@ -1179,27 +1561,27 @@ int sculpt_poll(bContext *C) return sculpt_mode_poll(C) && paint_poll(C); } -static void sculpt_undo_push(bContext *C, Sculpt *sd) +static char *sculpt_tool_name(Sculpt *sd) { Brush *brush = paint_brush(&sd->paint); switch(brush->sculpt_tool) { case SCULPT_TOOL_DRAW: - ED_undo_push(C, "Draw Brush"); break; + return "Draw Brush"; break; case SCULPT_TOOL_SMOOTH: - ED_undo_push(C, "Smooth Brush"); break; + return "Smooth Brush"; break; case SCULPT_TOOL_PINCH: - ED_undo_push(C, "Pinch Brush"); break; + return "Pinch Brush"; break; case SCULPT_TOOL_INFLATE: - ED_undo_push(C, "Inflate Brush"); break; + return "Inflate Brush"; break; case SCULPT_TOOL_GRAB: - ED_undo_push(C, "Grab Brush"); break; + return "Grab Brush"; break; case SCULPT_TOOL_LAYER: - ED_undo_push(C, "Layer Brush"); break; + return "Layer Brush"; break; case SCULPT_TOOL_FLATTEN: - ED_undo_push(C, "Flatten Brush"); break; + return "Flatten Brush"; break; default: - ED_undo_push(C, "Sculpting"); break; + return "Sculpting"; break; } } @@ -1251,28 +1633,32 @@ static void SCULPT_OT_radial_control(wmOperatorType *ot) /**** Operator for applying a stroke (various attributes including mouse path) using the current brush. ****/ -static float unproject_brush_radius(SculptSession *ss, float offset) +static float unproject_brush_radius(Object *ob, ViewContext *vc, float center[3], float offset) { - float brush_edge[3]; + float delta[3], scale, loc[3]; - /* In anchored mode, brush size changes with mouse loc, otherwise it's fixed using the brush radius */ - view3d_unproject(ss->cache->mats, brush_edge, ss->cache->initial_mouse[0] + offset, - ss->cache->initial_mouse[1], ss->cache->depth); + mul_v3_m4v3(loc, ob->obmat, center); - return len_v3v3(ss->cache->true_location, brush_edge); + initgrabz(vc->rv3d, loc[0], loc[1], loc[2]); + window_to_3d_delta(vc->ar, delta, offset, 0); + + scale= fabsf(mat4_to_scale(ob->obmat)); + scale= (scale == 0.0f)? 1.0f: scale; + + return len_v3(delta)/scale; } static void sculpt_cache_free(StrokeCache *cache) { int i; - if(cache->orig_norms) - MEM_freeN(cache->orig_norms); if(cache->face_norms) MEM_freeN(cache->face_norms); if(cache->mats) MEM_freeN(cache->mats); - for(i = 0; i < 8; ++i) - BLI_freelistN(&cache->grab_active_verts[i]); + for(i = 0; i < 8; ++i) { + if(cache->grab_active_nodes[i]) + MEM_freeN(cache->grab_active_nodes[i]); + } MEM_freeN(cache); } @@ -1290,70 +1676,63 @@ static void sculpt_update_cache_invariants(Sculpt *sd, SculptSession *ss, bConte cache->flag = RNA_int_get(op->ptr, "flag"); RNA_float_get_array(op->ptr, "clip_tolerance", cache->clip_tolerance); RNA_float_get_array(op->ptr, "initial_mouse", cache->initial_mouse); - cache->depth = RNA_float_get(op->ptr, "depth"); copy_v2_v2(cache->mouse, cache->initial_mouse); copy_v2_v2(cache->tex_mouse, cache->initial_mouse); /* Truly temporary data that isn't stored in properties */ + cache->vc = vc; + cache->brush = brush; + cache->mats = MEM_callocN(sizeof(bglMats), "sculpt bglMats"); - view3d_get_transformation(vc, vc->obact, cache->mats); + view3d_get_transformation(vc->ar, vc->rv3d, vc->obact, cache->mats); - sculpt_update_mesh_elements(C); - - /* Initialize layer brush displacements */ - if(brush->sculpt_tool == SCULPT_TOOL_LAYER && - (!ss->layer_disps || !(brush->flag & BRUSH_PERSISTENT))) { - if(ss->layer_disps) - MEM_freeN(ss->layer_disps); - ss->layer_disps = MEM_callocN(sizeof(float) * ss->totvert, "layer brush displacements"); + /* Initialize layer brush displacements and persistent coords */ + if(brush->sculpt_tool == SCULPT_TOOL_LAYER && !ss->multires) { + if(!ss->layer_disps || !(brush->flag & BRUSH_PERSISTENT)) { + if(ss->layer_disps) + MEM_freeN(ss->layer_disps); + ss->layer_disps = MEM_callocN(sizeof(float) * ss->totvert, "layer brush displacements"); + } + if(!ss->layer_co && (brush->flag & BRUSH_PERSISTENT)) { + if(!ss->layer_co) + ss->layer_co= MEM_mallocN(sizeof(float) * 3 * ss->totvert, + "sculpt mesh vertices copy"); + for(i = 0; i < ss->totvert; ++i) + copy_v3_v3(ss->layer_co[i], ss->mvert[i].co); + } } /* Make copies of the mesh vertex locations and normals for some tools */ - if(brush->sculpt_tool == SCULPT_TOOL_LAYER || (brush->flag & BRUSH_ANCHORED)) { - if(brush->sculpt_tool != SCULPT_TOOL_LAYER || - !ss->mesh_co_orig || !(brush->flag & BRUSH_PERSISTENT)) { - if(!ss->mesh_co_orig) - ss->mesh_co_orig= MEM_mallocN(sizeof(float) * 3 * ss->totvert, - "sculpt mesh vertices copy"); - for(i = 0; i < ss->totvert; ++i) - copy_v3_v3(ss->mesh_co_orig[i], ss->mvert[i].co); + if(brush->flag & BRUSH_ANCHORED) { + if(ss->face_normals) { + float *fn = ss->face_normals; + cache->face_norms= MEM_mallocN(sizeof(float) * 3 * ss->totface, "Sculpt face norms"); + for(i = 0; i < ss->totface; ++i, fn += 3) + copy_v3_v3(cache->face_norms[i], fn); } - if(brush->flag & BRUSH_ANCHORED) { - cache->orig_norms= MEM_mallocN(sizeof(short) * 3 * ss->totvert, "Sculpt orig norm"); - for(i = 0; i < ss->totvert; ++i) { - cache->orig_norms[i][0] = ss->mvert[i].no[0]; - cache->orig_norms[i][1] = ss->mvert[i].no[1]; - cache->orig_norms[i][2] = ss->mvert[i].no[2]; - } - - if(ss->face_normals) { - float *fn = ss->face_normals; - cache->face_norms= MEM_mallocN(sizeof(float) * 3 * ss->totface, "Sculpt face norms"); - for(i = 0; i < ss->totface; ++i, fn += 3) - copy_v3_v3(cache->face_norms[i], fn); - } - } + cache->original = 1; } - view3d_unproject(cache->mats, cache->true_location, cache->initial_mouse[0], cache->initial_mouse[1], cache->depth); - cache->initial_radius = unproject_brush_radius(ss, brush->size); + if(ELEM3(brush->sculpt_tool, SCULPT_TOOL_DRAW, SCULPT_TOOL_LAYER, SCULPT_TOOL_INFLATE)) + if(!(brush->flag & BRUSH_ACCUMULATE)) + cache->original = 1; + cache->rotation = 0; cache->first_time = 1; } /* Initialize the stroke cache variants from operator properties */ -static void sculpt_update_cache_variants(Sculpt *sd, SculptSession *ss, PointerRNA *ptr) +static void sculpt_update_cache_variants(Sculpt *sd, SculptSession *ss, struct PaintStroke *stroke, PointerRNA *ptr) { StrokeCache *cache = ss->cache; Brush *brush = paint_brush(&sd->paint); - float grab_location[3]; int dx, dy; - if(!(brush->flag & BRUSH_ANCHORED)) + if(!(brush->flag & BRUSH_ANCHORED) || cache->first_time) RNA_float_get_array(ptr, "location", cache->true_location); cache->flip = RNA_boolean_get(ptr, "flip"); RNA_float_get_array(ptr, "mouse", cache->mouse); @@ -1364,6 +1743,9 @@ static void sculpt_update_cache_variants(Sculpt *sd, SculptSession *ss, PointerR cache->previous_pixel_radius = cache->pixel_radius; cache->pixel_radius = brush->size; + if(cache->first_time) + cache->initial_radius = unproject_brush_radius(ss->ob, cache->vc, cache->true_location, brush->size); + if(brush->flag & BRUSH_SIZE_PRESSURE) { cache->pixel_radius *= cache->pressure; cache->radius = cache->initial_radius * cache->pressure; @@ -1378,7 +1760,8 @@ static void sculpt_update_cache_variants(Sculpt *sd, SculptSession *ss, PointerR dx = cache->mouse[0] - cache->initial_mouse[0]; dy = cache->mouse[1] - cache->initial_mouse[1]; cache->pixel_radius = sqrt(dx*dx + dy*dy); - cache->radius = unproject_brush_radius(ss, cache->pixel_radius); + cache->radius = unproject_brush_radius(ss->ob, paint_stroke_view_context(stroke), + cache->true_location, cache->pixel_radius); cache->rotation = atan2(dy, dx); } else if(brush->flag & BRUSH_RAKE) { @@ -1401,17 +1784,92 @@ static void sculpt_update_cache_variants(Sculpt *sd, SculptSession *ss, PointerR /* Find the grab delta */ if(brush->sculpt_tool == SCULPT_TOOL_GRAB) { - view3d_unproject(cache->mats, grab_location, cache->mouse[0], cache->mouse[1], cache->depth); + float grab_location[3]; + + if(cache->first_time) + copy_v3_v3(cache->orig_grab_location, cache->true_location); + + initgrabz(cache->vc->rv3d, cache->orig_grab_location[0], cache->orig_grab_location[1], cache->orig_grab_location[2]); + window_to_3d_delta(cache->vc->ar, grab_location, cache->mouse[0], cache->mouse[1]); + if(!cache->first_time) sub_v3_v3v3(cache->grab_delta, grab_location, cache->old_grab_location); copy_v3_v3(cache->old_grab_location, grab_location); } } +static void sculpt_stroke_modifiers_check(bContext *C, SculptSession *ss) +{ + if(sculpt_modifiers_active(ss->ob)) + sculpt_update_mesh_elements(CTX_data_scene(C), ss->ob, 0); // XXX brush->sculpt_tool == SCULPT_TOOL_SMOOTH); +} + +typedef struct { + SculptSession *ss; + float *ray_start, *ray_normal; + int hit; + float dist; + int original; +} SculptRaycastData; + +void sculpt_raycast_cb(PBVHNode *node, void *data_v) +{ + SculptRaycastData *srd = data_v; + float (*origco)[3]= NULL; + + if(srd->original && srd->ss->cache) { + /* intersect with coordinates from before we started stroke */ + SculptUndoNode *unode= sculpt_undo_get_node(srd->ss, node); + origco= (unode)? unode->co: NULL; + } + + srd->hit |= BLI_pbvh_node_raycast(srd->ss->tree, node, origco, + srd->ray_start, srd->ray_normal, &srd->dist); +} + +/* Do a raycast in the tree to find the 3d brush location + (This allows us to ignore the GL depth buffer) + Returns 0 if the ray doesn't hit the mesh, non-zero otherwise + */ +int sculpt_stroke_get_location(bContext *C, struct PaintStroke *stroke, float out[3], float mouse[2]) +{ + ViewContext *vc = paint_stroke_view_context(stroke); + SculptSession *ss= vc->obact->sculpt; + StrokeCache *cache= ss->cache; + float ray_start[3], ray_normal[3]; + float obimat[4][4]; + float mval[2] = {mouse[0] - vc->ar->winrct.xmin, + mouse[1] - vc->ar->winrct.ymin}; + SculptRaycastData srd; + + sculpt_stroke_modifiers_check(C, ss); + + viewray(vc->ar, vc->v3d, mval, ray_start, ray_normal); + + invert_m4_m4(obimat, ss->ob->obmat); + mul_m4_v3(obimat, ray_start); + mul_mat3_m4_v3(obimat, ray_normal); + normalize_v3(ray_normal); + + srd.ss = vc->obact->sculpt; + srd.ray_start = ray_start; + srd.ray_normal = ray_normal; + srd.dist = FLT_MAX; + srd.hit = 0; + srd.original = (cache)? cache->original: 0; + BLI_pbvh_raycast(ss->tree, sculpt_raycast_cb, &srd, + ray_start, ray_normal, srd.original); + + copy_v3_v3(out, ray_normal); + mul_v3_fl(out, srd.dist); + add_v3_v3v3(out, out, ray_start); + + return srd.hit; +} + /* Initialize stroke operator properties */ static void sculpt_brush_stroke_init_properties(bContext *C, wmOperator *op, wmEvent *event, SculptSession *ss) { - Sculpt *sd = CTX_data_tool_settings(C)->sculpt; Object *ob= CTX_data_active_object(C); ModifierData *md; float scale[3], clip_tolerance[3] = {0,0,0}; @@ -1444,18 +1902,15 @@ static void sculpt_brush_stroke_init_properties(bContext *C, wmOperator *op, wmE mouse[0] = event->x; mouse[1] = event->y; RNA_float_set_array(op->ptr, "initial_mouse", mouse); - - /* Initial screen depth under the mouse */ - RNA_float_set(op->ptr, "depth", read_cached_depth(paint_stroke_view_context(op->customdata), event->x, event->y)); - - sculpt_update_cache_invariants(sd, ss, C, op); } static int sculpt_brush_stroke_init(bContext *C, ReportList *reports) { + Scene *scene= CTX_data_scene(C); Object *ob= CTX_data_active_object(C); Sculpt *sd = CTX_data_tool_settings(C)->sculpt; SculptSession *ss = CTX_data_active_object(C)->sculpt; + Brush *brush = paint_brush(&sd->paint); if(ob_get_key(ob) && !(ob->shapeflag & OB_SHAPE_LOCK)) { BKE_report(reports, RPT_ERROR, "Shape key sculpting requires a locked shape."); @@ -1469,9 +1924,7 @@ static int sculpt_brush_stroke_init(bContext *C, ReportList *reports) changes are made to the texture. */ sculpt_update_tex(sd, ss); - sculpt_update_mesh_elements(C); - - if(ss->kb) key_to_mesh(ss->kb, ss->ob->data); + sculpt_update_mesh_elements(scene, ob, brush->sculpt_tool == SCULPT_TOOL_SMOOTH); return 1; } @@ -1480,30 +1933,31 @@ static void sculpt_restore_mesh(Sculpt *sd, SculptSession *ss) { StrokeCache *cache = ss->cache; Brush *brush = paint_brush(&sd->paint); - float *buffer= NULL; int i; /* Restore the mesh before continuing with anchored stroke */ - if((brush->flag & BRUSH_ANCHORED) && ss->mesh_co_orig) { + if(brush->flag & BRUSH_ANCHORED) { + PBVHNode **nodes; + int n, totnode; - if(ss->drawobject) - buffer= (float *)GPU_buffer_lock(ss->drawobject->normals); + BLI_pbvh_search_gather(ss->tree, NULL, NULL, &nodes, &totnode); - for(i = 0; i < ss->totvert; ++i) { - copy_v3_v3(ss->mvert[i].co, ss->mesh_co_orig[i]); - ss->mvert[i].no[0] = cache->orig_norms[i][0]; - ss->mvert[i].no[1] = cache->orig_norms[i][1]; - ss->mvert[i].no[2] = cache->orig_norms[i][2]; - if( buffer != 0 ) { - IndexLink *cur = &ss->drawobject->indices[i]; - while( cur != 0 && cur->element != -1 ) { - VECCOPY(&buffer[cur->element*3],cache->orig_norms[i]); - cur = cur->next; + #pragma omp parallel for private(n) schedule(static) + for(n=0; ntree, nodes[n], vd, PBVH_ITER_UNIQUE) { + copy_v3_v3(vd.co, unode->co[vd.i]); + if(vd.no) VECCOPY(vd.no, unode->no[vd.i]) + else normal_short_to_float_v3(vd.fno, unode->no[vd.i]); } + BLI_pbvh_vertex_iter_end; } } - if( buffer != 0 ) - GPU_buffer_unlock( ss->drawobject->normals ); if(ss->face_normals) { float *fn = ss->face_normals; @@ -1511,55 +1965,64 @@ static void sculpt_restore_mesh(Sculpt *sd, SculptSession *ss) copy_v3_v3(fn, cache->face_norms[i]); } - if(brush->sculpt_tool == SCULPT_TOOL_LAYER) + if(brush->sculpt_tool == SCULPT_TOOL_LAYER && !ss->multires) memset(ss->layer_disps, 0, sizeof(float) * ss->totvert); } } -static void sculpt_post_stroke_free(SculptSession *ss) -{ - BLI_freelistN(&ss->damaged_rects); - BLI_freelistN(&ss->damaged_verts); -} - static void sculpt_flush_update(bContext *C) { Object *ob = CTX_data_active_object(C); SculptSession *ss = ob->sculpt; ARegion *ar = CTX_wm_region(C); MultiresModifierData *mmd = ss->multires; + int redraw = 0; - calc_damaged_verts(ss); - - if(mmd) { - if(mmd->undo_verts && mmd->undo_verts != ss->mvert) - MEM_freeN(mmd->undo_verts); - - mmd->undo_verts = ss->mvert; - mmd->undo_verts_tot = ss->totvert; + if(mmd) multires_mark_as_modified(ob); - } - if(sculpt_modifiers_active(ob)) + if(sculpt_modifiers_active(ob)) { DAG_id_flush_update(&ob->id, OB_RECALC_DATA); + ED_region_tag_redraw(ar); + } + else { + rcti r; - ED_region_tag_redraw(ar); + BLI_pbvh_update(ss->tree, PBVH_UpdateBB, NULL); + redraw = sculpt_get_redraw_rect(ar, CTX_wm_region_view3d(C), ob, &r); + + if(redraw) { + r.xmin += ar->winrct.xmin + 1; + r.xmax += ar->winrct.xmin - 1; + r.ymin += ar->winrct.ymin + 1; + r.ymax += ar->winrct.ymin - 1; + + ss->partial_redraw = 1; + ED_region_tag_redraw_partial(ar, &r); + } + } } static int sculpt_stroke_test_start(bContext *C, struct wmOperator *op, wmEvent *event) { - ViewContext vc; - float cur_depth; - - view3d_set_viewcontext(C, &vc); - cur_depth = read_cached_depth(&vc, event->x, event->y); + float mouse[2] = {event->x, event->y}, location[3]; + int over_mesh; - /* Don't start the stroke until a valid depth is found */ - if(cur_depth < 1.0 - FLT_EPSILON) { - SculptSession *ss = CTX_data_active_object(C)->sculpt; + over_mesh = sculpt_stroke_get_location(C, op->customdata, location, mouse); + + /* Don't start the stroke until mouse goes over the mesh */ + if(over_mesh) { + Object *ob = CTX_data_active_object(C); + SculptSession *ss = ob->sculpt; + Sculpt *sd = CTX_data_tool_settings(C)->sculpt; + + ED_view3d_init_mats_rv3d(ob, CTX_wm_region_view3d(C)); sculpt_brush_stroke_init_properties(C, op, event, ss); - sculptmode_update_all_projverts(ss); + + sculpt_update_cache_invariants(sd, ss, C, op); + + sculpt_undo_push_begin(ss, sculpt_tool_name(sd)); return 1; } @@ -1572,13 +2035,13 @@ static void sculpt_stroke_update_step(bContext *C, struct PaintStroke *stroke, P Sculpt *sd = CTX_data_tool_settings(C)->sculpt; SculptSession *ss = CTX_data_active_object(C)->sculpt; - sculpt_update_cache_variants(sd, ss, itemptr); + sculpt_stroke_modifiers_check(C, ss); + sculpt_update_cache_variants(sd, ss, stroke, itemptr); sculpt_restore_mesh(sd, ss); do_symmetrical_brush_actions(sd, ss); /* Cleanup */ sculpt_flush_update(C); - sculpt_post_stroke_free(ss); } static void sculpt_stroke_done(bContext *C, struct PaintStroke *stroke) @@ -1588,14 +2051,19 @@ static void sculpt_stroke_done(bContext *C, struct PaintStroke *stroke) /* Finished */ if(ss->cache) { - Sculpt *sd = CTX_data_tool_settings(C)->sculpt; + sculpt_stroke_modifiers_check(C, ss); - if(ss->refkb) key_to_mesh(ss->refkb, ob->data); - - request_depth_update(paint_stroke_view_context(stroke)->rv3d); sculpt_cache_free(ss->cache); ss->cache = NULL; - sculpt_undo_push(C, sd); + + sculpt_undo_push_end(ss); + + BLI_pbvh_update(ss->tree, PBVH_UpdateOriginalBB, NULL); + + if(ss->refkb) sculpt_key_to_mesh(ss->refkb, ob); + + ss->partial_redraw = 0; + WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); } } @@ -1604,7 +2072,8 @@ static int sculpt_brush_stroke_invoke(bContext *C, wmOperator *op, wmEvent *even if(!sculpt_brush_stroke_init(C, op->reports)) return OPERATOR_CANCELLED; - op->customdata = paint_stroke_new(C, sculpt_stroke_test_start, + op->customdata = paint_stroke_new(C, sculpt_stroke_get_location, + sculpt_stroke_test_start, sculpt_stroke_update_step, sculpt_stroke_done); @@ -1624,18 +2093,16 @@ static int sculpt_brush_stroke_exec(bContext *C, wmOperator *op) if(!sculpt_brush_stroke_init(C, op->reports)) return OPERATOR_CANCELLED; - op->customdata = paint_stroke_new(C, sculpt_stroke_test_start, sculpt_stroke_update_step, sculpt_stroke_done); + op->customdata = paint_stroke_new(C, sculpt_stroke_get_location, sculpt_stroke_test_start, + sculpt_stroke_update_step, sculpt_stroke_done); sculpt_update_cache_invariants(sd, ss, C, op); - sculptmode_update_all_projverts(ss); paint_stroke_exec(C, op); sculpt_flush_update(C); sculpt_cache_free(ss->cache); - sculpt_undo_push(C, sd); - return OPERATOR_FINISHED; } @@ -1670,9 +2137,6 @@ static void SCULPT_OT_brush_stroke(wmOperatorType *ot) /* The initial 2D location of the mouse */ RNA_def_float_vector(ot->srna, "initial_mouse", 2, NULL, INT_MIN, INT_MAX, "initial_mouse", "", INT_MIN, INT_MAX); - - /* The initial screen depth of the mouse */ - RNA_def_float(ot->srna, "depth", 0.0f, 0.0f, FLT_MAX, "depth", "", 0.0f, FLT_MAX); } /**** Reset the copy of the mesh that is being sculpted on (currently just for the layer brush) ****/ @@ -1686,9 +2150,9 @@ static int sculpt_set_persistent_base(bContext *C, wmOperator *op) MEM_freeN(ss->layer_disps); ss->layer_disps = NULL; - if(ss->mesh_co_orig) - MEM_freeN(ss->mesh_co_orig); - ss->mesh_co_orig = NULL; + if(ss->layer_co) + MEM_freeN(ss->layer_co); + ss->layer_co = NULL; } return OPERATOR_FINISHED; @@ -1709,15 +2173,30 @@ static void SCULPT_OT_set_persistent_base(wmOperatorType *ot) /**** Toggle operator for turning sculpt mode on or off ****/ +static void sculpt_init_session(Scene *scene, Object *ob) +{ + ob->sculpt = MEM_callocN(sizeof(SculptSession), "sculpt session"); + + sculpt_update_mesh_elements(scene, ob, 0); + + if(ob->sculpt->refkb) + sculpt_key_to_mesh(ob->sculpt->refkb, ob); +} + static int sculpt_toggle_mode(bContext *C, wmOperator *op) { + Scene *scene = CTX_data_scene(C); ToolSettings *ts = CTX_data_tool_settings(C); Object *ob = CTX_data_active_object(C); + MultiresModifierData *mmd = sculpt_multires_active(ob); if(ob->mode & OB_MODE_SCULPT) { if(sculpt_multires_active(ob)) multires_force_update(ob); + if(mmd && mmd->sculptlvl != mmd->lvl) + DAG_id_flush_update(&ob->id, OB_RECALC_DATA); + /* Leave sculptmode */ ob->mode &= ~OB_MODE_SCULPT; @@ -1725,8 +2204,10 @@ static int sculpt_toggle_mode(bContext *C, wmOperator *op) } else { /* Enter sculptmode */ - ob->mode |= OB_MODE_SCULPT; + + if(mmd && mmd->sculptlvl != mmd->lvl) + DAG_id_flush_update(&ob->id, OB_RECALC_DATA); /* Create persistent sculpt mode data */ if(!ts->sculpt) @@ -1735,7 +2216,8 @@ static int sculpt_toggle_mode(bContext *C, wmOperator *op) /* Create sculpt mode session data */ if(ob->sculpt) free_sculptsession(&ob->sculpt); - ob->sculpt = MEM_callocN(sizeof(SculptSession), "sculpt session"); + + sculpt_init_session(scene, ob); paint_init(&ts->sculpt->paint, PAINT_CURSOR_SCULPT); @@ -1767,3 +2249,4 @@ void ED_operatortypes_sculpt() WM_operatortype_append(SCULPT_OT_sculptmode_toggle); WM_operatortype_append(SCULPT_OT_set_persistent_base); } + diff --git a/source/blender/editors/sculpt_paint/sculpt_intern.h b/source/blender/editors/sculpt_paint/sculpt_intern.h index 15ccacc294a..0e1c0510902 100644 --- a/source/blender/editors/sculpt_paint/sculpt_intern.h +++ b/source/blender/editors/sculpt_paint/sculpt_intern.h @@ -35,7 +35,9 @@ struct bContext; struct Brush; +struct KeyBlock; struct Mesh; +struct MultiresModifierData; struct Object; struct Scene; struct Sculpt; @@ -47,6 +49,7 @@ void sculptmode_draw_mesh(int); void sculpt_paint_brush(char clear); void sculpt_stroke_draw(struct SculptStroke *); void sculpt_radialcontrol_start(int mode); +struct MultiresModifierData *sculpt_multires_active(struct Object *ob); struct Brush *sculptmode_brush(void); //void do_symmetrical_brush_actions(struct Sculpt *sd, struct wmOperator *wm, struct BrushAction *a, short *, short *); @@ -55,6 +58,9 @@ char sculpt_modifiers_active(struct Object *ob); void sculpt(Sculpt *sd); int sculpt_poll(struct bContext *C); +void sculpt_update_mesh_elements(struct Scene *scene, struct Object *ob, int need_fmap); +void sculpt_key_to_mesh(struct KeyBlock *kb, struct Object *ob); +void sculpt_mesh_to_key(struct Object *ob, struct KeyBlock *kb); /* Stroke */ struct SculptStroke *sculpt_stroke_new(const int max); diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c index 133d48a5ecc..e7b1dcb677d 100644 --- a/source/blender/editors/space_action/action_edit.c +++ b/source/blender/editors/space_action/action_edit.c @@ -446,9 +446,7 @@ static void insert_action_keys(bAnimContext *ac, short mode) ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* init keyframing flag */ - if (IS_AUTOKEY_FLAG(AUTOMATKEY)) flag |= INSERTKEY_MATRIX; - if (IS_AUTOKEY_FLAG(INSERTNEEDED)) flag |= INSERTKEY_NEEDED; - if (IS_AUTOKEY_MODE(scene, EDITKEYS)) flag |= INSERTKEY_REPLACE; + flag = ANIM_get_keyframing_flags(scene, 1); /* insert keyframes */ for (ale= anim_data.first; ale; ale= ale->next) { @@ -572,7 +570,7 @@ static int actkeys_duplicate_invoke(bContext *C, wmOperator *op, wmEvent *event) actkeys_duplicate_exec(C, op); RNA_int_set(op->ptr, "mode", TFM_TIME_TRANSLATE); - WM_operator_name_call(C, "TFM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr); + WM_operator_name_call(C, "TRANSFORM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/space_action/action_header.c b/source/blender/editors/space_action/action_header.c deleted file mode 100644 index d2dbb5fe3b0..00000000000 --- a/source/blender/editors/space_action/action_header.c +++ /dev/null @@ -1,348 +0,0 @@ -/** - * $Id$ - * - * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2008 Blender Foundation. - * All rights reserved. - * - * - * Contributor(s): Blender Foundation - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#include -#include - -#include "DNA_anim_types.h" -#include "DNA_action_types.h" -#include "DNA_key_types.h" -#include "DNA_object_types.h" -#include "DNA_space_types.h" -#include "DNA_scene_types.h" -#include "DNA_screen_types.h" -#include "DNA_windowmanager_types.h" - -#include "MEM_guardedalloc.h" - -#include "BLI_blenlib.h" - -#include "BKE_animsys.h" -#include "BKE_action.h" -#include "BKE_context.h" -#include "BKE_screen.h" - -#include "ED_anim_api.h" -#include "ED_screen.h" -#include "ED_transform.h" -#include "ED_types.h" -#include "ED_util.h" - -#include "RNA_access.h" - -#include "WM_api.h" -#include "WM_types.h" - -#include "BIF_gl.h" -#include "BIF_glutil.h" - -#include "UI_interface.h" -#include "UI_resources.h" -#include "UI_view2d.h" - -#include "action_intern.h" - -enum { - B_REDR= 1, - B_MODECHANGE, -} eActHeader_Events; - -/* ********************************************************* */ -/* Menu Defines... */ - -static void act_viewmenu(bContext *C, uiLayout *layout, void *arg_unused) -{ - bScreen *sc= CTX_wm_screen(C); - ScrArea *sa= CTX_wm_area(C); - SpaceAction *sact= CTX_wm_space_action(C); - PointerRNA spaceptr; - - /* retrieve state */ - RNA_pointer_create(&sc->id, &RNA_SpaceDopeSheetEditor, sact, &spaceptr); - - /* create menu */ - //uiItemO(layout, NULL, ICON_MENU_PANEL, "ACTION_OT_properties"); - - //uiItemS(layout); - - uiItemR(layout, NULL, 0, &spaceptr, "show_cframe_indicator", 0); - uiItemR(layout, NULL, 0, &spaceptr, "show_sliders", 0); - uiItemR(layout, NULL, 0, &spaceptr, "automerge_keyframes", 0); - - if (sact->flag & SACTION_DRAWTIME) - uiItemO(layout, "Show Frames", 0, "ANIM_OT_time_toggle"); - else - uiItemO(layout, "Show Seconds", 0, "ANIM_OT_time_toggle"); - - uiItemS(layout); - - uiItemO(layout, NULL, 0, "ANIM_OT_previewrange_set"); - uiItemO(layout, NULL, 0, "ANIM_OT_previewrange_clear"); - - uiItemO(layout, NULL, 0, "ACTION_OT_previewrange_set"); - - uiItemS(layout); - - uiItemO(layout, NULL, 0, "ACTION_OT_frame_jump"); - - uiItemO(layout, NULL, 0, "ACTION_OT_view_all"); - - if (sa->full) - uiItemO(layout, NULL, 0, "SCREEN_OT_screen_full_area"); // "Tile Window", Ctrl UpArrow - else - uiItemO(layout, NULL, 0, "SCREEN_OT_screen_full_area"); // "Maximize Window", Ctrl DownArrow -} - -static void act_selectmenu(bContext *C, uiLayout *layout, void *arg_unused) -{ - uiItemO(layout, NULL, 0, "ACTION_OT_select_all_toggle"); - uiItemBooleanO(layout, "Invert All", 0, "ACTION_OT_select_all_toggle", "invert", 1); - - uiItemS(layout); - - uiItemO(layout, NULL, 0, "ACTION_OT_select_border"); - uiItemBooleanO(layout, "Border Axis Range", 0, "ACTION_OT_select_border", "axis_range", 1); - - uiItemS(layout); - - uiItemEnumO(layout, "Columns on Selected Keys", 0, "ACTION_OT_select_column", "mode", ACTKEYS_COLUMNSEL_KEYS); - uiItemEnumO(layout, "Column on Current Frame", 0, "ACTION_OT_select_column", "mode", ACTKEYS_COLUMNSEL_CFRA); - - uiItemEnumO(layout, "Columns on Selected Markers", 0, "ACTION_OT_select_column", "mode", ACTKEYS_COLUMNSEL_MARKERS_COLUMN); - uiItemEnumO(layout, "Between Selected Markers", 0, "ACTION_OT_select_column", "mode", ACTKEYS_COLUMNSEL_MARKERS_BETWEEN); -} - -static void act_channelmenu(bContext *C, uiLayout *layout, void *arg_unused) -{ - uiItemO(layout, NULL, 0, "ANIM_OT_channels_setting_toggle"); - uiItemO(layout, NULL, 0, "ANIM_OT_channels_setting_enable"); - uiItemO(layout, NULL, 0, "ANIM_OT_channels_setting_disable"); - - uiItemS(layout); - - uiItemO(layout, NULL, 0, "ANIM_OT_channels_editable_toggle"); - - uiItemS(layout); - - uiItemO(layout, NULL, 0, "ANIM_OT_channels_expand"); - uiItemO(layout, NULL, 0, "ANIM_OT_channels_collapse"); -} - -static void act_gplayermenu(bContext *C, uiLayout *layout, void *arg_unused) -{ - //uiItemMenuF(layout, "Transform", 0, nla_edit_transformmenu, NULL, NULL); - //uiItemS(layout); - //uiItemO(layout, NULL, 0, "NLAEDIT_OT_duplicate"); -} - -static void act_edit_transformmenu(bContext *C, uiLayout *layout, void *arg_unused) -{ - uiItemEnumO(layout, "Grab/Move", 0, "TFM_OT_transform", "mode", TFM_TIME_TRANSLATE); - uiItemEnumO(layout, "Extend", 0, "TFM_OT_transform", "mode", TFM_TIME_EXTEND); - uiItemEnumO(layout, "Scale", 0, "TFM_OT_transform", "mode", TFM_TIME_SCALE); -} - -static void act_editmenu(bContext *C, uiLayout *layout, void *arg_unused) -{ - uiItemMenuF(layout, "Transform", 0, act_edit_transformmenu, NULL); - uiItemMenuEnumO(layout, "Snap", 0, "ACTION_OT_snap", "type"); - uiItemMenuEnumO(layout, "Mirror", 0, "ACTION_OT_mirror", "type"); - - uiItemS(layout); - - uiItemO(layout, NULL, 0, "ACT_OT_keyframe_insert"); - - uiItemS(layout); - - uiItemO(layout, NULL, 0, "ACTION_OT_duplicate"); - uiItemO(layout, NULL, 0, "ACTION_OT_delete"); - - uiItemS(layout); - - uiItemMenuEnumO(layout, "Keyframe Type", 0, "ACTION_OT_keyframe_type", "type"); - uiItemMenuEnumO(layout, "Handle Type", 0, "ACTION_OT_handle_type", "type"); - uiItemMenuEnumO(layout, "Interpolation Type", 0, "ACTION_OT_interpolation_type", "type"); - uiItemMenuEnumO(layout, "Extrapolation Type", 0, "ACTION_OT_extrapolation_type", "type"); - - uiItemS(layout); - - uiItemO(layout, NULL, 0, "ACTION_OT_clean"); - uiItemO(layout, NULL, 0, "ACTION_OT_sample"); - - uiItemS(layout); - - uiItemO(layout, NULL, 0, "ACTION_OT_copy"); - uiItemO(layout, NULL, 0, "ACTION_OT_paste"); -} - -/* ************************ header area region *********************** */ - -static void do_action_buttons(bContext *C, void *arg, int event) -{ - /* special exception for mode changing - enable custom settings? */ - if (event == B_MODECHANGE) { - SpaceAction *saction= CTX_wm_space_action(C); - - /* if the new mode is ShapeKeys editor, enable sliders */ - if (saction->mode == SACTCONT_SHAPEKEY) - saction->flag |= SACTION_SLIDERS; - } - - ED_area_tag_refresh(CTX_wm_area(C)); - ED_area_tag_redraw(CTX_wm_area(C)); -} - -void action_header_buttons(const bContext *C, ARegion *ar) -{ - ScrArea *sa= CTX_wm_area(C); - SpaceAction *saction= CTX_wm_space_action(C); - bAnimContext ac; - uiBlock *block; - int xco, yco= 3, xmax; - - block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS); - uiBlockSetHandleFunc(block, do_action_buttons, NULL); - - xco= ED_area_header_standardbuttons(C, block, yco); - - uiBlockSetEmboss(block, UI_EMBOSS); - - /* get context... (also syncs data) */ - ANIM_animdata_get_context(C, &ac); - - if ((sa->flag & HEADER_NO_PULLDOWN)==0) { - - xmax= GetButStringLength("View"); - uiDefMenuBut(block, act_viewmenu, NULL, "View", xco, yco, xmax-3, 20, ""); - xco+= xmax; - - xmax= GetButStringLength("Select"); - uiDefMenuBut(block, act_selectmenu, NULL, "Select", xco, yco, xmax-3, 20, ""); - xco+= xmax; - - if ( (saction->mode == SACTCONT_DOPESHEET) || - ((saction->action) && (saction->mode==SACTCONT_ACTION)) ) - { - xmax= GetButStringLength("Channel"); - uiDefMenuBut(block, act_channelmenu, NULL, "Channel", xco, yco, xmax-3, 20, ""); - xco+= xmax; - } - else if (saction->mode==SACTCONT_GPENCIL) { - xmax= GetButStringLength("Channel"); - uiDefMenuBut(block, act_gplayermenu, NULL, "Channel", xco, yco, xmax-3, 20, ""); - xco+= xmax; - } - - //xmax= GetButStringLength("Marker"); - //uiDefMenuBut(block, act_markermenu, NULL, "Marker", xco, yco, xmax-3, 20, ""); - //xco+= xmax; - - if (saction->mode == SACTCONT_GPENCIL) { - //xmax= GetButStringLength("Frame"); - //uiDefMenuBut(block, act_selectmenu, NULL, "Frame", xco, yco, xmax-3, 20, ""); - //xco+= xmax; - } - else { - xmax= GetButStringLength("Key"); - uiDefMenuBut(block, act_editmenu, NULL, "Key", xco, yco, xmax-3, 20, ""); - xco+= xmax; - } - } - - uiBlockSetEmboss(block, UI_EMBOSS); - - /* MODE SELECTOR */ - uiDefButC(block, MENU, B_MODECHANGE, - "Editor Mode %t|DopeSheet %x3|Action Editor %x0|ShapeKey Editor %x1|Grease Pencil %x2", - xco,yco,90,YIC, &saction->mode, 0, 1, 0, 0, - "Editing modes for this editor"); - - - xco += (90 + 8); - - /* SUMMARY CHANNEL */ - uiDefIconTextButBitI(block, TOG, ADS_FILTER_SUMMARY, B_REDR, ICON_BORDERMOVE, "Summary", xco,yco,XIC*4,YIC, &(saction->ads.filterflag), 0, 0, 0, 0, "Include DopeSheet summary row"); // TODO: needs a better icon - xco += (XIC*4.5); - - /*if (ac.data)*/ - { - /* MODE-DEPENDENT DRAWING */ - if (saction->mode == SACTCONT_DOPESHEET) { - /* FILTERING OPTIONS */ - xco -= XIC; // XXX first button incurs this offset... - xco= ANIM_headerUI_standard_buttons(C, &saction->ads, block, xco, yco); - } - else if (saction->mode == SACTCONT_ACTION) { - uiLayout *layout; - bScreen *sc= CTX_wm_screen(C); - PointerRNA ptr; - - RNA_pointer_create(&sc->id, &RNA_SpaceDopeSheetEditor, saction, &ptr); - - layout= uiBlockLayout(block, UI_LAYOUT_HORIZONTAL, UI_LAYOUT_HEADER, xco, 20+3, 20, 1, U.uistyles.first); - uiTemplateID(layout, (bContext*)C, &ptr, "action", "ACTION_OT_new", NULL, NULL); - uiBlockLayoutResolve(block, &xco, NULL); - - xco += 8; - } - - /* draw AUTOSNAP */ - if (saction->mode != SACTCONT_GPENCIL) { - if (saction->flag & SACTION_DRAWTIME) { - uiDefButC(block, MENU, B_REDR, - "Auto-Snap Keyframes %t|No Snap %x0|Second Step %x1|Nearest Second %x2|Nearest Marker %x3", - xco,yco,90,YIC, &(saction->autosnap), 0, 1, 0, 0, - "Auto-snapping mode for keyframes when transforming"); - } - else { - uiDefButC(block, MENU, B_REDR, - "Auto-Snap Keyframes %t|No Snap %x0|Frame Step %x1|Nearest Frame %x2|Nearest Marker %x3", - xco,yco,90,YIC, &(saction->autosnap), 0, 1, 0, 0, - "Auto-snapping mode for keyframes when transforming"); - } - - xco += (90 + 8); - } - - /* COPY PASTE */ - uiBlockBeginAlign(block); - uiDefIconButO(block, BUT, "ACTION_OT_copy", WM_OP_INVOKE_REGION_WIN, ICON_COPYDOWN, xco,yco,XIC,YIC, "Copies the selected keyframes to the buffer."); - xco += XIC; - uiDefIconButO(block, BUT, "ACTION_OT_paste", WM_OP_INVOKE_REGION_WIN, ICON_PASTEDOWN, xco,yco,XIC,YIC, "Pastes the keyframes from the buffer into the selected channels."); - uiBlockEndAlign(block); - xco += (XIC + 8); - } - - /* always as last */ - UI_view2d_totRect_set(&ar->v2d, xco+XIC+80, (int)(ar->v2d.tot.ymax-ar->v2d.tot.ymin)); - - uiEndBlock(C, block); - uiDrawBlock(C, block); -} - - diff --git a/source/blender/editors/space_action/space_action.c b/source/blender/editors/space_action/space_action.c index d4f8fcfb449..1bc300395ca 100644 --- a/source/blender/editors/space_action/space_action.c +++ b/source/blender/editors/space_action/space_action.c @@ -259,29 +259,12 @@ static void action_channel_area_draw(const bContext *C, ARegion *ar) /* add handlers, stuff you only do once or on area/region changes */ static void action_header_area_init(wmWindowManager *wm, ARegion *ar) { - UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_HEADER, ar->winx, ar->winy); + ED_region_header_init(ar); } static void action_header_area_draw(const bContext *C, ARegion *ar) { - float col[3]; - - /* clear */ - if(ED_screen_area_active(C)) - UI_GetThemeColor3fv(TH_HEADER, col); - else - UI_GetThemeColor3fv(TH_HEADERDESEL, col); - - glClearColor(col[0], col[1], col[2], 0.0); - glClear(GL_COLOR_BUFFER_BIT); - - /* set view2d view matrix for scrolling (without scrollers) */ - UI_view2d_view_ortho(C, &ar->v2d); - - action_header_buttons(C, ar); - - /* restore view matrix? */ - UI_view2d_view_restore(C); + ED_region_header(C, ar); } static void action_channel_area_listener(ARegion *ar, wmNotifier *wmn) @@ -306,8 +289,16 @@ static void action_channel_area_listener(ARegion *ar, wmNotifier *wmn) case ND_KEYS: ED_region_tag_redraw(ar); break; + case ND_MODIFIER: + if(wmn->action == NA_RENAME) + ED_region_tag_redraw(ar); + break; } break; + case NC_ID: + if(wmn->action == NA_RENAME) + ED_region_tag_redraw(ar); + break; default: if(wmn->data==ND_KEYS) ED_region_tag_redraw(ar); @@ -348,6 +339,11 @@ static void action_main_area_listener(ARegion *ar, wmNotifier *wmn) break; } break; + case NC_ID: + if(wmn->action == NA_RENAME) + ED_region_tag_redraw(ar); + break; + default: if(wmn->data==ND_KEYS) ED_region_tag_redraw(ar); @@ -360,25 +356,31 @@ static void action_listener(ScrArea *sa, wmNotifier *wmn) /* context changes */ switch (wmn->category) { case NC_ANIMATION: - ED_area_tag_refresh(sa); + ED_area_tag_redraw(sa); break; case NC_SCENE: - /*switch (wmn->data) { - case ND_OB_ACTIVE: + switch (wmn->data) { + case ND_OB_ACTIVE: /* selection changed, so force refresh to flush */ case ND_OB_SELECT: ED_area_tag_refresh(sa); break; - }*/ - ED_area_tag_refresh(sa); + + default: /* just redrawing the view will do */ + ED_area_tag_redraw(sa); + break; + } break; case NC_OBJECT: - /*switch (wmn->data) { - case ND_BONE_SELECT: + switch (wmn->data) { + case ND_BONE_SELECT: /* selection changed, so force refresh to flush */ case ND_BONE_ACTIVE: ED_area_tag_refresh(sa); break; - }*/ - ED_area_tag_refresh(sa); + + default: /* just redrawing the view will do */ + ED_area_tag_redraw(sa); + break; + } break; case NC_SPACE: if(wmn->data == ND_SPACE_DOPESHEET) @@ -389,25 +391,11 @@ static void action_listener(ScrArea *sa, wmNotifier *wmn) static void action_refresh(const bContext *C, ScrArea *sa) { - SpaceAction *saction = (SpaceAction *)sa->spacedata.first; + //SpaceAction *saction= CTX_wm_space_action(C); - /* updates to data needed depends on Action Editor mode... */ - switch (saction->mode) { - case SACTCONT_DOPESHEET: /* DopeSheet - for now, just all armatures... */ - { - - } - break; - - case SACTCONT_ACTION: /* Action Editor - just active object will do */ - { - Object *ob= CTX_data_active_object(C); - - /* sync changes to bones to the corresponding action channels */ - ANIM_pose_to_action_sync(ob, sa); - } - break; - } + /* update the state of the animchannels in response to changes from the data they represent */ + // TODO: check if we don't want this to happen + ANIM_sync_animchannels_to_data(C); /* region updates? */ // XXX resizing y-extents of tot should go here? @@ -420,6 +408,7 @@ void ED_spacetype_action(void) ARegionType *art; st->spaceid= SPACE_ACTION; + strncpy(st->name, "Action", BKE_ST_MAXNAME); st->new= action_new; st->free= action_free; diff --git a/source/blender/editors/space_api/spacetypes.c b/source/blender/editors/space_api/spacetypes.c index 8cf56ae3eda..90457c05fa7 100644 --- a/source/blender/editors/space_api/spacetypes.c +++ b/source/blender/editors/space_api/spacetypes.c @@ -101,7 +101,8 @@ void ED_spacetypes_init(void) ED_operatortypes_sound(); ED_operatortypes_render(); - ui_view2d_operatortypes(); + UI_view2d_operatortypes(); + UI_buttons_operatortypes(); spacetypes = BKE_spacetypes_list(); for(type=spacetypes->first; type; type=type->next) diff --git a/source/blender/editors/space_buttons/buttons_context.c b/source/blender/editors/space_buttons/buttons_context.c index 0e2769a3557..ade906ce678 100644 --- a/source/blender/editors/space_buttons/buttons_context.c +++ b/source/blender/editors/space_buttons/buttons_context.c @@ -767,7 +767,7 @@ void buttons_context_draw(const bContext *C, uiLayout *layout) ptr= &path->ptr[a]; if(a != 0) - uiItemL(row, "", VICON_SMALL_TRI_RIGHT); + uiItemL(row, "", VICO_SMALL_TRI_RIGHT_VEC); if(ptr->data) { icon= RNA_struct_ui_icon(ptr->type); diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c index 9fc24516d2d..9a4ac872ceb 100644 --- a/source/blender/editors/space_buttons/space_buttons.c +++ b/source/blender/editors/space_buttons/space_buttons.c @@ -236,6 +236,17 @@ static void buttons_header_area_draw(const bContext *C, ARegion *ar) UI_view2d_view_restore(C); } +/* draw a certain button set only if properties area is currently + * showing that button set, to reduce unnecessary drawing. */ +static void buttons_area_redraw(ScrArea *sa, short buttons) +{ + SpaceButs *sbuts= sa->spacedata.first; + + /* if the area's current button set is equal to the one to redraw */ + if(sbuts->mainb == buttons) + ED_area_tag_redraw(sa); +} + /* reused! */ static void buttons_area_listener(ScrArea *sa, wmNotifier *wmn) { @@ -244,46 +255,63 @@ static void buttons_area_listener(ScrArea *sa, wmNotifier *wmn) /* context changes */ switch(wmn->category) { case NC_SCENE: - /* lazy general redraw tag here, in case more than 1 propertie window is opened - Not all RNA props have a ND_sub notifier(yet) */ - ED_area_tag_redraw(sa); switch(wmn->data) { case ND_FRAME: - case ND_MODE: case ND_RENDER_OPTIONS: - case ND_KEYINGSET: - case ND_LAYER: - ED_area_tag_redraw(sa); + buttons_area_redraw(sa, BCONTEXT_RENDER); break; - case ND_OB_ACTIVE: ED_area_tag_redraw(sa); sbuts->preview= 1; break; + case ND_KEYINGSET: + buttons_area_redraw(sa, BCONTEXT_SCENE); + break; + case ND_MODE: + case ND_LAYER: + default: + ED_area_tag_redraw(sa); + break; } break; case NC_OBJECT: - ED_area_tag_redraw(sa); - /* lazy general redraw tag here, in case more than 1 propertie window is opened - Not all RNA props have a ND_ notifier(yet) */ switch(wmn->data) { case ND_TRANSFORM: + buttons_area_redraw(sa, BCONTEXT_OBJECT); + break; case ND_BONE_ACTIVE: case ND_BONE_SELECT: - case ND_MODIFIER: - case ND_CONSTRAINT: - ED_area_tag_redraw(sa); + buttons_area_redraw(sa, BCONTEXT_BONE); + buttons_area_redraw(sa, BCONTEXT_BONE_CONSTRAINT); break; + case ND_MODIFIER: + if(wmn->action == NA_RENAME) + ED_area_tag_redraw(sa); + else + buttons_area_redraw(sa, BCONTEXT_MODIFIER); + break; + case ND_CONSTRAINT: + buttons_area_redraw(sa, BCONTEXT_CONSTRAINT); + break; + case ND_PARTICLE_DATA: + buttons_area_redraw(sa, BCONTEXT_PARTICLE); + break; + case ND_DRAW: case ND_SHADING: case ND_SHADING_DRAW: /* currently works by redraws... if preview is set, it (re)starts job */ sbuts->preview= 1; break; + default: + /* Not all object RNA props have a ND_ notifier (yet) */ + ED_area_tag_redraw(sa); + break; } break; case NC_GEOM: switch(wmn->data) { case ND_SELECT: + case ND_DATA: ED_area_tag_redraw(sa); break; } @@ -299,7 +327,13 @@ static void buttons_area_listener(ScrArea *sa, wmNotifier *wmn) } break; case NC_WORLD: + buttons_area_redraw(sa, BCONTEXT_WORLD); + sbuts->preview= 1; + break; case NC_LAMP: + buttons_area_redraw(sa, BCONTEXT_DATA); + sbuts->preview= 1; + break; case NC_TEXTURE: ED_area_tag_redraw(sa); sbuts->preview= 1; @@ -309,7 +343,7 @@ static void buttons_area_listener(ScrArea *sa, wmNotifier *wmn) ED_area_tag_redraw(sa); break; case NC_ID: - if(wmn->data == ND_ID_RENAME) + if(wmn->action == NA_RENAME) ED_area_tag_redraw(sa); break; } @@ -325,6 +359,7 @@ void ED_spacetype_buttons(void) ARegionType *art; st->spaceid= SPACE_BUTS; + strncpy(st->name, "Buttons", BKE_ST_MAXNAME); st->new= buttons_new; st->free= buttons_free; diff --git a/source/blender/editors/space_console/console_ops.c b/source/blender/editors/space_console/console_ops.c index a2e11dc6bd5..89c058ad7f3 100644 --- a/source/blender/editors/space_console/console_ops.c +++ b/source/blender/editors/space_console/console_ops.c @@ -369,9 +369,6 @@ void CONSOLE_OT_move(wmOperatorType *ot) ot->exec= move_exec; ot->poll= console_edit_poll; - /* flags */ - ot->flag= OPTYPE_REGISTER; - /* properties */ RNA_def_enum(ot->srna, "type", move_type_items, LINE_BEGIN, "Type", "Where to move cursor to."); } @@ -415,9 +412,6 @@ void CONSOLE_OT_insert(wmOperatorType *ot) ot->invoke= insert_invoke; ot->poll= console_edit_poll; - /* flags */ - ot->flag= OPTYPE_REGISTER; - /* properties */ RNA_def_string(ot->srna, "text", "", 0, "Text", "Text to insert at the cursor position."); } @@ -482,9 +476,6 @@ void CONSOLE_OT_delete(wmOperatorType *ot) ot->exec= delete_exec; ot->poll= console_edit_poll; - /* flags */ - ot->flag= OPTYPE_REGISTER; - /* properties */ RNA_def_enum(ot->srna, "type", delete_type_items, DEL_NEXT_CHAR, "Type", "Which part of the text to delete."); } @@ -525,9 +516,6 @@ void CONSOLE_OT_clear(wmOperatorType *ot) /* api callbacks */ ot->exec= clear_exec; ot->poll= console_edit_poll; - - /* flags */ - ot->flag= OPTYPE_REGISTER; /* properties */ RNA_def_boolean(ot->srna, "scrollback", 1, "Scrollback", "Clear the scrollback history"); @@ -587,9 +575,6 @@ void CONSOLE_OT_history_cycle(wmOperatorType *ot) /* api callbacks */ ot->exec= history_cycle_exec; ot->poll= console_edit_poll; - - /* flags */ - ot->flag= OPTYPE_REGISTER; /* properties */ RNA_def_boolean(ot->srna, "reverse", 0, "Reverse", "reverse cycle history"); @@ -635,9 +620,6 @@ void CONSOLE_OT_history_append(wmOperatorType *ot) /* api callbacks */ ot->exec= history_append_exec; ot->poll= console_edit_poll; - - /* flags */ - ot->flag= OPTYPE_REGISTER; /* properties */ RNA_def_string(ot->srna, "text", "", 0, "Text", "Text to insert at the cursor position."); @@ -683,9 +665,6 @@ void CONSOLE_OT_scrollback_append(wmOperatorType *ot) /* api callbacks */ ot->exec= scrollback_append_exec; ot->poll= console_edit_poll; - - /* flags */ - ot->flag= OPTYPE_REGISTER; /* properties */ RNA_def_string(ot->srna, "text", "", 0, "Text", "Text to insert at the cursor position."); @@ -727,9 +706,6 @@ void CONSOLE_OT_copy(wmOperatorType *ot) ot->poll= console_edit_poll; ot->exec= copy_exec; - /* flags */ - ot->flag= OPTYPE_REGISTER; - /* properties */ } @@ -762,9 +738,6 @@ void CONSOLE_OT_paste(wmOperatorType *ot) ot->poll= console_edit_poll; ot->exec= paste_exec; - /* flags */ - ot->flag= OPTYPE_REGISTER; - /* properties */ } @@ -795,9 +768,6 @@ void CONSOLE_OT_zoom(wmOperatorType *ot) /* api callbacks */ ot->exec= zoom_exec; ot->poll= console_poll; - - /* flags */ - /* ot->flag= OPTYPE_REGISTER; */ /* super annoying */ /* properties */ RNA_def_int(ot->srna, "delta", 0, 0, INT_MAX, "Delta", "Scale the view font.", 0, 1000); diff --git a/source/blender/editors/space_console/space_console.c b/source/blender/editors/space_console/space_console.c index 4d2f816ba6b..7d23421c5cf 100644 --- a/source/blender/editors/space_console/space_console.c +++ b/source/blender/editors/space_console/space_console.c @@ -326,18 +326,19 @@ static void console_main_area_listener(ScrArea *sa, wmNotifier *wmn) /* only called once, from space/spacetypes.c */ void ED_spacetype_console(void) { - SpaceType *sc= MEM_callocN(sizeof(SpaceType), "spacetype console"); + SpaceType *st= MEM_callocN(sizeof(SpaceType), "spacetype console"); ARegionType *art; - sc->spaceid= SPACE_CONSOLE; + st->spaceid= SPACE_CONSOLE; + strncpy(st->name, "Console", BKE_ST_MAXNAME); - sc->new= console_new; - sc->free= console_free; - sc->init= console_init; - sc->duplicate= console_duplicate; - sc->operatortypes= console_operatortypes; - sc->keymap= console_keymap; - sc->listener= console_main_area_listener; + st->new= console_new; + st->free= console_free; + st->init= console_init; + st->duplicate= console_duplicate; + st->operatortypes= console_operatortypes; + st->keymap= console_keymap; + st->listener= console_main_area_listener; /* regions: main window */ art= MEM_callocN(sizeof(ARegionType), "spacetype console region"); @@ -350,7 +351,7 @@ void ED_spacetype_console(void) - BLI_addhead(&sc->regiontypes, art); + BLI_addhead(&st->regiontypes, art); /* regions: header */ art= MEM_callocN(sizeof(ARegionType), "spacetype console region"); @@ -361,8 +362,8 @@ void ED_spacetype_console(void) art->init= console_header_area_init; art->draw= console_header_area_draw; - BLI_addhead(&sc->regiontypes, art); + BLI_addhead(&st->regiontypes, art); - BKE_spacetype_register(sc); + BKE_spacetype_register(st); } diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c index a1f9a9fd250..93bedd0b866 100644 --- a/source/blender/editors/space_file/file_draw.c +++ b/source/blender/editors/space_file/file_draw.c @@ -310,6 +310,8 @@ static int get_file_icon(struct direntry *file) return ICON_FILE_SOUND; else if (file->flags & FTFONTFILE) return ICON_FILE_FONT; + else if (file->flags & BTXFILE) + return ICON_FILE_BLANK; else return ICON_FILE_BLANK; } diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c index 2d4185e871a..8fe1ddd636d 100644 --- a/source/blender/editors/space_file/file_ops.c +++ b/source/blender/editors/space_file/file_ops.c @@ -29,6 +29,7 @@ #include "BKE_context.h" #include "BKE_screen.h" #include "BKE_global.h" +#include "BKE_report.h" #include "BLI_blenlib.h" #include "BLI_storage_types.h" @@ -745,32 +746,55 @@ int file_next_exec(bContext *C, wmOperator *unused) return OPERATOR_FINISHED; } -int file_directory_new_exec(bContext *C, wmOperator *unused) +/* create a new, non-existing folder name, returns 1 if successful, 0 if name couldn't be created. + The actual name is returned in 'name', 'folder' contains the complete path, including the new folder name. +*/ +static int new_folder_path(const char* parent, char *folder, char *name) { - char tmpstr[FILE_MAX]; - char tmpdir[FILE_MAXFILE]; int i = 1; + int len = 0; + BLI_strncpy(name, "New Folder", FILE_MAXFILE); + BLI_join_dirfile(folder, parent, name); + /* check whether folder with the name already exists, in this case + add number to the name. Check length of generated name to avoid + crazy case of huge number of folders each named 'New Folder (x)' */ + while (BLI_exists(folder) && (lenparams) { - - BLI_strncpy(tmpstr, sfile->params->dir, FILE_MAX); - BLI_join_dirfile(tmpstr, tmpstr, "New Folder"); - while (BLI_exists(tmpstr)) { - BLI_snprintf(tmpdir, FILE_MAXFILE, "New Folder(%d)", i++); - BLI_strncpy(tmpstr, sfile->params->dir, FILE_MAX); - BLI_join_dirfile(tmpstr, tmpstr, tmpdir); - } - BLI_recurdir_fileops(tmpstr); - if (BLI_exists(tmpstr)) { - BLI_strncpy(sfile->params->renamefile, tmpdir, FILE_MAXFILE); - } else { - filelist_free(sfile->files); - filelist_parent(sfile->files); - BLI_strncpy(sfile->params->dir, filelist_dir(sfile->files), FILE_MAX); - } - } + if(!sfile->params) { + BKE_report(op->reports,RPT_WARNING, "No parent directory given."); + return OPERATOR_CANCELLED; + } + + /* 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."); + return OPERATOR_CANCELLED; + } + + /* rename the file */ + BLI_recurdir_fileops(path); + + if (!BLI_exists(path)) { + BKE_report(op->reports,RPT_ERROR, "Couldn't create new folder."); + return OPERATOR_CANCELLED; + } + + /* now remember file to jump into editing */ + BLI_strncpy(sfile->params->renamefile, name, FILE_MAXFILE); WM_event_add_notifier(C, NC_SPACE|ND_SPACE_FILE_LIST, NULL); return OPERATOR_FINISHED; diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c index 640f365b073..81aa63dcad9 100644 --- a/source/blender/editors/space_file/filelist.c +++ b/source/blender/editors/space_file/filelist.c @@ -871,6 +871,8 @@ void filelist_setfiletypes(struct FileList* filelist, short has_quicktime) || BLI_testextensie(file->relname, ".otf") || BLI_testextensie(file->relname, ".otc")) { file->flags |= FTFONTFILE; + } else if(BLI_testextensie(file->relname, ".btx")) { + file->flags |= BTXFILE; } else if (has_quicktime){ if( BLI_testextensie(file->relname, ".int") || BLI_testextensie(file->relname, ".inta") diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c index d681a58b276..bf580545455 100644 --- a/source/blender/editors/space_file/filesel.c +++ b/source/blender/editors/space_file/filesel.c @@ -161,6 +161,8 @@ short ED_fileselect_set_params(SpaceFile *sfile) params->filter |= RNA_boolean_get(op->ptr, "filter_text") ? TEXTFILE : 0; if(RNA_struct_find_property(op->ptr, "filter_folder")) params->filter |= RNA_boolean_get(op->ptr, "filter_folder") ? FOLDERFILE : 0; + if(RNA_struct_find_property(op->ptr, "filter_btx")) + params->filter |= RNA_boolean_get(op->ptr, "filter_btx") ? BTXFILE : 0; if (params->filter != 0) params->flag |= FILE_FILTER; diff --git a/source/blender/editors/space_file/fsmenu.c b/source/blender/editors/space_file/fsmenu.c index b45b57c6be9..214c5ff685b 100644 --- a/source/blender/editors/space_file/fsmenu.c +++ b/source/blender/editors/space_file/fsmenu.c @@ -284,8 +284,10 @@ void fsmenu_read_file(struct FSMenu* fsmenu, const char *filename) #else #ifdef __APPLE__ { +#if (MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4) OSErr err=noErr; int i; + char *home; /* loop through all the OS X Volumes, and add them to the SYSTEM section */ for (i=1; err!=nsvErr; i++) @@ -297,9 +299,132 @@ void fsmenu_read_file(struct FSMenu* fsmenu, const char *filename) if (err != noErr) continue; + FSRefMakePath(&dir, path, FILE_MAXDIR+FILE_MAXFILE); + if (strcmp((char*)path, "/home") && strcmp((char*)path, "/net")) + { /* /net and /home are meaningless on OSX, home folders are stored in /Users */ + fsmenu_insert_entry(fsmenu, FS_CATEGORY_SYSTEM, (char *)path, 1, 0); + } + } + + /* As 10.4 doesn't provide proper API to retrieve the favorite places, + assume they are the standard ones + TODO : replace hardcoded paths with proper BLI_get_folder calls */ + home = BLI_gethome(); + if(home) { + BLI_snprintf(line, 256, "%s/", home); + fsmenu_insert_entry(fsmenu, FS_CATEGORY_BOOKMARKS, line, 1, 0); + BLI_snprintf(line, 256, "%s/Desktop/", home); + if (BLI_exists(line)) { + fsmenu_insert_entry(fsmenu, FS_CATEGORY_BOOKMARKS, line, 1, 0); + } + BLI_snprintf(line, 256, "%s/Documents/", home); + if (BLI_exists(line)) { + fsmenu_insert_entry(fsmenu, FS_CATEGORY_BOOKMARKS, line, 1, 0); + } + BLI_snprintf(line, 256, "%s/Pictures/", home); + if (BLI_exists(line)) { + fsmenu_insert_entry(fsmenu, FS_CATEGORY_BOOKMARKS, line, 1, 0); + } + BLI_snprintf(line, 256, "%s/Music/", home); + if (BLI_exists(line)) { + fsmenu_insert_entry(fsmenu, FS_CATEGORY_BOOKMARKS, line, 1, 0); + } + BLI_snprintf(line, 256, "%s/Movies/", home); + if (BLI_exists(line)) { + fsmenu_insert_entry(fsmenu, FS_CATEGORY_BOOKMARKS, line, 1, 0); + } + } +#else + /* 10.5 provides ability to retrieve Finder favorite places */ + UInt32 seed; + OSErr err = noErr; + CFArrayRef pathesArray; + LSSharedFileListRef list; + LSSharedFileListItemRef itemRef; + CFIndex i, pathesCount; + CFURLRef cfURL = NULL; + CFStringRef pathString = NULL; + + /* First get local mounted volumes */ + list = LSSharedFileListCreate(NULL, kLSSharedFileListFavoriteVolumes, NULL); + pathesArray = LSSharedFileListCopySnapshot(list, &seed); + pathesCount = CFArrayGetCount(pathesArray); + + for (i=0; iptr, "increment", 1); kmi = WM_keymap_add_item(keymap, "FILE_OT_filenum", PADPLUSKEY, KM_PRESS, KM_SHIFT, 0); @@ -508,6 +507,7 @@ void ED_spacetype_file(void) ARegionType *art; st->spaceid= SPACE_FILE; + strncpy(st->name, "File", BKE_ST_MAXNAME); st->new= file_new; st->free= file_free; diff --git a/source/blender/editors/space_graph/graph_buttons.c b/source/blender/editors/space_graph/graph_buttons.c index 05987087288..1eaac8ffd20 100644 --- a/source/blender/editors/space_graph/graph_buttons.c +++ b/source/blender/editors/space_graph/graph_buttons.c @@ -198,7 +198,7 @@ static void graph_panel_properties(const bContext *C, Panel *pa) /* RNA-Path Editing - only really should be enabled when things aren't working */ col= uiLayoutColumn(layout, 1); uiLayoutSetEnabled(col, (fcu->flag & FCURVE_DISABLED)); - uiItemR(col, "", ICON_RNA, &fcu_ptr, "rna_path", 0); + uiItemR(col, "", ICON_RNA, &fcu_ptr, "data_path", 0); uiItemR(col, NULL, 0, &fcu_ptr, "array_index", 0); /* color settings */ @@ -396,7 +396,7 @@ static void graph_panel_drivers(const bContext *C, Panel *pa) col= uiLayoutColumn(box, 1); block= uiLayoutGetBlock(col); /* rna path */ - uiTemplatePathBuilder(col, (bContext *)C, &dtar_ptr, "rna_path", &root_ptr, "Path"); + uiTemplatePathBuilder(col, (bContext *)C, &dtar_ptr, "data_path", &root_ptr, "Path"); /* array index */ // TODO: this needs selector which limits it to ok values diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c index db50ad983da..8ac3f2efefb 100644 --- a/source/blender/editors/space_graph/graph_edit.c +++ b/source/blender/editors/space_graph/graph_edit.c @@ -386,7 +386,7 @@ static int graphkeys_clear_ghostcurves_exec(bContext *C, wmOperator *op) void GRAPH_OT_ghost_curves_clear (wmOperatorType *ot) { /* identifiers */ - ot->name= "Create Ghost Curves"; + ot->name= "Clear Ghost Curves"; ot->idname= "GRAPH_OT_ghost_curves_clear"; ot->description= "Clear F-Curve snapshots (Ghosts) for active Graph Editor."; @@ -428,9 +428,7 @@ static void insert_graph_keys(bAnimContext *ac, short mode) ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* init keyframing flag */ - if (IS_AUTOKEY_FLAG(AUTOMATKEY)) flag |= INSERTKEY_MATRIX; - if (IS_AUTOKEY_FLAG(INSERTNEEDED)) flag |= INSERTKEY_NEEDED; - if (IS_AUTOKEY_MODE(scene, EDITKEYS)) flag |= INSERTKEY_REPLACE; + flag = ANIM_get_keyframing_flags(scene, 1); /* insert keyframes */ for (ale= anim_data.first; ale; ale= ale->next) { @@ -754,7 +752,7 @@ static int graphkeys_duplicate_invoke(bContext *C, wmOperator *op, wmEvent *even graphkeys_duplicate_exec(C, op); RNA_int_set(op->ptr, "mode", TFM_TRANSLATION); - WM_operator_name_call(C, "TFM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr); + WM_operator_name_call(C, "TRANSFORM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/space_graph/graph_header.c b/source/blender/editors/space_graph/graph_header.c deleted file mode 100644 index bf8777164c5..00000000000 --- a/source/blender/editors/space_graph/graph_header.c +++ /dev/null @@ -1,311 +0,0 @@ -/** - * $Id$ - * - * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2008 Blender Foundation. - * All rights reserved. - * - * - * Contributor(s): Blender Foundation - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#include -#include - -#include "DNA_anim_types.h" -#include "DNA_space_types.h" -#include "DNA_scene_types.h" -#include "DNA_screen_types.h" -#include "DNA_windowmanager_types.h" - -#include "MEM_guardedalloc.h" - -#include "BLI_blenlib.h" - -#include "BKE_context.h" -#include "BKE_screen.h" - -#include "ED_anim_api.h" -#include "ED_transform.h" -#include "ED_screen.h" -#include "ED_types.h" -#include "ED_util.h" - -#include "RNA_access.h" - -#include "WM_api.h" -#include "WM_types.h" - -#include "BIF_gl.h" -#include "BIF_glutil.h" - -#include "UI_interface.h" -#include "UI_resources.h" -#include "UI_view2d.h" - -#include "graph_intern.h" - -/* ********************************************************* */ -/* Menu Defines... */ - -static void graph_viewmenu(bContext *C, uiLayout *layout, void *arg_unused) -{ - bScreen *sc= CTX_wm_screen(C); - ScrArea *sa= CTX_wm_area(C); - SpaceIpo *sipo= CTX_wm_space_graph(C); - PointerRNA spaceptr; - - /* retrieve state */ - RNA_pointer_create(&sc->id, &RNA_SpaceGraphEditor, sipo, &spaceptr); - - /* create menu */ - uiItemO(layout, NULL, ICON_MENU_PANEL, "GRAPH_OT_properties"); - - uiItemS(layout); - - uiItemR(layout, NULL, 0, &spaceptr, "show_cframe_indicator", 0); - uiItemR(layout, NULL, 0, &spaceptr, "show_cursor", 0); - uiItemR(layout, NULL, 0, &spaceptr, "show_sliders", 0); - uiItemR(layout, NULL, 0, &spaceptr, "automerge_keyframes", 0); - - if (sipo->flag & SIPO_NOHANDLES) - uiItemO(layout, "Show Handles", ICON_CHECKBOX_DEHLT, "GRAPH_OT_handles_view_toggle"); - else - uiItemO(layout, "Show Handles", ICON_CHECKBOX_HLT, "GRAPH_OT_handles_view_toggle"); - - uiItemR(layout, NULL, 0, &spaceptr, "only_selected_curves_handles", 0); - uiItemR(layout, NULL, 0, &spaceptr, "only_selected_keyframe_handles", 0); - - - if (sipo->flag & SIPO_DRAWTIME) - uiItemO(layout, "Show Frames", 0, "ANIM_OT_time_toggle"); - else - uiItemO(layout, "Show Seconds", 0, "ANIM_OT_time_toggle"); - - uiItemS(layout); - - uiItemO(layout, NULL, 0, "ANIM_OT_previewrange_set"); - uiItemO(layout, NULL, 0, "ANIM_OT_previewrange_clear"); - - uiItemO(layout, NULL, 0, "GRAPH_OT_previewrange_set"); - - uiItemS(layout); - - uiItemO(layout, NULL, 0, "GRAPH_OT_frame_jump"); - - uiItemO(layout, NULL, 0, "GRAPH_OT_view_all"); - - if (sa->full) - uiItemO(layout, NULL, 0, "SCREEN_OT_screen_full_area"); // "Tile Window", Ctrl UpArrow - else - uiItemO(layout, NULL, 0, "SCREEN_OT_screen_full_area"); // "Maximize Window", Ctrl DownArrow -} - -static void graph_selectmenu(bContext *C, uiLayout *layout, void *arg_unused) -{ - uiItemO(layout, NULL, 0, "GRAPH_OT_select_all_toggle"); - uiItemBooleanO(layout, "Invert All", 0, "GRAPH_OT_select_all_toggle", "invert", 1); - - uiItemS(layout); - - uiItemO(layout, NULL, 0, "GRAPH_OT_select_border"); - uiItemBooleanO(layout, "Border Axis Range", 0, "GRAPH_OT_select_border", "axis_range", 1); - - uiItemS(layout); - - uiItemEnumO(layout, "Columns on Selected Keys", 0, "GRAPH_OT_select_column", "mode", GRAPHKEYS_COLUMNSEL_KEYS); - uiItemEnumO(layout, "Column on Current Frame", 0, "GRAPH_OT_select_column", "mode", GRAPHKEYS_COLUMNSEL_CFRA); - - uiItemEnumO(layout, "Columns on Selected Markers", 0, "GRAPH_OT_select_column", "mode", GRAPHKEYS_COLUMNSEL_MARKERS_COLUMN); - uiItemEnumO(layout, "Between Selected Markers", 0, "GRAPH_OT_select_column", "mode", GRAPHKEYS_COLUMNSEL_MARKERS_BETWEEN); -} - -static void graph_channelmenu(bContext *C, uiLayout *layout, void *arg_unused) -{ - uiItemO(layout, NULL, 0, "ANIM_OT_channels_setting_toggle"); - uiItemO(layout, NULL, 0, "ANIM_OT_channels_setting_enable"); - uiItemO(layout, NULL, 0, "ANIM_OT_channels_setting_disable"); - - uiItemS(layout); - - uiItemO(layout, NULL, 0, "ANIM_OT_channels_editable_toggle"); - - uiItemS(layout); - - uiItemO(layout, NULL, 0, "ANIM_OT_channels_expand"); - uiItemO(layout, NULL, 0, "ANIM_OT_channels_collapse"); -} - -static void graph_edit_transformmenu(bContext *C, uiLayout *layout, void *arg_unused) -{ - uiItemO(layout, "Grab/Move", 0, "TFM_OT_translate"); - uiItemEnumO(layout, "Extend", 0, "TFM_OT_transform", "mode", TFM_TIME_EXTEND); - uiItemO(layout, "Rotate", 0, "TFM_OT_rotate"); - uiItemO(layout, "Scale", 0, "TFM_OT_resize"); -} - -static void graph_editmenu(bContext *C, uiLayout *layout, void *arg_unused) -{ - uiItemMenuF(layout, "Transform", 0, graph_edit_transformmenu, NULL); - uiItemMenuEnumO(layout, "Snap", 0, "GRAPH_OT_snap", "type"); - uiItemMenuEnumO(layout, "Mirror", 0, "GRAPH_OT_mirror", "type"); - - uiItemS(layout); - - uiItemO(layout, NULL, 0, "GRAPH_OT_keyframe_insert"); - uiItemO(layout, NULL, 0, "GRAPH_OT_fmodifier_add"); - - uiItemS(layout); - - uiItemO(layout, NULL, 0, "GRAPH_OT_duplicate"); - uiItemO(layout, NULL, 0, "GRAPH_OT_delete"); - - uiItemS(layout); - - uiItemMenuEnumO(layout, "Handle Type", 0, "GRAPH_OT_handle_type", "type"); - uiItemMenuEnumO(layout, "Interpolation Mode", 0, "GRAPH_OT_interpolation_type", "type"); - uiItemMenuEnumO(layout, "Extrapolation Mode", 0, "GRAPH_OT_extrapolation_type", "type"); - - uiItemS(layout); - - uiItemO(layout, NULL, 0, "GRAPH_OT_clean"); - uiItemO(layout, NULL, 0, "GRAPH_OT_sample"); - uiItemO(layout, NULL, 0, "GRAPH_OT_bake"); - - uiItemS(layout); - - uiItemO(layout, NULL, 0, "GRAPH_OT_copy"); - uiItemO(layout, NULL, 0, "GRAPH_OT_paste"); -} - -/* ********************************************************* */ - -enum { - B_REDR = 0, - B_MODECHANGE, -} eGraphEdit_Events; - -static void do_graph_buttons(bContext *C, void *arg, int event) -{ - ED_area_tag_refresh(CTX_wm_area(C)); - ED_area_tag_redraw(CTX_wm_area(C)); -} - -static char *garound_pup(const bContext *C) -{ - static char string[512]; - char *str = string; - - str += sprintf(str, "%s", "Pivot: %t"); - str += sprintf(str, "%s", "|Bounding Box Center %x0"); - //str += sprintf(str, "%s", "|Median Point %x3"); - str += sprintf(str, "%s", "|2D Cursor %x1"); - str += sprintf(str, "%s", "|Individual Centers %x2"); - return string; -} - -void graph_header_buttons(const bContext *C, ARegion *ar) -{ - SpaceIpo *sipo= CTX_wm_space_graph(C); - ScrArea *sa= CTX_wm_area(C); - uiBlock *block; - int xco, yco= 3; - - block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS); - uiBlockSetHandleFunc(block, do_graph_buttons, NULL); - - /* standard buttosn in header - viewtype selector and menus */ - xco= ED_area_header_standardbuttons(C, block, yco); - - if ((sa->flag & HEADER_NO_PULLDOWN)==0) { - int xmax; - - xmax= GetButStringLength("View"); - uiDefMenuBut(block, graph_viewmenu, NULL, "View", xco, yco, xmax-3, 20, ""); - xco+= xmax; - - xmax= GetButStringLength("Select"); - uiDefMenuBut(block, graph_selectmenu, NULL, "Select", xco, yco, xmax-3, 20, ""); - xco+= xmax; - - xmax= GetButStringLength("Channel"); - uiDefMenuBut(block, graph_channelmenu, NULL, "Channel", xco, yco, xmax-3, 20, ""); - xco+= xmax; - - xmax= GetButStringLength("Key"); - uiDefMenuBut(block, graph_editmenu, NULL, "Key", xco, yco, xmax-3, 20, ""); - xco+= xmax; - } - - uiBlockSetEmboss(block, UI_EMBOSS); - - /* mode selector */ - uiDefButS(block, MENU, B_MODECHANGE, - "Editor Mode %t|F-Curve Editor %x0|Drivers %x1", - xco,yco,110,YIC, &sipo->mode, 0, 1, 0, 0, - "Editing modes for this editor"); - xco+= 120; - - /* filtering buttons */ - xco= ANIM_headerUI_standard_buttons(C, sipo->ads, block, xco, yco); - - /* auto-snap selector */ - if (sipo->flag & SIPO_DRAWTIME) { - uiDefButS(block, MENU, B_REDR, - "Auto-Snap Keyframes %t|No Time-Snap %x0|Nearest Second %x2|Nearest Marker %x3", - xco,yco,90,YIC, &sipo->autosnap, 0, 1, 0, 0, - "Auto-snapping mode for keyframe times when transforming"); - } - else { - uiDefButS(block, MENU, B_REDR, - "Auto-Snap Keyframes %t|No Time-Snap %x0|Nearest Frame %x2|Nearest Marker %x3", - xco,yco,90,YIC, &sipo->autosnap, 0, 1, 0, 0, - "Auto-snapping mode for keyframe times when transforming"); - } - xco += 98; - - /* pivot mode setting */ - uiDefIconTextButI(block, ICONTEXTROW,B_REDR, ICON_ROTATE, garound_pup(C), xco,yco,XIC+10,YIC, &(sipo->around), 0, 3.0, 0, 0, "Rotation/Scaling Pivot"); - xco+= XIC+10; - - /* copy + paste */ - uiBlockBeginAlign(block); - uiDefIconButO(block, BUT, "GRAPH_OT_copy", WM_OP_INVOKE_REGION_WIN, ICON_COPYDOWN, xco+=XIC,yco,XIC,YIC, "Copies the selected keyframes from the selected channel(s) to the buffer"); - uiDefIconButO(block, BUT, "GRAPH_OT_paste", WM_OP_INVOKE_REGION_WIN, ICON_PASTEDOWN, xco+=XIC,yco,XIC,YIC, "Pastes the keyframes from the buffer"); - uiBlockEndAlign(block); - xco += (XIC + 8); - - /* ghost curves */ - // XXX these icons need to be changed - if (sipo->ghostCurves.first) - uiDefIconButO(block, BUT, "GRAPH_OT_ghost_curves_clear", WM_OP_INVOKE_REGION_WIN, ICON_GHOST_DISABLED, xco,yco,XIC,YIC, "Clear F-Curve snapshots (Ghosts) for this Graph Editor instance"); - else - uiDefIconButO(block, BUT, "GRAPH_OT_ghost_curves_create", WM_OP_INVOKE_REGION_WIN, ICON_GHOST_ENABLED, xco,yco,XIC,YIC, "Create snapshot (Ghosts) of selected F-Curves as background aid for this Graph Editor instance"); - xco+= XIC; - - - /* always as last */ - UI_view2d_totRect_set(&ar->v2d, xco+XIC+80, (int)(ar->v2d.tot.ymax - ar->v2d.tot.ymin)); - - uiEndBlock(C, block); - uiDrawBlock(C, block); -} - - diff --git a/source/blender/editors/space_graph/space_graph.c b/source/blender/editors/space_graph/space_graph.c index 24f87906391..8902f4df314 100644 --- a/source/blender/editors/space_graph/space_graph.c +++ b/source/blender/editors/space_graph/space_graph.c @@ -350,29 +350,12 @@ static void graph_channel_area_draw(const bContext *C, ARegion *ar) /* add handlers, stuff you only do once or on area/region changes */ static void graph_header_area_init(wmWindowManager *wm, ARegion *ar) { - UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_HEADER, ar->winx, ar->winy); + ED_region_header_init(ar); } static void graph_header_area_draw(const bContext *C, ARegion *ar) { - float col[3]; - - /* clear */ - if(ED_screen_area_active(C)) - UI_GetThemeColor3fv(TH_HEADER, col); - else - UI_GetThemeColor3fv(TH_HEADERDESEL, col); - - glClearColor(col[0], col[1], col[2], 0.0); - glClear(GL_COLOR_BUFFER_BIT); - - /* set view2d view matrix for scrolling (without scrollers) */ - UI_view2d_view_ortho(C, &ar->v2d); - - graph_header_buttons(C, ar); - - /* restore view matrix? */ - UI_view2d_view_restore(C); + ED_region_header(C, ar); } /* add handlers, stuff you only do once or on area/region changes */ @@ -404,6 +387,7 @@ static void graph_region_listener(ARegion *ar, wmNotifier *wmn) case ND_OB_ACTIVE: case ND_FRAME: case ND_MARKERS: + case ND_SEQUENCER_SELECT: ED_region_tag_redraw(ar); break; } @@ -415,15 +399,28 @@ static void graph_region_listener(ARegion *ar, wmNotifier *wmn) case ND_KEYS: ED_region_tag_redraw(ar); break; + case ND_MODIFIER: + if(wmn->action == NA_RENAME) + ED_region_tag_redraw(ar); + break; } break; case NC_NODE: + switch(wmn->data) { + case ND_NODE_SELECT: + ED_region_tag_redraw(ar); + break; + } switch(wmn->action) { case NA_EDITED: ED_region_tag_redraw(ar); break; } break; + case NC_ID: + if(wmn->action == NA_RENAME) + ED_region_tag_redraw(ar); + break; default: if(wmn->data==ND_KEYS) ED_region_tag_redraw(ar); @@ -437,25 +434,34 @@ static void graph_listener(ScrArea *sa, wmNotifier *wmn) /* context changes */ switch (wmn->category) { case NC_ANIMATION: + /* unlike for DopeSheet, we want refresh not redraw here, + * since F-Curve colors may need setting + */ ED_area_tag_refresh(sa); break; case NC_SCENE: - /*switch (wmn->data) { - case ND_OB_ACTIVE: + switch (wmn->data) { + case ND_OB_ACTIVE: /* selection changed, so force refresh to flush */ case ND_OB_SELECT: ED_area_tag_refresh(sa); break; - }*/ - ED_area_tag_refresh(sa); + + default: /* just redrawing the view will do */ + ED_area_tag_redraw(sa); + break; + } break; case NC_OBJECT: - /*switch (wmn->data) { - case ND_BONE_SELECT: + switch (wmn->data) { + case ND_BONE_SELECT: /* selection changed, so force refresh to flush */ case ND_BONE_ACTIVE: ED_area_tag_refresh(sa); break; - }*/ - ED_area_tag_refresh(sa); + + default: /* just redrawing the view will do */ + ED_area_tag_redraw(sa); + break; + } break; case NC_SPACE: if(wmn->data == ND_SPACE_GRAPH) @@ -492,6 +498,10 @@ static void graph_refresh(const bContext *C, ScrArea *sa) /* region updates? */ // XXX resizing y-extents of tot should go here? + /* update the state of the animchannels in response to changes from the data they represent */ + // TODO: check if we don't want this to happen + ANIM_sync_animchannels_to_data(C); + /* init/adjust F-Curve colors */ if (ANIM_animdata_get_context(C, &ac)) { ListBase anim_data = {NULL, NULL}; @@ -551,7 +561,7 @@ static void graph_refresh(const bContext *C, ScrArea *sa) /* determine color 'automatically' using 'magic function' which uses the given args * of current item index + total items to determine some RGB color */ - ipo_rainbow(i, items, fcu->color); + getcolor_fcurve_rainbow(i, items, fcu->color); } break; } @@ -569,6 +579,7 @@ void ED_spacetype_ipo(void) ARegionType *art; st->spaceid= SPACE_IPO; + strncpy(st->name, "Graph", BKE_ST_MAXNAME); st->new= graph_new; st->free= graph_free; diff --git a/source/blender/editors/space_image/image_buttons.c b/source/blender/editors/space_image/image_buttons.c index a184ea2b2c4..bb989b35cd5 100644 --- a/source/blender/editors/space_image/image_buttons.c +++ b/source/blender/editors/space_image/image_buttons.c @@ -1024,7 +1024,7 @@ void uiTemplateImage(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propn if(ima->source != IMA_SRC_GENERATED) { uiItemS(layout); - split= uiLayoutSplit(layout, 0); + split= uiLayoutSplit(layout, 0, 0); col= uiLayoutColumn(split, 0); uiItemR(col, NULL, 0, &imaptr, "fields", 0); @@ -1040,7 +1040,7 @@ void uiTemplateImage(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propn if(ELEM(ima->source, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE)) { uiItemS(layout); - split= uiLayoutSplit(layout, 0); + split= uiLayoutSplit(layout, 0, 0); col= uiLayoutColumn(split, 0); @@ -1062,7 +1062,7 @@ void uiTemplateImage(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propn uiItemR(col, NULL, 0, userptr, "cyclic", 0); } else if(ima->source==IMA_SRC_GENERATED) { - split= uiLayoutSplit(layout, 0); + split= uiLayoutSplit(layout, 0, 0); col= uiLayoutColumn(split, 1); uiItemR(col, "X", 0, &imaptr, "generated_width", 0); diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c index 2751edfcb43..5b05c8f8944 100644 --- a/source/blender/editors/space_image/space_image.c +++ b/source/blender/editors/space_image/space_image.c @@ -234,11 +234,7 @@ void image_keymap(struct wmKeyConfig *keyconf) RNA_float_set(WM_keymap_add_item(keymap, "IMAGE_OT_view_zoom_ratio", PAD4, KM_PRESS, 0, 0)->ptr, "ratio", 0.25f); RNA_float_set(WM_keymap_add_item(keymap, "IMAGE_OT_view_zoom_ratio", PAD8, KM_PRESS, 0, 0)->ptr, "ratio", 0.125f); - WM_keymap_add_item(keymap, "PAINT_OT_image_paint", LEFTMOUSE, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "PAINT_OT_grab_clone", RIGHTMOUSE, KM_PRESS, 0, 0); - WM_keymap_add_item(keymap, "PAINT_OT_sample_color", RIGHTMOUSE, KM_PRESS, 0, 0); - RNA_enum_set(WM_keymap_add_item(keymap, "PAINT_OT_image_paint_radial_control", FKEY, KM_PRESS, 0, 0)->ptr, "mode", WM_RADIALCONTROL_SIZE); - RNA_enum_set(WM_keymap_add_item(keymap, "PAINT_OT_image_paint_radial_control", FKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "mode", WM_RADIALCONTROL_STRENGTH); WM_keymap_add_item(keymap, "IMAGE_OT_sample", ACTIONMOUSE, KM_PRESS, 0, 0); RNA_enum_set(WM_keymap_add_item(keymap, "IMAGE_OT_curves_point_set", ACTIONMOUSE, KM_PRESS, KM_CTRL, 0)->ptr, "point", 0); @@ -305,6 +301,7 @@ static void image_listener(ScrArea *sa, wmNotifier *wmn) switch(wmn->data) { case ND_DATA: case ND_SELECT: + ED_area_tag_refresh(sa); ED_area_tag_redraw(sa); break; } @@ -391,7 +388,7 @@ static void image_main_area_init(wmWindowManager *wm, ARegion *ar) // UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_STANDARD, ar->winx, ar->winy); /* image paint polls for mode */ - keymap= WM_keymap_find(wm->defaultconf, "Image Paint", SPACE_IMAGE, 0); + keymap= WM_keymap_find(wm->defaultconf, "Image Paint", 0, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); keymap= WM_keymap_find(wm->defaultconf, "UVEdit", 0, 0); @@ -533,6 +530,7 @@ void ED_spacetype_image(void) ARegionType *art; st->spaceid= SPACE_IMAGE; + strncpy(st->name, "Image", BKE_ST_MAXNAME); st->new= image_new; st->free= image_free; diff --git a/source/blender/editors/space_info/space_info.c b/source/blender/editors/space_info/space_info.c index ab10e05b204..d9662339bb2 100644 --- a/source/blender/editors/space_info/space_info.c +++ b/source/blender/editors/space_info/space_info.c @@ -182,6 +182,7 @@ void ED_spacetype_info(void) ARegionType *art; st->spaceid= SPACE_INFO; + strncpy(st->name, "Info", BKE_ST_MAXNAME); st->new= info_new; st->free= info_free; diff --git a/source/blender/editors/space_logic/space_logic.c b/source/blender/editors/space_logic/space_logic.c index f9fdbb92db9..c2918dd0925 100644 --- a/source/blender/editors/space_logic/space_logic.c +++ b/source/blender/editors/space_logic/space_logic.c @@ -217,6 +217,10 @@ static void logic_listener(ARegion *ar, wmNotifier *wmn) break; case NC_OBJECT: break; + case NC_ID: + if(wmn->action == NA_RENAME) + ED_region_tag_redraw(ar); + break; } } @@ -328,6 +332,7 @@ void ED_spacetype_logic(void) ARegionType *art; st->spaceid= SPACE_LOGIC; + strncpy(st->name, "Logic", BKE_ST_MAXNAME); st->new= logic_new; st->free= logic_free; diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index 0ae3a347872..4422bc2d158 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -679,7 +679,7 @@ static int nlaedit_duplicate_invoke(bContext *C, wmOperator *op, wmEvent *event) nlaedit_duplicate_exec(C, op); RNA_int_set(op->ptr, "mode", TFM_TIME_TRANSLATE); // XXX - WM_operator_name_call(C, "TFM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr); + WM_operator_name_call(C, "TRANSFORM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/space_nla/nla_header.c b/source/blender/editors/space_nla/nla_header.c deleted file mode 100644 index 2624e7a9255..00000000000 --- a/source/blender/editors/space_nla/nla_header.c +++ /dev/null @@ -1,262 +0,0 @@ -/** - * $Id$ - * - * ***** 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2008 Blender Foundation. - * All rights reserved. - * - * - * Contributor(s): Blender Foundation, Joshua Leung - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#include -#include - -#include "DNA_anim_types.h" -#include "DNA_action_types.h" -#include "DNA_nla_types.h" -#include "DNA_object_types.h" -#include "DNA_space_types.h" -#include "DNA_scene_types.h" -#include "DNA_screen_types.h" -#include "DNA_windowmanager_types.h" - -#include "MEM_guardedalloc.h" - -#include "BLI_blenlib.h" -#include "BLI_math.h" -#include "BLI_rand.h" - -#include "BKE_animsys.h" -#include "BKE_nla.h" -#include "BKE_context.h" -#include "BKE_report.h" -#include "BKE_screen.h" -#include "ED_types.h" -#include "ED_util.h" - -#include "ED_anim_api.h" -#include "ED_markers.h" -#include "ED_space_api.h" -#include "ED_screen.h" -#include "ED_transform.h" - -#include "BIF_gl.h" - -#include "RNA_access.h" - -#include "WM_api.h" -#include "WM_types.h" - -#include "UI_interface.h" -#include "UI_resources.h" -#include "UI_view2d.h" - -#include "nla_intern.h" - -/* button events */ -enum { - B_REDR = 1, -} eNLAHeader_ButEvents; - -/* ************************ header area region *********************** */ - - -static void nla_viewmenu(bContext *C, uiLayout *layout, void *arg_unused) -{ - bScreen *sc= CTX_wm_screen(C); - ScrArea *sa= CTX_wm_area(C); - SpaceNla *snla= CTX_wm_space_nla(C); - PointerRNA spaceptr; - - /* retrieve state */ - RNA_pointer_create(&sc->id, &RNA_SpaceNLA, snla, &spaceptr); - - /* create menu */ - uiItemO(layout, NULL, ICON_MENU_PANEL, "NLA_OT_properties"); - - uiItemS(layout); - - uiItemR(layout, NULL, 0, &spaceptr, "show_cframe_indicator", 0); - - if (snla->flag & SNLA_DRAWTIME) - uiItemO(layout, "Show Frames", 0, "ANIM_OT_time_toggle"); - else - uiItemO(layout, "Show Seconds", 0, "ANIM_OT_time_toggle"); - - uiItemR(layout, NULL, 0, &spaceptr, "show_strip_curves", 0); - - uiItemS(layout); - - uiItemS(layout); - - uiItemO(layout, NULL, 0, "ANIM_OT_previewrange_set"); - uiItemO(layout, NULL, 0, "ANIM_OT_previewrange_clear"); - - uiItemS(layout); - - //uiItemO(layout, NULL, 0, "NLA_OT_view_all"); - - if (sa->full) - uiItemO(layout, NULL, 0, "SCREEN_OT_screen_full_area"); // "Tile Window", Ctrl UpArrow - else - uiItemO(layout, NULL, 0, "SCREEN_OT_screen_full_area"); // "Maximize Window", Ctr DownArrow -} - -static void nla_selectmenu(bContext *C, uiLayout *layout, void *arg_unused) -{ - uiItemO(layout, NULL, 0, "NLA_OT_select_all_toggle"); - uiItemBooleanO(layout, "Invert All", 0, "NLA_OT_select_all_toggle", "invert", 1); - - uiItemS(layout); - - uiItemO(layout, NULL, 0, "NLA_OT_select_border"); - uiItemBooleanO(layout, "Border Axis Range", 0, "NLA_OT_select_border", "axis_range", 1); -} - -static void nla_edit_transformmenu(bContext *C, uiLayout *layout, void *arg_unused) -{ - // XXX these operators may change for NLA... - uiItemEnumO(layout, "Grab/Move", 0, "TFM_OT_transform", "mode", TFM_TRANSLATION); - uiItemEnumO(layout, "Extend", 0, "TFM_OT_transform", "mode", TFM_TIME_EXTEND); - uiItemEnumO(layout, "Scale", 0, "TFM_OT_transform", "mode", TFM_TIME_SCALE); -} - -static void nla_editmenu(bContext *C, uiLayout *layout, void *arg_unused) -{ - Scene *scene= CTX_data_scene(C); - - uiItemMenuF(layout, "Transform", 0, nla_edit_transformmenu, NULL); - uiItemMenuEnumO(layout, "Snap", 0, "NLA_OT_snap", "type"); - - uiItemS(layout); - - uiItemO(layout, NULL, 0, "NLA_OT_duplicate"); - uiItemO(layout, NULL, 0, "NLA_OT_split"); - uiItemO(layout, NULL, 0, "NLA_OT_delete"); - - uiItemS(layout); - - uiItemO(layout, NULL, 0, "NLA_OT_mute_toggle"); - - uiItemS(layout); - - uiItemO(layout, NULL, 0, "NLA_OT_apply_scale"); - uiItemO(layout, NULL, 0, "NLA_OT_clear_scale"); - - uiItemS(layout); - - uiItemO(layout, NULL, 0, "NLA_OT_move_up"); - uiItemO(layout, NULL, 0, "NLA_OT_move_down"); - - uiItemS(layout); - - // TODO: names of these tools for 'tweakmode' need changing? - if (scene->flag & SCE_NLA_EDIT_ON) - uiItemO(layout, "Stop Tweaking Strip Actions", 0, "NLA_OT_tweakmode_exit"); - else - uiItemO(layout, "Start Tweaking Strip Actions", 0, "NLA_OT_tweakmode_enter"); -} - -static void nla_addmenu(bContext *C, uiLayout *layout, void *arg_unused) -{ - uiItemO(layout, NULL, 0, "NLA_OT_actionclip_add"); - uiItemO(layout, NULL, 0, "NLA_OT_transition_add"); - - uiItemS(layout); - - uiItemO(layout, NULL, 0, "NLA_OT_meta_add"); - uiItemO(layout, NULL, 0, "NLA_OT_meta_remove"); - - uiItemS(layout); - - uiItemO(layout, NULL, 0, "NLA_OT_tracks_add"); - uiItemBooleanO(layout, "Add Tracks Above Selected", 0, "NLA_OT_tracks_add", "above_selected", 1); -} - -/* ------------------ */ - -static void do_nla_buttons(bContext *C, void *arg, int event) -{ - ED_area_tag_refresh(CTX_wm_area(C)); - ED_area_tag_redraw(CTX_wm_area(C)); -} - - -void nla_header_buttons(const bContext *C, ARegion *ar) -{ - SpaceNla *snla= CTX_wm_space_nla(C); - ScrArea *sa= CTX_wm_area(C); - uiBlock *block; - int xco, yco= 3; - - block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS); - uiBlockSetHandleFunc(block, do_nla_buttons, NULL); - - xco= ED_area_header_standardbuttons(C, block, yco); - - if ((sa->flag & HEADER_NO_PULLDOWN)==0) { - int xmax; - - xmax= GetButStringLength("View"); - uiDefMenuBut(block, nla_viewmenu, NULL, "View", xco, yco, xmax-3, 20, ""); - xco+= xmax; - - xmax= GetButStringLength("Select"); - uiDefMenuBut(block, nla_selectmenu, NULL, "Select", xco, yco, xmax-3, 20, ""); - xco+= xmax; - - xmax= GetButStringLength("Edit"); - uiDefMenuBut(block, nla_editmenu, NULL, "Edit", xco, yco, xmax-3, 20, ""); - xco+= xmax; - - xmax= GetButStringLength("Add"); - uiDefMenuBut(block, nla_addmenu, NULL, "Add", xco, yco, xmax-3, 20, ""); - xco+= xmax; - } - - uiBlockSetEmboss(block, UI_EMBOSS); - - /* filtering buttons */ - xco= ANIM_headerUI_standard_buttons(C, snla->ads, block, xco, yco); - - /* auto-snap selector */ - if (snla->flag & SNLA_DRAWTIME) { - uiDefButS(block, MENU, B_REDR, - "Auto-Snap %t|No Time-Snap %x0|Nearest Second %x2|Nearest Marker %x3", - xco,yco,90,YIC, &snla->autosnap, 0, 1, 0, 0, - "Auto-snapping mode for times when transforming"); - } - else { - uiDefButS(block, MENU, B_REDR, - "Auto-Snap %t|No Time-Snap %x0|Nearest Frame %x2|Nearest Marker %x3", - xco,yco,90,YIC, &snla->autosnap, 0, 1, 0, 0, - "Auto-snapping mode for times when transforming"); - } - xco += 98; - - /* always as last */ - UI_view2d_totRect_set(&ar->v2d, xco+XIC+80, ar->v2d.tot.ymax-ar->v2d.tot.ymin); - - uiEndBlock(C, block); - uiDrawBlock(C, block); -} - - diff --git a/source/blender/editors/space_nla/space_nla.c b/source/blender/editors/space_nla/space_nla.c index a019e684239..ddab0817c58 100644 --- a/source/blender/editors/space_nla/space_nla.c +++ b/source/blender/editors/space_nla/space_nla.c @@ -331,29 +331,12 @@ static void nla_main_area_draw(const bContext *C, ARegion *ar) /* add handlers, stuff you only do once or on area/region changes */ static void nla_header_area_init(wmWindowManager *wm, ARegion *ar) { - UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_HEADER, ar->winx, ar->winy); + ED_region_header_init(ar); } static void nla_header_area_draw(const bContext *C, ARegion *ar) { - float col[3]; - - /* clear */ - if(ED_screen_area_active(C)) - UI_GetThemeColor3fv(TH_HEADER, col); - else - UI_GetThemeColor3fv(TH_HEADERDESEL, col); - - glClearColor(col[0], col[1], col[2], 0.0); - glClear(GL_COLOR_BUFFER_BIT); - - /* set view2d view matrix for scrolling (without scrollers) */ - UI_view2d_view_ortho(C, &ar->v2d); - - nla_header_buttons(C, ar); - - /* restore view matrix? */ - UI_view2d_view_restore(C); + ED_region_header(C, ar); } /* add handlers, stuff you only do once or on area/region changes */ @@ -439,6 +422,10 @@ static void nla_main_area_listener(ARegion *ar, wmNotifier *wmn) break; } break; + case NC_ID: + if(wmn->action == NA_RENAME) + ED_region_tag_redraw(ar); + break; default: if(wmn->data==ND_KEYS) ED_region_tag_redraw(ar); @@ -468,6 +455,11 @@ static void nla_channel_area_listener(ARegion *ar, wmNotifier *wmn) break; } break; + case NC_ID: + if(wmn->action == NA_RENAME) + ED_region_tag_redraw(ar); + break; + default: if(wmn->data==ND_KEYS) ED_region_tag_redraw(ar); @@ -515,6 +507,7 @@ void ED_spacetype_nla(void) ARegionType *art; st->spaceid= SPACE_NLA; + strncpy(st->name, "NLA", BKE_ST_MAXNAME); st->new= nla_new; st->free= nla_free; diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c index b42e9e1fac5..ce32c536389 100644 --- a/source/blender/editors/space_node/node_edit.c +++ b/source/blender/editors/space_node/node_edit.c @@ -1471,7 +1471,7 @@ bNode *node_add_node(SpaceNode *snode, Scene *scene, int type, float locx, float node_set_active(snode, node); if(snode->nodetree->type==NTREE_COMPOSIT) { - if(ELEM(node->type, CMP_NODE_R_LAYERS, CMP_NODE_COMPOSITE)) + if(ELEM3(node->type, CMP_NODE_R_LAYERS, CMP_NODE_COMPOSITE, CMP_NODE_DEFOCUS)) node->id = &scene->id; ntreeCompositForceHidden(snode->edittree, scene); diff --git a/source/blender/editors/space_node/node_ops.c b/source/blender/editors/space_node/node_ops.c index fae9afacbcd..2a32ce6b65a 100644 --- a/source/blender/editors/space_node/node_ops.c +++ b/source/blender/editors/space_node/node_ops.c @@ -83,7 +83,7 @@ void ED_operatormacros_node(void) ot= WM_operatortype_append_macro("NODE_OT_duplicate_move", "Duplicate", OPTYPE_UNDO|OPTYPE_REGISTER); WM_operatortype_macro_define(ot, "NODE_OT_duplicate"); - otmacro= WM_operatortype_macro_define(ot, "TFM_OT_translate"); + otmacro= WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate"); RNA_enum_set(otmacro->ptr, "proportional", 0); } diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c index b0ce1a6bd3e..650390a8727 100644 --- a/source/blender/editors/space_node/space_node.c +++ b/source/blender/editors/space_node/space_node.c @@ -314,6 +314,10 @@ static void node_region_listener(ARegion *ar, wmNotifier *wmn) case NC_NODE: ED_region_tag_redraw(ar); break; + case NC_ID: + if(wmn->action == NA_RENAME) + ED_region_tag_redraw(ar); + break; } } @@ -347,6 +351,7 @@ void ED_spacetype_node(void) ARegionType *art; st->spaceid= SPACE_NODE; + strncpy(st->name, "Node", BKE_ST_MAXNAME); st->new= node_new; st->free= node_free; diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c index bfb1724af35..f3485328c52 100644 --- a/source/blender/editors/space_outliner/outliner.c +++ b/source/blender/editors/space_outliner/outliner.c @@ -79,7 +79,7 @@ #include "BKE_report.h" #include "BKE_screen.h" #include "BKE_scene.h" -#include "BKE_sequence.h" +#include "BKE_sequencer.h" #include "BKE_utildefines.h" #include "ED_armature.h" @@ -4747,7 +4747,7 @@ static void namebutton_cb(bContext *C, void *tsep, char *oldname) case ID_SCE: WM_event_add_notifier(C, NC_SCENE, NULL); break; default: - WM_event_add_notifier(C, NC_ID|ND_ID_RENAME, NULL); break; + WM_event_add_notifier(C, NC_ID|NA_RENAME, NULL); break; } /* Check the library target exists */ if (te->idcode == ID_LI) { diff --git a/source/blender/editors/space_outliner/space_outliner.c b/source/blender/editors/space_outliner/space_outliner.c index 31de6839468..469fe148b97 100644 --- a/source/blender/editors/space_outliner/space_outliner.c +++ b/source/blender/editors/space_outliner/space_outliner.c @@ -133,6 +133,10 @@ static void outliner_main_area_listener(ARegion *ar, wmNotifier *wmn) case ND_TRANSFORM: ED_region_tag_redraw(ar); break; + case ND_MODIFIER: + if(wmn->action == NA_RENAME) + ED_region_tag_redraw(ar); + break; } case NC_GROUP: /* all actions now, todo: check outliner view mode? */ @@ -148,9 +152,9 @@ static void outliner_main_area_listener(ARegion *ar, wmNotifier *wmn) ED_region_tag_redraw(ar); break; case NC_ID: - if(wmn->data == ND_ID_RENAME) + if(wmn->action == NA_RENAME) ED_region_tag_redraw(ar); - break; + break; } } diff --git a/source/blender/editors/space_script/space_script.c b/source/blender/editors/space_script/space_script.c index e6edb71c1b1..b882a3313cd 100644 --- a/source/blender/editors/space_script/space_script.c +++ b/source/blender/editors/space_script/space_script.c @@ -197,6 +197,7 @@ void ED_spacetype_script(void) ARegionType *art; st->spaceid= SPACE_SCRIPT; + strncpy(st->name, "Script", BKE_ST_MAXNAME); st->new= script_new; st->free= script_free; diff --git a/source/blender/editors/space_sequencer/sequencer_add.c b/source/blender/editors/space_sequencer/sequencer_add.c index ba3735834bc..354b4712ce4 100644 --- a/source/blender/editors/space_sequencer/sequencer_add.c +++ b/source/blender/editors/space_sequencer/sequencer_add.c @@ -60,7 +60,7 @@ #include "BKE_library.h" #include "BKE_main.h" #include "BKE_plugin_types.h" -#include "BKE_sequence.h" +#include "BKE_sequencer.h" #include "BKE_scene.h" #include "BKE_utildefines.h" #include "BKE_report.h" @@ -73,6 +73,7 @@ #include "RNA_access.h" #include "RNA_define.h" +#include "RNA_enum_types.h" /* for menu/popup icons etc etc*/ #include "UI_interface.h" @@ -150,7 +151,7 @@ static void seq_load_operator_info(SeqLoadInfo *seq_load, wmOperator *op) seq_load->channel= RNA_int_get(op->ptr, "channel"); seq_load->len= 1; // images only! - RNA_string_get(op->ptr, "name", seq_load->name); + RNA_string_get(op->ptr, "name", seq_load->name+2); RNA_string_get(op->ptr, "path", seq_load->path); /* full path, file is set by the caller */ @@ -174,8 +175,7 @@ static int sequencer_add_scene_strip_exec(bContext *C, wmOperator *op) Editing *ed= seq_give_editing(scene, TRUE); Scene *sce_seq; - char sce_name[MAX_ID_NAME-2]; - + Sequence *seq; /* generic strip vars */ Strip *strip; StripElem *se; @@ -185,12 +185,10 @@ static int sequencer_add_scene_strip_exec(bContext *C, wmOperator *op) start_frame= RNA_int_get(op->ptr, "start_frame"); channel= RNA_int_get(op->ptr, "channel"); - RNA_string_get(op->ptr, "scene", sce_name); - - sce_seq= (Scene *)find_id("SC", sce_name); + sce_seq= BLI_findlink(&CTX_data_main(C)->scene, RNA_enum_get(op->ptr, "type")); if (sce_seq==NULL) { - BKE_reportf(op->reports, RPT_ERROR, "Scene \"%s\" not found", sce_name); + BKE_report(op->reports, RPT_ERROR, "Scene not found"); return OPERATOR_CANCELLED; } @@ -206,8 +204,10 @@ static int sequencer_add_scene_strip_exec(bContext *C, wmOperator *op) strip->stripdata= se= MEM_callocN(seq->len*sizeof(StripElem), "stripelem"); - - RNA_string_get(op->ptr, "name", seq->name); + if(RNA_property_is_set(op->ptr, "name")) + RNA_string_get(op->ptr, "name", seq->name+2); + else + strcpy(seq->name+2, sce_seq->id.name+2); calc_sequence_disp(seq); sort_seq(scene); @@ -218,7 +218,7 @@ static int sequencer_add_scene_strip_exec(bContext *C, wmOperator *op) seq->flag |= SELECT; } - ED_area_tag_redraw(CTX_wm_area(C)); + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene); return OPERATOR_FINISHED; } @@ -227,16 +227,15 @@ static int sequencer_add_scene_strip_exec(bContext *C, wmOperator *op) static int sequencer_add_scene_strip_invoke(bContext *C, wmOperator *op, wmEvent *event) { sequencer_generic_invoke_xy__internal(C, op, event, 0); - - /* scene can be left default */ - RNA_string_set(op->ptr, "scene", "Scene"); // XXX should popup a menu but ton says 2.5 will have some better feature for this - return sequencer_add_scene_strip_exec(C, op); + // needs a menu + // return WM_menu_invoke(C, op, event); } void SEQUENCER_OT_scene_strip_add(struct wmOperatorType *ot) { + PropertyRNA *prop; /* identifiers */ ot->name= "Add Scene Strip"; @@ -253,7 +252,8 @@ void SEQUENCER_OT_scene_strip_add(struct wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; sequencer_generic_props__internal(ot, SEQPROP_STARTFRAME); - RNA_def_string(ot->srna, "scene", "", MAX_ID_NAME-2, "Scene Name", "Scene name to add as a strip"); + prop= RNA_def_enum(ot->srna, "type", DummyRNA_NULL_items, 0, "Type", ""); + RNA_def_enum_funcs(prop, RNA_scene_itemf); } static int sequencer_add_generic_strip_exec(bContext *C, wmOperator *op, SeqLoadFunc seq_load_func) @@ -297,8 +297,9 @@ static int sequencer_add_generic_strip_exec(bContext *C, wmOperator *op, SeqLoad } sort_seq(scene); + seq_update_muting(ed); - ED_area_tag_redraw(CTX_wm_area(C)); + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene); return OPERATOR_FINISHED; } @@ -425,7 +426,7 @@ static int sequencer_add_image_strip_exec(bContext *C, wmOperator *op) /* last active name */ strncpy(ed->act_imagedir, strip->dir, FILE_MAXDIR-1); - ED_area_tag_redraw(CTX_wm_area(C)); + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene); return OPERATOR_FINISHED; } @@ -498,6 +499,11 @@ static int sequencer_add_effect_strip_exec(bContext *C, wmOperator *op) seq = alloc_sequence(ed->seqbasep, start_frame, channel); seq->type= type; + if(RNA_property_is_set(op->ptr, "name")) + RNA_string_get(op->ptr, "name", seq->name+2); + else + strcpy(seq->name+2, give_seqname(seq)); + seqUniqueName(ed->seqbasep, seq); sh = get_sequence_effect(seq); @@ -542,7 +548,7 @@ static int sequencer_add_effect_strip_exec(bContext *C, wmOperator *op) RNA_float_get_array(op->ptr, "color", colvars->col); } - if(seq_test_overlap(ed->seqbasep, seq)) shuffle_seq(ed->seqbasep, seq); + if(seq_test_overlap(ed->seqbasep, seq)) shuffle_seq(ed->seqbasep, seq, scene); update_changed_seq_and_deps(scene, seq, 1, 1); /* runs calc_sequence */ @@ -557,7 +563,8 @@ static int sequencer_add_effect_strip_exec(bContext *C, wmOperator *op) seq->flag |= SELECT; } - ED_area_tag_redraw(CTX_wm_area(C)); + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene); + return OPERATOR_FINISHED; } diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c index a1488d867d7..a2525430a10 100644 --- a/source/blender/editors/space_sequencer/sequencer_draw.c +++ b/source/blender/editors/space_sequencer/sequencer_draw.c @@ -46,7 +46,7 @@ #include "BKE_context.h" #include "BKE_global.h" #include "BKE_plugin_types.h" -#include "BKE_sequence.h" +#include "BKE_sequencer.h" #include "BKE_scene.h" #include "BKE_utildefines.h" @@ -525,7 +525,7 @@ static void draw_seq_strip(Scene *scene, ARegion *ar, SpaceSeq *sseq, Sequence * char col[3], background_col[3], is_single_image; /* we need to know if this is a single image/color or not for drawing */ - is_single_image = (char)check_single_seq(seq); + is_single_image = (char)seq_single_check(seq); /* body */ if(seq->startstill) x1= seq->start; diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c index 5dd453b9e30..bfb7d139074 100644 --- a/source/blender/editors/space_sequencer/sequencer_edit.c +++ b/source/blender/editors/space_sequencer/sequencer_edit.c @@ -61,7 +61,7 @@ #include "BKE_library.h" #include "BKE_main.h" #include "BKE_plugin_types.h" -#include "BKE_sequence.h" +#include "BKE_sequencer.h" #include "BKE_scene.h" #include "BKE_utildefines.h" #include "BKE_report.h" @@ -83,6 +83,7 @@ #include "ED_screen.h" #include "ED_transform.h" #include "ED_util.h" +#include "ED_sequencer.h" #include "UI_interface.h" #include "UI_resources.h" @@ -124,13 +125,19 @@ EnumPropertyItem sequencer_prop_effect_types[] = { /* mute operator */ - EnumPropertyItem prop_side_types[] = { +EnumPropertyItem prop_side_types[] = { {SEQ_SIDE_LEFT, "LEFT", 0, "Left", ""}, {SEQ_SIDE_RIGHT, "RIGHT", 0, "Right", ""}, {SEQ_SIDE_BOTH, "BOTH", 0, "Both", ""}, {0, NULL, 0, NULL, NULL} }; +EnumPropertyItem prop_side_lr_types[] = { + {SEQ_SIDE_LEFT, "LEFT", 0, "Left", ""}, + {SEQ_SIDE_RIGHT, "RIGHT", 0, "Right", ""}, + {0, NULL, 0, NULL, NULL} +}; + typedef struct TransSeq { int start, machine; int startstill, endstill; @@ -188,7 +195,7 @@ static void change_plugin_seq(Scene *scene, char *str) /* called from fileselect last_seq->seq2->machine, last_seq->seq3->machine); - if( seq_test_overlap(ed->seqbasep, last_seq) ) shuffle_seq(ed->seqbasep, last_seq); + if( seq_test_overlap(ed->seqbasep, last_seq) ) shuffle_seq(ed->seqbasep, last_seq, scene); } @@ -925,7 +932,9 @@ static Sequence *dupli_seq(struct Scene *scene, Sequence *seq) "handled in duplicate!\nExpect a crash" " now...\n"); } - + + seqUniqueName(scene->ed->seqbasep, seqn); + return seqn; } @@ -945,7 +954,7 @@ static Sequence * deep_dupli_seq(struct Scene *scene, Sequence * seq) } -static void recurs_dupli_seq(Scene *scene, ListBase *old, ListBase *new) +static void recurs_dupli_seq(Scene *scene, ListBase *old, ListBase *new, int do_context) { Sequence *seq; Sequence *seqn = 0; @@ -956,15 +965,19 @@ static void recurs_dupli_seq(Scene *scene, ListBase *old, ListBase *new) if(seq->flag & SELECT) { seqn = dupli_seq(scene, seq); if (seqn) { /*should never fail */ - seq->flag &= SEQ_DESEL; - seqn->flag &= ~(SEQ_LEFTSEL+SEQ_RIGHTSEL+SEQ_LOCK); + if(do_context) { + seq->flag &= SEQ_DESEL; + seqn->flag &= ~(SEQ_LEFTSEL+SEQ_RIGHTSEL+SEQ_LOCK); + } BLI_addtail(new, seqn); if(seq->type==SEQ_META) - recurs_dupli_seq(scene, &seq->seqbase,&seqn->seqbase); + recurs_dupli_seq(scene, &seq->seqbase,&seqn->seqbase, do_context); - if (seq == last_seq) { - active_seq_set(scene, seqn); + if(do_context) { + if (seq == last_seq) { + active_seq_set(scene, seqn); + } } } } @@ -1382,7 +1395,7 @@ static int sequencer_snap_exec(bContext *C, wmOperator *op) if(seq->flag & SELECT && !(seq->depth==0 && seq->flag & SEQ_LOCK)) { seq->flag &= ~SEQ_OVERLAP; if( seq_test_overlap(ed->seqbasep, seq) ) { - shuffle_seq(ed->seqbasep, seq); + shuffle_seq(ed->seqbasep, seq, scene); } } else if(seq->type & SEQ_EFFECT) { @@ -1399,7 +1412,7 @@ static int sequencer_snap_exec(bContext *C, wmOperator *op) /* as last: */ sort_seq(scene); - ED_area_tag_redraw(CTX_wm_area(C)); + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene); return OPERATOR_FINISHED; } @@ -1451,21 +1464,18 @@ static int sequencer_mute_exec(bContext *C, wmOperator *op) for(seq= ed->seqbasep->first; seq; seq= seq->next) { if ((seq->flag & SEQ_LOCK)==0) { if(selected){ /* mute unselected */ - if (seq->flag & SELECT) { + if(seq->flag & SELECT) seq->flag |= SEQ_MUTE; - seq_update_sound(seq); - } } else { - if ((seq->flag & SELECT)==0) { + if((seq->flag & SELECT)==0) seq->flag |= SEQ_MUTE; - seq_update_sound(seq); - } } } } - ED_area_tag_redraw(CTX_wm_area(C)); + seq_update_muting(ed); + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene); return OPERATOR_FINISHED; } @@ -1505,21 +1515,18 @@ static int sequencer_unmute_exec(bContext *C, wmOperator *op) for(seq= ed->seqbasep->first; seq; seq= seq->next) { if ((seq->flag & SEQ_LOCK)==0) { if(selected){ /* unmute unselected */ - if (seq->flag & SELECT) { + if(seq->flag & SELECT) seq->flag &= ~SEQ_MUTE; - seq_update_sound(seq); - } } else { - if ((seq->flag & SELECT)==0) { + if((seq->flag & SELECT)==0) seq->flag &= ~SEQ_MUTE; - seq_update_sound(seq); - } } } } - ED_area_tag_redraw(CTX_wm_area(C)); + seq_update_muting(ed); + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene); return OPERATOR_FINISHED; } @@ -1559,7 +1566,7 @@ static int sequencer_lock_exec(bContext *C, wmOperator *op) } } - ED_area_tag_redraw(CTX_wm_area(C)); + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene); return OPERATOR_FINISHED; } @@ -1596,7 +1603,7 @@ static int sequencer_unlock_exec(bContext *C, wmOperator *op) } } - ED_area_tag_redraw(CTX_wm_area(C)); + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene); return OPERATOR_FINISHED; } @@ -1633,7 +1640,7 @@ static int sequencer_reload_exec(bContext *C, wmOperator *op) } } - ED_area_tag_redraw(CTX_wm_area(C)); + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene); return OPERATOR_FINISHED; } @@ -1665,7 +1672,9 @@ static int sequencer_refresh_all_exec(bContext *C, wmOperator *op) free_imbuf_seq(scene, &ed->seqbase, FALSE); - ED_area_tag_redraw(CTX_wm_area(C)); + seqbase_sound_reload(scene, &ed->seqbase); + + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene); return OPERATOR_FINISHED; } @@ -1741,9 +1750,7 @@ static int sequencer_cut_exec(bContext *C, wmOperator *op) sort_seq(scene); } - if (changed) { - ED_area_tag_redraw(CTX_wm_area(C)); - } + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene); return OPERATOR_FINISHED; } @@ -1800,10 +1807,10 @@ static int sequencer_add_duplicate_exec(bContext *C, wmOperator *op) if(ed==NULL) return OPERATOR_CANCELLED; - recurs_dupli_seq(scene, ed->seqbasep, &new); + recurs_dupli_seq(scene, ed->seqbasep, &new, TRUE); addlisttolist(ed->seqbasep, &new); - ED_area_tag_redraw(CTX_wm_area(C)); + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene); return OPERATOR_FINISHED; } @@ -1813,7 +1820,7 @@ static int sequencer_add_duplicate_invoke(bContext *C, wmOperator *op, wmEvent * sequencer_add_duplicate_exec(C, op); RNA_int_set(op->ptr, "mode", TFM_TRANSLATION); - WM_operator_name_call(C, "TFM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr); + WM_operator_name_call(C, "TRANSFORM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr); return OPERATOR_FINISHED; } @@ -1894,8 +1901,7 @@ static int sequencer_delete_exec(bContext *C, wmOperator *op) ms= ms->prev; } - //ED_area_tag_redraw(CTX_wm_area(C)); - WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, NULL); /* redraw other sequencer views */ + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene); return OPERATOR_FINISHED; } @@ -1969,9 +1975,11 @@ static int sequencer_separate_images_exec(bContext *C, wmOperator *op) calc_sequence(seq_new); seq_new->flag &= ~SEQ_OVERLAP; if (seq_test_overlap(ed->seqbasep, seq_new)) { - shuffle_seq(ed->seqbasep, seq_new); + shuffle_seq(ed->seqbasep, seq_new, scene); } + seqUniqueName(scene->ed->seqbasep, seq_new); + cfra++; start_ofs += step; } @@ -1986,7 +1994,7 @@ static int sequencer_separate_images_exec(bContext *C, wmOperator *op) /* as last: */ sort_seq(scene); - ED_area_tag_redraw(CTX_wm_area(C)); + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene); return OPERATOR_FINISHED; } @@ -2063,7 +2071,9 @@ static int sequencer_meta_toggle_exec(bContext *C, wmOperator *op) } - ED_area_tag_redraw(CTX_wm_area(C)); + seq_update_muting(ed); + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene); + return OPERATOR_FINISHED; } @@ -2092,56 +2102,20 @@ static int sequencer_meta_make_exec(bContext *C, wmOperator *op) Sequence *seq, *seqm, *next; - int tot; + int tot, channel_max= 1; if(ed==NULL) return OPERATOR_CANCELLED; - /* is there more than 1 select */ - tot= 0; - seq= ed->seqbasep->first; - while(seq) { - if(seq->flag & SELECT) { - tot++; - } - seq= seq->next; - } - if(tot < 1) return OPERATOR_CANCELLED;; - - - /* test relationships */ - seq= ed->seqbasep->first; - while(seq) { - if(seq->flag & SELECT) { - if(seq->type & SEQ_EFFECT) { - if(seq->seq1 && - (seq->seq1->flag & SELECT)==0) tot= 0; - if(seq->seq2 && - (seq->seq2->flag & SELECT)==0) tot= 0; - if(seq->seq3 && - (seq->seq3->flag & SELECT)==0) tot= 0; - } - } - else if(seq->type & SEQ_EFFECT) { - if(seq->seq1 && - (seq->seq1->flag & SELECT)) tot= 0; - if(seq->seq2 && - (seq->seq2->flag & SELECT)) tot= 0; - if(seq->seq3 && - (seq->seq3->flag & SELECT)) tot= 0; - } - if(tot==0) break; - seq= seq->next; - } - - if(tot==0) { + if(seqbase_isolated_sel_check(ed->seqbasep)==FALSE) { BKE_report(op->reports, RPT_ERROR, "Please select all related strips"); return OPERATOR_CANCELLED; } /* remove all selected from main list, and put in meta */ - seqm= alloc_sequence(ed->seqbasep, 1, 1); + seqm= alloc_sequence(ed->seqbasep, 1, 1); /* channel number set later */ + strcpy(seqm->name+2, "MetaStrip"); seqm->type= SEQ_META; seqm->flag= SELECT; @@ -2149,11 +2123,13 @@ static int sequencer_meta_make_exec(bContext *C, wmOperator *op) while(seq) { next= seq->next; if(seq!=seqm && (seq->flag & SELECT)) { + channel_max= MAX2(seq->machine, channel_max); BLI_remlink(ed->seqbasep, seq); BLI_addtail(&seqm->seqbase, seq); } seq= next; } + seqm->machine= channel_max; calc_sequence(seqm); seqm->strip= MEM_callocN(sizeof(Strip), "metastrip"); @@ -2162,9 +2138,14 @@ static int sequencer_meta_make_exec(bContext *C, wmOperator *op) active_seq_set(scene, seqm); - if( seq_test_overlap(ed->seqbasep, seqm) ) shuffle_seq(ed->seqbasep, seqm); + if( seq_test_overlap(ed->seqbasep, seqm) ) shuffle_seq(ed->seqbasep, seqm, scene); + + seq_update_muting(ed); + + seqUniqueName(scene->ed->seqbasep, seqm); + + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene); - ED_area_tag_redraw(CTX_wm_area(C)); return OPERATOR_FINISHED; } @@ -2226,15 +2207,17 @@ static int sequencer_meta_separate_exec(bContext *C, wmOperator *op) if(seq->flag & SELECT) { seq->flag &= ~SEQ_OVERLAP; if( seq_test_overlap(ed->seqbasep, seq) ) { - shuffle_seq(ed->seqbasep, seq); + shuffle_seq(ed->seqbasep, seq, scene); } } } SEQ_END; sort_seq(scene); + seq_update_muting(ed); + + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene); - ED_area_tag_redraw(CTX_wm_area(C)); return OPERATOR_FINISHED; } @@ -2262,45 +2245,12 @@ static int sequencer_view_all_exec(bContext *C, wmOperator *op) bScreen *sc= CTX_wm_screen(C); ScrArea *area= CTX_wm_area(C); ARegion *ar= CTX_wm_region(C); - SpaceSeq *sseq= area->spacedata.first; View2D *v2d= UI_view2d_fromcontext(C); - if (sseq->mainb==SEQ_DRAW_SEQUENCE) { - v2d->cur= v2d->tot; - UI_view2d_curRect_validate(v2d); - UI_view2d_sync(sc, area, v2d, V2D_LOCK_COPY); - } else { - /* Like zooming on an image view */ - float zoomX, zoomY; - int width, height, imgwidth, imgheight; - - width = ar->winx; - height = ar->winy; - - seq_reset_imageofs(sseq); - - imgwidth= (scene->r.size*scene->r.xsch)/100; - imgheight= (scene->r.size*scene->r.ysch)/100; - - /* Apply aspect, dosnt need to be that accurate */ - imgwidth= (int)(imgwidth * ((float)scene->r.xasp / (float)scene->r.yasp)); - - if (((imgwidth >= width) || (imgheight >= height)) && - ((width > 0) && (height > 0))) { - - /* Find the zoom value that will fit the image in the image space */ - zoomX = ((float)width) / ((float)imgwidth); - zoomY = ((float)height) / ((float)imgheight); - sseq->zoom= (zoomX < zoomY) ? zoomX : zoomY; - - sseq->zoom = 1.0f / power_of_2(1/ MIN2(zoomX, zoomY) ); - } - else { - sseq->zoom= 1.0f; - } - } - - + v2d->cur= v2d->tot; + UI_view2d_curRect_validate(v2d); + UI_view2d_sync(sc, area, v2d, V2D_LOCK_COPY); + ED_area_tag_redraw(CTX_wm_area(C)); return OPERATOR_FINISHED; } @@ -2321,8 +2271,102 @@ void SEQUENCER_OT_view_all(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER; } +/* view_all operator */ +static int sequencer_view_all_preview_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + bScreen *sc= CTX_wm_screen(C); + ScrArea *area= CTX_wm_area(C); + ARegion *ar= CTX_wm_region(C); + SpaceSeq *sseq= area->spacedata.first; + View2D *v2d= UI_view2d_fromcontext(C); + + + /* Like zooming on an image view */ + float zoomX, zoomY; + int width, height, imgwidth, imgheight; + + width = ar->winx; + height = ar->winy; + + seq_reset_imageofs(sseq); + + imgwidth= (scene->r.size*scene->r.xsch)/100; + imgheight= (scene->r.size*scene->r.ysch)/100; + + /* Apply aspect, dosnt need to be that accurate */ + imgwidth= (int)(imgwidth * ((float)scene->r.xasp / (float)scene->r.yasp)); + + if (((imgwidth >= width) || (imgheight >= height)) && + ((width > 0) && (height > 0))) { + + /* Find the zoom value that will fit the image in the image space */ + zoomX = ((float)width) / ((float)imgwidth); + zoomY = ((float)height) / ((float)imgheight); + sseq->zoom= (zoomX < zoomY) ? zoomX : zoomY; + + sseq->zoom = 1.0f / power_of_2(1/ MIN2(zoomX, zoomY) ); + } + else { + sseq->zoom= 1.0f; + } + + ED_area_tag_redraw(CTX_wm_area(C)); + return OPERATOR_FINISHED; +} + +void SEQUENCER_OT_view_all_preview(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "View All"; + ot->idname= "SEQUENCER_OT_view_all_preview"; + ot->description="Zoom preview to fit in the area."; + + /* api callbacks */ + ot->exec= sequencer_view_all_preview_exec; + + ot->poll= ED_operator_sequencer_active; + + /* flags */ + ot->flag= OPTYPE_REGISTER; +} + +static EnumPropertyItem view_type_items[] = { + {SEQ_VIEW_SEQUENCE, "SEQUENCER", ICON_SEQ_SEQUENCER, "Sequencer", ""}, + {SEQ_VIEW_PREVIEW, "PREVIEW", ICON_SEQ_PREVIEW, "Image Preview", ""}, + {SEQ_VIEW_SEQUENCE_PREVIEW, "SEQUENCER_PREVIEW", ICON_SEQ_SEQUENCER, "Sequencer and Image Preview", ""}, + {0, NULL, 0, NULL, NULL}}; /* view_all operator */ +static int sequencer_view_toggle_exec(bContext *C, wmOperator *op) +{ + SpaceSeq *sseq= (SpaceSeq *)CTX_wm_space_data(C); + + sseq->view++; + if (sseq->view > SEQ_VIEW_SEQUENCE_PREVIEW) sseq->view = SEQ_VIEW_SEQUENCE; + + ED_sequencer_update_view(C, sseq->view); + + return OPERATOR_FINISHED; +} + +void SEQUENCER_OT_view_toggle(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "View Toggle"; + ot->idname= "SEQUENCER_OT_view_toggle"; + ot->description="Toggle between sequencer views (sequence, preview, both)."; + + /* api callbacks */ + ot->exec= sequencer_view_toggle_exec; + ot->poll= ED_operator_sequencer_active; + + /* flags */ + ot->flag= OPTYPE_REGISTER; +} + + +/* view_selected operator */ static int sequencer_view_selected_exec(bContext *C, wmOperator *op) { Scene *scene= CTX_data_scene(C); @@ -2459,16 +2503,16 @@ static int next_prev_edit_internal(Scene *scene, int side) return change; } -/* select less operator */ +/* move frame to next edit point operator */ static int sequencer_next_edit_exec(bContext *C, wmOperator *op) { Scene *scene= CTX_data_scene(C); - if (next_prev_edit_internal(scene, SEQ_SIDE_RIGHT)) { - ED_area_tag_redraw(CTX_wm_area(C)); - WM_event_add_notifier(C, NC_SCENE|ND_FRAME, scene); - } - + if(!next_prev_edit_internal(scene, SEQ_SIDE_RIGHT)) + return OPERATOR_CANCELLED; + + WM_event_add_notifier(C, NC_SCENE|ND_FRAME, scene); + return OPERATOR_FINISHED; } @@ -2494,9 +2538,10 @@ static int sequencer_previous_edit_exec(bContext *C, wmOperator *op) { Scene *scene= CTX_data_scene(C); - if (next_prev_edit_internal(scene, SEQ_SIDE_LEFT)) { - ED_area_tag_redraw(CTX_wm_area(C)); - } + if(!next_prev_edit_internal(scene, SEQ_SIDE_LEFT)) + return OPERATOR_CANCELLED; + + WM_event_add_notifier(C, NC_SCENE|ND_FRAME, scene); return OPERATOR_FINISHED; } @@ -2545,12 +2590,13 @@ static Sequence* sequence_find_parent(Scene* scene, Sequence* child) } -static int sequencer_swap_internal_exec(bContext *C, int side) +static int sequencer_swap_exec(bContext *C, wmOperator *op) { Scene *scene= CTX_data_scene(C); Editing *ed= seq_give_editing(scene, FALSE); Sequence *active_seq = active_seq_get(scene); - Sequence *seq; + Sequence *seq, *iseq; + int side= RNA_enum_get(op->ptr, "side"); if(ed==NULL) return OPERATOR_CANCELLED; if(active_seq==NULL) return OPERATOR_CANCELLED; @@ -2565,11 +2611,6 @@ static int sequencer_swap_internal_exec(bContext *C, int side) if ((active_seq->type!=SEQ_COLOR) && (active_seq->effectdata || active_seq->seq1 || active_seq->seq2 || active_seq->seq3)) return OPERATOR_CANCELLED; - /* disallow if parent strip (effect strip) is attached */ - if ( sequence_find_parent(scene, active_seq)) { - return OPERATOR_CANCELLED; - } - switch (side) { case SEQ_SIDE_LEFT: swap_sequence(seq, active_seq); @@ -2578,54 +2619,52 @@ static int sequencer_swap_internal_exec(bContext *C, int side) swap_sequence(active_seq, seq); break; } - ED_area_tag_redraw(CTX_wm_area(C)); + + // XXX - should be a generic function + for(iseq= scene->ed->seqbasep->first; iseq; iseq= iseq->next) { + if((iseq->type & SEQ_EFFECT) && (seq_is_parent(iseq, active_seq) || seq_is_parent(iseq, seq))) { + calc_sequence(iseq); + } + } + + /* do this in a new loop since both effects need to be calculated first */ + for(iseq= scene->ed->seqbasep->first; iseq; iseq= iseq->next) { + if((iseq->type & SEQ_EFFECT) && (seq_is_parent(iseq, active_seq) || seq_is_parent(iseq, seq))) { + /* this may now overlap */ + if( seq_test_overlap(ed->seqbasep, iseq) ) { + shuffle_seq(ed->seqbasep, iseq, scene); + } + } + } + + + + sort_seq(scene); + + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene); + + return OPERATOR_FINISHED; } - return OPERATOR_FINISHED; + return OPERATOR_CANCELLED; } -static int sequencer_swap_right_exec(bContext *C, wmOperator *op) -{ - return sequencer_swap_internal_exec(C, SEQ_SIDE_RIGHT); -} - -void SEQUENCER_OT_swap_right(wmOperatorType *ot) +void SEQUENCER_OT_swap(wmOperatorType *ot) { /* identifiers */ - ot->name= "Swap Strip Right"; - ot->idname= "SEQUENCER_OT_swap_right"; - ot->description="Swap active strip with strip to the right."; - - /* api callbacks */ - ot->exec= sequencer_swap_right_exec; - ot->poll= ED_operator_sequencer_active; - - /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; - - /* properties */ -} - -static int sequencer_swap_left_exec(bContext *C, wmOperator *op) -{ - return sequencer_swap_internal_exec(C, SEQ_SIDE_LEFT); -} - -void SEQUENCER_OT_swap_left(wmOperatorType *ot) -{ - /* identifiers */ - ot->name= "Swap Strip Left"; - ot->idname= "SEQUENCER_OT_swap_left"; + ot->name= "Swap Strip"; + ot->idname= "SEQUENCER_OT_swap"; ot->description="Swap active strip with strip to the left."; /* api callbacks */ - ot->exec= sequencer_swap_left_exec; + ot->exec= sequencer_swap_exec; ot->poll= ED_operator_sequencer_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; /* properties */ + RNA_def_enum(ot->srna, "side", prop_side_lr_types, SEQ_SIDE_RIGHT, "Side", "Side of the strip to swap"); } static int sequencer_rendersize_exec(bContext *C, wmOperator *op) @@ -2634,9 +2673,9 @@ static int sequencer_rendersize_exec(bContext *C, wmOperator *op) Scene *scene= CTX_data_scene(C); Sequence *active_seq = active_seq_get(scene); - if(active_seq==NULL) return OPERATOR_CANCELLED; + if(active_seq==NULL) + return OPERATOR_CANCELLED; - printf("got active sequence\n"); switch (active_seq->type) { case SEQ_IMAGE: case SEQ_MOVIE: @@ -2677,3 +2716,120 @@ void SEQUENCER_OT_rendersize(wmOperatorType *ot) /* properties */ } +static void seq_del_sound(Scene *scene, Sequence *seq) +{ + if(seq->type == SEQ_META) { + Sequence *iseq; + for(iseq= seq->seqbase.first; iseq; iseq= iseq->next) { + seq_del_sound(scene, iseq); + } + } + else if(seq->sound_handle) { + sound_delete_handle(scene, seq->sound_handle); + seq->sound_handle= NULL; + } +} + +/* TODO, validate scenes */ +static int sequencer_copy_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Editing *ed= seq_give_editing(scene, FALSE); + Sequence *seq, *seq_act; + + if(ed==NULL) + return OPERATOR_CANCELLED; + + seq_free_clipboard(); + + if(seqbase_isolated_sel_check(ed->seqbasep)==FALSE) { + BKE_report(op->reports, RPT_ERROR, "Please select all related strips"); + return OPERATOR_CANCELLED; + } + + recurs_dupli_seq(scene, ed->seqbasep, &seqbase_clipboard, FALSE); + seqbase_clipboard_frame= scene->r.cfra; + + /* Need to remove anything that references the current scene */ + for(seq= seqbase_clipboard.first; seq; seq= seq->next) { + seq_del_sound(scene, seq); + } + + return OPERATOR_FINISHED; +} + +void SEQUENCER_OT_copy(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Copy"; + ot->idname= "SEQUENCER_OT_copy"; + ot->description=""; + + /* api callbacks */ + ot->exec= sequencer_copy_exec; + ot->poll= ED_operator_sequencer_active; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* properties */ +} + +static void seq_offset(Sequence *seq, int ofs) +{ + if(seq->type == SEQ_META) { + Sequence *iseq; + for(iseq= seq->seqbase.first; iseq; iseq= iseq->next) { + seq_offset(iseq, ofs); + } + } + else { + seq->start += ofs; + } + + calc_sequence_disp(seq); +} + +static int sequencer_paste_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Editing *ed= seq_give_editing(scene, TRUE); /* create if needed */ + ListBase new = {NULL, NULL}; + int ofs; + Sequence *iseq; + + deselect_all_seq(scene); + ofs = scene->r.cfra - seqbase_clipboard_frame; + + recurs_dupli_seq(scene, &seqbase_clipboard, &new, FALSE); + + /* transform pasted strips before adding */ + if(ofs) { + for(iseq= new.first; iseq; iseq= iseq->next) { + seq_offset(iseq, ofs); + } + } + + addlisttolist(ed->seqbasep, &new); + + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene); + + return OPERATOR_FINISHED; +} + +void SEQUENCER_OT_paste(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Paste"; + ot->idname= "SEQUENCER_OT_paste"; + ot->description=""; + + /* api callbacks */ + ot->exec= sequencer_paste_exec; + ot->poll= ED_operator_sequencer_active; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* properties */ +} diff --git a/source/blender/editors/space_sequencer/sequencer_intern.h b/source/blender/editors/space_sequencer/sequencer_intern.h index a68001e536b..cf598bfb613 100644 --- a/source/blender/editors/space_sequencer/sequencer_intern.h +++ b/source/blender/editors/space_sequencer/sequencer_intern.h @@ -54,7 +54,7 @@ void seq_reset_imageofs(struct SpaceSeq *sseq); /* sequencer_edit.c */ struct View2D; -int check_single_seq(struct Sequence *seq); +int seq_single_check(struct Sequence *seq); int seq_tx_get_final_left(struct Sequence *seq, int metaclip); int seq_tx_get_final_right(struct Sequence *seq, int metaclip); void seq_rectf(struct Sequence *seq, struct rctf *rectf); @@ -91,13 +91,19 @@ void SEQUENCER_OT_meta_separate(struct wmOperatorType *ot); void SEQUENCER_OT_snap(struct wmOperatorType *ot); void SEQUENCER_OT_previous_edit(struct wmOperatorType *ot); void SEQUENCER_OT_next_edit(struct wmOperatorType *ot); -void SEQUENCER_OT_swap_right(struct wmOperatorType *ot); -void SEQUENCER_OT_swap_left(struct wmOperatorType *ot); +void SEQUENCER_OT_swap(struct wmOperatorType *ot); void SEQUENCER_OT_rendersize(struct wmOperatorType *ot); +void SEQUENCER_OT_view_toggle(struct wmOperatorType *ot); void SEQUENCER_OT_view_all(struct wmOperatorType *ot); void SEQUENCER_OT_view_selected(struct wmOperatorType *ot); +void SEQUENCER_OT_copy(struct wmOperatorType *ot); +void SEQUENCER_OT_paste(struct wmOperatorType *ot); + +/* preview specific operators */ +void SEQUENCER_OT_view_all_preview(struct wmOperatorType *ot); + /* sequencer_select.c */ void SEQUENCER_OT_select_all_toggle(struct wmOperatorType *ot); void SEQUENCER_OT_select(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_sequencer/sequencer_ops.c b/source/blender/editors/space_sequencer/sequencer_ops.c index 73a2070ca54..7e7b45e623f 100644 --- a/source/blender/editors/space_sequencer/sequencer_ops.c +++ b/source/blender/editors/space_sequencer/sequencer_ops.c @@ -79,13 +79,14 @@ void sequencer_operatortypes(void) WM_operatortype_append(SEQUENCER_OT_snap); WM_operatortype_append(SEQUENCER_OT_next_edit); WM_operatortype_append(SEQUENCER_OT_previous_edit); - WM_operatortype_append(SEQUENCER_OT_swap_right); - WM_operatortype_append(SEQUENCER_OT_swap_left); + WM_operatortype_append(SEQUENCER_OT_swap); WM_operatortype_append(SEQUENCER_OT_rendersize); WM_operatortype_append(SEQUENCER_OT_view_all); WM_operatortype_append(SEQUENCER_OT_view_selected); - + WM_operatortype_append(SEQUENCER_OT_view_all_preview); + WM_operatortype_append(SEQUENCER_OT_view_toggle); + /* sequencer_select.c */ WM_operatortype_append(SEQUENCER_OT_select_all_toggle); WM_operatortype_append(SEQUENCER_OT_select_inverse); @@ -105,14 +106,22 @@ void sequencer_operatortypes(void) WM_operatortype_append(SEQUENCER_OT_image_strip_add); WM_operatortype_append(SEQUENCER_OT_effect_strip_add); WM_operatortype_append(SEQUENCER_OT_properties); + + WM_operatortype_append(SEQUENCER_OT_copy); + WM_operatortype_append(SEQUENCER_OT_paste); } void sequencer_keymap(wmKeyConfig *keyconf) { - wmKeyMap *keymap= WM_keymap_find(keyconf, "Sequencer", SPACE_SEQ, 0); + wmKeyMap *keymap= WM_keymap_find(keyconf, "SequencerCommon", SPACE_SEQ, 0); wmKeyMapItem *kmi; - + + /* operators common to sequence and preview view */ + WM_keymap_add_item(keymap, "SEQUENCER_OT_view_toggle", TABKEY, KM_PRESS, KM_CTRL, 0); + + /* operators for sequence */ + keymap= WM_keymap_find(keyconf, "Sequencer", SPACE_SEQ, 0); WM_keymap_add_item(keymap, "SEQUENCER_OT_properties", NKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "SEQUENCER_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0); @@ -137,6 +146,9 @@ void sequencer_keymap(wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "SEQUENCER_OT_delete", XKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "SEQUENCER_OT_delete", DELKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "SEQUENCER_OT_copy", CKEY, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_item(keymap, "SEQUENCER_OT_paste", VKEY, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_item(keymap, "SEQUENCER_OT_images_separate", YKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "SEQUENCER_OT_meta_toggle", TABKEY, KM_PRESS, 0, 0); @@ -150,8 +162,8 @@ void sequencer_keymap(wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "SEQUENCER_OT_next_edit", PAGEUPKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "SEQUENCER_OT_previous_edit", PAGEDOWNKEY, KM_PRESS, 0, 0); - WM_keymap_add_item(keymap, "SEQUENCER_OT_swap_left", LEFTARROWKEY, KM_PRESS, KM_ALT, 0); - WM_keymap_add_item(keymap, "SEQUENCER_OT_swap_right", RIGHTARROWKEY, KM_PRESS, KM_ALT, 0); + RNA_enum_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_swap", LEFTARROWKEY, KM_PRESS, KM_ALT, 0)->ptr, "side", SEQ_SIDE_LEFT); + RNA_enum_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_swap", RIGHTARROWKEY, KM_PRESS, KM_ALT, 0)->ptr, "side", SEQ_SIDE_RIGHT); WM_keymap_add_item(keymap, "SEQUENCER_OT_snap", SKEY, KM_PRESS, KM_SHIFT, 0); @@ -214,5 +226,8 @@ void sequencer_keymap(wmKeyConfig *keyconf) WM_keymap_add_menu(keymap, "SEQUENCER_MT_add", AKEY, KM_PRESS, KM_SHIFT, 0); transform_keymap_for_space(keyconf, keymap, SPACE_SEQ); + + keymap= WM_keymap_find(keyconf, "SequencerPreview", SPACE_SEQ, 0); + WM_keymap_add_item(keymap, "SEQUENCER_OT_view_all_preview", HOMEKEY, KM_PRESS, 0, 0); } diff --git a/source/blender/editors/space_sequencer/sequencer_select.c b/source/blender/editors/space_sequencer/sequencer_select.c index b197077c68d..69ce2c7c681 100644 --- a/source/blender/editors/space_sequencer/sequencer_select.c +++ b/source/blender/editors/space_sequencer/sequencer_select.c @@ -52,7 +52,7 @@ #include "BKE_global.h" #include "BKE_library.h" #include "BKE_main.h" -#include "BKE_sequence.h" +#include "BKE_sequencer.h" #include "BKE_scene.h" #include "BKE_utildefines.h" @@ -256,7 +256,8 @@ static int sequencer_deselect_exec(bContext *C, wmOperator *op) seq->flag |= SELECT; } } - ED_area_tag_redraw(CTX_wm_area(C)); + + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER_SELECT, scene); return OPERATOR_FINISHED; } @@ -297,7 +298,8 @@ static int sequencer_select_inverse_exec(bContext *C, wmOperator *op) seq->flag |= SELECT; } } - ED_area_tag_redraw(CTX_wm_area(C)); + + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER_SELECT, scene); return OPERATOR_FINISHED; } @@ -508,7 +510,8 @@ static int sequencer_select_invoke(bContext *C, wmOperator *op, wmEvent *event) } #endif - ED_area_tag_redraw(CTX_wm_area(C)); + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER_SELECT, scene); + /* allowing tweaks */ return OPERATOR_FINISHED|OPERATOR_PASS_THROUGH; } @@ -594,9 +597,10 @@ static int sequencer_select_more_exec(bContext *C, wmOperator *op) { Scene *scene= CTX_data_scene(C); - if (select_more_less_seq__internal(scene, 0, 0)) { - ED_area_tag_redraw(CTX_wm_area(C)); - } + if(!select_more_less_seq__internal(scene, 0, 0)) + return OPERATOR_CANCELLED; + + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER_SELECT, scene); return OPERATOR_FINISHED; } @@ -624,9 +628,10 @@ static int sequencer_select_less_exec(bContext *C, wmOperator *op) { Scene *scene= CTX_data_scene(C); - if (select_more_less_seq__internal(scene, 1, 0)) { - ED_area_tag_redraw(CTX_wm_area(C)); - } + if(!select_more_less_seq__internal(scene, 1, 0)) + return OPERATOR_CANCELLED; + + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER_SELECT, scene); return OPERATOR_FINISHED; } @@ -681,7 +686,7 @@ static int sequencer_select_linked_pick_invoke(bContext *C, wmOperator *op, wmEv selected = select_more_less_seq__internal(scene, 1, 1); } - ED_area_tag_redraw(CTX_wm_area(C)); + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER_SELECT, scene); return OPERATOR_FINISHED; } @@ -716,7 +721,7 @@ static int sequencer_select_linked_exec(bContext *C, wmOperator *op) selected = select_more_less_seq__internal(scene, 1, 1); } - ED_area_tag_redraw(CTX_wm_area(C)); + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER_SELECT, scene); return OPERATOR_FINISHED; } @@ -768,7 +773,7 @@ static int sequencer_select_handles_exec(bContext *C, wmOperator *op) } } - ED_area_tag_redraw(CTX_wm_area(C)); + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER_SELECT, scene); return OPERATOR_FINISHED; } @@ -805,7 +810,7 @@ static int sequencer_select_active_side_exec(bContext *C, wmOperator *op) select_active_side(ed->seqbasep, RNA_enum_get(op->ptr, "side"), seq_act->machine, seq_act->startdisp); - ED_area_tag_redraw(CTX_wm_area(C)); + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER_SELECT, scene); return OPERATOR_FINISHED; } @@ -867,6 +872,8 @@ static int sequencer_borderselect_exec(bContext *C, wmOperator *op) } } + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER_SELECT, scene); + return OPERATOR_FINISHED; } diff --git a/source/blender/editors/space_sequencer/space_sequencer.c b/source/blender/editors/space_sequencer/space_sequencer.c index b8adaf23f73..25364aed5ca 100644 --- a/source/blender/editors/space_sequencer/space_sequencer.c +++ b/source/blender/editors/space_sequencer/space_sequencer.c @@ -43,7 +43,7 @@ #include "BKE_colortools.h" #include "BKE_context.h" #include "BKE_screen.h" -#include "BKE_sequence.h" +#include "BKE_sequencer.h" #include "ED_space_api.h" #include "ED_screen.h" @@ -90,6 +90,69 @@ ARegion *sequencer_has_buttons_region(ScrArea *sa) return arnew; } +ARegion *sequencer_find_region(ScrArea *sa, short type) +{ + ARegion *ar=NULL; + + for(ar= sa->regionbase.first; ar; ar= ar->next) + if(ar->regiontype==type) + return ar; + + return ar; +} + +void ED_sequencer_update_view(bContext *C, int view) +{ + ScrArea *sa= CTX_wm_area(C); + + ARegion *ar_main= sequencer_find_region(sa, RGN_TYPE_WINDOW); + ARegion *ar_preview= sequencer_find_region(sa, RGN_TYPE_PREVIEW); + + switch (view) { + case SEQ_VIEW_SEQUENCE: + if (ar_main->flag & RGN_FLAG_HIDDEN) { + ar_main->flag &= ~RGN_FLAG_HIDDEN; + ar_main->v2d.flag &= ~V2D_IS_INITIALISED; + } + if (!(ar_preview->flag & RGN_FLAG_HIDDEN)) { + ar_preview->flag |= RGN_FLAG_HIDDEN; + ar_preview->v2d.flag &= ~V2D_IS_INITIALISED; + WM_event_remove_handlers(C, &ar_preview->handlers); + } + ar_main->alignment= RGN_ALIGN_NONE; + ar_preview->alignment= RGN_ALIGN_NONE; + break; + case SEQ_VIEW_PREVIEW: + if (!(ar_main->flag & RGN_FLAG_HIDDEN)) { + ar_main->flag |= RGN_FLAG_HIDDEN; + ar_main->v2d.flag &= ~V2D_IS_INITIALISED; + WM_event_remove_handlers(C, &ar_main->handlers); + } + if (ar_preview->flag & RGN_FLAG_HIDDEN) { + ar_preview->flag &= ~RGN_FLAG_HIDDEN; + ar_preview->v2d.flag &= ~V2D_IS_INITIALISED; + } + ar_main->alignment= RGN_ALIGN_NONE; + ar_preview->alignment= RGN_ALIGN_NONE; + break; + case SEQ_VIEW_SEQUENCE_PREVIEW: + if (ar_main->flag & RGN_FLAG_HIDDEN) { + ar_main->flag &= ~RGN_FLAG_HIDDEN; + ar_main->v2d.flag &= ~V2D_IS_INITIALISED; + } + if (ar_preview->flag & RGN_FLAG_HIDDEN) { + ar_preview->flag &= ~RGN_FLAG_HIDDEN; + ar_preview->v2d.flag &= ~V2D_IS_INITIALISED; + } + ar_main->alignment= RGN_ALIGN_NONE; + ar_preview->alignment= RGN_ALIGN_TOP; + break; + } + + ED_area_initialize(CTX_wm_manager(C), CTX_wm_window(C), sa); + ED_area_tag_redraw(sa); +} + /* ******************** default callbacks for sequencer space ***************** */ @@ -103,8 +166,8 @@ static SpaceLink *sequencer_new(const bContext *C) sseq->spacetype= SPACE_SEQ; sseq->zoom= 4; sseq->chanshown = 0; - - + sseq->view = SEQ_VIEW_SEQUENCE; + sseq->mainb = SEQ_DRAW_IMG_IMBUF; /* header */ ar= MEM_callocN(sizeof(ARegion), "header for sequencer"); @@ -120,6 +183,13 @@ static SpaceLink *sequencer_new(const bContext *C) ar->alignment= RGN_ALIGN_RIGHT; ar->flag = RGN_FLAG_HIDDEN; + /* preview area */ + ar= MEM_callocN(sizeof(ARegion), "preview area for sequencer"); + BLI_addtail(&sseq->regionbase, ar); + ar->regiontype= RGN_TYPE_PREVIEW; + ar->alignment= RGN_ALIGN_TOP; + ar->flag |= RGN_FLAG_HIDDEN; + /* main area */ ar= MEM_callocN(sizeof(ARegion), "main area for sequencer"); @@ -150,7 +220,7 @@ static SpaceLink *sequencer_new(const bContext *C) ar->v2d.keepzoom= 0; ar->v2d.keeptot= 0; ar->v2d.align= V2D_ALIGN_NO_NEG_Y; - + return (SpaceLink *)sseq; } @@ -181,7 +251,7 @@ static SpaceLink *sequencer_duplicate(SpaceLink *sl) } - +/* *********************** sequencer (main) region ************************ */ /* add handlers, stuff you only do once or on area/region changes */ static void sequencer_main_area_init(wmWindowManager *wm, ARegion *ar) { @@ -189,6 +259,9 @@ static void sequencer_main_area_init(wmWindowManager *wm, ARegion *ar) UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_CUSTOM, ar->winx, ar->winy); + keymap= WM_keymap_find(wm->defaultconf, "SequencerCommon", SPACE_SEQ, 0); + WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); + /* own keymap */ keymap= WM_keymap_find(wm->defaultconf, "Sequencer", SPACE_SEQ, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); @@ -196,19 +269,10 @@ static void sequencer_main_area_init(wmWindowManager *wm, ARegion *ar) static void sequencer_main_area_draw(const bContext *C, ARegion *ar) { - ScrArea *sa= CTX_wm_area(C); - SpaceSeq *sseq= sa->spacedata.first; - Scene *scene= CTX_data_scene(C); +// ScrArea *sa= CTX_wm_area(C); - - if (sseq->mainb != SEQ_DRAW_SEQUENCE) { - /* image-viewer types */ - draw_image_seq(scene, ar, sseq); - } - else { - /* NLE - strip editing timeline interface */ - draw_timeline_seq(C, ar); - } + /* NLE - strip editing timeline interface */ + draw_timeline_seq(C, ar); } @@ -232,6 +296,7 @@ static void sequencer_main_area_listener(ARegion *ar, wmNotifier *wmn) case ND_FRAME: case ND_MARKERS: case ND_SEQUENCER: + case ND_SEQUENCER_SELECT: ED_region_tag_redraw(ar); break; } @@ -240,6 +305,64 @@ static void sequencer_main_area_listener(ARegion *ar, wmNotifier *wmn) if(wmn->data == ND_SPACE_SEQUENCER) ED_region_tag_redraw(ar); break; + case NC_ID: + if(wmn->action == NA_RENAME) + ED_region_tag_redraw(ar); + break; + } +} + +/* *********************** preview region ************************ */ +static void sequencer_preview_area_init(wmWindowManager *wm, ARegion *ar) +{ + wmKeyMap *keymap; + + UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_STANDARD, ar->winx, ar->winy); + + keymap= WM_keymap_find(wm->defaultconf, "SequencerCommon", SPACE_SEQ, 0); + WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); + + /* own keymap */ + keymap= WM_keymap_find(wm->defaultconf, "SequencerPreview", SPACE_SEQ, 0); + WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); +} + +static void sequencer_preview_area_draw(const bContext *C, ARegion *ar) +{ + ScrArea *sa= CTX_wm_area(C); + SpaceSeq *sseq= sa->spacedata.first; + Scene *scene= CTX_data_scene(C); + + /* XXX temp fix for wrong setting in sseq->mainb */ + if (sseq->mainb == SEQ_DRAW_SEQUENCE) sseq->mainb = SEQ_DRAW_IMG_IMBUF; + draw_image_seq(scene, ar, sseq); +} + +static void sequencer_preview_area_listener(ARegion *ar, wmNotifier *wmn) +{ + /* context changes */ + switch(wmn->category) { + case NC_SCENE: + switch(wmn->data) { + case ND_FRAME: + case ND_MARKERS: + case ND_SEQUENCER: + case ND_SEQUENCER_SELECT: + ED_region_tag_redraw(ar); + break; + } + break; + case NC_SPACE: + if(wmn->data == ND_SPACE_SEQUENCER) + ED_region_tag_redraw(ar); + break; + case NC_ID: + switch(wmn->data) { + case NA_RENAME: + ED_region_tag_redraw(ar); + break; + } + break; } } @@ -266,6 +389,7 @@ static void sequencer_buttons_area_listener(ARegion *ar, wmNotifier *wmn) switch(wmn->data) { case ND_FRAME: case ND_SEQUENCER: + case ND_SEQUENCER_SELECT: ED_region_tag_redraw(ar); break; } @@ -274,7 +398,10 @@ static void sequencer_buttons_area_listener(ARegion *ar, wmNotifier *wmn) if(wmn->data == ND_SPACE_SEQUENCER) ED_region_tag_redraw(ar); break; - + case NC_ID: + if(wmn->action == NA_RENAME) + ED_region_tag_redraw(ar); + break; } } /* ************************************* */ @@ -286,6 +413,7 @@ void ED_spacetype_sequencer(void) ARegionType *art; st->spaceid= SPACE_SEQ; + strncpy(st->name, "Sequencer", BKE_ST_MAXNAME); st->new= sequencer_new; st->free= sequencer_free; @@ -303,6 +431,16 @@ void ED_spacetype_sequencer(void) art->keymapflag= ED_KEYMAP_VIEW2D|ED_KEYMAP_FRAMES|ED_KEYMAP_ANIMATION; BLI_addhead(&st->regiontypes, art); + + /* preview */ + art= MEM_callocN(sizeof(ARegionType), "spacetype sequencer region"); + art->regionid = RGN_TYPE_PREVIEW; + art->minsizey = 240; // XXX + art->init= sequencer_preview_area_init; + art->draw= sequencer_preview_area_draw; + art->listener= sequencer_preview_area_listener; + art->keymapflag= ED_KEYMAP_VIEW2D|ED_KEYMAP_FRAMES|ED_KEYMAP_ANIMATION; + BLI_addhead(&st->regiontypes, art); /* regions: listview/buttons */ art= MEM_callocN(sizeof(ARegionType), "spacetype sequencer region"); diff --git a/source/blender/editors/space_sound/space_sound.c b/source/blender/editors/space_sound/space_sound.c index f2c449ffc1f..1cd5ab65c0f 100644 --- a/source/blender/editors/space_sound/space_sound.c +++ b/source/blender/editors/space_sound/space_sound.c @@ -224,6 +224,7 @@ void ED_spacetype_sound(void) ARegionType *art; st->spaceid= SPACE_SOUND; + strncpy(st->name, "Sound", BKE_ST_MAXNAME); st->new= sound_new; st->free= sound_free; diff --git a/source/blender/editors/space_text/space_text.c b/source/blender/editors/space_text/space_text.c index a8d146bb7a8..2f0e631e927 100644 --- a/source/blender/editors/space_text/space_text.c +++ b/source/blender/editors/space_text/space_text.c @@ -222,7 +222,9 @@ static void text_keymap(struct wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "TEXT_OT_cut", XKEY, KM_PRESS, KM_OSKEY, 0); WM_keymap_add_item(keymap, "TEXT_OT_copy", CKEY, KM_PRESS, KM_OSKEY, 0); WM_keymap_add_item(keymap, "TEXT_OT_paste", VKEY, KM_PRESS, KM_OSKEY, 0); - WM_keymap_add_item(keymap, "TEXT_OT_find", FKEY, KM_PRESS, KM_OSKEY, 0); + WM_keymap_add_item(keymap, "TEXT_OT_properties", FKEY, KM_PRESS, KM_OSKEY, 0); + WM_keymap_add_item(keymap, "TEXT_OT_find_set_selected", EKEY, KM_PRESS, KM_OSKEY, 0); + WM_keymap_add_item(keymap, "TEXT_OT_find", GKEY, KM_PRESS, KM_OSKEY, 0); WM_keymap_add_item(keymap, "TEXT_OT_select_all", AKEY, KM_PRESS, KM_OSKEY, 0); WM_keymap_add_item(keymap, "TEXT_OT_select_line", AKEY, KM_PRESS, KM_SHIFT|KM_OSKEY, 0); #endif @@ -242,13 +244,11 @@ static void text_keymap(struct wmKeyConfig *keyconf) if(U.uiflag & USER_MMB_PASTE) // XXX not dynamic RNA_boolean_set(WM_keymap_add_item(keymap, "TEXT_OT_paste", MIDDLEMOUSE, KM_PRESS, 0, 0)->ptr, "selection", 1); - WM_keymap_add_item(keymap, "TEXT_OT_jump", GKEY, KM_PRESS, KM_CTRL, 0); - WM_keymap_add_item(keymap, "TEXT_OT_find", FKEY, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_item(keymap, "TEXT_OT_jump", JKEY, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_item(keymap, "TEXT_OT_find", GKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "TEXT_OT_properties", FKEY, KM_PRESS, KM_CTRL, 0); - WM_keymap_add_item(keymap, "TEXT_OT_properties", FKEY, KM_PRESS, KM_ALT, 0); WM_keymap_add_item(keymap, "TEXT_OT_replace", HKEY, KM_PRESS, KM_CTRL, 0); - WM_keymap_add_item(keymap, "TEXT_OT_replace", HKEY, KM_PRESS, KM_ALT, 0); WM_keymap_add_item(keymap, "TEXT_OT_to_3d_object", MKEY, KM_PRESS, KM_ALT, 0); @@ -261,13 +261,12 @@ static void text_keymap(struct wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "TEXT_OT_uncomment", DKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_move", HOMEKEY, KM_PRESS, 0, 0)->ptr, "type", LINE_BEGIN); + RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_move", ENDKEY, KM_PRESS, 0, 0)->ptr, "type", LINE_END); RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_move", LEFTARROWKEY, KM_PRESS, KM_CTRL, 0)->ptr, "type", LINE_BEGIN); - RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_move", ENDKEY, KM_PRESS, 0, 0)->ptr, "type", LINE_END); - RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_move", RIGHTARROWKEY, KM_PRESS, KM_CTRL, 0)->ptr, "type", LINE_BEGIN); + RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_move", RIGHTARROWKEY, KM_PRESS, KM_CTRL, 0)->ptr, "type", LINE_END); RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_move", EKEY, KM_PRESS, KM_CTRL, 0)->ptr, "type", LINE_END); RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_move", EKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0)->ptr, "type", LINE_END); - RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_move", ENDKEY, KM_PRESS, 0, 0)->ptr, "type", LINE_END); RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_move", LEFTARROWKEY, KM_PRESS, 0, 0)->ptr, "type", PREV_CHAR); RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_move", RIGHTARROWKEY, KM_PRESS, 0, 0)->ptr, "type", NEXT_CHAR); RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_move", LEFTARROWKEY, KM_PRESS, KM_CTRL, 0)->ptr, "type", PREV_WORD); @@ -303,8 +302,6 @@ static void text_keymap(struct wmKeyConfig *keyconf) RNA_int_set(WM_keymap_add_item(keymap, "TEXT_OT_scroll", WHEELUPMOUSE, KM_PRESS, 0, 0)->ptr, "lines", -1); RNA_int_set(WM_keymap_add_item(keymap, "TEXT_OT_scroll", WHEELDOWNMOUSE, KM_PRESS, 0, 0)->ptr, "lines", 1); - WM_keymap_add_item(keymap, "TEXT_OT_to_3d_object", MKEY, KM_PRESS, KM_ALT, 0); - WM_keymap_add_item(keymap, "TEXT_OT_line_break", RETKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "TEXT_OT_line_number", KM_TEXTINPUT, KM_ANY, KM_ANY, 0); @@ -405,6 +402,7 @@ void ED_spacetype_text(void) ARegionType *art; st->spaceid= SPACE_TEXT; + strncpy(st->name, "Text", BKE_ST_MAXNAME); st->new= text_new; st->free= text_free; diff --git a/source/blender/editors/space_text/text_ops.c b/source/blender/editors/space_text/text_ops.c index 16a7f97afd6..1a23b9ecc42 100644 --- a/source/blender/editors/space_text/text_ops.c +++ b/source/blender/editors/space_text/text_ops.c @@ -735,9 +735,6 @@ void TEXT_OT_paste(wmOperatorType *ot) ot->exec= paste_exec; ot->poll= text_edit_poll; - /* flags */ - ot->flag= OPTYPE_REGISTER; - /* properties */ RNA_def_boolean(ot->srna, "selection", 0, "Selection", "Paste text selected elsewhere rather than copied, X11 only."); } @@ -806,9 +803,6 @@ void TEXT_OT_cut(wmOperatorType *ot) /* api callbacks */ ot->exec= cut_exec; ot->poll= text_edit_poll; - - /* flags */ - ot->flag= OPTYPE_REGISTER; } /******************* indent operator *********************/ @@ -842,9 +836,6 @@ void TEXT_OT_indent(wmOperatorType *ot) /* api callbacks */ ot->exec= indent_exec; ot->poll= text_edit_poll; - - /* flags */ - ot->flag= OPTYPE_REGISTER; } /******************* unindent operator *********************/ @@ -878,9 +869,6 @@ void TEXT_OT_unindent(wmOperatorType *ot) /* api callbacks */ ot->exec= unindent_exec; ot->poll= text_edit_poll; - - /* flags */ - ot->flag= OPTYPE_REGISTER; } /******************* line break operator *********************/ @@ -919,9 +907,6 @@ void TEXT_OT_line_break(wmOperatorType *ot) /* api callbacks */ ot->exec= line_break_exec; ot->poll= text_edit_poll; - - /* flags */ - ot->flag= OPTYPE_REGISTER; } /******************* comment operator *********************/ @@ -952,9 +937,6 @@ void TEXT_OT_comment(wmOperatorType *ot) /* api callbacks */ ot->exec= comment_exec; ot->poll= text_edit_poll; - - /* flags */ - ot->flag= OPTYPE_REGISTER; } /******************* uncomment operator *********************/ @@ -986,9 +968,6 @@ void TEXT_OT_uncomment(wmOperatorType *ot) /* api callbacks */ ot->exec= uncomment_exec; ot->poll= text_edit_poll; - - /* flags */ - ot->flag= OPTYPE_REGISTER; } /******************* convert whitespace operator *********************/ @@ -1129,9 +1108,6 @@ void TEXT_OT_convert_whitespace(wmOperatorType *ot) ot->exec= convert_whitespace_exec; ot->poll= text_edit_poll; - /* flags */ - ot->flag= OPTYPE_REGISTER; - /* properties */ RNA_def_enum(ot->srna, "type", whitespace_type_items, TO_SPACES, "type", "Type of whitespace to convert to."); } @@ -1159,9 +1135,6 @@ void TEXT_OT_select_all(wmOperatorType *ot) /* api callbacks */ ot->exec= select_all_exec; ot->poll= text_edit_poll; - - /* flags */ - ot->flag= OPTYPE_REGISTER; } /******************* select line operator *********************/ @@ -1187,9 +1160,6 @@ void TEXT_OT_select_line(wmOperatorType *ot) /* api clinebacks */ ot->exec= select_line_exec; ot->poll= text_edit_poll; - - /* flags */ - ot->flag= OPTYPE_REGISTER; } /******************* previous marker operator *********************/ @@ -1225,9 +1195,6 @@ void TEXT_OT_previous_marker(wmOperatorType *ot) /* api callbacks */ ot->exec= previous_marker_exec; ot->poll= text_edit_poll; - - /* flags */ - ot->flag= OPTYPE_REGISTER; } /******************* next marker operator *********************/ @@ -1263,9 +1230,6 @@ void TEXT_OT_next_marker(wmOperatorType *ot) /* api callbacks */ ot->exec= next_marker_exec; ot->poll= text_edit_poll; - - /* flags */ - ot->flag= OPTYPE_REGISTER; } /******************* clear all markers operator *********************/ @@ -1291,9 +1255,6 @@ void TEXT_OT_markers_clear(wmOperatorType *ot) /* api callbacks */ ot->exec= clear_all_markers_exec; ot->poll= text_edit_poll; - - /* flags */ - ot->flag= OPTYPE_REGISTER; } /************************ move operator ************************/ @@ -1576,9 +1537,6 @@ void TEXT_OT_move(wmOperatorType *ot) ot->exec= move_exec; ot->poll= text_edit_poll; - /* flags */ - ot->flag= OPTYPE_REGISTER; - /* properties */ RNA_def_enum(ot->srna, "type", move_type_items, LINE_BEGIN, "Type", "Where to move cursor to."); } @@ -1603,9 +1561,6 @@ void TEXT_OT_move_select(wmOperatorType *ot) ot->exec= move_select_exec; ot->poll= text_space_edit_poll; - /* flags */ - ot->flag= OPTYPE_REGISTER; - /* properties */ RNA_def_enum(ot->srna, "type", move_type_items, LINE_BEGIN, "Type", "Where to move cursor to, to make a selection."); } @@ -1640,9 +1595,6 @@ void TEXT_OT_jump(wmOperatorType *ot) ot->exec= jump_exec; ot->poll= text_edit_poll; - /* flags */ - ot->flag= OPTYPE_REGISTER; - /* properties */ RNA_def_int(ot->srna, "line", 1, 1, INT_MAX, "Line", "Line number to jump to.", 1, 10000); } @@ -1693,9 +1645,6 @@ void TEXT_OT_delete(wmOperatorType *ot) ot->exec= delete_exec; ot->poll= text_edit_poll; - /* flags */ - ot->flag= OPTYPE_REGISTER; - /* properties */ RNA_def_enum(ot->srna, "type", delete_type_items, DEL_NEXT_CHAR, "Type", "Which part of the text to delete."); } @@ -1721,9 +1670,6 @@ void TEXT_OT_overwrite_toggle(wmOperatorType *ot) /* api callbacks */ ot->exec= toggle_overwrite_exec; ot->poll= text_space_edit_poll; - - /* flags */ - ot->flag= OPTYPE_REGISTER; } /******************* scroll operator **********************/ @@ -2208,9 +2154,6 @@ void TEXT_OT_cursor_set(wmOperatorType *ot) ot->cancel= set_cursor_cancel; ot->poll= text_region_edit_poll; - /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_BLOCKING; - /* properties */ RNA_def_boolean(ot->srna, "select", 0, "Select", "Set selection end rather than cursor."); } @@ -2332,9 +2275,6 @@ void TEXT_OT_insert(wmOperatorType *ot) ot->invoke= insert_invoke; ot->poll= text_edit_poll; - /* flags */ - ot->flag= OPTYPE_REGISTER; - /* properties */ RNA_def_string(ot->srna, "text", "", 0, "Text", "Text to insert at the cursor position."); } diff --git a/source/blender/editors/space_time/space_time.c b/source/blender/editors/space_time/space_time.c index 59314fba48e..eea5891a720 100644 --- a/source/blender/editors/space_time/space_time.c +++ b/source/blender/editors/space_time/space_time.c @@ -45,6 +45,7 @@ #include "BKE_screen.h" #include "BKE_utildefines.h" +#include "ED_anim_api.h" #include "ED_keyframes_draw.h" #include "ED_space_api.h" #include "ED_screen.h" @@ -66,27 +67,6 @@ /* ************************ main time area region *********************** */ -/* draws a current frame indicator for the TimeLine */ -static void time_draw_cfra_time(const bContext *C, SpaceTime *stime, ARegion *ar) -{ - Scene *scene= CTX_data_scene(C); - float vec[2]; - - vec[0]= scene->r.cfra*scene->r.framelen; - - UI_ThemeColor(TH_CFRAME); // no theme, should be global color once... - glLineWidth(3.0); - - glBegin(GL_LINES); - vec[1]= ar->v2d.cur.ymin; - glVertex2fv(vec); - vec[1]= ar->v2d.cur.ymax; - glVertex2fv(vec); - glEnd(); - - glLineWidth(1.0); -} - static void time_draw_sfra_efra(const bContext *C, SpaceTime *stime, ARegion *ar) { View2D *v2d= UI_view2d_fromcontext(C); @@ -218,8 +198,8 @@ static void time_main_area_draw(const bContext *C, ARegion *ar) View2D *v2d= &ar->v2d; View2DGrid *grid; View2DScrollers *scrollers; + int unit, flag=0; float col[3]; - int unit; /* clear and setup matrix */ UI_GetThemeColor3fv(TH_BACK, col); @@ -241,7 +221,9 @@ static void time_main_area_draw(const bContext *C, ARegion *ar) time_draw_keyframes(C, stime, ar); /* current frame */ - time_draw_cfra_time(C, stime, ar); + if ((stime->flag & TIME_DRAWFRAMES)==0) flag |= DRAWCFRA_UNIT_SECONDS; + if (stime->flag & TIME_CFRA_NUM) flag |= DRAWCFRA_SHOW_NUMBOX; + ANIM_draw_cfra(C, v2d, flag); /* markers */ UI_view2d_view_orthoSpecial(C, v2d, 1); diff --git a/source/blender/editors/space_userpref/space_userpref.c b/source/blender/editors/space_userpref/space_userpref.c index da475ff4c5b..f45e08be697 100644 --- a/source/blender/editors/space_userpref/space_userpref.c +++ b/source/blender/editors/space_userpref/space_userpref.c @@ -153,6 +153,7 @@ void ED_spacetype_userpref(void) ARegionType *art; st->spaceid= SPACE_USERPREF; + strncpy(st->name, "Userpref", BKE_ST_MAXNAME); st->new= userpref_new; st->free= userpref_free; diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index f60f4ad9230..edb91f2b0c9 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -108,6 +108,7 @@ #include "ED_mesh.h" #include "ED_particle.h" #include "ED_screen.h" +#include "ED_sculpt.h" #include "ED_types.h" #include "ED_util.h" @@ -2703,7 +2704,7 @@ static void draw_mesh_object_outline(View3D *v3d, Object *ob, DerivedMesh *dm) drawFacesSolid() doesn't draw the transparent faces */ if(ob->dtx & OB_DRAWTRANSP) { glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - dm->drawFacesSolid(dm, GPU_enable_material); + dm->drawFacesSolid(dm, NULL, 0, GPU_enable_material); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); GPU_disable_material(); } @@ -2722,7 +2723,7 @@ static int wpaint__setSolidDrawOptions(void *userData, int index, int *drawSmoot return 1; } -static void draw_mesh_fancy(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, int dt, int flag) +static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D *rv3d, Base *base, int dt, int flag) { Object *ob= base->object; Mesh *me = ob->data; @@ -2795,7 +2796,7 @@ static void draw_mesh_fancy(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base } } else if(dt==OB_SOLID) { - if((v3d->flag&V3D_SELECT_OUTLINE) && (base->flag&SELECT) && !draw_wire) + if((v3d->flag&V3D_SELECT_OUTLINE) && (base->flag&SELECT) && !draw_wire && !ob->sculpt) draw_mesh_object_outline(v3d, ob, dm); glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, me->flag & ME_TWOSIDED ); @@ -2803,7 +2804,23 @@ static void draw_mesh_fancy(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base glEnable(GL_LIGHTING); glFrontFace((ob->transflag&OB_NEG_SCALE)?GL_CW:GL_CCW); - dm->drawFacesSolid(dm, GPU_enable_material); + if(ob->sculpt) { + Paint *p = paint_get_active(scene); + float planes[4][4]; + float (*fpl)[4] = NULL; + int fast= (p->flags & PAINT_FAST_NAVIGATE) && (rv3d->rflag & RV3D_NAVIGATING); + + if(ob->sculpt->partial_redraw) { + sculpt_get_redraw_planes(planes, ar, rv3d, ob); + fpl = planes; + ob->sculpt->partial_redraw = 0; + } + + dm->drawFacesSolid(dm, fpl, fast, GPU_enable_material); + } + else + dm->drawFacesSolid(dm, NULL, 0, GPU_enable_material); + GPU_disable_material(); glFrontFace(GL_CCW); @@ -2814,7 +2831,8 @@ static void draw_mesh_fancy(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base } else { UI_ThemeColor(TH_WIRE); } - dm->drawLooseEdges(dm); + if(!ob->sculpt) + dm->drawLooseEdges(dm); } else if(dt==OB_SHADED) { int do_draw= 1; /* to resolve all G.f settings below... */ @@ -2932,7 +2950,7 @@ static void draw_mesh_fancy(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base } /* returns 1 if nothing was drawn, for detecting to draw an object center */ -static int draw_mesh_object(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, int dt, int flag) +static int draw_mesh_object(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D *rv3d, Base *base, int dt, int flag) { Object *ob= base->object; Object *obedit= scene->obedit; @@ -2967,10 +2985,6 @@ static int draw_mesh_object(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base if (obedit!=ob && finalDM) finalDM->release(finalDM); } -// else if(!em && (G.f & G_SCULPTMODE) &&(scene->sculptdata.flags & SCULPT_DRAW_FAST) && -// OBACT==ob && !sculpt_modifiers_active(ob)) { -// XXX sculptmode_draw_mesh(0); -// } else { /* don't create boundbox here with mesh_get_bb(), the derived system will make it, puts deformed bb's OK */ if(me->totface<=4 || boundbox_clip(rv3d, ob->obmat, (ob->bb)? ob->bb: me->bb)) { @@ -2982,7 +2996,7 @@ static int draw_mesh_object(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base (check_alpha)? &do_alpha_pass: NULL); } - draw_mesh_fancy(scene, v3d, rv3d, base, dt, flag); + draw_mesh_fancy(scene, ar, v3d, rv3d, base, dt, flag); GPU_end_object_materials(); @@ -3010,7 +3024,7 @@ static int drawDispListwire(ListBase *dlbase) if(dlbase==NULL) return 1; - glDisableClientState(GL_NORMAL_ARRAY); + glEnableClientState(GL_VERTEX_ARRAY); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); for(dl= dlbase->first; dl; dl= dl->next) { @@ -3087,7 +3101,7 @@ static int drawDispListwire(ListBase *dlbase) } } - glEnableClientState(GL_NORMAL_ARRAY); + glDisableClientState(GL_VERTEX_ARRAY); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); return 0; @@ -3106,6 +3120,7 @@ static void drawDispListsolid(ListBase *lb, Object *ob, int glsl) glGetFloatv(GL_CURRENT_COLOR, curcol); glEnable(GL_LIGHTING); + glEnableClientState(GL_VERTEX_ARRAY); if(ob->transflag & OB_NEG_SCALE) glFrontFace(GL_CW); else glFrontFace(GL_CCW); @@ -3164,10 +3179,12 @@ static void drawDispListsolid(ListBase *lb, Object *ob, int glsl) if(dl->rt & CU_SMOOTH) glShadeModel(GL_SMOOTH); else glShadeModel(GL_FLAT); - + + glEnableClientState(GL_NORMAL_ARRAY); glVertexPointer(3, GL_FLOAT, 0, dl->verts); glNormalPointer(GL_FLOAT, 0, dl->nors); glDrawElements(GL_QUADS, 4*dl->totindex, GL_UNSIGNED_INT, dl->index); + glDisableClientState(GL_NORMAL_ARRAY); } break; @@ -3177,32 +3194,35 @@ static void drawDispListsolid(ListBase *lb, Object *ob, int glsl) glVertexPointer(3, GL_FLOAT, 0, dl->verts); /* voor polys only one normal needed */ - if(index3_nors_incr==0) { - glDisableClientState(GL_NORMAL_ARRAY); - glNormal3fv(ndata); + if(index3_nors_incr) { + glEnableClientState(GL_NORMAL_ARRAY); + glNormalPointer(GL_FLOAT, 0, dl->nors); } else - glNormalPointer(GL_FLOAT, 0, dl->nors); + glNormal3fv(ndata); glDrawElements(GL_TRIANGLES, 3*dl->parts, GL_UNSIGNED_INT, dl->index); - if(index3_nors_incr==0) - glEnableClientState(GL_NORMAL_ARRAY); + if(index3_nors_incr) + glDisableClientState(GL_NORMAL_ARRAY); break; case DL_INDEX4: GPU_enable_material(dl->col+1, (glsl)? &gattribs: NULL); + glEnableClientState(GL_NORMAL_ARRAY); glVertexPointer(3, GL_FLOAT, 0, dl->verts); glNormalPointer(GL_FLOAT, 0, dl->nors); glDrawElements(GL_QUADS, 4*dl->parts, GL_UNSIGNED_INT, dl->index); + glDisableClientState(GL_NORMAL_ARRAY); break; } dl= dl->next; } + glDisableClientState(GL_VERTEX_ARRAY); glShadeModel(GL_FLAT); glDisable(GL_LIGHTING); glFrontFace(GL_CCW); @@ -3216,7 +3236,7 @@ static void drawDispListshaded(ListBase *lb, Object *ob) if(lb==NULL) return; glShadeModel(GL_SMOOTH); - glDisableClientState(GL_NORMAL_ARRAY); + glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_COLOR_ARRAY); dl= lb->first; @@ -3255,7 +3275,7 @@ static void drawDispListshaded(ListBase *lb, Object *ob) } glShadeModel(GL_FLAT); - glEnableClientState(GL_NORMAL_ARRAY); + glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_COLOR_ARRAY); } @@ -3996,14 +4016,12 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv /* 6. */ glGetIntegerv(GL_POLYGON_MODE, polygonmode); - glDisableClientState(GL_NORMAL_ARRAY); + glEnableClientState(GL_VERTEX_ARRAY); if(draw_as==PART_DRAW_PATH){ ParticleCacheKey **cache, *path; float *cd2=0,*cdata2=0; - glEnableClientState(GL_VERTEX_ARRAY); - /* setup gl flags */ if(ob_dt > OB_WIRE) { glEnableClientState(GL_NORMAL_ARRAY); @@ -4131,7 +4149,6 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv glDisableClientState(GL_COLOR_ARRAY); cpack(0xC0C0C0); - glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3, GL_FLOAT, 0, pdd->vedata); glDrawArrays(GL_LINES, 0, 2*totve); @@ -4144,7 +4161,8 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv glDisable(GL_LIGHTING); glDisableClientState(GL_COLOR_ARRAY); - glEnableClientState(GL_NORMAL_ARRAY); + glDisableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_NORMAL_ARRAY); if(states) MEM_freeN(states); @@ -4166,6 +4184,16 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv wmLoadMatrix(rv3d->viewmat); } +static void draw_update_ptcache_edit(Scene *scene, Object *ob, PTCacheEdit *edit) +{ + if(edit->psys && edit->psys->flag & PSYS_HAIR_UPDATED) + PE_update_object(scene, ob, 0); + + /* create path and child path cache if it doesn't exist already */ + if(edit->pathcache==0) + psys_cache_edit_paths(scene, ob, edit, CFRA); +} + static void draw_ptcache_edit(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob, PTCacheEdit *edit, int dt) { ParticleCacheKey **cache, *path, *pkey; @@ -4178,14 +4206,6 @@ static void draw_ptcache_edit(Scene *scene, View3D *v3d, RegionView3D *rv3d, Obj float nosel_col[3]; float *pathcol = NULL, *pcol; - - if(edit->psys && edit->psys->flag & PSYS_HAIR_UPDATED) - PE_update_object(scene, ob, 0); - - /* create path and child path cache if it doesn't exist already */ - if(edit->pathcache==0) - psys_cache_edit_paths(scene, ob, edit, CFRA); - if(edit->pathcache==0) return; @@ -4207,7 +4227,6 @@ static void draw_ptcache_edit(Scene *scene, View3D *v3d, RegionView3D *rv3d, Obj } glEnableClientState(GL_VERTEX_ARRAY); - glDisableClientState(GL_NORMAL_ARRAY); glEnableClientState(GL_COLOR_ARRAY); glEnable(GL_COLOR_MATERIAL); @@ -4317,7 +4336,8 @@ static void draw_ptcache_edit(Scene *scene, View3D *v3d, RegionView3D *rv3d, Obj glDisable(GL_LIGHTING); glDisable(GL_COLOR_MATERIAL); glDisableClientState(GL_COLOR_ARRAY); - glEnableClientState(GL_NORMAL_ARRAY); + glDisableClientState(GL_NORMAL_ARRAY); + glDisableClientState(GL_VERTEX_ARRAY); glEnable(GL_DEPTH_TEST); glLineWidth(1.0f); @@ -5738,7 +5758,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) switch( ob->type) { case OB_MESH: - empty_object= draw_mesh_object(scene, v3d, rv3d, base, dt, flag); + empty_object= draw_mesh_object(scene, ar, v3d, rv3d, base, dt, flag); if(flag!=DRAW_CONSTCOLOR) dtx &= ~OB_DRAWWIRE; // mesh draws wire itself break; @@ -5900,7 +5920,40 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) if(ob->pd && ob->pd->forcefield) draw_forcefield(scene, ob); - /* particle mode has to be drawn first so that possible child particles get cached in edit mode */ + /* code for new particle system */ + if( (warning_recursive==0) && + (ob->particlesystem.first) && + (flag & DRAW_PICKING)==0 && + (ob!=scene->obedit) + ) { + ParticleSystem *psys; + PTCacheEdit *edit = PE_get_current(scene, ob); + + if(col || (ob->flag & SELECT)) cpack(0xFFFFFF); /* for visibility, also while wpaint */ + //glDepthMask(GL_FALSE); + + wmLoadMatrix(rv3d->viewmat); + + view3d_cached_text_draw_begin(); + + for(psys=ob->particlesystem.first; psys; psys=psys->next) { + /* run this so that possible child particles get cached */ + if(ob->mode & OB_MODE_PARTICLE_EDIT && ob==OBACT) + if(edit && edit->psys == psys) + draw_update_ptcache_edit(scene, ob, edit); + + draw_new_particle_system(scene, v3d, rv3d, base, psys, dt); + } + + view3d_cached_text_draw_end(v3d, ar, 0, NULL); + + wmMultMatrix(ob->obmat); + + //glDepthMask(GL_TRUE); + if(col) cpack(col); + } + + /* draw edit particles last so that they can draw over child particles */ if( (warning_recursive==0) && (flag & DRAW_PICKING)==0 && (!scene->obedit) @@ -5916,31 +5969,6 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) } } - /* code for new particle system */ - if( (warning_recursive==0) && - (ob->particlesystem.first) && - (flag & DRAW_PICKING)==0 && - (ob!=scene->obedit) - ) { - ParticleSystem *psys; - if(col || (ob->flag & SELECT)) cpack(0xFFFFFF); /* for visibility, also while wpaint */ - //glDepthMask(GL_FALSE); - - wmLoadMatrix(rv3d->viewmat); - - view3d_cached_text_draw_begin(); - - for(psys=ob->particlesystem.first; psys; psys=psys->next) - draw_new_particle_system(scene, v3d, rv3d, base, psys, dt); - - view3d_cached_text_draw_end(v3d, ar, 0, NULL); - - wmMultMatrix(ob->obmat); - - //glDepthMask(GL_TRUE); - if(col) cpack(col); - } - /* draw code for smoke */ if((md = modifiers_findByType(ob, eModifierType_Smoke))) { @@ -6319,10 +6347,8 @@ static void bbs_mesh_solid(Scene *scene, View3D *v3d, Object *ob) int ind; colors = MEM_mallocN(dm->getNumFaces(dm)*sizeof(MCol)*4,"bbs_mesh_solid"); for(i=0;igetNumFaces(dm);i++) { - if( index != 0 ) - ind = index[i]; - else - ind = i; + ind= ( index )? index[i]: i; + if (face_sel_mode==0 || !(me->mface[ind].flag&ME_HIDE)) { unsigned int fbindex = index_to_framebuffer(ind+1); for(j=0;j<4;j++) { @@ -6449,7 +6475,7 @@ static void draw_object_mesh_instance(Scene *scene, View3D *v3d, RegionView3D *r glEnable(GL_LIGHTING); if(dm) { - dm->drawFacesSolid(dm, GPU_enable_material); + dm->drawFacesSolid(dm, NULL, 0, GPU_enable_material); GPU_end_object_materials(); } else if(edm) diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index db617473291..b4f3605c559 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -452,12 +452,13 @@ static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn) case ND_OB_ACTIVE: case ND_OB_SELECT: case ND_LAYER: - ED_region_tag_redraw(ar); - break; + case ND_RENDER_OPTIONS: case ND_MODE: ED_region_tag_redraw(ar); break; } + if (wmn->action == NA_EDITED) + ED_region_tag_redraw(ar); break; case NC_OBJECT: switch(wmn->data) { @@ -518,7 +519,7 @@ static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn) ED_region_tag_redraw(ar); break; case NC_ID: - if(wmn->data == ND_ID_RENAME) + if(wmn->action == NA_RENAME) ED_region_tag_redraw(ar); break; } @@ -644,7 +645,7 @@ static void view3d_buttons_area_listener(ARegion *ar, wmNotifier *wmn) ED_region_tag_redraw(ar); break; case NC_ID: - if(wmn->data == ND_ID_RENAME) + if(wmn->action == NA_RENAME) ED_region_tag_redraw(ar); break; } @@ -775,6 +776,7 @@ void ED_spacetype_view3d(void) ARegionType *art; st->spaceid= SPACE_VIEW3D; + strncpy(st->name, "View3D", BKE_ST_MAXNAME); st->new= view3d_new; st->free= view3d_free; diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index a988ceb50e7..a21b8442c85 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -502,7 +502,7 @@ static void v3d_transform_butsR(uiLayout *layout, PointerRNA *ptr) { uiLayout *split, *colsub; - split = uiLayoutSplit(layout, 0.8); + split = uiLayoutSplit(layout, 0.8, 0); if (ptr->type == &RNA_PoseBone) { PointerRNA boneptr; @@ -518,7 +518,7 @@ static void v3d_transform_butsR(uiLayout *layout, PointerRNA *ptr) uiItemL(colsub, "", 0); uiItemR(colsub, "", ICON_LOCKED, ptr, "lock_location", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY); - split = uiLayoutSplit(layout, 0.8); + split = uiLayoutSplit(layout, 0.8, 0); switch(RNA_enum_get(ptr, "rotation_mode")) { case ROT_MODE_QUAT: /* quaternion */ @@ -553,7 +553,7 @@ static void v3d_transform_butsR(uiLayout *layout, PointerRNA *ptr) } uiItemR(layout, "", 0, ptr, "rotation_mode", 0); - split = uiLayoutSplit(layout, 0.8); + split = uiLayoutSplit(layout, 0.8, 0); colsub = uiLayoutColumn(split, 1); uiItemR(colsub, "Scale", 0, ptr, "scale", 0); colsub = uiLayoutColumn(split, 1); diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index acb82283604..a680a3bd40d 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -343,7 +343,7 @@ static void drawgrid(UnitSettings *unit, ARegion *ar, View3D *v3d, char **grid_u } } else { // start blending out - UI_ThemeColorBlend(TH_BACK, TH_GRID, dx/(GRID_MIN_PX*10)); + UI_ThemeColorBlend(TH_BACK, TH_GRID, dx/(GRID_MIN_PX*6)); drawgrid_draw(ar, wx, wy, x, y, dx); UI_ThemeColor(TH_GRID); @@ -351,7 +351,7 @@ static void drawgrid(UnitSettings *unit, ARegion *ar, View3D *v3d, char **grid_u } } else { // start blending out (GRID_MIN_PX < dx < (GRID_MIN_PX*10)) - UI_ThemeColorBlend(TH_BACK, TH_GRID, dx/(GRID_MIN_PX*10)); + UI_ThemeColorBlend(TH_BACK, TH_GRID, dx/(GRID_MIN_PX*6)); drawgrid_draw(ar, wx, wy, x, y, dx); UI_ThemeColor(TH_GRID); @@ -370,21 +370,21 @@ static void drawgrid(UnitSettings *unit, ARegion *ar, View3D *v3d, char **grid_u drawgrid_draw(ar, wx, wy, x, y, dx); } else { - UI_ThemeColorBlend(TH_BACK, TH_GRID, dx/(GRID_MIN_PX*10)); + UI_ThemeColorBlend(TH_BACK, TH_GRID, dx/(GRID_MIN_PX*6)); drawgrid_draw(ar, wx, wy, x, y, dx); UI_ThemeColor(TH_GRID); drawgrid_draw(ar, wx, wy, x, y, dx*sublines); } } else { - UI_ThemeColorBlend(TH_BACK, TH_GRID, dx/(GRID_MIN_PX*10)); + UI_ThemeColorBlend(TH_BACK, TH_GRID, dx/(GRID_MIN_PX*6)); drawgrid_draw(ar, wx, wy, x, y, dx); UI_ThemeColor(TH_GRID); drawgrid_draw(ar, wx, wy, x, y, dx*sublines); } } else { - UI_ThemeColorBlend(TH_BACK, TH_GRID, dx/(GRID_MIN_PX*10)); + UI_ThemeColorBlend(TH_BACK, TH_GRID, dx/(GRID_MIN_PX*6)); drawgrid_draw(ar, wx, wy, x, y, dx); UI_ThemeColor(TH_GRID); drawgrid_draw(ar, wx, wy, x, y, dx*sublines); @@ -1113,11 +1113,11 @@ void backdrawview3d(Scene *scene, ARegion *ar, View3D *v3d) else if((base && (base->object->mode & OB_MODE_PARTICLE_EDIT)) && v3d->drawtype>OB_WIRE && (v3d->flag & V3D_ZBUF_SELECT)); else if(scene->obedit && v3d->drawtype>OB_WIRE && (v3d->flag & V3D_ZBUF_SELECT)); else { - v3d->flag &= ~V3D_NEEDBACKBUFDRAW; + v3d->flag &= ~V3D_INVALID_BACKBUF; return; } - if( !(v3d->flag & V3D_NEEDBACKBUFDRAW) ) return; + if( !(v3d->flag & V3D_INVALID_BACKBUF) ) return; // if(test) { // if(qtest()) { @@ -1162,7 +1162,7 @@ void backdrawview3d(Scene *scene, ARegion *ar, View3D *v3d) draw_object_backbufsel(scene, v3d, rv3d, base->object); } - v3d->flag &= ~V3D_NEEDBACKBUFDRAW; + v3d->flag &= ~V3D_INVALID_BACKBUF; G.f &= ~G_BACKBUFSEL; v3d->zbuf= FALSE; @@ -1183,7 +1183,7 @@ void backdrawview3d(Scene *scene, ARegion *ar, View3D *v3d) void view3d_validate_backbuf(ViewContext *vc) { - if(vc->v3d->flag & V3D_NEEDBACKBUFDRAW) + if(vc->v3d->flag & V3D_INVALID_BACKBUF) backdrawview3d(vc->scene, vc->ar, vc->v3d); } @@ -1643,37 +1643,6 @@ void view3d_update_depths(ARegion *ar, View3D *v3d) } } -/* Enable sculpting in wireframe mode by drawing sculpt object only to the depth buffer */ -static void draw_sculpt_depths(Scene *scene, ARegion *ar, View3D *v3d) -{ - Object *ob = OBACT; - - int dt= MIN2(v3d->drawtype, ob->dt); - if(v3d->zbuf==0 && dt>OB_WIRE) - dt= OB_WIRE; - if(dt == OB_WIRE) { - GLboolean depth_on; - int orig_vdt = v3d->drawtype; - int orig_zbuf = v3d->zbuf; - int orig_odt = ob->dt; - - glGetBooleanv(GL_DEPTH_TEST, &depth_on); - v3d->drawtype = ob->dt = OB_SOLID; - v3d->zbuf = 1; - - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - glEnable(GL_DEPTH_TEST); - draw_object(scene, ar, v3d, BASACT, 0); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - if(!depth_on) - glDisable(GL_DEPTH_TEST); - - v3d->drawtype = orig_vdt; - v3d->zbuf = orig_zbuf; - ob->dt = orig_odt; - } -} - void draw_depth(Scene *scene, ARegion *ar, View3D *v3d, int (* func)(void *)) { RegionView3D *rv3d= ar->regiondata; @@ -1891,8 +1860,6 @@ static CustomDataMask get_viewedit_datamask(bScreen *screen, Scene *scene, Objec mask |= CD_MASK_MCOL; if(ob->mode & OB_MODE_WEIGHT_PAINT) mask |= CD_MASK_WEIGHT_MCOL; - if(ob->mode & OB_MODE_SCULPT) - mask |= CD_MASK_MDISPS; } return mask; @@ -1949,7 +1916,7 @@ void ED_view3d_draw_offscreen(Scene *scene, View3D *v3d, ARegion *ar, int winx, Base *base; int bwinx, bwiny; - wmPushMatrix(); + glPushMatrix(); /* set temporary new size */ bwinx= ar->winx; @@ -2024,7 +1991,7 @@ void ED_view3d_draw_offscreen(Scene *scene, View3D *v3d, ARegion *ar, int winx, ar->winx= bwinx; ar->winy= bwiny; - wmPopMatrix(); + glPopMatrix(); } void view3d_main_area_draw(const bContext *C, ARegion *ar) @@ -2137,7 +2104,7 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) } // retopo= retopo_mesh_check() || retopo_curve_check(); - sculptparticle= (obact && obact->mode & (OB_MODE_SCULPT|OB_MODE_PARTICLE_EDIT)) && !scene->obedit; + sculptparticle= (obact && obact->mode & (OB_MODE_PARTICLE_EDIT)) && !scene->obedit; if(retopo) view3d_update_depths(ar, v3d); @@ -2150,8 +2117,6 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) } if(!retopo && sculptparticle && !(obact && (obact->dtx & OB_DRAWXRAY))) { - if(obact && obact->mode & OB_MODE_SCULPT) - draw_sculpt_depths(scene, ar, v3d); view3d_update_depths(ar, v3d); } @@ -2166,8 +2131,6 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) view3d_draw_xray(scene, ar, v3d, 1); // clears zbuffer if it is used! if(!retopo && sculptparticle && (obact && (OBACT->dtx & OB_DRAWXRAY))) { - if(obact && obact->mode & OB_MODE_SCULPT) - draw_sculpt_depths(scene, ar, v3d); view3d_update_depths(ar, v3d); } @@ -2189,8 +2152,6 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) ED_region_pixelspace(ar); - /* Draw Sculpt Mode brush XXX (removed) */ - // retopo_paint_view_update(v3d); // retopo_draw_paint_lines(); @@ -2227,24 +2188,7 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) /* XXX here was the blockhandlers for floating panels */ - if(ob && ob->mode & (OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT)) { - v3d->flag |= V3D_NEEDBACKBUFDRAW; - // XXX addafterqueue(ar->win, BACKBUFDRAW, 1); - } - - if((ob && ob->mode & OB_MODE_PARTICLE_EDIT) && v3d->drawtype>OB_WIRE && (v3d->flag & V3D_ZBUF_SELECT)) { - v3d->flag |= V3D_NEEDBACKBUFDRAW; - // XXX addafterqueue(ar->win, BACKBUFDRAW, 1); - } - - // test for backbuf select - if(scene->obedit && v3d->drawtype>OB_WIRE && (v3d->flag & V3D_ZBUF_SELECT)) { - - v3d->flag |= V3D_NEEDBACKBUFDRAW; - // XXX if(afterqtest(ar->win, BACKBUFDRAW)==0) { - // addafterqueue(ar->win, BACKBUFDRAW, 1); - //} - } + v3d->flag |= V3D_INVALID_BACKBUF; } diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 844ee2973ce..43caf85e1bc 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -234,13 +234,20 @@ typedef struct ViewOpsData { ARegion *ar; RegionView3D *rv3d; + /* needed for continuous zoom */ + wmTimer *timer; + double timer_lastdraw; + float oldquat[4]; float trackvec[3]; - float ofs[3], obofs[3]; float reverse, dist0; float grid, far; short axis_snap; /* view rotate only */ + /* use for orbit selection and auto-dist */ + float ofs[3], dyn_ofs[3]; + short use_dyn_ofs; + int origx, origy, oldx, oldy; int origkey; /* the key that triggered the operator */ @@ -275,7 +282,7 @@ static void calctrackballvec(rcti *rect, int mx, int my, float *vec) } -static void viewops_data(bContext *C, wmOperator *op, wmEvent *event) +static void viewops_data_create(bContext *C, wmOperator *op, wmEvent *event) { static float lastofs[3] = {0,0,0}; View3D *v3d = CTX_wm_view3d(C); @@ -292,14 +299,56 @@ static void viewops_data(bContext *C, wmOperator *op, wmEvent *event) vod->origx= vod->oldx= event->x; vod->origy= vod->oldy= event->y; vod->origkey= event->type; /* the key that triggered the operator. */ - - if (U.uiflag & USER_ORBIT_SELECTION) - { + vod->use_dyn_ofs= (U.uiflag & USER_ORBIT_SELECTION) ? 1:0; + + if (vod->use_dyn_ofs) { VECCOPY(vod->ofs, rv3d->ofs); /* If there's no selection, lastofs is unmodified and last value since static */ - calculateTransformCenter(C, event, V3D_CENTROID, lastofs); - VECCOPY(vod->obofs, lastofs); - mul_v3_fl(vod->obofs, -1.0f); + calculateTransformCenter(C, V3D_CENTROID, lastofs); + VECCOPY(vod->dyn_ofs, lastofs); + mul_v3_fl(vod->dyn_ofs, -1.0f); + } + else if (U.uiflag & USER_ORBIT_ZBUF) { + + view3d_operator_needs_opengl(C); /* needed for zbuf drawing */ + + if((vod->use_dyn_ofs=view_autodist(CTX_data_scene(C), vod->ar, v3d, event->mval, vod->dyn_ofs))) { + if (rv3d->persp==RV3D_PERSP) { + float my_origin[3]; /* original G.vd->ofs */ + float my_pivot[3]; /* view */ + float dvec[3]; + + // locals for dist correction + float mat[3][3]; + float upvec[3]; + + VECCOPY(my_origin, rv3d->ofs); + negate_v3(my_origin); /* ofs is flipped */ + + /* Set the dist value to be the distance from this 3d point */ + /* this means youll always be able to zoom into it and panning wont go bad when dist was zero */ + + /* remove dist value */ + upvec[0] = upvec[1] = 0; + upvec[2] = rv3d->dist; + copy_m3_m4(mat, rv3d->viewinv); + + mul_m3_v3(mat, upvec); + sub_v3_v3v3(my_pivot, rv3d->ofs, upvec); + negate_v3(my_pivot); /* ofs is flipped */ + + /* find a new ofs value that is allong the view axis (rather then the mouse location) */ + closest_to_line_v3(dvec, vod->dyn_ofs, my_pivot, my_origin); + vod->dist0 = rv3d->dist = len_v3v3(my_pivot, dvec); + + negate_v3(dvec); + VECCOPY(rv3d->ofs, dvec); + } + negate_v3(vod->dyn_ofs); + VECCOPY(vod->ofs, rv3d->ofs); + } else { + vod->ofs[0] = vod->ofs[1] = vod->ofs[2] = 0.0f; + } } /* lookup, we dont pass on v3d to prevent confusement */ @@ -314,6 +363,24 @@ static void viewops_data(bContext *C, wmOperator *op, wmEvent *event) if (rv3d->persmat[2][1] < 0.0f) vod->reverse= -1.0f; + rv3d->rflag |= RV3D_NAVIGATING; +} + +static void viewops_data_free(bContext *C, wmOperator *op) +{ + Paint *p = paint_get_active(CTX_data_scene(C)); + ViewOpsData *vod= op->customdata; + + vod->rv3d->rflag &= ~RV3D_NAVIGATING; + + if(p && (p->flags & PAINT_FAST_NAVIGATE)) + ED_region_tag_redraw(vod->ar); + + if(vod->timer) + WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), vod->timer); + + MEM_freeN(vod); + op->customdata= NULL; } /* ************************** viewrotate **********************************/ @@ -413,7 +480,6 @@ void viewrotate_modal_keymap(wmKeyConfig *keyconf) static void viewrotate_apply(ViewOpsData *vod, int x, int y) { RegionView3D *rv3d= vod->rv3d; - int use_sel= U.uiflag & USER_ORBIT_SELECTION; rv3d->view= 0; /* need to reset everytime because of view snapping */ @@ -449,7 +515,7 @@ static void viewrotate_apply(ViewOpsData *vod, int x, int y) q1[3]*= si; mul_qt_qtqt(rv3d->viewquat, q1, vod->oldquat); - if (use_sel) { + if (vod->use_dyn_ofs) { /* compute the post multiplication quat, to rotate the offset correctly */ QUATCOPY(q1, vod->oldquat); conjugate_qt(q1); @@ -457,9 +523,9 @@ static void viewrotate_apply(ViewOpsData *vod, int x, int y) conjugate_qt(q1); /* conj == inv for unit quat */ VECCOPY(rv3d->ofs, vod->ofs); - sub_v3_v3v3(rv3d->ofs, rv3d->ofs, vod->obofs); + sub_v3_v3v3(rv3d->ofs, rv3d->ofs, vod->dyn_ofs); mul_qt_v3(q1, rv3d->ofs); - add_v3_v3v3(rv3d->ofs, rv3d->ofs, vod->obofs); + add_v3_v3v3(rv3d->ofs, rv3d->ofs, vod->dyn_ofs); } } else { @@ -491,11 +557,11 @@ static void viewrotate_apply(ViewOpsData *vod, int x, int y) q1[3] = si * xvec[2]; mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, q1); - if (use_sel) { + if (vod->use_dyn_ofs) { conjugate_qt(q1); /* conj == inv for unit quat */ - sub_v3_v3v3(rv3d->ofs, rv3d->ofs, vod->obofs); + sub_v3_v3v3(rv3d->ofs, rv3d->ofs, vod->dyn_ofs); mul_qt_v3(q1, rv3d->ofs); - add_v3_v3v3(rv3d->ofs, rv3d->ofs, vod->obofs); + add_v3_v3v3(rv3d->ofs, rv3d->ofs, vod->dyn_ofs); } /* Perform the orbital rotation */ @@ -505,11 +571,11 @@ static void viewrotate_apply(ViewOpsData *vod, int x, int y) q1[3] = sin(phi); mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, q1); - if (use_sel) { + if (vod->use_dyn_ofs) { conjugate_qt(q1); - sub_v3_v3v3(rv3d->ofs, rv3d->ofs, vod->obofs); + sub_v3_v3v3(rv3d->ofs, rv3d->ofs, vod->dyn_ofs); mul_qt_v3(q1, rv3d->ofs); - add_v3_v3v3(rv3d->ofs, rv3d->ofs, vod->obofs); + add_v3_v3v3(rv3d->ofs, rv3d->ofs, vod->dyn_ofs); } } @@ -578,9 +644,7 @@ static int viewrotate_modal(bContext *C, wmOperator *op, wmEvent *event) } else if (event_code==VIEW_CONFIRM) { request_depth_update(CTX_wm_region_view3d(C)); - - MEM_freeN(vod); - op->customdata= NULL; + viewops_data_free(C, op); return OPERATOR_FINISHED; } @@ -597,7 +661,7 @@ static int viewrotate_invoke(bContext *C, wmOperator *op, wmEvent *event) return OPERATOR_CANCELLED; /* makes op->customdata */ - viewops_data(C, op, event); + viewops_data_create(C, op, event); vod= op->customdata; /* switch from camera view when: */ @@ -718,8 +782,7 @@ static int viewmove_modal(bContext *C, wmOperator *op, wmEvent *event) else if (event_code==VIEW_CONFIRM) { request_depth_update(CTX_wm_region_view3d(C)); - MEM_freeN(vod); - op->customdata= NULL; + viewops_data_free(C, op); return OPERATOR_FINISHED; } @@ -730,7 +793,7 @@ static int viewmove_modal(bContext *C, wmOperator *op, wmEvent *event) static int viewmove_invoke(bContext *C, wmOperator *op, wmEvent *event) { /* makes op->customdata */ - viewops_data(C, op, event); + viewops_data_create(C, op, event); /* add temp handler */ WM_event_add_modal_handler(C, op); @@ -835,8 +898,12 @@ static void viewzoom_apply(ViewOpsData *vod, int x, int y) float zfac=1.0; if(U.viewzoom==USER_ZOOM_CONT) { + double time= PIL_check_seconds_timer(); + float time_step= (float)(time - vod->timer_lastdraw); + // oldstyle zoom - zfac = 1.0+(float)(vod->origx - x + vod->origy - y)/1000.0; + zfac = 1.0f + (((float)(vod->origx - x + vod->origy - y)/20.0) * time_step); + vod->timer_lastdraw= time; } else if(U.viewzoom==USER_ZOOM_SCALE) { int ctr[2], len1, len2; @@ -903,7 +970,10 @@ static int viewzoom_modal(bContext *C, wmOperator *op, wmEvent *event) short event_code= VIEW_PASS; /* execute the events */ - if(event->type==MOUSEMOVE) { + if (event->type == TIMER && event->customdata == vod->timer) { + event_code= VIEW_APPLY; + } + else if(event->type==MOUSEMOVE) { event_code= VIEW_APPLY; } else if(event->type==EVT_MODAL_MAP) { @@ -922,9 +992,7 @@ static int viewzoom_modal(bContext *C, wmOperator *op, wmEvent *event) } else if (event_code==VIEW_CONFIRM) { request_depth_update(CTX_wm_region_view3d(C)); - - MEM_freeN(vod); - op->customdata= NULL; + viewops_data_free(C, op); return OPERATOR_FINISHED; } @@ -984,8 +1052,15 @@ static int viewzoom_invoke(bContext *C, wmOperator *op, wmEvent *event) viewzoom_exec(C, op); } else { + ViewOpsData *vod; + /* makes op->customdata */ - viewops_data(C, op, event); + viewops_data_create(C, op, event); + + vod= op->customdata; + + vod->timer= WM_event_add_timer(CTX_wm_manager(C), CTX_wm_window(C), TIMER, 0.01f); + vod->timer_lastdraw= PIL_check_seconds_timer(); /* add temp handler */ WM_event_add_modal_handler(C, op); @@ -1326,6 +1401,8 @@ static int render_border_exec(bContext *C, wmOperator *op) } else { scene->r.mode |= R_BORDER; } + + WM_event_add_notifier(C, NC_SCENE|ND_RENDER_OPTIONS, NULL); return OPERATOR_FINISHED; @@ -1628,36 +1705,43 @@ static int viewnumpad_exec(bContext *C, wmOperator *op) RegionView3D *rv3d= CTX_wm_region_view3d(C); Scene *scene= CTX_data_scene(C); static int perspo=RV3D_PERSP; - int viewnum, align_active; + int viewnum, align_active, nextperspo; viewnum = RNA_enum_get(op->ptr, "type"); align_active = RNA_boolean_get(op->ptr, "align_active"); + /* Use this to test if we started out with a camera */ + if (rv3d->persp == RV3D_CAMOB) { + nextperspo= rv3d->lpersp; + } else { + nextperspo= perspo; + } + switch (viewnum) { case RV3D_VIEW_BOTTOM : - axis_set_view(C, 0.0, -1.0, 0.0, 0.0, viewnum, perspo, align_active); + axis_set_view(C, 0.0, -1.0, 0.0, 0.0, viewnum, nextperspo, align_active); break; case RV3D_VIEW_BACK: - axis_set_view(C, 0.0, 0.0, (float)-cos(M_PI/4.0), (float)-cos(M_PI/4.0), viewnum, perspo, align_active); + axis_set_view(C, 0.0, 0.0, (float)-cos(M_PI/4.0), (float)-cos(M_PI/4.0), viewnum, nextperspo, align_active); break; case RV3D_VIEW_LEFT: - axis_set_view(C, 0.5, -0.5, 0.5, 0.5, viewnum, perspo, align_active); + axis_set_view(C, 0.5, -0.5, 0.5, 0.5, viewnum, nextperspo, align_active); break; case RV3D_VIEW_TOP: - axis_set_view(C, 1.0, 0.0, 0.0, 0.0, viewnum, perspo, align_active); + axis_set_view(C, 1.0, 0.0, 0.0, 0.0, viewnum, nextperspo, align_active); break; case RV3D_VIEW_FRONT: - axis_set_view(C, (float)cos(M_PI/4.0), (float)-sin(M_PI/4.0), 0.0, 0.0, viewnum, perspo, align_active); + axis_set_view(C, (float)cos(M_PI/4.0), (float)-sin(M_PI/4.0), 0.0, 0.0, viewnum, nextperspo, align_active); break; case RV3D_VIEW_RIGHT: - axis_set_view(C, 0.5, -0.5, -0.5, -0.5, viewnum, perspo, align_active); + axis_set_view(C, 0.5, -0.5, -0.5, -0.5, viewnum, nextperspo, align_active); break; case RV3D_VIEW_CAMERA: @@ -1920,12 +2004,9 @@ void ED_view3d_local_clipping(RegionView3D *rv3d, float mat[][4]) static int view3d_clipping_exec(bContext *C, wmOperator *op) { RegionView3D *rv3d= CTX_wm_region_view3d(C); + ViewContext vc; + bglMats mats; rcti rect; - double mvmatrix[16]; - double projmatrix[16]; - double xs, ys, p[3]; - GLint viewport[4]; - short val; rect.xmin= RNA_int_get(op->ptr, "xmin"); rect.ymin= RNA_int_get(op->ptr, "ymin"); @@ -1938,36 +2019,9 @@ static int view3d_clipping_exec(bContext *C, wmOperator *op) /* note; otherwise opengl won't work */ view3d_operator_needs_opengl(C); - /* Get the matrices needed for gluUnProject */ - glGetIntegerv(GL_VIEWPORT, viewport); - glGetDoublev(GL_MODELVIEW_MATRIX, mvmatrix); - glGetDoublev(GL_PROJECTION_MATRIX, projmatrix); - - /* near zero floating point values can give issues with gluUnProject - in side view on some implementations */ - if(fabs(mvmatrix[0]) < 1e-6) mvmatrix[0]= 0.0; - if(fabs(mvmatrix[5]) < 1e-6) mvmatrix[5]= 0.0; - - /* Set up viewport so that gluUnProject will give correct values */ - viewport[0] = 0; - viewport[1] = 0; - - /* four clipping planes and bounding volume */ - /* first do the bounding volume */ - for(val=0; val<4; val++) { - - xs= (val==0||val==3)?rect.xmin:rect.xmax; - ys= (val==0||val==1)?rect.ymin:rect.ymax; - - gluUnProject(xs, ys, 0.0, mvmatrix, projmatrix, viewport, &p[0], &p[1], &p[2]); - VECCOPY(rv3d->clipbb->vec[val], p); - - gluUnProject(xs, ys, 1.0, mvmatrix, projmatrix, viewport, &p[0], &p[1], &p[2]); - VECCOPY(rv3d->clipbb->vec[4+val], p); - } - - /* then plane equations */ - calc_clipping_plane(rv3d->clip, rv3d->clipbb); + view3d_set_viewcontext(C, &vc); + view3d_get_transformation(vc.ar, vc.rv3d, vc.obact, &mats); + view3d_calculate_clipping(rv3d->clipbb, rv3d->clip, &mats, &rect); return OPERATOR_FINISHED; } @@ -2057,14 +2111,10 @@ static int set_3dcursor_invoke(bContext *C, wmOperator *op, wmEvent *event) fp[2]= (rv3d->persinv[0][2]*dx + rv3d->persinv[1][2]*dy+ rv3d->persinv[2][2]*fz)-rv3d->ofs[2]; } -// if(lr_click) { - // XXX if(obedit->type==OB_MESH) add_click_mesh(); - // else if ELEM(obedit->type, OB_CURVE, OB_SURF) addvert_Nurb(0); - // else if (obedit->type==OB_ARMATURE) addvert_armature(); -// VECCOPY(fp, oldcurs); -// } - // XXX notifier for scene */ - ED_area_tag_redraw(CTX_wm_area(C)); + if(v3d && v3d->localvd) + WM_event_add_notifier(C, NC_SPACE|ND_SPACE_VIEW3D, v3d); + else + WM_event_add_notifier(C, NC_SCENE|NA_EDITED, scene); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c index 3b60d4d555f..27c062fee8c 100644 --- a/source/blender/editors/space_view3d/view3d_ops.c +++ b/source/blender/editors/space_view3d/view3d_ops.c @@ -183,8 +183,6 @@ void view3d_keymap(wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "VIEW3D_OT_localview", PADSLASHKEY, KM_PRESS, 0, 0); - WM_keymap_add_item(keymap, "VIEW3D_OT_game_start", PKEY, KM_PRESS, 0, 0); - /* layers, shift + alt are properties set in invoke() */ RNA_int_set(WM_keymap_add_item(keymap, "VIEW3D_OT_layers", ACCENTGRAVEKEY, KM_PRESS, 0, 0)->ptr, "nr", 0); RNA_int_set(WM_keymap_add_item(keymap, "VIEW3D_OT_layers", ONEKEY, KM_PRESS, KM_ANY, 0)->ptr, "nr", 1); @@ -266,7 +264,7 @@ void view3d_keymap(wmKeyConfig *keyconf) kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", PERIODKEY, KM_PRESS, KM_CTRL, 0); RNA_string_set(kmi->ptr, "path", "space_data.pivot_point"); - RNA_string_set(kmi->ptr, "value", "INDIVIDUAL_CENTERS"); + RNA_string_set(kmi->ptr, "value", "INDIVIDUAL_ORIGINS"); kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", PERIODKEY, KM_PRESS, KM_ALT, 0); RNA_string_set(kmi->ptr, "path", "space_data.pivot_point"); diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index 54038853775..e7c8070b7c5 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -124,24 +124,24 @@ void view3d_get_view_aligned_coordinate(ViewContext *vc, float *fp, short mval[2 } } -void view3d_get_transformation(ViewContext *vc, Object *ob, bglMats *mats) +void view3d_get_transformation(ARegion *ar, RegionView3D *rv3d, Object *ob, bglMats *mats) { float cpy[4][4]; int i, j; - mul_m4_m4m4(cpy, ob->obmat, vc->rv3d->viewmat); + mul_m4_m4m4(cpy, ob->obmat, rv3d->viewmat); for(i = 0; i < 4; ++i) { for(j = 0; j < 4; ++j) { - mats->projection[i*4+j] = vc->rv3d->winmat[i][j]; + mats->projection[i*4+j] = rv3d->winmat[i][j]; mats->modelview[i*4+j] = cpy[i][j]; } } - mats->viewport[0] = vc->ar->winrct.xmin; - mats->viewport[1] = vc->ar->winrct.ymin; - mats->viewport[2] = vc->ar->winx; - mats->viewport[3] = vc->ar->winy; + mats->viewport[0] = ar->winrct.xmin; + mats->viewport[1] = ar->winrct.ymin; + mats->viewport[2] = ar->winx; + mats->viewport[3] = ar->winy; } /* ********************** view3d_select: selection manipulations ********************* */ @@ -461,8 +461,10 @@ static void do_lasso_select_mesh(ViewContext *vc, short mcords[][2], short moves data.done = 0; data.pass = 0; - bbsel= EM_mask_init_backbuf_border(vc, mcords, moves, rect.xmin, rect.ymin, rect.xmax, rect.ymax); + /* workaround: init mats first, EM_mask_init_backbuf_border can change + view matrix to pixel space, breaking edge select with backbuf .. */ ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */ + bbsel= EM_mask_init_backbuf_border(vc, mcords, moves, rect.xmin, rect.ymin, rect.xmax, rect.ymax); if(ts->selectmode & SCE_SELECT_VERTEX) { if (bbsel) { @@ -908,7 +910,7 @@ static Base *mouse_select_menu(bContext *C, ViewContext *vc, unsigned int *buffe /* UI */ uiPopupMenu *pup= uiPupMenuBegin(C, "Select Object", 0); uiLayout *layout= uiPupMenuLayout(pup); - uiLayout *split= uiLayoutSplit(layout, 0); + uiLayout *split= uiLayoutSplit(layout, 0, 0); uiLayout *column= uiLayoutColumn(split, 0); LinkNode *node; @@ -1352,8 +1354,8 @@ static void do_mesh_box_select(ViewContext *vc, rcti *rect, int select, int exte EM_deselect_all(vc->em); } - bbsel= EM_init_backbuf_border(vc, rect->xmin, rect->ymin, rect->xmax, rect->ymax); ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */ + bbsel= EM_init_backbuf_border(vc, rect->xmin, rect->ymin, rect->xmax, rect->ymax); if(ts->selectmode & SCE_SELECT_VERTEX) { if (bbsel) { diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 2b42b64c0a3..bbf728d31c0 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -287,6 +287,8 @@ void smooth_view(bContext *C, Object *oldcamera, Object *camera, float *ofs, flo /* ensure it shows correct */ if(sms.to_camera) rv3d->persp= RV3D_PERSP; + + rv3d->rflag |= RV3D_NAVIGATING; /* keep track of running timer! */ if(rv3d->sms==NULL) @@ -295,7 +297,7 @@ void smooth_view(bContext *C, Object *oldcamera, Object *camera, float *ofs, flo if(rv3d->smooth_timer) WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), rv3d->smooth_timer); /* TIMER1 is hardcoded in keymap */ - rv3d->smooth_timer= WM_event_add_timer(CTX_wm_manager(C), CTX_wm_window(C), TIMER1, 1.0/30.0); /* max 30 frs/sec */ + rv3d->smooth_timer= WM_event_add_timer(CTX_wm_manager(C), CTX_wm_window(C), TIMER1, 1.0/100.0); /* max 30 frs/sec */ return; } @@ -349,6 +351,7 @@ static int view3d_smoothview_invoke(bContext *C, wmOperator *op, wmEvent *event) WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), rv3d->smooth_timer); rv3d->smooth_timer= NULL; + rv3d->rflag &= ~RV3D_NAVIGATING; } else { int i; @@ -392,6 +395,7 @@ void VIEW3D_OT_smoothview(wmOperatorType *ot) static void setcameratoview3d(View3D *v3d, RegionView3D *rv3d, Object *ob) { float dvec[3]; + float mat3[3][3]; dvec[0]= rv3d->dist*rv3d->viewinv[2][0]; dvec[1]= rv3d->dist*rv3d->viewinv[2][1]; @@ -401,7 +405,10 @@ static void setcameratoview3d(View3D *v3d, RegionView3D *rv3d, Object *ob) sub_v3_v3v3(ob->loc, ob->loc, rv3d->ofs); rv3d->viewquat[0]= -rv3d->viewquat[0]; - quat_to_eul( ob->rot,rv3d->viewquat); + // quat_to_eul( ob->rot,rv3d->viewquat); // in 2.4x for xyz eulers only + quat_to_mat3(mat3, rv3d->viewquat); + object_mat3_to_rot(ob, mat3, 0); + rv3d->viewquat[0]= -rv3d->viewquat[0]; ob->recalc= OB_RECALC_OB; @@ -486,6 +493,44 @@ void VIEW3D_OT_setobjectascamera(wmOperatorType *ot) /* ********************************** */ +void view3d_calculate_clipping(BoundBox *bb, float planes[4][4], bglMats *mats, rcti *rect) +{ + double xs, ys, p[3]; + short val; + + /* near zero floating point values can give issues with gluUnProject + in side view on some implementations */ + if(fabs(mats->modelview[0]) < 1e-6) mats->modelview[0]= 0.0; + if(fabs(mats->modelview[5]) < 1e-6) mats->modelview[5]= 0.0; + + /* Set up viewport so that gluUnProject will give correct values */ + mats->viewport[0] = 0; + mats->viewport[1] = 0; + + /* four clipping planes and bounding volume */ + /* first do the bounding volume */ + for(val=0; val<4; val++) { + xs= (val==0||val==3)?rect->xmin:rect->xmax; + ys= (val==0||val==1)?rect->ymin:rect->ymax; + + gluUnProject(xs, ys, 0.0, mats->modelview, mats->projection, mats->viewport, &p[0], &p[1], &p[2]); + VECCOPY(bb->vec[val], p); + + gluUnProject(xs, ys, 1.0, mats->modelview, mats->projection, mats->viewport, &p[0], &p[1], &p[2]); + VECCOPY(bb->vec[4+val], p); + } + + /* then plane equations */ + for(val=0; val<4; val++) { + + normal_tri_v3(planes[val], bb->vec[val], bb->vec[val==3?0:val+1], bb->vec[val+4]); + + planes[val][3]= - planes[val][0]*bb->vec[val][0] + - planes[val][1]*bb->vec[val][1] + - planes[val][2]*bb->vec[val][2]; + } +} + /* create intersection coordinates in view Z direction at mouse coordinates */ void viewline(ARegion *ar, View3D *v3d, float mval[2], float ray_start[3], float ray_end[3]) { @@ -501,8 +546,8 @@ void viewline(ARegion *ar, View3D *v3d, float mval[2], float ray_start[3], float mul_m4_v4(rv3d->persinv, vec); mul_v3_fl(vec, 1.0f / vec[3]); - VECCOPY(ray_start, rv3d->viewinv[3]); - VECSUB(vec, vec, ray_start); + copy_v3_v3(ray_start, rv3d->viewinv[3]); + sub_v3_v3v3(vec, vec, ray_start); normalize_v3(vec); VECADDFAC(ray_start, rv3d->viewinv[3], vec, v3d->near); @@ -1668,6 +1713,7 @@ static int game_engine_exec(bContext *C, wmOperator *unused) Scene *startscene = CTX_data_scene(C); ScrArea *sa, *prevsa= CTX_wm_area(C); ARegion *ar, *prevar= CTX_wm_region(C); + wmWindow *prevwin= CTX_wm_window(C); RegionView3D *rv3d; rcti cam_frame; @@ -1701,11 +1747,15 @@ static int game_engine_exec(bContext *C, wmOperator *unused) SaveState(C); + StartKetsjiShell(C, ar, &cam_frame, 1); - RestoreState(C); + /* restore context, in case it changed in the meantime, for + example by working in another window or closing it */ CTX_wm_region_set(C, prevar); + CTX_wm_window_set(C, prevwin); CTX_wm_area_set(C, prevsa); + RestoreState(C); //XXX restore_all_scene_cfra(scene_cfra_store); set_scene_bg(startscene); @@ -1868,7 +1918,7 @@ typedef struct FlyInfo { #define FLY_CANCEL 1 #define FLY_CONFIRM 2 -int initFlyInfo (bContext *C, FlyInfo *fly, wmOperator *op, wmEvent *event) +static int initFlyInfo (bContext *C, FlyInfo *fly, wmOperator *op, wmEvent *event) { float upvec[3]; // tmp float mat[3][3]; @@ -1920,7 +1970,7 @@ int initFlyInfo (bContext *C, FlyInfo *fly, wmOperator *op, wmEvent *event) fly->time_lastdraw= fly->time_lastwheel= PIL_check_seconds_timer(); - fly->rv3d->rflag |= RV3D_FLYMODE; /* so we draw the corner margins */ + fly->rv3d->rflag |= RV3D_FLYMODE|RV3D_NAVIGATING; /* so we draw the corner margins */ /* detect weather to start with Z locking */ upvec[0]=1.0f; upvec[1]=0.0f; upvec[2]=0.0f; @@ -1942,7 +1992,6 @@ int initFlyInfo (bContext *C, FlyInfo *fly, wmOperator *op, wmEvent *event) mul_v3_fl(fly->rv3d->ofs, -1.0f); /*flip the vector*/ fly->rv3d->dist=0.0; - fly->rv3d->viewbut=0; /* used for recording */ //XXX2.5 if(v3d->camera->ipoflag & OB_ACTION_OB) @@ -1982,7 +2031,7 @@ static int flyEnd(bContext *C, FlyInfo *fly) if (fly->state == FLY_CANCEL) { /* Revert to original view? */ if (fly->persp_backup==RV3D_CAMOB) { /* a camera view */ - rv3d->viewbut=1; + VECCOPY(v3d->camera->loc, fly->ofs_backup); VECCOPY(v3d->camera->rot, fly->rot_backup); DAG_id_flush_update(&v3d->camera->id, OB_RECALC_OB); @@ -1996,7 +2045,7 @@ static int flyEnd(bContext *C, FlyInfo *fly) else if (fly->persp_backup==RV3D_CAMOB) { /* camera */ float mat3[3][3]; copy_m3_m4(mat3, v3d->camera->obmat); - mat3_to_compatible_eul( v3d->camera->rot, fly->rot_backup,mat3); + object_mat3_to_rot(v3d->camera, mat3, TRUE); DAG_id_flush_update(&v3d->camera->id, OB_RECALC_OB); #if 0 //XXX2.5 @@ -2020,7 +2069,7 @@ static int flyEnd(bContext *C, FlyInfo *fly) /*Done with correcting for the dist */ } - rv3d->rflag &= ~RV3D_FLYMODE; + rv3d->rflag &= ~(RV3D_FLYMODE|RV3D_NAVIGATING); //XXX2.5 BIF_view3d_previewrender_signal(fly->sa, PR_DBASE|PR_DISPRECT); /* not working at the moment not sure why */ @@ -2033,7 +2082,7 @@ static int flyEnd(bContext *C, FlyInfo *fly) return OPERATOR_CANCELLED; } -void flyEvent(FlyInfo *fly, wmEvent *event) +static void flyEvent(FlyInfo *fly, wmEvent *event) { if (event->type == TIMER && event->customdata == fly->timer) { fly->redraw = 1; @@ -2156,7 +2205,7 @@ void flyEvent(FlyInfo *fly, wmEvent *event) } //int fly_exec(bContext *C, wmOperator *op) -int flyApply(FlyInfo *fly) +static int flyApply(FlyInfo *fly) { /* fly mode - Shift+F diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 1b450e48e31..40db0f7b272 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -450,55 +450,6 @@ static void view_editmove(unsigned short event) #endif } -#if 0 -static char *transform_to_undostr(TransInfo *t) -{ - switch (t->mode) { - case TFM_TRANSLATION: - return "Translate"; - case TFM_ROTATION: - return "Rotate"; - case TFM_RESIZE: - return "Scale"; - case TFM_TOSPHERE: - return "To Sphere"; - case TFM_SHEAR: - return "Shear"; - case TFM_WARP: - return "Warp"; - case TFM_SHRINKFATTEN: - return "Shrink/Fatten"; - case TFM_TILT: - return "Tilt"; - case TFM_TRACKBALL: - return "Trackball"; - case TFM_PUSHPULL: - return "Push/Pull"; - case TFM_BEVEL: - return "Bevel"; - case TFM_BWEIGHT: - return "Bevel Weight"; - case TFM_CREASE: - return "Crease"; - case TFM_BONESIZE: - return "Bone Width"; - case TFM_BONE_ENVELOPE: - return "Bone Envelope"; - case TFM_TIME_TRANSLATE: - return "Translate Anim. Data"; - case TFM_TIME_SCALE: - return "Scale Anim. Data"; - case TFM_TIME_SLIDE: - return "Time Slide"; - case TFM_BAKE_TIME: - return "Key Time"; - case TFM_MIRROR: - return "Mirror"; - } - return "Transform"; -} -#endif - /* ************************************************* */ /* NOTE: these defines are saved in keymap files, do not change values but just add new ones */ @@ -521,7 +472,7 @@ static char *transform_to_undostr(TransInfo *t) #define TFM_MODAL_REMOVE_SNAP 17 /* called in transform_ops.c, on each regeneration of keymaps */ -void transform_modal_keymap(wmKeyConfig *keyconf) +wmKeyMap* transform_modal_keymap(wmKeyConfig *keyconf) { static EnumPropertyItem modal_items[] = { {TFM_MODAL_CANCEL, "CANCEL", 0, "Cancel", ""}, @@ -546,7 +497,7 @@ void transform_modal_keymap(wmKeyConfig *keyconf) wmKeyMap *keymap= WM_modalkeymap_get(keyconf, "Transform Modal Map"); /* this function is called for each spacetype, only needs to add map once */ - if(keymap) return; + if(keymap) return NULL; keymap= WM_modalkeymap_add(keyconf, "Transform Modal Map", modal_items); @@ -568,19 +519,7 @@ void transform_modal_keymap(wmKeyConfig *keyconf) WM_modalkeymap_add_item(keymap, AKEY, KM_PRESS, 0, 0, TFM_MODAL_ADD_SNAP); WM_modalkeymap_add_item(keymap, AKEY, KM_PRESS, KM_ALT, 0, TFM_MODAL_REMOVE_SNAP); - /* assign map to operators */ - WM_modalkeymap_assign(keymap, "TFM_OT_transform"); - WM_modalkeymap_assign(keymap, "TFM_OT_translate"); - WM_modalkeymap_assign(keymap, "TFM_OT_rotate"); - WM_modalkeymap_assign(keymap, "TFM_OT_tosphere"); - WM_modalkeymap_assign(keymap, "TFM_OT_resize"); - WM_modalkeymap_assign(keymap, "TFM_OT_shear"); - WM_modalkeymap_assign(keymap, "TFM_OT_warp"); - WM_modalkeymap_assign(keymap, "TFM_OT_shrink_fatten"); - WM_modalkeymap_assign(keymap, "TFM_OT_tilt"); - WM_modalkeymap_assign(keymap, "TFM_OT_trackball"); - WM_modalkeymap_assign(keymap, "TFM_OT_mirror"); - WM_modalkeymap_assign(keymap, "TFM_OT_edge_slide"); + return keymap; } @@ -673,7 +612,7 @@ int transformEvent(TransInfo *t, wmEvent *event) } else { if (t->flag & T_2D_EDIT) { - setConstraint(t, mati, (CON_AXIS0), "along X axis"); + setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS0), "along X"); } else { setUserConstraint(t, t->current_orientation, (CON_AXIS0), "along %s X"); @@ -689,7 +628,7 @@ int transformEvent(TransInfo *t, wmEvent *event) } else { if (t->flag & T_2D_EDIT) { - setConstraint(t, mati, (CON_AXIS1), "along Y axis"); + setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS1), "along Y"); } else { setUserConstraint(t, t->current_orientation, (CON_AXIS1), "along %s Y"); @@ -699,17 +638,12 @@ int transformEvent(TransInfo *t, wmEvent *event) } break; case TFM_MODAL_AXIS_Z: - if ((t->flag & T_NO_CONSTRAINT)==0) { + if ((t->flag & (T_NO_CONSTRAINT|T_2D_EDIT))== 0) { if (cmode == 'Z') { stopConstraint(t); } else { - if (t->flag & T_2D_EDIT) { - setConstraint(t, mati, (CON_AXIS0), "along Z axis"); - } - else { - setUserConstraint(t, t->current_orientation, (CON_AXIS2), "along %s Z"); - } + setUserConstraint(t, t->current_orientation, (CON_AXIS2), "along %s Z"); } t->redraw = 1; } @@ -886,32 +820,28 @@ int transformEvent(TransInfo *t, wmEvent *event) break; case XKEY: if ((t->flag & T_NO_CONSTRAINT)==0) { - if (cmode == 'X') { - if (t->flag & T_2D_EDIT) { + if (t->flag & T_2D_EDIT) { + if (cmode == 'X') { stopConstraint(t); + } else { + setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS0), "along X"); } - else { - if (t->con.mode & CON_USER) { + } else { + if (cmode == 'X') { + if (t->con.orientation != V3D_MANIP_GLOBAL) { stopConstraint(t); - } - else { + } else { short orientation = t->current_orientation != V3D_MANIP_GLOBAL ? t->current_orientation : V3D_MANIP_LOCAL; if ((t->modifiers & MOD_CONSTRAINT_PLANE) == 0) setUserConstraint(t, orientation, (CON_AXIS0), "along %s X"); else if (t->modifiers & MOD_CONSTRAINT_PLANE) setUserConstraint(t, orientation, (CON_AXIS1|CON_AXIS2), "locking %s X"); } - } - } - else { - if (t->flag & T_2D_EDIT) { - setConstraint(t, mati, (CON_AXIS0), "along X axis"); - } - else { + } else { if ((t->modifiers & MOD_CONSTRAINT_PLANE) == 0) - setConstraint(t, mati, (CON_AXIS0), "along global X"); + setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS0), "along %s X"); else if (t->modifiers & MOD_CONSTRAINT_PLANE) - setConstraint(t, mati, (CON_AXIS1|CON_AXIS2), "locking global X"); + setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS1|CON_AXIS2), "locking %s X"); } } t->redraw = 1; @@ -919,56 +849,50 @@ int transformEvent(TransInfo *t, wmEvent *event) break; case YKEY: if ((t->flag & T_NO_CONSTRAINT)==0) { - if (cmode == 'Y') { - if (t->flag & T_2D_EDIT) { + if (t->flag & T_2D_EDIT) { + if (cmode == 'Y') { stopConstraint(t); + } else { + setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS1), "along Y"); } - else { - if (t->con.mode & CON_USER) { + } else { + if (cmode == 'Y') { + if (t->con.orientation != V3D_MANIP_GLOBAL) { stopConstraint(t); - } - else { + } else { short orientation = t->current_orientation != V3D_MANIP_GLOBAL ? t->current_orientation : V3D_MANIP_LOCAL; if ((t->modifiers & MOD_CONSTRAINT_PLANE) == 0) setUserConstraint(t, orientation, (CON_AXIS1), "along %s Y"); else if (t->modifiers & MOD_CONSTRAINT_PLANE) setUserConstraint(t, orientation, (CON_AXIS0|CON_AXIS2), "locking %s Y"); } - } - } - else { - if (t->flag & T_2D_EDIT) { - setConstraint(t, mati, (CON_AXIS1), "along Y axis"); - } - else { + } else { if ((t->modifiers & MOD_CONSTRAINT_PLANE) == 0) - setConstraint(t, mati, (CON_AXIS1), "along global Y"); + setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS1), "along %s Y"); else if (t->modifiers & MOD_CONSTRAINT_PLANE) - setConstraint(t, mati, (CON_AXIS0|CON_AXIS2), "locking global Y"); + setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS0|CON_AXIS2), "locking %s Y"); } } t->redraw = 1; } break; case ZKEY: - if ((t->flag & T_NO_CONSTRAINT)==0) { + if ((t->flag & (T_NO_CONSTRAINT|T_2D_EDIT))==0) { if (cmode == 'Z') { - if (t->con.mode & CON_USER) { + if (t->con.orientation != V3D_MANIP_GLOBAL) { stopConstraint(t); - } - else { + } else { short orientation = t->current_orientation != V3D_MANIP_GLOBAL ? t->current_orientation : V3D_MANIP_LOCAL; if ((t->modifiers & MOD_CONSTRAINT_PLANE) == 0) setUserConstraint(t, orientation, (CON_AXIS2), "along %s Z"); - else if ((t->modifiers & MOD_CONSTRAINT_PLANE) && ((t->flag & T_2D_EDIT)==0)) + else if (t->modifiers & MOD_CONSTRAINT_PLANE) setUserConstraint(t, orientation, (CON_AXIS0|CON_AXIS1), "locking %s Z"); } - } - else if ((t->flag & T_2D_EDIT)==0) { + } else { if ((t->modifiers & MOD_CONSTRAINT_PLANE) == 0) - setConstraint(t, mati, (CON_AXIS2), "along global Z"); + setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS2), "along %s Z"); else if (t->modifiers & MOD_CONSTRAINT_PLANE) - setConstraint(t, mati, (CON_AXIS0|CON_AXIS1), "locking global Z"); + setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS0|CON_AXIS1), "locking %s Z"); } t->redraw = 1; } @@ -1115,7 +1039,7 @@ int transformEvent(TransInfo *t, wmEvent *event) return OPERATOR_PASS_THROUGH; } -int calculateTransformCenter(bContext *C, wmEvent *event, int centerMode, float *vec) +int calculateTransformCenter(bContext *C, int centerMode, float *vec) { TransInfo *t = MEM_callocN(sizeof(TransInfo), "TransInfo data"); int success = 1; @@ -1126,9 +1050,9 @@ int calculateTransformCenter(bContext *C, wmEvent *event, int centerMode, float t->mode = TFM_DUMMY; - initTransInfo(C, t, NULL, event); // internal data, mouse, vectors + initTransInfo(C, t, NULL, NULL); // internal data, mouse, vectors - createTransData(C, t); // make TransData structs from selection + createTransData(C, t); // make TransData structs from selection t->around = centerMode; // override userdefined mode @@ -1146,9 +1070,9 @@ int calculateTransformCenter(bContext *C, wmEvent *event, int centerMode, float /* aftertrans does insert ipos and action channels, and clears base flags, doesnt read transdata */ - special_aftertrans_update(t); + special_aftertrans_update(C, t); - postTrans(t); + postTrans(C, t); MEM_freeN(t); @@ -1239,11 +1163,14 @@ static void drawArc(float size, float angle_start, float angle_end, int segments glEnd(); } -void drawHelpline(const struct bContext *C, TransInfo *t) +static void drawHelpline(bContext *C, int x, int y, void *customdata) { + TransInfo *t = (TransInfo*)customdata; + if (t->helpline != HLP_NONE && !(t->flag & T_USES_MANIPULATOR)) { float vecrot[3], cent[2]; + int mval[2] = {x, y}; VECCOPY(vecrot, t->center); if(t->flag & T_EDIT) { @@ -1270,7 +1197,7 @@ void drawHelpline(const struct bContext *C, TransInfo *t) glVertex2fv(cent); glEnd(); - glTranslatef(t->mval[0], t->mval[1], 0); + glTranslatef(mval[0], mval[1], 0); glRotatef(-180 / M_PI * atan2f(cent[0] - t->mval[0], cent[1] - t->mval[1]), 0, 0, 1); setlinestyle(0); @@ -1282,7 +1209,7 @@ void drawHelpline(const struct bContext *C, TransInfo *t) case HLP_HARROW: UI_ThemeColor(TH_WIRE); - glTranslatef(t->mval[0], t->mval[1], 0); + glTranslatef(mval[0], mval[1], 0); glLineWidth(3.0); drawArrow(RIGHT, 5, 10, 5); @@ -1292,7 +1219,7 @@ void drawHelpline(const struct bContext *C, TransInfo *t) case HLP_VARROW: UI_ThemeColor(TH_WIRE); - glTranslatef(t->mval[0], t->mval[1], 0); + glTranslatef(mval[0], mval[1], 0); glLineWidth(3.0); glBegin(GL_LINES); @@ -1315,7 +1242,7 @@ void drawHelpline(const struct bContext *C, TransInfo *t) glVertex2fv(cent); glEnd(); - glTranslatef(cent[0], cent[1], 0); + glTranslatef(cent[0] - t->mval[0] + mval[0], cent[1] - t->mval[1] + mval[1], 0); setlinestyle(0); glLineWidth(3.0); @@ -1344,7 +1271,7 @@ void drawHelpline(const struct bContext *C, TransInfo *t) char col[3], col2[3]; UI_GetThemeColor3ubv(TH_GRID, col); - glTranslatef(t->mval[0], t->mval[1], 0); + glTranslatef(mval[0], mval[1], 0); glLineWidth(3.0); @@ -1379,9 +1306,9 @@ void drawTransformView(const struct bContext *C, struct ARegion *ar, void *arg) void drawTransformPixel(const struct bContext *C, struct ARegion *ar, void *arg) { - TransInfo *t = arg; - - drawHelpline(C, t); +// TransInfo *t = arg; +// +// drawHelpline(C, t->mval[0], t->mval[1], t); } void saveTransform(bContext *C, TransInfo *t, wmOperator *op) @@ -1461,7 +1388,14 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op) if (RNA_struct_find_property(op->ptr, "constraint_axis")) { - RNA_enum_set(op->ptr, "constraint_orientation", t->current_orientation); + /* constraint orientation can be global, event if user selects something else + * so use the orientation in the constraint if set + * */ + if (t->con.mode & CON_APPLY) { + RNA_enum_set(op->ptr, "constraint_orientation", t->con.orientation); + } else { + RNA_enum_set(op->ptr, "constraint_orientation", t->current_orientation); + } if (t->con.mode & CON_APPLY) { @@ -1505,12 +1439,13 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int initTransformOrientation(C, t); t->draw_handle_view = ED_region_draw_cb_activate(t->ar->type, drawTransformView, t, REGION_DRAW_POST_VIEW); - t->draw_handle_pixel = ED_region_draw_cb_activate(t->ar->type, drawTransformPixel, t, REGION_DRAW_POST_PIXEL); + //t->draw_handle_pixel = ED_region_draw_cb_activate(t->ar->type, drawTransformPixel, t, REGION_DRAW_POST_PIXEL); + t->draw_handle_cursor = WM_paint_cursor_activate(CTX_wm_manager(C), NULL, drawHelpline, t); } else if(t->spacetype == SPACE_IMAGE) { unit_m3(t->spacemtx); t->draw_handle_view = ED_region_draw_cb_activate(t->ar->type, drawTransformView, t, REGION_DRAW_POST_VIEW); - t->draw_handle_pixel = ED_region_draw_cb_activate(t->ar->type, drawTransformPixel, t, REGION_DRAW_POST_PIXEL); + //t->draw_handle_pixel = ED_region_draw_cb_activate(t->ar->type, drawTransformPixel, t, REGION_DRAW_POST_PIXEL); } else unit_m3(t->spacemtx); @@ -1518,7 +1453,7 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int createTransData(C, t); // make TransData structs from selection if (t->total == 0) { - postTrans(t); + postTrans(C, t); return 0; } @@ -1624,6 +1559,9 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int case TFM_ALIGN: initAlign(t); break; + case TFM_SEQ_SLIDE: + initSeqSlide(t); + break; } /* overwrite initial values if operator supplied a non-null vector */ @@ -1711,10 +1649,10 @@ int transformEnd(bContext *C, TransInfo *t) } /* aftertrans does insert keyframes, and clears base flags, doesnt read transdata */ - special_aftertrans_update(t); + special_aftertrans_update(C, t); /* free data */ - postTrans(t); + postTrans(C, t); /* send events out for redraws */ viewRedrawPost(t); @@ -3294,11 +3232,11 @@ static void applyTranslation(TransInfo *t, float vec[3]) { /* uses t->vec to store actual translation in */ int Translation(TransInfo *t, short mval[2]) { - float tvec[3]; char str[250]; if (t->con.mode & CON_APPLY) { float pvec[3] = {0.0f, 0.0f, 0.0f}; + float tvec[3]; applySnapping(t, t->values); t->con.applyVec(t, NULL, t->values, tvec, pvec); VECCOPY(t->values, tvec); @@ -5022,6 +4960,90 @@ int Align(TransInfo *t, short mval[2]) return 1; } +/* ************************** SEQ SLIDE *************************** */ + +void initSeqSlide(TransInfo *t) +{ + t->transform = SeqSlide; + + initMouseInputMode(t, &t->mouse, INPUT_VECTOR); + + t->idx_max = 1; + t->num.flag = 0; + t->num.idx_max = t->idx_max; + + t->ndof.axis = 1|2; + + t->snap[0] = 0.0f; + t->snap[1] = floor(t->scene->r.frs_sec / t->scene->r.frs_sec_base); + t->snap[2] = 10.0f; +} + +static void headerSeqSlide(TransInfo *t, float val[2], char *str) +{ + char tvec[60]; + + if (hasNumInput(&t->num)) { + outputNumInput(&(t->num), tvec); + } + else { + sprintf(&tvec[0], "%.0f, %.0f", val[0], val[1]); + } + + sprintf(str, "Sequence Slide: %s%s", &tvec[0], t->con.text); +} + +static void applySeqSlide(TransInfo *t, float val[2]) { + TransData *td = t->data; + int i; + + for(i = 0 ; i < t->total; i++, td++) { + float tvec[2]; + + if (td->flag & TD_NOACTION) + break; + + if (td->flag & TD_SKIP) + continue; + + copy_v2_v2(tvec, val); + + mul_v2_fl(tvec, td->factor); + + td->loc[0] = td->iloc[0] + tvec[0]; + td->loc[1] = td->iloc[1] + tvec[1]; + } +} + +int SeqSlide(TransInfo *t, short mval[2]) +{ + char str[200]; + + if (t->con.mode & CON_APPLY) { + float pvec[3] = {0.0f, 0.0f, 0.0f}; + float tvec[3]; + t->con.applyVec(t, NULL, t->values, tvec, pvec); + VECCOPY(t->values, tvec); + } + else { + applyNDofInput(&t->ndof, t->values); + snapGrid(t, t->values); + applyNumInput(&t->num, t->values); + } + + t->values[0] = floor(t->values[0] + 0.5); + t->values[1] = floor(t->values[1] + 0.5); + + headerSeqSlide(t, t->values, str); + applySeqSlide(t, t->values); + + recalcData(t); + + ED_area_headerprint(t->sa, str); + + return 1; +} + /* ************************** ANIM EDITORS - TRANSFORM TOOLS *************************** */ /* ---------------- Special Helpers for Various Settings ------------- */ diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h index d51cf9c864b..72d970c967a 100644 --- a/source/blender/editors/transform/transform.h +++ b/source/blender/editors/transform/transform.h @@ -53,6 +53,8 @@ struct BezTriple; struct wmOperatorType; struct wmOperator; struct wmWindowManager; +struct wmKeyMap; +struct wmKeyConfig; struct bContext; struct wmEvent; struct wmTimer; @@ -112,6 +114,7 @@ typedef struct TransSnap { } TransSnap; typedef struct TransCon { + short orientation; /**/ char text[50]; /* Description of the Constraint for header_print */ float mtx[3][3]; /* Matrix of the Constraint space */ float imtx[3][3]; /* Inverse Matrix of the Constraint space */ @@ -301,9 +304,10 @@ typedef struct TransInfo { void (*customFree)(struct TransInfo *); /* if a special free function is needed */ /*************** NEW STUFF *********************/ - short launch_event; /* event type used to launch transform */ + short launch_event; /* event type used to launch transform */ short current_orientation; + short twtype; /* backup from view3d, to restore on end */ short prop_mode; @@ -321,6 +325,7 @@ typedef struct TransInfo { struct Object *obedit; void *draw_handle_view; void *draw_handle_pixel; + void *draw_handle_cursor; } TransInfo; @@ -428,7 +433,7 @@ typedef struct TransInfo { #define POINT_INIT 4 #define MULTI_POINTS 8 -void TFM_OT_transform(struct wmOperatorType *ot); +void TRANSFORM_OT_transform(struct wmOperatorType *ot); int initTransform(struct bContext *C, struct TransInfo *t, struct wmOperator *op, struct wmEvent *event, int mode); void saveTransform(struct bContext *C, struct TransInfo *t, struct wmOperator *op); @@ -519,9 +524,12 @@ int Mirror(TransInfo *t, short mval[2]); void initAlign(TransInfo *t); int Align(TransInfo *t, short mval[2]); +void initSeqSlide(TransInfo *t); +int SeqSlide(TransInfo *t, short mval[2]); + void drawPropCircle(const struct bContext *C, TransInfo *t); -void transform_modal_keymap(struct wmKeyConfig *keyconf); +struct wmKeyMap *transform_modal_keymap(struct wmKeyConfig *keyconf); /*********************** transform_conversions.c ********** */ @@ -545,15 +553,15 @@ float get_drawsize(struct ARegion *ar, float *co); void createTransData(struct bContext *C, TransInfo *t); void sort_trans_data_dist(TransInfo *t); void add_tdi_poin(float *poin, float *old, float delta); -void special_aftertrans_update(TransInfo *t); +void special_aftertrans_update(struct bContext *C, TransInfo *t); void transform_autoik_update(TransInfo *t, short mode); int count_set_pose_transflags(int *out_mode, short around, struct Object *ob); /* auto-keying stuff used by special_aftertrans_update */ -void autokeyframe_ob_cb_func(struct Scene *scene, struct View3D *v3d, struct Object *ob, int tmode); -void autokeyframe_pose_cb_func(struct Scene *scene, struct View3D *v3d, struct Object *ob, int tmode, short targetless_ik); +void autokeyframe_ob_cb_func(struct bContext *C, struct Scene *scene, struct View3D *v3d, struct Object *ob, int tmode); +void autokeyframe_pose_cb_func(struct bContext *C, struct Scene *scene, struct View3D *v3d, struct Object *ob, int tmode, short targetless_ik); /*********************** Constraints *****************************/ @@ -633,7 +641,7 @@ void setCustomPoints(TransInfo *t, MouseInput *mi, short start[2], short end[2]) /*********************** Generics ********************************/ int initTransInfo(struct bContext *C, TransInfo *t, struct wmOperator *op, struct wmEvent *event); -void postTrans (TransInfo *t); +void postTrans (struct bContext *C, TransInfo *t); void resetTransRestrictions(TransInfo *t); void drawLine(TransInfo *t, float *center, float *dir, char axis, short options); diff --git a/source/blender/editors/transform/transform_constraints.c b/source/blender/editors/transform/transform_constraints.c index 1f42d9411f1..fd53f6fcd20 100644 --- a/source/blender/editors/transform/transform_constraints.c +++ b/source/blender/editors/transform/transform_constraints.c @@ -599,6 +599,8 @@ void setUserConstraint(TransInfo *t, short orientation, int mode, const char fte break; } + t->con.orientation = orientation; + t->con.mode |= CON_USER; } diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 9e154bc4db6..d5b9a85e347 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -93,7 +93,7 @@ #include "BKE_nla.h" #include "BKE_object.h" #include "BKE_particle.h" -#include "BKE_sequence.h" +#include "BKE_sequencer.h" #include "BKE_pointcache.h" #include "BKE_softbody.h" #include "BKE_utildefines.h" @@ -2212,7 +2212,7 @@ static void createTransEditVerts(bContext *C, TransInfo *t) /* detect CrazySpace [tm] */ if(propmode==0) { if(modifiers_getCageIndex(t->obedit, NULL, 1)>=0) { - if(modifiers_isDeformed(t->scene, t->obedit)) { + if(modifiers_isCorrectableDeformed(t->scene, t->obedit)) { /* check if we can use deform matrices for modifier from the start up to stack, they are more accurate than quats */ totleft= editmesh_get_first_deform_matrices(t->obedit, em, &defmats, &defcos); @@ -2346,6 +2346,7 @@ void flushTransNodes(TransInfo *t) } /* *** SEQUENCE EDITOR *** */ +#define XXX_DURIAN_ANIM_TX_HACK void flushTransSeq(TransInfo *t) { ListBase *seqbasep= seq_give_editing(t->scene, FALSE)->seqbasep; /* Editing null check alredy done */ @@ -2364,14 +2365,19 @@ void flushTransSeq(TransInfo *t) /* flush to 2d vector from internally used 3d vector */ for(a=0, td= t->data, td2d= t->data2d; atotal; a++, td++, td2d++) { - tdsq= (TransDataSeq *)td->extra; seq= tdsq->seq; new_frame= (int)floor(td2d->loc[0] + 0.5f); switch (tdsq->sel_flag) { case SELECT: - if (seq->type != SEQ_META && seq_tx_test(seq)) /* for meta's, their children move */ +#ifdef XXX_DURIAN_ANIM_TX_HACK + if (seq != seq_prev) { + int ofs = (new_frame - tdsq->start_offset) - seq->start; // breaks for single strips - color/image + seq_offset_animdata(t->scene, seq, ofs); + } +#endif + if (seq->type != SEQ_META && (seq->depth != 0 || seq_tx_test(seq))) /* for meta's, their children move */ seq->start= new_frame - tdsq->start_offset; if (seq->depth==0) { @@ -2382,12 +2388,12 @@ void flushTransSeq(TransInfo *t) case SEQ_LEFTSEL: /* no vertical transform */ seq_tx_set_final_left(seq, new_frame); seq_tx_handle_xlimits(seq, tdsq->flag&SEQ_LEFTSEL, tdsq->flag&SEQ_RIGHTSEL); - fix_single_seq(seq); /* todo - move this into aftertrans update? - old seq tx needed it anyway */ + seq_single_fix(seq); /* todo - move this into aftertrans update? - old seq tx needed it anyway */ break; case SEQ_RIGHTSEL: /* no vertical transform */ seq_tx_set_final_right(seq, new_frame); seq_tx_handle_xlimits(seq, tdsq->flag&SEQ_LEFTSEL, tdsq->flag&SEQ_RIGHTSEL); - fix_single_seq(seq); /* todo - move this into aftertrans update? - old seq tx needed it anyway */ + seq_single_fix(seq); /* todo - move this into aftertrans update? - old seq tx needed it anyway */ break; } @@ -3828,6 +3834,19 @@ static short constraints_list_needinv(TransInfo *t, ListBase *list) */ static void SeqTransInfo(TransInfo *t, Sequence *seq, int *recursive, int *count, int *flag) { + +#ifdef XXX_DURIAN_ANIM_TX_HACK + /* hack */ + if((seq->flag & SELECT)==0 && seq->type & SEQ_EFFECT) { + Sequence *seq_t[3] = {seq->seq1, seq->seq2, seq->seq3}; + int i; + for(i=0; i<3; i++) { + if (seq_t[i] && ((seq_t[i])->flag & SELECT) && !(seq_t[i]->flag & SEQ_LOCK) && !(seq_t[i]->flag & (SEQ_LEFTSEL|SEQ_RIGHTSEL))) + seq->flag |= SELECT; + } + } +#endif + /* for extend we need to do some tricks */ if (t->mode == TFM_TIME_EXTEND) { @@ -4109,7 +4128,7 @@ static void freeSeqData(TransInfo *t) } } - shuffle_seq_time(seqbasep); + shuffle_seq_time(seqbasep, t->scene); } } #endif @@ -4486,7 +4505,8 @@ static void clear_trans_object_base_flags(TransInfo *t) /* auto-keyframing feature - for objects * tmode: should be a transform mode */ -void autokeyframe_ob_cb_func(Scene *scene, View3D *v3d, Object *ob, int tmode) +// NOTE: context may not always be available, so must check before using it as it's a luxury for a few cases +void autokeyframe_ob_cb_func(bContext *C, Scene *scene, View3D *v3d, Object *ob, int tmode) { ID *id= &ob->id; FCurve *fcu; @@ -4503,13 +4523,7 @@ void autokeyframe_ob_cb_func(Scene *scene, View3D *v3d, Object *ob, int tmode) memset(&cks, 0, sizeof(bCommonKeySrc)); cks.id= &ob->id; - if (IS_AUTOKEY_FLAG(INSERTNEEDED)) - flag |= INSERTKEY_NEEDED; - if (IS_AUTOKEY_FLAG(AUTOMATKEY)) - flag |= INSERTKEY_MATRIX; - if (IS_AUTOKEY_MODE(scene, EDITKEYS)) - flag |= INSERTKEY_REPLACE; - + flag = ANIM_get_keyframing_flags(scene, 1); if (IS_AUTOKEY_FLAG(ONLYKEYINGSET) && (active_ks)) { /* only insert into active keyingset */ @@ -4582,11 +4596,12 @@ void autokeyframe_ob_cb_func(Scene *scene, View3D *v3d, Object *ob, int tmode) * tmode: should be a transform mode * targetless_ik: has targetless ik been done on any channels? */ -void autokeyframe_pose_cb_func(Scene *scene, View3D *v3d, Object *ob, int tmode, short targetless_ik) +// NOTE: context may not always be available, so must check before using it as it's a luxury for a few cases +void autokeyframe_pose_cb_func(bContext *C, Scene *scene, View3D *v3d, Object *ob, int tmode, short targetless_ik) { ID *id= &ob->id; AnimData *adt= ob->adt; - //bArmature *arm= ob->data; + bArmature *arm= ob->data; bAction *act= (adt) ? adt->action : NULL; bPose *pose= ob->pose; bPoseChannel *pchan; @@ -4609,12 +4624,10 @@ void autokeyframe_pose_cb_func(Scene *scene, View3D *v3d, Object *ob, int tmode, * visual keyframes even if flag not set, as it's not that useful otherwise * (for quick animation recording) */ - if (IS_AUTOKEY_FLAG(AUTOMATKEY) || (targetless_ik)) + flag = ANIM_get_keyframing_flags(scene, 1); + + if (targetless_ik) flag |= INSERTKEY_MATRIX; - if (IS_AUTOKEY_FLAG(INSERTNEEDED)) - flag |= INSERTKEY_NEEDED; - if (IS_AUTOKEY_MODE(scene, EDITKEYS)) - flag |= INSERTKEY_REPLACE; for (pchan=pose->chanbase.first; pchan; pchan=pchan->next) { if (pchan->bone->flag & BONE_TRANSFORM) { @@ -4693,15 +4706,13 @@ void autokeyframe_pose_cb_func(Scene *scene, View3D *v3d, Object *ob, int tmode, } } - // XXX todo... figure out way to get appropriate notifiers sent - - /* do the bone paths */ -#if 0 // XXX TRANSFORM FIX ME - if (arm->pathflag & ARM_PATH_ACFRA) { + /* do the bone paths + * NOTE: only do this when there is context info + */ + if (C && (arm->pathflag & ARM_PATH_ACFRA)) { //pose_clear_paths(ob); // XXX for now, don't need to clear ED_pose_recalculate_paths(C, scene, ob); } -#endif } else { /* tag channels that should have unkeyed data */ @@ -4715,12 +4726,12 @@ void autokeyframe_pose_cb_func(Scene *scene, View3D *v3d, Object *ob, int tmode, } -/* inserting keys, refresh ipo-keys, pointcache, redraw events... */ +/* inserting keys, pointcache, redraw events... */ /* * note: sequencer freeing has its own function now because of a conflict with transform's order of freeing (campbell) * Order changed, the sequencer stuff should go back in here * */ -void special_aftertrans_update(TransInfo *t) +void special_aftertrans_update(bContext *C, TransInfo *t) { Object *ob; // short redrawipo=0, resetslowpar=1; @@ -4748,24 +4759,15 @@ void special_aftertrans_update(TransInfo *t) } else if (t->spacetype == SPACE_ACTION) { SpaceAction *saction= (SpaceAction *)t->sa->spacedata.first; - Scene *scene; bAnimContext ac; - /* initialise relevant anim-context 'context' data from TransInfo data */ - /* NOTE: sync this with the code in ANIM_animdata_get_context() */ - memset(&ac, 0, sizeof(bAnimContext)); - - scene= ac.scene= t->scene; - ob= ac.obact= OBACT; - ac.sa= t->sa; - ac.ar= t->ar; - ac.spacetype= (t->sa)? t->sa->spacetype : 0; - ac.regiontype= (t->ar)? t->ar->regiontype : 0; - - if (ANIM_animdata_context_getdata(&ac) == 0) + /* initialise relevant anim-context 'context' data */ + if (ANIM_animdata_get_context(C, &ac) == 0) return; + + ob = ac.obact; - if (ac.datatype == ANIMCONT_DOPESHEET) { + if (ELEM(ac.datatype, ANIMCONT_DOPESHEET, ANIMCONT_SHAPEKEY)) { ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; short filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY); @@ -4794,12 +4796,10 @@ void special_aftertrans_update(TransInfo *t) /* free temp memory */ BLI_freelistN(&anim_data); } - else if (ac.datatype == ANIMCONT_ACTION) { + else if (ac.datatype == ANIMCONT_ACTION) { // TODO: just integrate into the above... /* Depending on the lock status, draw necessary views */ // fixme... some of this stuff is not good if (ob) { - ob->ctime= -1234567.0f; - if (ob->pose || ob_get_key(ob)) DAG_id_flush_update(&ob->id, OB_RECALC); else @@ -4813,22 +4813,6 @@ void special_aftertrans_update(TransInfo *t) posttrans_action_clean(&ac, (bAction *)ac.data); } } - else if (ac.datatype == ANIMCONT_SHAPEKEY) { -#if 0 // XXX old animation system - /* fix up the Ipocurves and redraw stuff */ - Key *key= (Key *)ac.data; - - if (key->ipo) { - if ( (saction->flag & SACTION_NOTRANSKEYCULL)==0 && - ((cancelled == 0) || (duplicate)) ) - { - posttrans_ipo_clean(key->ipo); - } - } -#endif // XXX old animation system - - DAG_id_flush_update(&OBACT->id, OB_RECALC_DATA); - } #if 0 // XXX future of this is still not clear else if (ac.datatype == ANIMCONT_GPENCIL) { /* remove duplicate frames and also make sure points are in order! */ @@ -4858,21 +4842,10 @@ void special_aftertrans_update(TransInfo *t) } else if (t->spacetype == SPACE_IPO) { SpaceIpo *sipo= (SpaceIpo *)t->sa->spacedata.first; - Scene *scene; bAnimContext ac; - /* initialise relevant anim-context 'context' data from TransInfo data */ - /* NOTE: sync this with the code in ANIM_animdata_get_context() */ - memset(&ac, 0, sizeof(bAnimContext)); - - scene= ac.scene= t->scene; - ob= ac.obact= OBACT; - ac.sa= t->sa; - ac.ar= t->ar; - ac.spacetype= (t->sa)? t->sa->spacetype : 0; - ac.regiontype= (t->ar)? t->ar->regiontype : 0; - - if (ANIM_animdata_context_getdata(&ac) == 0) + /* initialise relevant anim-context 'context' data */ + if (ANIM_animdata_get_context(C, &ac) == 0) return; if (ac.datatype) @@ -4909,21 +4882,10 @@ void special_aftertrans_update(TransInfo *t) ANIM_editkeyframes_refresh(&ac); } else if (t->spacetype == SPACE_NLA) { - Scene *scene; bAnimContext ac; - /* initialise relevant anim-context 'context' data from TransInfo data */ - /* NOTE: sync this with the code in ANIM_animdata_get_context() */ - memset(&ac, 0, sizeof(bAnimContext)); - - scene= ac.scene= t->scene; - ob= ac.obact= OBACT; - ac.sa= t->sa; - ac.ar= t->ar; - ac.spacetype= (t->sa)? t->sa->spacetype : 0; - ac.regiontype= (t->ar)? t->ar->regiontype : 0; - - if (ANIM_animdata_context_getdata(&ac) == 0) + /* initialise relevant anim-context 'context' data */ + if (ANIM_animdata_get_context(C, &ac) == 0) return; if (ac.datatype) @@ -4953,10 +4915,6 @@ void special_aftertrans_update(TransInfo *t) } } else if (t->obedit) { - // TRANSFORM_FIX_ME -// if (t->mode==TFM_BONESIZE || t->mode==TFM_BONE_ENVELOPE) -// allqueue(REDRAWBUTSEDIT, 0); - if (t->obedit->type == OB_MESH) { EditMesh *em = ((Mesh *)t->obedit->data)->edit_mesh; @@ -4990,7 +4948,7 @@ void special_aftertrans_update(TransInfo *t) /* automatic inserting of keys and unkeyed tagging - only if transform wasn't cancelled (or TFM_DUMMY) */ if (!cancelled && (t->mode != TFM_DUMMY)) { - autokeyframe_pose_cb_func(t->scene, (View3D *)t->view, ob, t->mode, targetless_ik); + autokeyframe_pose_cb_func(C, t->scene, (View3D *)t->view, ob, t->mode, targetless_ik); DAG_id_flush_update(&ob->id, OB_RECALC_DATA); } else if (arm->flag & ARM_DELAYDEFORM) { @@ -5001,9 +4959,6 @@ void special_aftertrans_update(TransInfo *t) else DAG_id_flush_update(&ob->id, OB_RECALC_DATA); - //if (t->mode==TFM_BONESIZE || t->mode==TFM_BONE_ENVELOPE) - // allqueue(REDRAWBUTSEDIT, 0); - } else if(t->scene->basact && (ob = t->scene->basact->object) && (ob->mode & OB_MODE_PARTICLE_EDIT) && PE_get_current(t->scene, ob)) { ; @@ -5043,19 +4998,24 @@ void special_aftertrans_update(TransInfo *t) /* Set autokey if necessary */ if (!cancelled) - autokeyframe_ob_cb_func(t->scene, (View3D *)t->view, ob, t->mode); + autokeyframe_ob_cb_func(C, t->scene, (View3D *)t->view, ob, t->mode); } } clear_trans_object_base_flags(t); -#if 0 // TRANSFORM_FIX_ME - if (redrawipo) { - allqueue(REDRAWNLA, 0); - allqueue(REDRAWACTION, 0); - allqueue(REDRAWIPO, 0); + if(t->spacetype == SPACE_VIEW3D) + { + View3D *v3d = t->view; + + /* restore manipulator */ + if (t->flag & T_MODAL) { + v3d->twtype = t->twtype; + } } + +#if 0 // TRANSFORM_FIX_ME if(resetslowpar) reset_slowparents(); diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index c9b5b17091e..061b2adbd79 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -108,6 +108,7 @@ #include "RNA_access.h" #include "WM_types.h" +#include "WM_api.h" #include "UI_resources.h" @@ -272,23 +273,6 @@ static void editmesh_apply_to_mirror(TransInfo *t) } } -/* tags the given ID block for refreshes (if applicable) due to - * Animation Editor editing - */ -static void animedit_refresh_id_tags (Scene *scene, ID *id) -{ - if (id) { - AnimData *adt= BKE_animdata_from_id(id); - - /* tag AnimData for refresh so that other views will update in realtime with these changes */ - if (adt) - adt->recalc |= ADT_RECALC_ANIM; - - /* set recalc flags */ - DAG_id_flush_update(id, OB_RECALC); // XXX or do we want something more restrictive? - } -} - /* for the realtime animation recording feature, handle overlapping data */ static void animrecord_check_state (Scene *scene, ID *id, wmTimer *animtimer) { @@ -377,7 +361,7 @@ void recalcData(TransInfo *t) /* just tag these animdata-blocks to recalc, assuming that some data there changed */ for (ale= anim_data.first; ale; ale= ale->next) { /* set refresh tags for objects using this animation */ - animedit_refresh_id_tags(t->scene, ale->id); + ANIM_list_elem_update(t->scene, ale); } /* now free temp channels */ @@ -425,7 +409,7 @@ void recalcData(TransInfo *t) calchandles_fcurve(fcu); /* set refresh tags for objects using this animation */ - animedit_refresh_id_tags(t->scene, ale->id); + ANIM_list_elem_update(t->scene, ale); } /* do resort and other updates? */ @@ -456,7 +440,7 @@ void recalcData(TransInfo *t) continue; /* set refresh tags for objects using this animation */ - animedit_refresh_id_tags(t->scene, tdn->id); + ANIM_id_update(t->scene, tdn->id); /* if cancelling transform, just write the values without validating, then move on */ if (t->state == TRANS_CANCEL) { @@ -762,7 +746,7 @@ void recalcData(TransInfo *t) int targetless_ik= (t->flag & T_AUTOIK); // XXX this currently doesn't work, since flags aren't set yet! animrecord_check_state(t->scene, &ob->id, t->animtimer); - autokeyframe_pose_cb_func(t->scene, (View3D *)t->view, ob, t->mode, targetless_ik); + autokeyframe_pose_cb_func(NULL, t->scene, (View3D *)t->view, ob, t->mode, targetless_ik); } /* old optimize trick... this enforces to bypass the depgraph */ @@ -805,7 +789,7 @@ void recalcData(TransInfo *t) // TODO: autokeyframe calls need some setting to specify to add samples (FPoints) instead of keyframes? if ((t->animtimer) && IS_AUTOKEY_ON(t->scene)) { animrecord_check_state(t->scene, &ob->id, t->animtimer); - autokeyframe_ob_cb_func(t->scene, (View3D *)t->view, ob, t->mode); + autokeyframe_ob_cb_func(NULL, t->scene, (View3D *)t->view, ob, t->mode); } /* proxy exception */ @@ -943,6 +927,12 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) t->view = v3d; t->animtimer= CTX_wm_screen(C)->animtimer; + /* turn manipulator off during transform */ + if (t->flag & T_MODAL) { + t->twtype = v3d->twtype; + v3d->twtype = 0; + } + if(v3d->flag & V3D_ALIGN) t->flag |= T_V3D_ALIGN; t->around = v3d->around; @@ -1065,7 +1055,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 (TransInfo *t) +void postTrans (bContext *C, TransInfo *t) { TransData *td; @@ -1073,7 +1063,8 @@ void postTrans (TransInfo *t) ED_region_draw_cb_exit(t->ar->type, t->draw_handle_view); if (t->draw_handle_pixel) ED_region_draw_cb_exit(t->ar->type, t->draw_handle_pixel); - + if (t->draw_handle_cursor) + WM_paint_cursor_end(CTX_wm_manager(C), t->draw_handle_cursor); if (t->customFree) { /* Can take over freeing t->data and data2d etc... */ diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c index 7530e015496..21e1ea42064 100644 --- a/source/blender/editors/transform/transform_manipulator.c +++ b/source/blender/editors/transform/transform_manipulator.c @@ -1743,7 +1743,7 @@ int BIF_do_manipulator(bContext *C, struct wmEvent *event, wmOperator *op) break; } RNA_boolean_set_array(op->ptr, "constraint_axis", constraint_axis); - WM_operator_name_call(C, "TFM_OT_translate", WM_OP_INVOKE_DEFAULT, op->ptr); + WM_operator_name_call(C, "TRANSFORM_OT_translate", WM_OP_INVOKE_DEFAULT, op->ptr); } else if (drawflags & MAN_SCALE_C) { switch(drawflags) { @@ -1773,10 +1773,10 @@ int BIF_do_manipulator(bContext *C, struct wmEvent *event, wmOperator *op) break; } RNA_boolean_set_array(op->ptr, "constraint_axis", constraint_axis); - WM_operator_name_call(C, "TFM_OT_resize", WM_OP_INVOKE_DEFAULT, op->ptr); + WM_operator_name_call(C, "TRANSFORM_OT_resize", WM_OP_INVOKE_DEFAULT, op->ptr); } else if (drawflags == MAN_ROT_T) { /* trackball need special case, init is different */ - WM_operator_name_call(C, "TFM_OT_trackball", WM_OP_INVOKE_DEFAULT, op->ptr); + WM_operator_name_call(C, "TRANSFORM_OT_trackball", WM_OP_INVOKE_DEFAULT, op->ptr); } else if (drawflags & MAN_ROT_C) { switch(drawflags) { @@ -1791,7 +1791,7 @@ int BIF_do_manipulator(bContext *C, struct wmEvent *event, wmOperator *op) break; } RNA_boolean_set_array(op->ptr, "constraint_axis", constraint_axis); - WM_operator_name_call(C, "TFM_OT_rotate", WM_OP_INVOKE_DEFAULT, op->ptr); + WM_operator_name_call(C, "TRANSFORM_OT_rotate", WM_OP_INVOKE_DEFAULT, op->ptr); } } /* after transform, restore drawflags */ diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c index ad4462a74cf..63218369a90 100644 --- a/source/blender/editors/transform/transform_ops.c +++ b/source/blender/editors/transform/transform_ops.c @@ -51,36 +51,51 @@ typedef struct TransformModeItem { char *idname; int mode; + void (*opfunc)(wmOperatorType*); } TransformModeItem; static float VecOne[3] = {1, 1, 1}; -char OP_TRANSLATION[] = "TFM_OT_translate"; -char OP_ROTATION[] = "TFM_OT_rotate"; -char OP_TOSPHERE[] = "TFM_OT_tosphere"; -char OP_RESIZE[] = "TFM_OT_resize"; -char OP_SHEAR[] = "TFM_OT_shear"; -char OP_WARP[] = "TFM_OT_warp"; -char OP_SHRINK_FATTEN[] = "TFM_OT_shrink_fatten"; -char OP_TILT[] = "TFM_OT_tilt"; -char OP_TRACKBALL[] = "TFM_OT_trackball"; -char OP_MIRROR[] = "TFM_OT_mirror"; -char OP_EDGE_SLIDE[] = "TFM_OT_edge_slide"; +char OP_TRANSLATION[] = "TRANSFORM_OT_translate"; +char OP_ROTATION[] = "TRANSFORM_OT_rotate"; +char OP_TOSPHERE[] = "TRANSFORM_OT_tosphere"; +char OP_RESIZE[] = "TRANSFORM_OT_resize"; +char OP_SHEAR[] = "TRANSFORM_OT_shear"; +char OP_WARP[] = "TRANSFORM_OT_warp"; +char OP_SHRINK_FATTEN[] = "TRANSFORM_OT_shrink_fatten"; +char OP_TILT[] = "TRANSFORM_OT_tilt"; +char OP_TRACKBALL[] = "TRANSFORM_OT_trackball"; +char OP_MIRROR[] = "TRANSFORM_OT_mirror"; +char OP_EDGE_SLIDE[] = "TRANSFORM_OT_edge_slide"; +char OP_SEQ_SLIDE[] = "TRANSFORM_OT_seq_slide"; +void TRANSFORM_OT_translate(struct wmOperatorType *ot); +void TRANSFORM_OT_rotate(struct wmOperatorType *ot); +void TRANSFORM_OT_tosphere(struct wmOperatorType *ot); +void TRANSFORM_OT_resize(struct wmOperatorType *ot); +void TRANSFORM_OT_shear(struct wmOperatorType *ot); +void TRANSFORM_OT_warp(struct wmOperatorType *ot); +void TRANSFORM_OT_shrink_fatten(struct wmOperatorType *ot); +void TRANSFORM_OT_tilt(struct wmOperatorType *ot); +void TRANSFORM_OT_trackball(struct wmOperatorType *ot); +void TRANSFORM_OT_mirror(struct wmOperatorType *ot); +void TRANSFORM_OT_edge_slide(struct wmOperatorType *ot); +void TRANSFORM_OT_seq_slide(struct wmOperatorType *ot); TransformModeItem transform_modes[] = { - {OP_TRANSLATION, TFM_TRANSLATION}, - {OP_ROTATION, TFM_ROTATION}, - {OP_TOSPHERE, TFM_TOSPHERE}, - {OP_RESIZE, TFM_RESIZE}, - {OP_SHEAR, TFM_SHEAR}, - {OP_WARP, TFM_WARP}, - {OP_SHRINK_FATTEN, TFM_SHRINKFATTEN}, - {OP_TILT, TFM_TILT}, - {OP_TRACKBALL, TFM_TRACKBALL}, - {OP_MIRROR, TFM_MIRROR}, - {OP_EDGE_SLIDE, TFM_EDGE_SLIDE}, + {OP_TRANSLATION, TFM_TRANSLATION, TRANSFORM_OT_translate}, + {OP_ROTATION, TFM_ROTATION, TRANSFORM_OT_rotate}, + {OP_TOSPHERE, TFM_TOSPHERE, TRANSFORM_OT_tosphere}, + {OP_RESIZE, TFM_RESIZE, TRANSFORM_OT_resize}, + {OP_SHEAR, TFM_SHEAR, TRANSFORM_OT_shear}, + {OP_WARP, TFM_WARP, TRANSFORM_OT_warp}, + {OP_SHRINK_FATTEN, TFM_SHRINKFATTEN, TRANSFORM_OT_shrink_fatten}, + {OP_TILT, TFM_TILT, TRANSFORM_OT_tilt}, + {OP_TRACKBALL, TFM_TRACKBALL, TRANSFORM_OT_trackball}, + {OP_MIRROR, TFM_MIRROR, TRANSFORM_OT_mirror}, + {OP_EDGE_SLIDE, TFM_EDGE_SLIDE, TRANSFORM_OT_edge_slide}, + {OP_SEQ_SLIDE, TFM_SEQ_SLIDE, TRANSFORM_OT_seq_slide}, {NULL, 0} }; @@ -95,12 +110,12 @@ static int snap_type_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void TFM_OT_snap_type(wmOperatorType *ot) +void TRANSFORM_OT_snap_type(wmOperatorType *ot) { /* identifiers */ ot->name= "Snap Type"; ot->description= "Set the snap element type."; - ot->idname= "TFM_OT_snap_type"; + ot->idname= "TRANSFORM_OT_snap_type"; /* api callbacks */ ot->invoke= WM_menu_invoke; @@ -134,20 +149,20 @@ static int select_orientation_invoke(bContext *C, wmOperator *op, wmEvent *event pup= uiPupMenuBegin(C, "Orientation", 0); layout= uiPupMenuLayout(pup); - uiItemsEnumO(layout, "TFM_OT_select_orientation", "orientation"); + uiItemsEnumO(layout, "TRANSFORM_OT_select_orientation", "orientation"); uiPupMenuEnd(C, pup); return OPERATOR_CANCELLED; } -void TFM_OT_select_orientation(struct wmOperatorType *ot) +void TRANSFORM_OT_select_orientation(struct wmOperatorType *ot) { PropertyRNA *prop; /* identifiers */ ot->name = "Select Orientation"; ot->description= "Select transformation orientation."; - ot->idname = "TFM_OT_select_orientation"; + ot->idname = "TRANSFORM_OT_select_orientation"; ot->flag = OPTYPE_UNDO; /* api callbacks */ @@ -194,12 +209,12 @@ static int delete_orientation_poll(bContext *C) return selected_index >= 0; } -void TFM_OT_delete_orientation(struct wmOperatorType *ot) +void TRANSFORM_OT_delete_orientation(struct wmOperatorType *ot) { /* identifiers */ ot->name = "Delete Orientation"; ot->description= "Delete transformation orientation."; - ot->idname = "TFM_OT_delete_orientation"; + ot->idname = "TRANSFORM_OT_delete_orientation"; ot->flag = OPTYPE_UNDO; /* api callbacks */ @@ -228,12 +243,12 @@ static int create_orientation_invoke(bContext *C, wmOperator *op, wmEvent *event return create_orientation_exec(C, op); } -void TFM_OT_create_orientation(struct wmOperatorType *ot) +void TRANSFORM_OT_create_orientation(struct wmOperatorType *ot) { /* identifiers */ ot->name = "Create Orientation"; ot->description= "Create transformation orientation from selection."; - ot->idname = "TFM_OT_create_orientation"; + ot->idname = "TRANSFORM_OT_create_orientation"; ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; /* api callbacks */ @@ -395,7 +410,7 @@ void Properties_Constraints(struct wmOperatorType *ot) RNA_def_enum_funcs(prop, rna_TransformOrientation_itemf); } -void TFM_OT_translate(struct wmOperatorType *ot) +void TRANSFORM_OT_translate(struct wmOperatorType *ot) { /* identifiers */ ot->name = "Translate"; @@ -421,7 +436,7 @@ void TFM_OT_translate(struct wmOperatorType *ot) Properties_Snapping(ot, 1, 1); } -void TFM_OT_resize(struct wmOperatorType *ot) +void TRANSFORM_OT_resize(struct wmOperatorType *ot) { /* identifiers */ ot->name = "Resize"; @@ -448,7 +463,7 @@ void TFM_OT_resize(struct wmOperatorType *ot) } -void TFM_OT_trackball(struct wmOperatorType *ot) +void TRANSFORM_OT_trackball(struct wmOperatorType *ot) { /* identifiers */ ot->name = "Trackball"; @@ -472,7 +487,7 @@ void TFM_OT_trackball(struct wmOperatorType *ot) Properties_Snapping(ot, 0, 0); } -void TFM_OT_rotate(struct wmOperatorType *ot) +void TRANSFORM_OT_rotate(struct wmOperatorType *ot) { /* identifiers */ ot->name = "Rotate"; @@ -498,7 +513,7 @@ void TFM_OT_rotate(struct wmOperatorType *ot) Properties_Snapping(ot, 1, 0); } -void TFM_OT_tilt(struct wmOperatorType *ot) +void TRANSFORM_OT_tilt(struct wmOperatorType *ot) { /* identifiers */ ot->name = "Tilt"; @@ -527,7 +542,7 @@ void TFM_OT_tilt(struct wmOperatorType *ot) Properties_Snapping(ot, 0, 0); } -void TFM_OT_warp(struct wmOperatorType *ot) +void TRANSFORM_OT_warp(struct wmOperatorType *ot) { /* identifiers */ ot->name = "Warp"; @@ -554,7 +569,7 @@ void TFM_OT_warp(struct wmOperatorType *ot) // Properties_Constraints(ot); } -void TFM_OT_shear(struct wmOperatorType *ot) +void TRANSFORM_OT_shear(struct wmOperatorType *ot) { /* identifiers */ ot->name = "Shear"; @@ -581,7 +596,7 @@ void TFM_OT_shear(struct wmOperatorType *ot) // Properties_Constraints(ot); } -void TFM_OT_shrink_fatten(struct wmOperatorType *ot) +void TRANSFORM_OT_shrink_fatten(struct wmOperatorType *ot) { /* identifiers */ ot->name = "Shrink/Fatten"; @@ -605,7 +620,7 @@ void TFM_OT_shrink_fatten(struct wmOperatorType *ot) Properties_Snapping(ot, 0, 0); } -void TFM_OT_tosphere(struct wmOperatorType *ot) +void TRANSFORM_OT_tosphere(struct wmOperatorType *ot) { /* identifiers */ ot->name = "To Sphere"; @@ -630,7 +645,7 @@ void TFM_OT_tosphere(struct wmOperatorType *ot) Properties_Snapping(ot, 0, 0); } -void TFM_OT_mirror(struct wmOperatorType *ot) +void TRANSFORM_OT_mirror(struct wmOperatorType *ot) { /* identifiers */ ot->name = "Mirror"; @@ -649,7 +664,7 @@ void TFM_OT_mirror(struct wmOperatorType *ot) Properties_Constraints(ot); } -void TFM_OT_edge_slide(struct wmOperatorType *ot) +void TRANSFORM_OT_edge_slide(struct wmOperatorType *ot) { /* identifiers */ ot->name = "Edge Slide"; @@ -671,7 +686,27 @@ void TFM_OT_edge_slide(struct wmOperatorType *ot) Properties_Snapping(ot, 0, 0); } -void TFM_OT_transform(struct wmOperatorType *ot) +void TRANSFORM_OT_seq_slide(struct wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Sequence Slide"; + ot->description= "Slide a sequence strip in time."; + ot->idname = OP_SEQ_SLIDE; + ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; + + /* api callbacks */ + ot->invoke = transform_invoke; + ot->exec = transform_exec; + ot->modal = transform_modal; + ot->cancel = transform_cancel; + ot->poll = ED_operator_sequencer_active; + + RNA_def_float_vector(ot->srna, "value", 2, VecOne, -FLT_MAX, FLT_MAX, "angle", "", -FLT_MAX, FLT_MAX); + + Properties_Snapping(ot, 0, 0); +} + +void TRANSFORM_OT_transform(struct wmOperatorType *ot) { static EnumPropertyItem transform_mode_types[] = { {TFM_INIT, "INIT", 0, "Init", ""}, @@ -701,13 +736,14 @@ void TFM_OT_transform(struct wmOperatorType *ot) {TFM_BWEIGHT, "BWEIGHT", 0, "Bweight", ""}, {TFM_ALIGN, "ALIGN", 0, "Align", ""}, {TFM_EDGE_SLIDE, "EDGESLIDE", 0, "Edge Slide", ""}, + {TFM_SEQ_SLIDE, "SEQSLIDE", 0, "Sequence Slide", ""}, {0, NULL, 0, NULL, NULL} }; /* identifiers */ ot->name = "Transform"; ot->description= "Transform selected items by mode type."; - ot->idname = "TFM_OT_transform"; + ot->idname = "TRANSFORM_OT_transform"; ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; /* api callbacks */ @@ -729,137 +765,141 @@ void TFM_OT_transform(struct wmOperatorType *ot) void transform_operatortypes(void) { - WM_operatortype_append(TFM_OT_transform); - WM_operatortype_append(TFM_OT_translate); - WM_operatortype_append(TFM_OT_rotate); - WM_operatortype_append(TFM_OT_tosphere); - WM_operatortype_append(TFM_OT_resize); - WM_operatortype_append(TFM_OT_shear); - WM_operatortype_append(TFM_OT_warp); - WM_operatortype_append(TFM_OT_shrink_fatten); - WM_operatortype_append(TFM_OT_tilt); - WM_operatortype_append(TFM_OT_trackball); - WM_operatortype_append(TFM_OT_mirror); - WM_operatortype_append(TFM_OT_edge_slide); + TransformModeItem *tmode; - WM_operatortype_append(TFM_OT_select_orientation); - WM_operatortype_append(TFM_OT_create_orientation); - WM_operatortype_append(TFM_OT_delete_orientation); + for (tmode = transform_modes; tmode->idname; tmode++) + { + WM_operatortype_append(tmode->opfunc); + } - WM_operatortype_append(TFM_OT_snap_type); + WM_operatortype_append(TRANSFORM_OT_transform); + + WM_operatortype_append(TRANSFORM_OT_select_orientation); + WM_operatortype_append(TRANSFORM_OT_create_orientation); + WM_operatortype_append(TRANSFORM_OT_delete_orientation); + + WM_operatortype_append(TRANSFORM_OT_snap_type); } -void transform_keymap_for_space(struct wmKeyConfig *keyconf, struct wmKeyMap *keymap, int spaceid) +void transform_keymap_for_space(wmKeyConfig *keyconf, wmKeyMap *keymap, int spaceid) { wmKeyMapItem *km; + wmKeyMap *modalmap; /* transform.c, only adds modal map once, checks if it's there */ - transform_modal_keymap(keyconf); + modalmap = transform_modal_keymap(keyconf); + + /* assign map to operators only the first time */ + if (modalmap) { + TransformModeItem *tmode; + + for (tmode = transform_modes; tmode->idname; tmode++) + { + WM_modalkeymap_assign(modalmap, tmode->idname); + } + WM_modalkeymap_assign(modalmap, "TRANSFORM_OT_transform"); + } switch(spaceid) { case SPACE_VIEW3D: - km = WM_keymap_add_item(keymap, "TFM_OT_translate", GKEY, KM_PRESS, 0, 0); + km = WM_keymap_add_item(keymap, OP_TRANSLATION, GKEY, KM_PRESS, 0, 0); - km= WM_keymap_add_item(keymap, "TFM_OT_translate", EVT_TWEAK_S, KM_ANY, 0, 0); + km= WM_keymap_add_item(keymap, OP_TRANSLATION, EVT_TWEAK_S, KM_ANY, 0, 0); - km = WM_keymap_add_item(keymap, "TFM_OT_rotate", RKEY, KM_PRESS, 0, 0); + km = WM_keymap_add_item(keymap, OP_ROTATION, RKEY, KM_PRESS, 0, 0); - km = WM_keymap_add_item(keymap, "TFM_OT_resize", SKEY, KM_PRESS, 0, 0); + km = WM_keymap_add_item(keymap, OP_RESIZE, SKEY, KM_PRESS, 0, 0); - km = WM_keymap_add_item(keymap, "TFM_OT_warp", WKEY, KM_PRESS, KM_SHIFT, 0); + km = WM_keymap_add_item(keymap, OP_WARP, WKEY, KM_PRESS, KM_SHIFT, 0); - km = WM_keymap_add_item(keymap, "TFM_OT_tosphere", SKEY, KM_PRESS, KM_ALT|KM_SHIFT, 0); + km = WM_keymap_add_item(keymap, OP_TOSPHERE, SKEY, KM_PRESS, KM_ALT|KM_SHIFT, 0); - km = WM_keymap_add_item(keymap, "TFM_OT_shear", SKEY, KM_PRESS, KM_ALT|KM_CTRL|KM_SHIFT, 0); + km = WM_keymap_add_item(keymap, OP_SHEAR, SKEY, KM_PRESS, KM_ALT|KM_CTRL|KM_SHIFT, 0); - km = WM_keymap_add_item(keymap, "TFM_OT_shrink_fatten", SKEY, KM_PRESS, KM_ALT, 0); + km = WM_keymap_add_item(keymap, "TRANSFORM_OT_select_orientation", SPACEKEY, KM_PRESS, KM_ALT, 0); - km = WM_keymap_add_item(keymap, "TFM_OT_tilt", TKEY, KM_PRESS, 0, 0); - - km = WM_keymap_add_item(keymap, "TFM_OT_select_orientation", SPACEKEY, KM_PRESS, KM_ALT, 0); - - km = WM_keymap_add_item(keymap, "TFM_OT_create_orientation", SPACEKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); + km = WM_keymap_add_item(keymap, "TRANSFORM_OT_create_orientation", SPACEKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); RNA_boolean_set(km->ptr, "use", 1); - km = WM_keymap_add_item(keymap, "TFM_OT_mirror", MKEY, KM_PRESS, KM_CTRL, 0); + km = WM_keymap_add_item(keymap, OP_MIRROR, MKEY, KM_PRESS, KM_CTRL, 0); km = WM_keymap_add_item(keymap, "WM_OT_context_toggle", TABKEY, KM_PRESS, KM_SHIFT, 0); RNA_string_set(km->ptr, "path", "scene.tool_settings.snap"); - km = WM_keymap_add_item(keymap, "TFM_OT_snap_type", TABKEY, KM_PRESS, KM_SHIFT|KM_CLICK, 0); + km = WM_keymap_add_item(keymap, "TRANSFORM_OT_snap_type", TABKEY, KM_PRESS, KM_SHIFT|KM_CLICK, 0); break; case SPACE_ACTION: - km= WM_keymap_add_item(keymap, "TFM_OT_transform", GKEY, KM_PRESS, 0, 0); + km= WM_keymap_add_item(keymap, "TRANSFORM_OT_transform", GKEY, KM_PRESS, 0, 0); RNA_int_set(km->ptr, "mode", TFM_TIME_TRANSLATE); - km= WM_keymap_add_item(keymap, "TFM_OT_transform", EVT_TWEAK_S, KM_ANY, 0, 0); + km= WM_keymap_add_item(keymap, "TRANSFORM_OT_transform", EVT_TWEAK_S, KM_ANY, 0, 0); RNA_int_set(km->ptr, "mode", TFM_TIME_TRANSLATE); - km= WM_keymap_add_item(keymap, "TFM_OT_transform", EKEY, KM_PRESS, 0, 0); + km= WM_keymap_add_item(keymap, "TRANSFORM_OT_transform", EKEY, KM_PRESS, 0, 0); RNA_int_set(km->ptr, "mode", TFM_TIME_EXTEND); - km= WM_keymap_add_item(keymap, "TFM_OT_transform", SKEY, KM_PRESS, 0, 0); + km= WM_keymap_add_item(keymap, "TRANSFORM_OT_transform", SKEY, KM_PRESS, 0, 0); RNA_int_set(km->ptr, "mode", TFM_TIME_SCALE); - km= WM_keymap_add_item(keymap, "TFM_OT_transform", TKEY, KM_PRESS, 0, 0); + km= WM_keymap_add_item(keymap, "TRANSFORM_OT_transform", TKEY, KM_PRESS, 0, 0); RNA_int_set(km->ptr, "mode", TFM_TIME_SLIDE); break; case SPACE_IPO: - km= WM_keymap_add_item(keymap, "TFM_OT_translate", GKEY, KM_PRESS, 0, 0); + km= WM_keymap_add_item(keymap, OP_TRANSLATION, GKEY, KM_PRESS, 0, 0); - km= WM_keymap_add_item(keymap, "TFM_OT_translate", EVT_TWEAK_S, KM_ANY, 0, 0); + km= WM_keymap_add_item(keymap, OP_TRANSLATION, EVT_TWEAK_S, KM_ANY, 0, 0); // XXX the 'mode' identifier here is not quite right - km= WM_keymap_add_item(keymap, "TFM_OT_transform", EKEY, KM_PRESS, 0, 0); + km= WM_keymap_add_item(keymap, "TRANSFORM_OT_transform", EKEY, KM_PRESS, 0, 0); RNA_int_set(km->ptr, "mode", TFM_TIME_EXTEND); - km = WM_keymap_add_item(keymap, "TFM_OT_rotate", RKEY, KM_PRESS, 0, 0); + km = WM_keymap_add_item(keymap, OP_ROTATION, RKEY, KM_PRESS, 0, 0); - km = WM_keymap_add_item(keymap, "TFM_OT_resize", SKEY, KM_PRESS, 0, 0); + km = WM_keymap_add_item(keymap, OP_RESIZE, SKEY, KM_PRESS, 0, 0); break; case SPACE_NLA: - km= WM_keymap_add_item(keymap, "TFM_OT_transform", GKEY, KM_PRESS, 0, 0); + km= WM_keymap_add_item(keymap, "TRANSFORM_OT_transform", GKEY, KM_PRESS, 0, 0); RNA_int_set(km->ptr, "mode", TFM_TRANSLATION); - km= WM_keymap_add_item(keymap, "TFM_OT_transform", EVT_TWEAK_S, KM_ANY, 0, 0); + km= WM_keymap_add_item(keymap, "TRANSFORM_OT_transform", EVT_TWEAK_S, KM_ANY, 0, 0); RNA_int_set(km->ptr, "mode", TFM_TRANSLATION); - km= WM_keymap_add_item(keymap, "TFM_OT_transform", EKEY, KM_PRESS, 0, 0); + km= WM_keymap_add_item(keymap, "TRANSFORM_OT_transform", EKEY, KM_PRESS, 0, 0); RNA_int_set(km->ptr, "mode", TFM_TIME_EXTEND); - km= WM_keymap_add_item(keymap, "TFM_OT_transform", SKEY, KM_PRESS, 0, 0); + km= WM_keymap_add_item(keymap, "TRANSFORM_OT_transform", SKEY, KM_PRESS, 0, 0); RNA_int_set(km->ptr, "mode", TFM_TIME_SCALE); break; case SPACE_NODE: - km= WM_keymap_add_item(keymap, "TFM_OT_translate", GKEY, KM_PRESS, 0, 0); + km= WM_keymap_add_item(keymap, OP_TRANSLATION, GKEY, KM_PRESS, 0, 0); - km= WM_keymap_add_item(keymap, "TFM_OT_translate", EVT_TWEAK_A, KM_ANY, 0, 0); - km= WM_keymap_add_item(keymap, "TFM_OT_translate", EVT_TWEAK_S, KM_ANY, 0, 0); + km= WM_keymap_add_item(keymap, OP_TRANSLATION, EVT_TWEAK_A, KM_ANY, 0, 0); + km= WM_keymap_add_item(keymap, OP_TRANSLATION, EVT_TWEAK_S, KM_ANY, 0, 0); - km = WM_keymap_add_item(keymap, "TFM_OT_rotate", RKEY, KM_PRESS, 0, 0); + km = WM_keymap_add_item(keymap, OP_ROTATION, RKEY, KM_PRESS, 0, 0); - km = WM_keymap_add_item(keymap, "TFM_OT_resize", SKEY, KM_PRESS, 0, 0); + km = WM_keymap_add_item(keymap, OP_RESIZE, SKEY, KM_PRESS, 0, 0); break; case SPACE_SEQ: - km= WM_keymap_add_item(keymap, "TFM_OT_translate", GKEY, KM_PRESS, 0, 0); + km= WM_keymap_add_item(keymap, OP_SEQ_SLIDE, GKEY, KM_PRESS, 0, 0); - km= WM_keymap_add_item(keymap, "TFM_OT_translate", EVT_TWEAK_S, KM_ANY, 0, 0); + km= WM_keymap_add_item(keymap, OP_SEQ_SLIDE, EVT_TWEAK_S, KM_ANY, 0, 0); - km= WM_keymap_add_item(keymap, "TFM_OT_transform", EKEY, KM_PRESS, 0, 0); + km= WM_keymap_add_item(keymap, "TRANSFORM_OT_transform", EKEY, KM_PRESS, 0, 0); RNA_int_set(km->ptr, "mode", TFM_TIME_EXTEND); break; case SPACE_IMAGE: - km = WM_keymap_add_item(keymap, "TFM_OT_translate", GKEY, KM_PRESS, 0, 0); + km = WM_keymap_add_item(keymap, OP_TRANSLATION, GKEY, KM_PRESS, 0, 0); - km= WM_keymap_add_item(keymap, "TFM_OT_translate", EVT_TWEAK_S, KM_ANY, 0, 0); + km= WM_keymap_add_item(keymap, OP_TRANSLATION, EVT_TWEAK_S, KM_ANY, 0, 0); - km = WM_keymap_add_item(keymap, "TFM_OT_rotate", RKEY, KM_PRESS, 0, 0); + km = WM_keymap_add_item(keymap, OP_ROTATION, RKEY, KM_PRESS, 0, 0); - km = WM_keymap_add_item(keymap, "TFM_OT_resize", SKEY, KM_PRESS, 0, 0); + km = WM_keymap_add_item(keymap, OP_RESIZE, SKEY, KM_PRESS, 0, 0); - km = WM_keymap_add_item(keymap, "TFM_OT_mirror", MKEY, KM_PRESS, KM_CTRL, 0); + km = WM_keymap_add_item(keymap, "TRANSFORM_OT_mirror", MKEY, KM_PRESS, KM_CTRL, 0); km = WM_keymap_add_item(keymap, "WM_OT_context_toggle", TABKEY, KM_PRESS, KM_SHIFT, 0); RNA_string_set(km->ptr, "path", "scene.tool_settings.snap"); diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c index b8ea49110fc..b4894ecdcaa 100644 --- a/source/blender/editors/transform/transform_snap.c +++ b/source/blender/editors/transform/transform_snap.c @@ -327,6 +327,7 @@ void resetSnapping(TransInfo *t) { t->tsnap.status = 0; t->tsnap.align = 0; + t->tsnap.project = 0; t->tsnap.mode = 0; t->tsnap.modeSelect = 0; t->tsnap.target = 0; @@ -362,8 +363,6 @@ void initSnappingMode(TransInfo *t) Object *obedit = t->obedit; Scene *scene = t->scene; - resetSnapping(t); - /* force project off when not supported */ if (ts->snap_mode != SCE_SNAP_MODE_FACE) { @@ -838,8 +837,6 @@ void CalcSnapGeometry(TransInfo *t, float *vec) t->tsnap.snapPoint[0] *= aspx; t->tsnap.snapPoint[1] *= aspy; - mul_m4_v3(t->obedit->obmat, t->tsnap.snapPoint); - t->tsnap.status |= POINT_INIT; } else diff --git a/source/blender/editors/util/ed_util.c b/source/blender/editors/util/ed_util.c index ae1e932bb81..e02eeebef7e 100644 --- a/source/blender/editors/util/ed_util.c +++ b/source/blender/editors/util/ed_util.c @@ -60,7 +60,7 @@ void ED_editors_exit(bContext *C) /* frees all editmode undos */ undo_editmode_clear(); - undo_imagepaint_clear(); + ED_undo_paint_free(); for(sce=G.main->scene.first; sce; sce= sce->id.next) { if(sce->obedit) { @@ -87,9 +87,16 @@ void ED_editors_exit(bContext *C) // else if(ob->type==OB_MBALL) // BLI_freelistN(&editelems); // free_editLatt(); - // free_posebuf(); + // free_posebuf(); // XXX this is still a global... } } + else if(sce->basact && sce->basact->object) { + Object *ob= sce->basact->object; + + /* if weight-painting is on, free mesh octree data */ + if(ob->mode & OB_MODE_WEIGHT_PAINT) + mesh_octree_table(ob, NULL, NULL, 'e'); + } } } diff --git a/source/blender/editors/util/undo.c b/source/blender/editors/util/undo.c index d26f7a7a484..e20c88ba41f 100644 --- a/source/blender/editors/util/undo.c +++ b/source/blender/editors/util/undo.c @@ -124,7 +124,7 @@ static int ed_undo_step(bContext *C, int step, const char *undoname) SpaceImage *sima= (SpaceImage *)sa->spacedata.first; if((obact && obact->mode & OB_MODE_TEXTURE_PAINT) || sima->flag & SI_DRAWTOOL) { - undo_imagepaint_step(step); + ED_undo_paint_step(C, UNDO_PAINT_IMAGE, step); WM_event_add_notifier(C, NC_WINDOW, NULL); return OPERATOR_FINISHED; @@ -146,7 +146,9 @@ static int ed_undo_step(bContext *C, int step, const char *undoname) int do_glob_undo= 0; if(obact && obact->mode & OB_MODE_TEXTURE_PAINT) - undo_imagepaint_step(step); + ED_undo_paint_step(C, UNDO_PAINT_IMAGE, step); + else if(obact && obact->mode & OB_MODE_SCULPT) + ED_undo_paint_step(C, UNDO_PAINT_MESH, step); else if(obact && obact->mode & OB_MODE_PARTICLE_EDIT) { if(step==1) PE_undo(CTX_data_scene(C)); diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c index fb02f5100b6..3d58e7f03dc 100644 --- a/source/blender/editors/uvedit/uvedit_ops.c +++ b/source/blender/editors/uvedit/uvedit_ops.c @@ -904,7 +904,7 @@ static void select_linked(Scene *scene, Image *ima, EditMesh *em, float limit[2] } } - if(!extend || hit) { + if(!extend && hit) { for(a=0, efa= em->faces.first; efa; efa= efa->next, a++) { tf = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE); if(flag[a]) diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c index e5881415100..3dff61505c5 100644 --- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c +++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c @@ -33,6 +33,7 @@ #include "MEM_guardedalloc.h" +#include "DNA_camera_types.h" #include "DNA_mesh_types.h" #include "DNA_meshdata_types.h" #include "DNA_object_types.h" @@ -826,7 +827,7 @@ static int unwrap_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - handle= construct_param_handle(scene, em, 0, fill_holes, 0, correct_aspect); + handle= construct_param_handle(scene, em, 0, fill_holes, 1, correct_aspect); param_lscm_begin(handle, PARAM_FALSE, method == 0); param_lscm_solve(handle); @@ -880,6 +881,32 @@ static void uv_from_view_bounds(float target[2], float source[3], float rotmat[4 target[1] = pv[2]; } +static void uv_from_camera(float camsize, float xasp, float yasp, float target[2], float source[3], float rotmat[4][4], float cammat[4][4], int persp) +{ + + float pv4[4]; + + copy_v3_v3(pv4, source); + pv4[3]= 1.0; + + /* rotmat is the object matrix in this case */ + mul_m4_v4(rotmat, pv4); + + /* cammat is the inverse camera matrix */ + mul_m4_v4(cammat, pv4); + + if (pv4[2]==0.0f) pv4[2]=0.00001f; /* don't allow div by 0 */ + + if (persp&&CAM_ORTHO) { + target[0]=((pv4[0]/camsize)*xasp)+0.5f; + target[1]=((pv4[1]/camsize)*yasp)+0.5f; + } + else { + target[0]=((-pv4[0]*(camsize/pv4[2])*xasp)/2)+0.5; + target[1]=((-pv4[1]*(camsize/pv4[2])*yasp)/2)+0.5; + } +} + static void uv_from_view(ARegion *ar, float target[2], float source[3], float rotmat[4][4]) { RegionView3D *rv3d= ar->regiondata; @@ -926,11 +953,14 @@ static int from_view_exec(bContext *C, wmOperator *op) { Scene *scene= CTX_data_scene(C); Object *obedit= CTX_data_edit_object(C); + Camera *camera= NULL; EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data); ARegion *ar= CTX_wm_region(C); + RegionView3D *rv3d= ar->regiondata; EditFace *efa; MTFace *tf; - float rotmat[4][4]; + float invmat[4][4],rotmat[4][4]; + float xasp, yasp, camsize; /* add uvs if they don't exist yet */ if(!ED_uvedit_ensure_uvs(C, scene, obedit)) { @@ -938,6 +968,11 @@ static int from_view_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } + /* establish the camera object, so we can default to view mapping if anything is wrong with it */ + if ((rv3d->persp==RV3D_CAMOB) && (scene->camera) && (scene->camera->type==OB_CAMERA)) { + camera=scene->camera->data; + } + if(RNA_boolean_get(op->ptr, "orthographic")) { uv_map_rotation_matrix(rotmat, ar->regiondata, obedit, 90.0f, 0.0f, 1.0f); @@ -953,6 +988,41 @@ static int from_view_exec(bContext *C, wmOperator *op) } } } + else if (camera) { + + if (camera->type==CAM_PERSP) { + camsize=1/tan(DEG2RAD(camera->angle)/2.0f); /* calcs ez as distance from camera plane to viewer */ + } + else { + camsize=camera->ortho_scale; + } + + if (invert_m4_m4(invmat,scene->camera->obmat)) { + copy_m4_m4(rotmat, obedit->obmat); + + /* also make aspect ratio adjustment factors */ + if (scene->r.xsch > scene->r.ysch) { + xasp=1; + yasp=(float)(scene->r.xsch)/(float)(scene->r.ysch); + } + else { + xasp=(float)(scene->r.ysch)/(float)(scene->r.xsch); + yasp=1; + } + + for(efa= em->faces.first; efa; efa= efa->next) { + if(efa->f & SELECT) { + tf= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE); + + uv_from_camera(camsize, xasp, yasp, tf->uv[0], efa->v1->co, rotmat, invmat, camera->type); + uv_from_camera(camsize, xasp, yasp, tf->uv[1], efa->v2->co, rotmat, invmat, camera->type); + uv_from_camera(camsize, xasp, yasp, tf->uv[2], efa->v3->co, rotmat, invmat, camera->type); + if(efa->v4) + uv_from_camera(camsize, xasp, yasp, tf->uv[3], efa->v4->co, rotmat, invmat, camera->type); + } + } + } + } else { copy_m4_m4(rotmat, obedit->obmat); diff --git a/source/blender/freestyle/intern/application/AppConfig.cpp b/source/blender/freestyle/intern/application/AppConfig.cpp index 9ef14321624..761f0104dd1 100755 --- a/source/blender/freestyle/intern/application/AppConfig.cpp +++ b/source/blender/freestyle/intern/application/AppConfig.cpp @@ -25,7 +25,7 @@ using namespace std; extern "C" { - #include "BLI_util.h" + #include "BLI_path_util.h" } namespace Config { diff --git a/source/blender/gpu/gpu_buffers.h b/source/blender/gpu/gpu_buffers.h index 662912f9c19..5531ccc813b 100644 --- a/source/blender/gpu/gpu_buffers.h +++ b/source/blender/gpu/gpu_buffers.h @@ -43,6 +43,7 @@ #endif struct DerivedMesh; +struct GHash; /* V - vertex, N - normal, T - uv, C - color F - float, UB - unsigned byte */ @@ -124,6 +125,20 @@ void GPU_buffer_free( GPUBuffer *buffer, GPUBufferPool *pool ); GPUDrawObject *GPU_drawobject_new( struct DerivedMesh *dm ); void GPU_drawobject_free( struct DerivedMesh *dm ); +/* Buffers for non-DerivedMesh drawing */ +void *GPU_build_mesh_buffers(struct GHash *map, struct MVert *mvert, + struct MFace *mface, int *face_indices, + int totface, int *vert_indices, int uniq_verts, + int totvert); +void GPU_update_mesh_buffers(void *buffers, struct MVert *mvert, + int *vert_indices, int totvert); +void *GPU_build_grid_buffers(struct DMGridData **grids, + int *grid_indices, int totgrid, int gridsize); +void GPU_update_grid_buffers(void *buffers_v, struct DMGridData **grids, + int *grid_indices, int totgrid, int gridsize); +void GPU_draw_buffers(void *buffers); +void GPU_free_buffers(void *buffers); + /* called before drawing */ void GPU_vertex_setup( struct DerivedMesh *dm ); void GPU_normal_setup( struct DerivedMesh *dm ); diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c index a59c263055d..33aa4168ff8 100644 --- a/source/blender/gpu/intern/gpu_buffers.c +++ b/source/blender/gpu/intern/gpu_buffers.c @@ -30,6 +30,8 @@ * ***** END GPL LICENSE BLOCK ***** */ +#include +#include #include #include "GL/glew.h" @@ -37,6 +39,7 @@ #include "MEM_guardedalloc.h" #include "BLI_math.h" +#include "BLI_ghash.h" #include "DNA_meshdata_types.h" @@ -376,6 +379,360 @@ void GPU_drawobject_free( DerivedMesh *dm ) dm->drawObject = 0; } +/* Convenience struct for building the VBO. */ +typedef struct { + float co[3]; + short no[3]; +} VertexBufferFormat; + +typedef struct { + /* opengl buffer handles */ + GLuint vert_buf, index_buf; + GLenum index_type; + + /* mesh pointers in case buffer allocation fails */ + MFace *mface; + MVert *mvert; + int *face_indices; + int totface; + + /* grid pointers */ + DMGridData **grids; + int *grid_indices; + int totgrid; + int gridsize; + + unsigned int tot_tri, tot_quad; +} GPU_Buffers; + +void GPU_update_mesh_buffers(void *buffers_v, MVert *mvert, + int *vert_indices, int totvert) +{ + GPU_Buffers *buffers = buffers_v; + VertexBufferFormat *vert_data; + int i; + + if(buffers->vert_buf) { + /* Build VBO */ + glBindBufferARB(GL_ARRAY_BUFFER_ARB, buffers->vert_buf); + glBufferDataARB(GL_ARRAY_BUFFER_ARB, + sizeof(VertexBufferFormat) * totvert, + NULL, GL_STATIC_DRAW_ARB); + vert_data = glMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB); + + if(vert_data) { + for(i = 0; i < totvert; ++i) { + MVert *v = mvert + vert_indices[i]; + VertexBufferFormat *out = vert_data + i; + + copy_v3_v3(out->co, v->co); + memcpy(out->no, v->no, sizeof(short) * 3); + } + + glUnmapBufferARB(GL_ARRAY_BUFFER_ARB); + } + else { + glDeleteBuffersARB(1, &buffers->vert_buf); + buffers->vert_buf = 0; + } + + glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); + } + + buffers->mvert = mvert; +} + +void *GPU_build_mesh_buffers(GHash *map, MVert *mvert, MFace *mface, + int *face_indices, int totface, + int *vert_indices, int tot_uniq_verts, + int totvert) +{ + GPU_Buffers *buffers; + unsigned short *tri_data; + int i, j, k, tottri; + + buffers = MEM_callocN(sizeof(GPU_Buffers), "GPU_Buffers"); + buffers->index_type = GL_UNSIGNED_SHORT; + + /* Count the number of triangles */ + for(i = 0, tottri = 0; i < totface; ++i) + tottri += mface[face_indices[i]].v4 ? 2 : 1; + + if(GL_ARB_vertex_buffer_object) + glGenBuffersARB(1, &buffers->index_buf); + + if(buffers->index_buf) { + /* Generate index buffer object */ + glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, buffers->index_buf); + glBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, + sizeof(unsigned short) * tottri * 3, NULL, GL_STATIC_DRAW_ARB); + + /* Fill the triangle buffer */ + tri_data = glMapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB); + if(tri_data) { + for(i = 0; i < totface; ++i) { + MFace *f = mface + face_indices[i]; + int v[3] = {f->v1, f->v2, f->v3}; + + for(j = 0; j < (f->v4 ? 2 : 1); ++j) { + for(k = 0; k < 3; ++k) { + void *value, *key = SET_INT_IN_POINTER(v[k]); + int vbo_index; + + value = BLI_ghash_lookup(map, key); + vbo_index = GET_INT_FROM_POINTER(value); + + if(vbo_index < 0) { + vbo_index = -vbo_index + + tot_uniq_verts - 1; + } + + *tri_data = vbo_index; + ++tri_data; + } + v[0] = f->v4; + v[1] = f->v1; + v[2] = f->v3; + } + } + glUnmapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB); + } + else { + glDeleteBuffersARB(1, &buffers->index_buf); + buffers->index_buf = 0; + } + + glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0); + } + + if(buffers->index_buf) + glGenBuffersARB(1, &buffers->vert_buf); + GPU_update_mesh_buffers(buffers, mvert, vert_indices, totvert); + + buffers->tot_tri = tottri; + + buffers->mface = mface; + buffers->face_indices = face_indices; + buffers->totface = totface; + + return buffers; +} + +void GPU_update_grid_buffers(void *buffers_v, DMGridData **grids, + int *grid_indices, int totgrid, int gridsize) +{ + GPU_Buffers *buffers = buffers_v; + DMGridData *vert_data; + int i, totvert; + + totvert= gridsize*gridsize*totgrid; + + /* Build VBO */ + if(buffers->vert_buf) { + glBindBufferARB(GL_ARRAY_BUFFER_ARB, buffers->vert_buf); + glBufferDataARB(GL_ARRAY_BUFFER_ARB, + sizeof(DMGridData) * totvert, + NULL, GL_STATIC_DRAW_ARB); + vert_data = glMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB); + if(vert_data) { + for(i = 0; i < totgrid; ++i) { + DMGridData *grid= grids[grid_indices[i]]; + memcpy(vert_data, grid, sizeof(DMGridData)*gridsize*gridsize); + vert_data += gridsize*gridsize; + } + glUnmapBufferARB(GL_ARRAY_BUFFER_ARB); + } + else { + glDeleteBuffersARB(1, &buffers->vert_buf); + buffers->vert_buf = 0; + } + glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); + } + + buffers->grids = grids; + buffers->grid_indices = grid_indices; + buffers->totgrid = totgrid; + buffers->gridsize = gridsize; + + //printf("node updated %p\n", buffers_v); +} + +void *GPU_build_grid_buffers(DMGridData **grids, + int *grid_indices, int totgrid, int gridsize) +{ + GPU_Buffers *buffers; + int i, j, k, totquad, offset= 0; + + buffers = MEM_callocN(sizeof(GPU_Buffers), "GPU_Buffers"); + + /* Count the number of quads */ + totquad= (gridsize-1)*(gridsize-1)*totgrid; + + /* Generate index buffer object */ + if(GL_ARB_vertex_buffer_object) + glGenBuffersARB(1, &buffers->index_buf); + + if(buffers->index_buf) { + glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, buffers->index_buf); + + if(totquad < USHRT_MAX) { + unsigned short *quad_data; + + buffers->index_type = GL_UNSIGNED_SHORT; + glBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, + sizeof(unsigned short) * totquad * 4, NULL, GL_STATIC_DRAW_ARB); + + /* Fill the quad buffer */ + quad_data = glMapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB); + if(quad_data) { + for(i = 0; i < totgrid; ++i) { + for(j = 0; j < gridsize-1; ++j) { + for(k = 0; k < gridsize-1; ++k) { + *(quad_data++)= offset + j*gridsize + k; + *(quad_data++)= offset + (j+1)*gridsize + k; + *(quad_data++)= offset + (j+1)*gridsize + k+1; + *(quad_data++)= offset + j*gridsize + k+1; + } + } + + offset += gridsize*gridsize; + } + glUnmapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB); + } + else { + glDeleteBuffersARB(1, &buffers->index_buf); + buffers->index_buf = 0; + } + } + else { + unsigned int *quad_data; + + buffers->index_type = GL_UNSIGNED_INT; + glBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, + sizeof(unsigned int) * totquad * 4, NULL, GL_STATIC_DRAW_ARB); + + /* Fill the quad buffer */ + quad_data = glMapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB); + + if(quad_data) { + for(i = 0; i < totgrid; ++i) { + for(j = 0; j < gridsize-1; ++j) { + for(k = 0; k < gridsize-1; ++k) { + *(quad_data++)= offset + j*gridsize + k; + *(quad_data++)= offset + (j+1)*gridsize + k; + *(quad_data++)= offset + (j+1)*gridsize + k+1; + *(quad_data++)= offset + j*gridsize + k+1; + } + } + + offset += gridsize*gridsize; + } + glUnmapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB); + } + else { + glDeleteBuffersARB(1, &buffers->index_buf); + buffers->index_buf = 0; + } + } + + glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0); + } + + /* Build VBO */ + if(buffers->index_buf) + glGenBuffersARB(1, &buffers->vert_buf); + GPU_update_grid_buffers(buffers, grids, grid_indices, totgrid, gridsize); + + buffers->tot_quad = totquad; + + return buffers; +} + +void GPU_draw_buffers(void *buffers_v) +{ + GPU_Buffers *buffers = buffers_v; + + if(buffers->vert_buf && buffers->index_buf) { + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_NORMAL_ARRAY); + + glBindBufferARB(GL_ARRAY_BUFFER_ARB, buffers->vert_buf); + glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, buffers->index_buf); + + if(buffers->tot_quad) { + glVertexPointer(3, GL_FLOAT, sizeof(DMGridData), (void*)offsetof(DMGridData, co)); + glNormalPointer(GL_FLOAT, sizeof(DMGridData), (void*)offsetof(DMGridData, no)); + + glDrawElements(GL_QUADS, buffers->tot_quad * 4, buffers->index_type, 0); + } + else { + glVertexPointer(3, GL_FLOAT, sizeof(VertexBufferFormat), (void*)offsetof(VertexBufferFormat, co)); + glNormalPointer(GL_SHORT, sizeof(VertexBufferFormat), (void*)offsetof(VertexBufferFormat, no)); + + glDrawElements(GL_TRIANGLES, buffers->tot_tri * 3, buffers->index_type, 0); + } + + glDisableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_NORMAL_ARRAY); + } + else if(buffers->totface) { + /* fallback if we are out of memory */ + int i; + + for(i = 0; i < buffers->totface; ++i) { + MFace *f = buffers->mface + buffers->face_indices[i]; + + glBegin((f->v4)? GL_QUADS: GL_TRIANGLES); + glNormal3sv(buffers->mvert[f->v1].no); + glVertex3fv(buffers->mvert[f->v1].co); + glNormal3sv(buffers->mvert[f->v2].no); + glVertex3fv(buffers->mvert[f->v2].co); + glNormal3sv(buffers->mvert[f->v3].no); + glVertex3fv(buffers->mvert[f->v3].co); + if(f->v4) { + glNormal3sv(buffers->mvert[f->v4].no); + glVertex3fv(buffers->mvert[f->v4].co); + } + glEnd(); + } + } + else if(buffers->totgrid) { + int i, x, y, gridsize = buffers->gridsize; + + for(i = 0; i < buffers->totgrid; ++i) { + DMGridData *grid = buffers->grids[buffers->grid_indices[i]]; + + for(y = 0; y < gridsize-1; y++) { + glBegin(GL_QUAD_STRIP); + for(x = 0; x < gridsize; x++) { + DMGridData *a = &grid[y*gridsize + x]; + DMGridData *b = &grid[(y+1)*gridsize + x]; + + glNormal3fv(a->no); + glVertex3fv(a->co); + glNormal3fv(b->no); + glVertex3fv(b->co); + } + glEnd(); + } + } + } +} + +void GPU_free_buffers(void *buffers_v) +{ + if(buffers_v) { + GPU_Buffers *buffers = buffers_v; + + if(buffers->vert_buf) + glDeleteBuffersARB(1, &buffers->vert_buf); + if(buffers->index_buf) + glDeleteBuffersARB(1, &buffers->index_buf); + + MEM_freeN(buffers); + } +} + GPUBuffer *GPU_buffer_setup( DerivedMesh *dm, GPUDrawObject *object, int size, GLenum target, void *user, void (*copy_f)(DerivedMesh *, float *, int *, int *, void *) ) { GPUBuffer *buffer; @@ -388,15 +745,9 @@ GPUBuffer *GPU_buffer_setup( DerivedMesh *dm, GPUDrawObject *object, int size, G DEBUG_VBO("GPU_buffer_setup\n"); - if( globalPool == 0 ) { + if( globalPool == 0 ) globalPool = GPU_buffer_pool_new(); - /* somehow GL_NORMAL_ARRAY is enabled on startup and causes edge drawing code to crash */ - glDisableClientState( GL_VERTEX_ARRAY ); - glDisableClientState( GL_NORMAL_ARRAY ); - glDisableClientState( GL_TEXTURE_COORD_ARRAY ); - glDisableClientState( GL_COLOR_ARRAY ); - } buffer = GPU_buffer_alloc(size,globalPool); if( buffer == 0 ) { dm->drawObject->legacy = 1; diff --git a/source/blender/gpu/intern/gpu_draw.c b/source/blender/gpu/intern/gpu_draw.c index c2cf4dfa9fd..db6c7fa5ce0 100644 --- a/source/blender/gpu/intern/gpu_draw.c +++ b/source/blender/gpu/intern/gpu_draw.c @@ -1276,9 +1276,11 @@ void GPU_state_init(void) glDisable(GL_TEXTURE_1D); glDisable(GL_TEXTURE_2D); - /* default on, disable/enable should be local per function */ - glEnableClientState(GL_VERTEX_ARRAY); - glEnableClientState(GL_NORMAL_ARRAY); + /* default disabled, enable should be local per function */ + glDisableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_NORMAL_ARRAY); + glDisableClientState(GL_COLOR_ARRAY); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); glPixelTransferi(GL_MAP_COLOR, GL_FALSE); glPixelTransferi(GL_RED_SCALE, 1); diff --git a/source/blender/imbuf/intern/rectop.c b/source/blender/imbuf/intern/rectop.c index 56714c3b481..080340750e4 100644 --- a/source/blender/imbuf/intern/rectop.c +++ b/source/blender/imbuf/intern/rectop.c @@ -277,7 +277,7 @@ void IMB_rectclip(struct ImBuf *dbuf, struct ImBuf *sbuf, int *destx, } if (*srcx < 0) { *destx -= *srcx; - *width += *destx; + *width += *srcx; *srcx = 0; } if (*desty < 0) { @@ -287,7 +287,7 @@ void IMB_rectclip(struct ImBuf *dbuf, struct ImBuf *sbuf, int *destx, } if (*srcy < 0) { *desty -= *srcy; - *height += *desty; + *height += *srcy; *srcy = 0; } diff --git a/source/blender/makesdna/DNA_anim_types.h b/source/blender/makesdna/DNA_anim_types.h index c6330861fd2..6a9700a5573 100644 --- a/source/blender/makesdna/DNA_anim_types.h +++ b/source/blender/makesdna/DNA_anim_types.h @@ -291,7 +291,8 @@ typedef struct ChannelDriver { /* python expression to execute (may call functions defined in an accessory file) * which relates the target 'variables' in some way to yield a single usable value */ - char expression[256]; + char expression[256]; /* expression to compile for evaluation */ + void *expr_comp; /* PyObject - compiled expression, dont save this */ float curval; /* result of previous evaluation, for subtraction from result under certain circumstances */ float influence; /* influence of driver on result */ // XXX to be implemented... this is like the constraint influence setting @@ -309,6 +310,8 @@ typedef enum eDriver_Types { DRIVER_TYPE_PYTHON, /* rotational difference (must use rotation channels only) */ DRIVER_TYPE_ROTDIFF, + /* sum of all values */ + DRIVER_TYPE_SUM, } eDriver_Types; /* driver flags */ @@ -320,6 +323,8 @@ typedef enum eDriver_Flags { /* driver does replace value, but overrides (for layering of animation over driver) */ // TODO: this needs to be implemented at some stage or left out... DRIVER_FLAG_LAYERING = (1<<2), + /* use when the expression needs to be recompiled */ + DRIVER_FLAG_RECOMPILE = (1<<3), } eDriver_Flags; /* F-Curves -------------------------------------- */ @@ -362,7 +367,7 @@ typedef struct FCurve { char *rna_path; /* RNA-path to resolve data-access */ /* curve coloring (for editor) */ - int color_mode; /* coloring method to use */ + int color_mode; /* coloring method to use (eFCurve_Coloring) */ float color[3]; /* the last-color this curve took */ } FCurve; @@ -698,6 +703,7 @@ typedef enum eInsertKeyFlags { INSERTKEY_FAST = (1<<2), /* don't recalculate handles,etc. after adding key */ INSERTKEY_FASTR = (1<<3), /* don't realloc mem (or increase count, as array has already been set out) */ INSERTKEY_REPLACE = (1<<4), /* only replace an existing keyframe (this overrides INSERTKEY_NEEDED) */ + INSERTKEY_XYZ2RGB = (1<<5), /* transform F-Curves should have XYZ->RGB color mode */ } eInsertKeyFlags; /* ************************************************ */ diff --git a/source/blender/makesdna/DNA_brush_types.h b/source/blender/makesdna/DNA_brush_types.h index 1bbccd20486..c8fc14ca0f0 100644 --- a/source/blender/makesdna/DNA_brush_types.h +++ b/source/blender/makesdna/DNA_brush_types.h @@ -79,12 +79,13 @@ typedef struct Brush { #define BRUSH_JITTER_PRESSURE 16 /* was BRUSH_RAD_PRESSURE */ #define BRUSH_SPACING_PRESSURE 32 #define BRUSH_FIXED_TEX 64 -#define BRUSH_RAKE 128 -#define BRUSH_ANCHORED 256 -#define BRUSH_DIR_IN 512 -#define BRUSH_SPACE 1024 -#define BRUSH_SMOOTH_STROKE 2048 -#define BRUSH_PERSISTENT 4096 +#define BRUSH_RAKE 128 +#define BRUSH_ANCHORED 256 +#define BRUSH_DIR_IN 512 +#define BRUSH_SPACE 1024 +#define BRUSH_SMOOTH_STROKE 2048 +#define BRUSH_PERSISTENT 4096 +#define BRUSH_ACCUMULATE 8192 /* Brush.sculpt_tool */ #define SCULPT_TOOL_DRAW 1 diff --git a/source/blender/makesdna/DNA_customdata_types.h b/source/blender/makesdna/DNA_customdata_types.h index ad686e37097..91e4cefce80 100644 --- a/source/blender/makesdna/DNA_customdata_types.h +++ b/source/blender/makesdna/DNA_customdata_types.h @@ -44,14 +44,19 @@ typedef struct CustomDataLayer { void *data; /* layer data */ } CustomDataLayer; +typedef struct CustomDataExternal { + char filename[240]; /* FILE_MAX */ +} CustomDataExternal; + /* structure which stores custom element data associated with mesh elements * (vertices, edges or faces). The custom data is organised into a series of * layers, each with a data type (e.g. MTFace, MDeformVert, etc.). */ typedef struct CustomData { - CustomDataLayer *layers; /* CustomDataLayers, ordered by type */ - int totlayer, maxlayer; /* number of layers, size of layers array */ - int totsize, pad; /* in editmode, total size of all data layers */ - void *pool; /* for Bmesh: Memory pool for allocation of blocks*/ + CustomDataLayer *layers; /* CustomDataLayers, ordered by type */ + int totlayer, maxlayer; /* number of layers, size of layers array */ + int totsize, pad; /* in editmode, total size of all data layers */ + void *pool; /* Bmesh: Memory pool for allocation of blocks */ + CustomDataExternal *external; /* external file storing customdata layers */ } CustomData; /* CustomData.type */ @@ -115,6 +120,10 @@ typedef struct CustomData { #define CD_FLAG_NOFREE (1<<1) /* indicates the layer is only temporary, also implies no copy */ #define CD_FLAG_TEMPORARY ((1<<2)|CD_FLAG_NOCOPY) +/* indicates the layer is stored in an external file */ +#define CD_FLAG_EXTERNAL (1<<3) +/* indicates external data is read into memory */ +#define CD_FLAG_IN_MEMORY (1<<4) /* Limits */ #define MAX_MTFACE 8 diff --git a/source/blender/makesdna/DNA_meshdata_types.h b/source/blender/makesdna/DNA_meshdata_types.h index d53a7833d0e..ca5093ec09d 100644 --- a/source/blender/makesdna/DNA_meshdata_types.h +++ b/source/blender/makesdna/DNA_meshdata_types.h @@ -182,10 +182,11 @@ typedef struct PartialVisibility { } PartialVisibility; /* mvert->flag (1=SELECT) */ -#define ME_SPHERETEST 2 -#define ME_SPHERETEMP 4 -#define ME_HIDE 16 +#define ME_SPHERETEST 2 +#define ME_VERT_TMP_TAG 4 +#define ME_HIDE 16 #define ME_VERT_MERGED (1<<6) +#define ME_VERT_PBVH_UPDATE (1<<7) /* medge->flag (1=SELECT)*/ #define ME_EDGEDRAW (1<<1) diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h index 040dc4dbd78..2491e58f176 100644 --- a/source/blender/makesdna/DNA_modifier_types.h +++ b/source/blender/makesdna/DNA_modifier_types.h @@ -64,6 +64,7 @@ typedef enum ModifierType { eModifierType_Surface, eModifierType_Smoke, eModifierType_ShapeKey, + eModifierType_Solidify, NUM_MODIFIER_TYPES } ModifierType; @@ -585,14 +586,14 @@ typedef struct ExplodeModifierData { typedef struct MultiresModifierData { ModifierData modifier; - struct MVert *undo_verts; /* Store DerivedMesh vertices for multires undo */ - int undo_verts_tot; /* Length of undo_verts array */ - char undo_signal; /* If true, signals to replace verts with undo verts */ - - char lvl, totlvl; - char simple; + char lvl, sculptlvl, renderlvl, totlvl; + char simple, flags, pad[2]; } MultiresModifierData; +typedef enum { + eMultiresModifierFlag_ControlEdges = (1<<0), +} MultiresModifierFlag; + typedef struct FluidsimModifierData { ModifierData modifier; @@ -675,4 +676,20 @@ typedef struct ShapeKeyModifierData { ModifierData modifier; } ShapeKeyModifierData; +typedef struct SolidifyModifierData { + ModifierData modifier; + + char vgroup[32]; /* name of vertex group to use */ + float offset; /* new surface offset level*/ + float crease_inner; + float crease_outer; + float crease_rim; + int flag; + char pad[4]; +} SolidifyModifierData; + +#define MOD_SOLIDIFY_RIM (1<<0) +#define MOD_SOLIDIFY_EVEN (1<<1) +#define MOD_SOLIDIFY_NORMAL_CALC (1<<2) + #endif diff --git a/source/blender/makesdna/DNA_object_force.h b/source/blender/makesdna/DNA_object_force.h index adccf8893d4..99b8f400a5e 100644 --- a/source/blender/makesdna/DNA_object_force.h +++ b/source/blender/makesdna/DNA_object_force.h @@ -71,7 +71,7 @@ typedef struct PartDeflect { float f_flow; /* How much force is converted into "air flow", i.e. */ /* force used as the velocity of surrounding medium. */ - float f_size; + float f_size; /* Noise size for noise effector, restlength for harmonic effector */ /* fall-off */ float f_power; /* The power law - real gravitation is 2 (square) */ @@ -320,6 +320,7 @@ typedef struct SoftBody { #define PFIELD_TEX_OBJECT 64 #define PFIELD_GLOBAL_CO 64 /* used for turbulence */ #define PFIELD_TEX_2D 128 +#define PFIELD_MULTIPLE_SPRINGS 128 /* used for harmonic force */ #define PFIELD_USEMIN 256 #define PFIELD_USEMAXR 512 #define PFIELD_USEMINR 1024 diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h index d5b26a36b85..995f30fd394 100644 --- a/source/blender/makesdna/DNA_scene_types.h +++ b/source/blender/makesdna/DNA_scene_types.h @@ -29,6 +29,9 @@ #ifndef DNA_SCENE_TYPES_H #define DNA_SCENE_TYPES_H +// XXX, temp feature +#define DURIAN_CAMERA_SWITCH + #ifdef __cplusplus extern "C" { #endif @@ -493,6 +496,7 @@ typedef struct TimeMarker { int frame; char name[64]; unsigned int flag; + struct Object *camera; } TimeMarker; typedef struct Paint { @@ -504,7 +508,7 @@ typedef struct Paint { void *paint_cursor; unsigned char paint_cursor_col[4]; - int pad; + int flags; } Paint; typedef struct ImagePaintSettings { @@ -1072,14 +1076,18 @@ typedef struct Scene { #define FFMPEG_MULTIPLEX_AUDIO 1 #define FFMPEG_AUTOSPLIT_OUTPUT 2 +/* Paint.flags */ +typedef enum { + PAINT_SHOW_BRUSH = 1, + PAINT_FAST_NAVIGATE = 2 +} PaintFlags; + /* Sculpt.flags */ +/* These can eventually be moved to paint flags? */ typedef enum SculptFlags { SCULPT_SYMM_X = 1, SCULPT_SYMM_Y = 2, SCULPT_SYMM_Z = 4, - SCULPT_INPUT_SMOOTH = 8, - SCULPT_DRAW_FAST = 16, - SCULPT_DRAW_BRUSH = 32, SCULPT_LOCK_X = 64, SCULPT_LOCK_Y = 128, SCULPT_LOCK_Z = 256 diff --git a/source/blender/makesdna/DNA_screen_types.h b/source/blender/makesdna/DNA_screen_types.h index b091a0529e7..2bc7b1e8431 100644 --- a/source/blender/makesdna/DNA_screen_types.h +++ b/source/blender/makesdna/DNA_screen_types.h @@ -170,9 +170,10 @@ typedef struct ARegion { #define WIN_EQUAL 3 /* area->flag */ -#define HEADER_NO_PULLDOWN 1 -#define AREA_FLAG_DRAWJOINTO 2 -#define AREA_FLAG_DRAWJOINFROM 4 +#define HEADER_NO_PULLDOWN 1 +#define AREA_FLAG_DRAWJOINTO 2 +#define AREA_FLAG_DRAWJOINFROM 4 +#define AREA_TEMP_INFO 8 /* If you change EDGEWIDTH, also do the global arrat edcol[] */ #define EDGEWIDTH 1 @@ -218,6 +219,7 @@ typedef struct ARegion { #define RGN_TYPE_UI 4 #define RGN_TYPE_TOOLS 5 #define RGN_TYPE_TOOL_PROPS 6 +#define RGN_TYPE_PREVIEW 7 /* region alignment */ #define RGN_ALIGN_NONE 0 diff --git a/source/blender/makesdna/DNA_sequence_types.h b/source/blender/makesdna/DNA_sequence_types.h index 3b8182b8759..0b45d62e347 100644 --- a/source/blender/makesdna/DNA_sequence_types.h +++ b/source/blender/makesdna/DNA_sequence_types.h @@ -183,8 +183,8 @@ typedef struct MetaStack { } MetaStack; typedef struct Editing { - ListBase *seqbasep; - ListBase seqbase; + ListBase *seqbasep; /* pointer to the current list of seq's being edited (can be within a meta strip) */ + ListBase seqbase; /* pointer to the top-most seq's */ ListBase metastack; /* Context vars, used to be static */ @@ -211,16 +211,17 @@ typedef struct GlowVars { typedef struct TransformVars { float ScalexIni; float ScaleyIni; - float ScalexFin; - float ScaleyFin; + float ScalexFin; /* deprecated - old transform strip */ + float ScaleyFin; /* deprecated - old transform strip */ float xIni; - float xFin; + float xFin; /* deprecated - old transform strip */ float yIni; - float yFin; + float yFin; /* deprecated - old transform strip */ float rotIni; - float rotFin; + float rotFin; /* deprecated - old transform strip */ int percent; int interpolation; + int uniform_scale; /* preserve aspect/ratio when scaling */ } TransformVars; typedef struct SolidColorVars { diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index 7a76417fe4b..e02d719470f 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -146,7 +146,9 @@ typedef struct SpaceSeq { short zebra; int flag; float zoom; - + int view; /* see SEQ_VIEW_* below */ + int pad; + struct bGPdata *gpd; /* grease-pencil data */ } SpaceSeq; @@ -667,6 +669,7 @@ enum FileSortTypeE { #define TEXTFILE 512 #define MOVIEFILE_ICON 1024 /* movie file that preview can't load */ #define FOLDERFILE 2048 /* represents folders for filtering */ +#define BTXFILE 4096 /* SpaceImage->dt_uv */ #define SI_UVDT_OUTLINE 0 @@ -825,7 +828,7 @@ enum { /* time->flag */ /* show timing in frames instead of in seconds */ #define TIME_DRAWFRAMES 1 - /* temporary flag set when scrubbing time */ + /* show time indicator box beside the frame number */ #define TIME_CFRA_NUM 2 /* only keyframes from active/selected channels get shown */ #define TIME_ONLYACTSEL 4 @@ -856,6 +859,12 @@ enum { #define SEQ_DRAW_GPENCIL 16 #define SEQ_NO_DRAW_CFRANUM 32 +/* sseq->view */ +#define SEQ_VIEW_SEQUENCE 1 +#define SEQ_VIEW_PREVIEW 2 +#define SEQ_VIEW_SEQUENCE_PREVIEW 3 + + /* space types, moved from DNA_screen_types.h */ enum { SPACE_EMPTY, diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h index 6e610b1c32d..a6be7256170 100644 --- a/source/blender/makesdna/DNA_userdef_types.h +++ b/source/blender/makesdna/DNA_userdef_types.h @@ -286,9 +286,12 @@ typedef struct UserDef { char plugseqdir[160]; char pythondir[160]; char sounddir[160]; - /* yafray: temporary xml export directory */ - char yfexportdir[160]; - short versions, pad; + char anim_player[240]; // FILE_MAX length + int anim_player_preset; + int pad; + + short versions; + short dbl_click_time; int gameflags; int wheellinescroll; @@ -430,6 +433,7 @@ extern UserDef U; /* from blenkernel blender.c */ #define AUTOKEY_FLAG_INSERTAVAIL (1<<0) #define AUTOKEY_FLAG_INSERTNEEDED (1<<1) #define AUTOKEY_FLAG_AUTOMATKEY (1<<2) +#define AUTOKEY_FLAG_XYZ2RGB (1<<3) /* U.autokey_flag (strictly autokeying only) */ #define AUTOKEY_FLAG_ONLYKEYINGSET (1<<6) /* toolsettings->autokey_flag */ diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h index 74d9fa59e50..5326c17688d 100644 --- a/source/blender/makesdna/DNA_view3d_types.h +++ b/source/blender/makesdna/DNA_view3d_types.h @@ -190,7 +190,7 @@ typedef struct View3D { #define V3D_DISPIMAGE 1 #define V3D_DISPBGPIC 2 #define V3D_HIDE_HELPLINES 4 -#define V3D_NEEDBACKBUFDRAW 8 +#define V3D_INVALID_BACKBUF 8 #define V3D_EDITMODE 16 #define V3D_VERTEXPAINT 32 #define V3D_FACESELECT 64 @@ -211,6 +211,7 @@ typedef struct View3D { /* RegionView3d->rflag */ #define RV3D_FLYMODE 2 #define RV3D_CLIPPING 4 +#define RV3D_NAVIGATING 8 /* RegionView3d->viewlock */ #define RV3D_LOCKED 1 diff --git a/source/blender/makesdna/DNA_windowmanager_types.h b/source/blender/makesdna/DNA_windowmanager_types.h index 1af1dd7a158..2f640d3dfd4 100644 --- a/source/blender/makesdna/DNA_windowmanager_types.h +++ b/source/blender/makesdna/DNA_windowmanager_types.h @@ -60,7 +60,7 @@ struct uiLayout; #define OP_MAX_TYPENAME 64 #define KMAP_MAX_NAME 64 - +/* keep in sync with 'wm_report_items' in wm_rna.c */ typedef enum ReportType { RPT_DEBUG = 1<<0, RPT_INFO = 1<<1, @@ -123,7 +123,6 @@ typedef struct wmWindowManager { ListBase keyconfigs; /* known key configurations */ struct wmKeyConfig *defaultconf; /* default configuration, not saved */ - int defaultactmap, pad2; /* active keymap from default for editing */ ListBase timers; /* active timers */ struct wmTimer *autosavetimer; /* timer for auto save */ @@ -139,7 +138,10 @@ typedef struct wmWindow { void *ghostwin; /* dont want to include ghost.h stuff */ - int winid, pad; /* winid also in screens, is for retrieving this window after read */ + int winid; /* winid also in screens, is for retrieving this window after read */ + + short grabcursor; /* cursor grab mode */ + short pad; struct bScreen *screen; /* active screen */ struct bScreen *newscreen; /* temporary when switching */ @@ -152,9 +154,7 @@ typedef struct wmWindow { short cursor; /* current mouse cursor type */ short lastcursor; /* for temp waitcursor */ short addmousemove; /* internal: tag this for extra mousemove event, makes cursors/buttons active on UI switching */ - - short last_type; /* last event information, used for click */ - short last_val; + short pad2[2]; struct wmEvent *eventstate; /* storage for event system */ @@ -259,7 +259,9 @@ typedef struct wmKeyMapItem { short flag; /* runtime */ - short maptype, pad[2]; /* keymap editor */ + short maptype; /* keymap editor */ + short id; /* unique identifier */ + short pad; struct PointerRNA *ptr; /* rna pointer to access properties */ } wmKeyMapItem; @@ -278,7 +280,7 @@ typedef struct wmKeyMap { short regionid; /* see above */ short flag; /* general flags */ - short pad; + short kmi_id; /* last kmi id */ /* runtime */ int (*poll)(struct bContext *); /* verify if enabled in the current context */ @@ -286,8 +288,10 @@ typedef struct wmKeyMap { } wmKeyMap; /* wmKeyMap.flag */ -#define KEYMAP_MODAL 1 /* modal map, not using operatornames */ -#define KEYMAP_USER 2 /* user created keymap */ +#define KEYMAP_MODAL 1 /* modal map, not using operatornames */ +#define KEYMAP_USER 2 /* user created keymap */ +#define KEYMAP_EXPANDED 4 +#define KEYMAP_CHILDREN_EXPANDED 8 typedef struct wmKeyConfig { struct wmKeyConfig *next, *prev; @@ -295,6 +299,8 @@ typedef struct wmKeyConfig { char idname[64]; /* unique name */ char basename[64]; /* idname of configuration this is derives from, "" if none */ + char filter[64]; /* search term for filtering in the UI */ + ListBase keymaps; int actkeymap, flag; } wmKeyConfig; @@ -336,40 +342,6 @@ typedef struct wmOperator { /* wmOperator flag */ #define OP_GRAB_POINTER 1 -/* ************** wmEvent ************************ */ -/* for read-only rna access, dont save this */ - -/* each event should have full modifier state */ -/* event comes from eventmanager and from keymap */ -typedef struct wmEvent { - struct wmEvent *next, *prev; - - short type; /* event code itself (short, is also in keymap) */ - short val; /* press, release, scrollvalue */ - short x, y; /* mouse pointer position, screen coord */ - short mval[2]; /* region mouse position, name convention pre 2.5 :) */ - short prevx, prevy; /* previous mouse pointer position */ - short unicode; /* future, ghost? */ - char ascii; /* from ghost */ - char pad; - - /* modifier states */ - short shift, ctrl, alt, oskey; /* oskey is apple or windowskey, value denotes order of pressed */ - short keymodifier; /* rawkey modifier */ - - short pad1; - - /* keymap item, set by handler (weak?) */ - const char *keymap_idname; - - /* custom data */ - short custom; /* custom data type, stylus, 6dof, see wm_event_types.h */ - short customdatafree; - int pad2; - void *customdata; /* ascii, unicode, mouse coords, angles, vectors, dragdrop info */ - -} wmEvent; - typedef enum wmRadialControlMode { WM_RADIALCONTROL_SIZE, WM_RADIALCONTROL_STRENGTH, diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index 135fed34d23..f57b4069b3c 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -38,6 +38,7 @@ struct bContext; struct ID; struct Main; struct ReportList; +struct Scene; /* Types */ @@ -417,6 +418,7 @@ extern StructRNA RNA_SmokeModifier; extern StructRNA RNA_SmoothModifier; extern StructRNA RNA_SoftBodyModifier; extern StructRNA RNA_SoftBodySettings; +extern StructRNA RNA_SolidifyModifier; extern StructRNA RNA_Sound; extern StructRNA RNA_SoundSequence; extern StructRNA RNA_Space; @@ -634,11 +636,13 @@ void RNA_property_float_range(PointerRNA *ptr, PropertyRNA *prop, float *hardmin void RNA_property_float_ui_range(PointerRNA *ptr, PropertyRNA *prop, float *softmin, float *softmax, float *step, float *precision); int RNA_enum_identifier(EnumPropertyItem *item, const int value, const char **identifier); +int RNA_enum_bitflag_identifierss(EnumPropertyItem *item, const int value, const char **identifier); int RNA_enum_name(EnumPropertyItem *item, const int value, const char **name); void RNA_property_enum_items(struct bContext *C, PointerRNA *ptr, PropertyRNA *prop, EnumPropertyItem **item, int *totitem, int *free); int RNA_property_enum_value(struct bContext *C, PointerRNA *ptr, PropertyRNA *prop, const char *identifier, int *value); int RNA_property_enum_identifier(struct bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value, const char **identifier); +int RNA_property_enum_bitflag_identifiers(struct bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value, const char **identifier); StructRNA *RNA_property_pointer_type(PointerRNA *ptr, PropertyRNA *prop); @@ -648,6 +652,7 @@ int RNA_property_animateable(PointerRNA *ptr, PropertyRNA *prop); int RNA_property_animated(PointerRNA *ptr, PropertyRNA *prop); void RNA_property_update(struct bContext *C, PointerRNA *ptr, PropertyRNA *prop); +void RNA_property_update_main(struct Main *bmain, struct Scene *scene, PointerRNA *ptr, PropertyRNA *prop); /* Property Data */ @@ -657,6 +662,9 @@ void RNA_property_boolean_get_array(PointerRNA *ptr, PropertyRNA *prop, int *val int RNA_property_boolean_get_index(PointerRNA *ptr, PropertyRNA *prop, int index); void RNA_property_boolean_set_array(PointerRNA *ptr, PropertyRNA *prop, const int *values); void RNA_property_boolean_set_index(PointerRNA *ptr, PropertyRNA *prop, int index, int value); +int RNA_property_boolean_get_default(PointerRNA *ptr, PropertyRNA *prop); +void RNA_property_boolean_get_default_array(PointerRNA *ptr, PropertyRNA *prop, int *values); +int RNA_property_boolean_get_default_index(PointerRNA *ptr, PropertyRNA *prop, int index); int RNA_property_int_get(PointerRNA *ptr, PropertyRNA *prop); void RNA_property_int_set(PointerRNA *ptr, PropertyRNA *prop, int value); @@ -664,6 +672,9 @@ void RNA_property_int_get_array(PointerRNA *ptr, PropertyRNA *prop, int *values) int RNA_property_int_get_index(PointerRNA *ptr, PropertyRNA *prop, int index); void RNA_property_int_set_array(PointerRNA *ptr, PropertyRNA *prop, const int *values); void RNA_property_int_set_index(PointerRNA *ptr, PropertyRNA *prop, int index, int value); +int RNA_property_int_get_default(PointerRNA *ptr, PropertyRNA *prop); +void RNA_property_int_get_default_array(PointerRNA *ptr, PropertyRNA *prop, int *values); +int RNA_property_int_get_default_index(PointerRNA *ptr, PropertyRNA *prop, int index); float RNA_property_float_get(PointerRNA *ptr, PropertyRNA *prop); void RNA_property_float_set(PointerRNA *ptr, PropertyRNA *prop, float value); @@ -671,17 +682,23 @@ void RNA_property_float_get_array(PointerRNA *ptr, PropertyRNA *prop, float *val float RNA_property_float_get_index(PointerRNA *ptr, PropertyRNA *prop, int index); void RNA_property_float_set_array(PointerRNA *ptr, PropertyRNA *prop, const float *values); void RNA_property_float_set_index(PointerRNA *ptr, PropertyRNA *prop, int index, float value); +float RNA_property_float_get_default(PointerRNA *ptr, PropertyRNA *prop); +void RNA_property_float_get_default_array(PointerRNA *ptr, PropertyRNA *prop, float *values); +float RNA_property_float_get_default_index(PointerRNA *ptr, PropertyRNA *prop, int index); void RNA_property_string_get(PointerRNA *ptr, PropertyRNA *prop, char *value); char *RNA_property_string_get_alloc(PointerRNA *ptr, PropertyRNA *prop, char *fixedbuf, int fixedlen); -int RNA_property_string_length(PointerRNA *ptr, PropertyRNA *prop); void RNA_property_string_set(PointerRNA *ptr, PropertyRNA *prop, const char *value); +int RNA_property_string_length(PointerRNA *ptr, PropertyRNA *prop); +// TODO: get default strings... int RNA_property_enum_get(PointerRNA *ptr, PropertyRNA *prop); void RNA_property_enum_set(PointerRNA *ptr, PropertyRNA *prop, int value); +int RNA_property_enum_get_default(PointerRNA *ptr, PropertyRNA *prop); PointerRNA RNA_property_pointer_get(PointerRNA *ptr, PropertyRNA *prop); void RNA_property_pointer_set(PointerRNA *ptr, PropertyRNA *prop, PointerRNA ptr_value); +// TODO: get default pointers... void RNA_property_collection_begin(PointerRNA *ptr, PropertyRNA *prop, CollectionPropertyIterator *iter); void RNA_property_collection_next(CollectionPropertyIterator *iter); @@ -707,6 +724,10 @@ void RNA_property_collection_add(PointerRNA *ptr, PropertyRNA *prop, PointerRNA int RNA_property_collection_remove(PointerRNA *ptr, PropertyRNA *prop, int key); void RNA_property_collection_clear(PointerRNA *ptr, PropertyRNA *prop); +/* copy/reset */ +int RNA_property_copy(PointerRNA *ptr, PointerRNA *fromptr, PropertyRNA *prop, int index); +int RNA_property_reset(PointerRNA *ptr, PropertyRNA *prop, int index); + /* Path * * Experimental method to refer to structs and properties with a string, diff --git a/source/blender/makesrna/RNA_enum_types.h b/source/blender/makesrna/RNA_enum_types.h index b33dbe6f20d..55ebf014b64 100644 --- a/source/blender/makesrna/RNA_enum_types.h +++ b/source/blender/makesrna/RNA_enum_types.h @@ -60,6 +60,7 @@ extern EnumPropertyItem nla_mode_blend_items[]; extern EnumPropertyItem event_value_items[]; extern EnumPropertyItem event_type_items[]; +extern EnumPropertyItem operator_return_items[]; extern EnumPropertyItem brush_sculpt_tool_items[]; @@ -71,6 +72,8 @@ extern EnumPropertyItem space_type_items[]; extern EnumPropertyItem keymap_propvalue_items[]; +extern EnumPropertyItem wm_report_items[]; + struct bContext; struct PointerRNA; EnumPropertyItem *rna_TransformOrientation_itemf(struct bContext *C, struct PointerRNA *ptr, int *free); diff --git a/source/blender/makesrna/RNA_types.h b/source/blender/makesrna/RNA_types.h index 27dd1069c1c..e771b495b96 100644 --- a/source/blender/makesrna/RNA_types.h +++ b/source/blender/makesrna/RNA_types.h @@ -84,8 +84,11 @@ typedef enum PropertyUnit { PROP_UNIT_ACCELERATION = (8<<16) /* m/(s^2) */ } PropertyUnit; -#define RNA_SUBTYPE_UNIT(subtype) (subtype & 0x00FF0000) -#define RNA_SUBTYPE_UNIT_VALUE(subtype) (subtype>>16) +#define RNA_SUBTYPE_UNIT(subtype) ((subtype) & 0x00FF0000) +#define RNA_SUBTYPE_VALUE(subtype) ((subtype) & ~0x00FF0000) +#define RNA_SUBTYPE_UNIT_VALUE(subtype) ((subtype)>>16) + +#define RNA_ENUM_BITFLAG_SIZE 32 /* also update rna_property_subtypename when you change this */ typedef enum PropertySubType { @@ -161,6 +164,12 @@ typedef enum PropertyFlag { PROP_ID_SELF_CHECK = 1<<20, PROP_NEVER_NULL = 1<<18, + /* flag contains multiple enums */ + PROP_ENUM_FLAG = 1<<21, + + /* need context for update function */ + PROP_CONTEXT_UPDATE = 1<<22, + /* internal flags */ PROP_BUILTIN = 1<<7, PROP_EXPORT = 1<<8, diff --git a/source/blender/makesrna/intern/Makefile b/source/blender/makesrna/intern/Makefile index 7923ea1e7de..e4e4e859ed3 100644 --- a/source/blender/makesrna/intern/Makefile +++ b/source/blender/makesrna/intern/Makefile @@ -75,7 +75,7 @@ ifeq ($(WITH_OPENJPEG), true) endif ifeq ($(WITH_QUICKTIME), true) - CPPFLAGS += -DWITH_QUICKTIME + CPPFLAGS += -DWITH_QUICKTIME -I../../quicktime endif ifeq ($(WITH_SDL),true) diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index 037b866edba..5bdfe228e89 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -1763,7 +1763,7 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr rna_print_c_string(f, prop->description); fprintf(f, ",\n\t"); fprintf(f, "%d,\n", prop->icon); fprintf(f, "\t%s, %s|%s, %s, %d, {%d, %d, %d}, %d,\n", rna_property_typename(prop->type), rna_property_subtypename(prop->subtype), rna_property_subtype_unit(prop->subtype), rna_function_string(prop->getlength), prop->arraydimension, prop->arraylength[0], prop->arraylength[1], prop->arraylength[2], prop->totarraylength); - fprintf(f, "\t%s, %d, %s, %s,\n", rna_function_string(prop->update), prop->noteflag, rna_function_string(prop->editable), rna_function_string(prop->itemeditable)); + fprintf(f, "\t%s%s, %d, %s, %s,\n", (prop->flag & PROP_CONTEXT_UPDATE)? "(UpdateFunc)": "", rna_function_string(prop->update), prop->noteflag, rna_function_string(prop->editable), rna_function_string(prop->itemeditable)); if(prop->flag & PROP_RAW_ACCESS) rna_set_raw_offset(f, srna, prop); else fprintf(f, "\t0, 0"); @@ -2020,7 +2020,7 @@ RNAProcessItem PROCESS_ITEMS[]= { {"rna_screen.c", NULL, RNA_def_screen}, {"rna_sculpt_paint.c", NULL, RNA_def_sculpt_paint}, {"rna_sensor.c", NULL, RNA_def_sensor}, - {"rna_sequence.c", NULL, RNA_def_sequence}, + {"rna_sequencer.c", NULL, RNA_def_sequencer}, {"rna_smoke.c", NULL, RNA_def_smoke}, {"rna_space.c", NULL, RNA_def_space}, {"rna_test.c", NULL, RNA_def_test}, @@ -2050,11 +2050,13 @@ static void rna_generate(BlenderRNA *brna, FILE *f, char *filename, char *api_fi fprintf(f, "#include \n\n"); fprintf(f, "#include \"DNA_ID.h\"\n"); + fprintf(f, "#include \"DNA_scene_types.h\"\n"); fprintf(f, "#include \"BLI_blenlib.h\"\n\n"); fprintf(f, "#include \"BKE_context.h\"\n"); fprintf(f, "#include \"BKE_library.h\"\n"); + fprintf(f, "#include \"BKE_main.h\"\n"); fprintf(f, "#include \"BKE_report.h\"\n"); fprintf(f, "#include \"BKE_utildefines.h\"\n\n"); diff --git a/source/blender/makesrna/intern/rna_ID.c b/source/blender/makesrna/intern/rna_ID.c index 3bcdf373c43..2aeb600bc42 100644 --- a/source/blender/makesrna/intern/rna_ID.c +++ b/source/blender/makesrna/intern/rna_ID.c @@ -225,6 +225,40 @@ ID *rna_ID_copy(ID *id) return NULL; } +static int rna_IDPropertyGroup_name_length(PointerRNA *ptr) +{ + IDProperty *group=(IDProperty*)ptr->id.data; + IDProperty *idprop; + idprop= IDP_GetPropertyFromGroup(group, "name"); + + if(idprop && idprop->type == IDP_STRING) + return strlen(idprop->data.pointer); + else + return 0; +} + +static void rna_IDPropertyGroup_name_get(PointerRNA *ptr, char *str) +{ + IDProperty *group=(IDProperty*)ptr->id.data; + IDProperty *idprop; + idprop= IDP_GetPropertyFromGroup(group, "name"); + + if(idprop && idprop->type == IDP_STRING) + strcpy(str, idprop->data.pointer); + else + str[0]= '\0'; +} + +void rna_IDPropertyGroup_name_set(PointerRNA *ptr, const char *value) +{ + IDProperty *group=(IDProperty*)ptr->id.data; + IDProperty *idprop; + IDPropertyTemplate val = {0}; + val.str= (char *)value; + idprop = IDP_New(IDP_STRING, val, "name"); + IDP_ReplaceInGroup(group, idprop); +} + #else static void rna_def_ID_properties(BlenderRNA *brna) @@ -275,6 +309,15 @@ static void rna_def_ID_properties(BlenderRNA *brna) RNA_def_property_flag(prop, PROP_EXPORT|PROP_IDPROPERTY); RNA_def_property_struct_type(prop, "IDPropertyGroup"); + // never tested, maybe its useful to have this? +#if 0 + prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); + RNA_def_property_flag(prop, PROP_EXPORT|PROP_IDPROPERTY); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Name", "Unique name used in the code and scripting."); + RNA_def_struct_name_property(srna, prop); +#endif + /* IDP_ID -- not implemented yet in id properties */ /* ID property groups > level 0, since level 0 group is merged @@ -285,6 +328,16 @@ static void rna_def_ID_properties(BlenderRNA *brna) RNA_def_struct_idproperties_func(srna, "rna_IDPropertyGroup_idproperties"); RNA_def_struct_register_funcs(srna, "rna_IDPropertyGroup_register", "rna_IDPropertyGroup_unregister"); RNA_def_struct_refine_func(srna, "rna_IDPropertyGroup_refine"); + + /* important so python types can have their name used in list views + * however this isnt prefect because it overrides how python would set the name + * when we only really want this so RNA_def_struct_name_property() is set to something useful */ + prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); + RNA_def_property_flag(prop, PROP_EXPORT|PROP_IDPROPERTY); + //RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Name", "Unique name used in the code and scripting."); + RNA_def_property_string_funcs(prop, "rna_IDPropertyGroup_name_get", "rna_IDPropertyGroup_name_length", "rna_IDPropertyGroup_name_set"); + RNA_def_struct_name_property(srna, prop); } static void rna_def_ID(BlenderRNA *brna) @@ -303,7 +356,7 @@ static void rna_def_ID(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Name", "Unique datablock ID name."); RNA_def_property_string_funcs(prop, "rna_ID_name_get", "rna_ID_name_length", "rna_ID_name_set"); RNA_def_property_string_maxlength(prop, sizeof(((ID*)NULL)->name)-2); - RNA_def_property_update(prop, NC_ID|ND_ID_RENAME, NULL); + RNA_def_property_update(prop, NC_ID|NA_RENAME, NULL); RNA_def_struct_name_property(srna, prop); prop= RNA_def_property(srna, "users", PROP_INT, PROP_UNSIGNED); diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c index 5ee811d4c46..59200a2de55 100644 --- a/source/blender/makesrna/intern/rna_access.c +++ b/source/blender/makesrna/intern/rna_access.c @@ -29,6 +29,7 @@ #include "MEM_guardedalloc.h" #include "DNA_ID.h" +#include "DNA_scene_types.h" #include "DNA_windowmanager_types.h" #include "BLI_blenlib.h" @@ -37,6 +38,7 @@ #include "BKE_context.h" #include "BKE_idprop.h" +#include "BKE_main.h" #include "BKE_report.h" #include "BKE_utildefines.h" @@ -505,7 +507,7 @@ int RNA_struct_is_a(StructRNA *type, StructRNA *srna) PropertyRNA *RNA_struct_find_property(PointerRNA *ptr, const char *identifier) { - if(identifier[0]=='[' && identifier[1]=='"') { + if(identifier[0]=='[' && identifier[1]=='"') { // " (dummy comment to avoid confusing some function lists in text editors) /* id prop lookup, not so common */ PropertyRNA *r_prop= NULL; PointerRNA r_ptr; /* only support single level props */ @@ -883,6 +885,7 @@ void RNA_property_float_ui_range(PointerRNA *ptr, PropertyRNA *prop, float *soft *precision= (float)fprop->precision; } +/* this is the max length including \0 terminator */ int RNA_property_string_maxlength(PropertyRNA *prop) { StringPropertyRNA *sprop= (StringPropertyRNA*)rna_ensure_property(prop); @@ -943,22 +946,22 @@ void RNA_property_enum_items(bContext *C, PointerRNA *ptr, PropertyRNA *prop, En int RNA_property_enum_value(bContext *C, PointerRNA *ptr, PropertyRNA *prop, const char *identifier, int *value) { - EnumPropertyItem *item; + EnumPropertyItem *item, *item_array; int free; - RNA_property_enum_items(C, ptr, prop, &item, NULL, &free); + RNA_property_enum_items(C, ptr, prop, &item_array, NULL, &free); - for(; item->identifier; item++) { + for(item= item_array; item->identifier; item++) { if(item->identifier[0] && strcmp(item->identifier, identifier)==0) { *value = item->value; - return 1; + break; } } if(free) - MEM_freeN(item); + MEM_freeN(item_array); - return 0; + return (item->identifier) ? 1:0; } int RNA_enum_identifier(EnumPropertyItem *item, const int value, const char **identifier) @@ -972,6 +975,18 @@ int RNA_enum_identifier(EnumPropertyItem *item, const int value, const char **id return 0; } +int RNA_enum_bitflag_identifiers(EnumPropertyItem *item, const int value, const char **identifier) +{ + int index= 0; + for (; item->identifier; item++) { + if(item->identifier[0] && item->value & value) { + identifier[index++] = item->identifier; + } + } + identifier[index]= NULL; + return index; +} + int RNA_enum_name(EnumPropertyItem *item, const int value, const char **name) { for (; item->identifier; item++) { @@ -999,6 +1014,22 @@ int RNA_property_enum_identifier(bContext *C, PointerRNA *ptr, PropertyRNA *prop return 0; } +int RNA_property_enum_bitflag_identifiers(bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value, const char **identifier) +{ + EnumPropertyItem *item= NULL; + int result, free; + + RNA_property_enum_items(C, ptr, prop, &item, NULL, &free); + if(item) { + result= RNA_enum_bitflag_identifiers(item, value, identifier); + if(free) + MEM_freeN(item); + + return result; + } + return 0; +} + const char *RNA_property_ui_name(PropertyRNA *prop) { return rna_ensure_property_name(prop); @@ -1075,23 +1106,41 @@ int RNA_property_animated(PointerRNA *ptr, PropertyRNA *prop) return 0; } -void RNA_property_update(bContext *C, PointerRNA *ptr, PropertyRNA *prop) +static void rna_property_update(bContext *C, Main *bmain, Scene *scene, PointerRNA *ptr, PropertyRNA *prop) { int is_rna = (prop->magic == RNA_MAGIC); prop= rna_ensure_property(prop); if(is_rna) { - if(prop->update) - prop->update(C, ptr); + if(prop->update) { + /* ideally no context would be needed for update, but there's some + parts of the code that need it still, so we have this exception */ + if(prop->flag & PROP_CONTEXT_UPDATE) { + if(C) ((ContextUpdateFunc)prop->update)(C, ptr); + } + else + prop->update(bmain, scene, ptr); + } if(prop->noteflag) - WM_event_add_notifier(C, prop->noteflag, ptr->id.data); + WM_main_add_notifier(prop->noteflag, ptr->id.data); } else { /* WARNING! This is so property drivers update the display! * not especially nice */ DAG_id_flush_update(ptr->id.data, OB_RECALC_OB); - WM_event_add_notifier(C, NC_WINDOW, NULL); + WM_main_add_notifier(NC_WINDOW, NULL); } + +} + +void RNA_property_update(bContext *C, PointerRNA *ptr, PropertyRNA *prop) +{ + rna_property_update(C, CTX_data_main(C), CTX_data_scene(C), ptr, prop); +} + +void RNA_property_update_main(Main *bmain, Scene *scene, PointerRNA *ptr, PropertyRNA *prop) +{ + rna_property_update(NULL, bmain, scene, ptr, prop); } /* Property Data */ @@ -1227,6 +1276,45 @@ void RNA_property_boolean_set_index(PointerRNA *ptr, PropertyRNA *prop, int inde } } +int RNA_property_boolean_get_default(PointerRNA *ptr, PropertyRNA *prop) +{ + BooleanPropertyRNA *bprop= (BooleanPropertyRNA*)prop; + return bprop->defaultvalue; +} + +void RNA_property_boolean_get_default_array(PointerRNA *ptr, PropertyRNA *prop, int *values) +{ + BooleanPropertyRNA *bprop= (BooleanPropertyRNA*)prop; + + if(prop->arraydimension == 0) + values[0]= bprop->defaultvalue; + else if(bprop->defaultarray) + memcpy(values, bprop->defaultarray, sizeof(int)*prop->totarraylength); + else + memset(values, 0, sizeof(int)*prop->totarraylength); +} + +int RNA_property_boolean_get_default_index(PointerRNA *ptr, PropertyRNA *prop, int index) +{ + int tmp[RNA_MAX_ARRAY_LENGTH]; + int len= rna_ensure_property_array_length(ptr, prop); + + if(len <= RNA_MAX_ARRAY_LENGTH) { + RNA_property_boolean_get_default_array(ptr, prop, tmp); + return tmp[index]; + } + else { + int *tmparray, value; + + tmparray= MEM_callocN(sizeof(int)*len, "RNA_property_boolean_get_default_index"); + RNA_property_boolean_get_default_array(ptr, prop, tmparray); + value= tmparray[index]; + MEM_freeN(tmparray); + + return value; + } +} + int RNA_property_int_get(PointerRNA *ptr, PropertyRNA *prop) { IntPropertyRNA *iprop= (IntPropertyRNA*)prop; @@ -1355,6 +1443,45 @@ void RNA_property_int_set_index(PointerRNA *ptr, PropertyRNA *prop, int index, i } } +int RNA_property_int_get_default(PointerRNA *ptr, PropertyRNA *prop) +{ + IntPropertyRNA *iprop= (IntPropertyRNA*)prop; + return iprop->defaultvalue; +} + +void RNA_property_int_get_default_array(PointerRNA *ptr, PropertyRNA *prop, int *values) +{ + IntPropertyRNA *iprop= (IntPropertyRNA*)prop; + + if(prop->arraydimension == 0) + values[0]= iprop->defaultvalue; + else if(iprop->defaultarray) + memcpy(values, iprop->defaultarray, sizeof(int)*prop->totarraylength); + else + memset(values, 0, sizeof(int)*prop->totarraylength); +} + +int RNA_property_int_get_default_index(PointerRNA *ptr, PropertyRNA *prop, int index) +{ + int tmp[RNA_MAX_ARRAY_LENGTH]; + int len= rna_ensure_property_array_length(ptr, prop); + + if(len <= RNA_MAX_ARRAY_LENGTH) { + RNA_property_int_get_default_array(ptr, prop, tmp); + return tmp[index]; + } + else { + int *tmparray, value; + + tmparray= MEM_callocN(sizeof(int)*len, "RNA_property_int_get_default_index"); + RNA_property_int_get_default_array(ptr, prop, tmparray); + value= tmparray[index]; + MEM_freeN(tmparray); + + return value; + } +} + float RNA_property_float_get(PointerRNA *ptr, PropertyRNA *prop) { FloatPropertyRNA *fprop= (FloatPropertyRNA*)prop; @@ -1510,6 +1637,45 @@ void RNA_property_float_set_index(PointerRNA *ptr, PropertyRNA *prop, int index, } } +float RNA_property_float_get_default(PointerRNA *ptr, PropertyRNA *prop) +{ + FloatPropertyRNA *fprop= (FloatPropertyRNA*)prop; + return fprop->defaultvalue; +} + +void RNA_property_float_get_default_array(PointerRNA *ptr, PropertyRNA *prop, float *values) +{ + FloatPropertyRNA *fprop= (FloatPropertyRNA*)prop; + + if(prop->arraydimension == 0) + values[0]= fprop->defaultvalue; + else if(fprop->defaultarray) + memcpy(values, fprop->defaultarray, sizeof(float)*prop->totarraylength); + else + memset(values, 0, sizeof(float)*prop->totarraylength); +} + +float RNA_property_float_get_default_index(PointerRNA *ptr, PropertyRNA *prop, int index) +{ + float tmp[RNA_MAX_ARRAY_LENGTH]; + int len= rna_ensure_property_array_length(ptr, prop); + + if(len <= RNA_MAX_ARRAY_LENGTH) { + RNA_property_float_get_default_array(ptr, prop, tmp); + return tmp[index]; + } + else { + float *tmparray, value; + + tmparray= MEM_callocN(sizeof(float)*len, "RNA_property_float_get_default_index"); + RNA_property_float_get_default_array(ptr, prop, tmparray); + value= tmparray[index]; + MEM_freeN(tmparray); + + return value; + } +} + void RNA_property_string_get(PointerRNA *ptr, PropertyRNA *prop, char *value) { StringPropertyRNA *sprop= (StringPropertyRNA*)prop; @@ -1540,6 +1706,7 @@ char *RNA_property_string_get_alloc(PointerRNA *ptr, PropertyRNA *prop, char *fi return buf; } +/* this is the length without \0 terminator */ int RNA_property_string_length(PointerRNA *ptr, PropertyRNA *prop) { StringPropertyRNA *sprop= (StringPropertyRNA*)prop; @@ -1587,7 +1754,6 @@ int RNA_property_enum_get(PointerRNA *ptr, PropertyRNA *prop) return eprop->defaultvalue; } - void RNA_property_enum_set(PointerRNA *ptr, PropertyRNA *prop, int value) { EnumPropertyRNA *eprop= (EnumPropertyRNA*)prop; @@ -1610,6 +1776,13 @@ void RNA_property_enum_set(PointerRNA *ptr, PropertyRNA *prop, int value) } } +int RNA_property_enum_get_default(PointerRNA *ptr, PropertyRNA *prop) +{ + EnumPropertyRNA *eprop= (EnumPropertyRNA*)prop; + return eprop->defaultvalue; +} + + PointerRNA RNA_property_pointer_get(PointerRNA *ptr, PropertyRNA *prop) { PointerPropertyRNA *pprop= (PointerPropertyRNA*)prop; @@ -3915,4 +4088,186 @@ int RNA_function_call_direct_va_lookup(bContext *C, ReportList *reports, Pointer return 0; } +int RNA_property_reset(PointerRNA *ptr, PropertyRNA *prop, int index) +{ + int len; + + /* get the length of the array to work with */ + len= RNA_property_array_length(ptr, prop); + + /* get and set the default values as appropriate for the various types */ + switch (RNA_property_type(prop)) { + case PROP_BOOLEAN: + if (len) { + if (index == -1) { + int *tmparray= MEM_callocN(sizeof(int)*len, "reset_defaults - boolean"); + + RNA_property_boolean_get_default_array(ptr, prop, tmparray); + RNA_property_boolean_set_array(ptr, prop, tmparray); + + MEM_freeN(tmparray); + } + else { + int value= RNA_property_boolean_get_default_index(ptr, prop, index); + RNA_property_boolean_set_index(ptr, prop, index, value); + } + } + else { + int value= RNA_property_boolean_get_default(ptr, prop); + RNA_property_boolean_set(ptr, prop, value); + } + return 1; + case PROP_INT: + if (len) { + if (index == -1) { + int *tmparray= MEM_callocN(sizeof(int)*len, "reset_defaults - int"); + + RNA_property_int_get_default_array(ptr, prop, tmparray); + RNA_property_int_set_array(ptr, prop, tmparray); + + MEM_freeN(tmparray); + } + else { + int value= RNA_property_int_get_default_index(ptr, prop, index); + RNA_property_int_set_index(ptr, prop, index, value); + } + } + else { + int value= RNA_property_int_get_default(ptr, prop); + RNA_property_int_set(ptr, prop, value); + } + return 1; + case PROP_FLOAT: + if (len) { + if (index == -1) { + float *tmparray= MEM_callocN(sizeof(float)*len, "reset_defaults - float"); + + RNA_property_float_get_default_array(ptr, prop, tmparray); + RNA_property_float_set_array(ptr, prop, tmparray); + + MEM_freeN(tmparray); + } + else { + float value= RNA_property_float_get_default_index(ptr, prop, index); + RNA_property_float_set_index(ptr, prop, index, value); + } + } + else { + float value= RNA_property_float_get_default(ptr, prop); + RNA_property_float_set(ptr, prop, value); + } + return 1; + case PROP_ENUM: + { + int value= RNA_property_enum_get_default(ptr, prop); + RNA_property_enum_set(ptr, prop, value); + return 1; + } + + //case PROP_POINTER: + //case PROP_STRING: + default: + // FIXME: many of the other types such as strings and pointers need this implemented too! + return 0; + } +} + +int RNA_property_copy(PointerRNA *ptr, PointerRNA *fromptr, PropertyRNA *prop, int index) +{ + int len, fromlen; + + /* get the length of the array to work with */ + len= RNA_property_array_length(ptr, prop); + fromlen= RNA_property_array_length(ptr, prop); + + if(len != fromlen) + return 0; + + /* get and set the default values as appropriate for the various types */ + switch (RNA_property_type(prop)) { + case PROP_BOOLEAN: + if (len) { + if (index == -1) { + int *tmparray= MEM_callocN(sizeof(int)*len, "copy - boolean"); + + RNA_property_boolean_get_array(fromptr, prop, tmparray); + RNA_property_boolean_set_array(ptr, prop, tmparray); + + MEM_freeN(tmparray); + } + else { + int value= RNA_property_boolean_get_index(fromptr, prop, index); + RNA_property_boolean_set_index(ptr, prop, index, value); + } + } + else { + int value= RNA_property_boolean_get(fromptr, prop); + RNA_property_boolean_set(ptr, prop, value); + } + return 1; + case PROP_INT: + if (len) { + if (index == -1) { + int *tmparray= MEM_callocN(sizeof(int)*len, "copy - int"); + + RNA_property_int_get_array(fromptr, prop, tmparray); + RNA_property_int_set_array(ptr, prop, tmparray); + + MEM_freeN(tmparray); + } + else { + int value= RNA_property_int_get_index(fromptr, prop, index); + RNA_property_int_set_index(ptr, prop, index, value); + } + } + else { + int value= RNA_property_int_get(fromptr, prop); + RNA_property_int_set(ptr, prop, value); + } + return 1; + case PROP_FLOAT: + if (len) { + if (index == -1) { + float *tmparray= MEM_callocN(sizeof(float)*len, "copy - float"); + + RNA_property_float_get_array(fromptr, prop, tmparray); + RNA_property_float_set_array(ptr, prop, tmparray); + + MEM_freeN(tmparray); + } + else { + float value= RNA_property_float_get_index(fromptr, prop, index); + RNA_property_float_set_index(ptr, prop, index, value); + } + } + else { + float value= RNA_property_float_get(fromptr, prop); + RNA_property_float_set(ptr, prop, value); + } + return 1; + case PROP_ENUM: + { + int value= RNA_property_enum_get(fromptr, prop); + RNA_property_enum_set(ptr, prop, value); + return 1; + } + case PROP_POINTER: + { + PointerRNA value= RNA_property_pointer_get(fromptr, prop); + RNA_property_pointer_set(ptr, prop, value); + return 1; + } + case PROP_STRING: + { + char *value= RNA_property_string_get_alloc(fromptr, prop, NULL, 0); + RNA_property_string_set(ptr, prop, value); + MEM_freeN(value); + return 1; + } + default: + return 0; + } + + return 0; +} diff --git a/source/blender/makesrna/intern/rna_action.c b/source/blender/makesrna/intern/rna_action.c index eaa11b4ad38..3f6729136d5 100644 --- a/source/blender/makesrna/intern/rna_action.c +++ b/source/blender/makesrna/intern/rna_action.c @@ -29,15 +29,147 @@ #include "rna_internal.h" +#include "DNA_anim_types.h" #include "DNA_action_types.h" #include "DNA_scene_types.h" #include "MEM_guardedalloc.h" +#include "WM_types.h" + + #ifdef RNA_RUNTIME +static void rna_ActionGroup_channels_next(CollectionPropertyIterator *iter) +{ + ListBaseIterator *internal= iter->internal; + FCurve *fcu= (FCurve*)internal->link; + bActionGroup *grp= fcu->grp; + + /* only continue if the next F-Curve (if existant) belongs in the same group */ + if ((fcu->next) && (fcu->next->grp == grp)) + internal->link= (Link*)fcu->next; + else + internal->link= NULL; + + iter->valid= (internal->link != NULL); +} + #else +static void rna_def_dopesheet(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna= RNA_def_struct(brna, "DopeSheet", NULL); + RNA_def_struct_sdna(srna, "bDopeSheet"); + RNA_def_struct_ui_text(srna, "DopeSheet", "Storage for Dopesheet/Grease-Pencil Editor data."); + + prop= RNA_def_property(srna, "source", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "ID"); + RNA_def_property_ui_text(prop, "Source", "ID-Block representing source data, currently ID_SCE (for Dopesheet), and ID_SC (for Grease Pencil)."); + + prop= RNA_def_property(srna, "only_selected", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "filterflag", ADS_FILTER_ONLYSEL); + RNA_def_property_ui_text(prop, "Only Selected", "Only include channels relating to selected objects and data."); + RNA_def_property_ui_icon(prop, ICON_RESTRICT_SELECT_OFF, 0); + RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL); + + prop= RNA_def_property(srna, "only_nla", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "filterflag", ADS_FILTER_ONLYNLA); + RNA_def_property_ui_text(prop, "Only NLA", "Only include NLA data from Animation data."); + RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL); + + prop= RNA_def_property(srna, "use_filter", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "filterflag", ADS_FILTER_SELEDIT); + RNA_def_property_ui_text(prop, "Use Filter", "Indicates if filtering options must be taken into account."); + RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL); + + prop= RNA_def_property(srna, "display_summary", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "filterflag", ADS_FILTER_SUMMARY); + RNA_def_property_ui_text(prop, "Display Summary", "Display an additional 'summary' line."); + RNA_def_property_ui_icon(prop, ICON_BORDERMOVE, 0); + RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL); + + prop= RNA_def_property(srna, "display_shapekeys", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOSHAPEKEYS); + RNA_def_property_ui_text(prop, "Display Shapekeys", "Include visualization of Shapekey related Animation data."); + RNA_def_property_ui_icon(prop, ICON_SHAPEKEY_DATA, 0); + RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL); + + prop= RNA_def_property(srna, "display_camera", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOCAM); + RNA_def_property_ui_text(prop, "Display Camera", "Include visualization of Camera related Animation data."); + RNA_def_property_ui_icon(prop, ICON_CAMERA_DATA, 0); + RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL); + + prop= RNA_def_property(srna, "display_material", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOMAT); + RNA_def_property_ui_text(prop, "Display Material", "Include visualization of Material related Animation data."); + RNA_def_property_ui_icon(prop, ICON_MATERIAL_DATA, 0); + RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL); + + prop= RNA_def_property(srna, "display_lamp", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOLAM); + RNA_def_property_ui_text(prop, "Display Lamp", "Include visualization of Lamp related Animation data."); + RNA_def_property_ui_icon(prop, ICON_LAMP_DATA, 0); + RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL); + + prop= RNA_def_property(srna, "display_curve", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOCUR); + RNA_def_property_ui_text(prop, "Display Curve", "Include visualization of Curve related Animation data."); + RNA_def_property_ui_icon(prop, ICON_CURVE_DATA, 0); + RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL); + + prop= RNA_def_property(srna, "display_world", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOWOR); + RNA_def_property_ui_text(prop, "Display World", "Include visualization of World related Animation data."); + RNA_def_property_ui_icon(prop, ICON_WORLD_DATA, 0); + RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL); + + prop= RNA_def_property(srna, "display_scene", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOSCE); + RNA_def_property_ui_text(prop, "Display Scene", "Include visualization of Scene related Animation data."); + RNA_def_property_ui_icon(prop, ICON_SCENE_DATA, 0); + RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL); + + prop= RNA_def_property(srna, "display_particle", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOPART); + RNA_def_property_ui_text(prop, "Display Particle", "Include visualization of Particle related Animation data."); + RNA_def_property_ui_icon(prop, ICON_PARTICLE_DATA, 0); + RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL); + + prop= RNA_def_property(srna, "display_metaball", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOMBA); + RNA_def_property_ui_text(prop, "Display Metaball", "Include visualization of Metaball related Animation data."); + RNA_def_property_ui_icon(prop, ICON_META_DATA, 0); + RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL); + + prop= RNA_def_property(srna, "display_armature", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOARM); + RNA_def_property_ui_text(prop, "Display Armature", "Include visualization of Armature related Animation data."); + RNA_def_property_ui_icon(prop, ICON_ARMATURE_DATA, 0); + RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL); + + prop= RNA_def_property(srna, "display_node", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NONTREE); + RNA_def_property_ui_text(prop, "Display Node", "Include visualization of Node related Animation data."); + RNA_def_property_ui_icon(prop, ICON_NODETREE, 0); + RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL); + + prop= RNA_def_property(srna, "include_missing_nla", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NLA_NOACT); + RNA_def_property_ui_text(prop, "Include Missing NLA", "Include Animation Data blocks with no NLA data. (NLA Editor only)"); + RNA_def_property_ui_icon(prop, ICON_ACTION, 0); + RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL); + + prop= RNA_def_property(srna, "collapse_summary", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", ADS_FLAG_SUMMARY_COLLAPSED); + RNA_def_property_ui_text(prop, "Collapse Summary", "Collapse summary when shown, so all other channels get hidden. (DopeSheet Window Editors Only)"); + RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL); +} + static void rna_def_action_group(BlenderRNA *brna) { StructRNA *srna; @@ -51,13 +183,18 @@ static void rna_def_action_group(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Name", ""); RNA_def_struct_name_property(srna, prop); - /* dna warns not to treat the Action Channel listbase in the Action Group struct like a - normal listbase. I'll leave this here but comment out, for Joshua to review. He can - probably shed some more light on why this is */ - /*prop= RNA_def_property(srna, "channels", PROP_COLLECTION, PROP_NONE); + /* WARNING: be very careful when working with this list, since the endpoint is not + * defined like a standard ListBase. Adding/removing channels from this list needs + * extreme care, otherwise the F-Curve list running through adjacent groups does + * not match up with the one stored in the Action, resulting in curves which do not + * show up in animation editors. For that reason, such operations are currently + * prohibited. + */ + prop= RNA_def_property(srna, "channels", PROP_COLLECTION, PROP_NONE); RNA_def_property_collection_sdna(prop, NULL, "channels", NULL); RNA_def_property_struct_type(prop, "FCurve"); - RNA_def_property_ui_text(prop, "Channels", "F-Curves in this group.");*/ + RNA_def_property_collection_funcs(prop, 0, "rna_ActionGroup_channels_next", 0, 0, 0, 0, 0); + RNA_def_property_ui_text(prop, "Channels", "F-Curves in this group."); prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", AGRP_SELECTED); @@ -80,22 +217,22 @@ static void rna_def_action(BlenderRNA *brna) { StructRNA *srna; PropertyRNA *prop; - + srna= RNA_def_struct(brna, "Action", "ID"); RNA_def_struct_sdna(srna, "bAction"); RNA_def_struct_ui_text(srna, "Action", "A collection of F-Curves for animation."); RNA_def_struct_ui_icon(srna, ICON_ACTION); - + prop= RNA_def_property(srna, "fcurves", PROP_COLLECTION, PROP_NONE); RNA_def_property_collection_sdna(prop, NULL, "curves", NULL); RNA_def_property_struct_type(prop, "FCurve"); RNA_def_property_ui_text(prop, "F-Curves", "The individual F-Curves that make up the Action."); - + prop= RNA_def_property(srna, "groups", PROP_COLLECTION, PROP_NONE); RNA_def_property_collection_sdna(prop, NULL, "groups", NULL); RNA_def_property_struct_type(prop, "ActionGroup"); RNA_def_property_ui_text(prop, "Groups", "Convenient groupings of F-Curves."); - + prop= RNA_def_property(srna, "pose_markers", PROP_COLLECTION, PROP_NONE); RNA_def_property_collection_sdna(prop, NULL, "markers", NULL); RNA_def_property_struct_type(prop, "TimelineMarker"); @@ -110,6 +247,7 @@ void RNA_def_action(BlenderRNA *brna) { rna_def_action(brna); rna_def_action_group(brna); + rna_def_dopesheet(brna); } diff --git a/source/blender/makesrna/intern/rna_animation.c b/source/blender/makesrna/intern/rna_animation.c index 3e7638b3d51..56e2707b5bb 100644 --- a/source/blender/makesrna/intern/rna_animation.c +++ b/source/blender/makesrna/intern/rna_animation.c @@ -203,9 +203,9 @@ static void rna_def_keyingset_path(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Grouping Method", "Method used to define which Group-name to use."); /* Path + Array Index */ - prop= RNA_def_property(srna, "rna_path", PROP_STRING, PROP_NONE); + prop= RNA_def_property(srna, "data_path", PROP_STRING, PROP_NONE); RNA_def_property_string_funcs(prop, "rna_ksPath_RnaPath_get", "rna_ksPath_RnaPath_length", "rna_ksPath_RnaPath_set"); - RNA_def_property_ui_text(prop, "RNA Path", "RNA Path to property setting."); + RNA_def_property_ui_text(prop, "Data Path", "Path to property setting."); RNA_def_struct_name_property(srna, prop); // XXX this is the best indicator for now... prop= RNA_def_property(srna, "array_index", PROP_INT, PROP_NONE); @@ -267,6 +267,10 @@ static void rna_def_keyingset(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "keyingflag", INSERTKEY_MATRIX); RNA_def_property_ui_text(prop, "Insert Keyframes - Visual", "Insert keyframes based on 'visual transforms'."); + prop= RNA_def_property(srna, "insertkey_xyz_to_rgb", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "keyingflag", INSERTKEY_XYZ2RGB); + RNA_def_property_ui_text(prop, "F-Curve Colors - XYZ to RGB", "Color for newly added transformation F-Curves (Location, Rotation, Scale) and also Color is based on the transform axis."); + /* Keying Set API */ RNA_api_keyingset(srna); } diff --git a/source/blender/makesrna/intern/rna_animation_api.c b/source/blender/makesrna/intern/rna_animation_api.c index 5852c494936..fc36bab29af 100644 --- a/source/blender/makesrna/intern/rna_animation_api.c +++ b/source/blender/makesrna/intern/rna_animation_api.c @@ -76,7 +76,7 @@ void RNA_api_keyingset(StructRNA *srna) parm= RNA_def_pointer(func, "target_id", "ID", "Target ID", "ID-Datablock for the destination."); RNA_def_property_flag(parm, PROP_REQUIRED); /* rna-path */ - parm= RNA_def_string(func, "rna_path", "", 256, "RNA-Path", "RNA-Path to destination property."); // xxx hopefully this is long enough + parm= RNA_def_string(func, "data_path", "", 256, "Data-Path", "RNA-Path to destination property."); // xxx hopefully this is long enough RNA_def_property_flag(parm, PROP_REQUIRED); parm=RNA_def_int(func, "array_index", 0, 0, INT_MAX, "Array Index", "If applicable, the index ", 0, INT_MAX); /* flags */ diff --git a/source/blender/makesrna/intern/rna_armature.c b/source/blender/makesrna/intern/rna_armature.c index 371f14be753..0f36ebda70e 100644 --- a/source/blender/makesrna/intern/rna_armature.c +++ b/source/blender/makesrna/intern/rna_armature.c @@ -46,14 +46,15 @@ #include "BKE_main.h" #include "ED_armature.h" +#include "BKE_armature.h" -static void rna_Armature_update_data(bContext *C, PointerRNA *ptr) +static void rna_Armature_update_data(Main *bmain, Scene *scene, PointerRNA *ptr) { ID *id= ptr->id.data; DAG_id_flush_update(id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_GEOM|ND_DATA, id); - //WM_event_add_notifier(C, NC_OBJECT|ND_POSE, NULL); + WM_main_add_notifier(NC_GEOM|ND_DATA, id); + //WM_main_add_notifier(NC_OBJECT|ND_POSE, NULL); } @@ -93,21 +94,29 @@ static void rna_Armature_act_edit_bone_set(PointerRNA *ptr, PointerRNA value) } } -EditBone *rna_Armature_edit_bone_new(bArmature *arm, char *name) +EditBone *rna_Armature_edit_bone_new(bArmature *arm, ReportList *reports, char *name) { + if(arm->edbo==NULL) { + BKE_reportf(reports, RPT_ERROR, "Armature '%s' not in editmode, cant add an editbone.", arm->id.name+2); + return NULL; + } return ED_armature_edit_bone_add(arm, name); } -void rna_Armature_edit_bone_remove(bArmature *arm, EditBone *ebone) +void rna_Armature_edit_bone_remove(bArmature *arm, ReportList *reports, EditBone *ebone) { + if(arm->edbo==NULL) { + BKE_reportf(reports, RPT_ERROR, "Armature '%s' not in editmode, cant remove an editbone.", arm->id.name+2); + return; + } ED_armature_edit_bone_remove(arm, ebone); } -static void rna_Armature_redraw_data(bContext *C, PointerRNA *ptr) +static void rna_Armature_redraw_data(Main *bmain, Scene *scene, PointerRNA *ptr) { ID *id= ptr->id.data; - WM_event_add_notifier(C, NC_GEOM|ND_DATA, id); + WM_main_add_notifier(NC_GEOM|ND_DATA, id); } static char *rna_Bone_path(PointerRNA *ptr) @@ -279,10 +288,6 @@ static void rna_EditBone_parent_set(PointerRNA *ptr, PointerRNA value) EditBone *ebone= (EditBone*)(ptr->data); EditBone *pbone, *parbone= (EditBone*)value.data; - /* within same armature */ - if(value.id.data != ptr->id.data) - return; - if(parbone == NULL) { if(ebone->parent && !(ebone->parent->flag & BONE_ROOTSEL)) ebone->parent->flag &= ~BONE_TIPSEL; @@ -291,6 +296,10 @@ static void rna_EditBone_parent_set(PointerRNA *ptr, PointerRNA value) ebone->flag &= ~BONE_CONNECTED; } else { + /* within same armature */ + if(value.id.data != ptr->id.data) + return; + /* make sure this is a valid child */ if(parbone == ebone) return; @@ -304,7 +313,22 @@ static void rna_EditBone_parent_set(PointerRNA *ptr, PointerRNA value) } } -static void rna_Armature_editbone_transform_update(bContext *C, PointerRNA *ptr) +static void rna_EditBone_matrix_get(PointerRNA *ptr, float *values) +{ + EditBone *ebone= (EditBone*)(ptr->data); + + float delta[3], tmat[3][3], mat[4][4]; + + /* Find the current bone matrix */ + sub_v3_v3v3(delta, ebone->tail, ebone->head); + vec_roll_to_mat3(delta, ebone->roll, tmat); + copy_m4_m3(mat, tmat); + VECCOPY(mat[3], ebone->head); + + memcpy(values, mat, 16 * sizeof(float)); +} + +static void rna_Armature_editbone_transform_update(Main *bmain, Scene *scene, PointerRNA *ptr) { bArmature *arm= (bArmature*)ptr->id.data; EditBone *ebone= (EditBone*)ptr->data; @@ -339,7 +363,7 @@ static void rna_Armature_editbone_transform_update(bContext *C, PointerRNA *ptr) } } - rna_Armature_update_data(C, ptr); + rna_Armature_update_data(bmain, scene, ptr); } static void rna_Armature_bones_next(CollectionPropertyIterator *iter) @@ -608,16 +632,24 @@ static void rna_def_edit_bone(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Selected", ""); RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); - prop= RNA_def_property(srna, "head_selected", PROP_BOOLEAN, PROP_NONE); + prop= RNA_def_property(srna, "selected_head", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_ROOTSEL); RNA_def_property_ui_text(prop, "Head Selected", ""); RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); - prop= RNA_def_property(srna, "tail_selected", PROP_BOOLEAN, PROP_NONE); + prop= RNA_def_property(srna, "selected_tail", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_TIPSEL); RNA_def_property_ui_text(prop, "Tail Selected", ""); RNA_def_property_update(prop, 0, "rna_Armature_redraw_data"); + /* calculated and read only, not actual data access */ + prop= RNA_def_property(srna, "matrix", PROP_FLOAT, PROP_MATRIX); + //RNA_def_property_float_sdna(prop, NULL, ""); // doesnt access any real data + RNA_def_property_array(prop, 16); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Editbone Matrix", "Read-only matrix calculated from the roll (armature space)."); + RNA_def_property_float_funcs(prop, "rna_EditBone_matrix_get", NULL, NULL); // TODO - this could be made writable also + RNA_api_armature_edit_bone(srna); RNA_define_verify_sdna(1); @@ -677,15 +709,18 @@ static void rna_def_armature_edit_bones(BlenderRNA *brna, PropertyRNA *cprop) /* add target */ func= RNA_def_function(srna, "new", "rna_Armature_edit_bone_new"); + RNA_def_function_flag(func, FUNC_USE_REPORTS); RNA_def_function_ui_description(func, "Add a new bone."); parm= RNA_def_string(func, "name", "Object", 0, "", "New name for the bone."); RNA_def_property_flag(parm, PROP_REQUIRED); + /* return type */ parm= RNA_def_pointer(func, "bone", "EditBone", "", "Newly created edit bone."); RNA_def_function_return(func, parm); /* remove target */ func= RNA_def_function(srna, "remove", "rna_Armature_edit_bone_remove"); + RNA_def_function_flag(func, FUNC_USE_REPORTS); RNA_def_function_ui_description(func, "Remove an existing bone from the armature."); /* target to remove*/ parm= RNA_def_pointer(func, "bone", "EditBone", "", "EditBone to remove."); @@ -717,8 +752,8 @@ static void rna_def_armature(BlenderRNA *brna) {0, "TAILS", 0, "Tails", "Calculate bone paths from tails"}, {0, NULL, 0, NULL, NULL}}; static const EnumPropertyItem prop_pose_position_items[]= { - {0, "POSE_POSITION", 0, "Pose Position", "Show armature in posed state."}, - {ARM_RESTPOS, "REST_POSITION", 0, "Rest Position", "Show Armature in binding pose state. No posing possible."}, + {0, "POSE", 0, "Pose Position", "Show armature in posed state."}, + {ARM_RESTPOS, "REST", 0, "Rest Position", "Show Armature in binding pose state. No posing possible."}, {0, NULL, 0, NULL, NULL}}; srna= RNA_def_struct(brna, "Armature", "ID"); diff --git a/source/blender/makesrna/intern/rna_armature_api.c b/source/blender/makesrna/intern/rna_armature_api.c index 31bd7275487..22bd7313166 100644 --- a/source/blender/makesrna/intern/rna_armature_api.c +++ b/source/blender/makesrna/intern/rna_armature_api.c @@ -40,7 +40,7 @@ #include "ED_armature.h" -void rna_EditBone_align(EditBone *ebo, float *no) +void rna_EditBone_align_roll(EditBone *ebo, float *no) { if(!is_zero_v3(no)) { float normal[3]; @@ -57,7 +57,7 @@ void RNA_api_armature_edit_bone(StructRNA *srna) FunctionRNA *func; PropertyRNA *parm; - func= RNA_def_function(srna, "align", "rna_EditBone_align"); + func= RNA_def_function(srna, "align_roll", "rna_EditBone_align_roll"); RNA_def_function_ui_description(func, "Align the bone to a localspace vector."); parm= RNA_def_float_vector(func, "vector", 3, NULL, -FLT_MAX, FLT_MAX, "Vector", "", -FLT_MAX, FLT_MAX); RNA_def_property_flag(parm, PROP_REQUIRED); diff --git a/source/blender/makesrna/intern/rna_boid.c b/source/blender/makesrna/intern/rna_boid.c index 37b957a16ca..01d8a4db498 100644 --- a/source/blender/makesrna/intern/rna_boid.c +++ b/source/blender/makesrna/intern/rna_boid.c @@ -72,7 +72,7 @@ EnumPropertyItem boidruleset_type_items[] ={ #include "BKE_depsgraph.h" #include "BKE_particle.h" -static void rna_Boids_reset(bContext *C, PointerRNA *ptr) +static void rna_Boids_reset(Main *bmain, Scene *scene, PointerRNA *ptr) { if(ptr->type==&RNA_ParticleSystem) { ParticleSystem *psys = (ParticleSystem*)ptr->data; @@ -84,12 +84,10 @@ static void rna_Boids_reset(bContext *C, PointerRNA *ptr) else DAG_id_flush_update(ptr->id.data, OB_RECALC_DATA|PSYS_RECALC_RESET); - WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE_DATA, NULL); + WM_main_add_notifier(NC_OBJECT|ND_PARTICLE_DATA, NULL); } -static void rna_Boids_reset_deps(bContext *C, PointerRNA *ptr) +static void rna_Boids_reset_deps(Main *bmain, Scene *scene, PointerRNA *ptr) { - Scene *scene = CTX_data_scene(C); - if(ptr->type==&RNA_ParticleSystem) { ParticleSystem *psys = (ParticleSystem*)ptr->data; @@ -102,7 +100,7 @@ static void rna_Boids_reset_deps(bContext *C, PointerRNA *ptr) DAG_scene_sort(scene); - WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE_DATA, NULL); + WM_main_add_notifier(NC_OBJECT|ND_PARTICLE_DATA, NULL); } static StructRNA* rna_BoidRule_refine(struct PointerRNA *ptr) diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c index 28f546c07f1..7f7126c659a 100644 --- a/source/blender/makesrna/intern/rna_brush.c +++ b/source/blender/makesrna/intern/rna_brush.c @@ -76,10 +76,10 @@ static void rna_Brush_active_texture_set(PointerRNA *ptr, PointerRNA value) set_current_brush_texture(br, value.data); } -static void rna_Brush_update(bContext *C, PointerRNA *ptr) +static void rna_Brush_update(Main *bmain, Scene *scene, PointerRNA *ptr) { Brush *br= (Brush*)ptr->data; - WM_event_add_notifier(C, NC_BRUSH|NA_EDITED, br); + WM_main_add_notifier(NC_BRUSH|NA_EDITED, br); } static float rna_BrushTextureSlot_angle_get(PointerRNA *ptr) @@ -273,6 +273,11 @@ static void rna_def_brush(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "flag", BRUSH_PERSISTENT); RNA_def_property_ui_text(prop, "Persistent", "Sculpts on a persistent layer of the mesh."); RNA_def_property_update(prop, 0, "rna_Brush_update"); + + prop= RNA_def_property(srna, "use_accumulate", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", BRUSH_ACCUMULATE); + RNA_def_property_ui_text(prop, "Accumulate", "Accumulate stroke dabs on top of each other."); + RNA_def_property_update(prop, 0, "rna_Brush_update"); /* not exposed in the interface yet prop= RNA_def_property(srna, "fixed_tex", PROP_BOOLEAN, PROP_NONE); diff --git a/source/blender/makesrna/intern/rna_camera.c b/source/blender/makesrna/intern/rna_camera.c index 6254041c7ef..1715df1809a 100644 --- a/source/blender/makesrna/intern/rna_camera.c +++ b/source/blender/makesrna/intern/rna_camera.c @@ -37,13 +37,13 @@ #ifdef RNA_RUNTIME -static void rna_Camera_angle_update(bContext *C, PointerRNA *ptr) +static void rna_Camera_angle_update(Main *bmain, Scene *scene, PointerRNA *ptr) { Camera *cam= (Camera*)ptr->id.data; cam->lens = 16.0f / tan(M_PI*cam->angle/360.0f); } -static void rna_Camera_lens_update(bContext *C, PointerRNA *ptr) +static void rna_Camera_lens_update(Main *bmain, Scene *scene, PointerRNA *ptr) { Camera *cam= (Camera*)ptr->id.data; cam->angle= 360.0f * atan(16.0f/cam->lens) / M_PI; diff --git a/source/blender/makesrna/intern/rna_cloth.c b/source/blender/makesrna/intern/rna_cloth.c index 0e298c1f6be..c416db2a21c 100644 --- a/source/blender/makesrna/intern/rna_cloth.c +++ b/source/blender/makesrna/intern/rna_cloth.c @@ -45,15 +45,15 @@ #include "BKE_context.h" #include "BKE_depsgraph.h" -static void rna_cloth_update(bContext *C, PointerRNA *ptr) +static void rna_cloth_update(Main *bmain, Scene *scene, PointerRNA *ptr) { Object *ob= (Object*)ptr->id.data; DAG_id_flush_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob); + WM_main_add_notifier(NC_OBJECT|ND_MODIFIER, ob); } -static void rna_cloth_reset(bContext *C, PointerRNA *ptr) +static void rna_cloth_reset(Main *bmain, Scene *scene, PointerRNA *ptr) { Object *ob= (Object*)ptr->id.data; ClothSimSettings *settings = (ClothSimSettings*)ptr->data; @@ -61,7 +61,7 @@ static void rna_cloth_reset(bContext *C, PointerRNA *ptr) settings->reset = 1; DAG_id_flush_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob); + WM_main_add_notifier(NC_OBJECT|ND_MODIFIER, ob); } diff --git a/source/blender/makesrna/intern/rna_constraint.c b/source/blender/makesrna/intern/rna_constraint.c index 226554f9ee6..f9405dec531 100644 --- a/source/blender/makesrna/intern/rna_constraint.c +++ b/source/blender/makesrna/intern/rna_constraint.c @@ -198,24 +198,24 @@ static char *rna_Constraint_path(PointerRNA *ptr) return BLI_sprintfN("constraints[\"%s\"]", con->name); } -static void rna_Constraint_update(bContext *C, PointerRNA *ptr) +static void rna_Constraint_update(Main *bmain, Scene *scene, PointerRNA *ptr) { ED_object_constraint_update(ptr->id.data); } -static void rna_Constraint_dependency_update(bContext *C, PointerRNA *ptr) +static void rna_Constraint_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr) { - ED_object_constraint_dependency_update(CTX_data_scene(C), ptr->id.data); + ED_object_constraint_dependency_update(scene, ptr->id.data); } -static void rna_Constraint_influence_update(bContext *C, PointerRNA *ptr) +static void rna_Constraint_influence_update(Main *bmain, Scene *scene, PointerRNA *ptr) { Object *ob= ptr->id.data; if(ob->pose) ob->pose->flag |= (POSE_LOCKED|POSE_DO_UNLOCK); - rna_Constraint_update(C, ptr); + rna_Constraint_update(bmain, scene, ptr); } static void rna_Constraint_ik_type_set(struct PointerRNA *ptr, int value) diff --git a/source/blender/makesrna/intern/rna_curve.c b/source/blender/makesrna/intern/rna_curve.c index faef93247d9..d3a56661813 100644 --- a/source/blender/makesrna/intern/rna_curve.c +++ b/source/blender/makesrna/intern/rna_curve.c @@ -215,21 +215,21 @@ static void rna_BPoint_array_begin(CollectionPropertyIterator *iter, PointerRNA rna_iterator_array_begin(iter, (void*)nu->bp, sizeof(BPoint), nu->pntsv>0 ? nu->pntsu*nu->pntsv : nu->pntsu, 0, NULL); } -static void rna_Curve_update_data(bContext *C, PointerRNA *ptr) +static void rna_Curve_update_data(Main *bmain, Scene *scene, PointerRNA *ptr) { ID *id= ptr->id.data; DAG_id_flush_update(id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_GEOM|ND_DATA, id); + WM_main_add_notifier(NC_GEOM|ND_DATA, id); } -static void rna_Curve_update_deps(bContext *C, PointerRNA *ptr) +static void rna_Curve_update_deps(Main *bmain, Scene *scene, PointerRNA *ptr) { - DAG_scene_sort(CTX_data_scene(C)); - rna_Curve_update_data(C, ptr); + DAG_scene_sort(scene); + rna_Curve_update_data(bmain, scene, ptr); } -static void rna_Curve_resolution_u_update_data(bContext *C, PointerRNA *ptr) +static void rna_Curve_resolution_u_update_data(Main *bmain, Scene *scene, PointerRNA *ptr) { Curve *cu= (Curve*)ptr->id.data; Nurb *nu=NULL; @@ -242,10 +242,10 @@ static void rna_Curve_resolution_u_update_data(bContext *C, PointerRNA *ptr) nu= nu->next; } - rna_Curve_update_data(C, ptr); + rna_Curve_update_data(bmain, scene, ptr); } -static void rna_Curve_resolution_v_update_data(bContext *C, PointerRNA *ptr) +static void rna_Curve_resolution_v_update_data(Main *bmain, Scene *scene, PointerRNA *ptr) { Curve *cu= (Curve*)ptr->id.data; Nurb *nu=NULL; @@ -258,7 +258,7 @@ static void rna_Curve_resolution_v_update_data(bContext *C, PointerRNA *ptr) nu= nu->next; } - rna_Curve_update_data(C, ptr); + rna_Curve_update_data(bmain, scene, ptr); } /* name functions that ignore the first two ID characters */ @@ -293,34 +293,34 @@ void rna_Curve_body_set(PointerRNA *ptr, const char *value) BLI_strncpy(cu->str, value, len+1); } -static void rna_Nurb_update_handle_data(bContext *C, PointerRNA *ptr) +static void rna_Nurb_update_handle_data(Main *bmain, Scene *scene, PointerRNA *ptr) { Nurb *nu= (Nurb*)ptr->data; if(nu->type == CU_BEZIER) calchandlesNurb(nu); - rna_Curve_update_data(C, ptr); + rna_Curve_update_data(bmain, scene, ptr); } -static void rna_Nurb_update_knot_u(bContext *C, PointerRNA *ptr) +static void rna_Nurb_update_knot_u(Main *bmain, Scene *scene, PointerRNA *ptr) { Nurb *nu= (Nurb*)ptr->data; clamp_nurb_order_u(nu); makeknots(nu, 1); - rna_Curve_update_data(C, ptr); + rna_Curve_update_data(bmain, scene, ptr); } -static void rna_Nurb_update_knot_v(bContext *C, PointerRNA *ptr) +static void rna_Nurb_update_knot_v(Main *bmain, Scene *scene, PointerRNA *ptr) { Nurb *nu= (Nurb*)ptr->data; clamp_nurb_order_v(nu); makeknots(nu, 2); - rna_Curve_update_data(C, ptr); + rna_Curve_update_data(bmain, scene, ptr); } #else diff --git a/source/blender/makesrna/intern/rna_fcurve.c b/source/blender/makesrna/intern/rna_fcurve.c index fbf4a8b41c5..f3d36d60c23 100644 --- a/source/blender/makesrna/intern/rna_fcurve.c +++ b/source/blender/makesrna/intern/rna_fcurve.c @@ -91,7 +91,7 @@ static StructRNA *rna_FModifierType_refine(struct PointerRNA *ptr) #include "BKE_depsgraph.h" #include "BKE_animsys.h" -static void rna_ChannelDriver_update_data(bContext *C, PointerRNA *ptr) +static void rna_ChannelDriver_update_data(Main *bmain, Scene *scene, PointerRNA *ptr) { ID *id= ptr->id.data; ChannelDriver *driver= ptr->data; @@ -99,13 +99,20 @@ static void rna_ChannelDriver_update_data(bContext *C, PointerRNA *ptr) driver->flag &= ~DRIVER_FLAG_INVALID; // TODO: this really needs an update guard... - DAG_scene_sort(CTX_data_scene(C)); + DAG_scene_sort(scene); DAG_id_flush_update(id, OB_RECALC_OB|OB_RECALC_DATA); - WM_event_add_notifier(C, NC_SCENE|ND_FRAME, CTX_data_scene(C)); + WM_main_add_notifier(NC_SCENE|ND_FRAME, scene); } -static void rna_DriverTarget_update_data(bContext *C, PointerRNA *ptr) +static void rna_ChannelDriver_update_expr(Main *bmain, Scene *scene, PointerRNA *ptr) +{ + ChannelDriver *driver= ptr->data; + driver->flag |= DRIVER_FLAG_RECOMPILE; + rna_ChannelDriver_update_data(bmain, scene, ptr); +} + +static void rna_DriverTarget_update_data(Main *bmain, Scene *scene, PointerRNA *ptr) { PointerRNA driverptr; ChannelDriver *driver; @@ -118,7 +125,7 @@ static void rna_DriverTarget_update_data(bContext *C, PointerRNA *ptr) if(driver && BLI_findindex(&driver->targets, ptr->data) != -1) { RNA_pointer_create(ptr->id.data, &RNA_Driver, driver, &driverptr); - rna_ChannelDriver_update_data(C, &driverptr); + rna_ChannelDriver_update_data(bmain, scene, &driverptr); return; } } @@ -260,7 +267,7 @@ static void rna_FModifier_active_set(PointerRNA *ptr, int value) fm->flag |= FMODIFIER_FLAG_ACTIVE; } -static void rna_FModifier_active_update(bContext *C, PointerRNA *ptr) +static void rna_FModifier_active_update(Main *bmain, Scene *scene, PointerRNA *ptr) { FModifier *fm, *fmo= (FModifier*)ptr->data; @@ -740,9 +747,9 @@ static void rna_def_drivertarget(BlenderRNA *brna) RNA_def_property_update(prop, 0, "rna_DriverTarget_update_data"); /* Target Properties - Property to Drive */ - prop= RNA_def_property(srna, "rna_path", PROP_STRING, PROP_NONE); + prop= RNA_def_property(srna, "data_path", PROP_STRING, PROP_NONE); RNA_def_property_string_funcs(prop, "rna_DriverTarget_RnaPath_get", "rna_DriverTarget_RnaPath_length", "rna_DriverTarget_RnaPath_set"); - RNA_def_property_ui_text(prop, "RNA Path", "RNA Path (from Object) to property used"); + RNA_def_property_ui_text(prop, "Data Path", "RNA Path (from Object) to property used"); RNA_def_property_update(prop, 0, "rna_DriverTarget_update_data"); prop= RNA_def_property(srna, "array_index", PROP_INT, PROP_NONE); @@ -789,6 +796,7 @@ static void rna_def_channeldriver(BlenderRNA *brna) static EnumPropertyItem prop_type_items[] = { {DRIVER_TYPE_AVERAGE, "AVERAGE", 0, "Averaged Value", ""}, + {DRIVER_TYPE_SUM, "SUM", 0, "Sum Values", ""}, {DRIVER_TYPE_PYTHON, "SCRIPTED", 0, "Scripted Expression", ""}, {DRIVER_TYPE_ROTDIFF, "ROTDIFF", 0, "Rotational Difference", ""}, {0, NULL, 0, NULL, NULL}}; @@ -806,7 +814,7 @@ static void rna_def_channeldriver(BlenderRNA *brna) /* String values */ prop= RNA_def_property(srna, "expression", PROP_STRING, PROP_NONE); RNA_def_property_ui_text(prop, "Expression", "Expression to use for Scripted Expression."); - RNA_def_property_update(prop, 0, "rna_ChannelDriver_update_data"); + RNA_def_property_update(prop, 0, "rna_ChannelDriver_update_expr"); /* Collections */ prop= RNA_def_property(srna, "targets", PROP_COLLECTION, PROP_NONE); @@ -917,10 +925,15 @@ static void rna_def_fcurve(BlenderRNA *brna) RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Driver", "Channel Driver (only set for Driver F-Curves)"); + prop= RNA_def_property(srna, "group", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "grp"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); // XXX this is not editable for now, since editing this will easily break the visible hierarchy + RNA_def_property_ui_text(prop, "Group", "Action Group that this F-Curve belongs to."); + /* Path + Array Index */ - prop= RNA_def_property(srna, "rna_path", PROP_STRING, PROP_NONE); + prop= RNA_def_property(srna, "data_path", PROP_STRING, PROP_NONE); RNA_def_property_string_funcs(prop, "rna_FCurve_RnaPath_get", "rna_FCurve_RnaPath_length", "rna_FCurve_RnaPath_set"); - RNA_def_property_ui_text(prop, "RNA Path", "RNA Path to property affected by F-Curve."); + RNA_def_property_ui_text(prop, "Data Path", "RNA Path to property affected by F-Curve."); RNA_def_property_update(prop, NC_ANIMATION, NULL); // XXX need an update callback for this to that animation gets evaluated prop= RNA_def_property(srna, "array_index", PROP_INT, PROP_NONE); diff --git a/source/blender/makesrna/intern/rna_fluidsim.c b/source/blender/makesrna/intern/rna_fluidsim.c index 2517ee5c8ef..682eebddbbe 100644 --- a/source/blender/makesrna/intern/rna_fluidsim.c +++ b/source/blender/makesrna/intern/rna_fluidsim.c @@ -72,17 +72,16 @@ static StructRNA* rna_FluidSettings_refine(struct PointerRNA *ptr) } } -static void rna_fluid_update(bContext *C, PointerRNA *ptr) +static void rna_fluid_update(Main *bmain, Scene *scene, PointerRNA *ptr) { Object *ob= ptr->id.data; DAG_id_flush_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob); + WM_main_add_notifier(NC_OBJECT|ND_MODIFIER, ob); } -static void rna_FluidSettings_update_type(bContext *C, PointerRNA *ptr) +static void rna_FluidSettings_update_type(Main *bmain, Scene *scene, PointerRNA *ptr) { - Main *bmain= CTX_data_main(C); Object *ob= (Object*)ptr->id.data; FluidsimModifierData *fluidmd; ParticleSystemModifierData *psmd; @@ -132,7 +131,7 @@ static void rna_FluidSettings_update_type(bContext *C, PointerRNA *ptr) } } - rna_fluid_update(C, ptr); + rna_fluid_update(bmain, scene, ptr); } static void rna_DomainFluidSettings_memory_estimate_get(PointerRNA *ptr, char *value) diff --git a/source/blender/makesrna/intern/rna_group.c b/source/blender/makesrna/intern/rna_group.c index f13eb4fedc1..528d2eb0b3d 100644 --- a/source/blender/makesrna/intern/rna_group.c +++ b/source/blender/makesrna/intern/rna_group.c @@ -56,7 +56,7 @@ static void rna_Group_objects_link(Group *group, bContext *C, ReportList *report return; } - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, &object->id); + WM_main_add_notifier(NC_OBJECT|ND_DRAW, &object->id); } static void rna_Group_objects_unlink(Group *group, bContext *C, ReportList *reports, Object *object) @@ -66,7 +66,7 @@ static void rna_Group_objects_unlink(Group *group, bContext *C, ReportList *repo return; } - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, &object->id); + WM_main_add_notifier(NC_OBJECT|ND_DRAW, &object->id); } #else diff --git a/source/blender/makesrna/intern/rna_image.c b/source/blender/makesrna/intern/rna_image.c index 44c55e821a9..e0d8a6950de 100644 --- a/source/blender/makesrna/intern/rna_image.c +++ b/source/blender/makesrna/intern/rna_image.c @@ -49,7 +49,7 @@ static EnumPropertyItem image_source_items[]= { #include "IMB_imbuf_types.h" -static void rna_Image_animated_update(bContext *C, PointerRNA *ptr) +static void rna_Image_animated_update(Main *bmain, Scene *scene, PointerRNA *ptr) { Image *ima= (Image*)ptr->data; int nr; @@ -74,13 +74,13 @@ static int rna_Image_dirty_get(PointerRNA *ptr) return 0; } -static void rna_Image_source_update(bContext *C, PointerRNA *ptr) +static void rna_Image_source_update(Main *bmain, Scene *scene, PointerRNA *ptr) { Image *ima= ptr->id.data; BKE_image_signal(ima, NULL, IMA_SIGNAL_SRC_CHANGE); } -static void rna_Image_fields_update(bContext *C, PointerRNA *ptr) +static void rna_Image_fields_update(Main *bmain, Scene *scene, PointerRNA *ptr) { Image *ima= ptr->id.data; ImBuf *ibuf; @@ -101,22 +101,21 @@ static void rna_Image_fields_update(bContext *C, PointerRNA *ptr) BKE_image_release_ibuf(ima, lock); } -static void rna_Image_reload_update(bContext *C, PointerRNA *ptr) +static void rna_Image_reload_update(Main *bmain, Scene *scene, PointerRNA *ptr) { Image *ima= ptr->id.data; BKE_image_signal(ima, NULL, IMA_SIGNAL_RELOAD); printf("reload %p\n", ima); } -static void rna_Image_generated_update(bContext *C, PointerRNA *ptr) +static void rna_Image_generated_update(Main *bmain, Scene *scene, PointerRNA *ptr) { Image *ima= ptr->id.data; BKE_image_signal(ima, NULL, IMA_SIGNAL_FREE); } -static void rna_ImageUser_update(bContext *C, PointerRNA *ptr) +static void rna_ImageUser_update(Main *bmain, Scene *scene, PointerRNA *ptr) { - Scene *scene= CTX_data_scene(C); ImageUser *iuser= ptr->data; BKE_image_user_calc_imanr(iuser, scene->r.cfra, 0); diff --git a/source/blender/makesrna/intern/rna_internal.h b/source/blender/makesrna/intern/rna_internal.h index 52945b67275..1c14d0d4c06 100644 --- a/source/blender/makesrna/intern/rna_internal.h +++ b/source/blender/makesrna/intern/rna_internal.h @@ -154,7 +154,7 @@ void RNA_def_scene(struct BlenderRNA *brna); void RNA_def_screen(struct BlenderRNA *brna); void RNA_def_sculpt_paint(struct BlenderRNA *brna); void RNA_def_sensor(struct BlenderRNA *brna); -void RNA_def_sequence(struct BlenderRNA *brna); +void RNA_def_sequencer(struct BlenderRNA *brna); void RNA_def_smoke(struct BlenderRNA *brna); void RNA_def_space(struct BlenderRNA *brna); void RNA_def_test(struct BlenderRNA *brna); @@ -194,10 +194,10 @@ void rna_object_vgroup_name_set(struct PointerRNA *ptr, const char *value, char void rna_object_uvlayer_name_set(struct PointerRNA *ptr, const char *value, char *result, int maxlen); void rna_object_vcollayer_name_set(struct PointerRNA *ptr, const char *value, char *result, int maxlen); -void rna_Object_update(struct bContext *C, struct PointerRNA *ptr); -void rna_Object_update_data(struct bContext *C, struct PointerRNA *ptr); -void rna_Mesh_update_draw(struct bContext *C, struct PointerRNA *ptr); -void rna_TextureSlot_update(struct bContext *C, struct PointerRNA *ptr); +void rna_Object_update(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr); +void rna_Object_update_data(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr); +void rna_Mesh_update_draw(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr); +void rna_TextureSlot_update(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr); char *rna_TextureSlot_path(struct PointerRNA *ptr); @@ -207,9 +207,11 @@ void RNA_api_action(StructRNA *srna); void RNA_api_armature_edit_bone(StructRNA *srna); void RNA_api_drivers(StructRNA *srna); void RNA_api_image(struct StructRNA *srna); +void RNA_api_operator(struct StructRNA *srna); void RNA_api_keyconfig(struct StructRNA *srna); void RNA_api_keyingset(struct StructRNA *srna); void RNA_api_keymap(struct StructRNA *srna); +void RNA_api_keymapitem(struct StructRNA *srna); void RNA_api_main(struct StructRNA *srna); void RNA_api_material(StructRNA *srna); void RNA_api_mesh(struct StructRNA *srna); diff --git a/source/blender/makesrna/intern/rna_internal_types.h b/source/blender/makesrna/intern/rna_internal_types.h index 8a35f831c96..4f05e6132f7 100644 --- a/source/blender/makesrna/intern/rna_internal_types.h +++ b/source/blender/makesrna/intern/rna_internal_types.h @@ -38,6 +38,8 @@ struct CollectionPropertyIterator; struct bContext; struct IDProperty; struct GHash; +struct Main; +struct Scene; #ifdef UNIT_TEST #define RNA_MAX_ARRAY_LENGTH 64 @@ -53,7 +55,8 @@ struct GHash; /* Function Callbacks */ -typedef void (*UpdateFunc)(struct bContext *C, struct PointerRNA *ptr); +typedef void (*UpdateFunc)(struct Main *main, struct Scene *scene, struct PointerRNA *ptr); +typedef void (*ContextUpdateFunc)(struct bContext *C, struct PointerRNA *ptr); typedef int (*EditableFunc)(struct PointerRNA *ptr); typedef int (*ItemEditableFunc)(struct PointerRNA *ptr, int index); typedef struct IDProperty* (*IDPropertiesFunc)(struct PointerRNA *ptr, int create); diff --git a/source/blender/makesrna/intern/rna_key.c b/source/blender/makesrna/intern/rna_key.c index 49dd96241cd..9e560a50af0 100644 --- a/source/blender/makesrna/intern/rna_key.c +++ b/source/blender/makesrna/intern/rna_key.c @@ -286,16 +286,15 @@ static char *rna_ShapeKey_path(PointerRNA *ptr) return BLI_sprintfN("keys[\"%s\"]", ((KeyBlock*)ptr->data)->name); } -static void rna_Key_update_data(bContext *C, PointerRNA *ptr) +static void rna_Key_update_data(Main *bmain, Scene *scene, PointerRNA *ptr) { - Main *bmain= CTX_data_main(C); Key *key= ptr->id.data; Object *ob; for(ob=bmain->object.first; ob; ob= ob->id.next) { if(ob_get_key(ob) == key) { DAG_id_flush_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob); + WM_main_add_notifier(NC_OBJECT|ND_MODIFIER, ob); } } } diff --git a/source/blender/makesrna/intern/rna_lamp.c b/source/blender/makesrna/intern/rna_lamp.c index a518bd28d24..5112e68a008 100644 --- a/source/blender/makesrna/intern/rna_lamp.c +++ b/source/blender/makesrna/intern/rna_lamp.c @@ -100,28 +100,28 @@ static StructRNA* rna_Lamp_refine(struct PointerRNA *ptr) } } -static void rna_Lamp_update(bContext *C, PointerRNA *ptr) +static void rna_Lamp_update(Main *bmain, Scene *scene, PointerRNA *ptr) { Lamp *la= ptr->id.data; DAG_id_flush_update(&la->id, 0); - WM_event_add_notifier(C, NC_LAMP|ND_LIGHTING, la); + WM_main_add_notifier(NC_LAMP|ND_LIGHTING, la); } -static void rna_Lamp_draw_update(bContext *C, PointerRNA *ptr) +static void rna_Lamp_draw_update(Main *bmain, Scene *scene, PointerRNA *ptr) { Lamp *la= ptr->id.data; DAG_id_flush_update(&la->id, 0); - WM_event_add_notifier(C, NC_LAMP|ND_LIGHTING_DRAW, la); + WM_main_add_notifier(NC_LAMP|ND_LIGHTING_DRAW, la); } -static void rna_Lamp_sky_update(bContext *C, PointerRNA *ptr) +static void rna_Lamp_sky_update(Main *bmain, Scene *scene, PointerRNA *ptr) { Lamp *la= ptr->id.data; DAG_id_flush_update(&la->id, 0); - WM_event_add_notifier(C, NC_LAMP|ND_SKY, la); + WM_main_add_notifier(NC_LAMP|ND_SKY, la); } #else diff --git a/source/blender/makesrna/intern/rna_lattice.c b/source/blender/makesrna/intern/rna_lattice.c index aff38ebdd74..f46ea13ba2e 100644 --- a/source/blender/makesrna/intern/rna_lattice.c +++ b/source/blender/makesrna/intern/rna_lattice.c @@ -87,17 +87,16 @@ static void rna_Lattice_points_begin(CollectionPropertyIterator *iter, PointerRN rna_iterator_array_begin(iter, NULL, 0, 0, 0, NULL); } -static void rna_Lattice_update_data(bContext *C, PointerRNA *ptr) +static void rna_Lattice_update_data(Main *bmain, Scene *scene, PointerRNA *ptr) { ID *id= ptr->id.data; DAG_id_flush_update(id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_GEOM|ND_DATA, id); + WM_main_add_notifier(NC_GEOM|ND_DATA, id); } -static void rna_Lattice_update_size(bContext *C, PointerRNA *ptr) +static void rna_Lattice_update_size(Main *bmain, Scene *scene, PointerRNA *ptr) { - Main *bmain= CTX_data_main(C); Lattice *lt= ptr->id.data; Object *ob; int newu, newv, neww; @@ -124,7 +123,7 @@ static void rna_Lattice_update_size(bContext *C, PointerRNA *ptr) resizelattice(lt->editlatt, newu, newv, neww, NULL); } - rna_Lattice_update_data(C, ptr); + rna_Lattice_update_data(bmain, scene, ptr); } static void rna_Lattice_outside_set(PointerRNA *ptr, int value) diff --git a/source/blender/makesrna/intern/rna_main_api.c b/source/blender/makesrna/intern/rna_main_api.c index 70dab957fb9..5069bbd6ae6 100644 --- a/source/blender/makesrna/intern/rna_main_api.c +++ b/source/blender/makesrna/intern/rna_main_api.c @@ -50,41 +50,41 @@ #include "DNA_mesh_types.h" #include "DNA_object_types.h" -static Mesh *rna_Main_add_mesh(Main *main, char *name) +static Mesh *rna_Main_add_mesh(Main *bmain, char *name) { Mesh *me= add_mesh(name); me->id.us--; return me; } -static void rna_Main_remove_mesh(Main *main, ReportList *reports, Mesh *me) +static void rna_Main_remove_mesh(Main *bmain, ReportList *reports, Mesh *me) { if(me->id.us == 0) - free_libblock(&main->mesh, me); + free_libblock(&bmain->mesh, me); else BKE_report(reports, RPT_ERROR, "Mesh must have zero users to be removed."); /* XXX python now has invalid pointer? */ } -static void rna_Main_remove_armature(Main *main, ReportList *reports, bArmature *arm) +static void rna_Main_remove_armature(Main *bmain, ReportList *reports, bArmature *arm) { if(arm->id.us == 0) - free_libblock(&main->armature, arm); + free_libblock(&bmain->armature, arm); else BKE_report(reports, RPT_ERROR, "Armature must have zero users to be removed."); /* XXX python now has invalid pointer? */ } -static bArmature *rna_Main_add_armature(Main *main, char *name) +static bArmature *rna_Main_add_armature(Main *bmain, char *name) { bArmature *arm= add_armature(name); arm->id.us--; return arm; } -static Lamp *rna_Main_add_lamp(Main *main, char *name) +static Lamp *rna_Main_add_lamp(Main *bmain, char *name) { Lamp *la= add_lamp(name); la->id.us--; @@ -92,7 +92,7 @@ static Lamp *rna_Main_add_lamp(Main *main, char *name) } /* -static void rna_Main_remove_lamp(Main *main, ReportList *reports, Lamp *la) +static void rna_Main_remove_lamp(Main *bmain, ReportList *reports, Lamp *la) { if(la->id.us == 0) free_libblock(&main->lamp, la); @@ -101,7 +101,7 @@ static void rna_Main_remove_lamp(Main *main, ReportList *reports, Lamp *la) } */ -static Object* rna_Main_add_object(Main *main, int type, char *name) +static Object* rna_Main_add_object(Main *bmain, int type, char *name) { Object *ob= add_only_object(type, name); ob->id.us--; @@ -120,29 +120,29 @@ static Object* rna_Main_add_object(Main *main, int type, char *name) # don't do this since ob is already freed! bpy.data.remove_object(ob) */ -static void rna_Main_remove_object(Main *main, ReportList *reports, Object *ob) +static void rna_Main_remove_object(Main *bmain, ReportList *reports, Object *ob) { if(ob->id.us == 0) - free_libblock(&main->object, ob); + free_libblock(&bmain->object, ob); else BKE_report(reports, RPT_ERROR, "Object must have zero users to be removed."); } -static Material *rna_Main_add_material(Main *main, char *name) +static Material *rna_Main_add_material(Main *bmain, char *name) { return add_material(name); } /* TODO: remove material? */ -struct Tex *rna_Main_add_texture(Main *main, char *name) +struct Tex *rna_Main_add_texture(Main *bmain, char *name) { return add_texture(name); } /* TODO: remove texture? */ -struct Image *rna_Main_add_image(Main *main, char *filename) +struct Image *rna_Main_add_image(Main *bmain, char *filename) { return BKE_add_image_file(filename, 0); } diff --git a/source/blender/makesrna/intern/rna_material.c b/source/blender/makesrna/intern/rna_material.c index 85007482dc4..a5c1d8d5f57 100644 --- a/source/blender/makesrna/intern/rna_material.c +++ b/source/blender/makesrna/intern/rna_material.c @@ -64,20 +64,20 @@ static EnumPropertyItem prop_texture_coordinates_items[] = { #include "ED_node.h" -static void rna_Material_update(bContext *C, PointerRNA *ptr) +static void rna_Material_update(Main *bmain, Scene *scene, PointerRNA *ptr) { Material *ma= ptr->id.data; DAG_id_flush_update(&ma->id, 0); - WM_event_add_notifier(C, NC_MATERIAL|ND_SHADING, ma); + WM_main_add_notifier(NC_MATERIAL|ND_SHADING, ma); } -static void rna_Material_draw_update(bContext *C, PointerRNA *ptr) +static void rna_Material_draw_update(Main *bmain, Scene *scene, PointerRNA *ptr) { Material *ma= ptr->id.data; DAG_id_flush_update(&ma->id, 0); - WM_event_add_notifier(C, NC_MATERIAL|ND_SHADING_DRAW, ma); + WM_main_add_notifier(NC_MATERIAL|ND_SHADING_DRAW, ma); } static PointerRNA rna_Material_mirror_get(PointerRNA *ptr) diff --git a/source/blender/makesrna/intern/rna_mesh.c b/source/blender/makesrna/intern/rna_mesh.c index bacd7fc2b72..3163f38af3d 100644 --- a/source/blender/makesrna/intern/rna_mesh.c +++ b/source/blender/makesrna/intern/rna_mesh.c @@ -50,26 +50,26 @@ #include "WM_api.h" #include "WM_types.h" -static void rna_Mesh_update_data(bContext *C, PointerRNA *ptr) +static void rna_Mesh_update_data(Main *bmain, Scene *scene, PointerRNA *ptr) { ID *id= ptr->id.data; DAG_id_flush_update(id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_GEOM|ND_DATA, id); + WM_main_add_notifier(NC_GEOM|ND_DATA, id); } -static void rna_Mesh_update_select(bContext *C, PointerRNA *ptr) +static void rna_Mesh_update_select(Main *bmain, Scene *scene, PointerRNA *ptr) { ID *id= ptr->id.data; - WM_event_add_notifier(C, NC_GEOM|ND_SELECT, id); + WM_main_add_notifier(NC_GEOM|ND_SELECT, id); } -void rna_Mesh_update_draw(bContext *C, PointerRNA *ptr) +void rna_Mesh_update_draw(Main *bmain, Scene *scene, PointerRNA *ptr) { ID *id= ptr->id.data; - WM_event_add_notifier(C, NC_GEOM|ND_DATA, id); + WM_main_add_notifier(NC_GEOM|ND_DATA, id); } static void rna_MeshVertex_normal_get(PointerRNA *ptr, float *value) @@ -1517,6 +1517,27 @@ void rna_def_texmat_common(StructRNA *srna, const char *texspace_editable) RNA_def_property_ui_text(prop, "Materials", ""); } + +/* scene.objects */ +static void rna_def_mesh_faces(BlenderRNA *brna, PropertyRNA *cprop) +{ + StructRNA *srna; + PropertyRNA *prop; + +// FunctionRNA *func; +// PropertyRNA *parm; + + RNA_def_property_srna(cprop, "MeshFaces"); + srna= RNA_def_struct(brna, "MeshFaces", NULL); + RNA_def_struct_sdna(srna, "Mesh"); + RNA_def_struct_ui_text(srna, "Mesh Faces", "Collection of mesh faces."); + + prop= RNA_def_property(srna, "active", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "act_face"); + RNA_def_property_ui_text(prop, "Active Face", "The active face for this mesh"); +} + + static void rna_def_mesh(BlenderRNA *brna) { StructRNA *srna; @@ -1540,6 +1561,7 @@ static void rna_def_mesh(BlenderRNA *brna) RNA_def_property_collection_sdna(prop, NULL, "mface", "totface"); RNA_def_property_struct_type(prop, "MeshFace"); RNA_def_property_ui_text(prop, "Faces", "Faces of the mesh."); + rna_def_mesh_faces(brna, prop); prop= RNA_def_property(srna, "sticky", PROP_COLLECTION, PROP_NONE); RNA_def_property_collection_sdna(prop, NULL, "msticky", "totvert"); diff --git a/source/blender/makesrna/intern/rna_meta.c b/source/blender/makesrna/intern/rna_meta.c index 62466047ef4..b7cd40b2efd 100644 --- a/source/blender/makesrna/intern/rna_meta.c +++ b/source/blender/makesrna/intern/rna_meta.c @@ -50,10 +50,8 @@ static int rna_Meta_texspace_editable(PointerRNA *ptr) return (mb->texflag & AUTOSPACE)? 0: PROP_EDITABLE; } -static void rna_MetaBall_update_data(bContext *C, PointerRNA *ptr) +static void rna_MetaBall_update_data(Main *bmain, Scene *scene, PointerRNA *ptr) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); MetaBall *mb= ptr->id.data; Object *ob; @@ -62,11 +60,9 @@ static void rna_MetaBall_update_data(bContext *C, PointerRNA *ptr) copy_mball_properties(scene, ob); DAG_id_flush_update(&mb->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_GEOM|ND_DATA, mb); + WM_main_add_notifier(NC_GEOM|ND_DATA, mb); } - - #else static void rna_def_metaelement(BlenderRNA *brna) diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c index a86d889d6cf..fe8d6d6a367 100644 --- a/source/blender/makesrna/intern/rna_modifier.c +++ b/source/blender/makesrna/intern/rna_modifier.c @@ -55,6 +55,7 @@ EnumPropertyItem modifier_type_items[] ={ {eModifierType_Mask, "MASK", ICON_MOD_MASK, "Mask", ""}, {eModifierType_Mirror, "MIRROR", ICON_MOD_MIRROR, "Mirror", ""}, {eModifierType_Multires, "MULTIRES", ICON_MOD_MULTIRES, "Multiresolution", ""}, + {eModifierType_Solidify, "SOLIDIFY", ICON_MOD_DISPLACE, "Solidify", ""}, {eModifierType_Subsurf, "SUBSURF", ICON_MOD_SUBSURF, "Subdivision Surface", ""}, {eModifierType_UVProject, "UV_PROJECT", ICON_MOD_UVPROJECT, "UV Project", ""}, {0, "", 0, "Deform", ""}, @@ -161,6 +162,8 @@ static StructRNA* rna_Modifier_refine(struct PointerRNA *ptr) return &RNA_SurfaceModifier; case eModifierType_Smoke: return &RNA_SmokeModifier; + case eModifierType_Solidify: + return &RNA_SolidifyModifier; default: return &RNA_Modifier; } @@ -192,19 +195,19 @@ static char *rna_Modifier_path(PointerRNA *ptr) return BLI_sprintfN("modifiers[\"%s\"]", ((ModifierData*)ptr->data)->name); } -static void rna_Modifier_update(bContext *C, PointerRNA *ptr) +static void rna_Modifier_update(Main *bmain, Scene *scene, PointerRNA *ptr) { DAG_id_flush_update(ptr->id.data, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ptr->id.data); + WM_main_add_notifier(NC_OBJECT|ND_MODIFIER, ptr->id.data); } -static void rna_Modifier_dependency_update(bContext *C, PointerRNA *ptr) +static void rna_Modifier_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr) { - rna_Modifier_update(C, ptr); - DAG_scene_sort(CTX_data_scene(C)); + rna_Modifier_update(bmain, scene, ptr); + DAG_scene_sort(scene); } -static void rna_Smoke_set_type(bContext *C, PointerRNA *ptr) +static void rna_Smoke_set_type(Main *bmain, Scene *scene, PointerRNA *ptr) { SmokeModifierData *smd= (SmokeModifierData *)ptr->data; Object *ob= (Object*)ptr->id.data; @@ -224,12 +227,12 @@ static void rna_Smoke_set_type(bContext *C, PointerRNA *ptr) case MOD_SMOKE_TYPE_COLL: case 0: default: - ob->dt = OB_SHADED; + ob->dt = OB_TEXTURE; break; } // update dependancy since a domain - other type switch could have happened - rna_Modifier_dependency_update(C, ptr); + rna_Modifier_dependency_update(bmain, scene, ptr); } static void rna_ExplodeModifier_vgroup_get(PointerRNA *ptr, char *value) @@ -322,6 +325,12 @@ static void rna_CastModifier_vgroup_set(PointerRNA *ptr, const char *value) rna_object_vgroup_name_set(ptr, value, lmd->defgrp_name, sizeof(lmd->defgrp_name)); } +static void rna_SolidifyModifier_vgroup_set(PointerRNA *ptr, const char *value) +{ + SolidifyModifierData *smd= (SolidifyModifierData*)ptr->data; + rna_object_vgroup_name_set(ptr, value, smd->vgroup, sizeof(smd->vgroup)); +} + static void rna_DisplaceModifier_uvlayer_set(PointerRNA *ptr, const char *value) { DisplaceModifierData *smd= (DisplaceModifierData*)ptr->data; @@ -344,10 +353,43 @@ static void rna_MultiresModifier_level_range(PointerRNA *ptr, int *min, int *max { MultiresModifierData *mmd = (MultiresModifierData*)ptr->data; - *min = 1; + *min = 0; *max = mmd->totlvl; } +static int rna_MultiresModifier_external_get(PointerRNA *ptr) +{ + Object *ob= (Object*)ptr->id.data; + Mesh *me= ob->data; + + return CustomData_external_test(&me->fdata, CD_MDISPS); +} + +static void rna_MultiresModifier_filename_get(PointerRNA *ptr, char *value) +{ + Object *ob= (Object*)ptr->id.data; + CustomDataExternal *external= ((Mesh*)ob->data)->fdata.external; + + BLI_strncpy(value, (external)? external->filename: "", sizeof(external->filename)); +} + +static void rna_MultiresModifier_filename_set(PointerRNA *ptr, const char *value) +{ + Object *ob= (Object*)ptr->id.data; + CustomDataExternal *external= ((Mesh*)ob->data)->fdata.external; + + if(external) + BLI_strncpy(external->filename, value, sizeof(external->filename)); +} + +static int rna_MultiresModifier_filename_length(PointerRNA *ptr) +{ + Object *ob= (Object*)ptr->id.data; + CustomDataExternal *external= ((Mesh*)ob->data)->fdata.external; + + return strlen((external)? external->filename: ""); +} + static void modifier_object_set(Object *self, Object **ob_p, int type, PointerRNA value) { Object *ob= value.data; @@ -496,22 +538,20 @@ static void rna_def_modifier_subsurf(BlenderRNA *brna) rna_def_property_subdivision_common(srna, "subdivType"); - prop= RNA_def_property(srna, "levels", PROP_INT, PROP_NONE); + prop= RNA_def_property(srna, "levels", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "levels"); - RNA_def_property_range(prop, 1, 6); - RNA_def_property_ui_range(prop, 1, 6, 1, 0); + RNA_def_property_ui_range(prop, 0, 6, 1, 0); RNA_def_property_ui_text(prop, "Levels", "Number of subdivisions to perform."); RNA_def_property_update(prop, 0, "rna_Modifier_update"); - prop= RNA_def_property(srna, "render_levels", PROP_INT, PROP_NONE); + prop= RNA_def_property(srna, "render_levels", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "renderLevels"); - RNA_def_property_range(prop, 1, 6); - RNA_def_property_ui_range(prop, 1, 6, 1, 0); + RNA_def_property_ui_range(prop, 0, 6, 1, 0); RNA_def_property_ui_text(prop, "Render Levels", "Number of subdivisions to perform when rendering."); - prop= RNA_def_property(srna, "optimal_draw", PROP_BOOLEAN, PROP_NONE); + prop= RNA_def_property(srna, "optimal_display", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flags", eSubsurfModifierFlag_ControlEdges); - RNA_def_property_ui_text(prop, "Optimal Draw", "Skip drawing/rendering of interior subdivided edges"); + RNA_def_property_ui_text(prop, "Optimal Display", "Skip drawing/rendering of interior subdivided edges"); RNA_def_property_update(prop, 0, "rna_Modifier_update"); prop= RNA_def_property(srna, "subsurf_uv", PROP_BOOLEAN, PROP_NONE); @@ -532,11 +572,42 @@ static void rna_def_modifier_multires(BlenderRNA *brna) rna_def_property_subdivision_common(srna, "simple"); - prop= RNA_def_property(srna, "level", PROP_INT, PROP_NONE); + prop= RNA_def_property(srna, "levels", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "lvl"); - RNA_def_property_ui_text(prop, "Level", ""); + RNA_def_property_ui_text(prop, "Levels", "Number of subdivisions to use in the viewport."); RNA_def_property_int_funcs(prop, NULL, NULL, "rna_MultiresModifier_level_range"); RNA_def_property_update(prop, 0, "rna_Modifier_update"); + + prop= RNA_def_property(srna, "sculpt_levels", PROP_INT, PROP_UNSIGNED); + RNA_def_property_int_sdna(prop, NULL, "sculptlvl"); + RNA_def_property_ui_text(prop, "Sculpt Levels", "Number of subdivisions to use in sculpt mode."); + RNA_def_property_int_funcs(prop, NULL, NULL, "rna_MultiresModifier_level_range"); + RNA_def_property_update(prop, 0, "rna_Modifier_update"); + + prop= RNA_def_property(srna, "render_levels", PROP_INT, PROP_UNSIGNED); + RNA_def_property_int_sdna(prop, NULL, "renderlvl"); + RNA_def_property_ui_text(prop, "Render Levels", ""); + RNA_def_property_int_funcs(prop, NULL, NULL, "rna_MultiresModifier_level_range"); + + prop= RNA_def_property(srna, "total_levels", PROP_INT, PROP_UNSIGNED); + RNA_def_property_int_sdna(prop, NULL, "totlvl"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Total Levels", "Number of subdivisions for which displacements are stored."); + + prop= RNA_def_property(srna, "external", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_boolean_funcs(prop, "rna_MultiresModifier_external_get", NULL); + RNA_def_property_ui_text(prop, "External", "Store multires displacements outside the .blend file, to save memory."); + + prop= RNA_def_property(srna, "filename", PROP_STRING, PROP_FILEPATH); + RNA_def_property_string_funcs(prop, "rna_MultiresModifier_filename_get", "rna_MultiresModifier_filename_length", "rna_MultiresModifier_filename_set"); + RNA_def_property_ui_text(prop, "Filename", "Path to external displacements file."); + RNA_def_property_update(prop, 0, "rna_Modifier_update"); + + prop= RNA_def_property(srna, "optimal_display", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flags", eMultiresModifierFlag_ControlEdges); + RNA_def_property_ui_text(prop, "Optimal Display", "Skip drawing/rendering of interior subdivided edges"); + RNA_def_property_update(prop, 0, "rna_Modifier_update"); } static void rna_def_modifier_lattice(BlenderRNA *brna) @@ -1938,6 +2009,67 @@ static void rna_def_modifier_surface(BlenderRNA *brna) RNA_def_struct_sdna(srna, "SurfaceModifierData"); RNA_def_struct_ui_icon(srna, ICON_MOD_PHYSICS); } + +static void rna_def_modifier_solidify(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna= RNA_def_struct(brna, "SolidifyModifier", "Modifier"); + RNA_def_struct_ui_text(srna, "Solidify Modifier", "Create a solid skin by extruding, compensating for sharp angles."); + RNA_def_struct_sdna(srna, "SolidifyModifierData"); + RNA_def_struct_ui_icon(srna, ICON_MOD_DISPLACE); + + prop= RNA_def_property(srna, "offset", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "offset"); + RNA_def_property_range(prop, -FLT_MAX, FLT_MAX); + RNA_def_property_ui_range(prop, -10, 10, 0.1, 4); + RNA_def_property_ui_text(prop, "Thickness", "Thickness of the shell."); + RNA_def_property_update(prop, 0, "rna_Modifier_update"); + + prop= RNA_def_property(srna, "edge_crease_inner", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "crease_inner"); + RNA_def_property_range(prop, 0, 1); + RNA_def_property_ui_range(prop, 0, 1, 0.1, 3); + RNA_def_property_ui_text(prop, "Inner Crease", "Assign a crease to inner edges."); + RNA_def_property_update(prop, 0, "rna_Modifier_update"); + + prop= RNA_def_property(srna, "edge_crease_outer", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "crease_outer"); + RNA_def_property_range(prop, 0, 1); + RNA_def_property_ui_range(prop, 0, 1, 0.1, 3); + RNA_def_property_ui_text(prop, "Outer Crease", "Assign a crease to outer edges."); + RNA_def_property_update(prop, 0, "rna_Modifier_update"); + + prop= RNA_def_property(srna, "edge_crease_rim", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "crease_rim"); + RNA_def_property_range(prop, 0, 1); + RNA_def_property_ui_range(prop, 0, 1, 0.1, 3); + RNA_def_property_ui_text(prop, "Rim Crease", "Assign a crease to the edges making up the rim."); + RNA_def_property_update(prop, 0, "rna_Modifier_update"); + + prop= RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE); + RNA_def_property_string_sdna(prop, NULL, "vgroup"); + RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name."); + RNA_def_property_string_funcs(prop, NULL, NULL, "rna_SolidifyModifier_vgroup_set"); + RNA_def_property_update(prop, 0, "rna_Modifier_update"); + + prop= RNA_def_property(srna, "use_rim", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_SOLIDIFY_RIM); + RNA_def_property_ui_text(prop, "Fill Rim", "Create edge loops between the inner and outer surfaces on face edges (slow, disable when not needed)"); + RNA_def_property_update(prop, 0, "rna_Modifier_update"); + + prop= RNA_def_property(srna, "use_even_offset", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_SOLIDIFY_EVEN); + RNA_def_property_ui_text(prop, "Even Thickness", "Maintain thickness by adjusting for sharp corners (slow, disable when not needed)"); + RNA_def_property_update(prop, 0, "rna_Modifier_update"); + + prop= RNA_def_property(srna, "use_quality_normals", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_SOLIDIFY_NORMAL_CALC); + RNA_def_property_ui_text(prop, "High Quality Normals", "Calculate normals which result in more even thickness (slow, disable when not needed)"); + RNA_def_property_update(prop, 0, "rna_Modifier_update"); +} + void RNA_def_modifier(BlenderRNA *brna) { StructRNA *srna; @@ -1954,6 +2086,7 @@ void RNA_def_modifier(BlenderRNA *brna) prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); RNA_def_property_string_funcs(prop, NULL, NULL, "rna_Modifier_name_set"); RNA_def_property_ui_text(prop, "Name", "Modifier name."); + RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER|NA_RENAME, NULL); RNA_def_struct_name_property(srna, prop); /* enums */ @@ -1967,6 +2100,7 @@ void RNA_def_modifier(BlenderRNA *brna) prop= RNA_def_property(srna, "realtime", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mode", eModifierMode_Realtime); RNA_def_property_ui_text(prop, "Realtime", "Realtime display of a modifier."); + RNA_def_property_flag(prop, PROP_LIB_EXCEPTION); RNA_def_property_update(prop, 0, "rna_Modifier_update"); RNA_def_property_ui_icon(prop, ICON_RESTRICT_VIEW_OFF, 0); @@ -2023,6 +2157,7 @@ void RNA_def_modifier(BlenderRNA *brna) rna_def_modifier_multires(brna); rna_def_modifier_surface(brna); rna_def_modifier_smoke(brna); + rna_def_modifier_solidify(brna); } #endif diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c index 1aec395b43f..d1e73d6add3 100644 --- a/source/blender/makesrna/intern/rna_nodetree.c +++ b/source/blender/makesrna/intern/rna_nodetree.c @@ -149,9 +149,8 @@ static void rna_Matte_t2_set(PointerRNA *ptr, float value) chroma->t2 = value; } -static void node_update(bContext *C, bNodeTree *ntree, bNode *node) +static void node_update(Main *bmain, Scene *scene, bNodeTree *ntree, bNode *node) { - Main *bmain= CTX_data_main(C); Material *ma; Tex *tex; Scene *sce; @@ -170,15 +169,15 @@ static void node_update(bContext *C, bNodeTree *ntree, bNode *node) ED_node_changed_update(&sce->id, node); } -static void rna_Node_update(bContext *C, PointerRNA *ptr) +static void rna_Node_update(Main *bmain, Scene *scene, PointerRNA *ptr) { bNodeTree *ntree= (bNodeTree*)ptr->id.data; bNode *node= (bNode*)ptr->data; - node_update(C, ntree, node); + node_update(bmain, scene, ntree, node); } -static void rna_Node_update_name(bContext *C, PointerRNA *ptr) +static void rna_Node_update_name(Main *bmain, Scene *scene, PointerRNA *ptr) { bNodeTree *ntree= (bNodeTree*)ptr->id.data; bNode *node= (bNode*)ptr->data; @@ -193,12 +192,12 @@ static void rna_Node_update_name(bContext *C, PointerRNA *ptr) /* fix all the animation data which may link to this */ BKE_all_animdata_fix_paths_rename("nodes", oldname, node->name); - node_update(C, ntree, node); + node_update(bmain, scene, ntree, node); } /* this should be done at display time! if no custom names are set */ #if 0 -static void rna_Node_update_username(bContext *C, PointerRNA *ptr) +static void rna_Node_update_username(Main *bmain, Scene *scene, PointerRNA *ptr) { bNode *node= (bNode*)ptr->data; const char *name; @@ -241,18 +240,18 @@ static void rna_Node_update_username(bContext *C, PointerRNA *ptr) } } - rna_Node_update(C, ptr); + rna_Node_update(bmain, scene, ptr); } #endif -static void rna_NodeSocket_update(bContext *C, PointerRNA *ptr) +static void rna_NodeSocket_update(Main *bmain, Scene *scene, PointerRNA *ptr) { bNodeTree *ntree= (bNodeTree*)ptr->id.data; bNodeSocket *sock= (bNodeSocket*)ptr->data; bNode *node; if (nodeFindNode(ntree, sock, &node, NULL)) - node_update(C, ntree, node); + node_update(bmain, scene, ntree, node); } static void rna_NodeSocket_defvalue_range(PointerRNA *ptr, float *min, float *max) @@ -263,16 +262,16 @@ static void rna_NodeSocket_defvalue_range(PointerRNA *ptr, float *min, float *ma *max = sock->ns.max; } -static void rna_Node_mapping_update(bContext *C, PointerRNA *ptr) +static void rna_Node_mapping_update(Main *bmain, Scene *scene, PointerRNA *ptr) { bNode *node= (bNode*)ptr->data; init_mapping((TexMapping *)node->storage); - rna_Node_update(C, ptr); + rna_Node_update(bmain, scene, ptr); } -static void rna_Node_image_layer_update(bContext *C, PointerRNA *ptr) +static void rna_Node_image_layer_update(Main *bmain, Scene *scene, PointerRNA *ptr) { bNode *node= (bNode*)ptr->data; Image *ima = (Image *)node->id; @@ -281,7 +280,7 @@ static void rna_Node_image_layer_update(bContext *C, PointerRNA *ptr) BKE_image_multilayer_index(ima->rr, iuser); BKE_image_signal(ima, iuser, IMA_SIGNAL_SRC_CHANGE); - rna_Node_update(C, ptr); + rna_Node_update(bmain, scene, ptr); } static EnumPropertyItem *renderresult_layers_add_enum(RenderLayer *rl) diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c index 4dacf46f0c6..b4e288e776d 100644 --- a/source/blender/makesrna/intern/rna_object.c +++ b/source/blender/makesrna/intern/rna_object.c @@ -114,56 +114,56 @@ EnumPropertyItem object_type_items[] = { #include "BLI_editVert.h" /* for EditMesh->mat_nr */ +#include "ED_mesh.h" #include "ED_object.h" #include "ED_particle.h" -void rna_Object_update(bContext *C, PointerRNA *ptr) +void rna_Object_update(Main *bmain, Scene *scene, PointerRNA *ptr) { DAG_id_flush_update(ptr->id.data, OB_RECALC_OB); } -void rna_Object_matrix_update(bContext *C, PointerRNA *ptr) +void rna_Object_matrix_update(Main *bmain, Scene *scene, PointerRNA *ptr) { ED_object_apply_obmat(ptr->id.data); - rna_Object_update(C, ptr); + rna_Object_update(bmain, scene, ptr); } -void rna_Object_update_data(bContext *C, PointerRNA *ptr) +void rna_Object_update_data(Main *bmain, Scene *scene, PointerRNA *ptr) { DAG_id_flush_update(ptr->id.data, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ptr->id.data); + WM_main_add_notifier(NC_OBJECT|ND_DRAW, ptr->id.data); } -void rna_Object_active_shape_update(bContext *C, PointerRNA *ptr) +void rna_Object_active_shape_update(Main *bmain, Scene *scene, PointerRNA *ptr) { Object *ob= ptr->id.data; - Scene *scene= CTX_data_scene(C); int editmode= (scene->obedit == ob && ob->type == OB_MESH); if(editmode) { /* exit/enter editmode to get new shape */ - ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO); - ED_object_enter_editmode(C, EM_WAITCURSOR); + load_editMesh(scene, ob); + make_editMesh(scene, ob); } - rna_Object_update_data(C, ptr); + rna_Object_update_data(bmain, scene, ptr); } -static void rna_Object_dependency_update(bContext *C, PointerRNA *ptr) +static void rna_Object_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr) { DAG_id_flush_update(ptr->id.data, OB_RECALC_OB); - DAG_scene_sort(CTX_data_scene(C)); + DAG_scene_sort(scene); } /* when changing the selection flag the scene needs updating */ -static void rna_Object_select_update(bContext *C, PointerRNA *ptr) +static void rna_Object_select_update(Main *bmain, Scene *scene, PointerRNA *ptr) { Object *ob= (Object*)ptr->id.data; short mode = ob->flag & SELECT ? BA_SELECT : BA_DESELECT; - ED_base_object_select(object_in_scene(ob, CTX_data_scene(C)), mode); + ED_base_object_select(object_in_scene(ob, scene), mode); } -static void rna_Base_select_update(bContext *C, PointerRNA *ptr) +static void rna_Base_select_update(Main *bmain, Scene *scene, PointerRNA *ptr) { Base *base= (Base*)ptr->data; short mode = base->flag & BA_SELECT ? BA_SELECT : BA_DESELECT; @@ -182,29 +182,28 @@ static void rna_Object_layer_update__internal(Scene *scene, Base *base, Object * } } -static void rna_Object_layer_update(bContext *C, PointerRNA *ptr) +static void rna_Object_layer_update(Main *bmain, Scene *scene, PointerRNA *ptr) { Object *ob= (Object*)ptr->id.data; - Scene *scene= CTX_data_scene(C); Base *base; base= object_in_scene(ob, scene); if(!base) return; + + SWAP(int, base->lay, ob->lay); - base->lay= ob->lay; rna_Object_layer_update__internal(scene, base, ob); + ob->lay= base->lay; } -static void rna_Base_layer_update(bContext *C, PointerRNA *ptr) +static void rna_Base_layer_update(Main *bmain, Scene *scene, PointerRNA *ptr) { Base *base= (Base*)ptr->id.data; Object *ob= (Object*)base->object; - Scene *scene= CTX_data_scene(C); - - ob->lay= base->lay; rna_Object_layer_update__internal(scene, base, ob); + ob->lay= base->lay; } static int rna_Object_data_editable(PointerRNA *ptr) @@ -527,9 +526,8 @@ static void rna_Object_active_particle_system_index_set(PointerRNA *ptr, int val psys_set_current_num(ob, value); } -static void rna_Object_particle_update(bContext *C, PointerRNA *ptr) +static void rna_Object_particle_update(Main *bmain, Scene *scene, PointerRNA *ptr) { - Scene *scene= CTX_data_scene(C); Object *ob= (Object*)ptr->id.data; PE_current_changed(scene, ob); @@ -973,7 +971,7 @@ static void rna_Object_active_constraint_set(PointerRNA *ptr, PointerRNA value) static bConstraint *rna_Object_constraint_new(Object *object, bContext *C, int type) { - WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT|NA_ADDED, object); + WM_main_add_notifier(NC_OBJECT|ND_CONSTRAINT|NA_ADDED, object); return add_ob_constraint(object, NULL, type); } @@ -982,7 +980,7 @@ static int rna_Object_constraint_remove(Object *object, bContext *C, int index) int ok = remove_constraint_index(&object->constraints, index); if(ok) { ED_object_constraint_set_active(object, NULL); - WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, object); + WM_main_add_notifier(NC_OBJECT|ND_CONSTRAINT, object); } return ok; @@ -1013,6 +1011,7 @@ static void rna_def_vertex_group(BlenderRNA *brna) prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); RNA_def_property_ui_text(prop, "Name", "Vertex group name."); RNA_def_struct_name_property(srna, prop); + RNA_def_property_update(prop, NC_GEOM|ND_DATA|NA_RENAME, NULL); prop= RNA_def_property(srna, "index", PROP_INT, PROP_UNSIGNED); RNA_def_property_clear_flag(prop, PROP_EDITABLE); @@ -1043,13 +1042,13 @@ static void rna_def_material_slot(BlenderRNA *brna) RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_pointer_funcs(prop, "rna_MaterialSlot_material_get", "rna_MaterialSlot_material_set", NULL); RNA_def_property_ui_text(prop, "Material", "Material datablock used by this material slot."); - RNA_def_property_update(prop, NC_OBJECT|ND_SHADING, "rna_Object_update"); + RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_update"); prop= RNA_def_property(srna, "link", PROP_ENUM, PROP_NONE); RNA_def_property_enum_items(prop, link_items); RNA_def_property_enum_funcs(prop, "rna_MaterialSlot_link_get", "rna_MaterialSlot_link_set", NULL); RNA_def_property_ui_text(prop, "Link", "Link material to object or the object's data."); - RNA_def_property_update(prop, NC_OBJECT|ND_SHADING, "rna_Object_update"); + RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_update"); prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); RNA_def_property_string_funcs(prop, "rna_MaterialSlot_name_get", "rna_MaterialSlot_name_length", NULL); @@ -1461,6 +1460,7 @@ static void rna_def_object(BlenderRNA *brna) RNA_def_property_array(prop, 20); RNA_def_property_ui_text(prop, "Layers", "Layers the object is on."); RNA_def_property_boolean_funcs(prop, NULL, "rna_Object_layer_set"); + RNA_def_property_flag(prop, PROP_LIB_EXCEPTION); RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_layer_update"); prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE); @@ -1531,13 +1531,13 @@ static void rna_def_object(BlenderRNA *brna) RNA_def_property_pointer_funcs(prop, "rna_Object_active_material_get", "rna_Object_active_material_set", NULL); RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Active Material", "Active material being displayed."); - RNA_def_property_update(prop, NC_OBJECT|ND_SHADING, "rna_Object_update"); + RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_update"); prop= RNA_def_property(srna, "active_material_index", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "actcol"); RNA_def_property_int_funcs(prop, "rna_Object_active_material_index_get", "rna_Object_active_material_index_set", "rna_Object_active_material_index_range"); RNA_def_property_ui_text(prop, "Active Material Index", "Index of active material slot."); - RNA_def_property_update(prop, NC_OBJECT|ND_SHADING, NULL); + RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL); /* transform */ prop= RNA_def_property(srna, "location", PROP_FLOAT, PROP_TRANSLATION); @@ -1680,13 +1680,13 @@ static void rna_def_object(BlenderRNA *brna) RNA_def_property_struct_type(prop, "VertexGroup"); RNA_def_property_pointer_funcs(prop, "rna_Object_active_vertex_group_get", "rna_Object_active_vertex_group_set", NULL); RNA_def_property_ui_text(prop, "Active Vertex Group", "Vertex groups of the object."); - RNA_def_property_update(prop, 0, "rna_Object_update_data"); + RNA_def_property_update(prop, NC_GEOM|ND_DATA, "rna_Object_update_data"); prop= RNA_def_property(srna, "active_vertex_group_index", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "actdef"); RNA_def_property_int_funcs(prop, "rna_Object_active_vertex_group_index_get", "rna_Object_active_vertex_group_index_set", "rna_Object_active_vertex_group_index_range"); RNA_def_property_ui_text(prop, "Active Vertex Group Index", "Active index in vertex group array."); - RNA_def_property_update(prop, 0, "rna_Object_update_data"); + RNA_def_property_update(prop, NC_GEOM|ND_DATA, "rna_Object_update_data"); /* empty */ prop= RNA_def_property(srna, "empty_draw_type", PROP_ENUM, PROP_NONE); @@ -1705,7 +1705,8 @@ static void rna_def_object(BlenderRNA *brna) prop= RNA_def_property(srna, "pass_index", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "index"); RNA_def_property_ui_text(prop, "Pass Index", "Index # for the IndexOB render pass."); - + RNA_def_property_update(prop, NC_OBJECT, NULL); + prop= RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "col"); RNA_def_property_ui_text(prop, "Color", "Object color and alpha, used when faces have the ObColor mode enabled."); diff --git a/source/blender/makesrna/intern/rna_object_force.c b/source/blender/makesrna/intern/rna_object_force.c index c601622fcc3..67c7a9aa078 100644 --- a/source/blender/makesrna/intern/rna_object_force.c +++ b/source/blender/makesrna/intern/rna_object_force.c @@ -97,9 +97,9 @@ EnumPropertyItem empty_vortex_shape_items[] = { #include "ED_object.h" -static void rna_Cache_change(bContext *C, PointerRNA *ptr) +static void rna_Cache_change(Main *bmain, Scene *scene, PointerRNA *ptr) { - Object *ob = CTX_data_active_object(C); + Object *ob = (Object*)ptr->id.data; PointCache *cache = (PointCache*)ptr->data; PTCacheID *pid = NULL; ListBase pidlist; @@ -124,9 +124,9 @@ static void rna_Cache_change(bContext *C, PointerRNA *ptr) BLI_freelistN(&pidlist); } -static void rna_Cache_toggle_disk_cache(bContext *C, PointerRNA *ptr) +static void rna_Cache_toggle_disk_cache(Main *bmain, Scene *scene, PointerRNA *ptr) { - Object *ob = CTX_data_active_object(C); + Object *ob = (Object*)ptr->id.data; PointCache *cache = (PointCache*)ptr->data; PTCacheID *pid = NULL; ListBase pidlist; @@ -147,9 +147,9 @@ static void rna_Cache_toggle_disk_cache(bContext *C, PointerRNA *ptr) BLI_freelistN(&pidlist); } -static void rna_Cache_idname_change(bContext *C, PointerRNA *ptr) +static void rna_Cache_idname_change(Main *bmain, Scene *scene, PointerRNA *ptr) { - Object *ob = CTX_data_active_object(C); + Object *ob = (Object*)ptr->id.data; PointCache *cache = (PointCache*)ptr->data; PTCacheID *pid = NULL, *pid2= NULL; ListBase pidlist; @@ -440,7 +440,7 @@ static int particle_id_check(PointerRNA *ptr) return (GS(id->name) == ID_PA); } -static void rna_FieldSettings_update(bContext *C, PointerRNA *ptr) +static void rna_FieldSettings_update(Main *bmain, Scene *scene, PointerRNA *ptr) { if(particle_id_check(ptr)) { ParticleSettings *part = (ParticleSettings*)ptr->id.data; @@ -456,7 +456,7 @@ static void rna_FieldSettings_update(bContext *C, PointerRNA *ptr) } DAG_id_flush_update(&part->id, OB_RECALC|PSYS_RECALC_RESET); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, NULL); + WM_main_add_notifier(NC_OBJECT|ND_DRAW, NULL); } else { @@ -468,14 +468,12 @@ static void rna_FieldSettings_update(bContext *C, PointerRNA *ptr) } DAG_id_flush_update(&ob->id, OB_RECALC_OB); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + WM_main_add_notifier(NC_OBJECT|ND_DRAW, ob); } } -static void rna_FieldSettings_shape_update(bContext *C, PointerRNA *ptr) +static void rna_FieldSettings_shape_update(Main *bmain, Scene *scene, PointerRNA *ptr) { - Scene *scene= CTX_data_scene(C); - if(!particle_id_check(ptr)) { Object *ob= (Object*)ptr->id.data; PartDeflect *pd= ob->pd; @@ -492,14 +490,12 @@ static void rna_FieldSettings_shape_update(bContext *C, PointerRNA *ptr) ED_object_modifier_remove(NULL, scene, ob, md); } - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + WM_main_add_notifier(NC_OBJECT|ND_DRAW, ob); } } -static void rna_FieldSettings_dependency_update(bContext *C, PointerRNA *ptr) +static void rna_FieldSettings_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr) { - Scene *scene= CTX_data_scene(C); - if(particle_id_check(ptr)) { DAG_id_flush_update((ID*)ptr->id.data, OB_RECALC|PSYS_RECALC_RESET); } @@ -513,7 +509,7 @@ static void rna_FieldSettings_dependency_update(bContext *C, PointerRNA *ptr) do_curvebuts(B_CU3D); // all curves too }*/ - rna_FieldSettings_shape_update(C, ptr); + rna_FieldSettings_shape_update(bmain, scene, ptr); DAG_scene_sort(scene); @@ -522,7 +518,7 @@ static void rna_FieldSettings_dependency_update(bContext *C, PointerRNA *ptr) else DAG_id_flush_update(&ob->id, OB_RECALC_OB); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + WM_main_add_notifier(NC_OBJECT|ND_DRAW, ob); } } @@ -550,22 +546,20 @@ static char *rna_FieldSettings_path(PointerRNA *ptr) return NULL; } -static void rna_EffectorWeight_update(bContext *C, PointerRNA *ptr) +static void rna_EffectorWeight_update(Main *bmain, Scene *scene, PointerRNA *ptr) { DAG_id_flush_update((ID*)ptr->id.data, OB_RECALC_DATA|PSYS_RECALC_RESET); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, NULL); + WM_main_add_notifier(NC_OBJECT|ND_DRAW, NULL); } -static void rna_EffectorWeight_dependency_update(bContext *C, PointerRNA *ptr) +static void rna_EffectorWeight_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr) { - Scene *scene= CTX_data_scene(C); - DAG_scene_sort(scene); DAG_id_flush_update((ID*)ptr->id.data, OB_RECALC_DATA|PSYS_RECALC_RESET); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, NULL); + WM_main_add_notifier(NC_OBJECT|ND_DRAW, NULL); } static char *rna_EffectorWeight_path(PointerRNA *ptr) @@ -612,9 +606,8 @@ static char *rna_EffectorWeight_path(PointerRNA *ptr) return NULL; } -static void rna_CollisionSettings_dependency_update(bContext *C, PointerRNA *ptr) +static void rna_CollisionSettings_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr) { - Scene *scene= CTX_data_scene(C); Object *ob= (Object*)ptr->id.data; ModifierData *md= modifiers_findByType(ob, eModifierType_Collision); @@ -624,23 +617,23 @@ static void rna_CollisionSettings_dependency_update(bContext *C, PointerRNA *ptr else if(!ob->pd->deflect && md) ED_object_modifier_remove(NULL, scene, ob, md); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + WM_main_add_notifier(NC_OBJECT|ND_DRAW, ob); } -static void rna_CollisionSettings_update(bContext *C, PointerRNA *ptr) +static void rna_CollisionSettings_update(Main *bmain, Scene *scene, PointerRNA *ptr) { Object *ob= (Object*)ptr->id.data; DAG_id_flush_update(&ob->id, OB_RECALC); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + WM_main_add_notifier(NC_OBJECT|ND_DRAW, ob); } -static void rna_softbody_update(bContext *C, PointerRNA *ptr) +static void rna_softbody_update(Main *bmain, Scene *scene, PointerRNA *ptr) { Object *ob= (Object*)ptr->id.data; DAG_id_flush_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob); + WM_main_add_notifier(NC_OBJECT|ND_MODIFIER, ob); } @@ -1116,6 +1109,12 @@ static void rna_def_field(BlenderRNA *brna) RNA_def_property_range(prop, 0.0f, 10.0f); RNA_def_property_ui_text(prop, "Size", "Size of the noise"); RNA_def_property_update(prop, 0, "rna_FieldSettings_update"); + + prop= RNA_def_property(srna, "rest_length", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "f_size"); + RNA_def_property_range(prop, 0.0f, 1000.0f); + RNA_def_property_ui_text(prop, "Rest Length", "Rest length of the harmonic force"); + RNA_def_property_update(prop, 0, "rna_FieldSettings_update"); prop= RNA_def_property(srna, "falloff_power", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "f_power"); @@ -1228,6 +1227,11 @@ static void rna_def_field(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "flag", PFIELD_VISIBILITY); RNA_def_property_ui_text(prop, "Absorption", "Force gets absorbed by collision objects"); RNA_def_property_update(prop, 0, "rna_FieldSettings_update"); + + prop= RNA_def_property(srna, "multiple_springs", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", PFIELD_MULTIPLE_SPRINGS); + RNA_def_property_ui_text(prop, "Multiple Springs", "Every point is effected by multiple springs"); + RNA_def_property_update(prop, 0, "rna_FieldSettings_update"); /* Pointer */ diff --git a/source/blender/makesrna/intern/rna_particle.c b/source/blender/makesrna/intern/rna_particle.c index 6ddec53c28d..c5b1aafb1a3 100644 --- a/source/blender/makesrna/intern/rna_particle.c +++ b/source/blender/makesrna/intern/rna_particle.c @@ -109,7 +109,7 @@ EnumPropertyItem part_hair_ren_as_items[] = { #include "BLI_listbase.h" /* property update functions */ -static void particle_recalc(bContext *C, PointerRNA *ptr, short flag) +static void particle_recalc(Main *bmain, Scene *scene, PointerRNA *ptr, short flag) { if(ptr->type==&RNA_ParticleSystem) { ParticleSystem *psys = (ParticleSystem*)ptr->data; @@ -121,43 +121,41 @@ static void particle_recalc(bContext *C, PointerRNA *ptr, short flag) else DAG_id_flush_update(ptr->id.data, OB_RECALC_DATA|flag); - WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE_DATA, NULL); + WM_main_add_notifier(NC_OBJECT|ND_PARTICLE_DATA, NULL); } -static void rna_Particle_redo(bContext *C, PointerRNA *ptr) +static void rna_Particle_redo(Main *bmain, Scene *scene, PointerRNA *ptr) { - particle_recalc(C, ptr, PSYS_RECALC_REDO); + particle_recalc(bmain, scene, ptr, PSYS_RECALC_REDO); } -static void rna_Particle_redo_dependency(bContext *C, PointerRNA *ptr) +static void rna_Particle_redo_dependency(Main *bmain, Scene *scene, PointerRNA *ptr) { - DAG_scene_sort(CTX_data_scene(C)); - rna_Particle_redo(C, ptr); + DAG_scene_sort(scene); + rna_Particle_redo(bmain, scene, ptr); } -static void rna_Particle_reset(bContext *C, PointerRNA *ptr) +static void rna_Particle_reset(Main *bmain, Scene *scene, PointerRNA *ptr) { - particle_recalc(C, ptr, PSYS_RECALC_RESET); + particle_recalc(bmain, scene, ptr, PSYS_RECALC_RESET); } -static void rna_Particle_change_type(bContext *C, PointerRNA *ptr) +static void rna_Particle_change_type(Main *bmain, Scene *scene, PointerRNA *ptr) { - particle_recalc(C, ptr, PSYS_RECALC_RESET|PSYS_RECALC_TYPE); + particle_recalc(bmain, scene, ptr, PSYS_RECALC_RESET|PSYS_RECALC_TYPE); } -static void rna_Particle_change_physics(bContext *C, PointerRNA *ptr) +static void rna_Particle_change_physics(Main *bmain, Scene *scene, PointerRNA *ptr) { - particle_recalc(C, ptr, PSYS_RECALC_RESET|PSYS_RECALC_PHYS); + particle_recalc(bmain, scene, ptr, PSYS_RECALC_RESET|PSYS_RECALC_PHYS); } -static void rna_Particle_redo_child(bContext *C, PointerRNA *ptr) +static void rna_Particle_redo_child(Main *bmain, Scene *scene, PointerRNA *ptr) { - particle_recalc(C, ptr, PSYS_RECALC_CHILD); + particle_recalc(bmain, scene, ptr, PSYS_RECALC_CHILD); } -static void rna_Particle_target_reset(bContext *C, PointerRNA *ptr) +static void rna_Particle_target_reset(Main *bmain, Scene *scene, PointerRNA *ptr) { - Scene *scene = CTX_data_scene(C); - if(ptr->type==&RNA_ParticleTarget) { ParticleTarget *pt = (ParticleTarget*)ptr->data; Object *ob = (Object*)ptr->id.data; @@ -187,10 +185,10 @@ static void rna_Particle_target_reset(bContext *C, PointerRNA *ptr) DAG_scene_sort(scene); } - WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE_DATA, NULL); + WM_main_add_notifier(NC_OBJECT|ND_PARTICLE_DATA, NULL); } -static void rna_Particle_target_redo(bContext *C, PointerRNA *ptr) +static void rna_Particle_target_redo(Main *bmain, Scene *scene, PointerRNA *ptr) { if(ptr->type==&RNA_ParticleTarget) { Object *ob = (Object*)ptr->id.data; @@ -199,13 +197,12 @@ static void rna_Particle_target_redo(bContext *C, PointerRNA *ptr) psys->recalc = PSYS_RECALC_REDO; DAG_id_flush_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE_DATA, NULL); + WM_main_add_notifier(NC_OBJECT|ND_PARTICLE_DATA, NULL); } } -static void rna_Particle_hair_dynamics(bContext *C, PointerRNA *ptr) +static void rna_Particle_hair_dynamics(Main *bmain, Scene *scene, PointerRNA *ptr) { - /* Scene *scene = CTX_data_scene(C); */ ParticleSystem *psys = (ParticleSystem*)ptr->data; if(psys && !psys->clmd) { @@ -213,10 +210,10 @@ static void rna_Particle_hair_dynamics(bContext *C, PointerRNA *ptr) psys->clmd->sim_parms->goalspring = 0.0f; psys->clmd->sim_parms->flags |= CLOTH_SIMSETTINGS_FLAG_GOAL|CLOTH_SIMSETTINGS_FLAG_NO_SPRING_COMPRESS; psys->clmd->coll_parms->flags &= ~CLOTH_COLLSETTINGS_FLAG_SELF; - rna_Particle_redo(C, ptr); + rna_Particle_redo(bmain, scene, ptr); } else - WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE_DATA, NULL); + WM_main_add_notifier(NC_OBJECT|ND_PARTICLE_DATA, NULL); } static PointerRNA rna_particle_settings_get(PointerRNA *ptr) { @@ -241,7 +238,7 @@ static void rna_particle_settings_set(PointerRNA *ptr, PointerRNA value) psys_check_boid_data(psys); } } -static void rna_Particle_abspathtime_update(bContext *C, PointerRNA *ptr) +static void rna_Particle_abspathtime_update(Main *bmain, Scene *scene, PointerRNA *ptr) { ParticleSettings *settings = (ParticleSettings*)ptr->data; float delta = settings->end + settings->lifetime - settings->sta; @@ -253,7 +250,7 @@ static void rna_Particle_abspathtime_update(bContext *C, PointerRNA *ptr) settings->path_start = (settings->path_start - settings->sta)/delta; settings->path_end = (settings->path_end - settings->sta)/delta; } - rna_Particle_redo(C, ptr); + rna_Particle_redo(bmain, scene, ptr); } static void rna_PartSettings_start_set(struct PointerRNA *ptr, float value) { @@ -1907,6 +1904,7 @@ static void rna_def_particle_system(BlenderRNA *brna) prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); RNA_def_property_ui_text(prop, "Name", "Particle system name."); + RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER|NA_RENAME, NULL); RNA_def_struct_name_property(srna, prop); /* access to particle settings is redirected through functions */ diff --git a/source/blender/makesrna/intern/rna_pose.c b/source/blender/makesrna/intern/rna_pose.c index 8a4aadcba57..c7aca9c9738 100644 --- a/source/blender/makesrna/intern/rna_pose.c +++ b/source/blender/makesrna/intern/rna_pose.c @@ -58,14 +58,14 @@ #include "MEM_guardedalloc.h" -static void rna_Pose_update(bContext *C, PointerRNA *ptr) +static void rna_Pose_update(Main *bmain, Scene *scene, PointerRNA *ptr) { // XXX when to use this? ob->pose->flag |= (POSE_LOCKED|POSE_DO_UNLOCK); DAG_id_flush_update(ptr->id.data, OB_RECALC_DATA); } -static void rna_Pose_IK_update(bContext *C, PointerRNA *ptr) +static void rna_Pose_IK_update(Main *bmain, Scene *scene, PointerRNA *ptr) { // XXX when to use this? ob->pose->flag |= (POSE_LOCKED|POSE_DO_UNLOCK); Object *ob= ptr->id.data; @@ -142,11 +142,10 @@ static void rna_Pose_ik_solver_set(struct PointerRNA *ptr, int value) } } -static void rna_Pose_ik_solver_update(bContext *C, PointerRNA *ptr) +static void rna_Pose_ik_solver_update(Main *bmain, Scene *scene, PointerRNA *ptr) { Object *ob= ptr->id.data; bPose *pose = ptr->data; - Scene *scene = CTX_data_scene(C); pose->flag |= POSE_RECALC; // checks & sorts pose channels DAG_scene_sort(scene); @@ -242,7 +241,7 @@ static StructRNA *rna_Pose_ikparam_typef(PointerRNA *ptr) } } -static void rna_Itasc_update(bContext *C, PointerRNA *ptr) +static void rna_Itasc_update(Main *bmain, Scene *scene, PointerRNA *ptr) { Object *ob = ptr->id.data; bItasc *itasc = ptr->data; @@ -267,13 +266,13 @@ static void rna_Itasc_update(bContext *C, PointerRNA *ptr) DAG_id_flush_update(&ob->id, OB_RECALC_DATA); } -static void rna_Itasc_update_rebuild(bContext *C, PointerRNA *ptr) +static void rna_Itasc_update_rebuild(Main *bmain, Scene *scene, PointerRNA *ptr) { Object *ob= ptr->id.data; bPose *pose = ob->pose; pose->flag |= POSE_RECALC; // checks & sorts pose channels - rna_Itasc_update(C, ptr); + rna_Itasc_update(bmain, scene, ptr); } static PointerRNA rna_PoseChannel_bone_group_get(PointerRNA *ptr) @@ -431,7 +430,7 @@ static void rna_PoseChannel_active_constraint_set(PointerRNA *ptr, PointerRNA va static bConstraint *rna_PoseChannel_constraints_new(bPoseChannel *pchan, bContext *C, int type) { - //WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT|NA_ADDED, object); + //WM_main_add_notifier(NC_OBJECT|ND_CONSTRAINT|NA_ADDED, object); // TODO, pass object also // TODO, new pose bones don't have updated draw flags return add_pose_constraint(NULL, pchan, NULL, type); @@ -441,7 +440,7 @@ static int rna_PoseChannel_constraints_remove(bPoseChannel *pchan, bContext *C, { // TODO //ED_object_constraint_set_active(object, NULL); - //WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, object); + //WM_main_add_notifier(NC_OBJECT|ND_CONSTRAINT, object); return remove_constraint_index(&pchan->constraints, index); } diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index 9276964ce9a..ec86838ce42 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -190,9 +190,8 @@ static void rna_Scene_layer_set(PointerRNA *ptr, const int *values) scene->lay= ED_view3d_scene_layer_set(scene->lay, values); } -static void rna_Scene_layer_update(bContext *C, PointerRNA *ptr) +static void rna_Scene_layer_update(Main *bmain, Scene *unused, PointerRNA *ptr) { - Main *bmain= CTX_data_main(C); Scene *scene= (Scene*)ptr->data; ED_view3d_scene_layers_update(bmain, scene); @@ -269,7 +268,7 @@ static void rna_Scene_preview_range_end_frame_set(PointerRNA *ptr, int value) data->r.pefra= value; } -static void rna_Scene_frame_update(bContext *C, PointerRNA *ptr) +static void rna_Scene_frame_update(Main *bmain, Scene *unused, PointerRNA *ptr) { //Scene *scene= ptr->id.data; //ED_update_for_newframe(C); @@ -538,7 +537,7 @@ static void rna_SceneRenderLayer_layer_set(PointerRNA *ptr, const int *values) rl->lay= ED_view3d_scene_layer_set(rl->lay, values); } -static void rna_SceneRenderLayer_pass_update(bContext *C, PointerRNA *ptr) +static void rna_SceneRenderLayer_pass_update(Main *bmain, Scene *unused, PointerRNA *ptr) { Scene *scene= (Scene*)ptr->id.data; @@ -555,7 +554,7 @@ static void rna_Scene_use_nodes_set(PointerRNA *ptr, int value) ED_node_composit_default(scene); } -static void rna_Physics_update(bContext *C, PointerRNA *ptr) +static void rna_Physics_update(Main *bmain, Scene *unused, PointerRNA *ptr) { Scene *scene= (Scene*)ptr->id.data; Base *base; @@ -723,15 +722,18 @@ static void rna_def_tool_settings(BlenderRNA *brna) RNA_def_property_enum_sdna(prop, NULL, "uv_selectmode"); RNA_def_property_enum_items(prop, uv_select_mode_items); RNA_def_property_ui_text(prop, "UV Selection Mode", "UV selection and display mode."); + RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL); prop= RNA_def_property(srna, "uv_sync_selection", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "uv_flag", UV_SYNC_SELECTION); RNA_def_property_ui_text(prop, "UV Sync Selection", "Keep UV and edit mode mesh selection in sync."); RNA_def_property_ui_icon(prop, ICON_EDIT, 0); + RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL); prop= RNA_def_property(srna, "uv_local_view", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "uv_flag", UV_SHOW_SAME_IMAGE); RNA_def_property_ui_text(prop, "UV Local View", "Draw only faces with the currently displayed image assigned."); + RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL); /* Mesh */ prop= RNA_def_property(srna, "mesh_selection_mode", PROP_ENUM, PROP_NONE); @@ -1670,13 +1672,13 @@ static void rna_def_scene_render_data(BlenderRNA *brna) RNA_def_property_int_sdna(prop, NULL, "xsch"); RNA_def_property_range(prop, 4, 10000); RNA_def_property_ui_text(prop, "Resolution X", "Number of horizontal pixels in the rendered image."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS|NC_OBJECT|ND_DRAW, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); prop= RNA_def_property(srna, "resolution_y", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "ysch"); RNA_def_property_range(prop, 4, 10000); RNA_def_property_ui_text(prop, "Resolution Y", "Number of vertical pixels in the rendered image."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS|NC_OBJECT|ND_DRAW, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); prop= RNA_def_property(srna, "resolution_percentage", PROP_INT, PROP_PERCENTAGE); RNA_def_property_int_sdna(prop, NULL, "size"); @@ -1700,13 +1702,13 @@ static void rna_def_scene_render_data(BlenderRNA *brna) RNA_def_property_float_sdna(prop, NULL, "xasp"); RNA_def_property_range(prop, 1.0f, 200.0f); RNA_def_property_ui_text(prop, "Pixel Aspect X", "Horizontal aspect ratio - for anamorphic or non-square pixel output"); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS|NC_OBJECT|ND_DRAW, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); prop= RNA_def_property(srna, "pixel_aspect_y", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "yasp"); RNA_def_property_range(prop, 1.0f, 200.0f); RNA_def_property_ui_text(prop, "Pixel Aspect Y", "Vertical aspect ratio - for anamorphic or non-square pixel output"); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS|NC_OBJECT|ND_DRAW, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); /* JPEG and AVI JPEG */ @@ -2266,7 +2268,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Stamp Filename", "Include the filename of the .blend file in image metadata"); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); - prop= RNA_def_property(srna, "stamp_sequence_strip", PROP_BOOLEAN, PROP_NONE); + prop= RNA_def_property(srna, "stamp_sequencer_strip", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "stamp", R_STAMP_SEQSTRIP); RNA_def_property_ui_text(prop, "Stamp Sequence Strip", "Include the name of the foreground sequence strip in image metadata"); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); @@ -2428,6 +2430,7 @@ void RNA_def_scene(BlenderRNA *brna) prop= RNA_def_property(srna, "camera", PROP_POINTER, PROP_NONE); RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Camera", "Active camera used for rendering the scene."); + RNA_def_property_update(prop, NC_SCENE, NULL); prop= RNA_def_property(srna, "set", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "set"); @@ -2435,11 +2438,12 @@ void RNA_def_scene(BlenderRNA *brna) RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK); RNA_def_property_pointer_funcs(prop, NULL, "rna_Scene_set_set", NULL); RNA_def_property_ui_text(prop, "Set Scene", "Background set scene."); + RNA_def_property_update(prop, NC_SCENE, NULL); prop= RNA_def_property(srna, "world", PROP_POINTER, PROP_NONE); RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "World", "World used for rendering the scene."); - RNA_def_property_update(prop, NC_WORLD, NULL); + RNA_def_property_update(prop, NC_SCENE|NC_WORLD, NULL); prop= RNA_def_property(srna, "cursor_location", PROP_FLOAT, PROP_XYZ|PROP_UNIT_LENGTH); RNA_def_property_float_sdna(prop, NULL, "cursor"); @@ -2531,6 +2535,14 @@ void RNA_def_scene(BlenderRNA *brna) /* Animation Data (for Scene) */ rna_def_animdata_common(srna); + /* Readonly Properties */ + prop= RNA_def_property(srna, "nla_tweakmode_on", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_NLA_EDIT_ON); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); /* DO NOT MAKE THIS EDITABLE, OR NLA EDITOR BREAKS */ + RNA_def_property_ui_text(prop, "NLA TweakMode", "Indicates whether there is any action referenced by NLA being edited. Strictly read-only."); + RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL); + + /* Nodes (Compositing) */ prop= RNA_def_property(srna, "nodetree", PROP_POINTER, PROP_NONE); RNA_def_property_ui_text(prop, "Node Tree", "Compositing node tree."); diff --git a/source/blender/makesrna/intern/rna_scene_api.c b/source/blender/makesrna/intern/rna_scene_api.c index 89e9c2ee5ca..4efbed167a6 100644 --- a/source/blender/makesrna/intern/rna_scene_api.c +++ b/source/blender/makesrna/intern/rna_scene_api.c @@ -54,7 +54,7 @@ static void rna_Scene_set_frame(Scene *scene, bContext *C, int frame) CLAMP(scene->r.cfra, MINAFRAME, MAXFRAME); scene_update_for_newframe(scene, (1<<20) - 1); - WM_event_add_notifier(C, NC_SCENE|ND_FRAME, scene); + WM_main_add_notifier(NC_SCENE|ND_FRAME, scene); } static KeyingSet *rna_Scene_add_keying_set(Scene *sce, ReportList *reports, diff --git a/source/blender/makesrna/intern/rna_screen.c b/source/blender/makesrna/intern/rna_screen.c index 79a5d3d5cd1..883c77b3faa 100644 --- a/source/blender/makesrna/intern/rna_screen.c +++ b/source/blender/makesrna/intern/rna_screen.c @@ -40,6 +40,7 @@ EnumPropertyItem region_type_items[] = { {RGN_TYPE_TOOLS, "TOOLS", 0, "Tools", ""}, {RGN_TYPE_TEMPORARY, "TEMPORARY", 0, "Temporary", ""}, {RGN_TYPE_UI, "UI", 0, "UI", ""}, + {RGN_TYPE_PREVIEW, "PREVIEW", 0, "Preview", ""}, {0, NULL, 0, NULL, NULL}}; #ifdef RNA_RUNTIME @@ -78,6 +79,12 @@ static int rna_Screen_animation_playing_get(PointerRNA *ptr) return (sc->animtimer != NULL); } +static int rna_Screen_fullscreen_get(PointerRNA *ptr) +{ + bScreen *sc= (bScreen*)ptr->data; + return (sc->full == SCREENFULL); +} + static void rna_Area_type_set(PointerRNA *ptr, int value) { ScrArea *sa= (ScrArea*)ptr->data; @@ -88,10 +95,8 @@ static void rna_Area_type_update(bContext *C, PointerRNA *ptr) { ScrArea *sa= (ScrArea*)ptr->data; - if(sa) { - ED_area_newspace(C, sa, sa->butspacetype); /* XXX - this uses the window */ - ED_area_tag_redraw(sa); - } + ED_area_newspace(C, sa, sa->butspacetype); /* XXX - this uses the window */ + ED_area_tag_redraw(sa); } #else @@ -129,9 +134,9 @@ static void rna_def_area(BlenderRNA *brna) RNA_def_property_enum_items(prop, space_type_items); RNA_def_property_enum_funcs(prop, NULL, "rna_Area_type_set", NULL); RNA_def_property_ui_text(prop, "Type", "Space type."); + RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE); RNA_def_property_update(prop, 0, "rna_Area_type_update"); - RNA_def_function(srna, "tag_redraw", "ED_area_tag_redraw"); } @@ -147,7 +152,12 @@ static void rna_def_region(BlenderRNA *brna) prop= RNA_def_property(srna, "id", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "swinid"); RNA_def_property_clear_flag(prop, PROP_EDITABLE); - RNA_def_property_ui_text(prop, "Region ID", "Uniqute ID for this region."); + RNA_def_property_ui_text(prop, "Region ID", "Unique ID for this region."); + + prop= RNA_def_property(srna, "type", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "regiontype"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Region Type", "Type of this region."); prop= RNA_def_property(srna, "width", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "winx"); @@ -174,6 +184,7 @@ static void rna_def_screen(BlenderRNA *brna) RNA_def_property_flag(prop, PROP_EDITABLE|PROP_NEVER_NULL); RNA_def_property_pointer_funcs(prop, NULL, "rna_Screen_scene_set", NULL); RNA_def_property_ui_text(prop, "Scene", "Active scene to be edited in the screen."); + RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE); RNA_def_property_update(prop, 0, "rna_Screen_scene_update"); prop= RNA_def_property(srna, "areas", PROP_COLLECTION, PROP_NONE); @@ -185,6 +196,11 @@ static void rna_def_screen(BlenderRNA *brna) RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_boolean_funcs(prop, "rna_Screen_animation_playing_get", NULL); RNA_def_property_ui_text(prop, "Animation Playing", "Animation playback is active."); + + prop= RNA_def_property(srna, "fullscreen", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_boolean_funcs(prop, "rna_Screen_fullscreen_get", NULL); + RNA_def_property_ui_text(prop, "Fullscreen", "An area is maximised, filling this screen."); } void RNA_def_screen(BlenderRNA *brna) diff --git a/source/blender/makesrna/intern/rna_sculpt_paint.c b/source/blender/makesrna/intern/rna_sculpt_paint.c index 6cfd38ba26e..c8fb11ced95 100644 --- a/source/blender/makesrna/intern/rna_sculpt_paint.c +++ b/source/blender/makesrna/intern/rna_sculpt_paint.c @@ -100,9 +100,10 @@ static void rna_Paint_active_brush_set(PointerRNA *ptr, PointerRNA value) paint_brush_set(ptr->data, value.data); } -static void rna_ParticleEdit_redo(bContext *C, PointerRNA *ptr) +static void rna_ParticleEdit_redo(Main *bmain, Scene *scene, PointerRNA *ptr) { - PTCacheEdit *edit = PE_get_current(CTX_data_scene(C), CTX_data_active_object(C)); + Object *ob= (scene->basact)? scene->basact->object: NULL; + PTCacheEdit *edit = PE_get_current(scene, ob); if(!edit) return; @@ -110,9 +111,9 @@ static void rna_ParticleEdit_redo(bContext *C, PointerRNA *ptr) psys_free_path_cache(edit->psys, edit); } -static void rna_ParticleEdit_update(bContext *C, PointerRNA *ptr) +static void rna_ParticleEdit_update(Main *bmain, Scene *scene, PointerRNA *ptr) { - Object *ob = CTX_data_active_object(C); + Object *ob= (scene->basact)? scene->basact->object: NULL; if(ob) DAG_id_flush_update(&ob->id, OB_RECALC_DATA); } @@ -120,7 +121,8 @@ static void rna_ParticleEdit_update(bContext *C, PointerRNA *ptr) static EnumPropertyItem *rna_ParticleEdit_tool_itemf(bContext *C, PointerRNA *ptr, int *free) { Scene *scene= CTX_data_scene(C); - PTCacheEdit *edit = PE_get_current(scene, CTX_data_active_object(C)); + Object *ob= (scene->basact)? scene->basact->object: NULL; + PTCacheEdit *edit = PE_get_current(scene, ob); if(edit && edit->psys) return particle_edit_hair_brush_items; @@ -188,6 +190,14 @@ static void rna_def_paint(BlenderRNA *brna) RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Brush", "Active paint brush."); RNA_def_property_update(prop, NC_BRUSH|NA_EDITED, NULL); + + prop= RNA_def_property(srna, "show_brush", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flags", PAINT_SHOW_BRUSH); + RNA_def_property_ui_text(prop, "Show Brush", ""); + + prop= RNA_def_property(srna, "fast_navigate", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flags", PAINT_FAST_NAVIGATE); + RNA_def_property_ui_text(prop, "Fast Navigate", "For multires, show low resolution while navigating the view."); } static void rna_def_sculpt(BlenderRNA *brna) @@ -221,14 +231,6 @@ static void rna_def_sculpt(BlenderRNA *brna) prop= RNA_def_property(srna, "lock_z", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_LOCK_Z); RNA_def_property_ui_text(prop, "Lock Z", "Disallow changes to the Z axis of vertices."); - - prop= RNA_def_property(srna, "show_brush", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_DRAW_BRUSH); - RNA_def_property_ui_text(prop, "Show Brush", ""); - - prop= RNA_def_property(srna, "partial_redraw", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_DRAW_FAST); - RNA_def_property_ui_text(prop, "Partial Redraw", "Optimize sculpting by only refreshing modified faces."); } static void rna_def_vertex_paint(BlenderRNA *brna) diff --git a/source/blender/makesrna/intern/rna_sequence.c b/source/blender/makesrna/intern/rna_sequencer.c similarity index 73% rename from source/blender/makesrna/intern/rna_sequence.c rename to source/blender/makesrna/intern/rna_sequencer.c index 2e31facfd19..f875e6a7fa2 100644 --- a/source/blender/makesrna/intern/rna_sequence.c +++ b/source/blender/makesrna/intern/rna_sequencer.c @@ -25,6 +25,7 @@ #include #include +#include "RNA_access.h" #include "RNA_define.h" #include "RNA_types.h" @@ -34,7 +35,7 @@ #include "DNA_scene_types.h" #include "DNA_sequence_types.h" -#include "BKE_sequence.h" +#include "BKE_sequencer.h" #include "MEM_guardedalloc.h" @@ -42,58 +43,125 @@ #ifdef RNA_RUNTIME -static void rna_SequenceEditor_start_frame_set(PointerRNA *ptr, int value) +/* build a temp referene to the parent */ +static void meta_tmp_ref(Sequence *seq_par, Sequence *seq) +{ + for (; seq; seq= seq->next) { + seq->tmp= seq_par; + if(seq->type == SEQ_META) { + meta_tmp_ref(seq, seq->seqbase.first); + } + } +} + +static void rna_SequenceEditor_sequences_all_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) +{ + Scene *scene= (Scene*)ptr->id.data; + Editing *ed= seq_give_editing(scene, FALSE); + + meta_tmp_ref(NULL, ed->seqbase.first); + + rna_iterator_listbase_begin(iter, &ed->seqbase, NULL); +} + +static void rna_SequenceEditor_sequences_all_next(CollectionPropertyIterator *iter) +{ + ListBaseIterator *internal= iter->internal; + Sequence *seq= (Sequence*)internal->link; + + if(seq->seqbase.first) + internal->link= (Link*)seq->seqbase.first; + else if(seq->next) + internal->link= (Link*)seq->next; + else { + internal->link= NULL; + + do { + seq= seq->tmp; // XXX - seq's dont reference their parents! + if(seq && seq->next) { + internal->link= (Link*)seq->next; + break; + } + } while(seq); + } + + iter->valid= (internal->link != NULL); +} + +/* internal use */ +static void rna_Sequence_frame_change_update(Scene *scene, Sequence *seq) +{ + Editing *ed= seq_give_editing(scene, FALSE); + ListBase *seqbase= seq_seqbase(&ed->seqbase, seq); + calc_sequence_disp(seq); + + if(seq_test_overlap(seqbase, seq)) { + shuffle_seq(seqbase, seq, scene); // XXX - BROKEN!, uses context seqbasep + } + sort_seq(scene); +} + +static void rna_Sequence_start_frame_set(PointerRNA *ptr, int value) { Sequence *seq= (Sequence*)ptr->data; - Scene *sce= (Scene*)ptr->id.data; - Editing *ed= seq_give_editing(sce, FALSE); + Scene *scene= (Scene*)ptr->id.data; seq->start= value; - calc_sequence_disp(seq); - - if( seq_test_overlap(ed->seqbasep, seq) ) { - shuffle_seq(ed->seqbasep, seq); - } - sort_seq(sce); + rna_Sequence_frame_change_update(scene, seq); } -static void rna_SequenceEditor_length_set(PointerRNA *ptr, int value) +static void rna_Sequence_start_frame_final_set(PointerRNA *ptr, int value) { Sequence *seq= (Sequence*)ptr->data; - Scene *sce= (Scene*)ptr->id.data; - Editing *ed= seq_give_editing(sce, FALSE); - - seq_tx_set_final_right(seq, seq->start+value); - calc_sequence_disp(seq); - - if( seq_test_overlap(ed->seqbasep, seq) ) { - shuffle_seq(ed->seqbasep, seq); - } - sort_seq(sce); + Scene *scene= (Scene*)ptr->id.data; + + seq_tx_set_final_left(seq, value); + seq_single_fix(seq); + rna_Sequence_frame_change_update(scene, seq); } -static int rna_SequenceEditor_length_get(PointerRNA *ptr) +static void rna_Sequence_end_frame_final_set(PointerRNA *ptr, int value) +{ + Sequence *seq= (Sequence*)ptr->data; + Scene *scene= (Scene*)ptr->id.data; + + seq_tx_set_final_right(seq, value); + seq_single_fix(seq); + rna_Sequence_frame_change_update(scene, seq); +} + +static void rna_Sequence_length_set(PointerRNA *ptr, int value) +{ + Sequence *seq= (Sequence*)ptr->data; + Scene *scene= (Scene*)ptr->id.data; + + seq_tx_set_final_right(seq, seq->start+value); + rna_Sequence_frame_change_update(scene, seq); +} + +static int rna_Sequence_length_get(PointerRNA *ptr) { Sequence *seq= (Sequence*)ptr->data; return seq_tx_get_final_right(seq, 0)-seq_tx_get_final_left(seq, 0); } -static void rna_SequenceEditor_channel_set(PointerRNA *ptr, int value) +static void rna_Sequence_channel_set(PointerRNA *ptr, int value) { Sequence *seq= (Sequence*)ptr->data; - Scene *sce= (Scene*)ptr->id.data; - Editing *ed= seq_give_editing(sce, FALSE); - + Scene *scene= (Scene*)ptr->id.data; + Editing *ed= seq_give_editing(scene, FALSE); + ListBase *seqbase= seq_seqbase(&ed->seqbase, seq); + seq->machine= value; - if( seq_test_overlap(ed->seqbasep, seq) ) { - shuffle_seq(ed->seqbasep, seq); + if( seq_test_overlap(seqbase, seq) ) { + shuffle_seq(seqbase, seq, scene); // XXX - BROKEN!, uses context seqbasep } - sort_seq(sce); + sort_seq(scene); } /* properties that need to allocate structs */ -static void rna_SequenceEditor_use_color_balance_set(PointerRNA *ptr, int value) +static void rna_Sequence_use_color_balance_set(PointerRNA *ptr, int value) { Sequence *seq= (Sequence*)ptr->data; int c; @@ -113,7 +181,7 @@ static void rna_SequenceEditor_use_color_balance_set(PointerRNA *ptr, int value) } } -static void rna_SequenceEditor_use_proxy_set(PointerRNA *ptr, int value) +static void rna_Sequence_use_proxy_set(PointerRNA *ptr, int value) { Sequence *seq= (Sequence*)ptr->data; if(value) { @@ -126,7 +194,7 @@ static void rna_SequenceEditor_use_proxy_set(PointerRNA *ptr, int value) } } -static void rna_SequenceEditor_use_translation_set(PointerRNA *ptr, int value) +static void rna_Sequence_use_translation_set(PointerRNA *ptr, int value) { Sequence *seq= (Sequence*)ptr->data; if(value) { @@ -139,7 +207,7 @@ static void rna_SequenceEditor_use_translation_set(PointerRNA *ptr, int value) } } -static void rna_SequenceEditor_use_crop_set(PointerRNA *ptr, int value) +static void rna_Sequence_use_crop_set(PointerRNA *ptr, int value) { Sequence *seq= (Sequence*)ptr->data; if(value) { @@ -166,10 +234,23 @@ static int rna_Sequence_name_length(PointerRNA *ptr) static void rna_Sequence_name_set(PointerRNA *ptr, const char *value) { - Scene *sce= (Scene*)ptr->id.data; + Scene *scene= (Scene*)ptr->id.data; +// Editing *ed= seq_give_editing(scene, FALSE); Sequence *seq= (Sequence*)ptr->data; +// Sequence *iseq; BLI_strncpy(seq->name+2, value, sizeof(seq->name)-2); - seqUniqueName(&sce->ed->seqbase, seq); + + seqUniqueName(&scene->ed->seqbase, seq); + + // TODO, unique name for all meta's + /* + SEQ_BEGIN(ed, iseq) { + if(iseq->seqbase.first) + seqUniqueName(&iseq->seqbase, seq); + + } + SEQ_END + */ } static StructRNA* rna_Sequence_refine(struct PointerRNA *ptr) @@ -221,7 +302,7 @@ static char *rna_Sequence_path(PointerRNA *ptr) * TODO: would be nice to make SequenceEditor data a datablock of its own (for shorter paths) */ if (seq->name+2) - return BLI_sprintfN("sequence_editor.sequences[\"%s\"]", seq->name+2); + return BLI_sprintfN("sequence_editor.sequences_all[\"%s\"]", seq->name+2); else return BLI_strdup(""); } @@ -263,6 +344,32 @@ static void rna_SequenceElement_filename_set(PointerRNA *ptr, const char *value) BLI_strncpy(elem->name, name, sizeof(elem->name)); } +static void rna_Sequence_update(Main *bmain, Scene *scene, PointerRNA *ptr) +{ + Editing *ed= seq_give_editing(scene, FALSE); + + free_imbuf_seq(scene, &ed->seqbase, FALSE); + + if(RNA_struct_is_a(ptr->type, &RNA_SoundSequence)) + seq_update_sound(ptr->data); +} + +static void rna_Sequence_mute_update(Main *bmain, Scene *scene, PointerRNA *ptr) +{ + Editing *ed= seq_give_editing(scene, FALSE); + + seq_update_muting(ed); + rna_Sequence_update(bmain, scene, ptr); +} + +/* do_versions? */ +static float rna_Sequence_opacity_get(PointerRNA *ptr) { + return ((Sequence*)(ptr->data))->blend_opacity / 100.0f; +} +static void rna_Sequence_opacity_set(PointerRNA *ptr, float value) { + ((Sequence*)(ptr->data))->blend_opacity = value * 100.0f; +} + #else static void rna_def_strip_element(BlenderRNA *brna) @@ -278,6 +385,7 @@ static void rna_def_strip_element(BlenderRNA *brna) RNA_def_property_string_sdna(prop, NULL, "name"); RNA_def_property_ui_text(prop, "Filename", ""); RNA_def_property_string_funcs(prop, NULL, NULL, "rna_SequenceElement_filename_set"); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); } static void rna_def_strip_crop(BlenderRNA *brna) @@ -292,18 +400,22 @@ static void rna_def_strip_crop(BlenderRNA *brna) prop= RNA_def_property(srna, "top", PROP_INT, PROP_UNSIGNED); RNA_def_property_ui_text(prop, "Top", ""); RNA_def_property_ui_range(prop, 0, 4096, 1, 0); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "bottom", PROP_INT, PROP_UNSIGNED); RNA_def_property_ui_text(prop, "Bottom", ""); RNA_def_property_ui_range(prop, 0, 4096, 1, 0); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "left", PROP_INT, PROP_UNSIGNED); RNA_def_property_ui_text(prop, "Left", ""); RNA_def_property_ui_range(prop, 0, 4096, 1, 0); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "right", PROP_INT, PROP_UNSIGNED); RNA_def_property_ui_text(prop, "Right", ""); RNA_def_property_ui_range(prop, 0, 4096, 1, 0); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); } static void rna_def_strip_transform(BlenderRNA *brna) @@ -319,11 +431,13 @@ static void rna_def_strip_transform(BlenderRNA *brna) RNA_def_property_int_sdna(prop, NULL, "xofs"); RNA_def_property_ui_text(prop, "Offset Y", ""); RNA_def_property_ui_range(prop, -4096, 4096, 1, 0); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "offset_y", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "yofs"); RNA_def_property_ui_text(prop, "Offset Y", ""); RNA_def_property_ui_range(prop, -4096, 4096, 1, 0); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); } static void rna_def_strip_proxy(BlenderRNA *brna) @@ -338,10 +452,12 @@ static void rna_def_strip_proxy(BlenderRNA *brna) prop= RNA_def_property(srna, "directory", PROP_STRING, PROP_DIRPATH); RNA_def_property_string_sdna(prop, NULL, "dir"); RNA_def_property_ui_text(prop, "Directory", "Location to story the proxy file"); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "file", PROP_STRING, PROP_DIRPATH); RNA_def_property_string_sdna(prop, NULL, "file"); RNA_def_property_ui_text(prop, "File", "Proxy file name"); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); } static void rna_def_strip_color_balance(BlenderRNA *brna) @@ -355,33 +471,41 @@ static void rna_def_strip_color_balance(BlenderRNA *brna) prop= RNA_def_property(srna, "lift", PROP_FLOAT, PROP_COLOR); RNA_def_property_ui_text(prop, "Lift", "Color balance lift (shadows)."); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "gamma", PROP_FLOAT, PROP_COLOR); RNA_def_property_ui_text(prop, "Gamma", "Color balance gamma (midtones)."); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "gain", PROP_FLOAT, PROP_COLOR); RNA_def_property_ui_text(prop, "Gain", "Color balance gain (highlights)."); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "inverse_gain", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_COLOR_BALANCE_INVERSE_GAIN); RNA_def_property_ui_text(prop, "Inverse Gain", ""); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "inverse_gamma", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_COLOR_BALANCE_INVERSE_GAMMA); RNA_def_property_ui_text(prop, "Inverse Gamma", ""); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "inverse_lift", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_COLOR_BALANCE_INVERSE_LIFT); RNA_def_property_ui_text(prop, "Inverse Lift", ""); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); /* not yet used prop= RNA_def_property(srna, "exposure", PROP_FLOAT, PROP_NONE); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Exposure", ""); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "saturation", PROP_FLOAT, PROP_NONE); RNA_def_property_range(prop, 0.0f, 1.0f); - RNA_def_property_ui_text(prop, "Saturation", "");*/ + RNA_def_property_ui_text(prop, "Saturation", ""); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); */ } static void rna_def_sequence(BlenderRNA *brna) @@ -396,7 +520,6 @@ static void rna_def_sequence(BlenderRNA *brna) {SEQ_SCENE, "SCENE", 0, "Scene", ""}, {SEQ_MOVIE, "MOVIE", 0, "Movie", ""}, {SEQ_SOUND, "SOUND", 0, "Sound", ""}, - {SEQ_EFFECT, "REPLACE", 0, "Replace", ""}, {SEQ_CROSS, "CROSS", 0, "Cross", ""}, {SEQ_ADD, "ADD", 0, "Add", ""}, {SEQ_SUB, "SUBTRACT", 0, "Subtract", ""}, @@ -435,11 +558,13 @@ static void rna_def_sequence(BlenderRNA *brna) RNA_def_property_string_maxlength(prop, sizeof(((Sequence*)NULL)->name)-2); RNA_def_property_ui_text(prop, "Name", ""); RNA_def_struct_name_property(srna, prop); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE); RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_enum_items(prop, seq_type_items); RNA_def_property_ui_text(prop, "Type", ""); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); //prop= RNA_def_property(srna, "ipo", PROP_POINTER, PROP_NONE); //RNA_def_property_ui_text(prop, "Ipo Curves", "Ipo curves used by this sequence."); @@ -449,28 +574,32 @@ static void rna_def_sequence(BlenderRNA *brna) prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", SELECT); RNA_def_property_ui_text(prop, "Selected", ""); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER_SELECT, NULL); prop= RNA_def_property(srna, "left_handle_selected", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_LEFTSEL); RNA_def_property_ui_text(prop, "Left Handle Selected", ""); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER_SELECT, NULL); prop= RNA_def_property(srna, "right_handle_selected", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_RIGHTSEL); RNA_def_property_ui_text(prop, "Right Handle Selected", ""); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER_SELECT, NULL); prop= RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_MUTE); RNA_def_property_ui_text(prop, "Mute", ""); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_mute_update"); prop= RNA_def_property(srna, "frame_locked", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_IPO_FRAME_LOCKED); RNA_def_property_ui_text(prop, "Frame Locked", "Lock the animation curve to the global frame counter."); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "lock", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_LOCK); RNA_def_property_ui_text(prop, "Lock", "Lock strip so that it can't be transformed."); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); /* strip positioning */ @@ -478,76 +607,89 @@ static void rna_def_sequence(BlenderRNA *brna) RNA_def_property_int_sdna(prop, NULL, "len"); RNA_def_property_range(prop, 1, MAXFRAME); RNA_def_property_ui_text(prop, "Length", "The length of the contents of this strip before the handles are applied"); - RNA_def_property_int_funcs(prop, "rna_SequenceEditor_length_get", "rna_SequenceEditor_length_set",NULL); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_int_funcs(prop, "rna_Sequence_length_get", "rna_Sequence_length_set",NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "start_frame", PROP_INT, PROP_TIME); RNA_def_property_int_sdna(prop, NULL, "start"); RNA_def_property_ui_text(prop, "Start Frame", ""); - RNA_def_property_int_funcs(prop, NULL, "rna_SequenceEditor_start_frame_set",NULL); // overlap tests and calc_seq_disp - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_int_funcs(prop, NULL, "rna_Sequence_start_frame_set",NULL); // overlap tests and calc_seq_disp + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); + prop= RNA_def_property(srna, "start_frame_final", PROP_INT, PROP_TIME); + RNA_def_property_int_sdna(prop, NULL, "startdisp"); + RNA_def_property_ui_text(prop, "Start Frame", "Start frame displayed in the sequence editor after offsets are applied, setting this is equivilent to moving the handle, not the actual start frame."); + RNA_def_property_int_funcs(prop, NULL, "rna_Sequence_start_frame_final_set", NULL); // overlap tests and calc_seq_disp + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); + + prop= RNA_def_property(srna, "end_frame_final", PROP_INT, PROP_TIME); + RNA_def_property_int_sdna(prop, NULL, "enddisp"); + RNA_def_property_ui_text(prop, "End Frame", "End frame displayed in the sequence editor after offsets are applied."); + RNA_def_property_int_funcs(prop, NULL, "rna_Sequence_end_frame_final_set", NULL); // overlap tests and calc_seq_disp + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); + prop= RNA_def_property(srna, "start_offset", PROP_INT, PROP_TIME); RNA_def_property_int_sdna(prop, NULL, "startofs"); RNA_def_property_clear_flag(prop, PROP_EDITABLE); // overlap tests RNA_def_property_ui_text(prop, "Start Offset", ""); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "end_offset", PROP_INT, PROP_TIME); RNA_def_property_int_sdna(prop, NULL, "endofs"); RNA_def_property_clear_flag(prop, PROP_EDITABLE); // overlap tests RNA_def_property_ui_text(prop, "End offset", ""); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "start_still", PROP_INT, PROP_TIME); RNA_def_property_int_sdna(prop, NULL, "startstill"); RNA_def_property_clear_flag(prop, PROP_EDITABLE); // overlap tests RNA_def_property_range(prop, 0, MAXFRAME); RNA_def_property_ui_text(prop, "Start Still", ""); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "end_still", PROP_INT, PROP_TIME); RNA_def_property_int_sdna(prop, NULL, "endstill"); RNA_def_property_clear_flag(prop, PROP_EDITABLE); // overlap tests RNA_def_property_range(prop, 0, MAXFRAME); RNA_def_property_ui_text(prop, "End Still", ""); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "channel", PROP_INT, PROP_UNSIGNED); 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_SequenceEditor_channel_set",NULL); // overlap test - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + 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 */ prop= RNA_def_property(srna, "blend_mode", PROP_ENUM, PROP_NONE); RNA_def_property_enum_items(prop, blend_mode_items); RNA_def_property_ui_text(prop, "Blend Mode", ""); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); - prop= RNA_def_property(srna, "blend_opacity", PROP_FLOAT, PROP_NONE); - RNA_def_property_range(prop, 0.0f, 100.0f); + prop= RNA_def_property(srna, "blend_opacity", PROP_FLOAT, PROP_FACTOR); + RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Blend Opacity", ""); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_float_funcs(prop, "rna_Sequence_opacity_get", "rna_Sequence_opacity_set", NULL); // stupid 0-100 -> 0-1 + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "effect_fader", PROP_FLOAT, PROP_NONE); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_float_sdna(prop, NULL, "effect_fader"); RNA_def_property_ui_text(prop, "Effect fader position", ""); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "use_effect_default_fade", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_USE_EFFECT_DEFAULT_FADE); RNA_def_property_ui_text(prop, "Use Default Fade", "Fade effect using the builtin default (usually make transition as long as effect strip)."); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "speed_fader", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "speed_fader"); RNA_def_property_ui_text(prop, "Speed effect fader position", ""); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); /* functions */ func= RNA_def_function(srna, "getStripElem", "give_stripelem"); @@ -572,6 +714,12 @@ static void rna_def_editor(BlenderRNA *brna) RNA_def_property_struct_type(prop, "Sequence"); RNA_def_property_ui_text(prop, "Sequences", ""); + prop= RNA_def_property(srna, "sequences_all", PROP_COLLECTION, PROP_NONE); + RNA_def_property_collection_sdna(prop, NULL, "seqbase", NULL); + RNA_def_property_struct_type(prop, "Sequence"); + RNA_def_property_ui_text(prop, "Sequences", ""); + RNA_def_property_collection_funcs(prop, "rna_SequenceEditor_sequences_all_begin", "rna_SequenceEditor_sequences_all_next", 0, 0, 0, 0, 0); + prop= RNA_def_property(srna, "meta_stack", PROP_COLLECTION, PROP_NONE); RNA_def_property_collection_sdna(prop, NULL, "metastack", NULL); RNA_def_property_struct_type(prop, "Sequence"); @@ -599,66 +747,63 @@ static void rna_def_filter_video(StructRNA *srna) prop= RNA_def_property(srna, "flip_x", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_FLIPX); RNA_def_property_ui_text(prop, "Flip X", "Flip on the X axis."); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "flip_y", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_FLIPY); RNA_def_property_ui_text(prop, "Flip Y", "Flip on the Y axis."); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "convert_float", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_MAKE_FLOAT); RNA_def_property_ui_text(prop, "Convert Float", "Convert input to float data."); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "reverse_frames", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_REVERSE_FRAMES); RNA_def_property_ui_text(prop, "Flip Time", "Reverse frame order."); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "multiply_colors", PROP_FLOAT, PROP_UNSIGNED); RNA_def_property_float_sdna(prop, NULL, "mul"); RNA_def_property_range(prop, 0.0f, 20.0f); RNA_def_property_ui_text(prop, "Multiply Colors", ""); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "strobe", PROP_FLOAT, PROP_NONE); RNA_def_property_range(prop, 1.0f, 30.0f); RNA_def_property_ui_text(prop, "Strobe", "Only display every nth frame."); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "use_color_balance", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_USE_COLOR_BALANCE); RNA_def_property_ui_text(prop, "Use Color Balance", "(3-Way color correction) on input."); - RNA_def_property_boolean_funcs(prop, NULL, "rna_SequenceEditor_use_color_balance_set"); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_boolean_funcs(prop, NULL, "rna_Sequence_use_color_balance_set"); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "color_balance", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "strip->color_balance"); RNA_def_property_ui_text(prop, "Color Balance", ""); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); prop= RNA_def_property(srna, "use_translation", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_USE_TRANSFORM); RNA_def_property_ui_text(prop, "Use Translation", "Translate image before processing."); - RNA_def_property_boolean_funcs(prop, NULL, "rna_SequenceEditor_use_translation_set"); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_boolean_funcs(prop, NULL, "rna_Sequence_use_translation_set"); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "transform", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "strip->transform"); RNA_def_property_ui_text(prop, "Transform", ""); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); prop= RNA_def_property(srna, "use_crop", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_USE_CROP); RNA_def_property_ui_text(prop, "Use Crop", "Crop image before processing."); - RNA_def_property_boolean_funcs(prop, NULL, "rna_SequenceEditor_use_crop_set"); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_boolean_funcs(prop, NULL, "rna_Sequence_use_crop_set"); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "crop", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "strip->crop"); RNA_def_property_ui_text(prop, "Crop", ""); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); } static void rna_def_proxy(StructRNA *srna) @@ -668,7 +813,7 @@ static void rna_def_proxy(StructRNA *srna) prop= RNA_def_property(srna, "use_proxy", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_USE_PROXY); RNA_def_property_ui_text(prop, "Use Proxy", "Use a preview proxy for this strip."); - RNA_def_property_boolean_funcs(prop, NULL, "rna_SequenceEditor_use_proxy_set"); + RNA_def_property_boolean_funcs(prop, NULL, "rna_Sequence_use_proxy_set"); prop= RNA_def_property(srna, "proxy", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "strip->proxy"); @@ -677,6 +822,7 @@ static void rna_def_proxy(StructRNA *srna) prop= RNA_def_property(srna, "proxy_custom_directory", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_USE_PROXY_CUSTOM_DIR); RNA_def_property_ui_text(prop, "Proxy Custom Directory", "Use a custom directory to store data."); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); } static void rna_def_input(StructRNA *srna) @@ -687,13 +833,13 @@ static void rna_def_input(StructRNA *srna) RNA_def_property_int_sdna(prop, NULL, "anim_startofs"); RNA_def_property_clear_flag(prop, PROP_EDITABLE); // overlap test RNA_def_property_ui_text(prop, "Animation Start Offset", "Animation start offset (trim start)."); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "animation_end_offset", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "anim_endofs"); RNA_def_property_clear_flag(prop, PROP_EDITABLE); // overlap test RNA_def_property_ui_text(prop, "Animation End Offset", "Animation end offset (trim end)."); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); } static void rna_def_image(BlenderRNA *brna) @@ -708,13 +854,13 @@ static void rna_def_image(BlenderRNA *brna) prop= RNA_def_property(srna, "directory", PROP_STRING, PROP_DIRPATH); RNA_def_property_string_sdna(prop, NULL, "strip->dir"); RNA_def_property_ui_text(prop, "Directory", ""); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "elements", PROP_COLLECTION, PROP_NONE); RNA_def_property_collection_sdna(prop, NULL, "strip->stripdata", "strip->len"); RNA_def_property_struct_type(prop, "SequenceElement"); RNA_def_property_ui_text(prop, "Elements", ""); - rna_def_filter_video(srna); rna_def_proxy(srna); rna_def_input(srna); @@ -751,7 +897,7 @@ static void rna_def_scene(BlenderRNA *brna) prop= RNA_def_property(srna, "scene", PROP_POINTER, PROP_NONE); RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Scene", "Scene that this sequence uses."); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); rna_def_filter_video(srna); rna_def_proxy(srna); @@ -771,15 +917,18 @@ static void rna_def_movie(BlenderRNA *brna) RNA_def_property_int_sdna(prop, NULL, "anim_preseek"); RNA_def_property_range(prop, 0, 50); RNA_def_property_ui_text(prop, "MPEG Preseek", "For MPEG movies, preseek this many frames."); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "filename", PROP_STRING, PROP_FILEPATH); RNA_def_property_string_sdna(prop, NULL, "strip->stripdata->name"); RNA_def_property_ui_text(prop, "Filename", ""); RNA_def_property_string_funcs(prop, NULL, NULL, "rna_MovieSequence_filename_set"); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "directory", PROP_STRING, PROP_DIRPATH); RNA_def_property_string_sdna(prop, NULL, "strip->dir"); RNA_def_property_ui_text(prop, "Directory", ""); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); rna_def_filter_video(srna); rna_def_proxy(srna); @@ -798,15 +947,18 @@ static void rna_def_sound(BlenderRNA *brna) prop= RNA_def_property(srna, "sound", PROP_POINTER, PROP_NONE); RNA_def_property_struct_type(prop, "Sound"); RNA_def_property_ui_text(prop, "Sound", "Sound datablock used by this sequence."); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "filename", PROP_STRING, PROP_FILEPATH); RNA_def_property_string_sdna(prop, NULL, "strip->stripdata->name"); RNA_def_property_ui_text(prop, "Filename", ""); RNA_def_property_string_funcs(prop, NULL, NULL, "rna_SoundSequence_filename_set"); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "directory", PROP_STRING, PROP_DIRPATH); RNA_def_property_string_sdna(prop, NULL, "strip->dir"); RNA_def_property_ui_text(prop, "Directory", ""); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); rna_def_input(srna); @@ -816,7 +968,7 @@ static void rna_def_sound(BlenderRNA *brna) RNA_def_property_float_sdna(prop, NULL, "volume"); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Volume", "Playback volume of the sound"); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); } static void rna_def_effect(BlenderRNA *brna) @@ -843,6 +995,7 @@ static void rna_def_plugin(BlenderRNA *brna) RNA_def_property_string_sdna(prop, NULL, "name"); RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Filename", ""); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); /* plugin properties need custom wrapping code like ID properties */ } @@ -876,25 +1029,25 @@ static void rna_def_wipe(BlenderRNA *brna) RNA_def_property_float_sdna(prop, NULL, "edgeWidth"); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Blur Width", "Width of the blur edge, in percentage relative to the image size."); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "angle", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "angle"); RNA_def_property_range(prop, -90.0f, 90.0f); RNA_def_property_ui_text(prop, "Angle", "Edge angle."); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "direction", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "forward"); RNA_def_property_enum_items(prop, wipe_direction_items); RNA_def_property_ui_text(prop, "Direction", "Wipe direction."); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "transition_type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "wipetype"); RNA_def_property_enum_items(prop, wipe_type_items); RNA_def_property_ui_text(prop, "Transition Type", ""); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); } static void rna_def_glow(BlenderRNA *brna) @@ -910,36 +1063,36 @@ static void rna_def_glow(BlenderRNA *brna) RNA_def_property_float_sdna(prop, NULL, "fMini"); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Threshold", "Minimum intensity to trigger a glow"); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "clamp", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "fClamp"); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Clamp", "rightness limit of intensity."); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "boost_factor", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "fBoost"); RNA_def_property_range(prop, 0.0f, 10.0f); RNA_def_property_ui_text(prop, "Boost Factor", "Brightness multiplier."); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "blur_distance", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "dDist"); RNA_def_property_range(prop, 0.5f, 20.0f); RNA_def_property_ui_text(prop, "Blur Distance", "Radius of glow effect."); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "quality", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "dQuality"); RNA_def_property_range(prop, 1, 5); RNA_def_property_ui_text(prop, "Quality", "Accuracy of the blur effect."); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "only_boost", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "bNoComp", 0); RNA_def_property_ui_text(prop, "Only Boost", "Show the glow buffer only."); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); } static void rna_def_transform(BlenderRNA *brna) @@ -966,81 +1119,58 @@ static void rna_def_transform(BlenderRNA *brna) prop= RNA_def_property(srna, "scale_start_x", PROP_FLOAT, PROP_UNSIGNED); RNA_def_property_float_sdna(prop, NULL, "ScalexIni"); - RNA_def_property_ui_text(prop, "Scale Start X", ""); + RNA_def_property_ui_text(prop, "Scale X", ""); RNA_def_property_ui_range(prop, 0, 10, 3, 10); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "scale_start_y", PROP_FLOAT, PROP_UNSIGNED); RNA_def_property_float_sdna(prop, NULL, "ScaleyIni"); - RNA_def_property_ui_text(prop, "Scale Start Y", ""); + RNA_def_property_ui_text(prop, "Scale Y", ""); RNA_def_property_ui_range(prop, 0, 10, 3, 10); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); - prop= RNA_def_property(srna, "scale_end_x", PROP_FLOAT, PROP_UNSIGNED); - RNA_def_property_float_sdna(prop, NULL, "ScalexFin"); - RNA_def_property_ui_text(prop, "Scale End X", ""); - RNA_def_property_ui_range(prop, 0, 10, 3, 10); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); - - prop= RNA_def_property(srna, "scale_end_y", PROP_FLOAT, PROP_UNSIGNED); - RNA_def_property_float_sdna(prop, NULL, "ScaleyFin"); - RNA_def_property_ui_text(prop, "Scale End Y", ""); - RNA_def_property_ui_range(prop, 0, 10, 3, 10); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + prop= RNA_def_property(srna, "uniform_scale", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "uniform_scale", 0); + RNA_def_property_ui_text(prop, "Uniform Scale", "Scale uniformly, preserving aspect ratio."); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "translate_start_x", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "xIni"); - RNA_def_property_ui_text(prop, "Translate Start X", ""); + RNA_def_property_ui_text(prop, "Translate X", ""); RNA_def_property_ui_range(prop, -500.0f, 500.0f, 3, 10); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "translate_start_y", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "yIni"); - RNA_def_property_ui_text(prop, "Translate Start Y", ""); + RNA_def_property_ui_text(prop, "Translate Y", ""); RNA_def_property_ui_range(prop, -500.0f, 500.0f, 3, 10); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); - - prop= RNA_def_property(srna, "translate_end_x", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "xFin"); - RNA_def_property_ui_text(prop, "Translate End X", ""); - RNA_def_property_ui_range(prop, -500.0f, 500.0f, 3, 10); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); - - prop= RNA_def_property(srna, "translate_end_y", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "yFin"); - RNA_def_property_ui_text(prop, "Translate End Y", ""); - RNA_def_property_ui_range(prop, -500.0f, 500.0f, 3, 10); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "rotation_start", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "rotIni"); - RNA_def_property_range(prop, 0.0f, 360.0f); - RNA_def_property_ui_text(prop, "Rotation Start", ""); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); - - prop= RNA_def_property(srna, "rotation_end", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "rotFin"); - RNA_def_property_range(prop, 0.0f, 360.0f); - RNA_def_property_ui_text(prop, "Rotation End", ""); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_range(prop, -360.0f, 360.0f); + RNA_def_property_ui_text(prop, "Rotation", ""); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "translation_unit", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "percent"); + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); /* not meant to be animated */ RNA_def_property_enum_items(prop, translation_unit_items); RNA_def_property_ui_text(prop, "Translation Unit", ""); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "interpolation", PROP_ENUM, PROP_NONE); RNA_def_property_enum_items(prop, interpolation_items); + RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); /* not meant to be animated */ RNA_def_property_ui_text(prop, "Interpolation", ""); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); } static void rna_def_solid_color(BlenderRNA *brna) { StructRNA *srna; PropertyRNA *prop; - + srna = RNA_def_struct(brna, "ColorSequence", "EffectSequence"); RNA_def_struct_ui_text(srna, "Color Sequence", "Sequence strip creating an image filled with a single color."); RNA_def_struct_sdna_from(srna, "SolidColorVars", "effectdata"); @@ -1048,7 +1178,7 @@ static void rna_def_solid_color(BlenderRNA *brna) prop= RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "col"); RNA_def_property_ui_text(prop, "Color", ""); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); } static void rna_def_speed_control(BlenderRNA *brna) @@ -1065,21 +1195,25 @@ static void rna_def_speed_control(BlenderRNA *brna) RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); /* seq->facf0 is used to animate this */ RNA_def_property_ui_text(prop, "Global Speed", ""); RNA_def_property_ui_range(prop, 0.0f, 100.0f, 1, 0); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "curve_velocity", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flags", SEQ_SPEED_INTEGRATE); RNA_def_property_ui_text(prop, "F-Curve Velocity", "Interpret the F-Curve value as a velocity instead of a frame number."); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "frame_blending", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flags", SEQ_SPEED_BLEND); RNA_def_property_ui_text(prop, "Frame Blending", "Blend two frames into the target for a smoother result."); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop= RNA_def_property(srna, "curve_compress_y", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flags", SEQ_SPEED_COMPRESS_IPO_Y); RNA_def_property_ui_text(prop, "F-Curve Compress Y", "Scale F-Curve value to get the target frame number, F-Curve value runs from 0.0 to 1.0."); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); } -void RNA_def_sequence(BlenderRNA *brna) +void RNA_def_sequencer(BlenderRNA *brna) { rna_def_strip_element(brna); rna_def_strip_proxy(brna); diff --git a/source/blender/makesrna/intern/rna_smoke.c b/source/blender/makesrna/intern/rna_smoke.c index e302ea90a8a..11b1e80865e 100644 --- a/source/blender/makesrna/intern/rna_smoke.c +++ b/source/blender/makesrna/intern/rna_smoke.c @@ -49,33 +49,33 @@ #include "ED_object.h" -static void rna_Smoke_update(bContext *C, PointerRNA *ptr) +static void rna_Smoke_update(Main *bmain, Scene *scene, PointerRNA *ptr) { DAG_id_flush_update(ptr->id.data, OB_RECALC_DATA); } -static void rna_Smoke_dependency_update(bContext *C, PointerRNA *ptr) +static void rna_Smoke_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr) { - rna_Smoke_update(C, ptr); - DAG_scene_sort(CTX_data_scene(C)); + rna_Smoke_update(bmain, scene, ptr); + DAG_scene_sort(scene); } -static void rna_Smoke_reset(bContext *C, PointerRNA *ptr) +static void rna_Smoke_reset(Main *bmain, Scene *scene, PointerRNA *ptr) { SmokeDomainSettings *settings = (SmokeDomainSettings*)ptr->data; smokeModifier_reset(settings->smd); - rna_Smoke_update(C, ptr); + rna_Smoke_update(bmain, scene, ptr); } -static void rna_Smoke_reset_dependancy(bContext *C, PointerRNA *ptr) +static void rna_Smoke_reset_dependancy(Main *bmain, Scene *scene, PointerRNA *ptr) { SmokeDomainSettings *settings = (SmokeDomainSettings*)ptr->data; smokeModifier_reset(settings->smd); - rna_Smoke_dependency_update(C, ptr); + rna_Smoke_dependency_update(bmain, scene, ptr); } static char *rna_SmokeDomainSettings_path(PointerRNA *ptr) diff --git a/source/blender/makesrna/intern/rna_sound.c b/source/blender/makesrna/intern/rna_sound.c index 38e4d850c68..7fc209bfc5f 100644 --- a/source/blender/makesrna/intern/rna_sound.c +++ b/source/blender/makesrna/intern/rna_sound.c @@ -37,9 +37,9 @@ #include "BKE_sound.h" #include "BKE_context.h" -static void rna_Sound_filename_update(bContext *C, PointerRNA *ptr) +static void rna_Sound_filename_update(Main *bmain, Scene *scene, PointerRNA *ptr) { - sound_load(CTX_data_main(C), (bSound*)ptr->data); + sound_load(bmain, (bSound*)ptr->data); } static int rna_Sound_caching_get(PointerRNA *ptr) diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index c10f3f74fd8..2fd0bf1810a 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -83,6 +83,13 @@ static EnumPropertyItem transform_orientation_items[] = { {V3D_MANIP_CUSTOM, "CUSTOM", 0, "Custom", "Use a custom transform orientation"}, {0, NULL, 0, NULL, NULL}}; +EnumPropertyItem autosnap_items[] = { + {SACTSNAP_OFF, "NONE", 0, "No Auto-Snap", ""}, + {SACTSNAP_STEP, "STEP", 0, "Time Step", "Snap to 1.0 frame/second intervals."}, + {SACTSNAP_FRAME, "FRAME", 0, "Nearest Frame", "Snap to actual frames/seconds (nla-action time)."}, + {SACTSNAP_MARKER, "MARKER", 0, "Nearest Marker", "Snap to nearest marker."}, + {0, NULL, 0, NULL, NULL}}; + #ifdef RNA_RUNTIME #include "DNA_anim_types.h" @@ -99,6 +106,7 @@ static EnumPropertyItem transform_orientation_items[] = { #include "ED_image.h" #include "ED_screen.h" #include "ED_view3d.h" +#include "ED_sequencer.h" #include "IMB_imbuf_types.h" @@ -242,12 +250,9 @@ static PointerRNA rna_SpaceImageEditor_uvedit_get(PointerRNA *ptr) return rna_pointer_inherit_refine(ptr, &RNA_SpaceUVEditor, ptr->data); } -static void rna_SpaceImageEditor_paint_update(bContext *C, PointerRNA *ptr) +static void rna_SpaceImageEditor_paint_update(Main *bmain, Scene *scene, PointerRNA *ptr) { - Scene *scene= CTX_data_scene(C); - - if(scene) - paint_init(&scene->toolsettings->imapaint.paint, PAINT_CURSOR_TEXTURE_PAINT); + paint_init(&scene->toolsettings->imapaint.paint, PAINT_CURSOR_TEXTURE_PAINT); } static int rna_SpaceImageEditor_show_render_get(PointerRNA *ptr) @@ -315,7 +320,7 @@ static EnumPropertyItem *rna_SpaceImageEditor_draw_channels_itemf(bContext *C, P return item; } -static void rna_SpaceImageEditor_curves_update(bContext *C, PointerRNA *ptr) +static void rna_SpaceImageEditor_curves_update(Main *bmain, Scene *scene, PointerRNA *ptr) { SpaceImage *sima= (SpaceImage*)ptr->data; ImBuf *ibuf; @@ -325,7 +330,7 @@ static void rna_SpaceImageEditor_curves_update(bContext *C, PointerRNA *ptr) curvemapping_do_ibuf(sima->cumap, ibuf); ED_space_image_release_buffer(sima, lock); - WM_event_add_notifier(C, NC_IMAGE, sima->image); + WM_main_add_notifier(NC_IMAGE, sima->image); } @@ -425,10 +430,12 @@ static void rna_View3D_display_background_image_set(PointerRNA *ptr, int value) /* Space Time */ -static void rna_SpaceTime_redraw_update(bContext *C, PointerRNA *ptr) +static void rna_SpaceTime_redraw_update(Main *bmain, Scene *scene, PointerRNA *ptr) { SpaceTime *st= (SpaceTime*)ptr->data; - ED_screen_animation_timer_update(C, st->redraws); + bScreen *screen= (bScreen*)ptr->id.data; + + ED_screen_animation_timer_update(screen, st->redraws); } /* Space Dopesheet */ @@ -439,10 +446,10 @@ static void rna_SpaceDopeSheetEditor_action_set(PointerRNA *ptr, PointerRNA valu saction->action= value.data; } -static void rna_SpaceDopeSheetEditor_action_update(bContext *C, PointerRNA *ptr) +static void rna_SpaceDopeSheetEditor_action_update(Main *bmain, Scene *scene, PointerRNA *ptr) { SpaceAction *saction= (SpaceAction*)(ptr->data); - Object *obact= CTX_data_active_object(C); + Object *obact= (scene->basact)? scene->basact->object: NULL; /* we must set this action to be the one used by active object (if not pinned) */ if(obact && saction->pin == 0) { @@ -457,6 +464,32 @@ static void rna_SpaceDopeSheetEditor_action_update(bContext *C, PointerRNA *ptr) } } +static void rna_SpaceDopeSheetEditor_mode_update(Main *bmain, Scene *scene, PointerRNA *ptr) +{ + SpaceAction *saction= (SpaceAction*)(ptr->data); + + /* special exception for ShapeKey Editor mode: + * enable 'show sliders' by default, since one of the main + * points of the ShapeKey Editor is to provide a one-stop shop + * for controlling the shapekeys, whose main control is the value + */ + if (saction->mode == SACTCONT_SHAPEKEY) + saction->flag |= SACTION_SLIDERS; +} + +static int rna_SpaceGraphEditor_has_ghost_curves_get(PointerRNA *ptr) +{ + SpaceIpo *sipo= (SpaceIpo*)(ptr->data); + return (sipo->ghostCurves.first != NULL); +} + +static void rna_Sequencer_display_mode_update(bContext *C, PointerRNA *ptr) +{ + int view = RNA_int_get(ptr, "view_type"); + + ED_sequencer_update_view(C, view); +} + #else static void rna_def_space(BlenderRNA *brna) @@ -1017,7 +1050,6 @@ static void rna_def_space_image(BlenderRNA *brna) /* update */ prop= RNA_def_property(srna, "update_automatically", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "lock", 0); - RNA_def_property_ui_icon(prop, ICON_UNLOCKED, 1); RNA_def_property_ui_text(prop, "Update Automatically", "Update other affected window spaces automatically to reflect changes during interactive operations such as transform."); /* state */ @@ -1044,8 +1076,13 @@ static void rna_def_space_sequencer(BlenderRNA *brna) StructRNA *srna; PropertyRNA *prop; + static EnumPropertyItem view_type_items[] = { + {SEQ_VIEW_SEQUENCE, "SEQUENCER", ICON_SEQ_SEQUENCER, "Sequencer", ""}, + {SEQ_VIEW_PREVIEW, "PREVIEW", ICON_SEQ_PREVIEW, "Image Preview", ""}, + {SEQ_VIEW_SEQUENCE_PREVIEW, "SEQUENCER_PREVIEW", ICON_SEQ_SEQUENCER, "Sequencer and Image Preview", ""}, + {0, NULL, 0, NULL, NULL}}; + static EnumPropertyItem display_mode_items[] = { - {SEQ_DRAW_SEQUENCE, "SEQUENCER", ICON_SEQ_SEQUENCER, "Sequencer", ""}, {SEQ_DRAW_IMG_IMBUF, "IMAGE", ICON_SEQ_PREVIEW, "Image Preview", ""}, {SEQ_DRAW_IMG_WAVEFORM, "WAVEFORM", ICON_SEQ_LUMA_WAVEFORM, "Luma Waveform", ""}, {SEQ_DRAW_IMG_VECTORSCOPE, "VECTOR_SCOPE", ICON_SEQ_CHROMA_SCOPE, "Chroma Vectorscope", ""}, @@ -1056,6 +1093,14 @@ static void rna_def_space_sequencer(BlenderRNA *brna) RNA_def_struct_sdna(srna, "SpaceSeq"); RNA_def_struct_ui_text(srna, "Space Sequence Editor", "Sequence editor space data."); + /* view type, fairly important */ + prop= RNA_def_property(srna, "view_type", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "view"); + RNA_def_property_enum_items(prop, view_type_items); + RNA_def_property_ui_text(prop, "View Type", "The type of the Sequencere view (sequencer, preview or both)."); + RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE); + RNA_def_property_update(prop, 0, "rna_Sequencer_display_mode_update"); + /* display type, fairly important */ prop= RNA_def_property(srna, "display_mode", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "mainb"); @@ -1104,7 +1149,7 @@ static void rna_def_space_sequencer(BlenderRNA *brna) prop= RNA_def_property(srna, "display_channel", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "chanshown"); RNA_def_property_ui_text(prop, "Display Channel", "The channel number shown in the image preview. 0 is the result of all strips combined."); - RNA_def_property_range(prop, 0, 32); // MAXSEQ --- todo, move from BKE_sequence.h + RNA_def_property_range(prop, 0, 32); // MAXSEQ --- todo, move from BKE_sequencer.h RNA_def_property_update(prop, NC_SPACE|ND_SPACE_SEQUENCER, NULL); prop= RNA_def_property(srna, "draw_overexposed", PROP_INT, PROP_NONE); @@ -1238,7 +1283,7 @@ static void rna_def_space_dopesheet(BlenderRNA *brna) RNA_def_property_enum_sdna(prop, NULL, "mode"); RNA_def_property_enum_items(prop, mode_items); RNA_def_property_ui_text(prop, "Mode", "Editing context being displayed."); - RNA_def_property_update(prop, NC_SPACE|ND_SPACE_DOPESHEET, NULL); + RNA_def_property_update(prop, NC_SPACE|ND_SPACE_DOPESHEET, "rna_SpaceDopeSheetEditor_mode_update"); /* display */ prop= RNA_def_property(srna, "show_seconds", PROP_BOOLEAN, PROP_NONE); @@ -1262,8 +1307,19 @@ static void rna_def_space_dopesheet(BlenderRNA *brna) RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SACTION_NOTRANSKEYCULL); RNA_def_property_ui_text(prop, "AutoMerge Keyframes", "Show handles of Bezier control points."); RNA_def_property_update(prop, NC_SPACE|ND_SPACE_DOPESHEET, NULL); - - // TODO... autosnap, dopesheet? + + /* dopesheet */ + prop= RNA_def_property(srna, "dopesheet", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "DopeSheet"); + RNA_def_property_pointer_sdna(prop, NULL, "ads"); + RNA_def_property_ui_text(prop, "DopeSheet", "Settings for filtering animation data."); + + /* autosnap */ + prop= RNA_def_property(srna, "autosnap", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "autosnap"); + RNA_def_property_enum_items(prop, autosnap_items); + RNA_def_property_ui_text(prop, "Auto Snap", "Automatic time snapping settings for transformations."); + RNA_def_property_update(prop, NC_SPACE|ND_SPACE_DOPESHEET, NULL); } static void rna_def_space_graph(BlenderRNA *brna) @@ -1272,19 +1328,19 @@ static void rna_def_space_graph(BlenderRNA *brna) PropertyRNA *prop; static EnumPropertyItem mode_items[] = { - {SIPO_MODE_ANIMATION, "FCURVES", 0, "F-Curves", ""}, + {SIPO_MODE_ANIMATION, "FCURVES", 0, "F-Curve Editor", ""}, {SIPO_MODE_DRIVERS, "DRIVERS", 0, "Drivers", ""}, {0, NULL, 0, NULL, NULL}}; /* this is basically the same as the one for the 3D-View, but with some entries ommitted */ static EnumPropertyItem gpivot_items[] = { - {V3D_CENTER, "BOUNDING_BOX_CENTER", 0, "Bounding Box Center", ""}, - {V3D_CURSOR, "CURSOR", 0, "2D Cursor", ""}, - {V3D_LOCAL, "INDIVIDUAL_CENTERS", 0, "Individual Centers", ""}, + {V3D_CENTER, "BOUNDING_BOX_CENTER", ICON_ROTATE, "Bounding Box Center", ""}, + {V3D_CURSOR, "CURSOR", ICON_CURSOR, "2D Cursor", ""}, + {V3D_LOCAL, "INDIVIDUAL_ORIGINS", ICON_ROTATECOLLECTION, "Individual Centers", ""}, //{V3D_CENTROID, "MEDIAN_POINT", 0, "Median Point", ""}, //{V3D_ACTIVE, "ACTIVE_ELEMENT", 0, "Active Element", ""}, {0, NULL, 0, NULL, NULL}}; - + srna= RNA_def_struct(brna, "SpaceGraphEditor", "Space"); RNA_def_struct_sdna(srna, "SpaceIpo"); @@ -1315,7 +1371,7 @@ static void rna_def_space_graph(BlenderRNA *brna) RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL); prop= RNA_def_property(srna, "show_handles", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", SIPO_NOHANDLES); + RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SIPO_NOHANDLES); RNA_def_property_ui_text(prop, "Show Handles", "Show handles of Bezier control points."); RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL); @@ -1351,8 +1407,26 @@ static void rna_def_space_graph(BlenderRNA *brna) RNA_def_property_enum_items(prop, gpivot_items); RNA_def_property_ui_text(prop, "Pivot Point", "Pivot center for rotation/scaling."); RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL); + + /* dopesheet */ + prop= RNA_def_property(srna, "dopesheet", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "DopeSheet"); + RNA_def_property_pointer_sdna(prop, NULL, "ads"); + RNA_def_property_ui_text(prop, "DopeSheet", "Settings for filtering animation data."); + + /* autosnap */ + prop= RNA_def_property(srna, "autosnap", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "autosnap"); + RNA_def_property_enum_items(prop, autosnap_items); + RNA_def_property_ui_text(prop, "Auto Snap", "Automatic time snapping settings for transformations."); + RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL); - // TODO... autosnap, dopesheet? + /* readonly state info */ + prop= RNA_def_property(srna, "has_ghost_curves", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", 0); /* XXX: hack to make this compile, since this property doesn't actually exist*/ + RNA_def_property_boolean_funcs(prop, "rna_SpaceGraphEditor_has_ghost_curves_get", NULL); + RNA_def_property_ui_text(prop, "Has Ghost Curves", "Graph Editor instance has some ghost curves stored."); + RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL); } static void rna_def_space_nla(BlenderRNA *brna) @@ -1380,9 +1454,19 @@ static void rna_def_space_nla(BlenderRNA *brna) RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SNLA_NOSTRIPCURVES); RNA_def_property_ui_text(prop, "Show Control Curves", "Show influence curves on strips."); RNA_def_property_update(prop, NC_SPACE|ND_SPACE_NLA, NULL); - - /* editing */ - // TODO... autosnap, dopesheet? + + /* dopesheet */ + prop= RNA_def_property(srna, "dopesheet", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "DopeSheet"); + RNA_def_property_pointer_sdna(prop, NULL, "ads"); + RNA_def_property_ui_text(prop, "DopeSheet", "Settings for filtering animation data."); + + /* autosnap */ + prop= RNA_def_property(srna, "autosnap", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "autosnap"); + RNA_def_property_enum_items(prop, autosnap_items); + RNA_def_property_ui_text(prop, "Auto Snap", "Automatic time snapping settings for transformations."); + RNA_def_property_update(prop, NC_SPACE|ND_SPACE_NLA, NULL); } static void rna_def_space_time(BlenderRNA *brna) @@ -1395,7 +1479,6 @@ static void rna_def_space_time(BlenderRNA *brna) RNA_def_struct_ui_text(srna, "Space Timeline Editor", "Timeline editor space data."); /* Define Anim Playback Areas */ - prop= RNA_def_property(srna, "play_top_left", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "redraws", TIME_REGION); RNA_def_property_ui_text(prop, "Top-Left 3D Window", ""); @@ -1431,17 +1514,16 @@ static void rna_def_space_time(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Node Windows", ""); RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, "rna_SpaceTime_redraw_update"); - /* Other options */ - - prop= RNA_def_property(srna, "continue_physics", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "redraws", TIME_CONTINUE_PHYSICS); - RNA_def_property_ui_text(prop, "Continue Physics", "During playblack, continue physics simulations regardless of the frame number"); - RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, NULL); - + /* Other options */ prop= RNA_def_property(srna, "only_selected", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", TIME_ONLYACTSEL); RNA_def_property_ui_text(prop, "Only Selected channels", "Show keyframes only from active/selected channels."); RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, NULL); + + prop= RNA_def_property(srna, "show_cframe_indicator", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", TIME_CFRA_NUM); + RNA_def_property_ui_text(prop, "Show Frame Number Indicator", "Show frame number beside the current frame indicator line."); + RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, NULL); } static void rna_def_console_line(BlenderRNA *brna) diff --git a/source/blender/makesrna/intern/rna_texture.c b/source/blender/makesrna/intern/rna_texture.c index be38139ce4e..19d33465ceb 100644 --- a/source/blender/makesrna/intern/rna_texture.c +++ b/source/blender/makesrna/intern/rna_texture.c @@ -106,21 +106,21 @@ static StructRNA *rna_Texture_refine(struct PointerRNA *ptr) } } -static void rna_Texture_update(bContext *C, PointerRNA *ptr) +static void rna_Texture_update(Main *bmain, Scene *scene, PointerRNA *ptr) { Tex *tex= ptr->id.data; DAG_id_flush_update(&tex->id, 0); - WM_event_add_notifier(C, NC_TEXTURE, tex); + WM_main_add_notifier(NC_TEXTURE, tex); } /* Used for Texture Properties, used (also) for/in Nodes */ -static void rna_Texture_nodes_update(bContext *C, PointerRNA *ptr) +static void rna_Texture_nodes_update(Main *bmain, Scene *scene, PointerRNA *ptr) { Tex *tex= ptr->id.data; DAG_id_flush_update(&tex->id, 0); - WM_event_add_notifier(C, NC_TEXTURE|ND_NODES, tex); + WM_main_add_notifier(NC_TEXTURE|ND_NODES, tex); } static void rna_Texture_type_set(PointerRNA *ptr, int value) @@ -140,7 +140,7 @@ static void rna_Texture_type_set(PointerRNA *ptr, int value) tex->type = value; } -void rna_TextureSlot_update(bContext *C, PointerRNA *ptr) +void rna_TextureSlot_update(Main *bmain, Scene *scene, PointerRNA *ptr) { ID *id= ptr->id.data; @@ -148,16 +148,16 @@ void rna_TextureSlot_update(bContext *C, PointerRNA *ptr) switch(GS(id->name)) { case ID_MA: - WM_event_add_notifier(C, NC_MATERIAL|ND_SHADING, id); + WM_main_add_notifier(NC_MATERIAL|ND_SHADING, id); break; case ID_WO: - WM_event_add_notifier(C, NC_WORLD, id); + WM_main_add_notifier(NC_WORLD, id); break; case ID_LA: - WM_event_add_notifier(C, NC_LAMP|ND_LIGHTING, id); + WM_main_add_notifier(NC_LAMP|ND_LIGHTING, id); break; case ID_BR: - WM_event_add_notifier(C, NC_BRUSH, id); + WM_main_add_notifier(NC_BRUSH, id); break; } } diff --git a/source/blender/makesrna/intern/rna_ui.c b/source/blender/makesrna/intern/rna_ui.c index 1bb7fe720a6..d33e96df2e6 100644 --- a/source/blender/makesrna/intern/rna_ui.c +++ b/source/blender/makesrna/intern/rna_ui.c @@ -145,7 +145,7 @@ static void rna_Panel_unregister(const bContext *C, StructRNA *type) /* update while blender is running */ if(C) - WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL); + WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL); } static StructRNA *rna_Panel_register(const bContext *C, ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free) @@ -196,7 +196,7 @@ static StructRNA *rna_Panel_register(const bContext *C, ReportList *reports, voi /* update while blender is running */ if(C) - WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL); + WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL); return pt->ext.srna; } @@ -242,7 +242,7 @@ static void rna_Header_unregister(const bContext *C, StructRNA *type) /* update while blender is running */ if(C) - WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL); + WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL); } static StructRNA *rna_Header_register(const bContext *C, ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free) @@ -289,7 +289,7 @@ static StructRNA *rna_Header_register(const bContext *C, ReportList *reports, vo /* update while blender is running */ if(C) - WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL); + WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL); return ht->ext.srna; } @@ -356,7 +356,7 @@ static void rna_Menu_unregister(const bContext *C, StructRNA *type) /* update while blender is running */ if(C) - WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL); + WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL); } static StructRNA *rna_Menu_register(const bContext *C, ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free) @@ -396,7 +396,7 @@ static StructRNA *rna_Menu_register(const bContext *C, ReportList *reports, void /* update while blender is running */ if(C) - WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL); + WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL); return mt->ext.srna; } diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c index e15cc130899..67383074497 100644 --- a/source/blender/makesrna/intern/rna_ui_api.c +++ b/source/blender/makesrna/intern/rna_ui_api.c @@ -37,7 +37,7 @@ #ifdef RNA_RUNTIME -static void rna_uiItemR(uiLayout *layout, char *name, int icon, PointerRNA *ptr, char *propname, int expand, int slider, int toggle, int icon_only, int event, int full_event, int index) +static void rna_uiItemR(uiLayout *layout, char *name, int icon, PointerRNA *ptr, char *propname, int expand, int slider, int toggle, int icon_only, int event, int full_event, int no_bg, int index) { PropertyRNA *prop= RNA_struct_find_property(ptr, propname); int flag= 0; @@ -53,6 +53,7 @@ static void rna_uiItemR(uiLayout *layout, char *name, int icon, PointerRNA *ptr, flag |= (icon_only)? UI_ITEM_R_ICON_ONLY: 0; flag |= (event)? UI_ITEM_R_EVENT: 0; flag |= (full_event)? UI_ITEM_R_FULL_EVENT: 0; + flag |= (no_bg)? UI_ITEM_R_NO_BG: 0; uiItemFullR(layout, name, icon, ptr, prop, index, 0, flag); } @@ -64,7 +65,7 @@ static PointerRNA rna_uiItemO(uiLayout *layout, char *name, int icon, char *opna #else -#define DEF_ICON(name) {name, #name, 0, #name, ""}, +#define DEF_ICON(name) {name, (#name)+5, 0, (#name)+5, ""}, static EnumPropertyItem icon_items[] = { #include "UI_icons.h" {0, NULL, 0, NULL, NULL}}; @@ -145,6 +146,7 @@ void RNA_api_ui_layout(StructRNA *srna) parm= RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in."); RNA_def_function_return(func, parm); RNA_def_float(func, "percentage", 0.0f, 0.0f, 1.0f, "Percentage", "Percentage of width to split at.", 0.0f, 1.0f); + RNA_def_boolean(func, "align", 0, "", "Align buttons to each other."); /* items */ func= RNA_def_function(srna, "prop", "rna_uiItemR"); @@ -156,6 +158,7 @@ void RNA_api_ui_layout(StructRNA *srna) RNA_def_boolean(func, "icon_only", 0, "", "Draw only icons in buttons, no text."); RNA_def_boolean(func, "event", 0, "", "Use button to input key events."); RNA_def_boolean(func, "full_event", 0, "", "Use button to input full events including modifiers."); + RNA_def_boolean(func, "no_bg", 0, "", "Don't draw the button itself, just the icon/text."); RNA_def_int(func, "index", -1, -2, INT_MAX, "", "The index of this button, when set a single member of an array can be accessed, when set to -1 all array members are used.", -2, INT_MAX); /* RNA_NO_INDEX == -1 */ func= RNA_def_function(srna, "props_enum", "uiItemsEnumR"); @@ -248,12 +251,17 @@ void RNA_api_ui_layout(StructRNA *srna) RNA_def_property_flag(parm, PROP_REQUIRED); parm= RNA_def_pointer(func, "data", "AnyType", "", "Pointer to put in context."); RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR); - + /* templates */ func= RNA_def_function(srna, "template_header", "uiTemplateHeader"); RNA_def_function_flag(func, FUNC_USE_CONTEXT); RNA_def_boolean(func, "menus", 1, "", "The header has menus, and should show menu expander."); + func= RNA_def_function(srna, "template_dopesheet_filter", "uiTemplateDopeSheetFilter"); + RNA_def_function_flag(func, FUNC_USE_CONTEXT); + parm= RNA_def_pointer(func, "dopesheet", "DopeSheet", "", "DopeSheet settings holding filter options."); + RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR|PROP_NEVER_NULL); + func= RNA_def_function(srna, "template_ID", "uiTemplateID"); RNA_def_function_flag(func, FUNC_USE_CONTEXT); api_ui_item_rna_common(func); diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c index 278d7855f3a..9b314afeb08 100644 --- a/source/blender/makesrna/intern/rna_userdef.c +++ b/source/blender/makesrna/intern/rna_userdef.c @@ -48,9 +48,9 @@ #include "DNA_object_types.h" // #include "GPU_draw.h" -static void rna_userdef_update(bContext *C, PointerRNA *ptr) +static void rna_userdef_update(Main *bmain, Scene *scene, PointerRNA *ptr) { - WM_event_add_notifier(C, NC_WINDOW, NULL); + WM_main_add_notifier(NC_WINDOW, NULL); } #if 0 @@ -132,14 +132,13 @@ static PointerRNA rna_UserDef_system_get(PointerRNA *ptr) return rna_pointer_inherit_refine(ptr, &RNA_UserPreferencesSystem, ptr->data); } -static void rna_UserDef_audio_update(bContext *C, PointerRNA *ptr) +static void rna_UserDef_audio_update(Main *bmain, Scene *scene, PointerRNA *ptr) { - sound_init(C); + sound_init(); } -static void rna_UserDef_weight_color_update(bContext *C, PointerRNA *ptr) +static void rna_UserDef_weight_color_update(Main *bmain, Scene *scene, PointerRNA *ptr) { - Main *bmain= CTX_data_main(C); Object *ob; vDM_ColorBand_store((U.flag & USER_CUSTOM_RANGE) ? (&U.coba_weight):NULL); @@ -149,22 +148,25 @@ static void rna_UserDef_weight_color_update(bContext *C, PointerRNA *ptr) DAG_id_flush_update(&ob->id, OB_RECALC_DATA); } - rna_userdef_update(C, ptr); + rna_userdef_update(bmain, scene, ptr); } // XXX - todo, this is not accessible from here and it only works when the userprefs are in the same window. // extern int GPU_default_lights(void); -static void rna_UserDef_viewport_lights_update(bContext *C, PointerRNA *ptr) +static void rna_UserDef_viewport_lights_update(Main *bmain, Scene *scene, PointerRNA *ptr) { // GPU_default_lights(); - WM_event_add_notifier(C, NC_SPACE|ND_SPACE_VIEW3D, NULL); - rna_userdef_update(C, ptr); + WM_main_add_notifier(NC_SPACE|ND_SPACE_VIEW3D, NULL); + rna_userdef_update(bmain, scene, ptr); } -static void rna_userdef_autosave_update(bContext *C, PointerRNA *ptr) +static void rna_userdef_autosave_update(Main *bmain, Scene *scene, PointerRNA *ptr) { - WM_autosave_init(C); - rna_userdef_update(C, ptr); + wmWindowManager *wm= bmain->wm.first; + + if(wm) + WM_autosave_init(wm); + rna_userdef_update(bmain, scene, ptr); } #else @@ -1916,7 +1918,11 @@ static void rna_def_userdef_edit(BlenderRNA *brna) prop= RNA_def_property(srna, "use_visual_keying", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "autokey_flag", AUTOKEY_FLAG_AUTOMATKEY); RNA_def_property_ui_text(prop, "Visual Keying", "Use Visual keying automatically for constrained objects."); - + + prop= RNA_def_property(srna, "insertkey_xyz_to_rgb", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "autokey_flag", AUTOKEY_FLAG_XYZ2RGB); + RNA_def_property_ui_text(prop, "New F-Curve Colors - XYZ to RGB", "Color for newly added transformation F-Curves (Location, Rotation, Scale) and also Color is based on the transform axis."); + prop= RNA_def_property(srna, "new_interpolation_type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_items(prop, new_interpolation_types); RNA_def_property_enum_sdna(prop, NULL, "ipo_new"); @@ -2336,6 +2342,11 @@ static void rna_def_userdef_input(BlenderRNA *brna) RNA_def_property_range(prop, 0, 200); RNA_def_property_ui_text(prop, "NDof Rotation Speed", "The overall rotation speed of an NDOF device, as percent of standard."); + prop= RNA_def_property(srna, "double_click_time", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "dbl_click_time"); + RNA_def_property_range(prop, 1, 1000); + RNA_def_property_ui_text(prop, "Double Click Timeout", "The time (in ms) for a double click."); + prop= RNA_def_property(srna, "emulate_3_button_mouse", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_TWOBUTTONMOUSE); RNA_def_property_boolean_funcs(prop, NULL, "rna_userdef_emulate_set"); @@ -2351,6 +2362,15 @@ static void rna_def_userdef_filepaths(BlenderRNA *brna) PropertyRNA *prop; StructRNA *srna; + static EnumPropertyItem anim_player_presets[] = { + //{0, "INTERNAL", 0, "Internal", "Built-in animation player"}, // doesn't work yet! + {1, "BLENDER24", 0, "Blender 2.4", "Blender command line animation playback - path to Blender 2.4"}, + {2, "DJV", 0, "Djv", "Open source frame player: http://djv.sourceforge.net"}, + {3, "FRAMECYCLER", 0, "FrameCycler", "Frame player from IRIDAS"}, + {4, "RV", 0, "rv", "Frame player from Tweak Software"}, + {50, "CUSTOM", 0, "Custom", "Custom animation player executable path"}, + {0, NULL, 0, NULL, NULL}}; + srna= RNA_def_struct(brna, "UserPreferencesFilePaths", NULL); RNA_def_struct_sdna(srna, "UserDef"); RNA_def_struct_nested(brna, srna, "UserPreferences"); @@ -2407,7 +2427,17 @@ static void rna_def_userdef_filepaths(BlenderRNA *brna) prop= RNA_def_property(srna, "temporary_directory", PROP_STRING, PROP_DIRPATH); RNA_def_property_string_sdna(prop, NULL, "tempdir"); RNA_def_property_ui_text(prop, "Temporary Directory", "The directory for storing temporary save files."); + + prop= RNA_def_property(srna, "animation_player", PROP_STRING, PROP_DIRPATH); + RNA_def_property_string_sdna(prop, NULL, "anim_player"); + RNA_def_property_ui_text(prop, "Animation Player", "Path to a custom animation/frame sequence player."); + prop= RNA_def_property(srna, "animation_player_preset", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "anim_player_preset"); + RNA_def_property_enum_items(prop, anim_player_presets); + RNA_def_property_ui_text(prop, "Animation Player Preset", "Preset configs for external animation players"); + RNA_def_property_enum_default(prop, 1); /* set default to blender 2.4 player until an internal one is back */ + /* Autosave */ prop= RNA_def_property(srna, "save_version", PROP_INT, PROP_NONE); diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c index 35f2a31b7ef..ca6d8959d00 100644 --- a/source/blender/makesrna/intern/rna_wm.c +++ b/source/blender/makesrna/intern/rna_wm.c @@ -43,6 +43,7 @@ EnumPropertyItem event_keymouse_value_items[] = { {KM_PRESS, "PRESS", 0, "Press", ""}, {KM_RELEASE, "RELEASE", 0, "Release", ""}, {KM_CLICK, "CLICK", 0, "Click", ""}, + {KM_DBL_CLICK, "DOUBLE_CLICK", 0, "Double Click", ""}, {0, NULL, 0, NULL, NULL}}; EnumPropertyItem event_tweak_value_items[]= { @@ -226,6 +227,7 @@ EnumPropertyItem event_type_items[] = { {PAGEDOWNKEY, "PAGE_DOWN", 0, "Page Down", ""}, {ENDKEY, "END", 0, "End", ""}, {0, "", 0, NULL, NULL}, + {WINDEACTIVATE, "WINDOW_DEACTIVATE", 0, "Window Deactivate", ""}, {TIMER, "TIMER", 0, "Timer", ""}, {TIMER0, "TIMER0", 0, "Timer 0", ""}, {TIMER1, "TIMER1", 0, "Timer 1", ""}, @@ -243,6 +245,25 @@ EnumPropertyItem keymap_modifiers_items[] = { {2, "SECOND", 0, "Second", ""}, {0, NULL, 0, NULL, NULL}}; +EnumPropertyItem operator_return_items[] = { + {OPERATOR_RUNNING_MODAL, "RUNNING_MODAL", 0, "Running Modal", ""}, + {OPERATOR_CANCELLED, "CANCELLED", 0, "Cancelled", ""}, + {OPERATOR_FINISHED, "FINISHED", 0, "Finished", ""}, + {OPERATOR_PASS_THROUGH, "PASS_THROUGH", 0, "Pass Through", ""}, // used as a flag + {0, NULL, 0, NULL, NULL}}; + +/* flag/enum */ +EnumPropertyItem wm_report_items[] = { + {RPT_DEBUG, "DEBUG", 0, "Debug", ""}, + {RPT_INFO, "INFO", 0, "Info", ""}, + {RPT_OPERATOR, "OPERATOR", 0, "Operator", ""}, + {RPT_WARNING, "WARNING", 0, "Warning", ""}, + {RPT_ERROR, "ERROR", 0, "Error", ""}, + {RPT_ERROR_INVALID_INPUT, "ERROR_INVALID_INPUT", 0, "Invalid Input", ""},\ + {RPT_ERROR_INVALID_CONTEXT, "ERROR_INVALID_CONTEXT", 0, "Invalid Context", ""}, + {RPT_ERROR_OUT_OF_MEMORY, "ERROR_OUT_OF_MEMORY", 0, "Out of Memory", ""}, + {0, NULL, 0, NULL, NULL}}; + #define KMI_TYPE_KEYBOARD 0 #define KMI_TYPE_MOUSE 1 #define KMI_TYPE_TWEAK 2 @@ -514,36 +535,6 @@ static void rna_WindowManager_active_keyconfig_set(PointerRNA *ptr, PointerRNA v BLI_strncpy(U.keyconfigstr, kc->idname, sizeof(U.keyconfigstr)); } -static PointerRNA rna_WindowManager_active_keymap_get(PointerRNA *ptr) -{ - wmWindowManager *wm= ptr->data; - wmKeyMap *km= NULL; - - if(wm->defaultconf) { - km= BLI_findlink(&wm->defaultconf->keymaps, wm->defaultactmap); - - if(!km) - km= wm->defaultconf->keymaps.first; - } - - return rna_pointer_inherit_refine(ptr, &RNA_KeyMap, WM_keymap_active(wm, km)); -} - -static void rna_WindowManager_active_keymap_set(PointerRNA *ptr, PointerRNA value) -{ - wmWindowManager *wm= ptr->data; - wmKeyMap *km= value.data; - int index; - - if(wm->defaultconf && km) { - km= WM_keymap_find(wm->defaultconf, km->idname, km->spaceid, km->regionid); - index= BLI_findindex(&wm->defaultconf->keymaps, km); - - if(index != -1) wm->defaultactmap= index; - else wm->defaultactmap= 0; - } -} - static void rna_wmKeyMapItem_idname_get(PointerRNA *ptr, char *value) { wmKeyMapItem *kmi= ptr->data; @@ -565,9 +556,32 @@ static void rna_wmKeyMapItem_idname_set(PointerRNA *ptr, const char *value) char idname[OP_MAX_TYPENAME]; WM_operator_bl_idname(idname, value); - BLI_strncpy(kmi->idname, idname, sizeof(kmi->idname)); - WM_keymap_properties_reset(kmi); + if(strcmp(idname, kmi->idname) != 0) { + BLI_strncpy(kmi->idname, idname, sizeof(kmi->idname)); + + WM_keymap_properties_reset(kmi); + } +} + +static void rna_wmKeyMapItem_name_get(PointerRNA *ptr, char *value) +{ + wmKeyMapItem *kmi= ptr->data; + wmOperatorType *ot= WM_operatortype_find(kmi->idname, 1); + + if (ot) + strcpy(value, ot->name); +} + +static int rna_wmKeyMapItem_name_length(PointerRNA *ptr) +{ + wmKeyMapItem *kmi= ptr->data; + wmOperatorType *ot= WM_operatortype_find(kmi->idname, 1); + + if (ot) + return strlen(ot->name); + else + return 0; } #else @@ -593,10 +607,13 @@ static void rna_def_operator(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Properties", ""); RNA_def_property_pointer_funcs(prop, "rna_Operator_properties_get", NULL, NULL); + RNA_api_operator(srna); + srna= RNA_def_struct(brna, "OperatorProperties", NULL); RNA_def_struct_ui_text(srna, "Operator Properties", "Input properties of an Operator."); RNA_def_struct_refine_func(srna, "rna_OperatorProperties_refine"); RNA_def_struct_idproperties_func(srna, "rna_OperatorProperties_idproperties"); + } static void rna_def_macro_operator(BlenderRNA *brna) @@ -684,6 +701,8 @@ static void rna_def_event(BlenderRNA *brna) RNA_def_struct_ui_text(srna, "Event", "Window Manager Event"); RNA_def_struct_sdna(srna, "wmEvent"); + RNA_define_verify_sdna(0); // not in sdna + /* strings */ prop= RNA_def_property(srna, "ascii", PROP_STRING, PROP_NONE); RNA_def_property_clear_flag(prop, PROP_EDITABLE); @@ -747,6 +766,8 @@ static void rna_def_event(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "oskey", 1); RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "OS Key", "True when the Cmd key is held."); + + RNA_define_verify_sdna(1); // not in sdna } static void rna_def_window(BlenderRNA *brna) @@ -764,6 +785,7 @@ static void rna_def_window(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Screen", "Active screen showing in the window."); RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_pointer_funcs(prop, NULL, "rna_Window_screen_set", NULL); + RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE); RNA_def_property_update(prop, 0, "rna_Window_screen_update"); } @@ -800,12 +822,6 @@ static void rna_def_windowmanager(BlenderRNA *brna) RNA_def_property_struct_type(prop, "KeyConfig"); RNA_def_property_ui_text(prop, "Default Key Configuration", ""); - prop= RNA_def_property(srna, "active_keymap", PROP_POINTER, PROP_NEVER_NULL); - RNA_def_property_struct_type(prop, "KeyMap"); - RNA_def_property_flag(prop, PROP_EDITABLE); - RNA_def_property_pointer_funcs(prop, "rna_WindowManager_active_keymap_get", "rna_WindowManager_active_keymap_set", 0); - RNA_def_property_ui_text(prop, "Active Key Map", ""); - RNA_api_wm(srna); } @@ -833,6 +849,10 @@ static void rna_def_keyconfig(BlenderRNA *brna) RNA_def_property_string_sdna(prop, NULL, "idname"); RNA_def_property_ui_text(prop, "Name", "Name of the key configuration."); RNA_def_struct_name_property(srna, prop); + + prop= RNA_def_property(srna, "filter", PROP_STRING, PROP_NONE); + RNA_def_property_string_sdna(prop, NULL, "filter"); + RNA_def_property_ui_text(prop, "Filter", "Search term for filtering in the UI."); prop= RNA_def_property(srna, "keymaps", PROP_COLLECTION, PROP_NONE); RNA_def_property_struct_type(prop, "KeyMap"); @@ -847,16 +867,19 @@ static void rna_def_keyconfig(BlenderRNA *brna) prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); RNA_def_property_string_sdna(prop, NULL, "idname"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Name", "Name of the key map."); RNA_def_struct_name_property(srna, prop); prop= RNA_def_property(srna, "space_type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "spaceid"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_enum_items(prop, space_type_items); RNA_def_property_ui_text(prop, "Space Type", "Optional space type keymap is associated with."); prop= RNA_def_property(srna, "region_type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "regionid"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_enum_items(prop, region_type_items); RNA_def_property_ui_text(prop, "Region Type", "Optional region type keymap is associated with."); @@ -870,8 +893,20 @@ static void rna_def_keyconfig(BlenderRNA *brna) prop= RNA_def_property(srna, "modal", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", KEYMAP_MODAL); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Modal Keymap", "Indicates that a keymap is used for translate modal events for an operator."); + prop= RNA_def_property(srna, "items_expanded", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", KEYMAP_EXPANDED); + RNA_def_property_ui_text(prop, "Items Expanded", "Expanded in the user interface."); + RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1); + + prop= RNA_def_property(srna, "children_expanded", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", KEYMAP_CHILDREN_EXPANDED); + RNA_def_property_ui_text(prop, "Children Expanded", "Children expanded in the user interface."); + RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1); + + RNA_api_keymap(srna); /* KeyMapItem */ @@ -884,7 +919,12 @@ static void rna_def_keyconfig(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Identifier", "Identifier of operator to call on input event."); RNA_def_property_string_funcs(prop, "rna_wmKeyMapItem_idname_get", "rna_wmKeyMapItem_idname_length", "rna_wmKeyMapItem_idname_set"); RNA_def_struct_name_property(srna, prop); - + + prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Name", "Name of operator to call on input event."); + RNA_def_property_string_funcs(prop, "rna_wmKeyMapItem_name_get", "rna_wmKeyMapItem_name_length", NULL); + prop= RNA_def_property(srna, "properties", PROP_POINTER, PROP_NONE); RNA_def_property_struct_type(prop, "OperatorProperties"); RNA_def_property_pointer_funcs(prop, "rna_KeyMapItem_properties_get", NULL, NULL); @@ -908,6 +948,11 @@ static void rna_def_keyconfig(BlenderRNA *brna) RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_KeyMapItem_value_itemf"); RNA_def_property_ui_text(prop, "Value", ""); + prop= RNA_def_property(srna, "id", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "id"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "id", "ID of the item."); + prop= RNA_def_property(srna, "any", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_funcs(prop, "rna_KeyMapItem_any_getf", "rna_KeyMapItem_any_setf"); RNA_def_property_ui_text(prop, "Any", "Any modifier keys pressed."); @@ -943,7 +988,8 @@ static void rna_def_keyconfig(BlenderRNA *brna) prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", KMI_EXPANDED); - RNA_def_property_ui_text(prop, "Expanded", "Expanded in the user interface."); + RNA_def_property_ui_text(prop, "Expanded", "Show key map event and property details in the user interface."); + RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1); prop= RNA_def_property(srna, "propvalue", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "propvalue"); @@ -954,6 +1000,9 @@ static void rna_def_keyconfig(BlenderRNA *brna) prop= RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", KMI_INACTIVE); RNA_def_property_ui_text(prop, "Active", "Activate or deactivate item."); + RNA_def_property_ui_icon(prop, ICON_CHECKBOX_DEHLT, 1); + + RNA_api_keymapitem(srna); } void RNA_def_wm(BlenderRNA *brna) diff --git a/source/blender/makesrna/intern/rna_wm_api.c b/source/blender/makesrna/intern/rna_wm_api.c index 50b0e37b7cd..0cec66fe264 100644 --- a/source/blender/makesrna/intern/rna_wm_api.c +++ b/source/blender/makesrna/intern/rna_wm_api.c @@ -52,6 +52,21 @@ static wmKeyMap *rna_keymap_add(wmKeyConfig *keyconf, char *idname, int spaceid, } } +static wmKeyMap *rna_keymap_find(wmKeyConfig *keyconf, char *idname, int spaceid, int regionid) +{ + return WM_keymap_list_find(&keyconf->keymaps, idname, spaceid, regionid); +} + +static wmKeyMap *rna_keymap_find_modal(wmKeyConfig *keyconf, char *idname) +{ + wmOperatorType *ot = WM_operatortype_find(idname, 0); + + if (!ot) + return NULL; + else + return ot->modalkeymap; +} + static wmKeyMap *rna_keymap_active(wmKeyMap *km, bContext *C) { wmWindowManager *wm = CTX_wm_manager(C); @@ -98,7 +113,12 @@ static wmKeyMapItem *rna_KeyMap_add_modal_item(wmKeyMap *km, bContext *C, Report return WM_modalkeymap_add_item(km, type, value, modifier, keymodifier, propvalue); } -static wmKeyMapItem *rna_KeyMap_add_item(wmKeyMap *km, ReportList *reports, char *idname, int type, int any, int value, int shift, int ctrl, int alt, int oskey, int keymodifier) +static void rna_keymap_restore_item_to_default(wmKeyMap *km, bContext *C, wmKeyMapItem *kmi) +{ + WM_keymap_restore_item_to_default(C, km, kmi); +} + +static wmKeyMapItem *rna_KeyMap_add_item(wmKeyMap *km, ReportList *reports, char *idname, int type, int value, int any, int shift, int ctrl, int alt, int oskey, int keymodifier) { // wmWindowManager *wm = CTX_wm_manager(C); int modifier= 0; @@ -119,6 +139,11 @@ static wmKeyMapItem *rna_KeyMap_add_item(wmKeyMap *km, ReportList *reports, char return WM_keymap_add_item(km, idname, type, value, modifier, keymodifier); } +static void rna_Operator_report(wmOperator *op, int type, char *msg) +{ + BKE_report(op->reports, type, msg); +} + #else void RNA_api_wm(StructRNA *srna) @@ -146,7 +171,11 @@ void RNA_api_wm(StructRNA *srna) RNA_def_property_flag(parm, PROP_REQUIRED); parm= RNA_def_pointer(func, "event", "Event", "", "Event."); RNA_def_property_flag(parm, PROP_REQUIRED); - RNA_def_function_return(func, RNA_def_int(func, "mode", 0, 0, INT_MAX, "Mode", "", 0, INT_MAX)); // XXX, should be an enum/flag thingo + + parm= RNA_def_enum(func, "result", operator_return_items, 0, "result", ""); // better name? + RNA_def_property_flag(parm, PROP_ENUM_FLAG); + RNA_def_function_return(func, parm); + /* invoke functions, for use with python */ func= RNA_def_function(srna, "invoke_popup", "WM_operator_ui_popup"); @@ -158,6 +187,18 @@ void RNA_api_wm(StructRNA *srna) parm= RNA_def_int(func, "height", 20, 0, INT_MAX, "", "Height of the popup.", 0, INT_MAX); } +void RNA_api_operator(StructRNA *srna) +{ + FunctionRNA *func; + PropertyRNA *parm; + + func= RNA_def_function(srna, "report", "rna_Operator_report"); + parm= RNA_def_enum(func, "type", wm_report_items, 0, "Type", ""); + RNA_def_property_flag(parm, PROP_REQUIRED|PROP_ENUM_FLAG); + parm= RNA_def_string(func, "message", "", 0, "Report Message", ""); + RNA_def_property_flag(parm, PROP_REQUIRED); +} + void RNA_api_keyconfig(StructRNA *srna) { FunctionRNA *func; @@ -171,6 +212,20 @@ void RNA_api_keyconfig(StructRNA *srna) RNA_def_boolean(func, "modal", 0, "Modal", ""); parm= RNA_def_pointer(func, "keymap", "KeyMap", "Key Map", "Added key map."); RNA_def_function_return(func, parm); + + func= RNA_def_function(srna, "find_keymap", "rna_keymap_find"); + parm= RNA_def_string(func, "name", "", 0, "Name", ""); + RNA_def_property_flag(parm, PROP_REQUIRED); + RNA_def_enum(func, "space_type", space_type_items, SPACE_EMPTY, "Space Type", ""); + RNA_def_enum(func, "region_type", region_type_items, RGN_TYPE_WINDOW, "Region Type", ""); + parm= RNA_def_pointer(func, "keymap", "KeyMap", "Key Map", "Corresponding key map."); + RNA_def_function_return(func, parm); + + func= RNA_def_function(srna, "find_keymap_modal", "rna_keymap_find_modal"); + parm= RNA_def_string(func, "name", "", 0, "Operator Name", ""); + RNA_def_property_flag(parm, PROP_REQUIRED); + parm= RNA_def_pointer(func, "keymap", "KeyMap", "Key Map", "Corresponding key map."); + RNA_def_function_return(func, parm); } void RNA_api_keymap(StructRNA *srna) @@ -226,7 +281,23 @@ void RNA_api_keymap(StructRNA *srna) RNA_def_function_return(func, parm); func= RNA_def_function(srna, "restore_to_default", "WM_keymap_restore_to_default"); + + func= RNA_def_function(srna, "restore_item_to_default", "rna_keymap_restore_item_to_default"); + RNA_def_function_flag(func, FUNC_USE_CONTEXT); + parm= RNA_def_pointer(func, "item", "KeyMapItem", "Item", ""); + RNA_def_property_flag(parm, PROP_REQUIRED); } +void RNA_api_keymapitem(StructRNA *srna) +{ + FunctionRNA *func; + PropertyRNA *parm; + + func= RNA_def_function(srna, "compare", "WM_keymap_item_compare"); + parm= RNA_def_pointer(func, "item", "KeyMapItem", "Item", ""); + RNA_def_property_flag(parm, PROP_REQUIRED); + parm= RNA_def_boolean(func, "result", 0, "Comparison result", ""); + RNA_def_function_return(func, parm); +} #endif diff --git a/source/blender/makesrna/intern/rna_world.c b/source/blender/makesrna/intern/rna_world.c index 231faffef0f..4046fc266da 100644 --- a/source/blender/makesrna/intern/rna_world.c +++ b/source/blender/makesrna/intern/rna_world.c @@ -82,20 +82,20 @@ static void rna_World_active_texture_set(PointerRNA *ptr, PointerRNA value) set_current_world_texture(wo, value.data); } -static void rna_World_update(bContext *C, PointerRNA *ptr) +static void rna_World_update(Main *bmain, Scene *scene, PointerRNA *ptr) { World *wo= ptr->id.data; DAG_id_flush_update(&wo->id, 0); - WM_event_add_notifier(C, NC_WORLD, wo); + WM_main_add_notifier(NC_WORLD, wo); } -static void rna_World_draw_update(bContext *C, PointerRNA *ptr) +static void rna_World_draw_update(Main *bmain, Scene *scene, PointerRNA *ptr) { World *wo= ptr->id.data; DAG_id_flush_update(&wo->id, 0); - WM_event_add_notifier(C, NC_WORLD|ND_WORLD_DRAW, wo); + WM_main_add_notifier(NC_WORLD|ND_WORLD_DRAW, wo); } #else diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_bilateralblur.c b/source/blender/nodes/intern/CMP_nodes/CMP_bilateralblur.c index b954e876ea1..b4c1bbd7acc 100644 --- a/source/blender/nodes/intern/CMP_nodes/CMP_bilateralblur.c +++ b/source/blender/nodes/intern/CMP_nodes/CMP_bilateralblur.c @@ -229,9 +229,6 @@ static void node_composit_exec_bilateralblur(void *data, bNode *node, bNodeStack SWAP(CompBuf, *source, *new); } - if(node->exec & NODE_BREAK) - free_compbuf(source); - if(img != in[0]->data) free_compbuf(img); diff --git a/source/blender/python/BPY_extern.h b/source/blender/python/BPY_extern.h index a055060ed07..6a94443dd8b 100644 --- a/source/blender/python/BPY_extern.h +++ b/source/blender/python/BPY_extern.h @@ -134,7 +134,7 @@ extern "C" { // void BPY_scripts_clear_pyobjects( void ); // // void error_pyscript( void ); -// void BPY_DECREF(void *pyob_ptr); /* Py_DECREF() */ + void BPY_DECREF(void *pyob_ptr); /* Py_DECREF() */ void BPY_set_context(struct bContext *C); /* void BPY_Err_Handle(struct Text *text); */ /* int BPY_spacetext_is_pywin(struct SpaceText *st); */ diff --git a/source/blender/python/epy_doc_gen.py b/source/blender/python/epy_doc_gen.py index f16c7504cb2..8783cec93ab 100644 --- a/source/blender/python/epy_doc_gen.py +++ b/source/blender/python/epy_doc_gen.py @@ -691,8 +691,15 @@ def op2epy(BASEPATH): operators = dir(op_mod) for op in sorted(operators): # rna = getattr(bpy.types, op).bl_rna - rna = getattr(op_mod, op).get_rna() - write_func(rna, '', out, 'OPERATOR') + try: + rna = getattr(op_mod, op).get_rna() + except AttributeError: + rna = None + except TypeError: + rna = None + + if rna: + write_func(rna, '', out, 'OPERATOR') out.write('\n') out.close() diff --git a/source/blender/python/generic/bpy_internal_import.c b/source/blender/python/generic/bpy_internal_import.c index d3b8b19693f..002467687c4 100644 --- a/source/blender/python/generic/bpy_internal_import.c +++ b/source/blender/python/generic/bpy_internal_import.c @@ -74,8 +74,9 @@ PyObject *bpy_text_import( Text *text ) } } - len= strlen(text->id.name+2) - 3; + len= strlen(text->id.name+2); strncpy(modulename, text->id.name+2, len); + modulename[len - 3]= '\0'; /* remove .py */ return PyImport_ExecCodeModule(modulename, text->compiled); } diff --git a/source/blender/python/intern/bpy_array.c b/source/blender/python/intern/bpy_array.c index f11c95e7ed5..5f228836b42 100644 --- a/source/blender/python/intern/bpy_array.c +++ b/source/blender/python/intern/bpy_array.c @@ -32,8 +32,6 @@ #include "BKE_global.h" -#include "MEM_guardedalloc.h" - #define MAX_ARRAY_DIMENSION 10 typedef void (*ItemConvertFunc)(PyObject *, char *); @@ -258,7 +256,7 @@ static int py_to_array(PyObject *py, PointerRNA *ptr, PropertyRNA *prop, char *p if (totitem) { if (!param_data || RNA_property_flag(prop) & PROP_DYNAMIC) - data= MEM_callocN(item_size * totitem, "pyrna primitive type array"); + data= PyMem_MALLOC(item_size * totitem); else data= param_data; @@ -273,7 +271,7 @@ static int py_to_array(PyObject *py, PointerRNA *ptr, PropertyRNA *prop, char *p else { /* NULL can only pass through in case RNA property arraylength is 0 (impossible?) */ rna_set_array(ptr, prop, data); - MEM_freeN(data); + PyMem_FREE(data); } } @@ -513,3 +511,94 @@ PyObject *pyrna_py_from_array(PointerRNA *ptr, PropertyRNA *prop) return pyrna_prop_CreatePyObject(ptr, prop); } + +/* TODO, multi-dimensional arrays */ +int pyrna_array_contains_py(PointerRNA *ptr, PropertyRNA *prop, PyObject *value) +{ + int len= RNA_property_array_length(ptr, prop); + int type; + int i; + + if(len==0) /* possible with dynamic arrays */ + return 0; + + if (RNA_property_array_dimension(ptr, prop, NULL) > 1) { + PyErr_SetString(PyExc_TypeError, "PropertyRNA - multi dimensional arrays not supported yet"); + return -1; + } + + type= RNA_property_type(prop); + + switch (type) { + case PROP_FLOAT: + { + float value_f= PyFloat_AsDouble(value); + if(value_f==-1 && PyErr_Occurred()) { + PyErr_Clear(); + return 0; + } + else { + float tmp[32]; + float *tmp_arr; + + if(len * sizeof(float) > sizeof(tmp)) { + tmp_arr= PyMem_MALLOC(len * sizeof(float)); + } + else { + tmp_arr= tmp; + } + + RNA_property_float_get_array(ptr, prop, tmp_arr); + + for(i=0; i sizeof(tmp)) { + tmp_arr= PyMem_MALLOC(len * sizeof(int)); + } + else { + tmp_arr= tmp; + } + + if(type==PROP_BOOLEAN) + RNA_property_boolean_get_array(ptr, prop, tmp_arr); + else + RNA_property_int_get_array(ptr, prop, tmp_arr); + + for(i=0; i + +/* for pydrivers (drivers using one-line Python expressions to express relationships between targets) */ +PyObject *bpy_pydriver_Dict = NULL; + +/* For faster execution we keep a special dictionary for pydrivers, with + * the needed modules and aliases. + */ +static int bpy_pydriver_create_dict(void) +{ + PyObject *d, *mod; + + /* validate namespace for driver evaluation */ + if (bpy_pydriver_Dict) return -1; + + d = PyDict_New(); + if (d == NULL) + return -1; + else + bpy_pydriver_Dict = d; + + /* import some modules: builtins, bpy, math, (Blender.noise )*/ + PyDict_SetItemString(d, "__builtins__", PyEval_GetBuiltins()); + + mod = PyImport_ImportModule("math"); + if (mod) { + PyDict_Merge(d, PyModule_GetDict(mod), 0); /* 0 - dont overwrite existing values */ + + /* Only keep for backwards compat! - just import all math into root, they are standard */ + PyDict_SetItemString(d, "math", mod); + PyDict_SetItemString(d, "m", mod); + Py_DECREF(mod); + } + + /* add bpy to global namespace */ + mod= PyImport_ImportModuleLevel("bpy", NULL, NULL, NULL, 0); + if (mod) { + PyDict_SetItemString(bpy_pydriver_Dict, "bpy", mod); + Py_DECREF(mod); + } + + +#if 0 // non existant yet + mod = PyImport_ImportModule("Blender.Noise"); + if (mod) { + PyDict_SetItemString(d, "noise", mod); + PyDict_SetItemString(d, "n", mod); + Py_DECREF(mod); + } else { + PyErr_Clear(); + } + + /* If there's a Blender text called pydrivers.py, import it. + * Users can add their own functions to this module. + */ + if (G.f & G_DOSCRIPTLINKS) { + mod = importText("pydrivers"); /* can also use PyImport_Import() */ + if (mod) { + PyDict_SetItemString(d, "pydrivers", mod); + PyDict_SetItemString(d, "p", mod); + Py_DECREF(mod); + } else { + PyErr_Clear(); + } + } +#endif // non existant yet + + return 0; +} + +/* Update function, it gets rid of pydrivers global dictionary, forcing + * BPY_pydriver_eval to recreate it. This function is used to force + * reloading the Blender text module "pydrivers.py", if available, so + * updates in it reach pydriver evaluation. + */ +void BPY_pydriver_update(void) +{ + PyGILState_STATE gilstate = PyGILState_Ensure(); + + if (bpy_pydriver_Dict) { /* free the global dict used by pydrivers */ + PyDict_Clear(bpy_pydriver_Dict); + Py_DECREF(bpy_pydriver_Dict); + bpy_pydriver_Dict = NULL; + } + + PyGILState_Release(gilstate); + + return; +} + +/* error return function for BPY_eval_pydriver */ +static float pydriver_error(ChannelDriver *driver) +{ + if (bpy_pydriver_Dict) { /* free the global dict used by pydrivers */ + PyDict_Clear(bpy_pydriver_Dict); + Py_DECREF(bpy_pydriver_Dict); + bpy_pydriver_Dict = NULL; + } + + driver->flag |= DRIVER_FLAG_INVALID; /* py expression failed */ + fprintf(stderr, "\nError in Driver: The following Python expression failed:\n\t'%s'\n\n", driver->expression); + + // BPy_errors_to_report(NULL); // TODO - reports + PyErr_Print(); + PyErr_Clear(); + + return 0.0f; +} + +/* This evals py driver expressions, 'expr' is a Python expression that + * should evaluate to a float number, which is returned. + */ +float BPY_pydriver_eval (ChannelDriver *driver) +{ + PyObject *driver_vars=NULL; + PyObject *retval= NULL; + PyGILState_STATE gilstate; + + DriverTarget *dtar; + float result = 0.0f; /* default return */ + char *expr = NULL; + short targets_ok= 1; + + /* sanity checks - should driver be executed? */ + if ((driver == NULL) /*|| (G.f & G_DOSCRIPTLINKS)==0*/) + return result; + + /* get the py expression to be evaluated */ + expr = driver->expression; + if ((expr == NULL) || (expr[0]=='\0')) + return result; + + gilstate = PyGILState_Ensure(); + + /* init global dictionary for py-driver evaluation settings */ + if (!bpy_pydriver_Dict) { + if (bpy_pydriver_create_dict() != 0) { + fprintf(stderr, "Pydriver error: couldn't create Python dictionary"); + PyGILState_Release(gilstate); + return result; + } + } + + /* add target values to a dict that will be used as '__locals__' dict */ + driver_vars = PyDict_New(); // XXX do we need to decref this? + for (dtar= driver->targets.first; dtar; dtar= dtar->next) { + PyObject *driver_arg = NULL; + float tval = 0.0f; + + /* try to get variable value */ + tval= driver_get_target_value(driver, dtar); + driver_arg= PyFloat_FromDouble((double)tval); + + /* try to add to dictionary */ + if (PyDict_SetItemString(driver_vars, dtar->name, driver_arg)) { + /* this target failed - bad name */ + if (targets_ok) { + /* first one - print some extra info for easier identification */ + fprintf(stderr, "\nBPY_pydriver_eval() - Error while evaluating PyDriver:\n"); + targets_ok= 0; + } + + fprintf(stderr, "\tBPY_pydriver_eval() - couldn't add variable '%s' to namespace \n", dtar->name); + // BPy_errors_to_report(NULL); // TODO - reports + PyErr_Print(); + PyErr_Clear(); + } + } + +#if 0 // slow + /* execute expression to get a value */ + retval = PyRun_String(expr, Py_eval_input, bpy_pydriver_Dict, driver_vars); +#else + if(driver->flag & DRIVER_FLAG_RECOMPILE || driver->expr_comp==NULL) { + Py_XDECREF(driver->expr_comp); + driver->expr_comp= Py_CompileString(expr, "", Py_eval_input); + driver->flag &= ~DRIVER_FLAG_RECOMPILE; + } + if(driver->expr_comp) + retval= PyEval_EvalCode(driver->expr_comp, bpy_pydriver_Dict, driver_vars); +#endif + + /* decref the driver vars first... */ + Py_DECREF(driver_vars); + + /* process the result */ + if (retval == NULL) { + result = pydriver_error(driver); + PyGILState_Release(gilstate); + return result; + } + + result = (float)PyFloat_AsDouble(retval); + Py_DECREF(retval); + + if ((result == -1) && PyErr_Occurred()) { + result = pydriver_error(driver); + PyGILState_Release(gilstate); + return result; + } + + /* all fine, make sure the "invalid expression" flag is cleared */ + driver->flag &= ~DRIVER_FLAG_INVALID; + + PyGILState_Release(gilstate); + + return result; +} diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index a690c20cde5..ac47b37ca7d 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -49,19 +49,17 @@ #include "BLI_winstuff.h" #endif -#include "DNA_anim_types.h" #include "DNA_space_types.h" #include "DNA_text_types.h" #include "MEM_guardedalloc.h" -#include "BLI_util.h" +#include "BLI_path_util.h" #include "BLI_storage.h" #include "BLI_fileops.h" #include "BLI_string.h" #include "BKE_context.h" -#include "BKE_fcurve.h" #include "BKE_text.h" #include "BKE_context.h" #include "BKE_global.h" @@ -79,7 +77,6 @@ #include "../generic/BGL.h" #include "../generic/IDProp.h" - /* for internal use, when starting and ending python scripts */ /* incase a python script triggers another python call, stop bpy_context_clear from invalidating */ @@ -283,6 +280,14 @@ void BPY_start_python_path(void) /* set the environment path */ printf("found bundled python: %s\n", py_path_bundle); +#ifdef __APPLE__ + /* OSX allow file/directory names to contain : character (represented as / in the Finder) + but current Python lib (release 3.1.1) doesn't handle these correctly */ + if(strchr(py_path_bundle, ':')) + printf("Warning : Blender application is located in a path containing : or / chars\ + \nThis may make python import function fail\n"); +#endif + #if 0 BLI_setenv("PYTHONHOME", py_path_bundle); BLI_setenv("PYTHONPATH", py_path_bundle); @@ -316,11 +321,25 @@ void BPY_start_python( int argc, char **argv ) /* sigh, why do python guys not have a char** version anymore? :( */ { int i; +#if 0 PyObject *py_argv= PyList_New(argc); - for (i=0; iflag |= DRIVER_FLAG_INVALID; /* py expression failed */ - fprintf(stderr, "\nError in Driver: The following Python expression failed:\n\t'%s'\n\n", driver->expression); - - BPy_errors_to_report(NULL); // TODO - reports - - return 0.0f; -} - -/* This evals py driver expressions, 'expr' is a Python expression that - * should evaluate to a float number, which is returned. - */ -float BPY_pydriver_eval (ChannelDriver *driver) -{ - PyObject *driver_vars=NULL; - PyObject *retval; - PyGILState_STATE gilstate; - - DriverTarget *dtar; - float result = 0.0f; /* default return */ - char *expr = NULL; - short targets_ok= 1; - - /* sanity checks - should driver be executed? */ - if ((driver == NULL) /*|| (G.f & G_DOSCRIPTLINKS)==0*/) - return result; - - /* get the py expression to be evaluated */ - expr = driver->expression; - if ((expr == NULL) || (expr[0]=='\0')) - return result; - - gilstate = PyGILState_Ensure(); - - /* init global dictionary for py-driver evaluation settings */ - if (!bpy_pydriver_Dict) { - if (bpy_pydriver_create_dict() != 0) { - fprintf(stderr, "Pydriver error: couldn't create Python dictionary"); - PyGILState_Release(gilstate); - return result; - } - } - - /* add target values to a dict that will be used as '__locals__' dict */ - driver_vars = PyDict_New(); // XXX do we need to decref this? - for (dtar= driver->targets.first; dtar; dtar= dtar->next) { - PyObject *driver_arg = NULL; - float tval = 0.0f; - - /* try to get variable value */ - tval= driver_get_target_value(driver, dtar); - driver_arg= PyFloat_FromDouble((double)tval); - - /* try to add to dictionary */ - if (PyDict_SetItemString(driver_vars, dtar->name, driver_arg)) { - /* this target failed - bad name */ - if (targets_ok) { - /* first one - print some extra info for easier identification */ - fprintf(stderr, "\nBPY_pydriver_eval() - Error while evaluating PyDriver:\n"); - targets_ok= 0; - } - - fprintf(stderr, "\tBPY_pydriver_eval() - couldn't add variable '%s' to namespace \n", dtar->name); - BPy_errors_to_report(NULL); // TODO - reports - } - } - - /* execute expression to get a value */ - retval = PyRun_String(expr, Py_eval_input, bpy_pydriver_Dict, driver_vars); - - /* decref the driver vars first... */ - Py_DECREF(driver_vars); - - /* process the result */ - if (retval == NULL) { - result = pydriver_error(driver); - PyGILState_Release(gilstate); - return result; - } - - result = (float)PyFloat_AsDouble(retval); - Py_DECREF(retval); - - if ((result == -1) && PyErr_Occurred()) { - result = pydriver_error(driver); - PyGILState_Release(gilstate); - return result; - } - - /* all fine, make sure the "invalid expression" flag is cleared */ - driver->flag &= ~DRIVER_FLAG_INVALID; - - PyGILState_Release(gilstate); - - return result; -} int BPY_button_eval(bContext *C, char *expr, double *value) { diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index 9370ec91d37..9142aaed9ea 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -164,6 +164,7 @@ PyObject *pyrna_math_object_from_array(PointerRNA *ptr, PropertyRNA *prop) case PROP_VELOCITY: case PROP_ACCELERATION: case PROP_XYZ: + case PROP_XYZ|PROP_UNIT_LENGTH: if(len>=2 && len <= 4) { PyObject *vec_cb= newVectorObject_cb(ret, len, mathutils_rna_array_cb_index, FALSE); Py_DECREF(ret); /* the vector owns now */ @@ -379,6 +380,69 @@ static int pyrna_string_to_enum(PyObject *item, PointerRNA *ptr, PropertyRNA *pr return 1; } +static PyObject *pyrna_enum_to_py(PointerRNA *ptr, PropertyRNA *prop, int val) +{ + PyObject *item, *ret= NULL; + + if(RNA_property_flag(prop) & PROP_ENUM_FLAG) { + const char *identifier[RNA_ENUM_BITFLAG_SIZE + 1]; + + ret= PySet_New(NULL); + + if (RNA_property_enum_bitflag_identifiers(BPy_GetContext(), ptr, prop, val, identifier)) { + int index; + + for(index=0; identifier[index]; index++) { + item= PyUnicode_FromString(identifier[index]); + PySet_Add(ret, item); + Py_DECREF(item); + } + + } + } + else { + const char *identifier; + if (RNA_property_enum_identifier(BPy_GetContext(), ptr, prop, val, &identifier)) { + ret = PyUnicode_FromString(identifier); + } else { + EnumPropertyItem *item; + int free= FALSE; + + /* don't throw error here, can't trust blender 100% to give the + * right values, python code should not generate error for that */ + RNA_property_enum_items(BPy_GetContext(), ptr, prop, &item, NULL, &free); + if(item && item->identifier) { + ret= PyUnicode_FromString(item->identifier); + } + else { + char *ptr_name= RNA_struct_name_get_alloc(ptr, NULL, FALSE); + + /* prefer not fail silently incase of api errors, maybe disable it later */ + printf("RNA Warning: Current value \"%d\" matches no enum in '%s', '%s', '%s'\n", val, RNA_struct_identifier(ptr->type), ptr_name, RNA_property_identifier(prop)); + +#if 0 // gives python decoding errors while generating docs :( + char error_str[256]; + snprintf(error_str, sizeof(error_str), "RNA Warning: Current value \"%d\" matches no enum in '%s', '%s', '%s'", val, RNA_struct_identifier(ptr->type), ptr_name, RNA_property_identifier(prop)); + PyErr_Warn(PyExc_RuntimeWarning, error_str); +#endif + + if(ptr_name) + MEM_freeN(ptr_name); + + ret = PyUnicode_FromString( "" ); + } + + if(free) + MEM_freeN(item); + + /*PyErr_Format(PyExc_AttributeError, "RNA Error: Current value \"%d\" matches no enum", val); + ret = NULL;*/ + } + } + + return ret; +} + PyObject * pyrna_prop_to_py(PointerRNA *ptr, PropertyRNA *prop) { PyObject *ret; @@ -409,46 +473,7 @@ PyObject * pyrna_prop_to_py(PointerRNA *ptr, PropertyRNA *prop) } case PROP_ENUM: { - const char *identifier; - int val = RNA_property_enum_get(ptr, prop); - - if (RNA_property_enum_identifier(BPy_GetContext(), ptr, prop, val, &identifier)) { - ret = PyUnicode_FromString( identifier ); - } else { - EnumPropertyItem *item; - int free= FALSE; - - /* don't throw error here, can't trust blender 100% to give the - * right values, python code should not generate error for that */ - RNA_property_enum_items(BPy_GetContext(), ptr, prop, &item, NULL, &free); - if(item && item->identifier) { - ret = PyUnicode_FromString( item->identifier ); - } - else { - char *ptr_name= RNA_struct_name_get_alloc(ptr, NULL, FALSE); - - /* prefer not fail silently incase of api errors, maybe disable it later */ - printf("RNA Warning: Current value \"%d\" matches no enum in '%s', '%s', '%s'\n", val, RNA_struct_identifier(ptr->type), ptr_name, RNA_property_identifier(prop)); - -#if 0 // gives python decoding errors while generating docs :( - char error_str[256]; - snprintf(error_str, sizeof(error_str), "RNA Warning: Current value \"%d\" matches no enum in '%s', '%s', '%s'", val, RNA_struct_identifier(ptr->type), ptr_name, RNA_property_identifier(prop)); - PyErr_Warn(PyExc_RuntimeWarning, error_str); -#endif - - if(ptr_name) - MEM_freeN(ptr_name); - - ret = PyUnicode_FromString( "" ); - } - - if(free) - MEM_freeN(item); - - /*PyErr_Format(PyExc_AttributeError, "RNA Error: Current value \"%d\" matches no enum", val); - ret = NULL;*/ - } - + ret= pyrna_enum_to_py(ptr, prop, RNA_property_enum_get(ptr, prop)); break; } case PROP_POINTER: @@ -534,7 +559,7 @@ int pyrna_pydict_to_props(PointerRNA *ptr, PyObject *kw, int all_args, const cha static PyObject * pyrna_func_call(PyObject *self, PyObject *args, PyObject *kw); -PyObject *pyrna_func_to_py(BPy_DummyPointerRNA *pyrna, FunctionRNA *func) +static PyObject *pyrna_func_to_py(BPy_DummyPointerRNA *pyrna, FunctionRNA *func) { static PyMethodDef func_meth = {"", (PyCFunction)pyrna_func_call, METH_VARARGS|METH_KEYWORDS, "python rna function"}; PyObject *self; @@ -559,6 +584,7 @@ PyObject *pyrna_func_to_py(BPy_DummyPointerRNA *pyrna, FunctionRNA *func) } + int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *value, const char *error_prefix) { /* XXX hard limits should be checked here */ @@ -653,28 +679,36 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *v } case PROP_ENUM: { - int val, i; + int val= 0, tmpval; if (PyUnicode_Check(value)) { if (!pyrna_string_to_enum(value, ptr, prop, &val, error_prefix)) return -1; } - else if (PyTuple_Check(value)) { - /* tuple of enum items, concatenate all values with OR */ - val= 0; - for (i= 0; i < PyTuple_Size(value); i++) { - int tmpval; + else if (PyAnySet_Check(value)) { + if(RNA_property_flag(prop) & PROP_ENUM_FLAG) { + /* set of enum items, concatenate all values with OR */ - /* PyTuple_GET_ITEM returns a borrowed reference */ - if (!pyrna_string_to_enum(PyTuple_GET_ITEM(value, i), ptr, prop, &tmpval, error_prefix)) - return -1; + /* set looping */ + Py_ssize_t pos = 0; + PyObject *key; + long hash; - val |= tmpval; + while (_PySet_NextEntry(value, &pos, &key, &hash)) { + if (!pyrna_string_to_enum(key, ptr, prop, &tmpval, error_prefix)) + return -1; + + val |= tmpval; + } + } + else { + PyErr_Format(PyExc_TypeError, "%.200s, %.200s.%.200s is not a bitflag enum type", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop)); + return -1; } } else { char *enum_str= pyrna_enum_as_string(ptr, prop); - PyErr_Format(PyExc_TypeError, "%.200s expected a string enum or a tuple of strings in (%.200s)", error_prefix, enum_str); + PyErr_Format(PyExc_TypeError, "%.200s expected a string enum or a set of strings in (%.200s)", error_prefix, enum_str); MEM_freeN(enum_str); return -1; } @@ -1134,22 +1168,29 @@ static PyMappingMethods pyrna_prop_as_mapping = { static int pyrna_prop_contains(BPy_PropertyRNA *self, PyObject *value) { PointerRNA newptr; /* not used, just so RNA_property_collection_lookup_string runs */ - char *keyname = _PyUnicode_AsString(value); - if(keyname==NULL) { - PyErr_SetString(PyExc_TypeError, "PropertyRNA - key in prop, key must be a string type"); + if (RNA_property_type(self->prop) == PROP_COLLECTION) { + /* key in dict style check */ + char *keyname = _PyUnicode_AsString(value); + + if(keyname==NULL) { + PyErr_SetString(PyExc_TypeError, "PropertyRNA - key in prop, key must be a string type"); + return -1; + } + + + if (RNA_property_collection_lookup_string(&self->ptr, self->prop, keyname, &newptr)) + return 1; + } + else if (RNA_property_array_check(&self->ptr, self->prop)) { + /* value in list style check */ + return pyrna_array_contains_py(&self->ptr, self->prop, value); + } + else { + PyErr_SetString(PyExc_TypeError, "PropertyRNA - type is not an array or a collection"); return -1; } - if (RNA_property_type(self->prop) != PROP_COLLECTION) { - PyErr_SetString(PyExc_TypeError, "PropertyRNA - key in prop, is only valid for collection types"); - return -1; - } - - - if (RNA_property_collection_lookup_string(&self->ptr, self->prop, keyname, &newptr)) - return 1; - return 0; } @@ -1617,14 +1658,6 @@ static PyObject *pyrna_struct_dir(BPy_StructRNA *self) BLI_freelistN(&lb); } - - /* Hard coded names */ - if(self->ptr.id.data) { - pystring = PyUnicode_FromString("id_data"); - PyList_Append(ret, pystring); - Py_DECREF(pystring); - } - return ret; } @@ -1691,17 +1724,6 @@ static PyObject *pyrna_struct_getattro( BPy_StructRNA *self, PyObject *pyname ) BLI_freelistN(&newlb); } - else if (strcmp(name, "id_data")==0) { /* XXX - hard coded */ - if(self->ptr.id.data) { - PointerRNA id_ptr; - RNA_id_pointer_create((ID *)self->ptr.id.data, &id_ptr); - ret = pyrna_struct_CreatePyObject(&id_ptr); - } - else { - ret = Py_None; - Py_INCREF(ret); - } - } else { #if 0 PyErr_Format( PyExc_AttributeError, "StructRNA - Attribute \"%.200s\" not found", name); @@ -1873,6 +1895,17 @@ static PyObject *pyrna_prop_remove(BPy_PropertyRNA *self, PyObject *value) return ret; } +static PyObject *pyrna_struct_get_id_data(BPy_StructRNA *self) +{ + if(self->ptr.id.data) { + PointerRNA id_ptr; + RNA_id_pointer_create((ID *)self->ptr.id.data, &id_ptr); + return pyrna_struct_CreatePyObject(&id_ptr); + } + + Py_RETURN_NONE; +} + /*****************************************************************************/ /* Python attributes get/set structure: */ /*****************************************************************************/ @@ -1883,6 +1916,11 @@ static PyGetSetDef pyrna_prop_getseters[] = { }; #endif +static PyGetSetDef pyrna_struct_getseters[] = { + {"id_data", (getter)pyrna_struct_get_id_data, (setter)NULL, "The ID data this datablock is from, (not available for all data)", NULL}, + {NULL,NULL,NULL,NULL,NULL} /* Sentinel */ +}; + static PyObject *pyrna_prop_keys(BPy_PropertyRNA *self) { PyObject *ret; @@ -2231,6 +2269,9 @@ static PyObject *foreach_getset(BPy_PropertyRNA *self, PyObject *args, int set) } } + if(array) + PyMem_Free(array); + if(PyErr_Occurred()) { /* Maybe we could make our own error */ PyErr_Print(); @@ -2242,9 +2283,6 @@ static PyObject *foreach_getset(BPy_PropertyRNA *self, PyObject *args, int set) return NULL; } - if(array) - PyMem_Free(array); - Py_RETURN_NONE; } @@ -2422,22 +2460,7 @@ PyObject *pyrna_param_to_py(PointerRNA *ptr, PropertyRNA *prop, void *data) } case PROP_ENUM: { - const char *identifier; - int val = *(int*)data; - - if (RNA_property_enum_identifier(BPy_GetContext(), ptr, prop, val, &identifier)) { - ret = PyUnicode_FromString( identifier ); - } else { - /* prefer not fail silently incase of api errors, maybe disable it later */ - char error_str[128]; - sprintf(error_str, "RNA Warning: Current value \"%d\" matches no enum", val); - PyErr_Warn(PyExc_RuntimeWarning, error_str); - - ret = PyUnicode_FromString( "" ); - /*PyErr_Format(PyExc_AttributeError, "RNA Error: Current value \"%d\" matches no enum", val); - ret = NULL;*/ - } - + ret= pyrna_enum_to_py(ptr, prop, *(int*)data); break; } case PROP_POINTER: @@ -2645,6 +2668,9 @@ static PyObject * pyrna_func_call(PyObject *self, PyObject *args, PyObject *kw) RNA_parameter_list_begin(&parms, &iter); for(; iter.valid; RNA_parameter_list_next(&iter)) { parm= iter.parm; + if(RNA_property_flag(parm) & PROP_RETURN) + continue; + BLI_dynstr_appendf(good_args, first ? "%s" : ", %s", RNA_property_identifier(parm)); first= FALSE; } @@ -2758,7 +2784,7 @@ PyTypeObject pyrna_struct_Type = { /*** Attribute descriptor and subclassing stuff ***/ pyrna_struct_methods, /* struct PyMethodDef *tp_methods; */ NULL, /* struct PyMemberDef *tp_members; */ - NULL, /* struct PyGetSetDef *tp_getset; */ + pyrna_struct_getseters, /* struct PyGetSetDef *tp_getset; */ NULL, /* struct _typeobject *tp_base; */ NULL, /* PyObject *tp_dict; */ NULL, /* descrgetfunc tp_descr_get; */ @@ -3690,11 +3716,15 @@ static int deferred_register_prop(StructRNA *srna, PyObject *item, PyObject *key if(PyTuple_CheckExact(item) && PyTuple_GET_SIZE(item)==2) { PyObject *py_func_ptr, *py_kw, *py_srna_cobject, *py_ret; + PyObject *(*pyfunc)(PyObject *, PyObject *, PyObject *); if(PyArg_ParseTuple(item, "O!O!", &PyCObject_Type, &py_func_ptr, &PyDict_Type, &py_kw)) { - PyObject *(*pyfunc)(PyObject *, PyObject *, PyObject *); - + if(*_PyUnicode_AsString(key)=='_') { + PyErr_Format(PyExc_ValueError, "StructRNA \"%.200s\" registration error: %.200s could not register because the property starts with an '_'\n", RNA_struct_identifier(srna), _PyUnicode_AsString(key)); + Py_DECREF(dummy_args); + return -1; + } pyfunc = PyCObject_AsVoidPtr(py_func_ptr); py_srna_cobject = PyCObject_FromVoidPtr(srna, NULL); diff --git a/source/blender/python/intern/bpy_rna.h b/source/blender/python/intern/bpy_rna.h index 0e40bf7258c..37f6af36726 100644 --- a/source/blender/python/intern/bpy_rna.h +++ b/source/blender/python/intern/bpy_rna.h @@ -103,5 +103,6 @@ int pyrna_py_to_array_index(PointerRNA *ptr, PropertyRNA *prop, int arraydim, in PyObject *pyrna_py_from_array(PointerRNA *ptr, PropertyRNA *prop); PyObject *pyrna_py_from_array_index(BPy_PropertyRNA *self, int index); PyObject *pyrna_math_object_from_array(PointerRNA *ptr, PropertyRNA *prop); +int pyrna_array_contains_py(PointerRNA *ptr, PropertyRNA *prop, PyObject *value); #endif diff --git a/source/blender/python/intern/bpy_util.c b/source/blender/python/intern/bpy_util.c index cd53ba9c069..db3798146d3 100644 --- a/source/blender/python/intern/bpy_util.c +++ b/source/blender/python/intern/bpy_util.c @@ -92,11 +92,13 @@ int BPY_flag_from_seq(BPY_flag_def *flagdef, PyObject *seq, int *flag) if(cstring) { fd= flagdef; while(fd->name) { - if (strcmp(cstring, fd->name) == 0) + if (strcmp(cstring, fd->name) == 0) { (*flag) |= fd->flag; + break; + } fd++; } - if (fd==NULL) { /* could not find a match */ + if (fd->name==NULL) { /* could not find a match */ error_val= 1; } } else { diff --git a/source/blender/quicktime/apple/Makefile b/source/blender/quicktime/apple/Makefile index 0cee45e3af0..19f87ed31e3 100644 --- a/source/blender/quicktime/apple/Makefile +++ b/source/blender/quicktime/apple/Makefile @@ -52,6 +52,5 @@ CPPFLAGS += -I.. # stuff needed by quicktime_[import|export].c CPPFLAGS += -I../../blenloader -I../../imbuf/intern -I../../imbuf CPPFLAGS += -I../../blenlib -I../../makesdna -I../../editors/include -I../../avi -CPPFLAGS += -I../../blenkernel -I../../render/extern/include - +CPPFLAGS += -I../../blenkernel -I../../render/extern/include -I../../windowmanager -I../../makesrna diff --git a/source/blender/render/SConscript b/source/blender/render/SConscript index 2327f4e069e..f3a997aa5bf 100644 --- a/source/blender/render/SConscript +++ b/source/blender/render/SConscript @@ -1,22 +1,6 @@ #!/usr/bin/python Import ('env') -cflags = env['CCFLAGS'] -cxxflags = env['CXXFLAGS'] - -if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'): - if env['WITH_BF_RAYOPTIMIZATION']: - cflags = env['CCFLAGS'] + ['/arch:SSE'] - -if env['OURPLATFORM'] == 'win32-mingw': - if env['WITH_BF_RAYOPTIMIZATION']: - cflags = env['CCFLAGS'] + ['-mfpmath=sse'] - -if env['OURPLATFORM'] == 'darwin': - if env['MACOSX_ARCHITECTURE'] in ('i386', 'x86_64') and env['WITH_BF_RAYOPTIMIZATION']: - cflags = env['CFLAGS'] + ['-mfpmath=sse'] - cxxflags = env['CXXFLAGS'] + ['-mfpmath=sse'] - sources = env.Glob('intern/source/*.c') raysources = env.Glob('intern/raytrace/*.cpp') @@ -24,8 +8,32 @@ incs = 'intern/include #/intern/guardedalloc ../blenlib ../makesdna ../makesrna' incs += ' extern/include ../blenkernel ../radiosity/extern/include ../imbuf' incs += ' ../include ../blenloader ../freestyle ../../../intern/smoke/extern' +cflags = env['CCFLAGS'] +cxxflags = env['CXXFLAGS'] + defs = [] +if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'): + if env['WITH_BF_RAYOPTIMIZATION']: + cflags = env['CCFLAGS'] + env['BF_RAYOPTIMIZATION_SSE_FLAGS'] + cxxflags = env['CCFLAGS'] + env['BF_RAYOPTIMIZATION_SSE_FLAGS'] + +if env['OURPLATFORM'] == 'win32-mingw': + if env['WITH_BF_RAYOPTIMIZATION']: + cflags = env['CCFLAGS'] + env['BF_RAYOPTIMIZATION_SSE_FLAGS'] + cxxflags = env['CXXFLAGS'] + env['BF_RAYOPTIMIZATION_SSE_FLAGS'] + +if env['OURPLATFORM'] == 'darwin': + if env['MACOSX_ARCHITECTURE'] in ('i386', 'x86_64') and env['WITH_BF_RAYOPTIMIZATION']: + cflags = env['CFLAGS'] + env['BF_RAYOPTIMIZATION_SSE_FLAGS'] + cxxflags = env['CXXFLAGS'] + env['BF_RAYOPTIMIZATION_SSE_FLAGS'] + +if env['OURPLATFORM'] == 'linux2': + if env['WITH_BF_RAYOPTIMIZATION']: + cflags = env['CCFLAGS'] + env['BF_RAYOPTIMIZATION_SSE_FLAGS'] + cxxflags = env['CXXFLAGS'] + env['BF_RAYOPTIMIZATION_SSE_FLAGS'] + incs += ' ../../../extern/binreloc/include' + if env['WITH_BF_QUICKTIME']: defs.append('WITH_QUICKTIME') incs += ' ../quicktime ' + env['BF_QUICKTIME_INC'] @@ -33,15 +41,6 @@ if env['WITH_BF_QUICKTIME']: if env['WITH_BF_OPENEXR']: defs.append('WITH_OPENEXR') -if env['OURPLATFORM'] == 'linux2': -# SSE is NOT safe all the time on linux, plus that ignores users compile flags and therefore no no -# cflags = ['-O2','-msse2','-mfpmath=sse', '-pthread'] -# cxxflags = ['-O2','-msse2','-mfpmath=sse', '-pthread'] - if env['WITH_BF_RAYOPTIMIZATION']: - cflags = env['CCFLAGS'] + ['-O2','-msse2','-mfpmath=sse', '-pthread'] - cxxflags = env['CXXFLAGS'] + ['-O2','-msse2','-mfpmath=sse', '-pthread'] - incs += ' ../../../extern/binreloc/include' - if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'): incs += ' ' + env['BF_PTHREADS_INC'] diff --git a/source/blender/render/intern/raytrace/reorganize.h b/source/blender/render/intern/raytrace/reorganize.h index 2d4a4d15fe2..7b14108760a 100644 --- a/source/blender/render/intern/raytrace/reorganize.h +++ b/source/blender/render/intern/raytrace/reorganize.h @@ -39,6 +39,10 @@ extern int tot_pushup; extern int tot_pushdown; +#if !defined(INFINITY) && defined(HUGE_VAL) +#define INFINITY HUGE_VAL +#endif + template bool node_fits_inside(Node *a, Node *b) { diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index 8f8e083523b..c89811a62e0 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -1707,11 +1707,9 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem totface= psmd->dm->getNumFaces(psmd->dm); origindex= psmd->dm->getFaceDataArray(psmd->dm, CD_ORIGINDEX); - if(origindex) { - for(a=0; atotbound= MAX2(strandbuf->totbound, origindex[a]); - strandbuf->totbound++; - } + for(a=0; atotbound= MAX2(strandbuf->totbound, (origindex)? origindex[a]: a); + strandbuf->totbound++; strandbuf->bound= MEM_callocN(sizeof(StrandBound)*strandbuf->totbound, "StrandBound"); sbound= strandbuf->bound; @@ -1852,8 +1850,10 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem dosimplify = psys_render_simplify_params(psys, cpa, simplify); if(strandbuf) { - if(origindex[cpa->num]+1 > sbound - strandbuf->bound) { - sbound= strandbuf->bound + origindex[cpa->num]+1; + int orignum= (origindex)? origindex[cpa->num]: cpa->num; + + if(orignum > sbound - strandbuf->bound) { + sbound= strandbuf->bound + orignum; sbound->start= sbound->end= obr->totstrand; } } diff --git a/source/blender/render/intern/source/occlusion.c b/source/blender/render/intern/source/occlusion.c index 3a5680eaf70..40fcc2b399a 100644 --- a/source/blender/render/intern/source/occlusion.c +++ b/source/blender/render/intern/source/occlusion.c @@ -356,18 +356,18 @@ static void occ_sum_occlusion(OcclusionTree *tree, OccNode *node) { OccNode *child; float occ, area, totarea, rad[3]; - int a, b; + int a, b, indirect= tree->doindirect; occ= 0.0f; totarea= 0.0f; - zero_v3(rad); + if(indirect) zero_v3(rad); for(b=0; bchildflag & (1<child[b].face; occ_face(&tree->face[a], 0, 0, &area); occ += area*tree->occlusion[a]; - madd_v3_v3fl(rad, tree->rad[a], area); + if(indirect) madd_v3_v3fl(rad, tree->rad[a], area); totarea += area; } else if(node->child[b].node) { @@ -375,18 +375,18 @@ static void occ_sum_occlusion(OcclusionTree *tree, OccNode *node) occ_sum_occlusion(tree, child); occ += child->area*child->occlusion; - madd_v3_v3fl(rad, child->rad, child->area); + if(indirect) madd_v3_v3fl(rad, child->rad, child->area); totarea += child->area; } } if(totarea != 0.0f) { occ /= totarea; - mul_v3_fl(rad, 1.0f/totarea); + if(indirect) mul_v3_fl(rad, 1.0f/totarea); } node->occlusion= occ; - copy_v3_v3(node->rad, rad); + if(indirect) copy_v3_v3(node->rad, rad); } static int occ_find_bbox_axis(OcclusionTree *tree, int begin, int end, float *min, float *max) @@ -1613,6 +1613,7 @@ static void *exec_strandsurface_sample(void *data) void make_occ_tree(Render *re) { OcclusionThread othreads[BLENDER_MAX_THREADS]; + OcclusionTree *tree; StrandSurface *mesh; ListBase threads; float ao[3], indirect[3], (*faceao)[3], (*faceindirect)[3]; @@ -1624,13 +1625,13 @@ void make_occ_tree(Render *re) re->i.infostr= "Occlusion preprocessing"; re->stats_draw(re->sdh, &re->i); - re->occlusiontree= occ_tree_build(re); + re->occlusiontree= tree= occ_tree_build(re); - if(re->occlusiontree) { + if(tree) { if(re->wrld.ao_approx_passes > 0) - occ_compute_passes(re, re->occlusiontree, re->wrld.ao_approx_passes); - if(re->wrld.ao_indirect_bounces > 1) - occ_compute_bounces(re, re->occlusiontree, re->wrld.ao_indirect_bounces); + occ_compute_passes(re, tree, re->wrld.ao_approx_passes); + if(tree->doindirect && re->wrld.ao_indirect_bounces > 1) + occ_compute_bounces(re, tree, re->wrld.ao_indirect_bounces); for(mesh=re->strandsurface.first; mesh; mesh=mesh->next) { if(!mesh->face || !mesh->co || !mesh->ao) diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index 10d1c1e5f60..f9a08e81c26 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -48,8 +48,9 @@ #include "BKE_report.h" #include "BKE_scene.h" #include "BKE_writeavi.h" /* <------ should be replaced once with generic movie module */ -#include "BKE_sequence.h" +#include "BKE_sequencer.h" #include "BKE_pointcache.h" +#include "BKE_animsys.h" /* <------ should this be here?, needed for sequencer update */ #include "MEM_guardedalloc.h" @@ -2447,6 +2448,11 @@ static void do_render_seq(Render * re) RenderResult *rr = re->result; int cfra = re->r.cfra; + if(recurs_depth==0) { + /* otherwise sequencer animation isnt updated */ + BKE_animsys_evaluate_all_animation(G.main, (float)cfra); // XXX, was frame_to_float(re->scene, cfra) + } + recurs_depth++; ibuf= give_ibuf_seq(re->scene, rr->rectx, rr->recty, cfra, 0, 100.0); @@ -2506,6 +2512,12 @@ static void do_render_seq(Render * re) /* main loop: doing sequence + fields + blur + 3d render + compositing */ static void do_render_all_options(Render *re) { +#ifdef DURIAN_CAMERA_SWITCH + Object *camera= scene_find_camera_switch(re->scene); + if(camera) + re->scene->camera= camera; +#endif + re->i.starttime= PIL_check_seconds_timer(); /* ensure no images are in memory from previous animated sequences */ diff --git a/source/blender/render/intern/source/texture.c b/source/blender/render/intern/source/texture.c index 16372d7a15d..9d03889a747 100644 --- a/source/blender/render/intern/source/texture.c +++ b/source/blender/render/intern/source/texture.c @@ -1495,6 +1495,14 @@ float texture_value_blend(float tex, float out, float fact, float facg, int blen in= 1.0-(facm+fact*(1.0-tex))*(1.0-out); break; + case MTEX_OVERLAY: + facm= 1.0-facg; + if(out < 0.5f) + in = out * (facm + 2.0f*fact*tex); + else + in = 1.0f - (facm + 2.0f*fact*(1.0 - tex)) * (1.0 - out); + break; + case MTEX_SUB: fact= -fact; case MTEX_ADD: diff --git a/source/blender/render/intern/source/zbuf.c b/source/blender/render/intern/source/zbuf.c index a3a714553d2..ac3474e51e5 100644 --- a/source/blender/render/intern/source/zbuf.c +++ b/source/blender/render/intern/source/zbuf.c @@ -2587,14 +2587,14 @@ void zbuffer_sss(RenderPart *pa, unsigned int lay, void *handle, void (*func)(vo v3= vlr->v3; v4= vlr->v4; - c1= zbuf_part_project(cache, v1->index, winmat, bounds, v1->co, ho1); - c2= zbuf_part_project(cache, v2->index, winmat, bounds, v2->co, ho2); - c3= zbuf_part_project(cache, v3->index, winmat, bounds, v3->co, ho3); + c1= zbuf_part_project(cache, v1->index, obwinmat, bounds, v1->co, ho1); + c2= zbuf_part_project(cache, v2->index, obwinmat, bounds, v2->co, ho2); + c3= zbuf_part_project(cache, v3->index, obwinmat, bounds, v3->co, ho3); /* partclipping doesn't need viewplane clipping */ partclip= c1 & c2 & c3; if(v4) { - c4= zbuf_part_project(cache, v4->index, winmat, bounds, v4->co, ho4); + c4= zbuf_part_project(cache, v4->index, obwinmat, bounds, v4->co, ho4); partclip &= c4; } diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 1fab234dbf7..1702149cf8b 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -74,7 +74,7 @@ int WM_write_homefile (struct bContext *C, struct wmOperator *op); void WM_read_file (struct bContext *C, char *name, struct ReportList *reports); void WM_write_file (struct bContext *C, char *target, int fileflags, struct ReportList *reports); void WM_read_autosavefile(struct bContext *C); -void WM_autosave_init (struct bContext *C); +void WM_autosave_init (struct wmWindowManager *wm); /* mouse cursors */ void WM_cursor_set (struct wmWindow *win, int curs); @@ -108,11 +108,15 @@ void WM_keymap_remove_item(struct wmKeyMap *keymap, struct wmKeyMapItem char *WM_keymap_item_to_string(wmKeyMapItem *kmi, char *str, int len); wmKeyMap *WM_keymap_find(struct wmKeyConfig *keyconf, char *idname, int spaceid, int regionid); +wmKeyMap *WM_keymap_list_find(ListBase *lb, char *idname, int spaceid, int regionid); wmKeyMap *WM_keymap_active(struct wmWindowManager *wm, struct wmKeyMap *keymap); int WM_keymap_user_init(struct wmWindowManager *wm, struct wmKeyMap *keymap); wmKeyMap *WM_keymap_copy_to_user(struct wmKeyMap *keymap); void WM_keymap_restore_to_default(struct wmKeyMap *keymap); void WM_keymap_properties_reset(struct wmKeyMapItem *kmi); +void WM_keymap_restore_item_to_default(struct bContext *C, struct wmKeyMap *keymap, struct wmKeyMapItem *kmi); +int WM_keymap_item_compare(struct wmKeyMapItem *k1, struct wmKeyMapItem *k2); +int WM_userdef_event_map(int kmitype); wmKeyMap *WM_modalkeymap_add(struct wmKeyConfig *keyconf, char *idname, struct EnumPropertyItem *items); wmKeyMap *WM_modalkeymap_get(struct wmKeyConfig *keyconf, char *idname); @@ -262,6 +266,7 @@ void wmPopMatrix (void); /* one level only */ void wmFrustum (float x1, float x2, float y1, float y2, float n, float f); void wmOrtho (float x1, float x2, float y1, float y2, float n, float f); void wmOrtho2 (float x1, float x2, float y1, float y2); +void wmOrthoPixelSpace (void); /* utilities */ void WM_set_framebuffer_index_color(int index); diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h index 53cca69fffc..318945918e7 100644 --- a/source/blender/windowmanager/WM_types.h +++ b/source/blender/windowmanager/WM_types.h @@ -83,6 +83,7 @@ enum { #define KM_PRESS 1 #define KM_RELEASE 2 #define KM_CLICK 3 +#define KM_DBL_CLICK 4 /* ************** UI Handler ***************** */ @@ -168,6 +169,7 @@ typedef struct wmNotifier { #define ND_KEYINGSET (12<<16) #define ND_SCENEDELETE (13<<16) #define ND_LAYER (14<<16) +#define ND_SEQUENCER_SELECT (15<<16) /* NC_OBJECT Object */ #define ND_TRANSFORM (16<<16) @@ -216,10 +218,6 @@ typedef struct wmNotifier { /* NC_NODE Nodes */ #define ND_NODE_SELECT (1<<16) - /* NC_ID IDs */ -#define ND_ID_RENAME (1<<16) - - /* NC_SPACE */ #define ND_SPACE_CONSOLE (1<<16) /* general redraw */ #define ND_SPACE_CONSOLE_REPORT (2<<16) /* update for reports, could specify type */ @@ -243,17 +241,17 @@ typedef struct wmNotifier { #define NOTE_SUBTYPE 0x0000FF00 /* subtype scene mode */ -#define NS_MODE_OBJECT (1<<8) +#define NS_MODE_OBJECT (1<<8) -#define NS_EDITMODE_MESH (2<<8) -#define NS_EDITMODE_CURVE (3<<8) -#define NS_EDITMODE_SURFACE (4<<8) -#define NS_EDITMODE_TEXT (5<<8) -#define NS_EDITMODE_MBALL (6<<8) -#define NS_EDITMODE_LATTICE (7<<8) +#define NS_EDITMODE_MESH (2<<8) +#define NS_EDITMODE_CURVE (3<<8) +#define NS_EDITMODE_SURFACE (4<<8) +#define NS_EDITMODE_TEXT (5<<8) +#define NS_EDITMODE_MBALL (6<<8) +#define NS_EDITMODE_LATTICE (7<<8) #define NS_EDITMODE_ARMATURE (8<<8) -#define NS_MODE_POSE (9<<8) -#define NS_MODE_PARTICLE (10<<8) +#define NS_MODE_POSE (9<<8) +#define NS_MODE_PARTICLE (10<<8) /* action classification */ @@ -262,7 +260,7 @@ typedef struct wmNotifier { #define NA_EVALUATED 2 #define NA_ADDED 3 #define NA_REMOVED 4 - +#define NA_RENAME 5 /* ************** Gesture Manager data ************** */ @@ -290,6 +288,44 @@ typedef struct wmGesture { /* customdata for lasso is short array */ } wmGesture; +/* ************** wmEvent ************************ */ + +/* each event should have full modifier state */ +/* event comes from eventmanager and from keymap */ +typedef struct wmEvent { + struct wmEvent *next, *prev; + + short type; /* event code itself (short, is also in keymap) */ + short val; /* press, release, scrollvalue */ + short x, y; /* mouse pointer position, screen coord */ + short mval[2]; /* region mouse position, name convention pre 2.5 :) */ + short unicode; /* future, ghost? */ + char ascii; /* from ghost */ + char pad; + + /* previous state */ + short prevtype; + short prevval; + short prevx, prevy; + double prevclicktime; + + /* modifier states */ + short shift, ctrl, alt, oskey; /* oskey is apple or windowskey, value denotes order of pressed */ + short keymodifier; /* rawkey modifier */ + + short pad1; + + /* keymap item, set by handler (weak?) */ + const char *keymap_idname; + + /* custom data */ + short custom; /* custom data type, stylus, 6dof, see wm_event_types.h */ + short customdatafree; + int pad2; + void *customdata; /* ascii, unicode, mouse coords, angles, vectors, dragdrop info */ + +} wmEvent; + /* ************** custom wmEvent data ************** */ typedef struct wmTabletData { int Active; /* 0=EVT_TABLET_NONE, 1=EVT_TABLET_STYLUS, 2=EVT_TABLET_ERASER */ diff --git a/source/blender/windowmanager/intern/wm.c b/source/blender/windowmanager/intern/wm.c index d455c8b2bc1..ee1d76020c2 100644 --- a/source/blender/windowmanager/intern/wm.c +++ b/source/blender/windowmanager/intern/wm.c @@ -213,7 +213,7 @@ void WM_check(bContext *C) /* case: fileread */ if((wm->initialized & WM_INIT_WINDOW) == 0) { WM_keymap_init(C); - WM_autosave_init(C); + WM_autosave_init(wm); } /* case: no open windows at all, for old file reads */ diff --git a/source/blender/windowmanager/intern/wm_cursors.c b/source/blender/windowmanager/intern/wm_cursors.c index 95a1de96115..dfcc1fcd227 100644 --- a/source/blender/windowmanager/intern/wm_cursors.c +++ b/source/blender/windowmanager/intern/wm_cursors.c @@ -180,6 +180,8 @@ void WM_cursor_grab(wmWindow *win, int wrap, int hide, int *bounds) GHOST_SetCursorGrab(win->ghostwin, mode, bounds); else if (tabletdata->Active == GHOST_kTabletModeNone) GHOST_SetCursorGrab(win->ghostwin, mode, bounds); + + win->grabcursor = mode; } } } @@ -187,8 +189,10 @@ void WM_cursor_grab(wmWindow *win, int wrap, int hide, int *bounds) void WM_cursor_ungrab(wmWindow *win) { if ((G.f & G_DEBUG) == 0) { - if(win && win->ghostwin) + if(win && win->ghostwin) { GHOST_SetCursorGrab(win->ghostwin, GHOST_kGrabDisable, NULL); + win->grabcursor = GHOST_kGrabDisable; + } } } diff --git a/source/blender/windowmanager/intern/wm_draw.c b/source/blender/windowmanager/intern/wm_draw.c index e7c04141ad3..9ee67cd4047 100644 --- a/source/blender/windowmanager/intern/wm_draw.c +++ b/source/blender/windowmanager/intern/wm_draw.c @@ -34,6 +34,7 @@ #include "DNA_screen_types.h" #include "DNA_windowmanager_types.h" #include "DNA_userdef_types.h" +#include "DNA_view3d_types.h" #include "MEM_guardedalloc.h" @@ -41,6 +42,9 @@ #include "BKE_context.h" #include "BKE_global.h" +#include "BKE_utildefines.h" + +#include "GHOST_C-api.h" #include "ED_screen.h" @@ -72,15 +76,27 @@ static void wm_paintcursor_draw(bContext *C, ARegion *ar) if(screen->subwinactive == ar->swinid) { for(pc= wm->paintcursors.first; pc; pc= pc->next) { - if(pc->poll(C)) { + if(pc->poll == NULL || pc->poll(C)) { ARegion *ar= CTX_wm_region(C); - pc->draw(C, win->eventstate->x - ar->winrct.xmin, win->eventstate->y - ar->winrct.ymin, pc->customdata); + if (ELEM(win->grabcursor, GHOST_kGrabWrap, GHOST_kGrabHide)) { + int x = 0, y = 0; + wm_get_cursor_position(win, &x, &y); + pc->draw(C, x - ar->winrct.xmin, y - ar->winrct.ymin, pc->customdata); + } else { + pc->draw(C, win->eventstate->x - ar->winrct.xmin, win->eventstate->y - ar->winrct.ymin, pc->customdata); + } } } } } } +static void wm_area_mark_invalid_backbuf(ScrArea *sa) +{ + if(sa->spacetype == SPACE_VIEW3D) + ((View3D*)sa->spacedata.first)->flag |= V3D_INVALID_BACKBUF; +} + /********************** draw all **************************/ /* - reference method, draw all each time */ @@ -104,6 +120,7 @@ static void wm_method_draw_full(bContext *C, wmWindow *win) } } + wm_area_mark_invalid_backbuf(sa); CTX_wm_area_set(C, NULL); } @@ -221,6 +238,7 @@ static void wm_method_draw_overlap_all(bContext *C, wmWindow *win) } } + wm_area_mark_invalid_backbuf(sa); CTX_wm_area_set(C, NULL); } @@ -544,6 +562,7 @@ static void wm_method_draw_triple(bContext *C, wmWindow *win) } } + wm_area_mark_invalid_backbuf(sa); CTX_wm_area_set(C, NULL); } @@ -566,7 +585,7 @@ static void wm_method_draw_triple(bContext *C, wmWindow *win) } } - if(win->screen->do_draw_gesture) + if(screen->do_draw_gesture) wm_gesture_draw(win); if(wm->paintcursors.first) { diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index c19d1000573..435f3823fed 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -46,11 +46,9 @@ #include "BKE_idprop.h" #include "BKE_global.h" #include "BKE_main.h" -#include "BKE_object.h" #include "BKE_report.h" #include "BKE_scene.h" #include "BKE_utildefines.h" -#include "BKE_pointcache.h" #include "ED_fileselect.h" #include "ED_info.h" @@ -62,6 +60,8 @@ #include "UI_interface.h" +#include "PIL_time.h" + #include "WM_api.h" #include "WM_types.h" #include "wm.h" @@ -178,21 +178,25 @@ void wm_event_do_notifiers(bContext *C) if(note->category==NC_SCREEN) { if(note->data==ND_SCREENBROWSE) { ED_screen_set(C, note->reference); // XXX hrms, think this over! - printf("screen set %p\n", note->reference); + if(G.f & G_DEBUG) + printf("screen set %p\n", note->reference); } else if(note->data==ND_SCREENDELETE) { ED_screen_delete(C, note->reference); // XXX hrms, think this over! - printf("screen delete %p\n", note->reference); + if(G.f & G_DEBUG) + printf("screen delete %p\n", note->reference); } } else if(note->category==NC_SCENE) { if(note->data==ND_SCENEBROWSE) { ED_screen_set_scene(C, note->reference); // XXX hrms, think this over! - printf("scene set %p\n", note->reference); + if(G.f & G_DEBUG) + printf("scene set %p\n", note->reference); } if(note->data==ND_SCENEDELETE) { ED_screen_delete_scene(C, note->reference); // XXX hrms, think this over! - printf("scene delete %p\n", note->reference); + if(G.f & G_DEBUG) + printf("scene delete %p\n", note->reference); } else if(note->data==ND_FRAME) do_anim= 1; @@ -246,9 +250,7 @@ void wm_event_do_notifiers(bContext *C) /* cached: editor refresh callbacks now, they get context */ for(win= wm->windows.first; win; win= win->next) { - Scene *sce, *scene= win->screen->scene; ScrArea *sa; - Base *base; CTX_wm_window_set(C, win); for(sa= win->screen->areabase.first; sa; sa= sa->next) { @@ -258,23 +260,12 @@ void wm_event_do_notifiers(bContext *C) } } - if(G.rendering==0) { // XXX make lock in future, or separated derivedmesh users in scene - - /* update all objects, drivers, matrices, displists, etc. Flags set by depgraph or manual, - no layer check here, gets correct flushed */ - /* sets first, we allow per definition current scene to have dependencies on sets */ - if(scene->set) { - for(SETLOOPER(scene->set, base)) - object_handle_update(scene, base->object); - } - - for(base= scene->base.first; base; base= base->next) { - object_handle_update(scene, base->object); - } - - BKE_ptcache_quick_cache_all(scene); - } + /* XXX make lock in future, or separated derivedmesh users in scene */ + if(!G.rendering) + /* depsgraph & animation: update tagged datablocks */ + scene_update_tagged(win->screen->scene); } + CTX_wm_window_set(C, NULL); } @@ -718,7 +709,7 @@ void WM_event_remove_handlers(bContext *C, ListBase *handlers) } /* do userdef mappings */ -static int wm_userdef_event_map(int kmitype) +int WM_userdef_event_map(int kmitype) { switch(kmitype) { case SELECTMOUSE: @@ -763,7 +754,7 @@ static int wm_userdef_event_map(int kmitype) static int wm_eventmatch(wmEvent *winevent, wmKeyMapItem *kmi) { - int kmitype= wm_userdef_event_map(kmi->type); + int kmitype= WM_userdef_event_map(kmi->type); if(kmi->flag & KMI_INACTIVE) return 0; @@ -837,7 +828,7 @@ static int wm_eventmatch(wmEvent *winevent, wmKeyMapItem *kmi) static int wm_event_always_pass(wmEvent *event) { /* some events we always pass on, to ensure proper communication */ - return ELEM4(event->type, TIMER, TIMER0, TIMER1, TIMER2); + return ISTIMER(event->type) || (event->type == WINDEACTIVATE); } /* operator exists */ @@ -1006,13 +997,24 @@ static int wm_handler_fileselect_call(bContext *C, ListBase *handlers, wmEventHa case EVT_FILESELECT_OPEN: case EVT_FILESELECT_FULL_OPEN: { + ScrArea *sa; + + /* sa can be null when window A is active, but mouse is over window B */ + /* in this case, open file select in original window A */ + if (handler->op_area == NULL) { + bScreen *screen = CTX_wm_screen(C); + sa = (ScrArea *)screen->areabase.first; + } else + sa = handler->op_area; + if(event->val==EVT_FILESELECT_OPEN) - ED_area_newspace(C, handler->op_area, SPACE_FILE); + ED_area_newspace(C, sa, SPACE_FILE); else - ED_screen_full_newspace(C, handler->op_area, SPACE_FILE); + ED_screen_full_newspace(C, sa, SPACE_FILE); /* sets context */ /* settings for filebrowser, sfile is not operator owner but sends events */ - sfile= (SpaceFile*)CTX_wm_space_data(C); + sa = CTX_wm_area(C); + sfile= (SpaceFile*)sa->spacedata.first; sfile->op= handler->op; ED_fileselect_set_params(sfile); @@ -1029,9 +1031,9 @@ static int wm_handler_fileselect_call(bContext *C, ListBase *handlers, wmEventHa char *path= RNA_string_get_alloc(handler->op->ptr, "path", NULL, 0); if(screen != handler->filescreen) - ED_screen_full_prevspace(C); + ED_screen_full_prevspace(C, CTX_wm_area(C)); else - ED_area_prevspace(C); + ED_area_prevspace(C, CTX_wm_area(C)); /* remlink now, for load file case */ BLI_remlink(handlers, handler); @@ -1102,6 +1104,11 @@ static int handler_boundbox_test(wmEventHandler *handler, wmEvent *event) return 1; } +static int wm_action_not_handled(int action) +{ + return action == WM_HANDLER_CONTINUE || action == (WM_HANDLER_BREAK|WM_HANDLER_MODAL); +} + static int wm_handlers_do(bContext *C, wmEvent *event, ListBase *handlers) { wmWindowManager *wm= CTX_wm_manager(C); @@ -1163,19 +1170,28 @@ static int wm_handlers_do(bContext *C, wmEvent *event, ListBase *handlers) /* fileread case */ if(CTX_wm_window(C)==NULL) - break; + return action; } /* test for CLICK event */ - if (event->val == KM_RELEASE && (action == WM_HANDLER_CONTINUE || action == (WM_HANDLER_BREAK|WM_HANDLER_MODAL))) { + if (wm_action_not_handled(action) && event->val == KM_RELEASE) { wmWindow *win = CTX_wm_window(C); - if (win && win->last_type == event->type && win->last_val == KM_PRESS) { - event->val = KM_CLICK; - action |= wm_handlers_do(C, event, handlers); + if (win && win->eventstate->prevtype == event->type && win->eventstate->prevval == KM_PRESS) { + /* test for double click first */ + if ((PIL_check_seconds_timer() - win->eventstate->prevclicktime) * 1000 < U.dbl_click_time) { + event->val = KM_DBL_CLICK; + action |= wm_handlers_do(C, event, handlers); + } + + if (wm_action_not_handled(action)) { + event->val = KM_CLICK; + action |= wm_handlers_do(C, event, handlers); + } + /* revert value if not handled */ - if ((action & WM_HANDLER_BREAK) == 0) { + if (wm_action_not_handled(action)) { event->val = KM_RELEASE; } } @@ -1362,14 +1378,29 @@ void wm_event_do_handlers(bContext *C) } /* store last event for this window */ - /* mousemove event don't overwrite last type */ - if (event->type != MOUSEMOVE) { - if (action == WM_HANDLER_CONTINUE || action == (WM_HANDLER_BREAK|WM_HANDLER_MODAL)) { - win->last_type = event->type; - win->last_val = event->val; - } else { - win->last_type = -1; - win->last_val = 0; + /* mousemove and timer events don't overwrite last type */ + if (event->type != MOUSEMOVE && !ISTIMER(event->type)) { + if (wm_action_not_handled(action)) { + if (win->eventstate->prevtype == event->type) { + /* set click time on first click (press -> release) */ + if (win->eventstate->prevval == KM_PRESS && event->val == KM_RELEASE) { + win->eventstate->prevclicktime = PIL_check_seconds_timer(); + } + } else { + /* reset click time if event type not the same */ + win->eventstate->prevclicktime = 0; + } + + win->eventstate->prevval = event->val; + win->eventstate->prevtype = event->type; + } else if (event->val == KM_CLICK) { /* keep click for double click later */ + win->eventstate->prevtype = event->type; + win->eventstate->prevval = event->val; + win->eventstate->prevclicktime = PIL_check_seconds_timer(); + } else { /* reset if not */ + win->eventstate->prevtype = -1; + win->eventstate->prevval = 0; + win->eventstate->prevclicktime = 0; } } @@ -1812,5 +1843,13 @@ void wm_event_add_ghostevent(wmWindow *win, int type, void *customdata) case GHOST_kEventUnknown: case GHOST_kNumEventTypes: break; + + case GHOST_kEventWindowDeactivate: { + event.type= WINDEACTIVATE; + wm_event_add(win, &event); + + break; + } + } } diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c index ba514f097e6..87e4048971b 100644 --- a/source/blender/windowmanager/intern/wm_files.c +++ b/source/blender/windowmanager/intern/wm_files.c @@ -81,6 +81,7 @@ #include "ED_datafiles.h" #include "ED_object.h" #include "ED_screen.h" +#include "ED_sculpt.h" #include "ED_util.h" #include "GHOST_C-api.h" @@ -497,6 +498,7 @@ void WM_write_file(bContext *C, char *target, int fileflags, ReportList *reports } ED_object_exit_editmode(C, EM_DO_UNDO); + ED_sculpt_force_update(C); do_history(di, reports); @@ -569,9 +571,8 @@ void wm_autosave_location(char *filename) BLI_make_file_string("/", filename, U.tempdir, pidstr); } -void WM_autosave_init(bContext *C) +void WM_autosave_init(wmWindowManager *wm) { - wmWindowManager *wm= CTX_wm_manager(C); wm_autosave_timer_ended(wm); if(U.flag & USER_AUTOSAVE) diff --git a/source/blender/windowmanager/intern/wm_gesture.c b/source/blender/windowmanager/intern/wm_gesture.c index 882da1794c6..b95d171c1b0 100644 --- a/source/blender/windowmanager/intern/wm_gesture.c +++ b/source/blender/windowmanager/intern/wm_gesture.c @@ -248,6 +248,7 @@ void wm_gesture_draw(wmWindow *win) for(; gt; gt= gt->next) { /* all in subwindow space */ wmSubWindowSet(win, gt->swinid); + wmOrthoPixelSpace(); if(gt->type==WM_GESTURE_RECT) wm_gesture_draw_rect(win, gt); diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c index 09eecf2f425..6997bcaf309 100644 --- a/source/blender/windowmanager/intern/wm_init_exit.c +++ b/source/blender/windowmanager/intern/wm_init_exit.c @@ -53,6 +53,7 @@ #include "BKE_report.h" #include "BKE_utildefines.h" #include "BKE_packedFile.h" +#include "BKE_sequencer.h" /* free seq clipboard */ #include "BLI_blenlib.h" @@ -234,6 +235,8 @@ void WM_exit(bContext *C) if(C && CTX_wm_manager(C)) wm_free_reports(C); /* before free_blender! - since the ListBases get freed there */ + + seq_free_clipboard(); /* sequencer.c */ free_blender(); /* blender.c, does entire library and spacetypes */ // free_matcopybuf(); diff --git a/source/blender/windowmanager/intern/wm_keymap.c b/source/blender/windowmanager/intern/wm_keymap.c index b22f01b7d7a..7de7b3c45e1 100644 --- a/source/blender/windowmanager/intern/wm_keymap.c +++ b/source/blender/windowmanager/intern/wm_keymap.c @@ -185,6 +185,11 @@ wmKeyMapItem *WM_keymap_verify_item(wmKeyMap *keymap, char *idname, int type, in BLI_addtail(&keymap->items, kmi); BLI_strncpy(kmi->idname, idname, OP_MAX_TYPENAME); + if ((keymap->flag & KEYMAP_USER) == 0) { + keymap->kmi_id++; + kmi->id = keymap->kmi_id; + } + keymap_event_set(kmi, type, val, modifier, keymodifier); keymap_properties_set(kmi); } @@ -201,6 +206,12 @@ wmKeyMapItem *WM_keymap_add_item(wmKeyMap *keymap, char *idname, int type, int v keymap_event_set(kmi, type, val, modifier, keymodifier); keymap_properties_set(kmi); + + if ((keymap->flag & KEYMAP_USER) == 0) { + keymap->kmi_id++; + kmi->id = keymap->kmi_id; + } + return kmi; } @@ -229,7 +240,7 @@ void WM_keymap_remove_item(wmKeyMap *keymap, wmKeyMapItem *kmi) space/region ids are same as DNA_space_types.h */ /* gets free'd in wm.c */ -static wmKeyMap *wm_keymap_list_find(ListBase *lb, char *idname, int spaceid, int regionid) +wmKeyMap *WM_keymap_list_find(ListBase *lb, char *idname, int spaceid, int regionid) { wmKeyMap *km; @@ -243,7 +254,7 @@ static wmKeyMap *wm_keymap_list_find(ListBase *lb, char *idname, int spaceid, in wmKeyMap *WM_keymap_find(wmKeyConfig *keyconf, char *idname, int spaceid, int regionid) { - wmKeyMap *km= wm_keymap_list_find(&keyconf->keymaps, idname, spaceid, regionid); + wmKeyMap *km= WM_keymap_list_find(&keyconf->keymaps, idname, spaceid, regionid); if(km==NULL) { km= MEM_callocN(sizeof(struct wmKeyMap), "keymap list"); @@ -291,6 +302,11 @@ wmKeyMapItem *WM_modalkeymap_add_item(wmKeyMap *km, int type, int val, int modif keymap_event_set(kmi, type, val, modifier, keymodifier); + if ((km->flag & KEYMAP_USER) == 0) { + km->kmi_id++; + kmi->id = km->kmi_id; + } + return kmi; } @@ -442,6 +458,48 @@ char *WM_key_event_operator_string(const bContext *C, const char *opname, int op return NULL; } +int WM_keymap_item_compare(wmKeyMapItem *k1, wmKeyMapItem *k2) +{ + int k1type, k2type; + + if (k1->flag & KMI_INACTIVE || k2->flag & KMI_INACTIVE) + return 0; + + /* take event mapping into account */ + k1type = WM_userdef_event_map(k1->type); + k2type = WM_userdef_event_map(k2->type); + + if(k1type != KM_ANY && k2type != KM_ANY && k1type != k2type) + return 0; + + if(k1->val != KM_ANY && k2->val != KM_ANY) { + /* take click, press, release conflict into account */ + if (k1->val == KM_CLICK && ELEM3(k2->val, KM_PRESS, KM_RELEASE, KM_CLICK) == 0) + return 0; + if (k2->val == KM_CLICK && ELEM3(k1->val, KM_PRESS, KM_RELEASE, KM_CLICK) == 0) + return 0; + if (k1->val != k2->val) + return 0; + } + + if(k1->shift != KM_ANY && k2->shift != KM_ANY && k1->shift != k2->shift) + return 0; + + if(k1->ctrl != KM_ANY && k2->ctrl != KM_ANY && k1->ctrl != k2->ctrl) + return 0; + + if(k1->alt != KM_ANY && k2->alt != KM_ANY && k1->alt != k2->alt) + return 0; + + if(k1->oskey != KM_ANY && k2->oskey != KM_ANY && k1->oskey != k2->oskey) + return 0; + + if(k1->keymodifier != k2->keymodifier) + return 0; + + return 1; +} + /* ***************** user preferences ******************* */ int WM_keymap_user_init(wmWindowManager *wm, wmKeyMap *keymap) @@ -455,7 +513,7 @@ int WM_keymap_user_init(wmWindowManager *wm, wmKeyMap *keymap) /* init from user key config */ keyconf= wm_keyconfig_list_find(&wm->keyconfigs, U.keyconfigstr); if(keyconf) { - km= wm_keymap_list_find(&keyconf->keymaps, keymap->idname, keymap->spaceid, keymap->regionid); + km= WM_keymap_list_find(&keyconf->keymaps, keymap->idname, keymap->spaceid, keymap->regionid); if(km) { keymap->poll= km->poll; /* lazy init */ keymap->modal_items= km->modal_items; @@ -464,7 +522,7 @@ int WM_keymap_user_init(wmWindowManager *wm, wmKeyMap *keymap) } /* or from default */ - km= wm_keymap_list_find(&wm->defaultconf->keymaps, keymap->idname, keymap->spaceid, keymap->regionid); + km= WM_keymap_list_find(&wm->defaultconf->keymaps, keymap->idname, keymap->spaceid, keymap->regionid); if(km) { keymap->poll= km->poll; /* lazy init */ keymap->modal_items= km->modal_items; @@ -483,7 +541,7 @@ wmKeyMap *WM_keymap_active(wmWindowManager *wm, wmKeyMap *keymap) return NULL; /* first user defined keymaps */ - km= wm_keymap_list_find(&U.keymaps, keymap->idname, keymap->spaceid, keymap->regionid); + km= WM_keymap_list_find(&U.keymaps, keymap->idname, keymap->spaceid, keymap->regionid); if(km) { km->poll= keymap->poll; /* lazy init */ km->modal_items= keymap->modal_items; @@ -493,7 +551,7 @@ wmKeyMap *WM_keymap_active(wmWindowManager *wm, wmKeyMap *keymap) /* then user key config */ keyconf= wm_keyconfig_list_find(&wm->keyconfigs, U.keyconfigstr); if(keyconf) { - km= wm_keymap_list_find(&keyconf->keymaps, keymap->idname, keymap->spaceid, keymap->regionid); + km= WM_keymap_list_find(&keyconf->keymaps, keymap->idname, keymap->spaceid, keymap->regionid); if(km) { km->poll= keymap->poll; /* lazy init */ km->modal_items= keymap->modal_items; @@ -502,7 +560,7 @@ wmKeyMap *WM_keymap_active(wmWindowManager *wm, wmKeyMap *keymap) } /* then use default */ - km= wm_keymap_list_find(&wm->defaultconf->keymaps, keymap->idname, keymap->spaceid, keymap->regionid); + km= WM_keymap_list_find(&wm->defaultconf->keymaps, keymap->idname, keymap->spaceid, keymap->regionid); return km; } @@ -511,7 +569,7 @@ wmKeyMap *WM_keymap_copy_to_user(wmKeyMap *keymap) wmKeyMap *usermap; wmKeyMapItem *kmi; - usermap= wm_keymap_list_find(&U.keymaps, keymap->idname, keymap->spaceid, keymap->regionid); + usermap= WM_keymap_list_find(&U.keymaps, keymap->idname, keymap->spaceid, keymap->regionid); if(!usermap) { /* not saved yet, duplicate existing */ @@ -545,11 +603,60 @@ wmKeyMap *WM_keymap_copy_to_user(wmKeyMap *keymap) return usermap; } +void WM_keymap_restore_item_to_default(bContext *C, wmKeyMap *keymap, wmKeyMapItem *kmi) +{ + wmWindowManager *wm = CTX_wm_manager(C); + wmKeyConfig *keyconf; + wmKeyMap *km = NULL; + + /* look in user key config */ + keyconf= wm_keyconfig_list_find(&wm->keyconfigs, U.keyconfigstr); + if(keyconf) { + km= WM_keymap_list_find(&keyconf->keymaps, keymap->idname, keymap->spaceid, keymap->regionid); + } + + if (!km) { + /* or from default */ + km= WM_keymap_list_find(&wm->defaultconf->keymaps, keymap->idname, keymap->spaceid, keymap->regionid); + } + + if (km) { + wmKeyMapItem *orig; + + for (orig = km->items.first; orig; orig = orig->next) { + if (orig->id == kmi->id) + break; + } + + if (orig) { + if(strcmp(orig->idname, kmi->idname) != 0) { + BLI_strncpy(kmi->idname, orig->idname, sizeof(kmi->idname)); + + WM_keymap_properties_reset(kmi); + } + kmi->properties= IDP_CopyProperty(orig->properties); + kmi->ptr->data= kmi->properties; + + kmi->propvalue = orig->propvalue; + kmi->type = orig->type; + kmi->val = orig->val; + kmi->shift = orig->shift; + kmi->ctrl = orig->ctrl; + kmi->alt = orig->alt; + kmi->oskey = orig->oskey; + kmi->keymodifier = orig->keymodifier; + kmi->maptype = orig->maptype; + + } + + } +} + void WM_keymap_restore_to_default(wmKeyMap *keymap) { wmKeyMap *usermap; - usermap= wm_keymap_list_find(&U.keymaps, keymap->idname, keymap->spaceid, keymap->regionid); + usermap= WM_keymap_list_find(&U.keymaps, keymap->idname, keymap->spaceid, keymap->regionid); if(usermap) { WM_keymap_free(usermap); diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index f2ba9bb8eb6..fc5abec1561 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -615,6 +615,9 @@ int WM_menu_invoke(bContext *C, wmOperator *op, wmEvent *event) else if (RNA_property_type(prop) != PROP_ENUM) { printf("WM_menu_invoke: %s \"type\" is not an enum property\n", op->type->idname); } + else if (RNA_property_is_set(op->ptr, RNA_property_identifier(prop))) { + return op->type->exec(C, op); + } else { pup= uiPupMenuBegin(C, op->type->name, 0); layout= uiPupMenuLayout(pup); @@ -680,6 +683,8 @@ void WM_operator_properties_filesel(wmOperatorType *ot, int filter, short type) RNA_def_property_flag(prop, PROP_HIDDEN); prop= RNA_def_boolean(ot->srna, "filter_text", (filter & TEXTFILE), "Filter text files", ""); RNA_def_property_flag(prop, PROP_HIDDEN); + prop= RNA_def_boolean(ot->srna, "filter_btx", (filter & BTXFILE), "Filter btx files", ""); + RNA_def_property_flag(prop, PROP_HIDDEN); prop= RNA_def_boolean(ot->srna, "filter_folder", (filter & FOLDERFILE), "Filter folders", ""); RNA_def_property_flag(prop, PROP_HIDDEN); @@ -922,7 +927,7 @@ static uiBlock *wm_block_create_splash(bContext *C, ARegion *ar, void *arg_unuse uiLayoutSetOperatorContext(layout, WM_OP_EXEC_REGION_WIN); - split = uiLayoutSplit(layout, 0); + split = uiLayoutSplit(layout, 0, 0); col = uiLayoutColumn(split, 0); uiItemL(col, "Links", 0); uiItemO(col, NULL, ICON_URL, "HELP_OT_release_logs"); @@ -2378,7 +2383,7 @@ int WM_radial_control_modal(bContext *C, wmOperator *op, wmEvent *event) if(event->ctrl) { if(mode == WM_RADIALCONTROL_STRENGTH) - new_value = ((int)(new_value * 100) / 10*10) / 100.0f; + new_value = ((int)ceil(new_value * 10.f) * 10.0f) / 100.f; else new_value = ((int)new_value + 5) / 10*10; } @@ -2545,8 +2550,10 @@ static int redraw_timer_exec(bContext *C, wmOperator *op) CTX_wm_area_set(C, sa); for(ar_iter= sa->regionbase.first; ar_iter; ar_iter= ar_iter->next) { - CTX_wm_region_set(C, ar_iter); - ED_region_do_draw(C, ar_iter); + if(ar_iter->swinid) { + CTX_wm_region_set(C, ar_iter); + ED_region_do_draw(C, ar_iter); + } } } @@ -2858,10 +2865,6 @@ void wm_window_keymap(wmKeyConfig *keyconf) RNA_string_set(km->ptr, "path", "area.type"); RNA_string_set(km->ptr, "value", "OUTLINER"); - km = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", F9KEY, KM_PRESS, KM_SHIFT, 0); - RNA_string_set(km->ptr, "path", "area.type"); - RNA_string_set(km->ptr, "value", "OUTLINER"); - km = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", F10KEY, KM_PRESS, KM_SHIFT, 0); RNA_string_set(km->ptr, "path", "area.type"); RNA_string_set(km->ptr, "value", "IMAGE_EDITOR"); diff --git a/source/blender/windowmanager/intern/wm_subwindow.c b/source/blender/windowmanager/intern/wm_subwindow.c index 00af9eb0bb9..decf1f0d676 100644 --- a/source/blender/windowmanager/intern/wm_subwindow.c +++ b/source/blender/windowmanager/intern/wm_subwindow.c @@ -405,6 +405,16 @@ void wmOrtho2(float x1, float x2, float y1, float y2) wmOrtho(x1, x2, y1, y2, -100, 100); } +void wmOrthoPixelSpace(void) +{ + if(_curswin) { + int width, height; + + wm_subwindow_getsize(_curwindow, _curswin->swinid, &width, &height); + wmOrtho2(-0.375, (float)width-0.375, -0.375, (float)height-0.375); + wmLoadIdentity(); + } +} /* *************************** Framebuffer color depth, for selection codes ********************** */ diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c index d9b6117cbb3..54f6d58ced4 100644 --- a/source/blender/windowmanager/intern/wm_window.c +++ b/source/blender/windowmanager/intern/wm_window.c @@ -574,6 +574,7 @@ static int ghost_event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr private) switch(type) { case GHOST_kEventWindowDeactivate: + wm_event_add_ghostevent(win, type, data); win->active= 0; /* XXX */ break; case GHOST_kEventWindowActivate: @@ -943,6 +944,8 @@ void wm_window_get_size_ghost(wmWindow *win, int *width_r, int *height_r) GHOST_RectangleHandle bounds= GHOST_GetClientBounds(win->ghostwin); *width_r= GHOST_GetWidthRectangle(bounds); *height_r= GHOST_GetHeightRectangle(bounds); + + GHOST_DisposeRectangle(bounds); } void wm_window_set_size(wmWindow *win, int width, int height) @@ -972,6 +975,18 @@ void wm_window_swap_buffers(wmWindow *win) #endif } +void wm_get_cursor_position(wmWindow *win, int *x, int *y) +{ + GHOST_GetCursorPosition(g_system, x, y); + GHOST_ScreenToClient(win->ghostwin, *x, *y, x, y); +#if defined(__APPLE__) && defined(GHOST_COCOA) + //Cocoa has silly exception that should be fixed at the ghost level + //(ghost is an allegory for an invisible system specific code) +#else + *y = (win->sizey-1) - *y; +#endif +} + /* ******************* exported api ***************** */ diff --git a/source/blender/windowmanager/wm_event_types.h b/source/blender/windowmanager/wm_event_types.h index 8412e7f0b16..8179154fc98 100644 --- a/source/blender/windowmanager/wm_event_types.h +++ b/source/blender/windowmanager/wm_event_types.h @@ -69,6 +69,7 @@ /* SYSTEM : 0x01x */ #define INPUTCHANGE 0x0103 /* input connected or disconnected */ +#define WINDEACTIVATE 0x0104 /* window is deactivated, focus lost */ #define TIMER 0x0110 /* timer event, passed on to all queues */ #define TIMER0 0x0111 /* timer event, slot for internal use */ @@ -197,16 +198,16 @@ /* only used for KM_TEXTINPUT, so assume that we want all user-inputtable ascii codes included */ #define ISTEXTINPUT(event) (event >=' ' && event <=255) - /* test wether the event is a key on the keyboard */ + /* test whether the event is a key on the keyboard */ #define ISKEYBOARD(event) (event >=' ' && event <=320) - /* test wether the event is a mouse button */ + /* test whether the event is a mouse button */ #define ISMOUSE(event) (event >= LEFTMOUSE && event <= WHEELOUTMOUSE) - /* test wether the event is timer event */ + /* test whether the event is timer event */ #define ISTIMER(event) (event >= TIMER && event <= TIMERAUTOSAVE) - /* test wether the event is tweak event */ + /* test whether the event is tweak event */ #define ISTWEAK(event) (event >= EVT_TWEAK_L && event <= EVT_GESTURE) /* test whether event type is acceptable as hotkey, excluding modifiers */ diff --git a/source/blender/windowmanager/wm_window.h b/source/blender/windowmanager/wm_window.h index 4328f915101..84e246937e4 100644 --- a/source/blender/windowmanager/wm_window.h +++ b/source/blender/windowmanager/wm_window.h @@ -55,6 +55,8 @@ void wm_window_get_position (wmWindow *win, int *posx_r, int *posy_r); void wm_window_set_title (wmWindow *win, char *title); void wm_window_swap_buffers (wmWindow *win); +void wm_get_cursor_position (wmWindow *win, int *x, int *y); + wmWindow *wm_window_copy (bContext *C, wmWindow *winorig); void wm_window_testbreak (void); diff --git a/source/blenderplayer/bad_level_call_stubs/stubs.c b/source/blenderplayer/bad_level_call_stubs/stubs.c index 9abd518ff6e..ede1b865970 100644 --- a/source/blenderplayer/bad_level_call_stubs/stubs.c +++ b/source/blenderplayer/bad_level_call_stubs/stubs.c @@ -167,7 +167,7 @@ struct uiLayout *uiLayoutRow(struct uiLayout *layout, int align){return (struct struct uiLayout *uiLayoutColumn(struct uiLayout *layout, int align){return (struct uiLayout *) NULL;} struct uiLayout *uiLayoutColumnFlow(struct uiLayout *layout, int number, int align){return (struct uiLayout *) NULL;} struct uiLayout *uiLayoutBox(struct uiLayout *layout){return (struct uiLayout *) NULL;} -struct uiLayout *uiLayoutSplit(struct uiLayout *layout, float percentage){return (struct uiLayout *) NULL;} +struct uiLayout *uiLayoutSplit(struct uiLayout *layout, float percentage, int align){return (struct uiLayout *) NULL;} void uiItemsEnumR(struct uiLayout *layout, struct PointerRNA *ptr, char *propname){} void uiItemMenuEnumR(struct uiLayout *layout, char *name, int icon, struct PointerRNA *ptr, char *propname){} void uiItemEnumR_string(struct uiLayout *layout, char *name, int icon, struct PointerRNA *ptr, char *propname, char *value){} diff --git a/source/creator/creator.c b/source/creator/creator.c index 5867d76358f..dca8e01bcd3 100644 --- a/source/creator/creator.c +++ b/source/creator/creator.c @@ -62,6 +62,7 @@ #include "BKE_scene.h" #include "BKE_node.h" #include "BKE_report.h" +#include "BKE_sound.h" #include "IMB_imbuf.h" // for quicktime_init @@ -221,6 +222,7 @@ static void print_help(void) printf (" -d\t\tTurn debugging on\n"); printf (" -nojoystick\tDisable joystick support\n"); printf (" -noglsl\tDisable GLSL shading\n"); + printf (" -noaudio\tForce sound system to None\n"); printf (" -h\t\tPrint this help text\n"); printf (" -y\t\tDisable automatic python script execution (pydrivers, pyconstraints, pynodes)\n"); printf (" -P \tRun the given Python script (filename or Blender Text)\n"); @@ -484,8 +486,10 @@ int main(int argc, char **argv) SYS_WriteCommandLineInt(syshandle,"nojoystick",1); if (G.f & G_DEBUG) printf("disabling nojoystick\n"); } - if (BLI_strcasecmp(argv[a], "-noglsl") == 0) + else if (BLI_strcasecmp(argv[a], "-noglsl") == 0) GPU_extensions_disable(); + else if (BLI_strcasecmp(argv[a], "-noaudio") == 0) + sound_disable(); break; } } @@ -512,6 +516,7 @@ int main(int argc, char **argv) #endif } else { + /* background mode options */ for(a=1; aToNative(incode); + int previousTable = 1-m_currentTable; // only process it, if it's a key - if (kxevent > KX_BEGINMOUSE && kxevent < KX_ENDMOUSE) + if (kxevent > KX_BEGINMOUSE && kxevent < KX_ENDMOUSEBUTTONS) { - int previousTable = 1-m_currentTable; - - - if (val > 0) + if (val == KM_PRESS) { m_eventStatusTables[m_currentTable][kxevent].m_eventval = val ; //??? @@ -139,14 +137,7 @@ bool KX_BlenderMouseDevice::ConvertBlenderEvent(unsigned short incode,short val) } case SCA_InputEvent::KX_JUSTRELEASED: { - if ( kxevent > KX_BEGINMOUSEBUTTONS && kxevent < KX_ENDMOUSEBUTTONS) - { - m_eventStatusTables[m_currentTable][kxevent].m_status = SCA_InputEvent::KX_JUSTACTIVATED; - } else - { - m_eventStatusTables[m_currentTable][kxevent].m_status = SCA_InputEvent::KX_ACTIVE; - - } + m_eventStatusTables[m_currentTable][kxevent].m_status = SCA_InputEvent::KX_JUSTACTIVATED; break; } default: @@ -155,7 +146,7 @@ bool KX_BlenderMouseDevice::ConvertBlenderEvent(unsigned short incode,short val) } } - } else + } else if (val == KM_RELEASE) { // blender eventval == 0 switch (m_eventStatusTables[previousTable][kxevent].m_status) @@ -173,5 +164,32 @@ bool KX_BlenderMouseDevice::ConvertBlenderEvent(unsigned short incode,short val) } } } + + if (kxevent > KX_ENDMOUSEBUTTONS && kxevent < KX_ENDMOUSE) + { + m_eventStatusTables[m_currentTable][kxevent].m_eventval = val ; //remember mouse position + + switch (m_eventStatusTables[previousTable][kxevent].m_status) + { + + case SCA_InputEvent::KX_ACTIVE: + case SCA_InputEvent::KX_JUSTACTIVATED: + { + m_eventStatusTables[m_currentTable][kxevent].m_status = SCA_InputEvent::KX_ACTIVE; + break; + } + case SCA_InputEvent::KX_JUSTRELEASED: + { + m_eventStatusTables[m_currentTable][kxevent].m_status = SCA_InputEvent::KX_ACTIVE; + break; + } + default: + { + m_eventStatusTables[m_currentTable][kxevent].m_status = SCA_InputEvent::KX_JUSTACTIVATED; + } + } + } + + return result; } diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.h b/source/gameengine/Converter/KX_BlenderSceneConverter.h index c8009eb9437..ab654e97513 100644 --- a/source/gameengine/Converter/KX_BlenderSceneConverter.h +++ b/source/gameengine/Converter/KX_BlenderSceneConverter.h @@ -156,17 +156,17 @@ public: printf("BGE STATS!\n"); printf("\nAssets...\n"); - printf("\t m_worldinfos: %d\n", m_worldinfos.size()); - printf("\t m_polymaterials: %d\n", m_polymaterials.size()); - printf("\t m_meshobjects: %d\n", m_meshobjects.size()); - printf("\t m_materials: %d\n", m_materials.size()); + printf("\t m_worldinfos: %d\n", (int)m_worldinfos.size()); + printf("\t m_polymaterials: %d\n", (int)m_polymaterials.size()); + printf("\t m_meshobjects: %d\n", (int)m_meshobjects.size()); + printf("\t m_materials: %d\n", (int)m_materials.size()); printf("\nMappings...\n"); - printf("\t m_map_blender_to_gameobject: %d\n", m_map_blender_to_gameobject.size()); - printf("\t m_map_mesh_to_gamemesh: %d\n", m_map_mesh_to_gamemesh.size()); - printf("\t m_map_blender_to_gameactuator: %d\n", m_map_blender_to_gameactuator.size()); - printf("\t m_map_blender_to_gamecontroller: %d\n", m_map_blender_to_gamecontroller.size()); - printf("\t m_map_blender_to_gameAdtList: %d\n", m_map_blender_to_gameAdtList.size()); + printf("\t m_map_blender_to_gameobject: %d\n", (int)m_map_blender_to_gameobject.size()); + printf("\t m_map_mesh_to_gamemesh: %d\n", (int)m_map_mesh_to_gamemesh.size()); + printf("\t m_map_blender_to_gameactuator: %d\n", (int)m_map_blender_to_gameactuator.size()); + printf("\t m_map_blender_to_gamecontroller: %d\n", (int)m_map_blender_to_gamecontroller.size()); + printf("\t m_map_blender_to_gameAdtList: %d\n", (int)m_map_blender_to_gameAdtList.size()); #ifdef WITH_CXX_GUARDEDALLOC MEM_printmemlist_pydict(); diff --git a/source/gameengine/Expressions/PyObjectPlus.cpp b/source/gameengine/Expressions/PyObjectPlus.cpp index 54a33b76efd..903ac70c27a 100644 --- a/source/gameengine/Expressions/PyObjectPlus.cpp +++ b/source/gameengine/Expressions/PyObjectPlus.cpp @@ -256,7 +256,7 @@ PyAttributeDef PyObjectPlus::Attributes[] = { PyObject* PyObjectPlus::pyattr_get_invalid(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) { - return PyBool_FromLong(self_v ? 1:0); + return PyBool_FromLong(self_v ? 0:1); } /* note, this is called as a python 'getset, where the PyAttributeDef is the closure */ diff --git a/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp b/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp index 2dbaf3c9081..110e3abd6d8 100644 --- a/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp +++ b/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp @@ -150,6 +150,7 @@ bool KX_MouseFocusSensor::RayHit(KX_ClientObjectInfo* client_info, KX_RayCast* r m_hitObject = hitKXObj; m_hitPosition = result->m_hitPoint; m_hitNormal = result->m_hitNormal; + m_hitUV = result->m_hitUV; return true; } @@ -284,7 +285,8 @@ bool KX_MouseFocusSensor::ParentObjectHasFocusCamera(KX_Camera *cam) KX_IPhysicsController* physics_controller = cam->GetPhysicsController(); PHY_IPhysicsEnvironment* physics_environment = m_kxscene->GetPhysicsEnvironment(); - KX_RayCast::Callback callback(this,physics_controller); + // get UV mapping + KX_RayCast::Callback callback(this,physics_controller,NULL,false,true); KX_RayCast::RayTest(physics_environment, m_prevSourcePoint, m_prevTargetPoint, callback); @@ -340,6 +342,11 @@ const MT_Vector3& KX_MouseFocusSensor::HitNormal() const return m_hitNormal; } +const MT_Vector2& KX_MouseFocusSensor::HitUV() const +{ + return m_hitUV; +} + #ifndef DISABLE_PYTHON /* ------------------------------------------------------------------------- */ @@ -380,6 +387,7 @@ PyAttributeDef KX_MouseFocusSensor::Attributes[] = { KX_PYATTRIBUTE_RO_FUNCTION("hitObject", KX_MouseFocusSensor, pyattr_get_hit_object), KX_PYATTRIBUTE_RO_FUNCTION("hitPosition", KX_MouseFocusSensor, pyattr_get_hit_position), KX_PYATTRIBUTE_RO_FUNCTION("hitNormal", KX_MouseFocusSensor, pyattr_get_hit_normal), + KX_PYATTRIBUTE_RO_FUNCTION("hitUV", KX_MouseFocusSensor, pyattr_get_hit_uv), KX_PYATTRIBUTE_BOOL_RW("usePulseFocus", KX_MouseFocusSensor,m_bTouchPulse), { NULL } //Sentinel }; @@ -428,6 +436,12 @@ PyObject* KX_MouseFocusSensor::pyattr_get_hit_normal(void *self_v, const KX_PYAT return PyObjectFrom(self->HitNormal()); } +PyObject* KX_MouseFocusSensor::pyattr_get_hit_uv(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) +{ + KX_MouseFocusSensor* self= static_cast(self_v); + return PyObjectFrom(self->HitUV()); +} + #endif // DISABLE_PYTHON /* eof */ diff --git a/source/gameengine/Ketsji/KX_MouseFocusSensor.h b/source/gameengine/Ketsji/KX_MouseFocusSensor.h index e3f0e2b34f5..b107b54434b 100644 --- a/source/gameengine/Ketsji/KX_MouseFocusSensor.h +++ b/source/gameengine/Ketsji/KX_MouseFocusSensor.h @@ -92,6 +92,7 @@ class KX_MouseFocusSensor : public SCA_MouseSensor const MT_Point3& RayTarget() const; const MT_Point3& HitPosition() const; const MT_Vector3& HitNormal() const; + const MT_Vector2& HitUV() const; #ifndef DISABLE_PYTHON @@ -106,6 +107,7 @@ class KX_MouseFocusSensor : public SCA_MouseSensor static PyObject* pyattr_get_hit_object(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef); static PyObject* pyattr_get_hit_position(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef); static PyObject* pyattr_get_hit_normal(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef); + static PyObject* pyattr_get_hit_uv(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef); #endif // DISABLE_PYTHON @@ -164,6 +166,11 @@ class KX_MouseFocusSensor : public SCA_MouseSensor * the object was hit. */ MT_Vector3 m_hitNormal; + /** + * UV texture coordinate of the hit point if any, (0,0) otherwise + */ + MT_Vector2 m_hitUV; + /** * The KX scene that holds the camera. The camera position * determines a part of the start location of the picking ray. */ diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp index 767854e5725..31078abb164 100644 --- a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp +++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp @@ -167,9 +167,9 @@ bool CcdPhysicsController::CreateSoftbody() //disable soft body until first sneak preview is ready if (!m_cci.m_bSoft || !m_cci.m_collisionShape || - (shapeType != CONVEX_HULL_SHAPE_PROXYTYPE)&& + ((shapeType != CONVEX_HULL_SHAPE_PROXYTYPE)&& (shapeType != TRIANGLE_MESH_SHAPE_PROXYTYPE) && - (shapeType != SCALED_TRIANGLE_MESH_SHAPE_PROXYTYPE)) + (shapeType != SCALED_TRIANGLE_MESH_SHAPE_PROXYTYPE))) { return false; } @@ -1437,7 +1437,7 @@ bool CcdShapeConstructionInfo::SetMesh(RAS_MeshObject* meshobj, DerivedMesh* dm, for (int p2=0; p2GetPolygon(index[p2]); + RAS_Polygon* poly = meshobj->GetPolygon((index)? index[p2]: p2); // only add polygons that have the collision flag set if (poly->IsCollider()) @@ -1456,7 +1456,7 @@ bool CcdShapeConstructionInfo::SetMesh(RAS_MeshObject* meshobj, DerivedMesh* dm, for (int p2=0; p2GetPolygon(index[p2]); + RAS_Polygon* poly= meshobj->GetPolygon((index)? index[p2]: p2); // only add polygons that have the collisionflag set if (poly->IsCollider()) @@ -1504,7 +1504,7 @@ bool CcdShapeConstructionInfo::SetMesh(RAS_MeshObject* meshobj, DerivedMesh* dm, for (int p2=0; p2GetPolygon(index[p2]); + RAS_Polygon* poly= meshobj->GetPolygon((index)? index[p2]: p2); // only add polygons that have the collision flag set if (poly->IsCollider()) @@ -1541,7 +1541,7 @@ bool CcdShapeConstructionInfo::SetMesh(RAS_MeshObject* meshobj, DerivedMesh* dm, { MFace* mf = &mface[p2]; MTFace* tf = (tface) ? &tface[p2] : NULL; - RAS_Polygon* poly= meshobj->GetPolygon(index[p2]); + RAS_Polygon* poly= meshobj->GetPolygon((index)? index[p2]: p2); // only add polygons that have the collisionflag set if (poly->IsCollider()) @@ -1567,7 +1567,7 @@ bool CcdShapeConstructionInfo::SetMesh(RAS_MeshObject* meshobj, DerivedMesh* dm, } // m_polygonIndexArray - *poly_index_pt= index[p2]; + *poly_index_pt= (index)? index[p2]: p2; poly_index_pt++; // the vertex location @@ -1610,7 +1610,7 @@ bool CcdShapeConstructionInfo::SetMesh(RAS_MeshObject* meshobj, DerivedMesh* dm, } // m_polygonIndexArray - *poly_index_pt= index[p2]; + *poly_index_pt= (index)? index[p2]: p2; poly_index_pt++; // the vertex location @@ -1776,13 +1776,16 @@ bool CcdShapeConstructionInfo::UpdateMesh(class KX_GameObject* gameobj, class RA { if(tf->mode & TF_DYNAMIC) { + int origi = (index)? index[i]: i; + if(mf->v4) { fv_pt= quad_verts; - *poly_index_pt++ = *poly_index_pt++ = index[i]; + *poly_index_pt++ = origi; + *poly_index_pt++ = origi; flen= 4; } else { fv_pt= tri_verts; - *poly_index_pt++ = index[i]; + *poly_index_pt++ = origi; flen= 3; } @@ -1832,13 +1835,16 @@ bool CcdShapeConstructionInfo::UpdateMesh(class KX_GameObject* gameobj, class RA } for(mf= mface, i=0; i < numpolys; mf++, i++) { + int origi = (index)? index[i]: i; + if(mf->v4) { fv_pt= quad_verts; - *poly_index_pt++ = *poly_index_pt++ = index[i]; + *poly_index_pt++ = origi; + *poly_index_pt++ = origi; } else { fv_pt= tri_verts; - *poly_index_pt++ = index[i]; + *poly_index_pt++ = origi; } for(; *fv_pt > -1; fv_pt++) diff --git a/source/gameengine/PyDoc/GameTypes.py b/source/gameengine/PyDoc/GameTypes.py index 27b4685ca14..ba22dbd4e8f 100644 --- a/source/gameengine/PyDoc/GameTypes.py +++ b/source/gameengine/PyDoc/GameTypes.py @@ -2414,6 +2414,10 @@ class KX_MouseFocusSensor(SCA_MouseSensor): @type hitPosition: list (vector of 3 floats) @ivar hitNormal: the worldspace normal from the face at point of intersection. @type hitNormal: list (normalized vector of 3 floats) + @ivar hitUV: the UV coordinates at the point of intersection. + If the object has no UV mapping, it returns [0,0]. + The UV coordinates are not normalized, they can be < 0 or > 1 depending on the UV mapping. + @type hitUV: list (vector of 2 floats) @ivar usePulseFocus: When enabled, moving the mouse over a different object generates a pulse. (only used when the 'Mouse Over Any' sensor option is set) @type usePulseFocus: bool """ diff --git a/source/gameengine/VideoTexture/ImageBuff.cpp b/source/gameengine/VideoTexture/ImageBuff.cpp index 9cd661a2422..eccac9d9f89 100644 --- a/source/gameengine/VideoTexture/ImageBuff.cpp +++ b/source/gameengine/VideoTexture/ImageBuff.cpp @@ -30,14 +30,34 @@ http://www.gnu.org/copyleft/lesser.txt. #include "ImageBase.h" #include "FilterSource.h" +// use ImBuf API for image manipulation +extern "C" { +#include "IMB_imbuf_types.h" +#include "IMB_imbuf.h" +}; // default filter FilterRGB24 defFilter; +// forward declaration; +extern PyTypeObject ImageBuffType; + +ImageBuff::~ImageBuff (void) +{ + if (m_imbuf) + IMB_freeImBuf(m_imbuf); +} + // load image from buffer void ImageBuff::load (unsigned char * img, short width, short height) { + // loading a new buffer implies to reset the imbuf if any, because the size may change + if (m_imbuf) + { + IMB_freeImBuf(m_imbuf); + m_imbuf = NULL; + } // initialize image buffer init(width, height); // original size @@ -53,6 +73,52 @@ void ImageBuff::load (unsigned char * img, short width, short height) m_avail = true; } +// img must point to a array of RGBA data of size width*height +void ImageBuff::plot (unsigned char * img, short width, short height, short x, short y, short mode) +{ + struct ImBuf* tmpbuf; + + if (m_size[0] == 0 || m_size[1] == 0 || width <= 0 || height <= 0) + return; + + if (!m_imbuf) { + // allocate most basic imbuf, we will assign the rect buffer on the fly + m_imbuf = IMB_allocImBuf(m_size[0], m_size[1], 0, 0, 0); + } + + tmpbuf = IMB_allocImBuf(width, height, 0, 0, 0); + + // assign temporarily our buffer to the ImBuf buffer, we use the same format + tmpbuf->rect = (unsigned int*)img; + m_imbuf->rect = m_image; + IMB_rectblend(m_imbuf, tmpbuf, x, y, 0, 0, width, height, (IMB_BlendMode)mode); + // remove so that MB_freeImBuf will free our buffer + m_imbuf->rect = NULL; + tmpbuf->rect = NULL; + IMB_freeImBuf(tmpbuf); +} + +void ImageBuff::plot (ImageBuff* img, short x, short y, short mode) +{ + if (m_size[0] == 0 || m_size[1] == 0 || img->m_size[0] == 0 || img->m_size[1] == 0) + return; + + if (!m_imbuf) { + // allocate most basic imbuf, we will assign the rect buffer on the fly + m_imbuf = IMB_allocImBuf(m_size[0], m_size[1], 0, 0, 0); + } + if (!img->m_imbuf) { + // allocate most basic imbuf, we will assign the rect buffer on the fly + img->m_imbuf = IMB_allocImBuf(img->m_size[0], img->m_size[1], 0, 0, 0); + } + // assign temporarily our buffer to the ImBuf buffer, we use the same format + img->m_imbuf->rect = img->m_image; + m_imbuf->rect = m_image; + IMB_rectblend(m_imbuf, img->m_imbuf, x, y, 0, 0, img->m_imbuf->x, img->m_imbuf->y, (IMB_BlendMode)mode); + // remove so that MB_freeImBuf will free our buffer + m_imbuf->rect = NULL; + img->m_imbuf->rect = NULL; +} // cast Image pointer to ImageBuff @@ -62,16 +128,47 @@ inline ImageBuff * getImageBuff (PyImage * self) // python methods +static bool testPyBuffer(Py_buffer* buffer, int width, int height, unsigned int pixsize) +{ + if (buffer->itemsize != 1) + { + PyErr_SetString(PyExc_ValueError, "Buffer must be an array of bytes"); + return false; + } + if (buffer->len != width*height*pixsize) + { + PyErr_SetString(PyExc_ValueError, "Buffer hasn't correct size"); + return false; + } + // multi dimension are ok as long as there is no hole in the memory + Py_ssize_t size = buffer->itemsize; + for (int i=buffer->ndim-1; i>=0 ; i--) + { + if (buffer->suboffsets != NULL && buffer->suboffsets[i] >= 0) + { + PyErr_SetString(PyExc_ValueError, "Buffer must be of one block"); + return false; + } + if (buffer->strides != NULL && buffer->strides[i] != size) + { + PyErr_SetString(PyExc_ValueError, "Buffer must be of one block"); + return false; + } + if (i > 0) + size *= buffer->shape[i]; + } + return true; +} + // load image static PyObject * load (PyImage * self, PyObject * args) { // parameters: string image buffer, its size, width, height - unsigned char * buff; - unsigned int buffSize; + Py_buffer buffer; short width; short height; // parse parameters - if (!PyArg_ParseTuple(args, "s#hh:load", &buff, &buffSize, &width, &height)) + if (!PyArg_ParseTuple(args, "s*hh:load", &buffer, &width, &height)) { // report error return NULL; @@ -80,31 +177,61 @@ static PyObject * load (PyImage * self, PyObject * args) else { // calc proper buffer size - unsigned int propSize = width * height; + unsigned int pixSize; // use pixel size from filter if (self->m_image->getFilter() != NULL) - propSize *= self->m_image->getFilter()->m_filter->firstPixelSize(); + pixSize = self->m_image->getFilter()->m_filter->firstPixelSize(); else - propSize *= defFilter.firstPixelSize(); + pixSize = defFilter.firstPixelSize(); // check if buffer size is correct - if (propSize != buffSize) + if (testPyBuffer(&buffer, width, height, pixSize)) { - // if not, report error - PyErr_SetString(PyExc_TypeError, "Buffer hasn't correct size"); - return NULL; - } - else // if correct, load image - getImageBuff(self)->load(buff, width, height); + getImageBuff(self)->load((unsigned char*)buffer.buf, width, height); + } + PyBuffer_Release(&buffer); } Py_RETURN_NONE; } +static PyObject * plot (PyImage * self, PyObject * args) +{ + PyImage * other; + Py_buffer buffer; + //unsigned char * buff; + //unsigned int buffSize; + short width; + short height; + short x, y; + short mode = IMB_BLEND_COPY; + + if (PyArg_ParseTuple(args, "s*hhhh|h:plot", &buffer, &width, &height, &x, &y, &mode)) + { + // correct decoding, verify that buffer size is correct + // we need a continous memory buffer + if (testPyBuffer(&buffer, width, height, 4)) + { + getImageBuff(self)->plot((unsigned char*)buffer.buf, width, height, x, y, mode); + } + PyBuffer_Release(&buffer); + Py_RETURN_NONE; + } + PyErr_Clear(); + // try the other format + if (!PyArg_ParseTuple(args, "O!hh|h:plot", &ImageBuffType, &other, &x, &y, &mode)) + { + PyErr_SetString(PyExc_TypeError, "Expecting ImageBuff or string,width,height as first arguments, postion x, y and mode and last arguments"); + return NULL; + } + getImageBuff(self)->plot(getImageBuff(other), x, y, mode); + Py_RETURN_NONE; +} // methods structure static PyMethodDef imageBuffMethods[] = { {"load", (PyCFunction)load, METH_VARARGS, "Load image from buffer"}, + {"plot", (PyCFunction)plot, METH_VARARGS, "update image buffer"}, {NULL} }; // attributes structure diff --git a/source/gameengine/VideoTexture/ImageBuff.h b/source/gameengine/VideoTexture/ImageBuff.h index fa2025fa8c4..e18edc44288 100644 --- a/source/gameengine/VideoTexture/ImageBuff.h +++ b/source/gameengine/VideoTexture/ImageBuff.h @@ -28,20 +28,28 @@ http://www.gnu.org/copyleft/lesser.txt. #include "ImageBase.h" +struct ImBuf; /// class for image buffer class ImageBuff : public ImageBase { +private: + struct ImBuf* m_imbuf; // temporary structure for buffer manipulation public: /// constructor - ImageBuff (void) : ImageBase(true) {} + ImageBuff (void) : ImageBase(true), m_imbuf(NULL) {} /// destructor - virtual ~ImageBuff (void) {} + virtual ~ImageBuff (void); /// load image from buffer void load (unsigned char * img, short width, short height); + /// plot image from extern RGBA buffer to image at position x,y using one of IMB_BlendMode + void plot (unsigned char * img, short width, short height, short x, short y, short mode); + /// plot image from other ImageBuf to image at position x,y using one of IMB_BlendMode + void plot (ImageBuff* img, short x, short y, short mode); + /// refresh image - do nothing virtual void refresh (void) {} }; diff --git a/source/nan_compile.mk b/source/nan_compile.mk index 258d06c07b9..03f5a0d1cd6 100644 --- a/source/nan_compile.mk +++ b/source/nan_compile.mk @@ -82,6 +82,9 @@ ifeq ($(OS),darwin) # REL_CFLAGS += -O # REL_CCFLAGS += -O2 CPPFLAGS += -D_THREAD_SAFE + ifeq ($(WITH_COCOA), true) + CPPFLAGS += -DGHOST_COCOA + endif NAN_DEPEND = true OPENGL_HEADERS = /System/Library/Frameworks/OpenGL.framework AR = ar @@ -307,6 +310,20 @@ $(DIR)/$(DEBUG_DIR)%.o: %.cpp $(CCC) -c $(CCFLAGS) $(CPPFLAGS) $< -o $@ endif +$(DIR)/$(DEBUG_DIR)%.o: %.mm + ifdef NAN_DEPEND + @set -e; $(CC) -M $(CPPFLAGS) $< 2>/dev/null \ + | sed 's@\($*\)\.o[ :]*@$(DIR)/$(DEBUG_DIR)\1.o : @g' \ + > $(DIR)/$(DEBUG_DIR)$*.d; \ + [ -s $(DIR)/$(DEBUG_DIR)$*.d ] || $(RM) $(DIR)/$(DEBUG_DIR)$*.d + endif + ifdef NAN_QUIET + @echo " -- $< -- " + @$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@ + else + $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@ + endif + $(DIR)/$(DEBUG_DIR)%.res: %.rc ifeq ($(FREE_WINDOWS),true) windres $< -O coff -o $@ @@ -332,16 +349,18 @@ CCSRCS ?= $(wildcard *.cpp) JSRCS ?= $(wildcard *.java) ifdef NAN_DEPEND --include $(CSRCS:%.c=$(DIR)/$(DEBUG_DIR)%.d) $(CCSRCS:%.cpp=$(DIR)/$(DEBUG_DIR)%.d) +-include $(CSRCS:%.c=$(DIR)/$(DEBUG_DIR)%.d) $(CCSRCS:%.cpp=$(DIR)/$(DEBUG_DIR)%.d) $(OCSRCS:$.mm=$(DIR)/$(DEBUG_DIR)%.d) endif OBJS_AR := $(OBJS) OBJS_AR += $(CSRCS:%.c=%.o) OBJS_AR += $(CCSRCS:%.cpp=%.o) +OBJS_AR += $(OCSRCS:%.mm=%.o) OBJS_AR += $(WINRC:%.rc=%.res) OBJS += $(CSRCS:%.c=$(DIR)/$(DEBUG_DIR)%.o) OBJS += $(CCSRCS:%.cpp=$(DIR)/$(DEBUG_DIR)%.o) +OBJS += $(OCSRCS:%.mm=$(DIR)/$(DEBUG_DIR)%.o) OBJS += $(WINRC:%.rc=$(DIR)/$(DEBUG_DIR)%.res) JCLASS += $(JSRCS:%.java=$(DIR)/$(DEBUG_DIR)%.class) diff --git a/source/nan_link.mk b/source/nan_link.mk index 8f33c917526..0524ee7592d 100644 --- a/source/nan_link.mk +++ b/source/nan_link.mk @@ -54,8 +54,11 @@ ifeq ($(OS),darwin) LLIBS += -lz -lstdc++ ifdef USE_OSX10.4STUBS LLIBS +=-lSystemStubs - endif - LLIBS += -framework Carbon -framework AGL -framework OpenGL + endif + ifeq ($(WITH_COCOA), true) + LLIBS += -framework Cocoa + endif + LLIBS += -framework Carbon -framework AGL -framework OpenGL LLIBS += -framework QuickTime -framework CoreAudio LLIBS += -framework AudioUnit -framework AudioToolbox LDFLAGS += -L/System/Library/Frameworks/OpenGL.framework/Libraries @@ -120,7 +123,7 @@ ifeq ($(OS),solaris) LLIBS += -L$(NAN_MESA)/lib endif - LLIBS += -lGLU -lGL -lXmu -lXext -lXi -lX11 -lc -lm -ldl -lsocket -lnsl + LLIBS += $(NAN_ZLIB)/lib/libz.a -lGLU -lGL -lXmu -lXext -lXi -lX11 -lc -lm -ldl -lsocket -lnsl DYNLDFLAGS = -shared $(LDFLAGS) endif diff --git a/tools/btools.py b/tools/btools.py old mode 100755 new mode 100644 index d5cc8a543b4..556cb9b901a --- a/tools/btools.py +++ b/tools/btools.py @@ -76,7 +76,8 @@ def validate_arguments(args, bc): 'WITH_BF_FHS', 'BF_VERSION', 'BF_GHOST_DEBUG', - 'WITH_BF_RAYOPTIMIZATION' + 'WITH_BF_RAYOPTIMIZATION', + 'BF_RAYOPTIMIZATION_SSE_FLAGS' ] # Have options here that scons expects to be lists @@ -423,7 +424,9 @@ def read_opts(cfg, args): (BoolVariable('BF_UNIT_TEST', 'Build with unit test support.', False)), (BoolVariable('BF_GHOST_DEBUG', 'Make GHOST print events and info to stdout. (very verbose)', False)), - (BoolVariable('WITH_BF_RAYOPTIMIZATION', 'Enable raytracer SSE/SIMD optimization.', False)) + + (BoolVariable('WITH_BF_RAYOPTIMIZATION', 'Enable raytracer SSE/SIMD optimization.', False)), + ('BF_RAYOPTIMIZATION_SSE_FLAGS', 'SSE flags', '') ) # end of opts.AddOptions() return localopts diff --git a/tools/crossmingw.py b/tools/crossmingw.py old mode 100755 new mode 100644