From 34ff957938d9d6ca7649aea38246c52054452624 Mon Sep 17 00:00:00 2001 From: Kurt Stockinger Date: Wed, 29 Aug 2007 01:35:49 +0000 Subject: [PATCH] New tag with updates on H5Block. --- .gitattributes | 113 + trunk/AUTHORS | 10 + trunk/COPYRIGHT | 7 + trunk/ChangeLog | 0 trunk/GNUmakefile.orig | 133 + trunk/Makefile.am | 15 + trunk/Makefile.orig | 59 + trunk/NEWS | 147 + trunk/README | 418 + trunk/autogen.sh | 46 + trunk/config.guess | 1469 + trunk/config.h.in | 44 + trunk/config.sub | 1563 + trunk/configure.ac | 607 + trunk/depcomp | 529 + trunk/doc/Doxyfile | 234 + trunk/doc/H5X_File_Format.txt | 170 + trunk/doc/Makefile.am | 2 + trunk/doc/doxyfooter | 2 + trunk/install-sh | 323 + trunk/license.txt | 17 + trunk/missing | 357 + trunk/rules.make | 52 + trunk/src/H5Block.c | 1981 ++ trunk/src/H5Block.h | 204 + trunk/src/H5BlockErrors.h | 51 + trunk/src/H5BlockF.c | 581 + trunk/src/H5BlockF90.inc | 176 + trunk/src/H5BlockPrivate.h | 6 + trunk/src/H5BlockTypes.h | 32 + trunk/src/H5Part.c | 2590 ++ trunk/src/H5Part.h | 319 + trunk/src/H5PartErrors.h | 326 + trunk/src/H5PartF.c | 825 + trunk/src/H5PartF90.inc | 223 + trunk/src/H5PartPrivate.h | 186 + trunk/src/H5PartTypes.h | 92 + trunk/src/Makefile.am | 93 + trunk/src/TestUnderscore.f | 12 + trunk/src/TestUnderscoreC.c | 36 + trunk/test/Bench.c | 263 + trunk/test/BlockTestSpecs.txt | 189 + trunk/test/H5BlockDissolveGhosts.c | 716 + trunk/test/H5BlockParTestScalarField.c | 462 + trunk/test/H5BlockParTestScalarField.pbs | 7 + trunk/test/H5BlockParTestScalarFieldF.f90 | 462 + trunk/test/H5BlockTestAttributes.c | 468 + trunk/test/H5BlockTestAttributesF.f90 | 341 + trunk/test/H5ParallelTest.cc | 111 + trunk/test/H5PartAndreasTest.cc | 119 + trunk/test/H5PartTest.cc | 298 + trunk/test/H5PartTestParallel.cc | 120 + trunk/test/H5test.cc | 147 + trunk/test/H5testF.f | 107 + trunk/test/H5testFpar.f90 | 123 + trunk/test/Makefile.am | 164 + trunk/tools/Makefile.am | 83 + trunk/tools/README | 356 + trunk/tools/h5pAttrib.cc | 1259 + trunk/tools/h5pToGNUplot.cc | 461 + trunk/tools/homdynToH5p.cc | 173 + trunk/visit_plugins/databases/H5Part/.depend | 626 + trunk/visit_plugins/databases/H5Part/Makefile | 104 + .../visit_plugins/databases/H5Part/README.txt | 21 + .../databases/H5Part/avth5partFileFormat.C | 597 + .../databases/H5Part/avth5partFileFormat.h | 75 + .../visit_plugins/databases/H5Part/h5part.xml | 14 + .../databases/H5Part/h5partCommonPluginInfo.C | 65 + .../databases/H5Part/h5partEnginePluginInfo.C | 39 + .../H5Part/h5partMDServerPluginInfo.C | 25 + .../databases/H5Part/h5partPluginInfo.C | 124 + .../databases/H5Part/h5partPluginInfo.h | 60 + .../operators/BinnerFilter/.depend | 1505 + .../operators/BinnerFilter/Binner.xml | 11 + .../BinnerFilter/BinnerCommonPluginInfo.C | 47 + .../BinnerFilter/BinnerEnginePluginInfo.C | 44 + .../operators/BinnerFilter/BinnerFilter.C | 535 + .../operators/BinnerFilter/BinnerFilter.h | 66 + .../operators/BinnerFilter/BinnerFilter.java | 116 + .../BinnerFilter/BinnerGUIPluginInfo.C | 92 + .../operators/BinnerFilter/BinnerMakefile | 113 + .../operators/BinnerFilter/BinnerPluginInfo.C | 107 + .../operators/BinnerFilter/BinnerPluginInfo.h | 85 + .../BinnerFilter/BinnerScriptingPluginInfo.C | 142 + .../BinnerFilter/BinnerViewerPluginInfo.C | 175 + .../operators/BinnerFilter/Binnerreplace.txt | 1 + .../operators/BinnerFilter/Makefile | 114 + .../operators/BinnerFilter/PyBinner.C | 422 + .../operators/BinnerFilter/PyBinner.h | 21 + .../operators/BinnerFilter/QvisBinnerWindow.C | 279 + .../operators/BinnerFilter/QvisBinnerWindow.h | 67 + .../operators/BinnerFilter/avtBinnerFilter.C | 350 + .../operators/BinnerFilter/avtBinnerFilter.h | 64 + .../operators/BinnerFilter/icon.xpm | 519 + .../operators/RandomSample/.depend | 1519 + .../H5PartRandomSampleAttributes.C | 470 + .../H5PartRandomSampleAttributes.h | 60 + .../H5PartRandomSampleAttributes.java | 76 + .../H5PartRandomSampleCommonPluginInfo.C | 47 + .../H5PartRandomSampleEnginePluginInfo.C | 44 + .../H5PartRandomSampleGUIPluginInfo.C | 92 + .../H5PartRandomSamplePluginInfo.C | 107 + .../H5PartRandomSamplePluginInfo.h | 85 + .../H5PartRandomSampleScriptingPluginInfo.C | 142 + .../H5PartRandomSampleViewerPluginInfo.C | 175 + .../operators/RandomSample/Makefile | 113 + .../PyH5PartRandomSampleAttributes.C | 358 + .../PyH5PartRandomSampleAttributes.h | 21 + .../QvisH5PartRandomSampleWindow.C | 199 + .../QvisH5PartRandomSampleWindow.h | 61 + .../operators/RandomSample/RandomSample.xml | 8 + .../avtH5PartRandomSampleFilter.C | 177 + .../avtH5PartRandomSampleFilter.h | 54 + .../operators/RandomSample/icon.xpm | 23828 ++++++++++++++++ 114 files changed, 54740 insertions(+) create mode 100644 trunk/AUTHORS create mode 100644 trunk/COPYRIGHT create mode 100644 trunk/ChangeLog create mode 100755 trunk/GNUmakefile.orig create mode 100644 trunk/Makefile.am create mode 100755 trunk/Makefile.orig create mode 100644 trunk/NEWS create mode 100644 trunk/README create mode 100755 trunk/autogen.sh create mode 100755 trunk/config.guess create mode 100755 trunk/config.h.in create mode 100755 trunk/config.sub create mode 100644 trunk/configure.ac create mode 100755 trunk/depcomp create mode 100644 trunk/doc/Doxyfile create mode 100644 trunk/doc/H5X_File_Format.txt create mode 100644 trunk/doc/Makefile.am create mode 100644 trunk/doc/doxyfooter create mode 100755 trunk/install-sh create mode 100644 trunk/license.txt create mode 100755 trunk/missing create mode 100755 trunk/rules.make create mode 100644 trunk/src/H5Block.c create mode 100644 trunk/src/H5Block.h create mode 100644 trunk/src/H5BlockErrors.h create mode 100755 trunk/src/H5BlockF.c create mode 100644 trunk/src/H5BlockF90.inc create mode 100644 trunk/src/H5BlockPrivate.h create mode 100644 trunk/src/H5BlockTypes.h create mode 100644 trunk/src/H5Part.c create mode 100644 trunk/src/H5Part.h create mode 100644 trunk/src/H5PartErrors.h create mode 100755 trunk/src/H5PartF.c create mode 100644 trunk/src/H5PartF90.inc create mode 100644 trunk/src/H5PartPrivate.h create mode 100644 trunk/src/H5PartTypes.h create mode 100644 trunk/src/Makefile.am create mode 100755 trunk/src/TestUnderscore.f create mode 100755 trunk/src/TestUnderscoreC.c create mode 100644 trunk/test/Bench.c create mode 100644 trunk/test/BlockTestSpecs.txt create mode 100644 trunk/test/H5BlockDissolveGhosts.c create mode 100644 trunk/test/H5BlockParTestScalarField.c create mode 100644 trunk/test/H5BlockParTestScalarField.pbs create mode 100644 trunk/test/H5BlockParTestScalarFieldF.f90 create mode 100644 trunk/test/H5BlockTestAttributes.c create mode 100644 trunk/test/H5BlockTestAttributesF.f90 create mode 100755 trunk/test/H5ParallelTest.cc create mode 100755 trunk/test/H5PartAndreasTest.cc create mode 100644 trunk/test/H5PartTest.cc create mode 100755 trunk/test/H5PartTestParallel.cc create mode 100755 trunk/test/H5test.cc create mode 100644 trunk/test/H5testF.f create mode 100644 trunk/test/H5testFpar.f90 create mode 100644 trunk/test/Makefile.am create mode 100644 trunk/tools/Makefile.am create mode 100644 trunk/tools/README create mode 100644 trunk/tools/h5pAttrib.cc create mode 100644 trunk/tools/h5pToGNUplot.cc create mode 100644 trunk/tools/homdynToH5p.cc create mode 100644 trunk/visit_plugins/databases/H5Part/.depend create mode 100644 trunk/visit_plugins/databases/H5Part/Makefile create mode 100644 trunk/visit_plugins/databases/H5Part/README.txt create mode 100644 trunk/visit_plugins/databases/H5Part/avth5partFileFormat.C create mode 100644 trunk/visit_plugins/databases/H5Part/avth5partFileFormat.h create mode 100644 trunk/visit_plugins/databases/H5Part/h5part.xml create mode 100644 trunk/visit_plugins/databases/H5Part/h5partCommonPluginInfo.C create mode 100644 trunk/visit_plugins/databases/H5Part/h5partEnginePluginInfo.C create mode 100644 trunk/visit_plugins/databases/H5Part/h5partMDServerPluginInfo.C create mode 100644 trunk/visit_plugins/databases/H5Part/h5partPluginInfo.C create mode 100644 trunk/visit_plugins/databases/H5Part/h5partPluginInfo.h create mode 100644 trunk/visit_plugins/operators/BinnerFilter/.depend create mode 100644 trunk/visit_plugins/operators/BinnerFilter/Binner.xml create mode 100644 trunk/visit_plugins/operators/BinnerFilter/BinnerCommonPluginInfo.C create mode 100644 trunk/visit_plugins/operators/BinnerFilter/BinnerEnginePluginInfo.C create mode 100644 trunk/visit_plugins/operators/BinnerFilter/BinnerFilter.C create mode 100644 trunk/visit_plugins/operators/BinnerFilter/BinnerFilter.h create mode 100644 trunk/visit_plugins/operators/BinnerFilter/BinnerFilter.java create mode 100644 trunk/visit_plugins/operators/BinnerFilter/BinnerGUIPluginInfo.C create mode 100644 trunk/visit_plugins/operators/BinnerFilter/BinnerMakefile create mode 100644 trunk/visit_plugins/operators/BinnerFilter/BinnerPluginInfo.C create mode 100644 trunk/visit_plugins/operators/BinnerFilter/BinnerPluginInfo.h create mode 100644 trunk/visit_plugins/operators/BinnerFilter/BinnerScriptingPluginInfo.C create mode 100644 trunk/visit_plugins/operators/BinnerFilter/BinnerViewerPluginInfo.C create mode 100644 trunk/visit_plugins/operators/BinnerFilter/Binnerreplace.txt create mode 100644 trunk/visit_plugins/operators/BinnerFilter/Makefile create mode 100644 trunk/visit_plugins/operators/BinnerFilter/PyBinner.C create mode 100644 trunk/visit_plugins/operators/BinnerFilter/PyBinner.h create mode 100644 trunk/visit_plugins/operators/BinnerFilter/QvisBinnerWindow.C create mode 100644 trunk/visit_plugins/operators/BinnerFilter/QvisBinnerWindow.h create mode 100644 trunk/visit_plugins/operators/BinnerFilter/avtBinnerFilter.C create mode 100644 trunk/visit_plugins/operators/BinnerFilter/avtBinnerFilter.h create mode 100644 trunk/visit_plugins/operators/BinnerFilter/icon.xpm create mode 100644 trunk/visit_plugins/operators/RandomSample/.depend create mode 100644 trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleAttributes.C create mode 100644 trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleAttributes.h create mode 100644 trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleAttributes.java create mode 100644 trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleCommonPluginInfo.C create mode 100644 trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleEnginePluginInfo.C create mode 100644 trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleGUIPluginInfo.C create mode 100644 trunk/visit_plugins/operators/RandomSample/H5PartRandomSamplePluginInfo.C create mode 100644 trunk/visit_plugins/operators/RandomSample/H5PartRandomSamplePluginInfo.h create mode 100644 trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleScriptingPluginInfo.C create mode 100644 trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleViewerPluginInfo.C create mode 100644 trunk/visit_plugins/operators/RandomSample/Makefile create mode 100644 trunk/visit_plugins/operators/RandomSample/PyH5PartRandomSampleAttributes.C create mode 100644 trunk/visit_plugins/operators/RandomSample/PyH5PartRandomSampleAttributes.h create mode 100644 trunk/visit_plugins/operators/RandomSample/QvisH5PartRandomSampleWindow.C create mode 100644 trunk/visit_plugins/operators/RandomSample/QvisH5PartRandomSampleWindow.h create mode 100644 trunk/visit_plugins/operators/RandomSample/RandomSample.xml create mode 100644 trunk/visit_plugins/operators/RandomSample/avtH5PartRandomSampleFilter.C create mode 100644 trunk/visit_plugins/operators/RandomSample/avtH5PartRandomSampleFilter.h create mode 100644 trunk/visit_plugins/operators/RandomSample/icon.xpm diff --git a/.gitattributes b/.gitattributes index 4caf171..b3bcc0e 100644 --- a/.gitattributes +++ b/.gitattributes @@ -59,6 +59,119 @@ tools/README -text tools/h5pAttrib.cc -text tools/h5pToGNUplot.cc -text tools/homdynToH5p.cc -text +trunk/AUTHORS -text +trunk/COPYRIGHT -text +trunk/ChangeLog -text +trunk/GNUmakefile.orig -text +trunk/Makefile.am -text +trunk/Makefile.orig -text +trunk/NEWS -text +trunk/README -text +trunk/autogen.sh -text +trunk/config.guess -text +trunk/config.h.in -text +trunk/config.sub -text +trunk/configure.ac -text +trunk/depcomp -text +trunk/doc/Doxyfile -text +trunk/doc/H5X_File_Format.txt -text +trunk/doc/Makefile.am -text +trunk/doc/doxyfooter -text +trunk/install-sh -text +trunk/license.txt -text +trunk/missing -text +trunk/rules.make -text +trunk/src/H5Block.c -text +trunk/src/H5Block.h -text +trunk/src/H5BlockErrors.h -text +trunk/src/H5BlockF.c -text +trunk/src/H5BlockF90.inc -text +trunk/src/H5BlockPrivate.h -text +trunk/src/H5BlockTypes.h -text +trunk/src/H5Part.c -text +trunk/src/H5Part.h -text +trunk/src/H5PartErrors.h -text +trunk/src/H5PartF.c -text +trunk/src/H5PartF90.inc -text +trunk/src/H5PartPrivate.h -text +trunk/src/H5PartTypes.h -text +trunk/src/Makefile.am -text +trunk/src/TestUnderscore.f -text +trunk/src/TestUnderscoreC.c -text +trunk/test/Bench.c -text +trunk/test/BlockTestSpecs.txt -text +trunk/test/H5BlockDissolveGhosts.c -text +trunk/test/H5BlockParTestScalarField.c -text +trunk/test/H5BlockParTestScalarField.pbs -text +trunk/test/H5BlockParTestScalarFieldF.f90 -text +trunk/test/H5BlockTestAttributes.c -text +trunk/test/H5BlockTestAttributesF.f90 -text +trunk/test/H5ParallelTest.cc -text +trunk/test/H5PartAndreasTest.cc -text +trunk/test/H5PartTest.cc -text +trunk/test/H5PartTestParallel.cc -text +trunk/test/H5test.cc -text +trunk/test/H5testF.f -text +trunk/test/H5testFpar.f90 -text +trunk/test/Makefile.am -text +trunk/tools/Makefile.am -text +trunk/tools/README -text +trunk/tools/h5pAttrib.cc -text +trunk/tools/h5pToGNUplot.cc -text +trunk/tools/homdynToH5p.cc -text +trunk/visit_plugins/databases/H5Part/.depend -text +trunk/visit_plugins/databases/H5Part/Makefile -text +trunk/visit_plugins/databases/H5Part/README.txt -text +trunk/visit_plugins/databases/H5Part/avth5partFileFormat.C -text +trunk/visit_plugins/databases/H5Part/avth5partFileFormat.h -text +trunk/visit_plugins/databases/H5Part/h5part.xml -text +trunk/visit_plugins/databases/H5Part/h5partCommonPluginInfo.C -text +trunk/visit_plugins/databases/H5Part/h5partEnginePluginInfo.C -text +trunk/visit_plugins/databases/H5Part/h5partMDServerPluginInfo.C -text +trunk/visit_plugins/databases/H5Part/h5partPluginInfo.C -text +trunk/visit_plugins/databases/H5Part/h5partPluginInfo.h -text +trunk/visit_plugins/operators/BinnerFilter/.depend -text +trunk/visit_plugins/operators/BinnerFilter/Binner.xml -text +trunk/visit_plugins/operators/BinnerFilter/BinnerCommonPluginInfo.C -text +trunk/visit_plugins/operators/BinnerFilter/BinnerEnginePluginInfo.C -text +trunk/visit_plugins/operators/BinnerFilter/BinnerFilter.C -text +trunk/visit_plugins/operators/BinnerFilter/BinnerFilter.h -text +trunk/visit_plugins/operators/BinnerFilter/BinnerFilter.java -text +trunk/visit_plugins/operators/BinnerFilter/BinnerGUIPluginInfo.C -text +trunk/visit_plugins/operators/BinnerFilter/BinnerMakefile -text +trunk/visit_plugins/operators/BinnerFilter/BinnerPluginInfo.C -text +trunk/visit_plugins/operators/BinnerFilter/BinnerPluginInfo.h -text +trunk/visit_plugins/operators/BinnerFilter/BinnerScriptingPluginInfo.C -text +trunk/visit_plugins/operators/BinnerFilter/BinnerViewerPluginInfo.C -text +trunk/visit_plugins/operators/BinnerFilter/Binnerreplace.txt -text +trunk/visit_plugins/operators/BinnerFilter/Makefile -text +trunk/visit_plugins/operators/BinnerFilter/PyBinner.C -text +trunk/visit_plugins/operators/BinnerFilter/PyBinner.h -text +trunk/visit_plugins/operators/BinnerFilter/QvisBinnerWindow.C -text +trunk/visit_plugins/operators/BinnerFilter/QvisBinnerWindow.h -text +trunk/visit_plugins/operators/BinnerFilter/avtBinnerFilter.C -text +trunk/visit_plugins/operators/BinnerFilter/avtBinnerFilter.h -text +trunk/visit_plugins/operators/BinnerFilter/icon.xpm -text +trunk/visit_plugins/operators/RandomSample/.depend -text +trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleAttributes.C -text +trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleAttributes.h -text +trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleAttributes.java -text +trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleCommonPluginInfo.C -text +trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleEnginePluginInfo.C -text +trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleGUIPluginInfo.C -text +trunk/visit_plugins/operators/RandomSample/H5PartRandomSamplePluginInfo.C -text +trunk/visit_plugins/operators/RandomSample/H5PartRandomSamplePluginInfo.h -text +trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleScriptingPluginInfo.C -text +trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleViewerPluginInfo.C -text +trunk/visit_plugins/operators/RandomSample/Makefile -text +trunk/visit_plugins/operators/RandomSample/PyH5PartRandomSampleAttributes.C -text +trunk/visit_plugins/operators/RandomSample/PyH5PartRandomSampleAttributes.h -text +trunk/visit_plugins/operators/RandomSample/QvisH5PartRandomSampleWindow.C -text +trunk/visit_plugins/operators/RandomSample/QvisH5PartRandomSampleWindow.h -text +trunk/visit_plugins/operators/RandomSample/RandomSample.xml -text +trunk/visit_plugins/operators/RandomSample/avtH5PartRandomSampleFilter.C -text +trunk/visit_plugins/operators/RandomSample/avtH5PartRandomSampleFilter.h -text +trunk/visit_plugins/operators/RandomSample/icon.xpm -text visit_plugins/databases/H5Part/.depend -text visit_plugins/databases/H5Part/Makefile -text visit_plugins/databases/H5Part/README.txt -text diff --git a/trunk/AUTHORS b/trunk/AUTHORS new file mode 100644 index 0000000..7257f49 --- /dev/null +++ b/trunk/AUTHORS @@ -0,0 +1,10 @@ + +Andreas Adelmann (PSI) +Achim Gsell (PSI) +Benedikt Oswald (PSI) + +Wes Bethel (NERSC/LBNL) +John Shalf (NERSC/LBNL) +Cristina Siegerist (NERSC/LBNL) + +Please use h5part@lists.psi.ch for communicaion. diff --git a/trunk/COPYRIGHT b/trunk/COPYRIGHT new file mode 100644 index 0000000..e147f6b --- /dev/null +++ b/trunk/COPYRIGHT @@ -0,0 +1,7 @@ +*** Copyright Notice *** + +H5Part Copyright (c) 2006, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from the U.S. Dept. of Energy) and the Paul Scherrer Institut (Switzerland). All rights reserved. + +If you have questions about your rights to use or distribute this software, please contact Berkeley Lab's Technology Transfer Department at TTD@lbl.gov referring to "H5Part (LBNL Ref CR-2255)" + +NOTICE. This software was developed under partial funding from the U.S. Department of Energy. As such, the U.S. Government has been granted for itself and others acting on its behalf a paid-up, nonexclusive, irrevocable, worldwide license in the Software to reproduce, prepare derivative works, and perform publicly and display publicly. Beginning five (5) years after the date permission to assert copyright is obtained from the U.S. Department of Energy, and subject to any subsequent five (5) year renewals, the U.S. Government is granted for itself and others acting on its behalf a paid-up, nonexclusive, irrevocable, worldwide license in the Software to reproduce, prepare derivative works, distribute copies to the public, perform publicly and display publicly, and to permit others to do so. diff --git a/trunk/ChangeLog b/trunk/ChangeLog new file mode 100644 index 0000000..e69de29 diff --git a/trunk/GNUmakefile.orig b/trunk/GNUmakefile.orig new file mode 100755 index 0000000..cc93c77 --- /dev/null +++ b/trunk/GNUmakefile.orig @@ -0,0 +1,133 @@ +UNAME := $(shell uname | perl -pe 's/(sn\d\d\d\d|jsimpson)/UNICOS\/mk/') +# for host specific options +HOST := $(shell hostname) + +# for processor-specific options +ifeq ($(UNAME), Linux) +PROC := $(shell uname -p) +endif + +CXX = c++ +CC = cc +H5HOME = /usr/local/hdf5 +CFLAGS = -g -I$(H5HOME)/include +LDFLAGS = -L$(H5HOME)/lib -lhdf5 -lz -lm + +# MacOS-X Serial +ifeq ($(UNAME), Darwin) +ifeq ($(PARALLEL), yes) +CXX = g++ +CC = mpicc +H5HOME = /usr/local +CFLAGS = -O -g -I$(H5HOME)/include -DPARALLEL_IO +LDFLAGS = -L$(H5HOME)/lib -lmpich -lpmpich -lhdf5 -lz -lm +else +CXX = c++ +CC = cc +F90 = xlf +H5HOME = /usr/local +CFLAGS = -O -g -I$(H5HOME)/include +LDFLAGS = -L$(H5HOME)/lib -lhdf5 -lz -lm +endif +endif + +# SGI MIPS/Irix +ifeq ($(UNAME), IRIX64) +CXX = CC +CC = cc +F90 = f90 +ifeq ($(PARALLEL), yes) +H5HOME = $(HDF5_DIR) +CFLAGS = -64 -O3 -I$(H5HOME)/include -DPARALLEL_IO +LDFLAGS = -64 -O3 -L$(H5HOME)/lib -lhdf5 -lz -lmpi -lm +else +H5HOME = /usr/local +CFLAGS = -O3 -I$(H5HOME)/include +LDFLAGS = -L$(H5HOME)/lib -lhdf5 -lz -lm +endif +endif + +# AIX/SP-2 Parallel/serial : Seaborg +ifeq ($(UNAME), AIX) +ifeq ($(PARALLEL), yes) # parallel +CXX = mpCC_r +CC = mpxlc_r +# H5HOME = /usr/common/usg/hdf5_64/1.4.5-post2/parallel +H5HOME = /usr/common/usg/hdf5_64/1.6.1/parallel +# /usr/common/usg/hdf5/1.4.4/parallel +H4HOME = /usr/common/usg/hdf/default +OPT = -qarch=auto -qtune=auto-qcache=auto -O3 -qhot +CFLAGS = -q64 -I$(H5HOME)/include +LDFLAGS = -L$(H5HOME)/lib -lhdf5 -L$(H4HOME)/lib -lz -lsz -lm +else # serial +CXX = xlC +CC = xlc +H5HOME = /usr/common/usg/hdf5/1.4.4/serial +H4HOME = /usr/common/usg/hdf/default +OPT = -qarch=auto -qtune=auto-qcache=auto -O3 -qhot +CFLAGS = -g -bmaxdata:800000000 -bmaxstack:256000000 -I$(H5HOME)/include +LDFLAGS = -L$(H5HOME)/lib -lhdf5 -L$(H4HOME)/lib -lz -lm +endif +endif + +# Linux +ifeq ($(UNAME), Linux) +# if this machine is NERSC/Davinci Altix system +ifeq ($(PROC), ia64) +CC = icc +CXX = icc + +ifeq ($(PARALLEL), yes) +# IA64 Linux Parallel +ifeq ($(HOST), davinci) +H5HOME = $(HDF5_PAR) +MPILIB = -lmpi +else +H5HOME = /usr/local +HDF5_PAR_LIB = -L$(H5HOME)/lib -lhdf5 -lz -lm +HDF5_PAR_INCLUDE = -I$(H5HOME)/include +MPIHOME = /usr/local +MPILIB = -lmpich +endif # HOST +CFLAGS = -O3 -DPARALLEL_IO -DH5_HAVE_PARALLEL $(HDF5_PAR_INCLUDE) +LDFLAGS = $(HDF5_PAR_LIB) $(MPILIB) +else # IA64 Linux Serial +CFLAGS = -O3 $(HDF5_INCLUDE) +LDFLAGS = $(HDF5_LIB) -lm +endif # PARALLEL + +# else this is standard IA32 linux +else +ifeq ($(PARALLEL), yes) +# Linux Parallel +CC = gcc +CXX = g++ +H5HOME = /usr/local +MPIHOME = /usr/local +CFLAGS = -O -g -DPARALLEL_IO -DH5_HAVE_PARALLEL -I$(H5HOME)/include +LDFLAGS = -L$(H5HOME)/lib -lhdf5 -lmpich -lrt -lz -lm +else # Linux Serial +CXX = g++ +CC = gcc +CFLAGS = -O -g -I$(H5HOME)/include +LDFLAGS = -L$(H5HOME)/lib -lhdf5 -lz -lm +endif # !PARALLEL +endif # PROC!ia64 + +endif # !Linux + +ifeq ($(PARALLEL), yes) #parallel +ifdef F90 +all: H5PartTest H5PartTest.o H5Part.o H5PartTestParallel H5PartAndreasTest H5PartF.o +else +all: H5PartTest H5PartTest.o H5Part.o H5PartTestParallel H5PartAndreasTest +endif +else +ifdef F90 +all: H5PartTest H5PartTest.o H5Part.o H5PartF.o +else +all: H5PartTest H5PartTest.o H5Part.o +endif +endif + +include rules.make diff --git a/trunk/Makefile.am b/trunk/Makefile.am new file mode 100644 index 0000000..8464cba --- /dev/null +++ b/trunk/Makefile.am @@ -0,0 +1,15 @@ +# Trial by Antino Kim +# Top level Makefile.am + +SUBDIRS = \ + doc \ + src \ + test \ + tools + +MAINTAINERCLEANFILES = \ + config.h \ + config.log \ + config.status \ + stamp-h.in \ + stamp-h1 diff --git a/trunk/Makefile.orig b/trunk/Makefile.orig new file mode 100755 index 0000000..883418f --- /dev/null +++ b/trunk/Makefile.orig @@ -0,0 +1,59 @@ + +# This is a very rudimentary multiarchitecture makefile +# You need to uncomment the default block of make variables you need +# Some key things to watch for are the following defines +# -DREGRESSIONTEST : enables a main(){} inside of +# the H5Part.cc file that does simple regression testing. +# -DPARALLEL_IO : If you want to use parallel HDF5, you have to +# enable this. Otherwise, you get only the serial +# implementation of the library. + +# MacOS-X Serial +#CXX = c++ +#CC = cc +#F90 = xlf +#H5HOME = /usr/local +#CFLAGS = -O -g -I$(H5HOME)/include +#LDFLAGS = -L$(H5HOME)/lib -lhdf5 -lz -lm + +# AIX/SP-2 Parallel : Seaborg +#CXX = mpCC_r +#CC = mpcc_r +#F90 = mpxlf +#H5HOME = /usr/common/usg/hdf5/1.4.4/parallel +#H4HOME = /usr/common/usg/hdf/default +#OPT = -qarch=auto -qtune=auto-qcache=auto -O3 -qhot +#CFLAGS = -g -bmaxdata:800000000 -bmaxstack:256000000 -I$(H5HOME)/include +#LDFLAGS = -L$(H5HOME)/lib -lhdf5 -L$(H4HOME)/lib -lz -lm + +# Linux Serial +#CXX = g++ +#CC = gcc +#F90 = g77 # or could be pgif90 +#CFLAGS = -O -g -I$(H5HOME)/include +#LDFLAGS = -L$(H5HOME)/lib -lhdf5 -lz -lm + +# Linux Jacquard +CC = mpicc +CXX = mpicxx +F90 = mpif90 +H5HOME = /usr/common/usg/hdf5/1.6.3/parallel +CFLAGS = -O2 -DPARALLEL_IO -DH5_HAVE_PARALLEL -I$(H5HOME)/include +LDFLAGS = -L$(H5HOME)/lib -lhdf5 -lz -lm + +# Linux Parallel +#CC = gcc +#CXX = g++ +#F90 = g77 +#H5HOME = /usr/local +# /usr/common/usg/hdf5/1.6.3/parallel +#MPIHOME = /usr/local +#CFLAGS = -O -g -DPARALLEL_IO -DH5_HAVE_PARALLEL -I$(H5HOME)/include +#LDFLAGS = -L$(H5HOME)/lib -lhdf5 -lmpich -lrt -lz -lm + +all: H5PartTest H5PartTest.o H5Part.o +parallel: H5PartTest H5PartTest.o H5Part.o H5PartTestParallel H5PartAndreasTest # parallel regression tests +fortran: H5PartF.o # fortran bindings + +include rules.make + diff --git a/trunk/NEWS b/trunk/NEWS new file mode 100644 index 0000000..13f694c --- /dev/null +++ b/trunk/NEWS @@ -0,0 +1,147 @@ +Error Handling +-------------- + Now all functions, in which an error could occure, are returning a +value. This value is either a 64bit integer or a pointer. + + A negative 64bit integer as result indicates an error. Values >= 0 +indicates successfull execution. This is similiar to the convention +used in UNIX system calls, but we do not return -1 but the error +number (which is always negative). + + For functions returning a pointer the NULL-pointer is used to indicate +an error. You can call the function H5PartGetErrno() to get the error +number. For the time being there is no strerror(3) or perror(3) +equivalent. + + +API Changes +----------- + There are several changes in the API of H5Part. The biggest change is +a side-effect of the implementation of strict error handling. The +impact to the existing C/C++ code is very small. But now you *can* +and *should* implement some kind of error handling. The simplest +error handling is to set an error handler which aborts the program as +soon as an error occured. + + The next "biggest" change is the use of H5Part types instead of "long +long" and "double". The replacement of "long long" is "h5part_int64_t" +and for "double" "h5part_float64_t". This change has now effect in +Fortran. + + In some functions the argument type changed from "int" to +"h5part_int64_t". Since on most systems "int" is a 32bit integer, +calls to these functions must be adapted to the new API. In C/C++ the +compiler will complain about it. But in Fortran you will *not* get an +error message.So, you must check your Fortran code carefully. + + Changes in detail (not listed are functions where only the return +type changed from any to "h5part_int64_t"): + + New API Changes to old API + + h5part_int64_t void + H5PartSetNumParticles ( + H5PartFile *f, + h5part_int64_t nparticles long long + ); + + h5part_int64_t int + H5PartWriteDataFloat64 ( + H5PartFile *f, + char *name, + h5part_float64_t *dta double + ); + + h5part_int64_t int + H5PartWriteDataInt64 ( + H5PartFile *f, + char *name, + h5part_int64_t *dta long long + ); + + h5part_int64_t void + H5PartSetStep ( + H5PartFile *f, + h5part_int64_t step int + ); + + h5part_int64_t void + H5PartSetView ( + H5PartFile *f, + h5part_int64_t start, long long + h5part_int64_t end long long + ); + + h5part_int64_t int + H5PartGetView ( + H5PartFile *f, + h5part_int64_t *start, long long + h5part_int64_t *end long long + ); + + h5part_int64_t int + H5PartReadDataFloat64 ( + H5PartFile *f, + char *name, + h5part_float64_t *dta double + ); + + h5part_int64_t int + H5PartReadDataInt64 ( + H5PartFile *f, + char *name, + h5part_int64_t *dta long long + ); + + h5part_int64_t void + H5PartReadParticleStep ( + H5PartFile *f, + h5part_int64_t step, int + h5part_float64_t *x, double + h5part_float64_t *y, double + h5part_float64_t *z, double + h5part_float64_t *px, double + h5part_float64_t *py, double + h5part_float64_t *pz, double + h5part_int64_t *id long long + ); + +New functions: + + h5part_int64_t + H5PartSetVerbosityLevel ( + unsigned int + ); + + h5part_int64_t + H5PartSetErrorHandler ( + h5part_error_handler handler + ); + + h5part_int64_t + H5PartGetErrno ( + void + ); + + h5part_int64_t + H5PartDefaultErrorHandler ( + const char *funcname, + const h5part_int64_t eno, + const char *fmt, + ... + ); + + h5part_int64_t + H5PartAbortErrorHandler ( + const char *funcname, + const h5part_int64_t eno, + const char *fmt, + ... + ); + +Removed functions: + + int + H5PartFileIsValid ( + H5PartFile *f + ); diff --git a/trunk/README b/trunk/README new file mode 100644 index 0000000..4dc7bf6 --- /dev/null +++ b/trunk/README @@ -0,0 +1,418 @@ +============================================================================== +README file for H5Part configure +============================================================================== + ++ 0. HDF5 library +----------------- + +Make sure you have a working version of the HDF5 library in your computer. If you plan +to use parallel I/O you need to use a parallel HDF5 version. If you don't have the +library download the sources from http://hdf.ncsa.uiuc.edu/HDF5/ + ++ 1. Quick start (If you feel lucky...) +---------------------------------------- + +For many platforms, where compilers are installed in the "default" location +and all the environment variables are set correctly, it should be sufficient +to type: + +./configure [OPTIONS] && make [install] + +to have the libraries and test program compiled. + + +============================================================================== + + ++ 2. configure line options +---------------------------- + +(1) Enable options +--enable-fortran +--enable-parallel +--enable-tools +--enable-python +--enable-64 (only for AIX and Irix) + +(2) Setting compilers related variables manually +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Compiler environment variables: + CC C compiler command + CXX C++ compiler command + FC Fortran compiler command + +(3) Setting prefix for installation manually +--prefix=PREFIX install files in PREFIX + + +For more information, type: + +./configure --help + + +============================================================================== + + ++ 3. Platform specific settings for compiling libraries & test programs +------------------------------------------------------------------------ + +Building + make : builds the libraries and test programs + make install: builds and installs + make clean : removes extraneous object files + make distclean : returns configuration to unconfigured state + +As tested on hosts: + +(1) Davinci (Linux"SUSE"-ia64) +--------------------------------------------------- +FIRST THING FIRST!! Type: + +module load intel +to have the proper compilers set up for use. + +module load hdf5_par + +[NOTE: module load hdf5 does not work at this moment. +Possible installation error of HDF5 on Davinci.] + + +Brief profile: +CC = icc +CXX = icc +FC = ifort +MPICC = icc +MPICXX = icc +MPIFC = ifort + +If default doesn't work, try: + +For C shell: +env CC=icc CXX=icc FC=ifort MPICC=icc MPICXX=icc MPIFC=ifort ./configure && make install + +For Korn or Bourne shell: +CC=icc CXX=icc FC=ifort MPICC=icc MPICXX=icc MPIFC=ifort ./configure && make install + +And, of course, you should add configure options, such as --enable-fortran --enable-parallel. + + +On this host, executing: + +For C shell: +env CC=icc CXX=icc FC=ifort MPICC=icc MPICXX=icc MPIFC=ifort ./configure --enable-fortran --enable-parallel && make install + +For Korn or Bourne shell: +CC=icc CXX=icc FC=ifort MPICC=icc MPICXX=icc MPIFC=ifort ./configure --enable-fortran --enable-parallel && make install + +has functioned correctly. + + +To run test program, go to test directory: + +(i) Serial test +run: +./H5testF +./H5PartTest + +(ii) Parallel test +run: +mpirun 2 H5testFpar +mpirun 2 H5PartTestP + +NOTE: Number 2 above is a arbitrary number that indicates the number of processes. + + + + + +(2) Jacquard (Linux"SUSE"-x86_64) +------------------------------------------------------- +Brief profile: +CC = pathcc +CXX = pathCC +FC = pathf90 +MPICC = mpicc +MPICXX = mpicxx +MPIFC = mpif90 + + + +If default doesn't work, try: + +For C shell: +env CC=pathcc CXX=pathCC FC=pathf90 MPICC=mpicc MPICXX=mpicxx MPIFC=mpif90 ./configure && make install + +For Korn or Bourne shell: +CC=pathcc CXX=pathCC FC=pathf90 MPICC=mpicc MPICXX=mpicxx MPIFC=mpif90 ./configure && make install + +And, of course, you should add configure options, such as --enable-fortran --enable-parallel. + + + +On this host, executing: + +For C shell: +env CC=pathcc CXX=pathCC FC=pathf90 MPICC=mpicc MPICXX=mpicxx MPIFC=mpif90 ./configure --enable-fortran --enable-parallel && make install + +For Korn or Bourne shell: +CC=pathcc CXX=pathCC FC=pathf90 MPICC=mpicc MPICXX=mpicxx MPIFC=mpif90 ./configure --enable-fortran --enable-parallel && make install + +has functioned correctly. + + + +To run test program, go to test directory: + +(i) Serial test +run: +./H5testF +./H5PartTest + +(ii) Parallel test +In Jacquard, we need a script to run parallel programs, since Jacquard does not support interactive parallel processing. Instead, we need to submit the task to a queue. A sample script (run_H5testFpar.scr) may look like below: + ++++++++++++++++++++++++++++++++++++++++ +#!/bin/csh +#PBS -l nodes=1:ppn=2,walltime=00:05:00 +#PBS -N H5testFpar +#PBS -o H5testFpar.out +#PBS -e H5testFpar.err +#PBS -q debug +#PBS -A mpccc +#PBS -V + +setenv PBS_OWORKDIR /home/H5Part/test + +cd $PBS_O_WORKDIR +mpirun -np 2 ./H5testFpar ++++++++++++++++++++++++++++++++++++++++ + +Then, we need to submit the task to a queue by running: + +qsub run_H5testFpar.scr + +After processed, the result will appear in H5testFpar.out, and error messages will appear in H5testFpar.err. + + + + + +(3) Bassi (AIX5.3.0.0-Power 3) +------------------------------------------------- +FIRST THING FIRST!! Type: + +module load gcc + +to have the proper compilers set up for use. + +Brief profile: +CC = cc_r +CXX = cc_r +FC = xlf_r +MPICC = mpcc_r +MPICXX = mpcc_r +MPIFC = mpxlf_r + + + +If default doesn't work, try: + +For C shell: +env CC=cc_r CXX=cc_r FC=xlf_r MPICC=mpcc_r MPICXX=mpcc_r MPIFC=mpxlf_r ./configure && make install + +For Korn or Bourne shell: +CC=cc_r CXX=cc_r FC=xlf_r MPICC=mpcc_r MPICXX=mpcc_r MPIFC=mpxlf_r ./configure && make install + +And, of course, you should add configure options, such as --enable-fortran --enable-parallel. + + + +On this host, executing: + +For C shell: +env CC=cc_r CXX=cc_r FC=xlf_r MPICC=mpcc_r MPICXX=mpcc_r MPIFC=mpxlf_r ./configure --enable-fortran --enable-parallel && make install + +For Korn or Bourne shell: +CC=cc_r CXX=cc_r FC=xlf_r MPICC=mpcc_r MPICXX=mpcc_r MPIFC=mpxlf_r ./configure --enable-fortran --enable-parallel && make install + +has functioned correctly. + + + +To run test program, go to test directory: + +(i) Serial test +run: +./H5testF +./H5PartTest + +(ii) Parallel test +run: +unsetenv MP_SINGLE_THREAD +poe ./H5PartTestP -procs 2 -nodes 1 +poe ./H5testFpar -procs 2 -nodes 1 + +For more details on how to run parallel programs on Bassi, go to: + +http://www.nersc.gov/nusers/resources/bassi/running_jobs/ + + + + + +(4) Starsky (Darwin8.5.0-PowerPC) +---------------------------------------------------- +FIRST THING FIRST!! Set environment variables: (in tcsh) + +setenv LD_LIBRARY_PATH /usr/local/g95/lib/gcc-lib/powerpc-apple-darwin8.5.0/4.0.3/ +setenv PATH ${PATH}:/usr/local/g95/bin + +NOTE: This environment variable setting is specifit to Starsky. It is to make configure find the fortran compiler. + +Brief profile: +CC = gcc +CXX = g++ +FC = g95 + + + +If default doesn't work, try: + +For C shell: +env CC=gcc CXX=g++ FC=g95 ./configure && make install + +For Korn or Bourne shell: +CC=gcc CXX=g++ FC=g95 ./configure && make install + +And, of course, you should add configure options, such as --enable-fortran --enable-parallel. + + + +On this host, executing: + +For C shell: +env CC=gcc CXX=g++ FC=g95 ./configure --enable-fortran && make install + +For Korn or Bourne shell: +CC=gcc CXX=g++ FC=g95 ./configure --enable-fortran && make install + +has functioned correctly. + + + +To run test program, go to test directory: + +(i) Serial test +run: +./H5testF +./H5PartTest + + + + + +(5) Linux AMD64 Visualization group workstations (Linux"SUSE"-x86_64) +--------------------------------------------------------- +Brief profile: +CC = gcc +CXX = g++ +FC = g95 + + + +If default doesn't work, try: + +For C shell: +env CC=gcc CXX=g++ FC=g95 ./configure && make install + +For Korn or Bourne shell: +CC=gcc CXX=g++ FC=g95 ./configure && make install + +And, of course, you should add configure options, such as --enable-fortran --enable-parallel. + + + +On this host, executing: + +For C shell: +env CC=gcc CXX=g++ FC=g95 ./configure --enable-fortran && make install + +For Korn or Bourne shell: +CC=gcc CXX=g++ FC=g95 ./configure --enable-fortran && make install + +has functioned correctly. + + + +To run test program, go to test directory: + +(i) Serial test +run: +./H5testF +./H5PartTest + + +(6) Cray XT3 @ CSCS gele + + 1) modules/3.1.6 9) PrgEnv-pgi/1.4.26 17) xt-lustre-ss/1.4.26 + 2) MySQL/4.0.26 10) xt-pbs/5.3.4 18) Base-opts/1.4.26 + 3) acml/3.0 11) xt-service/1.4.26 19) subversion/1.3.2 + 4) pgi/6.1.4 12) xt-libc/1.4.26 20) zlib/1.2.3 + 5) totalview/7.2.0 13) xt-os/1.4.26 21) szip/2.0 + 6) xt-libsci/1.4.26 14) xt-catamount/1.4.26 22) hdf5/1.6.5 + 7) xt-mpt/1.4.26 15) xt-boot/1.4.26 + 8) xt-pe/1.4.26 16) xt-crms/1.4.26 + + +CFLAGS="-I$H5HOME/include -DF77_SINGLE_UNDERSCORE" LDFLAGS="-L$H5HOME/lib -L$ZHOME/lib" ./configure --enable-parallel --enable-fortran + + +(7) merlin00 / merlin3 + +Currently Loaded Modulefiles: + 1) hdf5/hdf5-1.6.5 2) root/root-5.10.00 3) mpi/mpich2-1.0.3-pgi-6.1 4) pgi/pgi_64-6.1 + +FC=mpif90 ./configure --enable-parallel --enable-fortran + + + + + + + +============================================================================== + + ++ 4. Trouble shooting (Things to check for...) +-------------------------------------------- +(0) Have you set the LD_LIBRARY_PATH? +---Some systems require the user to manually set the environment variable, LD_LIBRARY_PATH. To do so: + +set the environment variable HDF5ROOT or PHDF5ROOT to point to your installation of HDF5 (serial and/or parallel respectively). + +For Korn or Bourne shell: + LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${HDF5ROOT}/lib;export LD_LIBRARY_PATH + LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:{PHDF5ROOT}/lib;export LD_LIBRARY_PATH + +For C shell: + setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:${HDF5ROOT}/lib + setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:${PHDF5ROOT}/lib + +Note that the values of HDF5ROOT & PHDF5ROOT will be in the "summary" section when you run configure. + +Not properly set LD_LIBRARY_PATH value may result in a runtime error: + +./H5PartTest: error while loading shared libraries: libhdf5.so.0: cannot open shared object file: No such file or directory + +(1) Are the compilers set correctly? +---Check with: which COMPILER + +(2) Have you installed HDF5? +---You can get it at: http://vis.lbl.gov/Research/AcceleratorSAPP/index.html + +(3) Have you loaded the proper modules? +---It is necessary in Davinci & Bassi, and configure && make install may not work without it. + + diff --git a/trunk/autogen.sh b/trunk/autogen.sh new file mode 100755 index 0000000..c89e6be --- /dev/null +++ b/trunk/autogen.sh @@ -0,0 +1,46 @@ +#!/bin/sh +# Run this to generate all the initial makefiles, etc. + +echo "+ making misc files ..." +touch NEWS README AUTHORS ChangeLog +echo +echo +echo +echo "+ running aclocal ..." +aclocal $ACLOCAL_FLAGS || { + echo + echo "aclocal failed - check that all needed development files are present on system" + exit 1 +} +echo +echo +echo +echo +echo "+ running autoheader ... " +autoheader || { + echo + echo "autoheader failed" + exit 1 +} +echo +echo +echo +echo "+ running autoconf ... " +autoconf || { + echo + echo "autoconf failed" + exit 1 +} +echo +echo +echo +echo "+ running automake ... " +automake -a -c --foreign || { + echo + echo "automake failed" + exit 1 +} +echo +echo +echo + diff --git a/trunk/config.guess b/trunk/config.guess new file mode 100755 index 0000000..44f30e6 --- /dev/null +++ b/trunk/config.guess @@ -0,0 +1,1469 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + +timestamp='2005-02-10' + +# This file 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. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +case "${UNAME_MACHINE}" in + i?86) + test -z "$VENDOR" && VENDOR=pc + ;; + *) + test -z "$VENDOR" && VENDOR=unknown + ;; +esac +test -f /etc/SuSE-release -o -f /.buildenv && VENDOR=suse + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit 0 ;; + amd64:OpenBSD:*:*) + echo x86_64-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + amiga:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + cats:OpenBSD:*:*) + echo arm-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + hp300:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + luna88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + macppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvmeppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sgi:OpenBSD:*:*) + echo mips64-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sun3:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:OpenBSD:*:*) + echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit 0 ;; + macppc:MirBSD:*:*) + echo powerppc-unknown-mirbsd${UNAME_RELEASE} + exit 0 ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit 0 ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit 0 ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit 0 ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit 0 ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit 0;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit 0 ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit 0 ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit 0 ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit 0 ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit 0 ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit 0;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit 0;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit 0 ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit 0 ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit 0 ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7 && exit 0 ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit 0 ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit 0 ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit 0 ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit 0 ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit 0 ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit 0 ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit 0 ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit 0 ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit 0 ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit 0 ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit 0 ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c \ + && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ + && exit 0 + echo mips-mips-riscos${UNAME_RELEASE} + exit 0 ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit 0 ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit 0 ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit 0 ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit 0 ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit 0 ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit 0 ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit 0 ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit 0 ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit 0 ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit 0 ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit 0 ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit 0 ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit 0 ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit 0 ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 + echo rs6000-ibm-aix3.2.5 + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit 0 ;; + *:AIX:*:[45]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit 0 ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit 0 ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit 0 ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit 0 ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit 0 ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit 0 ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit 0 ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + # avoid double evaluation of $set_cc_for_build + test -n "$CC_FOR_BUILD" || eval $set_cc_for_build + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit 0 ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit 0 ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 + echo unknown-hitachi-hiuxwe2 + exit 0 ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit 0 ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit 0 ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit 0 ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit 0 ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit 0 ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit 0 ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit 0 ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit 0 ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit 0 ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit 0 ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit 0 ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit 0 ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:FreeBSD:*:*) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit 0 ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit 0 ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit 0 ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit 0 ;; + x86:Interix*:[34]*) + echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' + exit 0 ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit 0 ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit 0 ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit 0 ;; + amd64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit 0 ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit 0 ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit 0 ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit 0 ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit 0 ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-${VENDOR}-linux + exit 0 ;; + cris:Linux:*:*) + echo cris-axis-linux + exit 0 ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux + exit 0 ;; + frv:Linux:*:*) + echo frv-${VENDOR}-linux + exit 0 ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-${VENDOR}-linux + exit 0 ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-${VENDOR}-linux + exit 0 ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-${VENDOR}-linux + exit 0 ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + test x"${CPU}" != x && echo "${CPU}-${VENDOR}-linux" && exit 0 + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + test x"${CPU}" != x && echo "${CPU}-${VENDOR}-linux" && exit 0 + ;; + ppc:Linux:*:*) + echo powerpc-${VENDOR}-linux + exit 0 ;; + ppc64:Linux:*:*) + echo powerpc64-${VENDOR}-linux + exit 0 ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="-libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-${VENDOR}-linux${LIBC} + exit 0 ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-${VENDOR}-linux ;; + PA8*) echo hppa2.0-${VENDOR}-linux ;; + *) echo hppa-${VENDOR}-linux ;; + esac + exit 0 ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-${VENDOR}-linux + exit 0 ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit 0 ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-${VENDOR}-linux + exit 0 ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-${VENDOR}-linux + exit 0 ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-${VENDOR}-linux + exit 0 ;; + x86_64:Linux:*:*) + echo x86_64-${VENDOR}-linux + exit 0 ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-${VENDOR}-linux" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-${VENDOR}-linuxaout" + exit 0 ;; + coff-i386) + echo "${UNAME_MACHINE}-${VENDOR}-linuxcoff" + exit 0 ;; + "") + # Either a pre-BFD a.out linker (linuxoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-${VENDOR}-linuxoldld" + exit 0 ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #ifdef __INTEL_COMPILER + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + test x"${LIBC}" != x && echo "${UNAME_MACHINE}-${VENDOR}-linux-${LIBC}" | sed 's/linux-gnu/linux/' && exit 0 + test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit 0 ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit 0 ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit 0 ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit 0 ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit 0 ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit 0 ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit 0 ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit 0 ;; + i*86:*:5:[78]*) + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit 0 ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit 0 ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit 0 ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit 0 ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit 0 ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit 0 ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit 0 ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit 0 ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit 0 ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4.3${OS_REL} && exit 0 + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4 && exit 0 ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit 0 ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit 0 ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit 0 ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit 0 ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit 0 ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit 0 ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit 0 ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit 0 ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit 0 ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit 0 ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit 0 ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit 0 ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit 0 ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit 0 ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + *86) UNAME_PROCESSOR=i686 ;; + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit 0 ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit 0 ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit 0 ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit 0 ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit 0 ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit 0 ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit 0 ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit 0 ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit 0 ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit 0 ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit 0 ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit 0 ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit 0 ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit 0 ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit 0 ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit 0 ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit 0 ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms && exit 0 ;; + I*) echo ia64-dec-vms && exit 0 ;; + V*) echo vax-dec-vms && exit 0 ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit 0 ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit 0 ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + c34*) + echo c34-convex-bsd + exit 0 ;; + c38*) + echo c38-convex-bsd + exit 0 ;; + c4*) + echo c4-convex-bsd + exit 0 ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/trunk/config.h.in b/trunk/config.h.in new file mode 100755 index 0000000..558ea81 --- /dev/null +++ b/trunk/config.h.in @@ -0,0 +1,44 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* "" */ +#undef MY_BUILD_CPU + +/* "" */ +#undef MY_BUILD_OS + +/* "" */ +#undef MY_BUILD_VENDOR + +/* "" */ +#undef MY_GNUNAME + +/* "" */ +#undef MY_UNAME + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Version number of package */ +#undef VERSION + +/* Define to 1 if on AIX 3. + System headers sometimes define this. + We just want to avoid a redefinition error message. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif diff --git a/trunk/config.sub b/trunk/config.sub new file mode 100755 index 0000000..c884ad4 --- /dev/null +++ b/trunk/config.sub @@ -0,0 +1,1563 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + +timestamp='2005-02-10' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file 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. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit 0;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ + kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64vr | mips64vrel \ + | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | msp430 \ + | ns16k | ns32k \ + | openrisc | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \ + | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* \ + | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | msp430-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa-* \ + | ymp-* \ + | z8k-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16c) + basic_machine=cr16c-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + or32 | or32-*) + basic_machine=or32-unknown + os=-coff + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/trunk/configure.ac b/trunk/configure.ac new file mode 100644 index 0000000..b14d779 --- /dev/null +++ b/trunk/configure.ac @@ -0,0 +1,607 @@ +# Every configure script must call AC_INIT before doing anything else. +# AC_INIT (package, version, [bug-report], [tarname]) +AC_INIT([H5Part], [1.3.3], [h5part@lists.psi.ch], H5Part) + + +# Ensure that a recent enough version of Autoconf is being used. +# If the version of Autoconf being used to create configure is earlier than version, +# print an error message to the standard error output and do not create configure. +#AC_PREREQ(2.59) + + +# should be called right after AC_INIT. +# configure scripts can create a C header file containing `#define' directives. +# The AC_CONFIG_HEADERS macro selects this kind of output. +AC_CONFIG_HEADER(config.h) + +############################################################################### +################# --enable-xxx and --with-xxx Argument ######################## +############################################################################### + +AC_ARG_ENABLE( + [64], + [AC_HELP_STRING([--enable-64], + [Compile using 64-bit flags [default=no]])], + [USE_64=$enableval]) + +AC_ARG_ENABLE( + [fortran], + [AC_HELP_STRING([--enable-fortran], + [Compile the Fortran interface [default=no]])], + [USE_FORTRAN=$enableval]) + +AC_ARG_ENABLE( + [parallel], + [AC_HELP_STRING([--enable-parallel], + [Compile the MPI/IO interface [default=no]])], + [USE_PARALLEL=$enableval]) + +AC_ARG_ENABLE( + [tools], + [AC_HELP_STRING([--enable-tools], + [Compile h5part tools [default=no]])], + [USE_TOOLS=$enableval]) + +AC_ARG_WITH( + [mpipath], + [AC_HELP_STRING([--with-mpipath], + [path to MPI installation [default=""]])], + [MPIPATH=$withval], [MPIPATH=""]) + +AC_ARG_WITH( + [hdf5path], + [AC_HELP_STRING([--with-hdf5path], + [path to HDF5 installation [default=""]])], + [HDF5PATH=$withval], [HDF5PATH=""]) + +############################################################################### +################# A SIMPLE WORK AROUND TO USE ENV. VARS ####################### +############################################################################### + +SAVE_CC=$CC +SAVE_CXX=$CXX +SAVE_FC=$FC +SAVE_MPICC=$MPICC +SAVE_MPICXX=$MPICXX +SAVE_MPIFC=$MPIFC +SAVE_MPILIB=$MPILIB +SAVE_MPIINC=$MPIINC +SAVE_CFLAGS=$CFLAGS +CFLAGS='' +SAVE_FFLAGS=$FFLAGS +SAVE_MPIROOT=$MPIROOT +SAVE_HDF5ROOT=$HDF5ROOT +SAVE_LDFLAGS=$LDFLAGS + +############################################################################### +############### PATH SERACH FUNCTION - to be used later... #################### +############################################################################### +# /*@@ +# @routine CCTK_Search +# @date Wed Jul 21 11:16:35 1999 +# @author Tom Goodale +# @desc +# Used to search for something in various directories +# @enddesc +#@@*/ + +PATH_Search() +{ + eval $1="" + if test $# -lt 4 ; then + h5part_basedir="" + else + h5part_basedir="$4/" + fi + for h5part_place in $2 + do + echo -n "looking in $h5part_place ... $ac_c" #1>&6 + if test -r "$h5part_basedir$h5part_place/$3" ; then + echo "$ac_t"" found" #1>&6 + eval $1="$h5part_place" + break + fi + if test -d "$h5part_basedir$h5part_place/$3" ; then + echo "$ac_t"" found" #1>&6 + eval $1="$h5part_place" + break + fi + echo "$ac_t"" no" #1>&6 + done + + return +} + + + +############################################################################### +############# MISC SETTINGS INCLUDING C & C++ COMPILER SETTING ################ +############################################################################### +# Compute the canonical host-system type variable, host, and its three +# individual parts host_cpu, host_vendor, and host_os. +AC_CANONICAL_HOST + + +uname=`uname -s` +if test $uname = "AIX"; then + AC_MSG_CHECKING([if system is AIX]) + AC_MSG_RESULT([OK]) + + # If on AIX, define _ALL_SOURCE. Allows the use of some BSD functions. + # Should be called before any macros that run the C compiler. + AC_AIX +fi + + +# DAVINCI SPECIFIC!!! +if test `uname -n` = "davinci"; then + echo "DAVINCI SPECIFIC TESTING FOR STDC++ LIBRARY!" + PATH_Search STDCXX_CHECK '/usr/lib64 /usr/lib' libstdc++.a + + # if STDCXX_CHECK is set... + if test "$STDCXX_CHECK" = "/usr/lib64"; then + echo "STDCXX setting ..." + echo "STDCXX_CHECK = $STDCXX_CHECK ..." + STDCXX="-L/usr/lib64 -lstdc++" + echo "STDCXX = $STDCXX ..." + elif test "$STDCXX_CHECK" = "/usr/lib"; then + echo "STDCXX setting ..." + echo "STDCXX_CHECK = $STDCXX_CHECK ..." + STDCXX="-L/usr/lib -lstdc++" + echo "STDCXX = $STDCXX ..." + fi +fi + + +# Determine a C compiler to use. +# If CC is not already set in the environment, check for gcc and cc, then +# for other C compilers. +# Set output variable CC to the name of the compiler found. +AC_PROG_CC(pathcc icc cc_r gcc cc) + +# AC_PROG_CC doesn't pick up cc_r in Bassi. The following AC_PATH_PROGS +# is the fix. +AC_PATH_PROGS([BAS_CC], [cc_r], [], [$PATH]) + +# if BAS_CC not empty +if test -n "$BAS_CC"; then + echo "CC setting for Bassi ..." + CC=$BAS_CC + echo "CC = $CC ..." +fi + + +# Determine a C++ compiler to use. +# Check if the environment variable CXX or CCC (in that order) is set; +# if so, then set output variable CXX to its value. +# Otherwise, if the macro is invoked without an argument, +# then search for a C++ compiler under the likely names (first g++ and c++ +# then other names). +# If none of those checks succeed, then as a last resort set CXX to g++. +AC_PROG_CXX(pathCC icc cc_r g++ gcc cc) + + +# Set output variable INSTALL to the path of a BSD-compatible install program, +# if one is found in the current PATH. +# Otherwise, set INSTALL to `dir/install-sh -c` +AC_PROG_INSTALL + + +# AM_INIT_AUTOMAKE is required to use autoconf with automake +AM_INIT_AUTOMAKE() + + +AC_PROG_RANLIB + +# Default prefix for bindir, etc... (eg >> ./build/bin) +AC_PREFIX_DEFAULT(`pwd`/build) + + +# AC_DEFINE_UNQUOTED (variable, value, [description]) +# Define the C preprocessor variable variable to value +# Use this macro instead of AC_DEFINE when variable or value is a shell variable. +AC_DEFINE_UNQUOTED(MY_BUILD_VENDOR, "$host_vendor", "") +AC_DEFINE_UNQUOTED(MY_BUILD_CPU, "$host_cpu", "") +AC_DEFINE_UNQUOTED(MY_BUILD_OS, "$host_os", "") +AC_DEFINE_UNQUOTED(MY_GNUNAME, "${host_cpu}-${host_vendor}-${host_os}", "") +AC_DEFINE_UNQUOTED(MY_UNAME, "$uname", "") + + + +############################################################################### +######################## CONFIGURE LINE OPTIONS ############################### +############################################################################### + +###################### 64-bit compilation enabled ############################# +AC_MSG_CHECKING([if 64-bit compilation is enabled]) + + +# If --enable-64 is set in the configure line +if test "X$USE_64" = "Xyes"; then + AC_MSG_RESULT([yes]) + if test $uname = "AIX"; then + CFLAGS="$CFLAGS -q64" + FFLAGS="$FFLAGS -q64" + fi + + if test $uname = "IRIX64"; then + CFLAGS="$CFLAGS -64" + FFLAGS="$FFLAGS -64 -fPIC -fno-second-underscore" + fi +else + AC_MSG_RESULT([no]) +fi + + +############################ fortran enabled ################################## +AC_MSG_CHECKING([if fortran interface enabled]) +if test "X$USE_FORTRAN" = "Xyes"; then + AC_MSG_RESULT([yes]) + + AC_PROG_FC(ifort xlf_r pathf90 g95 g90 ftn gfortran) + if test -z "$FC" ; then + AC_MSG_ERROR([Cannot find a fortran compiler!!!]) + exit 1 + fi + + if test ! $uname = "AIX"; then + FFLAGS="${FFLAGS} -fPIC -fno-second-underscore" + fi + + AC_MSG_CHECKING([symbol convention in object files]) + `cd src && rm -f TestUnderscore.o TestUnderscoreC.o TestUnderscore` + `cd src && ${FC} ${FFLAGS} -c TestUnderscore.f` + `cd src && ${CC} ${CFLAGS} -c TestUnderscoreC.c` + `cd src && ${FC} ${FFLAGS} -o TestUnderscore TestUnderscore.o TestUnderscoreC.o -lc` + + if test -f src/TestUnderscore ; then + UNDERSCORE_H=Underscore.h + `cd src && ./TestUnderscore > Underscore.h` + AC_MSG_RESULT([ok]) + else + AC_MSG_RESULT([nok]) + AC_MSG_ERROR([Cannot build fortran executables!!!]) + exit 1 + fi +else + AC_MSG_RESULT([no]) +fi + + +######################## parallel interface enabled ########################### +AC_MSG_CHECKING([if parallel interface enabled]) +if test "X$USE_PARALLEL" = "Xyes"; then + AC_MSG_RESULT([yes]) + + CFLAGS="${CFLAGS} -DPARALLEL_IO -DH5_HAVE_PARALLEL -DMPICH_IGNORE_CXX_SEEK" + + AC_MSG_CHECKING([if we can compile MPI code without setting flags]) + AC_TRY_LINK([#include "mpi.h"], [ + MPI_Comm comm; + int n; + MPI_Comm_size( comm, &n ); ], + [echo 'yes'; r='yes'], [echo "no"; r='no'] ) + + if test "X$r" = "Xno"; then + AC_PATH_PROGS([MPICC], [mpicc mpcc_r], [], [$PATH]) + AC_PATH_PROGS([MPICXX], [mpicxx mpcc_r], [], [$PATH]) + if test -z "$MPICC" -o -z "$MPICXX"; then + AC_MSG_CHECKING([for MPI root ]) + AC_MSG_RESULT([]) + if test -n "$MPIROOT"; then + P=${MPIROOT} + elif test -n "$MPIHOME"; then + P=${MPIHOME} + elif test -n "$MPIPATH"; then + P=${MPIPATH} + else + P='' + P="$P /usr" + P="$P /usr/local" + P="$P /usr/local/mpi" + P="$P /usr/local/packages/mpi" + P="$P /usr/local/mpich2" + P="$P /usr/local/mpich" + P="$P /opt/xt-mpt/default/mpich2-64/P2" + fi + PATH_Search MPIROOT "$P" include/mpi.h + if test ! -n "$MPIROOT"; then + AC_MSG_ERROR([Cannot determine MPI root!!!]) + exit 1 + fi + + if test -e "${MPIROOT}/bin/mpicc"; then + MPICC=${MPIROOT}/bin/mpicc + fi + + if test -e "${MPIROOT}/bin/mpicxx"; then + MPICXX=${MPIROOT}/bin/mpicxx + fi + fi + + if test -z "$MPICC" -o -z "$MPICXX"; then + MPIINC="${MPIINC} -I${MPIROOT}/include" + FFLAGS="${FFLAGS} -I${MPIROOT}/include" + AC_MSG_CHECKING([for name of MPI lib ]) + if test -e ${MPIROOT}/lib/libmpi.a; then + MPILIB="-L${MPIROOT}/lib -lmpi" + elif test -e ${MPIROOT}/lib/libmpi.so; then + MPILIB="-L${MPIROOT}/lib -lmpi" + elif test -e ${MPIROOT}/lib/libmpich.a; then + MPILIB="-L${MPIROOT}/lib -lmpich" + elif test -e ${MPIROOT}/lib/libmpich.so; then + MPILIB="-L${MPIROOT}/lib -lmpich" + else + AC_MSG_RESULT([not found]) + exit 1 + fi + AC_MSG_RESULT([${MPILIB}]) + fi + + if test -n "$MPICC"; then + CC=${MPICC} + fi + + if test -n "$MPICXX"; then + CXX=${MPICXX} + fi + fi + + MTARGET="libpH5Part.a" + TTARGET="H5PartTestP H5PartAndreasTest Bench" + TTARGET="${TTARGET} H5BlockTestAttributes" + TTARGET="${TTARGET} H5BlockParTestScalarField" + + # parallel + fortran + if test "X$USE_FORTRAN" = "Xyes"; then + AC_PATH_PROGS([MPIFC], [mpxlf_r mpif90], [], [$PATH]) + + if test -z "${MPIFC}" ; then + if test -e "${MPIROOT}/bin/mpif90"; then + MPIFC=${MPIROOT}/bin/mpif90 + fi + fi + + # if MPIFC empty + if test ! -n "$MPIFC"; then + AC_MSG_CHECKING([ No MPIFC detected. Setting MPIFC to FC.]) + MPIFC=$FC + echo "MPIFC = $MPIFC ..." + fi + + if test -n "$MPIFC"; then + FC=${MPIFC} + fi + + MTARGET="${MTARGET} libpH5PartF.a" + TTARGET="${TTARGET} H5testFpar" + TTARGET="${TTARGET} H5BlockParTestScalarFieldF" + fi + +else # --enable-parallel=no + AC_MSG_RESULT([no]) + + MTARGET="libH5Part.a" + TTARGET="H5PartTest H5test" + TTARGET="${TTARGET} H5BlockTestAttributes" + + if test "X$USE_FORTRAN" = "Xyes"; then + MTARGET="${MTARGET} libH5PartF.a" + TTARGET="${TTARGET} H5testF" + TTARGET="${TTARGET} H5BlockTestAttributesF" + fi +fi + +AC_MSG_CHECKING([wheter tools are enabled]) +if test "X$USE_TOOLS" = "Xyes"; then + AC_MSG_RESULT([yes]) + BUILD_TOOLS="h5pAttrib h5pToGNUplot # homdynToH5p" +else + AC_MSG_RESULT([no]) +fi + +############################################################################### +######################### PATH CHECKING & SETTING ############################# +############################################################################### + +AC_MSG_CHECKING([for HDF5 root ]) +AC_MSG_RESULT([]) +if test -n "${HDF5ROOT}"; then + P=${HDF5ROOT} +elif test -n "${HDF5HOME}" ; then + P=${HDF5HOME} +elif test -n "${HDF5PATH}" ; then + P=${HDF5PATH} +else + P='' + P="$P /usr" + P="$P /usr/local" + P="$P /usr/local/hdf5" + P="$P /usr/local/packages/hdf5" + P="$P /apps/hdf5" + + if test "X$USE_PARALLEL" = "Xyes"; then + P="$P /usr/local/phdf5" + P="$P /usr/local/hdf5/hdf5_par" + if test "X$USE_64" = "Xyes"; then + P="$P /usr/common/usg/hdf5/64/default/parallel" + else + P="$P /usr/common/usg/hdf5/32/default/parallel" + fi + else + P="$P /usr/local/hdf5/hdf5_serial" + if test "X$USE_64" = "Xyes"; then + P="$P /usr/common/usg/hdf5/64/default/serial" + else + P="$P /usr/common/usg/hdf5/32/default/serial" + fi + fi +fi +PATH_Search HDF5ROOT "$P" include/hdf5.h +if test -z "$HDF5ROOT"; then + AC_MSG_ERROR([Cannot determine HDF5 root!!!]) + exit 1 +fi + +AC_MSG_CHECKING([if we need to link to libsz ]) +if test -n "$HDF5ROOT"; then + if test -f $HDF5ROOT/lib/libsz.a; then + AC_MSG_RESULT([yes]) + SZLIB="-L$HDF5ROOT/lib/ -lsz" + else + AC_MSG_RESULT([no]) + SZLIB="" + fi +fi + +AC_MSG_CHECKING([for static zlib root ]) +echo +PATH_Search ZLIBROOT '/apps/zlib' lib/libz.a +if test -n "$ZLIBROOT"; then + LDFLAGS="$LDFLAGS -L$ZLIBROOT/lib" +fi + + +############################################################################### +#################### MISC SETTINGS - path, flags, etc ######################### +############################################################################### + +H5P_LIB_LOC=`pwd`/src + +############################################################################### +################# A SIMPLE WORK AROUND TO USE ENV. VARS ####################### +############################################################################### + +#if there was an external input for the variable... +if test -n "$SAVE_CC"; then +CC=$SAVE_CC +fi + +if test -n "$SAVE_CXX"; then +CXX=$SAVE_CXX +fi + +if test -n "$SAVE_FC"; then +FC=$SAVE_FC +fi + +if test -n "$SAVE_MPICC"; then +MPICC=$SAVE_MPICC +fi + +if test -n "$SAVE_MPICXX"; then +MPICXX=$SAVE_MPICXX +fi + +if test -n "$SAVE_MPIFC"; then +MPIFC=$SAVE_MPIFC +fi + +if test -n "$SAVE_MPILIB"; then +MPILIB=$SAVE_MPILIB +fi + +if test -n "$SAVE_MPIINC"; then +MPIINC=$SAVE_MPIINC +fi + +if test -n "$SAVE_CFLAGS"; then +CFLAGS="$SAVE_CFLAGS ${CFLAGS}" +fi + +if test -n "$SAVE_FFLAGS"; then +FFLAGS=$SAVE_FFLAGS +fi + +if test -n "$SAVE_MPIROOT"; then +MPIROOT=$SAVE_MPIROOT +fi + +if test -n "$SAVE_HDF5ROOT"; then +HDF5ROOT=$SAVE_HDF5ROOT +fi + +if test -n "$SAVE_LDFLAGS"; then +LDFLAGS=$SAVE_LDFLAGS +fi + +if test -n "$MPICXX"; then +TOOLS_CXX=$MPICXX +TOOLS_H5PART_LIB="-lpH5Part" +TOOLS_HDFLIB="-L$HDF5ROOT/lib -lhdf5" +else +TOOLS_CXX=$CXX +TOOLS_H5PART_LIB="-lH5Part" +TOOLS_HDFLIB="-L$HDF5ROOT/lib -lhdf5" +fi + +############################################################################### +############## EXPORTING VARIABLES & CREATING OUTPUT FILES #################### +############################################################################### +# AC_SUBST (variable, [value]) +# Create an output variable from a shell variable. +# Make AC_OUTPUT substitute the variable variable into output files (typically one or more `Makefile's). +# This means that AC_OUTPUT will replace instances of `@variable@' in input files with the value that +# the shell variable variable has when AC_OUTPUT is called. +# This value of variable should not contain literal newlines. +# If value is given, in addition assign it to variable. +AC_SUBST(MPIROOT) +AC_SUBST(HDF5ROOT) +AC_SUBST(MPIINC) +AC_SUBST(MPILIB) +AC_SUBST(MPICC) +AC_SUBST(MPICXX) +AC_SUBST(MPIFC) +AC_SUBST(MTARGET) +AC_SUBST(TTARGET) +AC_SUBST(SZLIB) +AC_SUBST(CFLAGS) +AC_SUBST(FFLAGS) +AC_SUBST(STDCXX) +AC_SUBST(H5P_LIB_LOC) +AC_SUBST(UNDERSCORE_H) +AC_SUBST(BUILD_TOOLS) +AC_SUBST(LDFLAGS) +AC_SUBST(TOOLS_CXX) +AC_SUBST(TOOLS_H5PART_LIB) +AC_SUBST(TOOLS_HDFLIB) + +# Make AC_OUTPUT create each `file' by copying an input file (by default `file.in'), +# substituting the output variable values. +AC_CONFIG_FILES([ +Makefile +doc/Makefile +src/Makefile +test/Makefile +tools/Makefile +]) + +AC_OUTPUT + +############################################################################### +########################## PRINTING SUMMARY ################################### +############################################################################### +echo +echo +echo "Summary for `(hostname || uname -n) 2>/dev/null | sed 1q`:" +echo +echo "Host OS: $host_os" +echo "Host CPU: $host_cpu" +echo "Host vendor: $host_vendor" +echo "Build libraries: $MTARGET" +echo "Build test programs: $TTARGET" +echo "Build tools: $BUILD_TOOLS" +echo "CC = $CC" +echo "CXX = $CXX" +echo "FC = $FC" +echo "MPICC = $MPICC" +echo "MPICXX = $MPICXX" +echo "MPIFC = $MPIFC" +echo "CFLAGS = $CFLAGS" +echo "FFLAGS = $FFLAGS" +echo "MPILIB = $MPILIB" +echo "MPIINC = $MPIINC" +echo "MPIROOT = $MPIROOT" +echo "HDF5ROOT = $HDF5ROOT" +echo "LDFLAGS = $LDFLAGS" +echo diff --git a/trunk/depcomp b/trunk/depcomp new file mode 100755 index 0000000..ffcd540 --- /dev/null +++ b/trunk/depcomp @@ -0,0 +1,529 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2005-02-09.22 + +# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. + +# 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, 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. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by `PROGRAMS ARGS'. + object Object file output by `PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputing dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. + "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> $depfile + echo >> $depfile + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> $depfile + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts `$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` + tmpdepfile="$stripped.u" + if test "$libtool" = yes; then + "$@" -Wc,-M + else + "$@" -M + fi + stat=$? + + if test -f "$tmpdepfile"; then : + else + stripped=`echo "$stripped" | sed 's,^.*/,,'` + tmpdepfile="$stripped.u" + fi + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + + if test -f "$tmpdepfile"; then + outname="$stripped.o" + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" + sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | + sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + # With Tru64 cc, shared objects can also be used to make a + # static library. This mecanism is used in libtool 1.4 series to + # handle both shared and static libraries in a single compilation. + # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. + # + # With libtool 1.5 this exception was removed, and libtool now + # generates 2 separate objects for the 2 libraries. These two + # compilations output dependencies in in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 + tmpdepfile2=$dir$base.o.d # libtool 1.5 + tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 + tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.o.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + tmpdepfile4=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no + for arg in "$@"; do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix="`echo $object | sed 's/^.*\././'`" + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + "$@" || exit $? + IFS=" " + for arg + do + case "$arg" in + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/trunk/doc/Doxyfile b/trunk/doc/Doxyfile new file mode 100644 index 0000000..554de61 --- /dev/null +++ b/trunk/doc/Doxyfile @@ -0,0 +1,234 @@ +# Doxyfile 1.4.5 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = H5Part +PROJECT_NUMBER = 1.3.3 +OUTPUT_DIRECTORY = ./ReferencePages +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = ../src +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +BUILTIN_STL_SUPPORT = NO +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = NO +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = NO +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = YES +HIDE_UNDOC_CLASSES = YES +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = NO +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = NO +SHOW_DIRECTORIES = YES +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT += ../src/H5Part.c +INPUT += ../src/H5Block.c +FILE_PATTERNS = +RECURSIVE = YES +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = NO +REFERENCES_RELATION = NO +USE_HTAGS = NO +VERBATIM_HEADERS = NO +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = NO +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = . +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = doxyfooter +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = NO +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = no +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = NO +USE_PDFLATEX = NO +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = YES +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = YES +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = NO +INCLUDED_BY_GRAPH = NO +CALL_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = /Applications/Graphviz.app/Contents/MacOS +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 1000 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff --git a/trunk/doc/H5X_File_Format.txt b/trunk/doc/H5X_File_Format.txt new file mode 100644 index 0000000..dc0d0f3 --- /dev/null +++ b/trunk/doc/H5X_File_Format.txt @@ -0,0 +1,170 @@ +Proposal for a more general file format used by H5Part/H5Block + + Authors: Achim Gsell + Status: Draft + +1. Introduction + +H5X is the file format used by H5Part and H5Block. H5X is designed on +top of HDF5: A H5X file is a very special HDF5 file. + + +--------------------+ + | Application | + +--------------------+ + | H5Part/H5Block API | + +--------------------+ + | H5X API | + +--------------------+ + | HDF5 API | + +--------------------+ + | Filesystem of OS | + +--------------------+ + + +2. H5X file format specification + +2.1 The root group + +2.1.1 File attributes + +Attributes of the HDF5 root group are called "file attributes". There +are no restrictions on file attribute names. Names with "__" as prefix and +postfix are intended for internal use. Supported values for file attributes +are scalars and arrays of 64bit integer and 64bit floating point number as +well as string values. Arrays of strings are not supported. + +2.1.1.1 Predefined file attributes + +__stepname__ (optional) + See below. + +__stepnumwidth__ (optional) + See below. + +2.1.2 Members of the root group + +Members of the root group are special formated HDF5 groups called +"step groups". The name of a step group is "#". +Whereby is either defined by the optional file attribute +__stepname__ or set to "Step" by default. is an +unsigned integer less than 2^63. + +/ ++- Step#0 ++- Step#1 +... ++- Step#n ++- StepProperties [NEW] ++- Mesh [NEW] + +The optional file attribute __stepnumwidth__ defines the minimum width +of in the name of the step group. The number is padded with +'0'. The minimum width defaults to zero, so that no paddings occurs. +Example: With __stepnumwidth__ := 5 the name of the step group with +number 42 is "Step#00042", with __stepnumwidth__ := 0 the name is +"Step#42". + +Step groups may be unsorted in the HDF5 file und needn't be number +consecutively. + +2.1.3 Other members of the root group + +Other sub-groups of the root group are allowed, but the group names are restricted +to names not matching "Step#.*". + +2.2 Format of a step group + +2.2.1 Step attributes + +Step attributes are HDF5 attributes asigned to a step group. There +are no restrictions on step attribute names. As with file attributes names +enclosed in "__" are intended for internal use. Supported values are the same +as for file attributes: + * 64bit integer value + * arrays of 64bit integer values + * 64bit floating point number + * array of 64bit floating point number + * strings +Note that array of strings are not supported! + +2.2.2 Predefined step attributes + +No predefined step attributes exists. + + +2.2.3 Members of a step group + +Members of a step group are HDF5 datasets and optional one HDF5 group +with the name "Block". HDF5 datasets in a step group are called "step +datasets". The optional block group is called "block data". + +Mesh?! + +2.2.4 Step datasets + +Step datasets are arrays of rank 1. The dataset size must be the same +for all datasets inside a step. The size of the dataset may vary +from step to step. Array values are 64bit integer or 64bit floating +point numbers. No limitations (other than given by HDF5) are given on +step dataset names. + + +2.2.5 Block Data + +The block data group is a container for an arbitrary number of field +data. A field is a data structure to store arrays of rank m with +n-dimensional vector values. Fields are represented within HDF5 +groups. The HDF5 group name is the unique identifier for a field in +the current step. + +2.2.5.1 m-rank fields with n-dimensional-vector values + +Values are stored per dimension in separate datasets. Thus we have n +datasets for a field with n-dimensional vector values. Each dataset +corresponse to one dimension. The datasets are numbered from '0' to +'n-1'. Arrays are stored in column major order (Fortran indexing +scheme). + +/ # HDF5 root group +... ++- Step# # HDF5 group + | + +- Block # HDF5 group + | + +- # HDF5 group + | + +- 0 # HDF5 dataset, first dim of vector + +- 1 # HDF5 dataset, second dim of vector + ... + +- n-1 # HDF5 dataset, last dim of vector +... + +2.2.5.2 m-rank fields with scalar values + +Fields with scalar values are stored as special case of fields with +n-dimensional vector values with n := 1. + +/ # HDF5 root group +... ++- Step# # HDF5 group + | + +- Block # HDF5 group + | + +- # HDF5 group + | + +- 0 # HDF5 dataset, scalar value +... + + +2.3 Step properties [NEW] + +Why? Much faster than step attributes if you need to access consecutive values + +Group of root group with name "StepProperties" + +Members are datasets + +Supported values are the same as for step attributes + +Mapping of value to step via object index of step group + diff --git a/trunk/doc/Makefile.am b/trunk/doc/Makefile.am new file mode 100644 index 0000000..219ad4c --- /dev/null +++ b/trunk/doc/Makefile.am @@ -0,0 +1,2 @@ +EXTRA_DIST = \ + Doxyfile doxyfooter diff --git a/trunk/doc/doxyfooter b/trunk/doc/doxyfooter new file mode 100644 index 0000000..e04310f --- /dev/null +++ b/trunk/doc/doxyfooter @@ -0,0 +1,2 @@ + + diff --git a/trunk/install-sh b/trunk/install-sh new file mode 100755 index 0000000..1a83534 --- /dev/null +++ b/trunk/install-sh @@ -0,0 +1,323 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2005-02-02.21 + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. It can only install one file at a time, a restriction +# shared with many OS's install programs. + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +chmodcmd="$chmodprog 0755" +chowncmd= +chgrpcmd= +stripcmd= +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src= +dst= +dir_arg= +dstarg= +no_target_directory= + +usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: +-c (ignored) +-d create directories instead of installing files. +-g GROUP $chgrpprog installed files to GROUP. +-m MODE $chmodprog installed files to MODE. +-o USER $chownprog installed files to USER. +-s $stripprog installed files. +-t DIRECTORY install into DIRECTORY. +-T report an error if DSTFILE is a directory. +--help display this help and exit. +--version display version info and exit. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG +" + +while test -n "$1"; do + case $1 in + -c) shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + --help) echo "$usage"; exit $?;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -s) stripcmd=$stripprog + shift + continue;; + + -t) dstarg=$2 + shift + shift + continue;; + + -T) no_target_directory=true + shift + continue;; + + --version) echo "$0 $scriptversion"; exit $?;; + + *) # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + test -n "$dir_arg$dstarg" && break + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dstarg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dstarg" + shift # fnord + fi + shift # arg + dstarg=$arg + done + break;; + esac +done + +if test -z "$1"; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src ;; + esac + + if test -n "$dir_arg"; then + dst=$src + src= + + if test -d "$dst"; then + mkdircmd=: + chmodcmd= + else + mkdircmd=$mkdirprog + fi + else + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dstarg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + + dst=$dstarg + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst ;; + esac + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dstarg: Is a directory" >&2 + exit 1 + fi + dst=$dst/`basename "$src"` + fi + fi + + # This sed command emulates the dirname command. + dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` + + # Make sure that the destination directory exists. + + # Skip lots of stat calls in the usual case. + if test ! -d "$dstdir"; then + defaultIFS=' + ' + IFS="${IFS-$defaultIFS}" + + oIFS=$IFS + # Some sh's can't handle IFS=/ for some reason. + IFS='%' + set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` + shift + IFS=$oIFS + + pathcomp= + + while test $# -ne 0 ; do + pathcomp=$pathcomp$1 + shift + if test ! -d "$pathcomp"; then + $mkdirprog "$pathcomp" + # mkdir can fail with a `File exist' error in case several + # install-sh are creating the directory concurrently. This + # is OK. + test -d "$pathcomp" || exit + fi + pathcomp=$pathcomp/ + done + fi + + if test -n "$dir_arg"; then + $doit $mkdircmd "$dst" \ + && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ + && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ + && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ + && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } + + else + dstfile=`basename "$dst"` + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + trap '(exit $?); exit' 1 2 13 15 + + # Copy the file name to the temp name. + $doit $cpprog "$src" "$dsttmp" && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ + && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ + && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ + && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && + + # Now rename the file to the real destination. + { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ + || { + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + if test -f "$dstdir/$dstfile"; then + $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ + || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ + || { + echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 + (exit 1); exit 1 + } + else + : + fi + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" + } + } + fi || { (exit 1); exit 1; } +done + +# The final little trick to "correctly" pass the exit status to the exit trap. +{ + (exit 0); exit 0 +} + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/trunk/license.txt b/trunk/license.txt new file mode 100644 index 0000000..d89303f --- /dev/null +++ b/trunk/license.txt @@ -0,0 +1,17 @@ +*** License agreement *** + +H5Part Copyright (c) 2006, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from the U.S. Dept. of Energy) and the Paul Scherrer Institut (Switzerland). All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +(1) Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +(2) Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +(3) Neither the name of the University of California, Lawrence Berkeley National Laboratory, U.S. Dept. of Energy, Paul Scherrer Institut (Switzerland) nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +You are under no obligation whatsoever to provide any bug fixes, patches, or upgrades to the features, functionality or performance of the source code ("Enhancements") to anyone; however, if you choose to make your Enhancements available either publicly, or directly to Lawrence Berkeley National Laboratory, without imposing a separate written license agreement for such Enhancements, then you hereby grant the following license: a non-exclusive, royalty-free perpetual license to install, use, modify, prepare derivative works, incorporate into other computer software, distribute, and sublicense such enhancements or derivative works thereof, in binary and source code form. + +***** diff --git a/trunk/missing b/trunk/missing new file mode 100755 index 0000000..09edd88 --- /dev/null +++ b/trunk/missing @@ -0,0 +1,357 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. + +scriptversion=2005-02-08.22 + +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# Originally by Fran,cois Pinard , 1996. + +# 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, 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. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +msg="missing on your system" + +case "$1" in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + # Exit code 63 means version mismatch. This often happens + # when the user try to use an ancient version of a tool on + # a file that requires a minimum version. In this case we + # we should proceed has if the program had been absent, or + # if --run hadn't been passed. + if test $? = 63; then + run=: + msg="probably too old" + fi + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch] + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + +esac + +# Now exit if we have it, but it failed. Also exit now if we +# don't have it and --version was passed (most likely to detect +# the program). +case "$1" in + lex|yacc) + # Not GNU programs, they don't have --version. + ;; + + tar) + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + exit 1 + fi + ;; + + *) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + # Could not run --version or --help. This is probably someone + # running `$TOOL --version' or `$TOOL --help' to check whether + # $TOOL exists and not knowing $TOOL uses missing. + exit 1 + fi + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case "$1" in + aclocal*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case "$f" in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te) + echo 1>&2 "\ +WARNING: \`$1' is needed, but is $msg. + You might have modified some files without having the + proper tools for further handling them. + You can get \`$1' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` + test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' $msg. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if [ ! -f y.tab.h ]; then + echo >y.tab.h + fi + if [ ! -f y.tab.c ]; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if [ ! -f lex.yy.c ]; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` + fi + if [ -f "$file" ]; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit 1 + fi + ;; + + makeinfo) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + # The file to touch is that specified with -o ... + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + # ... or it is the one specified with @setfilename ... + infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` + # ... or it is derived from the source name (dir/f.texi becomes f.info) + test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info + fi + touch $file + ;; + + tar) + shift + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case "$firstarg" in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case "$firstarg" in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and is $msg. + You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequisites for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/trunk/rules.make b/trunk/rules.make new file mode 100755 index 0000000..1ce27fc --- /dev/null +++ b/trunk/rules.make @@ -0,0 +1,52 @@ +# Makefile Rules (used by both GNUMakefile and Makefile) +# now "all" rule is defined in the main makefile +# all: H5PartTest H5PartTest.o H5Part.o + +vtkhdf.o: vtkhdf.cc + $(CXX) $(CFLAGS) -c vtkhdf.cc + +H5PartTest: H5PartTest.o H5Part.o + $(CXX) -o H5PartTest H5Part.o H5PartTest.o $(LDFLAGS) + +Bench: Bench.c H5Part.o + $(CC) $(CFLAGS) -o Bench Bench.c H5Part.o $(LDFLAGS) + +H5PartTest.o: H5PartTest.cc H5Part.hh + $(CXX) $(CFLAGS) -DREGRESSIONTEST -c H5PartTest.cc + +H5PartTestParallel.o: H5PartTestParallel.cc H5Part.hh + $(CXX) $(CFLAGS) -c H5PartTestParallel.cc + +H5PartTestParallel: H5PartTestParallel.o H5Part.o + $(CXX) -o H5PartTestParallel H5Part.o H5PartTestParallel.o $(LDFLAGS) + +H5PartAndreasTest.o: H5PartAndreasTest.cc H5Part.hh + $(CXX) $(CFLAGS) -c H5PartAndreasTest.cc + +H5PartAndreasTest: H5PartAndreasTest.o H5Part.o + $(CXX) -o H5PartAndreasTest H5Part.o H5PartAndreasTest.o $(LDFLAGS) + +H5Part.o: H5Part.c H5Part.h + $(CC) $(CFLAGS) -c H5Part.c + +H5PartF.o: H5PartF.c Underscore.h H5Part.h + $(CC) $(CFLAGS) -w -c H5PartF.c + +H5testF.o: H5testF.f H5Part.inc + $(F90) $(CFLAGS) -c H5testF.f + +H5testF: H5testF.o H5Part.o H5PartF.o + $(F90) $(CFLAGS) -o H5testF H5testF.o H5PartF.o H5Part.o $(LDFLAGS) -lC + +vtkxml.o: vtkxml.cc + $(CXX) $(CFLAGS) -c vtkxml.cc + +Underscore.h: TestUnderscore.f TestUnderscoreC.c + rm -f TestUnderscore.o TestUnderscoreC.o TestUnderscore + $(CC) -c TestUnderscoreC.c + $(F90) -c TestUnderscore.f + $(F90) -o TestUnderscore TestUnderscore.o TestUnderscoreC.o -lC + ./TestUnderscore >& Underscore.h + +clean: + rm -rf *~ *.o H5PartTest diff --git a/trunk/src/H5Block.c b/trunk/src/H5Block.c new file mode 100644 index 0000000..a18f428 --- /dev/null +++ b/trunk/src/H5Block.c @@ -0,0 +1,1981 @@ +/*! + \defgroup h5block_c_api H5Block C API +*/ + +/*! + \internal + + \defgroup h5block_kernel H5Block Kernel +*/ + +/*! + \internal + + \defgroup h5block_private H5Block Private +*/ + +/*! + \note + Different field sizes are allowed in the same time-step. + + \note + The same layout can be used, if the size of the field matches the + size of the layout. If the size of the layout doesn't match the + size of the field, an error will be indicated. + + \note + In write mode partitions are shrinked to make them non-overlaping. This + process may shrink the partitions more than required. + + \note + In read-mode partitions may not cross boundaries. This means, if the grid + size is (X, Y, Z), all partitions must fit into this grid. + + + \todo + check whether layout is reasonable + + API function names +*/ + + +#include +#include + +#include +#include "H5Part.h" +#include "H5PartErrors.h" +#include "H5PartPrivate.h" + +#include "H5BlockTypes.h" +#include "H5Block.h" +#include "H5BlockPrivate.h" +#include "H5BlockErrors.h" + +#define INIT( f ) { \ + h5part_int64_t herr = _init ( f ); \ + if ( herr < 0 ) return herr; \ +} + +/********************** declarations *****************************************/ + +static h5part_int64_t +_close ( + H5PartFile *f + ); + +/********************** misc *************************************************/ + +/*! + \ingroup h5block_private + + \internal + + Check whether \c f points to a valid file handle. + + \return H5PART_SUCCESS or error code +*/ + +static h5part_int64_t +_file_is_valid ( + const H5PartFile *f /*!< IN: file handle */ + ) { + + if ( f == NULL ) + return H5PART_ERR_BADFD; + if ( f->file == 0 ) + return H5PART_ERR_BADFD; + if ( f->block == NULL ) + return H5PART_ERR_BADFD; + return H5PART_SUCCESS; +} + + +/********************** file open and close **********************************/ + +/*! + \ingroup h5block_private + + \internal + + Initialize H5Block internal structure. + + \return H5PART_SUCCESS or error code +*/ +static h5part_int64_t +_init ( + H5PartFile *f /*!< IN: file handle */ + ) { + h5part_int64_t herr; + struct H5BlockStruct *b; + + herr = _file_is_valid ( f ); + if ( herr == H5PART_SUCCESS ) return H5PART_SUCCESS; + + if ( (f == 0) || (f->file == 0) ) return HANDLE_H5PART_BADFD_ERR; + + /* + hack for non-parallel processing, should be set in H5Part + */ + if ( f->nprocs == 0 ) f->nprocs = 1; + + f->block = (struct H5BlockStruct*) malloc( sizeof (*f->block) ); + if ( f->block == NULL ) { + return HANDLE_H5PART_NOMEM_ERR; + } + b = f->block; + memset ( b, 0, sizeof (*b) ); + b->user_layout = (struct H5BlockPartition*) malloc ( + f->nprocs * sizeof (b->user_layout[0]) ); + if ( b->user_layout == NULL ) { + return HANDLE_H5PART_NOMEM_ERR; + } + b->write_layout = (struct H5BlockPartition*) malloc ( + f->nprocs * sizeof (b->write_layout[0]) ); + if ( b->write_layout == NULL ) { + return HANDLE_H5PART_NOMEM_ERR; + } + b->timestep = -1; + b->blockgroup = -1; + b->shape = -1; + b->diskshape = -1; + b->memshape = -1; + b->field_group_id = -1; + b->have_layout = 0; + + f->close_block = _close; + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5block_private + + \internal + + De-initialize H5Block internal structure. Open HDF5 objects are + closed and allocated memory freed. + + \return H5PART_SUCCESS or error code +*/ +static h5part_int64_t +_close ( + H5PartFile *f /*!< IN: file handle */ + ) { + + herr_t herr; + struct H5BlockStruct *b = f->block; + + if ( b->blockgroup >= 0 ) { + herr = H5Gclose ( b->blockgroup ); + if ( herr < 0 ) return HANDLE_H5G_CLOSE_ERR; + b->blockgroup = -1; + } + if ( b->shape >= 0 ) { + herr = H5Sclose ( b->shape ); + if ( herr < 0 ) return HANDLE_H5S_CLOSE_ERR; + b->shape = -1; + } + if ( b->diskshape >= 0 ) { + herr = H5Sclose ( b->diskshape ); + if ( herr < 0 ) return HANDLE_H5S_CLOSE_ERR; + b->diskshape = -1; + } + if ( b->memshape >= 0 ) { + herr = H5Sclose ( b->memshape ); + if ( herr < 0 ) return HANDLE_H5S_CLOSE_ERR; + b->memshape = -1; + } + free ( f->block ); + f->block = NULL; + f->close_block = NULL; + + return H5PART_SUCCESS; +} + +/********************** defining the layout **********************************/ + +/*! + \note + A partition must not be part of another partition. + + A partition must not divide another partition into two pieces. + + After handling the ghost zones, the partition must not be empty + + We must track the overall size somewhere. This is a good place to do it. (?) +*/ + +/*! + \ingroup h5block_private + + \internal + + Normalize partition. + + \e means that the start coordinates are less or equal the + end coordinates. +*/ +static void +_normalize_partition ( + struct H5BlockPartition *p /*!< IN/OUT: partition */ + ) { + h5part_int64_t x; + + if ( p->i_start > p->i_end ) { + x = p->i_start; + p->i_start = p->i_end; + p->i_end = x; + } + if ( p->j_start > p->j_end ) { + x = p->j_start; + p->j_start = p->j_end; + p->j_end = x; + } + if ( p->k_start > p->k_end ) { + x = p->k_start; + p->k_start = p->k_end; + p->k_end = x; + } +} + +/*! + \ingroup h5block_private + + \internal + + Gather layout to all processors + + \return H5PART_SUCCESS or error code +*/ +#ifdef PARALLEL_IO +static h5part_int64_t +_allgather ( + const H5PartFile *f /*!< IN: file handle */ + ) { + struct H5BlockPartition *partition = &f->block->user_layout[f->myproc]; + struct H5BlockPartition *layout = f->block->user_layout; + + MPI_Datatype partition_m; + size_t n = sizeof (struct H5BlockPartition) / sizeof (h5part_int64_t); + + MPI_Type_contiguous ( n, MPI_LONG_LONG, &partition_m ); + MPI_Type_commit ( &partition_m ); + + MPI_Allgather ( partition, 1, partition_m, layout, 1, partition_m, + f->comm ); + + return H5PART_SUCCESS; +} +#else +static h5part_int64_t +_allgather ( + const H5PartFile *f /*!< IN: file handle */ + ) { + + return H5PART_SUCCESS; +} +#endif + +/*! + \ingroup h5block_private + + \internal + + Get dimension sizes of block. These informations are stored inside the + block structure. +*/ +static void +_get_dimension_sizes ( + H5PartFile *f /*!< IN: file handle */ + ) { + int proc; + struct H5BlockStruct *b = f->block; + struct H5BlockPartition *partition = b->user_layout; + + b->i_max = 0; + b->j_max = 0; + b->k_max = 0; + + for ( proc = 0; proc < f->nprocs; proc++, partition++ ) { + if ( partition->i_end > b->i_max ) b->i_max = partition->i_end; + if ( partition->j_end > b->j_max ) b->j_max = partition->j_end; + if ( partition->k_end > b->k_max ) b->k_max = partition->k_end; + } +} + +#define _NO_GHOSTZONE(p,q) ( (p->i_end < q->i_start) \ + || (p->j_end < q->j_start) \ + || (p->k_end < q->k_start) ) + + +/*! + \ingroup h5block_private + + \internal + + Check whether two partitions have a common ghost-zone. + + \return value != \c 0 if yes otherwise \c 0 +*/ +static int +_have_ghostzone ( + const struct H5BlockPartition *p, /*!< IN: partition \c p */ + const struct H5BlockPartition *q /*!< IN: partition \c q */ + ) { + return ( ! ( _NO_GHOSTZONE ( p, q ) || _NO_GHOSTZONE ( q, p ) ) ); +} + +/*! + \ingroup h5block_private + + \internal + + Calculate volume of partition. + + \return volume +*/ +static h5part_int64_t +_volume_of_partition ( + const struct H5BlockPartition *p /*!< IN: partition */ + ) { + return (p->i_end - p->i_start) + * (p->j_end - p->j_start) + * (p->k_end - p->k_start); + +} + +#define MIN( x, y ) ( (x) <= (y) ? (x) : (y) ) +#define MAX( x, y ) ( (x) >= (y) ? (x) : (y) ) + +/*! + \ingroup h5block_private + + \internal + + Calc volume of ghost-zone. + + \return volume +*/ +static h5part_int64_t +_volume_of_ghostzone ( + const struct H5BlockPartition *p, /*!< IN: ptr to first partition */ + const struct H5BlockPartition *q /*!< IN: ptr to second partition */ + ) { + + h5part_int64_t dx = MIN ( p->i_end, q->i_end ) + - MAX ( p->i_start, q->i_start ) + 1; + h5part_int64_t dy = MIN ( p->j_end, q->j_end ) + - MAX ( p->j_start, q->j_start ) + 1; + h5part_int64_t dz = MIN ( p->k_end, q->k_end ) + - MAX ( p->k_start, q->k_start ) + 1; + + return dx * dy * dz; +} + +/*! + \ingroup h5block_private + + \internal + + Dissolve ghost-zone by moving the X coordinates. Nothing will be changed + if \c { p->i_start <= q->i_end <= p->i_end }. In this case \c -1 will be + returned. + + \return H5PART_SUCCESS or -1 +*/ +static h5part_int64_t +_dissolve_X_ghostzone ( + struct H5BlockPartition *p, /*!< IN/OUT: ptr to first partition */ + struct H5BlockPartition *q /*!< IN/OUT: ptr to second partition */ + ) { + + if ( p->i_start > q->i_start ) + return _dissolve_X_ghostzone( q, p ); + + if ( q->i_end <= p->i_end ) /* no dissolving */ + return -1; + + p->i_end = ( p->i_end + q->i_start ) >> 1; + q->i_start = p->i_end + 1; + return 0; +} + +/*! + \ingroup h5block_private + + \internal + + Dissolve ghost-zone by moving the Y coordinates. Nothing will be changed + if \c { p->j_start <= q->j_end <= p->j_end }. In this case \c -1 will be + returned. + + \return H5PART_SUCCESS or -1 +*/ +static h5part_int64_t +_dissolve_Y_ghostzone ( + struct H5BlockPartition *p, /*!< IN/OUT: ptr to first partition */ + struct H5BlockPartition *q /*!< IN/OUT: ptr to second partition */ + ) { + + if ( p->j_start > q->j_start ) + return _dissolve_Y_ghostzone( q, p ); + + if ( q->j_end <= p->j_end ) /* no dissolving */ + return -1; + + p->j_end = ( p->j_end + q->j_start ) >> 1; + q->j_start = p->j_end + 1; + return 0; +} + +/*! + \ingroup h5block_private + + \internal + + Dissolve ghost-zone by moving the Z coordinates. Nothing will be changed + if \c { p->k_start <= q->k_end <= p->k_end }. In this case \c -1 will be + returned. + + \return H5PART_SUCCESS or -1 +*/ +static h5part_int64_t +_dissolve_Z_ghostzone ( + struct H5BlockPartition *p, /*!< IN/OUT: ptr to first partition */ + struct H5BlockPartition *q /*!< IN/OUT: ptr to second partition */ + ) { + + if ( p->k_start > q->k_start ) + return _dissolve_Z_ghostzone( q, p ); + + if ( q->k_end <= p->k_end ) /* no dissolving */ + return -1; + + p->k_end = ( p->k_end + q->k_start ) >> 1; + q->k_start = p->k_end + 1; + return 0; +} + +/*! + \ingroup h5block_private + + \internal + + Dissolve ghost-zone for partitions \p and \q. + + Dissolving is done by moving either the X, Y or Z plane. We never move + more than one plane per partition. Thus we always have three possibilities + to dissolve the ghost-zone. The "best" is the one with the largest + remaining volume of the partitions. + + \return H5PART_SUCCESS or error code. +*/ +static h5part_int64_t +_dissolve_ghostzone ( + struct H5BlockPartition *p, /*!< IN/OUT: ptr to first partition */ + struct H5BlockPartition *q /*!< IN/OUT: ptr to second partition */ + ) { + + struct H5BlockPartition p_; + struct H5BlockPartition q_; + struct H5BlockPartition p_best; + struct H5BlockPartition q_best; + h5part_int64_t vol; + h5part_int64_t max_vol = 0; + + p_ = *p; + q_ = *q; + if ( _dissolve_X_ghostzone ( &p_, &q_ ) == 0 ) { + vol = _volume_of_partition ( &p_ ) + + _volume_of_partition ( &q_ ); + if ( vol > max_vol ) { + max_vol = vol; + p_best = p_; + q_best = q_; + } + } + + p_ = *p; + q_ = *q; + if ( _dissolve_Y_ghostzone ( &p_, &q_ ) == 0 ) { + vol = _volume_of_partition ( &p_ ) + + _volume_of_partition ( &q_ ); + if ( vol > max_vol ) { + max_vol = vol; + p_best = p_; + q_best = q_; + } + } + p_ = *p; + q_ = *q; + + if ( _dissolve_Z_ghostzone ( &p_, &q_ ) == 0 ) { + vol = _volume_of_partition ( &p_ ) + + _volume_of_partition ( &q_ ); + if ( vol > max_vol ) { + max_vol = vol; + p_best = p_; + q_best = q_; + } + } + if ( max_vol <= 0 ) { + return H5PART_ERR_LAYOUT; + } + *p = p_best; + *q = q_best; + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5block_private + + \internal + + Dissolve all ghost-zones. + + Ghost-zone are dissolved in the order of their magnitude, largest first. + + \note + Dissolving ghost-zones automaticaly is not trivial! The implemented + algorithmn garanties, that there are no ghost-zones left and that we + have the same result on all processors. + But there may be zones which are not assigned to a partition any more. + May be we should check this and return an error in this case. Then + the user have to decide to continue or to abort. + + \b {Error Codes} + \b H5PART_NOMEM_ERR + + \return H5PART_SUCCESS or error code. +*/ +static h5part_int64_t +_dissolve_ghostzones ( + H5PartFile *f /*!< IN: file handle */ + ) { + + struct H5BlockStruct *b = f->block; + struct H5BlockPartition *p; + struct H5BlockPartition *q; + int proc_p, proc_q; + + struct list { + struct list *prev; + struct list *next; + struct H5BlockPartition *p; + struct H5BlockPartition *q; + h5part_int64_t vol; + } *p_begin, *p_el, *p_max, *p_end, *p_save; + + memcpy ( b->write_layout, b->user_layout, + f->nprocs * sizeof (*f->block->user_layout) ); + + p_begin = p_max = p_end = (struct list*) malloc ( sizeof ( *p_begin ) ); + if ( p_begin == NULL ) return HANDLE_H5PART_NOMEM_ERR; + + memset ( p_begin, 0, sizeof ( *p_begin ) ); + + for ( proc_p = 0, p = b->write_layout; + proc_p < f->nprocs-1; + proc_p++, p++ ) { + for ( proc_q = proc_p+1, q = &b->write_layout[proc_q]; + proc_q < f->nprocs; + proc_q++, q++ ) { + + if ( _have_ghostzone ( p, q ) ) { + p_el = (struct list*) malloc ( sizeof ( *p_el ) ); + if ( p_el == NULL ) + return HANDLE_H5PART_NOMEM_ERR; + + p_el->p = p; + p_el->q = q; + p_el->vol = _volume_of_ghostzone ( p, q ); + p_el->prev = p_end; + p_el->next = NULL; + + if ( p_el->vol > p_max->vol ) + p_max = p_el; + + p_end->next = p_el; + p_end = p_el; + } + } + } + while ( p_begin->next ) { + if ( p_max->next ) p_max->next->prev = p_max->prev; + p_max->prev->next = p_max->next; + + _dissolve_ghostzone ( p_max->p, p_max->q ); + + free ( p_max ); + p_el = p_max = p_begin->next; + + while ( p_el ) { + if ( _have_ghostzone ( p_el->p, p_el->q ) ) { + p_el->vol = _volume_of_ghostzone ( p_el->p, p_el->q ); + if ( p_el->vol > p_max->vol ) + p_max = p_el; + p_el = p_el->next; + } else { + if ( p_el->next ) + p_el->next->prev = p_el->prev; + p_el->prev->next = p_el->next; + p_save = p_el->next; + free ( p_el ); + p_el = p_save; + } + } + + } + free ( p_begin ); + + _H5Part_print_debug ("Layout defined by user:"); + for ( proc_p = 0, p = b->user_layout; + proc_p < f->nprocs; + proc_p++, p++ ) { + _H5Part_print_debug ( + "PROC[%d]: proc[%d]: %lld:%lld, %lld:%lld, %lld:%lld ", + f->myproc, proc_p, + (long long)p->i_start, (long long)p->i_end, + (long long)p->j_start, (long long)p->j_end, + (long long)p->k_start, (long long)p->k_end ); + } + + _H5Part_print_debug ("Layout after dissolving ghost-zones:"); + for ( proc_p = 0, p = b->write_layout; + proc_p < f->nprocs; + proc_p++, p++ ) { + _H5Part_print_debug ( + "PROC[%d]: proc[%d]: %lld:%lld, %lld:%lld, %lld:%lld ", + f->myproc, proc_p, + (long long)p->i_start, (long long)p->i_end, + (long long)p->j_start, (long long)p->j_end, + (long long)p->k_start, (long long)p->k_end ); + } + return H5PART_SUCCESS; +} + +/*! + \ingroup h5block_private +1 + \internal + +*/ +h5part_int64_t +_release_hyperslab ( + H5PartFile *f /*!< IN: file handle */ + ) { + herr_t herr; + + if ( f->block->shape > 0 ) { + herr = H5Sclose ( f->block->shape ); + if ( herr < 0 ) return H5PART_ERR_HDF5; + f->block->shape = -1; + } + if ( f->block->diskshape > 0 ) { + herr = H5Sclose ( f->block->diskshape ); + if ( herr < 0 ) return H5PART_ERR_HDF5; + f->block->diskshape = -1; + } + if ( f->block->memshape > 0 ) { + herr = H5Sclose ( f->block->memshape ); + if ( herr < 0 ) return H5PART_ERR_HDF5; + f->block->memshape = -1; + } + return H5PART_SUCCESS; +} + +/*! + \ingroup h5block_c_api + + Define the field layout given the dense index space at the actual + time step. + + \return \c H5PART_SUCCESS on success
+ \c H5PART_ERR_MPI
+ \c H5PART_ERR_HDF5 +*/ +h5part_int64_t +H5BlockDefine3DFieldLayout( + H5PartFile *f, /*!< IN: File handle */ + const h5part_int64_t i_start, /*!< OUT: start index of \c i */ + const h5part_int64_t i_end, /*!< OUT: end index of \c i */ + const h5part_int64_t j_start, /*!< OUT: start index of \c j */ + const h5part_int64_t j_end, /*!< OUT: end index of \c j */ + const h5part_int64_t k_start, /*!< OUT: start index of \c j */ + const h5part_int64_t k_end /*!< OUT: end index of \c j */ + ) { + + SET_FNAME ( "H5BlockDefine3DFieldLayout" ); + INIT( f ); + + struct H5BlockStruct *b = f->block; + struct H5BlockPartition *p = &b->user_layout[f->myproc]; + p->i_start = i_start; + p->i_end = i_end; + p->j_start = j_start; + p->j_end = j_end; + p->k_start = k_start; + p->k_end = k_end; + + _normalize_partition( p ); + + h5part_int64_t herr = _allgather ( f ); + if ( herr < 0 ) return HANDLE_MPI_ALLGATHER_ERR; + + _get_dimension_sizes ( f ); + + herr = _dissolve_ghostzones ( f ); + if ( herr < 0 ) return HANDLE_H5PART_LAYOUT_ERR; + + herr = _release_hyperslab ( f ); + if ( herr < 0 ) return HANDLE_H5S_CLOSE_ERR; + + b->have_layout = 1; + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5block_c_api + + Return partition of processor \c proc as specified with + \c H5BlockDefine3dLayout(). + + \return \c H5PART_SUCCESS on success.
+ \c H5PART_ERR_INVAL if proc is invalid. +*/ +h5part_int64_t +H5Block3dGetPartitionOfProc ( + H5PartFile *f, /*!< IN: File handle */ + const h5part_int64_t proc, /*!< IN: Processor to get partition from */ + h5part_int64_t *i_start, /*!< OUT: start index of \c i */ + h5part_int64_t *i_end, /*!< OUT: end index of \c i */ + h5part_int64_t *j_start, /*!< OUT: start index of \c j */ + h5part_int64_t *j_end, /*!< OUT: end index of \c j */ + h5part_int64_t *k_start, /*!< OUT: start index of \c k */ + h5part_int64_t *k_end /*!< OUT: end index of \c k */ + ) { + + SET_FNAME ( "H5Block3dGetProcOf" ); + INIT ( f ); + CHECK_LAYOUT ( f ); + + if ( ( proc < 0 ) || ( proc >= f->nprocs ) ) + return H5PART_ERR_INVAL; + + struct H5BlockPartition *p = &f->block->user_layout[(size_t)proc]; + + *i_start = p->i_start; + *i_end = p->i_end; + *j_start = p->j_start; + *j_end = p->j_end; + *k_start = p->k_start; + *k_end = p->k_end; + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5block_c_api + + Return reduced (ghost-zone free) partition of processor \c proc + as specified with \c H5BlockDefine3dLayout(). + + \return \c H5PART_SUCCESS on success.
+ \c H5PART_ERR_INVAL if proc is invalid. +*/ +h5part_int64_t +H5Block3dGetReducedPartitionOfProc ( + H5PartFile *f, /*!< IN: File handle */ + h5part_int64_t proc, /*!< IN: Processor to get partition from */ + h5part_int64_t *i_start, /*!< OUT: start index of \c i */ + h5part_int64_t *i_end, /*!< OUT: end index of \c i */ + h5part_int64_t *j_start, /*!< OUT: start index of \c j */ + h5part_int64_t *j_end, /*!< OUT: end index of \c j */ + h5part_int64_t *k_start, /*!< OUT: start index of \c j */ + h5part_int64_t *k_end /*!< OUT: end index of \c j */ + ) { + + SET_FNAME ( "H5Block3dGetProcOf" ); + INIT ( f ); + CHECK_LAYOUT ( f ); + + if ( ( proc < 0 ) || ( proc >= f->nprocs ) ) + return -1; + + struct H5BlockPartition *p = &f->block->write_layout[(size_t)proc]; + + *i_start = p->i_start; + *i_end = p->i_end; + *j_start = p->j_start; + *j_end = p->j_end; + *k_start = p->k_start; + *k_end = p->k_end; + + return H5PART_SUCCESS; +} + + +/*! + \ingroup h5block_c_api + + Returns the processor computing the reduced (ghostzone-free) + partition given by the coordinates \c i, \c j and \c k. + + \return \c H5PART_SUCCESS or error code +*/ +h5part_int64_t +H5Block3dGetProcOf ( + H5PartFile *f, /*!< IN: File handle */ + h5part_int64_t i, /*!< IN: \c i coordinate */ + h5part_int64_t j, /*!< IN: \c j coordinate */ + h5part_int64_t k /*!< IN: \c k coordinate */ + ) { + + SET_FNAME ( "H5Block3dGetProcOf" ); + INIT ( f ); + CHECK_LAYOUT ( f ); + + struct H5BlockPartition *layout = f->block->write_layout; + int proc; + + for ( proc = 0; proc < f->nprocs; proc++, layout++ ) { + if ( (layout->i_start <= i) && (i <= layout->i_end) && + (layout->j_start <= j) && (j <= layout->j_end) && + (layout->k_start <= k) && (k <= layout->k_end) ) + return (h5part_int64_t)proc; + } + + return -1; +} + +/********************** helper functions for reading and writing *************/ + +/*! + \ingroup h5block_private + + \internal + + \return \c H5PART_SUCCESS or error code +*/ +static h5part_int64_t +_open_block_group ( + const H5PartFile *f /*!< IN: file handle */ + ) { + + struct H5BlockStruct *b = f->block; + + if ( (f->timestep != b->timestep) && (b->blockgroup > 0) ) { + herr_t herr = H5Gclose ( b->blockgroup ); + if ( herr < 0 ) return HANDLE_H5G_CLOSE_ERR; + f->block->blockgroup = -1; + } + + if ( b->blockgroup < 0 ) { + hid_t herr = H5Gopen ( f->timegroup, H5BLOCK_GROUPNAME_BLOCK ); + if ( herr < 0 ) return HANDLE_H5G_OPEN_ERR ( H5BLOCK_GROUPNAME_BLOCK ); + b->blockgroup = herr; + } + b->timestep = f->timestep; + + return H5PART_SUCCESS; +} + +/********************** functions for reading ********************************/ + +/*! + \ingroup h5block_private + + \internal + +*/ +static h5part_int64_t +_have_object ( + const hid_t id, + const char *name + ) { + return (H5Gget_objinfo( id, name, 1, NULL ) >= 0 ? 1 : 0); +} + +/*! + \ingroup h5block_private + + \internal + + \return \c H5PART_SUCCESS or error code +*/ +static h5part_int64_t +_open_field_group ( + H5PartFile *f, /*!< IN: file handle */ + const char *name + ) { + + struct H5BlockStruct *b = f->block; + + h5part_int64_t h5err = _open_block_group ( f ); + if ( h5err < 0 ) return h5err; + + if ( ! _have_object ( b->blockgroup, name ) ) + return HANDLE_H5PART_NOENT_ERR ( name ); + + herr_t herr = H5Gopen ( b->blockgroup, name ); + if ( herr < 0 ) return HANDLE_H5G_OPEN_ERR ( name ); + + b->field_group_id = herr; + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5block_private + + \internal + + \return \c H5PART_SUCCESS or error code +*/ +h5part_int64_t +_close_field_group ( + H5PartFile *f /*!< IN: file handle */ + ) { + + herr_t herr = H5Gclose ( f->block->field_group_id ); + if ( herr < 0 ) return HANDLE_H5G_CLOSE_ERR; + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5block_private + + \internal + + \return \c H5PART_SUCCESS or error code +*/ +static h5part_int64_t +_select_hyperslab_for_reading ( + H5PartFile *f, /*!< IN: file handle */ + hid_t dataset + ) { + + struct H5BlockStruct *b = f->block; + struct H5BlockPartition *p = &b->user_layout[f->myproc]; + int rank; + hsize_t field_dims[3]; + hsize_t start[3] = { + p->k_start, + p->j_start, + p->i_start }; + hsize_t stride[3] = { 1, 1, 1 }; + hsize_t part_dims[3] = { + p->k_end - p->k_start + 1, + p->j_end - p->j_start + 1, + p->i_end - p->i_start + 1 }; + + h5part_int64_t herr = _release_hyperslab ( f ); + if ( herr < 0 ) return HANDLE_H5S_CLOSE_ERR; + + b->diskshape = H5Dget_space ( dataset ); + if ( b->diskshape < 0 ) return HANDLE_H5D_GET_SPACE_ERR; + + rank = H5Sget_simple_extent_dims ( b->diskshape, NULL, NULL ); + if ( rank < 0 ) return HANDLE_H5S_GET_SIMPLE_EXTENT_DIMS_ERR; + if ( rank != 3 ) return HANDLE_H5PART_DATASET_RANK_ERR ( rank, 3 ); + + rank = H5Sget_simple_extent_dims ( b->diskshape, field_dims, NULL ); + if ( rank < 0 ) return HANDLE_H5S_GET_SIMPLE_EXTENT_DIMS_ERR; + + if ( (field_dims[0] < (hsize_t)b->k_max) || + (field_dims[1] < (hsize_t)b->j_max) || + (field_dims[2] < (hsize_t)b->i_max) ) return HANDLE_H5PART_LAYOUT_ERR; + + _H5Part_print_debug ( + "PROC[%d]: \n" + "\tfield_dims: (%lld,%lld,%lld)", + f->myproc, + (long long)field_dims[2], + (long long)field_dims[1], + (long long)field_dims[0] ); + + b->diskshape = H5Screate_simple ( rank, field_dims,field_dims ); + if ( b->diskshape < 0 ) + return HANDLE_H5S_CREATE_SIMPLE_3D_ERR ( field_dims ); + + f->block->memshape = H5Screate_simple ( rank, part_dims, part_dims ); + if ( b->memshape < 0 ) + return HANDLE_H5S_CREATE_SIMPLE_3D_ERR ( part_dims ); + + herr = H5Sselect_hyperslab ( + b->diskshape, + H5S_SELECT_SET, + start, + stride, + part_dims, + NULL ); + if ( herr < 0 ) return HANDLE_H5S_SELECT_HYPERSLAB_ERR; + + _H5Part_print_debug ( + "PROC[%d]: Select hyperslab: \n" + "\tstart: (%lld,%lld,%lld)\n" + "\tstride: (%lld,%lld,%lld)\n" + "\tdims: (%lld,%lld,%lld)", + f->myproc, + (long long)start[2], + (long long)start[1], + (long long)start[0], + (long long)stride[2], + (long long)stride[1], + (long long)stride[0], + (long long)part_dims[2], + (long long)part_dims[1], + (long long)part_dims[0] ); + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5block_private + + \internal + + \return \c H5PART_SUCCESS or error code +*/ +h5part_int64_t +_read_data ( + H5PartFile *f, /*!< IN: file handle */ + const char *name, /*!< IN: name of dataset to read */ + h5part_float64_t *data /*!< OUT: ptr to read buffer */ + ) { + + struct H5BlockStruct *b = f->block; + + hid_t dataset_id = H5Dopen ( b->field_group_id, name ); + if ( dataset_id < 0 ) return HANDLE_H5D_OPEN_ERR ( name ); + + h5part_int64_t herr = _select_hyperslab_for_reading ( f, dataset_id ); + if ( herr < 0 ) return herr; + + herr = H5Dread ( + dataset_id, + H5T_NATIVE_DOUBLE, + f->block->memshape, + f->block->diskshape, + H5P_DEFAULT, + data ); + if ( herr < 0 ) return HANDLE_H5D_READ_ERR ( name, f->timestep ); + + herr = H5Dclose ( dataset_id ); + if ( herr < 0 ) return HANDLE_H5D_CLOSE_ERR; + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5block_c_api + + Read a 3-dimensional field \c name into the buffer starting at \c data from + the current time-step using the defined field layout. Values are real valued + scalars. + + You must use the FORTRAN indexing scheme to access items in \c data. + + \return \c H5PART_SUCCESS or error code +*/ +h5part_int64_t +H5Block3dReadScalarField ( + H5PartFile *f, /*!< IN: file handle */ + const char *name, /*!< IN: name of dataset to read */ + h5part_float64_t *data /*!< OUT: ptr to read buffer */ + ) { + + SET_FNAME ( "H5Block3dReadScalarField" ); + INIT ( f ); + CHECK_TIMEGROUP ( f ); + CHECK_LAYOUT ( f ); + + h5part_int64_t herr = _open_field_group ( f, name ); + if ( herr < 0 ) return herr; + + herr = _read_data ( f, "0", data ); + if ( herr < 0 ) return herr; + + herr = _close_field_group ( f ); + if ( herr < 0 ) return herr; + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5block_c_api + + Read a 3-dimensional field \c name with 3-dimensional vectors as values + into the buffers starting at \c x_data, \c y_data and \c z_data from the + current time-step using the defined field layout. Values are 3-dimensional + vectors with real values. + + You must use the FORTRAN indexing scheme to access items in the buffers. + + \return \c H5PART_SUCCESS or error code +*/ +h5part_int64_t +H5Block3dRead3dVectorField ( + H5PartFile *f, /*!< IN: file handle */ + const char *name, /*!< IN: name of dataset to read */ + h5part_float64_t *x_data, /*!< OUT: ptr to read buffer X axis */ + h5part_float64_t *y_data, /*!< OUT: ptr to read buffer Y axis */ + h5part_float64_t *z_data /*!< OUT: ptr to read buffer Z axis */ + ) { + + SET_FNAME ( "H5Block3dRead3dVectorField" ); + INIT ( f ); + CHECK_TIMEGROUP ( f ); + CHECK_LAYOUT ( f ); + + h5part_int64_t herr = _open_field_group ( f, name ); + if ( herr < 0 ) return herr; + + herr = _read_data ( f, "0", x_data ); + if ( herr < 0 ) return herr; + herr = _read_data ( f, "1", y_data ); + if ( herr < 0 ) return herr; + herr = _read_data ( f, "2", z_data ); + if ( herr < 0 ) return herr; + + herr = _close_field_group ( f ); + if ( herr < 0 ) return herr; + + return H5PART_SUCCESS; +} + +/********************** functions for writing ********************************/ + +/*! + \ingroup h5block_private + + \internal + + \return \c H5PART_SUCCESS or error code +*/ +static h5part_int64_t +_select_hyperslab_for_writing ( + H5PartFile *f /*!< IN: file handle */ + ) { + + /* + re-use existing hyperslab + */ + if ( f->block->shape >= 0 ) return H5PART_SUCCESS; + + herr_t herr; + struct H5BlockStruct *b = f->block; + struct H5BlockPartition *p = &b->write_layout[f->myproc]; + struct H5BlockPartition *q = &b->user_layout[f->myproc]; + + int rank = 3; + + hsize_t field_dims[3] = { + b->k_max+1, + b->j_max+1, + b->i_max+1 + }; + + hsize_t start[3] = { + p->k_start, + p->j_start, + p->i_start + }; + hsize_t stride[3] = { 1, 1, 1 }; + hsize_t part_dims[3] = { + p->k_end - p->k_start + 1, + p->j_end - p->j_start + 1, + p->i_end - p->i_start + 1 + }; + + + b->shape = H5Screate_simple ( rank, field_dims, field_dims ); + if ( b->shape < 0 ) + return HANDLE_H5S_CREATE_SIMPLE_3D_ERR ( field_dims ); + + b->diskshape = H5Screate_simple ( rank, field_dims,field_dims ); + if ( b->diskshape < 0 ) + return HANDLE_H5S_CREATE_SIMPLE_3D_ERR ( field_dims ); + + _H5Part_print_debug ( + "PROC[%d]: Select hyperslab on diskshape: \n" + "\tstart: (%lld,%lld,%lld)\n" + "\tstride: (%lld,%lld,%lld)\n" + "\tdims: (%lld,%lld,%lld)", + f->myproc, + (long long)start[2], + (long long)start[1], + (long long)start[0], + (long long)stride[2], + (long long)stride[1], + (long long)stride[0], + (long long)part_dims[2], + (long long)part_dims[1], + (long long)part_dims[0] ); + + herr = H5Sselect_hyperslab ( + b->diskshape, + H5S_SELECT_SET, + start, + stride, + part_dims, + NULL ); + if ( herr < 0 ) return HANDLE_H5S_SELECT_HYPERSLAB_ERR; + + field_dims[0] = q->k_end - q->k_start + 1; + field_dims[1] = q->j_end - q->j_start + 1; + field_dims[2] = q->i_end - q->i_start + 1; + + f->block->memshape = H5Screate_simple ( rank, field_dims, field_dims ); + if ( b->memshape < 0 ) + return HANDLE_H5S_CREATE_SIMPLE_3D_ERR ( part_dims ); + + start[0] = p->k_start - q->k_start; + start[1] = p->j_start - q->j_start; + start[2] = p->i_start - q->i_start; + + _H5Part_print_debug ( + "PROC[%d]: Select hyperslab on memshape: \n" + "\tstart: (%lld,%lld,%lld)\n" + "\tstride: (%lld,%lld,%lld)\n" + "\tdims: (%lld,%lld,%lld)", + f->myproc, + (long long)start[2], + (long long)start[1], + (long long)start[0], + (long long)stride[2], + (long long)stride[1], + (long long)stride[0], + (long long)part_dims[2], + (long long)part_dims[1], + (long long)part_dims[0] ); + + herr = H5Sselect_hyperslab ( + b->memshape, + H5S_SELECT_SET, + start, + stride, + part_dims, + NULL ); + if ( herr < 0 ) return HANDLE_H5S_SELECT_HYPERSLAB_ERR; + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5block_private + + \internal + + \return \c H5PART_SUCCESS or error code +*/ +static h5part_int64_t +_create_block_group ( + const H5PartFile *f /*!< IN: file handle */ + ) { + + herr_t herr; + struct H5BlockStruct *b = f->block; + + if ( b->blockgroup > 0 ) { + herr = H5Gclose ( b->blockgroup ); + if ( herr < 0 ) return HANDLE_H5G_CLOSE_ERR; + f->block->blockgroup = -1; + } + + herr = H5Gcreate ( f->timegroup, H5BLOCK_GROUPNAME_BLOCK, 0 ); + if ( herr < 0 ) return HANDLE_H5G_CREATE_ERR ( H5BLOCK_GROUPNAME_BLOCK ); + + f->block->blockgroup = herr; + return H5PART_SUCCESS; +} + +/*! + \ingroup h5block_private + + \internal + + \return \c H5PART_SUCCESS or error code +*/ +static h5part_int64_t +_create_field_group ( + H5PartFile *f, /*!< IN: file handle */ + const char *name /*!< IN: name of field group to create */ + ) { + + h5part_int64_t h5err; + struct H5BlockStruct *b = f->block; + + + if ( ! _have_object ( f->timegroup, H5BLOCK_GROUPNAME_BLOCK ) ) { + h5err = _create_block_group ( f ); + } else { + h5err = _open_block_group ( f ); + } + if ( h5err < 0 ) return h5err; + + h5err = _select_hyperslab_for_writing ( f ); + if ( h5err < 0 ) return h5err; + + if ( _have_object ( b->blockgroup, name ) ) + return HANDLE_H5PART_GROUP_EXISTS_ERR ( name ); + + herr_t herr = H5Gcreate ( b->blockgroup, name, 0 ); + if ( herr < 0 ) return HANDLE_H5G_CREATE_ERR ( name ); + b->field_group_id = herr; + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5block_private + + \internal + + \return \c H5PART_SUCCESS or error code +*/ +h5part_int64_t +_write_data ( + H5PartFile *f, /*!< IN: file handle */ + const char *name, /*!< IN: name of dataset to write */ + const h5part_float64_t *data /*!< IN: data to write */ + ) { + + herr_t herr; + hid_t dataset; + struct H5BlockStruct *b = f->block; + + dataset = H5Dcreate ( + b->field_group_id, + name, + H5T_NATIVE_DOUBLE, + b->shape, + H5P_DEFAULT ); + if ( dataset < 0 ) return HANDLE_H5D_CREATE_ERR ( name, f->timestep ); + + herr = H5Dwrite ( + dataset, + H5T_NATIVE_DOUBLE, + b->memshape, + b->diskshape, + H5P_DEFAULT, + data ); + if ( herr < 0 ) return HANDLE_H5D_WRITE_ERR ( name, f->timestep ); + + herr = H5Dclose ( dataset ); + if ( herr < 0 ) return HANDLE_H5D_CLOSE_ERR; + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5block_c_api + + Write a 3-dimensional field \c name from the buffer starting at \c data + to the current time-step using the defined field layout. Values are real + valued scalars. + + You must use the FORTRAN indexing scheme to access items in \c data. + + \return \c H5PART_SUCCESS or error code +*/ +h5part_int64_t +H5Block3dWriteScalarField ( + H5PartFile *f, /*!< IN: file handle */ + const char *name, /*!< IN: name of dataset to write */ + const h5part_float64_t *data /*!< IN: scalar data to write */ + ) { + + SET_FNAME ( "H5Block3dWriteScalarField" ); + INIT ( f ); + CHECK_WRITABLE_MODE ( f ); + CHECK_TIMEGROUP ( f ); + CHECK_LAYOUT ( f ); + + h5part_int64_t herr = _create_field_group ( f, name ); + if ( herr < 0 ) return herr; + + herr = _write_data ( f, "0", data ); + if ( herr < 0 ) return herr; + + herr = _close_field_group ( f ); + if ( herr < 0 ) return herr; + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5block_c_api +*/ +/*! + Write a 3-dimensional field \c name with 3-dimensional vectors as values + from the buffers starting at \c x_data, \c y_data and \c z_data to the + current time-step using the defined field layout. Values are 3-dimensional + vectors with real values. + + You must use the FORTRAN indexing scheme to access items in \c data. + + \return \c H5PART_SUCCESS or error code +*/ +h5part_int64_t +H5Block3dWrite3dVectorField ( + H5PartFile *f, /*!< IN: file handle */ + const char *name, /*!< IN: name of dataset to write */ + const h5part_float64_t *x_data, /*!< IN: X axis data */ + const h5part_float64_t *y_data, /*!< IN: Y axis data */ + const h5part_float64_t *z_data /*!< IN: Z axis data */ + ) { + + SET_FNAME ( "H5Block3dWrite3dVectorField" ); + INIT ( f ); + CHECK_WRITABLE_MODE ( f ); + CHECK_TIMEGROUP ( f ); + CHECK_LAYOUT ( f ); + + h5part_int64_t herr = _create_field_group ( f, name ); + if ( herr < 0 ) return herr; + + herr = _write_data ( f, "0", x_data ); + if ( herr < 0 ) return herr; + herr = _write_data ( f, "1", y_data ); + if ( herr < 0 ) return herr; + herr = _write_data ( f, "2", z_data ); + if ( herr < 0 ) return herr; + + herr = _close_field_group ( f ); + if ( herr < 0 ) return herr; + + return H5PART_SUCCESS; +} + +/********************** query information about available fields *************/ + +/*! + \ingroup h5block_c_api + + Query number of fields in current time step. + + \return \c H5PART_SUCCESS or error code +*/ +h5part_int64_t +H5BlockGetNumFields ( + H5PartFile *f /*!< IN: file handle */ + ) { + + SET_FNAME ( "H5BlockGetNumFields" ); + INIT ( f ); + CHECK_TIMEGROUP( f ); + + if ( ! _have_object ( f->timegroup, H5BLOCK_GROUPNAME_BLOCK ) ) + return 0; + + return _H5Part_get_num_objects ( f->timegroup, H5BLOCK_GROUPNAME_BLOCK, H5G_GROUP ); +} + +/*! + \ingroup h5block_private + + \internal + + \return \c H5PART_SUCCESS or error code +*/ +static h5part_int64_t +_get_field_info ( + H5PartFile *f, /*!< IN: file handle */ + const char *field_name, /*!< IN: field name to get info about */ + h5part_int64_t *grid_rank, /*!< OUT: rank of grid */ + h5part_int64_t *grid_dims, /*!< OUT: dimensions of grid */ + h5part_int64_t *field_dims /*!< OUT: rank of field (1 or 3) */ + ) { + + hsize_t dims[16]; + h5part_int64_t i, j; + + h5part_int64_t herr = _open_block_group ( f ); + if ( herr < 0 ) return herr; + + hid_t group_id = H5Gopen ( f->block->blockgroup, field_name ); + if ( group_id < 0 ) return HANDLE_H5G_OPEN_ERR ( field_name ); + + hid_t dataset_id = H5Dopen ( group_id, "0" ); + if ( dataset_id < 0 ) return HANDLE_H5D_OPEN_ERR ( "0" ); + + hid_t dataspace_id = H5Dget_space ( dataset_id ); + if ( dataspace_id < 0 ) return HANDLE_H5D_GET_SPACE_ERR; + + *grid_rank = H5Sget_simple_extent_dims ( dataspace_id, dims, NULL ); + if ( *grid_rank < 0 ) return HANDLE_H5S_GET_SIMPLE_EXTENT_DIMS_ERR; + + for ( i = 0, j = *grid_rank-1; i < *grid_rank; i++, j-- ) + grid_dims[i] = (h5part_int64_t)dims[j]; + + *field_dims = _H5Part_get_num_objects ( + f->block->blockgroup, + field_name, + H5G_DATASET ); + if ( *field_dims < 0 ) return *field_dims; + + herr = H5Sclose ( dataspace_id ); + if ( herr < 0 ) return HANDLE_H5S_CLOSE_ERR; + + herr = H5Dclose ( dataset_id ); + if ( herr < 0 ) return HANDLE_H5D_CLOSE_ERR; + + herr = H5Gclose ( group_id ); + if ( herr < 0 ) return HANDLE_H5G_CLOSE_ERR; + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5block_c_api + + Get the name, rank and dimensions of the field specified by the + index \c idx. + + This function can be used to retrieve all fields bound to the + current time-step by looping from \c 0 to the number of fields + minus one. The number of fields bound to the current time-step + can be queried by calling the function \c H5BlockGetNumFields(). + + \return \c H5PART_SUCCESS or error code +*/ +h5part_int64_t +H5BlockGetFieldInfo ( + H5PartFile *f, /*!< IN: file handle */ + const h5part_int64_t idx, /*!< IN: index of field */ + char *field_name, /*!< OUT: field name */ + const h5part_int64_t len_field_name, /*!< IN: buffer size */ + h5part_int64_t *grid_rank, /*!< OUT: grid rank */ + h5part_int64_t *grid_dims, /*!< OUT: grid dimensions */ + h5part_int64_t *field_dims /*!< OUT: field rank */ + ) { + + SET_FNAME ( "H5BlockGetFieldInfo" ); + INIT ( f ); + CHECK_TIMEGROUP( f ); + + h5part_int64_t herr = _H5Part_get_object_name ( + f->timegroup, + H5BLOCK_GROUPNAME_BLOCK, + H5G_GROUP, + idx, + field_name, + len_field_name ); + if ( herr < 0 ) return herr; + + return _get_field_info ( + f, field_name, grid_rank, grid_dims, field_dims ); +} + +/*! + \ingroup h5block_c_api + + Get the rank and dimensions of the field specified by its name. + + \return \c H5PART_SUCCESS or error code +*/ +h5part_int64_t +H5BlockGetFieldInfoByName ( + H5PartFile *f, /*!< IN: file handle */ + const char *field_name, /*!< IN: field name */ + h5part_int64_t *grid_rank, /*!< OUT: grid rank */ + h5part_int64_t *grid_dims, /*!< OUT: grid dimensions */ + h5part_int64_t *field_dims /*!< OUT: field rank */ + ) { + + SET_FNAME ( "H5BlockGetFieldInfo" ); + INIT ( f ); + CHECK_TIMEGROUP( f ); + + return _get_field_info ( + f, field_name, grid_rank, grid_dims, field_dims ); +} + +/********************** reading and writing attribute ************************/ + +/*! + \ingroup h5block_private + + \internal + + \return \c H5PART_SUCCESS or error code +*/ +static h5part_int64_t +_write_field_attrib ( + H5PartFile *f, /*!< IN: file handle */ + const char *field_name, /*!< IN: field name */ + const char *attrib_name, /*!< IN: attribute name */ + const hid_t attrib_type, /*!< IN: attribute type */ + const void *attrib_value, /*!< IN: attribute value */ + const h5part_int64_t attrib_nelem /*!< IN: number of elements */ + ) { + + h5part_int64_t herr = _open_field_group ( f, field_name ); + if ( herr < 0 ) return herr; + + _H5Part_write_attrib ( + f->block->field_group_id, + attrib_name, + attrib_type, + attrib_value, + attrib_nelem ); + if ( herr < 0 ) return herr; + + herr = _close_field_group ( f ); + if ( herr < 0 ) return herr; + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5block_c_api + + Write \c attrib_value with type \c attrib_type as attribute \c attrib_name + to field \c field_name. + + \return \c H5PART_SUCCESS or error code +*/ +h5part_int64_t +H5BlockWriteFieldAttrib ( + H5PartFile *f, /*!< IN: file handle */ + const char *field_name, /*!< IN: field name */ + const char *attrib_name, /*!< IN: attribute name */ + const h5part_int64_t attrib_type, /*!< IN: attribute type */ + const void *attrib_value, /*!< IN: attribute value */ + const h5part_int64_t attrib_nelem /*!< IN: number of elements */ + ) { + + SET_FNAME ( "H5BlockWriteFieldAttrib" ); + INIT ( f ); + CHECK_WRITABLE_MODE( f ); + CHECK_TIMEGROUP( f ); + + return _write_field_attrib ( + f, + field_name, + attrib_name, (const hid_t)attrib_type, attrib_value, + (const hid_t)attrib_nelem ); +} + +/*! + \ingroup h5block_c_api + + Write string \c attrib_value as attribute \c attrib_name to field + \c field_name.. + + \return \c H5PART_SUCCESS or error code +*/ +h5part_int64_t +H5BlockWriteFieldAttribString ( + H5PartFile *f, /*!< IN: file handle */ + const char *field_name, /*!< IN: field name */ + const char *attrib_name, /*!< IN: attribute name */ + const char *attrib_value /*!< IN: attribute value */ + ) { + + SET_FNAME ( "H5BlockWriteFieldAttribString" ); + INIT ( f ); + CHECK_WRITABLE_MODE( f ); + CHECK_TIMEGROUP( f ); + + return _write_field_attrib ( + f, + field_name, + attrib_name, H5T_NATIVE_CHAR, attrib_value, + strlen ( attrib_value ) + 1 ); +} + +/*! + \ingroup h5block_c_api + + Query the number of attributes of field \c field_name. + + \return number of attributes or error code +*/ +h5part_int64_t +H5BlockGetNumFieldAttribs ( + H5PartFile *f, /*!< IN: file handle */ + const char *field_name /*block->field_group_id ); + if ( nattribs < 0 ) HANDLE_H5A_GET_NUM_ATTRS_ERR; + + herr = _close_field_group ( f ); + if ( herr < 0 ) return herr; + + return nattribs; +} + + +/*! + \ingroup h5block_c_api + + Query information about a attribute given by index \c attrib_idx and + field name \c field_name. The function returns the name of the attribute, + the type of the attribute and the number of elements of this type. + + \return \c H5PART_SUCCESS or error code +*/ +h5part_int64_t +H5BlockGetFieldAttribInfo ( + H5PartFile *f, /*!< IN: file handle */ + const char *field_name, /*!< IN: field name */ + const h5part_int64_t attrib_idx, /*!< IN: attribute index */ + char *attrib_name, /*!< OUT: attribute name */ + const h5part_int64_t len_of_attrib_name,/*!< IN: buffer size */ + h5part_int64_t *attrib_type, /*!< OUT: attribute type */ + h5part_int64_t *attrib_nelem /*!< OUT: number of elements */ + ) { + + SET_FNAME ( "H5BlockGetFieldAttribInfo" ); + INIT ( f ); + CHECK_TIMEGROUP( f ); + + h5part_int64_t herr = _open_field_group ( f, field_name ); + if ( herr < 0 ) return herr; + + herr = _H5Part_get_attrib_info ( + f->block->field_group_id, + attrib_idx, + attrib_name, + len_of_attrib_name, + attrib_type, + attrib_nelem ); + if ( herr < 0 ) return herr; + + herr = _close_field_group ( f ); + if ( herr < 0 ) return herr; + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5block_private + + \internal + + Read attribute \c attrib_name of field \c field_name. + + \return \c H5PART_SUCCESS or error code +*/ +static h5part_int64_t +_read_field_attrib ( + H5PartFile *f, /*!< IN: file handle */ + const char *field_name, /*!< IN: field name */ + const char *attrib_name, /*!< IN: attribute name */ + void *attrib_value /*!< OUT: value */ + ) { + + struct H5BlockStruct *b = f->block; + + h5part_int64_t herr = _open_field_group ( f, field_name ); + if ( herr < 0 ) return herr; + + herr = _H5Part_read_attrib ( + b->field_group_id, + attrib_name, + attrib_value ); + if ( herr < 0 ) return herr; + + herr = _close_field_group ( f ); + if ( herr < 0 ) return herr; + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5block_c_api + + Read attribute \c attrib_name of field \c field_name. + + \return \c H5PART_SUCCESS or error code +*/ +h5part_int64_t +H5BlockReadFieldAttrib ( + H5PartFile *f, /*!< IN: file handle */ + const char *field_name, /*!< IN: field name */ + const char *attrib_name, /*!< IN: attribute name */ + void *attrib_value /*!< OUT: value */ + ) { + + SET_FNAME ( "H5PartReadFieldAttrib" ); + INIT ( f ); + CHECK_TIMEGROUP( f ); + + return _read_field_attrib ( + f, field_name, attrib_name, attrib_value ); +} + + +#define H5BLOCK_FIELD_ORIGIN_NAME "__Origin__" +#define H5BLOCK_FIELD_SPACING_NAME "__Spacing__" + +/*! + \ingroup h5block_c_api + + Get field origin. + + \return \c H5PART_SUCCESS or error code +*/ +h5part_int64_t +H5Block3dGetFieldOrigin ( + H5PartFile *f, /*!< IN: file handle */ + const char *field_name, /*!< IN: field name */ + h5part_float64_t *x_origin, /*!< OUT: X origin */ + h5part_float64_t *y_origin, /*!< OUT: Y origin */ + h5part_float64_t *z_origin /*!< OUT: Z origin */ + ) { + + SET_FNAME ( "H5BlockSetFieldOrigin" ); + INIT ( f ); + CHECK_TIMEGROUP( f ); + + h5part_float64_t origin[3]; + + h5part_int64_t herr = _read_field_attrib ( + f, + field_name, + H5BLOCK_FIELD_ORIGIN_NAME, + origin ); + + *x_origin = origin[0]; + *y_origin = origin[1]; + *z_origin = origin[2]; + return herr; +} + +/*! + \ingroup h5block_c_api + + Set field origin. + + \return \c H5PART_SUCCESS or error code +*/ +h5part_int64_t +H5Block3dSetFieldOrigin ( + H5PartFile *f, /*!< IN: file handle */ + const char *field_name, /*!< IN: field name */ + const h5part_float64_t x_origin, /*!< IN: X origin */ + const h5part_float64_t y_origin, /*!< IN: Y origin */ + const h5part_float64_t z_origin /*!< IN: Z origin */ + ) { + + SET_FNAME ( "H5BlockSetFieldOrigin" ); + INIT ( f ); + CHECK_WRITABLE_MODE( f ); + CHECK_TIMEGROUP( f ); + + h5part_float64_t origin[3] = { x_origin, y_origin, z_origin }; + + return _write_field_attrib ( + f, + field_name, + H5BLOCK_FIELD_ORIGIN_NAME, + (const hid_t)H5PART_FLOAT64, + origin, + 3 ); +} + +/*! + \ingroup h5block_c_api + + Get field spacing for field \c field_name in the current time step. + + \return \c H5PART_SUCCESS or error code +*/ +h5part_int64_t +H5Block3dGetFieldSpacing ( + H5PartFile *f, /*!< IN: file handle */ + const char *field_name, /*!< IN: field name */ + h5part_float64_t *x_spacing, /*!< OUT: X spacing */ + h5part_float64_t *y_spacing, /*!< OUT: Y spacing */ + h5part_float64_t *z_spacing /*!< OUT: Z spacing */ + ) { + + SET_FNAME ( "H5BlockGetFieldSpacing" ); + INIT ( f ); + CHECK_TIMEGROUP( f ); + + h5part_float64_t spacing[3]; + + h5part_int64_t herr = _read_field_attrib ( + f, + field_name, + H5BLOCK_FIELD_SPACING_NAME, + spacing ); + + *x_spacing = spacing[0]; + *y_spacing = spacing[1]; + *z_spacing = spacing[2]; + return herr; +} + +/*! + \ingroup h5block_c_api + + Set field spacing for field \c field_name in the current time step. + + \return \c H5PART_SUCCESS or error code +*/ +h5part_int64_t +H5Block3dSetFieldSpacing ( + H5PartFile *f, /*!< IN: file handle */ + const char *field_name, /*!< IN: field name */ + const h5part_float64_t x_spacing, /*!< IN: X spacing */ + const h5part_float64_t y_spacing, /*!< IN: Y spacing */ + const h5part_float64_t z_spacing /*!< IN: Z spacing */ + ) { + + SET_FNAME ( "H5BlockSetFieldSpacing" ); + INIT ( f ); + CHECK_WRITABLE_MODE( f ); + CHECK_TIMEGROUP( f ); + + h5part_float64_t spacing[3] = { x_spacing, y_spacing, z_spacing }; + + return _write_field_attrib ( + f, + field_name, + H5BLOCK_FIELD_SPACING_NAME, + (const hid_t)H5PART_FLOAT64, + spacing, + 3 ); +} + +/*! + \ingroup h5block_c_api +*/ +/* + Checks whether the current time-step has field data or not. + + \return \c H5PART_SUCCESS if field data is available otherwise \c + H5PART_ERR_NOENTRY. +*/ +h5part_int64_t +H5BlockHasFieldData ( + H5PartFile *f /*!< IN: file handle */ + ) { + + SET_FNAME ( "H5BlockHasFieldData" ); + INIT ( f ); + CHECK_TIMEGROUP( f ); + + if ( ! _have_object ( f->timegroup, H5BLOCK_GROUPNAME_BLOCK ) ) { + return H5PART_ERR_NOENTRY; + } + return H5PART_SUCCESS; +} diff --git a/trunk/src/H5Block.h b/trunk/src/H5Block.h new file mode 100644 index 0000000..dd540ed --- /dev/null +++ b/trunk/src/H5Block.h @@ -0,0 +1,204 @@ +#ifndef __H5BLOCK_H +#define __H5BLOCK_H + +#ifdef __cplusplus +extern "C" { +#endif + +/*! + Interface for block structured field data + +*/ + +h5part_int64_t +H5BlockDefine3DFieldLayout ( + H5PartFile *f, + const h5part_int64_t i_start, + const h5part_int64_t i_end, + const h5part_int64_t j_start, + const h5part_int64_t j_end, + const h5part_int64_t k_start, + const h5part_int64_t k_end + ); + +h5part_int64_t +H5Block3dGetPartitionOfProc ( + H5PartFile *f, + const h5part_int64_t proc, + h5part_int64_t *i_start, + h5part_int64_t *i_end, + h5part_int64_t *j_start, + h5part_int64_t *j_end, + h5part_int64_t *k_start, + h5part_int64_t *k_end + ); + +h5part_int64_t +H5Block3dGetReducedPartitionOfProc ( + H5PartFile *f, + h5part_int64_t proc, + h5part_int64_t *i_start, + h5part_int64_t *i_end, + h5part_int64_t *j_start, + h5part_int64_t *j_end, + h5part_int64_t *k_start, + h5part_int64_t *k_end + ); + +h5part_int64_t +H5Block3dGetProcOf ( + H5PartFile *f, + h5part_int64_t i, + h5part_int64_t j, + h5part_int64_t k + ); + +h5part_int64_t +H5Block3dWriteScalarField ( + H5PartFile *f, + const char *name, + const h5part_float64_t *data + ); + +h5part_int64_t +H5Block3dReadScalarField ( + H5PartFile *f, + const char *name, + h5part_float64_t *data + ); + +h5part_int64_t +H5BlockGetNumFields ( + H5PartFile *f + ); + +h5part_int64_t +H5BlockGetFieldInfo ( + H5PartFile *f, + const h5part_int64_t idx, + char *name, + const h5part_int64_t len_name, + h5part_int64_t *grid_rank, + h5part_int64_t *grid_dims, + h5part_int64_t *field_dims + ); + +h5part_int64_t +H5BlockGetFieldInfoByName ( + H5PartFile *f, + const char *field_name, + h5part_int64_t *grid_rank, + h5part_int64_t *grid_dims, + h5part_int64_t *field_dims + ); + +h5part_int64_t +H5Block3dGetFieldOrigin ( + H5PartFile *f, + const char *field_name, + h5part_float64_t *x_origin, + h5part_float64_t *y_origin, + h5part_float64_t *z_origin + ); + +h5part_int64_t +H5Block3dSetFieldOrigin ( + H5PartFile *f, + const char *field_name, + const h5part_float64_t x_origin, + const h5part_float64_t y_origin, + const h5part_float64_t z_origin + ); + +h5part_int64_t +H5Block3dGetFieldSpacing ( + H5PartFile *f, + const char *field_name, + h5part_float64_t *x_spacing, + h5part_float64_t *y_spacing, + h5part_float64_t *z_spacing + ); + +h5part_int64_t +H5Block3dSetFieldSpacing ( + H5PartFile *f, + const char *field_name, + const h5part_float64_t x_spacing, + const h5part_float64_t y_spacing, + const h5part_float64_t z_spacing + ); + + + +h5part_int64_t +H5Block3dWrite3dVectorField ( + H5PartFile *f, + const char *name, + const h5part_float64_t *xval, + const h5part_float64_t *yval, + const h5part_float64_t *zval + ); + +h5part_int64_t +H5Block3dRead3dVectorField ( + H5PartFile *f, + const char *name, + h5part_float64_t *xval, + h5part_float64_t *yval, + h5part_float64_t *zval + ); + +h5part_int64_t +H5BlockWriteFieldAttrib ( + H5PartFile *f, + const char *field_name, + const char *attrib_name, + const h5part_int64_t attrib_type, + const void *attrib_value, + const h5part_int64_t attrib_nelem + ); + +h5part_int64_t +H5BlockWriteFieldAttribString ( + H5PartFile *f, + const char *field_name, + const char *attrib_name, + const char *attrib_value + ); + +h5part_int64_t +H5BlockGetNumFieldAttribs ( + H5PartFile *f, + const char *field_name + ); + +h5part_int64_t +H5BlockGetFieldAttribInfo ( + H5PartFile *f, + const char *field_name, + const h5part_int64_t attrib_idx, + char *attrib_name, + const h5part_int64_t len_of_attrib_name, + h5part_int64_t *attrib_type, + h5part_int64_t *attrib_nelem + ); + +h5part_int64_t +H5BlockReadFieldAttrib ( + H5PartFile *f, + const char *field_name, + const char *attrib_name, + void *attrib_value + ); + +h5part_int64_t +H5BlockHasFieldData ( + H5PartFile *f + ); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/trunk/src/H5BlockErrors.h b/trunk/src/H5BlockErrors.h new file mode 100644 index 0000000..c1553d4 --- /dev/null +++ b/trunk/src/H5BlockErrors.h @@ -0,0 +1,51 @@ +#ifndef __H5BLOCKERRORS_H +#define __H5BLOCKERRORS_H + +#define _err_handler H5PartGetErrorHandler() + +#define CHECK_LAYOUT( f ) \ + if ( ! f->block->have_layout ) \ + return (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_LAYOUT, \ + "No layout defined." ) + +#define HANDLE_H5PART_LAYOUT_ERR \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_LAYOUT, \ + "Bad layout." ); + +#define HANDLE_H5PART_NOENT_ERR( name ) \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_NOENT, \ + "Object \"%s\" doesn't exists.", name ); + +#define HANDLE_H5PART_DATASET_RANK_ERR( m, n ) \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_INVAL, \ + "Wrong rank of dataset: Is %d, but should be %d", \ + m, n ); + +#define HANDLE_H5PART_GROUP_EXISTS_ERR( name ) \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_INVAL, \ + "Group \"%s\" already exists", name ) +#define HANDLE_H5S_CREATE_SIMPLE_3D_ERR( dims ) \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot create 3d dataspace with dimension sizes " \ + "\"(%lld,%lld,%lld)\".", \ + (long long)dims[0], (long long)dims[1], (long long)dims[2] ); + +#define HANDLE_H5S_GET_SIMPLE_EXTENT_DIMS_ERR \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot get dimension sizes of dataset" ); + +#endif diff --git a/trunk/src/H5BlockF.c b/trunk/src/H5BlockF.c new file mode 100755 index 0000000..b7c319c --- /dev/null +++ b/trunk/src/H5BlockF.c @@ -0,0 +1,581 @@ +#include "H5Part.h" +#include "H5PartPrivate.h" +#include "H5Block.h" +#include "Underscore.h" + +#if defined(F77_SINGLE_UNDERSCORE) +#define F77NAME(a,b) a +#elif defined(F77_CRAY_UNDERSCORE) +#define F77NAME(a,b) b +#elif defined(F77_NO_UNDERSCORE) +#else +#error Error, no way to determine how to construct fortran bindings +#endif + +#if ! defined(F77_NO_UNDERSCORE) + +#define h5bl_define3dlayout F77NAME ( \ + h5bl_define3dlayout_, \ + H5BL_DEFINE3DLAYOUT ) +#define h5bl_get_partition_of_proc F77NAME ( \ + h5bl_get_partition_of_proc_, \ + H5BL_GET_PARTITION_OF_PROC ) +#define h5bl_get_reduced_partition_of_proc F77NAME ( \ + h5bl_get_reduced_partition_of_proc_,\ + H5BL_GET_REDUCED_PARTITION_OF_PROC ) +#define h5bl_get_proc_of F77NAME ( \ + h5bl_get_proc_of_, \ + H5BL_GET_PROC_OF ) +#define h5bl_3d_read_scalar_field F77NAME ( \ + h5bl_3d_read_scalar_field_, \ + H5BL_3D_READ_SCALAR_FIELD ) +#define h5bl_3d_write_scalar_field F77NAME ( \ + h5bl_3d_write_scalar_field_, \ + H5BL_3D_WRITE_SCALAR_FIELD ) +#define h5bl_3d_read_3dvector_field F77NAME ( \ + h5bl_3d_read_3dvector_field_, \ + H5BL_3D_READ_3DVECTOR_FIELD ) +#define h5bl_3d_write_3dvector_field F77NAME ( \ + h5bl_3d_write_3dvector_field_, \ + H5BL_3D_WRITE_3DVECTOR_FIELD ) +#define h5bl_getnumfields F77NAME ( \ + h5bl_getnumfields_, \ + H5BL_GETNUMFIELDS ) +#define h5bl_getfieldinfo F77NAME ( \ + h5bl_getfieldinfo_, \ + H5BL_GETFIELDINFO ) +#define h5bl_writefieldattrib_r8 F77NAME ( \ + h5bl_writefieldattrib_r8_, \ + H5BL_WRITEFIELDATTRIB_R8 ) +#define h5bl_writefieldattrib_i8 F77NAME ( \ + h5bl_writefieldattrib_i8_, \ + H5BL_WRITEFIELDATTRIB_I8 ) +#define h5bl_writefieldattrib_string F77NAME ( \ + h5bl_writefieldattrib_string_, \ + H5BL_WRITEFIELDATTRIB_STRING ) +#define h5bl_getnfieldattribs F77NAME ( \ + h5bl_getnfieldattribs_, \ + H5BL_GETNFIELDATTRIBS ) +#define h5bl_getfieldattribinfo F77NAME ( \ + h5bl_getfieldattribinfo_, \ + h5bl_getfieldattribinfo ) +#define h5bl_readfieldattrib_i8 F77NAME ( \ + h5bl_readfieldattrib_i8_, \ + H5BL_READFIELDATTRIB_I8 ) +#define h5bl_readfieldattrib_r8 F77NAME ( \ + h5bl_readfieldattrib_r8_, \ + H5BL_READFIELDATTRIB_R8 ) +#define h5bl_readfieldattrib_string F77NAME ( \ + h5bl_readfieldattrib_string_, \ + H5BL_READFIELDATTRIB_STRING ) +#define h5bl_has_fielddata F77NAME ( \ + h5bl_has_fielddata_, \ + H5BL_HAS_FIELDDATA ) +#define h5bl_3d_set_field_spacing F77NAME ( \ + h5bl_3d_set_field_spacing_, \ + H5BL_3D_SET_FIELD_SPACING ) +#define h5bl_3d_get_field_spacing F77NAME ( \ + h5bl_3d_get_field_spacing_, \ + H5BL_3D_GET_FIELD_SPACING ) +#define h5bl_3d_set_field_origin F77NAME ( \ + h5bl_3d_set_field_origin_, \ + H5BL_3D_SET_FIELD_ORIGIN ) +#define h5bl_3d_get_field_origin F77NAME ( \ + h5bl_3d_get_field_origin_, \ + H5BL_3D_GET_FIELD_origin ) +#endif + +h5part_int64_t +h5bl_define3dlayout ( + h5part_int64_t *f, + const h5part_int64_t *i_start, /*!< start index of i */ + const h5part_int64_t *i_end, /*!< end index of i */ + const h5part_int64_t *j_start, /*!< start index of j */ + const h5part_int64_t *j_end, /*!< end index of j */ + const h5part_int64_t *k_start, /*!< start index of k */ + const h5part_int64_t *k_end /*!< end index of k */ + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + return H5BlockDefine3DFieldLayout ( + filehandle, + *i_start-1, *i_end-1, + *j_start-1, *j_end-1, + *k_start-1, *k_end-1 ); +} + +h5part_int64_t +h5bl_get_partition_of_proc ( + h5part_int64_t *f, /*!< file handle */ + const h5part_int64_t *proc, + h5part_int64_t *i_start, /*!< start index of i */ + h5part_int64_t *i_end, /*!< end index of i */ + h5part_int64_t *j_start, /*!< start index of j */ + h5part_int64_t *j_end, /*!< end index of j */ + h5part_int64_t *k_start, /*!< start index of k */ + h5part_int64_t *k_end /*!< end index of k */ + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + h5part_int64_t herr = H5Block3dGetPartitionOfProc ( + filehandle, + *proc, + i_start, i_end, j_start, j_end, k_start, k_end ); + if ( herr < 0 ) return herr; + + (*i_start)++; + (*i_end)++; + (*j_start)++; + (*j_end)++; + (*k_start)++; + (*k_end)++; + + return H5PART_SUCCESS; +} + +h5part_int64_t +h5bl_get_reduced_partition_of_proc ( + h5part_int64_t *f, + const h5part_int64_t *proc, + h5part_int64_t *i_start, + h5part_int64_t *i_end, + h5part_int64_t *j_start, + h5part_int64_t *j_end, + h5part_int64_t *k_start, + h5part_int64_t *k_end + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + h5part_int64_t herr = H5Block3dGetReducedPartitionOfProc ( + filehandle, + *proc, + i_start, i_end, j_start, j_end, k_start, k_end ); + if ( herr < 0 ) return herr; + + (*i_start)++; + (*i_end)++; + (*j_start)++; + (*j_end)++; + (*k_start)++; + (*k_end)++; + + return H5PART_SUCCESS; +} + +h5part_int64_t +h5bl_get_proc_of ( + h5part_int64_t *f, + const h5part_int64_t *i, + const h5part_int64_t *j, + const h5part_int64_t *k + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + return H5Block3dGetProcOf ( filehandle, (*i)-1, (*j)-1, (*k)-1 ); +} + +h5part_int64_t +h5bl_3d_read_scalar_field ( + h5part_int64_t *f, + const char *field_name, + h5part_float64_t *data, + const int l_field_name + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name ); + + h5part_int64_t herr = H5Block3dReadScalarField ( + filehandle, field_name2, data ); + + free ( field_name2 ); + return herr; +} + +h5part_int64_t +h5bl_3d_write_scalar_field ( + h5part_int64_t *f, + const char *field_name, + const h5part_float64_t *data, + const int l_field_name + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name ); + + h5part_int64_t herr = H5Block3dWriteScalarField ( + filehandle, field_name2, data ); + + free ( field_name2 ); + return herr; +} + +h5part_int64_t +h5bl_3d_read_3dvector_field ( + h5part_int64_t *f, /*!< file handle */ + const char *field_name, /*!< name of the data set */ + h5part_float64_t *xval, /*!< array of x component data */ + h5part_float64_t *yval, /*!< array of y component data */ + h5part_float64_t *zval, /*!< array of z component data */ + const int l_field_name + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name ); + + h5part_int64_t herr = H5Block3dRead3dVectorField ( + filehandle, field_name2, xval, yval, zval ); + + free ( field_name2 ); + return herr; +} + +h5part_int64_t +h5bl_3d_write_3dvector_field ( + h5part_int64_t *f, /*!< file handle */ + const char *field_name, /*!< name of the data set */ + const h5part_float64_t *xval, /*!< array of x component data */ + const h5part_float64_t *yval, /*!< array of y component data */ + const h5part_float64_t *zval, /*!< array of z component data */ + const int l_field_name + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name ); + + h5part_int64_t herr = H5Block3dWrite3dVectorField ( + filehandle, field_name2, xval, yval, zval ); + + free ( field_name2 ); + return herr; +} + +h5part_int64_t +h5bl_getnumfields ( + h5part_int64_t *f /*!< file handle */ + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + return H5BlockGetNumFields ( filehandle ); +} + +h5part_int64_t +h5bl_getfieldinfo ( + h5part_int64_t *f, + const h5part_int64_t *idx, + char *field_name, + h5part_int64_t *grid_rank, + h5part_int64_t *grid_dims, + h5part_int64_t *field_dims, + const int l_field_name + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + h5part_int64_t herr = H5BlockGetFieldInfo ( + filehandle, *idx, field_name, l_field_name, + grid_rank, grid_dims, field_dims ); + _H5Part_strc2for ( field_name, l_field_name ); + return herr; +} + +h5part_int64_t +h5bl_writefieldattrib_r8 ( + h5part_int64_t *f, + const char *field_name, + const char *attrib_name, + const h5part_float64_t *attrib_value, + const h5part_int64_t *attrib_nelem, + const int l_field_name, + const int l_attrib_name + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name ); + char *attrib_name2 =_H5Part_strdupfor2c ( attrib_name, l_attrib_name ); + + h5part_int64_t herr = H5BlockWriteFieldAttrib ( + filehandle, field_name2, attrib_name2, H5PART_FLOAT64, + attrib_value, *attrib_nelem ); + + free ( field_name2 ); + free ( attrib_name2 ); + return herr; +} + + +h5part_int64_t +h5bl_writefieldattrib_i8 ( + h5part_int64_t *f, + const char *field_name, + const char *attrib_name, + const h5part_int64_t *attrib_value, + const h5part_int64_t *attrib_nelem, + const int l_field_name, + const int l_attrib_name + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name ); + char *attrib_name2 =_H5Part_strdupfor2c ( attrib_name, l_attrib_name ); + + h5part_int64_t herr = H5BlockWriteFieldAttrib ( + filehandle, field_name2, attrib_name2, H5PART_INT64, + attrib_value, *attrib_nelem ); + + free ( field_name2 ); + free ( attrib_name2 ); + return herr; +} + +h5part_int64_t +h5bl_writefieldattrib_string ( + h5part_int64_t *f, + const char *field_name, + const char *attrib_name, + const char *attrib_value, + const int l_field_name, + const int l_attrib_name, + const int l_attrib_value + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + char *field_name2 =_H5Part_strdupfor2c ( field_name, l_field_name ); + char *attrib_name2=_H5Part_strdupfor2c ( attrib_name, l_attrib_name ); + char *attrib_value2=_H5Part_strdupfor2c( attrib_value,l_attrib_value ); + + h5part_int64_t herr = H5BlockWriteFieldAttribString ( + filehandle, field_name2, attrib_name2, attrib_value2 ); + + free ( field_name2 ); + free ( attrib_name2 ); + free ( attrib_value2 ); + return herr; +} + + +h5part_int64_t +h5bl_getnfieldattribs ( + h5part_int64_t *f, + const char *field_name, + const int l_field_name + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name ); + + h5part_int64_t herr = H5BlockGetNumFieldAttribs ( + filehandle, field_name2 ); + + free ( field_name2 ); + return herr; +} + +h5part_int64_t +h5bl_getfieldattribinfo ( + h5part_int64_t *f, + const char *field_name, + const h5part_int64_t *attrib_idx, + char *attrib_name, + h5part_int64_t *attrib_nelem, + const int l_field_name, + const int l_attrib_name + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + h5part_int64_t attrib_type; + + char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name ); + + h5part_int64_t herr = H5BlockGetFieldAttribInfo ( + filehandle, field_name2, *attrib_idx, + attrib_name, l_attrib_name, + &attrib_type, + attrib_nelem ); + + _H5Part_strc2for ( attrib_name, l_attrib_name ); + + free ( field_name2 ); + return herr; +} + + +h5part_int64_t +h5bl_readfieldattrib_i8 ( + h5part_int64_t *f, + const char *field_name, + const char *attrib_name, + h5part_int64_t *attrib_value, + const int l_field_name, + const int l_attrib_name + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + char *field_name2 =_H5Part_strdupfor2c ( field_name, l_field_name ); + char *attrib_name2=_H5Part_strdupfor2c ( attrib_name, l_attrib_name ); + + h5part_int64_t herr = H5BlockReadFieldAttrib ( + filehandle, field_name2, attrib_name2, attrib_value ); + + free ( field_name2 ); + free ( attrib_name2 ); + return herr; +} + +h5part_int64_t +h5bl_readfieldattrib_r8 ( + h5part_int64_t *f, + const char *field_name, + const char *attrib_name, + h5part_float64_t *attrib_value, + const int l_field_name, + const int l_attrib_name + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + char *field_name2 =_H5Part_strdupfor2c ( field_name, l_field_name ); + char *attrib_name2=_H5Part_strdupfor2c ( attrib_name, l_attrib_name ); + + h5part_int64_t herr = H5BlockReadFieldAttrib ( + filehandle, field_name2, attrib_name2, attrib_value ); + + free ( field_name2 ); + free ( attrib_name2 ); + return herr; +} + +h5part_int64_t +h5bl_readfieldattrib_string ( + h5part_int64_t *f, + const char *field_name, + const char *attrib_name, + char *attrib_value, + const int l_field_name, + const int l_attrib_name, + const int l_attrib_value + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + char *field_name2 =_H5Part_strdupfor2c ( field_name, l_field_name ); + char *attrib_name2=_H5Part_strdupfor2c ( attrib_name, l_attrib_name ); + + h5part_int64_t herr = H5BlockReadFieldAttrib ( + filehandle, field_name2, attrib_name2, attrib_value ); + + _H5Part_strc2for ( attrib_value, l_attrib_value ); + + free ( field_name2 ); + free ( attrib_name2 ); + return herr; +} + +h5part_int64_t +h5bl_has_fielddata ( + h5part_int64_t *f + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + return H5BlockHasFieldData ( filehandle ); +} + +h5part_int64_t +h5b_3d_get_field_spacing ( + h5part_int64_t *f, + const char *field_name, + h5part_float64_t *x, + h5part_float64_t *y, + h5part_float64_t *z, + const int l_field_name + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name ); + + h5part_int64_t herr = H5Block3dGetFieldSpacing ( + filehandle, field_name2, x, y, z ); + + free ( field_name2 ); + return herr; +} + +h5part_int64_t +h5b_3d_set_field_spacing ( + h5part_int64_t *f, + const char *field_name, + const h5part_float64_t *x, + const h5part_float64_t *y, + const h5part_float64_t *z, + const int l_field_name + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name ); + + h5part_int64_t herr = H5Block3dSetFieldSpacing ( + filehandle, field_name2, *x, *y, *z ); + + free ( field_name2 ); + return herr; +} + +h5part_int64_t +h5b_3d_get_field_origin ( + h5part_int64_t *f, + const char *field_name, + h5part_float64_t *x, + h5part_float64_t *y, + h5part_float64_t *z, + const int l_field_name + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name ); + + h5part_int64_t herr = H5Block3dGetFieldOrigin ( + filehandle, field_name2, x, y, z ); + + free ( field_name2 ); + return herr; +} + +h5part_int64_t +h5b_3d_set_field_origin ( + h5part_int64_t *f, + const char *field_name, + const h5part_float64_t *x, + const h5part_float64_t *y, + const h5part_float64_t *z, + const int l_field_name + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + char *field_name2 = _H5Part_strdupfor2c ( field_name, l_field_name ); + + h5part_int64_t herr = H5Block3dSetFieldOrigin ( + filehandle, field_name2, *x, *y, *z ); + + free ( field_name2 ); + return herr; +} diff --git a/trunk/src/H5BlockF90.inc b/trunk/src/H5BlockF90.inc new file mode 100644 index 0000000..ff5c91e --- /dev/null +++ b/trunk/src/H5BlockF90.inc @@ -0,0 +1,176 @@ + INTERFACE + INTEGER*8 FUNCTION h5bl_define3dlayout ( filehandle, i_start, i_end, j_start, j_end, k_start, k_end ) + INTEGER*8, INTENT(IN) :: filehandle + INTEGER*8, INTENT(IN) :: i_start + INTEGER*8, INTENT(IN) :: i_end + INTEGER*8, INTENT(IN) :: j_start + INTEGER*8, INTENT(IN) :: j_end + INTEGER*8, INTENT(IN) :: k_start + INTEGER*8, INTENT(IN) :: k_end + END FUNCTION + + INTEGER*8 FUNCTION h5bl_get_partition_of_proc ( filehandle, proc, i_start, i_end, j_start, j_end, k_start, k_end ) + INTEGER*8, INTENT(IN) :: filehandle + INTEGER*8, INTENT(OUT) :: proc + INTEGER*8, INTENT(OUT) :: i_start + INTEGER*8, INTENT(OUT) :: i_end + INTEGER*8, INTENT(OUT) :: j_start + INTEGER*8, INTENT(OUT) :: j_end + INTEGER*8, INTENT(OUT) :: k_start + INTEGER*8, INTENT(OUT) :: k_end + END FUNCTION + + INTEGER*8 FUNCTION h5bl_get_reduced_partition_of_proc ( filehandle, proc, i_start, i_end, j_start, j_end, k_start, k_end ) + INTEGER*8, INTENT(IN) :: filehandle + INTEGER*8, INTENT(OUT) :: proc + INTEGER*8, INTENT(OUT) :: i_start + INTEGER*8, INTENT(OUT) :: i_end + INTEGER*8, INTENT(OUT) :: j_start + INTEGER*8, INTENT(OUT) :: j_end + INTEGER*8, INTENT(OUT) :: k_start + INTEGER*8, INTENT(OUT) :: k_end + END FUNCTION + + INTEGER*8 FUNCTION h5bl_get_proc_of ( filehandle, i, j, k ) + INTEGER*8, INTENT(IN) :: filehandle + INTEGER*8, INTENT(IN) :: i + INTEGER*8, INTENT(IN) :: j + INTEGER*8, INTENT(IN) :: k + END FUNCTION + + INTEGER*8 FUNCTION h5bl_3d_read_scalar_field ( filehandle, name, data ) + INTEGER*8, INTENT(IN) :: filehandle + CHARACTER(LEN=*), INTENT(IN) :: name + REAL*8, INTENT(OUT) :: data(*) + END FUNCTION + + INTEGER*8 FUNCTION h5bl_3d_write_scalar_field ( filehandle, name, data ) + INTEGER*8, INTENT(IN) :: filehandle + CHARACTER(LEN=*), INTENT(IN) :: name + REAL*8, INTENT(IN) :: data(*) + END FUNCTION + + INTEGER*8 FUNCTION h5bl_3d_read_3dvector_field ( filehandle, name, x, y, z ) + INTEGER*8, INTENT(IN) :: filehandle + CHARACTER(LEN=*), INTENT(IN) :: name + REAL*8, INTENT(OUT) :: x(*) + REAL*8, INTENT(OUT) :: y(*) + REAL*8, INTENT(OUT) :: z(*) + END FUNCTION + + + INTEGER*8 FUNCTION h5bl_3d_write_3dvector_field ( filehandle, name, x, y, z ) + INTEGER*8, INTENT(IN) :: filehandle + CHARACTER(LEN=*), INTENT(IN) :: name + REAL*8, INTENT(IN) :: x(*) + REAL*8, INTENT(IN) :: y(*) + REAL*8, INTENT(IN) :: z(*) + END FUNCTION + + INTEGER*8 FUNCTION h5bl_getnumfields ( filehandle ) + INTEGER*8, INTENT(IN) :: filehandle + END FUNCTION + + INTEGER*8 FUNCTION h5bl_getfieldinfo ( filehandle, idx, field_name, grid_rank, grid_dims, field_dims ) + INTEGER*8, INTENT(IN) :: filehandle + INTEGER*8, INTENT(IN) :: idx + CHARACTER(LEN=*), INTENT(OUT) :: field_name + INTEGER*8, INTENT(OUT) :: grid_rank + INTEGER*8, INTENT(OUT) :: grid_dims(*) + INTEGER*8, INTENT(OUT) :: field_dims + END FUNCTION + + INTEGER*8 FUNCTION h5bl_writefieldattrib_r8 ( filehandle, field_name, attrib_name, attrib_value, attrib_nelem) + INTEGER*8, INTENT(IN) :: filehandle + CHARACTER(LEN=*), INTENT(IN) :: field_name ! The name of the field + CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! The name of the attribute + REAL*8, INTENT(IN) :: attrib_value(*) ! The array of data to write into the attribute + INTEGER*8, INTENT(IN) :: attrib_nelem ! Number of elements in the attrib array + END FUNCTION + + INTEGER*8 FUNCTION h5bl_writefieldattrib_i8 (filehandle, field_name, attrib_name,attrib_value,attrib_nelem) + INTEGER*8, INTENT(IN) :: filehandle + CHARACTER(LEN=*), INTENT(IN) :: field_name ! The name of the field + CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! The name of the attribute + INTEGER*8, INTENT(IN) :: attrib_value(*) ! The array of data to write into the attribute + INTEGER*8, INTENT(IN) :: attrib_nelem ! Number of elements in the attrib array + END FUNCTION + + INTEGER*8 FUNCTION h5bl_writefieldattrib_string ( filehandle, field_name, attrib_name, attrib_value ) + INTEGER*8, INTENT(IN) :: filehandle + CHARACTER(LEN=*), INTENT(IN) :: field_name ! The name of the field + CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! The name of the attribute + CHARACTER(LEN=*), INTENT(IN) :: attrib_value ! The array of data to write into the attribute + END FUNCTION + + INTEGER*8 FUNCTION h5bl_getnfieldattribs ( filehandle, field_name ) + INTEGER*8, INTENT(IN) :: filehandle + CHARACTER(LEN=*), INTENT(IN) :: field_name ! The name of the field + END FUNCTION + + INTEGER*8 FUNCTION h5bl_getfieldattribinfo ( filehandle, field_name, idx, attrib_name, attrib_nelem) + INTEGER*8, INTENT(IN) :: filehandle + CHARACTER(LEN=*), INTENT(IN) :: field_name ! The name of the field + INTEGER*8, INTENT(IN) :: idx ! index of the attribute being queried + CHARACTER(LEN=*), INTENT(OUT):: attrib_name ! The name of the attribute + INTEGER*8, INTENT(OUT):: attrib_nelem ! Number of elements in the attrib array + END FUNCTION + + INTEGER*8 FUNCTION h5bl_readfieldattrib_i8 ( filehandle, field_name, attrib_name, attrib_value ) + INTEGER*8, INTENT(IN) :: filehandle + CHARACTER(LEN=*), INTENT(IN) :: field_name ! The name of the field + CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! name of the attribute to read + INTEGER*8, INTENT(OUT):: attrib_value(*)! the attribute data will be read into this array + END FUNCTION + + INTEGER*8 FUNCTION h5bl_readfieldattrib_r8 ( filehandle, field_name, attrib_name, attrib_value ) + INTEGER*8, INTENT(IN) :: filehandle + CHARACTER(LEN=*), INTENT(IN) :: field_name ! The name of the field + CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! name of the attribute to read + REAL*8, INTENT(OUT):: attrib_value(*)! the attribute data will be read into this array + END FUNCTION + + INTEGER*8 FUNCTION h5bl_readfieldattrib_string ( filehandle, field_name, attrib_name, attrib_value ) + INTEGER*8, INTENT(IN) :: filehandle + CHARACTER(LEN=*), INTENT(IN) :: field_name ! The name of the field + CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! name of the attribute to read + CHARACTER(LEN=*), INTENT(IN) :: attrib_value ! The array of data to write into the attribute + END FUNCTION + + INTEGER*8 FUNCTION h5bl_has_fielddata ( filehandle ) + INTEGER*8, INTENT(IN) :: filehandle + END FUNCTION + + INTEGER*8 FUNCTION h5bl_3d_get_field_spacing ( filehandle, name, x, y, z ) + INTEGER*8, INTENT(IN) :: filehandle + CHARACTER(LEN=*), INTENT(IN) :: name + REAL*8, INTENT(OUT) :: x + REAL*8, INTENT(OUT) :: y + REAL*8, INTENT(OUT) :: z + END FUNCTION + + INTEGER*8 FUNCTION h5bl_3d_set_field_spacing ( filehandle, name, x, y, z ) + INTEGER*8, INTENT(IN) :: filehandle + CHARACTER(LEN=*), INTENT(IN) :: name + REAL*8, INTENT(IN) :: x + REAL*8, INTENT(IN) :: y + REAL*8, INTENT(IN) :: z + END FUNCTION + + INTEGER*8 FUNCTION h5bl_3d_get_field_origin ( filehandle, name, x, y, z ) + INTEGER*8, INTENT(IN) :: filehandle + CHARACTER(LEN=*), INTENT(IN) :: name + REAL*8, INTENT(OUT) :: x + REAL*8, INTENT(OUT) :: y + REAL*8, INTENT(OUT) :: z + END FUNCTION + + INTEGER*8 FUNCTION h5bl_3d_set_field_origin ( filehandle, name, x, y, z ) + INTEGER*8, INTENT(IN) :: filehandle + CHARACTER(LEN=*), INTENT(IN) :: name + REAL*8, INTENT(IN) :: x + REAL*8, INTENT(IN) :: y + REAL*8, INTENT(IN) :: z + END FUNCTION + + END INTERFACE diff --git a/trunk/src/H5BlockPrivate.h b/trunk/src/H5BlockPrivate.h new file mode 100644 index 0000000..6cc5ec1 --- /dev/null +++ b/trunk/src/H5BlockPrivate.h @@ -0,0 +1,6 @@ +#ifndef __H5BLOCKPRIVATE_H +#define __H5BLOCKPRIVATE_H + +#define H5BLOCK_GROUPNAME_BLOCK "Block" + +#endif diff --git a/trunk/src/H5BlockTypes.h b/trunk/src/H5BlockTypes.h new file mode 100644 index 0000000..e12742d --- /dev/null +++ b/trunk/src/H5BlockTypes.h @@ -0,0 +1,32 @@ +#ifndef __H5BLOCKTYPES_H +#define __H5BLOCKTYPES_H + +struct H5BlockPartition { + h5part_int64_t i_start; + h5part_int64_t i_end; + h5part_int64_t j_start; + h5part_int64_t j_end; + h5part_int64_t k_start; + h5part_int64_t k_end; +}; + +struct H5BlockStruct { + h5part_int64_t timestep; + h5part_int64_t i_max; + h5part_int64_t j_max; + h5part_int64_t k_max; + struct H5BlockPartition *user_layout; + struct H5BlockPartition *write_layout; + int have_layout; + + hid_t shape; + hid_t memshape; + hid_t diskshape; + hid_t blockgroup; + hid_t field_group_id; +}; + +#define H5PART_ERR_LAYOUT -100 +#define H5PART_ERR_NOENT -101 + +#endif diff --git a/trunk/src/H5Part.c b/trunk/src/H5Part.c new file mode 100644 index 0000000..0095c7d --- /dev/null +++ b/trunk/src/H5Part.c @@ -0,0 +1,2590 @@ +/*! \mainpage H5Part: A Portable High Performance Parallel Data Interface to HDF5 + +Particle based simulations of accelerator beam-lines, especially in +six dimensional phase space, generate vast amounts of data. Even +though a subset of statistical information regarding phase space or +analysis needs to be preserved, reading and writing such enormous +restart files on massively parallel supercomputing systems remains +challenging. + +H5Part consists of Particles and Block structured Fields. + +Developed by: + +
    +
  • Andreas Adelmann (PSI)
  • +
  • Achim Gsell (PSI)
  • +
  • Benedikt Oswald (PSI)
  • + +
  • Wes Bethel (NERSC/LBNL)
  • +
  • John Shalf (NERSC/LBNL)
  • +
  • Cristina Siegerist (NERSC/LBNL)
  • +
+ + +Papers: + + + +For further information contact: h5part + +Last modified on April 19, 2007. + +*/ + + +/*! + \defgroup h5part_c_api H5Part C API + +*/ +/*! + \ingroup h5part_c_api + \defgroup h5part_openclose File Opening and Closing +*/ +/*! + \ingroup h5part_c_api + \defgroup h5part_write File Writing +*/ +/*! + \ingroup h5part_c_api + \defgroup h5part_read File Reading +*/ +/*! + \ingroup h5part_c_api + \defgroup h5part_attrib Reading and Writing Attributes +*/ +/*! + \ingroup h5part_c_api + \defgroup h5part_errhandle Error Handling +*/ +/*! + \internal + \defgroup h5partkernel H5Part private functions +*/ + + +#include +#include +#include /* va_arg - System dependent ?! */ +#include +#include +#include +#include + +#ifndef WIN32 +#include +#else /* WIN32 */ +#include +#define open _open +#define close _close +#endif /* WIN32 */ + +#include "H5PartTypes.h" +#include "H5Part.h" +#include "H5PartPrivate.h" +#include "H5PartErrors.h" + +/********* Private Variable Declarations *************/ + +static unsigned _debug = 0; +static h5part_int64_t _h5part_errno = H5PART_SUCCESS; +static h5part_error_handler _err_handler = H5PartReportErrorHandler; +static char *__funcname = "NONE"; + +/********** Declaration of private functions ******/ + +static h5part_int64_t +_init( + void + ); + +static h5part_int64_t +_file_is_valid ( + const H5PartFile *f + ); + +/* + error handler for hdf5 +*/ +static herr_t +_h5_error_handler ( + void * + ); + +/*========== File Opening/Closing ===============*/ + +static H5PartFile* +_H5Part_open_file ( + const char *filename, /*!< [in] The name of the data file to open. */ + unsigned flags, /*!< [in] The access mode for the file. */ + MPI_Comm comm, /*!< [in] MPI communicator */ + int f_parallel /*!< [in] 0 for serial io otherwise parallel */ + ) { + if ( _init() < 0 ) { + HANDLE_H5PART_INIT_ERR; + return NULL; + } + _h5part_errno = H5PART_SUCCESS; + H5PartFile *f = NULL; + + f = (H5PartFile*) malloc( sizeof (H5PartFile) ); + if( f == NULL ) { + HANDLE_H5PART_NOMEM_ERR; + goto error_cleanup; + } + memset (f, 0, sizeof (H5PartFile)); + + f->groupname_step = strdup ( H5PART_GROUPNAME_STEP ); + if( f->groupname_step == NULL ) { + HANDLE_H5PART_NOMEM_ERR; + goto error_cleanup; + } + f->stepno_width = 0; + + f->xfer_prop = f->create_prop = f->access_prop = H5P_DEFAULT; + + if ( f_parallel ) { +#ifdef PARALLEL_IO + /* for the SP2... perhaps different for linux */ + MPI_Info info = MPI_INFO_NULL; + + /* ks: IBM_large_block_io */ + MPI_Info_create(&info); + MPI_Info_set(info, "IBM_largeblock_io", "true" ); + + if (MPI_Comm_size (comm, &f->nprocs) != MPI_SUCCESS) { + HANDLE_MPI_COMM_SIZE_ERR; + goto error_cleanup; + } + if (MPI_Comm_rank (comm, &f->myproc) != MPI_SUCCESS) { + HANDLE_MPI_COMM_RANK_ERR; + goto error_cleanup; + } + + f->pnparticles = + (h5part_int64_t*) malloc (f->nprocs * sizeof (h5part_int64_t)); + if (f->pnparticles == NULL) { + HANDLE_H5PART_NOMEM_ERR; + goto error_cleanup; + } + + f->access_prop = H5Pcreate (H5P_FILE_ACCESS); + if (f->access_prop < 0) { + HANDLE_H5P_CREATE_ERR; + goto error_cleanup; + } + + if (H5Pset_fapl_mpio (f->access_prop, comm, info) < 0) { + HANDLE_H5P_SET_FAPL_MPIO_ERR; + goto error_cleanup; + } + + /* f->create_prop = H5Pcreate(H5P_FILE_CREATE); */ + f->create_prop = H5P_DEFAULT; + + /* currently create_prop is empty */ + /* xfer_prop: also used for parallel I/O, during actual writes + rather than the access_prop which is for file creation. */ + f->xfer_prop = H5Pcreate (H5P_DATASET_XFER); + if (f->xfer_prop < 0) { + HANDLE_H5P_CREATE_ERR; + goto error_cleanup; + } + + if (H5Pset_dxpl_mpio (f->xfer_prop,H5FD_MPIO_COLLECTIVE) < 0) { + HANDLE_H5P_SET_DXPL_MPIO_ERR; + goto error_cleanup; + } + + f->comm = comm; + + MPI_Info_free(&info); +#endif + } else { + f->comm = 0; + f->nprocs = 1; + f->myproc = 0; + f->pnparticles = + (h5part_int64_t*) malloc (f->nprocs * sizeof (h5part_int64_t)); + } + if ( flags == H5PART_READ ) { + f->file = H5Fopen (filename, H5F_ACC_RDONLY, f->access_prop); + } + else if ( flags == H5PART_WRITE ){ + f->file = H5Fcreate (filename, H5F_ACC_TRUNC, f->create_prop, + f->access_prop); + f->empty = 1; + } + else if ( flags == H5PART_APPEND ) { + int fd = open (filename, O_RDONLY, 0); + if ( (fd == -1) && (errno == ENOENT) ) { + f->file = H5Fcreate(filename, H5F_ACC_TRUNC, + f->create_prop, f->access_prop); + f->empty = 1; + } + else if (fd != -1) { + close (fd); + f->file = H5Fopen (filename, H5F_ACC_RDWR, + f->access_prop); + /* + The following function call returns an error, + if f->file < 0. But we can safely ignore this. + */ + f->timestep = _H5Part_get_num_objects_matching_pattern( + f->file, "/", H5G_GROUP, f->groupname_step ); + if ( f->timestep < 0 ) goto error_cleanup; + } + } + else { + HANDLE_H5PART_FILE_ACCESS_TYPE_ERR ( flags ); + goto error_cleanup; + } + + if (f->file < 0) { + HANDLE_H5F_OPEN_ERR ( filename, flags ); + goto error_cleanup; + } + f->mode = flags; + f->timegroup = -1; + f->shape = 0; + f->diskshape = H5S_ALL; + f->memshape = H5S_ALL; + f->viewstart = -1; + f->viewend = -1; + + _H5Part_print_debug ( + "Proc[%d]: Opened file \"%s\" val=%lld", + f->myproc, + filename, + (long long)(size_t)f ); + + return f; + + error_cleanup: + if (f != NULL ) { + if (f->groupname_step) { + free (f->groupname_step); + } + if (f->pnparticles != NULL) { + free (f->pnparticles); + } + free (f); + } + return NULL; +} + +#ifdef PARALLEL_IO +/*! + \ingroup h5part_openclose + + Opens file with specified filename. + + If you open with flag \c H5PART_WRITE, it will truncate any + file with the specified filename and start writing to it. If + you open with \c H5PART_APPEND, then you can append new timesteps. + If you open with \c H5PART_READ, then it will open the file + readonly. + + The typical extension for these files is \c .h5. + + H5PartFile should be treated as an essentially opaque + datastructure. It acts as the file handle, but internally + it maintains several key state variables associated with + the file. + + \return File handle or \c NULL + */ +H5PartFile* +H5PartOpenFileParallel ( + const char *filename, /*!< [in] The name of the data file to open. */ + unsigned flags, /*!< [in] The access mode for the file. */ + MPI_Comm comm /*!< [in] MPI communicator */ +) { + int f_parallel = 1; /* parallel i/o */ + + return _H5Part_open_file ( filename, flags, comm, f_parallel ); +} +#endif + +/*! + \ingroup h5part_openclose + + Opens file with specified filename. + + If you open with flag \c H5PART_WRITE, it will truncate any + file with the specified filename and start writing to it. If + you open with \c H5PART_APPEND, then you can append new timesteps. + If you open with \c H5PART_READ, then it will open the file + readonly. + + The typical extension for these files is \c .h5. + + H5PartFile should be treated as an essentially opaque + datastructure. It acts as the file handle, but internally + it maintains several key state variables associated with + the file. + + \return File handle or \c NULL + */ + +H5PartFile* +H5PartOpenFile ( + const char *filename, /*!< [in] The name of the data file to open. */ + unsigned flags /*!< [in] The access mode for the file. */ + ) { + + SET_FNAME ( "H5PartOpenFile" ); + + MPI_Comm comm = 0; /* dummy */ + int f_parallel = 0; /* serial open */ + + return _H5Part_open_file ( filename, flags, comm, f_parallel ); +} + +/*! + Checks if a file was successfully opened. + + \return \c H5PART_SUCCESS or error code + */ +static h5part_int64_t +_file_is_valid ( + const H5PartFile *f /*!< filehandle to check validity of */ + ) { + + if( f == NULL ) + return H5PART_ERR_BADFD; + else if(f->file > 0) + return H5PART_SUCCESS; + else + return H5PART_ERR_BADFD; +} + +/*! + \ingroup h5part_openclose + + Closes an open file. + + \return \c H5PART_SUCCESS or error code +*/ +h5part_int64_t +H5PartCloseFile ( + H5PartFile *f /*!< [in] filehandle of the file to close */ + ) { + + SET_FNAME ( "H5PartCloseFile" ); + herr_t r = 0; + _h5part_errno = H5PART_SUCCESS; + + CHECK_FILEHANDLE ( f ); + + if ( f->block && f->close_block ) { + (*f->close_block) ( f ); + f->block = NULL; + f->close_block = NULL; + } + + if( f->shape > 0 ) { + r = H5Sclose( f->shape ); + if ( r < 0 ) HANDLE_H5S_CLOSE_ERR; + f->shape = 0; + } + if( f->timegroup >= 0 ) { + r = H5Gclose( f->timegroup ); + if ( r < 0 ) HANDLE_H5G_CLOSE_ERR; + f->timegroup = -1; + } + if( f->diskshape != H5S_ALL ) { + r = H5Sclose( f->diskshape ); + if ( r < 0 ) HANDLE_H5S_CLOSE_ERR; + f->diskshape = 0; + } + if( f->xfer_prop != H5P_DEFAULT ) { + r = H5Pclose( f->xfer_prop ); + if ( r < 0 ) HANDLE_H5P_CLOSE_ERR ( "f->xfer_prop" ); + f->xfer_prop = H5P_DEFAULT; + } + if( f->access_prop != H5P_DEFAULT ) { + r = H5Pclose( f->access_prop ); + if ( r < 0 ) HANDLE_H5P_CLOSE_ERR ( "f->access_prop" ); + f->access_prop = H5P_DEFAULT; + } + if( f->create_prop != H5P_DEFAULT ) { + r = H5Pclose( f->create_prop ); + if ( r < 0 ) HANDLE_H5P_CLOSE_ERR ( "f->create_prop" ); + f->create_prop = H5P_DEFAULT; + } + if ( f->file ) { + r = H5Fclose( f->file ); + if ( r < 0 ) HANDLE_H5F_CLOSE_ERR; + f->file = 0; + } + if (f->groupname_step) { + free (f->groupname_step); + } + if( f->pnparticles ) { + free( f->pnparticles ); + } + free( f ); + + return _h5part_errno; +} + +/*============== File Writing Functions ==================== */ + +h5part_int64_t +H5PartDefineStepName ( + H5PartFile *f, + const char *name, + const h5part_int64_t width + ) { + f->groupname_step = strdup ( name ); + if( f->groupname_step == NULL ) { + return HANDLE_H5PART_NOMEM_ERR; + } + f->stepno_width = (int)width; + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5part_write + + Set number of particles for current time-step. + + This function's sole purpose is to prevent + needless creation of new HDF5 DataSpace handles if the number of + particles is invariant throughout the simulation. That's its only reason + for existence. After you call this subroutine, all subsequent + operations will assume this number of particles will be written. + + + \return \c H5PART_SUCCESS or error code + */ +h5part_int64_t +H5PartSetNumParticles ( + H5PartFile *f, /*!< [in] Handle to open file */ + h5part_int64_t nparticles /*!< [in] Number of particles */ + ) { + + SET_FNAME ( "H5PartSetNumParticles" ); + int r; +#ifdef PARALLEL_IO +#ifdef HDF5V160 + hssize_t start[1]; +#else + hsize_t start[1]; +#endif + + hsize_t stride[1]; + hsize_t count[1]; + hsize_t total; + hsize_t dmax = H5S_UNLIMITED; + register int i; +#endif + + CHECK_FILEHANDLE( f ); + +#ifndef PARALLEL_IO + /* + if we are not using parallel-IO, there is enough information + to know that we can short circuit this routine. However, + for parallel IO, this is going to cause problems because + we don't know if things have changed globally + */ + if ( f->nparticles == nparticles ) { + return H5PART_SUCCESS; + } +#endif + if ( f->diskshape != H5S_ALL ) { + r = H5Sclose( f->diskshape ); + if ( r < 0 ) return HANDLE_H5S_CLOSE_ERR; + f->diskshape = H5S_ALL; + } + if(f->memshape != H5S_ALL) { + r = H5Sclose( f->memshape ); + if ( r < 0 ) return HANDLE_H5S_CLOSE_ERR; + f->memshape = H5S_ALL; + } + if( f->shape ) { + r = H5Sclose(f->shape); + if ( r < 0 ) return HANDLE_H5S_CLOSE_ERR; + } + f->nparticles =(hsize_t) nparticles; +#ifndef PARALLEL_IO + f->shape = H5Screate_simple (1, + &(f->nparticles), + NULL); + if ( f->shape < 0 ) HANDLE_H5S_CREATE_SIMPLE_ERR ( f->nparticles ); + +#else /* PARALLEL_IO */ + /* + The Gameplan here is to declare the overall size of the on-disk + data structure the same way we do for the serial case. But + then we must have additional "DataSpace" structures to define + our in-memory layout of our domain-decomposed portion of the particle + list as well as a "selection" of a subset of the on-disk + data layout that will be written in parallel to mutually exclusive + regions by all of the processors during a parallel I/O operation. + These are f->shape, f->memshape and f->diskshape respectively. + */ + + /* + acquire the number of particles to be written from each MPI process + */ + + r = MPI_Allgather ( + &nparticles, 1, MPI_LONG_LONG, + f->pnparticles, 1, MPI_LONG_LONG, + f->comm); + if ( r != MPI_SUCCESS) { + return HANDLE_MPI_ALLGATHER_ERR; + } + if ( f->myproc == 0 ) { + _H5Part_print_debug ( "Particle offsets:" ); + for(i=0;inprocs;i++) + _H5Part_print_debug ( "\tnp=%lld", + (long long) f->pnparticles[i] ); + } + /* should I create a selection here? */ + + /* compute start offsets */ + stride[0] = 1; + start[0] = 0; + for (i=0; imyproc; i++) { + start[0] += f->pnparticles[i]; + } + + /* compute total nparticles */ + total = 0; + for (i=0; i < f->nprocs; i++) { + total += f->pnparticles[i]; + } + + /* declare overall datasize */ + f->shape = H5Screate_simple (1, &total, &total); + if (f->shape < 0) return HANDLE_H5S_CREATE_SIMPLE_ERR ( total ); + + + /* declare overall data size but then will select a subset */ + f->diskshape = H5Screate_simple (1, &total, &total); + if (f->diskshape < 0) return HANDLE_H5S_CREATE_SIMPLE_ERR ( total ); + + /* declare local memory datasize */ + f->memshape = H5Screate_simple (1, &(f->nparticles), &dmax); + if (f->memshape < 0) + return HANDLE_H5S_CREATE_SIMPLE_ERR ( f->nparticles ); + + count[0] = nparticles; + r = H5Sselect_hyperslab ( + f->diskshape, + H5S_SELECT_SET, + start, + stride, + count, NULL ); + if ( r < 0 ) return HANDLE_H5S_SELECT_HYPERSLAB_ERR; + + if ( f->timegroup < 0 ) { + r = _H5Part_set_step ( f, 0 ); + if ( r < 0 ) return r; + + } +#endif + return H5PART_SUCCESS; +} + +static h5part_int64_t +_write_data ( + H5PartFile *f, /*!< IN: Handle to open file */ + const char *name, /*!< IN: Name to associate array with */ + const void *array, /*!< IN: Array to commit to disk */ + const hid_t type /*!< IN: Type of data */ + ) { + herr_t herr; + hid_t dataset_id; + + _H5Part_print_debug ( "Create a dataset[%s] mounted on the " + "timestep %lld", + name, (long long)f->timestep ); + + dataset_id = H5Dcreate ( + f->timegroup, + name, + type, + f->shape, + H5P_DEFAULT ); + if ( dataset_id < 0 ) + return HANDLE_H5D_CREATE_ERR ( name, f->timestep ); + +#ifdef COLLECTIVE_IO + herr = H5Dwrite ( + dataset_id, + type, + f->memshape, + f->diskshape, + f->xfer_prop, + array ); +#else + herr = H5Dwrite ( + dataset_id, + type, + f->memshape, + f->diskshape, + H5P_DEFAULT, + array ); +#endif + + if ( herr < 0 ) return HANDLE_H5D_WRITE_ERR ( name, f->timestep ); + + herr = H5Dclose ( dataset_id ); + if ( herr < 0 ) return HANDLE_H5D_CLOSE_ERR; + + f->empty = 0; + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5part_write + + Write array of 64 bit floating point data to file. + + After setting the number of particles with \c H5PartSetNumParticles() and + the current timestep using \c H5PartSetStep(), you can start writing datasets + into the file. Each dataset has a name associated with it (chosen by the + user) in order to facilitate later retrieval. The name of the dataset is + specified in the parameter \c name, which must be a null-terminated string. + + There are no restrictions on naming of datasets, but it is useful to arrive + at some common naming convention when sharing data with other groups. + + The writing routines also implicitly store the datatype of the array so that + the array can be reconstructed properly on other systems with incompatible + type representations. + + All data that is written after setting the timestep is associated with that + timestep. While the number of particles can change for each timestep, you + cannot change the number of particles in the middle of a given timestep. + + The data is committed to disk before the routine returns. + + \return \c H5PART_SUCCESS or error code + */ +h5part_int64_t +H5PartWriteDataFloat64 ( + H5PartFile *f, /*!< [in] Handle to open file */ + const char *name, /*!< [in] Name to associate array with */ + const h5part_float64_t *array /*!< [in] Array to commit to disk */ + ) { + + SET_FNAME ( "H5PartWriteDataFloat64" ); + h5part_int64_t herr; + + CHECK_FILEHANDLE ( f ); + CHECK_WRITABLE_MODE( f ); + CHECK_TIMEGROUP( f ); + + herr = _write_data ( f, name, (void*)array, H5T_NATIVE_DOUBLE ); + if ( herr < 0 ) return herr; + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5part_write + + Write array of 64 bit integer data to file. + + After setting the number of particles with \c H5PartSetNumParticles() and + the current timestep using \c H5PartSetStep(), you can start writing datasets + into the file. Each dataset has a name associated with it (chosen by the + user) in order to facilitate later retrieval. The name of the dataset is + specified in the parameter \c name, which must be a null-terminated string. + + There are no restrictions on naming of datasets, but it is useful to arrive + at some common naming convention when sharing data with other groups. + + The writing routines also implicitly store the datatype of the array so that + the array can be reconstructed properly on other systems with incompatible + type representations. + + All data that is written after setting the timestep is associated with that + timestep. While the number of particles can change for each timestep, you + cannot change the number of particles in the middle of a given timestep. + + The data is committed to disk before the routine returns. + + \return \c H5PART_SUCCESS or error code + */ +h5part_int64_t +H5PartWriteDataInt64 ( + H5PartFile *f, /*!< [in] Handle to open file */ + const char *name, /*!< [in] Name to associate array with */ + const h5part_int64_t *array /*!< [in] Array to commit to disk */ + ) { + + SET_FNAME ( "H5PartOpenWriteDataInt64" ); + + h5part_int64_t herr; + + CHECK_FILEHANDLE ( f ); + CHECK_WRITABLE_MODE( f ); + CHECK_TIMEGROUP( f ); + + herr = _write_data ( f, name, (void*)array, H5T_NATIVE_INT64 ); + if ( herr < 0 ) return herr; + + return H5PART_SUCCESS; +} + +/********************** reading and writing attribute ************************/ + +/********************** private functions to handle attributes ***************/ + +/*! + \ingroup h5partkernel + @{ +*/ + +/*! + Normalize HDF5 type +*/ +hid_t +_H5Part_normalize_h5_type ( + hid_t type + ) { + H5T_class_t tclass = H5Tget_class ( type ); + int size = H5Tget_size ( type ); + + switch ( tclass ){ + case H5T_INTEGER: + if ( size==8 ) { + return H5T_NATIVE_INT64; + } + else if ( size==1 ) { + return H5T_NATIVE_CHAR; + } + break; + case H5T_FLOAT: + return H5T_NATIVE_DOUBLE; + default: + ; /* NOP */ + } + _H5Part_print_warn ( "Unknown type %d", (int)type ); + + return -1; +} + +h5part_int64_t +_H5Part_read_attrib ( + hid_t id, + const char *attrib_name, + void *attrib_value + ) { + + herr_t herr; + hid_t attrib_id; + hid_t space_id; + hid_t type_id; + hid_t mytype; + hsize_t nelem; + + attrib_id = H5Aopen_name ( id, attrib_name ); + if ( attrib_id <= 0 ) return HANDLE_H5A_OPEN_NAME_ERR( attrib_name ); + + mytype = H5Aget_type ( attrib_id ); + if ( mytype < 0 ) return HANDLE_H5A_GET_TYPE_ERR; + + space_id = H5Aget_space ( attrib_id ); + if ( space_id < 0 ) return HANDLE_H5A_GET_SPACE_ERR; + + nelem = H5Sget_simple_extent_npoints ( space_id ); + if ( nelem < 0 ) return HANDLE_H5S_GET_SIMPLE_EXTENT_NPOINTS_ERR; + + type_id = _H5Part_normalize_h5_type ( mytype ); + + herr = H5Aread (attrib_id, type_id, attrib_value ); + if ( herr < 0 ) return HANDLE_H5A_READ_ERR; + + herr = H5Sclose ( space_id ); + if ( herr < 0 ) return HANDLE_H5S_CLOSE_ERR; + + herr = H5Tclose ( mytype ); + if ( herr < 0 ) return HANDLE_H5T_CLOSE_ERR; + + herr = H5Aclose ( attrib_id ); + if ( herr < 0 ) return HANDLE_H5A_CLOSE_ERR; + + return H5PART_SUCCESS; +} + +h5part_int64_t +_H5Part_write_attrib ( + hid_t id, + const char *attrib_name, + const hid_t attrib_type, + const void *attrib_value, + const hsize_t attrib_nelem + ) { + + herr_t herr; + hid_t space_id; + hid_t attrib_id; + + space_id = H5Screate_simple (1, &attrib_nelem, NULL); + if ( space_id < 0 ) + return HANDLE_H5S_CREATE_SIMPLE_ERR ( attrib_nelem ); + + attrib_id = H5Acreate ( + id, + attrib_name, + attrib_type, + space_id, + H5P_DEFAULT ); + if ( attrib_id < 0 ) return HANDLE_H5A_CREATE_ERR ( attrib_name ); + + herr = H5Awrite ( attrib_id, attrib_type, attrib_value); + if ( herr < 0 ) return HANDLE_H5A_WRITE_ERR ( attrib_name ); + + herr = H5Aclose ( attrib_id ); + if ( herr < 0 ) return HANDLE_H5A_CLOSE_ERR; + + herr = H5Sclose ( space_id ); + if ( herr < 0 ) return HANDLE_H5S_CLOSE_ERR; + + return H5PART_SUCCESS; +} + +h5part_int64_t +_H5Part_get_attrib_info ( + hid_t id, + const h5part_int64_t attrib_idx, + char *attrib_name, + const h5part_int64_t len_attrib_name, + h5part_int64_t *attrib_type, + h5part_int64_t *attrib_nelem + ) { + + herr_t herr; + hid_t attrib_id; + hid_t mytype; + hid_t space_id; + + attrib_id = H5Aopen_idx ( id, (unsigned int)attrib_idx ); + if ( attrib_id < 0 ) return HANDLE_H5A_OPEN_IDX_ERR ( attrib_idx ); + + if ( attrib_nelem ) { + space_id = H5Aget_space ( attrib_id ); + if ( space_id < 0 ) return HANDLE_H5A_GET_SPACE_ERR; + + *attrib_nelem = H5Sget_simple_extent_npoints ( space_id ); + if ( *attrib_nelem < 0 ) + return HANDLE_H5S_GET_SIMPLE_EXTENT_NPOINTS_ERR; + + herr = H5Sclose ( space_id ); + if ( herr < 0 ) return HANDLE_H5S_CLOSE_ERR; + } + if ( attrib_name ) { + herr = H5Aget_name ( + attrib_id, + (size_t)len_attrib_name, + attrib_name ); + if ( herr < 0 ) return HANDLE_H5A_GET_NAME_ERR; + } + if ( attrib_type ) { + mytype = H5Aget_type ( attrib_id ); + if ( mytype < 0 ) return HANDLE_H5A_GET_TYPE_ERR; + + *attrib_type = _H5Part_normalize_h5_type ( mytype ); + + herr = H5Tclose ( mytype ); + if ( herr < 0 ) return HANDLE_H5T_CLOSE_ERR; + } + herr = H5Aclose ( attrib_id); + if ( herr < 0 ) return HANDLE_H5A_CLOSE_ERR; + + return H5PART_SUCCESS; +} + +/********************** attribute API ****************************************/ + +/*! + \ingroup h5part_attrib + + Writes a string attribute bound to a file. + + This function creates a new attribute \c name with the string \c value as + content. The attribute is bound to the file associated with the file handle + \c f. + + If the attribute already exists an error will be returned. There + is currently no way to change the content of an existing attribute. + + \return \c H5PART_SUCCESS or error code +*/ +h5part_int64_t +H5PartWriteFileAttribString ( + H5PartFile *f, /*!< [in] Handle to open file */ + const char *attrib_name,/*!< [in] Name of attribute to create */ + const char *attrib_value/*!< [in] Value of attribute */ + ) { + + SET_FNAME ( "H5PartWriteFileAttribString" ); + + CHECK_FILEHANDLE ( f ); + CHECK_WRITABLE_MODE( f ); + + hid_t group_id = H5Gopen(f->file,"/"); + if ( group_id < 0 ) return HANDLE_H5G_OPEN_ERR( "/" ); + + h5part_int64_t herr = _H5Part_write_attrib ( + group_id, + attrib_name, + H5T_NATIVE_CHAR, + attrib_value, + strlen ( attrib_value ) + 1 ); + if ( herr < 0 ) return herr; + + herr = H5Gclose ( group_id ); + if ( herr < 0 ) return HANDLE_H5G_CLOSE_ERR; + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5part_attrib + + Writes a string attribute bound to the current time-step. + + This function creates a new attribute \c name with the string \c value as + content. The attribute is bound to the current time step in the file given + by the file handle \c f. + + If the attribute already exists an error will be returned. There + is currently no way to change the content of an existing attribute. + + \return \c H5PART_SUCCESS or error code +*/ + +h5part_int64_t +H5PartWriteStepAttribString ( + H5PartFile *f, /*!< [in] Handle to open file */ + const char *attrib_name,/*!< [in] Name of attribute to create */ + const char *attrib_value/*!< [in] Value of attribute */ + ) { + + SET_FNAME ( "H5PartWriteStepAttribString" ); + + CHECK_FILEHANDLE ( f ); + CHECK_WRITABLE_MODE( f ); + CHECK_TIMEGROUP( f ); + + h5part_int64_t herr = _H5Part_write_attrib ( + f->timegroup, + attrib_name, + H5T_NATIVE_CHAR, + attrib_value, + strlen ( attrib_value ) + 1 ); + if ( herr < 0 ) return herr; + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5part_attrib + + Writes a attribute bound to the current time-step. + + This function creates a new attribute \c name with the string \c value as + content. The attribute is bound to the current time step in the file given + by the file handle \c f. + + The value of the attribute is given the parameter \c type, which must be one + of \c H5T_NATIVE_DOUBLE, \c H5T_NATIVE_INT64 of \c H5T_NATIVE_CHAR, the array + \c value and the number of elements \c nelem in the array. + + If the attribute already exists an error will be returned. There + is currently no way to change the content of an existing attribute. + + \return \c H5PART_SUCCESS or error code +*/ + +h5part_int64_t +H5PartWriteStepAttrib ( + H5PartFile *f, /*!< [in] Handle to open file */ + const char *attrib_name, /*!< [in] Name of attribute */ + const h5part_int64_t attrib_type,/*!< [in] Type of value. */ + const void *attrib_value, /*!< [in] Value of attribute */ + const h5part_int64_t attrib_nelem/*!< [in] Number of elements */ + ){ + + SET_FNAME ( "H5PartWriteStepAttrib" ); + + h5part_int64_t herr; + + CHECK_FILEHANDLE ( f ); + CHECK_WRITABLE_MODE( f ); + CHECK_TIMEGROUP( f ); + + herr = _H5Part_write_attrib ( + f->timegroup, + attrib_name, + (const hid_t)attrib_type, + attrib_value, + attrib_nelem ); + if ( herr < 0 ) return herr; + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5part_attrib + + Writes a attribute bound to a file. + + This function creates a new attribute \c name with the string \c value as + content. The attribute is bound to the file file given by the file handle + \c f. + + The value of the attribute is given the parameter \c type, which must be one + of H5T_NATIVE_DOUBLE, H5T_NATIVE_INT64 of H5T_NATIVE_CHAR, the array \c value + and the number of elements \c nelem in the array. + + If the attribute already exists an error will be returned. There + is currently no way to change the content of an existing attribute. + + \return \c H5PART_SUCCESS or error code +*/ + +h5part_int64_t +H5PartWriteFileAttrib ( + H5PartFile *f, /*!< [in] Handle to open file */ + const char *attrib_name, /*!< [in] Name of attribute */ + const h5part_int64_t attrib_type,/*!< [in] Type of value. */ + const void *attrib_value, /*!< [in] Value of attribute */ + const h5part_int64_t attrib_nelem/*!< [in] Number of elements */ + ) { + + SET_FNAME ( "H5PartWriteFileAttrib" ); + + h5part_int64_t herr; + hid_t group_id; + + CHECK_FILEHANDLE ( f ); + CHECK_WRITABLE_MODE ( f ); + + group_id = H5Gopen(f->file,"/"); + if ( group_id < 0 ) return HANDLE_H5G_OPEN_ERR( "/" ); + + herr = _H5Part_write_attrib ( + group_id, + attrib_name, + (const hid_t)attrib_type, + attrib_value, + attrib_nelem ); + if ( herr < 0 ) return herr; + + herr = H5Gclose ( group_id ); + if ( herr < 0 ) return HANDLE_H5G_CLOSE_ERR; + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5part_attrib + + Gets the number of attributes bound to the current step. + + \return Number of attributes bound to current time step or error code. +*/ +h5part_int64_t +H5PartGetNumStepAttribs ( + H5PartFile *f /*!< [in] Handle to open file */ + ) { + + SET_FNAME ( "H5PartGetNumStepAttribs" ); + h5part_int64_t nattribs; + + CHECK_FILEHANDLE ( f ); + + nattribs = H5Aget_num_attrs(f->timegroup); + if ( nattribs < 0 ) HANDLE_H5A_GET_NUM_ATTRS_ERR; + + return nattribs; +} + +/*! + \ingroup h5part_attrib + + Gets the number of attributes bound to the file. + + \return Number of attributes bound to file \c f or error code. +*/ +h5part_int64_t +H5PartGetNumFileAttribs ( + H5PartFile *f /*!< [in] Handle to open file */ + ) { + + SET_FNAME ( "H5PartGetNumFileAttribs" ); + herr_t herr; + h5part_int64_t nattribs; + + CHECK_FILEHANDLE ( f ); + + hid_t group_id = H5Gopen ( f->file, "/" ); + if ( group_id < 0 ) HANDLE_H5G_OPEN_ERR ( "/" ); + + nattribs = H5Aget_num_attrs ( group_id ); + if ( nattribs < 0 ) HANDLE_H5A_GET_NUM_ATTRS_ERR; + + herr = H5Gclose ( group_id ); + if ( herr < 0 ) HANDLE_H5G_CLOSE_ERR; + return nattribs; +} + +/*! + \ingroup h5part_attrib + + Gets the name, type and number of elements of the step attribute + specified by its index. + + This function can be used to retrieve all attributes bound to the + current time-step by looping from \c 0 to the number of attribute + minus one. The number of attributes bound to the current + time-step can be queried by calling the function + \c H5PartGetNumStepAttribs(). + + \return \c H5PART_SUCCESS or error code +*/ +h5part_int64_t +H5PartGetStepAttribInfo ( + H5PartFile *f, /*!< [in] Handle to open file */ + const h5part_int64_t attrib_idx,/*!< [in] Index of attribute to + get infos about */ + char *attrib_name, /*!< [out] Name of attribute */ + const h5part_int64_t len_of_attrib_name, + /*!< [in] length of buffer \c name */ + h5part_int64_t *attrib_type, /*!< [out] Type of value. */ + h5part_int64_t *attrib_nelem /*!< [out] Number of elements */ + ) { + + SET_FNAME ( "H5PartGetStepAttribInfo" ); + h5part_int64_t herr; + + CHECK_FILEHANDLE( f ); + + herr = _H5Part_get_attrib_info ( + f->timegroup, + attrib_idx, + attrib_name, + len_of_attrib_name, + attrib_type, + attrib_nelem ); + if ( herr < 0 ) return herr; + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5part_attrib + + Gets the name, type and number of elements of the file attribute + specified by its index. + + This function can be used to retrieve all attributes bound to the + file \c f by looping from \c 0 to the number of attribute minus + one. The number of attributes bound to file \c f can be queried + by calling the function \c H5PartGetNumFileAttribs(). + + \return \c H5PART_SUCCESS or error code +*/ + +h5part_int64_t +H5PartGetFileAttribInfo ( + H5PartFile *f, /*!< [in] Handle to open file */ + const h5part_int64_t attrib_idx,/*!< [in] Index of attribute to get + infos about */ + char *attrib_name, /*!< [out] Name of attribute */ + const h5part_int64_t len_of_attrib_name, + /*!< [in] length of buffer \c name */ + h5part_int64_t *attrib_type, /*!< [out] Type of value. */ + h5part_int64_t *attrib_nelem /*!< [out] Number of elements */ + ) { + + SET_FNAME ( "H5PartGetFileAttribInfo" ); + hid_t group_id; + h5part_int64_t herr; + + CHECK_FILEHANDLE( f ); + + group_id = H5Gopen(f->file,"/"); + if ( group_id < 0 ) return HANDLE_H5G_OPEN_ERR( "/" ); + + herr = _H5Part_get_attrib_info ( + group_id, + attrib_idx, + attrib_name, + len_of_attrib_name, + attrib_type, + attrib_nelem ); + if ( herr < 0 ) return herr; + + herr = H5Gclose ( group_id ); + if ( herr < 0 ) return herr; + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5part_attrib + + Reads an attribute bound to current time-step. + + \return \c H5PART_SUCCESS or error code +*/ +h5part_int64_t +H5PartReadStepAttrib ( + H5PartFile *f, /*!< [in] Handle to open file */ + const char *attrib_name, /*!< [in] Name of attribute to read */ + void *attrib_value /*!< [out] Value of attribute */ + ) { + + SET_FNAME ( "H5PartReadStepAttrib" ); + + h5part_int64_t herr; + + CHECK_FILEHANDLE( f ); + + herr = _H5Part_read_attrib ( f->timegroup, attrib_name, attrib_value ); + if ( herr < 0 ) return herr; + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5part_attrib + + Reads an attribute bound to file \c f. + + \return \c H5PART_SUCCESS or error code +*/ +h5part_int64_t +H5PartReadFileAttrib ( + H5PartFile *f, + const char *attrib_name, + void *attrib_value + ) { + + SET_FNAME ( "H5PartReadFileAttrib" ); + + hid_t group_id; + h5part_int64_t herr; + + CHECK_FILEHANDLE( f ); + + group_id = H5Gopen(f->file,"/"); + if ( group_id < 0 ) return HANDLE_H5G_OPEN_ERR( "/" ); + + herr = _H5Part_read_attrib ( group_id, attrib_name, attrib_value ); + if ( herr < 0 ) return herr; + + herr = H5Gclose ( group_id ); + if ( herr < 0 ) return HANDLE_H5G_CLOSE_ERR; + + return H5PART_SUCCESS; +} + + +/*================== File Reading Routines =================*/ +/* + H5PartSetStep: + + + So you use this to random-access the file for a particular timestep. + Failure to explicitly set the timestep on each read will leave you + stuck on the same timestep for *all* of your reads. That is to say + the writes auto-advance the file pointer, but the reads do not + (they require explicit advancing by selecting a particular timestep). +*/ + +h5part_int64_t +_H5Part_set_step ( + H5PartFile *f, /*!< [in] Handle to open file */ + const h5part_int64_t step /*!< [in] Time-step to set. */ + ) { + + char name[128]; + + sprintf ( + name, + "%s#%0*lld", + f->groupname_step, f->stepno_width, (long long) step ); + herr_t herr = H5Gget_objinfo( f->file, name, 1, NULL ); + if ( (f->mode != H5PART_READ) && ( herr >= 0 ) ) { + return HANDLE_H5PART_STEP_EXISTS_ERR ( step ); + } + + if ( f->timegroup >= 0 ) { + herr = H5Gclose ( f->timegroup ); + if ( herr < 0 ) return HANDLE_H5G_CLOSE_ERR; + } + f->timegroup = -1; + f->timestep = step; + + if( f->mode == H5PART_READ ) { + _H5Part_print_info ( + "Proc[%d]: Set step to #%lld for file %lld", + f->myproc, + (long long)step, + (long long)(size_t) f ); + + f->timegroup = H5Gopen ( f->file, name ); + if ( f->timegroup < 0 ) return HANDLE_H5G_OPEN_ERR( name ); + } + else { + _H5Part_print_debug ( + "Proc[%d]: Create step #%lld for file %lld", + f->myproc, + (long long)step, + (long long)(size_t) f ); + + f->timegroup = H5Gcreate ( f->file, name, 0 ); + if ( f->timegroup < 0 ) return HANDLE_H5G_CREATE_ERR ( name ); + } + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5part_read + + Set the current time-step. + + When writing data to a file the current time step must be set first + (even if there is only one). In write-mode this function creates a new + time-step! You are not allowed to step to an already existing time-step. + This prevents you from overwriting existing data. Another consequence is, + that you \b must write all data before going to the next time-step. + + In read-mode you can use this function to random-access the file for a + particular timestep. + + \return \c H5PART_SUCCESS or error code +*/ +h5part_int64_t +H5PartSetStep ( + H5PartFile *f, /*!< [in] Handle to open file */ + const h5part_int64_t step /*!< [in] Time-step to set. */ + ) { + + SET_FNAME ( "H5PartSetStep" ); + + CHECK_FILEHANDLE ( f ); + + return _H5Part_set_step ( f, step ); +} + +/********************** query file structure *********************************/ + +/*! + \ingroup h5part_kernel + + Iterator for \c H5Giterate(). +*/ +herr_t +_H5Part_iteration_operator ( + hid_t group_id, /*!< [in] group id */ + const char *member_name,/*!< [in] group name */ + void *operator_data /*!< [in,out] data passed to the iterator */ + ) { + + struct _iter_op_data *data = (struct _iter_op_data*)operator_data; + herr_t herr; + H5G_stat_t objinfo; + + if ( data->type != H5G_UNKNOWN ) { + herr = H5Gget_objinfo ( group_id, member_name, 1, &objinfo ); + if ( herr < 0 ) return (herr_t)HANDLE_H5G_GET_OBJINFO_ERR ( member_name ); + + if ( objinfo.type != data->type ) + return 0;/* don't count, continue iteration */ + } + + if ( data->name && (data->stop_idx == data->count) ) { + memset ( data->name, 0, data->len ); + strncpy ( data->name, member_name, data->len-1 ); + + return 1; /* stop iteration */ + } + /* + count only if pattern is NULL or member name matches + */ + if ( !data->pattern || + (strncmp (member_name, data->pattern, strlen(data->pattern)) == 0) + ) { + data->count++; + } + return 0; /* continue iteration */ +} + +/*! + \ingroup h5part_kernel + + Iterator for \c H5Giterate(). +*/ +h5part_int64_t +_H5Part_get_num_objects ( + hid_t group_id, + const char *group_name, + const hid_t type + ) { + + return _H5Part_get_num_objects_matching_pattern ( + group_id, + group_name, + type, + NULL ); +} + +/*! + \ingroup h5part_kernel + + Iterator for \c H5Giterate(). +*/ +h5part_int64_t +_H5Part_get_num_objects_matching_pattern ( + hid_t group_id, + const char *group_name, + const hid_t type, + char * const pattern + ) { + + h5part_int64_t herr; + int idx = 0; + struct _iter_op_data data; + + memset ( &data, 0, sizeof ( data ) ); + data.type = type; + data.pattern = pattern; + + herr = H5Giterate ( group_id, group_name, &idx, + _H5Part_iteration_operator, &data ); + if ( herr < 0 ) return herr; + + return data.count; +} + +/*! + \ingroup h5part_kernel + + Iterator for \c H5Giterate(). +*/ +h5part_int64_t +_H5Part_get_object_name ( + hid_t group_id, + const char *group_name, + const hid_t type, + const h5part_int64_t idx, + char *obj_name, + const h5part_int64_t len_obj_name + ) { + + herr_t herr; + struct _iter_op_data data; + int iterator_idx = 0; + + memset ( &data, 0, sizeof ( data ) ); + data.stop_idx = (hid_t)idx; + data.type = type; + data.name = obj_name; + data.len = (size_t)len_obj_name; + + herr = H5Giterate ( group_id, group_name, &iterator_idx, + _H5Part_iteration_operator, + &data ); + if ( herr < 0 ) return (h5part_int64_t)herr; + + if ( herr == 0 ) HANDLE_H5PART_NOENTRY_ERR( group_name, + type, idx ); + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5part_read + + Query whether a particular step already exists in the file + \c f. + + It works for both reading and writing of files + + \return true or false +*/ +h5part_int64_t +H5PartHasStep ( + H5PartFile *f, /*!< [in] Handle to open file */ + h5part_int64_t step /*!< [in] Step number to query */ + ) { + + SET_FNAME ( "H5PartHasStep" ); + + CHECK_FILEHANDLE( f ); + + char name[128]; + sprintf ( name, "%s#%0*lld", f->groupname_step, f->stepno_width, (long long) step ); + herr_t herr = H5Gget_objinfo( f->file, name, 1, NULL ); + + return ( herr >= 0 ); +} + + +/*! + \ingroup h5part_read + + Get the number of time-steps that are currently stored in the file + \c f. + + It works for both reading and writing of files, but is probably + only typically used when you are reading. + + \return number of time-steps or error code +*/ +h5part_int64_t +H5PartGetNumSteps ( + H5PartFile *f /*!< [in] Handle to open file */ + ) { + + SET_FNAME ( "H5PartGetNumSteps" ); + + CHECK_FILEHANDLE( f ); + + return _H5Part_get_num_objects_matching_pattern ( + f->file, + "/", + H5G_UNKNOWN, + f->groupname_step ); +} + +/*! + \ingroup h5part_read + + Get the number of datasets that are stored at the current time-step. + + \return number of datasets in current timestep or error code +*/ + +h5part_int64_t +H5PartGetNumDatasets ( + H5PartFile *f /*!< [in] Handle to open file */ + ) { + + SET_FNAME ( "H5PartGetNumDatasets" ); + + char stepname[128]; + + CHECK_FILEHANDLE( f ); + + sprintf ( + stepname, + "%s#%0*lld", + f->groupname_step, f->stepno_width, (long long) f->timestep ); + + return _H5Part_get_num_objects ( f->file, stepname, H5G_DATASET ); +} + +/*! + \ingroup h5part_read + + This reads the name of a dataset specified by it's index in the current + time-step. + + If the number of datasets is \c n, the range of \c _index is \c 0 to \c n-1. + + \result \c H5PART_SUCCESS +*/ +h5part_int64_t +H5PartGetDatasetName ( + H5PartFile *f, /*!< [in] Handle to open file */ + const h5part_int64_t idx, /*!< [in] Index of the dataset */ + char *name, /*!< [out] Name of dataset */ + const h5part_int64_t len_of_name/*!< [in] Size of buffer \c name */ + ) { + + SET_FNAME ( "H5PartGetDatasetName" ); + + char stepname[128]; + + CHECK_FILEHANDLE ( f ); + CHECK_TIMEGROUP ( f ); + + sprintf ( + stepname, + "%s#%0*lld", + f->groupname_step, f->stepno_width, (long long) f->timestep ); + + return _H5Part_get_object_name ( + f->file, + stepname, + H5G_DATASET, + idx, + name, + len_of_name ); +} + +/*! + \ingroup h5part_read + + Gets the name, type and number of elements of a dataset specified by it's + index in the current time-step. + + Type is one of \c H5T_NATIVE_DOUBLE or \c H5T_NATIVE_INT64. + + \return \c H5PART_SUCCESS +*/ +h5part_int64_t +H5PartGetDatasetInfo ( + H5PartFile *f, /*!< [in] Handle to open file */ + const h5part_int64_t idx,/*!< [in] Index of the dataset */ + char *dataset_name, /*!< [out] Name of dataset */ + const h5part_int64_t len_dataset_name, + /*!< [in] Size of buffer \c dataset_name */ + h5part_int64_t *type, /*!< [out] Type of data in dataset */ + h5part_int64_t *nelem /*!< [out] Number of elements. */ + ) { + + SET_FNAME ( "H5PartGetDatasetInfo" ); + + h5part_int64_t herr; + hid_t dataset_id; + hid_t mytype; + char step_name[128]; + + CHECK_FILEHANDLE ( f ); + CHECK_TIMEGROUP ( f ); + + sprintf ( + step_name, + "%s#%0*lld", + f->groupname_step, f->stepno_width, (long long) f->timestep ); + + herr = _H5Part_get_object_name ( + f->file, + step_name, + H5G_DATASET, + idx, + dataset_name, + len_dataset_name ); + if ( herr < 0 ) return herr; + + *nelem = _H5Part_get_num_particles ( f ); + if ( *nelem < 0 ) return *nelem; + + dataset_id = H5Dopen ( f->timegroup, dataset_name ); + if ( dataset_id < 0 ) HANDLE_H5D_OPEN_ERR ( dataset_name ); + + mytype = H5Dget_type ( dataset_id ); + if ( mytype < 0 ) HANDLE_H5D_GET_TYPE_ERR; + + if(type) + *type = (h5part_int64_t) _H5Part_normalize_h5_type ( mytype ); + + herr = H5Tclose(mytype); + if ( herr < 0 ) HANDLE_H5T_CLOSE_ERR; + + herr = H5Dclose(dataset_id); + if ( herr < 0 ) HANDLE_H5D_CLOSE_ERR; + + return H5PART_SUCCESS; +} + +static hid_t +_get_diskshape_for_reading ( + H5PartFile *f, + hid_t dataset + ) { + + herr_t r; + + hid_t space = H5Dget_space(dataset); + if ( space < 0 ) return (hid_t)HANDLE_H5D_GET_SPACE_ERR; + + if ( H5PartHasView(f) ){ + hsize_t stride; + hsize_t count; +#ifdef HDF5V160 + hssize_t start; +#else + hsize_t start; +#endif + _H5Part_print_debug ( "Selection is available" ); + + /* so, is this selection inclusive or exclusive? */ + start = f->viewstart; + count = f->viewend - f->viewstart; /* to be inclusive */ + stride=1; + + /* now we select a subset */ + if ( f->diskshape > 0 ) { + r = H5Sselect_hyperslab ( + f->diskshape, H5S_SELECT_SET, + &start, &stride, &count, NULL); + if ( r < 0 ) return (hid_t)HANDLE_H5S_SELECT_HYPERSLAB_ERR; + } + /* now we select a subset */ + r = H5Sselect_hyperslab ( + space,H5S_SELECT_SET, + &start, &stride, &count, NULL ); + if ( r < 0 ) return (hid_t)HANDLE_H5S_SELECT_HYPERSLAB_ERR; + + _H5Part_print_debug ( + "Selection: range=%d:%d, npoints=%d s=%d", + (int)f->viewstart,(int)f->viewend, + (int)H5Sget_simple_extent_npoints(space), + (int)H5Sget_select_npoints(space) ); + } else { + _H5Part_print_debug ( "Selection" ); + } + return space; +} + +static hid_t +_get_memshape_for_reading ( + H5PartFile *f, + hid_t dataset + ) { + + if(H5PartHasView(f)) { + hsize_t dmax=H5S_UNLIMITED; + hsize_t len = f->viewend - f->viewstart; + hid_t r = H5Screate_simple(1,&len,&dmax); + if ( r < 0 ) return (hid_t)HANDLE_H5S_CREATE_SIMPLE_ERR ( len ); + return r; + } + else { + return H5S_ALL; + } +} + +h5part_int64_t +_H5Part_get_num_particles ( + H5PartFile *f /*!< [in] Handle to open file */ + ) { + + h5part_int64_t herr; + hid_t space_id; + hid_t dataset_id; + char dataset_name[128]; + char step_name[128]; + hsize_t nparticles; + + /* Get first dataset in current time-step */ + sprintf ( + step_name, + "%s#%0*lld", + f->groupname_step, f->stepno_width, (long long) f->timestep ); + + herr = _H5Part_get_object_name ( + f->file, + step_name, + H5G_DATASET, + 0, + dataset_name, sizeof (dataset_name) ); + if ( herr < 0 ) return herr; + + dataset_id = H5Dopen ( f->timegroup, dataset_name ); + if ( dataset_id < 0 ) + return HANDLE_H5D_OPEN_ERR ( dataset_name ); + + space_id = _get_diskshape_for_reading ( f, dataset_id ); + if ( space_id < 0 ) return (h5part_int64_t)space_id; + + if ( H5PartHasView ( f ) ) { + nparticles = H5Sget_select_npoints ( space_id ); + if ( nparticles < 0 ) return HANDLE_H5S_GET_SELECT_NPOINTS_ERR; + } + else { + nparticles = H5Sget_simple_extent_npoints ( space_id ); + if ( nparticles < 0 ) + return HANDLE_H5S_GET_SIMPLE_EXTENT_NPOINTS_ERR; + } + if ( space_id != H5S_ALL ) { + herr = H5Sclose ( space_id ); + if ( herr < 0 ) return HANDLE_H5S_CLOSE_ERR; + } + herr = H5Dclose ( dataset_id ); + if ( herr < 0 ) return HANDLE_H5D_CLOSE_ERR; + + return (h5part_int64_t) nparticles; +} + +/*! + \ingroup h5part_read + + This gets the number of particles stored in the current timestep. + It will arbitrarily select a time-step if you haven't already set + the timestep with \c H5PartSetStep(). + + \return number of particles in current timestep or an error + code. + */ +h5part_int64_t +H5PartGetNumParticles ( + H5PartFile *f /*!< [in] Handle to open file */ + ) { + + SET_FNAME ( "H5PartGetNumParticles" ); + + CHECK_FILEHANDLE( f ); + + if ( f->timegroup < 0 ) { + h5part_int64_t herr = _H5Part_set_step ( f, 0 ); + if ( herr < 0 ) return herr; + } + + return _H5Part_get_num_particles ( f ); +} + +static h5part_int64_t +_reset_view ( + H5PartFile *f /*!< [in] Handle to open file */ + ) { + + herr_t herr = 0; + + f->viewstart = -1; + f->viewend = -1; + if ( f->shape != 0 ){ + herr = H5Sclose(f->shape); + if ( herr < 0 ) return HANDLE_H5S_CLOSE_ERR; + f->shape=0; + } + if(f->diskshape!=0 && f->diskshape!=H5S_ALL){ + herr = H5Sclose(f->diskshape); + if ( herr < 0 ) return HANDLE_H5S_CLOSE_ERR; + f->diskshape=H5S_ALL; + } + f->diskshape = H5S_ALL; + if(f->memshape!=0 && f->memshape!=H5S_ALL){ + herr = H5Sclose ( f->memshape ); + if ( herr < 0 ) return HANDLE_H5S_CLOSE_ERR; + f->memshape=H5S_ALL; + } + return H5PART_SUCCESS; +} + +/*! + \ingroup h5part_read +*/ +h5part_int64_t +H5PartResetView ( + H5PartFile *f /*!< [in] Handle to open file */ + ) { + SET_FNAME ( "H5PartResetView" ); + + CHECK_FILEHANDLE( f ); + CHECK_READONLY_MODE ( f ); + + return _reset_view ( f ); +} + +/*! + \ingroup h5part_read +*/ +h5part_int64_t +H5PartHasView ( + H5PartFile *f /*!< [in] Handle to open file */ + ) { + SET_FNAME ( "H5PartResetView" ); + + CHECK_FILEHANDLE( f ); + CHECK_READONLY_MODE ( f ); + + return ( f->viewstart >= 0 ) && ( f->viewend >= 0 ); +} + +static h5part_int64_t +_set_view ( + H5PartFile *f, /*!< [in] Handle to open file */ + h5part_int64_t start, /*!< [in] Start particle */ + h5part_int64_t end /*!< [in] End particle */ + ) { + h5part_int64_t herr = 0; + hsize_t total; + hsize_t stride = 1; + hsize_t dmax = H5S_UNLIMITED; + + _H5Part_print_debug ( + "Set view (%lld,%lld).", + (long long)start,(long long)end); + + herr = _reset_view ( f ); + if ( herr < 0 ) return herr; + + if ( start == -1 && end == -1 ) return H5PART_SUCCESS; + + /* + View has been reset so H5PartGetNumParticles will tell + us the total number of particles. + + For now, we interpret start=-1 to mean 0 and + end==-1 to mean end of file + */ + total = (hsize_t) _H5Part_get_num_particles ( f ); + if ( total < 0 ) return HANDLE_H5PART_GET_NUM_PARTICLES_ERR ( total ); + + if ( start == -1 ) start = 0; + if ( end == -1 ) end = total; + + _H5Part_print_debug ( "Total nparticles=%lld", (long long)total ); + + /* so, is this selection inclusive or exclusive? + it appears to be inclusive for both ends of the range. + */ + if ( end < start ) { + _H5Part_print_warn ( + "Nonfatal error. " + "End of view (%lld) is less than start (%lld).", + (long long)end, (long long)start ); + end = start; /* ensure that we don't have a range error */ + } + /* setting up the new view */ + f->viewstart = start; + f->viewend = end; + f->nparticles = end - start + 1; + + /* declare overall datasize */ + f->shape = H5Screate_simple ( 1, &total, &total ); + if ( f->shape < 0 ) + return HANDLE_H5S_CREATE_SIMPLE_ERR ( total ); + + /* declare overall data size but then will select a subset */ + f->diskshape= H5Screate_simple ( 1, &total, &total ); + if ( f->diskshape < 0 ) + return HANDLE_H5S_CREATE_SIMPLE_ERR ( total ); + + /* declare local memory datasize */ + f->memshape = H5Screate_simple(1,&(f->nparticles),&dmax); + if ( f->memshape < 0 ) + return HANDLE_H5S_CREATE_SIMPLE_ERR ( f->nparticles ); + + herr = H5Sselect_hyperslab ( + f->diskshape, + H5S_SELECT_SET, + (hsize_t*)&start, + &stride, + &total, + NULL ); + if ( herr < 0 ) return HANDLE_H5S_SELECT_HYPERSLAB_ERR; + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5part_read + + For parallel I/O or for subsetting operations on the datafile, the + \c H5PartSetView() function allows you to define a subset of the total + particle dataset to read. The concept of "view" works for both serial + and for parallel I/O. The "view" will remain in effect until a new view + is set, or the number of particles in a dataset changes, or the view is + "unset" by calling \c H5PartSetView(file,-1,-1); + + Before you set a view, the \c H5PartGetNumParticles() will return the + total number of particles in the current time-step (even for the parallel + reads). However, after you set a view, it will return the number of + particles contained in the view. + + The range is inclusive (the start and the end index). + + \return \c H5PART_SUCCESS or error code +*/ +h5part_int64_t +H5PartSetView ( + H5PartFile *f, /*!< [in] Handle to open file */ + const h5part_int64_t start, /*!< [in] Start particle */ + const h5part_int64_t end /*!< [in] End particle */ + ) { + + SET_FNAME ( "H5PartSetView" ); + + CHECK_FILEHANDLE( f ); + CHECK_READONLY_MODE ( f ); + + if ( f->timegroup < 0 ) { + h5part_int64_t herr = _H5Part_set_step ( f, 0 ); + if ( herr < 0 ) return herr; + } + + return _set_view ( f, start, end ); +} + +/*! + \ingroup h5part_read + + Allows you to query the current view. Start and End + will be \c -1 if there is no current view established. + Use \c H5PartHasView() to see if the view is smaller than the + total dataset. + + \return the number of elements in the view +*/ +h5part_int64_t +H5PartGetView ( + H5PartFile *f, /*!< [in] Handle to open file */ + h5part_int64_t *start, /*!< [out] Start particle */ + h5part_int64_t *end /*!< [out] End particle */ + ) { + + SET_FNAME ( "H5PartGetView" ); + + CHECK_FILEHANDLE( f ); + + if ( f->timegroup < 0 ) { + h5part_int64_t herr = _H5Part_set_step ( f, 0 ); + if ( herr < 0 ) return herr; + } + + h5part_int64_t viewstart = 0; + h5part_int64_t viewend = 0; + + if ( f->viewstart >= 0 ) + viewstart = f->viewstart; + + if ( f->viewend >= 0 ) { + viewend = f->viewend; + } + else { + viewend = _H5Part_get_num_particles ( f ); + if ( viewend < 0 ) + return HANDLE_H5PART_GET_NUM_PARTICLES_ERR ( viewend ); + } + + if ( start ) *start = viewstart; + if ( end ) *end = viewend; + + return viewend - viewstart; +} + +/*! + \ingroup h5part_read + + If it is too tedious to manually set the start and end coordinates + for a view, the \c H5SetCanonicalView() will automatically select an + appropriate domain decomposition of the data arrays for the degree + of parallelism and set the "view" accordingly. + + \return H5PART_SUCCESS or error code +*/ +/* + \note + There is a bug in this function: + If (NumParticles % f->nprocs) != 0 then + the last (NumParticles % f->nprocs) particles are not handled! +*/ + +h5part_int64_t +H5PartSetCanonicalView ( + H5PartFile *f /*!< [in] Handle to open file */ + ) { + + SET_FNAME ( "H5PartSetCanonicalView" ); + + h5part_int64_t herr; + + CHECK_FILEHANDLE( f ); + CHECK_READONLY_MODE ( f ) + + herr = _reset_view ( f ); + if ( herr < 0 ) return HANDLE_H5PART_SET_VIEW_ERR( herr, -1, -1 ); + +#ifdef PARALLEL_IO + h5part_int64_t start = 0; + h5part_int64_t end = 0; + h5part_int64_t n = 0; + int i = 0; + + if ( f->timegroup < 0 ) { + herr = _H5Part_set_step ( f, 0 ); + if ( herr < 0 ) return herr; + } + n = _H5Part_get_num_particles ( f ); + if ( n < 0 ) return HANDLE_H5PART_GET_NUM_PARTICLES_ERR ( n ); + /* + now lets query the attributes for this group to see if there + is a 'pnparticles' group that contains the offsets for the + processors. + */ + if ( _H5Part_read_attrib ( + f->timegroup, + "pnparticles", f->pnparticles ) < 0) { + /* + Attribute "pnparticles" is not available. So + subdivide the view into NP mostly equal pieces + */ + n /= f->nprocs; + for ( i=0; inprocs; i++ ) { + f->pnparticles[i] = n; + } + } + + for ( i = 0; i < f->myproc; i++ ){ + start += f->pnparticles[i]; + } + end = start + f->pnparticles[f->myproc] - 1; + herr = _set_view ( f, start, end ); + if ( herr < 0 ) return HANDLE_H5PART_SET_VIEW_ERR ( herr, start, end ); + +#endif + + return H5PART_SUCCESS; +} + +static h5part_int64_t +_read_data ( + H5PartFile *f, /*!< [in] Handle to open file */ + const char *name, /*!< [in] Name to associate dataset with */ + void *array, /*!< [out] Array of data */ + const hid_t type + ) { + + herr_t herr; + hid_t dataset_id; + hid_t space_id; + hid_t memspace_id; + + if ( f->timegroup < 0 ) { + h5part_int64_t h5err = _H5Part_set_step ( f, f->timestep ); + if ( h5err < 0 ) return h5err; + } + dataset_id = H5Dopen ( f->timegroup, name ); + if ( dataset_id < 0 ) return HANDLE_H5D_OPEN_ERR ( name ); + + space_id = _get_diskshape_for_reading ( f, dataset_id ); + if ( space_id < 0 ) return (h5part_int64_t)space_id; + + memspace_id = _get_memshape_for_reading ( f, dataset_id ); + if ( memspace_id < 0 ) return (h5part_int64_t)memspace_id; + +#ifdef INDEPENDENT_IO + herr = H5Dread ( + dataset_id, + type, + memspace_id, /* shape/size of data in memory (the + complement to disk hyperslab) */ + space_id, /* shape/size of data on disk + (get hyperslab if needed) */ + H5P_DEFAULT, /* ignore... its for parallel reads */ + array ); +#else + herr = H5Dread ( + dataset_id, + type, + memspace_id, /* shape/size of data in memory (the + complement to disk hyperslab) */ + space_id, /* shape/size of data on disk + (get hyperslab if needed) */ + f->xfer_prop, /* ignore... its for parallel reads */ + array ); +#endif + + if ( herr < 0 ) return HANDLE_H5D_READ_ERR ( name, f->timestep ); + + if ( space_id != H5S_ALL ) { + herr = H5Sclose (space_id ); + if ( herr < 0 ) return HANDLE_H5S_CLOSE_ERR; + } + + if ( memspace_id != H5S_ALL ) + herr = H5Sclose ( memspace_id ); + if ( herr < 0 ) return HANDLE_H5S_CLOSE_ERR; + + herr = H5Dclose ( dataset_id ); + if ( herr < 0 ) return HANDLE_H5D_CLOSE_ERR; + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5part_read + + Read array of 64 bit floating point data from file. + + When retrieving datasets from disk, you ask for them + by name. There are no restrictions on naming of arrays, + but it is useful to arrive at some common naming + convention when sharing data with other groups. + + \return \c H5PART_SUCCESS or error code +*/ +h5part_int64_t +H5PartReadDataFloat64 ( + H5PartFile *f, /*!< [in] Handle to open file */ + const char *name, /*!< [in] Name to associate dataset with */ + h5part_float64_t *array /*!< [out] Array of data */ + ) { + + SET_FNAME ( "H5PartReadDataFloat64" ); + + h5part_int64_t herr; + + CHECK_FILEHANDLE( f ); + + herr = _read_data ( f, name, array, H5T_NATIVE_DOUBLE ); + if ( herr < 0 ) return herr; + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5part_read + + Read array of 64 bit floating point data from file. + + When retrieving datasets from disk, you ask for them + by name. There are no restrictions on naming of arrays, + but it is useful to arrive at some common naming + convention when sharing data with other groups. + + \return \c H5PART_SUCCESS or error code +*/ +h5part_int64_t +H5PartReadDataInt64 ( + H5PartFile *f, /*!< [in] Handle to open file */ + const char *name, /*!< [in] Name to associate dataset with */ + h5part_int64_t *array /*!< [out] Array of data */ + ) { + + SET_FNAME ( "H5PartReadDataInt64" ); + + h5part_int64_t herr; + + CHECK_FILEHANDLE( f ); + + herr = _read_data ( f, name, array, H5T_NATIVE_INT64 ); + if ( herr < 0 ) return herr; + + return H5PART_SUCCESS; +} + +/*! + \ingroup h5part_read + + This is the mongo read function that pulls in all of the data for a + given timestep in one shot. It also takes the timestep as an argument + and will call \c H5PartSetStep() internally so that you don't have to + make that call separately. + + \note + See also \c H5PartReadDataInt64() and \c H5PartReadDataFloat64() if you want + to just read in one of the many datasets. + + \return \c H5PART_SUCCESS or error code +*/ +h5part_int64_t +H5PartReadParticleStep ( + H5PartFile *f, /*!< [in] Handle to open file */ + h5part_int64_t step, /*!< [in] Step to read */ + h5part_float64_t *x, /*!< [out] Buffer for dataset named "x" */ + h5part_float64_t *y, /*!< [out] Buffer for dataset named "y" */ + h5part_float64_t *z, /*!< [out] Buffer for dataset named "z" */ + h5part_float64_t *px, /*!< [out] Buffer for dataset named "px" */ + h5part_float64_t *py, /*!< [out] Buffer for dataset named "py" */ + h5part_float64_t *pz, /*!< [out] Buffer for dataset named "pz" */ + h5part_int64_t *id /*!< [out] Buffer for dataset named "id" */ + ) { + + SET_FNAME ( "H5PartReadParticleStep" ); + h5part_int64_t herr; + + CHECK_FILEHANDLE( f ); + + herr = _H5Part_set_step ( f, step ); + if ( herr < 0 ) return herr; + + herr = _read_data ( f, "x", (void*)x, H5T_NATIVE_DOUBLE ); + if ( herr < 0 ) return herr; + + herr = _read_data ( f, "y", (void*)y, H5T_NATIVE_DOUBLE ); + if ( herr < 0 ) return herr; + + herr = _read_data ( f, "z", (void*)z, H5T_NATIVE_DOUBLE ); + if ( herr < 0 ) return herr; + + herr = _read_data ( f, "px", (void*)px, H5T_NATIVE_DOUBLE ); + if ( herr < 0 ) return herr; + + herr = _read_data ( f, "py", (void*)py, H5T_NATIVE_DOUBLE ); + if ( herr < 0 ) return herr; + + herr = _read_data ( f, "pz", (void*)pz, H5T_NATIVE_DOUBLE ); + if ( herr < 0 ) return herr; + + herr = _read_data ( f, "id", (void*)id, H5T_NATIVE_INT64 ); + if ( herr < 0 ) return herr; + + return H5PART_SUCCESS; +} + +/****************** error handling ******************/ + +/*! + \ingroup h5part_errhandle + + Set verbosity level to \c level. + + \return \c H5PART_SUCCESS +*/ +h5part_int64_t +H5PartSetVerbosityLevel ( + h5part_int64_t level + ) { + + _debug = (unsigned int)level; + return H5PART_SUCCESS; +} + +/*! + \ingroup h5part_errhandle + + Set error handler to \c handler. + + \return \c H5PART_SUCCESS +*/ +h5part_int64_t +H5PartSetErrorHandler ( + h5part_error_handler handler + ) { + _err_handler = handler; + return H5PART_SUCCESS; +} + +/*! + \ingroup h5part_errhandle + + Get current error handler. + + \return Pointer to error handler. +*/ +h5part_error_handler +H5PartGetErrorHandler ( + void + ) { + return _err_handler; +} + +/*! + \ingroup h5part_errhandle + + Get last error code. + + \return error code +*/ +h5part_int64_t +H5PartGetErrno ( + void + ) { + return _h5part_errno; +} + +/*! + \ingroup h5part_errhandle + + This is the H5Part default error handler. If an error occures, an + error message will be printed and an error number will be returned. + + \return value given in \c eno +*/ +h5part_int64_t +H5PartReportErrorHandler ( + const char *funcname, + const h5part_int64_t eno, + const char *fmt, + ... + ) { + + _h5part_errno = eno; + if ( _debug > 0 ) { + va_list ap; + va_start ( ap, fmt ); + _H5Part_vprint_error ( fmt, ap ); + va_end ( ap ); + } + return _h5part_errno; +} + +/*! + \ingroup h5part_errhandle + + If an error occures, an error message will be printed and the + program exists with the error code given in \c eno. +*/ +h5part_int64_t +H5PartAbortErrorHandler ( + const char *funcname, + const h5part_int64_t eno, + const char *fmt, + ... + ) { + + _h5part_errno = eno; + if ( _debug > 0 ) { + va_list ap; + va_start ( ap, fmt ); + fprintf ( stderr, "%s: ", funcname ); + vfprintf ( stderr, fmt, ap ); + fprintf ( stderr, "\n" ); + } + exit (-(int)_h5part_errno); +} + +/*! + Initialize H5Part +*/ +static h5part_int64_t +_init ( void ) { + static int __init = 0; + + herr_t r5; + if ( ! __init ) { + r5 = H5Eset_auto ( _h5_error_handler, NULL ); + if ( r5 < 0 ) return H5PART_ERR_INIT; + } + __init = 1; + return H5PART_SUCCESS; +} +/*! @} */ + +static herr_t +_h5_error_handler ( void* unused ) { + + if ( _debug >= 5 ) { + H5Eprint (stderr); + } + return 0; +} + +static void +_vprint ( + FILE* f, + const char *prefix, + const char *fmt, + va_list ap + ) { + char *fmt2 = (char*)malloc( strlen ( prefix ) +strlen ( fmt ) + strlen ( __funcname ) + 16 ); + if ( fmt2 == NULL ) return; + sprintf ( fmt2, "%s: %s: %s\n", prefix, __funcname, fmt ); + vfprintf ( stderr, fmt2, ap ); + free ( fmt2 ); +} + +void +_H5Part_vprint_error ( + const char *fmt, + va_list ap + ) { + + if ( _debug < 1 ) return; + _vprint ( stderr, "E", fmt, ap ); +} + +void +_H5Part_print_error ( + const char *fmt, + ... + ) { + + va_list ap; + va_start ( ap, fmt ); + _H5Part_vprint_error ( fmt, ap ); + va_end ( ap ); +} + +void +_H5Part_vprint_warn ( + const char *fmt, + va_list ap + ) { + + if ( _debug < 2 ) return; + _vprint ( stderr, "W", fmt, ap ); +} + +void +_H5Part_print_warn ( + const char *fmt, + ... + ) { + + va_list ap; + va_start ( ap, fmt ); + _H5Part_vprint_warn ( fmt, ap ); + va_end ( ap ); +} + +void +_H5Part_vprint_info ( + const char *fmt, + va_list ap + ) { + + if ( _debug < 3 ) return; + _vprint ( stdout, "I", fmt, ap ); +} + +void +_H5Part_print_info ( + const char *fmt, + ... + ) { + + va_list ap; + va_start ( ap, fmt ); + _H5Part_vprint_info ( fmt, ap ); + va_end ( ap ); +} + +void +_H5Part_vprint_debug ( + const char *fmt, + va_list ap + ) { + + if ( _debug < 4 ) return; + _vprint ( stdout, "D", fmt, ap ); +} + +void +_H5Part_print_debug ( + const char *fmt, + ... + ) { + + va_list ap; + va_start ( ap, fmt ); + _H5Part_vprint_debug ( fmt, ap ); + va_end ( ap ); +} + +void +_H5Part_set_funcname ( + char * const fname + ) { + __funcname = fname; +} + +const char * +_H5Part_get_funcname ( + void + ) { + return __funcname; +} diff --git a/trunk/src/H5Part.h b/trunk/src/H5Part.h new file mode 100644 index 0000000..de79fcc --- /dev/null +++ b/trunk/src/H5Part.h @@ -0,0 +1,319 @@ +#ifndef _H5Part_H_ +#define _H5Part_H_ + +#include +#include +#include +#ifdef PARALLEL_IO +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#include "H5PartTypes.h" + + +#define H5PART_SUCCESS 0 +#define H5PART_ERR_NOMEM -12 +#define H5PART_ERR_INVAL -22 +#define H5PART_ERR_BADFD -77 + +#define H5PART_ERR_INIT -200 +#define H5PART_ERR_NOENTRY -201 + +#define H5PART_ERR_MPI -201 +#define H5PART_ERR_HDF5 -202 + + +#define H5PART_READ 0x01 +#define H5PART_WRITE 0x02 +#define H5PART_APPEND 0x03 + + +#define H5PART_INT64 ((h5part_int64_t)H5T_NATIVE_INT64) +#define H5PART_FLOAT64 ((h5part_int64_t)H5T_NATIVE_DOUBLE) +#define H5PART_CHAR ((h5part_int64_t)H5T_NATIVE_CHAR) + +/*========== File Opening/Closing ===============*/ +H5PartFile* +H5PartOpenFile( + const char *filename, + const unsigned flags + ); + +#define H5PartOpenFileSerial(x,y) H5PartOpenFile(x,y) + +#ifdef PARALLEL_IO +H5PartFile* +H5PartOpenFileParallel ( + const char *filename, + const unsigned flags, + MPI_Comm communicator + ); +#endif + + +h5part_int64_t +H5PartCloseFile ( + H5PartFile *f + ); + + +/*============== File Writing Functions ==================== */ +h5part_int64_t +H5PartDefineStepName ( + H5PartFile *f, + const char *name, + const h5part_int64_t width + ); + +h5part_int64_t +H5PartSetNumParticles ( + H5PartFile *f, + const h5part_int64_t nparticles + ); + +h5part_int64_t +H5PartWriteDataFloat64 ( + H5PartFile *f, + const char *name, + const h5part_float64_t *array + ); + +h5part_int64_t +H5PartWriteDataInt64 ( + H5PartFile *f, + const char *name, + const h5part_int64_t *array + ); + +/*================== File Reading Routines =================*/ +h5part_int64_t +H5PartSetStep ( + H5PartFile *f, + const h5part_int64_t step + ); + +h5part_int64_t +H5PartHasStep ( + H5PartFile *f, + const h5part_int64_t step + ); + +h5part_int64_t +H5PartGetNumSteps ( + H5PartFile *f + ); + +h5part_int64_t +H5PartGetNumDatasets ( + H5PartFile *f + ); + +h5part_int64_t +H5PartGetDatasetName ( + H5PartFile *f, + const h5part_int64_t idx, + char *name, + const h5part_int64_t maxlen + ); + +h5part_int64_t +H5PartGetDatasetInfo ( + H5PartFile *f, + const h5part_int64_t idx, + char *name, + const h5part_int64_t maxlen, + h5part_int64_t *type, + h5part_int64_t *nelem); + + +h5part_int64_t +H5PartGetNumParticles ( + H5PartFile *f + ); + +h5part_int64_t +H5PartSetView ( + H5PartFile *f, + const h5part_int64_t start, + const h5part_int64_t end + ); + + +h5part_int64_t +H5PartGetView ( + H5PartFile *f, + h5part_int64_t *start, + h5part_int64_t *end + ); + +h5part_int64_t +H5PartHasView ( + H5PartFile *f + ); + +h5part_int64_t +H5PartResetView ( + H5PartFile *f + ); + +h5part_int64_t +H5PartSetCanonicalView ( + H5PartFile *f + ); + +h5part_int64_t +H5PartReadDataFloat64( + H5PartFile *f, + const char *name, + h5part_float64_t *array + ); + +h5part_int64_t +H5PartReadDataInt64 ( + H5PartFile *f, + const char *name, + h5part_int64_t *array + ); + +h5part_int64_t +H5PartReadParticleStep ( + H5PartFile *f, + const h5part_int64_t step, + h5part_float64_t *x, /* particle positions */ + h5part_float64_t *y, + h5part_float64_t *z, + h5part_float64_t *px, /* particle momenta */ + h5part_float64_t *py, + h5part_float64_t *pz, + h5part_int64_t *id /* and phase */ + ); + +/**********==============Attributes Interface============***************/ +/* currently there is file attributes: Attributes bound to the file + and step attributes which are bound to the current timestep. You + must set the timestep explicitly before writing the attributes (just + as you must do when you write a new dataset. Currently there are no + attributes that are bound to a particular data array, but this could + easily be done if required. +*/ +h5part_int64_t +H5PartWriteStepAttrib ( + H5PartFile *f, + const char *attrib_name, + const h5part_int64_t attrib_type, + const void *attrib_value, + const h5part_int64_t attrib_nelem + ); + +h5part_int64_t +H5PartWriteFileAttrib ( + H5PartFile *f, + const char *attrib_name, + const h5part_int64_t attrib_type, + const void *attrib_value, + const h5part_int64_t attrib_nelem + ); + +h5part_int64_t +H5PartWriteFileAttribString ( + H5PartFile *f, + const char *name, + const char *attrib + ); + +h5part_int64_t +H5PartWriteStepAttribString ( + H5PartFile *f, + const char *name, + const char *attrib + ); + +h5part_int64_t +H5PartGetNumStepAttribs ( /* for current filestep */ + H5PartFile *f + ); + +h5part_int64_t +H5PartGetNumFileAttribs ( + H5PartFile *f + ); + +h5part_int64_t +H5PartGetStepAttribInfo ( + H5PartFile *f, + const h5part_int64_t attrib_idx, + char *attrib_name, + const h5part_int64_t len_of_attrib_name, + h5part_int64_t *attrib_type, + h5part_int64_t *attrib_nelem + ); + +h5part_int64_t +H5PartGetFileAttribInfo ( + H5PartFile *f, + const h5part_int64_t idx, + char *name, + const h5part_int64_t maxnamelen, + h5part_int64_t *type, + h5part_int64_t *nelem + ); + +h5part_int64_t +H5PartReadStepAttrib ( + H5PartFile *f, + const char *name, + void *data + ); + +h5part_int64_t +H5PartReadFileAttrib ( + H5PartFile *f, + const char *name, + void *data + ); + +h5part_int64_t +H5PartSetVerbosityLevel ( + const h5part_int64_t level + ); + +h5part_int64_t +H5PartSetErrorHandler ( + const h5part_error_handler handler + ); + +h5part_int64_t +H5PartGetErrno ( + void + ); + +h5part_error_handler +H5PartGetErrorHandler ( + void + ); + +h5part_int64_t +H5PartReportErrorHandler ( + const char *funcname, + const h5part_int64_t eno, + const char *fmt, + ... + ); + +h5part_int64_t +H5PartAbortErrorHandler ( + const char *funcname, + const h5part_int64_t eno, + const char *fmt, + ... + ); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/trunk/src/H5PartErrors.h b/trunk/src/H5PartErrors.h new file mode 100644 index 0000000..3e995b1 --- /dev/null +++ b/trunk/src/H5PartErrors.h @@ -0,0 +1,326 @@ +#ifndef __H5PARTERRORS_H +#define __H5PARTERRORS_H + + +/***************** Error Handling ***************/ + +#define CHECK_FILEHANDLE( f ) \ + if ( _file_is_valid ( f ) != H5PART_SUCCESS ) \ + return HANDLE_H5PART_BADFD_ERR; + +#define CHECK_WRITABLE_MODE( f ) \ + if ( f->mode==H5PART_READ ) \ + return (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_INVAL, \ + "Attempting to write to read-only file" ); + +#define CHECK_READONLY_MODE( f ) \ + if ( ! f->mode==H5PART_READ ) \ + return (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_INVAL, \ + "Operation is not allowed on writable files." ); + +#define CHECK_TIMEGROUP( f ) \ + if ( f->timegroup <= 0 ) \ + return (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_INVAL, \ + "Timegroup <= 0."); + +/**************** H5Part *********************/ + +#define HANDLE_H5PART_BADFD_ERR \ + (*_err_handler)( \ + _H5Part_get_funcname(), \ + H5PART_ERR_BADFD, \ + "Called with bad filehandle." ); + +#define HANDLE_H5PART_INIT_ERR \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_INIT, \ + "Cannot initialize H5Part." ); + +#define HANDLE_H5PART_NOMEM_ERR \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_NOMEM, \ + "Out of memory." ); + +#define HANDLE_H5PART_SETSTEP_ERR( rc, step ) \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + rc, \ + "Cannont set time-step to %lld.", (long long)step ); + +#define HANDLE_H5PART_FILE_ACCESS_TYPE_ERR( flags ) \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_INVAL, \ + "Invalid file access type \"%d\".", flags); + +#define HANDLE_H5PART_STEP_EXISTS_ERR( step ) \ + (*_err_handler)( \ + _H5Part_get_funcname(), \ + H5PART_ERR_INVAL, \ + "Step #%lld already exists, step cannot be set to an existing" \ + " step in write and append mode", (long long)step ); + +#define HANDLE_H5PART_SET_VIEW_ERR( rc, start, end ) \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + rc, \ + "Cannot set view to (%lld, %lld).", \ + (long long)start, (long long)end ); + +#define HANDLE_H5PART_GET_NUM_PARTICLES_ERR( rc ) \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + rc, \ + "Cannot get number of particles." ); + +#define HANDLE_H5PART_NOENTRY_ERR( group_name, type, idx ) \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_NOENTRY, \ + "No entry with index %lld and type %d in group %s!", \ + (long long)idx, type, group_name ); + +/**************** HDF5 *********************/ +/* H5A: Attribute */ +#define HANDLE_H5A_CLOSE_ERR \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot terminate access to attribute." ); + +#define HANDLE_H5A_CREATE_ERR( s ) \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot create attribute \"%s\".", s ); + +#define HANDLE_H5A_GET_NAME_ERR \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot get attribute name." ); + +#define HANDLE_H5A_GET_NUM_ATTRS_ERR \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot get number of attributes." ); + +#define HANDLE_H5A_GET_SPACE_ERR \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot get a copy of dataspace for attribute." ); + +#define HANDLE_H5A_GET_TYPE_ERR \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot get attribute datatype." ); + +#define HANDLE_H5A_OPEN_IDX_ERR( n ) \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot open attribute specified by index \"%lld\".", \ + (long long)n ); + +#define HANDLE_H5A_OPEN_NAME_ERR( s ) \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot open attribute specified by name \"%s\".", s ); + +#define HANDLE_H5A_READ_ERR \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot read attribute" ); + +#define HANDLE_H5A_WRITE_ERR( s ) \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot write attribute \"%s\".", s ); + +/* H5D: Dataset */ +#define HANDLE_H5D_CLOSE_ERR \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Close of dataset failed." ); + +#define HANDLE_H5D_CREATE_ERR( s, n ) \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot create dataset for name \"%s\", step \"%lld\".", \ + s, (long long) n ); + +#define HANDLE_H5D_GET_SPACE_ERR \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot get dataspace identifier."); + +#define HANDLE_H5D_GET_TYPE_ERR \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot determine dataset type."); + +#define HANDLE_H5D_OPEN_ERR( s ) \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot open dataset \"%s\".", s ); + +#define HANDLE_H5D_READ_ERR( s, n ) \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Read from dataset \"%s\" failed, step \"%lld\".", \ + s, (long long) n ); + +#define HANDLE_H5D_WRITE_ERR( s, n ) \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Write to dataset \"%s\" failed, step \"%lld\".", \ + s, (long long)n ); + +/* H5F: file */ +#define HANDLE_H5F_CLOSE_ERR \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot terminate access to file." ); + +#define HANDLE_H5F_OPEN_ERR( filename, flags ) \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot open file \"%s\" with mode \"%d\"", filename, flags ); + + + +/* H5G: group */ +#define HANDLE_H5G_CLOSE_ERR \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot terminate access to datagroup." ); + +#define HANDLE_H5G_CREATE_ERR( s ) \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot create datagroup \"%s\".", s ); + +#define HANDLE_H5G_GET_OBJINFO_ERR( s ) \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot get information about object \"%s\".", s ); + +#define HANDLE_H5G_OPEN_ERR( s ) \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot open group \"%s\".", s ); + + +/* H5P: property */ +#define HANDLE_H5P_CLOSE_ERR( s ) \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot terminate access to property list \"%s\".", s ); + +#define HANDLE_H5P_CREATE_ERR \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot create property list." ); + +#define HANDLE_H5P_SET_DXPL_MPIO_ERR \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "MPI: Cannot set data transfer mode." ); + + +#define HANDLE_H5P_SET_FAPL_MPIO_ERR \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot store IO communicator information to the " \ + "file access property list."); + +/* H5S: dataspace */ +#define HANDLE_H5S_CREATE_SIMPLE_ERR( n ) \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot create dataspace with len \"%lld\".", (long long) n ); + +#define HANDLE_H5S_CLOSE_ERR \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot terminate access to dataspace." ); + +#define HANDLE_H5S_GET_SELECT_NPOINTS_ERR \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot determine the number of elements in dataspace selection." ); + +#define HANDLE_H5S_GET_SIMPLE_EXTENT_NPOINTS_ERR \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot determine number of elements in dataspace." ); + +#define HANDLE_H5S_SELECT_HYPERSLAB_ERR \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot set select hyperslap region or add the specified region" ); + +/* H5T: type */ +#define HANDLE_H5T_CLOSE_ERR \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_HDF5, \ + "Cannot release datatype." ); + + +/* MPI */ +#define HANDLE_MPI_ALLGATHER_ERR \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_MPI, \ + "Cannot gather data." ); + +#define HANDLE_MPI_COMM_SIZE_ERR \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_MPI, \ + "Cannot get number of processes in my group." ); + +#define HANDLE_MPI_COMM_RANK_ERR \ + (*_err_handler) ( \ + _H5Part_get_funcname(), \ + H5PART_ERR_MPI, \ + "Cannot get rank of the calling process in my group." ); + +#endif diff --git a/trunk/src/H5PartF.c b/trunk/src/H5PartF.c new file mode 100755 index 0000000..17f1681 --- /dev/null +++ b/trunk/src/H5PartF.c @@ -0,0 +1,825 @@ +#include "H5Part.h" +#include "Underscore.h" +#include + +#if defined(F77_SINGLE_UNDERSCORE) +#define F77NAME(a,b) a +#elif defined(F77_CRAY_UNDERSCORE) +#define F77NAME(a,b) b +#elif defined(F77_NO_UNDERSCORE) +#else +#error Error, no way to determine how to construct fortran bindings +#endif + +#if ! defined(F77_NO_UNDERSCORE) + +/* open/close interface */ +#define h5pt_openr F77NAME ( \ + h5pt_openr_, \ + H5PT_OPENR ) +#define h5pt_openw F77NAME ( \ + h5pt_openw_, \ + H5PT_OPENW ) +#define h5pt_opena F77NAME ( \ + h5pt_opena_, \ + H5PT_OPENA ) +#define h5pt_openr_par F77NAME ( \ + h5pt_openr_par_, \ + H5PT_OPENR_PAR ) +#define h5pt_openw_par F77NAME ( \ + h5pt_openw_par_, \ + H5PT_OPENW_PAR ) +#define h5pt_opena_par F77NAME ( \ + h5pt_opena_par_, \ + H5PT_OPENA_PAR ) +#define h5pt_close F77NAME ( \ + h5pt_close_, \ + H5PT_CLOSE) + +/* writing interface */ +#define h5pt_setnpoints F77NAME ( \ + h5pt_setnpoints_, \ + H5PT_SETNPOINTS ) +#define h5pt_setstep F77NAME ( \ + h5pt_setstep_, \ + H5PT_SETSTEP ) +#define h5pt_writedata_r8 F77NAME ( \ + h5pt_writedata_r8_, \ + H5PT_WRITEDATA_R8 ) +#define h5pt_writedata_i8 F77NAME ( \ + h5pt_writedata_i8_, \ + H5PT_WRITEDATA_I8 ) + +/* Reading interface (define dataset, step, particles, attributes) */ +#define h5pt_getnsteps F77NAME ( \ + h5pt_getnsteps_, \ + H5PT_GETNSTEPS ) +#define h5pt_getndatasets F77NAME ( \ + h5pt_getndatasets_, \ + H5PT_GETNDATASETS ) +#define h5pt_getnpoints F77NAME ( \ + h5pt_getnpoints_, \ + H5PT_GETNPOINTS ) +#define h5pt_getdatasetname F77NAME ( \ + h5pt_getdatasetname_, \ + H5PT_GETDATASETNAME ) +#define h5pt_getnumpoints F77NAME ( \ + h5pt_getnumpoints_, \ + H5PT_GETNUMPOINTS ) + +/* Views and parallelism */ +#define h5pt_setview F77NAME ( \ + h5pt_setview_, \ + H5PT_SETVIEW ) +#define h5pt_resetview F77NAME ( \ + h5pt_resetview_, \ + H5PT_RESETVIEW ) +#define h5pt_hasview F77NAME ( \ + h5pt_hasview_, \ + H5PT_HASVIEW ) +#define h5pt_getview F77NAME ( \ + h5pt_getview_, \ + H5PT_GETVIEW ) + +/* Reading data */ +#define h5pt_readdata_r8 F77NAME ( \ + h5pt_readdata_r8_, \ + H5PT_READDATA_R8 ) +#define h5pt_readdata_i8 F77NAME ( \ + h5pt_readdata_i8_, \ + H5PT_READDATA_I8 ) +#define h5pt_readdata F77NAME ( \ + h5pt_readdata_, \ + H5PT_READDATA ) + +/* Writing attributes */ +#define h5pt_writefileattrib_r8 F77NAME ( \ + h5pt_writefileattrib_r8_, \ + H5PT_WRITEFILEATTRIB_R8 ) +#define h5pt_writefileattrib_i8 F77NAME ( \ + h5pt_writefileattrib_i8_, \ + H5PT_WRITEFILEATTRIB_I8 ) +#define h5pt_writefileattrib_string F77NAME ( \ + h5pt_writefileattrib_string_, \ + H5PT_writefileattrib_string ) +#define h5pt_writestepattrib_r8 F77NAME ( \ + h5pt_writestepattrib_r8_, \ + H5PT_WRITESTEPATTRIB_R8 ) +#define h5pt_writestepattrib_i8 F77NAME ( \ + h5pt_writestepattrib_i8_, \ + H5PT_WRITESTEPATTRIB_I8 ) +#define h5pt_writestepattrib_string F77NAME ( \ + h5pt_writestepattrib_string_, \ + H5PT_WRITESTEPATTRIB_STRING ) + +/* Reading attributes */ +#define h5pt_getnstepattribs F77NAME ( \ + h5pt_getnstepattribs_, \ + H5PT_GETNSTEPATTRIBS ) +#define h5pt_getnfileattribs F77NAME ( \ + h5pt_getnfileattribs_, \ + H5PT_GETNFILEATTRIBS ) +#define h5pt_getstepattribinfo F77NAME ( \ + h5pt_getstepattribinfo_, \ + H5PT_GETSTEPATTRIBINFO ) +#define h5pt_getfileattribinfo F77NAME ( \ + h5pt_getfileattribinfo_, \ + H5PT_GETFILEATTRIBINFO ) +#define h5pt_readstepattrib F77NAME ( \ + h5pt_readstepattrib_, \ + H5PT_READSTEPATTRIB ) +#define h5pt_readstepattrib_r8 F77NAME ( \ + h5pt_readstepattrib_r8_, \ + H5PT_READSTEPATTRIB_R8 ) +#define h5pt_readstepattrib_i8 F77NAME ( \ + h5pt_readstepattrib_i8_, \ + H5PT_READSTEPATTRIB_I8 ) +#define h5pt_readstepattrib_string F77NAME ( \ + h5pt_readstepattrib_string_, \ + H5PT_READSTEPATTRIB_STRING ) +#define h5pt_readfileattrib F77NAME ( \ + h5pt_readfileattrib_, \ + H5PT_READFILEATTRIB ) +#define h5pt_readfileattrib_r8 F77NAME ( \ + h5pt_readfileattrib_r8_, \ + H5PT_READFILEATTRIB_R8 ) +#define h5pt_readfileattrib_i8 F77NAME ( \ + h5pt_readfileattrib_i8_, \ + H5PT_READFILEATTRIB_I8 ) +#define h5pt_readfileattrib_string F77NAME ( \ + h5pt_readfileattrib_string_, \ + H5PT_READFILEATTRIB_STRING ) + +/* error handling */ +#define h5pt_set_verbosity_level F77NAME ( \ + h5pt_set_verbosity_level_, \ + H5PT_SET_VERBOSITY_LEVEL ) + +#endif + +char * +_H5Part_strdupfor2c ( + const char *s, + const ssize_t len + ) { + + char *dup = (char*)malloc ( len + 1 ); + strncpy ( dup, s, len ); + char *p = dup + len; + do { + *p-- = '\0'; + } while ( *p == ' ' ); + return dup; +} + +char * +_H5Part_strc2for ( + char * const str, + const ssize_t l_str + ) { + + size_t len = strlen ( str ); + memset ( str+len, ' ', l_str-len ); + + return str; +} + +/* open/close interface */ +h5part_int64_t +h5pt_openr ( + const char *file_name, + const int l_file_name + ) { + + char *file_name2 = _H5Part_strdupfor2c ( file_name, l_file_name ); + + H5PartFile* f = H5PartOpenFile ( file_name2, H5PART_READ ); + + free ( file_name2 ); + return (h5part_int64_t)(size_t)f; +} + +h5part_int64_t +h5pt_openw ( + const char *file_name, + const int l_file_name + ) { + + char *file_name2 = _H5Part_strdupfor2c ( file_name, l_file_name ); + + H5PartFile* f = H5PartOpenFile ( file_name2, H5PART_WRITE ); + + free ( file_name2 ); + return (h5part_int64_t)(size_t)f; +} + +h5part_int64_t +h5pt_opena ( + const char *file_name, + const int l_file_name + ) { + + char *file_name2 = _H5Part_strdupfor2c ( file_name, l_file_name ); + + H5PartFile* f = H5PartOpenFile ( file_name2, H5PART_APPEND ); + + free ( file_name2 ); + return (h5part_int64_t)(size_t)f; +} + +#ifdef PARALLEL_IO +h5part_int64_t +h5pt_openr_par ( + const char *file_name, + MPI_Comm *comm, + const int l_file_name + ) { + + char *file_name2 = _H5Part_strdupfor2c ( file_name, l_file_name ); + + H5PartFile* f = H5PartOpenFileParallel ( + file_name2, H5PART_READ, *comm ); + + free ( file_name2 ); + return (h5part_int64_t)(size_t)f; +} + +h5part_int64_t +h5pt_openw_par ( + const char *file_name, + MPI_Comm *comm, + const int l_file_name + ) { + + char *file_name2 = _H5Part_strdupfor2c ( file_name, l_file_name ); + + H5PartFile* f = H5PartOpenFileParallel ( + file_name2, H5PART_WRITE, *comm ); + + free ( file_name2 ); + return (h5part_int64_t)(size_t)f; +} + +h5part_int64_t +h5pt_opena_par ( + const char *file_name, + MPI_Comm *comm, + const int l_file_name + ) { + + char *file_name2 = _H5Part_strdupfor2c ( file_name, l_file_name ); + + H5PartFile* f = H5PartOpenFileParallel ( + file_name2, H5PART_APPEND, *comm ); + + free ( file_name2 ); + return (h5part_int64_t)(size_t)f; +} +#endif + +h5part_int64_t +h5pt_close ( + const h5part_int64_t *f + ) { + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + return H5PartCloseFile ( filehandle ); +} + +/*==============Writing and Setting Dataset info========*/ + +h5part_int64_t +h5pt_readstep ( + const h5part_int64_t *f, + const h5part_int64_t *step, + h5part_float64_t *x, + h5part_float64_t *y, + h5part_float64_t *z, + h5part_float64_t *px, + h5part_float64_t *py, + h5part_float64_t *pz, + h5part_int64_t *id + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + return H5PartReadParticleStep ( + filehandle,(*step)-1,x,y,z,px,py,pz,id); +} + + +h5part_int64_t +h5pt_setnpoints ( + const h5part_int64_t *f, + h5part_int64_t *np + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + return H5PartSetNumParticles ( filehandle, *np ); +} + +h5part_int64_t +h5pt_setstep ( + const h5part_int64_t *f, + h5part_int64_t *step ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + return H5PartSetStep ( filehandle, (*step)-1 ); +} + +h5part_int64_t +h5pt_writedata_r8 ( + const h5part_int64_t *f, + const char *name, + const h5part_float64_t *data, + const int l_name ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + char *name2 = _H5Part_strdupfor2c ( name, l_name ); + + h5part_int64_t herr = H5PartWriteDataFloat64 ( + filehandle, name2, data ); + + free ( name2 ); + + return herr; +} + +h5part_int64_t +h5pt_writedata_i8 ( + const h5part_int64_t *f, + const char *name, + const h5part_int64_t *data, + const int l_name ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + char *name2 = _H5Part_strdupfor2c ( name, l_name ); + + h5part_int64_t herr = H5PartWriteDataInt64 ( + filehandle, name2, data ); + + free ( name2 ); + + return herr; +} + +/*==============Reading Data Characteristics============*/ + +h5part_int64_t +h5pt_getnsteps ( + const h5part_int64_t *f + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + return H5PartGetNumSteps ( filehandle ); +} + +h5part_int64_t +h5pt_getndatasets ( + const h5part_int64_t *f + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + return H5PartGetNumDatasets ( filehandle ); +} + +h5part_int64_t +h5pt_getnpoints ( + const h5part_int64_t *f + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + return H5PartGetNumParticles ( filehandle ); +} + +h5part_int64_t +h5pt_getdatasetname ( + const h5part_int64_t *f, + const h5part_int64_t *index, + char *name, + const int l_name + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + h5part_int64_t herr = H5PartGetDatasetName ( + filehandle, *index, name, l_name ); + + _H5Part_strc2for ( name, l_name ); + return herr; +} + +h5part_int64_t +h5pt_getnumpoints ( + const h5part_int64_t *f + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + return H5PartGetNumParticles( filehandle ); +} + +/*=============Setting and getting views================*/ + +h5part_int64_t +h5pt_setview ( + const h5part_int64_t *f, + const h5part_int64_t *start, + const h5part_int64_t *end + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + return H5PartSetView ( filehandle, *start, *end ); +} + +h5part_int64_t +h5pt_resetview ( + const h5part_int64_t *f + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + return H5PartResetView ( filehandle ); +} + +h5part_int64_t +h5pt_hasview ( + const h5part_int64_t *f + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + return H5PartHasView ( filehandle ); +} + +h5part_int64_t +h5pt_getview ( + const h5part_int64_t *f, + h5part_int64_t *start, + h5part_int64_t *end + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + return H5PartGetView ( filehandle, start, end); +} +/*==================Reading data ============*/ +h5part_int64_t +h5pt_readdata_r8 ( + const h5part_int64_t *f, + const char *name, + h5part_float64_t *array, + const int l_name + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + char *name2 = _H5Part_strdupfor2c ( name, l_name ); + + h5part_int64_t herr = H5PartReadDataFloat64 ( + filehandle, name2, array ); + + free ( name2 ); + return herr; +} + +h5part_int64_t +h5pt_readdata_i8 ( + const h5part_int64_t *f, + const char *name, + h5part_int64_t *array, + const int l_name + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + char *name2 = _H5Part_strdupfor2c ( name, l_name ); + + h5part_int64_t herr = H5PartReadDataInt64 ( + filehandle, name2, array ); + + free ( name2 ); + return herr; +} + +/*=================== Attributes ================*/ + +/* Writeing attributes */ +h5part_int64_t +h5pt_writefileattrib_r8 ( + const h5part_int64_t *f, + const char *attrib_name, + const h5part_float64_t *attrib_value, + const h5part_int64_t *attrib_nelem, + const int l_attrib_name + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + char *attrib_name2 = _H5Part_strdupfor2c (attrib_name,l_attrib_name); + + h5part_int64_t herr = H5PartWriteFileAttrib ( + filehandle, + attrib_name2, H5T_NATIVE_DOUBLE, attrib_value, *attrib_nelem ); + + free ( attrib_name2 ); + return herr; +} + +h5part_int64_t +h5pt_writefileattrib_i8 ( + const h5part_int64_t *f, + const char *attrib_name, + const h5part_int64_t *attrib_value, + const h5part_int64_t *attrib_nelem, + const int l_attrib_name + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + char *attrib_name2 = _H5Part_strdupfor2c (attrib_name,l_attrib_name); + + h5part_int64_t herr = H5PartWriteFileAttrib ( + filehandle, + attrib_name2, H5T_NATIVE_INT64, attrib_value, *attrib_nelem ); + + free ( attrib_name2 ); + return herr; +} + +h5part_int64_t +h5pt_writefileattrib_string ( + const h5part_int64_t *f, + const char *attrib_name, + const char *attrib_value, + const int l_attrib_name, + const int l_attrib_value + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + char *attrib_name2 = _H5Part_strdupfor2c (attrib_name,l_attrib_name); + char *attrib_value2= _H5Part_strdupfor2c (attrib_value,l_attrib_value); + + h5part_int64_t herr = H5PartWriteFileAttribString ( + filehandle, attrib_name2, attrib_value2 ); + + free ( attrib_name2 ); + free ( attrib_value2 ); + return herr; +} + +h5part_int64_t +h5pt_writestepattrib_r8 ( + const h5part_int64_t *f, + const char *attrib_name, + const h5part_float64_t *attrib_value, + const h5part_int64_t *attrib_nelem, + const int l_attrib_name + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + char *attrib_name2 = _H5Part_strdupfor2c ( attrib_name, l_attrib_name ); + + h5part_int64_t herr = H5PartWriteStepAttrib ( + filehandle, + attrib_name2, H5T_NATIVE_DOUBLE, attrib_value, *attrib_nelem ); + + free ( attrib_name2 ); + return herr; +} + +h5part_int64_t +h5pt_writestepattrib_i8 ( + const h5part_int64_t *f, + const char *attrib_name, + const h5part_int64_t *attrib_value, + const h5part_int64_t *attrib_nelem, + const int l_attrib_name + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + char *attrib_name2 = _H5Part_strdupfor2c ( attrib_name, l_attrib_name ); + + h5part_int64_t herr = H5PartWriteStepAttrib ( + filehandle, + attrib_name2, H5T_NATIVE_INT64, attrib_value, *attrib_nelem ); + + free ( attrib_name2 ); + return herr; +} + +h5part_int64_t +h5pt_writestepattrib_string ( + const h5part_int64_t *f, + const char *attrib_name, + const char *attrib_value, + const int l_attrib_name, + const int l_attrib_value + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + char *attrib_name2 = _H5Part_strdupfor2c (attrib_name,l_attrib_name); + char *attrib_value2= _H5Part_strdupfor2c (attrib_value,l_attrib_value); + + h5part_int64_t herr = H5PartWriteStepAttribString ( + filehandle, attrib_name2, attrib_value2 ); + + free ( attrib_name2 ); + free ( attrib_value2 ); + return herr; +} + +/* Reading attributes ************************* */ + +h5part_int64_t +h5pt_getnstepattribs ( + const h5part_int64_t *f + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + return H5PartGetNumStepAttribs ( filehandle ); +} + +h5part_int64_t +h5pt_getnfileattribs ( + const h5part_int64_t *f + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + return H5PartGetNumFileAttribs ( filehandle ); +} + +h5part_int64_t +h5pt_getstepattribinfo ( + const h5part_int64_t *f, + const h5part_int64_t *idx, + char *name, + h5part_int64_t *nelem, + const int l_name + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + h5part_int64_t type; + + h5part_int64_t herr = H5PartGetStepAttribInfo ( + filehandle, *idx, name, l_name, &type, nelem); + + _H5Part_strc2for( name, l_name ); + return herr; +} + +h5part_int64_t +h5pt_getfileattribinfo ( + const h5part_int64_t *f, + const h5part_int64_t *idx, + char *name, + h5part_int64_t *nelem, + const int l_name ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + h5part_int64_t type; + + h5part_int64_t herr = H5PartGetFileAttribInfo ( + filehandle, *idx, name, l_name, &type, nelem); + + _H5Part_strc2for( name, l_name ); + return herr; +} + +h5part_int64_t +h5pt_readstepattrib ( + const h5part_int64_t *f, + const char *attrib_name, + void *attrib_value, + const int l_attrib_name + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + char * attrib_name2 = _H5Part_strdupfor2c (attrib_name,l_attrib_name); + + h5part_int64_t herr = H5PartReadStepAttrib ( + filehandle, attrib_name2, attrib_value ); + + free ( attrib_name2 ); + return herr; +} + +h5part_int64_t +h5pt_readstepattrib_r8 ( + const h5part_int64_t *f, + const char *attrib_name, + h5part_float64_t *attrib_value, + const int l_attrib_name + ) { + + return h5pt_readstepattrib ( + f, attrib_name, attrib_value, l_attrib_name ); +} + +h5part_int64_t +h5pt_readstepattrib_i8 ( + const h5part_int64_t *f, + const char *attrib_name, + h5part_int64_t *attrib_value, + const int l_attrib_name + ) { + + return h5pt_readstepattrib ( + f, attrib_name, attrib_value, l_attrib_name ); +} + +h5part_int64_t +h5pt_readstepattrib_string ( + const h5part_int64_t *f, + const char *attrib_name, + char *attrib_value, + const int l_attrib_name, + const int l_attrib_value + ) { + + h5part_int64_t herr = h5pt_readstepattrib ( + f, attrib_name, attrib_value, l_attrib_name ); + + _H5Part_strc2for ( attrib_value, l_attrib_value ); + return herr; +} + + +h5part_int64_t +h5pt_readfileattrib ( + const h5part_int64_t *f, + const char *attrib_name, + void *attrib_value, + const int l_attrib_name + ) { + + H5PartFile *filehandle = (H5PartFile*)(size_t)*f; + + char * attrib_name2 = _H5Part_strdupfor2c (attrib_name,l_attrib_name); + + h5part_int64_t herr = H5PartReadFileAttrib ( + filehandle, attrib_name2, attrib_value ); + + free ( attrib_name2 ); + return herr; +} + +h5part_int64_t +h5pt_readfileattrib_r8 ( + const h5part_int64_t *f, + const char *attrib_name, + h5part_float64_t *attrib_value, + const int l_attrib_name + ) { + return h5pt_readfileattrib ( + f, attrib_name, attrib_value, l_attrib_name ); +} + +h5part_int64_t +h5pt_readfileattrib_i8 ( + const h5part_int64_t *f, + const char *attrib_name, + h5part_int64_t *attrib_value, + const int l_attrib_name + ) { + return h5pt_readfileattrib ( + f, attrib_name, attrib_value, l_attrib_name ); +} + +h5part_int64_t +h5pt_readfileattrib_string ( + const h5part_int64_t *f, + const char *attrib_name, + char *attrib_value, + const int l_attrib_name, + const int l_attrib_value + ) { + + h5part_int64_t herr = h5pt_readfileattrib ( + f, attrib_name, attrib_value, l_attrib_name ); + + _H5Part_strc2for ( attrib_value, l_attrib_value ); + return herr; +} + +h5part_int64_t +h5pt_set_verbosity_level ( + const h5part_int64_t *level + ) { + return H5PartSetVerbosityLevel ( *level ); +} diff --git a/trunk/src/H5PartF90.inc b/trunk/src/H5PartF90.inc new file mode 100644 index 0000000..12f533d --- /dev/null +++ b/trunk/src/H5PartF90.inc @@ -0,0 +1,223 @@ +! Declaration of subroutines for Fortran Bindings +! open/close interface + + INTERFACE + INTEGER*8 FUNCTION h5pt_openr ( filename ) + CHARACTER(LEN=*), INTENT(IN) :: filename ! the filename to open for reading + END FUNCTION + + INTEGER*8 FUNCTION h5pt_openw ( filename ) + CHARACTER(LEN=*), INTENT(IN) :: filename ! the filename to open for writing + END FUNCTION + + INTEGER*8 FUNCTION h5pt_opena ( filename ) + CHARACTER(LEN=*), INTENT(IN) :: filename ! the filename to open for appending + END FUNCTION + + INTEGER*8 FUNCTION h5pt_openr_par ( filename, mpi_communicator ) + CHARACTER(LEN=*), INTENT(IN) :: filename ! the filename to open for reading + INTEGER, INTENT(IN) :: mpi_communicator ! the MPI_Communicator used by the program + END FUNCTION + + INTEGER*8 FUNCTION h5pt_openw_par ( filename, mpi_communicator ) + CHARACTER(LEN=*), INTENT(IN) :: filename ! the filename to open for writing + INTEGER, INTENT(IN) :: mpi_communicator ! the MPI_Communicator used by the program + END FUNCTION + + INTEGER*8 FUNCTION h5pt_opena_par ( filename, mpi_communicator ) + CHARACTER(LEN=*), INTENT(IN) :: filename ! the filename to open for appending + INTEGER, INTENT(IN) :: mpi_communicator ! the MPI_Communicator used by the program + END FUNCTION + + + INTEGER*8 FUNCTION h5pt_close ( filehandle ) + INTEGER*8, INTENT(IN) :: filehandle ! close this open filehandle + END FUNCTION + +!==============Writing and Setting Dataset info======== + + INTEGER*8 FUNCTION h5pt_setnpoints ( filehandle, npoints ) + INTEGER*8, INTENT(IN) :: filehandle + INTEGER*8, INTENT(IN) :: npoints ! The number of particles on *this* processor + END FUNCTION + + INTEGER*8 FUNCTION h5pt_setstep (filehandle,step) + INTEGER*8, INTENT(IN) :: filehandle + INTEGER*8, INTENT(IN) :: step ! Set the current timestep in the file to this + END FUNCTION + + INTEGER*8 FUNCTION h5pt_writedata_r8 ( filehandle, name, data ) + INTEGER*8, INTENT(IN) :: filehandle + CHARACTER(LEN=*), INTENT(IN) :: name ! The name of the data we are writing + REAL*8, INTENT(IN) :: data(*) ! The dataarray to write. The number of + ! elements is presumably set earlier with + ! h5pt_setnpoints(f,npoints) + END FUNCTION + + INTEGER*8 FUNCTION h5pt_writedata_i8 ( filehandle, name, data ) + INTEGER*8, INTENT(IN) :: filehandle + CHARACTER(LEN=*), INTENT(IN) :: name ! The name of the data we are writing + INTEGER*8, INTENT(IN) :: data(*) + END FUNCTION + +!==============Reading Data Characteristics============ + + INTEGER*8 FUNCTION h5pt_getnsteps (filehandle) + INTEGER*8, INTENT(IN) :: filehandle + END FUNCTION + + INTEGER*8 FUNCTION h5pt_getndatasets (filehandle) + INTEGER*8, INTENT(IN) :: filehandle + END FUNCTION + +! returns total number of points in this timestep +! If a "view" has been set using h5pt_setview() +! then it returns the number of points that are +! in the current view. + INTEGER*8 FUNCTION h5pt_getnpoints (filehandle) + INTEGER*8, INTENT(IN) :: filehandle + END FUNCTION + + INTEGER*8 FUNCTION h5pt_getdatasetname (filehandle,index,name) + INTEGER*8, INTENT(IN) :: filehandle + INTEGER*8, INTENT(IN) :: index ! Index for a given dataset name + CHARACTER(LEN=*), INTENT(OUT) :: name ! returns the name of the dataset at that index + END FUNCTION + +!=============Setting and getting views================ + INTEGER*8 FUNCTION h5pt_setview (filehandle,start,end) + INTEGER*8, INTENT(IN) :: filehandle + INTEGER*8, INTENT(IN) :: start ! offset of the first particle in the view + INTEGER*8, INTENT(IN) :: end ! offset of the first particle after the end of the view + END FUNCTION + + INTEGER*8 FUNCTION h5pt_resetview (filehandle) + INTEGER*8, INTENT(IN) :: filehandle ! reset the view on this filehandle to default + END FUNCTION + + INTEGER*8 FUNCTION h5pt_hasview (filehandle) + INTEGER*8, INTENT(IN) :: filehandle + END FUNCTION + + INTEGER*8 FUNCTION h5pt_getview (filehandle,start,end) + INTEGER*8, INTENT(IN) :: filehandle + INTEGER*8, INTENT(OUT) :: start ! offset of first particle in the view + INTEGER*8, INTENT(OUT) :: end ! offset of first particle beyond the current view + END FUNCTION + +!==============Reading Data========================= + + INTEGER*8 FUNCTION h5pt_readdata_r8 (filehandle,name,data) + INTEGER*8, INTENT(IN) :: filehandle + CHARACTER(LEN=*), INTENT(IN) :: name ! The name of the data we are writing + REAL*8, INTENT(OUT) :: data(*) ! The dataarray to read. Number of points + ! read is either the number within the view set + ! by h5pt_setview() or the default (the total + ! number of particles in the file. + END FUNCTION + + INTEGER*8 FUNCTION h5pt_readdata_i8 (filehandle,name,data) + INTEGER*8, INTENT(IN) :: filehandle + CHARACTER(LEN=*), INTENT(IN) :: name ! The name of the data we are writing + INTEGER*8, INTENT(OUT) :: data(*) ! The dataarray to read. Number of points + ! read is either the number within the view set + ! by h5pt_setview() or the default (the total + ! number of particles in the file. + END FUNCTION + + +!=================== Attributes ================ + + INTEGER*8 FUNCTION h5pt_writefileattrib_r8 (filehandle,attrib_name,attrib_value,attrib_nelem) + INTEGER*8, INTENT(IN) :: filehandle + CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! The name of the attribute + REAL*8, INTENT(IN) :: attrib_value(*) ! The array of data to write into the attribute + INTEGER*8, INTENT(IN) :: attrib_nelem ! Number of elements in the attrib array + END FUNCTION + + INTEGER*8 FUNCTION h5pt_writefileattrib_i8 (filehandle,attrib_name,attrib_value,attrib_nelem) + INTEGER*8, INTENT(IN) :: filehandle + CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! The name of the attribute + INTEGER*8, INTENT(IN) :: attrib_value(*) ! The array of data to write into the attribute + INTEGER*8, INTENT(IN) :: attrib_nelem ! Number of elements in the attrib array + END FUNCTION + + INTEGER*8 FUNCTION h5pt_writefileattrib_string (filehandle,attrib_name,attrib_value) + INTEGER*8, INTENT(IN) :: filehandle + CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! The name of the attribute + CHARACTER(LEN=*), INTENT(IN) :: attrib_value ! The array of data to write into the attribute + END FUNCTION + + INTEGER*8 FUNCTION h5pt_writestepattrib_r8 (filehandle,attrib_name,attrib_value,attrib_nelem) + INTEGER*8, INTENT(IN) :: filehandle + CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! The name of the attribute + REAL*8, INTENT(IN) :: attrib_value(*) ! The array of data to write into the attribute + INTEGER*8, INTENT(IN) :: attrib_nelem ! Number of elements in the attrib array + END FUNCTION + + INTEGER*8 FUNCTION h5pt_writestepattrib_i8 (filehandle,attrib_name,attrib_value,attrib_nelem) + INTEGER*8, INTENT(IN) :: filehandle + CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! The name of the attribute + INTEGER*8, INTENT(IN) :: attrib_value(*) ! The array of data to write into the attribute + INTEGER*8, INTENT(IN) :: attrib_nelem ! Number of elements in the attrib array + END FUNCTION + + INTEGER*8 FUNCTION h5pt_writestepattrib_string (filehandle,attrib_name,attrib_value) + INTEGER*8, INTENT(IN) :: filehandle + CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! The name of the attribute + CHARACTER(LEN=*), INTENT(IN) :: attrib_value ! The array of data to write into the attribute + END FUNCTION + + + INTEGER*8 FUNCTION h5pt_getnstepattribs (filehandle) + INTEGER*8, INTENT(IN) :: filehandle + END FUNCTION + + INTEGER*8 FUNCTION h5pt_getnfileattribs (filehandle) + INTEGER*8, INTENT(IN) :: filehandle + END FUNCTION + + INTEGER*8 FUNCTION h5pt_getstepattribinfo (filehandle,idx,attrib_name,attrib_nelem) + INTEGER*8, INTENT(IN) :: filehandle + INTEGER*8, INTENT(IN) :: idx ! index of the attribute being queried + CHARACTER(LEN=*), INTENT(OUT) :: attrib_name ! The name of the attribute + INTEGER*8, INTENT(OUT) :: attrib_nelem ! Number of elements in the attrib array + END FUNCTION + + INTEGER*8 FUNCTION h5pt_getfileattribinfo (filehandle,idx,attrib_name,attrib_nelem) + INTEGER*8, INTENT(IN) :: filehandle + INTEGER*8, INTENT(IN) :: idx ! index of the attribute being queried + CHARACTER(LEN=*), INTENT(OUT) :: attrib_name ! The name of the attribute + INTEGER*8, INTENT(OUT) :: attrib_nelem ! Number of elements in the attrib array + END FUNCTION + + INTEGER*8 FUNCTION h5pt_readstepattrib_i8 ( filehandle, attrib_name, attrib_value ) + INTEGER*8, INTENT(IN) :: filehandle + CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! name of the attribute to read + INTEGER*8, INTENT(OUT) :: attrib_value(*) ! the attribute data will be read into this array + END FUNCTION + + INTEGER*8 FUNCTION h5pt_readstepattrib_r8 ( filehandle, attrib_name, attrib_value ) + INTEGER*8, INTENT(IN) :: filehandle + CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! name of the attribute to read + REAL*8, INTENT(OUT) :: attrib_value(*) ! the attribute data will be read into this array + END FUNCTION + + INTEGER*8 FUNCTION h5pt_readfileattrib_i8 (filehandle, attrib_name, attrib_value ) + INTEGER*8, INTENT(IN) :: filehandle + CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! name of the attribute to read + INTEGER*8, INTENT(OUT) :: attrib_value(*) ! the attribute data will be read into this array + END FUNCTION + + INTEGER*8 FUNCTION h5pt_readfileattrib_r8 (filehandle, attrib_name, attrib_value ) + INTEGER*8, INTENT(IN) :: filehandle + CHARACTER(LEN=*), INTENT(IN) :: attrib_name ! name of the attribute to read + REAL*8, INTENT(OUT) :: attrib_value(*) ! the attribute data will be read into this array + END FUNCTION + + + INTEGER*8 FUNCTION h5pt_set_verbosity_level ( level ) + INTEGER*8, INTENT(IN) :: level + END FUNCTION + + END INTERFACE diff --git a/trunk/src/H5PartPrivate.h b/trunk/src/H5PartPrivate.h new file mode 100644 index 0000000..08b7cfe --- /dev/null +++ b/trunk/src/H5PartPrivate.h @@ -0,0 +1,186 @@ +#ifndef __H5PARTPRIVATE_H +#define __H5PARTPRIVATE_H + +#define H5PART_GROUPNAME_STEP "Step" + +/*! + The functions declared here are not part of the API, but may be used + in extensions like H5Block. We name these functions "private". + + \note + Private function may change there interface even in stable versions. + Don't use them in applications! +*/ + +struct _iter_op_data { + int stop_idx; + int count; + int type; + char *name; + size_t len; + char *pattern; +}; + +h5part_int64_t +_H5Part_set_step ( + H5PartFile *f, + const h5part_int64_t step + ); + +h5part_int64_t +_H5Part_get_num_particles ( + H5PartFile *f + ); + +herr_t +_H5Part_iteration_operator ( + hid_t group_id, + const char *member_name, + void *operator_data + ); + + +void +_H5Part_set_funcname ( + char * const fname + ); + +const char * +_H5Part_get_funcname ( + void + ); + +#define SET_FNAME( fname ) _H5Part_set_funcname( fname ); + +hid_t +_H5Part_normalize_h5_type ( + hid_t type + ); + +h5part_int64_t +_H5Part_read_attrib ( + hid_t id, + const char *attrib_name, + void *attrib_value + ); + +h5part_int64_t +_H5Part_write_attrib ( + hid_t id, + const char *attrib_name, + const hid_t attrib_type, + const void *attrib_value, + const hsize_t attrib_nelem + ); + +h5part_int64_t +_H5Part_get_attrib_info ( + hid_t id, + const h5part_int64_t attrib_idx, + char *attrib_name, + const h5part_int64_t len_attrib_name, + h5part_int64_t *attrib_type, + h5part_int64_t *attrib_nelem + ); + +h5part_int64_t +_H5Part_get_num_objects ( + hid_t group_id, + const char *group_name, + const hid_t type + ); + +h5part_int64_t +_H5Part_get_num_objects_matching_pattern ( + hid_t group_id, + const char *group_name, + const hid_t type, + char * const pattern + ); + +h5part_int64_t +_H5Part_get_object_name ( + hid_t group_id, + const char *group_name, + const hid_t type, + const h5part_int64_t idx, + char *obj_name, + const h5part_int64_t len_obj_name + ); + +void +_H5Part_vprint_error ( + const char *fmt, + va_list ap + ); + +void +_H5Part_print_error ( + const char *fmt, + ... ) +#ifdef __GNUC__ +__attribute__ ((format (printf, 1, 2))) +#endif +; + +void +_H5Part_vprint_warn ( + const char *fmt, + va_list ap + ); + +void +_H5Part_print_warn ( + const char *fmt, + ... + ) +#ifdef __GNUC__ +__attribute__ ((format (printf, 1, 2))) +#endif +; + +void +_H5Part_vprint_info ( + const char *fmt, + va_list ap + ); + +void +_H5Part_print_info ( + const char *fmt, + ... + ) +#ifdef __GNUC__ +__attribute__ ((format (printf, 1, 2))) +#endif +; + +void +_H5Part_vprint_debug ( + const char *fmt, + va_list ap + ); + +void +_H5Part_print_debug ( + const char *fmt, + ... + ) +#ifdef __GNUC__ +__attribute__ ((format (printf, 1, 2))) +#endif +; + +char * +_H5Part_strdupfor2c ( + const char *s, + const ssize_t len + ); + +char * +_H5Part_strc2for ( + char * const str, + const ssize_t l_str + ); + +#endif diff --git a/trunk/src/H5PartTypes.h b/trunk/src/H5PartTypes.h new file mode 100644 index 0000000..b11ed97 --- /dev/null +++ b/trunk/src/H5PartTypes.h @@ -0,0 +1,92 @@ +/* + System dependend definitions +*/ + +#ifndef _H5PARTTYPES_H_ +#define _H5PARTTYPES_H_ + +#ifdef WIN32 +typedef __int64 int64_t; +#endif /* WIN32 */ + +typedef int64_t h5part_int64_t; +typedef double h5part_float64_t; +typedef h5part_int64_t (*h5part_error_handler)( const char*, const h5part_int64_t, const char*,...) +#ifdef __GNUC__ +__attribute__ ((format (printf, 3, 4))) +#endif + ; + +#ifndef PARALLEL_IO +typedef unsigned long MPI_Comm; +#endif + +struct H5BlockFile; + +/** + \struct H5PartFile + + This is an essentially opaque datastructure that + acts as the filehandle for all practical purposes. + It is created by H5PartOpenFile() and destroyed by + H5PartCloseFile(). +*/ +struct H5PartFile { + hid_t file; + char *groupname_step; + int stepno_width; + int empty; + + h5part_int64_t timestep; + hsize_t nparticles; + + hid_t timegroup; + hid_t shape; + unsigned mode; + hid_t xfer_prop; + hid_t create_prop; + hid_t access_prop; + hid_t diskshape; + hid_t memshape; /* for parallel I/O (this is on-disk) H5S_ALL + if serial I/O */ + h5part_int64_t viewstart; /* -1 if no view is available: A "view" looks */ + h5part_int64_t viewend; /* at a subset of the data. */ + + /** + the number of particles in each processor. + With respect to the "VIEW", these numbers + can be regarded as non-overlapping subsections + of the particle array stored in the file. + So they can be used to compute the offset of + the view for each processor + */ + h5part_int64_t *pnparticles; + + /** + Number of processors + */ + int nprocs; + + /** + The index of the processor this process is running on. + */ + int myproc; + + /** + MPI comnunicator + */ + MPI_Comm comm; + + struct H5BlockStruct *block; + h5part_int64_t (*close_block)(struct H5PartFile *f); +}; + +typedef struct H5PartFile H5PartFile; + +#ifdef IPL_XT3 +# define SEEK_END 2 +#endif + + + +#endif diff --git a/trunk/src/Makefile.am b/trunk/src/Makefile.am new file mode 100644 index 0000000..2d32bb7 --- /dev/null +++ b/trunk/src/Makefile.am @@ -0,0 +1,93 @@ +# src level Makefile.am + +# PATH SETTING (IMPORTED FROM CONFIGURE) +HDF5ROOT = @HDF5ROOT@ + +# COMPILERS +CC = @CC@ + +#INCLUDES +HDFINC = -I$(HDF5ROOT)/include +MPIINC = @MPIINC@ + +INC = $(HDFINC) ${MPIINC} + +# H5Part header file location +H5PINC = -I@prefix@/include + +# COMPILER FLAGS +CFLAGS = @CFLAGS@ ${INC} + +# H5Part compiled library location +H5PLIB = -L@prefix@/lib + +# HDF5 LIBRARY +HDFLIB = -L$(HDF5ROOT)/lib -lhdf5 -lz $(SZLIB) @LDFLAGS@ + +# SZ LIBRARY +SZLIB = @SZLIB@ + +# Extra files that I wish to include in the dist tar ball. +EXTRA_DIST = TestUnderscoreC.c TestUnderscore.f $(EXTRA_HEADERS) + +# Files that I don't want to include in the dist tar ball +nodist_include_HEADERS = @UNDERSCORE_H@ + +# What to build... Will be determined by configure script. +lib_LIBRARIES = @MTARGET@ + +# Listing of all possible targets that I may build. +EXTRA_LIBRARIES = libH5Part.a libH5PartF.a + +# Header files that I wish to install in $(prefix)/include +include_HEADERS = H5Part.h H5PartTypes.h H5PartErrors.h H5Block.h H5BlockTypes.h H5BlockErrors.h H5Part.inc H5PartF90.inc H5BlockF90.inc @UNDERSCORE_H@ + +# Listing of all possible headers that I may include +EXTRA_HEADERS = H5PartPrivate.h H5BlockPrivate.h + +# Listing of sources +libH5Part_a_SOURCES = H5Part.c H5Block.c +libH5PartF_a_SOURCES = H5PartF.c H5BlockF.c + + +H5Part.inc: H5PartF90.inc + grep "INTEGER.* FUNCTION" $< | while read type func name rest; do echo " $$type $$name"; done > $@ + +# Specific building instruction (What compilers to use...) +# ------------ Serial Lib build commands ------------ +libH5Part.a: H5Part.o H5Block.o + ${AR} rucs $@ $^ + +libH5PartF.a: H5Part.o H5PartF.o H5Block.o H5BlockF.o + ${AR} rucs $@ $^ + +%.o : %.c + $(CC) $(CFLAGS) $(INC) -c $< + +H5Part.o: H5Part.c H5Part.h H5PartPrivate.h H5PartTypes.h +H5PartF.o: H5PartF.c Underscore.h H5Part.h +H5Block.o: H5Block.c H5Part.h H5PartPrivate.h H5PartTypes.h H5Block.h H5BlockTypes.h +H5BlockF.o: H5BlockF.c Underscore.h H5Block.h + + +# ----------- Build Parallel H5Part Stuff ------------ + +libpH5Part.a: libH5Part.a + ${RM} $@ + ln -s $^ $@ + +libpH5PartF.a: libH5PartF.a + ${RM} $@ + ln -s $^ $@ + +clean: + rm -f *~ *.o *.a *.so + +distclean: clean + rm -f *.a + rm -rf .deps + rm -rf .libs + rm -f Underscore.h + rm -f H5Part_py_wrap.c + rm -f H5Part.py + rm -f Makefile diff --git a/trunk/src/TestUnderscore.f b/trunk/src/TestUnderscore.f new file mode 100755 index 0000000..4de2c6e --- /dev/null +++ b/trunk/src/TestUnderscore.f @@ -0,0 +1,12 @@ +c ============== +c +c Simple Fortran program works in conjunction with C program +c to determine how many underscores are generated +c by the fortran compiler +c +c ============== + + program TestUnderscoreF + implicit none + call FindUnderscores + end diff --git a/trunk/src/TestUnderscoreC.c b/trunk/src/TestUnderscoreC.c new file mode 100755 index 0000000..0beafb7 --- /dev/null +++ b/trunk/src/TestUnderscoreC.c @@ -0,0 +1,36 @@ +#include + +void findunderscores(void){ + printf("#ifndef F77_NO_UNDERSCORE\n"); + printf("#define F77_NO_UNDERSCORE\n"); + printf("#endif\n"); + printf("#ifndef F77_NO_CAPS\n"); + printf("#define F77_NO_CAPS\n"); + printf("#endif\n"); +} + +void FindUnderscores(void){ + printf("#ifndef F77_NO_UNDERSCORE\n"); + printf("#define F77_NO_UNDERSCORE\n"); + printf("#endif\n"); +} + +void FindUnderscores_(void){ + printf("#ifndef F77_SINGLE_UNDERSCORE\n"); + printf("#define F77_SINGLE_UNDERSCORE\n"); + printf("#endif\n"); +} + +void findunderscores_(void){ + printf("#ifndef F77_SINGLE_UNDERSCORE\n"); + printf("#define F77_SINGLE_UNDERSCORE\n"); + printf("#endif\n"); + printf("#ifndef F77_NO_CAPS\n"); + printf("#define F77_NO_CAPS\n"); + printf("#endif\n"); +} +void FINDUNDERSCORES(void){ + printf("#ifndef F77_CRAY_UNDERSCORE\n"); + printf("#define F77_CRAY_UNDERSCORE\n"); + printf("#endif\n"); +} diff --git a/trunk/test/Bench.c b/trunk/test/Bench.c new file mode 100644 index 0000000..1b8d9ab --- /dev/null +++ b/trunk/test/Bench.c @@ -0,0 +1,263 @@ +#include +#include +#include +#include +/* #include */ +#include +#include +#ifndef PARALLEL_IO +#define PARALLEL_IO +#endif + +#ifndef DISABLE_H5PART +#include "H5Part.h" +#endif + +#define FILENAME "testio" +/* normally 64 steps for real benchmark */ +/* #define NSTEPS 5 */ + +/* normally 51e6 for real benchmark */ +#define NPARTICLES 51e4 +#define NTRIALS 3 + +/* + +bench + +*/ + + +int main(int argc,char *argv[]){ + + if (argc < 3) { + printf("Usage: bench \n"); + exit(-1); + } + else { + printf("nparticles: %d, nsteps: %d \n", atoi(argv[1]), atoi(argv[2])); + } + + MPI_Info info; + int nprocs,rank; + int trial; + int i,j,n; /* iteration variables */ + double starttime,curtime, endtime; + + int nparticles = atoi(argv[1]); + int nsteps = atoi(argv[2]); + + double *x,*y,*z,*px,*py,*pz; + typedef double *ddouble; + ddouble data[6]; + MPI_Datatype chunktype; + int offset; + int localnp; + char filename[128]; /*= FILENAME; */ +#ifndef DISABLE_H5PART + H5PartFile *f; +#endif + char newfilename[128]; + FILE *fd; + MPI_File file; + MPI_Offset foffset; + + MPI_Comm dcomm = MPI_COMM_WORLD; + + MPI_Init(&argc,&argv); + MPI_Comm_rank(dcomm,&rank); + MPI_Comm_size(dcomm,&nprocs); + + localnp=nparticles/(int64_t)nprocs; + for(offset=0,i=0;i +#include +#include +#include "H5Part.h" +#include "H5Block.h" +#include "H5BlockTypes.h" + +static int _debug = 4; + +void +_H5Part_vprint_error ( + const char *fmt, + va_list ap + ) { + + if ( _debug < 1 ) return; + vfprintf ( stderr, fmt, ap ); + fprintf ( stderr, "\n" ); +} + +void +_H5Part_print_error ( + const char *fmt, + ... + ) { + + va_list ap; + va_start ( ap, fmt ); + _H5Part_vprint_error ( fmt, ap ); + va_end ( ap ); +} + +void +_H5Part_vprint_warn ( + const char *fmt, + va_list ap + ) { + + if ( _debug < 2 ) return; + vfprintf ( stderr, fmt, ap ); + fprintf ( stderr, "\n" ); +} + +void +_H5Part_print_warn ( + const char *fmt, + ... + ) { + + va_list ap; + va_start ( ap, fmt ); + _H5Part_vprint_warn ( fmt, ap ); + va_end ( ap ); +} + +void +_H5Part_vprint_info ( + const char *fmt, + va_list ap + ) { + + if ( _debug < 3 ) return; + vfprintf ( stdout, fmt, ap ); + fprintf ( stdout, "\n" ); +} + +void +_H5Part_print_info ( + const char *fmt, + ... + ) { + + va_list ap; + va_start ( ap, fmt ); + _H5Part_vprint_info ( fmt, ap ); + va_end ( ap ); +} + +void +_H5Part_vprint_debug ( + const char *fmt, + va_list ap + ) { + + if ( _debug < 4 ) return; + vfprintf ( stdout, fmt, ap ); + fprintf ( stdout, "\n" ); +} + +void +_H5Part_print_debug ( + const char *fmt, + ... + ) { + + va_list ap; + va_start ( ap, fmt ); + _H5Part_vprint_debug ( fmt, ap ); + va_end ( ap ); +} + + +struct H5BlockPartition Layout1[1] = { + { 0, 63, 0, 63, 0, 511 } +}; + +struct H5BlockPartition Layout8[8] = { + { 0,63, 0,63, 0, 63}, + { 0,63, 0,63, 64,127}, + { 0,63, 0,63, 128,191}, + { 0,63, 0,63, 192,255}, + { 0,63, 0,63, 256,319}, + { 0,63, 0,63, 320,383}, + { 0,63, 0,63, 384,447}, + { 0,63, 0,63, 448,511} +}; + +struct H5BlockPartition Layout8G[8] = { + { 0,63, 0,63, 0, 64}, + { 0,63, 0,63, 63,128}, + { 0,63, 0,63, 127,192}, + { 0,63, 0,63, 191,256}, + { 0,63, 0,63, 255,320}, + { 0,63, 0,63, 319,384}, + { 0,63, 0,63, 383,448}, + { 0,63, 0,63, 447,511} +}; + +struct H5BlockPartition Layout16[16] = { + { 0,63, 0,31, 0, 63}, + { 0,63, 32,63, 0, 63}, + { 0,63, 0,31, 64,127}, + { 0,63, 32,63, 64,127}, + { 0,63, 0,31, 128,191}, + { 0,63, 32,63, 128,191}, + { 0,63, 0,31, 192,255}, + { 0,63, 32,63, 192,255}, + { 0,63, 0,31, 256,319}, + { 0,63, 32,63, 256,319}, + { 0,63, 0,31, 320,383}, + { 0,63, 32,63, 320,383}, + { 0,63, 0,31, 384,447}, + { 0,63, 32,63, 384,447}, + { 0,63, 0,31, 448,511}, + { 0,63, 32,63, 448,511} +}; + +struct H5BlockPartition Layout16G[16] = { + { 0,63, 0,32, 0, 64}, + { 0,63, 31,63, 0, 64}, + { 0,63, 0,32, 63,128}, + { 0,63, 31,63, 63,128}, + { 0,63, 0,32, 127,192}, + { 0,63, 31,63, 127,192}, + { 0,63, 0,32, 191,256}, + { 0,63, 31,63, 191,256}, + { 0,63, 0,32, 255,320}, + { 0,63, 31,63, 255,320}, + { 0,63, 0,32, 319,384}, + { 0,63, 31,63, 319,384}, + { 0,63, 0,32, 383,448}, + { 0,63, 31,63, 383,448}, + { 0,63, 0,32, 447,511}, + { 0,63, 31,63, 447,511} +}; + + +struct H5BlockPartition Layout32[32] = { + { 0,31, 0,31, 0, 63}, + { 0,31, 32,63, 0, 63}, + { 32,63, 0,31, 0, 63}, + { 32,63, 32,63, 0, 63}, + { 0,31, 0,31, 64,127}, + { 0,31, 32,63, 64,127}, + { 32,63, 0,31, 64,127}, + { 32,63, 32,63, 64,127}, + { 0,31, 0,31, 128,191}, + { 0,31, 32,63, 128,191}, + { 32,63, 0,31, 128,191}, + { 32,63, 32,63, 128,191}, + { 0,31, 0,31, 192,255}, + { 0,31, 32,63, 192,255}, + { 32,63, 0,31, 192,255}, + { 32,63, 32,63, 192,255}, + { 0,31, 0,31, 256,319}, + { 0,31, 32,63, 256,319}, + { 32,63, 0,31, 256,319}, + { 32,63, 32,63, 256,319}, + { 0,31, 0,31, 320,383}, + { 0,31, 32,63, 320,383}, + { 32,63, 0,31, 320,383}, + { 32,63, 32,63, 320,383}, + { 0,31, 0,31, 384,447}, + { 0,31, 32,63, 384,447}, + { 32,63, 0,31, 384,447}, + { 32,63, 32,63, 384,447}, + { 0,31, 0,31, 448,511}, + { 0,31, 32,63, 448,511}, + { 32,63, 0,31, 448,511}, + { 32,63, 32,63, 448,511} +}; + +struct H5BlockPartition Layout32G[32] = { + { 0,32, 0,32, 0, 64}, + { 0,32, 31,63, 0, 64}, + { 31,63, 0,32, 0, 64}, + { 31,63, 31,63, 0, 64}, + { 0,32, 0,32, 63,128}, + { 0,32, 31,63, 63,128}, + { 31,63, 0,32, 63,128}, + { 31,63, 31,63, 63,128}, + { 0,32, 0,32, 127,192}, + { 0,32, 31,63, 127,192}, + { 31,63, 0,32, 127,192}, + { 31,63, 31,63, 127,192}, + { 0,32, 0,32, 191,256}, + { 0,32, 31,63, 191,256}, + { 31,63, 0,32, 191,256}, + { 31,63, 31,63, 191,256}, + { 0,32, 0,32, 255,320}, + { 0,32, 31,63, 255,320}, + { 31,63, 0,32, 255,320}, + { 31,63, 31,63, 255,320}, + { 0,32, 0,32, 319,384}, + { 0,32, 31,63, 319,384}, + { 31,63, 0,32, 319,384}, + { 31,63, 31,63, 319,384}, + { 0,31, 0,31, 383,448}, + { 0,31, 31,63, 383,448}, + { 31,63, 0,31, 383,448}, + { 31,63, 31,63, 383,448}, + { 0,32, 0,32, 447,511}, + { 0,32, 31,63, 447,511}, + { 31,63, 0,32, 447,511}, + { 31,63, 31,63, 447,511} +}; + + + +#define _NO_GHOSTZONE(p,q) ( (p->i_end < q->i_start) \ + || (p->j_end < q->j_start) \ + || (p->k_end < q->k_start) ) + +/* +#define _HAVE_GHOSTZONE(p,q) ( (p->i_end >= q->i_start) \ + && (p->j_end >= q->j_start) \ + && (p->k_end >= q->k_start) \ + && (q->i_end >= p->i_start) \ + && (q->j_end >= p->j_start) \ + && (q->k_end >= p->k_start) ) +*/ + +static int +_have_ghostzone ( + const struct H5BlockPartition *p, + const struct H5BlockPartition *q + ) { + return ( ! ( _NO_GHOSTZONE ( p, q ) || _NO_GHOSTZONE ( q, p ) ) ); +} + +static h5part_int64_t +_volume_of_partition ( + const struct H5BlockPartition *p + ) { + return (p->i_end - p->i_start) + * (p->j_end - p->j_start) + * (p->k_end - p->k_start); +} + +#define MIN( x, y ) ( (x) <= (y) ? (x) : (y) ) +#define MAX( x, y ) ( (x) >= (y) ? (x) : (y) ) + +static h5part_int64_t +_volume_of_ghostzone ( + const struct H5BlockPartition *p, + const struct H5BlockPartition *q + ) { + + h5part_int64_t dx = MIN ( p->i_end, q->i_end ) + - MAX ( p->i_start, q->i_start ) + 1; + h5part_int64_t dy = MIN ( p->j_end, q->j_end ) + - MAX ( p->j_start, q->j_start ) + 1; + h5part_int64_t dz = MIN ( p->k_end, q->k_end ) + - MAX ( p->k_start, q->k_start ) + 1; + + return dx * dy * dz; +} + +static h5part_int64_t +_dissolve_X_ghostzone ( + struct H5BlockPartition *p, + struct H5BlockPartition *q + ) { + + if ( p->i_start > q->i_start ) + return _dissolve_X_ghostzone( q, p ); + + if ( q->i_end <= p->i_end ) /* no dissolving */ + return -1; + + p->i_end = ( p->i_end + q->i_start ) >> 1; + q->i_start = p->i_end + 1; + return 0; +} + +static h5part_int64_t +_dissolve_Y_ghostzone ( + struct H5BlockPartition *p, + struct H5BlockPartition *q + ) { + + if ( p->j_start > q->j_start ) + return _dissolve_Y_ghostzone( q, p ); + + if ( q->j_end <= p->j_end ) /* no dissolving */ + return -1; + + p->j_end = ( p->j_end + q->j_start ) >> 1; + q->j_start = p->j_end + 1; + return 0; +} + +static h5part_int64_t +_dissolve_Z_ghostzone ( + struct H5BlockPartition *p, + struct H5BlockPartition *q + ) { + + if ( p->k_start > q->k_start ) + return _dissolve_Z_ghostzone( q, p ); + + if ( q->k_end <= p->k_end ) /* no dissolving */ + return -1; + + p->k_end = ( p->k_end + q->k_start ) >> 1; + q->k_start = p->k_end + 1; + return 0; +} + +#if 0 +static h5part_int64_t +_dissolve_ghostzone_max_volume_of_dissolved_partitions ( + struct H5BlockPartition *p, + struct H5BlockPartition *q + ) { + + struct H5BlockPartition p_; + struct H5BlockPartition q_; + struct H5BlockPartition p_best; + struct H5BlockPartition q_best; + h5part_int64_t vol; + h5part_int64_t max_vol = 0; + + p_ = *p; + q_ = *q; + if ( _dissolve_X_ghostzone ( &p_, &q_ ) == 0 ) { + vol = _volume_of_partition ( &p_ ) + _volume_of_partition ( &q_ ); + if ( vol > max_vol ) { + max_vol = vol; + p_best = p_; + q_best = q_; + } + } + + p_ = *p; + q_ = *q; + if ( _dissolve_Y_ghostzone ( &p_, &q_ ) == 0 ) { + vol = _volume_of_partition ( &p_ ) + _volume_of_partition ( &q_ ); + if ( vol > max_vol ) { + max_vol = vol; + p_best = p_; + q_best = q_; + } + } + p_ = *p; + q_ = *q; + + if ( _dissolve_Z_ghostzone ( &p_, &q_ ) == 0 ) { + vol = _volume_of_partition ( &p_ ) + _volume_of_partition ( &q_ ); + if ( vol > max_vol ) { + max_vol = vol; + p_best = p_; + q_best = q_; + } + } + if ( max_vol <= 0 ) { + return H5PART_ERR_LAYOUT; + } + *p = p_best; + *q = q_best; + + return H5PART_SUCCESS; +} + + +static h5part_int64_t +_dissolve_ghostzones_max_volume_of_dissolved_partitions ( + H5PartFile *f + ) { + + h5part_int64_t herr; + struct H5BlockStruct *b = f->block; + struct H5BlockPartition *part1; + struct H5BlockPartition *part2; + int proc1, proc2; + + memcpy ( b->write_layout, b->user_layout, + f->nprocs * sizeof (*f->block->user_layout) ); + + for ( proc1 = 0, part1 = b->write_layout; + proc1 < f->nprocs-1; + proc1++, part1++ ) { + for ( proc2 = proc1+1, part2 = &b->write_layout[proc2]; + proc2 < f->nprocs; + proc2++, part2++ ) { + + if ( ! _have_ghostzone ( part1, part2 ) ) + continue; + + herr = _dissolve_ghostzone_max_volume_of_dissolved_partitions ( + part1, part2 ); + if ( herr < 0 ) return herr; + } + } + _H5Part_print_debug ("Layout after dissolving ghost-zones:"); + for ( proc1 = 0, part1 = b->write_layout; + proc1 < f->nprocs; + proc1++, part1++ ) { + _H5Part_print_debug ( + "PROC[%d]: proc[%d]: %lld:%lld, %lld:%lld, %lld:%lld ", + f->myproc, proc1, + (long long)part1->i_start, + (long long)part1->i_end, + (long long)part1->j_start, + (long long)part1->j_end, + (long long)part1->k_start, + (long long)part1->k_end ); + } + return H5PART_SUCCESS; +} +#endif + +static h5part_int64_t +_dissolve_ghostzone ( + struct H5BlockPartition *p, + struct H5BlockPartition *q + ) { + + struct H5BlockPartition p_; + struct H5BlockPartition q_; + struct H5BlockPartition p_best; + struct H5BlockPartition q_best; + h5part_int64_t vol; + h5part_int64_t max_vol = 0; + + p_ = *p; + q_ = *q; + if ( _dissolve_X_ghostzone ( &p_, &q_ ) == 0 ) { + vol = _volume_of_partition ( &p_ ) + _volume_of_partition ( &q_ ); + if ( vol > max_vol ) { + max_vol = vol; + p_best = p_; + q_best = q_; + } + } + + p_ = *p; + q_ = *q; + if ( _dissolve_Y_ghostzone ( &p_, &q_ ) == 0 ) { + vol = _volume_of_partition ( &p_ ) + _volume_of_partition ( &q_ ); + if ( vol > max_vol ) { + max_vol = vol; + p_best = p_; + q_best = q_; + } + } + p_ = *p; + q_ = *q; + + if ( _dissolve_Z_ghostzone ( &p_, &q_ ) == 0 ) { + vol = _volume_of_partition ( &p_ ) + _volume_of_partition ( &q_ ); + if ( vol > max_vol ) { + max_vol = vol; + p_best = p_; + q_best = q_; + } + } + if ( max_vol <= 0 ) { + return H5PART_ERR_LAYOUT; + } + *p = p_best; + *q = q_best; + + return H5PART_SUCCESS; +} + #if 0 +static h5part_int64_t +_dissolve_ghostzones ( + H5PartFile *f + ) { + + struct H5BlockStruct *b = f->block; + struct H5BlockPartition *p, *max_p; + struct H5BlockPartition *q, *max_q; + int proc_p, proc_q; + h5part_int64_t vol, max_vol; + int max_proc_p, max_proc_q; + + memcpy ( b->write_layout, b->user_layout, + f->nprocs * sizeof (*f->block->user_layout) ); + + while ( 1 ) { + max_vol = 0; + for ( proc_p = 0, p = b->write_layout; + proc_p < f->nprocs-1; + proc_p++, p++ ) { + for ( proc_q = proc_p+1, q = &b->write_layout[proc_q]; + proc_q < f->nprocs; + proc_q++, q++ ) { + + if ( ! _have_ghostzone ( p, q ) ) + continue; + vol = _volume_of_ghostzone ( p, q ); + if ( vol > max_vol ) { + max_vol = vol; + max_proc_p = proc_p; + max_proc_q = proc_q; + max_p = p; + max_q = q; + } + } + } + if ( max_vol == 0 ) + break; + + _dissolve_ghostzone ( max_p, max_q ); + } + + _H5Part_print_debug ("Layout after dissolving ghost-zones:"); + for ( proc_p = 0, p = b->write_layout; + proc_p < f->nprocs; + proc_p++, p++ ) { + _H5Part_print_debug ( + "PROC[%d]: proc[%d]: %lld:%lld, %lld:%lld, %lld:%lld ", + f->myproc, proc_p, + (long long)p->i_start, + (long long)p->i_end, + (long long)p->j_start, + (long long)p->j_end, + (long long)p->k_start, + (long long)p->k_end ); + } + return H5PART_SUCCESS; +} +#endif + + +static h5part_int64_t +_dissolve_ghostzones ( + H5PartFile *f + ) { + + struct H5BlockStruct *b = f->block; + struct H5BlockPartition *p; + struct H5BlockPartition *q; + int proc_p, proc_q; + + struct list { + struct list *prev; + struct list *next; + struct H5BlockPartition *p; + struct H5BlockPartition *q; + h5part_int64_t vol; + } *p_begin, *p_el, *p_max, *p_end, *p_save; + + memcpy ( b->write_layout, b->user_layout, + f->nprocs * sizeof (*f->block->user_layout) ); + + /* + build a list of all ghost-zones, save procs and volume remember max volume + while list not empty + take element with max volume from list and dissolve ghost-zones for this + recalculate volumes for remaining list elements remember max volume + remove list element if volume is zero + */ + + p_begin = p_max = p_end = malloc ( sizeof ( *p_begin ) ); + memset ( p_begin, 0, sizeof ( *p_begin ) ); + + for ( proc_p = 0, p = b->write_layout; + proc_p < f->nprocs-1; + proc_p++, p++ ) { + for ( proc_q = proc_p+1, q = &b->write_layout[proc_q]; + proc_q < f->nprocs; + proc_q++, q++ ) { + + if ( _have_ghostzone ( p, q ) ) { + p_el = malloc ( sizeof ( *p_el ) ); + + p_el->p = p; + p_el->q = q; + p_el->vol = _volume_of_ghostzone ( p, q ); + p_el->prev = p_end; + p_el->next = NULL; + + if ( p_el->vol > p_max->vol ) + p_max = p_el; + + p_end->next = p_el; + p_end = p_el; + } + } + } + while ( p_begin->next ) { + if ( p_max->next ) p_max->next->prev = p_max->prev; + p_max->prev->next = p_max->next; + + _dissolve_ghostzone ( p_max->p, p_max->q ); + + free ( p_max ); + p_el = p_max = p_begin->next; + + while ( p_el ) { + if ( _have_ghostzone ( p_el->p, p_el->q ) ) { + p_el->vol = _volume_of_ghostzone ( p_el->p, p_el->q ); + if ( p_el->vol > p_max->vol ) + p_max = p_el; + p_el = p_el->next; + } else { + if ( p_el->next ) + p_el->next->prev = p_el->prev; + p_el->prev->next = p_el->next; + p_save = p_el->next; + free ( p_el ); + p_el = p_save; + } + } + + } + free ( p_begin ); + + + _H5Part_print_debug ("Layout after dissolving ghost-zones:"); + for ( proc_p = 0, p = b->write_layout; + proc_p < f->nprocs; + proc_p++, p++ ) { + _H5Part_print_debug ( + "PROC[%d]: proc[%d]: %lld:%lld, %lld:%lld, %lld:%lld ", + f->myproc, proc_p, + (long long)p->i_start, + (long long)p->i_end, + (long long)p->j_start, + (long long)p->j_end, + (long long)p->k_start, + (long long)p->k_end ); + } + return H5PART_SUCCESS; +} + +static H5PartFile* +_init ( + void + ) { + + H5PartFile *f; + struct H5BlockStruct *b; + + + f = (H5PartFile*) malloc( sizeof (H5PartFile) ); + if( f == NULL ) { + return NULL; + } + memset (f, 0, sizeof (H5PartFile)); + f->nprocs = 32; + + f->block = malloc( sizeof (*f->block) ); + if ( f->block == NULL ) { + return NULL; + } + b = f->block; + memset ( b, 0, sizeof (*b) ); + b->user_layout = malloc ( f->nprocs * sizeof (b->user_layout[0]) ); + if ( b->user_layout == NULL ) { + return NULL; + } + b->write_layout = malloc ( f->nprocs * sizeof (b->write_layout[0]) ); + if ( b->write_layout == NULL ) { + return NULL; + } + b->timestep = -1; + b->blockgroup = -1; + b->shape = -1; + b->diskshape = -1; + b->memshape = -1; + b->field_group_id = -1; + + return f; +} + + + +int +main ( + int argc, + char *argv[] + ) { + + H5PartFile *f = _init (); + + memcpy ( f->block->user_layout, Layout32G, + f->nprocs * sizeof (*f->block->user_layout) ); + + _dissolve_ghostzones ( f ); + + return 0; +} diff --git a/trunk/test/H5BlockParTestScalarField.c b/trunk/test/H5BlockParTestScalarField.c new file mode 100644 index 0000000..47d7e5b --- /dev/null +++ b/trunk/test/H5BlockParTestScalarField.c @@ -0,0 +1,462 @@ +#include +#include +#include +#include "H5Part.h" +#include "H5Block.h" +#include "H5BlockTypes.h" + +#define NPROCS 8 + +struct H5BlockPartition Layout1[1] = { + { 0, 63, 0, 63, 0, 511 } +}; + +struct H5BlockPartition Layout8[8] = { + { 0,63, 0,63, 0, 63}, + { 0,63, 0,63, 64,127}, + { 0,63, 0,63, 128,191}, + { 0,63, 0,63, 192,255}, + { 0,63, 0,63, 256,319}, + { 0,63, 0,63, 320,383}, + { 0,63, 0,63, 384,447}, + { 0,63, 0,63, 448,511} +}; + +struct H5BlockPartition Layout8G[8] = { + { 0,63, 0,63, 0, 64}, + { 0,63, 0,63, 63,128}, + { 0,63, 0,63, 127,192}, + { 0,63, 0,63, 191,256}, + { 0,63, 0,63, 255,320}, + { 0,63, 0,63, 319,384}, + { 0,63, 0,63, 383,448}, + { 0,63, 0,63, 447,511} +}; + +struct H5BlockPartition Layout16[16] = { + { 0,63, 0,31, 0, 63}, + { 0,63, 32,63, 0, 63}, + { 0,63, 0,31, 64,127}, + { 0,63, 32,63, 64,127}, + { 0,63, 0,31, 128,191}, + { 0,63, 32,63, 128,191}, + { 0,63, 0,31, 192,255}, + { 0,63, 32,63, 192,255}, + { 0,63, 0,31, 256,319}, + { 0,63, 32,63, 256,319}, + { 0,63, 0,31, 320,383}, + { 0,63, 32,63, 320,383}, + { 0,63, 0,31, 384,447}, + { 0,63, 32,63, 384,447}, + { 0,63, 0,31, 448,511}, + { 0,63, 32,63, 448,511} +}; + +struct H5BlockPartition Layout16G[16] = { + { 0,63, 0,32, 0, 64}, + { 0,63, 31,63, 0, 64}, + { 0,63, 0,32, 63,128}, + { 0,63, 31,63, 63,128}, + { 0,63, 0,32, 127,192}, + { 0,63, 31,63, 127,192}, + { 0,63, 0,32, 191,256}, + { 0,63, 31,63, 191,256}, + { 0,63, 0,32, 255,320}, + { 0,63, 31,63, 255,320}, + { 0,63, 0,32, 319,384}, + { 0,63, 31,63, 319,384}, + { 0,63, 0,32, 383,448}, + { 0,63, 31,63, 383,448}, + { 0,63, 0,32, 447,511}, + { 0,63, 31,63, 447,511} +}; + + +struct H5BlockPartition Layout32[32] = { + { 0,31, 0,31, 0, 63}, + { 0,31, 32,63, 0, 63}, + { 32,63, 0,31, 0, 63}, + { 32,63, 32,63, 0, 63}, + { 0,31, 0,31, 64,127}, + { 0,31, 32,63, 64,127}, + { 32,63, 0,31, 64,127}, + { 32,63, 32,63, 64,127}, + { 0,31, 0,31, 128,191}, + { 0,31, 32,63, 128,191}, + { 32,63, 0,31, 128,191}, + { 32,63, 32,63, 128,191}, + { 0,31, 0,31, 192,255}, + { 0,31, 32,63, 192,255}, + { 32,63, 0,31, 192,255}, + { 32,63, 32,63, 192,255}, + { 0,31, 0,31, 256,319}, + { 0,31, 32,63, 256,319}, + { 32,63, 0,31, 256,319}, + { 32,63, 32,63, 256,319}, + { 0,31, 0,31, 320,383}, + { 0,31, 32,63, 320,383}, + { 32,63, 0,31, 320,383}, + { 32,63, 32,63, 320,383}, + { 0,31, 0,31, 384,447}, + { 0,31, 32,63, 384,447}, + { 32,63, 0,31, 384,447}, + { 32,63, 32,63, 384,447}, + { 0,31, 0,31, 448,511}, + { 0,31, 32,63, 448,511}, + { 32,63, 0,31, 448,511}, + { 32,63, 32,63, 448,511} +}; + +struct H5BlockPartition Layout32G[32] = { + { 0,32, 0,32, 0, 64}, + { 0,32, 31,63, 0, 64}, + { 31,63, 0,32, 0, 64}, + { 31,63, 31,63, 0, 64}, + { 0,32, 0,32, 63,128}, + { 0,32, 31,63, 63,128}, + { 31,63, 0,32, 63,128}, + { 31,63, 31,63, 63,128}, + { 0,32, 0,32, 127,192}, + { 0,32, 31,63, 127,192}, + { 31,63, 0,32, 127,192}, + { 31,63, 31,63, 127,192}, + { 0,32, 0,32, 191,256}, + { 0,32, 31,63, 191,256}, + { 31,63, 0,32, 191,256}, + { 31,63, 31,63, 191,256}, + { 0,32, 0,32, 255,320}, + { 0,32, 31,63, 255,320}, + { 31,63, 0,32, 255,320}, + { 31,63, 31,63, 255,320}, + { 0,32, 0,32, 319,384}, + { 0,32, 31,63, 319,384}, + { 31,63, 0,32, 319,384}, + { 31,63, 31,63, 319,384}, + { 0,31, 0,31, 383,448}, + { 0,31, 31,63, 383,448}, + { 31,63, 0,31, 383,448}, + { 31,63, 31,63, 383,448}, + { 0,32, 0,32, 447,511}, + { 0,32, 31,63, 447,511}, + { 31,63, 0,32, 447,511}, + { 31,63, 31,63, 447,511} +}; + +#if 0 +static h5part_int64_t +_calc_index_KJI ( + int myproc, + h5part_int64_t i, + h5part_int64_t i_dims, + h5part_int64_t j, + h5part_int64_t j_dims, + h5part_int64_t k, + h5part_int64_t k_dims + ) { + + return i + j*i_dims + k*i_dims*j_dims; +} +#endif + +#define _calc_index( i, i_dims, j, j_dims, k, k_dims ) \ + (i + j*i_dims + k*i_dims*j_dims) + +static h5part_int64_t +_write_data ( + H5PartFile *f, + int myproc, + struct H5BlockPartition *layout + ) { + + h5part_int64_t i, j, k, idx; + h5part_int64_t herr; + h5part_float64_t *data; + h5part_int64_t i_dims = layout->i_end - layout->i_start + 1; + h5part_int64_t j_dims = layout->j_end - layout->j_start + 1; + h5part_int64_t k_dims = layout->k_end - layout->k_start + 1; + + printf ( "Writing Step #%lld\n", (long long)f->timestep ); + + data = malloc ( i_dims * j_dims * k_dims * sizeof ( *data ) ); + for ( i = 0; i < i_dims; i++ ) { + for ( j = 0; j < j_dims; j++ ) { + for ( k = 0; k < k_dims; k++ ) { + idx = _calc_index ( + i, i_dims, + j, j_dims, + k, k_dims ); + *(data + idx) = k + + 1000*j + + 100000*i + + 10000000*myproc; + } + } + } + + herr = H5BlockDefine3DFieldLayout ( + f, + layout->i_start, layout->i_end, + layout->j_start, layout->j_end, + layout->k_start, layout->k_end ); + if ( herr < 0 ) return herr; + + herr = H5Block3dWriteScalarField ( f, "TestField", data ); + if ( herr < 0 ) return herr; + + free ( data ); + return 1; +} + +static h5part_int64_t +_write_file ( + const char *fname, + const int myproc, + MPI_Comm comm, + struct H5BlockPartition *layout + ) { + + H5PartFile *f; + h5part_int64_t timestep = 0; + h5part_int64_t herr; + + printf ("PROC[%d]: Open file \"%s\" for writing ...\n", + myproc, fname ); + + f = H5PartOpenFileParallel ( fname, H5PART_WRITE, comm ); + if ( f == NULL ) return -1; + + herr = H5PartSetStep ( f, timestep ); + if ( herr < 0 ) return herr; + + if ( _write_data ( f, myproc, layout ) < 0 ) { + printf ("Failed to write file \"%s\"\n", fname ); + return 2; + } + + herr = H5PartCloseFile ( f ); + if ( herr < 0 ) return -1; + + return 0; +} + +static h5part_int64_t +_read_data ( + H5PartFile *f, + int myproc, + struct H5BlockPartition *layout + ) { + + h5part_int64_t i, j, k, idx; + h5part_int64_t herr; + h5part_float64_t *data; + h5part_int64_t i_dims = layout->i_end - layout->i_start + 1; + h5part_int64_t j_dims = layout->j_end - layout->j_start + 1; + h5part_int64_t k_dims = layout->k_end - layout->k_start + 1; + + printf ( "Reading Step #%lld\n", (long long)f->timestep ); + + data = malloc ( i_dims * j_dims * k_dims * sizeof ( *data ) ); + + herr = H5BlockDefine3DFieldLayout ( + f, + layout->i_start, layout->i_end, + layout->j_start, layout->j_end, + layout->k_start, layout->k_end ); + if ( herr < 0 ) return herr; + + herr = H5Block3dReadScalarField ( f, "TestField", data ); + if ( herr < 0 ) return herr; + + for ( i = 0; i < i_dims; i++ ) { + for ( j = 0; j < j_dims; j++ ) { + for ( k = 0; k < k_dims; k++ ) { + idx = _calc_index ( + i, i_dims, + j, j_dims, + k, k_dims ); + + /* + what do I need to calculate the value? + proc which has the item written + i, j, k relative to proc + */ + + h5part_int64_t ri = i + layout->i_start; + h5part_int64_t rj = j + layout->j_start; + h5part_int64_t rk = k + layout->k_start; + int proc = (int) H5Block3dGetProcOf ( f, ri, rj, rk ); + + h5part_int64_t i_start, i_end; + h5part_int64_t j_start, j_end; + h5part_int64_t k_start, k_end; + + H5Block3dGetPartitionOfProc ( + f, + proc, + &i_start, &i_end, + &j_start, &j_end, + &k_start, &k_end ); + ri -= i_start; + rj -= j_start; + rk -= k_start; + h5part_float64_t value = rk + + 1000*rj + + 100000*ri + + 10000000*proc; + if ( *(data + idx) != value ) { + printf ( + "PROC[%d]: " + "value missmatch for (%lld,%lld,%lld); is: %f;" + " should be: %f\n", + myproc, + (long long)i, (long long)j, (long long)k, + *( data + idx ), value ); + printf ( + "PROC[%d]: " + "My partition is: " + "%lld:%lld, %lld:%lld, %lld:%lld\n", + myproc, + (long long)layout->i_start, (long long)layout->i_end, + (long long)layout->j_start, (long long)layout->j_end, + (long long)layout->k_start, (long long)layout->k_end ); + printf ( + "PROC[%d]: " + "Value has been written by proc %d\n", + myproc, proc ); + printf ( + "PROC[%d]: " + "The partition for this proc was: " + "%lld:%lld, %lld:%lld, %lld:%lld\n", + myproc, + (long long)i_start, (long long)i_end, + (long long)j_start, (long long)j_end, + (long long)k_start, (long long)k_end ); + return -1; + } + } + } + } + + free ( data ); + + return 0; +} + +static h5part_int64_t +_read_file ( + const char *fname, + const int myproc, + MPI_Comm comm, + struct H5BlockPartition *layout + ) { + + H5PartFile *f; + h5part_int64_t timestep = 0; + h5part_int64_t herr; + + printf ("PROC[%d]: Open file \"%s\" for reading ...\n", + myproc, fname ); + + f = H5PartOpenFileParallel ( fname, H5PART_READ, comm ); + if ( f == NULL ) return -1; + + herr = H5PartSetStep ( f, timestep ); + if ( herr < 0 ) return herr; + + if ( _read_data ( f, myproc, layout ) < 0 ) { + printf ("Failed to read file \"%s\"\n", fname ); + return 2; + } + + herr = H5PartCloseFile ( f ); + if ( herr < 0 ) return -1; + + return 0; +} + +int +main ( + int argc, + char **argv + ) { + char *fname; + int myproc; + int nprocs; + int opt_with_ghosts = 0; + int opt_read = 0; + int opt_write = 0; + struct H5BlockPartition *layout; + MPI_Comm comm = MPI_COMM_WORLD; + + MPI_Init( &argc, &argv ); + MPI_Comm_size ( comm, &nprocs ); + MPI_Comm_rank( comm, &myproc ); + + while ( --argc ) { + if ( strcmp ( argv[argc], "-r" ) == 0 ) + opt_read = 1; + else if ( strcmp ( argv[argc], "-w" ) == 0 ) + opt_write = 1; + else if ( strcmp ( argv[argc], "-g" ) == 0 ) + opt_with_ghosts = 1; + else { + fprintf ( stderr, + "Illegal option %s\n\n" + "Usage: %s -w -r -g\n", + argv[argc], argv[0] ); + return 1; + } + } + switch ( nprocs ) { + case 1: + fname = "blockfile1.h5"; + layout = &Layout1[myproc]; + break; + case 8: + if ( opt_with_ghosts ) { + fname = "blockfile8G.h5"; + layout = &Layout8G[myproc]; + } else { + fname = "blockfile8.h5"; + layout = &Layout8[myproc]; + } + break; + case 16: + if ( opt_with_ghosts ) { + fname = "blockfile16G.h5"; + layout = &Layout16G[myproc]; + } else { + fname = "blockfile16.h5"; + layout = &Layout16[myproc]; + } + break; + case 32: + if ( opt_with_ghosts ) { + fname = "blockfile32G.h5"; + layout = &Layout32G[myproc]; + } else { + fname = "blockfile32.h5"; + layout = &Layout32[myproc]; + } + break; + default: + printf ( "Run this test on %d processor(s)!\n", NPROCS ); + return 1; + } + + H5PartSetVerbosityLevel ( 4 ); + + if ( opt_write ) { + if ( _write_file ( fname, myproc, comm, layout ) < 0 ) { + printf ("Failed to write file \"%s\"\n", fname ); + } + } else if ( opt_read ) { + if ( _read_file ( fname, myproc, comm, layout ) < 0 ) { + printf ("Failed to read file \"%s\"\n", fname ); + } + } + + MPI_Finalize(); + + return 0; +} diff --git a/trunk/test/H5BlockParTestScalarField.pbs b/trunk/test/H5BlockParTestScalarField.pbs new file mode 100644 index 0000000..a11d34c --- /dev/null +++ b/trunk/test/H5BlockParTestScalarField.pbs @@ -0,0 +1,7 @@ +#!/bin/bash +#PBS -l size=16 +#PBS -j oe + +cd /scratch/agsell/H5Part/test +yod -np 16 ./H5BlockParTestScalarField -w -g + diff --git a/trunk/test/H5BlockParTestScalarFieldF.f90 b/trunk/test/H5BlockParTestScalarFieldF.f90 new file mode 100644 index 0000000..12809c9 --- /dev/null +++ b/trunk/test/H5BlockParTestScalarFieldF.f90 @@ -0,0 +1,462 @@ +PROGRAM H5BlockParTestScalarFieldF + IMPLICIT NONE + + INCLUDE 'mpif.h' + INCLUDE 'H5PartF90.inc' + INCLUDE 'H5BlockF90.inc' + + INTERFACE + INTEGER FUNCTION IARGC () + END FUNCTION IARGC + END INTERFACE + + INTEGER :: myproc = 0 + INTEGER :: nprocs = 1 + INTEGER :: comm = MPI_COMM_WORLD + INTEGER :: mpi_err + INTEGER*8 :: h5pt_err + INTEGER :: i + CHARACTER(LEN=32) :: arg_str + INTEGER :: opt_read = 0 + INTEGER :: opt_write = 0 + INTEGER :: opt_with_ghosts = 0 + CHARACTER(LEN=128) :: fname + INTEGER*8 :: layout (6) + INTEGER*8 :: layout1 (6,1) + INTEGER*8 :: layout8 (6,8) + INTEGER*8 :: layout8g (6,8) + INTEGER*8 :: layout16 (6,16) + INTEGER*8 :: layout16g(6,16) + INTEGER*8 :: layout32 (6,32) + INTEGER*8 :: layout32g(6,32) + + DATA layout1 / 1,64, 1,64, 1,512 / + DATA layout8 / 1,64, 1,64, 1, 64, & + 1,64, 1,64, 65,128, & + 1,64, 1,64, 129,192, & + 1,64, 1,64, 193,256, & + 1,64, 1,64, 257,320, & + 1,64, 1,64, 321,384, & + 1,64, 1,64, 385,448, & + 1,64, 1,64, 449,512 / + + DATA layout8g / 1,64, 1,64, 1, 65, & + 1,64, 1,64, 64,129, & + 1,64, 1,64, 128,193, & + 1,64, 1,64, 192,257, & + 1,64, 1,64, 256,321, & + 1,64, 1,64, 320,385, & + 1,64, 1,64, 384,449, & + 1,64, 1,64, 448,512 / + + DATA layout16 / 1,64, 1,32, 1, 64, & + 1,64, 33,64, 1, 64, & + 1,64, 1,32, 65,128, & + 1,64, 33,64, 65,128, & + 1,64, 1,32, 129,192, & + 1,64, 33,64, 129,192, & + 1,64, 1,32, 193,256, & + 1,64, 33,64, 193,256, & + 1,64, 1,32, 257,320, & + 1,64, 33,64, 257,320, & + 1,64, 1,32, 321,384, & + 1,64, 33,64, 321,384, & + 1,64, 1,32, 385,448, & + 1,64, 33,64, 385,448, & + 1,64, 1,32, 449,512, & + 1,64, 33,64, 449,512 / + + DATA layout16g/ 1,64, 1,33, 1, 65, & + 1,64, 32,64, 1, 65, & + 1,64, 1,33, 64,129, & + 1,64, 32,64, 64,129, & + 1,64, 1,33, 128,193, & + 1,64, 32,64, 128,193, & + 1,64, 1,33, 192,257, & + 1,64, 32,64, 192,257, & + 1,64, 1,33, 256,321, & + 1,64, 32,64, 256,321, & + 1,64, 1,33, 320,385, & + 1,64, 32,64, 320,385, & + 1,64, 1,33, 384,449, & + 1,64, 32,64, 384,449, & + 1,64, 1,33, 448,512, & + 1,64, 32,64, 448,512 / + + DATA layout32 / 1,32, 1,32, 1, 64, & + 1,32, 33,64, 1, 64, & + 33,64, 1,32, 1, 64, & + 33,64, 33,64, 1, 64, & + 1,32, 1,32, 65,128, & + 1,32, 33,64, 65,128, & + 33,64, 1,32, 65,128, & + 33,64, 33,64, 65,128, & + 1,32, 1,32, 129,192, & + 1,32, 33,64, 129,192, & + 33,64, 1,32, 129,192, & + 33,64, 33,64, 129,192, & + 1,32, 1,32, 193,256, & + 1,32, 33,64, 193,256, & + 33,64, 1,32, 193,256, & + 33,64, 33,64, 193,256, & + 1,32, 1,32, 257,320, & + 1,32, 33,64, 257,320, & + 33,64, 1,32, 257,320, & + 33,64, 33,64, 257,320, & + 1,32, 1,32, 321,384, & + 1,32, 33,64, 321,384, & + 33,64, 1,32, 321,384, & + 33,64, 33,64, 321,384, & + 1,32, 1,32, 385,448, & + 1,32, 33,64, 385,448, & + 33,64, 1,32, 385,448, & + 33,64, 33,64, 385,448, & + 1,32, 1,32, 449,512, & + 1,32, 33,64, 449,512, & + 33,64, 1,32, 449,512, & + 33,64, 33,64, 449,512 / + + DATA layout32G/ 1,33, 1,33, 1, 65, & + 1,33, 32,64, 1, 65, & + 32,64, 1,33, 1, 65, & + 32,64, 32,64, 1, 65, & + 1,33, 1,33, 64,129, & + 1,33, 32,64, 64,129, & + 32,64, 1,33, 64,129, & + 32,64, 32,64, 64,129, & + 1,33, 1,33, 128,193, & + 1,33, 32,64, 128,193, & + 32,64, 1,33, 128,193, & + 32,64, 32,64, 128,193, & + 1,33, 1,33, 192,257, & + 1,33, 32,64, 192,257, & + 32,64, 1,33, 192,257, & + 32,64, 32,64, 192,257, & + 1,33, 1,33, 256,321, & + 1,33, 32,64, 256,321, & + 32,64, 1,33, 256,321, & + 32,64, 32,64, 256,321, & + 1,33, 1,33, 320,385, & + 1,33, 32,64, 320,385, & + 32,64, 1,33, 320,385, & + 32,64, 32,64, 320,385, & + 1,33, 1,33, 384,449, & + 1,33, 32,64, 384,449, & + 32,64, 1,33, 384,449, & + 32,64, 32,64, 384,449, & + 1,33, 1,33, 448,512, & + 1,33, 32,64, 448,512, & + 32,64, 1,33, 448,512, & + 32,64, 32,64, 448,512 / + + CALL MPI_Init ( mpi_err ) + comm = MPI_COMM_WORLD + CALL MPI_Comm_rank ( comm, myproc, mpi_err) + CALL MPI_Comm_size ( comm, nprocs, mpi_err) + + DO i = 1, IARGC () + CALL GETARG ( i, arg_str ) + PRINT *, arg_str + IF ( arg_str == "-r" ) THEN + PRINT *, "Reading file" + opt_read = 1 + ELSE IF ( arg_str == "-w" ) THEN + opt_write = 1 + ELSE IF ( arg_str == "-g" ) THEN + opt_with_ghosts = 1 + ELSE + PRINT *, "Illegal option ", arg_str, "\n" + PRINT *, "Usage: H5BlockTestAttributesF -w | -r [-g]" + END IF + + END DO + + SELECTCASE ( nprocs ) + CASE ( 1 ) + fname = "Fblockfile1.h5" + layout = layout1 ( :, myproc+1 ) + + CASE ( 8 ) + IF ( opt_with_ghosts == 1 ) THEN + fname = "Fblockfile8G.h5" + layout = layout8g ( :, myproc+1 ) + ELSE + fname = "Fblockfile8.h5" + layout = layout8 ( :, myproc+1 ) + END IF + + CASE ( 16 ) + IF ( opt_with_ghosts == 1 ) THEN + fname = "Fblockfile16G.h5" + layout = layout16g ( :, myproc+1 ) + ELSE + fname = "Fblockfile16.h5" + layout = layout16 ( :, myproc+1 ) + END IF + + CASE ( 32 ) + IF ( opt_with_ghosts == 1 ) THEN + fname = "Fblockfile32G.h5" + layout = layout32g ( :, myproc+1 ) + ELSE + fname = "Fblockfile32.h5" + layout = layout32 ( :, myproc+1 ) + END IF + + CASE DEFAULT + print *, "Run this test with 1, 8, 16 or 32 procs!" + + END SELECT + + h5pt_err = h5pt_set_verbosity_level ( 4_8 ) + + IF ( opt_write == 1 ) THEN + h5pt_err = write_file ( fname, myproc, comm, layout ) + IF ( h5pt_err < 0 ) THEN + PRINT *, "Faild to write file ", fname, "!" + END IF + + ELSE IF ( opt_read == 1 ) THEN + h5pt_err = read_file ( fname, myproc, comm, layout ) + IF ( h5pt_err < 0 ) THEN + PRINT *, "Faild to write file ", fname, "!" + END IF + + ENDIF + + CALL MPI_Finalize + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!! + CONTAINS + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! + INTEGER*8 FUNCTION write_file ( fname, myproc, comm, layout ) + IMPLICIT NONE + + CHARACTER(LEN=*), INTENT(IN) :: fname + INTEGER, INTENT(IN) :: myproc + INTEGER, INTENT(IN) :: comm + INTEGER*8, INTENT(IN) :: layout(6) + + INTEGER*8 :: file + INTEGER*8 :: timestep = 1 + + PRINT "('PROC[',I,']: Open file ',A,' for writing ...')", myproc, fname + + file = h5pt_openw_par ( fname, comm ) + if ( file == 0 ) THEN + write_file = -1 + RETURN + ENDIF + PRINT *, "file: ", file + + h5pt_err = h5pt_setstep ( file, timestep ) + IF ( h5pt_err < 0 ) THEN + write_file = h5pt_err + RETURN + ENDIF + + h5pt_err = write_field ( file, myproc, layout ) + IF ( h5pt_err < 0 ) THEN + write_file = h5pt_err + RETURN + ENDIF + + h5pt_err = h5pt_close ( file ) + IF ( h5pt_err < 0 ) THEN + write_file = h5pt_err + RETURN + ENDIF + + write_file = 0 + END FUNCTION write_file + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! + INTEGER*8 FUNCTION write_field ( file, myproc, layout ) + IMPLICIT NONE + + INTEGER*8, INTENT(IN) :: file + INTEGER, INTENT(IN) :: myproc + INTEGER*8, INTENT(IN) :: layout(6) + + INTEGER*8 :: i, j, k + INTEGER*8 :: i_start + INTEGER*8 :: i_end + INTEGER*8 :: j_start + INTEGER*8 :: j_end + INTEGER*8 :: k_start + INTEGER*8 :: k_end + INTEGER*8 :: i_dims + INTEGER*8 :: j_dims + INTEGER*8 :: k_dims + REAL*8 :: value + + REAL*8, DIMENSION(:,:,:), ALLOCATABLE :: data + + PRINT *, "Reading field ..." + i_start = layout(1) + i_end = layout(2) + j_start = layout(3) + j_end = layout(4) + k_start = layout(5) + k_end = layout(6) + i_dims = i_end - i_start + 1 + j_dims = j_end - j_start + 1 + k_dims = k_end - k_start + 1 + + PRINT "('dims: (',I2,I2,I2,')')", i_dims, j_dims, k_dims + ALLOCATE ( data (i_dims,j_dims, k_dims) ) + + PRINT *, "Defining Layout ..." + h5pt_err = h5bl_define3dlayout ( file, i_start, i_end, j_start, j_end, k_start, k_end ) + IF ( h5pt_err < 0 ) THEN + write_field = h5pt_err + RETURN + END IF + + DO i = 1, i_dims + DO j = 1, j_dims + DO k = 1, k_dims + value = (k-1) + 1000*(j-1) + 100000*(i-1) + 10000000*myproc + data(i,j,k) = value + END DO + END DO + END DO + + PRINT *, "Writing field ..." + h5pt_err = h5bl_3d_write_scalar_field ( file, "TestField", data ) + IF ( h5pt_err < 0 ) THEN + write_field = h5pt_err + RETURN + END IF + + write_field = 0 + END FUNCTION write_field + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! + INTEGER*8 FUNCTION read_file ( fname, myproc, comm, layout ) + IMPLICIT NONE + + CHARACTER(LEN=*), INTENT(IN) :: fname + INTEGER, INTENT(IN) :: myproc + INTEGER, INTENT(IN) :: comm + INTEGER*8, INTENT(IN) :: layout(6) + + INTEGER*8 :: file + INTEGER*8 :: timestep = 1 + + PRINT *, "PROC[",myproc,"]: Open file ",fname," for reading ..." + + file = h5pt_openr_par ( fname, comm ) + if ( file == 0 ) THEN + read_file = -1 + RETURN + ENDIF + + h5pt_err = h5pt_setstep ( file, timestep ) + IF ( h5pt_err < 0 ) THEN + read_file = -1 + RETURN + ENDIF + + h5pt_err = read_field ( file, myproc, layout ) + IF ( h5pt_err < 0 ) THEN + read_file = -1 + RETURN + ENDIF + + h5pt_err = h5pt_close ( file ) + IF ( h5pt_err < 0 ) THEN + read_file = -1 + RETURN + ENDIF + + read_file = 0 + END FUNCTION read_file + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! + INTEGER*8 FUNCTION read_field ( file, myproc, layout ) + IMPLICIT NONE + + INTEGER*8, INTENT(IN) :: file + INTEGER, INTENT(IN) :: myproc + INTEGER*8, INTENT(IN) :: layout(6) + + INTEGER*8 :: i, j, k + INTEGER*8 :: i_start, i_start2 + INTEGER*8 :: i_end, i_end2 + INTEGER*8 :: j_start, j_start2 + INTEGER*8 :: j_end, j_end2 + INTEGER*8 :: k_start, k_start2 + INTEGER*8 :: k_end, k_end2 + INTEGER*8 :: i_dims + INTEGER*8 :: j_dims + INTEGER*8 :: k_dims + INTEGER*8 :: ri, rj, rk, proc + REAL*8 :: value + + REAL*8, DIMENSION(:,:,:), ALLOCATABLE :: data + + PRINT *, "Reading field ..." + i_start = layout(1) + i_end = layout(2) + j_start = layout(3) + j_end = layout(4) + k_start = layout(5) + k_end = layout(6) + i_dims = i_end - i_start + 1 + j_dims = j_end - j_start + 1 + k_dims = k_end - k_start + 1 + + PRINT "('dims: (',I3,',',I3,',',I3,')')", i_dims, j_dims, k_dims + ALLOCATE ( data (i_dims,j_dims, k_dims) ) + + PRINT *, "Defining Layout ..." + h5pt_err = h5bl_define3dlayout ( file, i_start, i_end, j_start, j_end, k_start, k_end ) + IF ( h5pt_err < 0 ) THEN + read_field = -1 + RETURN + END IF + + PRINT *, "Reading field ..." + h5pt_err = h5bl_3d_read_scalar_field ( file, "TestField", data ) + IF ( h5pt_err < 0 ) THEN + read_field = -1 + RETURN + END IF + + DO i = 1, i_dims + DO j = 1, j_dims + DO k = 1, k_dims + ri = i + i_start - 1 + rj = j + j_start - 1 + rk = k + k_start - 1 + + proc = h5bl_get_proc_of ( file, ri, rj, rk ) + h5pt_err = h5bl_get_partition_of_proc ( file, proc, i_start2, i_end2, j_start2, j_end2, k_start2, k_end2 ) + + ri = ri - i_start2 + rj = rj - j_start2 + rk = rk - k_start2 + + value = rk + 1000*rj + 100000*ri + 10000000*proc + if ( data(i,j,k) /= value ) THEN + PRINT "('data(',I3,',',I3,',',I3,') = ',F,' /= ',F)", i, j, k, data(i,j,k), value + PRINT "('proc: ', I2)", proc + PRINT "('i_start: ', I3, ' i_end: ', I3)", i_start, i_end + PRINT "('j_start: ', I3, ' j_end: ', I3)", j_start, j_end + PRINT "('k_start: ', I3, ' k_end: ', I3)", k_start, k_end + END IF + END DO + END DO + END DO + read_field = 0 + END FUNCTION read_field + + + END PROGRAM diff --git a/trunk/test/H5BlockTestAttributes.c b/trunk/test/H5BlockTestAttributes.c new file mode 100644 index 0000000..3483fe1 --- /dev/null +++ b/trunk/test/H5BlockTestAttributes.c @@ -0,0 +1,468 @@ +#include +#include +#include +#include "H5Part.h" +#include "H5Block.h" +#include "H5BlockTypes.h" +#ifndef PARALLEL_IO +#ifndef MPI_COMM_WORLD +#define MPI_COMM_WORLD 0 +#endif +#endif + +struct H5BlockPartition Layout1[1] = { + { 0, 63, 0, 63, 0, 511 } +}; + +#define _calc_index( i, i_dims, j, j_dims, k, k_dims ) \ + (i + j*i_dims + k*i_dims*j_dims) + +static h5part_int64_t +_write_data ( + H5PartFile *f, + int myproc, + struct H5BlockPartition *layout + ) { + + h5part_int64_t i, j, k, idx; + h5part_int64_t herr; + h5part_float64_t *data; + h5part_int64_t i_dims = layout->i_end - layout->i_start + 1; + h5part_int64_t j_dims = layout->j_end - layout->j_start + 1; + h5part_int64_t k_dims = layout->k_end - layout->k_start + 1; + + printf ( "Writing Step #%lld\n", (long long)f->timestep ); + + data = malloc ( i_dims * j_dims * k_dims * sizeof ( *data ) ); + for ( i = 0; i < i_dims; i++ ) { + for ( j = 0; j < j_dims; j++ ) { + for ( k = 0; k < k_dims; k++ ) { + idx = _calc_index ( + i, i_dims, + j, j_dims, + k, k_dims ); + *(data + idx) = k + + 1000*j + + 100000*i + + 10000000*myproc; + } + } + } + + herr = H5BlockDefine3DFieldLayout ( + f, + layout->i_start, layout->i_end, + layout->j_start, layout->j_end, + layout->k_start, layout->k_end ); + if ( herr < 0 ) return herr; + + herr = H5Block3dWriteScalarField ( f, "TestField", data ); + if ( herr < 0 ) return herr; + + free ( data ); + return 1; +} + +static h5part_int64_t +_write_attributes ( + H5PartFile *f, + const int myproc + ) { + + h5part_int64_t herr = H5BlockWriteFieldAttribString ( + f, + "TestField", + "TestString", + "42" ); + if ( herr < 0 ) return -1; + + h5part_int64_t ival[1] = { 42 }; + h5part_float64_t rval[1] = { 42.0 }; + herr = H5BlockWriteFieldAttrib ( + f, + "TestField", + "TestInt64", + H5PART_INT64, + ival, 1 ); + if ( herr < 0 ) return -1; + + herr = H5BlockWriteFieldAttrib ( + f, + "TestField", + "TestFloat64", + H5PART_FLOAT64, + rval, 1 ); + if ( herr < 0 ) return -1; + + herr = H5Block3dSetFieldOrigin ( f, "TestField", 1.0, 2.0, 3.0 ); + if ( herr < 0 ) return -1; + + herr = H5Block3dSetFieldSpacing ( f, "TestField", 2.0, 3.0, 4.0 ); + if ( herr < 0 ) return -1; + + return H5PART_SUCCESS; +} + +static h5part_int64_t +_write_file ( + const char *fname, + const int myproc, + MPI_Comm comm, + struct H5BlockPartition *layout + ) { + + H5PartFile *f; + h5part_int64_t timestep = 0; + h5part_int64_t herr; + + printf ("PROC[%d]: Open file \"%s\" for writing ...\n", + myproc, fname ); + +#ifdef PARALLEL_IO + f = H5PartOpenFileParallel ( + fname, + H5PART_WRITE, + comm + ); +#else + f = H5PartOpenFile ( + fname, + H5PART_WRITE + ); + +#endif + if ( f == NULL ) return -1; + + herr = H5PartSetStep ( f, timestep ); + if ( herr < 0 ) return herr; + + if ( _write_data ( f, myproc, layout ) < 0 ) { + printf ("Failed to write file \"%s\"\n", fname ); + return 2; + } + + if ( _write_attributes ( f, myproc ) < 0 ) { + printf ("Failed to write attributes \"%s\"\n", fname ); + return 2; + } + + + herr = H5PartCloseFile ( f ); + if ( herr < 0 ) return -1; + + return 0; +} + + +static h5part_int64_t +_read_data ( + H5PartFile *f, + int myproc, + struct H5BlockPartition *layout + ) { + + h5part_int64_t i, j, k, idx; + h5part_int64_t herr; + h5part_float64_t *data; + h5part_int64_t i_dims = layout->i_end - layout->i_start + 1; + h5part_int64_t j_dims = layout->j_end - layout->j_start + 1; + h5part_int64_t k_dims = layout->k_end - layout->k_start + 1; + + printf ( "Reading Step #%lld\n", (long long)f->timestep ); + + data = malloc ( i_dims * j_dims * k_dims * sizeof ( *data ) ); + + herr = H5BlockDefine3DFieldLayout ( + f, + layout->i_start, layout->i_end, + layout->j_start, layout->j_end, + layout->k_start, layout->k_end ); + if ( herr < 0 ) return herr; + + herr = H5Block3dReadScalarField ( f, "TestField", data ); + if ( herr < 0 ) return herr; + + for ( i = 0; i < i_dims; i++ ) { + for ( j = 0; j < j_dims; j++ ) { + for ( k = 0; k < k_dims; k++ ) { + idx = _calc_index ( + i, i_dims, + j, j_dims, + k, k_dims ); + + /* + what do I need to calculate the value? + proc which has the item written + i, j, k relative to proc + */ + + h5part_int64_t ri = i + layout->i_start; + h5part_int64_t rj = j + layout->j_start; + h5part_int64_t rk = k + layout->k_start; + int proc = (int) H5Block3dGetProcOf ( f, ri, rj, rk ); + + h5part_int64_t i_start, i_end; + h5part_int64_t j_start, j_end; + h5part_int64_t k_start, k_end; + + H5Block3dGetPartitionOfProc ( + f, + proc, + &i_start, &i_end, + &j_start, &j_end, + &k_start, &k_end ); + ri -= i_start; + rj -= j_start; + rk -= k_start; + h5part_float64_t value = rk + + 1000*rj + + 100000*ri + + 10000000*proc; + if ( *(data + idx) != value ) { + printf ( + "PROC[%d]: " + "value missmatch for (%lld,%lld,%lld); is: %f;" + " should be: %f\n", + myproc, + (long long)i, (long long)j, (long long)k, + *( data + idx ), value ); + printf ( + "PROC[%d]: " + "My partition is: " + "%lld:%lld, %lld:%lld, %lld:%lld\n", + myproc, + (long long)layout->i_start, (long long)layout->i_end, + (long long)layout->j_start, (long long)layout->j_end, + (long long)layout->k_start, (long long)layout->k_end ); + printf ( + "PROC[%d]: " + "Value has been written by proc %d\n", + myproc, proc ); + printf ( + "PROC[%d]: " + "The partition for this proc was: " + "%lld:%lld, %lld:%lld, %lld:%lld\n", + myproc, + (long long)i_start, (long long)i_end, + (long long)j_start, (long long)j_end, + (long long)k_start, (long long)k_end ); + return -1; + } + } + } + } + + free ( data ); + + return 0; +} + +static h5part_int64_t +_read_file ( + const char *fname, + const int myproc, + MPI_Comm comm, + struct H5BlockPartition *layout + ) { + + H5PartFile *f; + h5part_int64_t timestep = 0; + h5part_int64_t herr; + + printf ("PROC[%d]: Open file \"%s\" for reading ...\n", + myproc, fname ); +#ifdef PARALLEL_IO + f = H5PartOpenFileParallel ( + fname, + H5PART_READ, + comm + ); +#else + f = H5PartOpenFile ( + fname, + H5PART_READ + ); +#endif + if ( f == NULL ) return -1; + + herr = H5PartSetStep ( f, timestep ); + if ( herr < 0 ) return herr; + + if ( _read_data ( f, myproc, layout ) < 0 ) { + printf ("Failed to read file \"%s\"\n", fname ); + return 2; + } + + herr = H5PartCloseFile ( f ); + if ( herr < 0 ) return -1; + + return 0; +} + +static h5part_int64_t +_read_attributes ( + const char *fname, + const int myproc, + MPI_Comm comm + ) { + h5part_int64_t timestep = 0; + + + printf ("PROC[%d]: Open file \"%s\" for reading ...\n", + myproc, fname ); + +#ifdef PARALLEL_IO + H5PartFile *f = H5PartOpenFileParallel ( + fname, + H5PART_READ, + comm + ); +#else + H5PartFile *f = H5PartOpenFile ( + fname, + H5PART_READ + ); +#endif + if ( f == NULL ) return -1; + + h5part_int64_t herr = H5PartSetStep ( f, timestep ); + if ( herr < 0 ) return herr; + + char sval[16]; + herr = H5BlockReadFieldAttrib ( + f, + "TestField", + "TestString", + sval ); + if ( herr < 0 ) return -1; + if ( strcmp ( sval, "42" ) != 0 ) { + printf ( "Error reading string attribute: " + "Value is \"%s\" and should be \"42\"\n", sval ); + } + + h5part_int64_t ival[1]; + h5part_float64_t rval[1]; + herr = H5BlockReadFieldAttrib ( + f, + "TestField", + "TestInt64", + ival ); + if ( herr < 0 ) return -1; + if ( ival[0] != 42 ) { + printf ( "Error reading int64 attribute: " + "Value is %lld and should be 42\n", + (long long) ival[0] ); + } + + herr = H5BlockReadFieldAttrib ( + f, + "TestField", + "TestFloat64", + rval ); + if ( herr < 0 ) return -1; + if ( rval[0] != 42.0 ) { + printf ( "Error reading float64 attribute: " + "Value is %f and should be 42.0\n", + rval[0] ); + } + + h5part_float64_t x_origin; + h5part_float64_t y_origin; + h5part_float64_t z_origin; + h5part_float64_t x_spacing; + h5part_float64_t y_spacing; + h5part_float64_t z_spacing; + + herr = H5Block3dGetFieldOrigin ( + f, "TestField", + &x_origin, + &y_origin, + &z_origin ); + if ( herr < 0 ) return -1; + + if ( x_origin != 1.0 || y_origin != 2.0 || z_origin != 3.0 ) { + printf ( + "Error reading field origin: Read values (%f,%f,%f)\n", + x_origin, y_origin, z_origin ); + } + herr = H5Block3dGetFieldSpacing ( + f, "TestField", + &x_spacing, + &y_spacing, + &z_spacing ); + if ( herr < 0 ) return -1; + if ( x_spacing != 2.0 || y_spacing != 3.0 || z_spacing != 4.0 ) { + printf ( + "Error reading field spacing: Read values (%f,%f,%f)\n", + x_spacing, y_spacing, z_spacing ); + } + + herr = H5PartCloseFile ( f ); + if ( herr < 0 ) return -1; + + return 0; +} + + +int +main ( + int argc, + char **argv + ) { + char *fname = "blockfile0.h5"; + int myproc =0; + int opt_read = 0; + int opt_write = 0; + + int ex = 0; + + MPI_Comm comm = MPI_COMM_WORLD; +#ifdef PARALLEL_IO + int nprocs; + + MPI_Init( &argc, &argv ); + MPI_Comm_size ( comm, &nprocs ); + MPI_Comm_rank( comm, &myproc ); +#endif + + while ( --argc ) { + if ( strcmp ( argv[argc], "-r" ) == 0 ) + opt_read = 1; + else if ( strcmp ( argv[argc], "-w" ) == 0 ) + opt_write = 1; + else { + fprintf ( stderr, + "Illegal option %s\n\n" + "Usage: %s -w -r\n", + argv[argc], argv[0] ); + return 1; + } + } + + H5PartSetVerbosityLevel ( 4 ); + + if ( opt_write ) { + if ( _write_file ( fname, myproc, comm, Layout1 ) < 0 ) { + printf ("Failed to write file \"%s\"\n", fname ); + ex = 1; + goto cleanup; + } + } else if ( opt_read ) { + if ( _read_file ( fname, myproc, comm, Layout1 ) < 0 ) { + printf ("Failed to read file \"%s\"\n", fname ); + ex = 1; + goto cleanup; + } + if ( _read_attributes ( fname, myproc, comm ) < 0 ) { + printf ("Failed to read attributes \"%s\"\n", fname ); + ex = 1; + goto cleanup; + } + } + +cleanup: +#ifdef PARALLEL_IO + MPI_Finalize(); +#endif + return ex; +} diff --git a/trunk/test/H5BlockTestAttributesF.f90 b/trunk/test/H5BlockTestAttributesF.f90 new file mode 100644 index 0000000..276710d --- /dev/null +++ b/trunk/test/H5BlockTestAttributesF.f90 @@ -0,0 +1,341 @@ +PROGRAM H5BlockTestAttributesF + IMPLICIT NONE + + INCLUDE 'H5PartF90.inc' + INCLUDE 'H5BlockF90.inc' + + INTEGER :: myproc = 0 + INTEGER :: nprocs = 1 + INTEGER*8 :: h5pt_err + INTEGER :: i + CHARACTER(LEN=32) :: arg_str + INTEGER :: opt_read = 0 + INTEGER :: opt_write = 0 + INTEGER*8 :: layout(6) + DATA layout / 1, 64, 1, 64, 1, 512 / + + DO i = 1, IARGC () + CALL GETARG ( i, arg_str ) + PRINT *, arg_str + IF ( arg_str == "-r" ) THEN + PRINT *, "Reading file" + opt_read = 1 + ELSE IF ( arg_str == "-w" ) THEN + opt_write = 1 + ELSE + PRINT *, "Illegal option ", arg_str, "\n" + PRINT *, "Usage: H5BlockTestAttributesF -w | -r" + END IF + + END DO + + h5pt_err = h5pt_set_verbosity_level ( 4_8 ) + + IF ( opt_write == 1 ) THEN + h5pt_err = write_file ( "blockfile0.h5", myproc, layout ) + ELSE IF ( opt_read == 1 ) THEN + PRINT *, "Calling read_file" + h5pt_err = read_file ( "blockfile0.h5", myproc, layout ) + ENDIF + + + CONTAINS + + INTEGER*8 FUNCTION write_file ( fname, myproc, layout ) + CHARACTER(LEN=*), INTENT(IN) :: fname + INTEGER, INTENT(IN) :: myproc + INTEGER*8, INTENT(IN) :: layout(6) + + INTEGER*8 :: file + INTEGER*8 :: timestep = 1 + + PRINT *, "PROC[",myproc,"]: Open file ",fname," for writing ..." + + file = h5pt_openw ( fname ) + if ( file == 0 ) THEN + write_file = -1 + RETURN + ENDIF + PRINT *, "file: ", file + + h5pt_err = h5pt_setstep ( file, timestep ) + IF ( h5pt_err < 0 ) THEN + write_file = h5pt_err + RETURN + ENDIF + + h5pt_err = write_field ( file, myproc, layout ) + IF ( h5pt_err < 0 ) THEN + write_file = h5pt_err + RETURN + ENDIF + + h5pt_err = write_attributes ( file ) + + h5pt_err = h5pt_close ( file ) + IF ( h5pt_err < 0 ) THEN + write_file = h5pt_err + RETURN + ENDIF + + write_file = 0 + END FUNCTION write_file + + INTEGER*8 FUNCTION write_field ( file, myproc, layout ) + INTEGER*8, INTENT(IN) :: file + INTEGER, INTENT(IN) :: myproc + INTEGER*8, INTENT(IN) :: layout(6) + + INTEGER*8 :: i, j, k + INTEGER*8 :: i_start + INTEGER*8 :: i_end + INTEGER*8 :: j_start + INTEGER*8 :: j_end + INTEGER*8 :: k_start + INTEGER*8 :: k_end + INTEGER*8 :: i_dims + INTEGER*8 :: j_dims + INTEGER*8 :: k_dims + REAL*8 :: value + + REAL*8, DIMENSION(:,:,:), ALLOCATABLE :: data + + PRINT *, "Reading field ..." + i_start = layout(1) + i_end = layout(2) + j_start = layout(3) + j_end = layout(4) + k_start = layout(5) + k_end = layout(6) + i_dims = i_end - i_start + 1 + j_dims = j_end - j_start + 1 + k_dims = k_end - k_start + 1 + + PRINT *, "dims: (", i_dims, j_dims, k_dims, ")" + ALLOCATE ( data (i_dims,j_dims, k_dims) ) + + PRINT *, "Defining Layout ..." + h5pt_err = h5bl_define3dlayout ( file, i_start, i_end, j_start, j_end, k_start, k_end ) + IF ( h5pt_err < 0 ) THEN + write_field = h5pt_err + RETURN + END IF + + DO i = 1, i_dims + DO j = 1, j_dims + DO k = 1, k_dims + value = (k-1) + 1000*(j-1) + 100000*(i-1) + data(i,j,k) = value + END DO + END DO + END DO + + PRINT *, "Writing field ..." + h5pt_err = h5bl_3d_write_scalar_field ( file, "TestField", data ) + IF ( h5pt_err < 0 ) THEN + write_field = h5pt_err + RETURN + END IF + + write_field = 0 + END FUNCTION write_field + + INTEGER*8 FUNCTION write_attributes ( file ) + INTEGER*8, INTENT(IN) :: file + + INTEGER*8 :: h5pt_err = 0 + CHARACTER(LEN=128) :: s_val + INTEGER*8 :: i_val(1) + REAL*8 :: r_val(1) + + s_val = "42" + h5pt_err = h5bl_writefieldattrib_string ( file, "TestField", "TestString", s_val ) + IF ( h5pt_err < 0 ) THEN + write_attributes = h5pt_err + RETURN + END IF + + i_val(1) = 42 + h5pt_err = h5bl_writefieldattrib_i8 ( file, "TestField", "TestInt64", i_val, 1_8 ) + IF ( h5pt_err < 0 ) THEN + write_attributes = h5pt_err + RETURN + END IF + + r_val(1) = 42.0 + h5pt_err = h5bl_writefieldattrib_r8 ( file, "TestField", "TestFloat64", r_val,1_8 ) + IF ( h5pt_err < 0 ) THEN + write_attributes = h5pt_err + RETURN + END IF + + END FUNCTION write_attributes + + + + INTEGER*8 FUNCTION read_file ( fname, myproc, layout ) + CHARACTER(LEN=*), INTENT(IN) :: fname + INTEGER, INTENT(IN) :: myproc + INTEGER*8, INTENT(IN) :: layout(6) + + INTEGER*8 :: file + INTEGER*8 :: timestep = 1 + + PRINT *, "PROC[",myproc,"]: Open file ",fname," for reading ..." + + file = h5pt_openr ( fname ) + if ( file == 0 ) THEN + read_file = -1 + RETURN + ENDIF + PRINT *, "file: ", file + + h5pt_err = h5pt_setstep ( file, timestep ) + IF ( h5pt_err < 0 ) THEN + read_file = -1 + RETURN + ENDIF + + h5pt_err = read_field ( file, myproc, layout ) + IF ( h5pt_err < 0 ) THEN + read_file = -1 + RETURN + ENDIF + + h5pt_err = h5pt_close ( file ) + IF ( h5pt_err < 0 ) THEN + read_file = -1 + RETURN + ENDIF + + PRINT *, "PROC[",myproc,"]: Open file ",fname," for reading ..." + + file = h5pt_openr ( fname ) + if ( file == 0 ) THEN + read_file = -1 + RETURN + ENDIF + PRINT *, "file: ", file + + h5pt_err = h5pt_setstep ( file, timestep ) + IF ( h5pt_err < 0 ) THEN + read_file = -1 + RETURN + ENDIF + + h5pt_err = read_attributes ( file ) + + h5pt_err = h5pt_close ( file ) + IF ( h5pt_err < 0 ) THEN + read_file = -1 + RETURN + ENDIF + + + + read_file = 0 + END FUNCTION read_file + + + INTEGER*8 FUNCTION read_field ( file, myproc, layout ) + INTEGER*8, INTENT(IN) :: file + INTEGER, INTENT(IN) :: myproc + INTEGER*8, INTENT(IN) :: layout(6) + + INTEGER*8 :: i, j, k + INTEGER*8 :: i_start + INTEGER*8 :: i_end + INTEGER*8 :: j_start + INTEGER*8 :: j_end + INTEGER*8 :: k_start + INTEGER*8 :: k_end + INTEGER*8 :: i_dims + INTEGER*8 :: j_dims + INTEGER*8 :: k_dims + REAL*8 :: value + + REAL*8, DIMENSION(:,:,:), ALLOCATABLE :: data + + PRINT *, "Reading field ..." + i_start = layout(1) + i_end = layout(2) + j_start = layout(3) + j_end = layout(4) + k_start = layout(5) + k_end = layout(6) + i_dims = i_end - i_start + 1 + j_dims = j_end - j_start + 1 + k_dims = k_end - k_start + 1 + + PRINT *, "dims: (", i_dims, j_dims, k_dims, ")" + ALLOCATE ( data (i_dims,j_dims, k_dims) ) + + PRINT *, "Defining Layout ..." + h5pt_err = h5bl_define3dlayout ( file, i_start, i_end, j_start, j_end, k_start, k_end ) + IF ( h5pt_err < 0 ) THEN + read_field = -1 + RETURN + END IF + + PRINT *, "Reading field ..." + h5pt_err = h5bl_3d_read_scalar_field ( file, "TestField", data ) + IF ( h5pt_err < 0 ) THEN + read_field = -1 + RETURN + END IF + + DO i = 1, i_dims + DO j = 1, j_dims + DO k = 1, k_dims + value = (k-1) + 1000*(j-1) + 100000*(i-1) + if ( data(i,j,k) /= value ) THEN + PRINT *, "data(",i,",",j,",",k,") = ",data(i,j,k), " /= ",value + END IF + END DO + END DO + END DO + read_field = 0 + END FUNCTION read_field + + + INTEGER*8 FUNCTION read_attributes ( file ) + INTEGER*8, INTENT(IN) :: file + + INTEGER*8 :: h5pt_err = 0 + CHARACTER(LEN=128) :: s_val + INTEGER*8 :: i_val(1) + REAL*8 :: r_val(1) + + h5pt_err = h5bl_readfieldattrib_string ( file, "TestField", "TestString", s_val ) + IF ( h5pt_err < 0 ) THEN + read_attributes = h5pt_err + RETURN + END IF + + IF ( s_val /= "42" ) THEN + PRINT *, "Error reading string attribute: Value is ", s_val, " and should be 42" + END IF + + h5pt_err = h5bl_readfieldattrib_i8 ( file, "TestField", "TestInt64", i_val ) + IF ( h5pt_err < 0 ) THEN + read_attributes = h5pt_err + RETURN + END IF + IF ( i_val(1) /= 42 ) THEN + PRINT *, "Error reading int64 attribute: Value is ", i_val(1), " and should be 42" + END IF + + h5pt_err = h5bl_readfieldattrib_r8 ( file, "TestField", "TestFloat64", r_val ) + IF ( h5pt_err < 0 ) THEN + read_attributes = h5pt_err + RETURN + END IF + + IF ( r_val(1) /= 42.0 ) THEN + PRINT *, "Error reading float64 attribute: Value is ", r_val(1), " and should be 42.0" + END IF + + + END FUNCTION read_attributes + + END PROGRAM H5BlockTestAttributesF diff --git a/trunk/test/H5ParallelTest.cc b/trunk/test/H5ParallelTest.cc new file mode 100755 index 0000000..c918648 --- /dev/null +++ b/trunk/test/H5ParallelTest.cc @@ -0,0 +1,111 @@ +#include +#include +#include +#include +#include "H5Part.hh" + +#ifdef READTEST + +#endif + +#ifdef REGRESSIONTEST + +/* + A simple regression test that shows how you use this API + to write and read multi-timestep files of particle data. +*/ +#ifdef PARALLEL_IO + +int main(int argc,char *argv[]){ + int sz=5; + double *x,*y,*z; + h5part_int64_t *id; + char name[64]; + H5PartFile *file; + int i,t,nt,nds; + int nprocs,myproc; + hid_t gid; + MPI_Comm comm=MPI_COMM_WORLD; + + MPI_Init(&argc,&argv); + MPI_Comm_size(comm,&nprocs); + MPI_Comm_rank(comm,&myproc); + + x=(double*)malloc(sz*nprocs*sizeof(double)); + y=(double*)malloc(sz*nprocs*sizeof(double)); + z=(double*)malloc(sz*nprocs*sizeof(double)); + id=(h5part_int64_t*)malloc(sz*nprocs*sizeof(h5part_int64_t)); + /* parallel file creation */ + file=H5PartOpenFileParallel("parttest.h5",H5PART_WRITE,comm); + if(!file) { + perror("File open failed: exiting!"); + exit(0); + } + + for(t=0;t<5;t++){ + MPI_Barrier(comm); + for(i=0;ifile); + H5PartSetStep(file,t); /* must set the current timestep in file */ + H5PartSetNumParticles(file,sz); /* then set number of particles to store */ + /* now write different tuples of data into this timestep of the file */ + H5PartWriteDataFloat64(file,"x",x); + H5PartWriteDataFloat64(file,"y",y); + H5PartWriteDataFloat64(file,"z",z); + + H5PartWriteDataFloat64(file,"px",x); + H5PartWriteDataFloat64(file,"py",y); + H5PartWriteDataFloat64(file,"pz",z); + + H5PartWriteDataInt64(file,"id",id); + } + + unsigned int idStart = 0+sz*myproc; + unsigned int idEnd = (sz-1)+sz*myproc; + + printf("AllDone p[%u]\n",myproc); + H5PartCloseFile(file); + MPI_Barrier(comm); + + printf("p[%u:%u] : OK, close file and reopen for reading idStart %u idEnd %u \n",myproc,nprocs,idStart,idEnd); + + file=H5PartOpenFileParallel("parttest.h5",H5PART_READ,comm); + H5PartSetStep(file,0); + unsigned int np = 0; + // unsigned int np = (int)H5PartGetNumParticles(file); + // nt=H5PartGetNumSteps(file); /* get number of steps in file */ + + //nds=H5PartGetNumDatasets(file); /* get number of datasets in timestep 0 */ + MPI_Barrier(comm); + + // H5PartSetView(file,idStart,idEnd); + + printf("steps= %u datasets= %u particles= %u\n",nt,nds,np); + + if(x) + free(x); + if(y) + free(y); + if(z) + free(z); + if(id) + free(id); + + H5PartCloseFile(file); + MPI_Barrier(comm); + fprintf(stderr,"proc[%u]: done\n",myproc); + return MPI_Finalize(); +} + +#else + +#endif + +#endif + + diff --git a/trunk/test/H5PartAndreasTest.cc b/trunk/test/H5PartAndreasTest.cc new file mode 100755 index 0000000..d0ba2c9 --- /dev/null +++ b/trunk/test/H5PartAndreasTest.cc @@ -0,0 +1,119 @@ +#include +#include +#include +#include +#include +#include "H5Part.h" + + +/* + A simple regression test that shows how you use this API + to write and read multi-timestep files of particle data. +*/ +#ifdef PARALLEL_IO + +int main(int argc,char *argv[]){ + int N = 10; + int sz=0; + double *x,*y,*z; + h5part_int64_t *id; + H5PartFile *file; + int i,t,nt,nds; + int nprocs,myproc; + + unsigned int np = 0; + + MPI_Comm comm=MPI_COMM_WORLD; + + MPI_Init(&argc,&argv); + MPI_Comm_size(comm,&nprocs); + MPI_Comm_rank(comm,&myproc); + + /* parallel file creation */ + file=H5PartOpenFileParallel("parttest.h5",H5PART_WRITE,comm); + if(!file) { + perror("File open failed: exiting!"); + exit(0); + } + + for(t=0;t<5;t++){ + + MPI_Barrier(comm); + + sz = myproc*N; + // proc[0] sz = 10, (next step N=10), sz=10 + // proc[1] sz = 20, (next step N=20), sz=40 + fprintf(stderr,"proc[%u] sz=%u\n",myproc,(unsigned)sz); + x =(double*)malloc(1+sz*sizeof(double)); + y =(double*)malloc(1+sz*sizeof(double)); + z =(double*)malloc(1+sz*sizeof(double)); + id=(h5part_int64_t*)malloc(1+sz*sizeof(h5part_int64_t)); + + for(i=0;i +#include +#include +#include +#include "H5Part.h" + +/* + A simple regression test that shows how you use this API + to write and read multi-timestep files of particle data. +*/ + + +#ifdef PARALLEL_IO + +int main(int argc,char *argv[]){ + int sz=5; + double *x,*y,*z; + h5part_int64_t *id; + H5PartFile *file; + int i,t,nt,nds; + int nprocs,myproc; + MPI_Comm comm=MPI_COMM_WORLD; + + MPI_Init(&argc,&argv); + MPI_Comm_size(comm,&nprocs); + MPI_Comm_rank(comm,&myproc); + + x=(double*)malloc(sz*nprocs*sizeof(double)); + y=(double*)malloc(sz*nprocs*sizeof(double)); + z=(double*)malloc(sz*nprocs*sizeof(double)); + id=(h5part_int64_t*)malloc(sz*nprocs*sizeof(h5part_int64_t)); + /* parallel file creation */ + file=H5PartOpenFileParallel("parttest.h5",H5PART_WRITE,comm); + if(!file) { + perror("File open failed: exiting!"); + exit(0); + } + + for(t=0;t<5;t++){ + MPI_Barrier(comm); + for(i=0;ifile); + H5PartSetStep(file,t); /* must set the current timestep in file */ + H5PartSetNumParticles(file,sz); /* then set number of particles to store */ + /* now write different tuples of data into this timestep of the file */ + H5PartWriteDataFloat64(file,"x",x); + H5PartWriteDataFloat64(file,"y",y); + H5PartWriteDataFloat64(file,"z",z); + + H5PartWriteDataFloat64(file,"px",x); + H5PartWriteDataFloat64(file,"py",y); + H5PartWriteDataFloat64(file,"pz",z); + + H5PartWriteDataInt64(file,"id",id); + } + + unsigned int idStart = 0+sz*myproc; + unsigned int idEnd = (sz-1)+sz*myproc; + + printf("AllDone p[%u]\n",myproc); + H5PartCloseFile(file); + fprintf(stderr,"Closed files p[%u]\n",myproc); + MPI_Barrier(comm); + + fprintf(stderr,"p[%u:%u] : OK, close file and reopen for reading idStart %u idEnd %u \n",myproc,nprocs,idStart,idEnd); + + file=H5PartOpenFileParallel("parttest.h5",H5PART_READ,comm); + H5PartSetStep(file,0); + // unsigned int np = 0; + unsigned int np = (int)H5PartGetNumParticles(file); + nt=H5PartGetNumSteps(file); /* get number of steps in file */ + nds=H5PartGetNumDatasets(file); /* get number of datasets in timestep 0 */ + + MPI_Barrier(comm); + + H5PartSetView(file,idStart,idEnd); + + np = (int)H5PartGetNumParticles(file); + printf("After SetView(%d,%d): steps= %u datasets= %u particles= %u\n", + (int)idStart,(int)idEnd, + nt,nds,np); + + if(x) + free(x); + if(y) + free(y); + if(z) + free(z); + if(id) + free(id); + + H5PartCloseFile(file); + MPI_Barrier(comm); + fprintf(stderr,"proc[%u]: done\n",myproc); + return MPI_Finalize(); +} + +#else +int main(int argc,char *argv[]){ + int sz=10; + double *x,*y,*z; + h5part_int64_t *id; + H5PartFile *file; + int i,t,nt,nds,np; + h5part_int64_t idStart = 0; + h5part_int64_t idEnd = 0; + + + x=(double*)malloc(sz*sizeof(double)); + y=(double*)malloc(sz*sizeof(double)); + z=(double*)malloc(sz*sizeof(double)); + id=(h5part_int64_t*)malloc(sz*sizeof(h5part_int64_t)); + /* parallel file creation */ + file=H5PartOpenFile("parttest.h5",H5PART_WRITE); + if(!file) { + perror("File open failed: exiting!"); + exit(0); + } + + H5PartWriteFileAttribString(file,"File Description", "This file is created by H5PartTest.cc. Simple H5Part file for testing purpose..."); + char* FileAttrib = "Created by H5PartTest.cc"; + H5PartWriteFileAttrib(file, "Origin", H5T_NATIVE_CHAR, FileAttrib ,strlen(FileAttrib)); + + for(t=0;t<5;t++){ + fprintf(stdout,"Writing timestep %u\n",t); + for(i=0;i>1); + printf("Set new view = %d:%d\n",(int)idStart,(int)(idEnd>>1)); + H5PartGetView(file,&idStart,&idEnd); + np=H5PartGetNumParticles(file); + printf("steps= %u datasets= %u particles= %d with view %d:%d\n", + nt,nds,(int)np,(int)idStart,(int)idEnd); + H5PartSetStep(file,nt-1); // set to last step + printf("Setting to last step = %u\n",nt-1); + for(i=0;i<10;i++){ x[i]=y[i]=z[i]=0.0; id[i]=0; } /* clear the arrays */ + H5PartReadDataFloat64(file,"x",x); + H5PartReadDataFloat64(file,"y",y); + H5PartReadDataFloat64(file,"z",z); + H5PartReadDataInt64(file,"id",id); + + for(i=0;i>1,(int)idEnd); + H5PartSetView(file,(idEnd>>1),idEnd); + np=H5PartGetNumParticles(file); + printf("Now particles in selection are %d\n",np); + printf("doubleCheck=%lld\n", (long long)H5PartGetView(file,0,0)); + + for(i=0;i<10;i++){ x[i]=y[i]=z[i]=0.0; id[i]=0; } /* clear the arrays */ + + H5PartReadDataFloat64(file,"x",x); + H5PartReadDataFloat64(file,"y",y); + H5PartReadDataFloat64(file,"z",z); + H5PartReadDataInt64(file,"id",id); + for(i=0;i +#include +#include +#include +#include "H5Part.h" + +#ifdef PARALLEL_IO + +/* + This regression test is used to ensure parallel I/O is + working correctly and that Views are working for + parallel reads. + */ +int main(int argc,char *argv[]){ + const int sz=5000; + double *x,*y,*z; + h5part_int64_t *id; + char name[64]; + H5PartFile *file; + int i,t,nt,nds; + int nprocs,myproc; + hid_t gid; + MPI_Comm comm=MPI_COMM_WORLD; + + MPI_Init(&argc,&argv); + MPI_Comm_size(comm,&nprocs); + MPI_Comm_rank(comm,&myproc); + + x=(double*)malloc(sz*nprocs*sizeof(double)); + y=(double*)malloc(sz*nprocs*sizeof(double)); + z=(double*)malloc(sz*nprocs*sizeof(double)); + id=(h5part_int64_t*)malloc(sz*nprocs*sizeof(h5part_int64_t)); + /* parallel file creation */ + file=H5PartOpenFileParallel("parttest.h5",H5PART_WRITE,comm); + if(!file) { + perror("File open failed: exiting!"); + exit(0); + } + + for(t=0;t<5;t++){ + MPI_Barrier(comm); + for(i=0;i +#include +#include +#include "H5Part.h" + +#include +#include +#include +#include +using namespace std; + + +/* + A simple regression test that shows how you use this API + to write and read multi-timestep files of particle data. +*/ + +int ReadFile(const string fn){ + char name[64]; + H5PartFile *file; + int i,nt,nds; + cout << "Open " << fn << endl; + + file= H5PartOpenFile(fn.c_str(),H5PART_READ); + + nt=H5PartGetNumSteps(file); + H5PartSetStep(file,0); + nds=H5PartGetNumDatasets(file); + + cout << "Timesteps = " << nt << " dataSets per timestep = " << nds << endl; + + cout << endl << endl << "===============================" << endl; + for(i=0;i1) str=argv[1]; + else str=dstr; + const string fn = string(str); + /* f=fopen(fn.c_str(),"r"); + if(f!=NULL) { a poor-man's stat() + fclose(f); + */ + if(!WriteFile(fn)){ + cerr << "Failed to write file " << fn << endl; + exit(0); + } + /* + } + else { + cout << "File " << fn << " already exists, so we will proceed to reading" << endl; + } */ + if(!ReadFile(fn)){ + cerr << "Failed to read file " << fn << endl; + } +} diff --git a/trunk/test/H5testF.f b/trunk/test/H5testF.f new file mode 100644 index 0000000..db78530 --- /dev/null +++ b/trunk/test/H5testF.f @@ -0,0 +1,107 @@ +c ============== +c +c Sample Fortran program that uses HDF5 bindings +c +c ============== + + program H5testF + implicit none + include 'H5Part.inc' + INTEGER*8 file + INTEGER*8 nstep,ndata + INTEGER*8 npoints + INTEGER*8 step + INTEGER*8 err + INTEGER*8 I,J + REAL*8,ALLOCATABLE:: X(:),Y(:),Z(:),PX(:),PY(:),PZ(:) + INTEGER*8,ALLOCATABLE:: ID(:) + REAL*8 REALTIME + file = h5pt_openw("testfilef.h5") + print *,"Opened file testfilef.h5 for writing" + npoints = 1024 + nstep = 10 + ALLOCATE(X(npoints),Y(npoints),Z(npoints)) + ALLOCATE(PX(npoints),PY(npoints),PZ(npoints)) + ALLOCATE(ID(npoints)) + print *," Npoints=",npoints," nsteps=",nstep + print *," writing X,Y,Z,PX,PY,PZ,ID" + print *," ... initialize the data arrays" + do I=1,npoints + X(I)=0.0 + Y(I)=1.0+I + Z(I)=100.0+I*2.0 + ID(I)=I + enddo + print *,"Tell h5pt how many particles are stored in the file" +c set the number of points + err = h5pt_setnpoints(file,npoints) + print *,"write an attribute string" +c write an annotation to the file + err=h5pt_writefileattrib_string(file,"Annotation","Testing 1 2 3") + print *,"and now write the steps" + do I=1,nstep +c Set the step number + print *,"Write Step ",I + err = h5pt_setstep(file,I) +c Now start writing the data arrays for this step + err = h5pt_writedata_r8(file,"x",X) + err = h5pt_writedata_r8(file,"y",Y) + err = h5pt_writedata_r8(file,"z",Z) + err = h5pt_writedata_r8(file,"px",PX) + err = h5pt_writedata_r8(file,"py",PY) + err = h5pt_writedata_r8(file,"pz",PZ) + err = h5pt_writedata_i8(file,"id",ID) + do J=1,npoints + ID(J)=ID(J)+10 + enddo +c And write a simple floatingpoint attribute associated with this timestep + REALTIME = I*0.1 + err=h5pt_writestepattrib_r8(file,"RealTime",REALTIME,1) + enddo + print *,"Done writing, now close the file" + err = h5pt_close(file) + +c **************** Clean out some variables *************** + nstep=0 +c npoints=0 + do I=1,npoints + X(I)=-1.0 + Y(I)=-1.0 + Z(I)=-1.0 + ID(I)=0 + enddo + +c *****************Now Reopen for Reading ****************** + + + print *,"Open file for reading" + file = h5pt_openr("testfilef.h5") + print *," Opened testfilef.h5" + nstep = h5pt_getnsteps(file) + print *," Nsteps = ",nstep + err = h5pt_setstep(file,1_8) + print *,"now get the number of datasets" + ndata = h5pt_getndatasets(file) + print *," Ndata=",ndata + npoints = h5pt_getnpoints(file) + print *," NP=",npoints + + + + do step=1,nstep + print *,"Read step ",step +c set the current step + err = h5pt_setstep(file,step) + err=h5pt_readdata_i8(file,"id",ID) +c read the Z data from the current step +c err = h5prt_readdata(file,step,X,Y,Z,PX,PY,PZ,ID) + do J=1,10 + print *," ID(",J,")==",ID(J) + enddo + enddo + + err = h5pt_close(file) + print *,"done" + + end + diff --git a/trunk/test/H5testFpar.f90 b/trunk/test/H5testFpar.f90 new file mode 100644 index 0000000..700a2e6 --- /dev/null +++ b/trunk/test/H5testFpar.f90 @@ -0,0 +1,123 @@ +! ============== +! +! Sample Fortran program that uses HDF5 bindings +! +! ============== + + program H5testFpar + implicit none + include 'mpif.h' + include 'H5PartF90.inc' + INTEGER*8 file + INTEGER*8 nstep + INTEGER*8 ndata + INTEGER*8 npoints,pointoffset + INTEGER*8 step + INTEGER*8 I + INTEGER*8 J + REAL*8,ALLOCATABLE:: X(:),Y(:),Z(:),PX(:),PY(:),PZ(:) + INTEGER*8,ALLOCATABLE:: ID(:) + REAL*8 REALTIME(1) + INTEGER myproc,nprocs + INTEGER ierr + INTEGER*8 rc + INTEGER:: comm + + call MPI_Init(ierr) + comm = MPI_COMM_WORLD + call MPI_Comm_rank(comm,myproc,ierr) + call MPI_Comm_size(comm,nprocs,ierr) + + file = h5pt_openw_par("testfilef.h5",comm) + print *,"Opened file testfilef.h5 for writing" + npoints = 1024 + nstep = 10 + ALLOCATE(X(npoints),Y(npoints),Z(npoints)) + ALLOCATE(PX(npoints),PY(npoints),PZ(npoints)) + ALLOCATE(ID(npoints)) + print *," Npoints=",npoints," nsteps=",nstep + print *," writing X,Y,Z,PX,PY,PZ,ID" + print *," ... initialize the data arrays" + do I=1,npoints + X(INT(I))=0.0 + Y(I)=1.0+REAL(I) + Z(I)=100.0+REAL(I)*2.0 + ID(I)=I + enddo + print *,"Tell h5pt how many particles are stored in the file" +! set the number of points + rc = h5pt_setnpoints(file,npoints) + print *,"write an attribute string" +! write an annotation to the file + rc=h5pt_writefileattrib_string(file,"Annotation","Testing 1 2 3") + print *,"and now write the steps" + do I=1,nstep +! Set the step number + print *,"Write Step ",I + rc = h5pt_setstep(file,I) +! Now start writing the data arrays for this step + rc = h5pt_writedata_r8(file,"x",X) + rc = h5pt_writedata_r8(file,"y",Y) + rc = h5pt_writedata_r8(file,"z",Z) + rc = h5pt_writedata_r8(file,"px",PX) + rc = h5pt_writedata_r8(file,"py",PY) + rc = h5pt_writedata_r8(file,"pz",PZ) + rc = h5pt_writedata_i8(file,"id",ID) + do J=1,npoints + ID(J)=ID(J)+10 + enddo +! And write a simple floatingpoint attribute associated with this timestep + REALTIME(1) = REAL(I)*0.1 + rc = h5pt_writestepattrib_r8(file,"RealTime",REALTIME,1_8) + enddo + print *,"Done writing, now close the file" + rc = h5pt_close(file) + +! **************** Clean out some variables *************** + nstep=0 +! npoints=0 + do I=1,npoints + X(I)=-1.0 + Y(I)=-1.0 + Z(I)=-1.0 + ID(I)=0 + enddo + +! *****************Now Reopen for Reading ****************** + + + print *,"Open file for reading" + file = h5pt_openr_par("testfilef.h5",comm) + print *," Opened testfilef.h5" + nstep = h5pt_getnsteps(file) + print *," Nsteps = ",nstep + rc = h5pt_setstep(file,1_8) + print *,"now get the number of datasets" + ndata = h5pt_getndatasets(file) + print *," Ndata=",ndata + npoints = h5pt_getnpoints(file) + print *," Total NP=",npoints + npoints = npoints/nprocs + pointoffset = npoints*myproc; + rc = h5pt_setview(file,pointoffset,pointoffset+npoints) + print *," Pointoffset=",pointoffset," Local NP=",npoints +! Now we need to set our view to read correct points + + + do step=1,nstep + print *,"Read step ",step +! set the current step + rc = h5pt_setstep(file,step) + rc = h5pt_readdata_i8(file,"id",ID) +! read the Z data from the current step +! rc = h5prt_readdata(file,step,X,Y,Z,PX,PY,PZ,ID) + do J=1,10 + print *," ID(",J,")==",ID(J) + enddo + enddo + + rc = h5pt_close(file) + print *,"done" + call MPI_Finalize() + + end diff --git a/trunk/test/Makefile.am b/trunk/test/Makefile.am new file mode 100644 index 0000000..2f897ac --- /dev/null +++ b/trunk/test/Makefile.am @@ -0,0 +1,164 @@ +# test level Makefile.am + +# PATH SETTING +HDF5ROOT = @HDF5ROOT@ + +# COMPILER SETTING +CXX = @CXX@ +FC = @FC@ +MPIFC = @MPIFC@ +MPICXX = @MPICXX@ +MPICC = @MPICC@ + +# COMPILER FLAG SETTING +CFLAGS = @CFLAGS@ +FFLAGS = @FFLAGS@ @MPIINC@ + +# LIBRARIES +SZLIB = @SZLIB@ +HDFLIB = -L$(HDF5ROOT)/lib -lhdf5 -lz $(SZLIB) @LDFLAGS@ +MPILIB = @MPILIB@ +H5LIB = -L@H5P_LIB_LOC@ -lH5Part + +LIBS = ${H5LIB} $(HDFLIB) $(MPILIB) -lm @STDCXX@ + +# H5Part compiled library location +# H5PLIB = -L@prefix@/lib + +# INCLUDES +HDFINC = -I$(HDF5ROOT)/include +MPIINC = @MPIINC@ +H5INC = -I@H5P_LIB_LOC@ + +INC = $(HDFINC) $(MPIINC) $(H5INC) + + +# What to build... make install will place these files in the $(prefix)/bin directory. +bin_PROGRAMS = @TTARGET@ + +# Some useful scripts that I wish to place in the $(prefix)/bin directory. +bin_SCRIPTS = +#bin_SCRIPTS = JAC_H5PartTestP_script.scr JAC_H5testFpar_script.scr JAC_RUN_ALL_script.scr + + +# Listing of all programs that maybe built. (Has to know statically...) +EXTRA_PROGRAMS = + +# Extra files that I wish to include in the dist tar ball. +EXTRA_DIST = Bench.c \ + H5ParallelTest.cc \ + H5PartTest.cc H5PartTestParallel.cc \ + H5PartAndreasTest.cc \ + H5test.cc H5testF.f \ + H5testFpar.f90 \ + H5BlockParTestScalarField.c H5BlockParTestScalarFieldF.f90 \ + H5BlockTestAttributes.c H5BlockTestAttributesF.f90 \ + $(bin_SCRIPTS) + +# Specific building instruction (What compilers to use...) +# ------------ Build Tests ------------ + +Bench: Bench.c + $(CC) $(CFLAGS) $(INC) -o $@ $< $(H5PLIB) -lH5Part $(LIBS) + +############################################################################### + +H5PartTest: H5PartTest.o + $(CXX) -o $@ $< $(H5PLIB) -lH5Part $(LIBS) + +H5PartTest.o: H5PartTest.cc + $(CXX) $(CFLAGS) $(INC) -DREGRESSIONTEST -g -c $< + +############################################################################### + +H5PartTestP: H5PartTestP.o + $(CXX) $(INC) -o $@ $< $(H5LIB) -lH5Part $(LIBS) + +H5PartTestP.o: H5PartTest.cc + $(CXX) $(CFLAGS) $(INC) -DREGRESSIONTEST -c $< -o $@ + +############################################################################### + +H5PartTestParallel: H5PartTestParallel.o + $(CXX) -o $@ $< $(H5LIB) -lH5Part $(LIBS) + +H5PartTestParallel.o: H5PartTestParallel.cc + $(CXX) $(CFLAGS) $(INC) -c $< + +############################################################################### + +H5PartAndreasTest: H5PartAndreasTest.o + $(CXX) -o $@ $< $(H5LIB) -lpH5Part $(LIBS) + +H5PartAndreasTest.o: H5PartAndreasTest.cc + $(CXX) $(CFLAGS) $(INC) -c $< + +############################################################################### + +H5testF: H5testF.o + $(FC) -o $@ $< $(H5LIB) -lH5PartF -lH5Part $(LIBS) + +H5testF.o: H5testF.f + $(FC) $(FFLAGS) -c $(H5INC) $< + +############################################################################### + +H5testFpar: H5testFpar.o + $(MPIFC) -o $@ $< $(H5LIB) -lpH5PartF -lpH5Part $(LIBS) + +H5testFpar.o: H5testFpar.f90 + $(MPIFC) $(FFLAGS) -c $(H5INC) $< + +############################################################################### + +H5test: H5test.o + $(CXX) -o $@ $< $(H5LIB) $(LIBS) + +H5test.o: H5test.cc + $(CXX) $(CFLAGS) $(INC) -DREGRESSIONTEST -g -c $< + +############################################################################### +% : %.o + $(CC) -o $@ $< $(H5LIB) $(LIBS) + +%.o : %.c + $(CC) $(CFLAGS) $(INC) -g -c $< + +%.o : %.f90 + ${FC} $(FFLAGS) -c $(H5INC) $< + +H5BlockTestAttributes.o: H5BlockTestAttributes.c + +H5BlockTestAttributes: H5BlockTestAttributes.o + +H5BlockTestAttributesF.o: H5BlockTestAttributesF.f90 + +H5BlockTestAttributesF: H5BlockTestAttributesF.o + $(FC) -o $@ $< $(H5LIB) -lH5PartF -lH5Part $(LIBS) + +H5BlockParTestScalarField.o: H5BlockParTestScalarField.c + +H5BlockParTestScalarField: H5BlockParTestScalarField.o + +H5BlockParTestScalarFieldF.o: H5BlockParTestScalarFieldF.f90 + +H5BlockParTestScalarFieldF: H5BlockParTestScalarFieldF.o + $(FC) -o $@ $< $(H5LIB) -lH5PartF -lH5Part $(LIBS) + +H5BlockDissolveGhosts.o: H5BlockDissolveGhosts.c + +H5BlockDissolveGhosts: H5BlockDissolveGhosts.o + + +############################################################################### +clean: + ${RM} -f *~ *.o ${bin_PROGRAMS} + +distclean: clean + ${RM} -rf .deps + ${RM} -rf .libs + ${RM} -f parttest.h5 + ${RM} -rf config.status config.log config.h Makefile + + + diff --git a/trunk/tools/Makefile.am b/trunk/tools/Makefile.am new file mode 100644 index 0000000..9f3c610 --- /dev/null +++ b/trunk/tools/Makefile.am @@ -0,0 +1,83 @@ +# tools level Makefile.am + +# PATH SETTING +HDF5ROOT = @HDF5ROOT@ + +# COMPILER SETTING +CXX = @CXX@ +TOOLS_CXX = @TOOLS_CXX@ + +# COMPILER FLAG SETTING +CFLAGS = @CFLAGS@ + +# # -L$(HDF5ROOT)/lib -lhdf5 + +# LIBRARIES +SZLIB = @SZLIB@ +HDFLIB = @TOOLS_HDFLIB@ -lz $(SZLIB) +LIBS = $(HDFLIB) $(MPILIB) -lm @STDCXX@ @LDFLAGS@ + +# H5Part compiled library location +# H5PLIB = -L@prefix@/lib +H5PLIB = -L@H5P_LIB_LOC@ @TOOLS_H5PART_LIB@ + +# INCLUDES +HDFINC = -I$(HDF5ROOT)/include +INC = $(HDFINC) $(H5PINC) $(MPIINC) + +# H5Part header file location +# H5PINC = -I@prefix@/include +H5PINC = -I@H5P_LIB_LOC@ + +# What to build... make install will place these files in the $(prefix)/bin directory. +bin_PROGRAMS = @BUILD_TOOLS@ + +# Listing of all programs that maybe built. (Has to know statically...) +EXTRA_PROGRAMS = h5pAttrib h5pToGNUplot # homdynToH5p + +# Extra files that I wish to include in the dist tar ball. +EXTRA_DIST = h5pAttrib.cc h5pToGNUplot.cc## TO BE TAILORED LATER... + +# Listing of sources +h5pAttrib_SOURCES = h5pAttrib.cc + +h5pToGNUplot_SOURCES = h5pToGNUplot.cc + +#homdynToH5p_SOURCES = homdynToH5p.cc + +# Specific building instruction (What compilers to use...) +# ------------ Build Tools ------------ + +h5pAttrib: h5pAttrib.o + $(TOOLS_CXX) -o h5pAttrib h5pAttrib.o $(H5PLIB) $(LIBS) + +h5pAttrib.o: h5pAttrib.cc + $(TOOLS_CXX) $(CFLAGS) $(INC) -g -c h5pAttrib.cc + + +h5pToGNUplot: h5pToGNUplot.o + $(TOOLS_CXX) -o h5pToGNUplot h5pToGNUplot.o $(H5PLIB) $(LIBS) + +h5pToGNUplot.o: h5pToGNUplot.cc + $(TOOLS_CXX) $(CFLAGS) $(INC) -g -c $< + +homdynToH5p : homdynToH5p.o + $(TOOLS_CXX) -o $@ $< $(H5PLIB) $(LIBS) + +homdynToH5p.o: homdynToH5p.cc + $(TOOLS_CXX) $(CFLAGS) $(INC) -g -c $< + + +clean: + rm -f *~ *.o h5pAttrib h5pToGNUplot + +distclean: clean + rm -rf .deps + rm -rf Makefile + + +# # bash-3.00$ /usr/bin/mpcc_r -g -O2 -I/scratch/scratchdirs/cristina/hdf5/hdf5_par/include -I/u2/antino/trunk/src -c h5pAttrib.cc +# # bash-3.00$ /usr/bin/mpcc_r -o h5pAttrib h5pAttrib.o -L/u2/antino/trunk/src -lpH5Part -L/scratch/scratchdirs/cristina/hdf5/hdf5_par/lib -lhdf5 -lz -lm + + +##################################################################################################################### diff --git a/trunk/tools/README b/trunk/tools/README new file mode 100644 index 0000000..03d4d7a --- /dev/null +++ b/trunk/tools/README @@ -0,0 +1,356 @@ +TABLE OF CONTENTS +-------------------- + +[1] Quick Guide + +--- For h5pAttrib +[2] To see number of timesteps in a h5part file +[3] To see file attributes in a h5part file +[4] To see step attributes in a h5part file +[5] To see dataset in a h5part file +[6] Providing more than one flag at once for h5pAttrib + +--- For h5pToGNUplot +[7] What parameters to provide +[8] How to create an input file to GNUplot + + +************************************************************************************************ + + +[1] Quick Guide +------------------ + +--> -h option will display a concise help page. + +$>> ./h5pAttrib -h + +usage: h5pAttrib [OPTIONS] file + + OPTIONS + -h, --help Print help page + -n, --nstep Print number of steps + -A, --fileA Print file attributes + -a, --stepA Print step attributes & values for time step n + -d, --dataset Print data sets names & values for time step n + -H, --header Print shorter version without the values + + Examples: + + 1) Show file attribute names & values of sample.h5part + + h5pAttrib -A sample.h5part + + 2) Show step attribute names for time step 5 of sample.h5part + + h5pAttrib -a 5 -H sample.h5part + + + +$>> ./h5pToGNUplot -h + +usage: h5pToGNUplot -t TIMESTEP -1 VARIABLE#1 -2 VARIABLE#2 -i INPUTFILE [OPTIONAL_FLAGS] + + FLAGS + -h, --help Print help page + -1, --1var (REQUIRED) Takes first variable parameter + -2, --2var (REQUIRED) Takes second variable parameter + -i, --input (REQUIRED) Takes input file name + -t, --timestep (REQUIRED) Sets the timestep (Value -1 will result in dumping values of all timesteps.) + -o, --output (OPTIONAL) Takes output file name (without this flag, the program will print to stdout) + -n, --number (OPTIONAL) Sets number of output points + -s, --start (OPTIONAL) Sets the starting particle index + + Examples: + + 1) Create GNU plot file output.txt from sample.h5part by ploting x vs px for timestep 54 + + h5pToGNUplot -t 54 -1 x -2 px -i sample.h5part -o output.txt + + 2) Create GNU plot file output.txt from sample.h5part by ploting x vs px for timestep 54 + using 1200 points from particle index 76 + + h5pToGNUplot -t 54 -1 x -2 px -i sample.h5part -o output.txt -s 76 -n 1200 + +************************************************************************************************ +--- For h5pAttrib +************************************************************************************************ + +[2] To see number of timesteps in a h5part file +-------------------------------------------------- + +EXAMPLE>> + +$>> ./h5pAttrib -n sample.h5part + +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +Printing number of timesteps for: sample.h5part ... + +There are total 252 number of timesteps. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +done + + +[3] To see file attributes in a h5part file +---------------------------------------------- + +EXAMPLE>> + +$>> ./h5pAttrib -A sample.h5part + +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +Printing file attributes for: sample.h5part ... + +The number of file attributes for file sample.h5part is 0 ... +There are no file attributes. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +done + + +NOTE: -H option will omit the list of values of file attributes. + + +[4] To see step attributes in a h5part file +---------------------------------------------- + +EXAMPLE>> + +$>> ./h5pAttrib -a 2 sample.h5part + +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +Printing step attributes for: sample.h5part ... + +The number of step attributes for timestep #2 is 10 ... + +Attribute #0 = Step +There are 1 elements in the attribute +Attribute Type is H5T_NATIVE_INT64 +Printing 1 element value(s): +COUNT[0]: 2 + +Attribute #1 = Spos +There are 1 elements in the attribute +Attribute Type is H5T_NATIVE_DOUBLE +Printing 1 element value(s): +COUNT[0]: 0.143580 + +Attribute #2 = structLen +There are 1 elements in the attribute +Attribute Type is H5T_NATIVE_DOUBLE +Printing 1 element value(s): +COUNT[0]: 2.393000 + +. +. +. + + +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +done + + +NOTE: -H option will omit the list of values of step attributes. + + +[5] To see dataset in a h5part file +-------------------------------------- + +EXAMPLE>> + +$>> ./h5pAttrib -d 2 -H sample.h5part + +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +Printing names of datasets for: sample.h5part ... + +The number of datasets for timestep #2 is 7 ... + +Dataset Name #0 = id +Dataset Type is H5T_NATIVE_INT64 +Number of elements: 67587 + +Dataset Name #1 = px +Dataset Type is H5T_NATIVE_DOUBLE +Number of elements: 67587 + +Dataset Name #2 = py +Dataset Type is H5T_NATIVE_DOUBLE +Number of elements: 67587 + +Dataset Name #3 = pz +Dataset Type is H5T_NATIVE_DOUBLE +Number of elements: 67587 + +Dataset Name #4 = x +Dataset Type is H5T_NATIVE_DOUBLE +Number of elements: 67587 + +Dataset Name #5 = y +Dataset Type is H5T_NATIVE_DOUBLE +Number of elements: 67587 + +Dataset Name #6 = z +Dataset Type is H5T_NATIVE_DOUBLE +Number of elements: 67587 + +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +done + + +NOTE: -H option will omit the list of values of dataset attributes. + +[6] Providing more than one flag at once +------------------------------------------- + +When more than one flags are provided, one result after another will be displayed. + +EXAMPLE>> + +$>> ./h5pAttrib -H -a 1 -d 1 sample.h5part + +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +Printing step attributes for: sample.h5part ... + +The number of step attributes for timestep #1 is 10 ... + +Attribute #0 = Step +Attribute #1 = Spos +Attribute #2 = structLen +Attribute #3 = org +Attribute #4 = maxX +Attribute #5 = minX +Attribute #6 = maxP +Attribute #7 = minP +Attribute #8 = centroid +Attribute #9 = nloc +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +Printing names of datasets for: sample.h5part ... + +The number of datasets for timestep #1 is 7 ... + +Dataset Name #0 = id +Dataset Type is H5T_NATIVE_INT64 +Number of elements: 60214 + +Dataset Name #1 = px +Dataset Type is H5T_NATIVE_DOUBLE +Number of elements: 60214 + +Dataset Name #2 = py +Dataset Type is H5T_NATIVE_DOUBLE +Number of elements: 60214 + +Dataset Name #3 = pz +Dataset Type is H5T_NATIVE_DOUBLE +Number of elements: 60214 + +Dataset Name #4 = x +Dataset Type is H5T_NATIVE_DOUBLE +Number of elements: 60214 + +Dataset Name #5 = y +Dataset Type is H5T_NATIVE_DOUBLE +Number of elements: 60214 + +Dataset Name #6 = z +Dataset Type is H5T_NATIVE_DOUBLE +Number of elements: 60214 + +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +done + +************************************************************************************************ +--- For h5pAttrib +************************************************************************************************ + +[7] What parameters to provide +--------------------------------- + +When you execute the program with -h option, it displays what flags are necessary and what flags +are optional. + + -h, --help Print help page + -1, --1var (REQUIRED) Takes first variable parameter + -2, --2var (REQUIRED) Takes second variable parameter + -i, --input (REQUIRED) Takes input file name + -t, --timestep (REQUIRED) Sets the timestep (Value -1 will result in dumping values of all timesteps.) + -o, --output (OPTIONAL) Takes output file name (without this flag, the program will print to stdout) + -n, --number (OPTIONAL) Sets number of output points + -s, --start (OPTIONAL) Sets the starting particle index + + +[8] How to create an input file to GNUplot +--------------------------------------------- + +EXAMPLE>> +Create input file to GNUplot that plots x vs. y. + +$>> ./h5pToGNUplot -1 x -2 y -t 1 -i sample.h5part -o output.txt +$>> cat output.txt +-0.390779 -0.254793 +-0.396527 -0.252781 +-0.375362 -0.285137 +-0.396527 -0.252781 +-0.379917 -0.283147 +-0.390779 -0.254793 +-0.387536 -0.287346 +-0.371787 -0.319797 +-0.379917 -0.283147 +-0.378967 -0.326058 +-0.378976 -0.326078 +-0.387536 -0.287346 +-0.378957 -0.326069 +-0.379917 -0.283147 +-0.388762 -0.265390 +-0.371787 -0.319797 +-0.390779 -0.254793 +-0.376825 -0.266804 +-0.379917 -0.283147 +-0.375362 -0.285137 +... + +Then run GNUplot... + +$>> gnuplot + + G N U P L O T + Version 4.0 patchlevel 0 + last modified Thu Apr 15 14:44:22 CEST 2004 + System: Linux 2.6.11.4-21.11-smp + + Copyright (C) 1986 - 1993, 1998, 2004 + Thomas Williams, Colin Kelley and many others + + This is gnuplot version 4.0. Please refer to the documentation + for command syntax changes. The old syntax will be accepted + throughout the 4.0 series, but all save files use the new syntax. + + Type `help` to access the on-line reference manual. + The gnuplot FAQ is available from + http://www.gnuplot.info/faq/ + + Send comments and requests for help to + + Send bugs, suggestions and mods to + + + +Terminal type set to 'x11' +gnuplot> plot "output.txt" + +This will open a GNUplot window that plots output.txt. + + diff --git a/trunk/tools/h5pAttrib.cc b/trunk/tools/h5pAttrib.cc new file mode 100644 index 0000000..b690f48 --- /dev/null +++ b/trunk/tools/h5pAttrib.cc @@ -0,0 +1,1259 @@ +/* h5pAttrib.cc + Antino Kim + This utility will output information on h5part files accodring to the flags provided from the command line. + The parser was imported from the example of h5dump utility with slight modifications. +*/ + +#include +#include +#include +#include +#include +#include "H5Part.h" + +#define MAX_LEN 100 + +/* Function headers */ +int get_option(int argc, const char **argv, const char *opts, const struct long_options *l_opts); +static void print_help(); +static void free_handler(struct arg_handler *hand, int len); +static void print_all(H5PartFile* file); +static void print_nstep(H5PartFile* file, char * garbage); +static void print_file_attributes(H5PartFile* file, char * garbage); +static void print_step_attributes(H5PartFile* file, char *attr); +static void print_dataset(H5PartFile* file, char *attr); +static struct arg_handler* function_assign(int argc, const char *argv[]); + +/* Global variables */ +static int display_all = true; +static int print_header = false; +static const char* global_fname = NULL; + +/* `get_option' variables */ +int opt_err = 1; /*get_option prints errors if this is on */ +int opt_ind = 1; /*token pointer */ +const char *opt_arg = NULL; /*flag argument (or value) */ + +/* indication whether the flag (option) requires an argument or not */ +enum { + no_arg = 0, /* doesn't take an argument */ + require_arg, /* requires an argument */ +}; + +/* struct for flags (options) */ +typedef struct long_options +{ + const char *name; /* name of the long option */ + int has_arg; /* whether we should look for an arg */ + char shortval; /* the shortname equivalent of long arg + * this gets returned from get_option */ +} long_options; + +/* List of options in single characters */ +static const char *s_opts = "hnAHa:d:"; + +/* List of options in full words */ +static struct long_options l_opts[] = +{ + { "help", no_arg, 'h' }, // Print help page + { "nstep", no_arg, 'n' }, // Print number of steps + { "fileA", no_arg, 'A' }, // Print file attributes + { "stepA", require_arg, 'a' }, // Print step attributes & values for time step n + { "dataset", require_arg, 'd' }, // Print data sets names & values for time step n + { "header", require_arg, 'H' }, // Print shorter version without the values + { NULL, 0, '\0' } +}; + +/* a structure for handling the order command-line parameters come in */ +struct arg_handler { + void (*func)(H5PartFile *, char *); + char *obj; +}; + + +/************************************************************************************ +*********************************** FUNCTIONS ************************************* +*************************************************************************************/ + + +/* get_option is the parsing function that was majorly ported from h5dump utility */ +int get_option(int argc, const char **argv, const char *opts, const struct long_options *l_opts) +{ + static int sp = 1; /* character index in current token */ + int opt_opt = '?'; /* option character passed back to user */ + + if (sp == 1) + { + /* check for more flag-like tokens */ + if (opt_ind >= argc || argv[opt_ind][0] != '-' || argv[opt_ind][1] == '\0') + { + return EOF; + } + else if (strcmp(argv[opt_ind], "--") == 0) + { + opt_ind++; + return EOF; + } + } + + if (sp == 1 && argv[opt_ind][0] == '-' && argv[opt_ind][1] == '-') + { + /* long command line option */ + const char *arg = &argv[opt_ind][2]; + int i; + + for (i = 0; l_opts && l_opts[i].name; i++) + { + size_t len = strlen(l_opts[i].name); + + if (strncmp(arg, l_opts[i].name, len) == 0) + { + /* we've found a matching long command line flag */ + opt_opt = l_opts[i].shortval; + + if (l_opts[i].has_arg != no_arg) + { + if (arg[len] == '=') + { + opt_arg = &arg[len + 1]; + } + else if (opt_ind < (argc - 1) && argv[opt_ind + 1][0] != '-') + { + opt_arg = argv[++opt_ind]; + } + else if (l_opts[i].has_arg == require_arg) + { + if (opt_err) + fprintf(stderr, "%s: option required for \"--%s\" flag\n", argv[0], arg); + + opt_opt = '?'; + } + } + else + { + if (arg[len] == '=') + { + if (opt_err) + fprintf(stderr, "%s: no option required for \"%s\" flag\n", argv[0], arg); + + opt_opt = '?'; + } + + opt_arg = NULL; + } + + break; + } + } + + if (l_opts[i].name == NULL) + { + /* exhausted all of the l_opts we have and still didn't match */ + if (opt_err) + fprintf(stderr, "%s: unknown option \"%s\"\n", argv[0], arg); + + opt_opt = '?'; + } + + opt_ind++; + sp = 1; + } + else + { + register char *cp; /* pointer into current token */ + + /* short command line option */ + opt_opt = argv[opt_ind][sp]; + + if (opt_opt == ':' || (cp = strchr(opts, opt_opt)) == 0) + { + + if (opt_err) + fprintf(stderr, "%s: unknown option \"%c\"\n", argv[0], opt_opt); + /* if no chars left in this token, move to next token */ + if (argv[opt_ind][++sp] == '\0') + { + opt_ind++; + sp = 1; + } + + return '?'; + } + + if (*++cp == ':') + { + + /* if a value is expected, get it */ + if (argv[opt_ind][sp + 1] != '\0') + { + /* flag value is rest of current token */ + opt_arg = &argv[opt_ind++][sp + 1]; + } + else if (++opt_ind >= argc) + { + if (opt_err) + { + fprintf(stderr, "%s: value expected for option \"%c\"\n", argv[0], opt_opt); + } + opt_opt = '?'; + } + else + { + /* flag value is next token */ + opt_arg = argv[opt_ind++]; + } + + sp = 1; + } + else + { + /* set up to look at next char in token, next time */ + if (argv[opt_ind][++sp] == '\0') + { + /* no more in current token, so setup next token */ + opt_ind++; + sp = 1; + } + + opt_arg = NULL; + } + } + + /* return the current flag character found */ + return opt_opt; +} + +/* Assigns functions according to the parsed result */ +static struct arg_handler* function_assign(int argc, const char *argv[]) +{ + struct arg_handler *hand = NULL; + + int i, option; + + /* this will be plenty big enough to hold the info */ + hand = (arg_handler*)calloc((size_t)argc, sizeof(struct arg_handler)); + + /* set options according to the command line */ + while ((option = get_option(argc, argv, s_opts, l_opts)) != EOF) + { + switch ((char)option) + { + case 'h': // Print help page + print_help(); + exit(1); + case 'A': // Print file attributes + display_all = 0; + + for (i = 0; i < argc; i++) + { + if (!hand[i].func) + { + hand[i].func = print_file_attributes; + hand[i].obj = NULL; // inserting garabage value that we won't use. (For function interface compatibility) + break; + } + } + break; + case 'a': // Print step attributes & values for time step n + display_all = 0; + + for (i = 0; i < argc; i++) + { + if (!hand[i].func) + { + hand[i].func = print_step_attributes; + hand[i].obj = strdup(opt_arg); + break; + } + } + break; + case 'd': // Print data sets names & values for time step n + display_all = 0; + + for (i = 0; i < argc; i++) + { + if (!hand[i].func) + { + hand[i].func = print_dataset; + hand[i].obj = strdup(opt_arg); + break; + } + } + break; + case 'n': // Print number of steps + display_all = 0; + + for (i = 0; i < argc; i++) + { + if (!hand[i].func) + { + hand[i].func = print_nstep; + hand[i].obj = NULL; // inserting garabage value that we won't use. (For function interface compatibility) + break; + } + } + break; + case 'H': // Print shorter version without the values + print_header = true; + break; + default: + print_help(); + exit(1); + } + } + return hand; +} + +/* For printing help page */ +static void print_help() +{ + fflush(stdout); + fprintf(stdout, "\nusage: h5pAttrib [OPTIONS] file\n"); + fprintf(stdout, "\n"); + fprintf(stdout, " OPTIONS\n"); + fprintf(stdout, " -h, --help Print help page\n"); + fprintf(stdout, " -n, --nstep Print number of steps\n"); + fprintf(stdout, " -A, --fileA Print file attributes\n"); + fprintf(stdout, " -a n, --stepA n Print step attributes & values for time step n\n"); + fprintf(stdout, " -d n, --dataset n Print data sets names & values for time step n\n"); + fprintf(stdout, " -H, --header Print shorter version without the values\n"); + fprintf(stdout, "\n"); + fprintf(stdout, " Examples:\n"); + fprintf(stdout, "\n"); + fprintf(stdout, " 1) Show file attribute names & values of sample.h5part\n"); + fprintf(stdout, "\n"); + fprintf(stdout, " h5pAttrib -A sample.h5part\n"); + fprintf(stdout, "\t\t\tOR\n"); + fprintf(stdout, " h5pAttrib --fileA sample.h5part\n"); + fprintf(stdout, "\n"); + fprintf(stdout, " 2) Show step attribute names for time step 5 of sample.h5part\n"); + fprintf(stdout, "\n"); + fprintf(stdout, " h5pAttrib -a 5 -H sample.h5part\n"); + fprintf(stdout, "\t\t\tOR\n"); + fprintf(stdout, " h5pAttrib --stepA 5 -H sample.h5part\n"); + fprintf(stdout, "\n"); +} + +/* For priting everything (default option when no flags provided.) */ +static void print_all(H5PartFile* file) +{ + int nt; + + char file_attrib[MAX_LEN]; + h5part_int64_t type; + h5part_int64_t num_elem; + h5part_int64_t num_attrib; + char step_attrib[MAX_LEN]; + h5part_int64_t i, j, k; + h5part_int64_t count; + void* value = NULL; + h5part_int64_t timestep_ctr; + + char data_name[MAX_LEN]; + h5part_int64_t num_dataset; + h5part_int64_t nparticles; + + fprintf(stdout, "\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"); + fprintf(stdout, "\n"); + nt=H5PartGetNumSteps(file); + fprintf(stdout, "There are total %d number of timesteps.\n",nt); + + fprintf(stdout, "\nDump result for \"%s\"...\n\n", global_fname); + fprintf(stdout, "FILE_ATTRIBUTES:\n"); + + + if(print_header) + { + num_attrib = H5PartGetNumFileAttribs(file); + + for(i=0; i +#include +#include +#include +#include +#include "H5Part.h" + +#define MAX_LEN 100 + +/* Function headers */ +int get_option(int argc, const char **argv, const char *opts, const struct long_options *l_opts); +static void print_help(); +static void variable_assign(int argc, const char *argv[]); + +/* Global variables */ +static char* var_1 = NULL; +static char* var_2 = NULL; +static char* input_name = NULL; +static char* output_name = NULL; +static char* timestep = NULL; +static char* start = NULL; +static char* npoints = NULL; +static int print_all = 0; + +/* `get_option' variables */ +int opt_err = 1; /*get_option prints errors if this is on */ +int opt_ind = 1; /*token pointer */ +const char *opt_arg = NULL; /*flag argument (or value) */ + +/* indication whether the flag (option) requires an argument or not */ +enum { + no_arg = 0, /* doesn't take an argument */ + require_arg, /* requires an argument */ +}; + +/* struct for flags (options) */ +typedef struct long_options +{ + const char *name; /* name of the long option */ + int has_arg; /* whether we should look for an arg */ + char shortval; /* the shortname equivalent of long arg + * this gets returned from get_option */ +} long_options; + +/* List of options in single characters */ +static const char *s_opts = "h1:2:i:o:n:t:s:"; + +/* List of options in full words */ +static struct long_options l_opts[] = +{ + { "help", no_arg, 'h' }, // Print help page + { "1var", require_arg, '1' }, // Takes first variable parameter + { "2var", require_arg, '2' }, // Takes second variable parameter + { "input", require_arg, 'i' }, // Takes input file name + { "output", require_arg, 'o' }, // Takes output file name (without this flag, the program will print to stdout) + { "number", require_arg, 'n' }, // Sets number of output points + { "start", require_arg, 's' }, // Sets the starting particle index + { "timestep", require_arg, 't' }, // Sets the timestep + { NULL, 0, '\0' } +}; + + +/************************************************************************************ +*********************************** FUNCTIONS ************************************* +*************************************************************************************/ + + +/* get_option is the parsing function that was majorly ported from h5dump utility */ +int get_option(int argc, const char **argv, const char *opts, const struct long_options *l_opts) +{ + static int sp = 1; /* character index in current token */ + int opt_opt = '?'; /* option character passed back to user */ + + if (sp == 1) + { + /* check for more flag-like tokens */ + if (opt_ind >= argc || argv[opt_ind][0] != '-' || argv[opt_ind][1] == '\0') + { + return EOF; + } + else if (strcmp(argv[opt_ind], "--") == 0) + { + opt_ind++; + return EOF; + } + } + + if (sp == 1 && argv[opt_ind][0] == '-' && argv[opt_ind][1] == '-') + { + /* long command line option */ + const char *arg = &argv[opt_ind][2]; + int i; + + for (i = 0; l_opts && l_opts[i].name; i++) + { + size_t len = strlen(l_opts[i].name); + + if (strncmp(arg, l_opts[i].name, len) == 0) + { + /* we've found a matching long command line flag */ + opt_opt = l_opts[i].shortval; + + if (l_opts[i].has_arg != no_arg) + { + if (arg[len] == '=') + { + opt_arg = &arg[len + 1]; + } + else if (opt_ind < (argc - 1) && argv[opt_ind + 1][0] != '-') + { + opt_arg = argv[++opt_ind]; + } + else if (l_opts[i].has_arg == require_arg) + { + if (opt_err) + fprintf(stderr, "%s: option required for \"--%s\" flag\n", argv[0], arg); + + opt_opt = '?'; + } + } + else + { + if (arg[len] == '=') + { + if (opt_err) + fprintf(stderr, "%s: no option required for \"%s\" flag\n", argv[0], arg); + + opt_opt = '?'; + } + + opt_arg = NULL; + } + + break; + } + } + + if (l_opts[i].name == NULL) + { + /* exhausted all of the l_opts we have and still didn't match */ + if (opt_err) + fprintf(stderr, "%s: unknown option \"%s\"\n", argv[0], arg); + + opt_opt = '?'; + } + + opt_ind++; + sp = 1; + } + else + { + register char *cp; /* pointer into current token */ + + /* short command line option */ + opt_opt = argv[opt_ind][sp]; + + if (opt_opt == ':' || (cp = strchr(opts, opt_opt)) == 0) + { + + if (opt_err) + fprintf(stderr, "%s: unknown option \"%c\"\n", argv[0], opt_opt); + /* if no chars left in this token, move to next token */ + if (argv[opt_ind][++sp] == '\0') + { + opt_ind++; + sp = 1; + } + + return '?'; + } + + if (*++cp == ':') + { + + /* if a value is expected, get it */ + if (argv[opt_ind][sp + 1] != '\0') + { + /* flag value is rest of current token */ + opt_arg = &argv[opt_ind++][sp + 1]; + } + else if (++opt_ind >= argc) + { + if (opt_err) + { + fprintf(stderr, "%s: value expected for option \"%c\"\n", argv[0], opt_opt); + } + opt_opt = '?'; + } + else + { + /* flag value is next token */ + opt_arg = argv[opt_ind++]; + } + + sp = 1; + } + else + { + /* set up to look at next char in token, next time */ + if (argv[opt_ind][++sp] == '\0') + { + /* no more in current token, so setup next token */ + opt_ind++; + sp = 1; + } + + opt_arg = NULL; + } + } + + /* return the current flag character found */ + return opt_opt; +} + +/* Assigns functions according to the parsed result */ +static void variable_assign(int argc, const char *argv[]) +{ + int option; + + /* set options according to the command line */ + while ((option = get_option(argc, argv, s_opts, l_opts)) != EOF) + { + switch ((char)option) + { + case 'h': // Print help page + print_help(); + exit(1); + case '1': // Print file attributes + var_1 = strdup(opt_arg); + break; + case '2': // Print step attributes & values for time step n + var_2 = strdup(opt_arg); + break; + case 'i': // Print data sets names & values for time step n + input_name = strdup(opt_arg); + break; + case 'o': // Print number of steps + output_name = strdup(opt_arg); + break; + case 'n': // Print shorter version without the values + npoints = strdup(opt_arg); + break; + case 's': // Print shorter version without the values + start = strdup(opt_arg); + break; + case 't': // Print shorter version without the values + timestep = strdup(opt_arg); + if(atoi(timestep)==-1) + { + print_all = 1; + } + break; + default: + print_help(); + exit(1); + } + } +} + +/* For printing help page */ +static void print_help() +{ + fflush(stdout); + fprintf(stdout, "\nusage: h5pToGNUplot -t TIMESTEP -1 VARIABLE#1 -2 VARIABLE#2 -i INPUTFILE [OPTIONAL_FLAGS]\n"); + fprintf(stdout, "\n"); + fprintf(stdout, " FLAGS\n"); + fprintf(stdout, " -h, --help Print help page\n"); + fprintf(stdout, " -1 par, --1var par (REQUIRED) Takes first variable parameter to \"par\"\n"); + fprintf(stdout, " -2 par, --2var par (REQUIRED) Takes second variable parameter to \"par\"\n"); + fprintf(stdout, " -i file, --input file (REQUIRED) Takes input file name to \"file\"\n"); + fprintf(stdout, " -t step, --timestep step (REQUIRED) Sets the timestep to \"step\" (Value -1 will result in dumping values of all timesteps.)\n"); + fprintf(stdout, " -o file, --output file (OPTIONAL) Takes output file name to \"file\" (without this flag, the program will print to stdout)\n"); + fprintf(stdout, " -n num, --number num (OPTIONAL) Sets number of output points to \"num\"\n"); + fprintf(stdout, " -s idx, --start idx (OPTIONAL) Sets the starting particle index to \"idx\"\n"); + fprintf(stdout, "\n"); + fprintf(stdout, " Examples:\n"); + fprintf(stdout, "\n"); + fprintf(stdout, " 1) Create GNU plot file output.txt from sample.h5part by ploting x vs px for timestep 54\n"); + fprintf(stdout, "\n"); + fprintf(stdout, " h5pToGNUplot -t 54 -1 x -2 px -i sample.h5part -o output.txt\n"); + fprintf(stdout, "\n"); + fprintf(stdout, " 2) Create GNU plot file output.txt from sample.h5part by ploting x vs px for timestep 54 \n using 1200 points from particle index 76\n"); + fprintf(stdout, "\n"); + fprintf(stdout, " h5pToGNUplot -t 54 -1 x -2 px -i sample.h5part -o output.txt -s 76 -n 1200\n"); + fprintf(stdout, "\n"); +} + +int main(int argc, const char *argv[]) +{ + /* Numerous variables */ + H5PartFile *h5file = NULL; + char data_name[MAX_LEN]; + int i, j, start_indx = 0; + h5part_int64_t type; + hid_t type_1; + hid_t type_2; + int num_dataset; + h5part_int64_t nparticles; + int stop = 0; + void* value_1 = NULL; + void* value_2 = NULL; + FILE * outFile; + int ntime_step = 0; + + variable_assign(argc, argv); + + if(input_name == NULL) + { + fprintf(stdout, "missing file name\n"); + print_help(); + exit(1); + } + + if(var_1 == NULL || var_2 == NULL || timestep == NULL) + { + fprintf(stdout, "missing required parameters\n"); + print_help(); + exit(1); + } + + h5file = H5PartOpenFile(input_name, H5PART_READ); + + if( h5file == NULL ) + { + fprintf(stdout, "unable to open file %s\n", input_name); + print_help(); + exit(1); + } + + j = atoi(timestep); + ntime_step = j+1; + + if(print_all) + { + j=0; + ntime_step = H5PartGetNumSteps(h5file); + } + + for (; j nparticles) + { + stop = nparticles; + } + + + if(output_name != NULL) + { + outFile = fopen (output_name,"w"); + + for(i=start_indx; i +#include +#include + +using namespace std; + +int main(int argc,char *argv[]){ + + const int nCol = 25; + const int nHeader = 1; + int nLines = 0; + + H5PartFile *file; + + double data[nCol][10000]; + string headers[nCol]; + string units[nCol]; + + string fnStr("HBUNCH.OUT"); + + ifstream in; + + /* + Open and read HOMDYN File: + */ + + in.open(fnStr.c_str()); + + /* + over read possible header + */ + + for (int l=0;l> headers[c]; + cout << c << " - - " << headers[c] << endl; + } + } + headers[0] = string("SPOS"); // H5Root needs this name + /* + read in file data + */ + + while (1) { + for (int c=0;c> data[c][nLines]; + if (!in.good()) break; + nLines++; + } + + in.close(); + + cout << "In HBUNCH.OUT found " << nLines << " lines " << endl; + + file=H5PartOpenFile("HBUNCH.h5",H5PART_WRITE); + if(!file) { + perror("File open failed: exiting!"); + exit(0); + } + + H5PartWriteFileAttribString(file,"File Description", "This file contains HOMDYN HBUNCH.OUT data"); + + H5PartWriteFileAttribString(file,"tUnit","s"); + H5PartWriteFileAttribString(file,"xUnit","m"); + H5PartWriteFileAttribString(file,"yUnit","m"); + H5PartWriteFileAttribString(file,"zUnit","m"); + H5PartWriteFileAttribString(file,"pxUnit","#beta#gamma"); + H5PartWriteFileAttribString(file,"pyUnit","#beta#gamma"); + H5PartWriteFileAttribString(file,"pzUnit","#beta#gamma"); + H5PartWriteFileAttribString(file,"idUnit","1"); + H5PartWriteFileAttribString(file,"SPOSUnit","m"); + H5PartWriteFileAttribString(file,"TIMEUnit","s"); + H5PartWriteFileAttribString(file,"#gammaUnit","1"); + H5PartWriteFileAttribString(file,"ENERGYUnit","MeV"); + H5PartWriteFileAttribString(file,"#varepsilonUnit","m rad"); + H5PartWriteFileAttribString(file,"#varepsilonrUnit","m rad"); + + H5PartWriteFileAttribString(file,"#varepsilonr-geomUnit","m rad"); + H5PartWriteFileAttribString(file,"RMSXUnit","m"); + H5PartWriteFileAttribString(file,"RMSRUnit","m"); + H5PartWriteFileAttribString(file,"RMSPUnit","#beta#gamma"); + + H5PartWriteFileAttribString(file,"maxdEUnit","MeV"); + H5PartWriteFileAttribString(file,"max#phiUnit","deg"); + + H5PartWriteFileAttribString(file,"phizUnit","deg"); + H5PartWriteFileAttribString(file,"enezUnit","keV"); + +/* +1 Z_[m] +2 sigma_r_[mm] +3 sigma_z_[mm] +4 I_[A] +5 sigma_x_[mm] +6 enx_[um] +7 sigma_y_[mm] +8 eny_[um] +9 T_[MeV] +10 dg/g_[%] +11 DE_[MeV] +12 elz_[KeVmm] +13 Ez_[MV/m] +14 Bz_[T] Bx_[G] By_[G] +15 Qgrad_[T/m] +16 ByWig +17 BHOR_[T] +18 Time_[nsec] +19 beta +20 R/gL +21 Lplas_[m] +22 Zeq_[m] +23 EWsteady +*/ + + for (int t=0;t $@ + + +## +## Automatic dependency stuff +## +include $(TOPDIR)/include/make-targets diff --git a/trunk/visit_plugins/databases/H5Part/README.txt b/trunk/visit_plugins/databases/H5Part/README.txt new file mode 100644 index 0000000..5e48118 --- /dev/null +++ b/trunk/visit_plugins/databases/H5Part/README.txt @@ -0,0 +1,21 @@ +Reading H5Part data into VisIt: + +VisIt, http://www.llnl.gov/visit, is an open source point-and-click 3D scientific visualization application that supports most of the common visualization techniques on structured and unstructured grids. One of its advantages is that it employs a distributed and parallel architecture in order to handle extremely large data sets interactively. VisIt's rendering and data processing capabilities are split into viewer and engine components that may be distributed across multiple machines. + +This database plugins allows the user to read H5Part data into VisIt. To be recognized by VisIt the filename needs to have the extension ".h5part". This is important, otherwise VisIt will try to open the file with another reader and it will fail. + +Building the plugin: +You must first install VisIt in your machine to be able to link to its libraries. + +Modify the Makefile to reflect your installation. + +TOPDIR is the path to the VisIt Distribution installation. +HOMEPLUGINS is the path to your home dir .visit plugin directory. Create it if not there. +SHLIB_FORCED is the path to your H5Part. I made H5Part statically linked to the hdf5 library, if you don't, add your -L/hdf5librarypath -lhdf5 +Modify the location of the hdf5 include and the H5Part library. + + +If compiling a parallel version add -DPARALLEL_IO to the CXXFLAGS and CPPFLAGS. + + +Note: TOPDIR is defined twice because in make-variables it is defined by the VisIt developers to be in one of their machines. diff --git a/trunk/visit_plugins/databases/H5Part/avth5partFileFormat.C b/trunk/visit_plugins/databases/H5Part/avth5partFileFormat.C new file mode 100644 index 0000000..9260975 --- /dev/null +++ b/trunk/visit_plugins/databases/H5Part/avth5partFileFormat.C @@ -0,0 +1,597 @@ +// ************************************************************************* // +// avth5partFileFormat.C // +// ************************************************************************* // + +#include + +#include +#include + +#include +#include +#include +#include + +#include + +#include + +#include +#include +#include +#include +#include + + +//h5part specific +#include +#include + +#include +#include +#include + + + +#ifdef PARALLEL_IO +#include +#include +#endif + +using namespace std; + +// **************************************************************************** +// Method: avth5part constructor +// +// Programmer: cristina -- generated by xml2avt +// Creation: Mon Feb 27 13:47:07 PST 2006 +// +// **************************************************************************** + +avth5partFileFormat::avth5partFileFormat(const char *filename) + : avtMTMDFileFormat(filename) +{ + // INITIALIZE DATA MEMBERS + + + H5PartFile *file; + fname = filename; + + file = H5PartOpenFile(filename,H5PART_READ); + + if (!file) + EXCEPTION1(InvalidFilesException, filename); + + + int i, j; + int npoints, npointvars; + int nspace = 3; + + H5PartSetStep(file,0); + //points + npoints= (int) H5PartGetNumParticles(file); + if (npoints == 0) + EXCEPTION1(VisItException, "npoints is zero"); + points.resize(npoints*nspace); + cout << "constructor: npoints: " << npoints << "\n"; + + //point vars + npointvars= (int) H5PartGetNumDatasets(file); /* get number of datasets in timestep 0 */ + pointvars.resize(npointvars); + pointvarnames.resize(npointvars); + cout << "constructor: nvariables: " << npointvars << "\n"; + + char name[128]; + h5part_int64_t status; + for (j=0; j < npointvars; j++){ + status = H5PartGetDatasetName(file,j, name,128); + if (status != H5PART_SUCCESS){ + EXCEPTION1(VisItException, "could not read a variable name"); + } + pointvarnames[j] = name; + } + + H5PartCloseFile(file); +} + + +// **************************************************************************** +// Method: avtEMSTDFileFormat::GetNTimesteps +// +// Purpose: +// Tells the rest of the code how many timesteps there are in this file. +// +// Programmer: cristina -- generated by xml2avt +// Creation: Mon Feb 27 13:47:07 PST 2006 +// +// **************************************************************************** + +int +avth5partFileFormat::GetNTimesteps(void) +{ + h5part_int64_t nt; + H5PartFile *file; + file = H5PartOpenFile(fname.c_str(),H5PART_READ); + H5PartSetStep(file,0); + nt=H5PartGetNumSteps(file); /* get number of steps in file */ + H5PartCloseFile(file); + return (int) nt; +} + + +// **************************************************************************** +// Method: avth5partFileFormat::FreeUpResources +// +// Purpose: +// When VisIt is done focusing on a particular timestep, it asks that +// timestep to free up any resources (memory, file descriptors) that +// it has associated with it. This method is the mechanism for doing +// that. +// +// Programmer: cristina -- generated by xml2avt +// Creation: Mon Feb 27 13:47:07 PST 2006 +// +// **************************************************************************** + +void +avth5partFileFormat::FreeUpResources(void) +{ +} + + +// **************************************************************************** +// Method: avth5partFileFormat::PopulateDatabaseMetaData +// +// Purpose: +// This database meta-data object is like a table of contents for the +// file. By populating it, you are telling the rest of VisIt what +// information it can request from you. +// +// Programmer: cristina -- generated by xml2avt +// Creation: Mon Feb 27 13:47:07 PST 2006 +// +// **************************************************************************** + +void +avth5partFileFormat::PopulateDatabaseMetaData(avtDatabaseMetaData *md, int timeState) +{ + // + // CODE TO ADD A MESH + // + // string meshname = ... + // + // AVT_RECTILINEAR_MESH, AVT_CURVILINEAR_MESH, AVT_UNSTRUCTURED_MESH, + // AVT_POINT_MESH, AVT_SURFACE_MESH, AVT_UNKNOWN_MESH + // avtMeshType mt = AVT_RECTILINEAR_MESH; + // + // int nblocks = YOU_MUST_DECIDE; + // int block_origin = 0; + // int spatial_dimension = 2; + // int topological_dimension = 2; + // float *extents = NULL; + // + // Here's the call that tells the meta-data object that we have a mesh: + // + // AddMeshToMetaData(md, meshname, mt, extents, nblocks, block_origin, + // spatial_dimension, topological_dimension); + // + + // + // CODE TO ADD A SCALAR VARIABLE + // + // string mesh_for_this_var = meshname; // ??? -- could be multiple meshes + // string varname = ... + // + // AVT_NODECENT, AVT_ZONECENT, AVT_UNKNOWN_CENT + // avtCentering cent = AVT_NODECENT; + // + // + // Here's the call that tells the meta-data object that we have a var: + // + // AddScalarVarToMetaData(md, varname, mesh_for_this_var, cent); + // + + // + // CODE TO ADD A VECTOR VARIABLE + // + // string mesh_for_this_var = meshname; // ??? -- could be multiple meshes + // string varname = ... + // int vector_dim = 2; + // + // AVT_NODECENT, AVT_ZONECENT, AVT_UNKNOWN_CENT + // avtCentering cent = AVT_NODECENT; + // + // + // Here's the call that tells the meta-data object that we have a var: + // + // AddVectorVarToMetaData(md, varname, mesh_for_this_var, cent,vector_dim); + // + + // + // CODE TO ADD A TENSOR VARIABLE + // + // string mesh_for_this_var = meshname; // ??? -- could be multiple meshes + // string varname = ... + // int tensor_dim = 9; + // + // AVT_NODECENT, AVT_ZONECENT, AVT_UNKNOWN_CENT + // avtCentering cent = AVT_NODECENT; + // + // + // Here's the call that tells the meta-data object that we have a var: + // + // AddTensorVarToMetaData(md, varname, mesh_for_this_var, cent,tensor_dim); + // + + // + // CODE TO ADD A MATERIAL + // + // string mesh_for_mat = meshname; // ??? -- could be multiple meshes + // string matname = ... + // int nmats = ...; + // vector mnames; + // for (int i = 0 ; i < nmats ; i++) + // { + // char str[32]; + // sprintf(str, "mat%d", i); + // -- or -- + // strcpy(str, "Aluminum"); + // mnames.push_back(str); + // } + // + // Here's the call that tells the meta-data object that we have a mat: + // + // AddMaterialToMetaData(md, matname, mesh_for_mat, nmats, mnames); + // + // + // Here's the way to add expressions: + //Expression momentum_expr; + //momentum_expr.SetName("momentum"); + //momentum_expr.SetDefinition("{u, v}"); + //momentum_expr.SetType(Expression::VectorMeshVar); + //md->AddExpression(&momentum_expr); + //Expression KineticEnergy_expr; + //KineticEnergy_expr.SetName("KineticEnergy"); + //KineticEnergy_expr.SetDefinition("0.5*(momentum*momentum)/(rho*rho)"); + //KineticEnergy_expr.SetType(Expression::ScalarMeshVar); + //md->AddExpression(&KineticEnergy_expr); + // + int size; + size = 1; +#ifdef PARALLEL_IO + size = PAR_Size(); +#endif + + + if (!points.size()) { + EXCEPTION1(InvalidFilesException, "Number of points is zero"); + } + + cout << "Populate: size, : " << size << "\n"; + + avtMeshMetaData *pmesh = new avtMeshMetaData; + + int dimension = 3; + pmesh->name = "particles"; + pmesh->originalName = "particles"; + pmesh->meshType = AVT_POINT_MESH; + pmesh->topologicalDimension = 0; + pmesh->spatialDimension = dimension; + pmesh->numBlocks = size; + pmesh->blockTitle = "subset"; + pmesh->blockPieceName = "subset"; + pmesh->hasSpatialExtents = false; + + md->Add(pmesh); + + int i; + for (i=0; i < pointvarnames.size(); i++){ + AddScalarVarToMetaData(md, pointvarnames[i], "particles", AVT_NODECENT); + } + +} + + +// **************************************************************************** +// Method: avth5partFileFormat::GetMesh +// +// Purpose: +// Gets the mesh associated with this file. The mesh is returned as a +// derived type of vtkDataSet (ie vtkRectilinearGrid, vtkStructuredGrid, +// vtkUnstructuredGrid, etc). +// +// Arguments: +// timestate The index of the timestate. If GetNTimesteps returned +// 'N' time steps, this is guaranteed to be between 0 and N-1. +// domain The index of the domain. If there are NDomains, this +// value is guaranteed to be between 0 and NDomains-1, +// regardless of block origin. +// meshname The name of the mesh of interest. This can be ignored if +// there is only one mesh. +// +// Programmer: cristina -- generated by xml2avt +// Creation: Mon Feb 27 13:47:07 PST 2006 +// +// **************************************************************************** + +vtkDataSet * +avth5partFileFormat::GetMesh(int timestate, int domain, const char *meshname) +{ + cout << "GetMesh domain: " << domain << "\n"; + + H5PartFile *file; + file = H5PartOpenFile(fname.c_str(),H5PART_READ); + + if (!file) + EXCEPTION1(InvalidFilesException, fname.c_str()); + + long int tnpoints, npoints; + int npointvars; + int nspace = 3; + int nprocs = 1; +#ifdef PARALLEL_IO + nprocs = PAR_Size(); +#endif + + H5PartSetStep(file,timestate); + + //points + tnpoints= (int) H5PartGetNumParticles(file); + h5part_int64_t idStart = (( h5part_int64_t)(tnpoints/nprocs))*domain; + h5part_int64_t idEnd; + if (domain < nprocs-1) + idEnd = ((h5part_int64_t)(tnpoints/nprocs))*(domain+1); + else if (domain == nprocs - 1) + idEnd = tnpoints; + + + H5PartSetView(file,idStart,idEnd); + + //points + npoints= (long int) H5PartGetNumParticles(file); + cout << "GetMesh: npoints for domain " << domain << ": " << npoints << "\n"; + + if (strcmp(meshname, "particles") != 0){ + EXCEPTION1(InvalidVariableException, meshname); + } + if (npoints == 0) + EXCEPTION1(VisItException, "npoints is zero"); + + points.resize(npoints*nspace); + h5part_float64_t *x, *y, *z; + x = (h5part_float64_t *) malloc(sizeof(h5part_float64_t)*npoints); + y = (h5part_float64_t *) malloc(sizeof(h5part_float64_t)*npoints); + z = (h5part_float64_t *) malloc(sizeof(h5part_float64_t)*npoints); + + + h5part_int64_t status = H5PART_SUCCESS; + status = H5PartReadDataFloat64(file, "x", x); + if (status != H5PART_SUCCESS) + EXCEPTION1(VisItException, "Could not read x coordinates"); + status = H5PartReadDataFloat64(file, "y", y); + if (status != H5PART_SUCCESS) + EXCEPTION1(VisItException, "Could not read y coordinates"); + status = H5PartReadDataFloat64(file, "z", z); + if (status != H5PART_SUCCESS) + EXCEPTION1(VisItException, "Could not read z coordinates"); + for (long int i = 0; i < npoints; i++){ + points[nspace*i] = (float) x[i]; + points[nspace*i+1] = (float) y[i]; + points[nspace*i+2] = (float) z[i]; + } + free(x); + free(y); + free(z); + + H5PartSetView(file,-1, -1); + + vtkPolyData *dataset = vtkPolyData::New(); + vtkPoints *vtkpoints = vtkPoints::New(); + vtkpoints->SetNumberOfPoints((vtkIdType) npoints); + + float *pts = (float *) vtkpoints->GetVoidPointer(0); + + for (long int i=0; i < npoints*nspace; i++){ + pts[i] = points[i]; + } + + dataset->Allocate(npoints*nspace); + for (long int i=0; i < npoints; i++){ + vtkIdType onevertex = (vtkIdType) i; + dataset->InsertNextCell(VTK_VERTEX, 1, &onevertex); + } + dataset->SetPoints(vtkpoints); + vtkpoints->Delete(); + + + H5PartCloseFile(file); + fprintf(stderr,"proc[%u]: done\n", domain); + + return dataset; +} + + +// **************************************************************************** +// Method: avth5partFileFormat::GetVar +// +// Purpose: +// Gets a scalar variable associated with this file. Although VTK has +// support for many different types, the best bet is vtkFloatArray, since +// that is supported everywhere through VisIt. +// +// Arguments: +// timestate The index of the timestate. If GetNTimesteps returned +// 'N' time steps, this is guaranteed to be between 0 and N-1. +// domain The index of the domain. If there are NDomains, this +// value is guaranteed to be between 0 and NDomains-1, +// regardless of block origin. +// varname The name of the variable requested. +// +// Programmer: cristina -- generated by xml2avt +// Creation: Mon Feb 27 13:47:07 PST 2006 +// +// **************************************************************************** + +vtkDataArray * +avth5partFileFormat::GetVar(int timestate, int domain, const char *varname) +{ + // + // If you have a file format where variables don't apply (for example a + // strictly polygonal format like the STL (Stereo Lithography) format, + // then uncomment the code below. + // + // EXCEPTION1(InvalidVariableException, varname); + // + + // + // If you do have a scalar variable, here is some code that may be helpful. + // + // int ntuples = XXX; // this is the number of entries in the variable. + // vtkFloatArray *rv = vtkFloatArray::New(); + // rv->SetNumberOfTuples(ntuples); + // for (int i = 0 ; i < ntuples ; i++) + // { + // rv->SetTuple1(i, VAL); // you must determine value for ith entry. + // } + // + // return rv; + // + + H5PartFile *file; + + file = H5PartOpenFile(fname.c_str(),H5PART_READ); + + if (!file) + EXCEPTION1(InvalidFilesException, fname.c_str()); + + h5part_int64_t status; + h5part_int64_t tnpoints, npoints; + int npointvars; + int nspace = 3; + int nprocs = 1; +#ifdef PARALLEL_IO + nprocs = PAR_Size(); +#endif + + H5PartSetStep(file,timestate); + //points + tnpoints= H5PartGetNumParticles(file); + //point vars + + char name[64]; + h5part_int64_t *idvar; + double *data; + h5part_int64_t idStart = ((h5part_int64_t)(tnpoints/nprocs))*domain; + h5part_int64_t idEnd; + if (domain < nprocs-1) + idEnd = ((h5part_int64_t)(tnpoints/nprocs))*(domain+1); + else if (domain == nprocs - 1) + idEnd = (h5part_int64_t)tnpoints; + + H5PartSetView(file,idStart,idEnd); + npoints= H5PartGetNumParticles(file); + cout << "GetVar: npoints for domain " << domain << ": " << npoints << "\n"; + + for (size_t j=0; j < (size_t)(pointvarnames.size()); j++){ + status = H5PartGetDatasetName(file,j, name,64); + if (pointvarnames[j] == name) { + if (strstr(name, "id") != NULL){ + idvar = (h5part_int64_t *) malloc(sizeof(h5part_int64_t)*npoints); + status = H5PartReadDataInt64(file, name, idvar); + if (status != H5PART_SUCCESS) + EXCEPTION1(VisItException, "Could not read dataset"); + pointvars[j].resize(npoints); + for (size_t i=0; i < (size_t) npoints; i++){ + pointvars[j][i] = (float) idvar[i]; + } + if (idvar != NULL) + free(idvar); + } else { + data = (h5part_float64_t *) malloc(sizeof(h5part_float64_t)*npoints); + status = H5PartReadDataFloat64(file, name, data); + if (status != H5PART_SUCCESS) + EXCEPTION1(VisItException, "Could not read dataset"); + pointvars[j].resize(npoints); + for (size_t i=0; i < (size_t)(npoints); i++){ + pointvars[j][i] = (float) data[i]; + } + if (data != NULL) + free(data); + } + } + } + H5PartSetView(file,-1, -1); + + for (int i=0; i < pointvarnames.size(); i++){ + if (pointvarnames[i] == string(varname)){ + vtkFloatArray *scalars = vtkFloatArray::New(); + scalars->SetNumberOfTuples(npoints); + float *ptr = (float*) scalars->GetVoidPointer(0); + memcpy(ptr, &pointvars[i][0], sizeof(float)*npoints); + return scalars; + } + } + H5PartCloseFile(file); + EXCEPTION1(InvalidVariableException, varname); + + +} + + +// **************************************************************************** +// Method: avth5partFileFormat::GetVectorVar +// +// Purpose: +// Gets a vector variable associated with this file. Although VTK has +// support for many different types, the best bet is vtkFloatArray, since +// that is supported everywhere through VisIt. +// +// Arguments: +// timestate The index of the timestate. If GetNTimesteps returned +// 'N' time steps, this is guaranteed to be between 0 and N-1. +// domain The index of the domain. If there are NDomains, this +// value is guaranteed to be between 0 and NDomains-1, +// regardless of block origin. +// varname The name of the variable requested. +// +// Programmer: cristina -- generated by xml2avt +// Creation: Mon Feb 27 13:47:07 PST 2006 +// +// **************************************************************************** + +vtkDataArray * +avth5partFileFormat::GetVectorVar(int timestate, int domain,const char *varname) +{ + // + // If you have a file format where variables don't apply (for example a + // strictly polygonal format like the STL (Stereo Lithography) format, + // then uncomment the code below. + // + // EXCEPTION1(InvalidVariableException, varname); + // + + // + // If you do have a vector variable, here is some code that may be helpful. + // + // int ncomps = YYY; // This is the rank of the vector - typically 2 or 3. + // int ntuples = XXX; // this is the number of entries in the variable. + // vtkFloatArray *rv = vtkFloatArray::New(); + // int ucomps = (ncomps == 2 ? 3 : ncomps); + // rv->SetNumberOfComponents(ucomps); + // rv->SetNumberOfTuples(ntuples); + // float *one_entry = new float[ucomps]; + // for (int i = 0 ; i < ntuples ; i++) + // { + // int j; + // for (j = 0 ; j < ncomps ; j++) + // one_entry[j] = ... + // for (j = ncomps ; j < ucomps ; j++) + // one_entry[j] = 0.; + // rv->SetTuple(i, one_entry); + // } + // + // delete [] one_entry; + // return rv; + // + return NULL; +} diff --git a/trunk/visit_plugins/databases/H5Part/avth5partFileFormat.h b/trunk/visit_plugins/databases/H5Part/avth5partFileFormat.h new file mode 100644 index 0000000..c634018 --- /dev/null +++ b/trunk/visit_plugins/databases/H5Part/avth5partFileFormat.h @@ -0,0 +1,75 @@ +// ************************************************************************* // +// avth5partFileFormat.h // +// ************************************************************************* // + +#ifndef AVT_h5part_FILE_FORMAT_H +#define AVT_h5part_FILE_FORMAT_H + +#include +#include + +#include +#include + + + + +// **************************************************************************** +// Class: avth5partFileFormat +// +// Purpose: +// Reads in h5part files as a plugin to VisIt. +// +// Programmer: cristina -- generated by xml2avt +// Creation: Mon Feb 27 13:53:31 PST 2006 +// +// **************************************************************************** + +class avth5partFileFormat : public avtMTMDFileFormat +{ + public: + avth5partFileFormat(const char *); + virtual ~avth5partFileFormat() {;}; + + // + // This is used to return unconvention data -- ranging from material + // information to information about block connectivity. + // + // virtual void *GetAuxiliaryData(const char *var, const char *type, + // int timestep, int domain,void *args, + // DestructorFunction &); + // + + // + // If you know the times and cycle numbers, overload this function. + // Otherwise, VisIt will make up some reasonable ones for you. + // + // virtual void GetCycles(std::vector &); + // virtual void GetTimes(std::vector &); + // + + virtual int GetNTimesteps(void); + + virtual const char *GetType(void) { return "h5part"; }; + virtual void FreeUpResources(void); + + virtual vtkDataSet *GetMesh(int, int, const char *); + virtual vtkDataArray *GetVar(int, int, const char *); + virtual vtkDataArray *GetVectorVar(int, int, const char *); + + protected: + // DATA MEMBERS + + virtual void PopulateDatabaseMetaData(avtDatabaseMetaData *, int); + std::string fname; //filename + std::vector points; //point coordinates + std::vector > pointvars; //point variables + std::vector pointvarnames; //point variables' names + std::vector minExtents; //min extents + std::vector maxExtents; //max extents + + +}; + + +#endif diff --git a/trunk/visit_plugins/databases/H5Part/h5part.xml b/trunk/visit_plugins/databases/H5Part/h5part.xml new file mode 100644 index 0000000..93b3c67 --- /dev/null +++ b/trunk/visit_plugins/databases/H5Part/h5part.xml @@ -0,0 +1,14 @@ + + + + -I/usr/local/hdf5/include + + + -L/d/visusers/cristina/H5Part/H5ecloud/ -lH5Part + + + h5part + + + + diff --git a/trunk/visit_plugins/databases/H5Part/h5partCommonPluginInfo.C b/trunk/visit_plugins/databases/H5Part/h5partCommonPluginInfo.C new file mode 100644 index 0000000..0de21ac --- /dev/null +++ b/trunk/visit_plugins/databases/H5Part/h5partCommonPluginInfo.C @@ -0,0 +1,65 @@ +#include +#include +#include +#include + +// **************************************************************************** +// Method: h5partCommonPluginInfo::GetDatabaseType +// +// Purpose: +// Returns the type of a h5part database. +// +// Programmer: cristina -- generated by xml2info +// Creation: Mon Feb 27 13:53:31 PST 2006 +// +// **************************************************************************** +DatabaseType +h5partCommonPluginInfo::GetDatabaseType() +{ + return DB_TYPE_MTMD; +} + +// **************************************************************************** +// Method: h5partCommonPluginInfo::GetDefaultExtensions +// +// Purpose: +// Returns the default extensions for a h5part database. +// +// Programmer: cristina -- generated by xml2info +// Creation: Mon Feb 27 13:53:31 PST 2006 +// +// **************************************************************************** +std::vector +h5partCommonPluginInfo::GetDefaultExtensions() +{ + std::vector defaultExtensions; + defaultExtensions.push_back("h5part"); + + return defaultExtensions; +} + +// **************************************************************************** +// Method: h5partCommonPluginInfo::Setuh5partDatabase +// +// Purpose: +// Sets up a h5part database. +// +// Arguments: +// list A list of file names. +// nList The number of timesteps in list. +// nBlocks The number of blocks in the list. +// +// Returns: A h5part database from list. +// +// Programmer: cristina -- generated by xml2info +// Creation: Mon Feb 27 13:53:31 PST 2006 +// +// **************************************************************************** +avtDatabase * +h5partCommonPluginInfo::SetupDatabase(const char *const *list, + int nList, int nBlock) +{ + return new avtGenericDatabase( + new avtMTMDFileFormatInterface( + new avth5partFileFormat(list[0]))); +} diff --git a/trunk/visit_plugins/databases/H5Part/h5partEnginePluginInfo.C b/trunk/visit_plugins/databases/H5Part/h5partEnginePluginInfo.C new file mode 100644 index 0000000..b763b6a --- /dev/null +++ b/trunk/visit_plugins/databases/H5Part/h5partEnginePluginInfo.C @@ -0,0 +1,39 @@ +#include + +#if defined(__APPLE__) +#define GetEngineInfo h5part_GetEngineInfo +#endif + +// **************************************************************************** +// Function: GetEngineInfo +// +// Purpose: +// Return a new EnginePluginInfo for the h5part database. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 9 09:51:18 PDT 2006 +// +// **************************************************************************** +extern "C" EngineDatabasePluginInfo* GetEngineInfo() +{ + return new h5partEnginePluginInfo; +} + +// **************************************************************************** +// Method: h5partCommonPluginInfo::GetWriter +// +// Purpose: +// Sets up a h5part writer. +// +// Returns: A h5part writer. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 9 09:51:18 PDT 2006 +// +// **************************************************************************** +avtDatabaseWriter * +h5partEnginePluginInfo::GetWriter(void) +{ + return NULL; +} + diff --git a/trunk/visit_plugins/databases/H5Part/h5partMDServerPluginInfo.C b/trunk/visit_plugins/databases/H5Part/h5partMDServerPluginInfo.C new file mode 100644 index 0000000..0f886c3 --- /dev/null +++ b/trunk/visit_plugins/databases/H5Part/h5partMDServerPluginInfo.C @@ -0,0 +1,25 @@ +#include + +#if defined(__APPLE__) +#define GetMDServerInfo h5part_GetMDServerInfo +#endif + +// **************************************************************************** +// Function: GetMDServerInfo +// +// Purpose: +// Return a new MDServerPluginInfo for the h5part database. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 9 09:51:18 PDT 2006 +// +// **************************************************************************** +extern "C" MDServerDatabasePluginInfo* GetMDServerInfo() +{ + return new h5partMDServerPluginInfo; +} + +// this makes compilers happy... remove if we ever have functions here +void h5partMDServerPluginInfo::dummy() +{ +} diff --git a/trunk/visit_plugins/databases/H5Part/h5partPluginInfo.C b/trunk/visit_plugins/databases/H5Part/h5partPluginInfo.C new file mode 100644 index 0000000..0a09057 --- /dev/null +++ b/trunk/visit_plugins/databases/H5Part/h5partPluginInfo.C @@ -0,0 +1,124 @@ +// ************************************************************************* // +// File: h5partPluginInfo.C +// ************************************************************************* // + +#include + +#include +#if defined(__APPLE__) +extern "C" const char *h5partVisItPluginVersion = VERSION; +#else +extern "C" const char *VisItPluginVersion = VERSION; +#endif + +#if defined(__APPLE__) +#define GetGeneralInfo h5part_GetGeneralInfo +#endif + +// **************************************************************************** +// Function: GetGeneralInfo +// +// Purpose: +// Return a new GeneralPluginInfo for the h5part database. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 9 09:51:18 PDT 2006 +// +// **************************************************************************** +extern "C" GeneralDatabasePluginInfo* GetGeneralInfo() +{ + return new h5partGeneralPluginInfo; +} + +// **************************************************************************** +// Method: h5partGeneralPluginInfo::GetName +// +// Purpose: +// Return the name of the database plugin. +// +// Returns: A pointer to the name of the database plugin. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 9 09:51:18 PDT 2006 +// +// **************************************************************************** + +char * +h5partGeneralPluginInfo::GetName() const +{ + return "h5part"; +} + +// **************************************************************************** +// Method: h5partGeneralPluginInfo::GetVersion +// +// Purpose: +// Return the version of the database plugin. +// +// Returns: A pointer to the version of the database plugin. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 9 09:51:18 PDT 2006 +// +// **************************************************************************** + +char * +h5partGeneralPluginInfo::GetVersion() const +{ + return "1.0"; +} + +// **************************************************************************** +// Method: h5partGeneralPluginInfo::GetID +// +// Purpose: +// Return the id of the database plugin. +// +// Returns: A pointer to the id of the database plugin. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 9 09:51:18 PDT 2006 +// +// **************************************************************************** + +char * +h5partGeneralPluginInfo::GetID() const +{ + return "h5part_1.0"; +} +// **************************************************************************** +// Method: h5partGeneralPluginInfo::EnabledByDefault +// +// Purpose: +// Return true if this plugin should be enabled by default; false otherwise. +// +// Returns: true/false +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 9 09:51:18 PDT 2006 +// +// **************************************************************************** + +bool +h5partGeneralPluginInfo::EnabledByDefault() const +{ + return true; +} +// **************************************************************************** +// Method: h5partGeneralPluginInfo::HasWriter +// +// Purpose: +// Return true if this plugin has a database writer. +// +// Returns: true/false +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 9 09:51:18 PDT 2006 +// +// **************************************************************************** + +bool +h5partGeneralPluginInfo::HasWriter() const +{ + return false; +} diff --git a/trunk/visit_plugins/databases/H5Part/h5partPluginInfo.h b/trunk/visit_plugins/databases/H5Part/h5partPluginInfo.h new file mode 100644 index 0000000..b675f45 --- /dev/null +++ b/trunk/visit_plugins/databases/H5Part/h5partPluginInfo.h @@ -0,0 +1,60 @@ +// **************************************************************************** +// h5partPluginInfo.h +// **************************************************************************** + +#ifndef H5PART_PLUGIN_INFO_H +#define H5PART_PLUGIN_INFO_H +#include +#include + +class avtDatabase; +class avtDatabaseWriter; + +// **************************************************************************** +// Class: h5partDatabasePluginInfo +// +// Purpose: +// Classes that provide all the information about the h5part plugin. +// Portions are separated into pieces relevant to the appropriate +// components of VisIt. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 9 09:51:18 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +class h5partGeneralPluginInfo : public virtual GeneralDatabasePluginInfo +{ + public: + virtual char *GetName() const; + virtual char *GetVersion() const; + virtual char *GetID() const; + virtual bool EnabledByDefault() const; + virtual bool HasWriter() const; +}; + +class h5partCommonPluginInfo : public virtual CommonDatabasePluginInfo, public virtual h5partGeneralPluginInfo +{ + public: + virtual DatabaseType GetDatabaseType(); + virtual std::vector GetDefaultExtensions(); + virtual avtDatabase *SetupDatabase(const char * const *list, + int nList, int nBlock); +}; + +class h5partMDServerPluginInfo : public virtual MDServerDatabasePluginInfo, public virtual h5partCommonPluginInfo +{ + public: + // this makes compilers happy... remove if we ever have functions here + virtual void dummy(); +}; + +class h5partEnginePluginInfo : public virtual EngineDatabasePluginInfo, public virtual h5partCommonPluginInfo +{ + public: + virtual avtDatabaseWriter *GetWriter(void); +}; + +#endif diff --git a/trunk/visit_plugins/operators/BinnerFilter/.depend b/trunk/visit_plugins/operators/BinnerFilter/.depend new file mode 100644 index 0000000..2dfc939 --- /dev/null +++ b/trunk/visit_plugins/operators/BinnerFilter/.depend @@ -0,0 +1,1505 @@ +BinnerPluginInfo.o: BinnerPluginInfo.C BinnerPluginInfo.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/OperatorPluginInfo.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/plugin_exports.h \ + /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ + /usr/include/gnu/stubs.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stddef.h \ + /usr/include/bits/types.h /usr/include/bits/wordsize.h \ + /usr/include/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \ + /usr/include/gconv.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stdarg.h \ + /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/operator_plugin_exports.h \ + BinnerFilter.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/AttributeSubject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/state_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/AttributeGroup.h \ + /usr/include/c++/4.0.2/vector /usr/include/c++/4.0.2/bits/functexcept.h \ + /usr/include/c++/4.0.2/exception_defines.h \ + /usr/include/c++/4.0.2/bits/stl_algobase.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++config.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/os_defines.h \ + /usr/include/c++/4.0.2/cstring /usr/include/c++/4.0.2/cstddef \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/c++/4.0.2/climits \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/limits.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/c++/4.0.2/cstdlib /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \ + /usr/include/bits/select.h /usr/include/bits/sigset.h \ + /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ + /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ + /usr/include/alloca.h /usr/include/c++/4.0.2/iosfwd \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++locale.h \ + /usr/include/c++/4.0.2/cstdio /usr/include/c++/4.0.2/clocale \ + /usr/include/locale.h /usr/include/bits/locale.h \ + /usr/include/langinfo.h /usr/include/nl_types.h /usr/include/iconv.h \ + /usr/include/libintl.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++io.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/signal.h \ + /usr/include/bits/initspin.h /usr/include/bits/sigthread.h \ + /usr/include/unistd.h /usr/include/bits/posix_opt.h \ + /usr/include/bits/environments.h /usr/include/bits/confname.h \ + /usr/include/getopt.h /usr/include/c++/4.0.2/cctype \ + /usr/include/ctype.h /usr/include/c++/4.0.2/bits/stringfwd.h \ + /usr/include/c++/4.0.2/bits/postypes.h /usr/include/c++/4.0.2/cwchar \ + /usr/include/c++/4.0.2/ctime /usr/include/stdint.h \ + /usr/include/c++/4.0.2/bits/stl_pair.h \ + /usr/include/c++/4.0.2/bits/cpp_type_traits.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.0.2/bits/concept_check.h \ + /usr/include/c++/4.0.2/bits/stl_iterator.h \ + /usr/include/c++/4.0.2/debug/debug.h /usr/include/c++/4.0.2/cassert \ + /usr/include/assert.h /usr/include/c++/4.0.2/bits/allocator.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++allocator.h \ + /usr/include/c++/4.0.2/ext/new_allocator.h /usr/include/c++/4.0.2/new \ + /usr/include/c++/4.0.2/exception \ + /usr/include/c++/4.0.2/bits/stl_construct.h \ + /usr/include/c++/4.0.2/bits/stl_uninitialized.h \ + /usr/include/c++/4.0.2/bits/stl_vector.h \ + /usr/include/c++/4.0.2/bits/stl_bvector.h \ + /usr/include/c++/4.0.2/bits/vector.tcc /usr/include/c++/4.0.2/string \ + /usr/include/c++/4.0.2/bits/char_traits.h /usr/include/c++/4.0.2/memory \ + /usr/include/c++/4.0.2/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.0.2/limits \ + /usr/include/c++/4.0.2/bits/stl_function.h \ + /usr/include/c++/4.0.2/bits/basic_string.h \ + /usr/include/c++/4.0.2/bits/atomicity.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/atomic_word.h \ + /usr/include/c++/4.0.2/algorithm /usr/include/c++/4.0.2/bits/stl_algo.h \ + /usr/include/c++/4.0.2/bits/stl_heap.h \ + /usr/include/c++/4.0.2/bits/stl_tempbuf.h \ + /usr/include/c++/4.0.2/bits/basic_string.tcc \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/visitstream.h \ + /usr/include/c++/4.0.2/iostream /usr/include/c++/4.0.2/ostream \ + /usr/include/c++/4.0.2/ios /usr/include/c++/4.0.2/bits/localefwd.h \ + /usr/include/c++/4.0.2/bits/ios_base.h \ + /usr/include/c++/4.0.2/bits/locale_classes.h \ + /usr/include/c++/4.0.2/streambuf \ + /usr/include/c++/4.0.2/bits/streambuf.tcc \ + /usr/include/c++/4.0.2/bits/basic_ios.h \ + /usr/include/c++/4.0.2/bits/streambuf_iterator.h \ + /usr/include/c++/4.0.2/bits/locale_facets.h \ + /usr/include/c++/4.0.2/cwctype /usr/include/wctype.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_base.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_inline.h \ + /usr/include/c++/4.0.2/bits/codecvt.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/time_members.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/messages_members.h \ + /usr/include/c++/4.0.2/bits/basic_ios.tcc \ + /usr/include/c++/4.0.2/bits/ostream.tcc /usr/include/c++/4.0.2/locale \ + /usr/include/c++/4.0.2/bits/locale_facets.tcc \ + /usr/include/c++/4.0.2/typeinfo /usr/include/c++/4.0.2/istream \ + /usr/include/c++/4.0.2/bits/istream.tcc /usr/include/c++/4.0.2/fstream \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/basic_file.h \ + /usr/include/c++/4.0.2/bits/fstream.tcc \ + /usr/include/c++/4.0.2/backward/strstream \ + /usr/include/c++/4.0.2/backward/backward_warning.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/VisItException.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/misc_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/vectortypes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/Subject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit-config.h +BinnerCommonPluginInfo.o: BinnerCommonPluginInfo.C BinnerPluginInfo.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/OperatorPluginInfo.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/plugin_exports.h \ + /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ + /usr/include/gnu/stubs.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stddef.h \ + /usr/include/bits/types.h /usr/include/bits/wordsize.h \ + /usr/include/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \ + /usr/include/gconv.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stdarg.h \ + /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/operator_plugin_exports.h \ + BinnerFilter.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/AttributeSubject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/state_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/AttributeGroup.h \ + /usr/include/c++/4.0.2/vector /usr/include/c++/4.0.2/bits/functexcept.h \ + /usr/include/c++/4.0.2/exception_defines.h \ + /usr/include/c++/4.0.2/bits/stl_algobase.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++config.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/os_defines.h \ + /usr/include/c++/4.0.2/cstring /usr/include/c++/4.0.2/cstddef \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/c++/4.0.2/climits \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/limits.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/c++/4.0.2/cstdlib /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \ + /usr/include/bits/select.h /usr/include/bits/sigset.h \ + /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ + /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ + /usr/include/alloca.h /usr/include/c++/4.0.2/iosfwd \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++locale.h \ + /usr/include/c++/4.0.2/cstdio /usr/include/c++/4.0.2/clocale \ + /usr/include/locale.h /usr/include/bits/locale.h \ + /usr/include/langinfo.h /usr/include/nl_types.h /usr/include/iconv.h \ + /usr/include/libintl.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++io.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/signal.h \ + /usr/include/bits/initspin.h /usr/include/bits/sigthread.h \ + /usr/include/unistd.h /usr/include/bits/posix_opt.h \ + /usr/include/bits/environments.h /usr/include/bits/confname.h \ + /usr/include/getopt.h /usr/include/c++/4.0.2/cctype \ + /usr/include/ctype.h /usr/include/c++/4.0.2/bits/stringfwd.h \ + /usr/include/c++/4.0.2/bits/postypes.h /usr/include/c++/4.0.2/cwchar \ + /usr/include/c++/4.0.2/ctime /usr/include/stdint.h \ + /usr/include/c++/4.0.2/bits/stl_pair.h \ + /usr/include/c++/4.0.2/bits/cpp_type_traits.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.0.2/bits/concept_check.h \ + /usr/include/c++/4.0.2/bits/stl_iterator.h \ + /usr/include/c++/4.0.2/debug/debug.h /usr/include/c++/4.0.2/cassert \ + /usr/include/assert.h /usr/include/c++/4.0.2/bits/allocator.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++allocator.h \ + /usr/include/c++/4.0.2/ext/new_allocator.h /usr/include/c++/4.0.2/new \ + /usr/include/c++/4.0.2/exception \ + /usr/include/c++/4.0.2/bits/stl_construct.h \ + /usr/include/c++/4.0.2/bits/stl_uninitialized.h \ + /usr/include/c++/4.0.2/bits/stl_vector.h \ + /usr/include/c++/4.0.2/bits/stl_bvector.h \ + /usr/include/c++/4.0.2/bits/vector.tcc /usr/include/c++/4.0.2/string \ + /usr/include/c++/4.0.2/bits/char_traits.h /usr/include/c++/4.0.2/memory \ + /usr/include/c++/4.0.2/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.0.2/limits \ + /usr/include/c++/4.0.2/bits/stl_function.h \ + /usr/include/c++/4.0.2/bits/basic_string.h \ + /usr/include/c++/4.0.2/bits/atomicity.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/atomic_word.h \ + /usr/include/c++/4.0.2/algorithm /usr/include/c++/4.0.2/bits/stl_algo.h \ + /usr/include/c++/4.0.2/bits/stl_heap.h \ + /usr/include/c++/4.0.2/bits/stl_tempbuf.h \ + /usr/include/c++/4.0.2/bits/basic_string.tcc \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/visitstream.h \ + /usr/include/c++/4.0.2/iostream /usr/include/c++/4.0.2/ostream \ + /usr/include/c++/4.0.2/ios /usr/include/c++/4.0.2/bits/localefwd.h \ + /usr/include/c++/4.0.2/bits/ios_base.h \ + /usr/include/c++/4.0.2/bits/locale_classes.h \ + /usr/include/c++/4.0.2/streambuf \ + /usr/include/c++/4.0.2/bits/streambuf.tcc \ + /usr/include/c++/4.0.2/bits/basic_ios.h \ + /usr/include/c++/4.0.2/bits/streambuf_iterator.h \ + /usr/include/c++/4.0.2/bits/locale_facets.h \ + /usr/include/c++/4.0.2/cwctype /usr/include/wctype.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_base.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_inline.h \ + /usr/include/c++/4.0.2/bits/codecvt.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/time_members.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/messages_members.h \ + /usr/include/c++/4.0.2/bits/basic_ios.tcc \ + /usr/include/c++/4.0.2/bits/ostream.tcc /usr/include/c++/4.0.2/locale \ + /usr/include/c++/4.0.2/bits/locale_facets.tcc \ + /usr/include/c++/4.0.2/typeinfo /usr/include/c++/4.0.2/istream \ + /usr/include/c++/4.0.2/bits/istream.tcc /usr/include/c++/4.0.2/fstream \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/basic_file.h \ + /usr/include/c++/4.0.2/bits/fstream.tcc \ + /usr/include/c++/4.0.2/backward/strstream \ + /usr/include/c++/4.0.2/backward/backward_warning.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/VisItException.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/misc_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/vectortypes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/Subject.h +BinnerFilter.o: BinnerFilter.C BinnerFilter.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/AttributeSubject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/state_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/AttributeGroup.h \ + /usr/include/c++/4.0.2/vector /usr/include/c++/4.0.2/bits/functexcept.h \ + /usr/include/c++/4.0.2/exception_defines.h \ + /usr/include/c++/4.0.2/bits/stl_algobase.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++config.h \ + /usr/include/bits/wordsize.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/os_defines.h \ + /usr/include/features.h /usr/include/sys/cdefs.h \ + /usr/include/gnu/stubs.h /usr/include/c++/4.0.2/cstring \ + /usr/include/c++/4.0.2/cstddef \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stddef.h \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/c++/4.0.2/climits \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/limits.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h /usr/include/c++/4.0.2/cstdlib \ + /usr/include/stdlib.h /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h \ + /usr/include/bits/select.h /usr/include/bits/sigset.h \ + /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ + /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ + /usr/include/alloca.h /usr/include/c++/4.0.2/iosfwd \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++locale.h \ + /usr/include/c++/4.0.2/cstdio /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \ + /usr/include/gconv.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stdarg.h \ + /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ + /usr/include/c++/4.0.2/clocale /usr/include/locale.h \ + /usr/include/bits/locale.h /usr/include/langinfo.h \ + /usr/include/nl_types.h /usr/include/iconv.h /usr/include/libintl.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++io.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/signal.h \ + /usr/include/bits/initspin.h /usr/include/bits/sigthread.h \ + /usr/include/unistd.h /usr/include/bits/posix_opt.h \ + /usr/include/bits/environments.h /usr/include/bits/confname.h \ + /usr/include/getopt.h /usr/include/c++/4.0.2/cctype \ + /usr/include/ctype.h /usr/include/c++/4.0.2/bits/stringfwd.h \ + /usr/include/c++/4.0.2/bits/postypes.h /usr/include/c++/4.0.2/cwchar \ + /usr/include/c++/4.0.2/ctime /usr/include/stdint.h \ + /usr/include/c++/4.0.2/bits/stl_pair.h \ + /usr/include/c++/4.0.2/bits/cpp_type_traits.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.0.2/bits/concept_check.h \ + /usr/include/c++/4.0.2/bits/stl_iterator.h \ + /usr/include/c++/4.0.2/debug/debug.h /usr/include/c++/4.0.2/cassert \ + /usr/include/assert.h /usr/include/c++/4.0.2/bits/allocator.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++allocator.h \ + /usr/include/c++/4.0.2/ext/new_allocator.h /usr/include/c++/4.0.2/new \ + /usr/include/c++/4.0.2/exception \ + /usr/include/c++/4.0.2/bits/stl_construct.h \ + /usr/include/c++/4.0.2/bits/stl_uninitialized.h \ + /usr/include/c++/4.0.2/bits/stl_vector.h \ + /usr/include/c++/4.0.2/bits/stl_bvector.h \ + /usr/include/c++/4.0.2/bits/vector.tcc /usr/include/c++/4.0.2/string \ + /usr/include/c++/4.0.2/bits/char_traits.h /usr/include/c++/4.0.2/memory \ + /usr/include/c++/4.0.2/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.0.2/limits \ + /usr/include/c++/4.0.2/bits/stl_function.h \ + /usr/include/c++/4.0.2/bits/basic_string.h \ + /usr/include/c++/4.0.2/bits/atomicity.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/atomic_word.h \ + /usr/include/c++/4.0.2/algorithm /usr/include/c++/4.0.2/bits/stl_algo.h \ + /usr/include/c++/4.0.2/bits/stl_heap.h \ + /usr/include/c++/4.0.2/bits/stl_tempbuf.h \ + /usr/include/c++/4.0.2/bits/basic_string.tcc \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/visitstream.h \ + /usr/include/c++/4.0.2/iostream /usr/include/c++/4.0.2/ostream \ + /usr/include/c++/4.0.2/ios /usr/include/c++/4.0.2/bits/localefwd.h \ + /usr/include/c++/4.0.2/bits/ios_base.h \ + /usr/include/c++/4.0.2/bits/locale_classes.h \ + /usr/include/c++/4.0.2/streambuf \ + /usr/include/c++/4.0.2/bits/streambuf.tcc \ + /usr/include/c++/4.0.2/bits/basic_ios.h \ + /usr/include/c++/4.0.2/bits/streambuf_iterator.h \ + /usr/include/c++/4.0.2/bits/locale_facets.h \ + /usr/include/c++/4.0.2/cwctype /usr/include/wctype.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_base.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_inline.h \ + /usr/include/c++/4.0.2/bits/codecvt.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/time_members.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/messages_members.h \ + /usr/include/c++/4.0.2/bits/basic_ios.tcc \ + /usr/include/c++/4.0.2/bits/ostream.tcc /usr/include/c++/4.0.2/locale \ + /usr/include/c++/4.0.2/bits/locale_facets.tcc \ + /usr/include/c++/4.0.2/typeinfo /usr/include/c++/4.0.2/istream \ + /usr/include/c++/4.0.2/bits/istream.tcc /usr/include/c++/4.0.2/fstream \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/basic_file.h \ + /usr/include/c++/4.0.2/bits/fstream.tcc \ + /usr/include/c++/4.0.2/backward/strstream \ + /usr/include/c++/4.0.2/backward/backward_warning.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/VisItException.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/misc_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/vectortypes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/Subject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/DataNode.h +BinnerGUIPluginInfo.o: BinnerGUIPluginInfo.C BinnerPluginInfo.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/OperatorPluginInfo.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/plugin_exports.h \ + /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ + /usr/include/gnu/stubs.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stddef.h \ + /usr/include/bits/types.h /usr/include/bits/wordsize.h \ + /usr/include/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \ + /usr/include/gconv.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stdarg.h \ + /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/operator_plugin_exports.h \ + BinnerFilter.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/AttributeSubject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/state_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/AttributeGroup.h \ + /usr/include/c++/4.0.2/vector /usr/include/c++/4.0.2/bits/functexcept.h \ + /usr/include/c++/4.0.2/exception_defines.h \ + /usr/include/c++/4.0.2/bits/stl_algobase.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++config.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/os_defines.h \ + /usr/include/c++/4.0.2/cstring /usr/include/c++/4.0.2/cstddef \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/c++/4.0.2/climits \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/limits.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/c++/4.0.2/cstdlib /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \ + /usr/include/bits/select.h /usr/include/bits/sigset.h \ + /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ + /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ + /usr/include/alloca.h /usr/include/c++/4.0.2/iosfwd \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++locale.h \ + /usr/include/c++/4.0.2/cstdio /usr/include/c++/4.0.2/clocale \ + /usr/include/locale.h /usr/include/bits/locale.h \ + /usr/include/langinfo.h /usr/include/nl_types.h /usr/include/iconv.h \ + /usr/include/libintl.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++io.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/signal.h \ + /usr/include/bits/initspin.h /usr/include/bits/sigthread.h \ + /usr/include/unistd.h /usr/include/bits/posix_opt.h \ + /usr/include/bits/environments.h /usr/include/bits/confname.h \ + /usr/include/getopt.h /usr/include/c++/4.0.2/cctype \ + /usr/include/ctype.h /usr/include/c++/4.0.2/bits/stringfwd.h \ + /usr/include/c++/4.0.2/bits/postypes.h /usr/include/c++/4.0.2/cwchar \ + /usr/include/c++/4.0.2/ctime /usr/include/stdint.h \ + /usr/include/c++/4.0.2/bits/stl_pair.h \ + /usr/include/c++/4.0.2/bits/cpp_type_traits.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.0.2/bits/concept_check.h \ + /usr/include/c++/4.0.2/bits/stl_iterator.h \ + /usr/include/c++/4.0.2/debug/debug.h /usr/include/c++/4.0.2/cassert \ + /usr/include/assert.h /usr/include/c++/4.0.2/bits/allocator.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++allocator.h \ + /usr/include/c++/4.0.2/ext/new_allocator.h /usr/include/c++/4.0.2/new \ + /usr/include/c++/4.0.2/exception \ + /usr/include/c++/4.0.2/bits/stl_construct.h \ + /usr/include/c++/4.0.2/bits/stl_uninitialized.h \ + /usr/include/c++/4.0.2/bits/stl_vector.h \ + /usr/include/c++/4.0.2/bits/stl_bvector.h \ + /usr/include/c++/4.0.2/bits/vector.tcc /usr/include/c++/4.0.2/string \ + /usr/include/c++/4.0.2/bits/char_traits.h /usr/include/c++/4.0.2/memory \ + /usr/include/c++/4.0.2/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.0.2/limits \ + /usr/include/c++/4.0.2/bits/stl_function.h \ + /usr/include/c++/4.0.2/bits/basic_string.h \ + /usr/include/c++/4.0.2/bits/atomicity.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/atomic_word.h \ + /usr/include/c++/4.0.2/algorithm /usr/include/c++/4.0.2/bits/stl_algo.h \ + /usr/include/c++/4.0.2/bits/stl_heap.h \ + /usr/include/c++/4.0.2/bits/stl_tempbuf.h \ + /usr/include/c++/4.0.2/bits/basic_string.tcc \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/visitstream.h \ + /usr/include/c++/4.0.2/iostream /usr/include/c++/4.0.2/ostream \ + /usr/include/c++/4.0.2/ios /usr/include/c++/4.0.2/bits/localefwd.h \ + /usr/include/c++/4.0.2/bits/ios_base.h \ + /usr/include/c++/4.0.2/bits/locale_classes.h \ + /usr/include/c++/4.0.2/streambuf \ + /usr/include/c++/4.0.2/bits/streambuf.tcc \ + /usr/include/c++/4.0.2/bits/basic_ios.h \ + /usr/include/c++/4.0.2/bits/streambuf_iterator.h \ + /usr/include/c++/4.0.2/bits/locale_facets.h \ + /usr/include/c++/4.0.2/cwctype /usr/include/wctype.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_base.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_inline.h \ + /usr/include/c++/4.0.2/bits/codecvt.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/time_members.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/messages_members.h \ + /usr/include/c++/4.0.2/bits/basic_ios.tcc \ + /usr/include/c++/4.0.2/bits/ostream.tcc /usr/include/c++/4.0.2/locale \ + /usr/include/c++/4.0.2/bits/locale_facets.tcc \ + /usr/include/c++/4.0.2/typeinfo /usr/include/c++/4.0.2/istream \ + /usr/include/c++/4.0.2/bits/istream.tcc /usr/include/c++/4.0.2/fstream \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/basic_file.h \ + /usr/include/c++/4.0.2/bits/fstream.tcc \ + /usr/include/c++/4.0.2/backward/strstream \ + /usr/include/c++/4.0.2/backward/backward_warning.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/VisItException.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/misc_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/vectortypes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/Subject.h \ + QvisBinnerWindow.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/QvisOperatorWindow.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/gui_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/QvisPostableWindowObserver.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/QvisPostableWindowSimpleObserver.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/QvisPostableWindow.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qstring.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qcstring.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qmemarray.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qgarray.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qshared.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qglobal.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qconfig.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qmodules.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qfeatures.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qwinexport.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/QvisWindowBase.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qmainwindow.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qwidget.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qwindowdefs.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qobjectdefs.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qstring.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qnamespace.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qevent.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qregion.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qrect.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qsize.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qpoint.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qmime.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qmap.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qdatastream.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qiodevice.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qpair.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qvaluelist.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qtl.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qtextstream.h \ + /usr/include/c++/4.0.2/iterator \ + /usr/include/c++/4.0.2/bits/stream_iterator.h \ + /usr/include/c++/4.0.2/list /usr/include/c++/4.0.2/bits/stl_list.h \ + /usr/include/c++/4.0.2/bits/list.tcc /usr/include/c++/4.0.2/map \ + /usr/include/c++/4.0.2/bits/stl_tree.h \ + /usr/include/c++/4.0.2/bits/stl_map.h \ + /usr/include/c++/4.0.2/bits/stl_multimap.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qpaintdevice.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qpalette.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qcolor.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qstringlist.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qstrlist.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qptrlist.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qglist.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qptrcollection.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qbrush.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qfont.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qfontmetrics.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qfontinfo.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qsizepolicy.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qtoolbar.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qdockwindow.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qframe.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/GUIBase.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/SimpleObserver.h \ + icon.xpm +QvisBinnerWindow.o: QvisBinnerWindow.C QvisBinnerWindow.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/QvisOperatorWindow.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/gui_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/QvisPostableWindowObserver.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/QvisPostableWindowSimpleObserver.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/QvisPostableWindow.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qstring.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qcstring.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qmemarray.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qgarray.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qshared.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qglobal.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qconfig.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qmodules.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qfeatures.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qwinexport.h \ + /usr/include/string.h /usr/include/features.h /usr/include/sys/cdefs.h \ + /usr/include/gnu/stubs.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stddef.h \ + /usr/include/xlocale.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/limits.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h /usr/include/c++/4.0.2/string \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++config.h \ + /usr/include/bits/wordsize.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/os_defines.h \ + /usr/include/c++/4.0.2/bits/stringfwd.h \ + /usr/include/c++/4.0.2/bits/char_traits.h \ + /usr/include/c++/4.0.2/cstring /usr/include/c++/4.0.2/cstddef \ + /usr/include/c++/4.0.2/bits/stl_algobase.h \ + /usr/include/c++/4.0.2/climits /usr/include/c++/4.0.2/cstdlib \ + /usr/include/stdlib.h /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h \ + /usr/include/bits/select.h /usr/include/bits/sigset.h \ + /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ + /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ + /usr/include/alloca.h /usr/include/c++/4.0.2/iosfwd \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++locale.h \ + /usr/include/c++/4.0.2/cstdio /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \ + /usr/include/gconv.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stdarg.h \ + /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ + /usr/include/c++/4.0.2/clocale /usr/include/locale.h \ + /usr/include/bits/locale.h /usr/include/langinfo.h \ + /usr/include/nl_types.h /usr/include/iconv.h /usr/include/libintl.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++io.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/signal.h \ + /usr/include/bits/initspin.h /usr/include/bits/sigthread.h \ + /usr/include/unistd.h /usr/include/bits/posix_opt.h \ + /usr/include/bits/environments.h /usr/include/bits/confname.h \ + /usr/include/getopt.h /usr/include/c++/4.0.2/cctype \ + /usr/include/ctype.h /usr/include/c++/4.0.2/bits/postypes.h \ + /usr/include/c++/4.0.2/cwchar /usr/include/c++/4.0.2/ctime \ + /usr/include/stdint.h /usr/include/c++/4.0.2/bits/functexcept.h \ + /usr/include/c++/4.0.2/exception_defines.h \ + /usr/include/c++/4.0.2/bits/stl_pair.h \ + /usr/include/c++/4.0.2/bits/cpp_type_traits.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.0.2/bits/concept_check.h \ + /usr/include/c++/4.0.2/bits/stl_iterator.h \ + /usr/include/c++/4.0.2/debug/debug.h /usr/include/c++/4.0.2/cassert \ + /usr/include/assert.h /usr/include/c++/4.0.2/memory \ + /usr/include/c++/4.0.2/bits/allocator.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++allocator.h \ + /usr/include/c++/4.0.2/ext/new_allocator.h /usr/include/c++/4.0.2/new \ + /usr/include/c++/4.0.2/exception \ + /usr/include/c++/4.0.2/bits/stl_construct.h \ + /usr/include/c++/4.0.2/bits/stl_uninitialized.h \ + /usr/include/c++/4.0.2/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.0.2/limits \ + /usr/include/c++/4.0.2/bits/stl_function.h \ + /usr/include/c++/4.0.2/bits/basic_string.h \ + /usr/include/c++/4.0.2/bits/atomicity.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/atomic_word.h \ + /usr/include/c++/4.0.2/algorithm /usr/include/c++/4.0.2/bits/stl_algo.h \ + /usr/include/c++/4.0.2/bits/stl_heap.h \ + /usr/include/c++/4.0.2/bits/stl_tempbuf.h \ + /usr/include/c++/4.0.2/bits/basic_string.tcc \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/QvisWindowBase.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qmainwindow.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qwidget.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qwindowdefs.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qobjectdefs.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qstring.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qnamespace.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qevent.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qregion.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qrect.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qsize.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qpoint.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qmime.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qmap.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qdatastream.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qiodevice.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qpair.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qvaluelist.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qtl.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qtextstream.h \ + /usr/include/c++/4.0.2/iterator /usr/include/c++/4.0.2/ostream \ + /usr/include/c++/4.0.2/ios /usr/include/c++/4.0.2/bits/localefwd.h \ + /usr/include/c++/4.0.2/bits/ios_base.h \ + /usr/include/c++/4.0.2/bits/locale_classes.h \ + /usr/include/c++/4.0.2/streambuf \ + /usr/include/c++/4.0.2/bits/streambuf.tcc \ + /usr/include/c++/4.0.2/bits/basic_ios.h \ + /usr/include/c++/4.0.2/bits/streambuf_iterator.h \ + /usr/include/c++/4.0.2/bits/locale_facets.h \ + /usr/include/c++/4.0.2/cwctype /usr/include/wctype.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_base.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_inline.h \ + /usr/include/c++/4.0.2/bits/codecvt.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/time_members.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/messages_members.h \ + /usr/include/c++/4.0.2/bits/basic_ios.tcc \ + /usr/include/c++/4.0.2/bits/ostream.tcc /usr/include/c++/4.0.2/locale \ + /usr/include/c++/4.0.2/bits/locale_facets.tcc \ + /usr/include/c++/4.0.2/typeinfo /usr/include/c++/4.0.2/istream \ + /usr/include/c++/4.0.2/bits/istream.tcc \ + /usr/include/c++/4.0.2/bits/stream_iterator.h \ + /usr/include/c++/4.0.2/list /usr/include/c++/4.0.2/bits/stl_list.h \ + /usr/include/c++/4.0.2/bits/list.tcc /usr/include/c++/4.0.2/map \ + /usr/include/c++/4.0.2/bits/stl_tree.h \ + /usr/include/c++/4.0.2/bits/stl_map.h \ + /usr/include/c++/4.0.2/bits/stl_multimap.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qpaintdevice.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qpalette.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qcolor.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qstringlist.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qstrlist.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qptrlist.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qglist.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qptrcollection.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qbrush.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qfont.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qfontmetrics.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qfontinfo.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qsizepolicy.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qtoolbar.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qdockwindow.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qframe.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/GUIBase.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/vectortypes.h \ + /usr/include/c++/4.0.2/vector /usr/include/c++/4.0.2/bits/stl_vector.h \ + /usr/include/c++/4.0.2/bits/stl_bvector.h \ + /usr/include/c++/4.0.2/bits/vector.tcc \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/SimpleObserver.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/state_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/AttributeSubject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/AttributeGroup.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/visitstream.h \ + /usr/include/c++/4.0.2/iostream /usr/include/c++/4.0.2/fstream \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/basic_file.h \ + /usr/include/c++/4.0.2/bits/fstream.tcc \ + /usr/include/c++/4.0.2/backward/strstream \ + /usr/include/c++/4.0.2/backward/backward_warning.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/VisItException.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/misc_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/Subject.h \ + BinnerFilter.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/ViewerProxy.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/viewerproxy_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtSILRestriction.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/dbatts_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/ref_ptr.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtSIL.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtSILCollection.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtSILMatrix.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtTypes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtSILSet.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qcheckbox.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qbutton.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qkeysequence.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qlabel.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qlayout.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qlineedit.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qspinbox.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qrangecontrol.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qvbox.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qhbox.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qbuttongroup.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qgroupbox.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qradiobutton.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/QvisColorTableButton.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qpushbutton.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qiconset.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qpixmap.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/QvisOpacitySlider.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qwidget.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qrangecontrol.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/QvisColorButton.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qcolor.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qbutton.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/QvisLineStyleWidget.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qwidget.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/QvisLineWidthWidget.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/QvisVariableButton.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/qt/qobjectlist.h +BinnerViewerPluginInfo.o: BinnerViewerPluginInfo.C BinnerPluginInfo.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/OperatorPluginInfo.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/plugin_exports.h \ + /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ + /usr/include/gnu/stubs.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stddef.h \ + /usr/include/bits/types.h /usr/include/bits/wordsize.h \ + /usr/include/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \ + /usr/include/gconv.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stdarg.h \ + /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/operator_plugin_exports.h \ + BinnerFilter.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/AttributeSubject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/state_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/AttributeGroup.h \ + /usr/include/c++/4.0.2/vector /usr/include/c++/4.0.2/bits/functexcept.h \ + /usr/include/c++/4.0.2/exception_defines.h \ + /usr/include/c++/4.0.2/bits/stl_algobase.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++config.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/os_defines.h \ + /usr/include/c++/4.0.2/cstring /usr/include/c++/4.0.2/cstddef \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/c++/4.0.2/climits \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/limits.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/c++/4.0.2/cstdlib /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \ + /usr/include/bits/select.h /usr/include/bits/sigset.h \ + /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ + /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ + /usr/include/alloca.h /usr/include/c++/4.0.2/iosfwd \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++locale.h \ + /usr/include/c++/4.0.2/cstdio /usr/include/c++/4.0.2/clocale \ + /usr/include/locale.h /usr/include/bits/locale.h \ + /usr/include/langinfo.h /usr/include/nl_types.h /usr/include/iconv.h \ + /usr/include/libintl.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++io.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/signal.h \ + /usr/include/bits/initspin.h /usr/include/bits/sigthread.h \ + /usr/include/unistd.h /usr/include/bits/posix_opt.h \ + /usr/include/bits/environments.h /usr/include/bits/confname.h \ + /usr/include/getopt.h /usr/include/c++/4.0.2/cctype \ + /usr/include/ctype.h /usr/include/c++/4.0.2/bits/stringfwd.h \ + /usr/include/c++/4.0.2/bits/postypes.h /usr/include/c++/4.0.2/cwchar \ + /usr/include/c++/4.0.2/ctime /usr/include/stdint.h \ + /usr/include/c++/4.0.2/bits/stl_pair.h \ + /usr/include/c++/4.0.2/bits/cpp_type_traits.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.0.2/bits/concept_check.h \ + /usr/include/c++/4.0.2/bits/stl_iterator.h \ + /usr/include/c++/4.0.2/debug/debug.h /usr/include/c++/4.0.2/cassert \ + /usr/include/assert.h /usr/include/c++/4.0.2/bits/allocator.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++allocator.h \ + /usr/include/c++/4.0.2/ext/new_allocator.h /usr/include/c++/4.0.2/new \ + /usr/include/c++/4.0.2/exception \ + /usr/include/c++/4.0.2/bits/stl_construct.h \ + /usr/include/c++/4.0.2/bits/stl_uninitialized.h \ + /usr/include/c++/4.0.2/bits/stl_vector.h \ + /usr/include/c++/4.0.2/bits/stl_bvector.h \ + /usr/include/c++/4.0.2/bits/vector.tcc /usr/include/c++/4.0.2/string \ + /usr/include/c++/4.0.2/bits/char_traits.h /usr/include/c++/4.0.2/memory \ + /usr/include/c++/4.0.2/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.0.2/limits \ + /usr/include/c++/4.0.2/bits/stl_function.h \ + /usr/include/c++/4.0.2/bits/basic_string.h \ + /usr/include/c++/4.0.2/bits/atomicity.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/atomic_word.h \ + /usr/include/c++/4.0.2/algorithm /usr/include/c++/4.0.2/bits/stl_algo.h \ + /usr/include/c++/4.0.2/bits/stl_heap.h \ + /usr/include/c++/4.0.2/bits/stl_tempbuf.h \ + /usr/include/c++/4.0.2/bits/basic_string.tcc \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/visitstream.h \ + /usr/include/c++/4.0.2/iostream /usr/include/c++/4.0.2/ostream \ + /usr/include/c++/4.0.2/ios /usr/include/c++/4.0.2/bits/localefwd.h \ + /usr/include/c++/4.0.2/bits/ios_base.h \ + /usr/include/c++/4.0.2/bits/locale_classes.h \ + /usr/include/c++/4.0.2/streambuf \ + /usr/include/c++/4.0.2/bits/streambuf.tcc \ + /usr/include/c++/4.0.2/bits/basic_ios.h \ + /usr/include/c++/4.0.2/bits/streambuf_iterator.h \ + /usr/include/c++/4.0.2/bits/locale_facets.h \ + /usr/include/c++/4.0.2/cwctype /usr/include/wctype.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_base.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_inline.h \ + /usr/include/c++/4.0.2/bits/codecvt.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/time_members.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/messages_members.h \ + /usr/include/c++/4.0.2/bits/basic_ios.tcc \ + /usr/include/c++/4.0.2/bits/ostream.tcc /usr/include/c++/4.0.2/locale \ + /usr/include/c++/4.0.2/bits/locale_facets.tcc \ + /usr/include/c++/4.0.2/typeinfo /usr/include/c++/4.0.2/istream \ + /usr/include/c++/4.0.2/bits/istream.tcc /usr/include/c++/4.0.2/fstream \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/basic_file.h \ + /usr/include/c++/4.0.2/bits/fstream.tcc \ + /usr/include/c++/4.0.2/backward/strstream \ + /usr/include/c++/4.0.2/backward/backward_warning.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/VisItException.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/misc_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/vectortypes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/Subject.h \ + icon.xpm +BinnerEnginePluginInfo.o: BinnerEnginePluginInfo.C BinnerPluginInfo.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/OperatorPluginInfo.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/plugin_exports.h \ + /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ + /usr/include/gnu/stubs.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stddef.h \ + /usr/include/bits/types.h /usr/include/bits/wordsize.h \ + /usr/include/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \ + /usr/include/gconv.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stdarg.h \ + /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/operator_plugin_exports.h \ + avtBinnerFilter.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtPluginStreamer.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/pipeline_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtStreamer.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataTreeStreamer.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDatasetToDatasetFilter.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDatasetToDataObjectFilter.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtFilter.h \ + /usr/include/c++/4.0.2/vector /usr/include/c++/4.0.2/bits/functexcept.h \ + /usr/include/c++/4.0.2/exception_defines.h \ + /usr/include/c++/4.0.2/bits/stl_algobase.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++config.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/os_defines.h \ + /usr/include/c++/4.0.2/cstring /usr/include/c++/4.0.2/cstddef \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/c++/4.0.2/climits \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/limits.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/c++/4.0.2/cstdlib /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \ + /usr/include/bits/select.h /usr/include/bits/sigset.h \ + /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ + /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ + /usr/include/alloca.h /usr/include/c++/4.0.2/iosfwd \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++locale.h \ + /usr/include/c++/4.0.2/cstdio /usr/include/c++/4.0.2/clocale \ + /usr/include/locale.h /usr/include/bits/locale.h \ + /usr/include/langinfo.h /usr/include/nl_types.h /usr/include/iconv.h \ + /usr/include/libintl.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++io.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/signal.h \ + /usr/include/bits/initspin.h /usr/include/bits/sigthread.h \ + /usr/include/unistd.h /usr/include/bits/posix_opt.h \ + /usr/include/bits/environments.h /usr/include/bits/confname.h \ + /usr/include/getopt.h /usr/include/c++/4.0.2/cctype \ + /usr/include/ctype.h /usr/include/c++/4.0.2/bits/stringfwd.h \ + /usr/include/c++/4.0.2/bits/postypes.h /usr/include/c++/4.0.2/cwchar \ + /usr/include/c++/4.0.2/ctime /usr/include/stdint.h \ + /usr/include/c++/4.0.2/bits/stl_pair.h \ + /usr/include/c++/4.0.2/bits/cpp_type_traits.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.0.2/bits/concept_check.h \ + /usr/include/c++/4.0.2/bits/stl_iterator.h \ + /usr/include/c++/4.0.2/debug/debug.h /usr/include/c++/4.0.2/cassert \ + /usr/include/assert.h /usr/include/c++/4.0.2/bits/allocator.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++allocator.h \ + /usr/include/c++/4.0.2/ext/new_allocator.h /usr/include/c++/4.0.2/new \ + /usr/include/c++/4.0.2/exception \ + /usr/include/c++/4.0.2/bits/stl_construct.h \ + /usr/include/c++/4.0.2/bits/stl_uninitialized.h \ + /usr/include/c++/4.0.2/bits/stl_vector.h \ + /usr/include/c++/4.0.2/bits/stl_bvector.h \ + /usr/include/c++/4.0.2/bits/vector.tcc \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataObjectSource.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataObject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/ref_ptr.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/visitstream.h \ + /usr/include/c++/4.0.2/iostream /usr/include/c++/4.0.2/ostream \ + /usr/include/c++/4.0.2/ios /usr/include/c++/4.0.2/bits/char_traits.h \ + /usr/include/c++/4.0.2/bits/localefwd.h \ + /usr/include/c++/4.0.2/bits/ios_base.h \ + /usr/include/c++/4.0.2/bits/atomicity.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/atomic_word.h \ + /usr/include/c++/4.0.2/bits/locale_classes.h \ + /usr/include/c++/4.0.2/string /usr/include/c++/4.0.2/memory \ + /usr/include/c++/4.0.2/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.0.2/limits \ + /usr/include/c++/4.0.2/bits/stl_function.h \ + /usr/include/c++/4.0.2/bits/basic_string.h \ + /usr/include/c++/4.0.2/algorithm /usr/include/c++/4.0.2/bits/stl_algo.h \ + /usr/include/c++/4.0.2/bits/stl_heap.h \ + /usr/include/c++/4.0.2/bits/stl_tempbuf.h \ + /usr/include/c++/4.0.2/bits/basic_string.tcc \ + /usr/include/c++/4.0.2/streambuf \ + /usr/include/c++/4.0.2/bits/streambuf.tcc \ + /usr/include/c++/4.0.2/bits/basic_ios.h \ + /usr/include/c++/4.0.2/bits/streambuf_iterator.h \ + /usr/include/c++/4.0.2/bits/locale_facets.h \ + /usr/include/c++/4.0.2/cwctype /usr/include/wctype.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_base.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_inline.h \ + /usr/include/c++/4.0.2/bits/codecvt.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/time_members.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/messages_members.h \ + /usr/include/c++/4.0.2/bits/basic_ios.tcc \ + /usr/include/c++/4.0.2/bits/ostream.tcc /usr/include/c++/4.0.2/locale \ + /usr/include/c++/4.0.2/bits/locale_facets.tcc \ + /usr/include/c++/4.0.2/typeinfo /usr/include/c++/4.0.2/istream \ + /usr/include/c++/4.0.2/bits/istream.tcc /usr/include/c++/4.0.2/fstream \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/basic_file.h \ + /usr/include/c++/4.0.2/bits/fstream.tcc \ + /usr/include/c++/4.0.2/backward/strstream \ + /usr/include/c++/4.0.2/backward/backward_warning.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataObjectInformation.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataAttributes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/VisWindowTypes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtVector.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/math_exports.h \ + /usr/include/math.h /usr/include/bits/huge_val.h \ + /usr/include/bits/huge_valf.h /usr/include/bits/huge_vall.h \ + /usr/include/bits/inf.h /usr/include/bits/nan.h \ + /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h \ + /usr/include/bits/mathinline.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/viswindow_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtTypes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/dbatts_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtMatrix.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataValidity.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtPipelineSpecification.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataSpecification.h \ + /usr/include/c++/4.0.2/map /usr/include/c++/4.0.2/bits/stl_tree.h \ + /usr/include/c++/4.0.2/bits/stl_map.h \ + /usr/include/c++/4.0.2/bits/stl_multimap.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/array_ref_ptr.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtSILRestriction.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtSIL.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtSILCollection.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtSILMatrix.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtSILSet.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtGhostData.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataSelection.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/ImproperUseException.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtexception_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/PipelineException.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/VisItException.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/misc_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataObjectSink.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDatasetSink.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataset.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtCommonDataFunctions.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataRepresentation.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataTree.h \ + /usr/include/c++/4.0.2/set /usr/include/c++/4.0.2/bits/stl_set.h \ + /usr/include/c++/4.0.2/bits/stl_multiset.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataObjectToDatasetFilter.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDatasetSource.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtPluginFilter.h \ + BinnerFilter.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/AttributeSubject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/state_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/AttributeGroup.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/vectortypes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/Subject.h +BinnerScriptingPluginInfo.o: BinnerScriptingPluginInfo.C \ + BinnerPluginInfo.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/OperatorPluginInfo.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/plugin_exports.h \ + /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ + /usr/include/gnu/stubs.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stddef.h \ + /usr/include/bits/types.h /usr/include/bits/wordsize.h \ + /usr/include/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \ + /usr/include/gconv.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stdarg.h \ + /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/operator_plugin_exports.h \ + PyBinner.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/Python.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/patchlevel.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/config.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/limits.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/string.h /usr/include/xlocale.h /usr/include/errno.h \ + /usr/include/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/asm/errno.h /usr/include/asm-x86_64/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/stdlib.h /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/sys/types.h /usr/include/time.h \ + /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/bits/sched.h /usr/include/alloca.h /usr/include/assert.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/pyport.h \ + /usr/include/math.h /usr/include/bits/huge_val.h \ + /usr/include/bits/huge_valf.h /usr/include/bits/huge_vall.h \ + /usr/include/bits/inf.h /usr/include/bits/nan.h \ + /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h \ + /usr/include/bits/mathinline.h /usr/include/sys/time.h \ + /usr/include/sys/stat.h /usr/include/bits/stat.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/pymem.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/object.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/objimpl.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/pydebug.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/unicodeobject.h \ + /usr/include/ctype.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/intobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/longobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/floatobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/complexobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/rangeobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/stringobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/bufferobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/tupleobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/listobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/dictobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/methodobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/moduleobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/funcobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/classobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/fileobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/cobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/traceback.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/sliceobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/cellobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/codecs.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/pyerrors.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/pystate.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/modsupport.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/ceval.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/pythonrun.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/sysmodule.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/intrcheck.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/import.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/abstract.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/pyfpe.h \ + BinnerFilter.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/AttributeSubject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/state_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/AttributeGroup.h \ + /usr/include/c++/4.0.2/vector /usr/include/c++/4.0.2/bits/functexcept.h \ + /usr/include/c++/4.0.2/exception_defines.h \ + /usr/include/c++/4.0.2/bits/stl_algobase.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++config.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/os_defines.h \ + /usr/include/c++/4.0.2/cstring /usr/include/c++/4.0.2/cstddef \ + /usr/include/c++/4.0.2/climits /usr/include/c++/4.0.2/cstdlib \ + /usr/include/c++/4.0.2/iosfwd \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++locale.h \ + /usr/include/c++/4.0.2/cstdio /usr/include/c++/4.0.2/clocale \ + /usr/include/locale.h /usr/include/bits/locale.h \ + /usr/include/langinfo.h /usr/include/nl_types.h /usr/include/iconv.h \ + /usr/include/libintl.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++io.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/signal.h \ + /usr/include/bits/initspin.h /usr/include/bits/sigthread.h \ + /usr/include/unistd.h /usr/include/bits/posix_opt.h \ + /usr/include/bits/environments.h /usr/include/bits/confname.h \ + /usr/include/getopt.h /usr/include/c++/4.0.2/cctype \ + /usr/include/ctype.h /usr/include/c++/4.0.2/bits/stringfwd.h \ + /usr/include/c++/4.0.2/bits/postypes.h /usr/include/c++/4.0.2/cwchar \ + /usr/include/c++/4.0.2/ctime /usr/include/stdint.h \ + /usr/include/c++/4.0.2/bits/stl_pair.h \ + /usr/include/c++/4.0.2/bits/cpp_type_traits.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.0.2/bits/concept_check.h \ + /usr/include/c++/4.0.2/bits/stl_iterator.h \ + /usr/include/c++/4.0.2/debug/debug.h /usr/include/c++/4.0.2/cassert \ + /usr/include/c++/4.0.2/bits/allocator.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++allocator.h \ + /usr/include/c++/4.0.2/ext/new_allocator.h /usr/include/c++/4.0.2/new \ + /usr/include/c++/4.0.2/exception \ + /usr/include/c++/4.0.2/bits/stl_construct.h \ + /usr/include/c++/4.0.2/bits/stl_uninitialized.h \ + /usr/include/c++/4.0.2/bits/stl_vector.h \ + /usr/include/c++/4.0.2/bits/stl_bvector.h \ + /usr/include/c++/4.0.2/bits/vector.tcc /usr/include/c++/4.0.2/string \ + /usr/include/c++/4.0.2/bits/char_traits.h /usr/include/c++/4.0.2/memory \ + /usr/include/c++/4.0.2/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.0.2/limits \ + /usr/include/c++/4.0.2/bits/stl_function.h \ + /usr/include/c++/4.0.2/bits/basic_string.h \ + /usr/include/c++/4.0.2/bits/atomicity.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/atomic_word.h \ + /usr/include/c++/4.0.2/algorithm /usr/include/c++/4.0.2/bits/stl_algo.h \ + /usr/include/c++/4.0.2/bits/stl_heap.h \ + /usr/include/c++/4.0.2/bits/stl_tempbuf.h \ + /usr/include/c++/4.0.2/bits/basic_string.tcc \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/visitstream.h \ + /usr/include/c++/4.0.2/iostream /usr/include/c++/4.0.2/ostream \ + /usr/include/c++/4.0.2/ios /usr/include/c++/4.0.2/bits/localefwd.h \ + /usr/include/c++/4.0.2/bits/ios_base.h \ + /usr/include/c++/4.0.2/bits/locale_classes.h \ + /usr/include/c++/4.0.2/streambuf \ + /usr/include/c++/4.0.2/bits/streambuf.tcc \ + /usr/include/c++/4.0.2/bits/basic_ios.h \ + /usr/include/c++/4.0.2/bits/streambuf_iterator.h \ + /usr/include/c++/4.0.2/bits/locale_facets.h \ + /usr/include/c++/4.0.2/cwctype /usr/include/wctype.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_base.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_inline.h \ + /usr/include/c++/4.0.2/bits/codecvt.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/time_members.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/messages_members.h \ + /usr/include/c++/4.0.2/bits/basic_ios.tcc \ + /usr/include/c++/4.0.2/bits/ostream.tcc /usr/include/c++/4.0.2/locale \ + /usr/include/c++/4.0.2/bits/locale_facets.tcc \ + /usr/include/c++/4.0.2/typeinfo /usr/include/c++/4.0.2/istream \ + /usr/include/c++/4.0.2/bits/istream.tcc /usr/include/c++/4.0.2/fstream \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/basic_file.h \ + /usr/include/c++/4.0.2/bits/fstream.tcc \ + /usr/include/c++/4.0.2/backward/strstream \ + /usr/include/c++/4.0.2/backward/backward_warning.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/VisItException.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/misc_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/vectortypes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/Subject.h +PyBinner.o: PyBinner.C PyBinner.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/Python.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/patchlevel.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/config.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/limits.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/syslimits.h \ + /usr/include/limits.h /usr/include/features.h /usr/include/sys/cdefs.h \ + /usr/include/gnu/stubs.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h /usr/include/stdio.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stddef.h \ + /usr/include/bits/types.h /usr/include/bits/wordsize.h \ + /usr/include/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \ + /usr/include/gconv.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stdarg.h \ + /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ + /usr/include/string.h /usr/include/xlocale.h /usr/include/errno.h \ + /usr/include/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/asm/errno.h /usr/include/asm-x86_64/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/stdlib.h /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/sys/types.h /usr/include/time.h \ + /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/bits/sched.h /usr/include/alloca.h /usr/include/assert.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/pyport.h \ + /usr/include/math.h /usr/include/bits/huge_val.h \ + /usr/include/bits/huge_valf.h /usr/include/bits/huge_vall.h \ + /usr/include/bits/inf.h /usr/include/bits/nan.h \ + /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h \ + /usr/include/bits/mathinline.h /usr/include/sys/time.h \ + /usr/include/sys/stat.h /usr/include/bits/stat.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/pymem.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/object.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/objimpl.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/pydebug.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/unicodeobject.h \ + /usr/include/ctype.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/intobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/longobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/floatobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/complexobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/rangeobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/stringobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/bufferobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/tupleobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/listobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/dictobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/methodobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/moduleobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/funcobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/classobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/fileobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/cobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/traceback.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/sliceobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/cellobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/codecs.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/pyerrors.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/pystate.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/modsupport.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/ceval.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/pythonrun.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/sysmodule.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/intrcheck.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/import.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/abstract.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/python/pyfpe.h \ + BinnerFilter.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/AttributeSubject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/state_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/AttributeGroup.h \ + /usr/include/c++/4.0.2/vector /usr/include/c++/4.0.2/bits/functexcept.h \ + /usr/include/c++/4.0.2/exception_defines.h \ + /usr/include/c++/4.0.2/bits/stl_algobase.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++config.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/os_defines.h \ + /usr/include/c++/4.0.2/cstring /usr/include/c++/4.0.2/cstddef \ + /usr/include/c++/4.0.2/climits /usr/include/c++/4.0.2/cstdlib \ + /usr/include/c++/4.0.2/iosfwd \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++locale.h \ + /usr/include/c++/4.0.2/cstdio /usr/include/c++/4.0.2/clocale \ + /usr/include/locale.h /usr/include/bits/locale.h \ + /usr/include/langinfo.h /usr/include/nl_types.h /usr/include/iconv.h \ + /usr/include/libintl.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++io.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/signal.h \ + /usr/include/bits/initspin.h /usr/include/bits/sigthread.h \ + /usr/include/unistd.h /usr/include/bits/posix_opt.h \ + /usr/include/bits/environments.h /usr/include/bits/confname.h \ + /usr/include/getopt.h /usr/include/c++/4.0.2/cctype \ + /usr/include/ctype.h /usr/include/c++/4.0.2/bits/stringfwd.h \ + /usr/include/c++/4.0.2/bits/postypes.h /usr/include/c++/4.0.2/cwchar \ + /usr/include/c++/4.0.2/ctime /usr/include/stdint.h \ + /usr/include/c++/4.0.2/bits/stl_pair.h \ + /usr/include/c++/4.0.2/bits/cpp_type_traits.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.0.2/bits/concept_check.h \ + /usr/include/c++/4.0.2/bits/stl_iterator.h \ + /usr/include/c++/4.0.2/debug/debug.h /usr/include/c++/4.0.2/cassert \ + /usr/include/c++/4.0.2/bits/allocator.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++allocator.h \ + /usr/include/c++/4.0.2/ext/new_allocator.h /usr/include/c++/4.0.2/new \ + /usr/include/c++/4.0.2/exception \ + /usr/include/c++/4.0.2/bits/stl_construct.h \ + /usr/include/c++/4.0.2/bits/stl_uninitialized.h \ + /usr/include/c++/4.0.2/bits/stl_vector.h \ + /usr/include/c++/4.0.2/bits/stl_bvector.h \ + /usr/include/c++/4.0.2/bits/vector.tcc /usr/include/c++/4.0.2/string \ + /usr/include/c++/4.0.2/bits/char_traits.h /usr/include/c++/4.0.2/memory \ + /usr/include/c++/4.0.2/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.0.2/limits \ + /usr/include/c++/4.0.2/bits/stl_function.h \ + /usr/include/c++/4.0.2/bits/basic_string.h \ + /usr/include/c++/4.0.2/bits/atomicity.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/atomic_word.h \ + /usr/include/c++/4.0.2/algorithm /usr/include/c++/4.0.2/bits/stl_algo.h \ + /usr/include/c++/4.0.2/bits/stl_heap.h \ + /usr/include/c++/4.0.2/bits/stl_tempbuf.h \ + /usr/include/c++/4.0.2/bits/basic_string.tcc \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/visitstream.h \ + /usr/include/c++/4.0.2/iostream /usr/include/c++/4.0.2/ostream \ + /usr/include/c++/4.0.2/ios /usr/include/c++/4.0.2/bits/localefwd.h \ + /usr/include/c++/4.0.2/bits/ios_base.h \ + /usr/include/c++/4.0.2/bits/locale_classes.h \ + /usr/include/c++/4.0.2/streambuf \ + /usr/include/c++/4.0.2/bits/streambuf.tcc \ + /usr/include/c++/4.0.2/bits/basic_ios.h \ + /usr/include/c++/4.0.2/bits/streambuf_iterator.h \ + /usr/include/c++/4.0.2/bits/locale_facets.h \ + /usr/include/c++/4.0.2/cwctype /usr/include/wctype.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_base.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_inline.h \ + /usr/include/c++/4.0.2/bits/codecvt.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/time_members.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/messages_members.h \ + /usr/include/c++/4.0.2/bits/basic_ios.tcc \ + /usr/include/c++/4.0.2/bits/ostream.tcc /usr/include/c++/4.0.2/locale \ + /usr/include/c++/4.0.2/bits/locale_facets.tcc \ + /usr/include/c++/4.0.2/typeinfo /usr/include/c++/4.0.2/istream \ + /usr/include/c++/4.0.2/bits/istream.tcc /usr/include/c++/4.0.2/fstream \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/basic_file.h \ + /usr/include/c++/4.0.2/bits/fstream.tcc \ + /usr/include/c++/4.0.2/backward/strstream \ + /usr/include/c++/4.0.2/backward/backward_warning.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/VisItException.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/misc_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/vectortypes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/Subject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/ObserverToCallback.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/Observer.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/SimpleObserver.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/ColorAttribute.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/snprintf.h +avtBinnerFilter.o: avtBinnerFilter.C avtBinnerFilter.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtPluginStreamer.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/pipeline_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtStreamer.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataTreeStreamer.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDatasetToDatasetFilter.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDatasetToDataObjectFilter.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtFilter.h \ + /usr/include/c++/4.0.2/vector /usr/include/c++/4.0.2/bits/functexcept.h \ + /usr/include/c++/4.0.2/exception_defines.h \ + /usr/include/c++/4.0.2/bits/stl_algobase.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++config.h \ + /usr/include/bits/wordsize.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/os_defines.h \ + /usr/include/features.h /usr/include/sys/cdefs.h \ + /usr/include/gnu/stubs.h /usr/include/c++/4.0.2/cstring \ + /usr/include/c++/4.0.2/cstddef \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stddef.h \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/c++/4.0.2/climits \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/limits.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h /usr/include/c++/4.0.2/cstdlib \ + /usr/include/stdlib.h /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h \ + /usr/include/bits/select.h /usr/include/bits/sigset.h \ + /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ + /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ + /usr/include/alloca.h /usr/include/c++/4.0.2/iosfwd \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++locale.h \ + /usr/include/c++/4.0.2/cstdio /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \ + /usr/include/gconv.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stdarg.h \ + /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ + /usr/include/c++/4.0.2/clocale /usr/include/locale.h \ + /usr/include/bits/locale.h /usr/include/langinfo.h \ + /usr/include/nl_types.h /usr/include/iconv.h /usr/include/libintl.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++io.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/signal.h \ + /usr/include/bits/initspin.h /usr/include/bits/sigthread.h \ + /usr/include/unistd.h /usr/include/bits/posix_opt.h \ + /usr/include/bits/environments.h /usr/include/bits/confname.h \ + /usr/include/getopt.h /usr/include/c++/4.0.2/cctype \ + /usr/include/ctype.h /usr/include/c++/4.0.2/bits/stringfwd.h \ + /usr/include/c++/4.0.2/bits/postypes.h /usr/include/c++/4.0.2/cwchar \ + /usr/include/c++/4.0.2/ctime /usr/include/stdint.h \ + /usr/include/c++/4.0.2/bits/stl_pair.h \ + /usr/include/c++/4.0.2/bits/cpp_type_traits.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.0.2/bits/concept_check.h \ + /usr/include/c++/4.0.2/bits/stl_iterator.h \ + /usr/include/c++/4.0.2/debug/debug.h /usr/include/c++/4.0.2/cassert \ + /usr/include/assert.h /usr/include/c++/4.0.2/bits/allocator.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++allocator.h \ + /usr/include/c++/4.0.2/ext/new_allocator.h /usr/include/c++/4.0.2/new \ + /usr/include/c++/4.0.2/exception \ + /usr/include/c++/4.0.2/bits/stl_construct.h \ + /usr/include/c++/4.0.2/bits/stl_uninitialized.h \ + /usr/include/c++/4.0.2/bits/stl_vector.h \ + /usr/include/c++/4.0.2/bits/stl_bvector.h \ + /usr/include/c++/4.0.2/bits/vector.tcc \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataObjectSource.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataObject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/ref_ptr.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/visitstream.h \ + /usr/include/c++/4.0.2/iostream /usr/include/c++/4.0.2/ostream \ + /usr/include/c++/4.0.2/ios /usr/include/c++/4.0.2/bits/char_traits.h \ + /usr/include/c++/4.0.2/bits/localefwd.h \ + /usr/include/c++/4.0.2/bits/ios_base.h \ + /usr/include/c++/4.0.2/bits/atomicity.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/atomic_word.h \ + /usr/include/c++/4.0.2/bits/locale_classes.h \ + /usr/include/c++/4.0.2/string /usr/include/c++/4.0.2/memory \ + /usr/include/c++/4.0.2/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.0.2/limits \ + /usr/include/c++/4.0.2/bits/stl_function.h \ + /usr/include/c++/4.0.2/bits/basic_string.h \ + /usr/include/c++/4.0.2/algorithm /usr/include/c++/4.0.2/bits/stl_algo.h \ + /usr/include/c++/4.0.2/bits/stl_heap.h \ + /usr/include/c++/4.0.2/bits/stl_tempbuf.h \ + /usr/include/c++/4.0.2/bits/basic_string.tcc \ + /usr/include/c++/4.0.2/streambuf \ + /usr/include/c++/4.0.2/bits/streambuf.tcc \ + /usr/include/c++/4.0.2/bits/basic_ios.h \ + /usr/include/c++/4.0.2/bits/streambuf_iterator.h \ + /usr/include/c++/4.0.2/bits/locale_facets.h \ + /usr/include/c++/4.0.2/cwctype /usr/include/wctype.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_base.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_inline.h \ + /usr/include/c++/4.0.2/bits/codecvt.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/time_members.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/messages_members.h \ + /usr/include/c++/4.0.2/bits/basic_ios.tcc \ + /usr/include/c++/4.0.2/bits/ostream.tcc /usr/include/c++/4.0.2/locale \ + /usr/include/c++/4.0.2/bits/locale_facets.tcc \ + /usr/include/c++/4.0.2/typeinfo /usr/include/c++/4.0.2/istream \ + /usr/include/c++/4.0.2/bits/istream.tcc /usr/include/c++/4.0.2/fstream \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/basic_file.h \ + /usr/include/c++/4.0.2/bits/fstream.tcc \ + /usr/include/c++/4.0.2/backward/strstream \ + /usr/include/c++/4.0.2/backward/backward_warning.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataObjectInformation.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataAttributes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/VisWindowTypes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtVector.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/math_exports.h \ + /usr/include/math.h /usr/include/bits/huge_val.h \ + /usr/include/bits/huge_valf.h /usr/include/bits/huge_vall.h \ + /usr/include/bits/inf.h /usr/include/bits/nan.h \ + /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h \ + /usr/include/bits/mathinline.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/viswindow_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtTypes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/dbatts_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtMatrix.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataValidity.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtPipelineSpecification.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataSpecification.h \ + /usr/include/c++/4.0.2/map /usr/include/c++/4.0.2/bits/stl_tree.h \ + /usr/include/c++/4.0.2/bits/stl_map.h \ + /usr/include/c++/4.0.2/bits/stl_multimap.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/array_ref_ptr.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtSILRestriction.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtSIL.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtSILCollection.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtSILMatrix.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtSILSet.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtGhostData.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataSelection.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/ImproperUseException.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtexception_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/PipelineException.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/VisItException.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/misc_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataObjectSink.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDatasetSink.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataset.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtCommonDataFunctions.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataRepresentation.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataTree.h \ + /usr/include/c++/4.0.2/set /usr/include/c++/4.0.2/bits/stl_set.h \ + /usr/include/c++/4.0.2/bits/stl_multiset.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDataObjectToDatasetFilter.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDatasetSource.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtPluginFilter.h \ + BinnerFilter.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/AttributeSubject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/state_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/AttributeGroup.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/vectortypes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/Subject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtDatasetExaminer.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/avtExtents.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkStructuredGrid.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkPointSet.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkDataSet.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkDataObject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkObject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkObjectBase.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkIndent.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkSystemIncludes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkWin32Header.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/vtkConfigure.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkIOStream.h \ + /usr/include/c++/4.0.2/iomanip /usr/include/c++/4.0.2/functional \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkIdType.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkOStreamWrapper.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkOStrStreamWrapper.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkSetGet.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkTimeStamp.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkPoints.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkDataArray.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkStructuredData.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkUnsignedCharArray.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkDataArray.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkFloatArray.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkPointData.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkDataSetAttributes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkFieldData.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkPoints.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common/vtkMath.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit/InvalidDimensionsException.h diff --git a/trunk/visit_plugins/operators/BinnerFilter/Binner.xml b/trunk/visit_plugins/operators/BinnerFilter/Binner.xml new file mode 100644 index 0000000..424121a --- /dev/null +++ b/trunk/visit_plugins/operators/BinnerFilter/Binner.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/trunk/visit_plugins/operators/BinnerFilter/BinnerCommonPluginInfo.C b/trunk/visit_plugins/operators/BinnerFilter/BinnerCommonPluginInfo.C new file mode 100644 index 0000000..7fa46eb --- /dev/null +++ b/trunk/visit_plugins/operators/BinnerFilter/BinnerCommonPluginInfo.C @@ -0,0 +1,47 @@ +// ************************************************************************* // +// File: BinnerCommonPluginInfo.C +// ************************************************************************* // + +#include +#include + +// **************************************************************************** +// Method: BinnerCommonPluginInfo::AllocAttributes +// +// Purpose: +// Return a pointer to a newly allocated attribute subject. +// +// Returns: A pointer to the newly allocated attribute subject. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// **************************************************************************** + +AttributeSubject * +BinnerCommonPluginInfo::AllocAttributes() +{ + return new Binner; +} + +// **************************************************************************** +// Method: BinnerCommonPluginInfo::CopyAttributes +// +// Purpose: +// Copy a Binner attribute subject. +// +// Arguments: +// to The destination attribute subject. +// from The source attribute subject. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// **************************************************************************** + +void +BinnerCommonPluginInfo::CopyAttributes(AttributeSubject *to, + AttributeSubject *from) +{ + *((Binner *) to) = *((Binner *) from); +} diff --git a/trunk/visit_plugins/operators/BinnerFilter/BinnerEnginePluginInfo.C b/trunk/visit_plugins/operators/BinnerFilter/BinnerEnginePluginInfo.C new file mode 100644 index 0000000..2772d0f --- /dev/null +++ b/trunk/visit_plugins/operators/BinnerFilter/BinnerEnginePluginInfo.C @@ -0,0 +1,44 @@ +// ************************************************************************* // +// File: BinnerEnginePluginInfo.C +// ************************************************************************* // + +#include +#include + +#if defined(__APPLE__) +#define GetEngineInfo Binner_GetEngineInfo +#endif + +// **************************************************************************** +// Function: GetEngineInfo +// +// Purpose: +// Return a new EnginePluginInfo for the Binner operator. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// **************************************************************************** +extern "C" EngineOperatorPluginInfo* GetEngineInfo() +{ + return new BinnerEnginePluginInfo; +} + +// **************************************************************************** +// Method: BinnerEnginePluginInfo::AllocAvtPluginFilter +// +// Purpose: +// Return a pointer to a newly allocated avtPluginFilter. +// +// Returns: A pointer to the newly allocated avtPluginFilter. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// **************************************************************************** + +avtPluginFilter * +BinnerEnginePluginInfo::AllocAvtPluginFilter() +{ + return new avtBinnerFilter; +} diff --git a/trunk/visit_plugins/operators/BinnerFilter/BinnerFilter.C b/trunk/visit_plugins/operators/BinnerFilter/BinnerFilter.C new file mode 100644 index 0000000..7f5048a --- /dev/null +++ b/trunk/visit_plugins/operators/BinnerFilter/BinnerFilter.C @@ -0,0 +1,535 @@ +#include +#include + +// **************************************************************************** +// Method: Binner::Binner +// +// Purpose: +// Constructor for the Binner class. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 30 12:05:25 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +Binner::Binner() : AttributeSubject("iii") +{ +} + +// **************************************************************************** +// Method: Binner::Binner +// +// Purpose: +// Copy constructor for the Binner class. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 30 12:05:25 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +Binner::Binner(const Binner &obj) : AttributeSubject("iii") +{ + dim1 = obj.dim1; + dim2 = obj.dim2; + dim3 = obj.dim3; + + SelectAll(); +} + +// **************************************************************************** +// Method: Binner::~Binner +// +// Purpose: +// Destructor for the Binner class. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 30 12:05:25 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +Binner::~Binner() +{ + // nothing here +} + +// **************************************************************************** +// Method: Binner::operator = +// +// Purpose: +// Assignment operator for the Binner class. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 30 12:05:25 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +Binner& +Binner::operator = (const Binner &obj) +{ + if (this == &obj) return *this; + dim1 = obj.dim1; + dim2 = obj.dim2; + dim3 = obj.dim3; + + SelectAll(); + return *this; +} + +// **************************************************************************** +// Method: Binner::operator == +// +// Purpose: +// Comparison operator == for the Binner class. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 30 12:05:25 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +bool +Binner::operator == (const Binner &obj) const +{ + // Create the return value + return ((dim1 == obj.dim1) && + (dim2 == obj.dim2) && + (dim3 == obj.dim3)); +} + +// **************************************************************************** +// Method: Binner::operator != +// +// Purpose: +// Comparison operator != for the Binner class. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 30 12:05:25 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +bool +Binner::operator != (const Binner &obj) const +{ + return !(this->operator == (obj)); +} + +// **************************************************************************** +// Method: Binner::TypeName +// +// Purpose: +// Type name method for the Binner class. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 30 12:05:25 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +const std::string +Binner::TypeName() const +{ + return "Binner"; +} + +// **************************************************************************** +// Method: Binner::CopyAttributes +// +// Purpose: +// CopyAttributes method for the Binner class. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 30 12:05:25 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +bool +Binner::CopyAttributes(const AttributeGroup *atts) +{ + if(TypeName() != atts->TypeName()) + return false; + + // Call assignment operator. + const Binner *tmp = (const Binner *)atts; + *this = *tmp; + + return true; +} + +// **************************************************************************** +// Method: Binner::CreateCompatible +// +// Purpose: +// CreateCompatible method for the Binner class. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 30 12:05:25 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +AttributeSubject * +Binner::CreateCompatible(const std::string &tname) const +{ + AttributeSubject *retval = 0; + if(TypeName() == tname) + retval = new Binner(*this); + // Other cases could go here too. + + return retval; +} + +// **************************************************************************** +// Method: Binner::NewInstance +// +// Purpose: +// NewInstance method for the Binner class. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 30 12:05:25 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +AttributeSubject * +Binner::NewInstance(bool copy) const +{ + AttributeSubject *retval = 0; + if(copy) + retval = new Binner(*this); + else + retval = new Binner; + + return retval; +} + +// **************************************************************************** +// Method: Binner::SelectAll +// +// Purpose: +// Selects all attributes. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 30 12:05:25 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +void +Binner::SelectAll() +{ + Select(0, (void *)&dim1); + Select(1, (void *)&dim2); + Select(2, (void *)&dim3); +} + +/////////////////////////////////////////////////////////////////////////////// +// Persistence methods +/////////////////////////////////////////////////////////////////////////////// + +// **************************************************************************** +// Method: Binner::CreateNode +// +// Purpose: +// This method creates a DataNode representation of the object so it can be saved to a config file. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 30 12:05:25 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +bool +Binner::CreateNode(DataNode *parentNode, bool completeSave, bool forceAdd) +{ + if(parentNode == 0) + return false; + + Binner defaultObject; + bool addToParent = false; + // Create a node for Binner. + DataNode *node = new DataNode("Binner"); + + if(completeSave || !FieldsEqual(0, &defaultObject)) + { + addToParent = true; + node->AddNode(new DataNode("dim1", dim1)); + } + + if(completeSave || !FieldsEqual(1, &defaultObject)) + { + addToParent = true; + node->AddNode(new DataNode("dim2", dim2)); + } + + if(completeSave || !FieldsEqual(2, &defaultObject)) + { + addToParent = true; + node->AddNode(new DataNode("dim3", dim3)); + } + + + // Add the node to the parent node. + if(addToParent || forceAdd) + parentNode->AddNode(node); + else + delete node; + + return (addToParent || forceAdd); +} + +// **************************************************************************** +// Method: Binner::SetFromNode +// +// Purpose: +// This method sets attributes in this object from values in a DataNode representation of the object. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 30 12:05:25 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +void +Binner::SetFromNode(DataNode *parentNode) +{ + int i; + if(parentNode == 0) + return; + + DataNode *searchNode = parentNode->GetNode("Binner"); + if(searchNode == 0) + return; + + DataNode *node; + if((node = searchNode->GetNode("dim1")) != 0) + SetDim1(node->AsInt()); + if((node = searchNode->GetNode("dim2")) != 0) + SetDim2(node->AsInt()); + if((node = searchNode->GetNode("dim3")) != 0) + SetDim3(node->AsInt()); +} + +/////////////////////////////////////////////////////////////////////////////// +// Set property methods +/////////////////////////////////////////////////////////////////////////////// + +void +Binner::SetDim1(int dim1_) +{ + dim1 = dim1_; + Select(0, (void *)&dim1); +} + +void +Binner::SetDim2(int dim2_) +{ + dim2 = dim2_; + Select(1, (void *)&dim2); +} + +void +Binner::SetDim3(int dim3_) +{ + dim3 = dim3_; + Select(2, (void *)&dim3); +} + +/////////////////////////////////////////////////////////////////////////////// +// Get property methods +/////////////////////////////////////////////////////////////////////////////// + +int +Binner::GetDim1() const +{ + return dim1; +} + +int +Binner::GetDim2() const +{ + return dim2; +} + +int +Binner::GetDim3() const +{ + return dim3; +} + +/////////////////////////////////////////////////////////////////////////////// +// Keyframing methods +/////////////////////////////////////////////////////////////////////////////// + +// **************************************************************************** +// Method: Binner::GetFieldName +// +// Purpose: +// This method returns the name of a field given its index. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 30 12:05:25 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +std::string +Binner::GetFieldName(int index) const +{ + switch (index) + { + case 0: return "dim1"; + case 1: return "dim2"; + case 2: return "dim3"; + default: return "invalid index"; + } +} + +// **************************************************************************** +// Method: Binner::GetFieldType +// +// Purpose: +// This method returns the type of a field given its index. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 30 12:05:25 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +AttributeGroup::FieldType +Binner::GetFieldType(int index) const +{ + switch (index) + { + case 0: return FieldType_int; + case 1: return FieldType_int; + case 2: return FieldType_int; + default: return FieldType_unknown; + } +} + +// **************************************************************************** +// Method: Binner::GetFieldTypeName +// +// Purpose: +// This method returns the name of a field type given its index. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 30 12:05:25 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +std::string +Binner::GetFieldTypeName(int index) const +{ + switch (index) + { + case 0: return "int"; + case 1: return "int"; + case 2: return "int"; + default: return "invalid index"; + } +} + +// **************************************************************************** +// Method: Binner::FieldsEqual +// +// Purpose: +// This method compares two fields and return true if they are equal. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 30 12:05:25 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +bool +Binner::FieldsEqual(int index_, const AttributeGroup *rhs) const +{ + const Binner &obj = *((const Binner*)rhs); + bool retval = false; + switch (index_) + { + case 0: + { // new scope + retval = (dim1 == obj.dim1); + } + break; + case 1: + { // new scope + retval = (dim2 == obj.dim2); + } + break; + case 2: + { // new scope + retval = (dim3 == obj.dim3); + } + break; + default: retval = false; + } + + return retval; +} + +/////////////////////////////////////////////////////////////////////////////// +// User-defined methods. +/////////////////////////////////////////////////////////////////////////////// + diff --git a/trunk/visit_plugins/operators/BinnerFilter/BinnerFilter.h b/trunk/visit_plugins/operators/BinnerFilter/BinnerFilter.h new file mode 100644 index 0000000..bac8ba6 --- /dev/null +++ b/trunk/visit_plugins/operators/BinnerFilter/BinnerFilter.h @@ -0,0 +1,66 @@ +#ifndef BINNER_H +#define BINNER_H +#include + +// **************************************************************************** +// Class: Binner +// +// Purpose: +// Bin particles +// +// Notes: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 30 12:05:25 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +class Binner : public AttributeSubject +{ +public: + Binner(); + Binner(const Binner &obj); + virtual ~Binner(); + + virtual Binner& operator = (const Binner &obj); + virtual bool operator == (const Binner &obj) const; + virtual bool operator != (const Binner &obj) const; + + virtual const std::string TypeName() const; + virtual bool CopyAttributes(const AttributeGroup *); + virtual AttributeSubject *CreateCompatible(const std::string &) const; + virtual AttributeSubject *NewInstance(bool) const; + + // Property selection methods + virtual void SelectAll(); + + // Property setting methods + void SetDim1(int dim1_); + void SetDim2(int dim2_); + void SetDim3(int dim3_); + + // Property getting methods + int GetDim1() const; + int GetDim2() const; + int GetDim3() const; + + // Persistence methods + virtual bool CreateNode(DataNode *node, bool completeSave, bool forceAdd); + virtual void SetFromNode(DataNode *node); + + + // Keyframing methods + virtual std::string GetFieldName(int index) const; + virtual AttributeGroup::FieldType GetFieldType(int index) const; + virtual std::string GetFieldTypeName(int index) const; + virtual bool FieldsEqual(int index, const AttributeGroup *rhs) const; + +private: + int dim1; + int dim2; + int dim3; +}; + +#endif diff --git a/trunk/visit_plugins/operators/BinnerFilter/BinnerFilter.java b/trunk/visit_plugins/operators/BinnerFilter/BinnerFilter.java new file mode 100644 index 0000000..4236fd9 --- /dev/null +++ b/trunk/visit_plugins/operators/BinnerFilter/BinnerFilter.java @@ -0,0 +1,116 @@ +package llnl.visit.operators; + +import llnl.visit.AttributeSubject; +import llnl.visit.CommunicationBuffer; +import llnl.visit.Plugin; + +// **************************************************************************** +// Class: Binner +// +// Purpose: +// Bin particles +// +// Notes: Autogenerated by xml2java. +// +// Programmer: xml2java +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +public class Binner extends AttributeSubject implements Plugin +{ + public Binner() + { + super(3); + + dim1 = 0; + dim2 = 0; + dim3 = 0; + } + + public Binner(Binner obj) + { + super(3); + + dim1 = obj.dim1; + dim2 = obj.dim2; + dim3 = obj.dim3; + + SelectAll(); + } + + public boolean equals(Binner obj) + { + // Create the return value + return ((dim1 == obj.dim1) && + (dim2 == obj.dim2) && + (dim3 == obj.dim3)); + } + + public String GetName() { return "Binner"; } + public String GetVersion() { return "1.0"; } + + // Property setting methods + public void SetDim1(int dim1_) + { + dim1 = dim1_; + Select(0); + } + + public void SetDim2(int dim2_) + { + dim2 = dim2_; + Select(1); + } + + public void SetDim3(int dim3_) + { + dim3 = dim3_; + Select(2); + } + + // Property getting methods + public int GetDim1() { return dim1; } + public int GetDim2() { return dim2; } + public int GetDim3() { return dim3; } + + // Write and read methods. + public void WriteAtts(CommunicationBuffer buf) + { + if(WriteSelect(0, buf)) + buf.WriteInt(dim1); + if(WriteSelect(1, buf)) + buf.WriteInt(dim2); + if(WriteSelect(2, buf)) + buf.WriteInt(dim3); + } + + public void ReadAtts(int n, CommunicationBuffer buf) + { + for(int i = 0; i < n; ++i) + { + int index = (int)buf.ReadByte(); + switch(index) + { + case 0: + SetDim1(buf.ReadInt()); + break; + case 1: + SetDim2(buf.ReadInt()); + break; + case 2: + SetDim3(buf.ReadInt()); + break; + } + } + } + + + // Attributes + private int dim1; + private int dim2; + private int dim3; +} + diff --git a/trunk/visit_plugins/operators/BinnerFilter/BinnerGUIPluginInfo.C b/trunk/visit_plugins/operators/BinnerFilter/BinnerGUIPluginInfo.C new file mode 100644 index 0000000..cb0bec2 --- /dev/null +++ b/trunk/visit_plugins/operators/BinnerFilter/BinnerGUIPluginInfo.C @@ -0,0 +1,92 @@ +// ************************************************************************* // +// File: BinnerGUIPluginInfo.C +// ************************************************************************* // + +#include +#include +#include + +#if defined(__APPLE__) +#define GetGUIInfo Binner_GetGUIInfo +#endif + +// **************************************************************************** +// Function: GetGUIInfo +// +// Purpose: +// Return a new GUIPluginInfo for the Binner operator. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// **************************************************************************** +extern "C" GUIOperatorPluginInfo* GetGUIInfo() +{ + return new BinnerGUIPluginInfo; +} + +// **************************************************************************** +// Method: BinnerGUIPluginInfo::GetMenuName +// +// Purpose: +// Return a pointer to the name to use in the GUI menu. +// +// Returns: A pointer to the name to use in the GUI menu. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// **************************************************************************** + +const char * +BinnerGUIPluginInfo::GetMenuName() const +{ + return "Binner"; +} + + +// **************************************************************************** +// Method: BinnerGUIPluginInfo::CreatePluginWindow +// +// Purpose: +// Return a pointer to an operator's attribute window. +// +// Arguments: +// type The type of the operator. +// attr The attribute subject for the operator. +// notepad The notepad to use for posting the window. +// +// Returns: A pointer to the operator's attribute window. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// **************************************************************************** + +QvisPostableWindowObserver * +BinnerGUIPluginInfo::CreatePluginWindow(int type, AttributeSubject *attr, + QvisNotepadArea *notepad) +{ + return new QvisBinnerWindow(type, (Binner *)attr, + "Binner operator attributes", "Binner operator", notepad); +} + +// **************************************************************************** +// Method: BinnerGUIPluginInfo::XPMIconData +// +// Purpose: +// Return a pointer to the icon data. +// +// Returns: A pointer to the icon data. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// **************************************************************************** + +#include +const char ** +BinnerGUIPluginInfo::XPMIconData() const +{ + return icon_xpm; +} diff --git a/trunk/visit_plugins/operators/BinnerFilter/BinnerMakefile b/trunk/visit_plugins/operators/BinnerFilter/BinnerMakefile new file mode 100644 index 0000000..b574b2d --- /dev/null +++ b/trunk/visit_plugins/operators/BinnerFilter/BinnerMakefile @@ -0,0 +1,113 @@ +## +## Programs and options... +## +include /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/make-variables +TOPDIR=/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64 + + +## +## Libraries and includes... +## +VTK_INCLUDE= \ + -I/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk \ + -I/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common \ + -I/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Filtering \ + -I/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Graphics \ + -I/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Hybrid \ + -I/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/IO \ + -I/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Imaging \ + -I/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Rendering +MOC=/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/bin/moc +CXXFLAGS=$(CXXFLAGSORIG) $(QT_CXXFLAGS) $(PY_CXXFLAGS) +CPPFLAGS=$(CPPFLAGSORIG) $(VTK_INCLUDE) -I. -I/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include -I/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit +LDFLAGS=$(LDFLAGSORIG) $(PY_LDFLAGS) -L/d/visusers/cristina/.visit/linux-x86_64/plugins/operators + +## +## Files... +## +PLUGINDIR=operators +PLUGINNAME=BinnerOperator + +WIDGETS=QvisBinnerWindow.h +ISRC=BinnerPluginInfo.C +COMMONSRC=BinnerPluginInfo.C BinnerCommonPluginInfo.C Binner.C +GSRC=BinnerGUIPluginInfo.C QvisBinnerWindow.C +VSRC=BinnerViewerPluginInfo.C +ESRC=BinnerEnginePluginInfo.C avtBinnerFilter.C +SSRC=BinnerScriptingPluginInfo.C PyBinner.C + +SRC=$(ISRC) $(COMMONSRC) $(GSRC) $(VSRC) $(ESRC) $(SSRC) + + +JAVASRC=Binner.java +JAVAOBJ=/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/java/llnl/visit/operators/Binner.class +JAVAPLUGINFLAGS=-d /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/java -classpath /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/java + +SHLIB_FORCED= + +ELIBS_FOR_MACOSX_PREBINDING=$(BZIP2_LIBS) +VLIBS_FOR_MACOSX_PREBINDING=$(BZIP2_LIBS) +ILIBS= +GLIBS=-lgui -lmdserverproxy -lviewerproxy -lproxybase -lmdserverrpc -lviewerrpc -lwinutil -ldbatts -lavtexceptions -lstate -lcomm -lmisc -lplugin -lexpr -lparser -lutility -lI$(PLUGINNAME) $(QT_LDFLAGS) $(QT_LIBS) $(QUI_LIBS) $(X_LIBS) +SLIBS=-lstate -lmisc -lcomm -lutility $(PY_LIB) -lI$(PLUGINNAME) +VLIBS=-lpipeline_ser -lplotter_ser -lavtfilters_ser -lavtmath_ser -lavtview -ldbatts -lavtexceptions -lstate -lmisc -lcomm -lexpr -lparser -lutility -lvisit_vtk -llightweight_visit_vtk -lparallel_visit_vtk_ser $(VLIBS_FOR_MACOSX_PREBINDING) -lI$(PLUGINNAME) $(VTK_LIBS) +ESERLIBS=-lpipeline_ser -lplotter_ser -lavtfilters_ser -lavtmath_ser -lavtview -ldbatts -lavtexceptions -lstate -lmisc -lcomm -lexpr -lparser -lutility -lvisit_vtk -llightweight_visit_vtk -lparallel_visit_vtk_ser -lI$(PLUGINNAME) $(ELIBS_FOR_MACOSX_PREBINDING) $(VTK_LIBS) +EPARLIBS=-lpipeline_par -lplotter_par -lavtfilters_par -lavtmath_par -lavtview -ldbatts -lavtexceptions -lstate -lmisc -lcomm -lexpr -lparser -lutility -lvisit_vtk -llightweight_visit_vtk -lparallel_visit_vtk_par -lI$(PLUGINNAME) $(ELIBS_FOR_MACOSX_PREBINDING) $(VTK_LIBS) $(SHLIB_MPI_LIBS) + +IDSO=/d/visusers/cristina/.visit/linux-x86_64/plugins/operators/libIBinnerOperator.so +GDSO=/d/visusers/cristina/.visit/linux-x86_64/plugins/operators/libGBinnerOperator.so +SDSO=/d/visusers/cristina/.visit/linux-x86_64/plugins/operators/libSBinnerOperator.so +VDSO=/d/visusers/cristina/.visit/linux-x86_64/plugins/operators/libVBinnerOperator.so +ESERDSO=/d/visusers/cristina/.visit/linux-x86_64/plugins/operators/libEBinnerOperator_ser.so +EPARDSO=/d/visusers/cristina/.visit/linux-x86_64/plugins/operators/libEBinnerOperator_par.so + + +DISTRIB= + +## +## Derived objects +## +IOBJ=$(ISRC:.C=.o) +GOBJ=$(COMMONSRC:.C=.o) $(GSRC:.C=.o) +SOBJ=$(COMMONSRC:.C=.o) $(SSRC:.C=.o) +VOBJ=$(COMMONSRC:.C=.o) $(VSRC:.C=.o) +MOBJ=$(COMMONSRC:.C=.o) $(MSRC:.C=.o) $(MSPECIFICSRC:.C=_mds.o) +ESEROBJ=$(COMMONSRC:.C=.o) $(ESRC:.C=.o) +EPAROBJ=$(COMMONSRC:.C=.o) $(ESRC:.C=_par.o) + +MOCSRC = $(WIDGETS:.h=_moc.C) +MOCOBJ = $(MOCSRC:.C=.o) + +## +## Standard targets... +## +all: message $(IDSO) $(GUILIB) $(VIEWERLIB) $(ENGINELIBSER) $(ENGINELIBPAR) $(SCRIPTINGLIB) $(JAVACLASS) + +clean: + $(RM) $(IOBJ) $(COMMONOBJ) + $(RM) $(GOBJ) $(SOBJ) $(VOBJ) $(MOBJ) $(ESEROBJ) $(EPAROBJ) + $(RM) $(MOCSRC) $(MOCOBJ) + $(RM) $(IDSO) $(GDSO) $(SDSO) $(VDSO) $(MDSO) $(ESERDSO) $(EPARDSO) + $(RM) $(JAVAOBJ) + +## +## Other targets... +## +message: + @echo + @echo "****************************************************************************" + @echo "*** Building Binner Operator Plugin" + @echo "****************************************************************************" + +## +## moc +## +$(MOCSRC) or_no_widgets: $(WIDGETS) + @rm -f $@ + $(MOC) $(@:_moc.C=.h) > $@ + + +## +## Automatic dependency stuff +## +include /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/make-targets diff --git a/trunk/visit_plugins/operators/BinnerFilter/BinnerPluginInfo.C b/trunk/visit_plugins/operators/BinnerFilter/BinnerPluginInfo.C new file mode 100644 index 0000000..80ec38c --- /dev/null +++ b/trunk/visit_plugins/operators/BinnerFilter/BinnerPluginInfo.C @@ -0,0 +1,107 @@ +// ************************************************************************* // +// File: BinnerPluginInfo.C +// ************************************************************************* // + +#include +#include + +#include +#if defined(__APPLE__) +extern "C" const char *BinnerVisItPluginVersion = VERSION; +#else +extern "C" const char *VisItPluginVersion = VERSION; +#endif + +#if defined(__APPLE__) +#define GetGeneralInfo Binner_GetGeneralInfo +#endif + +// **************************************************************************** +// Function: GetGeneralInfo +// +// Purpose: +// Return a new GeneralPluginInfo for the Binner operator. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// **************************************************************************** +extern "C" GeneralOperatorPluginInfo* GetGeneralInfo() +{ + return new BinnerGeneralPluginInfo; +} + +// **************************************************************************** +// Method: BinnerGeneralPluginInfo::GetName +// +// Purpose: +// Return the name of the operator plugin. +// +// Returns: A pointer to the name of the operator plugin. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// **************************************************************************** + +char * +BinnerGeneralPluginInfo::GetName() const +{ + return "Binner"; +} + +// **************************************************************************** +// Method: BinnerGeneralPluginInfo::GetVersion +// +// Purpose: +// Return the version of the operator plugin. +// +// Returns: A pointer to the version of the operator plugin. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// **************************************************************************** + +char * +BinnerGeneralPluginInfo::GetVersion() const +{ + return "1.0"; +} + +// **************************************************************************** +// Method: BinnerGeneralPluginInfo::GetID +// +// Purpose: +// Return the id of the operator plugin. +// +// Returns: A pointer to the id of the operator plugin. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// **************************************************************************** + +char * +BinnerGeneralPluginInfo::GetID() const +{ + return "Binner_1.0"; +} +// **************************************************************************** +// Method: BinnerGeneralPluginInfo::EnabledByDefault +// +// Purpose: +// Return true if this plugin should be enabled by default; false otherwise. +// +// Returns: true/false +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// **************************************************************************** + +bool +BinnerGeneralPluginInfo::EnabledByDefault() const +{ + return true; +} diff --git a/trunk/visit_plugins/operators/BinnerFilter/BinnerPluginInfo.h b/trunk/visit_plugins/operators/BinnerFilter/BinnerPluginInfo.h new file mode 100644 index 0000000..076dd59 --- /dev/null +++ b/trunk/visit_plugins/operators/BinnerFilter/BinnerPluginInfo.h @@ -0,0 +1,85 @@ +// ************************************************************************* // +// File: BinnerPluginInfo.h +// ************************************************************************* // + +#ifndef BINNER_PLUGIN_INFO_H +#define BINNER_PLUGIN_INFO_H +#include +#include + +class Binner; + +// **************************************************************************** +// Class: BinnerPluginInfo +// +// Purpose: +// Five classes that provide all the information about an Binner operator +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +class BinnerGeneralPluginInfo : public virtual GeneralOperatorPluginInfo +{ + public: + virtual char *GetName() const; + virtual char *GetVersion() const; + virtual char *GetID() const; + virtual bool EnabledByDefault() const; +}; + +class BinnerCommonPluginInfo : public virtual CommonOperatorPluginInfo, public virtual BinnerGeneralPluginInfo +{ + public: + virtual AttributeSubject *AllocAttributes(); + virtual void CopyAttributes(AttributeSubject *to, AttributeSubject *from); +}; + +class BinnerGUIPluginInfo : public virtual GUIOperatorPluginInfo, public virtual BinnerCommonPluginInfo +{ + public: + virtual const char *GetMenuName() const; + virtual QvisPostableWindowObserver *CreatePluginWindow(int type, + AttributeSubject *attr, QvisNotepadArea *notepad); + virtual const char **XPMIconData() const; +}; + +class BinnerViewerPluginInfo : public virtual ViewerOperatorPluginInfo, public virtual BinnerCommonPluginInfo +{ + public: + virtual AttributeSubject *GetClientAtts(); + virtual AttributeSubject *GetDefaultAtts(); + virtual void SetClientAtts(AttributeSubject *atts); + virtual void GetClientAtts(AttributeSubject *atts); + + virtual void InitializeOperatorAtts(AttributeSubject *atts, + const ViewerPlot *plot, + const bool fromDefault); + virtual const char **XPMIconData() const; + + static void InitializeGlobalObjects(); + private: + static Binner *defaultAtts; + static Binner *clientAtts; +}; + +class BinnerEnginePluginInfo : public virtual EngineOperatorPluginInfo, public virtual BinnerCommonPluginInfo +{ + public: + virtual avtPluginFilter *AllocAvtPluginFilter(); +}; + +class BinnerScriptingPluginInfo : public virtual ScriptingOperatorPluginInfo, public virtual BinnerCommonPluginInfo +{ + public: + virtual void InitializePlugin(AttributeSubject *subj, void *data); + virtual void *GetMethodTable(int *nMethods); + virtual bool TypesMatch(void *pyobject); + virtual char *GetLogString(); + virtual void SetDefaults(const AttributeSubject *atts); +}; + +#endif diff --git a/trunk/visit_plugins/operators/BinnerFilter/BinnerScriptingPluginInfo.C b/trunk/visit_plugins/operators/BinnerFilter/BinnerScriptingPluginInfo.C new file mode 100644 index 0000000..f0c7802 --- /dev/null +++ b/trunk/visit_plugins/operators/BinnerFilter/BinnerScriptingPluginInfo.C @@ -0,0 +1,142 @@ +// ************************************************************************* // +// BinnerScriptingPluginInfo.C +// ************************************************************************* // +#include +#include + +#if defined(__APPLE__) +#define GetScriptingInfo Binner_GetScriptingInfo +#endif + +// **************************************************************************** +// Function: GetScriptingInfo +// +// Purpose: +// Return a new ScriptingPluginInfo for the Binner plot. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// **************************************************************************** +extern "C" ScriptingOperatorPluginInfo* GetScriptingInfo() +{ + return new BinnerScriptingPluginInfo; +} + +// **************************************************************************** +// Method: BinnerScriptingPluginInfo::InitializePlugin +// +// Purpose: +// Calls the initialization function for the plugin. +// +// Arguments: +// subj : A pointer to the plugin's state object. +// data : A pointer to data to be used by the observer function. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +void +BinnerScriptingPluginInfo::InitializePlugin(AttributeSubject *subj, + void *data) +{ + PyBinner_StartUp((Binner *)subj, data); +} + +// **************************************************************************** +// Method: BinnerScriptingPluginInfo::GetMethodTable +// +// Purpose: +// Returns a pointer to the plugin's Python method table. These methods are +// added to the top-level visit module's methods. +// +// Arguments: +// nMethods : Returns the number of methods in the method table. +// +// Returns: A pointer to the method table. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +void * +BinnerScriptingPluginInfo::GetMethodTable(int *nMethods) +{ + return PyBinner_GetMethodTable(nMethods); +} + +// **************************************************************************** +// Method: BinnerScriptingPluginInfo::TypesMatch +// +// Purpose: +// Returns whether or not the input PyObject is Binner plot attributes. +// +// Arguments: +// pyobject : A PyObject cast to void*. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +bool +BinnerScriptingPluginInfo::TypesMatch(void *pyobject) +{ + return PyBinner_Check((PyObject *)pyobject); +} + +// **************************************************************************** +// Method: BinnerScriptingPluginInfo::GetLogString +// +// Purpose: +// Gets a string representation of the current attributes. +// +// Arguments: +// val : Whether or not to log state information. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +char * +BinnerScriptingPluginInfo::GetLogString() +{ + std::string s(PyBinner_GetLogString()); + char *v = new char[s.size() + 1]; + strcpy(v, s.c_str()); + return v; +} + +// **************************************************************************** +// Method: BinnerScriptingPluginInfo::SetDefaults +// +// Purpose: +// Used to set the default values for a plugin's state object. +// +// Arguments: +// atts : The new state. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +void +BinnerScriptingPluginInfo::SetDefaults(const AttributeSubject *atts) +{ + PyBinner_SetDefaults((const Binner *)atts); +} diff --git a/trunk/visit_plugins/operators/BinnerFilter/BinnerViewerPluginInfo.C b/trunk/visit_plugins/operators/BinnerFilter/BinnerViewerPluginInfo.C new file mode 100644 index 0000000..dff9ff5 --- /dev/null +++ b/trunk/visit_plugins/operators/BinnerFilter/BinnerViewerPluginInfo.C @@ -0,0 +1,175 @@ +// ************************************************************************* // +// File: BinnerViewerPluginInfo.C +// ************************************************************************* // + +#include +#include + +#if defined(__APPLE__) +#define GetViewerInfo Binner_GetViewerInfo +#endif + +// **************************************************************************** +// Function: GetViewerInfo +// +// Purpose: +// Return a new ViewerPluginInfo for the Binner operator. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// **************************************************************************** +extern "C" ViewerOperatorPluginInfo* GetViewerInfo() +{ + BinnerViewerPluginInfo::InitializeGlobalObjects(); + return new BinnerViewerPluginInfo; +} + +// +// Storage for static data elements. +// +Binner *BinnerViewerPluginInfo::clientAtts = NULL; +Binner *BinnerViewerPluginInfo::defaultAtts = NULL; + +// **************************************************************************** +// Method: BinnerViewerPluginInfo::InitializeGlobalObjects +// +// Purpose: +// Initialize the operator atts. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// **************************************************************************** +void +BinnerViewerPluginInfo::InitializeGlobalObjects() +{ + BinnerViewerPluginInfo::clientAtts = new Binner; + BinnerViewerPluginInfo::defaultAtts = new Binner; +} + +// **************************************************************************** +// Method: BinnerViewerPluginInfo::GetClientAtts +// +// Purpose: +// Return a pointer to the viewer client attributes. +// +// Returns: A pointer to the viewer client attributes. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// **************************************************************************** + +AttributeSubject * +BinnerViewerPluginInfo::GetClientAtts() +{ + return clientAtts; +} + +// **************************************************************************** +// Method: BinnerViewerPluginInfo::GetDefaultAtts +// +// Purpose: +// Return a pointer to the viewer default attributes. +// +// Returns: A pointer to the viewer default attributes. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// **************************************************************************** + +AttributeSubject * +BinnerViewerPluginInfo::GetDefaultAtts() +{ + return defaultAtts; +} + +// **************************************************************************** +// Method: BinnerViewerPluginInfo::SetClientAtts +// +// Purpose: +// Set the viewer client attributes. +// +// Arguments: +// atts A pointer to the new client attributes. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// **************************************************************************** + +void +BinnerViewerPluginInfo::SetClientAtts(AttributeSubject *atts) +{ + *clientAtts = *(Binner *)atts; + clientAtts->Notify(); +} + +// **************************************************************************** +// Method: BinnerViewerPluginInfo::GetClientAtts +// +// Purpose: +// Get the viewer client attributes. +// +// Arguments: +// atts A pointer to return the client default attributes in. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// **************************************************************************** + +void +BinnerViewerPluginInfo::GetClientAtts(AttributeSubject *atts) +{ + *(Binner *)atts = *clientAtts; +} + +// **************************************************************************** +// Method: BinnerViewerPluginInfo::InitializeOperatorAtts +// +// Purpose: +// Initialize the operator attributes to the default attributes. +// +// Arguments: +// atts The attribute subject to initialize. +// md The metadata used to initialize. +// atts The variable name used to initialize. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// **************************************************************************** + +void +BinnerViewerPluginInfo::InitializeOperatorAtts(AttributeSubject *atts, + const ViewerPlot *plot, + const bool fromDefault) +{ + if (fromDefault) + *(Binner*)atts = *defaultAtts; + else + *(Binner*)atts = *clientAtts; +} + +// **************************************************************************** +// Method: BinnerViewerPluginInfo::XPMIconData +// +// Purpose: +// Return a pointer to the icon data. +// +// Returns: A pointer to the icon data. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// **************************************************************************** + +#include +const char ** +BinnerViewerPluginInfo::XPMIconData() const +{ + return icon_xpm; +} diff --git a/trunk/visit_plugins/operators/BinnerFilter/Binnerreplace.txt b/trunk/visit_plugins/operators/BinnerFilter/Binnerreplace.txt new file mode 100644 index 0000000..5b25591 --- /dev/null +++ b/trunk/visit_plugins/operators/BinnerFilter/Binnerreplace.txt @@ -0,0 +1 @@ +s/Binner/Binner/g diff --git a/trunk/visit_plugins/operators/BinnerFilter/Makefile b/trunk/visit_plugins/operators/BinnerFilter/Makefile new file mode 100644 index 0000000..9e06a08 --- /dev/null +++ b/trunk/visit_plugins/operators/BinnerFilter/Makefile @@ -0,0 +1,114 @@ +## +## Programs and options... +## +TOPDIR=/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64 +include $(TOPDIR)/include/make-variables +TOPDIR=/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64 +PLUGINSHOME=$(HOME)/.visit/linux-x86_64/plugins + +## +## Libraries and includes... +## +VTK_INCLUDE= \ + -I$(TOPDIR)/include/vtk \ + -I$(TOPDIR)/include/vtk/Common \ + -I$(TOPDIR)/include/vtk/Filtering \ + -I$(TOPDIR)/include/vtk/Graphics \ + -I$(TOPDIR)/include/vtk/Hybrid \ + -I$(TOPDIR)/include/vtk/IO \ + -I$(TOPDIR)/include/vtk/Imaging \ + -I$(TOPDIR)/include/vtk/Rendering +MOC=$(TOPDIR)/bin/moc +CXXFLAGS=$(CXXFLAGSORIG) $(QT_CXXFLAGS) $(PY_CXXFLAGS) +CPPFLAGS=$(CPPFLAGSORIG) $(VTK_INCLUDE) -I. -I$(TOPDIR)/include -I$(TOPDIR)/include/visit +LDFLAGS=$(LDFLAGSORIG) $(PY_LDFLAGS) -L$(PLUGINSHOME)/operators + +## +## Files... +## +PLUGINDIR=operators +PLUGINNAME=BinnerOperator + +WIDGETS=QvisBinnerWindow.h +ISRC=BinnerPluginInfo.C +COMMONSRC=BinnerPluginInfo.C BinnerCommonPluginInfo.C BinnerFilter.C +GSRC=BinnerGUIPluginInfo.C QvisBinnerWindow.C +VSRC=BinnerViewerPluginInfo.C +ESRC=BinnerEnginePluginInfo.C avtBinnerFilter.C +SSRC=BinnerScriptingPluginInfo.C PyBinner.C + +SRC=$(ISRC) $(COMMONSRC) $(GSRC) $(VSRC) $(ESRC) $(SSRC) + + +JAVASRC=Binner.java +JAVAOBJ=$(TOPDIR)/java/llnl/visit/operators/BinnerFilter.class +JAVAPLUGINFLAGS=-d $(TOPDIR)/java -classpath $(TOPDIR)/java + +SHLIB_FORCED= + +ELIBS_FOR_MACOSX_PREBINDING=$(BZIP2_LIBS) +VLIBS_FOR_MACOSX_PREBINDING=$(BZIP2_LIBS) +ILIBS= +GLIBS=-lgui -lmdserverproxy -lviewerproxy -lproxybase -lmdserverrpc -lviewerrpc -lwinutil -ldbatts -lavtexceptions -lstate -lcomm -lmisc -lplugin -lexpr -lparser -lutility -lI$(PLUGINNAME) $(QT_LDFLAGS) $(QT_LIBS) $(QUI_LIBS) $(X_LIBS) +SLIBS=-lstate -lmisc -lcomm -lutility $(PY_LIB) -lI$(PLUGINNAME) +VLIBS=-lpipeline_ser -lplotter_ser -lavtfilters_ser -lavtmath_ser -lavtview -ldbatts -lavtexceptions -lstate -lmisc -lcomm -lexpr -lparser -lutility -lvisit_vtk -llightweight_visit_vtk -lparallel_visit_vtk_ser $(VLIBS_FOR_MACOSX_PREBINDING) -lI$(PLUGINNAME) $(VTK_LIBS) +ESERLIBS=-lpipeline_ser -lplotter_ser -lavtfilters_ser -lavtmath_ser -lavtview -ldbatts -lavtexceptions -lstate -lmisc -lcomm -lexpr -lparser -lutility -lvisit_vtk -llightweight_visit_vtk -lparallel_visit_vtk_ser -lI$(PLUGINNAME) $(ELIBS_FOR_MACOSX_PREBINDING) $(VTK_LIBS) +EPARLIBS=-lpipeline_par -lplotter_par -lavtfilters_par -lavtmath_par -lavtview -ldbatts -lavtexceptions -lstate -lmisc -lcomm -lexpr -lparser -lutility -lvisit_vtk -llightweight_visit_vtk -lparallel_visit_vtk_par -lI$(PLUGINNAME) $(ELIBS_FOR_MACOSX_PREBINDING) $(VTK_LIBS) $(SHLIB_MPI_LIBS) + +IDSO=$(PLUGINSHOME)/operators/libIBinnerOperator.so +GDSO=$(PLUGINSHOME)/operators/libGBinnerOperator.so +SDSO=$(PLUGINSHOME)/operators/libSBinnerOperator.so +VDSO=$(PLUGINSHOME)/operators/libVBinnerOperator.so +ESERDSO=$(PLUGINSHOME)/operators/libEBinnerOperator_ser.so +EPARDSO=$(PLUGINSHOME)/operators/libEBinnerOperator_par.so + + +DISTRIB= + +## +## Derived objects +## +IOBJ=$(ISRC:.C=.o) +GOBJ=$(COMMONSRC:.C=.o) $(GSRC:.C=.o) +SOBJ=$(COMMONSRC:.C=.o) $(SSRC:.C=.o) +VOBJ=$(COMMONSRC:.C=.o) $(VSRC:.C=.o) +MOBJ=$(COMMONSRC:.C=.o) $(MSRC:.C=.o) $(MSPECIFICSRC:.C=_mds.o) +ESEROBJ=$(COMMONSRC:.C=.o) $(ESRC:.C=.o) +EPAROBJ=$(COMMONSRC:.C=.o) $(ESRC:.C=_par.o) + +MOCSRC = $(WIDGETS:.h=_moc.C) +MOCOBJ = $(MOCSRC:.C=.o) + +## +## Standard targets... +## +all: message $(IDSO) $(GUILIB) $(VIEWERLIB) $(ENGINELIBSER) $(ENGINELIBPAR) $(SCRIPTINGLIB) $(JAVACLASS) + +clean: + $(RM) $(IOBJ) $(COMMONOBJ) + $(RM) $(GOBJ) $(SOBJ) $(VOBJ) $(MOBJ) $(ESEROBJ) $(EPAROBJ) + $(RM) $(MOCSRC) $(MOCOBJ) + $(RM) $(IDSO) $(GDSO) $(SDSO) $(VDSO) $(MDSO) $(ESERDSO) $(EPARDSO) + $(RM) $(JAVAOBJ) + +## +## Other targets... +## +message: + @echo + @echo "****************************************************************************" + @echo "*** Building Binner Operator Plugin" + @echo "****************************************************************************" + +## +## moc +## +$(MOCSRC) or_no_widgets: $(WIDGETS) + @rm -f $@ + $(MOC) $(@:_moc.C=.h) > $@ + + +## +## Automatic dependency stuff +## +include $(TOPDIR)/include/make-targets diff --git a/trunk/visit_plugins/operators/BinnerFilter/PyBinner.C b/trunk/visit_plugins/operators/BinnerFilter/PyBinner.C new file mode 100644 index 0000000..5ca1e5c --- /dev/null +++ b/trunk/visit_plugins/operators/BinnerFilter/PyBinner.C @@ -0,0 +1,422 @@ +#include +#include +#include +#include + +// **************************************************************************** +// Module: PyBinner +// +// Purpose: +// Bin particles +// +// Note: Autogenerated by xml2python. Do not modify by hand! +// +// Programmer: xml2python +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// **************************************************************************** + +// +// This struct contains the Python type information and a Binner. +// +struct BinnerObject +{ + PyObject_HEAD + Binner *data; + bool owns; +}; + +// +// Internal prototypes +// +static PyObject *NewBinner(int); + +std::string +PyBinner_ToString(const Binner *atts, const char *prefix) +{ + std::string str; + char tmpStr[1000]; + + SNPRINTF(tmpStr, 1000, "%sdim1 = %d\n", prefix, atts->GetDim1()); + str += tmpStr; + SNPRINTF(tmpStr, 1000, "%sdim2 = %d\n", prefix, atts->GetDim2()); + str += tmpStr; + SNPRINTF(tmpStr, 1000, "%sdim3 = %d\n", prefix, atts->GetDim3()); + str += tmpStr; + return str; +} + +static PyObject * +Binner_Notify(PyObject *self, PyObject *args) +{ + BinnerObject *obj = (BinnerObject *)self; + obj->data->Notify(); + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +Binner_SetDim1(PyObject *self, PyObject *args) +{ + BinnerObject *obj = (BinnerObject *)self; + + int ival; + if(!PyArg_ParseTuple(args, "i", &ival)) + return NULL; + + // Set the dim1 in the object. + obj->data->SetDim1(ival); + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +Binner_GetDim1(PyObject *self, PyObject *args) +{ + BinnerObject *obj = (BinnerObject *)self; + PyObject *retval = PyInt_FromLong(long(obj->data->GetDim1())); + return retval; +} + +static PyObject * +Binner_SetDim2(PyObject *self, PyObject *args) +{ + BinnerObject *obj = (BinnerObject *)self; + + int ival; + if(!PyArg_ParseTuple(args, "i", &ival)) + return NULL; + + // Set the dim2 in the object. + obj->data->SetDim2(ival); + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +Binner_GetDim2(PyObject *self, PyObject *args) +{ + BinnerObject *obj = (BinnerObject *)self; + PyObject *retval = PyInt_FromLong(long(obj->data->GetDim2())); + return retval; +} + +static PyObject * +Binner_SetDim3(PyObject *self, PyObject *args) +{ + BinnerObject *obj = (BinnerObject *)self; + + int ival; + if(!PyArg_ParseTuple(args, "i", &ival)) + return NULL; + + // Set the dim3 in the object. + obj->data->SetDim3(ival); + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +Binner_GetDim3(PyObject *self, PyObject *args) +{ + BinnerObject *obj = (BinnerObject *)self; + PyObject *retval = PyInt_FromLong(long(obj->data->GetDim3())); + return retval; +} + + + +static struct PyMethodDef Binner_methods[] = { + {"Notify", Binner_Notify, METH_VARARGS}, + {"SetDim1", Binner_SetDim1, METH_VARARGS}, + {"GetDim1", Binner_GetDim1, METH_VARARGS}, + {"SetDim2", Binner_SetDim2, METH_VARARGS}, + {"GetDim2", Binner_GetDim2, METH_VARARGS}, + {"SetDim3", Binner_SetDim3, METH_VARARGS}, + {"GetDim3", Binner_GetDim3, METH_VARARGS}, + {NULL, NULL} +}; + +// +// Type functions +// + +static void +Binner_dealloc(PyObject *v) +{ + BinnerObject *obj = (BinnerObject *)v; + if(obj->owns) + delete obj->data; +} + +static int +Binner_compare(PyObject *v, PyObject *w) +{ + Binner *a = ((BinnerObject *)v)->data; + Binner *b = ((BinnerObject *)w)->data; + return (*a == *b) ? 0 : -1; +} + +static PyObject * +Binner_getattr(PyObject *self, char *name) +{ + if(strcmp(name, "dim1") == 0) + return Binner_GetDim1(self, NULL); + if(strcmp(name, "dim2") == 0) + return Binner_GetDim2(self, NULL); + if(strcmp(name, "dim3") == 0) + return Binner_GetDim3(self, NULL); + + return Py_FindMethod(Binner_methods, self, name); +} + +static int +Binner_setattr(PyObject *self, char *name, PyObject *args) +{ + // Create a tuple to contain the arguments since all of the Set + // functions expect a tuple. + PyObject *tuple = PyTuple_New(1); + PyTuple_SET_ITEM(tuple, 0, args); + Py_INCREF(args); + bool retval = false; + + if(strcmp(name, "dim1") == 0) + retval = (Binner_SetDim1(self, tuple) != NULL); + else if(strcmp(name, "dim2") == 0) + retval = (Binner_SetDim2(self, tuple) != NULL); + else if(strcmp(name, "dim3") == 0) + retval = (Binner_SetDim3(self, tuple) != NULL); + + Py_DECREF(tuple); + return retval ? 0 : -1; +} + +static int +Binner_print(PyObject *v, FILE *fp, int flags) +{ + BinnerObject *obj = (BinnerObject *)v; + fprintf(fp, "%s", PyBinner_ToString(obj->data, "").c_str()); + return 0; +} + +PyObject * +Binner_str(PyObject *v) +{ + BinnerObject *obj = (BinnerObject *)v; + return PyString_FromString(PyBinner_ToString(obj->data,"").c_str()); +} + +// +// The doc string for the class. +// +static char *Binner_Purpose = "Bin particles"; + +// +// The type description structure +// +static PyTypeObject BinnerType = +{ + // + // Type header + // + PyObject_HEAD_INIT(&PyType_Type) + 0, // ob_size + "Binner", // tp_name + sizeof(BinnerObject), // tp_basicsize + 0, // tp_itemsize + // + // Standard methods + // + (destructor)Binner_dealloc, // tp_dealloc + (printfunc)Binner_print, // tp_print + (getattrfunc)Binner_getattr, // tp_getattr + (setattrfunc)Binner_setattr, // tp_setattr + (cmpfunc)Binner_compare, // tp_compare + (reprfunc)0, // tp_repr + // + // Type categories + // + 0, // tp_as_number + 0, // tp_as_sequence + 0, // tp_as_mapping + // + // More methods + // + 0, // tp_hash + 0, // tp_call + (reprfunc)Binner_str, // tp_str + 0, // tp_getattro + 0, // tp_setattro + 0, // tp_as_buffer + Py_TPFLAGS_CHECKTYPES, // tp_flags + Binner_Purpose, // tp_doc + 0, // tp_traverse + 0, // tp_clear + 0, // tp_richcompare + 0 // tp_weaklistoffset +}; + +// +// Helper functions for object allocation. +// + +static Binner *defaultAtts = 0; +static Binner *currentAtts = 0; + +static PyObject * +NewBinner(int useCurrent) +{ + BinnerObject *newObject; + newObject = PyObject_NEW(BinnerObject, &BinnerType); + if(newObject == NULL) + return NULL; + if(useCurrent && currentAtts != 0) + newObject->data = new Binner(*currentAtts); + else if(defaultAtts != 0) + newObject->data = new Binner(*defaultAtts); + else + newObject->data = new Binner; + newObject->owns = true; + return (PyObject *)newObject; +} + +static PyObject * +WrapBinner(const Binner *attr) +{ + BinnerObject *newObject; + newObject = PyObject_NEW(BinnerObject, &BinnerType); + if(newObject == NULL) + return NULL; + newObject->data = (Binner *)attr; + newObject->owns = false; + return (PyObject *)newObject; +} + +/////////////////////////////////////////////////////////////////////////////// +// +// Interface that is exposed to the VisIt module. +// +/////////////////////////////////////////////////////////////////////////////// + +PyObject * +Binner_new(PyObject *self, PyObject *args) +{ + int useCurrent = 0; + if (!PyArg_ParseTuple(args, "i", &useCurrent)) + { + if (!PyArg_ParseTuple(args, "")) + return NULL; + else + PyErr_Clear(); + } + + return (PyObject *)NewBinner(useCurrent); +} + +// +// Plugin method table. These methods are added to the visitmodule's methods. +// +static PyMethodDef BinnerMethods[] = { + {"Binner", Binner_new, METH_VARARGS}, + {NULL, NULL} /* Sentinel */ +}; + +static Observer *BinnerObserver = 0; + +std::string +PyBinner_GetLogString() +{ + std::string s("Binner = Binner()\n"); + if(currentAtts != 0) + s += PyBinner_ToString(currentAtts, "Binner."); + return s; +} + +static void +PyBinner_CallLogRoutine(Subject *subj, void *data) +{ + Binner *atts = (Binner *)subj; + typedef void (*logCallback)(const std::string &); + logCallback cb = (logCallback)data; + + if(cb != 0) + { + std::string s("Binner = Binner()\n"); + s += PyBinner_ToString(currentAtts, "Binner."); + cb(s); + } +} + +void +PyBinner_StartUp(Binner *subj, void *data) +{ + if(subj == 0) + return; + + currentAtts = subj; + PyBinner_SetDefaults(subj); + + // + // Create the observer that will be notified when the attributes change. + // + if(BinnerObserver == 0) + { + BinnerObserver = new ObserverToCallback(subj, + PyBinner_CallLogRoutine, (void *)data); + } + +} + +void +PyBinner_CloseDown() +{ + delete defaultAtts; + defaultAtts = 0; + delete BinnerObserver; + BinnerObserver = 0; +} + +PyMethodDef * +PyBinner_GetMethodTable(int *nMethods) +{ + *nMethods = 1; + return BinnerMethods; +} + +bool +PyBinner_Check(PyObject *obj) +{ + return (obj->ob_type == &BinnerType); +} + +Binner * +PyBinner_FromPyObject(PyObject *obj) +{ + BinnerObject *obj2 = (BinnerObject *)obj; + return obj2->data; +} + +PyObject * +PyBinner_NewPyObject() +{ + return NewBinner(0); +} + +PyObject * +PyBinner_WrapPyObject(const Binner *attr) +{ + return WrapBinner(attr); +} + +void +PyBinner_SetDefaults(const Binner *atts) +{ + if(defaultAtts) + delete defaultAtts; + + defaultAtts = new Binner(*atts); +} + diff --git a/trunk/visit_plugins/operators/BinnerFilter/PyBinner.h b/trunk/visit_plugins/operators/BinnerFilter/PyBinner.h new file mode 100644 index 0000000..d6bccd7 --- /dev/null +++ b/trunk/visit_plugins/operators/BinnerFilter/PyBinner.h @@ -0,0 +1,21 @@ +#ifndef PY_BINNER_H +#define PY_BINNER_H +#include +#include + +// +// Functions exposed to the VisIt module. +// +void PyBinner_StartUp(Binner *subj, void *data); +void PyBinner_CloseDown(); +PyMethodDef *PyBinner_GetMethodTable(int *nMethods); +bool PyBinner_Check(PyObject *obj); +Binner *PyBinner_FromPyObject(PyObject *obj); +PyObject *PyBinner_NewPyObject(); +PyObject *PyBinner_WrapPyObject(const Binner *attr); +void PyBinner_SetDefaults(const Binner *atts); +std::string PyBinner_GetLogString(); +std::string PyBinner_ToString(const Binner *, const char *); + +#endif + diff --git a/trunk/visit_plugins/operators/BinnerFilter/QvisBinnerWindow.C b/trunk/visit_plugins/operators/BinnerFilter/QvisBinnerWindow.C new file mode 100644 index 0000000..56772ea --- /dev/null +++ b/trunk/visit_plugins/operators/BinnerFilter/QvisBinnerWindow.C @@ -0,0 +1,279 @@ +#include "QvisBinnerWindow.h" + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +using std::string; + +// **************************************************************************** +// Method: QvisBinnerWindow::QvisBinnerWindow +// +// Purpose: +// Constructor +// +// Programmer: xml2window +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +QvisBinnerWindow::QvisBinnerWindow(const int type, + Binner *subj, + const char *caption, + const char *shortName, + QvisNotepadArea *notepad) + : QvisOperatorWindow(type,subj, caption, shortName, notepad) +{ + atts = subj; +} + + +// **************************************************************************** +// Method: QvisBinnerWindow::~QvisBinnerWindow +// +// Purpose: +// Destructor +// +// Programmer: xml2window +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +QvisBinnerWindow::~QvisBinnerWindow() +{ +} + + +// **************************************************************************** +// Method: QvisBinnerWindow::CreateWindowContents +// +// Purpose: +// Creates the widgets for the window. +// +// Programmer: xml2window +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +void +QvisBinnerWindow::CreateWindowContents() +{ + QGridLayout *mainLayout = new QGridLayout(topLayout, 3,2, 10, "mainLayout"); + + + dim1Label = new QLabel("dim1", central, "dim1Label"); + mainLayout->addWidget(dim1Label,0,0); + dim1 = new QLineEdit(central, "dim1"); + connect(dim1, SIGNAL(returnPressed()), + this, SLOT(dim1ProcessText())); + mainLayout->addWidget(dim1, 0,1); + + dim2Label = new QLabel("dim2", central, "dim2Label"); + mainLayout->addWidget(dim2Label,1,0); + dim2 = new QLineEdit(central, "dim2"); + connect(dim2, SIGNAL(returnPressed()), + this, SLOT(dim2ProcessText())); + mainLayout->addWidget(dim2, 1,1); + + dim3Label = new QLabel("dim3", central, "dim3Label"); + mainLayout->addWidget(dim3Label,2,0); + dim3 = new QLineEdit(central, "dim3"); + connect(dim3, SIGNAL(returnPressed()), + this, SLOT(dim3ProcessText())); + mainLayout->addWidget(dim3, 2,1); + +} + + +// **************************************************************************** +// Method: QvisBinnerWindow::UpdateWindow +// +// Purpose: +// Updates the widgets in the window when the subject changes. +// +// Programmer: xml2window +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +void +QvisBinnerWindow::UpdateWindow(bool doAll) +{ + QString temp; + double r; + + for(int i = 0; i < atts->NumAttributes(); ++i) + { + if(!doAll) + { + if(!atts->IsSelected(i)) + { + continue; + } + } + + const double *dptr; + const float *fptr; + const int *iptr; + const char *cptr; + const unsigned char *uptr; + const string *sptr; + QColor tempcolor; + switch(i) + { + case 0: //dim1 + temp.sprintf("%d", atts->GetDim1()); + dim1->setText(temp); + break; + case 1: //dim2 + temp.sprintf("%d", atts->GetDim2()); + dim2->setText(temp); + break; + case 2: //dim3 + temp.sprintf("%d", atts->GetDim3()); + dim3->setText(temp); + break; + } + } +} + + +// **************************************************************************** +// Method: QvisBinnerWindow::GetCurrentValues +// +// Purpose: +// Gets values from certain widgets and stores them in the subject. +// +// Programmer: xml2window +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +void +QvisBinnerWindow::GetCurrentValues(int which_widget) +{ + bool okay, doAll = (which_widget == -1); + QString msg, temp; + + // Do dim1 + if(which_widget == 0 || doAll) + { + temp = dim1->displayText().simplifyWhiteSpace(); + okay = !temp.isEmpty(); + if(okay) + { + int val = temp.toInt(&okay); + atts->SetDim1(val); + } + + if(!okay) + { + msg.sprintf("The value of dim1 was invalid. " + "Resetting to the last good value of %d.", + atts->GetDim1()); + Message(msg); + atts->SetDim1(atts->GetDim1()); + } + } + + // Do dim2 + if(which_widget == 1 || doAll) + { + temp = dim2->displayText().simplifyWhiteSpace(); + okay = !temp.isEmpty(); + if(okay) + { + int val = temp.toInt(&okay); + atts->SetDim2(val); + } + + if(!okay) + { + msg.sprintf("The value of dim2 was invalid. " + "Resetting to the last good value of %d.", + atts->GetDim2()); + Message(msg); + atts->SetDim2(atts->GetDim2()); + } + } + + // Do dim3 + if(which_widget == 2 || doAll) + { + temp = dim3->displayText().simplifyWhiteSpace(); + okay = !temp.isEmpty(); + if(okay) + { + int val = temp.toInt(&okay); + atts->SetDim3(val); + } + + if(!okay) + { + msg.sprintf("The value of dim3 was invalid. " + "Resetting to the last good value of %d.", + atts->GetDim3()); + Message(msg); + atts->SetDim3(atts->GetDim3()); + } + } + +} + + +// +// Qt Slot functions +// + + +void +QvisBinnerWindow::dim1ProcessText() +{ + GetCurrentValues(0); + Apply(); +} + + +void +QvisBinnerWindow::dim2ProcessText() +{ + GetCurrentValues(1); + Apply(); +} + + +void +QvisBinnerWindow::dim3ProcessText() +{ + GetCurrentValues(2); + Apply(); +} + + diff --git a/trunk/visit_plugins/operators/BinnerFilter/QvisBinnerWindow.h b/trunk/visit_plugins/operators/BinnerFilter/QvisBinnerWindow.h new file mode 100644 index 0000000..baaaf84 --- /dev/null +++ b/trunk/visit_plugins/operators/BinnerFilter/QvisBinnerWindow.h @@ -0,0 +1,67 @@ +#ifndef QVISBINNERWINDOW_H +#define QVISBINNERWINDOW_H + +#include +#include + +class Binner; +class QLabel; +class QCheckBox; +class QLineEdit; +class QSpinBox; +class QVBox; +class QButtonGroup; +class QvisColorTableButton; +class QvisOpacitySlider; +class QvisColorButton; +class QvisLineStyleWidget; +class QvisLineWidthWidget; +class QvisVariableButton; + +// **************************************************************************** +// Class: QvisBinnerWindow +// +// Purpose: +// Defines QvisBinnerWindow class. +// +// Notes: This class was automatically generated! + +// Programmer: xml2window +// Creation: Thu Mar 30 12:05:26 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +class QvisBinnerWindow : public QvisOperatorWindow +{ + Q_OBJECT + public: + QvisBinnerWindow(const int type, + Binner *subj, + const char *caption = 0, + const char *shortName = 0, + QvisNotepadArea *notepad = 0); + virtual ~QvisBinnerWindow(); + virtual void CreateWindowContents(); + protected: + void UpdateWindow(bool doAll); + virtual void GetCurrentValues(int which_widget); + private slots: + void dim1ProcessText(); + void dim2ProcessText(); + void dim3ProcessText(); + private: + QLineEdit *dim1; + QLineEdit *dim2; + QLineEdit *dim3; + QLabel *dim1Label; + QLabel *dim2Label; + QLabel *dim3Label; + + Binner *atts; +}; + + + +#endif diff --git a/trunk/visit_plugins/operators/BinnerFilter/avtBinnerFilter.C b/trunk/visit_plugins/operators/BinnerFilter/avtBinnerFilter.C new file mode 100644 index 0000000..e5049c6 --- /dev/null +++ b/trunk/visit_plugins/operators/BinnerFilter/avtBinnerFilter.C @@ -0,0 +1,350 @@ +// ************************************************************************* // +// File: avtBinnerFilter.C +// ************************************************************************* // + +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include + +#ifdef PARALLEL_IO +#include +#include +#endif + + +// **************************************************************************** +// Method: avtBinnerFilter constructor +// +// Programmer: cristina -- generated by xml2avt +// Creation: Thu Mar 16 15:04:17 PST 2006 +// +// **************************************************************************** + +avtBinnerFilter::avtBinnerFilter() +{ + nprocs = 1; + #ifdef PARALLEL_IO + nprocs = PAR_Size(); + #endif + sgrid = NULL; + dims[0] = 10; + dims[1] = 10; + dims[2] = 10; + +} + + +// **************************************************************************** +// Method: avtBinnerFilter destructor +// +// Programmer: cristina -- generated by xml2avt +// Creation: Thu Mar 16 15:04:17 PST 2006 +// +// Modifications: +// +// **************************************************************************** + +avtBinnerFilter::~avtBinnerFilter() +{ +} + + +// **************************************************************************** +// Method: avtBinnerFilter::Create +// +// Programmer: cristina -- generated by xml2avt +// Creation: Thu Mar 16 15:04:17 PST 2006 +// +// **************************************************************************** + +avtFilter * +avtBinnerFilter::Create() +{ + return new avtBinnerFilter(); +} + + +// **************************************************************************** +// Method: avtBinnerFilter::SetAtts +// +// Purpose: +// Sets the state of the filter based on the attribute object. +// +// Arguments: +// a The attributes to use. +// +// Programmer: cristina -- generated by xml2avt +// Creation: Thu Mar 16 15:04:17 PST 2006 +// +// **************************************************************************** + +void +avtBinnerFilter::SetAtts(const AttributeGroup *a) +{ + atts = *(const Binner*)a; +} + + + +// **************************************************************************** +// Method: avtBinnerFilter::Equivalent +// +// Purpose: +// Returns true if creating a new avtBinnerFilter with the given +// parameters would result in an equivalent avtBinnerFilter. +// +// Programmer: cristina -- generated by xml2avt +// Creation: Thu Mar 16 15:04:17 PST 2006 +// +// **************************************************************************** + +bool +avtBinnerFilter::Equivalent(const AttributeGroup *a) +{ + return (atts == *(Binner*)a); +} + + +// **************************************************************************** +// Method: avtBinnerFilter::PreExecute +// +// Purpose: +// Called before "Execute". This will set up the range's we are operating +// on and the data structures we use to count the density. +// +// Programmer: +// Creation: +// +// **************************************************************************** + +void +avtBinnerFilter::PreExecute(void) + +{ + cout << "In PreExecute\n"; + avtStreamer::PreExecute(); + ndims = GetInput()->GetInfo().GetAttributes().GetSpatialDimension(); + if (ndims < 2) { + EXCEPTION2(InvalidDimensionsException, "Binner", " <2D"); + } + dims[0] = atts.GetDim1()+1; + dims[1] = atts.GetDim2()+1; + if (ndims == 2) + dims[2] == 1; + else + dims[2] = atts.GetDim3()+1; + grid_size = dims[0]*dims[1]*dims[2]; + data = (float *) calloc (grid_size, sizeof(float)); + avtDataset_p input = GetTypedInput(); + avtDatasetExaminer::GetSpatialExtents(input, extents); +#ifdef PARALLEL_IO + UnifyMinMax(extents, 2*ndims, 0); +#endif + for (int i=0; i < ndims; i++){ + cout << "spatial extents: " << extents[2*i+1] << " " << extents[2*i] << "\n"; + } +} + +// **************************************************************************** +// Method: avtBinnerFilter::ExecuteData +// +// Purpose: +// Sends the specified input and output through the Binner filter. +// +// Arguments: +// in_ds The input dataset. +// The domain number. +// The label. +// +// Returns: The output dataset. +// +// Programmer: cristina -- generated by xml2avt +// Creation: Thu Mar 16 15:04:17 PST 2006 +// +// **************************************************************************** + +vtkDataSet * +avtBinnerFilter::ExecuteData(vtkDataSet *in_ds, int domain, std::string) +{ + +cout << "domain: " << domain << "\n"; + float x[3]; + + int numvar = GetInput()->GetInfo().GetAttributes().GetNumberOfVariables(); + cout << "numvar: " << numvar << "\n"; + for (int i=0; i < numvar; i++){ + cout << GetInput()->GetInfo().GetAttributes().GetVariableName(i) << "\n"; + } + for (int i=0; i < ndims; i++){ + step[i] = (extents[2*i+1] - extents[2*i])/(dims[i]-1); + } + + for (int i=0; i < ndims; i++){ + extents[2*i] = extents[2*i] - 2*step[i]; + extents[2*i+1] = extents[2*i+1] + 2*step[i]; + } + + for (int i=0; i < ndims; i++){ + step[i] = (extents[2*i+1] - extents[2*i])/(dims[i]-1); + } + + vtkPointData *inPD = in_ds->GetPointData(); + vtkDataArray *in_data = inPD->GetScalars(); + vtkPointData *outPD = sgrid->GetPointData(); + + vtkIdType npoints = in_ds->GetNumberOfPoints(); + cout << "I have data: npoints: " << in_data->GetName() << " " << npoints << "\n"; + int bin[3]; + float delta[3]; + for (vtkIdType i = 0; i < npoints; i++) { + in_ds->GetPoint(i, x); + + /* find the corresponding bin */ + for (int j=0; j < ndims; j++){ + delta[j] = (x[j] - extents[2*j])/step[j]; + bin[j] = (int) delta[j]; + } + if (ndims == 2){ + bin[2] = 0; + } + + /* 5 contribution */ + data[bin[0]+ dims[0] * ( dims[1] * bin[2] + bin[1])] += 1; + } + float check_nptlc = 0.0; + for (vtkIdType i=0; i < grid_size; i++){ + check_nptlc += data[i]; + } + cout << "nptlc " << check_nptlc << "\n"; + cout << "npoints " << npoints << "\n"; + return NULL; +} + +// **************************************************************************** +// Method: avtBinnerFilter::RefashionDataObjectInfo +// +// Purpose: +// Tells the output that +// +// **************************************************************************** + +void +avtBinnerFilter::RefashionDataObjectInfo(void) +{ + cout << "Refashioning\n"; + avtDataAttributes &inAtts = GetInput()->GetInfo().GetAttributes(); + avtDataAttributes &outAtts = GetOutput()->GetInfo().GetAttributes(); + if (pipelineVariable != NULL){ + outAtts.AddVariable(pipelineVariable); + outAtts.SetVariableDimension(1, pipelineVariable); + outAtts.SetVariableType(AVT_SCALAR_VAR, pipelineVariable); + outAtts.SetCentering(AVT_ZONECENT, pipelineVariable); + outAtts.SetActiveVariable(pipelineVariable); + outAtts.GetTrueDataExtents(pipelineVariable)->Clear(); + outAtts.GetTrueDataExtents(pipelineVariable)->Set(drange); + outAtts.GetCurrentDataExtents()->Clear(); + outAtts.GetCurrentDataExtents()->Set(drange); + } + outAtts.GetEffectiveSpatialExtents()->Set(extents); + outAtts.GetCumulativeCurrentSpatialExtents()->Set(extents); + outAtts.GetCumulativeTrueSpatialExtents()->Set(extents); + outAtts.GetTrueSpatialExtents()->Set(extents); + outAtts.SetSpatialDimension(inAtts.GetSpatialDimension()); + outAtts.SetTopologicalDimension(inAtts.GetSpatialDimension()); +} + +// **************************************************************************** +// Method: avtBinnerFilter::VerifyInput +// +// Purpose: +// Verifies the input +// **************************************************************************** +void +avtBinnerFilter::VerifyInput(void) +{ + cout << "Checking Spatial Dimensions: " << GetInput()->GetInfo().GetAttributes().GetSpatialDimension() << "\n"; + cout << "Checking Topological Dimensions: " << GetInput()->GetInfo().GetAttributes().GetTopologicalDimension() << "\n"; + +} + + +void +avtBinnerFilter::PostExecute(void) +{ + avtPluginStreamer::PostExecute(); + /* need to put the data together */ +#ifdef PARALLEL_IO + cout << "In PostExecute : " << PAR_Rank() << "\n"; +#endif + vtkFloatArray *out_data = vtkFloatArray::New(); + out_data->Resize(grid_size); + out_data->FillComponent(0,0.0); +#ifdef PARALLEL_IO + SumFloatArrayAcrossAllProcessors(data, out_data->GetPointer(0), grid_size); +#else + memcpy(out_data->GetPointer(0), data, grid_size*sizeof(float)); +#endif + // Create the structured grid. + float x[3]; +#ifdef PARALLEL_IO + cout << "making the grid: " << PAR_Rank() << "\n"; +#endif + sgrid = vtkStructuredGrid::New(); + sgrid->SetDimensions(dims); + + vtkPoints *points = vtkPoints::New(); + points->Allocate(grid_size); + + + for ( int k=0; kInsertNextPoint(x); + } + } + } + sgrid->SetPoints(points); + points->Delete(); + + out_data->SetName(pipelineVariable); + sgrid->GetPointData()->SetScalars(out_data); + sgrid->GetScalarRange(dataRange); + drange[0] = (double) dataRange[0]; + drange[1] = (double) dataRange[1]; +#ifdef PARALLEL_IO + UnifyMinMax(drange, 2, 0); +#endif +cout << "drange: " << drange[0] << " " << drange[1] << "\n"; + out_data->Delete(); + out_data = NULL; + sgrid->Update(); +#ifdef PARALLEL_IO + if (PAR_Rank() == 0){ +#endif + avtDataTree_p tree = new avtDataTree(); + tree = new avtDataTree(sgrid, 0); + SetOutputDataTree(tree); + sgrid->Delete(); + sgrid = NULL; +#ifdef PARALLEL_IO + } +#endif + RefashionDataObjectInfo(); +} diff --git a/trunk/visit_plugins/operators/BinnerFilter/avtBinnerFilter.h b/trunk/visit_plugins/operators/BinnerFilter/avtBinnerFilter.h new file mode 100644 index 0000000..93d96a7 --- /dev/null +++ b/trunk/visit_plugins/operators/BinnerFilter/avtBinnerFilter.h @@ -0,0 +1,64 @@ +// ************************************************************************* // +// File: avtBinnerFilter.h +// ************************************************************************* // + +#ifndef AVT_Binner_FILTER_H +#define AVT_Binner_FILTER_H + + +#include +#include + + + +class vtkDataSet; +class vtkStructuredGrid; + +// **************************************************************************** +// Class: avtBinnerFilter +// +// Purpose: +// A plugin operator for Binner. +// +// Programmer: cristina -- generated by xml2avt +// Creation: Thu Mar 16 15:04:17 PST 2006 +// +// **************************************************************************** + +class avtBinnerFilter : public avtPluginStreamer +{ + public: + avtBinnerFilter(); + virtual ~avtBinnerFilter(); + + static avtFilter *Create(); + + virtual const char *GetType(void) { return "avtBinnerFilter"; }; + virtual const char *GetDescription(void) + { return "Binner"; }; + + virtual void SetAtts(const AttributeGroup*); + virtual bool Equivalent(const AttributeGroup*); + + protected: + Binner atts; + virtual void RefashionDataObjectInfo(void); + virtual void VerifyInput(void); + virtual vtkDataSet *ExecuteData(vtkDataSet *, int, std::string); + virtual void PostExecute(void); + virtual void PreExecute(void); + private: + vtkStructuredGrid *sgrid; + int nprocs; + int ndims; + int grid_size; + int dims[3]; + double extents[6]; + float step[3]; + float dataRange[2]; + double drange[2]; + float *data; +}; + + +#endif diff --git a/trunk/visit_plugins/operators/BinnerFilter/icon.xpm b/trunk/visit_plugins/operators/BinnerFilter/icon.xpm new file mode 100644 index 0000000..b8f3b5b --- /dev/null +++ b/trunk/visit_plugins/operators/BinnerFilter/icon.xpm @@ -0,0 +1,519 @@ +/* XPM */ +static const char *icon_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 256 256 256 2", +/* colors */ +".. c #000000", +".# c #030b01", +".a c #061101", +".b c #081502", +".c c #0b1b02", +".d c #101f03", +".e c #0e2103", +".f c #132b04", +".g c #112503", +".h c #1a3505", +".i c #223b05", +".j c #303f04", +".k c #274606", +".l c #394c05", +".m c #375606", +".n c #2c5308", +".o c #3a680c", +".p c #27661a", +".q c #791428", +".r c #771b37", +".s c #6b1b37", +".t c #7a0f1f", +".u c #5b2c59", +".v c #5c264e", +".w c #5b356b", +".x c #583366", +".y c #5b3973", +".z c #573b78", +".A c #4e3972", +".B c #692348", +".C c #672b57", +".D c #772347", +".E c #762b58", +".F c #71305d", +".G c #63356b", +".H c #6b3163", +".I c #673468", +".J c #633973", +".K c #633d7b", +".L c #6b3973", +".M c #6a3c7a", +".N c #773367", +".O c #763b77", +".P c #6e2f60", +".Q c #721f40", +".R c #404d04", +".S c #475705", +".T c #515e05", +".U c #496507", +".V c #556906", +".W c #5a7508", +".X c #49780e", +".Y c #667706", +".Z c #6b7704", +".0 c #516b33", +".1 c #6f417b", +".2 c #6f716e", +".3 c #5c5d61", +".4 c #6e3f80", +".5 c #553f80", +".6 c #4b4386", +".7 c #584387", +".8 c #574b96", +".9 c #4f4b96", +"#. c #5a52a5", +"## c #5c58b1", +"#a c #6b4183", +"#b c #664488", +"#c c #684b96", +"#d c #764487", +"#e c #774b96", +"#f c #735398", +"#g c #6754a7", +"#h c #685bb6", +"#i c #7853a6", +"#j c #785bb6", +"#k c #724fa0", +"#l c #7464b5", +"#m c #7764c7", +"#n c #7269d0", +"#o c #7971e2", +"#p c #31902d", +"#q c #34a838", +"#r c #1d9036", +"#s c #2db347", +"#t c #13ab4c", +"#u c #27d35d", +"#v c #548915", +"#w c #4a9525", +"#x c #50ad2f", +"#y c #688609", +"#z c #768806", +"#A c #70950e", +"#B c #75a814", +"#C c #6cb22a", +"#D c #67952f", +"#E c #65a855", +"#F c #68cc33", +"#G c #59d854", +"#H c #3dc13e", +"#I c #3ff293", +"#J c #8a0206", +"#K c #870b18", +"#L c #970205", +"#M c #960b17", +"#N c #90101d", +"#O c #871428", +"#P c #871b36", +"#Q c #961427", +"#R c #971b36", +"#S c #900f20", +"#T c #a70205", +"#U c #a70b17", +"#V c #b70205", +"#W c #b50d16", +"#X c #a71427", +"#Y c #a71b37", +"#Z c #b71b38", +"#0 c #b61326", +"#1 c #a02339", +"#2 c #862447", +"#3 c #872b56", +"#4 c #972447", +"#5 c #972b57", +"#6 c #8f3259", +"#7 c #863468", +"#8 c #873b77", +"#9 c #973467", +"a. c #963b78", +"a# c #8e2f60", +"aa c #a72447", +"ab c #a72b57", +"ac c #b72447", +"ad c #b62b57", +"ae c #b03555", +"af c #a73467", +"ag c #a63b77", +"ah c #b73467", +"ai c #b73b76", +"aj c #ab2f60", +"ak c #9e1f40", +"al c #8e4478", +"am c #b14775", +"an c #b54459", +"ao c #c70204", +"ap c #d70204", +"aq c #ce0d17", +"ar c #ce172f", +"as c #d12734", +"at c #e70205", +"au c #fe0204", +"av c #f50508", +"aw c #fa0b16", +"ax c #f01117", +"ay c #f91626", +"az c #ec1930", +"aA c #f82832", +"aB c #c72346", +"aC c #d12b51", +"aD c #c73567", +"aE c #c73c77", +"aF c #d7386f", +"aG c #ed2b4e", +"aH c #e63668", +"aI c #d81f40", +"aJ c #cd4775", +"aK c #fb4951", +"aL c #f14c70", +"aM c #e85d68", +"aN c #943f80", +"aO c #864487", +"aP c #864b97", +"aQ c #974487", +"aR c #964b97", +"aS c #8f5595", +"aT c #8754a7", +"aU c #885ab6", +"aV c #9654a7", +"aW c #975bb6", +"aX c #8d4fa0", +"aY c #9864b9", +"aZ c #8f68ae", +"a0 c #a64487", +"a1 c #a74b96", +"a2 c #b64588", +"a3 c #b74b96", +"a4 c #af5496", +"a5 c #a655a7", +"a6 c #a75bb6", +"a7 c #b755a7", +"a8 c #b65bb7", +"a9 c #b04fa0", +"b. c #a764b9", +"b# c #b16bb1", +"ba c #a46797", +"bb c #8864c6", +"bc c #9764c6", +"bd c #986bd5", +"be c #8c70d5", +"bf c #9077ec", +"bg c #a765c7", +"bh c #a76bd6", +"bi c #b565c6", +"bj c #b074d3", +"bk c #a675e5", +"bl c #ab79e9", +"bm c #9e5fc0", +"bn c #c74587", +"bo c #c64b98", +"bp c #d24c8e", +"bq c #c555a6", +"br c #c759ad", +"bs c #ce6bb2", +"bt c #ea568b", +"bu c #f46b91", +"bv c #eb71ac", +"bw c #d16b93", +"bx c #cb77ca", +"by c #e17cc5", +"bz c #cf3f80", +"bA c #879706", +"bB c #8b9709", +"bC c #97a706", +"bD c #8eb00e", +"bE c #a7b705", +"bF c #aab409", +"bG c #94b22a", +"bH c #89a765", +"bI c #95c715", +"bJ c #b1c90b", +"bK c #a2db28", +"bL c #9ae455", +"bM c #c9d509", +"bN c #d3e70e", +"bO c #ebf10b", +"bP c #daea2c", +"bQ c #dff24c", +"bR c #8e928d", +"bS c #adafad", +"bT c #a692ac", +"bU c #9286f8", +"bV c #b48bd0", +"bW c #b18def", +"bX c #aea2e4", +"bY c #e58ab0", +"bZ c #cf8cd3", +"b0 c #cc93e7", +"b1 c #cfabd5", +"b2 c #d2adf0", +"b3 c #ea8fd1", +"b4 c #ebb0ed", +"b5 c #eba4da", +"b6 c #d0d0d1", +"b7 c #eeccf6", +"b8 c #e1d6f3", +"b9 c #b2d2a5", +/* pixels */ +"aWbjb4aW.7.5.A#ibVbf.y.ybbaU#i#c.5.A#cb8.z#fbVa6b0a8bhbgaW#i.4.xbkb0bmaVaX#k#k#e.1.K.w.1b4aW.waPaO.O.ubmaT.4.4.w.x.1b4bgaT#baUaTbhb4b0aW#k.4.xa6aV#d.y.xaPaQ#8a3a9aXaX.4.O.x.1b8.H.H.u.1baa4.v.HbZa7a4#8.F.Ca3a2a0#9.N.B.Ca.......................aBaBaa#P.rae#X..............................atao#Janazar#Xb6aGadab#2.r#2b4...q#O#YaB............#Kar#0#Q#O#KbY....................#U#M.t#MaA..........................................................#L#Jas..................................................................", +".6bjbjaW#d#c#g#maT#d.w.4bf.4bhbcaU#i.8bb......aVaVbhb4b0aV#e.5.xbcbcaTaT.4.J.J.4.y.x#daZaYaS.....I.ubhbhaWaX.4.z#daZbmaT.4.y.4.4bhb0bhaT#k.5.w#i#e.4.xbaaW#8.Pa9a1.O.4.4.u.1b#bg.....N#8.H.C.Fa7a1a1a.#7.C.Ha.a.a.#7.C.FbT#3..........aIac#O........#R#P#Pamar#S#Q..............................#L#0aAbvar#QaGb3aC#P.r#6bw....aGaB#R..................#S#O#OaC........................#M#Wax.....................#auavao#L................................................................avao..................................", +".8a6aV#e.y.xaWaT.4.A.yaSblbkbhbdaU#i#b.y........aObibjb.aT#d.y.waX#i.4.4.y.y.4.J.4.4aPaW#eb7a6aT.4bhb7bjaV#e.1.w....ad#b.y.ybV.ybmbcaT#e.4.A.yaT.4.x#bb.aP.Pbybxa1bia6aR.4aR..#Z..............#ZaN#8#7.C.FbV#U.N.E.C.Eala7#9........a3a3aQ#7..........#4aa#0#Xar#O.....#..aiag........aIar#Qazar#X..aAaz#Yah#5aH#Z#Raa#4....aGbuaB#Y.q....................ar..............ayawaq#L..............................auaAaw#V#L.............................................................#aKawao#L................................", +"#gbb#e.4.x#d.4#b.J.ybTbVbhb7b0bc#j#k#b.7.4........aWaWaT#e.z.x#aaT.7bg.w.1#daT.M.1.w.x.1bZbZbgaX.4bjb0bjaT#c.y.yaPaR.O#d#baTbgaUaUaT#e#b.y.JbTaWaWaT#daY#ea7bxbra8b4bxaR.O.I.OaB#O....bnag.E....#O.H.C.CaSa1bqb4.P.Eala0#6am......bqbybra0#7.C............aGaGar#Q....btbzaEaf#3.B..aGbtar#Q#Rar#Q#Qarbzbtai#5.D#Y#O#4aC....aHaG#Z#P.q..................................awaKaGao#M#U..............................auat#T#L............................................................auavap#V#J................................", +"bT.J.M.x#fbV.L.J.yaXbmbkblb2b2bcaT#e.4.K#b........aT#e#e.4.x.1b6.4bjbhbmaX.4.w#c.7.G#daXbhb0biaP.4bmbma6a5aXaO.4aTaP.O.u.J.MaT#e#b#e.4.w.1aZb0bibgaV#e.4.4a1a1aQa5a8aRal.H.uaOaraCaabvboaf.E.E........#8#La3bsbsbq#7.E.C#7........bobybsa.#7.B#7..........aGaL#Z#K...#bpbyaiaf#2.Bbpbpai#9.B#1#X.t#1..bpbuah#4.D#3#Pbu......aBac#1.q#1..................................axaxaq#T#K#W............................axaKat#V#J............................................................apap#V#L#W................................", +"beaSaWbxa6#d.x.Mbb#i.8bhblbkbdaY#e#c.5.z.7#i.........4.4.x.1aZbm.5bxb2aW#i.4.w.4#b#ebb.4bmbmbgaWaXbia8a6a5aRaO.4.xaO.L.xaRar.K#b.x.y.5.y#faYbhb7bjaTaP.4.yaQaN#8a5aRaO.1.u.Ia5bza3a0#7bna#.E#3............a0boa0a1aN.N.Ca0........a3a2a0#7.E.Cal#R........asar#X.qaraEbpaJaf#3.B.Dbpbyama#.DaC#N#Qb5..aEah#5#2.s#5aB........#Y#R#O.qaM..................................aqao#U#K#Uaz............................aAayap#T#Jauat#V........................................................#L#J#0..................................", +"....aVaVaO.L.waV#c.7.5bcbcbcaU#k#b.z.y.K#faU........#c.4.1#eaW.4bmbmaX#e.4.w.waP.....I.GaVbhb0a6aXbib4bja5aPaO.4.u.O.u.La5bdbc#i.z....#P#2adbxbxbj#i.4.y.yb1.H.NaOaO.L.I.Ib1azbybsaQ.N.F.E.Ba2............bya0bra9aR#7.Pboboa2a..Ea0a.#7.P.valba#R.q......#R#X#K#1....ahaf#6.D.B#2bnai#6#3.Bag#Qas..ayafab#2.s#6amb6..........#R#RaB................aGaGac#Q..............#L#M#0az.................#............avap#V#J#WaKat#V#L..............................................................................................", +"......#d.M.Mbaa6..#cbfaUaUaU#i#c#b.A.A#caZbb..bkbdaU#k.5aTaX.4.ybhbhaUaT.4.yaVaP.4bhbb#ebmaV#ebgbibyb0bxaVaO.4.I.u.O.1b7bhb4aWbWbc#i.5....aWbgaWaX#e.4.x.KaZ..bi#7.I.L.Oba.ubqbya7#8.P.C.Bbw......bpbnaf.Eadbrb4a7aQaNbqbvbsa0a..E.B#7.F.C.EbZac#P#R......boboa2a..E..#5#6.D.D#6bsag#9.E.Bal#0....azaK#2#2.Q#6bpaa#P........aGaHaI#0.q....aGaGaI#Z#QaGaL#Y#O#Y....ayayax#W#J......................auavao#J......ao#V#L#LaMawao#T#L..............................................................................................", +".........ybhbcaU#i.z#j#i#i#k#c.4.A.A.7bVb1..bWb2bcaU#f#b.7.4.Jbhb0bgaU#e#a.x.4aX.4.wbibib#aV#e.Ka6bxa8a5aRaO.L.x.x#db#bjbhbhbkb4aU#e.7#c....aVaT#e.K.x.1aS....aTa9a8a1#8a8a5aR.OaN.N.C.N#9........bybra.a3a7a7bsa7a..Obqb3bsam#8.F.B.E.E#7a0ag#3.B#Y.....#bvb5a0a..E.Bai.D.Da#bnaG#3#3.B#7am.#.#..bnaiaf#J#5aLaC#1.rbS......aGbuaB#Y#O....aGbYaB#Y#O#O#Z#R.qaB....ayaMar#W#K.#..........avap#VaqavaKawao#L.#auauap#T#Tapatap#V#J#V..auavao#J....................................................................................", +"........bhb2bcaU#e.4.y#j.4#c.5.y.x.z#ib1bhbkb2b2bc#j#c.z.5.4bhb2b2bjaT#e.K.y.4aP.4.w.Lb4bVaX#d.Ga5a6aVaPaO.O.I.u.IaSbbaTbc#ibdbc#e#b.5#f.L..#e#e#b.1.yaZbi.....4.4aQaNbrb4a5aO.O.xbiaWaX.M.D....a2a2#9brb3a1a5a1aN.N.va3bqa2#8.N.C.CaQbzb4a2ag#6.B......bobvbsa2#8.E.Caf#5#3aFah#9.DaEaga.aK..bzbvbqai#9#3.Dadak#P.rae......aIaI#Z#Q#O#ZaIaGaGaC#X.q#P#Q#Oaa......azar#0#M#Kaq........auawat#V#J#Tatao#T#JapaAaAao#Latat#V#T#J#0avauaAax#V#L....................................................................................", +"......bhb2b2bh#i#c.zbcbcaUaT.4.5.KaZbcbd..bdbkbdaU#c.8.z.5aUbhbjbgbcaP#e.y.w.4.4.L.w.MbiaW#d.M.xaRaRaPaO.O.G.u.Lbaa5#k#c#c#caU#i#c.y#baU.Ia8bi.J.M.yaTbg.waO.......Oa6a8bia5aO.Ibib2aWaP.1.x......a..NbobybvaQaN#8.H.Ca0a0a.#7.C.C.NaCbpboa2a#.E.B#9....a2a3a0#9.E.v.Eafbzbzbpaiaj#2.Baiaf.E.Bbzbybvafa#.D.Dak#P.samb8......#Z#Y#P.tae....aB#Z#Y#O.q#1#P#1...#azaraq#0#M#Kan..........ayaAapaxar#W#U#T#Jas..atao#T#L.e#T#Jaq#W....atatao#L#Maxap#T..............................................................................", +"#m#...bdbjbdaU#c#bbhbhbdbb#j#c.5.zbb#j#k.5bbbbaU#i#c.y.z#ibbaWbmaUaT.4.K.x.yaT.4.waWaT#eaP.4.w.x.4aOaO.4.G.I.x#fb4b..z.5#fbj#k#ba5.zbT.O.uaVa6aVaP#b.1.x.1..........a7a5aRaO.Ia8a5aR.OaO.L.wa5.4.x.B.Ea3a3a0.N.N.P.C.Oa.#7#7.F.C.Nb7..a2ag#9.E.s.EaiaL#0agaga..N.B.Fala#bzbybvah#5.D.Qa2#9.E.BaEbnai#5#3.B#3#P.ranaCaCaCaa....#O.q#1.#....#Y#Y#O#P#Pbt....aAaLaz#0#S#M#J#Z...........#avatayayar#0#M#Laq....#V#L#JaK.....#..........#V#L#LaMaAao#Lao................................................................at#V........", +"#m#g.6aWbcaT#k#bblb2bXbdaU#i#c.7.AbcaT#e.4#j#i#i#c.z.z#fb8#maTaTaP#d.1.x.1aZaYbgbgbmaU.4.4.J.w#fbZ.L.O.G.u.Ialb#a5....#d.y.1bda8a6aR.O.G.NbhaXaP.4.L.u.1bab.aV.4....b3aOaO.Oa8bra8aRaO.u.x.MaR.O.I..aAa0aN#7.N.H.H.OaR...N.E.valbs..aL#9#9#3.D.Eb5aGaI#Y.t#7.E.B.Eama2.DaEbpaE#5#5.Q.Dafa#.D.Eaiahaf#3.B.Banac#PaDaHbtaC#4.raHbuac#R.q......#P.qanaC......aAaGaG#X#K#Q................aoayaLaLaz#W#M#U........#Tat....................#T..atap#T#J...............................................................caxauap#J......", +"#h#..6.8#i#e#c.zb0b7b2bc#j#k.4.J.y#caT#ebmaWaTaP.z.z#cbXbc#g#j#e#e.4.1.K#db2bhblb0bmaT#d.4.xaSb......x.O.I.4aSaVbdbc#j.7#c..bib4biaO.N.xbhbj.4.4.L.I.1bTaYa6aX.4.y.4a6aVaO.Lbrb4a8aQ.O.I.1aZ.1.u#daGaH#8#7.F.v.Pbaa1#8..br#7.Na0.B#2btbt.E.E#6bn..ar#X#O#Z...E.E#9a2.B.BahahaEaEaf#5.Da#.B.B#7a##5#3.D.DbaaEaa#P#PaHaLad#R.raHaC#Y#P#P....................arar#0#N#Kas..................axaAaz#W#U#K#X....................................#T#L#Jas..............................................................auawax#V#J......", +"##.8.6#g#c#c.zbkblblbkbd#i#g.7.y.z#caTbhbhbmaV#e.K.KaZbc.8.8.A#c.4.5.yaSaYaWbhb2b2bgaT#e.4.w.4.........J#daWaqblb2bb#i.7#c..a8a6aR#8.x.LbmbmaU.I.G.LaZa5b2bhaX#a.w#abiaVaP.4.Ga6aR.4.H.u#daW.G.1a6ar#0b0.F.C.Fa4aQ#5.Qa2boa0a#bna2#9.Eae#3.sam......#O#Y......arar#X.t#5ajbzbvaEaj#5.D.D.B#6b6aj.D#3.Bambnaa#1.sabaDad#4.q#PaB#Z#R.q#R......................#X#N#Nanaz..................aqaraq#U#K#Xas..........................................................auauap#L........................................atatauavap......", +"#..6.7#l...z.4bdbdbcaU#j#c#c.z.A.7#jbhb2b2bcaT#d.K.w#e.7aP..#gbl#b#e#caT#c..bibjbgaY#e.4.y.w.4............aLaqbkbVaU#c.z#c..aVaP.K.I.Ga8aTaXaT#e.z.xa6bja6aV#d.1.x#dbxaV.4.I.IaRaO.N.u.Ia5.N.Ia5....aWbgaX.1.xaP#5#2.Dboa2a0a#b4a2#9.E.D#2am....................#X.tac..bzbvbvbnab#2.Q.DalbaaE#5.D.D#4aaaa#1.r#2aDaFaCac#Pb3#R#OazaIac#RaCaDaa................#S#Xaz......................#0#U#K#NaM..............................................atao.........#aKaxap#T..........................................auaKauap#T....", +".7.9#lbU..blbhaWbbaU#i#k.4.4.A.z#faZbhb0b0aWaP.4.y.y#e.7.z.y.Gbb#j#f.A.7bbbeaWaWaT#e#d.y.x.yaT.7..........aq#MbcaU#c.z.zbhbgaWaT#k.waVbxb4#d.4a8a9aRaO.IaX#d.4.x.JaWaVaO.M.x.GaV.L.N.Ib1a8.N.C..bqa3a0aN.N.I.1#5#2.Qbwb3bra.#7bqboa1aN.N#5.......................#bqa3a2aEaLaJah#6#2.Q#2aJai#5#3.Q#2..#Paiaf#5aDaHbvbzac#4.r#S#RaLaKar#Q.qaCaa#P......................azar#X................#M#M#W..............................................awaAap#T......avawat#V#L#V........................................auawav#V#Jao..", +".A.8bXbfbdb4b2#iaU#i#k#k.K.A.7#lb8bbbgbhaW#e.4.z.x.1aT.z.5.w#d#g#c.8.7bVbdbdaTaX#e#d.K.x.1b#aY.7.8.7......#M#M#i#c.5.zbib0b4aWaP.4.w.4bxbxa5bra8a8aR.4.O.u.1.y.1bSa8a5aR.4.x#d.I.I.Lbaa5a..H.Ca7b4bxa0a..N.Cb..D.Daibobsbq#9.Ebxb3a0#8.H.H........................b3b3a0ahahaf#5#3.B.Qafaf#9#2.Q#3b7bzbzaEaf#3.QaHbtaFak#P.rab.Daa#P#Y#Q.qaD#4.raa............ar#Z..aGaLar#X#M................................................................auaAaAao#T#T....apapao#L#Tax........................................atatao#T#J....", +"#.bUbfaUbdbkbc#f#f#f#c.4.5.7#bbVbj.zaWaWaT#e.4.w.w#faZ.y.4aTaS...z.7#ibdbWbd.4aP.4.4.1.yaZb6bgaU#e.7.............7.zaZbhblbZaW#ea8a8aVaR.O.Ibrb4bxaR.4.I.v.w.1aWbibia5aRaO.I.I.I.Ea1a1aN.N.ualbqbybsa0#8.F.E........a2a0a.#7a7brbsaQ.N.C.P....................a1bobvbqa.#5aj#5#2.Q.QbabY..#3.Q.Dbw..brbyai#5.D.DaCaCabak.r#2#5.raa.r#1.t#P#1.r#P..........aGaGaI#0#KaAaAaq#M#K.#........azar..................................................atavap#T#Jaq.bauap#V#L#Las..........................................#T#T#L#LaK....", +"aZb4bd#jaWaU#i#c.z#b#b.5.y#faZbc.y.yaTaP#d.4.w.y#db8aW.zaTbab.......bfbbbbbgaW.J.4.z.y#faYaWbdaU#e.5.K..............a5bmbmaVaTa8b3bxa5aR.O.GaOa8a7aN.4.P.uaOaPa8bxb4a8aR.O.N.G.u#8a.#8.N.C.FbZa3a3a0#8.N.B.FaQ....a2aga.#7.Ea1a1aQ.O.P.val..................bqbra0a2a0#7.C#2#3.B.Qanbw......#3....a2bnbnaj#3.B.Dacaa#2.s.rbw#4.Q#5.q#1#QaM.r.rbY..........aAaLar#X#K#Qar#X.t#X.......#aAazar#X.t..............................................aoao#T#L#0#LauaKat#V#Latao..............................................#Vap......", +"bdbWbbbfbe#k.4.4.z#fbV#c#b#iaU.z#lbhbh.4.4.x.x.1bTaY.y#fb2aW#O#0..blb2#gbxbgbmaT#d#b#baPb2b4bhaT#c.K.z..........aE#5aOaVaTaP#ea8b4b0aVaO.L.I.La1aP.O.H.u.Hbaala8a8a6aVaO.G.I.1.HaRa6.P.P.1a4..a0aQa..N.C.Fal........a#.E.E.B#8aN#8.P.C.1b7..................bsbsa.a.#7.P.v#6.D#5#6ah................ahafa#.D.Q#6..#P.r.ran#4.Q#2am#2anaB#X#4..............azas#0#S.t#Z#X.t#NaM......aAbuaLaq#X#K................auaAat#L........................#J#T#V#Vauawaxap#T#Lavap#T......................................................", +"..bbbWbU#o.5.5.A#lbh......bUb7.4bhb0b0aW.z.K#e#iaW.A#fbV#0#S#QbfbebmaU#ibhbcaU.4.K.w.4bhblbhbc#e.4.A.1........btbn#5bh.N.4.4.Ga8a8a5.4.O.I.u.OaOaO.N.u.1b1aVa5aVa5aRaO.O.u.IaSa1aQaWaT.J......a.#8.N.F.Palbs..........#7..a#ag.P.N.v.1bs........a5aN..bna2af#3a0#7#7.E.valb#bubtab#2#2..............a##5.D.Dalbs.....#ad#4.D#PbT#PaJ#M#Z..................ar#0#Q.t#1aI#K#X..........azaGar#0#Q.tar..............avaKap#Tauap......auavap#T........atao#L#Watap#T.t#WaAao#T#T....................................................", +"..bfb2bX#m#g.6.8..........bUbfbfbhb4b0aU#e#b.y#b.4#eaU#m.8#Xblb7bhbhbhbhbjaYaT#e.z.y#ebcbcaU#i#c.y.y#f..blbd#j.7abbmbgaVaX.4.Ja5aVaP.1.1.u.IaR.O.H.u.Ibaa4a8braOaPaO.O.G.xaSb4a5aQ.N.H.w.4aXa7a9.E.N.CaQa7aQ.N............#9#7.Ebq#8a0a..N....a8biaQbpbya2a..N.B.F.N#3.Na0adaFad#4.s#5............bnai.E.Q#9a2..........#2.r#5#Paa..........................#Q.tasaG................arar#0#M.t#N................avap#VavaKap#V..auaAaAap#T#T......#T#L#Lax#V#T#L#Uavap#V#Jaq....................................................", +"..bfbf#m#g.9.6#l......#obe#h#m#nbgbjbc#e#c.z.y#e#h.7.7#m#g.6bfbkb2bjbhb7b0aUaT#c.z.zaWaTaT#i#b.1.y#fb8#gb7bW#g.5bibibgaWaX.4.waRaOaO.L.u.Ibab4.x.L.Halba.Aa8b3bx.L.L.x.x.1bZb0a1aO.H.H.waVbrbxa9aR#8#8bqa7aQ#8.v.............E.Ebxb3a1a..P.Fa8bybia0bob3boa.#3.E.Fa4......#Xaa#4.r#2aD..........bobyaEahaf.E..............axao#Laq..............................as#Z..azazar#S......#0#0#N#N#Nbu........awaq....ao#T#Javav#V#L#Vavavat#V#J#W................#T#W#Wao#V#L#Tav....................................................", +"..be#m#h.8.6#lbe....bfbf#o#m#g.6aWaW#i.4.1.x.1aZ#g.6.9#j.7.zbhb0b2bcbhbjbhaW#e.4.ybhbmaWaT.4.y.y.1bXbh#g.7.G#gbgbxb7bZaV#e.4.y.J.O.H.u.H.1bZ.K#b#j#i#c.AaZa5a5aQ.O.G.OaOaRa5a5aO.O.u.N#dbja7b3a8aQ.N.u.NbYaQ#7.C.........#bnaga3bqa4aN.N.C.Fa5a9bza2a2a2aja#.D.E#9...........D#P#4aJ#O#Ra2af.E..bpbzbpaiaf#3.B............az#M#W..............................aKaG#ZazbuaG#0#S........#K#M#Rasan......awaAax#U#J..#Laqatao#T#Jaxapap#V#L#LbQ......................#L#T#Uay.............batao....................................", +".7bh#..8.6#cbdbdbc#j#cb2be#h#..5aT#k#k.4.w.AaZb7.6.6#g.8.A#gbgbhbhaUbcbcaT#e.4.zbjbhbhaUaP#c.w#baTbc#j#f.7.8.5bibjblbjaX#e.K.w.M.I.I.IaSaS#b.z#baW.z.yaTbdaQaO.O.I.Lb1....aRaN.O.C.1aSb.aPa3a9aN.O.P.uaOa0#7.F.CaQaD#2..bpb3ai#7a0aN#8.P.FalaObpb3a2a9a3a1aN.N#3..............aHaH#1.qbobra..E.Ea0bwbvai#5#2.B..........aGaG#X#XbS..ayar....................aGaHaG#XaGaGas#X#K#X........#L#Jas......awaAaAaq#M#J....atao#J#LaA....#T#L#JaA............................................aKav#V#L..................................", +"#b.Abc.8#.bkb0bVbb#k#b.A#n#..8.6#h#b.7.w.y#eb1.7.6#.b8.7.8bXaUbmaUaTaWaT#i#c.y.Ab0b4bVaU#e.4.y#bbfbb#g#b.5#g#iaWbgaWaP#e.1.x.w#daWbdaU#i#c.y.y#l#e.5.zbT.....Oa8a5aRaO.ubm.L.O.P.Cb#a9#e.4a1aQaN.N.v.Ha4#8.N.v.Fa2bn#5.Dboboa9a9a0a..C.Pbaa4..bpbnahbsbya0a..N.B..............ac#1.qaabwa2#7.Ba.a2bzaE#9#3.B.E......aFaFad#4#K#1b6ayaK#W#K.....#azar..........ar#Y#Oarar#X#K#Oas......axaqaxaq......aqaqaq#T#J#W....#T#J#W....................................auap........avao......avavap#T#L..................................", +".7.5blb2aUbhb2bWaU#c.7.z#j.8.6.7#n#c.y.5aTaW.8.5#lbW.8#fbe....aT#k#k#e#k#b.K.4bhbjbjbjaP#e.J.A#bbb#i#c.A.7be#iaWaVaT#e.4.w.x.yaVaO#j#i#e.7.zaZbc.BagaT..a5a5aO.Na8aRaO.IbcaT.4bmaXaP#e.J.J#8.O.P.H.Fb1#7.N.P.Fb5bzaj.D#9a2afbybZa0#7.C.Fa4....a2afbqb3bva2#8.P.C#P......aGaI#Y#R#O#PaDag#9.E.Na2..afaf#6.D.Ealad#4..bvbuab#4.sbRb6ax#W#K#MayayazaG#0#M........#Q#O#O#X#Q#N#Oanar#XawaGazaq#Maq#J..awaL#V#T#M#UaG............................................auaKap#T....auaxat#T....apao#T#JbY..................................", +".z.7#mbkblbdbdbb#e.4.z.KaU.6.8bTbe.7#daY.#....#g..............#c.4.K.x.K.7.y#caYbcaWaT.4#b.A.yaT#k.8.7.7bV.M#gaXaP#e.4.w.x.1bTbV.L#b#c.z.A#bbV.B#6....bib#a5aO.L.uaO.O.I.Obibia6aVaP.O.w#8.H.P.N.1baa3.E.P.Oa0..#5.D#2..#3a3aQ.NaN#7.C.N.B..bna#a#a3a9a0boa0aN.N#Q......aGaC#Q#P.......E.C.Bbs....#3#3.D.DalamaD#4aFaLaDaa#2.rabb6aHaHad#RaAaGaAaA#0#K#0................#XasaK#0#S#SaGaz#W#K#W#K..axaxap#U#Waxauauap#T..................................auavap#J#V#Lao..avaxao#Lao....#L#Laq....................................", +".z#fbb#ib2bbaU#i#c.5.A#faU.8#lbfbkbb#i.4#cbfbf#m#.bhbmaU#i#b..bf.z.K.z#iaU#b#iaUaU#i#e.4.z.A#faY.5#b.7#mblbf#mbf.4.M.y.x.w#dbg.7.z..bibgaVaP.1a..#..a8b4b0aRaO.H.u.O.I.uaObib7bjaVaO.J.L.N.Ca9aQ.N...#b3bsa..Ea1aQaQ..bqbqa9aQ#8.C.P.val.Cbza3a2aNa0a0brbsa1a..N.C......ac#Y.tac.........#......bzbv.D.D#9aiaLac#PaDadab#2.s.radbSbubtac#4.raqar#0#M#Naz................azaraq#X#Sayarazar#Xaq#1..ao#W#U#JaMayazaq#L#T#T..............................auaAaAao#L#L#U....apap#T#T................................................", +"#cb8bebdbl#i#k#e.7.z#fb8bh#lbe.zb7bc#i.KbUb8bfbhbhbgaYaUaP#b.A#kbe#h.9be.G#i#c.6#e#e#b.K.y#bb1aY#e#ba6a5aR.4#jbb#j.w.4.K#eaV#c.AbTbhb5bjaV#e.J.w....a8a8a5.4.1.x.IaR.xbabmbibxbjaP.4.G.L.Cbxa9aQ.N.Ha0a3a0aNa8a8a1aN.N.Lb4a7aQ#8.P.Nalb1.Pbqbrboa3agbqb3bya0#8.E.B......#R.qae......aGaI#X......aEaEaf#3adaCab#4.raaab#2#2.rbY..aDaHaD#4#P#2#U#M#M#KaM..................#Xar#X#KaybuaGaGar#0.tayawaq#L#LaqayaMazaq#L#Jaq................................atao#L#L#Uax....#L#T#JaA................................................", +"bVbe..bbbcaU.7.7.A#fbebc#k.7.A.7aZ#i#c.ybeaT.4blb4bVaYaT#e.4.y.4.4.4.7.1.xaT.7.5be.5.1.x#fb#aYaW#ea8a8a5aRaO.L.G#bbgbmaX#d.w.zaZ..bxb0b0aXaP.y.w....a5aRaPal.I.x.1.I.1bZaRa6aVaP.4.w.x#da7bxa8aN.P.I.Na.#7a8b3bxaRaO.N.Nbra9#8.N.C.Nb#.Fb7bsbpb4a3aga3a7a4a.#7.C.F..................aGaC#Q#Q....ajaf#5.D.Eab#4#P.Db3.r#2#2am....bRadaa#P.sae#X#0...........................t#Q#QazazaGaGar#M#OaGaLaq#Mawaq#TaAaz#W#M#Mav....................auauap#Lap..#V#L#LaK..........................................auavap................", +"be......#i#k#c.A#caTb2#i#c.z.7aZ#j#k.zbkbdaUbhb0b2bWaW#i#c.K.z#b.8.5.6#h#daWaVaP.4.w#b.4#eb2b0bhbib4bZa5aP.4.L.ubhb7aYaX#d.y.4..aWbgbgaT#d.4.x.1aT..aOaO.O.I.C.1b8.1aRb1.OaXaP#e.1.u.1baa1a1al.N.u#8a9a1aOa8bZbxa1aN.I.H.Oa..N.C.FaQ#8a4a0a3bpbsbqa.a0a0al#7.F.C#7.D................ar#X.taC.......D#2.Bam.r#P.raJ................#R#P.rabaC#NazaGar#XaBak.q..........azazar#X..aqaraIar#X#K#Kazaqawawazaq#W#K#W#L#K#0ao..........auavao....aAaAao#Lao#L..ao..............................................aAaxao#J..............", +".........5#c.A.zaTbd#k#c.z.KaZbd.4.zbkb7bd#jbhblblbcbb#i#b.y.A#b#i.5#cbeaZ.....4bc#i.4.8bgbxaWa8bxb4b0a5aP.4.I.u.Ob0bgaP.M.w.4#j.7aWaT#e.4.w.1#f....a6.I.L.v.1bjaV.I#ebc.I.O.4.G.w.1bVb.#8aO.1.C.Nb7b3a1a5a9a7a1.O.N.H.CaO.N.C.Fbaa1#8.P..a0a2a2a..N#8#8#7.F.C.1bY#5.D................#Q#Z..bpa2#9.B..bzaDab#2ab...................2b6aaaHaDad#PaLar#Q#O#RaGaCas#R...#aLaHar#U.t#U#X#0#X#N.taM#W#UawaMaAaq#W#L#L#J#Uaxapawawaq#T..aKaw#V#L..avaxauap#T#J................................................atavap#T#L..............", +"#i..bf#o#g..#k#caZbe#i.7.7#kaU.8.6#bbkblbd#ebcbdaYaT#k#c.7.A.z#faT.z#f....aWaU#ebjaT#b.yaUaT#ia6bib#a6a6.4.O.x.I.OaW#e.4.w.waP#j#caP#d.4.J.Abab8..biaRaP.1.O.Ibaa5#cbd.......x.L.MaOaV.4...I.H#8b#bxbiaQ.Oa1a1aO#8.I.v.FaQ.C.ualbsaN#7.P#8#7aga.#7.E.C.C.F.Calbaai#5.B....................bpbva2#7.CbzbvaDaj#2.D........ad#4.......#b9aHaDadab#2#1#X#O#RaGbYaC#Z#Q#PazaGas#Y#Q#O.##M#S#S#Oac....#Uawazaq#V#T#Jaq#0aKawawaMayaq#W#Javao#L#T..auaKaAap#T#T................................................#V#V#T#TaM..............", +".5.8bU#n#..6....b8bkbdaT#h#h.8.A#nbfbcaU#i.5aUaUaU#i#d#b.x.y.KaZaW#baT#ibhbVaW#i.z#e.z.y..#ebma5a8a5aRaO.O.x.x.GaS#e.4.J.x#daY#j#c.z.K.4.xaSbV....b0bi.O.G.u.1a6..............bhb4bc#i.4.K....biaVaP.I.O.CaOaO.O.H.u.CbYa9.N.Oa0a0#8.F.Cal...N#7.E.Bala3am..aEbtaJ#3.D#Z..................a2ag#7.BaFbtbuai#5.D.Q....aHbtaD#4.r......bTbzaJaDab#2#4#Q.taGaGaHaC#R.q#PaGaKaI#Z#Oac#Payazaz#0#K......ataq#V#U.t#0....apaoawaAaAao#T#J#W#L#T....atavap#T#Jaq....................................................#V..................", +".5.7.7#m.8.8.#bfbeb4b0#i.5.8bkbd#j#caT#i#c.z#iaT#k#c.5.y.y#bb1b1#b.GaUaTblb0aU#e.z#c.x#e.....4aRaVaPaO.4.N.u.1baaV#d.1.w.1b1bd#c.7.A#l..#d....bea6a6bkbd.M.OaR................bhbjbc#e.y.K..bxbZaVaO.G.4.CbZ.L.I.v.PaSb#....a1aQaN.N.vala1.......N#7a0a2....ahaf#5.D.D#X#Q......bnbnag#5....#7.E.EafaEah#5#2.s#3....aHbvad#4.D.#....aFbvb3aE#5.D.D.t#1aCaCac#Y#Q.q#1aGbuaC#1#Oaa#P#PaLar#X#K........#U#M#J#UaA....#L#Tataxap#V#J#Laq#Mao....aoao#V#L#Wav................................................................auap....", +".7#i.7#m.6#.#o#m#jbhaT#c.yblblbc#j#c.A.4.A.zaZ#e#c.5.y.y.1aZbVaP#d.w.yaUbhbc#e.4.z#f#bb0......aTaOaO.O.G.G.x#db4a6.J.1#daTaU#i.8.A.7#m......b7be#kaPblb4aU#c.A................aWaT#k.4.A#fa8bxbiaX.4.G.MaR.....I.NaQa1.......P#8.N.v.CbY......................#3.B.DaJ.tb5....bpbvbnaf#5.D#3a.#7ag..ajaj#3.s#3ah....aDad#4#2.rab....aDbpaJab#4.Q#2#ZbuaM#Y#Y#P#P#4aCaGaC#0#Q#O#Z.q#Raz#0#M#K..........#U#Vaq......awapaq#W#W#J#UbY#0#M#M......#L#T#Way................................auauap#T........................auaAap#L..", +"#f#j#i.9.6bX..aObfbe#h.6#bbWb2bb#i#b.z#i..#k.....7#b.A#baTbcaX#e#a.w.K#laU#i.4.A.KaUaY.........4.4.O.L.u.I#db#aVbxaY#b.w#j#i#c.z.KbXbdbf#j..be#j.7.Ibkbd#k.7.AaU..............#d#e.4.7aZaYaVa5aR.1.1.xaR.......................v.C.Pa4.......#aFboboa2a.#3......#3..#Oar......bvbvboaf#3.B.E#9.C#7..#2#3.s.Da4......abaaah#5am......ahahad#4#P.Qaj#4aHaCad#O#OaaaMaeaB#Z#R.q#1#P.rad#0#M.t#1....................awaKat#T#L#L#Uasaq#U#K#0.........aavavap#T...........................#avaAap#T#T..................auat#Vat#V#J.#", +"aZbbbcaU#k.7..bUb8#o#h.6aYbkbd#i#c.z.zaU..........bh#b#cbjbg#e#e.K.w.4#e#ebgbbaV#i.4.............w.5.O.LalaO..aWaT#e.y.waZ#c.A.KaZbebWbj#j.7#k.7.7bXaZ#i.4.A#c...................y.K#faY....aOaO.G.uaSa6....................................btbobybsa0a..E.v................aibnbnaf#5.D.s#9.E.C.......D#5ae........bzbzaEaf#3....aH#4#4#5#P.D#6aEab#2aa#4#4#P#P#2aF#Q#P.q#Obw#Pam#Q#Q.t#Qas..........awaw#V....awayao#T#L..aqaq#U#J#Maz.......#auaMawap#V#L..........................avap#V#J#L................avaKat#T#T#L#W..", +"b8bkbb#j#c.5.5bfbf##.8.z#nbb#j#k.7.w.8bb........bkbhbmbmaVaT#d.4.w.w#dblbkbjbcaTaP.5.xbhaU#d....a0be#maT.A#g...4#e.J.JaZaY#i#g#i.7b2bk#j#..A#m#k....#e#c.z.4bda6a5aP.O..........bcaU..a8a6aP.4.O.xaSb.......................................ahbobvbwal#7.E.B............aEaDajaiafa##6.B.Eam.Db#........a2a.........bzb5bnaf#2.BayaGbv.Q.r.s#9aJaDaa#2#2#P.r#2#4aD......#Q..#R#Y......#X..........auawaKax#W#M..ataq#U.taqat#T#L#M#XaK........auauayaxao#L#L..........................#V#T#L#W#J................avat#V#Laqaq....", +"bdb2bb#i#cbmaUaT#e.8.6#l..#k#c.5.5.7bWaU....bf#oaUaTaXaVaP.4#a.w.x.1aWbhb4b2bcaT.4.4.w.4aU.4.z....#h#c.7.8bf..b4bfbe#j.8#j.5.7#c#jaO#j#k.AbhbcaU#i.Kbf.7#cbca8a8a5aRaO.I....bkbWbc#ibib4aWaP.O.xaO..................boa3a0a..Nbqboag.N........a3a2ag#7.E.v.E...........#byaD#5#9#5.E.E.DbTaJ.Dag#3....b4a3#9.E....aEbpbnah#5.D.DayaFaFaaaFaDaLaEab#5.r#2#1................................axao..avaAaxax#W#M#L..#W#T#L#0avavao#Tauavao#L......apavatao#T#Jaq............................#Vao#LaK................aoao#L#L.#......", +"bWbd#jaPbhbhbmaW#i#b.z#o.....5.7bhbbaU#k.4bfbhbhbgaU#e#e.4.4.J.w.1bTbVbhblblbhaPa5aXaO.4bf#n#g......#.#i.#..aVblb7be#j.8.9.7b8a1aO.I.O.8bhb0bkaU#e.z.5bb#ga8b5b5a5aO.4.I.I..bjb0bcaVaVblaVaO.I.w..................bqbqbqa0a..N.Bb3aN.N.E....aEa0ag#9#6.C.Falbqa2#7....aFbpaJ#6.s.D.D.Ealbn.B#3af#3.Ba2bpam#7.Bam....aiah#5#3.s#6bzadaa#PaDaDahad#4.D.ram................................awawao#Uatap#W#W#U#JaM......aq..awap#TauaKaxao#L........aoao#T#J#WaM....auauap#L..........................................#L#V..........", +"bb#j#kbhbhbkbmaU#i#b.z.z....bkbkbhbcaU#e.4.AbWb7bdaU#e.M.4.w.x.1aSbgbmbgbcaWbibga6aVaP.4.G#m#cbcaU#ebkbdaU#i..blbUbe#g.5.8.......NaVaO.Ob0b0bjaT#k.z.zbia6bibxbxa5aO.O.u.L..bcbibgaWaX#d.w.O.x.1..a9a1aQ.H........brb4bsag#7.E.Ba.#7.Bal..bza7bx#7.F.C.Eala2bqa..Ca...ahab#5.Bbw..aj#6bqa3a0#7.F.D.Baga.#7.Bal......#5#6#3.D#2b5bz#P#4.qababab#4.r.DamaF..............................awaAaAao#L#U#T#U#J#Jas............ao#T#Javavap#T#Jap........#L#J#WaA......aAaKao#L........................................................", +"#j#ibjb0b7bVaYaT#e#b.J.K....bkb7b0bc#i#e.z.w#cb2bhaT#e.4.y.4.4#eaVbibgaWaTbibxb0a6aVaP.4.G.GbhbcaWaT.4.5aU#k.7.7#m#g.9.6#l..bWa8b.aVaRaO.xbdaU#c.4.y#bb7b.a5a5aRaO.O.I.u.1a7#ibhb4b.aP.4.w.4.1a7bxbxa1aN.I.I....bobqbqa3a..N.C.B#9.C.EbZ..aEa7bs.v.E.C#7a2..a..N.N......#2.s#6......bqb4a3a0.N.B.s.E...E.Bala3....bnaf.D.D#6bnaFaj#4.s#4ac#2.s#P.ranah.r..............................axaxap#T#Kaq........................#V..aoao#T#Jas........................axap#T#J.b......................................................", +".4.7bhb0b0blaU#i#e.1.y.yaTbdblblbjaU#e#b.z.y#ebhaU#d#b.z.z#e#ibfblb4bjaTaXbib4b5a8aXaO.L.G.Lb0bjaU#i.4.A#j#c.5.6#g.8.9#gbU..bib0b1a5aPaO.G.I#e#b.w#baTbiaWaRaRaO.4.H.u.1aR..bibxblaW#i.4.w.4aZa7b3bZa1.O.H.I....a0a3a0a.#7.E.v.Fa0.Na2....#9aRa1aRa0aO.u.1.....N.#.........#aFaj#2..bobqa4#7.F.Calb5......aHaDaa#Pbp#9.D....abab#2.Q.Eah..#P.rajaM#R.s#1aB#P..........................aqao#T#M#1ax..............................#L#T#0..........................#V#V#Las........................................................", +".z.7bgbjbhaW#e#e#b.y.x#baTbcbdbcaU#k#b.4.x.1aUaU#k#b.3.x.KaT.ybhb0b0bjaTa6bibjbia6aP.4.G.x.MaPbkaT#e.5.y#b.8.z#c.7.7#lbe....bib0bZa5aO.L.G.L#b#b.zaZbjaXaPaO.4.O.H.I.GbTa5..a6bgaW#e.4.5bga5aP.4braR#8.O.u.I..a0..a.a.#7.N.B.FbT............aObqa7a1aQ.Nb5................bzbvaj.r..a2a0a..F.v.Ea3......aGaLaL#Y.qaf#3.Q.......r#2#6bw..awaMaq#1#P#O#2aCad#R#P............aG#Z..........#M#L#0az..................................................................#Tao..........................................................", +"aU#jaWbcaUaT#e.4.y.A.y#fbbbfaWaUaT#c#b.A.K#faU#i#c.K.x.KbTaY#cbcbjbgaT#e.4a5a6aXaP.4.L.x.GaObhaY#e#b.y.w#f.z.z#ibe#g.7......a5a8aVaO.O.L.u.O.1.zaZbcaS#d.1.J.I.N.u.4bab#.Oa8aVaXaP.4.Jbibib.aX.4.G.4al.u.IaQb4ag.C#7#7.E.B.Fala4.............4bxb5a1#8.N.C................aDah#2.s..a.#8.E.C.Nb4..........ac#1#P#P#3.Bba..aiaf..........axaq#T#J#R#1aCaFak.r#4..........aGbu#X#O................................................................................................................................................", +"#i#gaUaUaT#e.4.1.x#aaTaYbf#o#i#k#c.7.z.z#fb8bh#b.z.x.z#fb2#i#baWaWaTaP#b.KaVaRaPaO.L.w.u.OaSaU#i#e.K.x.zaZ.6#fb7#m#g.7#g..bgaVaXaP.4.N.u.Oba#d#e.GaPbV.I.M#db#ba#8aPbiaPa8b4a6aP.4.4bib5b4aWaP#d.G.O.H.ubaa1a2#7.val.F.F.CaQa4..............bqa8bsa3#8.H.uaQ..........a7a1a.#2.Dba..a9.E.N.Na4al..........#R#P#Pbt.EalaHbzbzaf#5.D#2......#U#MaAbS..acak#PaHaFab.r......aI#Z#Q#Q........azaG#0#Q....................................at#T...........................#auat#V......................................................", +".9.7.7#k#e#b.5.K.y#bbXbcbX#o#n.5.z.A.y#fbVbcbU.z.A.z#ibVbb#k.4#eaX#e#b.K.xaP.4aO.O.I.x.1bSbZ#k#e.5.x.2bVaZ.8bX#m#g.8.6bbbhb0aO.4#d.L.I.Ibab#.L.L#db##c..........bgbZbiaOa6aWaPaO.J.JbmbibiaWaO.L.x#d#8aSb##7a..C#7..........................a1a9aQ#8.H.v.F..........bqb4a1aN.Cab......a0al.P.H..............#4........bzb5bqaf#3.B#4.r........bTb8....#PaFbubt#5.r......#S#O#P.#........aGaK#0#O#0...............................#aAauap#T........................avaKat#T#T....................................................", +"aU#j#g.4#b.K.A.x#caZaYb2bX#o#h.8.z.1#caT#l.9#l.8b2#ebkbc#e#c.z.z.4#b.J.A.zaS.L.O.I.x.1aSb##b#b.z.A.yaZbe.y#j#m#g.8.5bb#i.4bgbm.L.O.u.3aSb..4a6a5aP.Lbe............aVaXbibiaWaX.4.xaOaVaVaT#d.M.w.waZ#8.P.O....#7........a8a8a5aR#8.u........aQaN#8.N.C.1b1..........bqbqa0.N.Ca9a0#8..#8.C.Hb1........................aFbpbna#.D.B#9.D.........2b6.a....ahaDab#2.rah....................arar#Q#N................................avauaKao#Lavauap#V................avat#V#Laq....................................................", +"#g#c.5.A#c#b.K#f#eaUbUbU#o#h#..6.9#n#..9.9bS#obV#hbbaU#i#c.1.x.KaU.w.K.KaSaZbf.G.M.G#daRbVbd.A.7.zaZaY.z.y#ibmaTbkbdbd#jbhbZbmaV#e#daR.w.I.Obia6aP.O.x.............4bib4bZaVaP.4.w.4aPaPaP.M.x.1bab1.N.C.N.O............brb4a5aR.O.C....a1aRaO.N.N.v.Na4............a1aQ.Nbqbrbra1aN.C..................a2a...........aiaha##3.s.E.sae..........b6bS......#4#2#2bY......................#X#Q#Oan..................................avap#T#LauaKap#T#T............aK#V#V#L#T.#....................................................", +"#e.4.5#cbcbd#g##bf..#o#n#n#g.9.6#l#o#..9#lbfbd#j.8bhbcaUaT.4.7b1bdbcaU.4.z#n#h.9.8#..z#mbhaWbdbcaT#e.7.x#b#jbgaWbWb4bbbib5b0biaT.4.J.w.yaP.Mb0aWaO.M.IaW#e........bgbiblbjaV#d.J.w.4.Oa7a9a1aQ.Nbg.O.F.u.1.O.u........a7bsbxb#aO.I.u.Obra7a1aO.N.H.OaQ...............N.N.Pbqb3b3a0#8.C.N............bob3a3#9.E........#5a##3.D.Eb5#6aD..........bRb6........#2#5..................................................................ao#T#LaMavap#V#Jaq..........auaxap#L#V........................................................", +"#ebfbe#j.9.7##bU.1bvbU###..8.3##b2#l#obe#j.5bb#kbkbhbgaUaX.4.wbeb4bc#i#c.y.6.8.6#h#i.4bhb4bcaU#i#e#b.w.1#laUb0bkbWbWbdbmbxaU#i#b.4.w.ybgaWaT#eaR.4.x.LaP.8.y........a6a6aV#d#d.w.GaPbrbxbsa1aN.N.u.N.v.Fa1.I.CaN......a5a7a1aO#7.I.Ha8b0bZa1#8.N.v.....................F.Na3bqa1#8.F.v#8............bobrbo#9.E#7.........D#2#6a2#6..............bRb6............................aGaCac#R..................awawaq#U........................ao#V#L#L.#..........apapauauat#T......................................................", +"aTb2bb#g.6.8.I.1a5bo#o#o.9.9#lbe#hbUb7bd#g.7.7bhb0b4bdaU#e.5.y.4b0bc#e.4.z#f.z.9#n#b.ybUbf#m#k#e.5.1.KaZb1b0bjbdbdaU#ibhbdbmaT#e.J.wbhbhbmaT#d.y.L.x#dbe#h.A........aVaTaP#d.y.x.JaWbrb5bxaQ#8.H.C#7.Ib#b#.H.HaQ........aRaQ.N.P.ualbrbZbxaR.O.I.CaQ......................a0aQ#8.N.C.Na1........aFada2a0a.aiaf.D..................................b9b6........................aGbuaLac#R#O..............ayaLaGaq#Mawaq........................#V.#..............#TaKaAap#T#T....................................................", +"aUbe#k.8.A#l.1aR..a.#o#n##bUbf#n#.blbfbe#c.z#cbhb0blbV#i.4.z.y.4aW#i.4.4.zaZ#ob6.5.5bUb8be#j.8.K.5.yaZbVaWbcaTaUaU#ibhb2b0bcaT#k.Kbhb4b5bm#i#e.J.K#dbZ#ma6aVaPbgaW#d#e#d.1.J.w.1b6a9bra7a1#7.N.C.uaOa4a7.I.uba........a7.O.O.H.H.LbZa5a7a1#8.1.C.CaR..............ad......#8#8.N.F.FbT........aLbvab#7aNbpbnag#6.Q.................................2b6..............aGaGaCacaqaGaGaB#1.q#P......ayaz#W#Kayayaxaq#Kayap#Taxao#J....auazar........................avaxat#V#J#W..................................auauap#L..........", +"bh#g.8.A#gbe........#7##bXb8#o#mbmaWaXaP.7.5bebhbhbmaT#e#b.A.y#faUaT#b.waZaYbVbW#mbfbWbU#n#g.6.8b8#f#nbfaT#i#e#b#k.4bkb0b0bc#e.4.ybhb0bVaY#e.1.y.zbg#ma8a8a5aP.L.x#d.x.L.M.xaSb.aWa8a9aRaN.N.H.u.HaQ.O.H.I.1bZ......a7b5bx.I.H#8aR..aRaQaN#8.H.u.OaR............buaa.r.......C.P.Ca1.#a2a..E..aFad#4.sbnb3bvaf#3.B....................aHaDad#4.r....b6.#..........aGaGaLaCac#P#PaB#Y#O.qae....ayaMaz#0#Saybuax#W#LaAaq#T#J#T#M.aauayayar#0.t....................apapao#L#Uax................................auaMawao#L..........", +".6#j.A.7bX...........EbUbXbX#obhbiaWaVaP.1.z#oaWaWaT#k#c.y.y.KaZaU#e.1.y#ebfbe#n#..Abe#n##.8.9#l.6#lbebf#h.4.4.x#b.5bgbhbcaT#e.K.wbgbhaW#e.4.K.x.4#gbib5b5aV.4.G.I.M.w..bk#dbb#cbha5aN.4.O.P.v#3b6#d.H.NalaQ........a9a7a4#8.C.H....#8aO.O.P.H#7b5..............ad.rbY..............bobnaga#.Bab#4.r#6aEbnai#5.D.Bai................aHb3aJad#4.Q....bSb6..........aGaHaLaLaa#P#R#R#O#Oan......ayazaq#Sayayazar#U#J#U#W#J#M#L#L#LataGaLar#U#K................auavat#T#L#LaK..................................avavat#V#Jaq........", +"bXbf#kbb#k............#obfbfbhb2b2a6aT#e.4.x#oaT#k#e.4.J.A.7b1bV.4#c.x.yaT#g.5#..A#.#j#h.8.6#lbX.8bXb8#o#haVaT.4aU.xbcaUaT#e.5.x.zaWaTaT#e.4.x.1#i#ia8bxa8aP.1.x.GaS.1..bfbf#kbWb2a5aR.N.I.C.Nbaa1.O.uaS....bkbha5aRaOaQ#8.H.ual....a3.H.L.uaOb#al................aa..............bpb3bsaf#3.B..#2#5..afafa##2.Bba..........aGaI#Y.qaFaHaJaa#2.rab...2b6..........aIaCaBac#R.sad.....#........#W#W#U#KaMaqaq#W#M#Kas#M#MbY#JaM#Wazazar#W#M#K#M..............avaAap#T.#......................................ataoao#L#U..........", +"#o#j.8.7#c.z..#o#m....#o#o#mblb2b0aW#e.4.K.w.4#n#d.4.y.x.1aZbcaT#k.K.A#baZ#c.z#j#hbUbf#..6#lbU#g..bfbf#m#gbmaV#i.ybi#i#k#e#b.z.KaZaP#e#e.5.y.ybTb2bma5a5aR.4.I.u#d.1aW..bb#j.8bkbia8a5aO.H.NaOa5.1.u#fa5....b4a8a8aWaR.4.w.F.1a4....aNa.#7aO.valb5................................a2boaga#.E.Ba.........aiaf.B#6ai..........aLaC#X#Oadadaa#4.r#PaC....b6..........#Racaa#1.q#1aCayayax#U........#K#Masao#0#U#N#MaM#T#Uas#Las#T....aq#0#M#JaM#L#U............avat#V#Jat........................................#T#L#LaA..........", +"#n#gbU#o#o##.9#o##.9....#hbmbibibgaW#e.4.w.w.4#n#..6.4.1#kaUaT#k.K.z.1b1bd.A#c.#..b2b2#n#g.7#.....#n#m#gbhbgaU#ebib4bZ#c#b.A.w#fbVaV.1.4.x.xaSbVbZbcaRaPaO.L.x.1b7.1.4..bf.7.5a8b5bZaRaO.G.Ibk.G.LaRa5a5aR..a8b3bZa5aO.O.u.O...........N.F.C.Cbs..................................aga0#9.E.Bba.......#bpbzag#6.B............aB#Y.q#1aa#4#4.r#Pb5......bTb6..........#O#P#PaaaM#Y#QaAaq#S#U......auaMav#V#L#M#Maq#J.......a#W......#M#U.tas#U.tas............ao#T#Las............................................................", +"#m#cbXbU#n##.9####.6#h..bf#.bgaYaT#e.4.J.A.yaZ##.9.9bW#nbcbcaU#k#b#baZbc.7.7bX....bf#n#..9.9bf.8.5bgbcbhb4bVaT.4bibZb0aV.5.K#eaT.M#e#d.x.1#eaTbhblbjaP.O.L.u.1b#.JaP#dbWbU#h.5a8bxa8aO#8.I.I.x#c.zbibZa6aR.4a8b0bxaV.4.L.u.O....a1#8.....N.Nal......................................a#.E.Ebzaiag#3..bzb4bqaf#3.B........ai..#Q.t#1.....r#P#2aJ#5.......2b6............aIaGaC#Z#Q#Oaqayax#0......avaxax#T#JaAaAao#J..................#Waq#U#K#1ay..............#Tao....................................................avat#T....", +"##bUbXbU#n##.9####.6#o..bebfaTaTaP#d.y.x.1b#aW##.6#...bkbVbcaUaT#b.ybk.7.7##bU#o#.#n#h.8.9bX.9.9b0bVbmbhbhb.#e.4a6bmaT.4.5.x.JaXaP#d.z.y#daVaTbmaWaTbmaX.4.4aS.y.1aWaVbe#m.8.6aRaVaQ#8.I.uaO.waRbibxb4aWaO.La8a8aVaRaO.L.xaO..bxa9aN.C............boa0#9...............................Nbpb3bnaf#3a3a2a.bna#.D.B#9....bzbnafa#.B..bzbzahbpbpaiaf.D......b6bT............aB#Z#X.q#R#Ubuaz#W#K....atat#V#J#Watap#T#J.b..................#M#M#0ax......................................................................auaKat#L....", +"##bU#o#o##.9.9##.9.6#n..#nbU.4#e#a.K.K.yaZb1bd#n###obhblb2bcaU#k#b.4#baTbWbUbgaWaX#kbc#j#k.8.7bhb2b0aUaWaWaT.4.xaTaXaP.4.wbgbga6aT#e.K.1bg...4aTbibibmaX#d.x.y.wbVba.....8.6bXaOaO#8.I.u.1b5.1a5a8bxbiaVaO.GaVa8a8a5aRaO.uaV..bra9a1aQ#8........bob4a0#7.C......bobna0#7.B......a2a.#8bnbpbvbo#9bqbsa0a..E.E.B.E....bzb4bnaf#3.D..bvbsafbvbvai#5.D#3....bRb8..........az#Q#Q.q#ObYazazaq#U#KaGaI#Y#O#J#Tayazar#UaM....ayay#U........................................................................................avat#V#Jaq..", +".8#o#n##.9.6###o.6#.#obd#gbUb8.5.K.w.1aZbVa6bU#o#h.6bkb0b0bdaT#f.7.z#b#.bhbhbjaWaX#e.y.w#k.7.ybcbhaU#e#i#e#b.y.ybT#d.4.xbhbibgaYaV#e.M.x#ebhbgaTbxb4a6aP.4.w..............biblaX.L.O.ualbV.Ib1..a5aRaXaO.N.ua8b3b5a5aO#8.I.I..aQbrboa0a..C......a3bq#7.E.C......bybsa3a2a2a2a2a..Ea2a..Ea2a0#9#3byb3a0a..E.E.Db5aDbnbobwbp#6.E.Q#9bpaEaiaEai#5#6.B#9....bRb6.......#....#0#O#1#Z..arar#U#KaGbYaIak#P....aKaKaz#0#K....aLaz#U#M...............aap....................................................................aoao#L#T.#..", +".6.9##.9.6.9bX.9#.b2bUbd.7bUbf#obk#d.4aX#j#c.A#n##.9bgbhbcaUaX#c.z.z#ebUbhb7bxaWaP.4.K.J#k.4.yaTaU#e#b.y.4.4.1aZbg#c.M.wbib4b2aWaT#e.J.x.4b7bdbmbxbja6aO.L.x#e............bfbb#c.waV.4.G.IaV....aRaRaO.O.x.Ga8bxbxa5aO.O.I.N....bxb3a0#8.C#7....aNa..E.Cal....a2bpboa9boboboa0#8.E.B#9.E.E#9#3a0bqa2a.#7.v.NbwaHbtacaiag#9#3.B.Dagaf#5#2af#9#2.B#6am.....#bSbS...#.#....#O#Nas.#....#M#KaBaGaGaC#R.q#RayaGaGaq#U#K#0axaq#W#Kar............auaKat#T....................................................................#Lao......", +"#naZbf.9###o#.#.bfbe#m#..7bf#n#mblb7bVaU#j#b.6.8#..6bcbhbhbmaT.4.z.5aUbgblb0bjaW#e.4.J.4.4.A.y#f#e#b.y.zaZbgaT.z#ca6aVbgbhbjbjbg#e.4.w.x#eaP.OaWaWaXaP.4.x.JaV..........bWbWbb#i.za8a5aR.O......bg.O.L.x.xaPa8a8a5aQ#8.H.x.1a0#8bra0#7.N.Cal.......E.Ba0........bqb3bobsb5bra0#7.C.B#7.C.E#3.B.Ba0a.#6.B.Fam..aHaF#4aj#5#3.B.Dbw..#3.D.B#3#3.B.EbY.........2b8.#.....#...#..........az#WayaBac#Y.q.qaCaqazar#W#J#Kaz..#U#J#0..............avaw#V#Lap.............................#avao....auatao................................", +"bb#i.8be......bUb2bU#o#o#n#m##bdbfbWbkaU#k.7.A.8.9.6bhbxbhbmaT#e.1.wbcaWbmbgaV#e.4.y.J#daX.A#baU#j.K.K#ebc#b.4bibia6a5aPbma6aT#e.4.K.x.KaVaP.4.uaXaP.4.GbhbgaWaT#b#o#g..bWbW#j.4bib4a5aR.O.x....aWaW.I.IaS.waVaRaPaO.L.u.IaSa9aQ.H#8#7.Cala0..a3a0.N............a3bqbobqbqa2a.#7.C.Eam.Bal..#3...N.N.C.Cba....adaa.r#6.D.B.Bamaiak#X.....#..#3...#.......#..b6.#.#...#...........#..#X#KaK#Y#1#O#Pbw..#W#0#X#K#NaM.#.....#................aoao#L#T..............................avaAap#JauaKavao#L..............................", +"bb#g.8.5....bfblbUb2bfbeaU#g.7bbbdbdaU#k.4.z.5#i.9bhb0b4bVaU#i#c.y.y#e#naWaXaX.4.K.xbga6aVaR.4.4..............bib7bZaVaPaVaXaP#d.1.x.1#eaUaP.L.w.M.M.wbhbWbWaWaT.4.yaP.Jbe#j#k.7a8bxbibmaWaX.4..#eaP#d.K.waTaOaO.O.L.u.IbTb#a1aN.H.P.C.PbsaObqb4a0.N.P..........a0a0a2a3a2#9#7.E.v#6a2alb7.........F.E#7.........D#5......a#bvad#2#P#Q.....#.......#.#......bSbS.#.#.#.....#.#...#....ayazay#O#N#Y#W....#K#M#QaCaM............awaq............#V.#..............................axat#V#Javaxav#T#J.#............................", +"#j#k.7.7......bebfbkbfbcaU#k.5.zbb#j#i#c.5.z#kbmaTbhblbjbjaU#e#b.y.y#e#gaPaX.4.4.4bibibxa6aX.4.M.x......bf#oa6bjbxbxaX.4.4#e.4.K.J.w#fb7aX.4.G.x.4.L.4bhb2b2aU#e.K.yaP.J#i#kbkbea5aRbhbibmaX#e.J...K.4.x#fbia8.L.O.u.HaOb#a7aQal.C.I.Na9a7a1#8.Pa7aN.Na3a0a.......a.#9aga.#7.E.B.Nb5albs...#..bra5aN.C.....#.#.#.....#.#..aHaF#4.r#P.#...#.#...#.#.#.#.#.#...2b6.#.#.#.#.#.#..........arar#W#M#Uax#W#J......#Y..............awaLax#U............................................ao#V#JaMatap#V#J#L....................avavap#T..", +"#g.8bcbmaWaT.4.Kblb8bXbb#j#k.7.7#g#k#c.7bdbhbibmaTbmbhbcaU#e#d.J.x.1aU#g.5.4.J.wa8bib7bxa5aP.4.M.L.M....b8#o##a6a6aV.4.O.x.y.4.x.waSbVaX#d.M.x.LaV#kbjbcbiaY#e#c.z.zaZ.w.4bfb7bbaRaOb0b4a6aP#d.G.4a8biaP.1bib4biaX.NaNaOa1aN#8.C.Halbxbybya0#8.E.Na..N.Fa0#7.C.....C.Ea##7.E.B.Cbwa2.#......a7b3a8.1.x.#.#.#.....#..bnbnaia..E#P.rae...#.#...#...#...#.#.#.#.ab6.#.#.#.#.#.#...#.#.#.#.##U#L#KaHaB#Y#M......................away#W#Kaq............................................#Tao..#T#V#J#Tax..................auaAaxap#L..", +"#kbhbhbcaUaT#e.y.AbWbW#m#k.4.z.7#i.4bkbkbdbxb0aYaTaWaWaT#k#e.K.x.1#faV#c.A##.4.4bibib0bZaVaOaO.L.w.4..bfbU#n#.aVaPaP.4.w.I.MaV#c#daTaPaO.O.x.1bTaV.4bhaWaU#i#e.z.y#f.4.xaVbkbkbd#cbibjbjb.#e.M.x.1aRaRaO.xbibiaW.4.H.uaO.O.N.P.Hba#8bqbxa6aVaO.G.N#8.C.EaN.N.Ca......E.B.E.E#7a.a2.E.....#.#.#aRaO.H.1.#.#.#.#.#.#..bob5ai#9.E.Ean.#.....#.#.#.#.#.#.#.#.#.#.#bSbS.#.#.#.#.#.#...#.#az#0.##0aGaGaC#Z#P......................ao#V#L#U........................................................#V......................avavap#V#Jap", +"bhb0b4bjaW#k.4.K.x.4#m#i#c.7.A.8bbbeblb7bhb2b0bgaTaTaT#e.4.4.y.JaSb7bh.zbfbf#n##a6bibgaW#d#d.L.G.waObdaU#c.KbkaO.4.4.G.G.1b1#gbcaU.4.4.M.x.G#fb1....bm#e#e#b.K.y#fb8aTbVbfbbaU#g.5aWaWaV#e.4.x.GaS.4.O.u.1a5aRaO.4.ua8a7aRaO.H#8a1#8a1bxbZaVaO.L.Ga7a5aQ.N.B.CaQ............bpb4ag.E#3...#.#.##8.u.1a5.#.#.#.#.a.#bnbpbwa2#7.E.E.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.2b6.#.#.#.#.#aHaLac.saK#0#K..aGbuaB#1#Paa....ayayar#M..........#J#M..................................................................................apap#T#L#W.a", +"bib0b4bVaT#e#k.y.w.4#b#c.7.A#c#lbebkbWbWbibjbiaW.4.4.4#b.z.x.z#bbVaY.z#ibXbf#m#.a5aVaVaP#e.4.I.w.waSbhaU#c.Ab0bW.G.M.uaOa6.9bkbhbb#i.w.L.waSb#.7....aXaP.1#b.xaSbV#daWbkb2bkaRaO.zaTaXaP.4.G.ybaaW#e..aOaVaOaO.O.xa8bxbxaR#8.L.IaR.Oa8b3bxaR.4.Ibrb3a5aN.O.ub5......boa3a0#7.Ea2a#.B#7.#.#.#.#.#.#.#.#.a.a.a.b.b.a#9a2ag#9.E.v#7.#.a.a.#.a.#.#.#.#.#.a.a.a.a.#.bb6.#.#.a.a.#aLaJak.ras#U#O..aGaB#1#P.qacaGaI#Z.q#0#M#M............................................auauat#T............................................#L#Laqat..", +"bhbjbibcaX#e.K.w.w#d#c.z.z.7bTbkbfbdbkbdbmbcaT#e.4.y.x.x.K.z#faZaZ.A#fbbbXbU#h#.aVaXaP.4.4.G.u.1aZaZbd#k.z.zaUbb#kbf.4bf#mbhb2b0bb#i.4.Abd#e.z#c.#b8aU.J.x.z#b.xaSb...bda8a8a9aR.O.u.4.M.x.w#daY.y.#.....4.G.L.L.LbibZbxaP.O.u.Ial.HaWa6aR.4.La8bZbyaVaO.I.u......bob4bqa0#7.Ca#.E.Ebn.#.#.#.#.a.a.a.aa8a5#8.u.a.b.b#9a#.E.B#6b7.b.b.b.a.aaB#R.a.a.a.a.a.a.a.a.abRaB#Paz#0.aad#4.ram#Q#QbY.#ac#Y#R.q#1aGbYaC#Z#O#Uayaq#W..................................auao...#aKaKao#T#T....................................................", +"aWbmaWaT#d.4.J.x.KaT#c.z.7#lbdbbbbaUbbaUaTaTaX#d.y.x#bb1aW#i#e#b.A.1b6bf#o#m#g.7.6aO.4.4.J.u.G.1b1a6#i#b.A#baU#ibUbUb8bU#hbkb2bWaU#e.7.z#i.7#bbc#nbf#h.K#a.1bVbc......bbbxb5a1aO.O.u#m.J.y#daS.ya8a8a1aQ.N.4....a5bra5aR.O.H.H.H.H.CaVaXaO.O.ua5a8aVaO.O.u.I......bobra7#7.E.Ba.#3a7a3a0#8.#.a.a.b.aa7bxa5.O.u.b.c.c.d#3.B#6bw.b.b.c.c.cbtaC#Y#P.b.b.b.b.b.b.b.abtaCazaKar#X.##Pae.#.#.#.#.#aG#R.q#1aCaGaG#Z#Q.qacbuaz#U#J.............................#avawap#V#Lavap#V#Jaq....................................................", +"aWaTaT#e.4.K.x.1#faZ.7.7.8#h.5#g#g.7#i#i.4.4.4.y.J.1aZbcbU#b.7.A.zbTbd#n#m#g.9.3#g.I.L.w.x.x.1b#b##k.8.A#bb8#c.7bfbfbfbe##bdbdbb#e.4.A.zaU#haZbW#m.6#..Ab6#cbhbc#e.w..a8bxbsa5#8.I.uaO.6bV...4aXbsb4a5aO.O.u..aRaOa1aRaO.1.u.3aO.HaN...O.L.u.GaRaRaO.1.H.1aP.#.#..a2a2a..N.v.Ea0bqb4a7aQ#7.P.b.b.c.b.aaRaO.ual.e.e.e.e.e.c.d.dbzah#5.caCaGaaaCaB#P.b.c.b.b.b.aaBaC#YaAaG#0#N#N.a.#.#.#.#.#.##Z#Y.qan.#aB#Z#X#O#Paxayaq#M#J............................auaAaAap#T#Lap#V#J#Tau..............................................awauap", +"aT#e#e.4.K.y.yaTb6aY.7.A.4aU#n#m#c.7#i.8.4.A.5.K.1aZaY#..9##.z.zaUaU..#..8.9.9.9bXbebf.G.GaPaS.y...4.7#cbc.z.7#l#m#n#n#h.8bbaU#i#c.5.z#baU#.#gbf#h.6#lbe..a5aRaO#ba6a6aRa8aRaO.O.u.IaS........a7bxbia1#8.Ia8a7a5aQ.4.4.N.I.HaZbT.........L.1aPa8#8.O.I.IaSa1...#.#a.a..N.C.Eb1a3bqbZa7#8.E.C#8.b.c.c.c.N.ual.e.f.f.e.f.e.g.gbtbvaFaDad.d#YaGbvaB#R.c.e.c.c.c.c.caa#Parar#X.taB.a.#.b.#.#.#.#..#O#1.#..#Q#Q.q#Obuaqaq#U#JaM............................atavat#V#J#T#L#T#Uax..............................................auaAaAau", +".9#b#b.y.x.z.1bTaY.7.y.z#ibb#n#j#c.A#gbf.4.4#ibcaPbUbd#..9.9.9b8bf#h.6#c...8#.#n.7.7#m#.blbb#h.z..............#o#h#l#g.9.7#b#i.4.7.z#cb0#h.6#.#..9#h.#.#a8a8a1aO.O.Ia6aR.4.I.1.I.IbaaR.A......a5a5aRaO.I.ubrb3a9aQ.O.I.L.IaSb#a5..............brbx.x.I.4a5.#.#.#.#...F.E.Fa0.#a0a3a0aQ.N.C.FaQ#6.e.e.e.f.f.f.f.f.f.h.h.f.fa2btaFbtaFab#2#2aCaH#R.qae.e.g.e.e.b.c.a#P#M#Q.t#ZaGaB#R.#.#.#.#.#.#aGaIac#Rar#0#Rar#U#S#L#Kas................................ao#V#L#LaK......................................................atavaoav", +".9#n.y.K.w#faZaY.8.z.8#lb8bW#j#h.8.6#gbf#j.8.8bga6aWaR#d#i.5#obXbd#g.6#g.5be#m#c.A#l#..6bfbkaU#c.7..........bWbUb8.9.8.8#g#n.z.4.A#fbe#h.7.6be#l.6bf#ma8b4bxaRaO.L.xbiaP.4.I.I.H.1b##..z......aQaQaN#8.ua8bxbsa9#8.N.C.O.4aObs................a1aN.P.H.#.#...#...#.#a2a..#.#.#.#aNaN.O.C.Cam.sa0.e.e.f.f.f.h.h.f.h.h.h.h.h.haEbzbuaD#5#2.rac#1#P#4#Y.r.g.gaGaC#Z.r.cbT.c.caGbvaB#Y.t.a.#.#.#aGbuaHaB#R.q#W#Qauap#J.....#..................................#T#Wax....auauao#L..............................................#V#Tao", +"#h#g.6#m#m#f#c#b.z.z#bbXbdbe#j#g.6.6#hbe#g.7bibga6aVaX.4.J.w#h#m#l.7.6bU#o.9#c.7#cbbbf#m.8bW#j.7.7#.......a6bf#o#o#n.9bbaU#i.4.zbXb2bb#g.6#gbfbfbe#j.7a8bZbxaR#8.I.IaOaO.1.x.1aOaR#g.A#l.........O.N.u.Ha1a5aRaN.O.C.HaO..a9a0.O.................N.1a4...#.#.#.#.#bobra0#7.B.#.a.H.N.C.valbZa2.e.e.f.h.h.h.h.h.h.k.h.h.k.h.h#5aDaDab#2.s#4.h#P#PaD#R#O.haGbuaGak#P.d.3bS.baGaI#R#O#P.a.b.#.#aHbubt#Z#R.q#0#K#Mao#L.#.#.......#.....................................#aAawap#T...............aauat............................#V..", +"b8.6.7bW#..7.7#b.A#ibebe#m#j#g.8.A.7#m#n.9bib0b4b.aTaP.4.J.I#g.9.9.8b2bU#n.9bfbb#fbfbfbb#..5#c.A#g#...bgbmaT#b######.9bX#k.7.5bebk#m#g.9.6#mbfb2bb#h.7a5b#aRaO.1.u.IaO.O.x.waV..bgaW#e.J.............NaOaRaQaO.O.P.ubabqbqa7a1aN.H...........#.#.#.....#.#.#.#.#.#brbvag.N#7.b.b.abg.Eala0.g.f.f.f.h.h.h.h.h.h.k.k.k.h.k.i.iaFadab#2.r#2b7.i.i#Z#R.qb5.haIaCacaI#Zad.dbR.d#Z#Z#R.qb5.a.a.a.#aGaIac#R.q.r#U.t#X#T#J...................#............................avaxap#V#L..............awaKap#L..............................", +".8.A#mbe#m.8.8#l#i....#m#h#g.8.A#cbgbmaUbhbhb0b0bjaX#d.M.I.w.4.4#.#nbfbb#.bkbkbb#k.5#o##.9.6.z.9b2#obibZbmaX.4.w##.9#h#l.A.5#ibc#m#h.8.A#lbkbWbW#m#g.7aRaRaO.1.I.FaOaR.G.Ibabibjb2aV.4.w................b7.O.L.I.u.1b3bqb4bxaQ#8.P.H.............#...#.#.#.#.#.#a2a3a0#7.Fal.a.c.caWaX.1#b.f.f.f.h.h.h.k.k.k.n.h.h.k.k.h.kbtbvah#2.s.rbw.k.k.i.i#QaB.i.i#YacaGaGar#Y.qbH.d.d#P.qan.b.b.a.a.#aBaa#R.q.qbY#K#Qas#LaM.#.......#..........at#T........................#Tao#V#Jas..............atap#T#L..............................", +".A#.#o#h#g.9.7b8......#g#g.8.7.4bjbhbhbkbkb.bjb.aV#e#d.J.x.MaX.4.wb2bl#m#g.6bW#j#k.5####.9##.8bebUbhb0b0aWaT.4.y.4b8bb#c#c..bhbc.8.8.A.8bWbebf#m#g.8.A.O.4.O.1.I.2bZ.u.uaSb#b2bibg#d.M.xaV.7........aWbbbe#g.C.IalaR.Gbrbsa7a..O.C.N.......#...#.#.#.#.#.a.#.a.a.aa.#7.E.Bb7.c.c.c.e.K#f.f.f.h.h.h.h.k.k.p.k.k.k.n.n.n.kaEbzbvaj#4aa#4bpbzah#3.s.k.k.k.kaIaGbuaLac#Q.q.3bH.g.d.c.c.b.b.d.a.a..#P.q.qaa.t#NaJ#Vaq.#.#.....#...#.#..auauav#V#J.#......................#L#Laq................#L#L#LaA..............................", +"#.bf#o#m.8.9#m....a9#8be.5.7.7bhblb4bhb0b4aWaWaVaP#d.1.x.G#daV#d.J.KbW#j#c.z#i#i.4.5#j#..6#n.9....bgbjaYaT#d.y.x#ebd#k.z#hbkb7bj#k.4#c....#j#j#i.8.A#ca5.I.L.xaPb##c.6aO#.....aTaP#b.x.M#h.8.#....b0bga8a8a6aR.L.....4a1a1aQ#8.H.Cal.....#...#.#.#.#.#.aa3a0#7.a.b.F.C.Ba4.c.c.e.e.e.f.f.f.h.h.h.h.h.k.k.k.k.n.n.n.o.o.mahaDaj#5bzaEaj#2bsaf#6.D.n.n.n.n#XaGaGaB#1#O.q.fbH.2.f.d.c.dazazar#0.#.a#Rac.##Xas.#.#az#W.#.#...........#avaAav#V#L....................................................................................", +"##.6bf#h.7.8.9..b5a5.1bU#m##bfbhb0b0bhblblaXaXaP#d.M.w.3#db6aV.M.y.z#m#c.z.7#j#c.A.5bb##.9#o.9bfbfaWaVaT#e.1.x.yaV#i.7.8bdbhblbc#k.5.5....#f.4.8.5.8bia8a5aO.O.u.J.J.6#j....bh.4.4.x.1aY#..5......a5a5aX.Ma5aP.O.x..a5aNaN#8.N.valb7.....#.#.#.#.#.b.#bqbqa0a..C.b.b.c.c.e.e.e.e.f.f.f.h.h.h.h.k.k.k.p.naFaiab#2.o.n.m.o.mab#5bzb5aJaj#2.Q#9#2.Q#9.m.l.l.kaBaB#Y#1.qambH.0.0#E.2.daDaAaMar#X.t.a.#.#.#.#.#.#aKazar#M.#...#.#......atatao#L#W....auap................................auavap#L....................................", +"##.A#m#..6#..8..a1aO.ubU.9bUb2bcbjbcbcbhbc#d#e.4.M.J.G.1bTbibga6aVaX#d.K.A#kbb.7.7b1#m.8.6.9bUb8#obf#e.4.1.w.Kb1#g..#.....bbaU#i.z.y#ibb#c..b8#o#.a8b4b0aVaO.L.u.J.L.w......aWaU#g.4.6bX.AbV....bia8a5aR.1.uaO.L.IaP..aU.N.P.u.NbZ.....#.#.#.#..a9aN.abxb3a0#7.E.N.e.c.e.e.e.f.f.f.h.h.h.h.h.k.n.na3a0a.b5aiab.D.o.o.o.o.U.Q.raFbtaE#5.D.D#6.Q.D.m.o.m.m.m.l#R#O#P#1aC.2.i.f.j.3btazaGazazaq#M.b.b.b.a.a.#azaKaK#W#K#M...#.#....aGar#V#L#T.#..aAaAap#L............................auaMaxao#L....................................", +".9.6#n.6#.be#n...L.x.1#o#nbUb2aWaUaTaUaUaT#e.K.M.G.u.1aZbibia6a6aWaT#d.J.wb0.8.3aZ#n#..6.9#obUbUbma6aVaP.L.1babe#g.6......#c#ebfbfbb#g.5#g#obUbgaVa8bxbxaXaO.I.xaO.J.w..bb#e..#b.y.5bc........a8b3b4aVaO.O.u.O.x.IaVaV.O.4.N.NaQb1.#.#.#.#.#.ab3a8aOa0boa2#7.N.Cal.e.e.e.f.f.f.f.h.h.h.k.h.k.n.nbqboa2a..Eai#6.Qae.oaDad#4.X.Xahadab#3.s#6.D.DbY.U.o.U.U.UaHaL#R#R.l.2.0.i.i.haFbuaJaraLaGar#Q#M.b.b.a.a.#arar#W#M#Nas........aAaL#Z#Q#V.#..avaxat#V#Jao..........................avaxap#V#Jap..................................", +".6##.9.6bXbU.#....bfbU#o#obU#oaTaT#e#e#i#f#c.7.y.M.1#eaPbhb4b0b.aWaPaO.L.x.4b8#n#n##.6.9b6bX#obibia6aVaP.4.ubUbf#c.A......#h#gbWbU#m#h.6.8#nbhbjaWa5a6aR.4.N.x.IaX.4a8a5aR.G.z..#k....a5aR.O..a8bxbxa5aO.L.CaO.IbT.M.4bxbx#d#daT.....#.#a5#8a1a7aR.N.Ca0#8.N.valaV.f.f.e.f.f.h.h.h.h.h.h.k.n.n.nbyb3a0a..E.C.D.D.DaHbtah#4.r.W#5#5#2.D#2aJ#3a2.X.X.U.U.U.UaBak.qae.m.0.k.k.k.iahajabaAaGas#0#K#S.d.b.b.b.a.a#U#M#Man.#.....#..aIas#Y.t#1......atao#L#W.a..........................apap#V#L#W....................................", +"#n#####n#h......bUbUb2#n#.#o#n##.4#b.z.1.4.z.A.K#ibVb0bhbxb4b2bgaTaP.4.y.x#a#o#n#..6.6#m#o#hbibZb4b.aVaO.M.x.4#g.6bV..bhaW#ebfbXbW#j.8.A#h#ob0b0aTaRaXaO.4.x.1bTa5bibia5aO.O.uaU..a8a8a7aRaO.ua5a5aRaO.O.x.IaSa5a5.w.4bia6aO.x.O...#..b4a5.O.uaQbqa0#8.N.N.B.CbZ.f.f.f.f.h.h.h.k.k.h.k.n.n.n.oa3bra3a.#7.C.E.DbY.Bbtbtaj#2.Q#y.W.D.D#6aJ#v.W.W.W.W.U.V.U.U.U#Pan.S.U.UaGaGac#P.k#2.Qarar#0#N.t#Z.3.daB#Z.b.a.##U#0ar#Q.#.#.#.##Z#0#S#QaB.#...##T#L#Uax..............................#T#Laqax....................................", +"#obU#o#o##.9#o##bUbUbU#n###h##.9.6.K.1.KaT#b.4#c#ibhbxbibjbxblbgaX.4.M.w.x#dbUbfbU#o#h.6bf#jbibxbxbjaX#d.J.w.4.5#l..bjbjbd#j#i.K#m#g.6.6#naWbiaV#e.K.4.L.I.1aSb#a8b3b5a5aO.H.u....a8b4a8aO.O.IaRaRaO.1.H.1bTaV.O.C.Lb7aRaVaO.1ba.#.#a5a8aN.4.ubqbya0#7.E.g.L.f.f.f.f.g.hbnag#9.E.p.n.n.n.o.ma3boa2a..F.F.Cal.D.DbwaDad#4.r.D#v#y#y#v#v#y.W.W.W.W.W.V.U.U.U.U.U.U.U.S.laHbtac#P#R.i#5.i#U#M#O#N.h.0aGaH#Z#O.b.bazaKas#0#O.#.#....#Q#Nas...................................................#....................................b6", +"bUbXbU#o##.9###n####bU#nblb8.9.9###n.8b2bUbUbfbf#mbhbja6bib.aWaX#d.4.G.x.JaSa6a5aX#e.Lblbd#ma6bib.aT#d.M.x.waP#n..bhblbdbdbb#i.5.5.8.6bT#n#.aT#e#a.xaT.I.GaOaRaZa6bia6aQ.4.I.uaRaTa8a8a5#8.L.uaO.O.L.I.uala5aO.O.CaZ.Oa8a5aR.O.u.#.aaQaQ.N.uboa0aN.F.E.Ca..f.h.f.h.f.gbrbsa0#9.C.n.o.o.o.o.Sbrb3a2a..N.Bala1.Qbnbnaia#.Q.Db5#y#y#y#v#y#y.W.W.Y.W.W.W.V.W.V.U.V.T.U.SaCaHaBak.q#1.k.k.i.i#X#0.j.f.daHaH#Y.q.b.baGaGas#N#O.b.#...#.#.......#.#...................................................................................2", +"bUb6#o#o##.9####.9.9#obU#o#n.9#c.6#gbVbf#nbWb2be#maWaWaWaWaVaTaP#d.J.x.w.1aWbiaVaXaO.O.ubX#jaVaVaXaO.1.x.1.1aV#n#obhbkb7bVaU#e.7#b.A#l#i##.9.4.4.x.1bV.6#m....biaRaRaP.4.G.u.ObVa6a5aRaO.L.u.HaV.I.I.IaOaVa5#8.H.uaObrb4a4aO.O.u.#.a.b.N.ubybxa1#8.N.H.E.f.f.h.h.h.hbobybsag#7.E.E.o.o.o.obobvbsa2#7.E.Ca3.Dafbtb3aga#.Eae#z#z#A#y#y#vaFab.V.W.W.V.W.V.V.V.V.V.T.T.S.Uac#1#P#4aCaG#Z#O.i.j.i.j.f.hac#Y#O#1#E#Earar#X.t#XbQbM.#...#.#.#.#...#.............#.#....................................................auauat#V....bR.2", +"#o#o#o##.9.6####.6##bUb8#o##.9.9.6aZ#o#hbfb2bXbe#haTaTaXaTaTaP.4.M.w.y#bb1aVbZaVaP.4.L.u.O#f.5aPaO.1.G.w.1b1bmbfbfbdblbUbk#i#b.z.7#nbb#g.z.6bdbb#j#c.6.6#n..bfb2b0aO.4.L.Ibia6aVaPaOaO.O.I.IbT.u.1aW#ea1aRaO.L.v.Ia7bsbxbi#8.G.uaO.a.b.ca9bybyaR.O.C.Nb5.h.h.h.h.ha7a7a1aN.P.E.va..o.o.X.Xa0a2ama..N.v.F.B#Ba2bpa2af#3.B#6#A#A#y#y#ybnaEaf#4.r.W.W.V.V.V.V.U.U.T.U.T.S.r#P#4aJaGbtas#R#O.k.j.j.h.g#Q#O#PaC.e.3.2#X.t#X.#bMbF.#.#...#.......#...#..............................................................auayaKat#V#J...3b6", +"#o#n##.9.3#n#o.9#.#nbXbX#n##.9.9#obUbX#obfbfbe#l#g.7.1.1#d#e.4.J.1.1.MbTbVb0bZaVaP.4.G.x.O.7.z.J.4.w.x.1b#aW.8b2be#hbdbb#j#c.K.z#kbk#g#b.6blb2be#j#c.AbXbf#obmbiaW.I.N.ubhb4a6aT#e.K.L.I.1ba.x.Lb7#iaWaT#e.N.H.Ib4..a5aRaO.O.u.L.#.b.c.ca1a7aQ#8.1.ual.h.h.h.h.h.hb3bxaR#8.P.C#6a0.o.o#v#vaga.#8.E.B.Nb7babDbDaiaf#6.B.D.B#A#A#z#Abzbrbpaf.E.D.V.W.U.V.U.V.V.U.U.T.T.U.S.S.S.SaGaC#X#P#R.laq#U.i.j.i.f.h.fayaq#J.0#EbH.#.#.#.#.#.#.#.#.#.#.#...........#........................at#T........................auaKaxav#V#L#LbRbR..", +".9##.9.9.9bX.9.9bU#o#o#o##.9.6#lbUbU#obU#n#n#m#g.9.6#..w.K.M.4.y.walaZb#bib#a6aPaO.L.x.x#d.z#lbV#h.4.1#fbe#m.8.8#n#.aU#i#k.7.A#fb8#j#c.Abkblb2bc#i#b.7#ib8beaWaPaP.4.ubhbjb5bgaP.4.y#a.I.IaO.1ba.4bgbgaU#e.y.La7..a8aQa0#8.I.Nb1.b.c.b.eaQaN#8.O.vala4.h.k.k.h.ia7bxbZaQ#8.u.HbY.X#v#v#v#A#v.N.N.B.Cba#6bDbD#Ba##3.D.DbY#2bA#A#z#zbpbvbo#9.E.B.W.W.W.V.V.V.T.V.T.S.S.T.T.S.S.Sar#Z#1.qaBaKay#W#M.i.i.j.faGaLaq#K.d.dazar#W.3.b.a.a.#.#.#...#.................................#aAawao#T......................auawapao#T#LbY.3b6..", +"#m#g#.###n##.9#n#o#o#n#nbdbd#m#k#o#o##bUbU#h#g.9.7.8b6.8.6.8#h.4.4#eaWaVa5aRaR.4.O.G.u.LaV#k#..Abb.9bfbfbf#h.z.8##.9.8#c.5.z.7bX#h#c.A#fbdbfbf#j#c.5.7bbbWbga6aP.4.x.1bmbibgaT#d.K.w#f.u#daSaU#cbhb7bjaV#e.J.K#d..bqa3a1aQ.N.C.a.c.c.e.f.f.L.H.u.FbZ.i.h.h.k.k.ka9a9aQ.O.N.u.1.X.X#v#v#v#v#B#B#B.Nam#B#B#BbDbDbA.D#3af#3bA#A#z#A#za2aia..E.B#6.Y.V.V.U.U.T.V.T.U.T.T.S.T.S.R.S#Q#O.qaeaxayaq#M#X.k.j.j.iayaq#U#K.daybuar#U#Mba.3.a.a.#.#.#.........#..........................avao#Tao......................atat#L#T#JasbRbS....", +"#m#g.6#n####.9.9bSbU#.bfbfbe#m#k.7.z#i.4aU#c.8.6#gbT#h.9.9.7#.bl.5#cbfaXaXaP.4.O.I.x.1bTaW.8.8bTbfbe#o#n#h.8.6#l.6.9bV.z#b#b#f#c.z#l....bbbb#j#k.9.5#ibbbhb7a6aP.4.xbVaTaWaXaP.4.x.JaT.Ib1.....5biblbjaP#a.w#baZbobyb0a1aQ.N.C.N.c.e.f.e.f.f.h.Na0.p.h.k.k.k.p.kaQaQ#8.N.u.1aRa2aga#.F#B#B#BbD#BbIbDbDbDbDbDbCbCbDaJahbAbA#zbA#z#z#9#9#3.B#6bs.W.W.V.V.V.V.V.U.S.U.T.S.SbObM.S.RbObOayax#0#U#KazaIac.k.j#U#L#MaM#UaxaA#U#M#XawaAaq#U.a.a.#.#...#.#.#.#........................#V#L#L.#......................#T#V#L#LaKb8.3.#....", +"#l.8.5#gbU#..9#n#o#lblb2b2#o#j#g.7.6aT#k.y#k.5#.b8#o##.6.9.5#nbe#m#gb2bX.4aO.1.G.G.Ibab1.9bfbb#gb2#n#h#h.8.z#.bU#gaU..........bmbga6aR.4.G#k#c.7.A#fb8.Kbibjbj#dbc#i#b#j#e#e.4.x.waZaWaV........a6aWaT#d.w.AaZ..a7bybya1a..N.C.N.e.e.ea6aV.4.ha9aN.i.ka2a..j.na0a0.O.N.C.Pb#bvbyai#7.B.E#B#BbDbDbDbDbDbDbCbEbDbCbCb3aj.DbAbA#zaFaDad.D.Eala3.Y.Y.V.Y.V.V.V.T.U.T.T.S.S.RbObF.R.S.SawaMaz#0.t.laGbuas#Q.n.jayaGaz#Maq#W#M.t#ZayaKaq#T#M.2.a.#.#...#...#.............#............ao..............................#V....#Eb6......", +"#c.9.AaU#obU#o#n#..9blb2bWbmaU#k.4.5#j.4.z.4.K.5#n#h.9bfbfbf#m.8#gbUb2bX#m.G.O.u.1aSbxa6.6#h#m#c.6#g.8.8.6#g#obb#k.7..#o##....bib0a6aX.4.J.G.7.z#fbV#e.za6aVbkbhbcaU#e.A.7.y.x.xaTaW............aPaP#d.K.w#ab1..boa9a7a9aQ#8.Cal.e.e.fb4aV.MbrbxaOboboa3aN.P.Fa3a0#9.B.NaQbobsbqag.E.B#9#BbIbIboam#3bEbDbDbCbCbDaEai#3.QbA#zaFb3aFab#2#PbA.Y.W.Y.Y.ZbM.V.V.V.U.T.T.S.S.TbFbC.S.S.RazaAaz#U.t.RazaG#X#Oac.l.kaq#U#N.f#L.t#Xaxataq#T#Jaq.2bRbR.a.#.#.#.....#..........................................................b6.2........", +".8.A.9bebUbXbU#l.9.9bfbhbhbgaU#e.4.y#jaU#i.4.z#bbb#jbfb2bU#n#h.8.6bfbfbb#hbdbd.4.4aX.7#o#.be.7.7.6.8.7b1.8blbW#j#cbhbcaU.4bda8b0b0biaR.4.w.LbmbhbjaT#b.waPaPblb7bc#i#b.y.4b6..aX.9be...............4.y.x#fbV.#b2bra8bra1aR.O.P.N.f.fa6a8boa3a0#8aObob3bq#9.E.Fb3a0#7.C#v#va2a2a.a#.B.EalbDbDbDb5ag.Ebzbta2#9.EbDbA#3.sbw#z#zaFbzaD#4.r#2.W.W.W.V.WbObOaGaBaa.S.T.T.S.R.T.R.R.T.T.Razaq#0.tan.lar#0#N#Q.l.l.n#S#Mas.i.i.f.j.d#W#W#J#LaA.b.b.2bRbH.#.#.#.#.#...........................................................2b6........", +".6.8b2.6#o#o#n##.6bWbhbxb4bgaUaP#b.y.4aWaT#c.z#ibb#ibUb2bW#m#g.6.6#n#n#h#gbkb0bc#i#c.5.z##.9.A.A#l.5be#n.6bbaU#kbhaWaTaU.4.Aa6bib.aSaO.1.x.1.7aWaT#e.y.KaTbdbkblbh#e.7.w#k.............................4....bfbfbrb4b3a1aO.N.H.I.g.hbhbqboa3aN#7.C.Ea2a.#7.v#7a3#7.F.C#v#A#9#9a#.E.Eb1bDbIbEa2ama#.Bbpb3ai#5.E#2#z#z#A#y#y#yahad#5#2.Dam.V.V.V.V.VbMaHaHaCac#P.SaEah#5.S.R.R.R.R.R.R#U#K#X.R.l.R#Q#Qar.l.l.l.k.l.k.j.i.g.h.d.f#M#Xaz.c.d.b.b.a.2bRbR.#.#.#.#......................................................bS#E....at#V..", +".8be#h.6#g#h##.6blb2bhblb2bgaT#e.7.y.4aW#i.4.y.4bb#kbfbf#n##.8.6.8#o#h#.bkbWb2bcaU.4.7.7##.9.z#iblblbf#m.8.6#cbhbjbmaT.4aWaR.4aXaP#e.M.x.waS#c.7.4.y.wbV#.aUbcbbaP#b.w.zaZ.8................................bWa9brbsa8a4#8.N.C.Na7a1bobxb5a7aN#7.C.Ea.#7.B.1b7a..P.CbTa0.Pa2.B.E.Ca4a#.BbIbEbIa#.Ebzbpboaja#.B#3bA#z#y#z#z#y#2#4#2#2am.V.V.V.U.T.UaCaHbuaCak#P#Rbvah#5.Q.T.R.R.R.R.R.R.R.R.R.j.R.R.R.R.j.l.l.l.l.k.k.j.i.i.h.d.d.g.g.d.c.c.c.c.b.a.2bHbR...#.....#.#..............................................#Eb6..aAav#V#J", +"bhbcaU#i.7.9.9#gbebfbhblbjbm#e#c.y.w#e#i#c.5.y#b#k#b#n#n#m#..6.8#l#n.5.8bhblbkbc#k.7.z.K##.9##aUblbmaWaT#e.6.5bhb2bcbibia6aVaO.4.x.O.G.Gbaa5.7.7.w.yaZ.6#obfaT#i#c.J.zbTbb#g.8#h.6..........................bb#ia9a4aQ#8.O.C.ualb0a9a9bqbqa4#8.F.B.F.F.B.FbY.X.N.Balbra0.E.B#7bobvag#7.BbIbEbIbJ#3aiaiaf#5.D.Dan#A#A#z#z#y#z#y.Z.r#5.W.W.W.V.VbGaHaHaCaBaa#2.qaebtaj#3.Q.T.R.R.R.R.R.R.R.R.R.j.R.R.j.l.R.l.l.l.l.l.l.k.i.i.j.j.i.g.f.g.d.d.c.c.b.b.a.a.2bRbR.#.#.#.....#........................................bRbR..auaxav#V#J", +"bjbhaUaT#b.x#b..#n#mbcbmaTaP.4.5.A.1aZaU#c.5.w#i.4bmbmaT#e.K.7bTbk#n#..6bdbcaU#k#c.5.z#faU.9#nbdbjbhaWaT.4.5.Jbjbhbmbxb7a6aX#d.L.w.L.1bab#.8.A#gbX.8#.#.##bi.4#c.y.y#fbd#h.8.8#h.9.........................#.7.5a1aQ#8.N.P.u.1a4bxa5a0a0a0a..N.E.Bal.o.o.X.X#v#va3bqbq#9bpbnagbnag#7.D.BambJbEbEb7#5#9#6.D.Balbs#A#z#A#A#z#y.ZbMbJ.W.W.V.W.V.VaGaLaLaaaa#P.r#1aHaj#5.Q.D.RaGaLac.q.j.R.R.R.R.R.R.R.l.R.l.j.R.l.l.l.l.k.l.k.i.h.h.h.g.d.g.d.d.d.c.c.b.a.a.aalbabR.3...............................................3.#..apap#V#Jaq", +"b8bgaT#k.4.y#b..#o#caUaT#i.4.5.x.KaZaY#i#c.z.7bmbibVbmaU#e.1.xbfbU#h.8.6aUaU#i#g.7.A#caZ.9b9bdbib4b0aWaT#c.J.yaWaTbibxbZbiaP.O.I.xaPaOb##c.z#cb8##.6#o##.9bjb4aV.4#eaW#d.8.A#l.9.6......bd#k...............#...#.P.O.O.C.H.Nb1a4aRaOa.aN#8#7.C.Falb7.o.X#v#v#v#v#Aa0boa0.Ebv#9a.#9.E.BbabEbJbIbIbc#c.Q.E.B#9bwbzaEag#3#z#y#y.YbJbDbJ.V.V.V.U.UaIaCac#R.r.qaead#5#3.D.Db5bAaGaL#Y#O.l.R.R.R.R.R.R.R.j.l.R.R.R.R.l.l.l.l.k.k.i.i.h.g.g.h.f.g.d.d.c.c.b.b.a.a.a.#.3bHbR.2........................................bRbSap#V..#T#Jaq..", +"b0bh#i#e.z.A.4aUaT.4b8#e#c.K.A.y#bb1bm#k#b.5.4biblb4bcaX#e.4.Jbe#j#..6.Abe#k.8.5.A.zbTbb#obXbbbhb0b0aW#e.4.y.y#e#eaWbia6aP.4.1.x.MaW.8.8.A.9bV#..9#.#o##bmbia8a6aRaO.waP.z#l.6.9b6....b0be#k#b.........#.#.#.#.#.a.x.H.CaOa7bXaN#8.N.u.E#7.E.C.NbT#m.o#v#v#v#v#AbBbybrag#7.B#7.B.E.BambIbIbJbJbI.4.AbVbA#A#zbpbybnag#5.B#y.Y.W.W.U.V.V.V.U.Ta9#8#Y#P#O#PaI.B.S.l#2#2ae#O.Zac#Z.r#PbFbCbMbFbB.R.R.R.R.R.l.R.R.R.l.l.l.n.l.k.j.j.i.h.f.h.f.g.g.g.d.c.c.d.b.a.a.#.#.#.##EbSbR.#..................................auaAat#V#L........", +"aUaT#c.4.xbhbhbcaU#k.5bh.J.A.A#bbcbm.w.4bgbmaVaP.1b0aYaT.4.K.J#e#g.9.6bU#obf.5.A.KaZaY#gbUbdbebmbmaW#e#d.K.x#baW.K.AaVaPaP.O.x.1aS.9.9be#g#gbgbdbb#g..bf#obib4a6aP#d.I.O#l.8#.#h....aU.7#j.7#f.............#.#.a.b.c.c.e#c#n.h.i.I.uaSa5bf.N#7a0.z.X#v#v#v#v#B#Bbobvbsa..E.E.E.Fb7bIbIbIbIbJbEbDbDbDbA#AbA#Abpb3bpaf#3.D#3.V.WbNbE.V.V.V.Vbobr#8aL#R#1#R.q.D.R.R#S#Q#OaGbQ#P#O.qaMbB.ZbF#zbC.R.R.R.R.R.l.l.l.R.l.l.l.l.l.l.k.k.j.i.i.h.g.h.g.g.g.e.d.b.b.b.a.a.#.#.#...b.2bSbS.#............................bRauaAax#V#L........", +"aU#i.4.AbhbxbhbcaU#k.4.xbWb0#eaT.4.J.wbibga6aVaP#d.IaT#e.z.w.1aP.9.z#lbUbUbU#n#g.6##....bWb2beaWaVaT#e.4.x.waX.6b6.6#c#d.M.L.wbab.aWaT.4bf#jblbWbe#k.7b8a8bxbybjaP.O.I.O#h.6......bWbcbf#m.6bd.............#.#.a.c.e.e.f.f.h.h.k.k.n.n.nb2bW#k.zbX.Xa0a.#A#B#BbDa0a2a.#7.C#7.BambJbIbIbJbEbEa3.N#BbD#BbDbCamaibnah#6.E.D#9bNbJbJbF.V.U.UbMboaN.PaCaB#Y.q.r.EbA.l.l.l.jbAbMbC.l.jaHac#z.R.R.R.R.t.Rawaq#M.R.l.R.R.R.R.l.l.m.l.k.k.i.i.h.h.j.h.g.g.e.c.c.c.b.b.b.#.#...#.#....#EbSbS.#......................b6aSatat#V#Jaq........", +".4#c.K.zbhb4b2bcaU.4.z.z#caYaT.4.4.xbib4b0a6aVaP.4.w.L.4.x.A#faTaWaT.4bUb8bW#m#g.7###.bkbWb0bd#e#e#e.5.w.yaZb6#n##.9bU.G.G.1aSb#aVaX.4.M.Jblb2bW#j#g.7#caVa6a6aR.O.G.uaS.8.7....bkbkbXbX#j.7#h...#.....#.#.#.a.b.c.e.f.f.h.h.haSaR.I.n.pbd#j.7.z#vbqa7aQ#7.EbDbIbD#9.E.E.Fa4bIbJbEbEbpbnag#3a1.N#BbAbBbA#AbJaiafa##3.s.DafbNbCbMbMbFbJaCaHaCak.P#Zak#P#PbubYbM.lahajbFbMbC.Z.jaHaLaa.r.R.R.t.R.RawaMax#U.R.R.R.R.l.l.R.l.l.l.l.k.k.i.i.i.h.h.f.h.g.d.d.c.a.b.b.#.a.#.#.#.#...#...2bRbT....................#Eb6..#T#J#T..........", +".4.A.x#fbhblbkbcbgbmaU#i.KaX#e.4.x.wbhb4b0bmaX.4.M.I.LaR.x#bb8bgaWaT#b.xbfbe#g.8.9#h##bTbfbb#j#c#b#a.x.y#fbVbf##.9.9bU#mbha6bibia6aR.4.x.Jbebfbb#k.7.z#laVaVaP.4.I.uaSaV.6bX....aU#jbU#na8a5aO.O.f#o#n.9.#.a.a.c.e.e.f.ha7a1#8bxaR.O.Ibm#ka3aN.Nbqb3bra..F.CbDbEbIbI.F#7ambJbEbIbDbnbybsag#3.E.vbAbNbNbMbNbN#5#5.E.B.Bb1bNbJbMbCbEbJbBbtbtadaa.rbC#P.raDa2.S.RbzaEaj#2bF#zbGbBadaa.ram.RaqbBbA.Raxaq#W#Jar.l.l.R.R.l.R.R.R.m.l.l.j.j.j.i.h.g.g.g.g.d.d.b.d.#.b.a.#.a.#.a.#.#.....#...2bRbS.#............bSbT..avat..............", +"#h.4.4#ibcbcbjbhbhbmaT#e.y.y.4.y.xa6bgbjbib.aO#d.J.x.MaP.1b#bcb0aWaP.4.1.4#h#..6.6#n#o#jbb#j#k.7.A#g.1#aaT#nbmbgaWaP.Mbib7bib5b4a5aP.M.w.4#j#j#l.8.A#gbb.6.4.4.L.I.3bZ.8#hbb.8bb#j.5#ma8b0a5aO.N.wbU#n.6.a.b.c.c.e.fbgbrbxa1#8.CaR.N.Ibqa3a3aN#8.Ca9aN#7.C.NbIbDbIbU#n.9bJbDbDbDbDa2bpa2a#.B.DbabDbNbEbEbFa6a5.D.B.Ba4bNbNbEbJbCbIbKaHbtbtad#4.r#4bPbMbBbBbMbzbvbt#5.D#3bFbCbBbP#PaabBaLar#QbC.Z#U#V#L#T.l.R.l.R.R.laq.R.l.R.l.l.l.k.j.i.h.g.j.g.f.d.d.d.d.a.b.a.#.#auauap#T.#.#.#.#.#.#.2bRbS...........2..auaKatao#L..........", +"bXb0bVbbaWaTbhb7bZaZ#i#e.K.z.y.x.1aZa6aWaVaP.4.M.x.x.1aVaZbjblb0aX#e.J.w#a.8.6.8b8#o.9bU#g#c.7.4.7bV###h.8#gblbjaWaP.4.wbVa6bxb.a6aO.G.xaP.8#c.8.z#cbX.w#f.L.x.L.MaSa6bfbebhbhbdaU.4.AbibxaR.1.L.O#n.9.9.b.b.c.e.ebia7bxbyaQ.N.uaQ.ualbqb5a4a..N.Ba.#7.C.Fb8bIbEbXbU##.9bEbDbD#BbDagaga..E.BalbCbh#ebJ#Abib5a5.O.LbNai#3bJbCbEbAbQ#FaDaCad#4#P.qanbEaGaHaB#RaEaEae#2.s#5bEbA.ZbFbF.jarar#X.tbB.RbB#z#W.R.Saq.l.R.laKax#U.SawaAap#J.k.j.i.i.i.h.f.g.g.d.d.c.b.b.a.a.#axayap#Lao.........#...#aSbRbSataobSbS..auawap#T#T..........", +"bkb2b2bb#kbhbxblbWaU#e.4.y.z#e.4#eaYaVaXaP.4.M.G.x#faZaT#cbmbmaW#eaW.y.yaS.9#.#lbT##.8bU#m.7.5#cbebe.9.8#gbgb0b0aVaP.K.waWaVa5aX#e.M.x.waV....aW#c#d.x.1aWb2aT.OaO......bdbhb7bdaU.4.AbmaWaP.I.xaR.9#h.a.b.b.e.f.fa6aRa9aR#8.I.FaR.O.1a7bqa3#8.E.CaN.C.EbabDbIbI#o#o##.9bDbD#B#B#B#B#3.E.B.NbJbhbc#b.1#ya8a8aO.L.Obpa2#9bK#AbEbEbK#Bacabaa#P.sanaebJaLbuac#R#5ab#2.Q#6aEbBbMbB.ZbFbB.jaI#Xbtazazaq#M.RauaKax#V#Latax#V#Jaqawax#V#J.l.l.j.j.i.h.h.g.d.g.d.b.b.b.b.a.aavap#V#J.#.#...............#auaxap#T....atap#W#Jaq..........", +"bdbkbe#k#cbmbgbcaU#e#b.z.x#baZ#n#h#g.4aP#d.M.G.w.1bTbi#e.4aUaT#ebibmaV#e.4.Jbf#m.9.9bUbU#n#.bmbmaT.5.9#h#.bmbiaY#e#e.w.1aTaPaRaO.4.x.1bTa6.....4.4.K.yb1bhaW.4.y.yaU..bhb2bhbkbc#k.5bia8aWaP.4.xb4...#.a.b.c.eaRaR.4aP#8.O.H.Hb1.1.o#va1aQa..E.v.Na7a9aQ.O.HbIbIbD#.##bK#B#A#A#A#B#BbObN#7bCbC#f#e.zbc.WaRaR.1.HaSbna..DalbIbCbMbEbJbF#2#P.s#4aJbKbIaGaB#R.qae.r#2#9btbBaGaI#0#zbB.ZaGaz#UayaKaAaq#X.tawayao#M#W.R#V#M#T.RaoazaraB.l.k.k.i.i.h.j.h.f.g.d.c.c.a.b.b.a.##T#LaA.#...#...#...#....auaAayao#L#V....#T#Jaq............", +"bb#m#j#c.5.yaWaT#i#d.z.A#a#faUbdbb#i.8.M.4.x.u.1aSb..A.4.K#b#ebibib.aV#e.4.xbf#m.9.9b8bU#nbhbjaY#i.4.x#nbiaWaTaT.4.A.wa6aWaP.4.4.u.Iala5bmaT#e.z.K.KaS#baX#e.4.zbT#obUbdbhbbaU#i.7bib4b0aT#e.M.wbcaU#e.a.ca8a8a5aRaN.G.I.N.Pba.o.o#v#v.N#8.P.F.Nbrbxa9aQ.O.HbIbEbDbIbD#B#B#B#AbNbNbDbNbIbJbNbJbAbPboa0.NbJ.O.uaSbM#6.E.EbEbCbFbCbPbMbBbM.Z#4bAbAbI#D#Zak.q#2#4.YbB#AbFaGbYaI#X#ObBaCadazaraAaGaG#0#Q#Kaqap#W#Jax.m.l#V.l.RaAazar#X.t.l.j.k.i.i.g.d.h.g.g.c.d.a.b.b.a.#.a.#.#.#.#.....#........avaxap#V#Jao......................", +"bW#i#f.8.5#b#f#e#e.4.y.zaTb8bkbdbb#j.4bjb7.M.JaOaV.y.w#b.1aUbib0b4b.aTaP.J.w.4#h.9.9bU#o#hb0b2bm#e.K.y#.bh.4#e.4.J.ybia8aWaX#d.x.M.4bjb0bcaT.4.w#i#c.z#i.J.y.x#fbU..#oaUaT#f#f.5.5bgbjbjaX#d.G.yaTaU#d.ybfa8b3a6aRaO.N.I#na9aQ#8#p#v#v#v.E.F.Na4bxb3bqaQ.O.C.NbIbE#BbA#A#A#A#BbJbNbDbJbJbPbJbJ#AbJbqa..CalbNbEbKbIbJbNbJbBbIbJbKbDbCbMbCbJbE#FbJ#AbCbG#R#4abbE.WbBbGbFaIaG#Z#QaHaHaFac#R#Pazazaq#U#K#NaIar#Jaz.S.R.Z.R.RazaMaLar#X#K#W.k.k.j.i.i.h.d.d.g.d.d.b.b.a.b.a.a.#.#.#...#.#.#........aoao#V#J#W.#......................", +".wbd.7.z#fbV#c#b.7.A.z#cbXb2b2beaU#gbhblbmaVaX.4.4.y.y#e#n#ibgbjbhbi#e.4.G.x.4.8.6#g#obfbmbhaWbdbb#i.7aTaW#eaWaX.xbib4b0aWaP.4.G.Mbgblb0bj#e#b.y#e.A.z.#..bU#n.6....#n###c.A.7.5a6a6aWaT#d.1.x.1bWaT#c.ya8bxbZb#aP.4.P.La8a0a.aN.I#v#v#v#B#Bbja1a7a7a0.O.N.CalbD#B#A#A#v#A#B#B#BbJbIbJbDbJbJbD#zbPa..E.EbIbJbIbK#BbJbJbDbIbJbMbJ#BbJbFbDbD#BbL#BbBbKbKbP#ybJbDbGbD#y#z#Z#Z#X.taHbuaLaa#P.rar#0#U#K#ObYaLaB#X#O.RbC.Z.R.RazaGaz#0#M#K#0#M.l.i.i.f.h.g.g.g.d.d.c.d.d.a.c.a.a.a.#.#...#.........#..#L#L#W..........................", +".A#j#c.K.z#i#g.6.7.7#kaPbkb2b2beaU#kbibibiaWaX.4.J.w.zaT#.##aWa6aVaP.4.M.x.waT.6#.b8blbgbmaT#e.5bb#k.8.5aPaPaP.4.4bib0bZaVaO.L.w.MaWbhbcaT.4.J.waT.yb2.5bfbX#h.7......b7bb#gbibibgaPaX#e.M.x.1b1aT#c.z.xa7a8a5aRaO.N.ubqboa2ag#7.B.H#v#B#B#BaU#ea1aQ#8.1.v.FbabC#AbNbJ#A#AbDbDbDbJbEbDbEbDbNbN#vbJbzah#5bDbN.WaE#6bIbDbIbJbJbK#BbDbD#AbDbDbG#C#CbCbDbJbD#zbQbK#B#y.YbGbO#O.qaeaCaDac#P.q#4.W#Q#K#NaCaGaHar#Q#O.R.Z.Z.S.Rarar#0#U.t#N#L#J.k.j.i.h.h.g.g.g.g.c.c.c.bauat#T.#.a.#.#.#...#.#........b8.2............................", +".x.K.8.A#fbebb.5bcaU#e#cbdblbkaU#g.4bjbVbja6aT.4.K.w#aaU#k.5aVaXaP#d.1.x.1aZaV.7bVbbbhbhbmaU#e.K.w#k.5.6bf.K.J.4.Ma6bmaVaO.4.G.x#e.4aVaT#e.K.y#eaW.K#c.5bia6aX.4#b..bdbf#ga8bib7bjaX.4.K.x.Jb#bm#e.4.yaZaRaRaRaO.O.ubobybZa0a.#7.C.F#A#BbIbIbIbD#8#8.N.H.FbTbD#AbNbNbDbI#B#BbDbDbDbDbDbNbNbIbIbJbzb3ai#5.DbPbpbp#9.BbKbIbMbKbK#AbL#BbIbG#C#BaB#R#ybBbDbC#BbP#CaGaCac#QbObGbB#Aacaa#4.r#Pb4#AbB.Z#0#0as#Z#R.t#1.S.S.R.R.R#0#0#Q#S#NbY#J#T.l.k.i.j.h.f.g.g.d.e.d.b.caAaw#V#T.a.a.#.#.....#.#.....#bS.#............................", +".x#a.8.7bXbbbbbhbhaWaT.4bdbb#j#j#cbibhb4bVaVaP.4.z.x.4aY.7.zaZaP.4.4.J.G#db1#m#g.7bib0b4bgaV#d.y.w#c.z.7#j#m#g#dbcaVaRaP#d.L.x.1aZaVaP#e.K.K.1b1.x#f.za8a5aRaO.L.x#b#o#..7bgbibia6aP.O.x.MaP.##b.5.w#bbc.eaO.O.O.I.Hbobybva4a..E.C#7#m.8#BbIbIbDa5.H.I.IbabD#B#A#AbJbMbJ#BbNbNbDbDbDbDbMbIbObMbKaFbnaf#6.QbDbnal.E.EbI#B#BbD#BbGbDad#2bKaCbtaBak.qbGbD#B#A#BaGbYaC#Z#Q#ObDaFaHaF#P.q.ran#SbCbC#z#z#K#Y#Q#O#Raz.RbB.Z#z.ZaG.t#S#QaC.t#U#J.n.k.j.i.j.h.g.g.d.e.d.c.bavao#Lax.a.a.#.#.#.#.#.....#b8#E..............................", +".y#eaWaZbdbdbhb0bjaWaT#caUaT#i#cbkbibjblbjaW#e.4.J.w#e#h#g.zbRaU.M.J.waSb.bf#m#g.6bhbjbxbm#e#b.w.yaP.A#fbf#j#..5#jaOaP#d.1.I.LbVaVa6aX.4.x#faU.z#bbkbia8a6aRaO.N.xaO#o#h.6aWaWaVaP#d.x.GaZ.#.#.#.a#e.e.ga7bx.N.I.Lbaa3a3a0a.#7.C.Bal#m.7#m#BbIbJal#8.H.ObDboboa0#7.vbCbJbNbNbEbJbEbNbJbA#AbQbJbDahab#3.s#6bNa#.E.DaEbIbKaLaF#4aHaHaD#4.saGaGaBak#P#x#B#v#x#CaGaGaC#Y.q#ObGaHbYaLae.r#2#Q#Xazar#QbObMbFbB#XbB.SbB.Z#z.Z.T#Z#X#OaIayaz#U#K.n.l.j.i.f.h.d.d.g.d.c.d.c#T#J#W.a.#.a.#.#.......#.#.#bS.#..............................", +".1aT#nblbdbhb0b4bVaUaP.4.J#c#.bhb0aWbgb.aV.4.4.1.x.JaT#m#.#hb2bhbcaW#i#bbgbmaW#e.JbcbgaVaP.4.1.w.1aZ#cb8#m#g.z.8#m.z.M.M.u.1aZa6b4aWaP.4.x#h.1.4aU#hbxb4a6aRaO.I.HaS#n#..9bgaPaP#d.I.wbTaW.#.#.a.b.c.e.fa1a5aQ#8aO.Ca0aga.#7.F.B.Ea1#..8bDbDbIbIbIbJ.1bD#Bbrb5a0#7.Ca2a.bJbDbJbIbnai#6bNbNbJbCahbN#2.s#2bwbJbL#FbIbDbI#BbtaJ#2bzbtaD#4.QaGbYaC#Y.qaHaBaa.raGaBac#Z#R.q#1bDaDaDab#2.rab.tazaMar#X#MbFbF#zbB.Z.Z#z.T.Z.Z.R.S#Q#zbEaq#0#J#W.m.l.k.k.i.j.h.g.g.d.d.c.c.d.b.b.b.a.b.#.#.#.#......b8bR.#..............................", +"bVaWbkb2b2bcaW#i#eaT#e.5.A.4.7bkb2aVaVaX#e#d.K.x.1.1aW#.bf#obhbhbdaWaT#b.y.5#j#e.4aTaTaP#d.1.x.1b1#fbV#h#g.7.7b2.9#faTbg.4aPbibxbjaWaO.L.x#d.9#m##a8bxbxbiaO.O.I.uaP#g.6bUaXaP.M.L.1aSb#.#.#.#.b.c.e.e.faOaN#8.I.C.O#7#7#7.E.F.FbY#8.Ebfboa3a..PbJbIbD#Ba2bra7a..N.va.ag.Ea2bDbzb5aia#.BbMbPbpbn#9.Dbna2af.Eag.C#C.UbIbIad#4.saDadaa.r.raGaHac#RaHbuaD#4.qaL#Y#Y#Q#P#1aA#y#4ab#2.r#6aDaCaAaG#X#Q#O#M#A.Y.Z.Z.S.S.T.Z.T.T.R.R.RbCbC#M#0.S.S.m.n.j.j.g.g.f.g.g.c.e.b.c.b.b.b.a.a.#.#.#.#.....#b6..................................", +"b7bgbkblbhbhbcaT#e.z#b.y.w#fbcbhblbdaP#e.4.J.w.1aSb6aY#lbUbkb0b7bhaU#e.4.y.KaT#e.5.A.4#e.z.z.1bTaY.A#ia6aVaP.4.H#.bUbibhaWaXaWbmaV#e.M.w.JaZ......a5a8aVaR.4.H.u.LaP.6#g.....K.xaTa4aQaO...#.a.b.c.e.gbfbW.I.N.ualbsa5.C.P.B#8a4a0a..E.Cb4a1a..E.EbEbC#z#ya0a.#7.B#7bvboa2ag.E#7bpaf.E.BbEbza7a2aNbpbva2af.E.B.EbK#BbKbKbD.Dama.#4.r.rbYacac#R.qaCaCaa#P.raCar#O#O#1aC#y#y#A.s.r#5ahbKbJasar#X.t#ZazaqbB.R.R.R.l.S.S.T.R.R.S.T.TbA.S.T.S.S.Uayaxaq#K.h.h.j.g.g.d.d.c.d.d.#.a.a.#.#.#.....#.bbR..................................", +"aU##bcbhb0bZbm#i#e.y.y.A#faZ.9bcbcaU.K#a.J.x.I.1bTaW.9#o#nbhbWb0bjaT#e#b.y.4aU#e.K.zaT.z.4.KaVaY.Abibga6a5aP.O.u.xbb#cb2aW#eaPaXaP.4.w.1bVaV#g.6#naRaRaR.4.N.u.1aS.O.G.7#.....a8a7a5a1aN.I.C#b.c.e.e.fbebe#c.7.Oa8bra8aR.4bsb3bsa.#7.E.EbraRaO.C.FbD#B#A#y#7.N.C.Fbsbob4a3a..E.E.B#3.D#6bDbqb4a7bobrb3aiaf#6.Q#8bKbIbK#BbKbI#G#Gadakaa#w.l#R.q#Raaaa#P.qbY#Y#Q#OamaIac.YbG.X#w#y#B#A#AbK#Q#Q.taaayaGaq#M.ZbCbB.Z.l.S.T#z.S.R.T.R.Vax.S.S.Uaybuax#W#M.i.j.f.f.g.e.d.c.b.d.d.a.a.a.#.#......b6b6...........#......................", +"##.9#mblb4bWaYaP#c.y.z#ebVbc#laUaU#i#k.w#a.w#faTbg.6bXbU#obcbhbcaT#e#b.w.w#c#f.4.K.zaP#i#j#k#c.z.5bib7bjaVaP.4.xaObb#g.AaT.4.x.1.4.x.waSaVbb#g.z#hbb.4.4.N.L.Ibab#aO.G.Ibkbca9bxb4a5aQ.O.I.H.5.b.e.f.h#.#g.Ab1bfa8b4bxaQa2bqa3a0#7.N.B.Na8a5aO.L.IbD#A#v#A#B.E.Eam#7a3boa2#7.B.E.B.D.EambDbqbra7bnbna2a.#6.B.BambIbD#BbI.U#CaHaHaCak.r#x#xbL#F#C#x#P.rae#C#x#PaaaGaGac#P#BbL#G#p#yaHaFaabG#y#X#UayaA#0#K#0#z.ZbB.R.SbB.Zaxaq.T.TaMav#T#T.TayaAar#W#J#W.i.hawawap#L.d.c.c.b.b.a.a.#.#.#.#..bRat#T................................", +".6.6bgbhblbhaT#e.4.w.yaTaY.8bU#f#k.4.5.5.KbRbVaP.9bU#ob8#oaUaUaT#e#b.J.A.1aZ#d.z.A#baU#g.7#c.z.5a6biblbjaX.4.G.x.OaS.8.5#g.y#aaZb8.1aObUbe#g.7.6.6bd.4.L.I.4bab#aR.O.I.Lbra8a8bxbybraO.O.C.IaRaU.f.f.h.h.k.h.n.na8a8a5aO.La0aNa.#7.B.Calb2a5aP.I.G.E#v#y#A#A#Ba2a..Fa2ag#9.E.Ca.#3.EbIbIbIa2a0aN.Nafafa#.E.B#3bPbK#CbGaEah#3aHaLadaFaDabaa.s#x#E#q#p#x#wbG#C#GaGaLaLaa.r#1#F#x#F.jaHaL#R#P#A#AbFaqaq#M#K.S.m.Rawawao.Sawawaq#Lavaxao#L#W.Saqaq#W#J#Kat.j.kaKaAaq#T#L.d.b.b.a.a.a.#.#...#avauavao#J...#..............avao........", +"be#jbkbcaWaT#e#b.x.w#eaU.6bfbfbk.w.4.z.1aZbjaWaX#e##.9#o#o#eaP#e#b.K.w#bb1bV.z.A#baTbc.7#c#l#caUaVa6a6aXaO.1.u.GaS#cbdbdaU#caYaZ#o##.9#n#l.8.zbXbUbe#h.6a9a8a8aR#8.I.uaObrb4a5a8a1aQ.O.F.C.IaZ.e.f.haU#e.k.n.n.oa1aRaO.L.u#7#9.N.E.Cbaa3.CaR.1.I.I.E.Zbqa3a2bpboaga#.B#3.E.Eba#6bDbCbPbJbIala..N.C#6#3.D.D.DamaDab.Dbvbpah#3.QadaHaFaDab#2.Q#C#x#pbG#w#v#F#v#w#vaB#Z#O.r#C#p#x#F#wac#R.raC#A#AbI#M#M#JaMbMbFbBayax#UaxazaAao#Jaqao#L#TbMbJ#V#U#J#MaMat#VawayaAao#L#M.dbO.#.b.b.a.#.#.#.bavaAat#V#J................auaAap#L......", +"#h.8bkaTaT#e#b.y.y#fb1#l.9bW#hbcbd#e#caTblb0bbaT#c.A.6#o##.6.7.4.z.A#baZaY.K.y.zbTbj#c.6#c.7bUbf#oaXaPaO.O.I.1baaVbfblbd#j#c.A#h##.6#n..#c.6#lbUb2be#g.9bfaRaRaO.N.u.Oa9brbsaQaRaQ#8.N.v.1aSbU#n.fbWbc#i.AaX.1.o.4#8.N.1.Ib1.P.N.Fbaa4.F.CaO.I.CaS#7bqb4a3bpb3bsa..E.FbJ#7a..1bIbDbNbPbJa2#8.C.Falba.B.E#9aHbvaFab#2.Dbuaf#3.QaFbvbvahaa#2#2ab#CbL#D#v#v#s#x#x#p#R#P#Pbw#x#v.i#v#v#E#R#ybQbDbQazaraz#0bObMbC.Zaq#W#JbYaxaq#U#KbBbO#VbBbFbBbC.T#Uavavao#Lapaxaq#T.tar.dbPbF.b.a.a.#.#.#b6atat#V#J#T.......#avao...#awaxao#J......", +".7bdbk.4#e#c.J.K.zbTbc.6##bdbb#j#j#i.4bhb2b0aW#k#b.y#a#o.9.9b2...7.4#k#b.5.x.1aSbV#k#b.z#c.6b2bX#n.4.4.O.J.L#fbZ.8bkb2bU#ibhbcaU.8.1..bUbUbU#hbhbcaU#b.z#maO.O.H.L.GbTa1a7a0aQ.4.O.I.I.Hbaa9#o###.bWbdbgbf#m.8.w#v.u.N.Oba.Na1bqa4a.al.C.F.1.Hala5#7a3bqa3a2boa2#7.E.Ba.bJbIbJbK#CbPbKbva3#7.NbIbK#BbIbIbKbpbtah#5.r.Daf#4.B.DaDaJaEae#4.r#2#v#C#x#GbL#w#x#p#p#q#w#w#w#F.XbG#B#v#x.o#A#AbG.YayaGazazar#Sap#UbD.S#WbFbB#U#M#KaM#zbMbFbMbFbB.T.T.Uaoao#T#LbM#V#T#M#U.f.gbMbF.c.d.a.#.#.gbR.##T#J#Tau...#auaAaxap#T..apao#T#W......", +"bbaUbkb2.K.4.A#daZaY#f#.bkbkbc#j#c.7.zbhblbkaU#k.1.y#a#g##.b..bba6aWaX#d#e#b#e#j#i#b.3.7bbbfblbl#j.8.G.L.xaSa6bd#kbfbe#jbkblbcaT#c.y....be#mbhb2bj#i.K.z#fbi.L.L.1aZ.G.MaQaO#8.F.H.N.HbaaZbU#o.8a7a9aR.Nb2#m.8#..Xa7brbyaQ.N.Ca0aN#7.F.Fal.HaSb#.Fa0a2aN#8afa0#9.E.v.NbJbDbMbLbQ#vbJbNa2a..CalbIbIbNbIbKbKaDah#5#2.r#2#5.D.BbZadadad#4.r.Dan#G#p#H#F#x#w#w#p#p#w.o#s#FbK#w#B#v#C.obL#D#w.X#AaGaAaLaG#0#M#M#V#J#zbB.ZbJ.ZbJbMbFbBbF.ZbPbF.T.TbMbB.UbP#TbEbFbB#U#V.i.f.g.g.d.b.b.b.#.#b6bR.#...#........auaAaAao#Lao#L#T#Lav......", +"bgaTbkbWbWbk#iaT.z.z#f#ob0b2be#i.8.z#cbmbmaU#e.4.y.KaT#e.ybfbfbibga6aT#d.J.J#j#g#b.z.7bTbV#nbe#j#c.5bhbhaUbbbb#k.5aU#jbhb0b2bc#i.4.A#e..#g#.bdbhaW#c.y#bb7a6b#a6aO.O.G.4.N.O.P.C.HbZ.G.bbUbX##brbxa9aQ.N.Ca8a1aN.Ia3a7a0.O.P.P#7#7.F.Pbaa3#7.C.Cbaa5#8#7.F#3#7.E.B.Eb1bJbA#A#F#F#FbIbI#7.Pbna2ag#6bKbKbK#Baeae#2.s#2b4#2.EaHaHaF#4#2#2#2alaD#P#x#x.X#x#G#q#w#x#v#x#p#F#F#w#p#B#x#D#D.W#A#v#varazazaq#U#K#0#T#L#zbBbPbDbBbBbMbMbBbPbBbFbCbMbFbM#zbMbFbCbM.nbE.k.i.i.h.h.g.e.c.c.b.a.#bR.#.#............atatao#T#J................", +"b0#ebdbdbbaU#c.7.A.7aUbfbkbd#j#c.5.5aUaTaT#e.4.w.Abdbb#j#c.4bgb0b2aYaX#d.J.JaY#b.z.zaZ#n.8#m#h#g.7bhb2bkbfbfbd#j.4.5#cbdblbcaT#c.z.w#i....bmaWaX.M.5.1aZblaVaRaP.4.x.Gbaa8bx.O.1aN.x.O.b#n#na7bxbxa1#8.H.CbZa1aO.HaQa9a1aO.valb2.E.Pala3bD.C.Ca4aQ#8.H.C.Eal.B.Dala2bIbM#AbNbNbKa8a5aObKbpboa2aga#.E#FbIbL#F#2.s#6bY#F#p#GaHb3aFab#2.r#5aD.qae#p#G#q#w#q.0.p#E#x#w#pbG#wbK.o#v#x#qaxar#U#C.X#0araq#X#N#Nas#JbYbCbAbFbObB.Z.TbCbBbFbBbObMbMbBbCbFbBbF.U.RbM.n.k.k.i.h.f.g.g.d.c.b.ab8.2.#.#.#..........#V#V#T#T#Z............auau", +"bcaUaUbb#j#k#b.A#b#fbb..bbbkbd#j#c#f#c.5#c#b.A.5bkbdbc#j#k.5bib0b0aWaP.4.w.KaVbWaW#i.1.z#lbebe.8.7bhblbfbWb8be#j.7.7#.#jaU#i#f.7.x#caZ.9bxbZaWaX#a.xaZbb#c#d.4bjbgaUaP.zaOa6aVaO.L.uaSa5aR.4aRa5a9aO.O.C.IbxaR.O.ubra8a9aQ.N.EbU#h.6#mbIbDaR#A.O.1.H.IbT#BbDboboa2ag#9.EbKbNbIbib4a5aO.Gbzbybrafa#.E#3bKbKbKbK#Bbaa.#p#H#xaFaHaD#4.Q#P#R.rae#H#F#E#r#s#r.X#x#F#E.X#E#C.X#x#w#CbHaybuaq#U#C.X#v#D#K#N#1aK#W#D.XbG#zbObNbCbBbBbB.ZbMbBbPbFbCbBbA.V.T.U.UbMbFbMbM.k.i.h.f.f.g.e.c.b.ebT.#.#.#...#.#..........#Tao............auaMax", +"bdaU#k#i#f#b.7.A#fb8#j..bUbkbd#m#g.5#c#c#m.5.Ablb2bXbbaU#c.zbmbgaWaP#d.J.x#db0b0aU#e.z.KbU#obkb2bdaWaUaWaP.4bd#g.z.7aWaP#e#e.K.z.Kb1##.9b0b0aWaP.L.waPaU#b#bbgb0bjaW#e.K.yaOaO.L.uaOa8a8a1aN.PaNaN.O.H.LaOaQ#8.I.ua8b3a1#8.H.H#h.8bUbe#g.AaR.O.H.H.F#8a0aNbobpboa2a0#9.E.B#CbJa6bia6.L.ubnboa2a#.E.B#6bK#B#F#Bbqa3a0aHaFadaDadaa#2.rae#Pahab#x#w#w#s#s#p#w#x#F#w#x#x#paGac#w#w#xaxaq#U#Jas#v#w#x#D#C#x.X#B#vbBbB.Z#zbFbFbBbB.ZbBbBbBbFbBbBbFbC.V.V.V.W.UbBbMbBbF.h.h.h.f.g.e.b.cb6.2.#.....#...#...#.....#................avawav", +"bf#m#k.5#c.5.A#fbV#gbVblb8b2bb#j#c.5#cbfbf#n.8bkb0bWbb#i.8.zaWaTaP#d.1.x.1aSbgaU#e.4.x#fb2bdbb#i.5#cbhbcaT.4.A.7.A#iaRaO.H.5.z#cbeaZbfaVbiaW#e#d.w.waT#c.5#fbhb0b0aT#d.y.K#o.L.uaOa8b4a9a0aN.G.I.N.u.Cbaal#8.I.CbTa9a7#8.N.u.N.8bkbWbb#c.7aQ.H.O#v#vbqa3a.bnbvb3bnag#7.E.C#FbPaSaR.1.xaOaiag#9a#.B.Dam#F#F#G#Cbyb3albubuad#4#4#P#Pam#xbzaFah#5.Q#s#G#p#p#s#p#w#x#G#FaHbtac#P#p#w#W#W#M#X#x#CbG.0.X#w#w#B#v.X#A#AbG#v#vbNbE#z#z.Z.Z.ZbFbBbB.Zavavat#VbBbGbFbFbF.n.k.h.h.g.g.e.c.bbR.#.#.#.#.#.#.......#...#................atapao", +"bfbb#h.7.7#c#c#i.8bWbfbfblbW#m#g.7.z.8b8#o#m.8bdbdbd#f#c.5.A#eaP#d.M.w.wb#bjaT#k#b.A#bbcblb2bb#k.zbhb7bgaT.4.w.za8a6a5aX.4.G.y.x#daY#j.7aVaP#e.J.x#b#j.5.zbcbgbgaT#e.1.x#b...#.1aPbrbqa7a1aN.N.u.I.OaR.o.U.H.Hba.NaQaN#7.u.1b7bJbbbb#g.A#f.O.vba#Abobvbq#7bobwbpbo#9#3.B.EalbJbK.O.x.1aEa#a#.E.E.DbT#BbK#F#Fa0a7a1aFbtaFaa#2.r#P#4#Fbzb3bnaf#3.Q#F#G#H#x#w#w#s#E#q#paCaBak#O#qaI#0#x#UbK#x#D#v#D#B#xbHbHbD#w#BbD#B.WbObNbBbBbBbBbBbF.T.T.ZbBaAaKat#V#L#z.Z.m.l.n.k.ibF.f.g.e.cb6.2.#.#.#.#.#...#.........#..................#V#L", +"bf#j#g.7#cbbbc#k.zbfb2bdbebb#g#c.z.7#lbWbf#h.8bbbbbgbgaWaX#e.y.J.K.x.waSbe#o.4.7.A.1bV#obWbWaU#c.zbhbjbm#e.K.wa6bZb3a5aP.4.I.waSaW#m.8.8#d.4.M.J.1b..7.zbeaVaPaT#e.4.x#baZ.#...K.La7b4bsa1aN.N.u.IbZ.o.Sa6a5.N.H.Cal.N.C.HbsbMbEbD#c.z#cbe.uaQ#y#Aa6aX.O.Ea2a2a2a..N.E.B#3bKbJbI#FbQbJanaE.E.E.Eamah#B#F#F#B#Fa.#8aDadab#1.s.raHaBakaFbnai#5.D.D#p#I#s#p#E#w#G#E#p#Fac#Y.saJaAaz#Z#X#u#F#v#v#E#C#C#w#wawaq#y#vbG#A#BbObCbCbF.ZbBbPbMbCbObObAavat#V#L#Tavap.m.m.k.jbPbF.d.f.e.cbS.b.#.#.#.#.........#.#........................#V", +"#n#g.8.5.8#j..bf#o#hbW#m#j#g#c.7.7aZbe#n#h.8.6#kbibjbhaWaX.4.J.yaU#iaP.9.9####.9#ebfbe#j.8aU#c.5.5aWaUaP.4.x.4bib0b0aVaO.L.x.M#h#n.9.7..bd.y.L#daVaWbhbha8aWaX.4.Aa9aRaQ.N.#.#.#a3bsbybxaQ#8.P.C#8a9aR#8b4aV.4.x.4#BbDbNb2bb.1bDbDbDbDbJbE#y#y#AbibxaXaO.xagafaf#7.F.B#3a0bN#FbJbKbK#CbPaf#6.D.BbRbIbI#F#F#F#F#G.P.C#5#2#P.DbYbuad#Paiaf#9#2.s#3#H#u#s#x#w#w#s#p#p#x#x#PabaGbYaMar#X.t#qbK.X#w#C.W#vawaLaq#K#A#vbPbKazaqarbFbBbBbFbBbNbFbFbMapao#T#JbYaKap#T.m.n.kbFbB.f.f.eb9#E.a.#.#.#.#...#.#.....#...#......................", +"#j#c.6.7#l#h.6bU#o#h.8#h#c#b.z.7.8b2#n#j#..6.8bdbhb4b0aW#e.4.y.1aU#e.K.z#nblbe#gbUb8be#g.8.8#b.zbV#e#e.4.y.Kb8a5a8a5aR.O.w.IaObga6aT.4bUbkbW#jbhb2bhbib0bZaVaP.4.xa7a9aR.O.u.#.#a1a7a7aQ#8.O.u.PaQa7a1#8.HaO.L.xbhaU.AbDbd#c.AbDbDbDbD#A#y#y#AaZb0bxaP.O.w.B#7#6.E.E.EbTa2#BbKbIbKbIbzag.D#2.s#9aJ#H#CbL#B#F#F#x#q#x#F.D#2aJaCadak.q#1#6#2.D.Fam#s#p#u#s#r#H#u#H#p#q#w#q#sazaGaG#0#S.tbK#x#w#C#v.XbG#Baq#Mat#W.XbKaAaGaq#W#K#z.ZbBbBbMbFbC.Z.V#T#Laxavax#V#Lap.l.k.i.h.h.f.eb9.a.a.#.#.#.#.#.#.#.#.#.#..........................", +".y.9.A#lb8##.6bX#n#g.6#.bd.8.9#g#h.9bf.8.6#g#obcbgbjbjaY.4.K.w.1aV#c.y.1.Ab2bebfbUbU#m#g.6#c.zaZbf#m.z.5#fbg#eaVaVaX.4.L.u.IaVbdbdbb#k.wbbaU#cbcaUbcbib0bxaV#e.L.I#da5aO.N.CaOblbWaRaQ#8.N.C.Cala0bxaQ.O.H.O.ub#bl#k.z#i#c.zbTbDbDbD#A#y.W#y#AaVa6aRaO.G.G.BbP.E.E#6amambIbNbDbPbKbpbyaga#.B.PaQaJahab.r#4bL#C#F#F#F#G#F#x#Gakak#P.raC#r#3.F#I#t#r#p#p#u#r#G#H#E#E#x#p#E.0asar#0#Q.t#N#x#D.X#C#C.X#vbG#yawaAao#JazaGaKar#U#KarbFbCbMbMbB#zbMbFbA.V.Vao#V#L#VbJ.n.k.i.h.f.fb9.2.b.b.a.#.aauat#T.#.#...........#..................", +".z.A.8bX#l.9.6#h#h.8bhbhbhaU#k.5.6bUb8#o#j.8.8aTbmaWaT#e.4.y.w#f.4.K.w#f.6be#gbUbe#n#g.9.6bebfbUbe#g.6#.aUaT#c.4aOaO.1.G.1b1bdbWbkaU#i.5.5#c.A#i#caTa6a6aVaP.4.w.GaVa5#8.H.u.ObWbk#8#8.N.P.P.Nb1a8a4#8.N.Cal.1a5aP.7#eboa3aQ.PbDbD#B#A#y#v#v#A#BaPaO.x.xb1b1bKbI#B#y.W#v#vbJbKbKaEbtbwaf#3.B.PaHbvaDab#2.D.r#x#x#F#w#G#G#u#u#t#P#R#u#s#r#u#u#u#t#s#q#s#q#r#I#q#p#p#H#H.p#x#Y#0#Q#O#QbY#w#v#p#v#w#F#w#v.Xaxaxayaxaqazar#U#N#KarbFbBbFbFbF.TbFbCbA.V.V.W#V#VbMbB.n.n.k.h.f.gbSb9.b.b.a.aauaKat#V#T.#..............................", +".z#i#n#h#..A.9#n#..Abkb7bk#j#c.7.4bUbf#n#..6.8beaTaXaP.4.y.A#daP.K.A#cb8.8#h.9bX#j#i.7.zbTbU#n#n#h.8bmaU.4.4.wbx.I.L.u.1ba#dbkb2bW#j#c.z#c....bU.7bhaVaRaP#d.w.1aZaVaO.O.u.Ca1a3a7a3.P.N.valb#a1aRaO.N.u.Pba#v#Aa7a0bqbsa3aN.H.CbD#A#A#v#v#y#Aa2a..M.1b#a0#6.E#BbIbIbKbKbNbKbN#F#Bagaf#3.sbtaFbtbtah#5.r.r.r.D#x#x#x#q#G#q#s#u#u#p#H#saDadab#t#t#r#t#t#u#paGaB#Z.B#u#p#p#x#p#O#Q#OaC#w#xbL#G#x#w#x#w.X#vaqaybtaz#Waq#X#M.taJbBbM.ZbB.Z#z.V.VbC.Y.W.VbObObBbCbF.n.k.k.h.f.f#E.b.b.b.b.aavax#V#T#T...........#....................", +"#d#i#h#..9.9bX.8.6.8bhbjbj#i.4.z.1bf#n#gbdbmaT.4bf.4.4.wbga6aVaP.1.wbV.9#o##.9#o##.7.6#jbU#..6#.bhblbgaT#d.K.4bibgaV.4.y.waTbdbdaU#e.8.y#j....#o#maWaT.4.4.J.L.1a6aO#8.I.uala9brbra3aQ#8.O.F.G.I.O.O.H.Hb1#v#ybrbqa3a0#7a1#8.C.NbD#A#ya3a0a.bqbra..Ebybsag.E.EbKbNbJbJbzbnah#6.E#Fa##3.D#3btadaDad#5#2.s#3.r#4#x#w#H#saHad#4#u#I#t#GaHaJad#4.r#s#s#t#I#IaGbYaC#Y#O#q#H#s#p#x.p#E#p#w#p#pbL#x#w#w#F#B#x#w#vawazaz#W#K#M#KaBbGbBbF#A.Z.Z#z.VbCbC.Z.Y.VbNbFbB.UbKbB.n.i.h.fbTb9.b.c.b.b.aapap#T#LbY...#............................", +"#e.J.6.8#.be#g.6.9#nbcbcbc#j#c.K#fbc#hbhb0bcaT#c.wbf.4bibZa6aX.4.J.x#c#lbU.9.9##bUb2#n#..6#g#...bhb4bcaX#e.y.4aWaX#d.1.x.1aVaWaU#i.4.A#faY.......8.8#b.w.M.waSaZ.O.N.H.I.FbTa7bZb5a3aN.N.C.N.k.n.n.O.NaQ.X#v#ybrbybxa0#8.v.N.vaQbqa2a..Fa0#7.vbsa..Ebpama#.B.EbEbJbPbJbvbwaf#6.Q#F#7#2.EaDbzbzab#5#2.s#2b6.ram#w#GbLaHbvaB#P#2#s#saHbtbtad#4.r#2#I#t#u#taGaHaC#Q.raeb9#s#p#q#x#q#rar#Y#x#p#F#wbK#F#v#w#p#xaxaqaq#K#K#B#D#z.ZbAbCbBbBbBbB.V.V#z#A.Y.VbCbM.Z.UbMbB.k.k.i.f.2.c.c.b.b.b.b.a#L#LaA.#...#.#.#........................", +"#d.K.xbkb2aZ#i.6#caTbhbhbcaU#e.zb8aZ.9b0b2bb#e.5.z#jbgb4b0biaT.4.J.w#d#g.6#ib8.9bUbf#h.8bgbgaT.4bhbhbm#e.4.w#b#e#d.M.L.1b2#d.5a8a6aV.1b1..........bd#j......aYaT.7.H.N.OaQ.7a7bra7a1#8.N.u.N.k.kaV.4.o.X.X#va8a3bsbraN.Na0a.ala1b4a3a..Fa0#7.Ba.#7.va.#7.F.Fb7bJ#ybJbzbpbp#9.E.D#6bIbKbzaEai#9.D#2.s#2bw.DbT#u#t#u#Iaead#4.ran#u#tadaDad#4.r.raj#u#r#t#uaBac#R.q#O#s#H#q#H#x#p#EazaI#Z.q#s#w#F#pawayaq#Jayap#U#J#NaK.ZbD#vbBbObN#A.Y.Z#y#z.Y.V.V.TbObE#zbAbObObB.n.i.hbHbH.c.c.b.a.a.b.a.#.a.#.#.#.#...#........................", +"#d.J.x.4bl#j#c.z#cbhb2b0aW#i#e.5.zbb.8bhaY#i#c.w.zaTbgbxbga6.4.4.w.yaP.7.z#m.9bgaWaX#dbhblbgaVbgbmaU#e#b.x.yaZ#b.J.K#db#.4.ybibxa6aV#d.x........bfb2a5aXaO...5.4.wbbbf#j#c.Aa1a1aQa..N.C.CaQ.pa1aQ#e.x.x.Xa6bxa0a3boa3aQ.NaN.N.Cbqa3#7.C#7.E.Cal.B.N.E.E.BbabA#zbna2ag#9.E#3.B.DbK#Fbtbvbnai#5#3.D#2#2.D#5#u#t#q#u#t#R#4.r#2#p#q#u#4ab#1#2.ram#u#t#r#r.9#R#1.q#Obp#G#p#u#q#s#paGbuaC#0#O#X#x#x#xayaA#W#Kayao#L#UbC#y#AbCbNbCbObFbBbBbB.ZbB.ZbFbEbObPbC.W.UbCbCbM.k.h.hal.g.c.d.b.c.b.a.a.a.a.#.#.....#...#......................", +".4.y.w.4bb#g.5.zaUbjb2b0aU#i.4.y.z.8.8aU#i#e.y.zbTaUaVa6aX#e.4.G.x#daX#i.4##bibiaWaV.4.wb2bibjb4aP#ebmbmaT.5bmbgaWaX.y.K.4.Jbib4biaR.4.G.4bd#jbc#gbibmbia6aVaP.O.7..#j#c.z.8aNaNaN.N.H.CalbZa7a7a1aN.Pa0.O#vaRaObqbsa3aN#7.C.E.C.N.O.E.C.F.CbT.Eala4bIbNbNbNbDbpbza2a2#9.E.B.DbZa4bzbtbybpaf#5#2#3#x#H#x#F#H#q#G#q#H#q#s#uaDaa#t#u#t.Q#P.sah#u#I#t#r#u#r.p#sak#p#q#p#u#I#u#t.paBaI#Z#Q.q#u#q#E#waq#W#Janao#JaM#C#A#D#BbJbM#z.ZbJ.ZbB.ZbF.V.VbFbAbAbFbMbCbC.U.m.l.k.hb9.2.d.c.c.b.b.c.a.a.#.#.#.#.#..............................", +".K.x.w#e#g.7.5bdbbbhbhbcaT#k.5.y#aaW..bb#c.z.z#bbm.8aPaPaP.4.J.xbmaWaP.4.4.Abxb4bgaX.4.w.4bgblblaWbha6a6aXaO.LbjaWaP.4.J#j..a6a8aXbia6aV.4.5#j.7a8b0bibibiaVaP.O.u.....7#gbd.4.N.N.C.C.Nbsa7bybZa1.O.P.N#8.v.O.Lbrb3bq#8.N.C.C.P.H.N.FaQ.BaS.N.valbDbDbNbNbIbBbpb4bqag#9.E.Eam.D#8aEaLbza2#5#3.D.Dam#x#H#F#F#H#w#x#s#s#GaLaDaa.s#I#t#u#I#t#u#I#I#t#t#t#I#u#u#t#u#G#H#E#u#u#r#q#x#0#R.taM#w#F#p#v#D#Nas#D#Lax#B#w#vbPbQbJbCbFbDbM#z.ZbFbCbF.ZbBbB#z#z.WbC#zbJ#z.n.k.h#E.g.e.e.e.c.c.a.a.a.#.a.#.#...#.#..........................", +".w.w.MaV.7blbkbhbcbbaUaU#e#b.x.y#i.4....#i#c#ebb#h.6.4#a.4.G.xbhbgaWaT.4.y.A#kbia5aVaP.4aOaVbgaWbhbibia6aVaO.L.xaX.J.5.4..beaVaRbibjbgaVaP.J.G.7a8bibib4bjaRaO.L.u.1.#.##e#d.w.x.L.N#8.7.za7bxbsaN.O.C.N.N.CaN#Aa3a3a..N.C.E.B.N.CalalbM#A#BbKbIbJbMbDbJbJbIambpbpboa.a#.B.Bag.D.Hahahahaj#5.D.D#6#C#q#G#w#H#q#H#G#u#raHbtaJ#4.r#3#I#u#t#t#t#u#uaCaGaB#Y#I#t#u#G#I#r#s.p#s#s#x#w.X#O#YbL#F#E#FbQax#Var#UbL#x#v.0#vbKbKbF#AbPbD#AbF#ybB#zbBbB#z.W.V.V.W.W.UbCbD.k.kbS.0.g.d.e.d.c.c.a.c.a.#.#.#...#.#............................", +".x#bbSaZ#obkb7bVaU#iaT#e#b.z.z#fb8.4.5..bUb2bW#m#..5#gbT.G.Mbib0bjbcaP.4.w.4#kbibia6aX.4.JbiaT#kbgbxb4a6aX.4.G.x#e.4a8a5aRa8a6a5bhb7bVaRaP.G.G.5a5a5bibib#aO.4.I.uaO.#.a.a#a#e.bbc#e.zaT.Aa4a4aQ.O.P.vaQ.P.uaQ#AaNa.#7.C.Nb1.Ea4ala1a4a3al.ubJbJbDbDbDbDbDbJ#9a2a2aNa#.E.B#3#3.B#9ab#9#5#6.D.s#2bY#x#x#x#I#I#r#s#qaEaFahab.D#P.r#I#I#t#t#r#I#u#raHbuaB#Y.q#X#s.p#q#u#s#r#r#E#p#p#x#t#tbL#x#x#Fauayayaz#W.t#x#w#CbGbMbGbI#BbD#AbObObB.Z.T.Y.ZbB.YbC#z.W.W.X.obM.k.hal.f.g.g.e.c.c.c.a.b.a.a.#.#.#.#.#............................", +".ybTbV..bdbWb0bW#j#k#b.4.y.z.1bV#c.z.zaUbebf#m#g.9.zbe#k.5bib0b4bVaU#e.1.y.4bhb4biaVaP.4.J.M.M.4a8b0b0b.aP.O.I.GaO#ebZb#aRb0bZbmbjbjbiaP#d.w.waTaOaOa6aVaP.4.I.u.LaV.#.#.a.b.c.ebgbcaU.4bcaNaN#8.P.va3a3a2a0#7.EbA.F.C.Pba#7#7alba#vbsbra..F#B#BbDbBbobnaga#.Caga.a##3.B#6bZ.DaEaha#.D#6.D.v.Dam#F#F#F#F#u#s#s#s#rbtbwah#5.D#2bY#t#taDacak#u#tadaHaC#Z#O.q#X#Q#q#p#s#r#r.p#H#E.p#t#I#r#x#w#vauaAaAaLar#M#KbI#B#BbDbD#B#A#DbM#zbMbCbNbJ.V.V.V.VbCbB#y.W.X.UbObPbBb9.0.g.g.e.g.e.e.b.b.b.a.a.#.#.#.#.#.#..........................", +"aSb#..bUbbbdbdaU#k.4.z#b.1#faT#c.1.x#faU#m#m#g.8.6#lbebdaUbmbjbhaY#e#d.K.x#dbhb5bxaT#e.M.G.MaW#ka6bia5aP.4.N.u.LaX#e.K.KaRb0bZaVb.aVaP.4.J.x#a#....NaRaP.4.O.u.MbVaV#d.#.b.b.a.db4bjaT#c.w#k.N.N.uaQbsbra0aN#7.C#7bAa7bybsaQ#7.C#A#ya7boa3a0.EbNbMbpb3bnaga#.B#3a#.D.E.Eba.Ebzbzah#5.D.Q.D#6ag#F#x#x#x#G#x#u#s#qaFbvbuaj#4.Q#2#P#taHaCaBaa.B#I#uaB#Y#Q.q#1#N#1#u#r#u#r#r#t#p#p#q#s#t#r#wbQ#F#wataxaq#W#K#M#C#v#v#vawaxaq#LbQbA#zbObN#z.Z.V.V.YbObM.ZbFbEbMbFbFbM#E.f.f.g.e.c.d.c.b.b.b.a.a.#.#.#.#...#..........................", +"aV....bUbUbb#j#i.4.z.A.7bbaT#k.5.A#bb7bb#g#..8.6#fbXbkbhaTaTbcaUaT.4.K.x.yaZa6bga6#d.4.G.waOaW.4aVaVaPaO.L.u.1#faVaT.K.zaOa8aVaVaTaP#d.K.x.1b7bU.......O.G.I.Ibaa5aP.4.xa6aWaXaO.Kbj#i.z.z.7#ba6a.bqb3b5a0#9#7.E.Na5aRaObra..N.Cal#yaQb4a3aN.P.EbEbpbvbo#9.E.C#7.B.E#7an#F#5bvbyah#5.D.EbzaJaj.Q#G#x#u#H#H#H#p#raFaEah#5#2.s#5anaHbtbvadak.r#uac#R#Q.q#Oas#N#I#s#s#p#r#I#t#s#p#r#p#p#p#sbL#x#F#T#W#W#M#Kaz#x.X#vawaMawaq#LbJbGbMbFbGbP.Y.Z.Y.ZbObM.WbB#AbObC.navauat#L.e.e.c.c.c.b.b.b.a.#.#.#.#................................", +"......bf#n#i#k#c.7.5#cb1bdbU.4.A#fbVbX#n#..5..##..bkb0bha6aWaX#e.M.4.x.1b#b8aWaVaX#d.M.x.JaZaT.4.GaPaO.O.G.IaSb1aT.4.z.4aVaRbga6aXaO.G.w.1bV.7........aV.L.LaOb4aWaP.M.Mbxa6aX.4.x#i#b.A.1#b.kaPaObobqboa3#7.E.B.Na8aRaO.H#7.C.F.EbNbobrbq#8.P.NbEbna2#9a#.E.Bambra..E#7#FaibpaE#5#3.s#9bubt#5.Q#6#G#G#p#q#H#G#Iahadab#2.s#6ai#uaDaHaDak#P.qabaC#Y#O#2#t#M#H#s#raFaCak#t#t#q#r.0#u#x#w#s#q#p.X#E#x#L#N#F#w#w#C#Cawayaz#W#J#0bFbCbC.ZbQbF.V.Z.ZbFbC.W.W.VbPbB.naAaAap#L.g.e.c.e.c.b.b.a.a.a.#.#.#...#............................", +"#c....#h#.bb#b.7.A#faZbb.9#n.9.6bfbUbe#h.8.zbe....bgaWbibga6aVaP.M.x.4#fb1.xaPaO#d.M.w.xaZb1#e.4.x.1.O.G.uaObjaT#e.K.x#f.Ibibja6aXaP.M.GaP.w.4...........4bmbib.a6.4.y.waTbiaP.L.x#d.y.1b7a6aV.4.La2a0a0a..N.C.CalbZaRaO.I.N.Eb5.EbAa0bobna2#9.EbCag#9#7.E.B#6a0a..E.Ea0bKbDah#5#2.B#6aiaDaj#2.Dai#H#q#H#w#s#H#u#t#2#2.Q.DbsaHaHadaBaa#4.q#PbuaB#Y#P#t#taCac#RaHb3ad#4.s#H#H.p#s#x#F#C#x.o.oawax#W#C#C#x#p#v#v#xaqaq#V#L#JbNbBbQbF.ZbMbF.Z.V.V.Y.W.W#v.UbEbFbHaxat#V#J.g.g.c.c.c.e.b.a.a.#.#.....#...#..........................", +"#c.......6#fb8bU#c.8.7#m#.##.6bX#nbe#m#..A.9...#bjbZbhb0b1a6aX.4.M.x#a#i.y.1bZ.O.L.x.G#db1aP#a.w.1aV....alaTaT#c.4.x.1b8bib0b4b.aR.4.G.Ga5aRaO............aVaWaPaP.L.x.1a6aX#d.1.uaS#dbca8b4a5.4.xa.aN#8#7.F.CaSbYa8aR.O.I.Lba#7.Bal.Nbqb3a2a..E.E#B#7.B.B#6bnbD.E.BalbDbI#B#2#2.B.DbY#2#3.D.DbYbLahab#p#t#r#q#s#t#I#2.D#6#uaHbuadak#P#P#PbvaBak#O.qaCaGaGaB#Y#OaF#4#P.r#q#p#G#s#p#F#x#wbLawaKaq#W#L#v#w.X#w#wbG.W#W#J#LaMbMbBbMbF.TbQbC.ZbM.Y.W.YbE#A.X.m.nbHao#T#Lan.e.g.d.c.c.b.b.a.a.a.#.#.#................................", +"be.8......bf#n#h#h.8.8#hbbaP.K....#h#..7.8aUaUbib0b0bgb4b0aWaP.4.y.w#daW.4aTaZbc.w.JaSaV#e#a.J.JbTb.....aO#d#a.y.w.1bja8a6bibia6#d.L.x.GaRaVaN.I.O..a8a8a9aR#ebma5aP.Jb8aXaO.L.x#eaVaVa8a5aO.I.I.u.o.N.N.C.C#7a3a5aR.4.I.uba#7.E.Bambobqb3am#7.E#7#BbM#6#3bJbCbMbJbPbDbD#BbKbK#B#3bvaj#2#3#B#5#HbzaEaj.D#H#q#q#q#H#u#t#u#s#raDadak#P#P#Pad#Z#Y#R.qamaGbtbuac#Y#O#R#P.raM#p#I#H#G#F#x#G#s#C#waq#V#K#T#w#v#C#v#w#D#A.U#U.WbObObBbC.Z.ZbFbFbPbMbB.W.YbE#A.o.mbM.0.f#Vao.f.e.e.e.c.c.b.a.a.a.a.#.#.#................................", +"bU.8.8..bUbW#o#h.7.AbhbhbcaT.4bhbdbbaT#c.zaWaTbgbibgb.bxbgaW#d.4.x.waPb2bmaV#e.Jbc#jbfbf.x.M.GaZaY#b.z.....J.L.4.K#kbxb1a5a6aRaP.4.G.I.1bxaQ.4.GbgbmaVaO.LaObibiaWaP.M.x.4.L.G.ObZbjbra7boa0a..Fb#.ob2bd.N#8#Aa3a3a0#7.ubaa5.E.BbT#Aa2a2a2#7.N.valbJ#AbIbJbNbJbEbqbn#9.BbKbKbK#BaJah#4.Qaf#x#qaFbvbpab.Q#5#p#q#x#u#I#r#s#r#raaab#2aCacaa#u#r.q.qan#IaIaGaH#Z#Q.q#Y.ran#r#p#E#q#G#x#q#G#s#s#p#T#J#W#w#C#BbG#v.o#BbGbG.Y.WbMbFbMbF#DbF#z#zbFbC.Z.V.WbJbA.o.mbQbC.j.h.g.g.g.g.e.c.b.b.b.a.a.#...#..................................", +"#b.y#...bUb2#n#g.7#hblb7aW#ibkblblbb#i#c.Abc#eaWaWaTaWaWaXaP.4.y.x.1aZb0bjaVaP.J.J.9#o#mbhb0b2aW#e.7.K..bibhbmaX.4a6bibiaOaPaO.4.G.w#db8a5aO.Nbibxb#aV.4.G.Gb3b2aW#e.L.x.w.J#daX.f.hbqa3a3a0aN.E.B.obb#i.K#iboboa3aQ#7.Cba.F.CalbJ#Aa.aga.#7.B.Bam#A#z.Zboa0a#bKbrbra#.CbJbK#B#Caj#5.D#2aJ.K#G#GaEaj#2.s#F#G#E#saF#5#u#s#r#r#t.DaHaHaCaa.r#4#s#I#E#IaBaB#Z#R.q.qaB#Q.t#p.pawax#K#q#H#F#q#x#x#p#w#C#w#C#v#y#AbG#y#ybPbGbMbJ#z.Z.TbCbC.Z.Y#z.Y.W.Y#ybMbA.o.RbJbJ.f.f.f.f.e.f.e.c.c.b.b.a.#.#.#.#.#.#..............................", +"#c.y#i..bf#n#h.7.8bdbWbWbc#kbkb7bWaU#i.4.z#b#b.zaT.4aXaX#e.4.J.x.1b1aWb0bZaT#d.y.K.8b8#.bhb0bkaU#c.z.z..bib4bgaP.MaVaVaXaO.O.M.w.w.1bVaRaO.O.ubxb2b.aX#d.G.MbibgaP#d.x.GaVbe.e.e.g.fbpbqa3a0#7.P.va.#c.A#fa3byb5a1a..N.C#7bIbMbDbJbD#A#7.E.B.Bam#y#ybJbpboa2#7.Ca2#9.E.EbD#BbI#BbI#2#3aiai#9#x#q#4#2.Da4#F#p#saHbvab.Q#paGaCakaFbYbuadaa.r#2#r#t#q#t#t#X#Q#O.qbwar#Q#Q#saybuaq#M#p#G#G#w#H#E#p#E#C#v#x#w#p.XbG.WbBbI#AbEbBbFbPbMbAbA#ybB#zbM.Z.W#vbCbFbA#E#E.h.h.h.h.f.e.e.e.e.c.b.b.aauauap.#..................................", +"aU.zaUbUbfbb#j.7.7#obhaU#k.4bkbWbjaU#c.5.A#c.1.w.4.J.x.4.M.J.J.ybab.a6bgaV#d.K.x#d......bbbcaU#c.5.x#e..bgbiaV#d.x.1aOaO.L.x.G.O.1aPa6aO.N.N.IbibiaV#d.L.x.1aVaP#d.w.u.1.b.e.cbiaW#ebqb4bra0aN.E.vaQ.o.U.Xa3brbqa2#8.P.ualbNbJa5al#A#AbMbJ.Eal#y#ybMbqbvbva0#7.B#9a#.EbMbI#B#BbKbK#Abzbnaiaf#3.Q#x#xaf#H#q#w#paDae#2#2#qbYaCakaHaHaFaa#4.r#4#t#s#u#s#r#u#O#Pan#Z#Q#N#1#qayaq#U#J#p#G#x#x#x#p#q#C#x#x#E.o.X.0#D#v#v#ybObD.ZbObPbBbF.Z.Y#zbMbM#z.W#v.WbCbAbE#z.h.h.f.f.f.e.e.e.c.c.b.a.baxaKap#L..................................", +"bVbTbfb2bW#m#g.7.7..aUa5aVaP#dbbaU#e#b.z.zaZ.A.1b8.......J.M.1aSaW.zaVaX#e.4.x#db.......aUaT#e#b.A#cb8.JaVaX#e.K.zaS.7.M.xaSbTaObgb4b#aP.I.LaVaVaXaP.4.x.GaZaP#d.L.x.MbZ.b.c.cb4a6bqbsbsbsaN#7.E.C#8.o.U.Wa0a2a.#8.N.B.Fam#Abxa6#8.CbJbMbEbE.W#y#y.Ybsbnama#.E.CagbDbPbD#BbI#C#CbKbnbtbyaiaf#3.B#p#H#q#G#H#x#x#s.r#2#raCaC#Y#OadaBac#4.r.ran#r#t#r#r#G#s#I#u#Z#Y.t#Ob5#H#U#W#Kac#G#G#w#C#w#x#E#F#xbG#v#v#B#v#D#y#A#DbJbG.ZbNbFbC.Z.Y.YbB#zbB.W#y.YbPbCbJbE#z.h.h.h.f.e.f.e.c.c.b.b.a.aavav#V#Jap................................", +".1bXbfblbd#i.8.A.5bibia6aVaRaN.G.I#b.z#bbSbc.zbVbg......blblaWaPaU.7.8#e.1.J.1bV........aW.4.5.A.zbVbdaU#k.z.J.JaZ.7.8bia6aP.M.wa6bia6#d.G.yb4aPaO.4.G.xbVaOa8.G.xaSbg.aa9aQ.OaVaXa3a3a2a.#7.N.v.Eam.m.obrb4a.#8.N.C.Fb1#AbAa7aR.L.IbJ#ybE#y.W.W.Y.Waga.#9.E.BbabDbDbIbD#B#F#B#FbGbzbtbpbn#5.E.D#x#x#p#H#G#F#p#p#G#r#s#rak#PaC#4aa#2#P.rbw#u#t#t#r#t#s#s#u#t#p#O#SaC#H#x.X#x#0#x#p#H#H#F#v#w#w#C#v#x#D#C#B#v#w.YbG.XbF#zbBbFbC.YbA.Z.Y.Y.Z.Y.Y#v.WbEbC#D#B.i.h.h.f.f.f.f.e.e.c.a.b.a.aapao#L#W..................................", +"bbbUbbbb#j#k.6.5bdbjb0b#a5aR.4.L.H.z.7#lbh#a#eaT........bWbhbhbhbc#j#c.4.M.M#e.............4aW.4bhb2blaU#k.5#caPbfblbib2biaP.L.GaVaV#d.L.uaSbia6a9boa1aQal.Hb3aRaO.Ibra9a1aN.N.C.GaNa0aN#7#7.C.Cal.m.m.oa8a8aO.N.v.Fa0bJ#zbqa7a1aN.NbE#y.W.W.W.W.W.W#7.E.E.BambEbDbJbJbMbLbL#x#C#Cahaiaf#5.D.B#3#C#q#w#C#p#p#w#q#w#s#s#r#saHbtad.r#P.rae#t#t#r#G.p#H#q#q#s#q#p#r#s#q#G#p#H#x#x#w#p#w#w#w#qbK#F#v#p.X#w#waz#0bGbPawayax#UbBbJbCbBbA.YbB.Y.Y.V.Y.W.W.obH#D.h.hbNbM.f.f.f.f.c.e.c.b.b.a.#.##L#W.b..................................", +"..be#h#h#c.7.6bSbibib4bxaRaO.O.I.O.4aTaU....bf#mbcaU#ebebhb4blb0bc#i#c.y..bb#ibfbe#g.5.4bgbj.K#ebjb2blaUbmaP#dbfbf#ma6aVaO.M.x#d.G#d.J.J.1aVaSaObxbsa3aQ#7.Ca5aO.Gbrbqa7a1aN#7.C.O.f#7#7.N.F.CambZbc#b.SaQaO.N.Ib7bAbJbD#zbyb3a1a..N.HbJbA.X.W.W.V.V.VbMbJbDbDbIbJbA.UbK#B#F#F#B#B.Saf#5#3.B#6b5#F#x#w#G#H#D#p#G#HbzaFahaa.QaIar#R#P.p#s#s#r#s#r#s#p.p#t#r#p#s#r#u#G#G#w#s#x#F#p#E#p#w#F#HbKbK#C#vbG.Xayazar#UbBawaMaq#U#UbCbCbB#zbA.Y.V.Y.VbQbC.W.Xaxap.i.hbPbE.h.f.e.e.c.c.c.c.a.a.#.#.#.#....................................", +"aW.8bhbh#c.7bebea8bxbia8aPaO.L.I.GaO......bUbfbhb0aW#e.ybibhb2b2bb#k.4.y#kbd#j#cbb.8.7.4aWaVaP.4bcbcaWbibmaWaP.KbfbibmaVaO.G.Lb7b2aR.M.4b.aTaOa7b3b3a1#8.N.u.O.La7brb4bya1aN.N.C.N.g.f.F.F.PalbwbW#j.7a1.O.N.Hba#A#z#z#Abqbxbxa0#8.C.PbCbJ.W.VbObPbAbNbJbDbDbPbDbK#AbDbKbJbD#BbG.m#FbL#3.B#7a2#6#G#x#GbL#H#w#s#GaFbvbtad#5.Dbz#Z#P#R#r#r#r.p#r#s.p#p#u#u#r#s#p#E#s#p#qazaB#0#p#w#w#wbL#G#qbQbQ#A#w#DayaMaKaq#S#Kaxax#W#J#0bJbB#zbB#z.Z.Y.Y.YbFbE.Xayaxaq#L.hbFbD.f.f.e.e.e.e.c.b.a.b.#.#.#......................................", +".4bfb2bgbgaVaP.4a5a5a5aR.4.O.I.I.1aQ.....#b2bWbjb0aU#b.waZbdbhbcaU#c.z.zaZaU#d#b.z.9.8.z#e#d.1.1aUaUbib0biaT#e.M.Jb4bxaP.4.G.Lb3bxaR.4.x#e.y.Ja3bra3aQ#7.F.Calbra9bxbZbxaR#8.N.C.Na7a1aO.fb2be#g.5boa3a0.E.C.N#y#y#zbB#za1a7aQ#8.N.u.1bNbN#A.UbMbzbzaiaj.BbAbJbAbDbIbQbDbK#A#CbDbK#BbIbGaFaHaD#4.r#x#C#H#H#p#s#HaHbtbtah#4.Q#2#1#O#R#r#E#G#q.p#r#r#GaAayar#S#x#s#p#qaAaLas#Z#K#x#x#C#w#q#s#B#C#F.0#Caxazar#U#K#Mao#W#M#LaM.Y.Z.Y.ZbC.V.Z.W.W#v#vawaAayao#J.i.h.h.h.f.f.e.c.c.c.a.a.#.#.#.#......................................", +".5.zbjbibgaWaP.4aRa5aRaO.O.L.u.1aSaR....bf#o#gbmaU#e.AbUb8aYaUaT#c.K.x.1aWaT#f.w.7.9b8.yb8...M#daVa6bZb0biaT#d.y.JbiaW#d.O.x#dbxbjaP.J.G......a0aQaQ#8.H.v.Na4bxa1a7a7a1#8#8.P.u#8b5a1aO.NbW#j.4.4b3braN#7a0aN.N#y#y#AboaQaN#8.N.C.Nb7.ZbEbJ.U.Ubzbya2#5.D#3bJ.m.SbDbMbGbDbI#B.Rahaj#A#AaFbtad#2.r#F#C.o#x#C#paHaDaDab#5.r.san#O.qaD#E#HaHaL#4.p#q#qaMaGar#Kas#u#t#GaGaHaI#X.t#X#v#w#w#w#w#CbKbQbK#x#War#0#K#NbY.Y#J#JbC#z.Y#ybBbJbC.Y.ZbMbE#v.Xaqaxaq#L#L.h.h.h.h.f.f.e.e.c.a.a.a.#.#.#........................................", +".y.ybib7biaVaP.M.4aOaO.4.L.u.HaSb7....bf#n.7#g#k#e.1.y#o#o.y#i#c.7.z.7b6bb#i.4.y#e#m.M......b4bjaPaWbibgaV#d.1.x.1aVaO.4.x.ua6a5aP.1.uaO......#8#8#8.N.C.Fb3aRa7a7a1aRaN#7.N.v.FbabsaQ.O.I#8#k.AbobsbqaNbqa7a0a8aVaP.Gbnbo.N.N.u.Hb#.N.E.W.V.maEbtbtah#5.D#2bMbC.SbJbD#BbNa0#9bzaJaj#2.YaCad#4.r#4#C#w#D#x#p#FaFajab#5#2.s#6am.qaM#x#q#GaCad#P#H#H#sazar#U#K#u#u#t#qaIar#Y#N.q#w#w#CbL#w#CbQbKbP#BbGbK.t#M#Nas#vbJbG.Y.Y.Y.W.Z.ZbBbA.Y.VbO#A#y.Uat#T#M#LaA.h.h.h.f.f.f.e.e.c.a.a.a.#.#..........................................", +".AbmblblbjaX.4.L.x.4.4.I.u.IaSbZaU..bfbf#n#.be#j.7.K#f#n####.9.7.A#fbdbcaT#e.z.K#e........aWa6aX.4.xaWaXaP#a.w.1aZaO.O.G.IbTa7aO.M.I.Ob#....a5aR.C.N.C.1a4....aRaOaNa.#8.H.C.HbTb#aQ.N.P.I#c.A#fa2a0aNbobybxa8b4a5aO.I.Oag#7.E.Nala..F.E.Y.TbpbyaEaf#5.D.BagbNbAbP#BbKah#5bvaFbubtab#2#2#B#4.r.raC#w#v#x#H#p#xaCac#2#P.s.Dbw#R.qbv#H#G#G#s#Pazar#X#q#W#X#Nae#E#u#t#x#X#Q#O#OaMbL#wbL#F#w.obI#CbI#B#v#v#BbG#D.X.ZbPbI#A.Z.Y#ybB.Z.Y.YbFbBbFbCbDaKavaoavavatao.t.h.h.f.e.e.c.c.a.a.#.#.#..........................................", +".yaVaWaWaP.4.M.w.Jbibg.I.GaSaRaZbg..bgaUaP.4bf#j#c.A##.z##.8bhbcaU.4aU#i#f.1.A#caU..bmaVaObmaP#d.w.1#e#d.4.y.xbTbj.O.L.IaZaV.....L#d....a7a8a5aR#8.u.u.1...#...O.O.I.N.H.C.Hala7a3a0#7.vb#.f.hbhbm#7#7a3a3a3aNa..E.O.I.O#3.C.Ebaal#7.va4bJbnbvbvaj#5.E.B#6aDbCbJbEbtaHahab#2aDaFah#4.r#6#A#x#2#H#q#F#B#p#p#waGaGaBaa#O#4#w#p#w#F#p#p#G#I#paGaHaB#Y.q#p#w#0#DaGaB#R#w#p.t#O#Y#x#C#x#w#v#F#v#C#v#v#p#w.X#DbF#B#y#y#A#A#y.Z#zbG.Z.Y.Y.YbE#zbFbAavawav#VauaMatao#J.h.f.f.e.e.c.c.a.a.a.#.#..........................................", +"aZaYaTaTaP.4.x.wbiblbjaWaT#d.J.J..bjbjaWaP.y.K#j#b.z.L#c..blb2bbaT#c#k.4.K.x.Kb2bgbibmaT#d.G.4.K#fb..x.K.1.1aZaYbZ......................a8b5a7aO.O.uaObs...#...#...I.1.N.N#8bqb4a7aN.N.Cal.hbhb7aW#e.Pbobqa3a0a..E.C.Ia5#y.E#z#y.N.CalbJbD.Vaiag#3#3.salbnbF.l.lbzbtbYaDab#2#2af#5.D.Qb4#D.l.S#G#G#q#v#v#BaHbtbvadak#O#R#w#p#F#H#p#q#G#q#GaGaLar#Y.q.X#E#paGbuaB#Q#Q#p#p#w#C#B#C.X#wbK#F#pawawax#W#J#C#ybJbPbJbC#A.ZbMbF.Z.ZbJbCbB.Y#ybC.W.Waoap#V#Javax#V#T#L.f.f.f.e.e.c.a.a.a.#.#............................................", +"#g.7#e#d.4.A.x.1bhb4b0aWaP.4.G.JaPb2b2aV#e.y#b#g.5.7bbbdbdb0b0bc#i.4.z.z.w#bbca6bhb4bxaP#d.G.M#d.w.5#j....#a#daX......a6aR.O..........bma7a8aR.O.I.Ia4aR...#.....#.#.#.#.a.aa4bqa4#7.F.Cal.fbibmaX.4.Jbob4bra0#7.E.CbT#y#y#z.Z#z.ZbMboa2#7.V#9#7.D.Eb1ag#2bC.l.laDbzaEaD#2.r.D#2.Q.sambG#A#v.l#GaHaHad#R#vaCaHaFac#R.q#1#x#p#F#G#F#E#q#x#paIas#1#O#S#r#q#xaBaB#Y.qan#w.p#p#x.0#v#v.obG#A#DayaMaq#V#J.W.WbIbObDbFbAbJbMbBbNbFbE#zbDbCbAbMbB.X#D#L#Lasapap#T#JaM.f.f.f.e.c.c.c.a.#.#.#.#.#........................................", +"#k.7#c.J.w.x#db#bibjbiaW.4.4.w.MaVbhaW#d.4.x#e.8.A#gba..bbbhbc#k#c.z.zaU.7#i.4blbibia6#e.M.x#d.4.xbW#m.7............bxbxaR.O.Mbkbe#i.5..aRa9a1aQ.Nb#b4aV.L...#.#.#a9aR.O.a.#a0a0a..N.v.Ea0.faTaT.4.xbobwbvbra.#7.C.Cam.W#y.Y#z.ZbJbobvag.E.E.V.B.sa4bYag#3.DbC.laFahad#4.r.safbK#ybGbI#D#BbG#C#vaHaLac#4#PacaBacakaCaB#R#p#E#F#G#w#x#F#w#s#Y#X#O#ObY#p#F#F#w#R#O#1#w#w#C#w#p#p#x#D#p#w#Catayax#W#M#J#A.W#AbCbCbP#zbPbFbMbMbBbJbCbA#zataobA#D.0.n.mbO.k#T#Jas.f.f.e.e.e.c.c.a.a.#.#.........#....................................", +"#c.6#kbdbhbhaWaTaWaWaT#e.1.x.xaP.4aT#k#e.x#fb..7#cbU......aUaT#c.1.yaZaY.4.xbgbxaVaVaP.4.x.1aY.J.xaT#h.5..........bibxbiaO.G#db2bb#k.5a6bra7a1aQ#8.vaO.I.x.#....brb#aR#8.u.##8aN.N.C.Fb1.I.f.f.K.x#fa2a3a2a.#7.F.B.F.W.W#y#y#y.Z#za0ag#7.Ba..V.VbCbpbp#9.D.DbE.laD#5#5#2.r#6aJbQ#BbGbI#A#AbNbKaDaHaD#4.r#4#w#Y#RaGaCaB#Y.q#w#x#H#x#p#x#w#x#p#O#O#Z#p#w#F#E#w#w#F#C#v#w#F#C#w#x#p#G#F#F#w.Yaqaq#T#Kan#v#C#ybJbKbObCbJbMbAbCbJbAbBauauavap#L#D.n.nbNbFbFbObNbA.h.f.f.e.c.c.b.a.#.#...#avao........................................", +".z.6aZaTblb4bmaPaTaP#e#a.w.y#fb8#e#e.4.z#bbV#b#kbb........#c#c.5.z.7bX#d.x.4aWaW#e#e.4.G.ybV#a.x.1#g.7#l............aVaP.M.waVa5a9aRaNa7b3bZaRaN.N.C.4.xbZ......byb3aR.O.C.abq.E.N.Na4.B.g.g.f.f.f.h.ha.a.#7.F.v.Nam.W.W.Y#y.Y#y#y.Z#3.C.N.VbMbC.Uagaf#3.BambA.k#4#4.D.raeaJbJbIbK#B#ybFbDbK#B#Bacak#P.saeadakaGbubuaB#R.raa#x#p#p#w#E#p#w#s#q#x#E#p#w#F#x#x#wbG#w#v#w#C#C#x#w#EbL#x#x#v#x#L#U.t#0#B#v#vbDbJbEbQbFbNbNbA.ZbJbC#zauaKaxao#L#D.k.k.jbE.i.jbCbK.f.g.e.e.c.c.b.#.#....aAavao#J......................................", +".AbTbebgblblaW#e.J.4.K.y.y.1bV.1aWaP.K.J#f.E...................7#f#i.M.x.1bV..aP.4.G.K.JaZ.K.J.Mb..8#l.1.O..........#d.M.uaVbrbia9aR.4brbybxaR#8.I.C.1.IaU.4..a1a8a1.O.P.uaQbobsbr#8.P.Ca0.e.g.f.h.h.h.N#7.F.C.FbT.o.W.Wa2ag#6.Y.Y.Y.Y.Z.WbMbMbA.V.S#3.QambE.Ra8aR.r.DabbDbJbD#AbC#BbIbGbG#B#BbG#P#P.saeaLaD#4aGaHaC#1#P.qac#w#p#x#pbL#F#D#G#E#x#C#F.o#w#G#C#x#w#v#v#p#p#w#Eazar#X#w#BbG#FbNbDbB#A.XbGbPbN#AbCbMbFbFbFbJbGbEbB.Yavavap#T#Jao.k.n.k.ibObF.h.f.f.g.e.c.e.b.a.#.#.#auawax#V#J......................................", +"#fbeaW#ebmaU#e#b.w.K.M.J#daS.1b1bh#e.y.Jbf.........................M.wbV......aXaX#d.w.1aZ#d#b....aV.O.Ga5..............aR..a8b4a6aO.Oa9a7aR#8.1.C.IaR.I.O.zaU..aRaO.O.uba.#a1a0a..N.v.Fa1.c.g.f.f.h.h.i.C.E.Fal.o.mbqbtbpag#3.B.Ybnaiag.E.YbCbF.T.UbJ.SbFbAbMb4a5.O#d.jbMbJ.jbEbObNbK#vbG#yaHaCaa#P.laHaLaD#RaBacaa#R.q#1#O#q#C#p#pbL#F#C#q#DaAar#Q#C#w#CbG#w#p#w#x#x#xbHazaGar#0aGazar#X#NbI#w.X.XbDbM#BbG.Y.Z.Z.Y.ZbCbFbAbB.Waoao#V#Jas.o.k.k.h.hbNbC.h.f.f.d.e.c.b.b.a.#.#.#apapao#JaC......................................", +"bgaWaP.4aT#e#a.x.1bSbh.5.w.yaZbm#e.4.x.1..........................bdbb#j.........M.G.wbaaX.GaV..b0a6.4.I..................a5brb#a8.4.Ha1aQaN#8.H.ubaa4aR.O#k.#.#.P.N.ual.#.a#8#8.N.C.Eb5aR#8.P.g.f.f.h.h.i.k.k.n.m.obnbpa8a7aRaObpbvbnaf.E.E.V.T.VbMbCbA.lbMa5a8aO.CaO.jbMaFajbFbPbDbCa7a1aGb3aC#Y.rbGadad#4.q#2#1#O.q#OaM#Y#xbI#C#C#x#x.X#CaGaLar#Q#K#0#x#v#w#w#DazaIar#QaKaMarazaHaKar#X#K#A#v.XbG#BbFbDbD#A#D.V.Z.YbB.ZbA#z#A#y#J#Laq#D.n.p.k.h.h.h.f.f.f.gbObM.b.b.b.#.#.#....#T#J#T........................................", +"#caP.4.y.z#b.w.waSaW#a.w#e.ybdbb#i.x#aaYa6aV#e........bqa0.NbiaVbfbkbd#i.5..........blbf#h.A....bxa6.L.L......a8a5.O........a5aRaN.O.u.x#8.O.H.P.FbZa5aR.4.u.#...#.#.#...#.a.#.E.N.Na4a0#7.P.F.e.g.f.f.h.h.k.k.ia5aRaNa2bibZa1aObobrbo#9.D.C.T.Vaia#bA.S.lbCbCaO.I.FbC.jbzb3af.DbCbDbOb4a1aCaFaFah#5ae#Aak.r#2bK#C#R#R#P#PaCaGazar#OaCac#G#pazar#X#K#Y#0#K#A#H#paGaLaGar#R.qaI#0ayaGaKar#Q#K#0#DbCbD#y#A#AbPbC.Z.YbA.V.Z#zbCbA.YbMbFbJbBbObE.k.h.h.h.h.f.f.f.gbFbC.b.dbPbM.#.#.#................................................", +"#c.y.y.yaSaY#daTaP#e.y.waXbkbdbia6aVaP.Lb2aW#d.w....a9b3a1bib7aSbkb2aU#k.z#f........b2bc#i.5....aQ.4.xb8....bib2aR.O.Ga8a6aRaQaO.O.I.ubaa4.H.uala5b4a5aO.Oa9aQ#8...#.#.#.#.#.#.O.Obqbsa0#7.C.N.e.c.g.f.h.h.h.ibra7a1.O.HbxbsaQ.Oaiag#9#3.B#6bzbzaE#5.B.S.l.l.l.j.1bCbBbKaDah#2.DbC#za9a9aOaFaHaFad#5#2#2.X#v#B#CaGac#O#PaC#xaLaLar#OaJak.q#p#X#X#N#Qaq#K#M#C#C#waGbtaC#Z#O#O#0#Uazazar#X#S#K#B#vbPbJ#AbD.YbCbB.Y.YbMbE.Y.ZbA.ZbObPbFbFbObObB.k.p.h.h.h.f.f.f.f.e.b.a.abMbM.#.#...#..............................................", +".8.A#i#daW#d.y.waX.1.x.1.Kb2bibia6aV.4.O.xaX#d.xaP..a8a6aXaP.L#ebdbd#g#c.zaY........bkbd#j#c.z.....Ja9aRaO..a6a6.4.Gbibxa5aR.L.H.C.Halbs.uba..a6a8a8a6brbqa9aRaN.N.C.#...#.#.#.abobsbsaN.N.B#8.eboag.N.h.f.ha7b0bZaR.N.P.OaQ#8.I#9#9#6.B#6bsbzbvaia0#9#5boboa2a..BbAbBbFah#5.sa4bF.ibF.4.4aHbvbvad#4.r#2#D#AbHaLaLac#O#B#BaIaGar#X.tas#P#PbH.X#E#X#M#N#1#G#x#p.XaIaC#Z#Q.q#Q#Q.t#0#0#X#N#NaMbObMawavat#V#D#A.Y.Y.ZbFbB.V.Y.Y.W#ybMbFbCbEbFbM.k.i.kbM.f.f.f.e.e.c.c.b.b.b.#.#....................................................", +".z.5aUaT#e.4.A#d.4.L.1b1bda6bxb4a8aP#d.L.x#d.J.L..bibia6aVaO.L.xaU#c#b.AbR.#......bkb4bk#i#b.7..a8a8a5aR#8.HaRaO.1.IbibxaVaO.x.1.zaO..........aVaVaRaObrb4a9aQ#8.H.u.#.#.#.#.#.a..a2a0#7.E.Cala3boa2#7.B.f.fa9a8a5#8.N.CaO.4.IaEah#9.B#9a2bEaiboboa3ag.Ebqbya2#9.Ea#.jaHaFaD#5.DbF#z#ybN.OaFaFaE#5#4.s#2bGbDaGaHaH#Y#P#R#D.X#Z#Q.t#1#P#Pbvazar#QazaGaB#X#x#w#w#D#Z#Z#Q#O#Pb6#L#Q#C.t#Q#QaCbDbQbMauaMap#TaxaxaqbMbFbAbA.V.Y.Y#y#v#ybFbB.n.k.nbObMbNbM#B.f.f.g.d.d.a.b.a.#.#......................................................", +".A#caZ#k.4.KbmaWaP.4aZ.Jbcbmbibib#aP.4.I.x#e.wb1bkbjb4a6aRaO.G.xbb#e.zaT..........bdbdaU#c.z.7.Ia8b4a5aR#8.H.H.L.xaVaVaVaO.O.uaS.A#i............aOaOa9bybxa7aO.O.H.HaNa1#8.#.#.#..a.#7.F.CbT.cbobya0#7.C.h.haRaRaO.1.u.Ca1.Nbpbpaia#.D.T.VbAa#bqb4a2a.bobsbvai#7.E.Ebzbybpah#4.DaCad#PbQbDahahab#4.r.QanbK#A.YaBaa#P.qaD#B#v#v#Q#Z#x#F#waGbYar#QaGbuaB#X.q#wbKbGax#Q#O#O#1.tbY#y#D#v#vawat#TbQbMavax#VawaAawaq#TbCbBbA#z.Y#y#y#v.X#D.n.n.k.hbMbCbFbC.h.f.e.dbObF.b.a.#.#.#......................................................", +"#ebX#d.G.4bhbgaWaT.4.y.y#kaVa6aVaP.4.1.u.LaV#g#bbibxbxbiaP.1.G.G#d#c.7#k..........aUaU#k.5.KaYa5bxbxa8aO.O.P.N......aOaO.O.x.1bV#cb2...............La3a7a7aR#7.N.C.IaRa1#8.H.#.#bqby.P.Ca4#7.Ca2a0#7.F.N.g.i.haO.N.H.Fb3.Caibybyaia#.B#5bC.T.Tbobra2#7.Ca2a0#7.E.Ba.bzbtbtab#2.r#2aa#PbJbJ#Aaa#4.r.DamaJ#A#ybBak#P#Oam#B#BbG#BbI#v#BbQbKasaI#XaIaGaH#Z#O.qbDbKaMax#W#J#B#Laq#B#AbNbDauaKat#TbMbCao#W#LawaKaA#V#L#U#z.Z#z#y#y#y#vbG#DbNbC.h.i.hbJ.h.f.h.f.ebNbMbB.b.a.#.#.#.#....................................................", +"#e.y.K.xbibxbjaWaT#d.y.yaS.4aPaPaO.M.x.1aSaV#k.AaVa8a6aP.4.L.u.NaV.7.z#j........bWb0#b.z.zaZ.4bia7a5aQ.O.I.ual....a5aR.O.IaOb##fbebhbc#i.y.........4aQa1aQaN.N.C.Iala9al.Hal.#.#a0bob3bsa..E.C#7#7.E.Eb4.f.f.h.h.N.NaQ.C.Caibpaia#.D.BafbAbA.Ta2a0a..E.Ba.#9.E.B#6a2aDaEae#4.r.Qafak.qaB#P#B.Q#2.Qafah#z#A#A.YbF#zaAaIar#N#x#ybQbK#wbK#B#Q#Y#O#RaB#Z#R.q#ObGawazaz#T#J#y#A.ZbD#AbK#Bavaxao#L#V.Y#A#L#Maxaxaq#U#Kasauat#T.Z#y#v.X#D.mbMbD.kauao.h.h.f.f.e.g.dbJ.b.a.a.#.#...#....................................................", +"#a.y#d.4bxb4b0aWaP.4.w.yaX...4.4.M.1.wbTa6#i.7.AaXaRaPaO.O.x.1aPaV.A#f..........blbca6a5aO.I.IaVaQaOal.N.ualbaa8a8a5aRaN.Ia9aRaNbhb7bc#i.z..........a8#8#8.N.H.CalbZ.N.C#7boa0.N.#a3a3aN#7.C.F.g.c.N.c.e.g.g.j.f.h.h.i.k.k.kag#9#3.s#9.SbC.S.S#7a#.N.Ea#a3#3.BalbaaCabab#5.D.salaF.raHaCaa.r.ZbBbJ#BbD#AbG#AbG#ybBaHaH#Z#S#wbDbKbDbKazaGar#Y#X.X#R#Q.q#O#A#A#Waq#U.taMbJbA.WbB#ybD#Bapao#T#L.V.YbFbD#A#W#W#U#J#0awaAat#V#L#v.X#E#D.k.n.kavayap#L.f.f.f.e.e.c.b.a.a.#.#.....#....................................................", +".K.w#abmbhbjbiaT#c.1.w.4aXaT#b.y.L.LaTaZ#j#c.A.8bc.4aO.M.L.xbab#.A#cbX..........#ja8b4aVaO.x.Ib#.O.O.I.F.Ib1..bib5a5aR.O.G.LaR.4.Cbhbc#b.yaU........a5aR.H.C.CalbY.#.#..bhaW#e.xa.a.a.#7.E.Ca0ag#9.d.c.e.g.f.f.h.h.h.h.k.i.k.E#3.s.Nam.o.S.SaFaE.C.Eala4bzaEaf#5btad#4#2#2.s#5aD#PaHbvaD#4.raBbG.ZbObM#A#B#A#ybGaraG#Z#Q.t#ZbKbI#B.WaGaGaI#Z#ObCaq#0#R#XbObP#A#L#JasbQbFbNbC#D#ybPbD.0#z#Laq#T.Y.Zazaq#W.V#L#0bAaxayap#T#L.X.X#D.n.n.k.haxawao#J#V.h.f.e.e.c.b.a.#.#.#...#......................................................", +".w.yaVaVbmaWaV#d.7.y.w#baTaU#c.x#k#b.A.7.4.5.7bWbb.4.G.G.Gbab#..#c....a8a5aP.I....a8bxaR.1.uaPaOaO.O.N.OaO..a8bxbZa5aO.L.I.LaR.4.uaO#f.y#fa7a1aQ.F...4aO.G.G.1b1...#..bib4aW.4.wa0.#.N.C.Cbpboa2#9.E.c.e.g.f.h.h.f.h.h.i.k.k.k.n.m.m.m.m.U.TbuaFab.D.Sbpbvbnaga#.D#4.r.Da3#8.EbBbCaDaCab#2.qadbMbObMbF#ybIbGbNaC#Z#Z#X.q#QbPbQ#AbKaGbuaLaI#X#O#QbQ#M#YbJbMbFbCaGaAao#JbBbCbC#D#CbF#A#zawawax#W#Mayayaz#0#M.VbBbEavap#V#Jao.X#E#D.k.n.k.katap#T#L.h.f.e.e.c.c.a.a.#.#.#..............av#V........................................", +".wbSbmbcaTaT#e.4.1.x#daZbc#i#b.A#i.7#i..bc#cbdbb#iaV#e..............bib4a5aO.IaO..a5aR#8.u.Ha5aN.Ia8a9aQ.O..a5a8aVaR.O.I.uaRaNa7a1aN.N#ba7b4a1aN.I..a7.I.L.1b...bqa3a0bgbga3a0#7aT.#.#.a.#bpb4ai#9.E.E.d.g.g.f.f.f.i.h.h.k.k.k.k.n.n.m.m.SaEaJah#6.DaEbrbvbnaf#3.B#6.rb5a4.N.NbBbBaFaDaj#2bwbAbNbObCbFbBbBbQaGbY#Z#O#S#YbC#A#BbK#CazaGaI#X#O.t#ZbDbBbPbObOayar#Uaq#T#J#WbJ#DbG#B#v#z.YawaAaq#T#MawaKazaq#K#VbFbA#V#V#L#M#v.o#D.k.k.p.h.i#T#L#LaK.f.e.e.e.c.c.b.a.#.#...#..........auauap#L......................................", +"#fbmbWbb#d#e.4.y.J.ybTbjaY#e.z.x#i.4.z.4.5a6a5aP.4aWaP.L.4..........a6a8a5.O.uaRa9aO.O.I.Ib1a5aRa8bxa7aR.O.uaRaRaOaO.G.xalaVbra8a9aN.4.Cbqa8a9.O.uaObxaQ.P.N....braWaX.4bobsa2a..E.#.#.#.aboboa2#7.B#6a#.e.e.g.f.f.h.g.f.h.i.i.k.k.n.m.m.S.mab#4.D#6aibnaEaf#3.D.BafaaaN.N.Ca3bMaHaFaEaj#2.Q.ZbPbJbMbBbB#z#AaBaB#O#PbEbJbA.Y.Z.U.T#Z#Z#Z#X.t#1aB.U.XbQbPaybuar#U#K#JaMbB#A.W.Z#DbB.ZbBaxaq#W#J#Waxay#W#U#Jaq.YbC.W#v#V.X.obH.2.k.h.h.h.h.h.h.f.f.f.e.e.e.e.b.a.a.#.#.......#......aAaAao#L.#....................................", +"..bWb0bb#c.J.K.w.1aZbgaU#e.4.A.K.z.z.Ka8bia8a5aRaN.G.4.G.1..........aRaR.4.u.1aVa9.4.u.OaRa8bsa1bxb3a4a7a0aN.N.4.4.P.1.Jb5a7b3b5a9aN.4.PaNa0a3a3a0aN.N#8.C#8boa0bibiaVa3a0#8a0#7.C#7.#.#.aaga.#7.B.Ba2ag.g.e.g.g.h.f.i.h.h.i.i.k.k.k.l.m.m.m#2.r#6.S.Rahafa#.D.s#7ahab.raDab.SbFbpb3aJab#3.QbFbFbAbPbAbCbB.ZbM#R.raIbPbCbA.Y.0.U.U.S#Q#O#O#1aM#K.U.XbKbDayaA#W#N#NaqaMbD.Z.W.0.YbB.ZbB#z#V#L#Lapar#W#U#J#N.Z.Y.W.W#v.X.o.obNbJ.k.h.h.h.h.h.h.f.f.f.e.c.c.c.a.a.#.#.#..............atap#T#L......................................", +"..bdaY#g#c.Abdb2aTaU#i#e#b.yaZ#e.K.z#ca8b5bZa5aP.O.G.L.xaO.............O.I.IbxbcaT.4.C....bsbxaRa8bra8a8a1aN.H.C.G.GaOaR.Na9bra7aNaNa3boa1aN#7.Ca0aN.N.v.I#8.Cagb0b4bqboa2a..E.P.Ba4.#.#.#.E#3.B.EbTam.b.d.d.g.g.g.h.h.h.h.h.i.k.k.k.k.n.l.m.l.R.S.R.l#3#3.E.E.DbwaDabaFaFad#2ahbzbpaD#5.Q.QbB.Z.TbFbBbC.Z#zbMbObMbAbFbB.0.0.Y.TaGayar#S#1#U#Kan.V.Z.W.Yar#0#M#KbYbB#yauat#TbE#zbGbA.W.ZbBatap#V.t#U.t#XaAbNbMbM.W#v.o.o.lbObF.j.h.h.h.hauauatao.e.e.c.c.a.a.a.#...#...#.#........#V#T#Tas......................................", +"aO#j#i#c.z#cbcbkbb#c.4.4b2bWaT#e.y#bb8bxbxbZa5aO.L.H.O.4aV..........bhaWaT.7bhbgaW#e.y..bda5aQ#8aRbrb4bsaR#8.N.Nb2#8#8.N.CaRa1aQaNbobrbqa1aQ#7.E.PaN.N.C.N#7.C.Ebia3b3byag#7.C.Eba...#.#.#.#.a#7.e.a.b.b.c.dbnaiaf.B.f.g.haiaj.i.j.k.kaFah#4.l.l.R.R.R.R.R.D#6ag.R#4aFb3bpad#2.sahahae#2.s#2#z.Z.Z.SbCbF.Z.Z.ZbMbBbJ#zbB.Z.V.W.SaGaL#Z#Oar#Mar.V#D#z#A.Y.Y#M#SaB.W#zauaKap#TaobAbCbB.Y.V.Z#L#T#L#0avapbNbObObFbCbE.U.o.nbHbDbD.i.h.h.h.fauaKat#V#J.c.c.b.a.b.#.#.#....................................................ap........", +"bb.4#b.A#fbV#gaU#i#c.ybca5aRaO.4.w#b#ca6a6aRaO.1.G.IaSbVaZ........bkb4bbaP.4b0b0aU#e.J#bb0.O.O.Ha1aN.NbsaQ.O.F.CaNaT#b.NalbcaO#8.Na7b4b3a1aN#7.F.C#7.F.C.NaR.F#9aRa3boa3ag#7.C.E.#.#.#.....#.a.a.#.a.b.c.dbzb5a2#9.B.fbzbzaEaf.D.iaFaHaFad#4.s.l.m.l.l.l.S.R.R.R.R.RaDaFaD#4#2.Q#5#4#2.D#2am.Z.T.T.tbF#zbMbF#N.Z.T.VbGbB.Y.0.Y.Tazar#Q#ObFbF#z#z.Z.Z.Y.YbB#DbBbBbLbBavat#V#J#y.WbBbCbGbC.V.T#zbPauaAat#V#JbMbGbF.WbQbF.l#D.h.h.h.h.h.h.favav#V#T#L.c.b.a.#.#...#.#..................................................auavatao#J..", +"bb#k.z....#fa3#e.4.z.5a8a8aVaO.N.IaZaQaVaRaP.O.1.u.Ib.aZ..........bkblaW#ebgblbk#i.1.A#faU#cbra7a9aQ#8.C.O.I.C.1aR#b.AbVbV.....P.Cbqbxbra1#8.N.C.P.N.C.Cal.C#7..a0a0amaN#7.E.Ca4.#.#.#.#.#...#.#.#.a.b.b.bbnbnaf#3.B.gbzbybn#5.D#3aFbYbtab#4.r.m.l.l.l.R.R.R.R.R.S.Radadab#4.s#2.R.R.D#6.Z.T.Z.S.RbObNbObMbBbF#z.T.TaIac.T.W.0.T#O#Q#OaMbBbB.Y.V.V.V.V.Z.VbA#z.YbQbMbM#V#LaqbB#y#zbMbMbF.Z.T.TbFavaKat#V#LbMbB.o.XbMbFbH#E.h.h.f.h.f.f.fapao#T#LbY.b.b.a.#.#.#...#.#................................................auaKat#V#L..", +"aU#k.5#e....a.#7.5.zbibxa8aRaO.O.u#8.H.NaO#8.I.L.IbZ.#............bcaU#e.1.waW#i#b.x.zaW#k.5bsb0a1aQ.O.H.H.u.Nal.H.4aZ........a0aNa3a3a0#8.N.C.C#7.C.C.Pa0.Balbqa2#9#7#7.F.Bbwa3.......#...#.#.#.#.#.a.a.baiaf#3.B#7.gaiai#9#3.s#9aDaJad#4.D.Qae.l.l.l.l.l.R.R.R.l.R.l#4#2#2.DaF.R.R.R.Z.R.R.R.R.RbFbFbObFbC.T.Z.ZaAaGar#O.TbBaGaM#Z#O.V.V.Z#z.V.V.Z.T.TbB#z.Y.VbMbC.VbC#zbBbB#zbBbMbBbFbC.VbC.Vavax#V#L#WbBbM.U.mbM.l#E.h.h.f.h.f.g.f.g.d#T#Jaq.b.b.a.a.#.#.#.....#................................................auavao#T#L..", +".4.4.waU.......E.Na2brb0bxaR.4.I.xaO.#bhbc.L.ualb.al..............#e#e#b.A#b#d.4.1.za4a7a1brbZbZa1aO.O.P.H.Nbab#.Ca0.Dai..bqa7a1aNa0aN#8#8.P.v.1a4.C.Nb1.C.Fa0b3a2#7.B.E.Bama0...........#......a6aP.#bzbnbnaf#3.B.H.da#af#6.B#3aEadajab#2.s#6.n.l.l.l.m.l.m.m.R.R.Ra7b4aQ#5.S.R.R.R.R.R.R.RbMbM#zbB.VbFbCbB.Z#zazaLaH#Y#O#QbBaIar#Q#ObB.V.V.T.Y.Z.Y.VbBbG.Zat#W.TbG#z.ZbFbMbJ#z.Z.ZbF.Uaq#L#zavawawaq#W#KbCbPbBbObMbBbPbB.f.f.f.f.f.e.e.e.c.c.c.b.b.a.#.#.#.#.#.....#..............................................apao#T#JaM..", +".8.A#faW....ayar#N..a8a8a1#8.O.u.GaR..aT#eaP.O.u.NbZ.................5.z#fbj.#.4.K#ibxbia1a9a7a9aQ#8.N.u.OaQa4.Nba.Dam..bqbybsa3aN.O#8#7.P.P.FbT.v.1ba.F.EbZa3a0a..F.F.......................#aEa2#3.4bzb5aiaj#6.BaS.g.g.D.Dala4.i.i#5#2.D.rbw.l.l.n.l.l.l.S.R.RbM#za3a0.N.C.R.R.R.S.S.RbFbBbMbFbBbFbFbF.RbB.TbBaIaGar#R.tac.T#Y#Q#QbubA.V.VbC.Z.VbBbBbBbGawazaq#M#z.T.VbBbMbB.T.T.TbFayay#WaxavaAaMax#W#JbAbFbFbFbC#EbMbM.f.f.g.f.e.e.e.e.c.c.b.b.a.a.#.#.#.#.#.#....................................................#T#Lax....", +".z.zbV......aK#0#Kara1aRaO.O.I.IalaR.....4.5.N.1b...........a7aQ.N..#b.4.KbT......brb3b3a1a1aQaQ#8.1.u.CaSaTa3a1aQ.N..bqbob3b3a1aN.N.P.P.C.Na4a1al...N.Eal....#9.E.CbZ...........#.....#.#.#btbvah#5a2bpbtai#5.D.B#9.g.d.d.g.g.f.h.h.h#2#4ae.k.k.l.l.l.l.l.l.l.RbFbB.S.N.Ca5.R.R.R.l.l.lbFbBbJbB#zbMbMbM#zbFbB.S#z#Z#Q.q#1ayazar#N.VbCbF.T.VbB.YbCbC.Z.ZayaKaz#V#L.VbMbFbB.ZbC.T.T.TayaAaxavawaqayay#W#M#J.mbCbI.jbPbEavavap.g.e.g.e.e.e.c.b.b.a.a.#.#.#...#.#.#................................................................", +"#fb1....a5aOar#M#X..#8aN#8.I.u.1b1..............bhaW#e.4..brbsa0.N.C....a9a5aRaO..a9a8a7#8.O#8.1.N.H.Cbaa4bqa7a1aQ.N.vbra3bra4a3#8.C.C#7.........................Ea............#...........#bpbtaf.D.Damafa##6.Q.E.c.d.c.d.d.g.f.dbzaEaj#3.D.i.k.k.k.l.lbna2a#.CbF.R.l.R.l.R.R.l.R.R.RbFbFbC.RbC.RaGaB#RbFbFbAbC.S.S#Oaa.WaAaLar#Oar.VbBbJ.Z.V.V.V.ZbJbBaxazaq#U#JapbMbBbE.S.T.T.T.Uaxatao#Jap#Vaqaq#U.tan.n.k.k.hbMbCaxayap#TbMbA.c.c.c.b.b.b.a.#.a.#...#......................................................................", +".L.Ia8a8a5aO.N.I.#...L.N.N.v.1aV..............bhbibmaT.4.xbxbxaN.H.H..a8bia7a1#8.Ha1aQaQ.1.H.u.F.C.LaRa9.vbxb5a1aN.N.va3a0a0aN#8.N.C.CaS.......................................#.#....ab....aiaf#6.D.E#9#5#3.D.Db4.b.b.da7a1.4.gbzbpaEaf#3.Q.i.j.k.l.kbvb3aga#.B.l.m.R.R.R.R.l.R.R.RaDaabBbC.l.SaGbvaB#R#Q.R#z.R.S.S.SbBbAasar#M.t#B.ZbNbMbC.VbE.TbAbF#zaq#W#U#J#0bCbA.U.S.S.T.T.U.U.U#T#J#U.X#L#M#L#J#U.n.k.h.ibH.0auawaAao#L#TbJ.e.c.c.b.b.a.a.a.#.#.#.#......................................................................", +".I.Na8b4aRaO.G.I..bgbmaT.4.J#e..........a6a6aVaP.LaWaP.4.xa9aQ.4a8a1aR.Nb4bxaR.O.H.OaN.N.P.Calb#bsa7#8.Na7bsb#a1#7.F.CaQ#8aN#8.N.C.FbTbs............................................ai#9.D..#9#3.D.Bbs.##3.B.Bam.b.b.c.ab5a5.OaEbvbvaEaj#3.D#5.h.i.j.kbobo#9.E.B.l.l.l.l.l.R.l.RaHaHaFad#2#PbE.RaGaC#Z#O#Y.R.S.S.S.S.S.T.S#X#Q#SaJ.ZbFbFbCbBbFbH#z.Z.V.T.W.Z#KarbAbB.Z.T.U.T.U.U.V.U.W.U.X.o.U.U.m.m.n.nbM.j.i.ibH.fatatao#T#Jaq.e.c.b.b.b.b.a.#.a.#.......#....................................................................", +"bhaU#e.zaQ.O.u.1bjbVbmaT#d.x.y.z......bibibiaVaP.4.x#d.J.waP#8a8a8a1aQ.O.ua1al.I.uaObh.I.vaQa5a1a0#8.N.v.Na1aQ#8.N.v.Hbi.N.N.P.B.Cala4............................................bzbnaf.Eah...##6.....#.#.#.a.a.a.b.b.caRaO.HaEbpbnah#3.D.Bafaf#9.h.iaga.#3.B.E.l.l.l.l.l.R.R.RaFb3aFab#2.rbC.ZaB#Z#RaCaBaa.R.T.R.S.R.T.R.T.T.R.T.TbJbBbB.S#zbBbB.Z.S.SbGbBbF.TbM.Z.U.U.U.V.U.U.V.U.X.U.o.mbMbObE.n.nbObObB.hb9#E.g.d#V#T#Jas.e.b.e.b.b.b.a.#.#.#.#.#.#..............................................auap......................", +"blaW#i.z.K.I.1bgb0b0aW#e.1.w#e.yaR.Obobib7bxa6a6aRaO.M.w.JaVa8b3bZa1aO.O.C.O.N.u.HaVbgaWaP.M.x#a#8.N.P.Hb#aN#8.N.v.1b4b3bZaR.4.N#8..............................................bzbvbv#9.B.D.#.....#...#.#.#.#.#.a.a.b.b.N.u.1ahahaf#5#2.s.Dahaiaj#3.0.R.E.B#3a2.n.l.l.l.l.l.l.laHbtaJ#4.Q.QbB.S.R#OaHaGaDac#P.R.R.S.S.S.T.R.T.TbPbBbE.Z.S.S.Y.Y.T.T.S.SbAbPbFbObMbB.V.U.U.U.X.U.o.U.o.U.m.mbEbObC.n.kbJbFbM.hbH.g.g.d.c.e.c.e.c.b.b.b.a.b.a.#.#.#.#.#..............................................auaxat#T....................", +"b2aT#c.y.K.Hb#aWbib.aX#d.w.yaT.xaR.O.ubibxbia8a6aVaO.L.xb1.Na8bxa5aRaN.O.C.O.H.Ib1.waXaP.4.w.1b8bs.N#8a0aWa0.N.u.1baa8a6a5aO.I.GaRa0#8............................................aiaf#3.Bam.....#...#...#.#.#.#.b.a.a.b.baCad#4#5#5#2.D.Db1b3aD#9#2.s#3.i.i.k.k.k.k.jbPbF.l.l.RaDahab#2.r#2.R.S.R.RaHb3aDaa#P.r.R.S.S.S.S.S.S.RbFbF.SbF.S.S.S.T.T.S.S.T.TbFbObMbF.V.U.U.U.o.m.o.o.m.o.m.m.n.m.n.l.k.k.h.h.ib9#E.g.e.c.c.c.e.c.b.e.b.b.a.a.#.#.#.....#............................................avaxaAao#L#T..................", +"aW#d.7.x#b......aTaT.4.1.wbTaW.w#e.HaNa5a6bxb4a6aR.4.G.Ial.Na9a8a7aRaQ#8.I.C.O.H.4.waX.4.xa7a1aQ#8bobmbiaW.N.N.EaVaPbib4aVaO.I.Ob3a2#8.E................................a3a0a..P..a#.D.Da4.......#...#...#.#.#.#.#.#.a.aaHbtadaa.r.D.D#6ambvbtai#6.D.saf.E.i.i.i.i.k.kbMbB.R.n.lab#5#2.r#2b5.S.l.R.maHaHaDak.r#PbC.S.S.S.m.S.S.S.T.S.U.U.S.U.U.U.S.U.U.U.VbMbPbF.X.UbM.S.m.o.m.m.o.m.m.m.n.n.k.k.k.k.k.h.f.hbH.d.e.eavao.c.b.b.b.b.b.a.a.#.#.#.#....................................................atap#V#L.#..................", +".G.4.w#daY......#d.4.5.K#aaY.A.Jbra7aRaPbmbibxbiaP.4.x.IaV.Ia8bxbxa5aQaO.P.C.O.H.O.waTa7bra7a1aQ.O.ubhb4aW#da8a8a6a8bxbxaR.O.x.Ob3a0#8.Ea.............................bqboa0a..E.C...#......aCad.q.#.#...#.#.#.a.#.#.aaFbubvah#4.D#4.d.c.daEai#5#3.Q.D.Ea#.g.j.j.i.j.i.j.k.k.l.l.l#2.r#5am.R.S.l.S.ladac#4#P.sab.m.U.m.m.U.U.U.U.S.U.S.U.U.m.U.U.TbMbM.Z.U.UbFbB.mbMbPbB.n.m.m.m.n.l.l.n.k.n.k.k.h.h.h.h.fb9.2.e.eavayao#L.b.b.b.b.a.a.a.#.#.#.#.......#............................................#V#T#Tas....................", +".J.J.5bV........bjb0.5#eaZ.A.4b1b4a7aWa7aVa6aVaP.4.G.x.1a6.Pa8b4bZaRaO.O.H.uaQ.H.ObV..brb4bxa1aQ.O.I.HaVaP.Jbib4biaPa5aRal.G.Hbaa0#8.F.Ea...........................bqb5bZa0#8.E.C.......#..aHaa.s.#...#.#.#.#.#.#.a.#aDaFaE#5#P.D#4.b.c.caf#5#3.D.DbY.C#E.0.g.i.i.f.i.j.i.k.k.k.l.n.l.m.m.laCacak.m#Pak#P#Pam#N.S.m.U.S.U.m.m.m.m.o.m.U.o.m.S.RbM.ZbBbF.m.m.m.m.n.nbFbCbE.n.n.n.jbPbE.j.n.h.i.h.h.h.f.f.gbR.g.c.cavat#V#L.c.b.b.b.a.#.a.#.#.#.#.....#..........................................................................", +".w.JaV........bgb0b0aW#e.Ja7a1aQ.Nbgbma8a8aRaP.4.L.u.1ba.Ma9a8a8bsaR#8.N.H.HaO.ual....brbybya1aN.N.P.H.x.1.wa6a6aP.4aOaO.L.u#dala..N.v.1a0..............bzai#9......a3brbqa.#7.B.F..........aa#PbY.#...#.#...#.#.#.#.#adadaa#2.r#5an.a.2.2.D#2.Q.Dam.g.g.0.0.0.0.d.daB#Y.i.i.i.k.k.k.k.n.laHaHadak.qaGar#4#Q.qb5.m.m.m.m.m.m.m.max#W.m.m.n.l.m.lbFbB.l.l.mbMbM.k.k.k.jbMbA.n.n.k.kbMbB.k.i.ibNbN#A.h.f.g.g.2.c.c.cap#V#JbY.c.b.a.a.#.#.#.#.#....................................................................................", +".x.1......a9a1aWbiaWaP.4bra7a1aN.O.uaWaVa5.4.4.J.1.IbTaP.L.Ja9a5aRaO.O.H.u.NaQ.Ha1....a9a7a9aQ#8.H.Cal.xaVaPaRaRaO.G.1.L.IaV.....E.v.Cb#................b5ai#6.B....a0a0a.#7.E.val........a1#8.....#.#.#...#.#.#aHaD#4.s#4#2.s#2bs.3bHbHbR.d.b#4.d.b.d.d.d.g.0.2aGaGaIac#O#5.i.i.i.j.jaGaHb3btac#4.raI#Z#Q.taC.m.m.m.n.m.l.n.maAaxao#J.n.n.l.k.k.n.k.k.k.kbMbCbC.k.i.k.kbD.k.i.i.k.i.ibMauapbEbFbJ.f.g.gbSb9.c.b.b.b#V.b.b.b.a.a.b.#.#.#.#.#....................................................................................", +".JaS....brbra1#8aT#i#da7b3bZa1aO.N.u#8aOaQaO.G.L.1aSb1aVaR.GaQaQaN#8.H.u.1aQ.HbT.C.C..aRaRaQaO.P.v.Ha4.1.......L.w.xb#............................a7a9aQ.Na2#3.B......a.#7.E.B#7a3......a8a9aN.C.....#...#...#aFbvaDak.r.abp#6ag.Eb9.c.b.b.b.b.d.d.d.b.d.c.d.d.daGbvaI#Z#P#O#2#4.iaFadaaaHaHaFaa#2.rab#Q.taM.n.n.n.k.l.k.n.kaxayax#U#J.n.k.k.k.k.k.h.j.i.i.ibF.iavao.i.h.i.h.i.i.i.hbNaxayap#T.f.f.f.e.b#f.b.b.b.b.b.b.b.a.a.a.#.#.#.#.#.#.#.#.#................................................................................", +"b#bgaX.4bxb3a1.N.1#b.wa7bxbsaR.O.P.C#8.J.O.N.I.uaObZa8a5aO.I.N#8.1.H.I.Ib#a4a5#8.C.N..#8.4#8.N.C.HbTa4b.........................................a8bxa9a1aQ#8.vbabzaEaha#.N.Bala4......a7bxb#.O.C.......#.......#aCaa.r#2bpbybnaf.E.B.a.b.#.b.b.d.d.d.c.b.c.b.d.daGaHaC#Y.q#O.D#2aHaHaBaaadadaa#4aCaIac#R#K#Nawav#V.k.k.k.k.k.laq#V.tan.k.k.k.k.k.k.h.i.i.i.h.hauavap#T.f.h.h.f.i.h.hauaAaAao#L#TbC.d.cb9bR.b.b.b.b.b.a.b.a.a.#.a.#.#...#.#.#....auat#L..........................................................................", +"aVbgaVaP.J.waO.N.Ca1.4a1a1aQ#8.N.u.Ha1a6aVaO.LaObib4bZaX.4.L.I.I.I.u.1a4a5a3a..N.Cal.....N.L.v.Ibaa4bia6aO.x..........................bzai#5....brb3bqa7a0a..PaEbvboag#3.B..............aRal.C.H....aFah#4.#....#4#P.raDbnbtbn#9.D.D.a.a.b.a.b.a.b.baiaj.b.b.d.caCaB#Y#O.qaa.DaHbvbuad#4akak#5aGaGaCar#R.q.kaAax#L#W.i.i.k.i.i#J#Las.i.k.h.i.h.i.h.h.ibPbB.havaKaAap#T#T.h.f.h.f.h.hatatap#T#JaxbF.c.cbR.b.b.b.a.b.a.#.a.#.a.#.#.#.#.#.......#auaKap#T..........................................................................", +"b4biaV#d.J.L.N.ubaa1.P#8aN#8.N.C.NbTa7bjaVaO.L.La8bZbiaR.1.I.IaXaV#d.xa0a0a.#7.C.Ca1..a8b4a5.O#8.IaOb4aVboa2a0.E......................b3ah#5.B..a3a3b3bZa0#8.P.Nbtbzaiaf.D#9.............N.F.Fa4..btbvad#2.r.#bT.2bSb6b6aiag#9#3.Bal.b.a.a.a.a.b.abvbn#5.D.b.b.c#Y#Y#R.q#RaCamaDaLaD#4#2.s.raGaHbuaCac#R.qaxaq#K#U.i.i.i.i.i.i.i.i.i.h.h.i.h.h.f.h.h.fbFbC.hauawat#V#Laq.f.f.f.f.g.g.g#V#T#L#Z.c.c.cb9bH.a.a.b.a.a.a.#.#.#.#.#.#.#.#.#...#.#..avav#V#Jax........................................................................", +"b4bla5aVaO.OaXalbaa..N.H.N.N.C.Cbaa1b3bxaR.4.G.OaWaVaR.4.G.x.ObjaP.O.waP#8.Na8a7a9aO.Lbibxb#aO.L.H.OaWbob4a3a..E.E..................aibn#9.D.E..aQa7brbraQ#7.C.Nbzbqai#9.D.D......................aFaE#4.r.r.2bSb6...#.#.#a#.E.Dal.b.a.#.#.a.#.baEbpaE#5.Bai.a.b.a#P.qaeaC.baLadadaa#1.r#PaDaIaGaCaC#Y#O.qac#U#K.k.i.h.i.h.h.h.h.h.i.i.j.h.j.f.h.h.h.g.h.f.faoap#V#L#Uax.g.g.g.g.e.g.e.e.g.e.e.c.b.cbR.a.a.a.#.#.a.#.#.#.#.#...#.#.#.#...#....ao#V#L#V..........................................................................", +"bia8a5aVaR#8.IbZa1#8.C.N....#8aQ..a6a6aR#d.M.waSaPaP.4.L.u.1b8aX#e.x.1..a2a8bxbxa9aO.N.Ca5aR.O.I.CaS#dbobsbo#7.B.E....................#5#2.Bb4....aRa1aQ#7.P.CaSbvbvaf#3.B.D#Y....................ah#4#2.Danb6...#...#.#.#.#.E#7.#.#ay#X.#.a.#.#..aj#5.D#6as#X.q.a.a.#.a.b.baraz#4#P#P#PbYaraBaBac#Y#P.q#R#W#N#U.f.f.j.h.f.h.h.f.f.f.f.f.f.h.h.h.h.f.f.g.g.gbO#T#V#Uay.c.d.e.g.gbObO.d.c.c.c.c.b.bb6al.#.a.#.#.a.#.#.#.#.#.#.#.#.#..............#T#W.#..........................................................................", +"bib4biaRaO.4.I.Na..F.CaQ.N........aXaP#e.1.u#daZaN.I.L.x.Ib#.M.4.J.Gb1....a8b0b0aRaO.I.IaR.O.I.ualba..a2a0#8.F.Cal.......................D..........a.#8.H.Bbaaibzai#5#3.Bai#9.r................bTadab.ram...........#.#.#..aCak.#aAaG#0#N.#.#.#.##4.D#6aLaI#Y.t.#aGaGaB#Y.a#Oarar#P#P#Sas#0#K#Y#1#O#P#ObY.t#X.f.g.f.g.f.g.g.f.f.h.f.g.h.h.f.f.f.f.g.g.g.g.dbMbMbM.e.c.d.c.c.e.cbObFbJ.c.b.b.b.b.abR.#.a.a.#.#.#.#.#.#...#.#.#.#.#.#.#..........................................................................................", +".Gb4biaRaO.O.x.L.N.C#7a1al...........4.J.G.Gb1al.P.C.C.O.........4a2#9a5a5a5a8a5#8.O.u.IaR.I.u.1b#....#7a..E.v#7a3......................aHaHab.r.......N.Cala1#9afa##3bzbzaiaf.E.B..........aHaHaFaDad#2.D.............#.#bvaCak#Pazar#Sas.#.#.#.#azaHar#Q#Z#O#NazaGbuas#Q.q.a.a#QazaI#Z#K#N#Q.3#O#O#1aC#X#K.e.g.g.g.g.f.f.f.f.f.f.f.f.f.g.f.g.f.g.g.g.e.davap.e.c.c.c.c.d.b.c.bbFbC.a.b.b.b.b.ab6.2.#.#.#.#.#.#.#.#...#...#...........#........................................................................................", +".Gbia6aO.O.I.x.1aVala4ala4..........a..M.L.C#7bZ#9boa3aN.N.FaO.Iboa2#9bxbia1aRaO.1.I.Ialai..al.............EaQ#6.B......................aHaL#4.r................#3.D.Bbpb3aEaf#3.Q....b6.3bRbuaFb5adab#2.r.....#...#bnai#5#3aa#P#4.##N#X.#.#.#.#..aGaH#Z#O#Q#NaHaIaHaH#Y#Q.q.#.#azbuaG#Z#O#U.b.b.caras#X#N#N.e.c.d.g.g.g.g.g.g.g.g.g.g.g.g.g.e.e.e.d.g.eauauat#V.c.c.c.c.b.b.b.b.b.b.a.a.a.a.a.#bT.#.#.#.#.#.#...#.#.#.#.#auauat#Tat#V..........................................................................................", +".LaPaPaO.L.x.LaS#d.C.Nbs...............F.Ca.a4.Bbob4a3a..E.BaO.xbvbna8b3bxaRaO.O.H.Hala5..a5aO.L........aEbpam#3.B......................adaa.r#4................a0aQaEbtbtai#9#3.B#6.2bSb6b6acaFaLaD#4.r#P.#bzai#9bvbrai#5.B#P.qbu.#.#.#.#.#.#.#.#aI#Z#Q.qaB.#.#..aB#Z#R.t#1.#.#azazar#Q.tar.a.a.b.b#X#N#ObY#E.c.c.c.e.e.g.g.e.e.g.e.e.e.d.e.eauap#L.d.caxaKap#T#L.c.b.b.b.b.b.b.aauawap#V.#.#b6.2.#.........#.#.#.#.#.#auaAaAat#T#Lao#L........................................................................................", +".1aR.4.O.u.waSb6aP.O.w..........aVaO.x..#7.E.Ebabobsbq#7.E.Ca0.xaOa7a5a7a5aO.O.P.uaPb#a2bxbiaP.L.L......agafa#.B#3........................#P#5.....................N.PaJai#9#3.Q.Dafb6b6.....raDad#5#P.r#5bvbqaibzbybvaf#3.D#5...#.#.....#.#.#.#.##O#Q#Oan.#....aC#Z#P#O#R.#.#.##Z#Z#X#O#1.#.#.#.#.#.a#X.b.a#EbHbR.c.c.c.c.c.c.c.c.c.g.c.c.eauavat#V#L.cavat#V#Jaq.a.b.b.b.c.a.a.aawaKax#V#U.#bS.#.#.#.......#...#.#....avaxaxao#T#L#V#J........................................................................................", +"aS.O.L.x.x.1b1a5aP.L.G........a8a6aR.O.ua8a5aO.Ia0a0a..N.val.1.IaRa8aRaRaO.O.u.1aR......bxbxaO.I.O........#3.B#9am......................ad#P..........................af#9#2.D.BbT............#4#4#2.r#2aDbvbvagaibnah#6.D.Bam#O...#.#.#.#.#.....#.....#.#.#.#aGaIaB#Y.q.#.......##Q#O#OaC.#.#.#.#.a.#.#.a.a.a.c#EbRbR.b.c.c.b.c.c.c.c.c.c.caAaAap#T#L.c#V#V#L#T.b.b.b.a.b.b.#.#axawayaq#M#Lb8ba.#.....#...#...#...#.#..atatap#T.t#W#J#T........................................................................................", +"bZ.I.I.uaOb#bxa6.4.I.G....aEbib4a6aO.L.xb4a5aO.I#7#7#7.B.Fb4.ub1bxb##8#8.N.I.HbT.uaR....aRaP.L.Iba..................................aFaHaD#2#P......................bR.D#3.E.BanaE................#Pan..bzbnaia##9afa##3.safai.t#Z...#.#.#.#...#......aGaB#YaGaGaI#0#Q.q.#.......#...#...#.#..aCac#R.#.#.a.#.b.b.a.##EbRbR.a.b.b.b.c.b.c.b.baxap#W#L#L.b.d.a.c.b.a.b.a.a.#.#.a.#.#aqaq#U#JanbS.............#.......#....au#V#T#T#U#L#L..........................................................................................", +".va0bqa2#7aVaVaO.L.xaS..bza8bibia6aO.G.GaVa5.O.u.4.E.Fala4.IaVaRaRaO.L.x.L.Nal.u.1....a1aQ.N.Iba......................aGaI#R........aFbtad#2#2..ad#2aCaa.........2.2bSb6b6#3#9.qae................aGaB#Y#9ag#9#3.B.E.D.B#6am#O#1...#.....#.#...#aGaGaGbuaBakaGbYaI#Y#O#Oac.............#.#aGaGaIaB#Y.q.#.#.#.#.#.a.a.a.a#EbRbT.c.a.a.b.b.b.bao#V#L#Mav.a.a.a.#.a.a.b.#.a.#.a.#.#.##T#U#J#Wb8#E...................#......auaxat#V#L#V............................................................................................", +".N.Ea0#7.N.E#d.L.IbaaW.Pboa9a1aN.N.Ia0ag#7aO.I.IaV.L.Ib#.........4.I.Iba.L.O.H.Ib#..a8a7a1aO.u........................aLaB#O#Y......aCad#4.sambuaD#R.rak.rb9.2bRbSb6b6....#R#OaJah#5..............aLaC#P#R.D.D.B#3bw..#6....aa....aq#U.#.#......aGaLaGaLaBaGaKaLaB#X#O#O...#.#.......#....aGbuaLaB#Y.q...#.#.#.#.#.#.#.#.#.a.2bRbR.#.a.a.a.aauaA#L#V#L.b.a.#.#.a.#.#.a.#.#.#.#.#.#...#...#b6...........#.#.........#....atap#V#J#V..............................................................................................", +"#7.u.N.E.Calbo.Ial.N.Ba7a8a7aRaNboa3a2a0#7.E.HbZbY..a8a8aVaO.G......aO.L.ub#.O....brbxb3aR.1.C........................ac#Y.tas....aFb3aD#4#PaDaHaa#P#4#P#PbRbSb8...........#bzbzah#5.B............#Z#R#PaC..bpbvaf#3.D..........ayaEaj#4........aB#ZaCaB#X#PaIaI#0#N.tac...............#..aGaGaC#Y#O.qac.......#.#.#.#...#.#.#.#.2bRbR.2.a.#avaAap#T#T.#.a.#.#.a.a.#.#.#.#.#.#.#.#.#.#...#bR.....#.....#...#..............#V#L#L................................................................................................", +".N.C.N#S.Nbob4boa..E.Ebrb4b#aQaNbrbya2a0#7.E.C......bxbxaRaO.I.........I#d......a8b4a8a5aO.I.uaQ........................#OaB......aCaD#4#2#2..aa#P#PaD#PaGaIak............bzbvbrah#5.Q#2#4..........#OaCaI#Kbzbn#5.D.E..........bzaFah#4.s........#P#Z#Y#Q.q#Z#Y#R.q#1bu....aIaIar#Y...#.#aBaB#Z#R.q#P.....#.#.#.......#.#.#...#.#.##fbRbS#Eatat#V.tax.#.#.#.#.#.#.#.#.....#.#.....#.#..b9b6....................................................................................................................................", +".F.C#8#OaIbnbqa3#7.B.EbrbxbyaQbobyb3a0a.#7.C.Ea0..a5bxa8a7a7a1aO.HaI#Z#O........a9a8aRaQ.N.uba......................................#4#P#2bwbS.3#PbSb6b6bYaCak#OaAas#X....aFbubuaj#4.Q#2aa.r....ac#RaIaGaEah#5aj#6.ram........bzbvbtaj#4.Q....axaq....#O.qae..#Q.t#1aL#O..aGaHaGaB#Y.t#Y.#..#Y#Q#O#ObY...#...#.............#...#.#.#.#.#..bRbR#T#Jar.#...#.#...#.#.#.#.#.#.#.#.#...#...bbR.........#....................................................................................auauat#V................................", +".v.Fa4ae..a0aga..E.Cala7a1aQ.Oa3boboaN#7.F.B.N......a5a8bia8a1#8.P.H#Y.q........a1a1aN.H.u.1a1ab.....................................##RaH#Z.qb6b6b6....aC#Z#P#PaLaz#S#Q..aiaEah#4.D.sana..raaaGaI#Y#Obpbnaiaj.D.sa2........aEaEbzah#5#2.QahaGaI#Z#K.....#....aGbuaGaa#P#YazaLaK#Z#X#O#Y.q....#P#1#Z...........................#.......#.#.#.#bRbSbR...#.#...#.#...#.#.#.#.#.#.#.#...#b6bS..............................................................................atao............avaAatao#L..............................", +".CbTa9bqa9aQ#8.N.FaQ#8aRaQaN.1a0a0a.#8.E.v.Eal.#....aOa8b4bxaQ.O.P.H#O#O........a7a1aQ.N.P#2.r......................................aHaCak#Y.q.#........#Y#P.qaCar#X.taC..#5ab#5#2.s#6am#P.saGaH#Z#R#OaFbyai#5.D#3aHaC#ZaFaCadaaadab#2.s#6aGaI#Z#Q#O#Q........aGaLaCak.q#RaIaIar#Y#O#O#Z.q.........#.........#...........#...#.........#.....#....bRbRbT.#...#.#.#.....#...#..........bR............................................................................auauavao#L..........avavap#T#L..............................", +"ala4bqbqa9aQaN.P.Ca9aQ.OaN.P.H.H#7#8#7.F.Cbabs....brb4a7a8a4#8.1.u.N#RbY....aFbrb4a9aN#8.H.D..................................bS.2.2bvaCaa.sbw................bpa2agaDahab...D#2.s#9aJbs.rbwaBac#1.tacbnbnaf#3.Q#5buaCaaaFaFad#5.D#4.r#PamazaGaB#1#O#Y.......#ar#Z#Y#P#OaD#Z#Z#Y#Q.tanaIaB#Y#O.....#.......................................#...#.#...#bRbSbS.#.#...#...........#.#..b6bR............................................................................avaAaxao#L.#........atap#V#Jaq............................au", +"a0a3bxb5a1aN#8.P.Pa1aQ#8.P.I.HaQ..a#.B.Cala7.E#2axa7a8a1a1aO.N.C.Ha5......aFbvbqbxa8aN.P.Ca.........aFah#4................#f.2bTb9aCaJaC#4.rah................bpbybzbuaDaa.r......#7.##PacaI#Z#Q.qae#Pagaf#6.Q#6aiaHaDaFbybtad#4.D#4#3bYaGaLaL#Z#N#OaC....aGazazaraIac#Y....#Q#O.t#1aCaLaB#Y.q...#.........#.......#.............#.............#.......#..bRbSbS...#.............#.cbR..............................................................................atatap#T#J............#T#Jaq..............................at", +".ubqbxbya9#8.N.C.Ha0aO.N.P.NaQ.O..bqbo#7a.a#.C.N#4aQaQal#8.N.H.PbT........btaEa1a1#8.N.C.F........aFab#2.D#2...........2a2a.#7b6b6..ac#4.qbY........aEaiaj#2..bqbqaFbvah#4.D#4............bt#ZaB#Z#O#1#3.D.B.DbYaBaB#YaFaHaDaa#2.Q#5aFaHaIaIaI#X.t#Q#4....aGaLaIaHaGaB#Y#P......#XaGaLaL#Z#R#O#Y...........#.............#.......#.....#.......#.....#...#....bRbSbR..............b6bR................................................................................ao#T#TaM...............#................................#V", +".ua1a3a1aN.N.P.vala4#8.H.CalaR.Obobyb3a2a.a#.C.Nae#J.1.C.I.N.FaR..........aBabaN#8.O.H.ubZ......bzb3ae.Q.sam....bS.2aSboboa0#7.B..aI#P.saDakbna2a.aHbzaEafa#.QagagaDahab#2.raCaCaa#P....aIaC#R.q#O#1......#3......#R.radadab#4.r.Qahaaac#Y#Z#Y#O#Qb5#2....azazaIaI#X#K#Y.q#R......aIaI#Z#R#O.q.......................#...#.................................#......bRbSbT.......#..bR....................................................................................#V......................................................", +".IaNaQaN#8.N.v.Oa4#8.N.u.Ha1aQ.Nbnbwboa2#7.E.B#6#KaC...O..................#P.q#2.H.u.HaS........aDah#2.sam...2.2bRb1bobybrag#7.C.E..#Y#O#Pbpbza2afbtb3a2aj#3.Q#5a#adab#2.saHaHaDaa#P#P..ayaq#MbY.....................#..#4#2.D.rbw.Q#5.r.q#O#Q#Ran.rab....aGbuaHar#Q#O#R.q#4........#Z#R#O.qaJ..........................avaq.............................#.......#.....2bSbS.2..b6#E............................................................................................................................................", +"b5.O#8.N.H.H.HbTa1.N.F.FbTbs#8.Ca0a0a.a..E.v.Fa2............a7a3a0#7........bqboaQ#7.P............#4.Dbw.3.2bRb9b6b6bobsbqa..E.C#9....#O..brb5a2bzbvbuai#5#2.Q#5..#7#P.saCbtbvaCaa#P#PayaLaq#M....aw#W....................#2.Dab#P.rah..aHaaab#4.r#4aD....aGaKaL#0#S#K#Z.qaD..........#R#PaD..........................auawap#L.........#auauap#L..........................#fbTbSbS..............................................auatao..........................................................................................", +"aR..#P.F.P.Obaa4.L.C.F.1a7aO.H.Cb##9#7#6.B.FbTa3............bybsaN#7.C....a7a0#8.P.N.v............bS.2.2bSb9b6......a2a2a.#7.F.Cam......aibpbna2aibnaiaf#3.Q.saf........aCaFaDaa#4.r#4aqaq#U#K..aGaz#V#K..................abae#4.sam....aFaD.Q.r#5aJ......aIaIar#Q.t#N.sam............azar#U........................awaAaAaq#L#U......avaKaxao#L..............................bSbR............................................avaKavao#L........................................................................................", +"................aIaNal#X.O.P.Ial....#3.B.Cama2............a7bsa7.O.Ca3a0bqbra2#8.C.C.C.........2.2babSbSb6............a.#7.E.CbS..........agag#9ajafab#5.D.B#6ai..........adac#4.r#2ae..#M.taL..axaq#M#L....................#P.s#5.#aFaDaa.r.r#4.#........#Y#Z#X#N#ObYaa............ayaLar#U#K................awaq....axap#T#Jaq......avaxap#V#Jap.............................2..............................................auaAav#V#L........................................................................................", +"................aAbuas#Q#Q#W..arboboa2#9.E.E................aQaN.Nbqa3a3b3b3a0#8.C.N.N..b6.3.2baa0a#b6.....#azar#N.......E.Ea4............#9#7.E.D#3#3.D.E.Ebw............#4#P.r#Pam...#aEad....#T#M#U.#aGaBac#O.................#aFbyaDaa.raa..............#O#O.taC#1..............azaGaq#M#S..............awaKaq#L..#W#W#J#W........aoao#V#Las..............................bR..............................................atatao#L#T........................................................................................", +"..................ar#X.taB.#azasbybyag#9.E.E................#7.Pbob4bsa3bra3#7.N.v.Na9.2albSbqbra2a..C....aGaL#0#S#X.........................E.BalboaH.D#3af..................#4......btbpaj#2........aHaGaI#Z#P#P..............ayaHaFaD#4.raj......................................araq#W.tas..............axayaq#Jaq....................#Tavauat#T........................bRbS................................................#V#L#LaK........................................................................................", +"..................#X#S#Q..azaHbobsbsag#6.C.E......aEaf#3........a7brbra0a0a.al.C.Fa4bHbSb6b8bqb5a2a..C.E..arar#Q.t.#...................abzaiaf.E..aHbuac#R.r..........................aEah#5.rah......aGbuaB#Y#Q#O..............aCaCac#P.razar#0#Q..................................ayawaq#M................aqao#L#U........................auaxat#V#L.......................2.......................................................#..........................................................................................", +".B........a3a0#7..........arara0a2aga#.E.B#7.D.#bzaEaf#3.B......a1a0a..N#7#7.F.FbYbSb6b6..aHbobraN#7.B#7....#Q#SaJ....................bzbnaiaf#3.BaCaBak#P#P..........................aj#5.sam......aFaGaHac#1.q#R............aHaHaCac#R.qazaI#Z#O#X..............................awaGaA#W#J#W..................#U........................avaxayap#T#Lat#L................bSbT..................................................................................................................................................", +".B#7....bqbra0#7.C..........#S#Ka.#9.E.B#7b4.Dbtb5bnaf#2.QaFaFaD#8#8#7.C.C.N.F#8.Nb6......aHa0a.#7.E.Fa0............................bzbyb3ai#9#2.B#4aa#P.raF......aCaIac.r......aFaFaDab#2aj......aHbtaB#Z#Y#O#PaeaCaCac....aGbubvaDaa#P.qbtaGaCaB#X#O..............................axaq#T#J................................................avap#V#Jaqat#J.................2b8..................................................................................................................................................", +".C#7aya3bsbsa..N.Ca.....aHaCac.r..#3.valbw#2.QaJbpbn#5.Q.Qaibvad#4.C.P.Ha1.N.C.Ba0........aC#7a#.E.Cam.Eag..........................aibpa2af#6.B.Daf..#P.#.......#bYaG#Y#O......btbtaDab#2.Q......aFbu#R#R#O#OambtaHaDac#P..aCaHaHaC#P.r.raBaLaKaB#Y#O..............................#U#L#Man..........avaq..................................#V#T#L#Wat#V#L..............b6bR....................................................................................................................................................", +".u.Ha4aQ.Na0#8.C.Ca3aEbzaf.Eaa#P#M..#5ab#2.samagafa##3.s#3aFaEab#P.Qaba.#7.C.vbaa3..........#P.C.Ca0.C.F............................agaiafa#.E.B#6.#............aCaHac#R.qac..aFbvbvahaa.r.Qah....aFaEab#4#R#2#KaHaLaFak#O#Padacad#1#P.q#PaGaLaL#Z#R#O#Y...............................#............awaAaq#L....................awawaq#W#M......ao...##Lax..............bTbS....................................................................................................................................................", +".v.NaQ.P#8.H.P.CbYbpbnaEaf#3.Q.rae.....D.ranah..#6.D.E#3aEahae#4.sam#Lah.F.Fbaa2am............#7#7.E.Eb5..............................#9a##2.B#6b5..............#Zac#R.q#4.q..aDbzaD#4#4.r#2......abab#4.r.Db4#SadaCaa#P.qah..aaaa#P.r#2bwaIaI#Z#R#O.qaB............................................awax#V#J....................ayaKaq#V#J...................#auap#L.....2......................................................................................................................................................", +".u.Na..H.C.F.Pa1arbtb3ai#9.D.D.raCay#V#M........bobs#5#9.EbS#2.Q#2aD#V..#5.D#2am..................#7.#...................................D.B#9bn...................q#Oaa#Q#O..adabab#4#P.Q#6aCab.r..#2.r.sbw.taCac#R#P#Pam..aGbt#P.raaan....#Z#Y#O.qaM........axaq#M................................ao#V#JaM....................awaxaq#K#J..................ayaxap#T#TbXbR......................................................................................................................................................", +".CaS.D.E.C.C.Paq#Ubzbnaf#5.B.DaiaMaz#M#M......b1brbsaga#.C#9......#U.........#................................................aGaI#Y.q........adak................aCaBaa.q#1....#4#2#2.r#6aFaDak.r#4....#N#KaGaHaBak.q......aCaHaLaa#P.q......#P.qae........ayawaq#V#L........awawaq#L................atao.#..................awaMaxao#N#W.aavavap#L.#ataoauaAaAao#T#TaSb6......................................................................................................................................................", +"babZ.E.E.FaQalac#Oafafa#.D.Dam.#aq#W.t#0..bS.2.2a3am#9.F.Ca0..............................................bnbzaNa#.E......bzbzaf#3#Y.q....aHaCaCaa.r.#bzaFaj#2..aGaGaCac#P#R......#2.ragaDaFac#4#Paa....aFadaLbuad#R.r......adadac#1.s#2....................ayaKaq#T#L........aAaAaq#L#W............auauat#V#L..............awawaAax#W#J#WauaMaxaoauauauap#Tatap#V#Jaq.3........................................................................................................................................................", +"bs#3.E.Ea.albYac#P#R#6.D.Eal....#M#Jas.3.2#fbSb6#7a#.P.CbTaf........................................aHaCaBbybvag#3.B......bvbpaf#5.B#O....aHbvaBak#O#Rb3aJaj#2.DaGb3aB#Y#P#P......aCaCac#Pad#4.r#2ah..aHbpadaCaB#1#P.ravap....aa#R#P#PaF....................axaq#V#Jauavap#LawaGaA#W#L#T............ayaKap#T#L............awaMaxaq#W#M#Jaqavaxat#VauaMaxao#T#T#V#L#VbRbS........................................................................................................................................................", +"#3.E.B#7b7bsaL#Y.q#R..#3an......bS.3.2bRb1b6b6b6ai.B.Cal.D..........................................buaCbzbtbsaFaDab#2..bzbvbpaEaDaj#5..aCaLaLac#R.raabtbp#5.D.DaHaHaC#R.q#1.saHaGaGaCad#P.q.s#PaM....aLaHaaaaak#P#PbYaKat#L....#R#4........................aq#V#MavaKauap#L#Vaqaq#U#Jas..........ataxav#V#L#T............away#U#W#T#JaM..apap#V#Lauaxat#V#L#V..#Wb8.3..........................................................................................................................................................", +".D.B#3am..aCacbna2aga##3..b6bS.2.2bRb6b6b8........#5.E.BbY..........................aGaI#Z#O......aBaHaCbzaiaHaFaDaj#2.sahaibzbzaEah#5.D#5adac#4.q#Paeah#5#2.QafaB#Z#1#O.qan.raHaHbvaDaa#P.r#5.r#4....adaa#P#P#P.racavaw#V#J..................................ayaqavawav#V#L#W#W#U.t#0............axaqaq#M#LbY............axaq#V#L#Maqar....#T#J#Latapao#T#Lax....b6.2..........................................................................................................................................................", +".B.Eb#a0..#Ybpbpa2aga#.D.D.2bRbRb6b6b6...............E#6..............bna2aga#.E....buaI#X.q......aIaIbpbrahbtb3ahab#2.r..ajbtb4aJaj#3.Q.Eak#R.r#Pbv..#5#2#2am..aDab#4#OaJ.r#5aIaCaFaDaa.r.q.D#2aF......#2.saM#V....aoao#Las................................ayaGaratapao#L#Jax..................ayaKazaq#MaA........at#V....#T#M#JaA#Xavap..........#V#L#Las.....c.2b6.........................................................................................................................................................." +}; diff --git a/trunk/visit_plugins/operators/RandomSample/.depend b/trunk/visit_plugins/operators/RandomSample/.depend new file mode 100644 index 0000000..dbdb973 --- /dev/null +++ b/trunk/visit_plugins/operators/RandomSample/.depend @@ -0,0 +1,1519 @@ +H5PartRandomSamplePluginInfo.o: H5PartRandomSamplePluginInfo.C \ + H5PartRandomSamplePluginInfo.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/OperatorPluginInfo.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/plugin_exports.h \ + /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ + /usr/include/gnu/stubs.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stddef.h \ + /usr/include/bits/types.h /usr/include/bits/wordsize.h \ + /usr/include/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \ + /usr/include/gconv.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stdarg.h \ + /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/operator_plugin_exports.h \ + H5PartRandomSampleAttributes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/AttributeSubject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/state_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/AttributeGroup.h \ + /usr/include/c++/4.0.2/vector /usr/include/c++/4.0.2/bits/functexcept.h \ + /usr/include/c++/4.0.2/exception_defines.h \ + /usr/include/c++/4.0.2/bits/stl_algobase.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++config.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/os_defines.h \ + /usr/include/c++/4.0.2/cstring /usr/include/c++/4.0.2/cstddef \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/c++/4.0.2/climits \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/limits.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/c++/4.0.2/cstdlib /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \ + /usr/include/bits/select.h /usr/include/bits/sigset.h \ + /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ + /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ + /usr/include/alloca.h /usr/include/c++/4.0.2/iosfwd \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++locale.h \ + /usr/include/c++/4.0.2/cstdio /usr/include/c++/4.0.2/clocale \ + /usr/include/locale.h /usr/include/bits/locale.h \ + /usr/include/langinfo.h /usr/include/nl_types.h /usr/include/iconv.h \ + /usr/include/libintl.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++io.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/signal.h \ + /usr/include/bits/initspin.h /usr/include/bits/sigthread.h \ + /usr/include/unistd.h /usr/include/bits/posix_opt.h \ + /usr/include/bits/environments.h /usr/include/bits/confname.h \ + /usr/include/getopt.h /usr/include/c++/4.0.2/cctype \ + /usr/include/ctype.h /usr/include/c++/4.0.2/bits/stringfwd.h \ + /usr/include/c++/4.0.2/bits/postypes.h /usr/include/c++/4.0.2/cwchar \ + /usr/include/c++/4.0.2/ctime /usr/include/stdint.h \ + /usr/include/c++/4.0.2/bits/stl_pair.h \ + /usr/include/c++/4.0.2/bits/cpp_type_traits.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.0.2/bits/concept_check.h \ + /usr/include/c++/4.0.2/bits/stl_iterator.h \ + /usr/include/c++/4.0.2/debug/debug.h /usr/include/c++/4.0.2/cassert \ + /usr/include/assert.h /usr/include/c++/4.0.2/bits/allocator.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++allocator.h \ + /usr/include/c++/4.0.2/ext/new_allocator.h /usr/include/c++/4.0.2/new \ + /usr/include/c++/4.0.2/exception \ + /usr/include/c++/4.0.2/bits/stl_construct.h \ + /usr/include/c++/4.0.2/bits/stl_uninitialized.h \ + /usr/include/c++/4.0.2/bits/stl_vector.h \ + /usr/include/c++/4.0.2/bits/stl_bvector.h \ + /usr/include/c++/4.0.2/bits/vector.tcc /usr/include/c++/4.0.2/string \ + /usr/include/c++/4.0.2/bits/char_traits.h /usr/include/c++/4.0.2/memory \ + /usr/include/c++/4.0.2/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.0.2/limits \ + /usr/include/c++/4.0.2/bits/stl_function.h \ + /usr/include/c++/4.0.2/bits/basic_string.h \ + /usr/include/c++/4.0.2/bits/atomicity.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/atomic_word.h \ + /usr/include/c++/4.0.2/algorithm /usr/include/c++/4.0.2/bits/stl_algo.h \ + /usr/include/c++/4.0.2/bits/stl_heap.h \ + /usr/include/c++/4.0.2/bits/stl_tempbuf.h \ + /usr/include/c++/4.0.2/bits/basic_string.tcc \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/visitstream.h \ + /usr/include/c++/4.0.2/iostream /usr/include/c++/4.0.2/ostream \ + /usr/include/c++/4.0.2/ios /usr/include/c++/4.0.2/bits/localefwd.h \ + /usr/include/c++/4.0.2/bits/ios_base.h \ + /usr/include/c++/4.0.2/bits/locale_classes.h \ + /usr/include/c++/4.0.2/streambuf \ + /usr/include/c++/4.0.2/bits/streambuf.tcc \ + /usr/include/c++/4.0.2/bits/basic_ios.h \ + /usr/include/c++/4.0.2/bits/streambuf_iterator.h \ + /usr/include/c++/4.0.2/bits/locale_facets.h \ + /usr/include/c++/4.0.2/cwctype /usr/include/wctype.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_base.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_inline.h \ + /usr/include/c++/4.0.2/bits/codecvt.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/time_members.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/messages_members.h \ + /usr/include/c++/4.0.2/bits/basic_ios.tcc \ + /usr/include/c++/4.0.2/bits/ostream.tcc /usr/include/c++/4.0.2/locale \ + /usr/include/c++/4.0.2/bits/locale_facets.tcc \ + /usr/include/c++/4.0.2/typeinfo /usr/include/c++/4.0.2/istream \ + /usr/include/c++/4.0.2/bits/istream.tcc /usr/include/c++/4.0.2/fstream \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/basic_file.h \ + /usr/include/c++/4.0.2/bits/fstream.tcc \ + /usr/include/c++/4.0.2/backward/strstream \ + /usr/include/c++/4.0.2/backward/backward_warning.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/VisItException.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/misc_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/vectortypes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/Subject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit-config.h +H5PartRandomSampleCommonPluginInfo.o: \ + H5PartRandomSampleCommonPluginInfo.C H5PartRandomSamplePluginInfo.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/OperatorPluginInfo.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/plugin_exports.h \ + /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ + /usr/include/gnu/stubs.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stddef.h \ + /usr/include/bits/types.h /usr/include/bits/wordsize.h \ + /usr/include/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \ + /usr/include/gconv.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stdarg.h \ + /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/operator_plugin_exports.h \ + H5PartRandomSampleAttributes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/AttributeSubject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/state_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/AttributeGroup.h \ + /usr/include/c++/4.0.2/vector /usr/include/c++/4.0.2/bits/functexcept.h \ + /usr/include/c++/4.0.2/exception_defines.h \ + /usr/include/c++/4.0.2/bits/stl_algobase.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++config.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/os_defines.h \ + /usr/include/c++/4.0.2/cstring /usr/include/c++/4.0.2/cstddef \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/c++/4.0.2/climits \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/limits.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/c++/4.0.2/cstdlib /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \ + /usr/include/bits/select.h /usr/include/bits/sigset.h \ + /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ + /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ + /usr/include/alloca.h /usr/include/c++/4.0.2/iosfwd \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++locale.h \ + /usr/include/c++/4.0.2/cstdio /usr/include/c++/4.0.2/clocale \ + /usr/include/locale.h /usr/include/bits/locale.h \ + /usr/include/langinfo.h /usr/include/nl_types.h /usr/include/iconv.h \ + /usr/include/libintl.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++io.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/signal.h \ + /usr/include/bits/initspin.h /usr/include/bits/sigthread.h \ + /usr/include/unistd.h /usr/include/bits/posix_opt.h \ + /usr/include/bits/environments.h /usr/include/bits/confname.h \ + /usr/include/getopt.h /usr/include/c++/4.0.2/cctype \ + /usr/include/ctype.h /usr/include/c++/4.0.2/bits/stringfwd.h \ + /usr/include/c++/4.0.2/bits/postypes.h /usr/include/c++/4.0.2/cwchar \ + /usr/include/c++/4.0.2/ctime /usr/include/stdint.h \ + /usr/include/c++/4.0.2/bits/stl_pair.h \ + /usr/include/c++/4.0.2/bits/cpp_type_traits.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.0.2/bits/concept_check.h \ + /usr/include/c++/4.0.2/bits/stl_iterator.h \ + /usr/include/c++/4.0.2/debug/debug.h /usr/include/c++/4.0.2/cassert \ + /usr/include/assert.h /usr/include/c++/4.0.2/bits/allocator.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++allocator.h \ + /usr/include/c++/4.0.2/ext/new_allocator.h /usr/include/c++/4.0.2/new \ + /usr/include/c++/4.0.2/exception \ + /usr/include/c++/4.0.2/bits/stl_construct.h \ + /usr/include/c++/4.0.2/bits/stl_uninitialized.h \ + /usr/include/c++/4.0.2/bits/stl_vector.h \ + /usr/include/c++/4.0.2/bits/stl_bvector.h \ + /usr/include/c++/4.0.2/bits/vector.tcc /usr/include/c++/4.0.2/string \ + /usr/include/c++/4.0.2/bits/char_traits.h /usr/include/c++/4.0.2/memory \ + /usr/include/c++/4.0.2/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.0.2/limits \ + /usr/include/c++/4.0.2/bits/stl_function.h \ + /usr/include/c++/4.0.2/bits/basic_string.h \ + /usr/include/c++/4.0.2/bits/atomicity.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/atomic_word.h \ + /usr/include/c++/4.0.2/algorithm /usr/include/c++/4.0.2/bits/stl_algo.h \ + /usr/include/c++/4.0.2/bits/stl_heap.h \ + /usr/include/c++/4.0.2/bits/stl_tempbuf.h \ + /usr/include/c++/4.0.2/bits/basic_string.tcc \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/visitstream.h \ + /usr/include/c++/4.0.2/iostream /usr/include/c++/4.0.2/ostream \ + /usr/include/c++/4.0.2/ios /usr/include/c++/4.0.2/bits/localefwd.h \ + /usr/include/c++/4.0.2/bits/ios_base.h \ + /usr/include/c++/4.0.2/bits/locale_classes.h \ + /usr/include/c++/4.0.2/streambuf \ + /usr/include/c++/4.0.2/bits/streambuf.tcc \ + /usr/include/c++/4.0.2/bits/basic_ios.h \ + /usr/include/c++/4.0.2/bits/streambuf_iterator.h \ + /usr/include/c++/4.0.2/bits/locale_facets.h \ + /usr/include/c++/4.0.2/cwctype /usr/include/wctype.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_base.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_inline.h \ + /usr/include/c++/4.0.2/bits/codecvt.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/time_members.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/messages_members.h \ + /usr/include/c++/4.0.2/bits/basic_ios.tcc \ + /usr/include/c++/4.0.2/bits/ostream.tcc /usr/include/c++/4.0.2/locale \ + /usr/include/c++/4.0.2/bits/locale_facets.tcc \ + /usr/include/c++/4.0.2/typeinfo /usr/include/c++/4.0.2/istream \ + /usr/include/c++/4.0.2/bits/istream.tcc /usr/include/c++/4.0.2/fstream \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/basic_file.h \ + /usr/include/c++/4.0.2/bits/fstream.tcc \ + /usr/include/c++/4.0.2/backward/strstream \ + /usr/include/c++/4.0.2/backward/backward_warning.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/VisItException.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/misc_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/vectortypes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/Subject.h +H5PartRandomSampleAttributes.o: H5PartRandomSampleAttributes.C \ + H5PartRandomSampleAttributes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/AttributeSubject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/state_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/AttributeGroup.h \ + /usr/include/c++/4.0.2/vector /usr/include/c++/4.0.2/bits/functexcept.h \ + /usr/include/c++/4.0.2/exception_defines.h \ + /usr/include/c++/4.0.2/bits/stl_algobase.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++config.h \ + /usr/include/bits/wordsize.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/os_defines.h \ + /usr/include/features.h /usr/include/sys/cdefs.h \ + /usr/include/gnu/stubs.h /usr/include/c++/4.0.2/cstring \ + /usr/include/c++/4.0.2/cstddef \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stddef.h \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/c++/4.0.2/climits \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/limits.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h /usr/include/c++/4.0.2/cstdlib \ + /usr/include/stdlib.h /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h \ + /usr/include/bits/select.h /usr/include/bits/sigset.h \ + /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ + /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ + /usr/include/alloca.h /usr/include/c++/4.0.2/iosfwd \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++locale.h \ + /usr/include/c++/4.0.2/cstdio /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \ + /usr/include/gconv.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stdarg.h \ + /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ + /usr/include/c++/4.0.2/clocale /usr/include/locale.h \ + /usr/include/bits/locale.h /usr/include/langinfo.h \ + /usr/include/nl_types.h /usr/include/iconv.h /usr/include/libintl.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++io.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/signal.h \ + /usr/include/bits/initspin.h /usr/include/bits/sigthread.h \ + /usr/include/unistd.h /usr/include/bits/posix_opt.h \ + /usr/include/bits/environments.h /usr/include/bits/confname.h \ + /usr/include/getopt.h /usr/include/c++/4.0.2/cctype \ + /usr/include/ctype.h /usr/include/c++/4.0.2/bits/stringfwd.h \ + /usr/include/c++/4.0.2/bits/postypes.h /usr/include/c++/4.0.2/cwchar \ + /usr/include/c++/4.0.2/ctime /usr/include/stdint.h \ + /usr/include/c++/4.0.2/bits/stl_pair.h \ + /usr/include/c++/4.0.2/bits/cpp_type_traits.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.0.2/bits/concept_check.h \ + /usr/include/c++/4.0.2/bits/stl_iterator.h \ + /usr/include/c++/4.0.2/debug/debug.h /usr/include/c++/4.0.2/cassert \ + /usr/include/assert.h /usr/include/c++/4.0.2/bits/allocator.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++allocator.h \ + /usr/include/c++/4.0.2/ext/new_allocator.h /usr/include/c++/4.0.2/new \ + /usr/include/c++/4.0.2/exception \ + /usr/include/c++/4.0.2/bits/stl_construct.h \ + /usr/include/c++/4.0.2/bits/stl_uninitialized.h \ + /usr/include/c++/4.0.2/bits/stl_vector.h \ + /usr/include/c++/4.0.2/bits/stl_bvector.h \ + /usr/include/c++/4.0.2/bits/vector.tcc /usr/include/c++/4.0.2/string \ + /usr/include/c++/4.0.2/bits/char_traits.h /usr/include/c++/4.0.2/memory \ + /usr/include/c++/4.0.2/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.0.2/limits \ + /usr/include/c++/4.0.2/bits/stl_function.h \ + /usr/include/c++/4.0.2/bits/basic_string.h \ + /usr/include/c++/4.0.2/bits/atomicity.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/atomic_word.h \ + /usr/include/c++/4.0.2/algorithm /usr/include/c++/4.0.2/bits/stl_algo.h \ + /usr/include/c++/4.0.2/bits/stl_heap.h \ + /usr/include/c++/4.0.2/bits/stl_tempbuf.h \ + /usr/include/c++/4.0.2/bits/basic_string.tcc \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/visitstream.h \ + /usr/include/c++/4.0.2/iostream /usr/include/c++/4.0.2/ostream \ + /usr/include/c++/4.0.2/ios /usr/include/c++/4.0.2/bits/localefwd.h \ + /usr/include/c++/4.0.2/bits/ios_base.h \ + /usr/include/c++/4.0.2/bits/locale_classes.h \ + /usr/include/c++/4.0.2/streambuf \ + /usr/include/c++/4.0.2/bits/streambuf.tcc \ + /usr/include/c++/4.0.2/bits/basic_ios.h \ + /usr/include/c++/4.0.2/bits/streambuf_iterator.h \ + /usr/include/c++/4.0.2/bits/locale_facets.h \ + /usr/include/c++/4.0.2/cwctype /usr/include/wctype.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_base.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_inline.h \ + /usr/include/c++/4.0.2/bits/codecvt.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/time_members.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/messages_members.h \ + /usr/include/c++/4.0.2/bits/basic_ios.tcc \ + /usr/include/c++/4.0.2/bits/ostream.tcc /usr/include/c++/4.0.2/locale \ + /usr/include/c++/4.0.2/bits/locale_facets.tcc \ + /usr/include/c++/4.0.2/typeinfo /usr/include/c++/4.0.2/istream \ + /usr/include/c++/4.0.2/bits/istream.tcc /usr/include/c++/4.0.2/fstream \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/basic_file.h \ + /usr/include/c++/4.0.2/bits/fstream.tcc \ + /usr/include/c++/4.0.2/backward/strstream \ + /usr/include/c++/4.0.2/backward/backward_warning.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/VisItException.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/misc_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/vectortypes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/Subject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/DataNode.h +H5PartRandomSampleGUIPluginInfo.o: H5PartRandomSampleGUIPluginInfo.C \ + H5PartRandomSamplePluginInfo.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/OperatorPluginInfo.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/plugin_exports.h \ + /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ + /usr/include/gnu/stubs.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stddef.h \ + /usr/include/bits/types.h /usr/include/bits/wordsize.h \ + /usr/include/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \ + /usr/include/gconv.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stdarg.h \ + /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/operator_plugin_exports.h \ + H5PartRandomSampleAttributes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/AttributeSubject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/state_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/AttributeGroup.h \ + /usr/include/c++/4.0.2/vector /usr/include/c++/4.0.2/bits/functexcept.h \ + /usr/include/c++/4.0.2/exception_defines.h \ + /usr/include/c++/4.0.2/bits/stl_algobase.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++config.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/os_defines.h \ + /usr/include/c++/4.0.2/cstring /usr/include/c++/4.0.2/cstddef \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/c++/4.0.2/climits \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/limits.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/c++/4.0.2/cstdlib /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \ + /usr/include/bits/select.h /usr/include/bits/sigset.h \ + /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ + /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ + /usr/include/alloca.h /usr/include/c++/4.0.2/iosfwd \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++locale.h \ + /usr/include/c++/4.0.2/cstdio /usr/include/c++/4.0.2/clocale \ + /usr/include/locale.h /usr/include/bits/locale.h \ + /usr/include/langinfo.h /usr/include/nl_types.h /usr/include/iconv.h \ + /usr/include/libintl.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++io.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/signal.h \ + /usr/include/bits/initspin.h /usr/include/bits/sigthread.h \ + /usr/include/unistd.h /usr/include/bits/posix_opt.h \ + /usr/include/bits/environments.h /usr/include/bits/confname.h \ + /usr/include/getopt.h /usr/include/c++/4.0.2/cctype \ + /usr/include/ctype.h /usr/include/c++/4.0.2/bits/stringfwd.h \ + /usr/include/c++/4.0.2/bits/postypes.h /usr/include/c++/4.0.2/cwchar \ + /usr/include/c++/4.0.2/ctime /usr/include/stdint.h \ + /usr/include/c++/4.0.2/bits/stl_pair.h \ + /usr/include/c++/4.0.2/bits/cpp_type_traits.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.0.2/bits/concept_check.h \ + /usr/include/c++/4.0.2/bits/stl_iterator.h \ + /usr/include/c++/4.0.2/debug/debug.h /usr/include/c++/4.0.2/cassert \ + /usr/include/assert.h /usr/include/c++/4.0.2/bits/allocator.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++allocator.h \ + /usr/include/c++/4.0.2/ext/new_allocator.h /usr/include/c++/4.0.2/new \ + /usr/include/c++/4.0.2/exception \ + /usr/include/c++/4.0.2/bits/stl_construct.h \ + /usr/include/c++/4.0.2/bits/stl_uninitialized.h \ + /usr/include/c++/4.0.2/bits/stl_vector.h \ + /usr/include/c++/4.0.2/bits/stl_bvector.h \ + /usr/include/c++/4.0.2/bits/vector.tcc /usr/include/c++/4.0.2/string \ + /usr/include/c++/4.0.2/bits/char_traits.h /usr/include/c++/4.0.2/memory \ + /usr/include/c++/4.0.2/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.0.2/limits \ + /usr/include/c++/4.0.2/bits/stl_function.h \ + /usr/include/c++/4.0.2/bits/basic_string.h \ + /usr/include/c++/4.0.2/bits/atomicity.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/atomic_word.h \ + /usr/include/c++/4.0.2/algorithm /usr/include/c++/4.0.2/bits/stl_algo.h \ + /usr/include/c++/4.0.2/bits/stl_heap.h \ + /usr/include/c++/4.0.2/bits/stl_tempbuf.h \ + /usr/include/c++/4.0.2/bits/basic_string.tcc \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/visitstream.h \ + /usr/include/c++/4.0.2/iostream /usr/include/c++/4.0.2/ostream \ + /usr/include/c++/4.0.2/ios /usr/include/c++/4.0.2/bits/localefwd.h \ + /usr/include/c++/4.0.2/bits/ios_base.h \ + /usr/include/c++/4.0.2/bits/locale_classes.h \ + /usr/include/c++/4.0.2/streambuf \ + /usr/include/c++/4.0.2/bits/streambuf.tcc \ + /usr/include/c++/4.0.2/bits/basic_ios.h \ + /usr/include/c++/4.0.2/bits/streambuf_iterator.h \ + /usr/include/c++/4.0.2/bits/locale_facets.h \ + /usr/include/c++/4.0.2/cwctype /usr/include/wctype.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_base.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_inline.h \ + /usr/include/c++/4.0.2/bits/codecvt.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/time_members.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/messages_members.h \ + /usr/include/c++/4.0.2/bits/basic_ios.tcc \ + /usr/include/c++/4.0.2/bits/ostream.tcc /usr/include/c++/4.0.2/locale \ + /usr/include/c++/4.0.2/bits/locale_facets.tcc \ + /usr/include/c++/4.0.2/typeinfo /usr/include/c++/4.0.2/istream \ + /usr/include/c++/4.0.2/bits/istream.tcc /usr/include/c++/4.0.2/fstream \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/basic_file.h \ + /usr/include/c++/4.0.2/bits/fstream.tcc \ + /usr/include/c++/4.0.2/backward/strstream \ + /usr/include/c++/4.0.2/backward/backward_warning.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/VisItException.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/misc_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/vectortypes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/Subject.h \ + QvisH5PartRandomSampleWindow.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/QvisOperatorWindow.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/gui_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/QvisPostableWindowObserver.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/QvisPostableWindowSimpleObserver.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/QvisPostableWindow.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qstring.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qcstring.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qmemarray.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qgarray.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qshared.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qglobal.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qconfig.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qmodules.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qfeatures.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qwinexport.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/QvisWindowBase.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qmainwindow.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qwidget.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qwindowdefs.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qobjectdefs.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qstring.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qnamespace.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qevent.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qregion.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qrect.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qsize.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qpoint.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qmime.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qmap.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qdatastream.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qiodevice.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qpair.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qvaluelist.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qtl.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qtextstream.h \ + /usr/include/c++/4.0.2/iterator \ + /usr/include/c++/4.0.2/bits/stream_iterator.h \ + /usr/include/c++/4.0.2/list /usr/include/c++/4.0.2/bits/stl_list.h \ + /usr/include/c++/4.0.2/bits/list.tcc /usr/include/c++/4.0.2/map \ + /usr/include/c++/4.0.2/bits/stl_tree.h \ + /usr/include/c++/4.0.2/bits/stl_map.h \ + /usr/include/c++/4.0.2/bits/stl_multimap.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qpaintdevice.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qpalette.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qcolor.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qstringlist.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qstrlist.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qptrlist.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qglist.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qptrcollection.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qbrush.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qfont.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qfontmetrics.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qfontinfo.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qsizepolicy.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qtoolbar.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qdockwindow.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qframe.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/GUIBase.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/SimpleObserver.h +QvisH5PartRandomSampleWindow.o: QvisH5PartRandomSampleWindow.C \ + QvisH5PartRandomSampleWindow.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/QvisOperatorWindow.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/gui_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/QvisPostableWindowObserver.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/QvisPostableWindowSimpleObserver.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/QvisPostableWindow.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qstring.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qcstring.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qmemarray.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qgarray.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qshared.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qglobal.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qconfig.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qmodules.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qfeatures.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qwinexport.h \ + /usr/include/string.h /usr/include/features.h /usr/include/sys/cdefs.h \ + /usr/include/gnu/stubs.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stddef.h \ + /usr/include/xlocale.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/limits.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h /usr/include/c++/4.0.2/string \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++config.h \ + /usr/include/bits/wordsize.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/os_defines.h \ + /usr/include/c++/4.0.2/bits/stringfwd.h \ + /usr/include/c++/4.0.2/bits/char_traits.h \ + /usr/include/c++/4.0.2/cstring /usr/include/c++/4.0.2/cstddef \ + /usr/include/c++/4.0.2/bits/stl_algobase.h \ + /usr/include/c++/4.0.2/climits /usr/include/c++/4.0.2/cstdlib \ + /usr/include/stdlib.h /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h \ + /usr/include/bits/select.h /usr/include/bits/sigset.h \ + /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ + /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ + /usr/include/alloca.h /usr/include/c++/4.0.2/iosfwd \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++locale.h \ + /usr/include/c++/4.0.2/cstdio /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \ + /usr/include/gconv.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stdarg.h \ + /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ + /usr/include/c++/4.0.2/clocale /usr/include/locale.h \ + /usr/include/bits/locale.h /usr/include/langinfo.h \ + /usr/include/nl_types.h /usr/include/iconv.h /usr/include/libintl.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++io.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/signal.h \ + /usr/include/bits/initspin.h /usr/include/bits/sigthread.h \ + /usr/include/unistd.h /usr/include/bits/posix_opt.h \ + /usr/include/bits/environments.h /usr/include/bits/confname.h \ + /usr/include/getopt.h /usr/include/c++/4.0.2/cctype \ + /usr/include/ctype.h /usr/include/c++/4.0.2/bits/postypes.h \ + /usr/include/c++/4.0.2/cwchar /usr/include/c++/4.0.2/ctime \ + /usr/include/stdint.h /usr/include/c++/4.0.2/bits/functexcept.h \ + /usr/include/c++/4.0.2/exception_defines.h \ + /usr/include/c++/4.0.2/bits/stl_pair.h \ + /usr/include/c++/4.0.2/bits/cpp_type_traits.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.0.2/bits/concept_check.h \ + /usr/include/c++/4.0.2/bits/stl_iterator.h \ + /usr/include/c++/4.0.2/debug/debug.h /usr/include/c++/4.0.2/cassert \ + /usr/include/assert.h /usr/include/c++/4.0.2/memory \ + /usr/include/c++/4.0.2/bits/allocator.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++allocator.h \ + /usr/include/c++/4.0.2/ext/new_allocator.h /usr/include/c++/4.0.2/new \ + /usr/include/c++/4.0.2/exception \ + /usr/include/c++/4.0.2/bits/stl_construct.h \ + /usr/include/c++/4.0.2/bits/stl_uninitialized.h \ + /usr/include/c++/4.0.2/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.0.2/limits \ + /usr/include/c++/4.0.2/bits/stl_function.h \ + /usr/include/c++/4.0.2/bits/basic_string.h \ + /usr/include/c++/4.0.2/bits/atomicity.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/atomic_word.h \ + /usr/include/c++/4.0.2/algorithm /usr/include/c++/4.0.2/bits/stl_algo.h \ + /usr/include/c++/4.0.2/bits/stl_heap.h \ + /usr/include/c++/4.0.2/bits/stl_tempbuf.h \ + /usr/include/c++/4.0.2/bits/basic_string.tcc \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/QvisWindowBase.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qmainwindow.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qwidget.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qwindowdefs.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qobjectdefs.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qstring.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qnamespace.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qevent.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qregion.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qrect.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qsize.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qpoint.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qmime.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qmap.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qdatastream.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qiodevice.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qpair.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qvaluelist.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qtl.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qtextstream.h \ + /usr/include/c++/4.0.2/iterator /usr/include/c++/4.0.2/ostream \ + /usr/include/c++/4.0.2/ios /usr/include/c++/4.0.2/bits/localefwd.h \ + /usr/include/c++/4.0.2/bits/ios_base.h \ + /usr/include/c++/4.0.2/bits/locale_classes.h \ + /usr/include/c++/4.0.2/streambuf \ + /usr/include/c++/4.0.2/bits/streambuf.tcc \ + /usr/include/c++/4.0.2/bits/basic_ios.h \ + /usr/include/c++/4.0.2/bits/streambuf_iterator.h \ + /usr/include/c++/4.0.2/bits/locale_facets.h \ + /usr/include/c++/4.0.2/cwctype /usr/include/wctype.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_base.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_inline.h \ + /usr/include/c++/4.0.2/bits/codecvt.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/time_members.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/messages_members.h \ + /usr/include/c++/4.0.2/bits/basic_ios.tcc \ + /usr/include/c++/4.0.2/bits/ostream.tcc /usr/include/c++/4.0.2/locale \ + /usr/include/c++/4.0.2/bits/locale_facets.tcc \ + /usr/include/c++/4.0.2/typeinfo /usr/include/c++/4.0.2/istream \ + /usr/include/c++/4.0.2/bits/istream.tcc \ + /usr/include/c++/4.0.2/bits/stream_iterator.h \ + /usr/include/c++/4.0.2/list /usr/include/c++/4.0.2/bits/stl_list.h \ + /usr/include/c++/4.0.2/bits/list.tcc /usr/include/c++/4.0.2/map \ + /usr/include/c++/4.0.2/bits/stl_tree.h \ + /usr/include/c++/4.0.2/bits/stl_map.h \ + /usr/include/c++/4.0.2/bits/stl_multimap.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qpaintdevice.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qpalette.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qcolor.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qstringlist.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qstrlist.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qptrlist.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qglist.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qptrcollection.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qbrush.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qfont.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qfontmetrics.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qfontinfo.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qsizepolicy.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qtoolbar.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qdockwindow.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qframe.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/GUIBase.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/vectortypes.h \ + /usr/include/c++/4.0.2/vector /usr/include/c++/4.0.2/bits/stl_vector.h \ + /usr/include/c++/4.0.2/bits/stl_bvector.h \ + /usr/include/c++/4.0.2/bits/vector.tcc \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/SimpleObserver.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/state_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/AttributeSubject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/AttributeGroup.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/visitstream.h \ + /usr/include/c++/4.0.2/iostream /usr/include/c++/4.0.2/fstream \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/basic_file.h \ + /usr/include/c++/4.0.2/bits/fstream.tcc \ + /usr/include/c++/4.0.2/backward/strstream \ + /usr/include/c++/4.0.2/backward/backward_warning.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/VisItException.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/misc_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/Subject.h \ + H5PartRandomSampleAttributes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/ViewerProxy.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/viewerproxy_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtSILRestriction.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/dbatts_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/ref_ptr.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtSIL.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtSILCollection.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtSILMatrix.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtTypes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtSILSet.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qcheckbox.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qbutton.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qkeysequence.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qlabel.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qlayout.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qlineedit.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qspinbox.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qrangecontrol.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qvbox.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qhbox.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qbuttongroup.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qgroupbox.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qradiobutton.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/QvisColorTableButton.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qpushbutton.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qiconset.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qpixmap.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/QvisOpacitySlider.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qwidget.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qrangecontrol.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/QvisColorButton.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qcolor.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qbutton.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/QvisLineStyleWidget.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qwidget.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/QvisLineWidthWidget.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/QvisVariableButton.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/qt/qobjectlist.h +H5PartRandomSampleViewerPluginInfo.o: \ + H5PartRandomSampleViewerPluginInfo.C H5PartRandomSamplePluginInfo.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/OperatorPluginInfo.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/plugin_exports.h \ + /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ + /usr/include/gnu/stubs.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stddef.h \ + /usr/include/bits/types.h /usr/include/bits/wordsize.h \ + /usr/include/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \ + /usr/include/gconv.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stdarg.h \ + /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/operator_plugin_exports.h \ + H5PartRandomSampleAttributes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/AttributeSubject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/state_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/AttributeGroup.h \ + /usr/include/c++/4.0.2/vector /usr/include/c++/4.0.2/bits/functexcept.h \ + /usr/include/c++/4.0.2/exception_defines.h \ + /usr/include/c++/4.0.2/bits/stl_algobase.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++config.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/os_defines.h \ + /usr/include/c++/4.0.2/cstring /usr/include/c++/4.0.2/cstddef \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/c++/4.0.2/climits \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/limits.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/c++/4.0.2/cstdlib /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \ + /usr/include/bits/select.h /usr/include/bits/sigset.h \ + /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ + /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ + /usr/include/alloca.h /usr/include/c++/4.0.2/iosfwd \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++locale.h \ + /usr/include/c++/4.0.2/cstdio /usr/include/c++/4.0.2/clocale \ + /usr/include/locale.h /usr/include/bits/locale.h \ + /usr/include/langinfo.h /usr/include/nl_types.h /usr/include/iconv.h \ + /usr/include/libintl.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++io.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/signal.h \ + /usr/include/bits/initspin.h /usr/include/bits/sigthread.h \ + /usr/include/unistd.h /usr/include/bits/posix_opt.h \ + /usr/include/bits/environments.h /usr/include/bits/confname.h \ + /usr/include/getopt.h /usr/include/c++/4.0.2/cctype \ + /usr/include/ctype.h /usr/include/c++/4.0.2/bits/stringfwd.h \ + /usr/include/c++/4.0.2/bits/postypes.h /usr/include/c++/4.0.2/cwchar \ + /usr/include/c++/4.0.2/ctime /usr/include/stdint.h \ + /usr/include/c++/4.0.2/bits/stl_pair.h \ + /usr/include/c++/4.0.2/bits/cpp_type_traits.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.0.2/bits/concept_check.h \ + /usr/include/c++/4.0.2/bits/stl_iterator.h \ + /usr/include/c++/4.0.2/debug/debug.h /usr/include/c++/4.0.2/cassert \ + /usr/include/assert.h /usr/include/c++/4.0.2/bits/allocator.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++allocator.h \ + /usr/include/c++/4.0.2/ext/new_allocator.h /usr/include/c++/4.0.2/new \ + /usr/include/c++/4.0.2/exception \ + /usr/include/c++/4.0.2/bits/stl_construct.h \ + /usr/include/c++/4.0.2/bits/stl_uninitialized.h \ + /usr/include/c++/4.0.2/bits/stl_vector.h \ + /usr/include/c++/4.0.2/bits/stl_bvector.h \ + /usr/include/c++/4.0.2/bits/vector.tcc /usr/include/c++/4.0.2/string \ + /usr/include/c++/4.0.2/bits/char_traits.h /usr/include/c++/4.0.2/memory \ + /usr/include/c++/4.0.2/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.0.2/limits \ + /usr/include/c++/4.0.2/bits/stl_function.h \ + /usr/include/c++/4.0.2/bits/basic_string.h \ + /usr/include/c++/4.0.2/bits/atomicity.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/atomic_word.h \ + /usr/include/c++/4.0.2/algorithm /usr/include/c++/4.0.2/bits/stl_algo.h \ + /usr/include/c++/4.0.2/bits/stl_heap.h \ + /usr/include/c++/4.0.2/bits/stl_tempbuf.h \ + /usr/include/c++/4.0.2/bits/basic_string.tcc \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/visitstream.h \ + /usr/include/c++/4.0.2/iostream /usr/include/c++/4.0.2/ostream \ + /usr/include/c++/4.0.2/ios /usr/include/c++/4.0.2/bits/localefwd.h \ + /usr/include/c++/4.0.2/bits/ios_base.h \ + /usr/include/c++/4.0.2/bits/locale_classes.h \ + /usr/include/c++/4.0.2/streambuf \ + /usr/include/c++/4.0.2/bits/streambuf.tcc \ + /usr/include/c++/4.0.2/bits/basic_ios.h \ + /usr/include/c++/4.0.2/bits/streambuf_iterator.h \ + /usr/include/c++/4.0.2/bits/locale_facets.h \ + /usr/include/c++/4.0.2/cwctype /usr/include/wctype.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_base.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_inline.h \ + /usr/include/c++/4.0.2/bits/codecvt.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/time_members.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/messages_members.h \ + /usr/include/c++/4.0.2/bits/basic_ios.tcc \ + /usr/include/c++/4.0.2/bits/ostream.tcc /usr/include/c++/4.0.2/locale \ + /usr/include/c++/4.0.2/bits/locale_facets.tcc \ + /usr/include/c++/4.0.2/typeinfo /usr/include/c++/4.0.2/istream \ + /usr/include/c++/4.0.2/bits/istream.tcc /usr/include/c++/4.0.2/fstream \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/basic_file.h \ + /usr/include/c++/4.0.2/bits/fstream.tcc \ + /usr/include/c++/4.0.2/backward/strstream \ + /usr/include/c++/4.0.2/backward/backward_warning.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/VisItException.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/misc_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/vectortypes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/Subject.h +H5PartRandomSampleEnginePluginInfo.o: \ + H5PartRandomSampleEnginePluginInfo.C H5PartRandomSamplePluginInfo.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/OperatorPluginInfo.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/plugin_exports.h \ + /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ + /usr/include/gnu/stubs.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stddef.h \ + /usr/include/bits/types.h /usr/include/bits/wordsize.h \ + /usr/include/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \ + /usr/include/gconv.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stdarg.h \ + /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/operator_plugin_exports.h \ + avtH5PartRandomSampleFilter.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtPluginStreamer.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/pipeline_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtStreamer.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDataTreeStreamer.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDatasetToDatasetFilter.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDatasetToDataObjectFilter.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtFilter.h \ + /usr/include/c++/4.0.2/vector /usr/include/c++/4.0.2/bits/functexcept.h \ + /usr/include/c++/4.0.2/exception_defines.h \ + /usr/include/c++/4.0.2/bits/stl_algobase.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++config.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/os_defines.h \ + /usr/include/c++/4.0.2/cstring /usr/include/c++/4.0.2/cstddef \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/c++/4.0.2/climits \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/limits.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/c++/4.0.2/cstdlib /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \ + /usr/include/bits/select.h /usr/include/bits/sigset.h \ + /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ + /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ + /usr/include/alloca.h /usr/include/c++/4.0.2/iosfwd \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++locale.h \ + /usr/include/c++/4.0.2/cstdio /usr/include/c++/4.0.2/clocale \ + /usr/include/locale.h /usr/include/bits/locale.h \ + /usr/include/langinfo.h /usr/include/nl_types.h /usr/include/iconv.h \ + /usr/include/libintl.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++io.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/signal.h \ + /usr/include/bits/initspin.h /usr/include/bits/sigthread.h \ + /usr/include/unistd.h /usr/include/bits/posix_opt.h \ + /usr/include/bits/environments.h /usr/include/bits/confname.h \ + /usr/include/getopt.h /usr/include/c++/4.0.2/cctype \ + /usr/include/ctype.h /usr/include/c++/4.0.2/bits/stringfwd.h \ + /usr/include/c++/4.0.2/bits/postypes.h /usr/include/c++/4.0.2/cwchar \ + /usr/include/c++/4.0.2/ctime /usr/include/stdint.h \ + /usr/include/c++/4.0.2/bits/stl_pair.h \ + /usr/include/c++/4.0.2/bits/cpp_type_traits.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.0.2/bits/concept_check.h \ + /usr/include/c++/4.0.2/bits/stl_iterator.h \ + /usr/include/c++/4.0.2/debug/debug.h /usr/include/c++/4.0.2/cassert \ + /usr/include/assert.h /usr/include/c++/4.0.2/bits/allocator.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++allocator.h \ + /usr/include/c++/4.0.2/ext/new_allocator.h /usr/include/c++/4.0.2/new \ + /usr/include/c++/4.0.2/exception \ + /usr/include/c++/4.0.2/bits/stl_construct.h \ + /usr/include/c++/4.0.2/bits/stl_uninitialized.h \ + /usr/include/c++/4.0.2/bits/stl_vector.h \ + /usr/include/c++/4.0.2/bits/stl_bvector.h \ + /usr/include/c++/4.0.2/bits/vector.tcc \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDataObjectSource.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDataObject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/ref_ptr.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/visitstream.h \ + /usr/include/c++/4.0.2/iostream /usr/include/c++/4.0.2/ostream \ + /usr/include/c++/4.0.2/ios /usr/include/c++/4.0.2/bits/char_traits.h \ + /usr/include/c++/4.0.2/bits/localefwd.h \ + /usr/include/c++/4.0.2/bits/ios_base.h \ + /usr/include/c++/4.0.2/bits/atomicity.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/atomic_word.h \ + /usr/include/c++/4.0.2/bits/locale_classes.h \ + /usr/include/c++/4.0.2/string /usr/include/c++/4.0.2/memory \ + /usr/include/c++/4.0.2/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.0.2/limits \ + /usr/include/c++/4.0.2/bits/stl_function.h \ + /usr/include/c++/4.0.2/bits/basic_string.h \ + /usr/include/c++/4.0.2/algorithm /usr/include/c++/4.0.2/bits/stl_algo.h \ + /usr/include/c++/4.0.2/bits/stl_heap.h \ + /usr/include/c++/4.0.2/bits/stl_tempbuf.h \ + /usr/include/c++/4.0.2/bits/basic_string.tcc \ + /usr/include/c++/4.0.2/streambuf \ + /usr/include/c++/4.0.2/bits/streambuf.tcc \ + /usr/include/c++/4.0.2/bits/basic_ios.h \ + /usr/include/c++/4.0.2/bits/streambuf_iterator.h \ + /usr/include/c++/4.0.2/bits/locale_facets.h \ + /usr/include/c++/4.0.2/cwctype /usr/include/wctype.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_base.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_inline.h \ + /usr/include/c++/4.0.2/bits/codecvt.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/time_members.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/messages_members.h \ + /usr/include/c++/4.0.2/bits/basic_ios.tcc \ + /usr/include/c++/4.0.2/bits/ostream.tcc /usr/include/c++/4.0.2/locale \ + /usr/include/c++/4.0.2/bits/locale_facets.tcc \ + /usr/include/c++/4.0.2/typeinfo /usr/include/c++/4.0.2/istream \ + /usr/include/c++/4.0.2/bits/istream.tcc /usr/include/c++/4.0.2/fstream \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/basic_file.h \ + /usr/include/c++/4.0.2/bits/fstream.tcc \ + /usr/include/c++/4.0.2/backward/strstream \ + /usr/include/c++/4.0.2/backward/backward_warning.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDataObjectInformation.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDataAttributes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/VisWindowTypes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtVector.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/math_exports.h \ + /usr/include/math.h /usr/include/bits/huge_val.h \ + /usr/include/bits/huge_valf.h /usr/include/bits/huge_vall.h \ + /usr/include/bits/inf.h /usr/include/bits/nan.h \ + /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h \ + /usr/include/bits/mathinline.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/viswindow_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtTypes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/dbatts_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtMatrix.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDataValidity.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtPipelineSpecification.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDataSpecification.h \ + /usr/include/c++/4.0.2/map /usr/include/c++/4.0.2/bits/stl_tree.h \ + /usr/include/c++/4.0.2/bits/stl_map.h \ + /usr/include/c++/4.0.2/bits/stl_multimap.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/array_ref_ptr.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtSILRestriction.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtSIL.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtSILCollection.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtSILMatrix.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtSILSet.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtGhostData.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDataSelection.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/ImproperUseException.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtexception_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/PipelineException.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/VisItException.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/misc_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDataObjectSink.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDatasetSink.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDataset.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtCommonDataFunctions.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDataRepresentation.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDataTree.h \ + /usr/include/c++/4.0.2/set /usr/include/c++/4.0.2/bits/stl_set.h \ + /usr/include/c++/4.0.2/bits/stl_multiset.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDataObjectToDatasetFilter.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDatasetSource.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtPluginFilter.h \ + H5PartRandomSampleAttributes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/AttributeSubject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/state_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/AttributeGroup.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/vectortypes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/Subject.h +H5PartRandomSampleScriptingPluginInfo.o: \ + H5PartRandomSampleScriptingPluginInfo.C H5PartRandomSamplePluginInfo.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/OperatorPluginInfo.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/plugin_exports.h \ + /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \ + /usr/include/gnu/stubs.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stddef.h \ + /usr/include/bits/types.h /usr/include/bits/wordsize.h \ + /usr/include/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \ + /usr/include/gconv.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stdarg.h \ + /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/operator_plugin_exports.h \ + PyH5PartRandomSampleAttributes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/Python.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/patchlevel.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/config.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/limits.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/string.h /usr/include/xlocale.h /usr/include/errno.h \ + /usr/include/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/asm/errno.h /usr/include/asm-x86_64/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/stdlib.h /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/sys/types.h /usr/include/time.h \ + /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/bits/sched.h /usr/include/alloca.h /usr/include/assert.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/pyport.h \ + /usr/include/math.h /usr/include/bits/huge_val.h \ + /usr/include/bits/huge_valf.h /usr/include/bits/huge_vall.h \ + /usr/include/bits/inf.h /usr/include/bits/nan.h \ + /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h \ + /usr/include/bits/mathinline.h /usr/include/sys/time.h \ + /usr/include/sys/stat.h /usr/include/bits/stat.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/pymem.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/object.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/objimpl.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/pydebug.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/unicodeobject.h \ + /usr/include/ctype.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/intobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/longobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/floatobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/complexobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/rangeobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/stringobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/bufferobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/tupleobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/listobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/dictobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/methodobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/moduleobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/funcobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/classobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/fileobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/cobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/traceback.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/sliceobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/cellobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/codecs.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/pyerrors.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/pystate.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/modsupport.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/ceval.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/pythonrun.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/sysmodule.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/intrcheck.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/import.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/abstract.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/pyfpe.h \ + H5PartRandomSampleAttributes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/AttributeSubject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/state_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/AttributeGroup.h \ + /usr/include/c++/4.0.2/vector /usr/include/c++/4.0.2/bits/functexcept.h \ + /usr/include/c++/4.0.2/exception_defines.h \ + /usr/include/c++/4.0.2/bits/stl_algobase.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++config.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/os_defines.h \ + /usr/include/c++/4.0.2/cstring /usr/include/c++/4.0.2/cstddef \ + /usr/include/c++/4.0.2/climits /usr/include/c++/4.0.2/cstdlib \ + /usr/include/c++/4.0.2/iosfwd \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++locale.h \ + /usr/include/c++/4.0.2/cstdio /usr/include/c++/4.0.2/clocale \ + /usr/include/locale.h /usr/include/bits/locale.h \ + /usr/include/langinfo.h /usr/include/nl_types.h /usr/include/iconv.h \ + /usr/include/libintl.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++io.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/signal.h \ + /usr/include/bits/initspin.h /usr/include/bits/sigthread.h \ + /usr/include/unistd.h /usr/include/bits/posix_opt.h \ + /usr/include/bits/environments.h /usr/include/bits/confname.h \ + /usr/include/getopt.h /usr/include/c++/4.0.2/cctype \ + /usr/include/ctype.h /usr/include/c++/4.0.2/bits/stringfwd.h \ + /usr/include/c++/4.0.2/bits/postypes.h /usr/include/c++/4.0.2/cwchar \ + /usr/include/c++/4.0.2/ctime /usr/include/stdint.h \ + /usr/include/c++/4.0.2/bits/stl_pair.h \ + /usr/include/c++/4.0.2/bits/cpp_type_traits.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.0.2/bits/concept_check.h \ + /usr/include/c++/4.0.2/bits/stl_iterator.h \ + /usr/include/c++/4.0.2/debug/debug.h /usr/include/c++/4.0.2/cassert \ + /usr/include/c++/4.0.2/bits/allocator.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++allocator.h \ + /usr/include/c++/4.0.2/ext/new_allocator.h /usr/include/c++/4.0.2/new \ + /usr/include/c++/4.0.2/exception \ + /usr/include/c++/4.0.2/bits/stl_construct.h \ + /usr/include/c++/4.0.2/bits/stl_uninitialized.h \ + /usr/include/c++/4.0.2/bits/stl_vector.h \ + /usr/include/c++/4.0.2/bits/stl_bvector.h \ + /usr/include/c++/4.0.2/bits/vector.tcc /usr/include/c++/4.0.2/string \ + /usr/include/c++/4.0.2/bits/char_traits.h /usr/include/c++/4.0.2/memory \ + /usr/include/c++/4.0.2/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.0.2/limits \ + /usr/include/c++/4.0.2/bits/stl_function.h \ + /usr/include/c++/4.0.2/bits/basic_string.h \ + /usr/include/c++/4.0.2/bits/atomicity.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/atomic_word.h \ + /usr/include/c++/4.0.2/algorithm /usr/include/c++/4.0.2/bits/stl_algo.h \ + /usr/include/c++/4.0.2/bits/stl_heap.h \ + /usr/include/c++/4.0.2/bits/stl_tempbuf.h \ + /usr/include/c++/4.0.2/bits/basic_string.tcc \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/visitstream.h \ + /usr/include/c++/4.0.2/iostream /usr/include/c++/4.0.2/ostream \ + /usr/include/c++/4.0.2/ios /usr/include/c++/4.0.2/bits/localefwd.h \ + /usr/include/c++/4.0.2/bits/ios_base.h \ + /usr/include/c++/4.0.2/bits/locale_classes.h \ + /usr/include/c++/4.0.2/streambuf \ + /usr/include/c++/4.0.2/bits/streambuf.tcc \ + /usr/include/c++/4.0.2/bits/basic_ios.h \ + /usr/include/c++/4.0.2/bits/streambuf_iterator.h \ + /usr/include/c++/4.0.2/bits/locale_facets.h \ + /usr/include/c++/4.0.2/cwctype /usr/include/wctype.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_base.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_inline.h \ + /usr/include/c++/4.0.2/bits/codecvt.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/time_members.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/messages_members.h \ + /usr/include/c++/4.0.2/bits/basic_ios.tcc \ + /usr/include/c++/4.0.2/bits/ostream.tcc /usr/include/c++/4.0.2/locale \ + /usr/include/c++/4.0.2/bits/locale_facets.tcc \ + /usr/include/c++/4.0.2/typeinfo /usr/include/c++/4.0.2/istream \ + /usr/include/c++/4.0.2/bits/istream.tcc /usr/include/c++/4.0.2/fstream \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/basic_file.h \ + /usr/include/c++/4.0.2/bits/fstream.tcc \ + /usr/include/c++/4.0.2/backward/strstream \ + /usr/include/c++/4.0.2/backward/backward_warning.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/VisItException.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/misc_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/vectortypes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/Subject.h +PyH5PartRandomSampleAttributes.o: PyH5PartRandomSampleAttributes.C \ + PyH5PartRandomSampleAttributes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/Python.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/patchlevel.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/config.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/limits.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/syslimits.h \ + /usr/include/limits.h /usr/include/features.h /usr/include/sys/cdefs.h \ + /usr/include/gnu/stubs.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h /usr/include/stdio.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stddef.h \ + /usr/include/bits/types.h /usr/include/bits/wordsize.h \ + /usr/include/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \ + /usr/include/gconv.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stdarg.h \ + /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ + /usr/include/string.h /usr/include/xlocale.h /usr/include/errno.h \ + /usr/include/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/asm/errno.h /usr/include/asm-x86_64/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/stdlib.h /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/sys/types.h /usr/include/time.h \ + /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/bits/sched.h /usr/include/alloca.h /usr/include/assert.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/pyport.h \ + /usr/include/math.h /usr/include/bits/huge_val.h \ + /usr/include/bits/huge_valf.h /usr/include/bits/huge_vall.h \ + /usr/include/bits/inf.h /usr/include/bits/nan.h \ + /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h \ + /usr/include/bits/mathinline.h /usr/include/sys/time.h \ + /usr/include/sys/stat.h /usr/include/bits/stat.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/pymem.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/object.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/objimpl.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/pydebug.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/unicodeobject.h \ + /usr/include/ctype.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/intobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/longobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/floatobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/complexobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/rangeobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/stringobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/bufferobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/tupleobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/listobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/dictobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/methodobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/moduleobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/funcobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/classobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/fileobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/cobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/traceback.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/sliceobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/cellobject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/codecs.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/pyerrors.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/pystate.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/modsupport.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/ceval.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/pythonrun.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/sysmodule.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/intrcheck.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/import.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/abstract.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/python/pyfpe.h \ + H5PartRandomSampleAttributes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/AttributeSubject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/state_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/AttributeGroup.h \ + /usr/include/c++/4.0.2/vector /usr/include/c++/4.0.2/bits/functexcept.h \ + /usr/include/c++/4.0.2/exception_defines.h \ + /usr/include/c++/4.0.2/bits/stl_algobase.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++config.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/os_defines.h \ + /usr/include/c++/4.0.2/cstring /usr/include/c++/4.0.2/cstddef \ + /usr/include/c++/4.0.2/climits /usr/include/c++/4.0.2/cstdlib \ + /usr/include/c++/4.0.2/iosfwd \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++locale.h \ + /usr/include/c++/4.0.2/cstdio /usr/include/c++/4.0.2/clocale \ + /usr/include/locale.h /usr/include/bits/locale.h \ + /usr/include/langinfo.h /usr/include/nl_types.h /usr/include/iconv.h \ + /usr/include/libintl.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++io.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/signal.h \ + /usr/include/bits/initspin.h /usr/include/bits/sigthread.h \ + /usr/include/unistd.h /usr/include/bits/posix_opt.h \ + /usr/include/bits/environments.h /usr/include/bits/confname.h \ + /usr/include/getopt.h /usr/include/c++/4.0.2/cctype \ + /usr/include/ctype.h /usr/include/c++/4.0.2/bits/stringfwd.h \ + /usr/include/c++/4.0.2/bits/postypes.h /usr/include/c++/4.0.2/cwchar \ + /usr/include/c++/4.0.2/ctime /usr/include/stdint.h \ + /usr/include/c++/4.0.2/bits/stl_pair.h \ + /usr/include/c++/4.0.2/bits/cpp_type_traits.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.0.2/bits/concept_check.h \ + /usr/include/c++/4.0.2/bits/stl_iterator.h \ + /usr/include/c++/4.0.2/debug/debug.h /usr/include/c++/4.0.2/cassert \ + /usr/include/c++/4.0.2/bits/allocator.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++allocator.h \ + /usr/include/c++/4.0.2/ext/new_allocator.h /usr/include/c++/4.0.2/new \ + /usr/include/c++/4.0.2/exception \ + /usr/include/c++/4.0.2/bits/stl_construct.h \ + /usr/include/c++/4.0.2/bits/stl_uninitialized.h \ + /usr/include/c++/4.0.2/bits/stl_vector.h \ + /usr/include/c++/4.0.2/bits/stl_bvector.h \ + /usr/include/c++/4.0.2/bits/vector.tcc /usr/include/c++/4.0.2/string \ + /usr/include/c++/4.0.2/bits/char_traits.h /usr/include/c++/4.0.2/memory \ + /usr/include/c++/4.0.2/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.0.2/limits \ + /usr/include/c++/4.0.2/bits/stl_function.h \ + /usr/include/c++/4.0.2/bits/basic_string.h \ + /usr/include/c++/4.0.2/bits/atomicity.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/atomic_word.h \ + /usr/include/c++/4.0.2/algorithm /usr/include/c++/4.0.2/bits/stl_algo.h \ + /usr/include/c++/4.0.2/bits/stl_heap.h \ + /usr/include/c++/4.0.2/bits/stl_tempbuf.h \ + /usr/include/c++/4.0.2/bits/basic_string.tcc \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/visitstream.h \ + /usr/include/c++/4.0.2/iostream /usr/include/c++/4.0.2/ostream \ + /usr/include/c++/4.0.2/ios /usr/include/c++/4.0.2/bits/localefwd.h \ + /usr/include/c++/4.0.2/bits/ios_base.h \ + /usr/include/c++/4.0.2/bits/locale_classes.h \ + /usr/include/c++/4.0.2/streambuf \ + /usr/include/c++/4.0.2/bits/streambuf.tcc \ + /usr/include/c++/4.0.2/bits/basic_ios.h \ + /usr/include/c++/4.0.2/bits/streambuf_iterator.h \ + /usr/include/c++/4.0.2/bits/locale_facets.h \ + /usr/include/c++/4.0.2/cwctype /usr/include/wctype.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_base.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_inline.h \ + /usr/include/c++/4.0.2/bits/codecvt.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/time_members.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/messages_members.h \ + /usr/include/c++/4.0.2/bits/basic_ios.tcc \ + /usr/include/c++/4.0.2/bits/ostream.tcc /usr/include/c++/4.0.2/locale \ + /usr/include/c++/4.0.2/bits/locale_facets.tcc \ + /usr/include/c++/4.0.2/typeinfo /usr/include/c++/4.0.2/istream \ + /usr/include/c++/4.0.2/bits/istream.tcc /usr/include/c++/4.0.2/fstream \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/basic_file.h \ + /usr/include/c++/4.0.2/bits/fstream.tcc \ + /usr/include/c++/4.0.2/backward/strstream \ + /usr/include/c++/4.0.2/backward/backward_warning.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/VisItException.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/misc_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/vectortypes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/Subject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/ObserverToCallback.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/Observer.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/SimpleObserver.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/ColorAttribute.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/snprintf.h +avtH5PartRandomSampleFilter.o: avtH5PartRandomSampleFilter.C \ + avtH5PartRandomSampleFilter.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtPluginStreamer.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/pipeline_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtStreamer.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDataTreeStreamer.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDatasetToDatasetFilter.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDatasetToDataObjectFilter.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtFilter.h \ + /usr/include/c++/4.0.2/vector /usr/include/c++/4.0.2/bits/functexcept.h \ + /usr/include/c++/4.0.2/exception_defines.h \ + /usr/include/c++/4.0.2/bits/stl_algobase.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++config.h \ + /usr/include/bits/wordsize.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/os_defines.h \ + /usr/include/features.h /usr/include/sys/cdefs.h \ + /usr/include/gnu/stubs.h /usr/include/c++/4.0.2/cstring \ + /usr/include/c++/4.0.2/cstddef \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stddef.h \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/c++/4.0.2/climits \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/limits.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h /usr/include/c++/4.0.2/cstdlib \ + /usr/include/stdlib.h /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h \ + /usr/include/bits/select.h /usr/include/bits/sigset.h \ + /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ + /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ + /usr/include/alloca.h /usr/include/c++/4.0.2/iosfwd \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++locale.h \ + /usr/include/c++/4.0.2/cstdio /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \ + /usr/include/gconv.h \ + /usr/lib64/gcc/x86_64-suse-linux/4.0.2/include/stdarg.h \ + /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ + /usr/include/c++/4.0.2/clocale /usr/include/locale.h \ + /usr/include/bits/locale.h /usr/include/langinfo.h \ + /usr/include/nl_types.h /usr/include/iconv.h /usr/include/libintl.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++io.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/signal.h \ + /usr/include/bits/initspin.h /usr/include/bits/sigthread.h \ + /usr/include/unistd.h /usr/include/bits/posix_opt.h \ + /usr/include/bits/environments.h /usr/include/bits/confname.h \ + /usr/include/getopt.h /usr/include/c++/4.0.2/cctype \ + /usr/include/ctype.h /usr/include/c++/4.0.2/bits/stringfwd.h \ + /usr/include/c++/4.0.2/bits/postypes.h /usr/include/c++/4.0.2/cwchar \ + /usr/include/c++/4.0.2/ctime /usr/include/stdint.h \ + /usr/include/c++/4.0.2/bits/stl_pair.h \ + /usr/include/c++/4.0.2/bits/cpp_type_traits.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.0.2/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.0.2/bits/concept_check.h \ + /usr/include/c++/4.0.2/bits/stl_iterator.h \ + /usr/include/c++/4.0.2/debug/debug.h /usr/include/c++/4.0.2/cassert \ + /usr/include/assert.h /usr/include/c++/4.0.2/bits/allocator.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++allocator.h \ + /usr/include/c++/4.0.2/ext/new_allocator.h /usr/include/c++/4.0.2/new \ + /usr/include/c++/4.0.2/exception \ + /usr/include/c++/4.0.2/bits/stl_construct.h \ + /usr/include/c++/4.0.2/bits/stl_uninitialized.h \ + /usr/include/c++/4.0.2/bits/stl_vector.h \ + /usr/include/c++/4.0.2/bits/stl_bvector.h \ + /usr/include/c++/4.0.2/bits/vector.tcc \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDataObjectSource.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDataObject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/ref_ptr.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/visitstream.h \ + /usr/include/c++/4.0.2/iostream /usr/include/c++/4.0.2/ostream \ + /usr/include/c++/4.0.2/ios /usr/include/c++/4.0.2/bits/char_traits.h \ + /usr/include/c++/4.0.2/bits/localefwd.h \ + /usr/include/c++/4.0.2/bits/ios_base.h \ + /usr/include/c++/4.0.2/bits/atomicity.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/atomic_word.h \ + /usr/include/c++/4.0.2/bits/locale_classes.h \ + /usr/include/c++/4.0.2/string /usr/include/c++/4.0.2/memory \ + /usr/include/c++/4.0.2/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.0.2/limits \ + /usr/include/c++/4.0.2/bits/stl_function.h \ + /usr/include/c++/4.0.2/bits/basic_string.h \ + /usr/include/c++/4.0.2/algorithm /usr/include/c++/4.0.2/bits/stl_algo.h \ + /usr/include/c++/4.0.2/bits/stl_heap.h \ + /usr/include/c++/4.0.2/bits/stl_tempbuf.h \ + /usr/include/c++/4.0.2/bits/basic_string.tcc \ + /usr/include/c++/4.0.2/streambuf \ + /usr/include/c++/4.0.2/bits/streambuf.tcc \ + /usr/include/c++/4.0.2/bits/basic_ios.h \ + /usr/include/c++/4.0.2/bits/streambuf_iterator.h \ + /usr/include/c++/4.0.2/bits/locale_facets.h \ + /usr/include/c++/4.0.2/cwctype /usr/include/wctype.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_base.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/ctype_inline.h \ + /usr/include/c++/4.0.2/bits/codecvt.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/time_members.h \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/messages_members.h \ + /usr/include/c++/4.0.2/bits/basic_ios.tcc \ + /usr/include/c++/4.0.2/bits/ostream.tcc /usr/include/c++/4.0.2/locale \ + /usr/include/c++/4.0.2/bits/locale_facets.tcc \ + /usr/include/c++/4.0.2/typeinfo /usr/include/c++/4.0.2/istream \ + /usr/include/c++/4.0.2/bits/istream.tcc /usr/include/c++/4.0.2/fstream \ + /usr/include/c++/4.0.2/x86_64-suse-linux/bits/basic_file.h \ + /usr/include/c++/4.0.2/bits/fstream.tcc \ + /usr/include/c++/4.0.2/backward/strstream \ + /usr/include/c++/4.0.2/backward/backward_warning.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDataObjectInformation.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDataAttributes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/VisWindowTypes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtVector.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/math_exports.h \ + /usr/include/math.h /usr/include/bits/huge_val.h \ + /usr/include/bits/huge_valf.h /usr/include/bits/huge_vall.h \ + /usr/include/bits/inf.h /usr/include/bits/nan.h \ + /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h \ + /usr/include/bits/mathinline.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/viswindow_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtTypes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/dbatts_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtMatrix.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDataValidity.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtPipelineSpecification.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDataSpecification.h \ + /usr/include/c++/4.0.2/map /usr/include/c++/4.0.2/bits/stl_tree.h \ + /usr/include/c++/4.0.2/bits/stl_map.h \ + /usr/include/c++/4.0.2/bits/stl_multimap.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/array_ref_ptr.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtSILRestriction.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtSIL.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtSILCollection.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtSILMatrix.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtSILSet.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtGhostData.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDataSelection.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/ImproperUseException.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtexception_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/PipelineException.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/VisItException.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/misc_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDataObjectSink.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDatasetSink.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDataset.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtCommonDataFunctions.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDataRepresentation.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDataTree.h \ + /usr/include/c++/4.0.2/set /usr/include/c++/4.0.2/bits/stl_set.h \ + /usr/include/c++/4.0.2/bits/stl_multiset.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDataObjectToDatasetFilter.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtDatasetSource.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/avtPluginFilter.h \ + H5PartRandomSampleAttributes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/AttributeSubject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/state_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/AttributeGroup.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/vectortypes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/Subject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkDataSet.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkDataObject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkObject.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkObjectBase.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkIndent.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkSystemIncludes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkWin32Header.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/vtkConfigure.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkIOStream.h \ + /usr/include/c++/4.0.2/iomanip /usr/include/c++/4.0.2/functional \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkIdType.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkOStreamWrapper.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkOStrStreamWrapper.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkSetGet.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkTimeStamp.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkPolyData.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkPointSet.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkDataSet.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkPoints.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkDataArray.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkCellTypes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkIntArray.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkUnsignedCharArray.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkCellType.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkCellLinks.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkPointData.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkDataSetAttributes.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkFieldData.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/vtkVisItUtility.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/visit/visit_vtk_light_exports.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkIdTypeArray.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkCell.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkIdList.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkCellData.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Filtering/vtkCellLocator.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkLocator.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkGenericCell.h \ + /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64//include/vtk/Common/vtkCell.h diff --git a/trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleAttributes.C b/trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleAttributes.C new file mode 100644 index 0000000..5460d7c --- /dev/null +++ b/trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleAttributes.C @@ -0,0 +1,470 @@ +#include +#include + +// **************************************************************************** +// Method: H5PartRandomSampleAttributes::H5PartRandomSampleAttributes +// +// Purpose: +// Constructor for the H5PartRandomSampleAttributes class. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +H5PartRandomSampleAttributes::H5PartRandomSampleAttributes() : AttributeSubject("f") +{ + factor = 1; +} + +// **************************************************************************** +// Method: H5PartRandomSampleAttributes::H5PartRandomSampleAttributes +// +// Purpose: +// Copy constructor for the H5PartRandomSampleAttributes class. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +H5PartRandomSampleAttributes::H5PartRandomSampleAttributes(const H5PartRandomSampleAttributes &obj) : AttributeSubject("f") +{ + factor = obj.factor; + + SelectAll(); +} + +// **************************************************************************** +// Method: H5PartRandomSampleAttributes::~H5PartRandomSampleAttributes +// +// Purpose: +// Destructor for the H5PartRandomSampleAttributes class. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +H5PartRandomSampleAttributes::~H5PartRandomSampleAttributes() +{ + // nothing here +} + +// **************************************************************************** +// Method: H5PartRandomSampleAttributes::operator = +// +// Purpose: +// Assignment operator for the H5PartRandomSampleAttributes class. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +H5PartRandomSampleAttributes& +H5PartRandomSampleAttributes::operator = (const H5PartRandomSampleAttributes &obj) +{ + if (this == &obj) return *this; + factor = obj.factor; + + SelectAll(); + return *this; +} + +// **************************************************************************** +// Method: H5PartRandomSampleAttributes::operator == +// +// Purpose: +// Comparison operator == for the H5PartRandomSampleAttributes class. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +bool +H5PartRandomSampleAttributes::operator == (const H5PartRandomSampleAttributes &obj) const +{ + // Create the return value + return ((factor == obj.factor)); +} + +// **************************************************************************** +// Method: H5PartRandomSampleAttributes::operator != +// +// Purpose: +// Comparison operator != for the H5PartRandomSampleAttributes class. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +bool +H5PartRandomSampleAttributes::operator != (const H5PartRandomSampleAttributes &obj) const +{ + return !(this->operator == (obj)); +} + +// **************************************************************************** +// Method: H5PartRandomSampleAttributes::TypeName +// +// Purpose: +// Type name method for the H5PartRandomSampleAttributes class. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +const std::string +H5PartRandomSampleAttributes::TypeName() const +{ + return "H5PartRandomSampleAttributes"; +} + +// **************************************************************************** +// Method: H5PartRandomSampleAttributes::CopyAttributes +// +// Purpose: +// CopyAttributes method for the H5PartRandomSampleAttributes class. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +bool +H5PartRandomSampleAttributes::CopyAttributes(const AttributeGroup *atts) +{ + if(TypeName() != atts->TypeName()) + return false; + + // Call assignment operator. + const H5PartRandomSampleAttributes *tmp = (const H5PartRandomSampleAttributes *)atts; + *this = *tmp; + + return true; +} + +// **************************************************************************** +// Method: H5PartRandomSampleAttributes::CreateCompatible +// +// Purpose: +// CreateCompatible method for the H5PartRandomSampleAttributes class. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +AttributeSubject * +H5PartRandomSampleAttributes::CreateCompatible(const std::string &tname) const +{ + AttributeSubject *retval = 0; + if(TypeName() == tname) + retval = new H5PartRandomSampleAttributes(*this); + // Other cases could go here too. + + return retval; +} + +// **************************************************************************** +// Method: H5PartRandomSampleAttributes::NewInstance +// +// Purpose: +// NewInstance method for the H5PartRandomSampleAttributes class. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +AttributeSubject * +H5PartRandomSampleAttributes::NewInstance(bool copy) const +{ + AttributeSubject *retval = 0; + if(copy) + retval = new H5PartRandomSampleAttributes(*this); + else + retval = new H5PartRandomSampleAttributes; + + return retval; +} + +// **************************************************************************** +// Method: H5PartRandomSampleAttributes::SelectAll +// +// Purpose: +// Selects all attributes. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +void +H5PartRandomSampleAttributes::SelectAll() +{ + Select(0, (void *)&factor); +} + +/////////////////////////////////////////////////////////////////////////////// +// Persistence methods +/////////////////////////////////////////////////////////////////////////////// + +// **************************************************************************** +// Method: H5PartRandomSampleAttributes::CreateNode +// +// Purpose: +// This method creates a DataNode representation of the object so it can be saved to a config file. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +bool +H5PartRandomSampleAttributes::CreateNode(DataNode *parentNode, bool completeSave, bool forceAdd) +{ + if(parentNode == 0) + return false; + + H5PartRandomSampleAttributes defaultObject; + bool addToParent = false; + // Create a node for H5PartRandomSampleAttributes. + DataNode *node = new DataNode("H5PartRandomSampleAttributes"); + + if(completeSave || !FieldsEqual(0, &defaultObject)) + { + addToParent = true; + node->AddNode(new DataNode("factor", factor)); + } + + + // Add the node to the parent node. + if(addToParent || forceAdd) + parentNode->AddNode(node); + else + delete node; + + return (addToParent || forceAdd); +} + +// **************************************************************************** +// Method: H5PartRandomSampleAttributes::SetFromNode +// +// Purpose: +// This method sets attributes in this object from values in a DataNode representation of the object. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +void +H5PartRandomSampleAttributes::SetFromNode(DataNode *parentNode) +{ + int i; + if(parentNode == 0) + return; + + DataNode *searchNode = parentNode->GetNode("H5PartRandomSampleAttributes"); + if(searchNode == 0) + return; + + DataNode *node; + if((node = searchNode->GetNode("factor")) != 0) + SetFactor(node->AsFloat()); +} + +/////////////////////////////////////////////////////////////////////////////// +// Set property methods +/////////////////////////////////////////////////////////////////////////////// + +void +H5PartRandomSampleAttributes::SetFactor(float factor_) +{ + factor = factor_; + Select(0, (void *)&factor); +} + +/////////////////////////////////////////////////////////////////////////////// +// Get property methods +/////////////////////////////////////////////////////////////////////////////// + +float +H5PartRandomSampleAttributes::GetFactor() const +{ + return factor; +} + +/////////////////////////////////////////////////////////////////////////////// +// Keyframing methods +/////////////////////////////////////////////////////////////////////////////// + +// **************************************************************************** +// Method: H5PartRandomSampleAttributes::GetFieldName +// +// Purpose: +// This method returns the name of a field given its index. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +std::string +H5PartRandomSampleAttributes::GetFieldName(int index) const +{ + switch (index) + { + case 0: return "factor"; + default: return "invalid index"; + } +} + +// **************************************************************************** +// Method: H5PartRandomSampleAttributes::GetFieldType +// +// Purpose: +// This method returns the type of a field given its index. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +AttributeGroup::FieldType +H5PartRandomSampleAttributes::GetFieldType(int index) const +{ + switch (index) + { + case 0: return FieldType_float; + default: return FieldType_unknown; + } +} + +// **************************************************************************** +// Method: H5PartRandomSampleAttributes::GetFieldTypeName +// +// Purpose: +// This method returns the name of a field type given its index. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +std::string +H5PartRandomSampleAttributes::GetFieldTypeName(int index) const +{ + switch (index) + { + case 0: return "float"; + default: return "invalid index"; + } +} + +// **************************************************************************** +// Method: H5PartRandomSampleAttributes::FieldsEqual +// +// Purpose: +// This method compares two fields and return true if they are equal. +// +// Note: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +bool +H5PartRandomSampleAttributes::FieldsEqual(int index_, const AttributeGroup *rhs) const +{ + const H5PartRandomSampleAttributes &obj = *((const H5PartRandomSampleAttributes*)rhs); + bool retval = false; + switch (index_) + { + case 0: + { // new scope + retval = (factor == obj.factor); + } + break; + default: retval = false; + } + + return retval; +} + +/////////////////////////////////////////////////////////////////////////////// +// User-defined methods. +/////////////////////////////////////////////////////////////////////////////// + diff --git a/trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleAttributes.h b/trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleAttributes.h new file mode 100644 index 0000000..e4c29be --- /dev/null +++ b/trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleAttributes.h @@ -0,0 +1,60 @@ +#ifndef H5PARTRANDOMSAMPLEATTRIBUTES_H +#define H5PARTRANDOMSAMPLEATTRIBUTES_H +#include + +// **************************************************************************** +// Class: H5PartRandomSampleAttributes +// +// Purpose: +// Randomly reduce an H5Part point mesh +// +// Notes: Autogenerated by xml2atts. +// +// Programmer: xml2atts +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +class H5PartRandomSampleAttributes : public AttributeSubject +{ +public: + H5PartRandomSampleAttributes(); + H5PartRandomSampleAttributes(const H5PartRandomSampleAttributes &obj); + virtual ~H5PartRandomSampleAttributes(); + + virtual H5PartRandomSampleAttributes& operator = (const H5PartRandomSampleAttributes &obj); + virtual bool operator == (const H5PartRandomSampleAttributes &obj) const; + virtual bool operator != (const H5PartRandomSampleAttributes &obj) const; + + virtual const std::string TypeName() const; + virtual bool CopyAttributes(const AttributeGroup *); + virtual AttributeSubject *CreateCompatible(const std::string &) const; + virtual AttributeSubject *NewInstance(bool) const; + + // Property selection methods + virtual void SelectAll(); + + // Property setting methods + void SetFactor(float factor_); + + // Property getting methods + float GetFactor() const; + + // Persistence methods + virtual bool CreateNode(DataNode *node, bool completeSave, bool forceAdd); + virtual void SetFromNode(DataNode *node); + + + // Keyframing methods + virtual std::string GetFieldName(int index) const; + virtual AttributeGroup::FieldType GetFieldType(int index) const; + virtual std::string GetFieldTypeName(int index) const; + virtual bool FieldsEqual(int index, const AttributeGroup *rhs) const; + +private: + float factor; +}; + +#endif diff --git a/trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleAttributes.java b/trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleAttributes.java new file mode 100644 index 0000000..d2b73d8 --- /dev/null +++ b/trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleAttributes.java @@ -0,0 +1,76 @@ +package llnl.visit.operators; + +import llnl.visit.AttributeSubject; +import llnl.visit.CommunicationBuffer; +import llnl.visit.Plugin; + +// **************************************************************************** +// Class: H5PartRandomSampleAttributes +// +// Purpose: +// Randomly reduce an H5Part point mesh +// +// Notes: Autogenerated by xml2java. +// +// Programmer: xml2java +// Creation: Thu Mar 16 10:26:56 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +public class H5PartRandomSampleAttributes extends AttributeSubject implements Plugin +{ + public H5PartRandomSampleAttributes() + { + super(1); + + factor = 1f; + } + + public H5PartRandomSampleAttributes(H5PartRandomSampleAttributes obj) + { + super(1); + + factor = obj.factor; + + SelectAll(); + } + + public boolean equals(H5PartRandomSampleAttributes obj) + { + // Create the return value + return ((factor == obj.factor)); + } + + public String GetName() { return "H5PartRandomSample"; } + public String GetVersion() { return "1.0"; } + + // Property setting methods + public void SetFactor(float factor_) + { + factor = factor_; + Select(0); + } + + // Property getting methods + public float GetFactor() { return factor; } + + // Write and read methods. + public void WriteAtts(CommunicationBuffer buf) + { + if(WriteSelect(0, buf)) + buf.WriteFloat(factor); + } + + public void ReadAtts(int n, CommunicationBuffer buf) + { + buf.ReadByte(); + SetFactor(buf.ReadFloat()); + } + + + // Attributes + private float factor; +} + diff --git a/trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleCommonPluginInfo.C b/trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleCommonPluginInfo.C new file mode 100644 index 0000000..25a6873 --- /dev/null +++ b/trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleCommonPluginInfo.C @@ -0,0 +1,47 @@ +// ************************************************************************* // +// File: H5PartRandomSampleCommonPluginInfo.C +// ************************************************************************* // + +#include +#include + +// **************************************************************************** +// Method: H5PartRandomSampleCommonPluginInfo::AllocAttributes +// +// Purpose: +// Return a pointer to a newly allocated attribute subject. +// +// Returns: A pointer to the newly allocated attribute subject. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// **************************************************************************** + +AttributeSubject * +H5PartRandomSampleCommonPluginInfo::AllocAttributes() +{ + return new H5PartRandomSampleAttributes; +} + +// **************************************************************************** +// Method: H5PartRandomSampleCommonPluginInfo::CopyAttributes +// +// Purpose: +// Copy a H5PartRandomSample attribute subject. +// +// Arguments: +// to The destination attribute subject. +// from The source attribute subject. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// **************************************************************************** + +void +H5PartRandomSampleCommonPluginInfo::CopyAttributes(AttributeSubject *to, + AttributeSubject *from) +{ + *((H5PartRandomSampleAttributes *) to) = *((H5PartRandomSampleAttributes *) from); +} diff --git a/trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleEnginePluginInfo.C b/trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleEnginePluginInfo.C new file mode 100644 index 0000000..557345b --- /dev/null +++ b/trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleEnginePluginInfo.C @@ -0,0 +1,44 @@ +// ************************************************************************* // +// File: H5PartRandomSampleEnginePluginInfo.C +// ************************************************************************* // + +#include +#include + +#if defined(__APPLE__) +#define GetEngineInfo H5PartRandomSample_GetEngineInfo +#endif + +// **************************************************************************** +// Function: GetEngineInfo +// +// Purpose: +// Return a new EnginePluginInfo for the H5PartRandomSample operator. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// **************************************************************************** +extern "C" EngineOperatorPluginInfo* GetEngineInfo() +{ + return new H5PartRandomSampleEnginePluginInfo; +} + +// **************************************************************************** +// Method: H5PartRandomSampleEnginePluginInfo::AllocAvtPluginFilter +// +// Purpose: +// Return a pointer to a newly allocated avtPluginFilter. +// +// Returns: A pointer to the newly allocated avtPluginFilter. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// **************************************************************************** + +avtPluginFilter * +H5PartRandomSampleEnginePluginInfo::AllocAvtPluginFilter() +{ + return new avtH5PartRandomSampleFilter; +} diff --git a/trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleGUIPluginInfo.C b/trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleGUIPluginInfo.C new file mode 100644 index 0000000..07ba3bc --- /dev/null +++ b/trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleGUIPluginInfo.C @@ -0,0 +1,92 @@ +// ************************************************************************* // +// File: H5PartRandomSampleGUIPluginInfo.C +// ************************************************************************* // + +#include +#include +#include + +#if defined(__APPLE__) +#define GetGUIInfo H5PartRandomSample_GetGUIInfo +#endif + +// **************************************************************************** +// Function: GetGUIInfo +// +// Purpose: +// Return a new GUIPluginInfo for the H5PartRandomSample operator. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 16 10:29:14 PDT 2006 +// +// **************************************************************************** +extern "C" GUIOperatorPluginInfo* GetGUIInfo() +{ + return new H5PartRandomSampleGUIPluginInfo; +} + +// **************************************************************************** +// Method: H5PartRandomSampleGUIPluginInfo::GetMenuName +// +// Purpose: +// Return a pointer to the name to use in the GUI menu. +// +// Returns: A pointer to the name to use in the GUI menu. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 16 10:29:14 PDT 2006 +// +// **************************************************************************** + +const char * +H5PartRandomSampleGUIPluginInfo::GetMenuName() const +{ + return "H5PartRandomSample"; +} + + +// **************************************************************************** +// Method: H5PartRandomSampleGUIPluginInfo::CreatePluginWindow +// +// Purpose: +// Return a pointer to an operator's attribute window. +// +// Arguments: +// type The type of the operator. +// attr The attribute subject for the operator. +// notepad The notepad to use for posting the window. +// +// Returns: A pointer to the operator's attribute window. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 16 10:29:14 PDT 2006 +// +// **************************************************************************** + +QvisPostableWindowObserver * +H5PartRandomSampleGUIPluginInfo::CreatePluginWindow(int type, AttributeSubject *attr, + QvisNotepadArea *notepad) +{ + return new QvisH5PartRandomSampleWindow(type, (H5PartRandomSampleAttributes *)attr, + "H5PartRandomSample operator attributes", "H5PartRandomSample operator", notepad); +} + +// **************************************************************************** +// Method: H5PartRandomSampleGUIPluginInfo::XPMIconData +// +// Purpose: +// Return a pointer to the icon data. +// +// Returns: A pointer to the icon data. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 16 10:29:14 PDT 2006 +// +// **************************************************************************** + +#include +const char ** +H5PartRandomSampleGUIPluginInfo::XPMIconData() const +{ + return icon_xpm; +} diff --git a/trunk/visit_plugins/operators/RandomSample/H5PartRandomSamplePluginInfo.C b/trunk/visit_plugins/operators/RandomSample/H5PartRandomSamplePluginInfo.C new file mode 100644 index 0000000..414f6d6 --- /dev/null +++ b/trunk/visit_plugins/operators/RandomSample/H5PartRandomSamplePluginInfo.C @@ -0,0 +1,107 @@ +// ************************************************************************* // +// File: H5PartRandomSamplePluginInfo.C +// ************************************************************************* // + +#include +#include + +#include +#if defined(__APPLE__) +extern "C" const char *H5PartRandomSampleVisItPluginVersion = VERSION; +#else +extern "C" const char *VisItPluginVersion = VERSION; +#endif + +#if defined(__APPLE__) +#define GetGeneralInfo H5PartRandomSample_GetGeneralInfo +#endif + +// **************************************************************************** +// Function: GetGeneralInfo +// +// Purpose: +// Return a new GeneralPluginInfo for the H5PartRandomSample operator. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// **************************************************************************** +extern "C" GeneralOperatorPluginInfo* GetGeneralInfo() +{ + return new H5PartRandomSampleGeneralPluginInfo; +} + +// **************************************************************************** +// Method: H5PartRandomSampleGeneralPluginInfo::GetName +// +// Purpose: +// Return the name of the operator plugin. +// +// Returns: A pointer to the name of the operator plugin. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// **************************************************************************** + +char * +H5PartRandomSampleGeneralPluginInfo::GetName() const +{ + return "H5PartRandomSample"; +} + +// **************************************************************************** +// Method: H5PartRandomSampleGeneralPluginInfo::GetVersion +// +// Purpose: +// Return the version of the operator plugin. +// +// Returns: A pointer to the version of the operator plugin. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// **************************************************************************** + +char * +H5PartRandomSampleGeneralPluginInfo::GetVersion() const +{ + return "1.0"; +} + +// **************************************************************************** +// Method: H5PartRandomSampleGeneralPluginInfo::GetID +// +// Purpose: +// Return the id of the operator plugin. +// +// Returns: A pointer to the id of the operator plugin. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// **************************************************************************** + +char * +H5PartRandomSampleGeneralPluginInfo::GetID() const +{ + return "H5PartRandomSample_1.0"; +} +// **************************************************************************** +// Method: H5PartRandomSampleGeneralPluginInfo::EnabledByDefault +// +// Purpose: +// Return true if this plugin should be enabled by default; false otherwise. +// +// Returns: true/false +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// **************************************************************************** + +bool +H5PartRandomSampleGeneralPluginInfo::EnabledByDefault() const +{ + return true; +} diff --git a/trunk/visit_plugins/operators/RandomSample/H5PartRandomSamplePluginInfo.h b/trunk/visit_plugins/operators/RandomSample/H5PartRandomSamplePluginInfo.h new file mode 100644 index 0000000..def4701 --- /dev/null +++ b/trunk/visit_plugins/operators/RandomSample/H5PartRandomSamplePluginInfo.h @@ -0,0 +1,85 @@ +// ************************************************************************* // +// File: H5PartRandomSamplePluginInfo.h +// ************************************************************************* // + +#ifndef H5PARTRANDOMSAMPLE_PLUGIN_INFO_H +#define H5PARTRANDOMSAMPLE_PLUGIN_INFO_H +#include +#include + +class H5PartRandomSampleAttributes; + +// **************************************************************************** +// Class: H5PartRandomSamplePluginInfo +// +// Purpose: +// Five classes that provide all the information about an H5PartRandomSample operator +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +class H5PartRandomSampleGeneralPluginInfo : public virtual GeneralOperatorPluginInfo +{ + public: + virtual char *GetName() const; + virtual char *GetVersion() const; + virtual char *GetID() const; + virtual bool EnabledByDefault() const; +}; + +class H5PartRandomSampleCommonPluginInfo : public virtual CommonOperatorPluginInfo, public virtual H5PartRandomSampleGeneralPluginInfo +{ + public: + virtual AttributeSubject *AllocAttributes(); + virtual void CopyAttributes(AttributeSubject *to, AttributeSubject *from); +}; + +class H5PartRandomSampleGUIPluginInfo : public virtual GUIOperatorPluginInfo, public virtual H5PartRandomSampleCommonPluginInfo +{ + public: + virtual const char *GetMenuName() const; + virtual QvisPostableWindowObserver *CreatePluginWindow(int type, + AttributeSubject *attr, QvisNotepadArea *notepad); + virtual const char **XPMIconData() const; +}; + +class H5PartRandomSampleViewerPluginInfo : public virtual ViewerOperatorPluginInfo, public virtual H5PartRandomSampleCommonPluginInfo +{ + public: + virtual AttributeSubject *GetClientAtts(); + virtual AttributeSubject *GetDefaultAtts(); + virtual void SetClientAtts(AttributeSubject *atts); + virtual void GetClientAtts(AttributeSubject *atts); + + virtual void InitializeOperatorAtts(AttributeSubject *atts, + const ViewerPlot *plot, + const bool fromDefault); + virtual const char **XPMIconData() const; + + static void InitializeGlobalObjects(); + private: + static H5PartRandomSampleAttributes *defaultAtts; + static H5PartRandomSampleAttributes *clientAtts; +}; + +class H5PartRandomSampleEnginePluginInfo : public virtual EngineOperatorPluginInfo, public virtual H5PartRandomSampleCommonPluginInfo +{ + public: + virtual avtPluginFilter *AllocAvtPluginFilter(); +}; + +class H5PartRandomSampleScriptingPluginInfo : public virtual ScriptingOperatorPluginInfo, public virtual H5PartRandomSampleCommonPluginInfo +{ + public: + virtual void InitializePlugin(AttributeSubject *subj, void *data); + virtual void *GetMethodTable(int *nMethods); + virtual bool TypesMatch(void *pyobject); + virtual char *GetLogString(); + virtual void SetDefaults(const AttributeSubject *atts); +}; + +#endif diff --git a/trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleScriptingPluginInfo.C b/trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleScriptingPluginInfo.C new file mode 100644 index 0000000..fd10ab0 --- /dev/null +++ b/trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleScriptingPluginInfo.C @@ -0,0 +1,142 @@ +// ************************************************************************* // +// H5PartRandomSampleScriptingPluginInfo.C +// ************************************************************************* // +#include +#include + +#if defined(__APPLE__) +#define GetScriptingInfo H5PartRandomSample_GetScriptingInfo +#endif + +// **************************************************************************** +// Function: GetScriptingInfo +// +// Purpose: +// Return a new ScriptingPluginInfo for the H5PartRandomSample plot. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// **************************************************************************** +extern "C" ScriptingOperatorPluginInfo* GetScriptingInfo() +{ + return new H5PartRandomSampleScriptingPluginInfo; +} + +// **************************************************************************** +// Method: H5PartRandomSampleScriptingPluginInfo::InitializePlugin +// +// Purpose: +// Calls the initialization function for the plugin. +// +// Arguments: +// subj : A pointer to the plugin's state object. +// data : A pointer to data to be used by the observer function. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +void +H5PartRandomSampleScriptingPluginInfo::InitializePlugin(AttributeSubject *subj, + void *data) +{ + PyH5PartRandomSampleAttributes_StartUp((H5PartRandomSampleAttributes *)subj, data); +} + +// **************************************************************************** +// Method: H5PartRandomSampleScriptingPluginInfo::GetMethodTable +// +// Purpose: +// Returns a pointer to the plugin's Python method table. These methods are +// added to the top-level visit module's methods. +// +// Arguments: +// nMethods : Returns the number of methods in the method table. +// +// Returns: A pointer to the method table. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +void * +H5PartRandomSampleScriptingPluginInfo::GetMethodTable(int *nMethods) +{ + return PyH5PartRandomSampleAttributes_GetMethodTable(nMethods); +} + +// **************************************************************************** +// Method: H5PartRandomSampleScriptingPluginInfo::TypesMatch +// +// Purpose: +// Returns whether or not the input PyObject is H5PartRandomSample plot attributes. +// +// Arguments: +// pyobject : A PyObject cast to void*. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +bool +H5PartRandomSampleScriptingPluginInfo::TypesMatch(void *pyobject) +{ + return PyH5PartRandomSampleAttributes_Check((PyObject *)pyobject); +} + +// **************************************************************************** +// Method: H5PartRandomSampleScriptingPluginInfo::GetLogString +// +// Purpose: +// Gets a string representation of the current attributes. +// +// Arguments: +// val : Whether or not to log state information. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +char * +H5PartRandomSampleScriptingPluginInfo::GetLogString() +{ + std::string s(PyH5PartRandomSampleAttributes_GetLogString()); + char *v = new char[s.size() + 1]; + strcpy(v, s.c_str()); + return v; +} + +// **************************************************************************** +// Method: H5PartRandomSampleScriptingPluginInfo::SetDefaults +// +// Purpose: +// Used to set the default values for a plugin's state object. +// +// Arguments: +// atts : The new state. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +void +H5PartRandomSampleScriptingPluginInfo::SetDefaults(const AttributeSubject *atts) +{ + PyH5PartRandomSampleAttributes_SetDefaults((const H5PartRandomSampleAttributes *)atts); +} diff --git a/trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleViewerPluginInfo.C b/trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleViewerPluginInfo.C new file mode 100644 index 0000000..bc8ce36 --- /dev/null +++ b/trunk/visit_plugins/operators/RandomSample/H5PartRandomSampleViewerPluginInfo.C @@ -0,0 +1,175 @@ +// ************************************************************************* // +// File: H5PartRandomSampleViewerPluginInfo.C +// ************************************************************************* // + +#include +#include + +#if defined(__APPLE__) +#define GetViewerInfo H5PartRandomSample_GetViewerInfo +#endif + +// **************************************************************************** +// Function: GetViewerInfo +// +// Purpose: +// Return a new ViewerPluginInfo for the H5PartRandomSample operator. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// **************************************************************************** +extern "C" ViewerOperatorPluginInfo* GetViewerInfo() +{ + H5PartRandomSampleViewerPluginInfo::InitializeGlobalObjects(); + return new H5PartRandomSampleViewerPluginInfo; +} + +// +// Storage for static data elements. +// +H5PartRandomSampleAttributes *H5PartRandomSampleViewerPluginInfo::clientAtts = NULL; +H5PartRandomSampleAttributes *H5PartRandomSampleViewerPluginInfo::defaultAtts = NULL; + +// **************************************************************************** +// Method: H5PartRandomSampleViewerPluginInfo::InitializeGlobalObjects +// +// Purpose: +// Initialize the operator atts. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// **************************************************************************** +void +H5PartRandomSampleViewerPluginInfo::InitializeGlobalObjects() +{ + H5PartRandomSampleViewerPluginInfo::clientAtts = new H5PartRandomSampleAttributes; + H5PartRandomSampleViewerPluginInfo::defaultAtts = new H5PartRandomSampleAttributes; +} + +// **************************************************************************** +// Method: H5PartRandomSampleViewerPluginInfo::GetClientAtts +// +// Purpose: +// Return a pointer to the viewer client attributes. +// +// Returns: A pointer to the viewer client attributes. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// **************************************************************************** + +AttributeSubject * +H5PartRandomSampleViewerPluginInfo::GetClientAtts() +{ + return clientAtts; +} + +// **************************************************************************** +// Method: H5PartRandomSampleViewerPluginInfo::GetDefaultAtts +// +// Purpose: +// Return a pointer to the viewer default attributes. +// +// Returns: A pointer to the viewer default attributes. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// **************************************************************************** + +AttributeSubject * +H5PartRandomSampleViewerPluginInfo::GetDefaultAtts() +{ + return defaultAtts; +} + +// **************************************************************************** +// Method: H5PartRandomSampleViewerPluginInfo::SetClientAtts +// +// Purpose: +// Set the viewer client attributes. +// +// Arguments: +// atts A pointer to the new client attributes. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// **************************************************************************** + +void +H5PartRandomSampleViewerPluginInfo::SetClientAtts(AttributeSubject *atts) +{ + *clientAtts = *(H5PartRandomSampleAttributes *)atts; + clientAtts->Notify(); +} + +// **************************************************************************** +// Method: H5PartRandomSampleViewerPluginInfo::GetClientAtts +// +// Purpose: +// Get the viewer client attributes. +// +// Arguments: +// atts A pointer to return the client default attributes in. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// **************************************************************************** + +void +H5PartRandomSampleViewerPluginInfo::GetClientAtts(AttributeSubject *atts) +{ + *(H5PartRandomSampleAttributes *)atts = *clientAtts; +} + +// **************************************************************************** +// Method: H5PartRandomSampleViewerPluginInfo::InitializeOperatorAtts +// +// Purpose: +// Initialize the operator attributes to the default attributes. +// +// Arguments: +// atts The attribute subject to initialize. +// md The metadata used to initialize. +// atts The variable name used to initialize. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// **************************************************************************** + +void +H5PartRandomSampleViewerPluginInfo::InitializeOperatorAtts(AttributeSubject *atts, + const ViewerPlot *plot, + const bool fromDefault) +{ + if (fromDefault) + *(H5PartRandomSampleAttributes*)atts = *defaultAtts; + else + *(H5PartRandomSampleAttributes*)atts = *clientAtts; +} + +// **************************************************************************** +// Method: H5PartRandomSampleViewerPluginInfo::XPMIconData +// +// Purpose: +// Return a pointer to the icon data. +// +// Returns: A pointer to the icon data. +// +// Programmer: cristina -- generated by xml2info +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// **************************************************************************** + +#include +const char ** +H5PartRandomSampleViewerPluginInfo::XPMIconData() const +{ + return icon_xpm; +} diff --git a/trunk/visit_plugins/operators/RandomSample/Makefile b/trunk/visit_plugins/operators/RandomSample/Makefile new file mode 100644 index 0000000..4a858c6 --- /dev/null +++ b/trunk/visit_plugins/operators/RandomSample/Makefile @@ -0,0 +1,113 @@ +## +## Programs and options... +## +include /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/make-variables +TOPDIR=/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64 + + +## +## Libraries and includes... +## +VTK_INCLUDE= \ + -I/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk \ + -I/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Common \ + -I/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Filtering \ + -I/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Graphics \ + -I/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Hybrid \ + -I/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/IO \ + -I/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Imaging \ + -I/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/vtk/Rendering +MOC=/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/bin/moc +CXXFLAGS=$(CXXFLAGSORIG) $(QT_CXXFLAGS) $(PY_CXXFLAGS) +CPPFLAGS=$(CPPFLAGSORIG) $(VTK_INCLUDE) -I. -I/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include -I/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/visit +LDFLAGS=$(LDFLAGSORIG) $(PY_LDFLAGS) -L/d/visusers/cristina/.visit/linux-x86_64/plugins/operators + +## +## Files... +## +PLUGINDIR=operators +PLUGINNAME=H5PartRandomSampleOperator + +WIDGETS=QvisH5PartRandomSampleWindow.h +ISRC=H5PartRandomSamplePluginInfo.C +COMMONSRC=H5PartRandomSamplePluginInfo.C H5PartRandomSampleCommonPluginInfo.C H5PartRandomSampleAttributes.C +GSRC=H5PartRandomSampleGUIPluginInfo.C QvisH5PartRandomSampleWindow.C +VSRC=H5PartRandomSampleViewerPluginInfo.C +ESRC=H5PartRandomSampleEnginePluginInfo.C avtH5PartRandomSampleFilter.C +SSRC=H5PartRandomSampleScriptingPluginInfo.C PyH5PartRandomSampleAttributes.C + +SRC=$(ISRC) $(COMMONSRC) $(GSRC) $(VSRC) $(ESRC) $(SSRC) + + +JAVASRC=H5PartRandomSampleAttributes.java +JAVAOBJ=/usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/java/llnl/visit/operators/H5PartRandomSampleAttributes.class +JAVAPLUGINFLAGS=-d /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/java -classpath /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/java + +SHLIB_FORCED= + +ELIBS_FOR_MACOSX_PREBINDING=$(BZIP2_LIBS) +VLIBS_FOR_MACOSX_PREBINDING=$(BZIP2_LIBS) +ILIBS= +GLIBS=-lgui -lmdserverproxy -lviewerproxy -lproxybase -lmdserverrpc -lviewerrpc -lwinutil -ldbatts -lavtexceptions -lstate -lcomm -lmisc -lplugin -lexpr -lparser -lutility -lI$(PLUGINNAME) $(QT_LDFLAGS) $(QT_LIBS) $(QUI_LIBS) $(X_LIBS) +SLIBS=-lstate -lmisc -lcomm -lutility $(PY_LIB) -lI$(PLUGINNAME) +VLIBS=-lpipeline_ser -lplotter_ser -lavtfilters_ser -lavtmath_ser -lavtview -ldbatts -lavtexceptions -lstate -lmisc -lcomm -lexpr -lparser -lutility -lvisit_vtk -llightweight_visit_vtk -lparallel_visit_vtk_ser $(VLIBS_FOR_MACOSX_PREBINDING) -lI$(PLUGINNAME) $(VTK_LIBS) +ESERLIBS=-lpipeline_ser -lplotter_ser -lavtfilters_ser -lavtmath_ser -lavtview -ldbatts -lavtexceptions -lstate -lmisc -lcomm -lexpr -lparser -lutility -lvisit_vtk -llightweight_visit_vtk -lparallel_visit_vtk_ser -lI$(PLUGINNAME) $(ELIBS_FOR_MACOSX_PREBINDING) $(VTK_LIBS) +EPARLIBS=-lpipeline_par -lplotter_par -lavtfilters_par -lavtmath_par -lavtview -ldbatts -lavtexceptions -lstate -lmisc -lcomm -lexpr -lparser -lutility -lvisit_vtk -llightweight_visit_vtk -lparallel_visit_vtk_par -lI$(PLUGINNAME) $(ELIBS_FOR_MACOSX_PREBINDING) $(VTK_LIBS) $(SHLIB_MPI_LIBS) + +IDSO=/d/visusers/cristina/.visit/linux-x86_64/plugins/operators/libIH5PartRandomSampleOperator.so +GDSO=/d/visusers/cristina/.visit/linux-x86_64/plugins/operators/libGH5PartRandomSampleOperator.so +SDSO=/d/visusers/cristina/.visit/linux-x86_64/plugins/operators/libSH5PartRandomSampleOperator.so +VDSO=/d/visusers/cristina/.visit/linux-x86_64/plugins/operators/libVH5PartRandomSampleOperator.so +ESERDSO=/d/visusers/cristina/.visit/linux-x86_64/plugins/operators/libEH5PartRandomSampleOperator_ser.so +EPARDSO=/d/visusers/cristina/.visit/linux-x86_64/plugins/operators/libEH5PartRandomSampleOperator_par.so + + +DISTRIB= + +## +## Derived objects +## +IOBJ=$(ISRC:.C=.o) +GOBJ=$(COMMONSRC:.C=.o) $(GSRC:.C=.o) +SOBJ=$(COMMONSRC:.C=.o) $(SSRC:.C=.o) +VOBJ=$(COMMONSRC:.C=.o) $(VSRC:.C=.o) +MOBJ=$(COMMONSRC:.C=.o) $(MSRC:.C=.o) $(MSPECIFICSRC:.C=_mds.o) +ESEROBJ=$(COMMONSRC:.C=.o) $(ESRC:.C=.o) +EPAROBJ=$(COMMONSRC:.C=.o) $(ESRC:.C=_par.o) + +MOCSRC = $(WIDGETS:.h=_moc.C) +MOCOBJ = $(MOCSRC:.C=.o) + +## +## Standard targets... +## +all: message $(IDSO) $(GUILIB) $(VIEWERLIB) $(ENGINELIBSER) $(ENGINELIBPAR) $(SCRIPTINGLIB) $(JAVACLASS) + +clean: + $(RM) $(IOBJ) $(COMMONOBJ) + $(RM) $(GOBJ) $(SOBJ) $(VOBJ) $(MOBJ) $(ESEROBJ) $(EPAROBJ) + $(RM) $(MOCSRC) $(MOCOBJ) + $(RM) $(IDSO) $(GDSO) $(SDSO) $(VDSO) $(MDSO) $(ESERDSO) $(EPARDSO) + $(RM) $(JAVAOBJ) + +## +## Other targets... +## +message: + @echo + @echo "****************************************************************************" + @echo "*** Building H5PartRandomSample Operator Plugin" + @echo "****************************************************************************" + +## +## moc +## +$(MOCSRC) or_no_widgets: $(WIDGETS) + @rm -f $@ + $(MOC) $(@:_moc.C=.h) > $@ + + +## +## Automatic dependency stuff +## +include /usr/local/visit/visit-1.5.1/1.5.1/linux-x86_64/include/make-targets diff --git a/trunk/visit_plugins/operators/RandomSample/PyH5PartRandomSampleAttributes.C b/trunk/visit_plugins/operators/RandomSample/PyH5PartRandomSampleAttributes.C new file mode 100644 index 0000000..aa11a6e --- /dev/null +++ b/trunk/visit_plugins/operators/RandomSample/PyH5PartRandomSampleAttributes.C @@ -0,0 +1,358 @@ +#include +#include +#include +#include + +// **************************************************************************** +// Module: PyH5PartRandomSampleAttributes +// +// Purpose: +// Randomly reduce an H5Part point mesh +// +// Note: Autogenerated by xml2python. Do not modify by hand! +// +// Programmer: xml2python +// Creation: Thu Mar 16 10:26:56 PDT 2006 +// +// **************************************************************************** + +// +// This struct contains the Python type information and a H5PartRandomSampleAttributes. +// +struct H5PartRandomSampleAttributesObject +{ + PyObject_HEAD + H5PartRandomSampleAttributes *data; + bool owns; +}; + +// +// Internal prototypes +// +static PyObject *NewH5PartRandomSampleAttributes(int); + +std::string +PyH5PartRandomSampleAttributes_ToString(const H5PartRandomSampleAttributes *atts, const char *prefix) +{ + std::string str; + char tmpStr[1000]; + + SNPRINTF(tmpStr, 1000, "%sfactor = %g\n", prefix, atts->GetFactor()); + str += tmpStr; + return str; +} + +static PyObject * +H5PartRandomSampleAttributes_Notify(PyObject *self, PyObject *args) +{ + H5PartRandomSampleAttributesObject *obj = (H5PartRandomSampleAttributesObject *)self; + obj->data->Notify(); + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +H5PartRandomSampleAttributes_SetFactor(PyObject *self, PyObject *args) +{ + H5PartRandomSampleAttributesObject *obj = (H5PartRandomSampleAttributesObject *)self; + + float fval; + if(!PyArg_ParseTuple(args, "f", &fval)) + return NULL; + + // Set the factor in the object. + obj->data->SetFactor(fval); + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +H5PartRandomSampleAttributes_GetFactor(PyObject *self, PyObject *args) +{ + H5PartRandomSampleAttributesObject *obj = (H5PartRandomSampleAttributesObject *)self; + PyObject *retval = PyFloat_FromDouble(double(obj->data->GetFactor())); + return retval; +} + + + +static struct PyMethodDef H5PartRandomSampleAttributes_methods[] = { + {"Notify", H5PartRandomSampleAttributes_Notify, METH_VARARGS}, + {"SetFactor", H5PartRandomSampleAttributes_SetFactor, METH_VARARGS}, + {"GetFactor", H5PartRandomSampleAttributes_GetFactor, METH_VARARGS}, + {NULL, NULL} +}; + +// +// Type functions +// + +static void +H5PartRandomSampleAttributes_dealloc(PyObject *v) +{ + H5PartRandomSampleAttributesObject *obj = (H5PartRandomSampleAttributesObject *)v; + if(obj->owns) + delete obj->data; +} + +static int +H5PartRandomSampleAttributes_compare(PyObject *v, PyObject *w) +{ + H5PartRandomSampleAttributes *a = ((H5PartRandomSampleAttributesObject *)v)->data; + H5PartRandomSampleAttributes *b = ((H5PartRandomSampleAttributesObject *)w)->data; + return (*a == *b) ? 0 : -1; +} + +static PyObject * +H5PartRandomSampleAttributes_getattr(PyObject *self, char *name) +{ + if(strcmp(name, "factor") == 0) + return H5PartRandomSampleAttributes_GetFactor(self, NULL); + + return Py_FindMethod(H5PartRandomSampleAttributes_methods, self, name); +} + +static int +H5PartRandomSampleAttributes_setattr(PyObject *self, char *name, PyObject *args) +{ + // Create a tuple to contain the arguments since all of the Set + // functions expect a tuple. + PyObject *tuple = PyTuple_New(1); + PyTuple_SET_ITEM(tuple, 0, args); + Py_INCREF(args); + bool retval = false; + + if(strcmp(name, "factor") == 0) + retval = (H5PartRandomSampleAttributes_SetFactor(self, tuple) != NULL); + + Py_DECREF(tuple); + return retval ? 0 : -1; +} + +static int +H5PartRandomSampleAttributes_print(PyObject *v, FILE *fp, int flags) +{ + H5PartRandomSampleAttributesObject *obj = (H5PartRandomSampleAttributesObject *)v; + fprintf(fp, "%s", PyH5PartRandomSampleAttributes_ToString(obj->data, "").c_str()); + return 0; +} + +PyObject * +H5PartRandomSampleAttributes_str(PyObject *v) +{ + H5PartRandomSampleAttributesObject *obj = (H5PartRandomSampleAttributesObject *)v; + return PyString_FromString(PyH5PartRandomSampleAttributes_ToString(obj->data,"").c_str()); +} + +// +// The doc string for the class. +// +static char *H5PartRandomSampleAttributes_Purpose = "Randomly reduce an H5Part point mesh"; + +// +// The type description structure +// +static PyTypeObject H5PartRandomSampleAttributesType = +{ + // + // Type header + // + PyObject_HEAD_INIT(&PyType_Type) + 0, // ob_size + "H5PartRandomSampleAttributes", // tp_name + sizeof(H5PartRandomSampleAttributesObject), // tp_basicsize + 0, // tp_itemsize + // + // Standard methods + // + (destructor)H5PartRandomSampleAttributes_dealloc, // tp_dealloc + (printfunc)H5PartRandomSampleAttributes_print, // tp_print + (getattrfunc)H5PartRandomSampleAttributes_getattr, // tp_getattr + (setattrfunc)H5PartRandomSampleAttributes_setattr, // tp_setattr + (cmpfunc)H5PartRandomSampleAttributes_compare, // tp_compare + (reprfunc)0, // tp_repr + // + // Type categories + // + 0, // tp_as_number + 0, // tp_as_sequence + 0, // tp_as_mapping + // + // More methods + // + 0, // tp_hash + 0, // tp_call + (reprfunc)H5PartRandomSampleAttributes_str, // tp_str + 0, // tp_getattro + 0, // tp_setattro + 0, // tp_as_buffer + Py_TPFLAGS_CHECKTYPES, // tp_flags + H5PartRandomSampleAttributes_Purpose, // tp_doc + 0, // tp_traverse + 0, // tp_clear + 0, // tp_richcompare + 0 // tp_weaklistoffset +}; + +// +// Helper functions for object allocation. +// + +static H5PartRandomSampleAttributes *defaultAtts = 0; +static H5PartRandomSampleAttributes *currentAtts = 0; + +static PyObject * +NewH5PartRandomSampleAttributes(int useCurrent) +{ + H5PartRandomSampleAttributesObject *newObject; + newObject = PyObject_NEW(H5PartRandomSampleAttributesObject, &H5PartRandomSampleAttributesType); + if(newObject == NULL) + return NULL; + if(useCurrent && currentAtts != 0) + newObject->data = new H5PartRandomSampleAttributes(*currentAtts); + else if(defaultAtts != 0) + newObject->data = new H5PartRandomSampleAttributes(*defaultAtts); + else + newObject->data = new H5PartRandomSampleAttributes; + newObject->owns = true; + return (PyObject *)newObject; +} + +static PyObject * +WrapH5PartRandomSampleAttributes(const H5PartRandomSampleAttributes *attr) +{ + H5PartRandomSampleAttributesObject *newObject; + newObject = PyObject_NEW(H5PartRandomSampleAttributesObject, &H5PartRandomSampleAttributesType); + if(newObject == NULL) + return NULL; + newObject->data = (H5PartRandomSampleAttributes *)attr; + newObject->owns = false; + return (PyObject *)newObject; +} + +/////////////////////////////////////////////////////////////////////////////// +// +// Interface that is exposed to the VisIt module. +// +/////////////////////////////////////////////////////////////////////////////// + +PyObject * +H5PartRandomSampleAttributes_new(PyObject *self, PyObject *args) +{ + int useCurrent = 0; + if (!PyArg_ParseTuple(args, "i", &useCurrent)) + { + if (!PyArg_ParseTuple(args, "")) + return NULL; + else + PyErr_Clear(); + } + + return (PyObject *)NewH5PartRandomSampleAttributes(useCurrent); +} + +// +// Plugin method table. These methods are added to the visitmodule's methods. +// +static PyMethodDef H5PartRandomSampleAttributesMethods[] = { + {"H5PartRandomSampleAttributes", H5PartRandomSampleAttributes_new, METH_VARARGS}, + {NULL, NULL} /* Sentinel */ +}; + +static Observer *H5PartRandomSampleAttributesObserver = 0; + +std::string +PyH5PartRandomSampleAttributes_GetLogString() +{ + std::string s("H5PartRandomSampleAtts = H5PartRandomSampleAttributes()\n"); + if(currentAtts != 0) + s += PyH5PartRandomSampleAttributes_ToString(currentAtts, "H5PartRandomSampleAtts."); + return s; +} + +static void +PyH5PartRandomSampleAttributes_CallLogRoutine(Subject *subj, void *data) +{ + H5PartRandomSampleAttributes *atts = (H5PartRandomSampleAttributes *)subj; + typedef void (*logCallback)(const std::string &); + logCallback cb = (logCallback)data; + + if(cb != 0) + { + std::string s("H5PartRandomSampleAtts = H5PartRandomSampleAttributes()\n"); + s += PyH5PartRandomSampleAttributes_ToString(currentAtts, "H5PartRandomSampleAtts."); + cb(s); + } +} + +void +PyH5PartRandomSampleAttributes_StartUp(H5PartRandomSampleAttributes *subj, void *data) +{ + if(subj == 0) + return; + + currentAtts = subj; + PyH5PartRandomSampleAttributes_SetDefaults(subj); + + // + // Create the observer that will be notified when the attributes change. + // + if(H5PartRandomSampleAttributesObserver == 0) + { + H5PartRandomSampleAttributesObserver = new ObserverToCallback(subj, + PyH5PartRandomSampleAttributes_CallLogRoutine, (void *)data); + } + +} + +void +PyH5PartRandomSampleAttributes_CloseDown() +{ + delete defaultAtts; + defaultAtts = 0; + delete H5PartRandomSampleAttributesObserver; + H5PartRandomSampleAttributesObserver = 0; +} + +PyMethodDef * +PyH5PartRandomSampleAttributes_GetMethodTable(int *nMethods) +{ + *nMethods = 1; + return H5PartRandomSampleAttributesMethods; +} + +bool +PyH5PartRandomSampleAttributes_Check(PyObject *obj) +{ + return (obj->ob_type == &H5PartRandomSampleAttributesType); +} + +H5PartRandomSampleAttributes * +PyH5PartRandomSampleAttributes_FromPyObject(PyObject *obj) +{ + H5PartRandomSampleAttributesObject *obj2 = (H5PartRandomSampleAttributesObject *)obj; + return obj2->data; +} + +PyObject * +PyH5PartRandomSampleAttributes_NewPyObject() +{ + return NewH5PartRandomSampleAttributes(0); +} + +PyObject * +PyH5PartRandomSampleAttributes_WrapPyObject(const H5PartRandomSampleAttributes *attr) +{ + return WrapH5PartRandomSampleAttributes(attr); +} + +void +PyH5PartRandomSampleAttributes_SetDefaults(const H5PartRandomSampleAttributes *atts) +{ + if(defaultAtts) + delete defaultAtts; + + defaultAtts = new H5PartRandomSampleAttributes(*atts); +} + diff --git a/trunk/visit_plugins/operators/RandomSample/PyH5PartRandomSampleAttributes.h b/trunk/visit_plugins/operators/RandomSample/PyH5PartRandomSampleAttributes.h new file mode 100644 index 0000000..332704e --- /dev/null +++ b/trunk/visit_plugins/operators/RandomSample/PyH5PartRandomSampleAttributes.h @@ -0,0 +1,21 @@ +#ifndef PY_H5PARTRANDOMSAMPLEATTRIBUTES_H +#define PY_H5PARTRANDOMSAMPLEATTRIBUTES_H +#include +#include + +// +// Functions exposed to the VisIt module. +// +void PyH5PartRandomSampleAttributes_StartUp(H5PartRandomSampleAttributes *subj, void *data); +void PyH5PartRandomSampleAttributes_CloseDown(); +PyMethodDef *PyH5PartRandomSampleAttributes_GetMethodTable(int *nMethods); +bool PyH5PartRandomSampleAttributes_Check(PyObject *obj); +H5PartRandomSampleAttributes *PyH5PartRandomSampleAttributes_FromPyObject(PyObject *obj); +PyObject *PyH5PartRandomSampleAttributes_NewPyObject(); +PyObject *PyH5PartRandomSampleAttributes_WrapPyObject(const H5PartRandomSampleAttributes *attr); +void PyH5PartRandomSampleAttributes_SetDefaults(const H5PartRandomSampleAttributes *atts); +std::string PyH5PartRandomSampleAttributes_GetLogString(); +std::string PyH5PartRandomSampleAttributes_ToString(const H5PartRandomSampleAttributes *, const char *); + +#endif + diff --git a/trunk/visit_plugins/operators/RandomSample/QvisH5PartRandomSampleWindow.C b/trunk/visit_plugins/operators/RandomSample/QvisH5PartRandomSampleWindow.C new file mode 100644 index 0000000..8ef8350 --- /dev/null +++ b/trunk/visit_plugins/operators/RandomSample/QvisH5PartRandomSampleWindow.C @@ -0,0 +1,199 @@ +#include "QvisH5PartRandomSampleWindow.h" + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +using std::string; + +// **************************************************************************** +// Method: QvisH5PartRandomSampleWindow::QvisH5PartRandomSampleWindow +// +// Purpose: +// Constructor +// +// Programmer: xml2window +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +QvisH5PartRandomSampleWindow::QvisH5PartRandomSampleWindow(const int type, + H5PartRandomSampleAttributes *subj, + const char *caption, + const char *shortName, + QvisNotepadArea *notepad) + : QvisOperatorWindow(type,subj, caption, shortName, notepad) +{ + atts = subj; +} + + +// **************************************************************************** +// Method: QvisH5PartRandomSampleWindow::~QvisH5PartRandomSampleWindow +// +// Purpose: +// Destructor +// +// Programmer: xml2window +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +QvisH5PartRandomSampleWindow::~QvisH5PartRandomSampleWindow() +{ +} + + +// **************************************************************************** +// Method: QvisH5PartRandomSampleWindow::CreateWindowContents +// +// Purpose: +// Creates the widgets for the window. +// +// Programmer: xml2window +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +void +QvisH5PartRandomSampleWindow::CreateWindowContents() +{ + QGridLayout *mainLayout = new QGridLayout(topLayout, 1,2, 10, "mainLayout"); + + + factorLabel = new QLabel("factor", central, "factorLabel"); + mainLayout->addWidget(factorLabel,0,0); + factor = new QLineEdit(central, "factor"); + connect(factor, SIGNAL(returnPressed()), + this, SLOT(factorProcessText())); + mainLayout->addWidget(factor, 0,1); + +} + + +// **************************************************************************** +// Method: QvisH5PartRandomSampleWindow::UpdateWindow +// +// Purpose: +// Updates the widgets in the window when the subject changes. +// +// Programmer: xml2window +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +void +QvisH5PartRandomSampleWindow::UpdateWindow(bool doAll) +{ + QString temp; + double r; + + for(int i = 0; i < atts->NumAttributes(); ++i) + { + if(!doAll) + { + if(!atts->IsSelected(i)) + { + continue; + } + } + + const double *dptr; + const float *fptr; + const int *iptr; + const char *cptr; + const unsigned char *uptr; + const string *sptr; + QColor tempcolor; + switch(i) + { + case 0: //factor + temp.setNum(atts->GetFactor()); + factor->setText(temp); + break; + } + } +} + + +// **************************************************************************** +// Method: QvisH5PartRandomSampleWindow::GetCurrentValues +// +// Purpose: +// Gets values from certain widgets and stores them in the subject. +// +// Programmer: xml2window +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +void +QvisH5PartRandomSampleWindow::GetCurrentValues(int which_widget) +{ + bool okay, doAll = (which_widget == -1); + QString msg, temp; + + // Do factor + if(which_widget == 0 || doAll) + { + temp = factor->displayText().simplifyWhiteSpace(); + okay = !temp.isEmpty(); + if(okay) + { + float val = temp.toFloat(&okay); + atts->SetFactor(val); + } + + if(!okay) + { + msg.sprintf("The value of factor was invalid. " + "Resetting to the last good value of %g.", + atts->GetFactor()); + Message(msg); + atts->SetFactor(atts->GetFactor()); + } + } + +} + + +// +// Qt Slot functions +// + + +void +QvisH5PartRandomSampleWindow::factorProcessText() +{ + GetCurrentValues(0); + Apply(); +} + + diff --git a/trunk/visit_plugins/operators/RandomSample/QvisH5PartRandomSampleWindow.h b/trunk/visit_plugins/operators/RandomSample/QvisH5PartRandomSampleWindow.h new file mode 100644 index 0000000..5bb137f --- /dev/null +++ b/trunk/visit_plugins/operators/RandomSample/QvisH5PartRandomSampleWindow.h @@ -0,0 +1,61 @@ +#ifndef QVISH5PARTRANDOMSAMPLEWINDOW_H +#define QVISH5PARTRANDOMSAMPLEWINDOW_H + +#include +#include + +class H5PartRandomSampleAttributes; +class QLabel; +class QCheckBox; +class QLineEdit; +class QSpinBox; +class QVBox; +class QButtonGroup; +class QvisColorTableButton; +class QvisOpacitySlider; +class QvisColorButton; +class QvisLineStyleWidget; +class QvisLineWidthWidget; +class QvisVariableButton; + +// **************************************************************************** +// Class: QvisH5PartRandomSampleWindow +// +// Purpose: +// Defines QvisH5PartRandomSampleWindow class. +// +// Notes: This class was automatically generated! + +// Programmer: xml2window +// Creation: Thu Mar 16 10:26:55 PDT 2006 +// +// Modifications: +// +// **************************************************************************** + +class QvisH5PartRandomSampleWindow : public QvisOperatorWindow +{ + Q_OBJECT + public: + QvisH5PartRandomSampleWindow(const int type, + H5PartRandomSampleAttributes *subj, + const char *caption = 0, + const char *shortName = 0, + QvisNotepadArea *notepad = 0); + virtual ~QvisH5PartRandomSampleWindow(); + virtual void CreateWindowContents(); + protected: + void UpdateWindow(bool doAll); + virtual void GetCurrentValues(int which_widget); + private slots: + void factorProcessText(); + private: + QLineEdit *factor; + QLabel *factorLabel; + + H5PartRandomSampleAttributes *atts; +}; + + + +#endif diff --git a/trunk/visit_plugins/operators/RandomSample/RandomSample.xml b/trunk/visit_plugins/operators/RandomSample/RandomSample.xml new file mode 100644 index 0000000..55a9e1b --- /dev/null +++ b/trunk/visit_plugins/operators/RandomSample/RandomSample.xml @@ -0,0 +1,8 @@ + + + + + 1.0 + + + diff --git a/trunk/visit_plugins/operators/RandomSample/avtH5PartRandomSampleFilter.C b/trunk/visit_plugins/operators/RandomSample/avtH5PartRandomSampleFilter.C new file mode 100644 index 0000000..76587a9 --- /dev/null +++ b/trunk/visit_plugins/operators/RandomSample/avtH5PartRandomSampleFilter.C @@ -0,0 +1,177 @@ +// ************************************************************************* // +// File: avtH5PartRandomSampleFilter.C +// ************************************************************************* // + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + + +// **************************************************************************** +// Method: avtH5PartRandomSampleFilter constructor +// +// Programmer: cristina -- generated by xml2avt +// Creation: Thu Mar 2 13:48:31 PST 2006 +// +// **************************************************************************** + +avtH5PartRandomSampleFilter::avtH5PartRandomSampleFilter() +{ + idList = vtkIdList::New(); + npoints = 0; +} + + +// **************************************************************************** +// Method: avtH5PartRandomSampleFilter destructor +// +// Programmer: cristina -- generated by xml2avt +// Creation: Thu Mar 2 13:48:31 PST 2006 +// +// Modifications: +// +// **************************************************************************** + +avtH5PartRandomSampleFilter::~avtH5PartRandomSampleFilter() +{ +} + + +// **************************************************************************** +// Method: avtH5PartRandomSampleFilter::Create +// +// Programmer: cristina -- generated by xml2avt +// Creation: Thu Mar 2 13:48:31 PST 2006 +// +// **************************************************************************** + +avtFilter * +avtH5PartRandomSampleFilter::Create() +{ + return new avtH5PartRandomSampleFilter(); +} + + +// **************************************************************************** +// Method: avtH5PartRandomSampleFilter::SetAtts +// +// Purpose: +// Sets the state of the filter based on the attribute object. +// +// Arguments: +// a The attributes to use. +// +// Programmer: cristina -- generated by xml2avt +// Creation: Thu Mar 2 13:48:31 PST 2006 +// +// **************************************************************************** + +void +avtH5PartRandomSampleFilter::SetAtts(const AttributeGroup *a) +{ + atts = *(const H5PartRandomSampleAttributes*)a; +} + + +// **************************************************************************** +// Method: avtH5PartRandomSampleFilter::Equivalent +// +// Purpose: +// Returns true if creating a new avtH5PartRandomSampleFilter with the given +// parameters would result in an equivalent avtH5PartRandomSampleFilter. +// +// Programmer: cristina -- generated by xml2avt +// Creation: Thu Mar 2 13:48:31 PST 2006 +// +// **************************************************************************** + +bool +avtH5PartRandomSampleFilter::Equivalent(const AttributeGroup *a) +{ + return (atts == *(H5PartRandomSampleAttributes*)a); +} + + +// **************************************************************************** +// Method: avtH5PartRandomSampleFilter::ExecuteData +// +// Purpose: +// Sends the specified input and output through the H5PartRandomSample filter. +// +// Arguments: +// in_ds The input dataset. +// The domain number. +// The label. +// +// Returns: The output dataset. +// +// Programmer: cristina -- generated by xml2avt +// Creation: Thu Mar 2 13:48:31 PST 2006 +// +// **************************************************************************** + +vtkDataSet * +avtH5PartRandomSampleFilter::ExecuteData(vtkDataSet *in_ds, int, std::string) +{ + + float factor = atts.GetFactor(); + int nspace = 3; + int update = 0; + + + if (factor >= 1.0) { + in_ds->Register(NULL); + return in_ds; + } else if (factor < 0){ + factor = 0.0; + } + vtkIdType nPoints = in_ds->GetNumberOfPoints(); + + vtkPointData *inPD = in_ds->GetPointData(); + vtkPolyData *out_ds = vtkPolyData::New(); + vtkPoints *pts = vtkPoints::New(); + pts->SetNumberOfPoints((vtkIdType) (nPoints*factor)); + out_ds->SetPoints(pts); + out_ds->Allocate(nspace*((vtkIdType) (nPoints*factor))); + + vtkPointData *outPD = out_ds->GetPointData(); + outPD->CopyAllocate(inPD, 0, (vtkIdType) (nPoints*factor)); + + double sfactor = (double) (nPoints-1)/RAND_MAX; + seed=12; + srand(seed); + + vtkIdType i, index; + vtkIdType newId = 0; + vtkIdType onevertex[1]; + for (vtkIdType i = 0; newId < (vtkIdType)(nPoints*factor); i++) { + index = (vtkIdType) (sfactor * rand()); + if (idList->IsId(index) != -1){ + continue; + } else { + idList->InsertNextId(index); + } + outPD->CopyData(inPD, index, newId); + float pt[3]; + in_ds->GetPoint(index, pt); + pts->SetPoint(newId, pt); + onevertex[0] = newId; + out_ds->InsertNextCell(VTK_VERTEX, 1, onevertex); + newId++; + } + idList->Reset(); + idList->Delete(); + pts->Delete(); + + return out_ds; + + +} diff --git a/trunk/visit_plugins/operators/RandomSample/avtH5PartRandomSampleFilter.h b/trunk/visit_plugins/operators/RandomSample/avtH5PartRandomSampleFilter.h new file mode 100644 index 0000000..cefc00c --- /dev/null +++ b/trunk/visit_plugins/operators/RandomSample/avtH5PartRandomSampleFilter.h @@ -0,0 +1,54 @@ +// ************************************************************************* // +// File: avtH5PartRandomSampleFilter.h +// ************************************************************************* // + +#ifndef AVT_H5PartRandomSample_FILTER_H +#define AVT_H5PartRandomSample_FILTER_H + + +#include +#include + +class vtkDataSet; +class vtkIdList; + +// **************************************************************************** +// Class: avtH5PartRandomSampleFilter +// +// Purpose: +// A plugin operator for H5PartRandomSample. +// +// Programmer: cristina -- generated by xml2avt +// Creation: Thu Mar 2 13:48:31 PST 2006 +// +// **************************************************************************** + +class avtH5PartRandomSampleFilter : public avtPluginStreamer +{ + public: + avtH5PartRandomSampleFilter(); + virtual ~avtH5PartRandomSampleFilter(); + + static avtFilter *Create(); + + virtual const char *GetType(void) { return "avtH5PartRandomSampleFilter"; }; + virtual const char *GetDescription(void) + { return "H5PartRandomSample"; }; + + virtual void SetAtts(const AttributeGroup*); + virtual bool Equivalent(const AttributeGroup*); + + protected: + H5PartRandomSampleAttributes atts; + + virtual vtkDataSet *ExecuteData(vtkDataSet *, int, std::string); + + private: + + long int npoints; + unsigned int seed; + vtkIdList *idList; +}; + + +#endif diff --git a/trunk/visit_plugins/operators/RandomSample/icon.xpm b/trunk/visit_plugins/operators/RandomSample/icon.xpm new file mode 100644 index 0000000..e8b26bf --- /dev/null +++ b/trunk/visit_plugins/operators/RandomSample/icon.xpm @@ -0,0 +1,23828 @@ +/* XPM */ +static const char * icon_xpm[] = { +"300 300 23525 3", +" c #003D1E", +". c #005F2E", +"+ c #007E3B", +"@ c #008E42", +"# c #008239", +"$ c #00A953", +"% c #01ED9E", +"& c #02FFB1", +"* c #00FD9D", +"= c #00FF90", +"- c #00FE82", +"; c #08FB83", +"> c #1BFFAD", +", c #0A553A", +"' c #000000", +") c #000402", +"! c #000100", +"~ c #000204", +"{ c #002A40", +"] c #005C8A", +"^ c #0070A8", +"/ c #0073A9", +"( c #0073A8", +"_ c #006C9D", +": c #004B6C", +"< c #000F16", +"[ c #000101", +"} c #008D45", +"| c #008941", +"1 c #00803B", +"2 c #007737", +"3 c #00692B", +"4 c #02BB74", +"5 c #13FFCF", +"6 c #15FDBD", +"7 c #0AFEA4", +"8 c #02FE8B", +"9 c #00FE7E", +"0 c #1DFFA8", +"a c #099254", +"b c #002D12", +"c c #000F17", +"d c #004161", +"e c #006A9B", +"f c #0075AA", +"g c #0076AA", +"h c #0076A8", +"i c #00628B", +"j c #002A3B", +"k c #006E36", +"l c #006731", +"m c #00642F", +"n c #00602C", +"o c #00793B", +"p c #03F5A1", +"q c #0FF7AE", +"r c #13E79F", +"s c #11EF9E", +"t c #0BFF94", +"u c #03FE7C", +"v c #03FF83", +"w c #05F383", +"x c #01A750", +"y c #009B4A", +"z c #006431", +"A c #00140A", +"B c #000001", +"C c #001D2B", +"D c #00547A", +"E c #0073A5", +"F c #0078AA", +"G c #007BAC", +"H c #0076A5", +"I c #00506E", +"J c #00131B", +"K c #000404", +"L c #000303", +"M c #006733", +"N c #007339", +"O c #00813F", +"P c #009E4E", +"Q c #00D672", +"R c #00BA63", +"S c #01AB5F", +"T c #03BC67", +"U c #05FA8B", +"V c #02FF81", +"W c #0FFF91", +"X c #12FD9B", +"Y c #01A955", +"Z c #00A14D", +"` c #00A452", +" . c #008946", +".. c #004021", +"+. c #010000", +"@. c #000201", +"#. c #000102", +"$. c #000508", +"%. c #003247", +"&. c #00668F", +"*. c #0079A9", +"=. c #007BAA", +"-. c #007DAB", +";. c #006C93", +">. c #003345", +",. c #000304", +"'. c #009249", +"). c #008E46", +"!. c #008A42", +"~. c #00823D", +"{. c #00813C", +"]. c #00B259", +"^. c #00C467", +"/. c #01D873", +"(. c #05DD76", +"_. c #0BF68D", +":. c #0CFF90", +"<. c #12FE99", +"[. c #24FDB5", +"}. c #06683D", +"|. c #007436", +"1. c #00A152", +"2. c #00A454", +"3. c #009D52", +"4. c #006D3B", +"5. c #001F11", +"6. c #010100", +"7. c #000202", +"8. c #001017", +"9. c #004864", +"0. c #00739E", +"a. c #007DAA", +"b. c #007FAB", +"c. c #007CA6", +"d. c #005875", +"e. c #001219", +"f. c #001716", +"g. c #006E6D", +"h. c #008081", +"i. c #004D4E", +"j. c #010808", +"k. c #007D3E", +"l. c #00934A", +"m. c #00A251", +"n. c #009D4B", +"o. c #008A40", +"p. c #009348", +"q. c #00BA5B", +"r. c #00E972", +"s. c #0AF687", +"t. c #1DFEA6", +"u. c #22FCAB", +"v. c #24FFBA", +"w. c #20EAAB", +"x. c #008140", +"y. c #005028", +"z. c #00582C", +"A. c #008C49", +"B. c #00A356", +"C. c #00A258", +"D. c #008F50", +"E. c #004A2A", +"F. c #000905", +"G. c #010202", +"H. c #010101", +"I. c #010102", +"J. c #010203", +"K. c #010001", +"L. c #002431", +"M. c #005D7F", +"N. c #0081AA", +"O. c #0083AC", +"P. c #006F93", +"Q. c #00A0B1", +"R. c #03FCFE", +"S. c #01FEFD", +"T. c #00FFFF", +"U. c #00C1CE", +"V. c #012227", +"W. c #009650", +"X. c #00A457", +"Y. c #00A453", +"Z. c #00AE54", +"`. c #00C258", +" + c #00D75F", +".+ c #00E971", +"++ c #00FC79", +"@+ c #0DFF92", +"#+ c #1FFEAC", +"$+ c #27FFC0", +"%+ c #29FAC8", +"&+ c #09B365", +"*+ c #009B50", +"=+ c #006B38", +"-+ c #004524", +";+ c #006938", +">+ c #009954", +",+ c #00A25A", +"'+ c #009E5A", +")+ c #007846", +"!+ c #012918", +"~+ c #020000", +"{+ c #020101", +"]+ c #010303", +"^+ c #020202", +"/+ c #020201", +"(+ c #020303", +"_+ c #01080A", +":+ c #003A4D", +"<+ c #007093", +"[+ c #007EA6", +"}+ c #00B2D8", +"|+ c #03BEE3", +"1+ c #08A7BF", +"2+ c #0ACBDA", +"3+ c #05E1FB", +"4+ c #00F0FF", +"5+ c #00DAE4", +"6+ c #011619", +"7+ c #03BC6D", +"8+ c #0CD17C", +"9+ c #10EA86", +"0+ c #0AFA7E", +"a+ c #02FE6A", +"b+ c #00FF68", +"c+ c #00FA6E", +"d+ c #00D662", +"e+ c #04EE72", +"f+ c #13FB9B", +"g+ c #13EAA8", +"h+ c #054B34", +"i+ c #005927", +"j+ c #009C4F", +"k+ c #008A4B", +"l+ c #00542E", +"m+ c #004A28", +"n+ c #007E46", +"o+ c #009F5C", +"p+ c #00A15E", +"q+ c #009359", +"r+ c #005836", +"s+ c #010F0A", +"t+ c #010304", +"u+ c #01141B", +"v+ c #00566E", +"w+ c #00ACD0", +"x+ c #03CAEC", +"y+ c #09D5EF", +"z+ c #09B9D1", +"A+ c #0AD2E9", +"B+ c #04D9FC", +"C+ c #06F9FF", +"D+ c #038181", +"E+ c #020506", +"F+ c #02ED79", +"G+ c #08D770", +"H+ c #0AC667", +"I+ c #0BEB77", +"J+ c #04FF6F", +"K+ c #06F969", +"L+ c #0BFF7E", +"M+ c #046E34", +"N+ c #010502", +"O+ c #012513", +"P+ c #00140E", +"Q+ c #020102", +"R+ c #012F18", +"S+ c #007A3E", +"T+ c #00A054", +"U+ c #00A358", +"V+ c #009D57", +"W+ c #007543", +"X+ c #004326", +"Y+ c #005832", +"Z+ c #008F54", +"`+ c #00A161", +" @ c #009E61", +".@ c #007F50", +"+@ c #003523", +"@@ c #020304", +"#@ c #020203", +"$@ c #020405", +"%@ c #011F20", +"&@ c #00C4D0", +"*@ c #00B6CE", +"=@ c #01D5EE", +"-@ c #01D1EE", +";@ c #03D8F0", +">@ c #02E6FD", +",@ c #13F8FF", +"'@ c #119B9E", +")@ c #00BC4E", +"!@ c #00B450", +"~@ c #01BA52", +"{@ c #03D85F", +"]@ c #05FF72", +"^@ c #09FA72", +"/@ c #1CFF97", +"(@ c #118651", +"_@ c #030301", +":@ c #030201", +"<@ c #030605", +"[@ c #030303", +"}@ c #030000", +"|@ c #020906", +"1@ c #014927", +"2@ c #008C4B", +"3@ c #00A159", +"4@ c #00A25C", +"5@ c #009356", +"6@ c #005C37", +"7@ c #004026", +"8@ c #006D42", +"9@ c #009A5F", +"0@ c #00A065", +"a@ c #009661", +"b@ c #006241", +"c@ c #021810", +"d@ c #030202", +"e@ c #020404", +"f@ c #020A0A", +"g@ c #00DADA", +"h@ c #00ECF7", +"i@ c #00D0E6", +"j@ c #08DBEF", +"k@ c #11F5FE", +"l@ c #0FECFA", +"m@ c #1AFFFF", +"n@ c #199293", +"o@ c #030606", +"p@ c #00A847", +"q@ c #00CF57", +"r@ c #04E964", +"s@ c #0FF378", +"t@ c #1AFF8C", +"u@ c #17FB87", +"v@ c #25FFA2", +"w@ c #12B766", +"x@ c #004C1D", +"y@ c #03130B", +"z@ c #030001", +"A@ c #030203", +"B@ c #020505", +"C@ c #02190F", +"D@ c #006337", +"E@ c #009856", +"F@ c #00A15D", +"G@ c #009F5F", +"H@ c #00804E", +"I@ c #00462B", +"J@ c #00482D", +"K@ c #008152", +"L@ c #009F67", +"M@ c #009D69", +"N@ c #00875C", +"O@ c #01412E", +"P@ c #020605", +"Q@ c #030304", +"R@ c #020204", +"S@ c #040405", +"T@ c #040809", +"U@ c #018080", +"V@ c #00E2F8", +"W@ c #0EEFFB", +"X@ c #1EF8FC", +"Y@ c #26FBFD", +"Z@ c #2AFFFF", +"`@ c #0C3B3B", +" # c #030506", +".# c #00A543", +"+# c #00E459", +"@# c #05F86A", +"## c #24FB95", +"$# c #2CFFAB", +"%# c #25F2A2", +"&# c #01A646", +"*# c #00A145", +"=# c #00863C", +"-# c #01421F", +";# c #020806", +"># c #030505", +",# c #030405", +"'# c #030102", +")# c #01321D", +"!# c #007B47", +"~# c #009D5D", +"{# c #00A062", +"]# c #009860", +"^# c #006642", +"/# c #013B26", +"(# c #005B3B", +"_# c #009160", +":# c #009F6C", +"<# c #00986A", +"[# c #006D4E", +"}# c #022118", +"|# c #02181A", +"1# c #00CBD8", +"2# c #00EEFF", +"3# c #0AECFD", +"4# c #1FFFFE", +"5# c #24FFFF", +"6# c #16B1BF", +"7# c #01090E", +"8# c #030101", +"9# c #040404", +"0# c #050505", +"a# c #050506", +"b# c #060606", +"c# c #03170C", +"d# c #01A341", +"e# c #01FF6A", +"f# c #14FB88", +"g# c #1EFFA2", +"h# c #16E08F", +"i# c #066E3A", +"j# c #008635", +"k# c #01A447", +"l# c #01A449", +"m# c #009F49", +"n# c #017B3A", +"o# c #02341A", +"p# c #030403", +"q# c #040001", +"r# c #040000", +"s# c #030C08", +"t# c #024C2D", +"u# c #008B54", +"v# c #029F64", +"w# c #03A168", +"x# c #038B5C", +"y# c #044D34", +"z# c #043C28", +"A# c #03724E", +"B# c #039A6C", +"C# c #039E71", +"D# c #018C66", +"E# c #014E3A", +"F# c #030B09", +"G# c #040505", +"H# c #040304", +"I# c #3A3A3A", +"J# c #0D0D0E", +"K# c #0A0A0A", +"L# c #3B3B3B", +"M# c #040506", +"N# c #031D22", +"O# c #01879F", +"P# c #039CBD", +"Q# c #0CAEC0", +"R# c #069EB8", +"S# c #007299", +"T# c #024458", +"U# c #060607", +"V# c #040403", +"W# c #02441B", +"X# c #048036", +"Y# c #065C33", +"Z# c #01170F", +"`# c #03180D", +" $ c #015625", +".$ c #009040", +"+$ c #00A24A", +"@$ c #01A34D", +"#$ c #009B4C", +"$$ c #016E38", +"%$ c #022616", +"&$ c #040102", +"*$ c #040002", +"=$ c #040203", +"-$ c #031D13", +";$ c #00613B", +">$ c #008E58", +",$ c #009B63", +"'$ c #009C67", +")$ c #00734E", +"!$ c #003B27", +"~$ c #004931", +"{$ c #00825A", +"]$ c #009C71", +"^$ c #009972", +"/$ c #01765A", +"($ c #022D24", +"_$ c #030305", +":$ c #787879", +"<$ c #434344", +"[$ c #515152", +"}$ c #747475", +"|$ c #111112", +"1$ c #070708", +"2$ c #727272", +"3$ c #5D5D5E", +"4$ c #4C4C4D", +"5$ c #909090", +"6$ c #1E1E1F", +"7$ c #222223", +"8$ c #686869", +"9$ c #09090A", +"0$ c #141415", +"a$ c #79797A", +"b$ c #737273", +"c$ c #1A1C1D", +"d$ c #050001", +"e$ c #070000", +"f$ c #000710", +"g$ c #4591AA", +"h$ c #4EA5BF", +"i$ c #00698D", +"j$ c #081D25", +"k$ c #000002", +"l$ c #2B2B2C", +"m$ c #404041", +"n$ c #575758", +"o$ c #707070", +"p$ c #777778", +"q$ c #6C6C6C", +"r$ c #545454", +"s$ c #555555", +"t$ c #565657", +"u$ c #4B4B4B", +"v$ c #343435", +"w$ c #363636", +"x$ c #373738", +"y$ c #2C2C2C", +"z$ c #1A1A1B", +"A$ c #1B1B1C", +"B$ c #1D1D1E", +"C$ c #131314", +"D$ c #080809", +"E$ c #040605", +"F$ c #040303", +"G$ c #040707", +"H$ c #040103", +"I$ c #031F10", +"J$ c #01602C", +"K$ c #009345", +"L$ c #00A24F", +"M$ c #01A351", +"N$ c #00954D", +"O$ c #016033", +"P$ c #031B11", +"Q$ c #040706", +"R$ c #050706", +"S$ c #201617", +"T$ c #395946", +"U$ c #338C67", +"V$ c #349A72", +"W$ c #34A179", +"X$ c #349674", +"Y$ c #365F4E", +"Z$ c #32473D", +"`$ c #05644A", +" % c #00926C", +".% c #019D77", +"+% c #008F70", +"@% c #015846", +"#% c #031310", +"$% c #070707", +"%% c #828283", +"&% c #181819", +"*% c #616161", +"=% c #484849", +"-% c #89898A", +";% c #5C5C5C", +">% c #B8B8B8", +",% c #3A3A3B", +"'% c #3E3E3E", +")% c #8A8A8A", +"!% c #858585", +"~% c #1A1A1A", +"{% c #040708", +"]% c #050607", +"^% c #4F5F65", +"/% c #5CB0CA", +"(% c #006D96", +"_% c #044D69", +":% c #050202", +"<% c #242425", +"[% c #39393A", +"}% c #505050", +"|% c #6D6D6D", +"1% c #838384", +"2% c #969697", +"3% c #A5A5A5", +"4% c #B1B1B1", +"5% c #B5B5B5", +"6% c #B6B6B6", +"7% c #B4B4B4", +"8% c #B2B2B2", +"9% c #B3B3B3", +"0% c #B2B2B1", +"a% c #B0B0B0", +"b% c #ADADAD", +"c% c #ACACAC", +"d% c #A7A7A7", +"e% c #A0A0A0", +"f% c #979797", +"g% c #8C8C8C", +"h% c #8C8C8D", +"i% c #8E8E8E", +"j% c #808080", +"k% c #737373", +"l% c #757575", +"m% c #636363", +"n% c #575757", +"o% c #585858", +"p% c #444445", +"q% c #393939", +"r% c #363637", +"s% c #050806", +"t% c #050907", +"u% c #050807", +"v% c #050606", +"w% c #050405", +"x% c #050003", +"y% c #032514", +"z% c #016A33", +"A% c #00974B", +"B% c #00A253", +"C% c #00A156", +"D% c #008E4E", +"E% c #02512E", +"F% c #04130D", +"G% c #080204", +"H% c #000B0A", +"I% c #AD3939", +"J% c #FF0F11", +"K% c #FB1314", +"L% c #FF1314", +"M% c #FF1313", +"N% c #FD1616", +"O% c #FF1312", +"P% c #EE3C3A", +"Q% c #135243", +"R% c #003727", +"S% c #02775B", +"T% c #009A78", +"U% c #00997A", +"V% c #007E67", +"W% c #02372E", +"X% c #050102", +"Y% c #6F6F70", +"Z% c #313132", +"`% c #464646", +" & c #181818", +".& c #848485", +"+& c #0F0F0F", +"@& c #19191A", +"#& c #505051", +"$& c #696969", +"%& c #898989", +"&& c #C0C0C0", +"*& c #535354", +"=& c #8F8F90", +"-& c #525253", +";& c #515151", +">& c #0E0E0F", +",& c #979798", +"'& c #0B0B0C", +")& c #0F0F10", +"!& c #0A0C0D", +"~& c #99908D", +"{& c #4F9FB9", +"]& c #0A7AA0", +"^& c #509FBA", +"/& c #002533", +"(& c #060000", +"_& c #050608", +":& c #4F4F4F", +"<& c #676768", +"[& c #7F7F7F", +"}& c #949494", +"|& c #A6A6A6", +"1& c #B9B9B9", +"2& c #BBBBBB", +"3& c #BABABA", +"4& c #AEAEAE", +"5& c #AAAAAA", +"6& c #A8A8A8", +"7& c #A4A4A4", +"8& c #A3A3A3", +"9& c #A2A2A2", +"0& c #A1A1A1", +"a& c #9F9F9F", +"b& c #A3A3A2", +"c& c #9E9E9E", +"d& c #9D9D9D", +"e& c #929292", +"f& c #7B7B7B", +"g& c #565656", +"h& c #303031", +"i& c #141414", +"j& c #040606", +"k& c #032D18", +"l& c #01713A", +"m& c #009950", +"n& c #00A158", +"o& c #00A05A", +"p& c #00854D", +"q& c #024329", +"r& c #070A08", +"s& c #000305", +"t& c #AF3030", +"u& c #FF0000", +"v& c #FA0000", +"w& c #FD0000", +"x& c #FC0201", +"y& c #ED2D2A", +"z& c #11A380", +"A& c #00634B", +"B& c #033025", +"C& c #024D3C", +"D& c #00896D", +"E& c #009B7E", +"F& c #00927A", +"G& c #016354", +"H& c #031A17", +"I& c #050000", +"J& c #040607", +"K& c #545455", +"L& c #59595A", +"M& c #6A6A6A", +"N& c #424242", +"O& c #666667", +"P& c #29292A", +"Q& c #787878", +"R& c #6D6D6E", +"S& c #6B6B6B", +"T& c #3D3D3E", +"U& c #737374", +"V& c #BCBCBC", +"W& c #717171", +"X& c #828282", +"Y& c #8D8D8D", +"Z& c #ADADAE", +"`& c #ABABAC", +" * c #5E5E5F", +".* c #B6B6B7", +"+* c #9B9B9B", +"@* c #838383", +"#* c #6E6E6E", +"$* c #565758", +"%* c #B4AEAC", +"&* c #48707E", +"** c #569AB1", +"=* c #ADD7E6", +"-* c #21718B", +";* c #000407", +">* c #060405", +",* c #474748", +"'* c #606061", +")* c #959595", +"!* c #BFBFBF", +"~* c #ABABAB", +"{* c #A9A9A9", +"]* c #9C9C9C", +"^* c #9A9A9A", +"/* c #999999", +"(* c #989898", +"_* c #969696", +":* c #939393", +"<* c #8B8B8B", +"[* c #727273", +"}* c #2C2C2D", +"|* c #050707", +"1* c #03371E", +"2* c #017640", +"3* c #009B56", +"4* c #01A15C", +"5* c #047849", +"6* c #003827", +"7* c #AF3732", +"8* c #FF0500", +"9* c #FB0A01", +"0* c #FE0900", +"a* c #FD0B02", +"b* c #ED332A", +"c* c #009A74", +"d* c #02886C", +"e* c #024B3C", +"f* c #032F26", +"g* c #016452", +"h* c #00947B", +"i* c #009982", +"j* c #008372", +"k* c #02433B", +"l* c #383839", +"m* c #7F7F80", +"n* c #686868", +"o* c #7B7B7C", +"p* c #8A8A8B", +"q* c #2E2E2E", +"r* c #858586", +"s* c #2F2F2F", +"t* c #252526", +"u* c #7C7C7C", +"v* c #5D5D5D", +"w* c #5A5A5B", +"x* c #818182", +"y* c #626263", +"z* c #666666", +"A* c #494949", +"B* c #777777", +"C* c #4D4D4D", +"D* c #6B6B6C", +"E* c #767677", +"F* c #919191", +"G* c #676767", +"H* c #4A4B4C", +"I* c #726A68", +"J* c #709CAB", +"K* c #62AFCA", +"L* c #5BA7C2", +"M* c #002F45", +"N* c #090000", +"O* c #0C0C0D", +"P* c #414142", +"Q* c #C4C4C4", +"R* c #C5C5C5", +"S* c #C2C2C2", +"T* c #BEBEBE", +"U* c #AFAFAF", +"V* c #8F8F8F", +"W* c #848484", +"X* c #6A6A6B", +"Y* c #4A4A4A", +"Z* c #060707", +"`* c #060506", +" = c #060003", +".= c #050A08", +"+= c #034125", +"@= c #017E48", +"#= c #009C5B", +"$= c #049F5F", +"%= c #00A167", +"&= c #AE5D49", +"*= c #FF0100", +"== c #FB0E01", +"-= c #FF0B00", +";= c #FD0D01", +">= c #EE2C23", +",= c #13614E", +"'= c #008462", +")= c #029B78", +"!= c #01725D", +"~= c #033229", +"{= c #033A31", +"]= c #017C69", +"^= c #009985", +"/= c #009484", +"(= c #016C61", +"_= c #042522", +":= c #050708", +"<= c #5B5B5B", +"[= c #808081", +"}= c #5F5F60", +"|= c #AAAAAB", +"1= c #595959", +"2= c #7D7D7E", +"3= c #636364", +"4= c #484848", +"5= c #3B3B3C", +"6= c #202021", +"7= c #424243", +"8= c #868586", +"9= c #9BA0A2", +"0= c #88B7C7", +"a= c #288DB2", +"b= c #00648A", +"c= c #061419", +"d= c #060302", +"e= c #060608", +"f= c #C8C8C8", +"g= c #232324", +"h= c #050507", +"i= c #060406", +"j= c #060002", +"k= c #050E0B", +"l= c #02492C", +"m= c #04824D", +"n= c #00A96A", +"o= c #AF694E", +"p= c #FF0300", +"q= c #FB1202", +"r= c #FF0F00", +"s= c #FD1001", +"t= c #FF0900", +"u= c #EE2F23", +"v= c #161619", +"w= c #001C15", +"x= c #02674F", +"y= c #009173", +"z= c #009078", +"A= c #025549", +"B= c #032923", +"C= c #025146", +"D= c #008C7B", +"E= c #00998A", +"F= c #00897E", +"G= c #024D48", +"H= c #050D0D", +"I= c #060708", +"J= c #CBCBCB", +"K= c #2B2B2B", +"L= c #939394", +"M= c #171718", +"N= c #7A7A7B", +"O= c #4D4D4E", +"P= c #DCDCDC", +"Q= c #161617", +"R= c #A5A5A6", +"S= c #C1C1C1", +"T= c #646464", +"U= c #5F5F5F", +"V= c #7C7C7D", +"W= c #646465", +"X= c #464647", +"Y= c #7A7A7A", +"Z= c #69696A", +"`= c #757576", +" - c #1E1E1E", +".- c #808182", +"+- c #6E6A68", +"@- c #001E34", +"#- c #0373A0", +"$- c #0077A2", +"%- c #02465F", +"&- c #070709", +"*- c #CACACA", +"=- c #B7B7B7", +"-- c #888888", +";- c #3C3C3D", +">- c #060808", +",- c #08130D", +"'- c #005D3C", +")- c #AE6148", +"!- c #FB1501", +"~- c #FF1300", +"{- c #FD1401", +"]- c #FF0D00", +"^- c #EE3323", +"/- c #161F20", +"(- c #070607", +"_- c #03372C", +":- c #017961", +"<- c #00967C", +"[- c #009A83", +"}- c #017D6D", +"|- c #033A33", +"1- c #032E29", +"2- c #016B60", +"3- c #009589", +"4- c #01968E", +"5- c #017570", +"6- c #032E2E", +"7- c #070304", +"8- c #09090B", +"9- c #49494A", +"0- c #616162", +"a- c #535355", +"b- c #555556", +"c- c #4F4F51", +"d- c #585859", +"e- c #1E1E20", +"f- c #8D8D8E", +"g- c #AFAFB0", +"h- c #6F6F6F", +"i- c #717172", +"j- c #6C6C6D", +"k- c #707071", +"l- c #656566", +"m- c #514F50", +"n- c #2E86A6", +"o- c #006F9D", +"p- c #026F98", +"q- c #041F29", +"r- c #080202", +"s- c #06080A", +"t- c #0C0C0E", +"u- c #878788", +"v- c #CCCCCC", +"w- c #C6C6C6", +"x- c #BDBDBD", +"y- c #868686", +"z- c #1A1A1C", +"A- c #070808", +"B- c #0A0204", +"C- c #000509", +"D- c #B03F33", +"E- c #FF1400", +"F- c #FB1700", +"G- c #FF1700", +"H- c #FD1801", +"I- c #FF1100", +"J- c #EE3522", +"K- c #171619", +"L- c #08090A", +"M- c #070002", +"N- c #06110F", +"O- c #024F41", +"P- c #008771", +"Q- c #009883", +"R- c #009483", +"S- c #01645A", +"T- c #042925", +"U- c #033F3A", +"V- c #017972", +"W- c #00948E", +"X- c #018E8B", +"Y- c #005655", +"Z- c #162424", +"`- c #1C1717", +" ; c #272728", +".; c #131313", +"+; c #4C4C4C", +"@; c #1C1C1D", +"#; c #474747", +"$; c #0D0D0D", +"%; c #525252", +"&; c #454545", +"*; c #292929", +"=; c #BBBBBC", +"-; c #2D2D2D", +";; c #3F3F40", +">; c #9E9E9F", +",; c #242424", +"'; c #3E4041", +"); c #9A9391", +"!; c #13323D", +"~; c #00729E", +"{; c #0276A4", +"]; c #015271", +"^; c #CCCCCB", +"/; c #B5B5B4", +"(; c #A8A8A7", +"_; c #878787", +":; c #818181", +"<; c #0A0707", +"[; c #000A0D", +"}; c #B03E31", +"|; c #FF1900", +"1; c #FB1B00", +"2; c #FF1A00", +"3; c #FD1C01", +"4; c #FF1200", +"5; c #EE4028", +"6; c #144A40", +"7; c #080104", +"8; c #06090A", +"9; c #070507", +"0; c #070003", +"a; c #04221E", +"b; c #016557", +"c; c #008F7D", +"d; c #009989", +"e; c #03897F", +"f; c #003934", +"g; c #627573", +"h; c #529A97", +"i; c #00817E", +"j; c #019494", +"k; c #7CBFC0", +"l; c #8CA3A4", +"m; c #0C0809", +"n; c #050002", +"o; c #07090A", +"p; c #3D3D3D", +"q; c #0A0A0B", +"r; c #4E4E4E", +"s; c #003E5A", +"t; c #0176A5", +"u; c #01719E", +"v; c #376070", +"w; c #A49D9A", +"x; c #C7C8C9", +"y; c #CFCFCF", +"z; c #3E3E3F", +"A; c #262627", +"B; c #151516", +"C; c #1F1F21", +"D; c #1D1D1F", +"E; c #39393B", +"F; c #353537", +"G; c #989897", +"H; c #7E7E7E", +"I; c #868685", +"J; c #08080A", +"K; c #0A0607", +"L; c #B14132", +"M; c #FF1D00", +"N; c #FB1F00", +"O; c #FF1E00", +"P; c #FD2001", +"Q; c #FF1600", +"R; c #EE462A", +"S; c #12A383", +"T; c #006A52", +"U; c #062C24", +"V; c #070204", +"W; c #070305", +"X; c #070A0B", +"Y; c #070205", +"Z; c #043932", +"`; c #01796B", +" > c #049689", +".> c #008A80", +"+> c #A9DAD8", +"@> c #627272", +"#> c #001F1D", +"$> c #1F7F7E", +"%> c #75C3C5", +"&> c #66BABD", +"*> c #408285", +"=> c #00181A", +"-> c #0A0001", +";> c #07080A", +">> c #0B0B0D", +",> c #120F0F", +"'> c #455258", +")> c #2991BA", +"!> c #2C9FCF", +"~> c #409CC2", +"{> c #BCC2C5", +"]> c #C5C4C3", +"^> c #BEBFBF", +"/> c #989899", +"(> c #333334", +"_> c #1F1F20", +":> c #010103", +"<> c #161618", +"[> c #797979", +"}> c #7D7D7D", +"|> c #040406", +"1> c #0B0707", +"2> c #B14232", +"3> c #FF2100", +"4> c #FB2200", +"5> c #FF2200", +"6> c #FD2401", +"7> c #EE4629", +"8> c #12A180", +"9> c #009B77", +"0> c #029274", +"a> c #03614F", +"b> c #06201C", +"c> c #080002", +"d> c #080607", +"e> c #080103", +"f> c #061412", +"g> c #06524A", +"h> c #007F74", +"i> c #52B6B0", +"j> c #5CB4B2", +"k> c #004543", +"l> c #384847", +"m> c #669B9C", +"n> c #56A1A4", +"o> c #48B5BC", +"p> c #007B85", +"q> c #06464B", +"r> c #070B0C", +"s> c #080102", +"t> c #080708", +"u> c #101011", +"v> c #2A2A2B", +"w> c #353536", +"x> c #B5B6B7", +"y> c #D9D2CF", +"z> c #78A8BC", +"A> c #289CCD", +"B> c #2696C6", +"C> c #649BB2", +"D> c #CDC6C3", +"E> c #C0C2C2", +"F> c #C7C7C7", +"G> c #5B5B5C", +"H> c #282828", +"I> c #373737", +"J> c #767676", +"K> c #7F7F7E", +"L> c #2D2D2E", +"M> c #07070A", +"N> c #0B0708", +"O> c #00090E", +"P> c #B14432", +"Q> c #FF2500", +"R> c #FB2600", +"S> c #FF2600", +"T> c #FD2701", +"U> c #EE4123", +"V> c #154F43", +"W> c #007257", +"X> c #029778", +"Y> c #019C80", +"Z> c #018A73", +"`> c #035448", +" , c #061514", +"., c #080003", +"+, c #080609", +"@, c #0B0306", +"#, c #001C1A", +"$, c #518E8A", +"%, c #5EBBB9", +"&, c #008584", +"*, c #3CA3A3", +"=, c #637B7C", +"-, c #596868", +";, c #49959A", +">, c #00838E", +",, c #0393A1", +"', c #026C78", +"), c #05272C", +"!, c #080507", +"~, c #07090C", +"{, c #0A0A0C", +"], c #212123", +"^, c #A6A6A7", +"/, c #CDCDCD", +"(, c #D3D3D3", +"_, c #C9C9C9", +":, c #4198BD", +"<, c #2DA0D2", +"[, c #2D91BB", +"}, c #A0B1B8", +"|, c #CAC6C5", +"1, c #C0C1C1", +"2, c #A0A0A1", +"3, c #0D0D0F", +"4, c #19191B", +"5, c #0B0808", +"6, c #000A0E", +"7, c #B14732", +"8, c #FF2900", +"9, c #FB2A00", +"0, c #FF2A00", +"a, c #FD2B01", +"b, c #EE4523", +"c, c #19171B", +"d, c #030908", +"e, c #054637", +"f, c #017D65", +"g, c #01987D", +"h, c #019B83", +"i, c #018270", +"j, c #04463F", +"k, c #070D0D", +"l, c #0B0C0D", +"m, c #565051", +"n, c #608B89", +"o, c #00605E", +"p, c #55B9B9", +"q, c #4CAAAD", +"r, c #55A4A7", +"s, c #4D5758", +"t, c #00282B", +"u, c #047783", +"v, c #0193A5", +"w, c #018698", +"x, c #03505C", +"y, c #071013", +"z, c #090101", +"A, c #080B0C", +"B, c #080B0D", +"C, c #121214", +"D, c #D5D5D5", +"E, c #C3C5C5", +"F, c #CFC9C7", +"G, c #93AFBB", +"H, c #2997C7", +"I, c #2C9BCE", +"J, c #4E94B2", +"K, c #C7C3C1", +"L, c #C1C2C3", +"M, c #CBCBCA", +"N, c #A9A9AA", +"O, c #8D8D8C", +"P, c #747474", +"Q, c #000A0F", +"R, c #B14832", +"S, c #FF2D00", +"T, c #FB2D00", +"U, c #FD2E01", +"V, c #FF2800", +"W, c #EE4823", +"X, c #192022", +"Y, c #050204", +"Z, c #0A0205", +"`, c #071513", +" ' c #044C3F", +".' c #01836D", +"+' c #019984", +"@' c #019887", +"#' c #02786C", +"$' c #053935", +"%' c #565859", +"&' c #625D5E", +"*' c #3B7070", +"=' c #63B9BB", +"-' c #56B7BB", +";' c #49A4AA", +">' c #004045", +",' c #091D1F", +"'' c #044B54", +")' c #018699", +"!' c #0192A9", +"~' c #027387", +"{' c #05323B", +"]' c #090506", +"^' c #090A0B", +"/' c #D4D4D4", +"(' c #C4C5C6", +"_' c #CCC6C3", +":' c #599CBA", +"<' c #2A9CD1", +"[' c #2991C1", +"}' c #8BA8B5", +"|' c #CDC7C5", +"1' c #BDBFC0", +"2' c #333333", +"3' c #08080B", +"4' c #00090F", +"5' c #B14A32", +"6' c #FF3100", +"7' c #FB3100", +"8' c #FD3201", +"9' c #FF2C00", +"0' c #EE4B23", +"a' c #191E21", +"b' c #090B0D", +"c' c #090508", +"d' c #090205", +"e' c #071C19", +"f' c #018675", +"g' c #019A8A", +"h' c #019488", +"i' c #057069", +"j' c #001B1A", +"k' c #545354", +"l' c #626163", +"m' c #373131", +"n' c #678788", +"o' c #558688", +"p' c #49B2B9", +"q' c #008B98", +"r' c #04727D", +"s' c #052B30", +"t' c #06252A", +"u' c #026475", +"v' c #018FA9", +"w' c #018CA7", +"x' c #035265", +"y' c #053E44", +"z' c #03A7A8", +"A' c #01B8BD", +"B' c #05646B", +"C' c #080A0C", +"D' c #0B0B0E", +"E' c #DADADA", +"F' c #CECECE", +"G' c #C4C5C5", +"H' c #CAC8C6", +"I' c #ADB8BD", +"J' c #3194C1", +"K' c #2C9BD1", +"L' c #3F90B5", +"M' c #BDBEBE", +"N' c #CECFCF", +"O' c #929293", +"P' c #4F4F50", +"Q' c #323233", +"R' c #010104", +"S' c #0C0909", +"T' c #B14C32", +"U' c #FF3500", +"V' c #FB3500", +"W' c #FD3601", +"X' c #FF3000", +"Y' c #EE4E23", +"Z' c #090B0C", +"`' c #07221F", +" ) c #035D53", +".) c #018A7D", +"+) c #049C92", +"@) c #00837C", +"#) c #539D9B", +"$) c #5B6262", +"%) c #110F10", +"&) c #403D3E", +"*) c #7B7A7A", +"=) c #777273", +"-) c #3C6D70", +";) c #006B75", +">) c #0392A1", +",) c #018C9C", +"') c #03545F", +")) c #071B1F", +"!) c #053842", +"~) c #027992", +"{) c #0096B6", +"]) c #02BED9", +"^) c #07DEED", +"/) c #04F6FE", +"() c #00F6FF", +"_) c #046876", +":) c #090C0D", +"<) c #D2D2D2", +"[) c #C2C4C4", +"}) c #74A2B7", +"|) c #2998CD", +"1) c #2B95C9", +"2) c #739FB3", +"3) c #ABA5A2", +"4) c #666768", +"5) c #0D090A", +"6) c #000A10", +"7) c #B14E32", +"8) c #FF3900", +"9) c #FB3900", +"0) c #FD3901", +"a) c #FF3400", +"b) c #EE5123", +"c) c #1A1F22", +"d) c #0B0A0C", +"e) c #0A0B0C", +"f) c #0A0B0D", +"g) c #0A0508", +"h) c #0A0507", +"i) c #072725", +"j) c #04655E", +"k) c #008A82", +"l) c #30AEAA", +"m) c #299392", +"n) c #3B8E8E", +"o) c #445152", +"p) c #585152", +"q) c #767475", +"r) c #080305", +"s) c #08171A", +"t) c #03525A", +"u) c #018292", +"v) c #0192A7", +"w) c #027C8F", +"x) c #053942", +"y) c #07161B", +"z) c #028093", +"A) c #03C9E5", +"B) c #09C2DA", +"C) c #09C4E1", +"D) c #04E0FF", +"E) c #07DCE9", +"F) c #0A191B", +"G) c #0A0608", +"H) c #D9D9D9", +"I) c #C4C4C5", +"J) c #3F93BA", +"K) c #1887BF", +"L) c #0D6894", +"M) c #081117", +"N) c #030406", +"O) c #747473", +"P) c #0E0E10", +"Q) c #B15032", +"R) c #FF3D00", +"S) c #FB3C00", +"T) c #FD3D01", +"U) c #FF3800", +"V) c #EE5423", +"W) c #1A1E22", +"X) c #050406", +"Y) c #090A0C", +"Z) c #0A0407", +"`) c #09080A", +" ! c #062F2D", +".! c #026662", +"+! c #008F8D", +"@! c #009192", +"#! c #01787C", +"$! c #023E41", +"%! c #030809", +"&! c #090304", +"*! c #090608", +"=! c #06282D", +"-! c #026573", +";! c #018AA1", +">! c #0192AB", +",! c #035567", +"'! c #028B91", +")! c #00E1EB", +"!! c #00DDEE", +"~! c #02E6F6", +"{! c #09ECFF", +"]! c #1CE9F5", +"^! c #0D2627", +"/! c #090305", +"(! c #2A2A2C", +"_! c #99999A", +":! c #D9D9D8", +"~ c #072B32", +",~ c #0B0304", +"'~ c #0A0D0F", +")~ c #DDDDDD", +"!~ c #D7D7D7", +"~~ c #D1D1D1", +"{~ c #2B2B2D", +"]~ c #0D0E10", +"^~ c #0B090A", +"/~ c #091319", +"(~ c #026091", +"_~ c #016DA8", +":~ c #03486D", +"<~ c #606060", +"[~ c #0F0F11", +"}~ c #0A0A0D", +"|~ c #0E0A0B", +"1~ c #B25633", +"2~ c #FF4900", +"3~ c #FB4700", +"4~ c #FF4800", +"5~ c #FD4801", +"6~ c #EE5D23", +"7~ c #0B090C", +"8~ c #091315", +"9~ c #05464B", +"0~ c #017C86", +"a~ c #0195A5", +"b~ c #018E9F", +"c~ c #03616E", +"d~ c #081C22", +"e~ c #083738", +"f~ c #058585", +"g~ c #057574", +"h~ c #02949D", +"i~ c #00C5DA", +"j~ c #04D1E8", +"k~ c #03CAE6", +"l~ c #03DCFB", +"m~ c #10F3FF", +"n~ c #07889A", +"o~ c #09080D", +"p~ c #0B0A0B", +"q~ c #1B1B1D", +"r~ c #8B8B8C", +"s~ c #C3C3C3", +"t~ c #0A0C0F", +"u~ c #0B0403", +"v~ c #063047", +"w~ c #01669D", +"x~ c #072739", +"y~ c #0B0504", +"z~ c #4E4E4F", +"A~ c #1C1C1E", +"B~ c #0E0B0C", +"C~ c #B25833", +"D~ c #FF4D00", +"E~ c #FB4B00", +"F~ c #FF4C00", +"G~ c #FD4C01", +"H~ c #EE6023", +"I~ c #1B2024", +"J~ c #070608", +"K~ c #0B0C0E", +"L~ c #0B0D0F", +"M~ c #0C090B", +"N~ c #0C0506", +"O~ c #091B1D", +"P~ c #054E55", +"Q~ c #028190", +"R~ c #0294A9", +"S~ c #019CB1", +"T~ c #03C6D3", +"U~ c #05F5F9", +"V~ c #01FEFF", +"W~ c #00FBFE", +"X~ c #00EBF4", +"Y~ c #02D6E9", +"Z~ c #0EE9F5", +"`~ c #13F0FE", +" { c #21F7FD", +".{ c #0B98B4", +"+{ c #03485F", +"@{ c #0C0808", +"#{ c #DBDBDB", +"${ c #8E8E8F", +"%{ c #222224", +"&{ c #04517C", +"*{ c #026DAB", +"={ c #03527F", +"-{ c #0B0D11", +";{ c #0C0C0F", +">{ c #0F0C0C", +",{ c #000B12", +"'{ c #B25A33", +"){ c #FF5100", +"!{ c #FB4F00", +"~{ c #FF4F00", +"{{ c #FD5001", +"]{ c #EE6323", +"^{ c #1C2024", +"/{ c #0D0C0E", +"({ c #0C080A", +"_{ c #092024", +":{ c #045763", +"<{ c #00B0C6", +"[{ c #06CEE3", +"}{ c #0ABFCF", +"|{ c #07D5EA", +"1{ c #03E8FF", +"2{ c #02EEFE", +"3{ c #00EFFE", +"4{ c #16FAFD", +"5{ c #28FFFF", +"6{ c #1AC3D0", +"7{ c #016E8F", +"8{ c #027E9F", +"9{ c #073341", +"0{ c #0C0404", +"a{ c #0B0D10", +"b{ c #0C0707", +"c{ c #091F2D", +"d{ c #0266A0", +"e{ c #0268A4", +"f{ c #06334C", +"g{ c #0C0604", +"h{ c #656565", +"i{ c #444444", +"j{ c #0F0C0D", +"k{ c #000A13", +"l{ c #B25C33", +"m{ c #FF5500", +"n{ c #FB5300", +"o{ c #FF5300", +"p{ c #FD5401", +"q{ c #EE6623", +"r{ c #0D0C0F", +"s{ c #0C0608", +"t{ c #0C0A0B", +"u{ c #01B5BB", +"v{ c #00CFDC", +"w{ c #02D7E9", +"x{ c #05E6F4", +"y{ c #08F4FF", +"z{ c #18E3EA", +"A{ c #067992", +"B{ c #0AA1B8", +"C{ c #0AADBE", +"D{ c #017192", +"E{ c #016B89", +"F{ c #03799A", +"G{ c #027291", +"H{ c #091D24", +"I{ c #0C0708", +"J{ c #0D0D10", +"K{ c #111113", +"L{ c #DADAD9", +"M{ c #131316", +"N{ c #0C0605", +"O{ c #054062", +"P{ c #026CAB", +"Q{ c #03598D", +"R{ c #0A151D", +"S{ c #0C090A", +"T{ c #040407", +"U{ c #6D6D6C", +"V{ c #171719", +"W{ c #050508", +"X{ c #000B14", +"Y{ c #B25E33", +"Z{ c #FF5A00", +"`{ c #FB5600", +" ] c #FF5700", +".] c #FD5801", +"+] c #FF5400", +"@] c #EE6923", +"#] c #1C2025", +"$] c #080709", +"%] c #0C1113", +"&] c #0D0000", +"*] c #069393", +"=] c #07E7F1", +"-] c #1AF7FA", +";] c #23FFFF", +">] c #20B5B6", +",] c #072735", +"'] c #027B9D", +")] c #037190", +"!] c #026B89", +"~] c #027EA0", +"{] c #03607A", +"]] c #0C0E10", +"^] c #0F0E10", +"/] c #060709", +"(] c #4B4B4D", +"_] c #E0E0E0", +":] c #DCDCDB", +"<] c #3A3A3C", +"[] c #0F0F12", +"}] c #0C0D0F", +"|] c #0D0A0C", +"1] c #0B1319", +"2] c #035C91", +"3] c #0269A9", +"4] c #053F62", +"5] c #0D0807", +"6] c #0C0D10", +"7] c #100D0D", +"8] c #B26033", +"9] c #FF5D00", +"0] c #FB5A00", +"a] c #FF5B00", +"b] c #FD5B01", +"c] c #EE6C23", +"d] c #1D2125", +"e] c #0E0D0F", +"f] c #0C1617", +"g] c #03AAB8", +"h] c #02F5FF", +"i] c #1AFCFE", +"j] c #1DE4EB", +"k] c #096D7F", +"l] c #0A0F12", +"m] c #0D1012", +"n] c #0D0808", +"o] c #06485C", +"p] c #027EA1", +"q] c #026E8C", +"r] c #0280A3", +"s] c #07485B", +"t] c #222426", +"u] c #DEDEDE", +"v] c #D7D7D6", +"w] c #0C0E11", +"x] c #0D0705", +"y] c #082E47", +"z] c #0269A8", +"A] c #025F98", +"B] c #09202E", +"C] c #0D0A0A", +"D] c #0C1114", +"E] c #0C0C10", +"F] c #100D0E", +"G] c #000A15", +"H] c #B26234", +"I] c #FF6100", +"J] c #FB5E01", +"K] c #FF5E00", +"L] c #FD5F01", +"M] c #EE6F23", +"N] c #0E0D10", +"O] c #0D080A", +"P] c #09414E", +"Q] c #0A444D", +"R] c #016F86", +"S] c #01829E", +"T] c #064B5A", +"U] c #0D0709", +"V] c #0C0E12", +"W] c #03627E", +"X] c #027A9D", +"Y] c #036884", +"Z] c #027392", +"`] c #007496", +" ^ c #446974", +".^ c #D4CDCB", +"+^ c #DBDDDE", +"@^ c #959596", +"#^ c #272729", +"$^ c #044D7C", +"%^ c #026BAD", +"&^ c #044671", +"*^ c #0D0405", +"=^ c #0E0000", +"-^ c #0C0D11", +";^ c #0E0E11", +">^ c #060609", +",^ c #111114", +"'^ c #100E0E", +")^ c #000B15", +"!^ c #B36434", +"~^ c #FF6600", +"{^ c #FB6201", +"]^ c #FF6200", +"^^ c #FD6301", +"/^ c #FF5F00", +"(^ c #EF7223", +"_^ c #0D0F11", +":^ c #0E0304", +"<^ c #09313B", +"[^ c #02829C", +"}^ c #027D96", +"|^ c #092F38", +"1^ c #0E0809", +"2^ c #0E0A0C", +"3^ c #0A2028", +"4^ c #047899", +"5^ c #017292", +"6^ c #0D708C", +"7^ c #29A1C2", +"8^ c #3FACC9", +"9^ c #B8C6CA", +"0^ c #D6D2D1", +"a^ c #CFD1D1", +"b^ c #0D0E11", +"c^ c #0E0909", +"d^ c #0A1F2E", +"e^ c #025F9D", +"f^ c #016DAC", +"g^ c #036B8C", +"h^ c #076A85", +"i^ c #0D0F14", +"j^ c #0E0A0A", +"k^ c #5E5E5E", +"l^ c #202022", +"m^ c #0D1011", +"n^ c #110E0F", +"o^ c #B36634", +"p^ c #FF6A00", +"q^ c #FB6501", +"r^ c #FD6601", +"s^ c #FF6300", +"t^ c #EF7523", +"u^ c #1E2126", +"v^ c #0F0E11", +"w^ c #0D1013", +"x^ c #0D1114", +"y^ c #0E0708", +"z^ c #064A59", +"A^ c #0287A3", +"B^ c #036E85", +"C^ c #0C191E", +"D^ c #0E0C0E", +"E^ c #100B0B", +"F^ c #002D3C", +"G^ c #128CAF", +"H^ c #369FBD", +"I^ c #3499B4", +"J^ c #2AA8CA", +"K^ c #4EA3BA", +"L^ c #D2D0D0", +"M^ c #18181A", +"N^ c #000003", +"O^ c #0E0504", +"P^ c #05577B", +"Q^ c #02A5E8", +"R^ c #02A1DA", +"S^ c #00CAFF", +"T^ c #0383BC", +"U^ c #09090C", +"V^ c #0E070C", +"W^ c #0E040A", +"X^ c #0E0C10", +"Y^ c #0E0D11", +"Z^ c #000B16", +"`^ c #B36834", +" / c #FF6E00", +"./ c #FB6901", +"+/ c #FD6A01", +"@/ c #FF6800", +"#/ c #EF7824", +"$/ c #1D2126", +"%/ c #046579", +"&/ c #0288A4", +"*/ c #045A6C", +"=/ c #0F0D10", +"-/ c #595455", +";/ c #5DABC1", +">/ c #2CA8CB", +",/ c #3496B1", +"'/ c #369FBC", +")/ c #28A7C9", +"!/ c #72ACBC", +"~/ c #DDD6D4", +"{/ c #DFDFDF", +"]/ c #000004", +"^/ c #0D0D11", +"// c #0E0C0F", +"(/ c #0D1415", +"_/ c #04BEC9", +":/ c #06A9D9", +"( c #D5D2D1", +",( c #D4D5D5", +"'( c #9C9C9D", +")( c #2C2C2F", +"!( c #0E1114", +"~( c #0F0404", +"{( c #06819D", +"]( c #00CBFF", +"^( c #08B6F3", +"/( c #1BDAFD", +"(( c #23EBFF", +"_( c #164B4F", +":( c #0D0306", +"<( c #0F1114", +"[( c #101013", +"}( c #434345", +"|( c #07070B", +"1( c #15FFE5", +"2( c #05FEC2", +"3( c #00FDA8", +"4( c #00FC9D", +"5( c #00FFA3", +"6( c #087D4D", +"7( c #0F0009", +"8( c #B36E34", +"9( c #FF7A00", +"0( c #FB7401", +"a( c #FF7500", +"b( c #FD7601", +"c( c #FF7300", +"d( c #EF8124", +"e( c #0E1013", +"f( c #0B0506", +"g( c #347E8E", +"h( c #30B7D2", +"i( c #3FA1B6", +"j( c #C6CBCC", +"k( c #D6D6D6", +"l( c #6FABBC", +"m( c #28A5C9", +"n( c #3C9DB8", +"o( c #409CB5", +"p( c #28A9CC", +"q( c #54A3B8", +"r( c #DEDAD9", +"s( c #565658", +"t( c #121215", +"u( c #0F0A0A", +"v( c #0D1F2A", +"w( c #0098E7", +"x( c #06B6FF", +"y( c #1CE4FF", +"z( c #149CB9", +"A( c #0C0A13", +"B( c #0E0F12", +"C( c #08080C", +"D( c #2F2F31", +"E( c #1BFAD6", +"F( c #13FCC5", +"G( c #0BFFAF", +"H( c #02FB91", +"I( c #01FF97", +"J( c #03E592", +"K( c #0F1918", +"L( c #100C10", +"M( c #0F1214", +"N( c #0F1013", +"O( c #121011", +"P( c #020B17", +"Q( c #B37035", +"R( c #FF7E00", +"S( c #FB7801", +"T( c #FF7900", +"U( c #FD7901", +"V( c #FF7700", +"W( c #EF8424", +"X( c #1F2228", +"Y( c #000104", +"Z( c #7B7A7B", +"`( c #D0D3D4", +" _ c #40A7BB", +"._ c #27ADC8", +"+_ c #60A8B7", +"@_ c #D8D3D2", +"#_ c #D5D5D6", +"$_ c #49A2BB", +"%_ c #2DA8CB", +"&_ c #479BB2", +"*_ c #40A5C0", +"=_ c #2DACCF", +"-_ c #548593", +";_ c #251E1E", +">_ c #000105", +",_ c #100B0C", +"'_ c #0E1922", +")_ c #0C344E", +"!_ c #055A8C", +"~_ c #005A9D", +"{_ c #09304B", +"]_ c #100B0A", +"^_ c #5C5C5D", +"/_ c #6F6F6E", +"(_ c #535353", +"__ c #0F1213", +":_ c #0F1413", +"<_ c #0F1112", +"[_ c #04C185", +"}_ c #06B87E", +"|_ c #09F1A4", +"1_ c #03FF9A", +"2_ c #0AFC9C", +"3_ c #11FFB6", +"4_ c #0D4E3B", +"5_ c #10030A", +"6_ c #100A10", +"7_ c #100C11", +"8_ c #0F1113", +"9_ c #131011", +"0_ c #020B18", +"a_ c #B37235", +"b_ c #FF8200", +"c_ c #FB7B01", +"d_ c #FF7D00", +"e_ c #FD7D01", +"f_ c #FF7B00", +"g_ c #EF8724", +"h_ c #111013", +"i_ c #0F0F13", +"j_ c #E1E3E3", +"k_ c #DDD8D7", +"l_ c #A7C0C4", +"m_ c #31AAC3", +"n_ c #29A8C2", +"o_ c #8AB4BD", +"p_ c #DDD7D6", +"q_ c #D9D6D6", +"r_ c #B4C3C8", +"s_ c #2F9EBE", +"t_ c #36A9C9", +"u_ c #428DA2", +"v_ c #1082A2", +"w_ c #006C8D", +"x_ c #091E27", +"y_ c #130E10", +"z_ c #0F1115", +"A_ c #100E11", +"B_ c #110300", +"C_ c #0A2A45", +"D_ c #0364A6", +"E_ c #044E81", +"F_ c #0F1216", +"G_ c #717170", +"H_ c #232325", +"I_ c #100710", +"J_ c #11000D", +"K_ c #100B12", +"L_ c #100F13", +"M_ c #00B675", +"N_ c #02C379", +"O_ c #04EB94", +"P_ c #06FFA1", +"Q_ c #0DFDA6", +"R_ c #22FFCC", +"S_ c #0BA770", +"T_ c #046E40", +"U_ c #0A442F", +"V_ c #0E1C19", +"W_ c #10080E", +"X_ c #B37435", +"Y_ c #FF8600", +"Z_ c #FB7F01", +"`_ c #FF8100", +" : c #FD8101", +".: c #FF7F00", +"+: c #EF8A24", +"@: c #858587", +"#: c #E1E1E1", +"$: c #D3D2D2", +"%: c #D1D3D4", +"&: c #E1D8D7", +"*: c #82B5BF", +"=: c #28AEC8", +"-: c #34A4BA", +";: c #B3C3C6", +">: c #D9D7D6", +",: c #DAD4D2", +"': c #92BCC7", +"): c #239FC3", +"!: c #066A87", +"~: c #034D63", +"{: c #0682A5", +"]: c #066580", +"^: c #0F1014", +"/: c #054F82", +"(: c #0260A2", +"_: c #0A2A42", +":: c #38383A", +"<: c #363638", +"[: c #09090D", +"}: c #101214", +"|: c #10050F", +"1: c #0D4123", +"2: c #088F35", +"3: c #0D2716", +"4: c #100A11", +"5: c #01D47E", +"6: c #07EC94", +"7: c #16FCB7", +"8: c #1CFCBA", +"9: c #1EFFC7", +"0: c #23F2CF", +"a: c #05A763", +"b: c #03A661", +"c: c #03A261", +"d: c #048E58", +"e: c #066B46", +"f: c #0B3E2D", +"g: c #0F1818", +"h: c #110A0F", +"i: c #11090F", +"j: c #110F13", +"k: c #101215", +"l: c #101114", +"m: c #131112", +"n: c #030C19", +"o: c #B47635", +"p: c #FF8A00", +"q: c #FB8301", +"r: c #FF8400", +"s: c #FD8501", +"t: c #FF8300", +"u: c #EF8D24", +"v: c #202329", +"w: c #E7E7E7", +"x: c #58ABBB", +"y: c #26AFCA", +"z: c #4EA5B7", +"A: c #CECDCD", +"B: c #E4E5E5", +"C: c #A8A3A2", +"D: c #064F65", +"E: c #0181A6", +"F: c #075972", +"G: c #055A72", +"H: c #0285A9", +"I: c #074D61", +"J: c #110B0D", +"K: c #101216", +"L: c #110B0A", +"M: c #0B2B44", +"N: c #0263A5", +"O: c #054B7C", +"P: c #28282A", +"Q: c #49494B", +"R: c #100911", +"S: c #0E2E1B", +"T: c #07EB5C", +"U: c #09FF5E", +"V: c #08A231", +"W: c #120311", +"X: c #101414", +"Y: c #00F588", +"Z: c #09FFA4", +"`: c #1DFEC2", +" < c #26FFD6", +".< c #2BFFEA", +"+< c #178D74", +"@< c #026D3B", +"#< c #039356", +"$< c #039E5E", +"%< c #03A363", +"&< c #03A567", +"*< c #039F65", +"=< c #048859", +"-< c #076244", +";< c #0B382C", +">< c #101416", +",< c #B47835", +"'< c #FF8E00", +")< c #FB8701", +"!< c #FF8800", +"~< c #FD8801", +"{< c #FF8700", +"]< c #EF9024", +"^< c #121114", +"/< c #E5E5E4", +"(< c #D3D4D4", +"_< c #DAD7D7", +":< c #C2C9CB", +"<< c #3EA9BF", +"[< c #23A8C3", +"}< c #7CB7C2", +"|< c #AFA8A7", +"1< c #141417", +"2< c #0B1014", +"3< c #066885", +"4< c #037DA0", +"5< c #074C60", +"6< c #056884", +"7< c #0281A4", +"8< c #0B3441", +"9< c #120A0B", +"0< c #101113", +"a< c #054F83", +"b< c #0260A1", +"c< c #0B2940", +"d< c #110C0C", +"e< c #17171A", +"f< c #525453", +"g< c #0F030F", +"h< c #0D4721", +"i< c #00FF4C", +"j< c #03F53F", +"k< c #09BC36", +"l< c #110E13", +"m< c #101314", +"n< c #05B166", +"o< c #03EE84", +"p< c #13F6A9", +"q< c #19DEB6", +"r< c #135F56", +"s< c #100107", +"t< c #101517", +"u< c #0C2D22", +"v< c #085134", +"w< c #047548", +"x< c #038F58", +"y< c #039C62", +"z< c #03A368", +"A< c #03A46B", +"B< c #039C69", +"C< c #04825A", +"D< c #085A43", +"E< c #0C3129", +"F< c #101115", +"G< c #12080E", +"H< c #140C0F", +"I< c #030C1A", +"J< c #B47B36", +"K< c #FF9200", +"L< c #FB8A01", +"M< c #FF8C00", +"N< c #FD8C01", +"O< c #FF8B00", +"P< c #EF9324", +"Q< c #20232A", +"R< c #101014", +"S< c #131317", +"T< c #D1D1D2", +"U< c #D2D3D4", +"V< c #DFD9D7", +"W< c #9FBCC2", +"X< c #33B1CA", +"Y< c #249EB7", +"Z< c #0E2C34", +"`< c #0D080B", +" [ c #130F11", +".[ c #0C2630", +"+[ c #03799B", +"@[ c #047090", +"#[ c #074558", +"$[ c #037899", +"%[ c #037292", +"&[ c #0E1E25", +"*[ c #110D0F", +"=[ c #120C0B", +"-[ c #0A2F4A", +";[ c #0263A7", +">[ c #064775", +",[ c #110F11", +"'[ c #111115", +")[ c #121216", +"![ c #0E0E12", +"~[ c #424244", +"{[ c #787978", +"][ c #484C4A", +"^[ c #0A000B", +"/[ c #099426", +"([ c #09B132", +"_[ c #069527", +":[ c #049023", +"<[ c #110B13", +"[[ c #111014", +"}[ c #12070F", +"|[ c #101F1A", +"1[ c #0F2C20", +"2[ c #11060B", +"3[ c #121416", +"4[ c #120C12", +"5[ c #120B11", +"6[ c #101516", +"7[ c #0D2D23", +"8[ c #085136", +"9[ c #04744B", +"0[ c #038D5C", +"a[ c #039B66", +"b[ c #03A26D", +"c[ c #03A370", +"d[ c #03996C", +"e[ c #057C5B", +"f[ c #095341", +"g[ c #112D25", +"h[ c #040A19", +"i[ c #B47933", +"j[ c #FF9700", +"k[ c #FB8E01", +"l[ c #FF9000", +"m[ c #FD9001", +"n[ c #FF8F00", +"o[ c #EF9724", +"p[ c #21242A", +"q[ c #131215", +"r[ c #151518", +"s[ c #1B1B1E", +"t[ c #A4A4A5", +"u[ c #E2E2E2", +"v[ c #CFD2D2", +"w[ c #E9E0DE", +"x[ c #56909C", +"y[ c #00809C", +"z[ c #066C82", +"A[ c #11191E", +"B[ c #120B0D", +"C[ c #093F50", +"D[ c #0282A8", +"E[ c #065E78", +"F[ c #08495C", +"G[ c #0284A7", +"H[ c #055F78", +"I[ c #111215", +"J[ c #121115", +"K[ c #121113", +"L[ c #111318", +"M[ c #055288", +"N[ c #025F9F", +"O[ c #0D2538", +"P[ c #120E0D", +"Q[ c #111216", +"R[ c #0A0A0E", +"S[ c #313133", +"T[ c #716D6F", +"U[ c #7C7178", +"V[ c #443F44", +"W[ c #0F6214", +"X[ c #133618", +"Y[ c #100A13", +"Z[ c #058F24", +"`[ c #049F26", +" } c #0F2015", +".} c #130814", +"+} c #111515", +"@} c #111416", +"#} c #120E13", +"$} c #120B12", +"%} c #121417", +"&} c #111315", +"*} c #0D2D24", +"=} c #085038", +"-} c #04724E", +";} c #038C5F", +">} c #039A6B", +",} c #03A173", +"'} c #03A175", +")} c #06966D", +"!} c #007262", +"~} c #B19345", +"{} c #FF9600", +"]} c #FB9301", +"^} c #FF9300", +"/} c #FD9301", +"(} c #EF9924", +"_} c #E5E5E5", +":} c #8D8D8F", +"<} c #100D10", +"[} c #065F72", +"}} c #038DA9", +"|} c #075364", +"1} c #120D0F", +"2} c #111316", +"3} c #065972", +"4} c #0282A7", +"5} c #084B5F", +"6} c #06576E", +"7} c #0286AB", +"8} c #094658", +"9} c #120B0C", +"0} c #111317", +"a} c #130C0B", +"b} c #0B304C", +"c} c #0264A8", +"d} c #064572", +"e} c #120F11", +"f} c #1E1E21", +"g} c #757574", +"h} c #726F71", +"i} c #6C7770", +"j} c #2AD164", +"k} c #1FE657", +"l} c #189123", +"m} c #0E2112", +"n} c #130C16", +"o} c #067E21", +"p} c #03AA28", +"q} c #0E2E17", +"r} c #130713", +"s} c #111415", +"t} c #121316", +"u} c #130D13", +"v} c #111517", +"w} c #0D2C25", +"x} c #084F3A", +"y} c #057151", +"z} c #038B64", +"A} c #06996E", +"B} c #00A384", +"C} c #AFAD56", +"D} c #FF9500", +"E} c #FB9702", +"F} c #FD9701", +"G} c #EF9C24", +"H} c #21252C", +"I} c #0D0F12", +"J} c #151519", +"K} c #0B0B0F", +"L} c #1B1B1F", +"M} c #090B0F", +"N} c #111C21", +"O} c #04758D", +"P} c #0285A1", +"Q} c #0B3944", +"R} c #130C0E", +"S} c #0F1B21", +"T} c #046F90", +"U} c #03789B", +"V} c #093D4E", +"W} c #056B88", +"X} c #0C2E3A", +"Y} c #11161D", +"Z} c #04558E", +"`} c #025D9D", +" | c #0D2335", +".| c #130E0F", +"+| c #4C4C4E", +"@| c #6F7270", +"#| c #786973", +"$| c #4F9C66", +"%| c #00FF4D", +"&| c #00F63F", +"*| c #22C746", +"=| c #2E242D", +"-| c #0A0F0F", +";| c #141317", +">| c #120714", +",| c #086C1F", +"'| c #02B529", +")| c #0C3D1A", +"!| c #130614", +"~| c #131315", +"{| c #130C12", +"]| c #0D2D26", +"^| c #0C4E3A", +"/| c #00715F", +"(| c #AFA64E", +"_| c #FF9B00", +":| c #FB9B02", +"<| c #FD9B01", +"[| c #EFA024", +"}| c #231F26", +"|| c #10070A", +"1| c #141215", +"2| c #1D1D20", +"3| c #D2D2D3", +"4| c #E3E3E3", +"5| c #6F6F71", +"6| c #131619", +"7| c #0D3039", +"8| c #0385A0", +"9| c #037790", +"0| c #0F2228", +"a| c #131013", +"b| c #0C303D", +"c| c #027FA3", +"d| c #056785", +"e| c #0A3948", +"f| c #037C9E", +"g| c #046F8D", +"h| c #101B20", +"i| c #131012", +"j| c #121317", +"k| c #121418", +"l| c #140D0C", +"m| c #0B3554", +"n| c #0264A9", +"o| c #084169", +"p| c #130F0F", +"q| c #707371", +"r| c #766C74", +"s| c #5C8E69", +"t| c #00FC3D", +"u| c #03E735", +"v| c #22B739", +"w| c #69706A", +"x| c #251E26", +"y| c #0C1010", +"z| c #141517", +"A| c #0A591D", +"B| c #01B82A", +"C| c #0B521C", +"D| c #140614", +"E| c #121315", +"F| c #130E13", +"G| c #160D10", +"H| c #03111F", +"I| c #B38939", +"J| c #FFA500", +"K| c #FB9D01", +"L| c #FF9E00", +"M| c #FD9F01", +"N| c #FF9C00", +"O| c #EEAA2A", +"P| c #186E68", +"Q| c #083532", +"R| c #121A1C", +"S| c #130B0F", +"T| c #130C10", +"U| c #16161A", +"V| c #333335", +"W| c #030307", +"X| c #130B0D", +"Y| c #094B5A", +"Z| c #028CA9", +"`| c #066175", +" 1 c #130D0F", +".1 c #084A5F", +"+1 c #0284AA", +"@1 c #085167", +"#1 c #094456", +"$1 c #0286AA", +"%1 c #07586F", +"&1 c #131114", +"*1 c #11171E", +"=1 c #045690", +"-1 c #035C9A", +";1 c #0F202F", +">1 c #130F10", +",1 c #2F2F32", +"'1 c #747274", +")1 c #70756F", +"!1 c #26A638", +"~1 c #349F2D", +"{1 c #28AE32", +"]1 c #23BB44", +"^1 c #5E6960", +"/1 c #1D161F", +"(1 c #0E1112", +"_1 c #141518", +":1 c #0B4B1B", +"<1 c #02B72A", +"[1 c #09651F", +"}1 c #131216", +"|1 c #151616", +"11 c #050B1B", +"21 c #B48435", +"31 c #FFA900", +"41 c #FBA001", +"51 c #FFA100", +"61 c #FDA202", +"71 c #FF9F00", +"81 c #EEAE2B", +"91 c #13A697", +"01 c #009584", +"a1 c #058276", +"b1 c #085B56", +"c1 c #0D3132", +"d1 c #111619", +"e1 c #140B10", +"f1 c #140D12", +"g1 c #333336", +"h1 c #6E6E70", +"i1 c #040408", +"j1 c #066579", +"k1 c #028BA7", +"l1 c #094958", +"m1 c #130D10", +"n1 c #05637F", +"o1 c #0280A5", +"p1 c #0B3C4C", +"q1 c #075870", +"r1 c #0A4051", +"s1 c #140C0E", +"t1 c #121419", +"u1 c #140D0D", +"v1 c #0265AA", +"w1 c #083F67", +"x1 c #131318", +"y1 c #363639", +"z1 c #787877", +"A1 c #727372", +"B1 c #777176", +"C1 c #637F65", +"D1 c #2E922C", +"E1 c #47922C", +"F1 c #6B7C66", +"G1 c #2DA748", +"H1 c #1DC23E", +"I1 c #4A5F4F", +"J1 c #19101B", +"K1 c #131618", +"L1 c #140715", +"M1 c #0D391A", +"N1 c #02B429", +"O1 c #077722", +"P1 c #120E15", +"Q1 c #131017", +"R1 c #121517", +"S1 c #131217", +"T1 c #171515", +"U1 c #060D1C", +"V1 c #B48836", +"W1 c #FFAD00", +"X1 c #FBA401", +"Y1 c #FDA501", +"Z1 c #FFA400", +"`1 c #EEAB27", +" 2 c #17766D", +".2 c #049787", +"+2 c #039D8F", +"@2 c #04948A", +"#2 c #067B76", +"$2 c #095755", +"%2 c #0F2D2E", +"&2 c #140F12", +"*2 c #131518", +"=2 c #131417", +"-2 c #666668", +";2 c #141316", +">2 c #141012", +",2 c #112025", +"'2 c #057A93", +")2 c #03829C", +"!2 c #0E2F38", +"~2 c #140F11", +"{2 c #141113", +"]2 c #10242C", +"^2 c #047799", +"/2 c #057293", +"(2 c #0D2F3B", +"_2 c #056E8C", +":2 c #0F2932", +"<2 c #150E10", +"[2 c #141315", +"}2 c #13171C", +"|2 c #06568E", +"12 c #045A98", +"22 c #111D29", +"32 c #141112", +"42 c #131418", +"52 c #7B7B7A", +"62 c #707270", +"72 c #797279", +"82 c #558656", +"92 c #339826", +"02 c #529336", +"a2 c #787977", +"b2 c #776F75", +"c2 c #2DA444", +"d2 c #1EC840", +"e2 c #415C47", +"f2 c #150A16", +"g2 c #131617", +"h2 c #141617", +"i2 c #0F2D18", +"j2 c #04AA28", +"k2 c #068C24", +"l2 c #121616", +"m2 c #140E16", +"n2 c #161516", +"o2 c #060C1D", +"p2 c #B48A36", +"q2 c #FFB100", +"r2 c #FBA701", +"s2 c #FDA901", +"t2 c #EFAA23", +"u2 c #22252D", +"v2 c #0B2322", +"w2 c #0B4843", +"x2 c #066960", +"y2 c #04857B", +"z2 c #03968D", +"A2 c #039B95", +"B2 c #04908D", +"C2 c #067575", +"D2 c #0A5052", +"E2 c #0F292D", +"F2 c #140B0F", +"G2 c #171216", +"H2 c #090A0E", +"I2 c #313337", +"J2 c #CCCDCE", +"K2 c #505053", +"L2 c #020206", +"M2 c #17171B", +"N2 c #141418", +"O2 c #13151A", +"P2 c #150C0F", +"Q2 c #0D3641", +"R2 c #0389A5", +"S2 c #057087", +"T2 c #121B20", +"U2 c #140E10", +"V2 c #0C3B4C", +"W2 c #0382A9", +"X2 c #085B76", +"Y2 c #0D323F", +"Z2 c #0380A2", +"`2 c #066985", +" 3 c #12181D", +".3 c #150E0E", +"+3 c #0C3453", +"@3 c #0264AA", +"#3 c #0A3A5F", +"$3 c #140F0F", +"%3 c #131419", +"&3 c #515153", +"*3 c #7A7B7A", +"=3 c #767276", +"-3 c #4A8E44", +";3 c #3F9822", +">3 c #618C45", +",3 c #78767B", +"'3 c #7A7078", +")3 c #3AA24E", +"!3 c #1ECC41", +"~3 c #2D5237", +"{3 c #110613", +"]3 c #141718", +"^3 c #150B17", +"/3 c #112218", +"(3 c #049F27", +"_3 c #059C26", +":3 c #112018", +"<3 c #140C17", +"[3 c #171516", +"}3 c #B58C36", +"|3 c #FFB500", +"13 c #FBAB01", +"23 c #FDAD01", +"33 c #EFAE24", +"43 c #24252D", +"53 c #110B0F", +"63 c #160E13", +"73 c #102728", +"83 c #0B4744", +"93 c #066964", +"03 c #048580", +"a3 c #039693", +"b3 c #03999A", +"c3 c #048C90", +"d3 c #076D72", +"e3 c #0D494F", +"f3 c #0A1F24", +"g3 c #2D292C", +"h3 c #D8D0CF", +"i3 c #E6E2E1", +"j3 c #D5D7D7", +"k3 c #D6D7D7", +"l3 c #D8D7D7", +"m3 c #D6D8D8", +"n3 c #D4D8D8", +"o3 c #D3D5D5", +"p3 c #505052", +"q3 c #050509", +"r3 c #18181C", +"s3 c #141519", +"t3 c #150D10", +"u3 c #095262", +"v3 c #038DAA", +"w3 c #08586A", +"x3 c #141013", +"y3 c #08546C", +"z3 c #0284AB", +"A3 c #0B4254", +"B3 c #0288AD", +"C3 c #095167", +"D3 c #13171E", +"E3 c #055691", +"F3 c #045894", +"G3 c #111C27", +"H3 c #141214", +"I3 c #605E61", +"J3 c #797F78", +"K3 c #439234", +"L3 c #4E9822", +"M3 c #6C8658", +"N3 c #7A757D", +"O3 c #777976", +"P3 c #7F727C", +"Q3 c #3D9F51", +"R3 c #15CB3A", +"S3 c #1A4926", +"T3 c #130715", +"U3 c #131718", +"V3 c #150E17", +"W3 c #131717", +"X3 c #069025", +"Y3 c #03AB28", +"Z3 c #0F2E19", +"`3 c #150916", +" 4 c #181617", +".4 c #070D1E", +"+4 c #B58E36", +"@4 c #FFB900", +"#4 c #FBAF01", +"$4 c #FDB001", +"%4 c #EFB124", +"&4 c #24262E", +"*4 c #15171A", +"=4 c #151115", +"-4 c #160E12", +";4 c #102729", +">4 c #0B4647", +",4 c #066869", +"'4 c #048486", +")4 c #03959A", +"!4 c #0599A1", +"~4 c #028690", +"{4 c #3EA0A8", +"]4 c #8CC1C6", +"^4 c #B8C7C9", +"/4 c #E3DBDA", +"(4 c #DEDBDA", +"_4 c #D5D8D8", +":4 c #DFD5D5", +"<4 c #E8D4D4", +"[4 c #E6D3D3", +"}4 c #DADDDD", +"|4 c #19191C", +"14 c #151417", +"24 c #066B81", +"34 c #0C3E4A", +"44 c #160F11", +"54 c #151418", +"64 c #131A20", +"74 c #056C8B", +"84 c #037CA0", +"94 c #0F2E3A", +"04 c #085A72", +"a4 c #0D3947", +"b4 c #160E10", +"c4 c #14161A", +"d4 c #16100F", +"e4 c #0B3B5F", +"f4 c #0265AB", +"g4 c #0B395B", +"h4 c #161010", +"i4 c #1B171F", +"j4 c #60715C", +"k4 c #48982D", +"l4 c #5A9527", +"m4 c #748069", +"n4 c #79777B", +"o4 c #797978", +"p4 c #797A79", +"q4 c #7F737D", +"r4 c #409B52", +"s4 c #17CF3C", +"t4 c #174C24", +"u4 c #140615", +"v4 c #151719", +"w4 c #151118", +"x4 c #087F23", +"y4 c #03B42A", +"z4 c #0E3F1B", +"A4 c #160917", +"B4 c #141618", +"C4 c #141419", +"D4 c #171617", +"E4 c #070C1E", +"F4 c #B59037", +"G4 c #FFBD00", +"H4 c #FBB201", +"I4 c #FFB400", +"J4 c #FDB401", +"K4 c #EFB424", +"L4 c #151419", +"M4 c #10272A", +"N4 c #0C484B", +"O4 c #026066", +"P4 c #14929B", +"Q4 c #2ABCC7", +"R4 c #24B5C4", +"S4 c #35B4C3", +"T4 c #58B2BE", +"U4 c #89B9BF", +"V4 c #BBC8CA", +"W4 c #E3D7D5", +"X4 c #B2E5E3", +"Y4 c #5BF0F0", +"Z4 c #67EFEF", +"`4 c #A9CFD1", +" 5 c #43373A", +".5 c #07090D", +"+5 c #151013", +"@5 c #11242C", +"#5 c #047F99", +"$5 c #047C95", +"%5 c #11252D", +"&5 c #151215", +"*5 c #0F2D39", +"=5 c #037DA2", +"-5 c #066886", +";5 c #10262F", +">5 c #057291", +",5 c #047898", +"'5 c #11242D", +")5 c #151315", +"!5 c #121C27", +"~5 c #055A98", +"{5 c #05558F", +"]5 c #131922", +"^5 c #151316", +"/5 c #161719", +"(5 c #100B17", +"_5 c #26471C", +":5 c #519D27", +"<5 c #669132", +"[5 c #787A76", +"}5 c #797879", +"|5 c #7B7D7C", +"15 c #80747E", +"25 c #419652", +"35 c #15CE3A", +"45 c #125421", +"55 c #140816", +"65 c #141719", +"75 c #151319", +"85 c #150C17", +"95 c #097021", +"05 c #02BB2B", +"a5 c #0C4F1D", +"b5 c #151018", +"c5 c #181717", +"d5 c #B59237", +"e5 c #FFC100", +"f5 c #FBB601", +"g5 c #FFB800", +"h5 c #FDB801", +"i5 c #EFB724", +"j5 c #151619", +"k5 c #15161A", +"l5 c #181317", +"m5 c #0D0509", +"n5 c #3B3B3E", +"o5 c #ACC3C4", +"p5 c #75B0B4", +"q5 c #48A9B2", +"r5 c #2EADBC", +"s5 c #23B4C7", +"t5 c #24B5CA", +"u5 c #39B0C4", +"v5 c #51B5C4", +"w5 c #0CD5DC", +"x5 c #00EDF2", +"y5 c #00EEFC", +"z5 c #075E68", +"A5 c #180C0F", +"B5 c #15171B", +"C5 c #14171B", +"D5 c #0D3D49", +"E5 c #038CA8", +"F5 c #06677D", +"G5 c #14161B", +"H5 c #0B4659", +"I5 c #0285AC", +"J5 c #0A4E63", +"K5 c #0383A7", +"L5 c #06637E", +"M5 c #14191D", +"N5 c #15161B", +"O5 c #0B3C60", +"P5 c #151618", +"Q5 c #14111A", +"R5 c #2A5A15", +"S5 c #4B8C11", +"T5 c #738F45", +"U5 c #7A797E", +"V5 c #7B7C7B", +"W5 c #7D7E7D", +"X5 c #81757E", +"Y5 c #4D945C", +"Z5 c #15D03B", +"`5 c #0F5D21", +" 6 c #150816", +".6 c #0B5C1F", +"+6 c #02BF2B", +"@6 c #0B5E1D", +"#6 c #122119", +"$6 c #12291C", +"%6 c #160A17", +"&6 c #191718", +"*6 c #080D1F", +"=6 c #B59437", +"-6 c #FFC600", +";6 c #FBBA01", +">6 c #FFBC00", +",6 c #FDBC01", +"'6 c #EFBA24", +")6 c #25272F", +"!6 c #131519", +"~6 c #B7B7B8", +"{6 c #EBE6E5", +"]6 c #E1DAD9", +"^6 c #D2D3D3", +"/6 c #AAC1C4", +"(6 c #76B1B8", +"_6 c #48AAB8", +":6 c #2FACC1", +"<6 c #08B6D1", +"[6 c #03C0D7", +"}6 c #0FBCCC", +"|6 c #0AC8E0", +"16 c #03EDFF", +"26 c #07E4E6", +"36 c #152226", +"46 c #161216", +"56 c #16171A", +"66 c #161013", +"76 c #09586A", +"86 c #028EAA", +"96 c #0A4E5D", +"06 c #16171B", +"a6 c #075F7A", +"b6 c #0F3442", +"c6 c #0C4355", +"d6 c #0289AE", +"e6 c #0A4B5E", +"f6 c #17080A", +"g6 c #17060A", +"h6 c #161418", +"i6 c #161519", +"j6 c #161416", +"k6 c #131D27", +"l6 c #055B99", +"m6 c #05548C", +"n6 c #141921", +"o6 c #161518", +"p6 c #171A19", +"q6 c #397215", +"r6 c #4E8209", +"s6 c #566637", +"t6 c #7A7880", +"u6 c #7A7B79", +"v6 c #7C7D7D", +"w6 c #7D807E", +"x6 c #867883", +"y6 c #539360", +"z6 c #13CD38", +"A6 c #0D6220", +"B6 c #160A18", +"C6 c #160B18", +"D6 c #0C4E1C", +"E6 c #03B730", +"F6 c #07EA59", +"G6 c #05FA53", +"H6 c #0D6625", +"I6 c #160B17", +"J6 c #15181A", +"K6 c #181718", +"L6 c #B59637", +"M6 c #FFC900", +"N6 c #FBBD01", +"O6 c #FFC000", +"P6 c #FDBF01", +"Q6 c #EFBD24", +"R6 c #25262F", +"S6 c #19191D", +"T6 c #828284", +"U6 c #E6E7E6", +"V6 c #E2DDDD", +"W6 c #E3DCDB", +"X6 c #AEC1C5", +"Y6 c #25BBC7", +"Z6 c #00C5D7", +"`6 c #04D5EA", +" 7 c #04DAEE", +".7 c #05EAFF", +"+7 c #18EAF5", +"@7 c #173032", +"#7 c #150F13", +"$7 c #14181D", +"%7 c #067188", +"&7 c #0386A1", +"*7 c #0F333E", +"=7 c #161114", +"-7 c #161417", +";7 c #12222A", +">7 c #047496", +",7 c #057395", +"'7 c #12232A", +")7 c #085B74", +"!7 c #0284A8", +"~7 c #068693", +"{7 c #0A888D", +"]7 c #15191E", +"^7 c #161115", +"/7 c #15171C", +"(7 c #171010", +"_7 c #0B3C61", +":7 c #0D314E", +"<7 c #171111", +"[7 c #160F19", +"}7 c #14121A", +"|7 c #1D2718", +"17 c #457E11", +"27 c #5B810F", +"37 c #1C2310", +"47 c #47464D", +"57 c #838482", +"67 c #7E817E", +"77 c #867984", +"87 c #558F60", +"97 c #10C835", +"07 c #096E1F", +"a7 c #160E19", +"b7 c #16151A", +"c7 c #170716", +"d7 c #04C547", +"e7 c #08FF63", +"f7 c #0DFF59", +"g7 c #08E146", +"h7 c #161A1B", +"i7 c #191819", +"j7 c #080D20", +"k7 c #B59837", +"l7 c #FFCD00", +"m7 c #FBC101", +"n7 c #FFC400", +"o7 c #FDC301", +"p7 c #FFC500", +"q7 c #EFC024", +"r7 c #48484B", +"s7 c #D7DBDB", +"t7 c #F0DAD9", +"u7 c #81F2F1", +"v7 c #00F8FF", +"w7 c #08E5F3", +"x7 c #17F5F9", +"y7 c #1EFFFF", +"z7 c #22CFD0", +"A7 c #16171C", +"B7 c #171114", +"C7 c #112C34", +"D7 c #04849F", +"E7 c #05758D", +"F7 c #131F25", +"G7 c #171013", +"H7 c #0E3745", +"I7 c #095872", +"J7 c #113037", +"K7 c #03AFCC", +"L7 c #05C8E4", +"M7 c #06A6B9", +"N7 c #151317", +"O7 c #16161B", +"P7 c #131D28", +"Q7 c #045C9B", +"R7 c #065086", +"S7 c #16141A", +"T7 c #161319", +"U7 c #12331D", +"V7 c #171319", +"W7 c #130D1A", +"X7 c #283E17", +"Y7 c #54890E", +"Z7 c #58720E", +"`7 c #1A1B1B", +" 8 c #0F0F14", +".8 c #858584", +"+8 c #7F8280", +"@8 c #887B85", +"#8 c #558A60", +"$8 c #0CC532", +"%8 c #07751F", +"&8 c #170F1A", +"*8 c #151A1B", +"=8 c #170D18", +"-8 c #07B53C", +";8 c #00FF45", +">8 c #05EF3F", +",8 c #18AC47", +"'8 c #17131A", +")8 c #1A1919", +"!8 c #090D20", +"~8 c #B59A37", +"{8 c #FFD200", +"]8 c #FBC501", +"^8 c #FFC700", +"/8 c #FDC701", +"(8 c #EFC324", +"_8 c #262730", +":8 c #18181B", +"<8 c #212125", +"[8 c #C5C5C6", +"}8 c #E5E6E6", +"|8 c #807B7C", +"18 c #0093A0", +"28 c #02F6FF", +"38 c #18FCFD", +"48 c #21F7FB", +"58 c #117E8E", +"68 c #150F14", +"78 c #17181C", +"88 c #17161A", +"98 c #16181D", +"08 c #180F12", +"a8 c #0D4452", +"b8 c #028DAA", +"c8 c #085D70", +"d8 c #171417", +"e8 c #17181D", +"f8 c #171214", +"g8 c #0A536A", +"h8 c #03779E", +"i8 c #078091", +"j8 c #02E0E4", +"k8 c #07C4D8", +"l8 c #04D4F3", +"m8 c #09F6FF", +"n8 c #175254", +"o8 c #160A0F", +"p8 c #17191D", +"q8 c #181212", +"r8 c #0C3C61", +"s8 c #0263A9", +"t8 c #0E3049", +"u8 c #181415", +"v8 c #16191F", +"w8 c #16181B", +"x8 c #170E18", +"y8 c #0D9738", +"z8 c #08FF4D", +"A8 c #0BA22A", +"B8 c #140B1B", +"C8 c #385914", +"D8 c #618C0C", +"E8 c #516010", +"F8 c #14131C", +"G8 c #808381", +"H8 c #887D86", +"I8 c #5E8967", +"J8 c #0EC133", +"K8 c #067C20", +"L8 c #17141A", +"M8 c #17161B", +"N8 c #15271D", +"O8 c #0B882A", +"P8 c #04D033", +"Q8 c #0E5922", +"R8 c #180A19", +"S8 c #16191B", +"T8 c #191919", +"U8 c #B59C37", +"V8 c #FFD500", +"W8 c #FBC901", +"X8 c #FFCB00", +"Y8 c #FDCA01", +"Z8 c #EFC624", +"`8 c #949495", +" 9 c #E7E7E6", +".9 c #B7B8B9", +"+9 c #151216", +"@9 c #151014", +"#9 c #104E5E", +"$9 c #11606D", +"%9 c #057C94", +"&9 c #017D9D", +"*9 c #0E414F", +"=9 c #171215", +"-9 c #095F72", +";9 c #0C4351", +">9 c #181013", +",9 c #151A1F", +"'9 c #066786", +")9 c #0382A5", +"!9 c #00DBEB", +"~9 c #05F1FE", +"{9 c #15F9FF", +"]9 c #1EECF3", +"^9 c #193337", +"/9 c #161015", +"(9 c #171416", +"_9 c #13202D", +":9 c #045E9F", +"<9 c #064C80", +"[9 c #170F11", +"}9 c #180F10", +"|9 c #17111A", +"19 c #142E1D", +"29 c #01F443", +"39 c #06FF3E", +"49 c #07D130", +"59 c #191A1C", +"69 c #496C10", +"79 c #6B8B0A", +"89 c #404813", +"99 c #100F1C", +"09 c #1D1D21", +"a9 c #818482", +"b9 c #8C8089", +"c9 c #67896E", +"d9 c #0AB92E", +"e9 c #048A20", +"f9 c #171119", +"g9 c #180919", +"h9 c #190017", +"i9 c #0B6B22", +"j9 c #05A028", +"k9 c #1A191A", +"l9 c #090D21", +"m9 c #B69E37", +"n9 c #FFD900", +"o9 c #FBCC01", +"p9 c #FFCF00", +"q9 c #FDCE01", +"r9 c #FFD100", +"s9 c #EFC924", +"t9 c #262731", +"u9 c #1A1A1F", +"v9 c #0A0A0F", +"w9 c #58585B", +"x9 c #37373B", +"y9 c #0E0F14", +"z9 c #191A1E", +"A9 c #180D10", +"B9 c #190406", +"C9 c #0F3E4C", +"D9 c #0488A6", +"E9 c #05738E", +"F9 c #14232B", +"G9 c #181417", +"H9 c #171519", +"I9 c #151D22", +"J9 c #067790", +"K9 c #04809A", +"L9 c #122B34", +"M9 c #181518", +"N9 c #122C37", +"O9 c #057093", +"P9 c #0192B6", +"Q9 c #02E8F9", +"R9 c #18FDFF", +"S9 c #1293A8", +"T9 c #10222E", +"U9 c #181315", +"V9 c #0B3E69", +"W9 c #0075BB", +"X9 c #06729B", +"Y9 c #123B4B", +"Z9 c #181011", +"`9 c #17181B", +" 0 c #18111B", +".0 c #08A228", +"+0 c #04F431", +"@0 c #05C32C", +"#0 c #16691A", +"$0 c #5B730C", +"%0 c #70850A", +"&0 c #2E3117", +"*0 c #12111C", +"=0 c #26262A", +"-0 c #818582", +";0 c #8C828A", +">0 c #67876D", +",0 c #0BAC2A", +"'0 c #05B638", +")0 c #07D84A", +"!0 c #0C7C2B", +"~0 c #180B19", +"{0 c #13331E", +"]0 c #03B42B", +"^0 c #11421F", +"/0 c #180E1B", +"(0 c #17191C", +"_0 c #1B1A1A", +":0 c #0A0D21", +"<0 c #B6A037", +"[0 c #FFDE00", +"}0 c #FBD001", +"|0 c #FFD300", +"10 c #FDD201", +"20 c #EFCC24", +"30 c #272831", +"40 c #29292D", +"50 c #E8E8E8", +"60 c #707072", +"70 c #08080D", +"80 c #171A1F", +"90 c #171B1F", +"00 c #096277", +"a0 c #0489A8", +"b0 c #0A5B6F", +"c0 c #18171B", +"d0 c #191214", +"e0 c #11323B", +"f0 c #0488A3", +"g0 c #076D82", +"h0 c #161B1F", +"i0 c #190F11", +"j0 c #0B5E71", +"k0 c #03B4D7", +"l0 c #04C7E0", +"m0 c #00E3FF", +"n0 c #02A0C2", +"o0 c #095F79", +"p0 c #161C21", +"q0 c #18161A", +"r0 c #190D0E", +"s0 c #0D6E7D", +"t0 c #04A7E2", +"u0 c #03A9E5", +"v0 c #00B5FF", +"w0 c #104362", +"x0 c #19100F", +"y0 c #17191E", +"z0 c #17191B", +"A0 c #19101C", +"B0 c #125A17", +"C0 c #125F1C", +"D0 c #13371D", +"E0 c #01B723", +"F0 c #43A513", +"G0 c #787208", +"H0 c #1B1D1B", +"I0 c #1A1A1D", +"J0 c #313134", +"K0 c #858485", +"L0 c #828783", +"M0 c #91808C", +"N0 c #569768", +"O0 c #00FE56", +"P0 c #12FE63", +"Q0 c #04FF47", +"R0 c #135224", +"S0 c #190419", +"T0 c #089027", +"U0 c #098525", +"V0 c #190E1A", +"W0 c #17171C", +"X0 c #0A0D22", +"Y0 c #B6A238", +"Z0 c #FFE200", +"`0 c #FBD401", +" a c #FFD600", +".a c #FDD601", +"+a c #FFD800", +"@a c #EFCF24", +"#a c #18181D", +"$a c #101015", +"%a c #A3A3A4", +"&a c #E4E4E3", +"*a c #A8A8A9", +"=a c #181418", +"-a c #14252D", +";a c #067B96", +">a c #04829F", +",a c #103A46", +"'a c #191114", +")a c #191013", +"!a c #0D4B5A", +"~a c #038EAB", +"{a c #0B5363", +"]a c #152C2F", +"^a c #1A060A", +"/a c #0A9B9D", +"(a c #03D3E0", +"_a c #08C1DF", +":a c #03D9FF", +"b c #197816", +",b c #19211D", +"'b c #16161D", +")b c #717A0A", +"!b c #BAD803", +"~b c #51F11D", +"{b c #19881F", +"]b c #160C1B", +"^b c #8B8B8A", +"/b c #868786", +"(b c #878887", +"_b c #898588", +":b c #42C35F", +"c c #B5B5B6", +",c c #98989A", +"'c c #0D0D12", +")c c #1B1B20", +"!c c #18191F", +"~c c #15272F", +"{c c #057C98", +"]c c #04809E", +"^c c #123440", +"/c c #181C21", +"(c c #1A080D", +"_c c #00F5F9", +":c c #07DAE5", +"d c #18151E", +",d c #1C2C1C", +"'d c #2B7C12", +")d c #0D1A1E", +"!d c #5F5C15", +"~d c #EDF002", +"{d c #D3D606", +"]d c #686A11", +"^d c #5D6619", +"/d c #19101E", +"(d c #17261D", +"_d c #05A923", +":d c #078F21", +"e c #1B131D", +",e c #124921", +"'e c #03B72B", +")e c #15331F", +"!e c #0B6E43", +"~e c #0D5F3E", +"{e c #104F37", +"]e c #114433", +"^e c #14352C", +"/e c #162A27", +"(e c #182022", +"_e c #1A151C", +":e c #1B131B", +"f c #162C2A", +",f c #182224", +"'f c #1A1B1F", +")f c #1B161B", +"!f c #1B141A", +"~f c #1C1218", +"{f c #1C1319", +"]f c #1E1618", +"^f c #0E0921", +"/f c #B7AE37", +"(f c #FFFE00", +"_f c #FBEE01", +":f c #FFF100", +"g c #0F564D", +",g c #114843", +"'g c #173D37", +")g c #092235", +"!g c #B5B83E", +"~g c #FBF201", +"{g c #FEF500", +"]g c #FDF401", +"^g c #FFF800", +"/g c #F2EA27", +"(g c #1D1D27", +"_g c #605456", +":g c #CCE8E7", +"h c #089A83", +",h c #008C8E", +"'h c #B0D858", +")h c #FBF702", +"!h c #FDF701", +"~h c #FFFD00", +"{h c #EAE822", +"]h c #3B3D47", +"^h c #94CBCB", +"/h c #12FFFF", +"(h c #00FDFD", +"_h c #18F6FA", +":h c #BDDBDD", +"i c #03C8CD", +",i c #11CBCF", +"'i c #0BEFF6", +")i c #3BEFF3", +"!i c #D5D6D6", +"~i c #B3B3B4", +"{i c #1B1D22", +"]i c #1D1417", +"^i c #104C5C", +"/i c #048BAB", +"(i c #0A6379", +"_i c #09657A", +":i c #087E98", +"j c #0B6A7F", +",j c #1A1E23", +"'j c #1C1C22", +")j c #1D171A", +"!j c #133644", +"~j c #067A9F", +"{j c #0E556D", +"]j c #1E1113", +"^j c #113E4F", +"/j c #067EA1", +"(j c #114455", +"_j c #1D1619", +":j c #085189", +"k c #2E351B", +",k c #586F17", +"'k c #202123", +")k c #1B161F", +"!k c #0C7922", +"~k c #04BC26", +"{k c #144420", +"]k c #1F1222", +"^k c #14171A", +"/k c #46484A", +"(k c #969796", +"_k c #8F9290", +":k c #9A8E97", +"l c #1C1F22", +",l c #101028", +"'l c #B1B739", +")l c #EFFB01", +"!l c #F2FF00", +"~l c #F2FE02", +"{l c #F2FC31", +"]l c #D6DAE0", +"^l c #DFD4D3", +"/l c #CBD9D9", +"(l c #84E0E8", +"_l c #8ADFE2", +":l c #40BFC9", +"m c #1D181B", +",m c #067AA0", +"'m c #143949", +")m c #1F1113", +"!m c #10485B", +"~m c #153845", +"{m c #1C1D24", +"]m c #1E1819", +"^m c #133451", +"/m c #035FA5", +"(m c #133049", +"_m c #1E191B", +":m c #161623", +"n c #1C1B24", +",n c #22261E", +"'n c #526A1B", +")n c #292E21", +"!n c #4E6D18", +"~n c #2B3124", +"{n c #1A1922", +"]n c #1D1F23", +"^n c #1E1922", +"/n c #1B2724", +"(n c #02F04A", +"_n c #0EFD54", +":n c #03FF43", +"o c #E3FE02", +",o c #E6FC31", +"'o c #C0C0C1", +")o c #1F1F25", +"!o c #1D181E", +"~o c #0C6975", +"{o c #059AAA", +"]o c #077E8B", +"^o c #192A31", +"/o c #1E1D23", +"(o c #1F181D", +"_o c #173540", +":o c #0586A5", +"p c #1B252D", +",p c #20171A", +"'p c #0F5167", +")p c #07799B", +"!p c #192F39", +"~p c #201A1E", +"{p c #0B4B7D", +"]p c #20181A", +"^p c #1E2026", +"/p c #1F2023", +"(p c #1B1726", +"_p c #344518", +":p c #3F5419", +"

Q c #05FFA8", +",Q c #05FEA1", +"'Q c #13FEB8", +")Q c #24FAD6", +"!Q c #0C9464", +"~Q c #06804D", +"{Q c #098554", +"]Q c #24A06F", +"^Q c #2AA475", +"/Q c #2BA376", +"(Q c #2BA377", +"_Q c #2BA375", +":Q c #299C84", +"R c #132674", +",R c #2B2824", +"'R c #282830", +")R c #263030", +"!R c #243B31", +"~R c #243E31", +"{R c #253831", +"]R c #253731", +"^R c #272E30", +"/R c #253931", +"(R c #234531", +"_R c #243B30", +":R c #243F31", +"S c #15FCFD", +",S c #23F2F7", +"'S c #0F7386", +")S c #252730", +"!S c #2A282E", +"~S c #29282F", +"{S c #2A262C", +"]S c #24323C", +"^S c #087A96", +"/S c #145F74", +"(S c #2A242A", +"_S c #2A2027", +":S c #2D1620", +"T c #2CC14C", +",T c #2D2C33", +"'T c #2B1F30", +")T c #176B2E", +"!T c #06C22F", +"~T c #1F482D", +"{T c #2B2230", +"]T c #282A2F", +"^T c #138156", +"/T c #089D5E", +"(T c #08804C", +"_T c #0A5E3A", +":T c #095E3A", +"U c #1E3264", +",U c #26283B", +"'U c #103EA5", +")U c #054FFF", +"!U c #21397C", +"~U c #262936", +"{U c #242D47", +"]U c #272A39", +"^U c #272A37", +"/U c #272939", +"(U c #292830", +"_U c #263331", +":U c #243D31", +"V c #2A282F", +",V c #292A32", +"'V c #2B242B", +")V c #07809E", +"!V c #1A4F61", +"~V c #2B2329", +"{V c #29222A", +"]V c #0ECACC", +"^V c #00F2FF", +"/V c #178A9E", +"(V c #2C1C22", +"_V c #2A2329", +":V c #106881", +"W c #22953E", +",W c #281E2E", +"'W c #292D31", +")W c #2A2130", +"!W c #11882E", +"~W c #07B62F", +"{W c #24362E", +"]W c #2A2531", +"^W c #0A5D3B", +"/W c #0A5A39", +"(W c #077F4D", +"_W c #0C915A", +":W c #1F5844", +"X c #252C46", +",X c #252F45", +"'X c #272D3C", +")X c #2A292D", +"!X c #2A2931", +"~X c #2A292F", +"{X c #2A2830", +"]X c #283231", +"^X c #254332", +"/X c #292E31", +"(X c #205933", +"_X c #234A32", +":X c #263D31", +"Y c #0592B2", +",Y c #04C3D4", +"'Y c #177D8A", +")Y c #2C272C", +"!Y c #0E7892", +"~Y c #19435E", +"{Y c #1F5260", +"]Y c #0AB7E1", +"^Y c #12FEFF", +"/Y c #14CDD4", +"(Y c #223A53", +"_Y c #1D506C", +":Y c #253849", +"Z c #2C222E", +",Z c #2B2730", +"'Z c #292C32", +")Z c #2A2B32", +"!Z c #2C2C33", +"~Z c #4C4C52", +"{Z c #9EEF70", +"]Z c #53FF00", +"^Z c #5EFE03", +"/Z c #5DFE01", +"(Z c #58FF00", +"_Z c #6FF026", +":Z c #3C3845", +"` c #273A31", +",` c #264031", +"'` c #283731", +")` c #224A31", +"!` c #248028", +"~` c #294730", +"{` c #1D8E22", +"]` c #177B2C", +"^` c #0F9127", +"/` c #167629", +"(` c #293031", +"_` c #2B2530", +":` c #263C39", +"<` c #187D4E", +"[` c #283430", +"}` c #2E1624", +"|` c #2B202D", +"1` c #1A6428", +"2` c #2A3833", +"3` c #2A2631", +"4` c #2B2732", +"5` c #273531", +"6` c #12891E", +"7` c #1F6526", +"8` c #2A2C31", +"9` c #9D989D", +"0` c #A3B7A6", +"a` c #1FD641", +"b` c #5EC472", +"c` c #BCAFBA", +"d` c #B4B3B4", +"e` c #AEAFAE", +"f` c #30C851", +"g` c #099C2C", +"h` c #2A2C32", +"i` c #18692E", +"j` c #1E512F", +"k` c #2C2532", +"l` c #283638", +"m` c #2D222E", +"n` c #2B2A32", +"o` c #2D2D34", +"p` c #1F1F27", +"q` c #6A6A6F", +"r` c #CACDC9", +"s` c #D6CADD", +"t` c #9CEF6F", +"u` c #4FFF00", +"v` c #5AFE03", +"w` c #59FE01", +"x` c #54FF00", +"y` c #6CF026", +"z` c #3D3946", +"A` c #2B2C33", +"B` c #2B2830", +"C` c #10717E", +"D` c #0D818F", +"E` c #135567", +"F` c #0980A0", +"G` c #078BAE", +"H` c #125B70", +"I` c #2B282E", +"J` c #145E74", +"K` c #097A96", +"L` c #26343E", +"M` c #2C282F", +"N` c #2B2A33", +"O` c #0E6356", +"P` c #204740", +"Q` c #1D4B61", +"R` c #11637C", +"S` c #2D252A", +"T` c #2B2931", +"U` c #273942", +"V` c #2A2F36", +"W` c #06D4DA", +"X` c #0CFFFF", +"Y` c #20C9D1", +"Z` c #04AACA", +"`` c #05E5FF", +" . c #18BCCC", +". . c #1F5266", +"+ . c #214B60", +"@ . c #233F58", +"# . c #11717E", +"$ . c #117A90", +"% . c #1F596E", +"& . c #21475E", +"* . c #1D4875", +"= . c #1D4872", +"- . c #204266", +"; . c #1E4565", +"> . c #0A729B", +", . c #194C86", +"' . c #1157AA", +") . c #1A5183", +"! . c #174C7C", +"~ . c #0962AF", +"{ . c #0D62A1", +"] . c #16518F", +"^ . c #144C90", +"/ . c #0C5A9E", +"( . c #1A3783", +"_ . c #183B87", +": . c #173B8E", +"< . c #1B3A7C", +"[ . c #15368E", +"} . c #0D3A8D", +"| . c #18388C", +"1 . c #183B8B", +"2 . c #183A88", +"3 . c #1B387B", +"4 . c #183F8C", +"5 . c #1B3C7B", +"6 . c #1E376F", +"7 . c #223059", +"8 . c #1F3469", +"9 . c #223859", +"0 . c #223A59", +"a . c #233257", +"b . c #25344C", +"c . c #282D40", +"d . c #243553", +"e . c #213961", +"f . c #243551", +"g . c #263249", +"h . c #28313E", +"i . c #233855", +"j . c #292E3B", +"k . c #28303F", +"l . c #2B292E", +"m . c #2A2F32", +"n . c #283833", +"o . c #254633", +"p . c #244B33", +"q . c #244A33", +"r . c #293432", +"s . c #293332", +"t . c #254731", +"u . c #283631", +"v . c #205E30", +"w . c #263B33", +"x . c #256929", +"y . c #294830", +"z . c #1B8B24", +"A . c #1B782B", +"B . c #109229", +"C . c #128327", +"D . c #293132", +"E . c #2B252E", +"F . c #0FC577", +"G . c #05FF8E", +"H . c #0BCA6E", +"I . c #188779", +"J . c #205945", +"K . c #128729", +"L . c #264F35", +"M . c #2C2434", +"N . c #1C6326", +"O . c #188A1D", +"P . c #2B3431", +"Q . c #2B2832", +"R . c #898C8C", +"S . c #C3B7C1", +"T . c #59C06C", +"U . c #23D845", +"V . c #A1B3A4", +"W . c #B8B3B7", +"X . c #B0B4B1", +"Y . c #BFB3BC", +"Z . c #62B574", +"` . c #00BB28", +" .. c #2B2932", +"... c #253830", +"+.. c #08B830", +"@.. c #12862C", +"#.. c #2E162F", +"$.. c #2C2632", +"%.. c #2A2D32", +"&.. c #2A2A33", +"*.. c #2D2D35", +"=.. c #1F1F28", +"-.. c #8A8A8E", +";.. c #9AEF6F", +">.. c #4BFF00", +",.. c #56FE03", +"'.. c #55FE01", +").. c #50FF00", +"!.. c #69F026", +"~.. c #3D3846", +"{.. c #2A2C34", +"].. c #2D252D", +"^.. c #1F454F", +"/.. c #078D9C", +"(.. c #1A5964", +"_.. c #194354", +":.. c #0784A5", +"<.. c #088AAD", +"[.. c #125970", +"}.. c #2A2B34", +"|.. c #2C262D", +"1.. c #213E4C", +"2.. c #1B4F61", +"3.. c #2D252C", +"4.. c #2D2630", +"5.. c #145652", +"6.. c #146059", +"7.. c #301F28", +"8.. c #195263", +"9.. c #11657C", +"0.. c #292F37", +"a.. c #25434B", +"b.. c #25414A", +"c.. c #2A2F37", +"d.. c #1E5E6B", +"e.. c #1B8D9E", +"f.. c #264A55", +"g.. c #1B6173", +"h.. c #18A7B7", +"i.. c #295158", +"j.. c #214558", +"k.. c #234858", +"l.. c #244253", +"m.. c #1B5D79", +"n.. c #0890A2", +"o.. c #1E5267", +"p.. c #195387", +"q.. c #185A88", +"r.. c #185F8B", +"s.. c #115DAB", +"t.. c #19508C", +"u.. c #0F6792", +"v.. c #0D669F", +"w.. c #1B4E84", +"x.. c #1A5182", +"y.. c #164590", +"z.. c #085DAC", +"A.. c #0F5598", +"B.. c #0B5FB0", +"C.. c #18438F", +"D.. c #0E548B", +"E.. c #183C84", +"F.. c #15409C", +"G.. c #1A4080", +"H.. c #173D91", +"I.. c #0B60C6", +"J.. c #0867C6", +"K.. c #174096", +"L.. c #17378F", +"M.. c #1C3779", +"N.. c #1A387F", +"O.. c #164194", +"P.. c #1B397B", +"Q.. c #233158", +"R.. c #193C85", +"S.. c #154297", +"T.. c #1C4175", +"U.. c #1F3767", +"V.. c #25314C", +"W.. c #22385B", +"X.. c #263448", +"Y.. c #203F66", +"Z.. c #25344D", +"`.. c #243851", +" +. c #282E3D", +".+. c #25354B", +"++. c #223E5A", +"@+. c #26344A", +"#+. c #272F41", +"$+. c #2A2B35", +"%+. c #2A2D33", +"&+. c #293133", +"*+. c #254434", +"=+. c #283933", +"-+. c #273A33", +";+. c #234F33", +">+. c #263E32", +",+. c #293333", +"'+. c #264033", +")+. c #234E31", +"!+. c #254831", +"~+. c #22682A", +"{+. c #284E2F", +"]+. c #1B7B28", +"^+. c #1D6E2A", +"/+. c #167B2B", +"(+. c #0D9425", +"_+. c #07DD71", +":+. c #01FF67", +"<+. c #05F9BF", +"[+. c #08FFE0", +"}+. c #02FA98", +"|+. c #07F34B", +"1+. c #10D240", +"2+. c #2B2733", +"3+. c #273D30", +"4+. c #188E1B", +"5+. c #265729", +"6+. c #2B2434", +"7+. c #21212A", +"8+. c #7F8082", +"9+. c #C2BDC1", +"0+. c #9CAF9F", +"a+. c #22D743", +"b+. c #5FC572", +"c+. c #BEB1BB", +"d+. c #BAB4B8", +"e+. c #99AE9E", +"f+. c #08BB31", +"g+. c #13822F", +"h+. c #2D2233", +"i+. c #2A2F33", +"j+. c #2D2032", +"k+. c #148030", +"l+. c #01DE41", +"m+. c #12973F", +"n+. c #264034", +"o+. c #2C2332", +"p+. c #A8A8AA", +"q+. c #D6C9DC", +"r+. c #98EF6F", +"s+. c #47FF00", +"t+. c #53FE03", +"u+. c #51FF00", +"v+. c #52FE01", +"w+. c #4DFF00", +"x+. c #66F026", +"y+. c #2C2930", +"z+. c #10727F", +"A+. c #0C8392", +"B+. c #2A2F35", +"C+. c #194757", +"D+. c #0883A4", +"E+. c #13596E", +"F+. c #2C2B32", +"G+. c #0E6E88", +"H+. c #2E262F", +"I+. c #1E4347", +"J+. c #0F655F", +"K+. c #2C2E36", +"L+. c #2E2329", +"M+. c #1A5362", +"N+. c #12667A", +"O+. c #2E262C", +"P+. c #2B2C34", +"Q+. c #273E44", +"R+. c #26434B", +"S+. c #244E55", +"T+. c #21575E", +"U+. c #244B53", +"V+. c #24444E", +"W+. c #263A45", +"X+. c #244A53", +"Y+. c #1D5B6C", +"Z+. c #1E566B", +"`+. c #1D6073", +" @. c #1E5C6E", +".@. c #214D62", +"+@. c #214C68", +"@@. c #16687A", +"#@. c #0F758F", +"$@. c #1B5181", +"%@. c #204D66", +"&@. c #165C94", +"*@. c #165695", +"=@. c #165B96", +"-@. c #1E496D", +";@. c #0C6B92", +">@. c #155590", +",@. c #1B457D", +"'@. c #1D4477", +")@. c #0F5590", +"!@. c #0D53A0", +"~@. c #0C5CA3", +"{@. c #1C387E", +"]@. c #134D84", +"^@. c #144C82", +"/@. c #18408F", +"(@. c #164693", +"_@. c #1B3D7D", +":@. c #0F62B3", +"<@. c #0E83EF", +"[@. c #1C4289", +"}@. c #163D91", +"|@. c #143FA0", +"1@. c #1347A4", +"2@. c #14409E", +"3@. c #17408F", +"4@. c #1C4079", +"5@. c #1E3B6F", +"6@. c #1E3F70", +"7@. c #1E3D72", +"8@. c #203D69", +"9@. c #1E3C71", +"0@. c #223D5D", +"a@. c #223C5B", +"b@. c #22395C", +"c@. c #213962", +"d@. c #283241", +"e@. c #25384F", +"f@. c #214262", +"g@. c #253A51", +"h@. c #233C5A", +"i@. c #25364D", +"j@. c #28313F", +"k@. c #2B2C35", +"l@. c #2A2C35", +"m@. c #2A303A", +"n@. c #273E33", +"o@. c #283B33", +"p@. c #264333", +"q@. c #244C33", +"r@. c #293533", +"s@. c #244D33", +"t@. c #244C32", +"u@. c #245032", +"v@. c #274233", +"w@. c #264632", +"x@. c #273E32", +"y@. c #24572D", +"z@. c #236A2D", +"A@. c #1D642C", +"B@. c #198328", +"C@. c #1E612E", +"D@. c #0AA123", +"E@. c #273C31", +"F@. c #2A3334", +"G@. c #2A3033", +"H@. c #2C2732", +"I@. c #0F963A", +"J@. c #09C04D", +"K@. c #04DD78", +"L@. c #03DA7D", +"M@. c #0ADF8E", +"N@. c #07F746", +"O@. c #1E9F41", +"P@. c #2C2432", +"Q@. c #2B2E32", +"R@. c #2C2734", +"S@. c #1F7023", +"T@. c #217F1E", +"U@. c #2C2D33", +"V@. c #2B2C32", +"W@. c #717174", +"X@. c #BBBEBB", +"Y@. c #BAAEB8", +"Z@. c #5BC26E", +"`@. c #21D843", +" #. c #99B09D", +".#. c #B9B4B8", +"+#. c #B2B5B3", +"@#. c #B5ACB3", +"##. c #28A144", +"$#. c #04B12B", +"%#. c #283732", +"&#. c #2C2933", +"*#. c #2C2731", +"=#. c #0CBF4D", +"-#. c #07FF69", +";#. c #06FF5F", +">#. c #05E543", +",#. c #273C32", +"'#. c #2C2733", +")#. c #2C2C34", +"!#. c #36363D", +"~#. c #C9CCC8", +"{#. c #D6C9DB", +"]#. c #96EE6F", +"^#. c #43FF00", +"/#. c #4FFE03", +"(#. c #4EFE01", +"_#. c #49FF00", +":#. c #63F126", +"<#. c #3E3A47", +"[#. c #2C2D34", +"}#. c #2B2D35", +"|#. c #2E262D", +"1#. c #204751", +"2#. c #088D9C", +"3#. c #1C5964", +"4#. c #302127", +"5#. c #184A5B", +"6#. c #0982A3", +"7#. c #0989AC", +"8#. c #13586D", +"9#. c #1C4E60", +"0#. c #22414F", +"a#. c #2E272E", +"b#. c #2B2F37", +"c#. c #2D2B32", +"d#. c #26363D", +"e#. c #0C6867", +"f#. c #28393F", +"g#. c #2C2931", +"h#. c #1C525F", +"i#. c #126A7B", +"j#. c #2C2B33", +"k#. c #2C2A32", +"l#. c #2B3037", +"m#. c #2B3038", +"n#. c #273F45", +"o#. c #2A353C", +"p#. c #26484D", +"q#. c #12F4EC", +"r#. c #254150", +"s#. c #225360", +"t#. c #1B4D7E", +"u#. c #1266A8", +"v#. c #1E4675", +"w#. c #147A9E", +"x#. c #13D8D9", +"y#. c #1A417F", +"z#. c #085AAE", +"A#. c #1C3F7E", +"B#. c #1A3C81", +"C#. c #1B3C82", +"D#. c #124291", +"E#. c #173B7F", +"F#. c #1E3474", +"G#. c #15429A", +"H#. c #1F376E", +"I#. c #1B3F7F", +"J#. c #1C3C7A", +"K#. c #1B3D7E", +"L#. c #19438A", +"M#. c #18438C", +"N#. c #1C3B7D", +"O#. c #1B417E", +"P#. c #18478D", +"Q#. c #27334B", +"R#. c #253253", +"S#. c #1A4684", +"T#. c #20406A", +"U#. c #23345B", +"V#. c #273349", +"W#. c #283044", +"X#. c #283146", +"Y#. c #243D55", +"Z#. c #273547", +"`#. c #243E56", +" $. c #283342", +".$. c #293341", +"+$. c #2B2C37", +"@$. c #292F40", +"#$. c #2B2D36", +"$$. c #2B2E38", +"%$. c #2B2F33", +"&$. c #2B2D33", +"*$. c #293934", +"=$. c #2A3234", +"-$. c #2B3133", +";$. c #2A3333", +">$. c #2A3133", +",$. c #273F33", +"'$. c #2A3434", +")$. c #264733", +"!$. c #274032", +"~$. c #283C33", +"{$. c #22592F", +"]$. c #216D2D", +"^$. c #1E652E", +"/$. c #149926", +"($. c #225831", +"_$. c #06B322", +":$. c #224B2F", +"<$. c #2E2434", +"[$. c #2D2534", +"}$. c #22562F", +"|$. c #137325", +"1$. c #2E2230", +"2$. c #128842", +"3$. c #00D750", +"4$. c #03C15C", +"5$. c #1D5937", +"6$. c #2F1C31", +"7$. c #2D2635", +"8$. c #27462E", +"9$. c #209019", +"0$. c #2B4D2C", +"a$. c #2C2535", +"b$. c #2E2E36", +"c$. c #66666B", +"d$. c #BCBEBC", +"e$. c #9EB2A1", +"f$. c #53C067", +"g$. c #BBB0B9", +"h$. c #B2B6B3", +"i$. c #BAB0B8", +"j$. c #3B6F4A", +"k$. c #00BF2A", +"l$. c #1C6831", +"m$. c #301B33", +"n$. c #254C37", +"o$. c #00FB57", +"p$. c #0BFE60", +"q$. c #11EB56", +"r$. c #03FB46", +"s$. c #1F7A3D", +"t$. c #2E1E32", +"u$. c #2B2F34", +"v$. c #24242D", +"w$. c #4D4D53", +"x$. c #D6C8DB", +"y$. c #93EE6F", +"z$. c #3FFF00", +"A$. c #4BFE03", +"B$. c #4AFE01", +"C$. c #45FF00", +"D$. c #60F126", +"E$. c #3E3947", +"F$. c #107381", +"G$. c #29323B", +"H$. c #2E252B", +"I$. c #18485A", +"J$. c #14566B", +"K$. c #2D272E", +"L$. c #28333D", +"M$. c #0A7997", +"N$. c #2D2930", +"O$. c #2B2E36", +"P$. c #2F1D25", +"Q$. c #2C242D", +"R$. c #0E6268", +"S$. c #20494F", +"T$. c #2E252E", +"U$. c #2A2E36", +"V$. c #2E252C", +"W$. c #175E6A", +"X$. c #16616E", +"Y$. c #2A3037", +"Z$. c #283E43", +"`$. c #29363C", +" %. c #2A343B", +".%. c #25494E", +"+%. c #26474C", +"@%. c #26464C", +"#%. c #206365", +"$%. c #1E6E6F", +"%%. c #1C8E8E", +"&%. c #1F8385", +"*%. c #1B687F", +"=%. c #1A6D81", +"-%. c #1F5E6E", +";%. c #20586C", +">%. c #17A1AC", +",%. c #1690AE", +"'%. c #1C537C", +")%. c #1A5B85", +"!%. c #1F466B", +"~%. c #18578D", +"{%. c #17B6BD", +"]%. c #12A6BE", +"^%. c #24345E", +"/%. c #0F5291", +"(%. c #153C88", +"_%. c #1C377B", +":%. c #1B3A86", +"<%. c #0F4096", +"[%. c #193A7A", +"}%. c #174097", +"|%. c #193D89", +"1%. c #1D3978", +"2%. c #1A4386", +"3%. c #19448A", +"4%. c #18488F", +"5%. c #1D4074", +"6%. c #1B4180", +"7%. c #19458A", +"8%. c #194587", +"9%. c #19488A", +"0%. c #1D3B75", +"a%. c #1D3D76", +"b%. c #233958", +"c%. c #1A4C86", +"d%. c #1F416D", +"e%. c #1E446F", +"f%. c #223D5F", +"g%. c #214662", +"h%. c #243F56", +"i%. c #23405B", +"j%. c #273546", +"k%. c #233B59", +"l%. c #22415D", +"m%. c #204668", +"n%. c #273246", +"o%. c #26364B", +"p%. c #2A2F38", +"q%. c #2A2D3A", +"r%. c #2A2D38", +"s%. c #29313E", +"t%. c #29323A", +"u%. c #2A3034", +"v%. c #283B34", +"w%. c #264635", +"x%. c #293735", +"y%. c #293833", +"z%. c #2A3233", +"A%. c #2B2B34", +"B%. c #225833", +"C%. c #283A33", +"D%. c #283E32", +"E%. c #254932", +"F%. c #1F662F", +"G%. c #1E732C", +"H%. c #1F5F2F", +"I%. c #0DAF25", +"J%. c #1F6E31", +"K%. c #09AB24", +"L%. c #1C632C", +"M%. c #2D2735", +"N%. c #2C3134", +"O%. c #177A24", +"P%. c #21512E", +"Q%. c #293B38", +"R%. c #196B38", +"S%. c #128836", +"T%. c #00D146", +"U%. c #0E8E55", +"V%. c #2A2E34", +"W%. c #23791F", +"X%. c #297620", +"Y%. c #2C2935", +"Z%. c #23232C", +"`%. c #56565B", +" &. c #BCBCBB", +".&. c #B1B4B2", +"+&. c #BDB1BB", +"@&. c #5CC26F", +"#&. c #1FD741", +"$&. c #97B09C", +"%&. c #B9B4B9", +"&&. c #565A5C", +"*&. c #03A027", +"=&. c #10A132", +"-&. c #283D34", +";&. c #03F24B", +">&. c #00F946", +",&. c #02EE3C", +"'&. c #04E03B", +")&. c #225937", +"!&. c #2E2133", +"~&. c #2F2F36", +"{&. c #6B6B6F", +"]&. c #C8CBC7", +"^&. c #93F070", +"/&. c #3AFF00", +"(&. c #48FE03", +"_&. c #46FE01", +":&. c #41FF00", +"<&. c #5DF126", +"[&. c #3F3A48", +"}&. c #2C2D35", +"|&. c #214853", +"1&. c #1C5661", +"2&. c #2E272F", +"3&. c #2E2930", +"4&. c #194859", +"5&. c #0882A4", +"6&. c #0889AC", +"7&. c #185164", +"8&. c #2E272D", +"9&. c #165E74", +"0&. c #0A7B98", +"a&. c #2A2E38", +"b&. c #2D2931", +"c&. c #1F787D", +"d&. c #0E878F", +"e&. c #19525C", +"f&. c #2F2830", +"g&. c #2F252D", +"h&. c #146972", +"i&. c #195A64", +"j&. c #2F242C", +"k&. c #2C2B34", +"l&. c #2A363C", +"m&. c #283E42", +"n&. c #235656", +"o&. c #206664", +"p&. c #235657", +"q&. c #254D4D", +"r&. c #254B4D", +"s&. c #23595D", +"t&. c #225A5A", +"u&. c #216164", +"v&. c #197F88", +"w&. c #1B607E", +"x&. c #196C88", +"y&. c #1D6277", +"z&. c #1F5871", +"A&. c #1B6581", +"B&. c #156D7F", +"C&. c #21476D", +"D&. c #1C597B", +"E&. c #1C557D", +"F&. c #1B6287", +"G&. c #12F1E9", +"H&. c #147293", +"I&. c #25345C", +"J&. c #116D9C", +"K&. c #06A5DC", +"L&. c #22406A", +"M&. c #1B4583", +"N&. c #085DC1", +"O&. c #1D3E76", +"P&. c #193E8D", +"Q&. c #1A4087", +"R&. c #1E3873", +"S&. c #1F3A6F", +"T&. c #1C3F7C", +"U&. c #174895", +"V&. c #1C407F", +"W&. c #174A95", +"X&. c #223562", +"Y&. c #203C69", +"Z&. c #1D4476", +"`&. c #1B4782", +" *. c #1D4377", +".*. c #214068", +"+*. c #1F4670", +"@*. c #1F4572", +"#*. c #214067", +"$*. c #224463", +"%*. c #24445A", +"&*. c #244257", +"**. c #283347", +"=*. c #20496A", +"-*. c #214865", +";*. c #263D4E", +">*. c #27354B", +",*. c #293241", +"'*. c #243E57", +")*. c #283647", +"!*. c #293442", +"~*. c #2A313D", +"{*. c #2B303A", +"]*. c #2C2D36", +"^*. c #2A3734", +"/*. c #293C35", +"(*. c #254D31", +"_*. c #293931", +":*. c #2B3435", +"<*. c #264A34", +"[*. c #2A3634", +"}*. c #254D33", +"|*. c #293C33", +"1*. c #293C34", +"2*. c #235532", +"3*. c #225A32", +"4*. c #283F33", +"5*. c #245132", +"6*. c #17822B", +"7*. c #215830", +"8*. c #149627", +"9*. c #265432", +"0*. c #0CA326", +"a*. c #157E2A", +"b*. c #2E2635", +"c*. c #2A3534", +"d*. c #2B3034", +"e*. c #2C2E34", +"f*. c #2E2636", +"g*. c #25562B", +"h*. c #1B7522", +"i*. c #2E2735", +"j*. c #225C34", +"k*. c #1E6D34", +"l*. c #1B6723", +"m*. c #10933A", +"n*. c #00CE50", +"o*. c #16734A", +"p*. c #2F1C33", +"q*. c #29522B", +"r*. c #289018", +"s*. c #2E4230", +"t*. c #2C2735", +"u*. c #2E2E35", +"v*. c #25252E", +"w*. c #B2B4B3", +"x*. c #BAB5B9", +"y*. c #9EB2A2", +"z*. c #23D744", +"A*. c #54C268", +"B*. c #BAAFB8", +"C*. c #BCC1BC", +"D*. c #635766", +"E*. c #0F6827", +"F*. c #08C532", +"G*. c #224D31", +"H*. c #301E34", +"I*. c #1D7238", +"J*. c #07D83C", +"K*. c #07C335", +"L*. c #07D438", +"M*. c #2D2C35", +"N*. c #2F2F37", +"O*. c #D2C4D7", +"P*. c #84E364", +"Q*. c #38FF00", +"R*. c #43FD03", +"S*. c #42FE01", +"T*. c #3CFF00", +"U*. c #5AF126", +"V*. c #3F3B48", +"W*. c #2D2E35", +"X*. c #2D2C34", +"Y*. c #0E7886", +"Z*. c #0F7C8A", +"`*. c #2E292F", +" =. c #1C4555", +".=. c #0981A2", +"+=. c #2F282E", +"@=. c #253B48", +"#=. c #077D9C", +"$=. c #147485", +"%=. c #2A3C42", +"&=. c #2E252D", +"*=. c #2C3139", +"==. c #2F212A", +"-=. c #216369", +";=. c #04FFFF", +">=. c #2A464E", +",=. c #2D262E", +"'=. c #2F262E", +")=. c #15696F", +"!=. c #195D64", +"~=. c #2F2930", +"{=. c #293E41", +"]=. c #254E4D", +"^=. c #293D41", +"/=. c #293E42", +"(=. c #264B4C", +"_=. c #274648", +":=. c #274749", +"<=. c #1F6C66", +"[=. c #1F6A68", +"}=. c #1E7270", +"|=. c #1F6B6B", +"1=. c #235A5D", +"2=. c #1C7479", +"3=. c #167C94", +"4=. c #196E89", +"5=. c #1E6374", +"6=. c #1F556F", +"7=. c #1C557F", +"8=. c #0A8B9F", +"9=. c #22445B", +"0=. c #1D5A7E", +"a=. c #20526E", +"b=. c #1899AF", +"c=. c #189BB0", +"d=. c #1F406E", +"e=. c #0EB5C7", +"f=. c #11A1BF", +"g=. c #1C3F7D", +"h=. c #184983", +"i=. c #135685", +"j=. c #135785", +"k=. c #193C83", +"l=. c #195A8B", +"m=. c #0AABE6", +"n=. c #204577", +"o=. c #17418E", +"p=. c #0873EC", +"q=. c #1C4B95", +"r=. c #203569", +"s=. c #223864", +"t=. c #1E3975", +"u=. c #21366A", +"v=. c #1D3E7C", +"w=. c #1A4189", +"x=. c #16489A", +"y=. c #164B9A", +"z=. c #174694", +"A=. c #1C447E", +"B=. c #194A8B", +"C=. c #145BA3", +"D=. c #1B4D82", +"E=. c #1D477B", +"F=. c #194C8C", +"G=. c #1A548A", +"H=. c #263C53", +"I=. c #223D63", +"J=. c #283A4A", +"K=. c #254156", +"L=. c #273B4C", +"M=. c #253C58", +"N=. c #224764", +"O=. c #244059", +"P=. c #2C3038", +"Q=. c #253B55", +"R=. c #293547", +"S=. c #2B333C", +"T=. c #273C4D", +"U=. c #293643", +"V=. c #2D2C36", +"W=. c #2C3234", +"X=. c #2A3A35", +"Y=. c #284033", +"Z=. c #245A47", +"`=. c #226145", +" -. c #2B3132", +".-. c #2A3B35", +"+-. c #274734", +"@-. c #2A3834", +"#-. c #293D34", +"$-. c #284233", +"%-. c #284234", +"&-. c #284134", +"*-. c #0ADA41", +"=-. c #1A9138", +"--. c #119726", +";-. c #246435", +">-. c #109629", +",-. c #138628", +"'-. c #2F2436", +")-. c #2C3135", +"!-. c #2D2B35", +"~-. c #2D3135", +"{-. c #1E771E", +"]-. c #274C2D", +"^-. c #2D3036", +"/-. c #227130", +"(-. c #1C7626", +"_-. c #23572A", +":-. c #2C2835", +"<-. c #0AA93F", +"[-. c #00C452", +"}-. c #20543F", +"|-. c #2B7C1A", +"1-. c #2F6B24", +"2-. c #2D2737", +"3-. c #3D3D44", +"4-. c #B1B1B2", +"5-. c #B6B5B5", +"6-. c #BDB2BB", +"7-. c #1FD841", +"8-. c #95AF9A", +"9-. c #C5C0C4", +"0-. c #757078", +"a-. c #1C3529", +"b-. c #0AC033", +"c-. c #158230", +"d-. c #2F2334", +"e-. c #2E2634", +"f-. c #2A2E32", +"g-. c #12752B", +"h-. c #06C932", +"i-. c #11782B", +"j-. c #2D2633", +"k-. c #2C2C35", +"l-. c #A7A7A9", +"m-. c #CCD0CB", +"n-. c #C4B5C9", +"o-. c #68C84B", +"p-. c #39FF00", +"q-. c #3FFC02", +"r-. c #3EFF00", +"s-. c #3FFE01", +"t-. c #57F126", +"u-. c #1E4E59", +"v-. c #1F4F5A", +"w-. c #2E262E", +"x-. c #2C2F38", +"y-. c #30272D", +"z-. c #1E4251", +"A-. c #0981A3", +"B-. c #0888AC", +"C-. c #194F62", +"D-. c #2F272E", +"E-. c #2D2A32", +"F-. c #2A383F", +"G-. c #08A2B8", +"H-. c #00CCE5", +"I-. c #03DBED", +"J-. c #254852", +"K-. c #2E2830", +"L-. c #2D2831", +"M-. c #28474D", +"N-. c #06BAC9", +"O-. c #18ADB9", +"P-. c #2E373E", +"Q-. c #2F252E", +"R-. c #156B6E", +"S-. c #195E63", +"T-. c #283E41", +"U-. c #20645B", +"V-. c #25504E", +"W-. c #27484A", +"X-. c #254D4E", +"Y-. c #206962", +"Z-. c #216262", +"`-. c #1E6E69", +" ;. c #188982", +".;. c #206561", +"+;. c #1C717A", +"@;. c #1F5772", +"#;. c #205769", +"$;. c #205269", +"%;. c #205F6D", +"&;. c #1E5B72", +"*;. c #14748C", +"=;. c #127683", +"-;. c #28374D", +";;. c #1B5986", +">;. c #13E4E0", +",;. c #12F0E9", +"';. c #13E1E1", +");. c #14C7D2", +"!;. c #0FAEBD", +"~;. c #166596", +"{;. c #174796", +"];. c #0C63A0", +"^;. c #0599D0", +"/;. c #0894D3", +"(;. c #1B3589", +"_;. c #0D4C9E", +":;. c #134893", +"<;. c #164B98", +"[;. c #0951BB", +"};. c #1C3D83", +"|;. c #183E8E", +"1;. c #173F94", +"2;. c #193D8E", +"3;. c #143FA4", +"4;. c #1342A7", +"5;. c #19408B", +"6;. c #1B4184", +"7;. c #1C4180", +"8;. c #1A4A88", +"9;. c #15539C", +"0;. c #15589C", +"a;. c #175294", +"b;. c #1D4379", +"c;. c #1E4976", +"d;. c #1B4D84", +"e;. c #1C4C7D", +"f;. c #1C4E7E", +"g;. c #1C4C7C", +"h;. c #214466", +"i;. c #20436C", +"j;. c #254055", +"k;. c #28354A", +"l;. c #273D4F", +"m;. c #283546", +"n;. c #263F52", +"o;. c #24415C", +"p;. c #263D53", +"q;. c #254256", +"r;. c #2A3340", +"s;. c #2D2A34", +"t;. c #293B3C", +"u;. c #273D49", +"v;. c #254847", +"w;. c #283E33", +"x;. c #0CCA77", +"y;. c #0FCF6D", +"z;. c #2B3331", +"A;. c #274735", +"B;. c #2A3735", +"C;. c #293B35", +"D;. c #293F34", +"E;. c #274534", +"F;. c #293E34", +"G;. c #284334", +"H;. c #244F32", +"I;. c #1C8A3B", +"J;. c #24673A", +"K;. c #0BB228", +"L;. c #208437", +"M;. c #1B6D2D", +"N;. c #0E9825", +"O;. c #2D2F34", +"P;. c #2E2637", +"Q;. c #275427", +"R;. c #22701D", +"S;. c #2E2537", +"T;. c #2A5030", +"U;. c #228126", +"V;. c #1E7323", +"W;. c #263D33", +"X;. c #03BE47", +"Y;. c #08B848", +"Z;. c #317E1A", +"`;. c #2F3832", +" >. c #2C2A35", +".>. c #38383F", +"+>. c #B4B5B4", +"@>. c #BBB6BA", +"#>. c #9FB3A3", +"$>. c #52C167", +"%>. c #C7BCC4", +"&>. c #7B7E7F", +"*>. c #241D2B", +"=>. c #148F31", +"->. c #0AB12E", +";>. c #273D33", +">>. c #302034", +",>. c #2E2A36", +"'>. c #0E8A2C", +")>. c #07C532", +"!>. c #37373F", +"~>. c #BEBEBF", +"{>. c #D0D3CE", +"]>. c #AD9EB4", +"^>. c #57B93D", +"/>. c #3BFC01", +"(>. c #3BFE01", +"_>. c #35FF00", +":>. c #54F126", +"<>. c #403B49", +"[>. c #2D2D36", +"}>. c #2C2E37", +"|>. c #0E7A88", +"1>. c #107A88", +"2>. c #2C2F37", +"3>. c #30282F", +"4>. c #1F4251", +"5>. c #194E61", +"6>. c #2F282F", +"7>. c #2D2E37", +"8>. c #2D3038", +"9>. c #30212A", +"0>. c #21676D", +"a>. c #04E8EC", +"b>. c #0ABDD5", +"c>. c #01F3FF", +"d>. c #1E969A", +"e>. c #2F1D26", +"f>. c #2C333B", +"g>. c #312028", +"h>. c #166675", +"i>. c #1E515E", +"j>. c #30222A", +"k>. c #2D2F38", +"l>. c #2D2F37", +"m>. c #30252F", +"n>. c #156B6C", +"o>. c #196365", +"p>. c #2F2C32", +"q>. c #274748", +"r>. c #26504C", +"s>. c #21645B", +"t>. c #255350", +"u>. c #264E4C", +"v>. c #245555", +"w>. c #206864", +"x>. c #19897B", +"y>. c #21635E", +"z>. c #216560", +"A>. c #225E5E", +"B>. c #23575A", +"C>. c #234E62", +"D>. c #1F6073", +"E>. c #1C6D7C", +"F>. c #225865", +"G>. c #244F5D", +"H>. c #1C6783", +"I>. c #244761", +"J>. c #0C8C9D", +"K>. c #1E5765", +"L>. c #1C879A", +"M>. c #12F3EB", +"N>. c #18AAB8", +"O>. c #0CA4C6", +"P>. c #0AD6FB", +"Q>. c #11A1D1", +"R>. c #1B3A89", +"S>. c #184A87", +"T>. c #15477C", +"U>. c #0D5DC4", +"V>. c #0985FF", +"W>. c #21427A", +"X>. c #1441A0", +"Y>. c #1B3A88", +"Z>. c #163F9D", +"`>. c #1A3D8C", +" ,. c #16429C", +".,. c #173F95", +"+,. c #1B4286", +"@,. c #1547A1", +"#,. c #174795", +"$,. c #1D497F", +"%,. c #1A4E8A", +"&,. c #1A4A8B", +"*,. c #19528F", +"=,. c #165A9A", +"-,. c #1B5287", +";,. c #1D4E7D", +">,. c #1463A3", +",,. c #175C97", +"',. c #1C5581", +"),. c #273B52", +"!,. c #253E5B", +"~,. c #264055", +"{,. c #264156", +"],. c #293849", +"^,. c #24485E", +"/,. c #28364C", +"(,. c #234B62", +"_,. c #264154", +":,. c #2C2E38", +"<,. c #2A3442", +"[,. c #293746", +"},. c #2A3B3B", +"|,. c #293B41", +"1,. c #2B3440", +"2,. c #1C743F", +"3,. c #16863F", +"4,. c #2B3835", +"5,. c #2A3D36", +"6,. c #293E36", +"7,. c #2A3C35", +"8,. c #274B34", +"9,. c #245534", +"0,. c #235C33", +"a,. c #206A32", +"b,. c #2B3233", +"c,. c #264E33", +"d,. c #0CA52A", +"e,. c #1A8E38", +"f,. c #215F31", +"g,. c #0AA424", +"h,. c #2C2F35", +"i,. c #2E2C36", +"j,. c #2E2F35", +"k,. c #2B2637", +"l,. c #2C3335", +"m,. c #257918", +"n,. c #2B462F", +"o,. c #2E2B38", +"p,. c #2B6F26", +"q,. c #20891E", +"r,. c #29472F", +"s,. c #2E2837", +"t,. c #302335", +"u,. c #205637", +"v,. c #05D940", +"w,. c #198C3A", +"x,. c #2E2737", +"y,. c #2D2F35", +"z,. c #A2A2A3", +"A,. c #B5B4B5", +"B,. c #B4B6B4", +"C,. c #BEB2BC", +"D,. c #5DC270", +"E,. c #1DD740", +"F,. c #A0BBA4", +"G,. c #969398", +"H,. c #281B2E", +"I,. c #1E6A37", +"J,. c #00F04C", +"K,. c #02F04F", +"L,. c #15973D", +"M,. c #2F2C37", +"N,. c #0B9B2D", +"O,. c #07C131", +"P,. c #19592B", +"Q,. c #2F2636", +"R,. c #2D2F36", +"S,. c #4F4F55", +"T,. c #D3D7D2", +"U,. c #918298", +"V,. c #4EB236", +"W,. c #36FF00", +"X,. c #36FC01", +"Y,. c #37FE01", +"Z,. c #31FF00", +"`,. c #51F126", +" '. c #2E2F36", +".'. c #1F505A", +"+'. c #088D9D", +"@'. c #204E59", +"#'. c #30292F", +"$'. c #2E2E37", +"%'. c #2D2E36", +"&'. c #28464E", +"*'. c #01F2F4", +"='. c #08FFFF", +"-'. c #18FFFF", +";'. c #2A6D76", +">'. c #2F222A", +",'. c #2D3139", +"''. c #2F2B32", +")'. c #127783", +"!'. c #234B55", +"~'. c #302930", +"{'. c #302931", +"]'. c #127673", +"^'. c #1D5B5B", +"/'. c #2C3A3C", +"('. c #274C4A", +"_'. c #2D3238", +":'. c #264F4B", +"<'. c #235E56", +"['. c #245A55", +"}'. c #1D796A", +"|'. c #255553", +"1'. c #1E7368", +"2'. c #264F4F", +"3'. c #1E6F6E", +"4'. c #1D6D73", +"5'. c #205C6D", +"6'. c #24515C", +"7'. c #235261", +"8'. c #21576B", +"9'. c #20536F", +"0'. c #224869", +"a'. c #186A8A", +"b'. c #0C809A", +"c'. c #14D2D5", +"d'. c #14CDD6", +"e'. c #1067A7", +"f'. c #0A5BAD", +"g'. c #15449D", +"h'. c #1A3E8E", +"i'. c #0E5F97", +"j'. c #1059AA", +"k'. c #1956B1", +"l'. c #1445A6", +"m'. c #1C3D81", +"n'. c #1D3E80", +"o'. c #1A3A8A", +"p'. c #1A3D8B", +"q'. c #1D3D7F", +"r'. c #21386E", +"s'. c #1D3F7D", +"t'. c #1543A1", +"u'. c #19438F", +"v'. c #1552A1", +"w'. c #174C96", +"x'. c #1A488A", +"y'. c #1361AA", +"z'. c #1557A0", +"A'. c #16579E", +"B'. c #175F99", +"C'. c #1C5584", +"D'. c #1B5787", +"E'. c #17639A", +"F'. c #205171", +"G'. c #1F5176", +"H'. c #234962", +"I'. c #1D557D", +"J'. c #25455B", +"K'. c #2A3947", +"L'. c #264658", +"M'. c #2A3944", +"N'. c #2C323E", +"O'. c #293C4B", +"P'. c #2A3844", +"Q'. c #2B3541", +"R'. c #2C343A", +"S'. c #293F3E", +"T'. c #293E40", +"U'. c #2B3140", +"V'. c #294534", +"W'. c #168A3B", +"X'. c #2C3136", +"Y'. c #2C3436", +"Z'. c #2B3836", +"`'. c #2C3536", +" ). c #284535", +".). c #274A35", +"+). c #245B33", +"@). c #255334", +"#). c #206A33", +"$). c #1E7632", +"%). c #226534", +"&). c #109B2C", +"*). c #15B73D", +"=). c #265233", +"-). c #08AD24", +";). c #2F2A36", +">). c #2E2D35", +",). c #2B2936", +"'). c #353934", +")). c #316E19", +"!). c #2B5F13", +"~). c #301834", +"{). c #31422E", +"]). c #2A891A", +"^). c #266826", +"/). c #2F2937", +"(). c #2D2C38", +"_). c #345D22", +":). c #20A227", +"<). c #00D752", +"[). c #19633F", +"}). c #312434", +"|). c #99999B", +"1). c #9FB2A3", +"2). c #21D543", +"3). c #5ACC6F", +"4). c #9E949E", +"5). c #0CCB51", +"6). c #08FF6B", +"7). c #10F964", +"8). c #00FF4B", +"9). c #1B8339", +"0). c #312035", +"a). c #2C3235", +"b). c #302A37", +"c). c #24392F", +"d). c #0BAA2F", +"e). c #07BA30", +"f). c #1C4C2C", +"g). c #312637", +"h). c #2F2F38", +"i). c #57575D", +"j). c #D0D0CF", +"k). c #71627A", +"l). c #4CB236", +"m). c #32FF00", +"n). c #33FC01", +"o). c #33FE01", +"p). c #2DFF00", +"q). c #4EF126", +"r). c #0E7B8A", +"s). c #127583", +"t). c #2E2C34", +"u). c #0887AB", +"v). c #194D5F", +"w). c #205E6D", +"x). c #19A3B5", +"y). c #14ABBF", +"z). c #125E77", +"A). c #2F2A31", +"B). c #2F2A32", +"C). c #13747E", +"D). c #25444D", +"E). c #2F2831", +"F). c #2F2A33", +"G). c #0F8178", +"H). c #187969", +"I). c #235C54", +"J). c #235D56", +"K). c #245852", +"L). c #1F6F61", +"M). c #1D7968", +"N). c #206B5F", +"O). c #21685D", +"P). c #1E716B", +"Q). c #1F6F68", +"R). c #1C7674", +"S). c #168B8F", +"T). c #224669", +"U). c #204076", +"V). c #107595", +"W). c #0F669C", +"X). c #185399", +"Y). c #17659C", +"Z). c #167DAB", +"`). c #168FB7", +" !. c #14C8D3", +".!. c #0CB2D7", +"+!. c #115793", +"@!. c #164E8A", +"#!. c #1C3386", +"$!. c #0E8CB9", +"%!. c #0C9BE2", +"&!. c #183290", +"*!. c #1A408D", +"=!. c #1F3873", +"-!. c #1242AF", +";!. c #1A3A89", +">!. c #1B3B88", +",!. c #194890", +"'!. c #1A4489", +")!. c #194590", +"!!. c #223B67", +"~!. c #213B6D", +"{!. c #1D487E", +"]!. c #194C8F", +"^!. c #21436C", +"/!. c #1A5289", +"(!. c #0C69C6", +"_!. c #1452A4", +":!. c #204F72", +"~. c #2EFF00", +",~. c #2FFC01", +"'~. c #2FFF00", +")~. c #30FE01", +"!~. c #29FF00", +"~~. c #4BF126", +"{~. c #413C4A", +"]~. c #2E3038", +"^~. c #312830", +"/~. c #1F515D", +"(~. c #098C9C", +"_~. c #234953", +":~. c #2E2F38", +"<~. c #312930", +"[~. c #0787AB", +"}~. c #1C4A5B", +"|~. c #31282F", +"1~. c #30272E", +"2~. c #321B22", +"3~. c #1F4558", +"4~. c #058DB0", +"5~. c #1E4A5B", +"6~. c #2F2B34", +"7~. c #13757C", +"8~. c #25464F", +"9~. c #2E2D36", +"0~. c #2E3037", +"a~. c #2D3639", +"b~. c #0E8677", +"c~. c #197766", +"d~. c #26564B", +"e~. c #25574F", +"f~. c #245A51", +"g~. c #22665C", +"h~. c #245D56", +"i~. c #236156", +"j~. c #284A4B", +"k~. c #245856", +"l~. c #274C4D", +"m~. c #235D5B", +"n~. c #245959", +"o~. c #264E52", +"p~. c #1E7175", +"q~. c #264759", +"r~. c #254F5A", +"s~. c #284251", +"t~. c #225965", +"u~. c #235764", +"v~. c #25495F", +"w~. c #1F5178", +"x~. c #174F99", +"y~. c #195E8F", +"z~. c #0F7E8D", +"A~. c #1B4D7F", +"B~. c #1264B1", +"C~. c #1D4081", +"D~. c #195291", +"E~. c #1C4583", +"F~. c #1969A2", +"G~. c #11D7E1", +"H~. c #11E5E8", +"I~. c #0A5AB4", +"J~. c #0864BE", +"K~. c #143BA3", +"L~. c #0A79DA", +"M~. c #0B8EFC", +"N~. c #143AA6", +"O~. c #1A3F8D", +"P~. c #143DA6", +"Q~. c #0F3EBC", +"R~. c #0F46BE", +"S~. c #1543A3", +"T~. c #173C99", +"U~. c #1C3C86", +"V~. c #1C3C83", +"W~. c #1E347C", +"X~. c #183F96", +"Y~. c #203F74", +"Z~. c #1A498F", +"`~. c #1C4E85", +" {. c #195B93", +".{. c #195391", +"+{. c #1559A3", +"@{. c #1B5489", +"#{. c #1B4F8A", +"${. c #1C5A82", +"%{. c #1C6184", +"&{. c #1A618C", +"*{. c #22466C", +"={. c #244D63", +"-{. c #25455E", +";{. c #25445C", +">{. c #254A5F", +",{. c #284150", +"'{. c #284050", +"){. c #25485E", +"!{. c #264859", +"~{. c #2C333C", +"{{. c #27474B", +"]{. c #255246", +"^{. c #294743", +"/{. c #243E46", +"({. c #3B5E32", +"_{. c #5AE515", +":{. c #1B6F3F", +"<{. c #2F2D35", +"[{. c #2B3B37", +"}{. c #284B36", +"|{. c #2B3E39", +"1{. c #2A3F36", +"2{. c #294535", +"3{. c #255536", +"4{. c #294736", +"5{. c #274F35", +"6{. c #245935", +"7{. c #284C37", +"8{. c #1A6F2C", +"9{. c #17892E", +"0{. c #294B38", +"a{. c #119429", +"b{. c #1C672D", +"c{. c #312438", +"d{. c #2E3036", +"e{. c #2F3036", +"f{. c #2C2838", +"g{. c #374A32", +"h{. c #74F300", +"i{. c #39F24B", +"j{. c #02FEC7", +"k{. c #05FF9B", +"l{. c #1BCD4F", +"m{. c #305722", +"n{. c #2E2A3A", +"o{. c #2E2A38", +"p{. c #37731E", +"q{. c #3D791C", +"r{. c #302B39", +"s{. c #2D2A33", +"t{. c #07B646", +"u{. c #06B64A", +"v{. c #2D2834", +"w{. c #2F2E37", +"x{. c #2E2F37", +"y{. c #808084", +"z{. c #C0C0BF", +"A{. c #B5B7B5", +"B{. c #BCB7BB", +"C{. c #25D947", +"D{. c #4BC262", +"E{. c #422B44", +"F{. c #0EAB3C", +"G{. c #01ED38", +"H{. c #04EF3D", +"I{. c #1A6D32", +"J{. c #312337", +"K{. c #2D3137", +"L{. c #2D3136", +"M{. c #312638", +"N{. c #1C542D", +"O{. c #07C031", +"P{. c #0BA42F", +"Q{. c #56565C", +"R{. c #D1D5D0", +"S{. c #6C5C75", +"T{. c #49B336", +"U{. c #2AFF00", +"V{. c #2BFC01", +"W{. c #2BFF00", +"X{. c #2CFE01", +"Y{. c #25FF00", +"Z{. c #48F126", +"`{. c #2F2E35", +" ]. c #0D7E8D", +".]. c #137481", +"+]. c #312A30", +"@]. c #204250", +"#]. c #0985A8", +"$]. c #204757", +"%]. c #2F2E36", +"&]. c #2E3139", +"*]. c #2E333B", +"=]. c #16667E", +"-]. c #0883A3", +";]. c #293640", +">]. c #322830", +",]. c #12777B", +"']. c #25474E", +")]. c #312932", +"!]. c #2E3238", +"~]. c #2D353A", +"{]. c #284E45", +"]]. c #0F8775", +"^]. c #158B6E", +"/]. c #217057", +"(]. c #226756", +"_]. c #294945", +":]. c #245C51", +"<]. c #206E5D", +"[]. c #26534C", +"}]. c #236457", +"|]. c #22635C", +"1]. c #22665A", +"2]. c #265251", +"3]. c #294749", +"4]. c #26504F", +"5]. c #2A4446", +"6]. c #244E60", +"7]. c #215F6B", +"8]. c #264E59", +"9]. c #235463", +"0]. c #245263", +"a]. c #1F5978", +"b]. c #22406D", +"c]. c #17609A", +"d]. c #204C7A", +"e]. c #136E96", +"f]. c #14617A", +"g]. c #1D3C7F", +"h]. c #1A4E8D", +"i]. c #184596", +"j]. c #1249AE", +"k]. c #1A418F", +"l]. c #1254AC", +"m]. c #10EDEE", +"n]. c #12F2EC", +"o]. c #007BD8", +"p]. c #05CEF6", +"q]. c #0E75D7", +"r]. c #0E41BF", +"s]. c #0E4BC9", +"t]. c #0D3DC3", +"u]. c #0E43C3", +"v]. c #0B3FCE", +"w]. c #0645E5", +"x]. c #0C43CA", +"y]. c #0C43CB", +"z]. c #163FA0", +"A]. c #0F47BC", +"B]. c #0A4AD0", +"C]. c #1149B4", +"D]. c #1C3586", +"E]. c #184197", +"F]. c #213D72", +"G]. c #1C3F85", +"H]. c #185298", +"I]. c #175999", +"J]. c #1F507A", +"K]. c #166B9F", +"L]. c #1A5B8E", +"M]. c #1E4C7E", +"N]. c #1E5B7F", +"O]. c #1F5677", +"P]. c #1A658F", +"Q]. c #1B6288", +"R]. c #215471", +"S]. c #22526A", +"T]. c #264459", +"U]. c #234F68", +"V]. c #274857", +"W]. c #284454", +"X]. c #2A3E4B", +"Y]. c #293F4C", +"Z]. c #254F50", +"`]. c #27474F", +" ^. c #264F46", +".^. c #294143", +"+^. c #2C4342", +"@^. c #459821", +"#^. c #1B8843", +"$^. c #2D2E38", +"%^. c #2D3736", +"&^. c #284B37", +"*^. c #25553C", +"=^. c #294538", +"-^. c #284D35", +";^. c #265536", +">^. c #265336", +",^. c #236036", +"'^. c #255735", +")^. c #275237", +"!^. c #14942E", +"~^. c #18812E", +"{^. c #2F343A", +"]^. c #187F2C", +"^^. c #167C2A", +"/^. c #322338", +"(^. c #2E3136", +"_^. c #2F3136", +":^. c #2C253C", +"<^. c #3C7119", +"[^. c #33CE35", +"}^. c #00F487", +"|^. c #00E177", +"1^. c #48E13D", +"2^. c #44492A", +"3^. c #2A293A", +"4^. c #32472E", +"5^. c #418D13", +"6^. c #364630", +"7^. c #312B36", +"8^. c #283A35", +"9^. c #00D24C", +"0^. c #108E42", +"a^. c #322134", +"b^. c #2E3137", +"c^. c #313139", +"d^. c #C1C1C0", +"e^. c #5CC06F", +"f^. c #23DF46", +"g^. c #304C3C", +"h^. c #2E2835", +"i^. c #169E3A", +"j^. c #12A036", +"k^. c #0BB333", +"l^. c #08B12E", +"m^. c #22452F", +"n^. c #312938", +"o^. c #312537", +"p^. c #0BB433", +"q^. c #303039", +"r^. c #262630", +"s^. c #D1D4CF", +"t^. c #47B336", +"u^. c #26FF00", +"v^. c #28FC01", +"w^. c #27FF00", +"x^. c #28FE01", +"y^. c #21FF00", +"z^. c #45F126", +"A^. c #413C4B", +"B^. c #2E3039", +"C^. c #312931", +"D^. c #1C5763", +"E^. c #098C9D", +"F^. c #244751", +"G^. c #312A31", +"H^. c #204150", +"I^. c #0881A3", +"J^. c #0885A8", +"K^. c #204656", +"L^. c #0C7E9D", +"M^. c #116B85", +"N^. c #2E2D34", +"O^. c #0E8485", +"P^. c #26464D", +"Q^. c #302933", +"R^. c #2B3C3F", +"S^. c #294541", +"T^. c #2B4342", +"U^. c #0B987C", +"V^. c #139572", +"W^. c #255C4E", +"X^. c #245D50", +"Y^. c #226354", +"Z^. c #1D7C62", +"`^. c #236354", +" /. c #26534B", +"./. c #1E7665", +"+/. c #1C7E66", +"@/. c #1E7767", +"#/. c #216765", +"$/. c #294546", +"%/. c #26524F", +"&/. c #235A5F", +"*/. c #22576B", +"=/. c #26505A", +"-/. c #21606D", +";/. c #22556E", +">/. c #264259", +",/. c #214871", +"'/. c #1A538C", +")/. c #1F4F7B", +"!/. c #1B588B", +"~/. c #07BBC4", +"{/. c #0EA9CA", +"]/. c #1B488C", +"^/. c #1657A0", +"//. c #0E53C1", +"(/. c #1048B9", +"_/. c #0A40D1", +":/. c #0E70D5", +"(. c #25252F", +",(. c #65656A", +"'(. c #B6B7B6", +")(. c #BDB8BC", +"!(. c #2ADD4B", +"~(. c #1D9236", +"{(. c #2F2337", +"](. c #312437", +"^(. c #332038", +"/(. c #204B2F", +"((. c #08BC31", +"_(. c #0BA32E", +":(. c #283633", +"<(. c #19632E", +"[(. c #D0D4CF", +"}(. c #45B337", +"|(. c #22FF00", +"1(. c #24FC01", +"2(. c #23FF00", +"3(. c #25FE01", +"4(. c #1DFF00", +"5(. c #42F126", +"6(. c #423D4B", +"7(. c #2F3038", +"8(. c #302E36", +"9(. c #2C343D", +"0(. c #0C8190", +"a(. c #166E7B", +"b(. c #312B33", +"c(. c #2F3139", +"d(. c #322B31", +"e(. c #214150", +"f(. c #214555", +"g(. c #322A31", +"h(. c #2E323A", +"i(. c #2F323A", +"j(. c #2F313A", +"k(. c #312B32", +"l(. c #264250", +"m(. c #0789AC", +"n(. c #1B5667", +"o(. c #127C78", +"p(. c #293F45", +"q(. c #312B34", +"r(. c #2C3D3E", +"s(. c #285045", +"t(. c #294C45", +"u(. c #236453", +"v(. c #0D9372", +"w(. c #206355", +"x(. c #28534A", +"y(. c #284E49", +"z(. c #1E7A5E", +"A(. c #226854", +"B(. c #255E4E", +"C(. c #255D51", +"D(. c #26594F", +"E(. c #246254", +"F(. c #2D3741", +"G(. c #2B4142", +"H(. c #265256", +"I(. c #255958", +"J(. c #2A454C", +"K(. c #2A404E", +"L(. c #2B3F47", +"M(. c #294A50", +"N(. c #24565F", +"O(. c #22606E", +"P(. c #244F64", +"Q(. c #176C9E", +"R(. c #1A5991", +"S(. c #1C4D87", +"T(. c #0CBEDB", +"U(. c #11B9CC", +"V(. c #1A428C", +"W(. c #155DA5", +"X(. c #0E4EC1", +"Y(. c #114CB5", +"Z(. c #0C58CC", +"`(. c #0C45C9", +" _. c #10D8EB", +"._. c #0766EE", +"+_. c #0B4EDC", +"@_. c #013BF1", +"#_. c #0541E8", +"$_. c #0444EC", +"%_. c #0242F6", +"&_. c #0442EC", +"*_. c #063FE2", +"=_. c #0343EF", +"-_. c #0A42D4", +";_. c #0646E3", +">_. c #093CD6", +",_. c #063DE5", +"'_. c #0846D9", +")_. c #0447EB", +"!_. c #0B46D0", +"~_. c #0D43C5", +"{_. c #0F3DBF", +"]_. c #1547A6", +"^_. c #104FB9", +"/_. c #1654A2", +"(_. c #185897", +"__. c #1D4D82", +":_. c #186298", +"<_. c #196994", +"[_. c #156CA4", +"}_. c #1E5B81", +"|_. c #264460", +"1_. c #225670", +"2_. c #1279AF", +"3_. c #1B678A", +"4_. c #205D78", +"5_. c #215872", +"6_. c #244E66", +"7_. c #274A5C", +"8_. c #235069", +"9_. c #284856", +"0_. c #284B4A", +"a_. c #2A3E40", +"b_. c #1A9581", +"c_. c #0FCE93", +"d_. c #2A413E", +"e_. c #245448", +"f_. c #2F4F3D", +"g_. c #219A34", +"h_. c #21593D", +"i_. c #265B37", +"j_. c #2F3137", +"k_. c #284F38", +"l_. c #246138", +"m_. c #246139", +"n_. c #275337", +"o_. c #294D38", +"p_. c #226A36", +"q_. c #265A38", +"r_. c #1A8030", +"s_. c #18802D", +"t_. c #303239", +"u_. c #294734", +"v_. c #0F9A27", +"w_. c #312739", +"x_. c #26622D", +"y_. c #13872C", +"z_. c #2E4F2D", +"A_. c #4B9409", +"B_. c #1DA246", +"C_. c #0C9150", +"D_. c #322B34", +"E_. c #385629", +"F_. c #498B13", +"G_. c #353D34", +"H_. c #2E2C38", +"I_. c #303037", +"J_. c #2F3238", +"K_. c #332235", +"L_. c #16793F", +"M_. c #00DD4F", +"N_. c #244A38", +"O_. c #322737", +"P_. c #5A5A5F", +"Q_. c #B6B8B6", +"R_. c #C0B4BE", +"S_. c #62C274", +"T_. c #0BC72F", +"U_. c #312D39", +"V_. c #2E3437", +"W_. c #322738", +"X_. c #1A622E", +"Y_. c #07C632", +"Z_. c #0F902E", +"`_. c #302F38", +" :. c #2F3037", +".:. c #2F2D37", +"+:. c #31313A", +"@:. c #56565D", +"#:. c #CDCDCC", +"$:. c #CFD3CE", +"%:. c #6D5C75", +"&:. c #44B337", +"*:. c #1EFF00", +"=:. c #20FC01", +"-:. c #20FF00", +";:. c #21FE01", +">:. c #19FF00", +",:. c #3FF126", +"':. c #433D4B", +"):. c #322931", +"!:. c #1D5965", +"~:. c #0A8A9A", +"{:. c #27424C", +"]:. c #322B32", +"^:. c #0A81A3", +"/:. c #0A84A7", +"(:. c #214554", +"_:. c #34252C", +"::. c #32232C", +"<:. c #32262E", +"[:. c #32292F", +"}:. c #1C5A6F", +"|:. c #078BA9", +"1:. c #0E8481", +"2:. c #2E363D", +"3:. c #312835", +"4:. c #294E43", +"5:. c #2A4842", +"6:. c #285246", +"7:. c #22664E", +"8:. c #09AB87", +"9:. c #216755", +"0:. c #255F4C", +"a:. c #26594A", +"b:. c #255C4A", +"c:. c #226953", +"d:. c #207256", +"e:. c #216E58", +"f:. c #294C44", +"g:. c #294A4A", +"h:. c #294C4B", +"i:. c #284E4E", +"j:. c #2A4747", +"k:. c #255956", +"l:. c #206B6B", +"m:. c #2B3C4B", +"n:. c #26545B", +"o:. c #235D67", +"p:. c #255161", +"q:. c #215F73", +"r:. c #225D6E", +"s:. c #1E5982", +"t:. c #1C5289", +"u:. c #1C5A89", +"v:. c #16B4C7", +"w:. c #12EFE9", +"x:. c #11D5DC", +"y:. c #1087BF", +"z:. c #1152BC", +"A:. c #0A48D3", +"B:. c #0940D5", +"C:. c #074ADF", +"D:. c #0662F1", +"E:. c #0BB5F2", +"F:. c #023CF3", +"G:. c #0B3BCE", +"H:. c #093FDA", +"I:. c #0042FE", +"J:. c #013FF9", +"K:. c #053FE7", +"L:. c #0243F4", +"M:. c #0143F7", +"N:. c #0340EF", +"O:. c #0541EA", +"P:. c #0341EE", +"Q:. c #0647E4", +"R:. c #0642E6", +"S:. c #0A40D4", +"T:. c #0C3FCB", +"U:. c #034AF1", +"V:. c #0B42CE", +"W:. c #114AB5", +"X:. c #1646A2", +"Y:. c #194C96", +"Z:. c #204E79", +"`:. c #1A5A91", +" <. c #196694", +".<. c #1F4B7B", +"+<. c #1B568D", +"@<. c #1C6389", +"#<. c #1579A4", +"$<. c #1673A3", +"%<. c #27425B", +"&<. c #1F5A7C", +"*<. c #215773", +"=<. c #215B75", +"-<. c #284457", +";<. c #284A50", +"><. c #2C3B3E", +",<. c #2C3C45", +"'<. c #1F6A5C", +")<. c #119F59", +"!<. c #2A454B", +"~<. c #264E53", +"{<. c #2C493B", +"]<. c #249634", +"^<. c #1E6941", +"/<. c #2C4234", +"(<. c #2B4438", +"_<. c #2D3A38", +":<. c #2A4838", +"<<. c #1F7739", +"[<. c #255B38", +"}<. c #226938", +"|<. c #255C37", +"1<. c #245F38", +"2<. c #28543A", +"3<. c #1F6D33", +"4<. c #12962B", +"5<. c #285139", +"6<. c #2A4837", +"7<. c #109727", +"8<. c #2A3F35", +"9<. c #312C39", +"0<. c #302E38", +"a<. c #303339", +"b<. c #178624", +"c<. c #28752C", +"d<. c #336D21", +"e<. c #3C8119", +"f<. c #3B542F", +"g<. c #0BA052", +"h<. c #1A7947", +"i<. c #332934", +"j<. c #488715", +"k<. c #436325", +"l<. c #2E2A3B", +"m<. c #303137", +"n<. c #303138", +"o<. c #302636", +"p<. c #0AA246", +"q<. c #04C94A", +"r<. c #312C38", +"s<. c #2F3138", +"t<. c #B6B7B7", +"u<. c #BBB7BA", +"v<. c #ACB7AE", +"w<. c #1DCA3E", +"x<. c #0F8B29", +"y<. c #302937", +"z<. c #14792D", +"A<. c #07CA32", +"B<. c #147A2E", +"C<. c #302837", +"D<. c #2F2F39", +"E<. c #272731", +"F<. c #42B337", +"G<. c #1AFF00", +"H<. c #1DFC01", +"I<. c #1CFF00", +"J<. c #1DFE01", +"K<. c #15FF00", +"L<. c #3CF126", +"M<. c #433D4C", +"N<. c #2F3039", +"O<. c #302E37", +"P<. c #2D353E", +"Q<. c #0C8291", +"R<. c #322B33", +"S<. c #0981A4", +"T<. c #0B7FA3", +"U<. c #127F8D", +"V<. c #0FBDC0", +"W<. c #23616C", +"X<. c #302C35", +"Y<. c #11738D", +"Z<. c #059A9B", +"`<. c #2C393D", +" [. c #2D3C3D", +".[. c #2B4340", +"+[. c #275648", +"@[. c #29473C", +"#[. c #1AA0A1", +"$[. c #00FFED", +"%[. c #0EB992", +"&[. c #2A4A40", +"*[. c #255E4B", +"=[. c #226952", +"-[. c #1E7C5A", +";[. c #216D51", +">[. c #236654", +",[. c #294C46", +"'[. c #2A4843", +")[. c #284D4C", +"![. c #27504F", +"~[. c #26515B", +"{[. c #2C4146", +"][. c #1E8F8E", +"^[. c #20868A", +"/[. c #1F6B79", +"([. c #1F6D7A", +"_[. c #216474", +":[. c #215A74", +"<[. c #1C819B", +"[[. c #1B89A3", +"}[. c #1E5A80", +"|[. c #195794", +"1[. c #13E4E3", +"2[. c #0FBFE6", +"3[. c #076DE8", +"4[. c #054FEB", +"5[. c #0968E3", +"6[. c #0DC1F0", +"7[. c #075BE8", +"8[. c #0144F8", +"9[. c #0244F6", +"0[. c #003CFB", +"a[. c #0140F9", +"b[. c #013EF8", +"c[. c #043EED", +"d[. c #043FED", +"e[. c #033FF0", +"f[. c #0040FF", +"g[. c #0040FD", +"h[. c #013BF8", +"i[. c #0248F6", +"j[. c #023EF5", +"k[. c #033DF1", +"l[. c #0744DF", +"m[. c #0742E0", +"n[. c #0A3ED2", +"o[. c #0942D6", +"p[. c #0E49C2", +"q[. c #1247B1", +"r[. c #1054BC", +"s[. c #1A5191", +"t[. c #1457AA", +"u[. c #196596", +"v[. c #1C5189", +"w[. c #17609E", +"x[. c #18649A", +"y[. c #196394", +"z[. c #1E5F82", +"A[. c #1E5A81", +"B[. c #264761", +"C[. c #234E6B", +"D[. c #23576D", +"E[. c #284759", +"F[. c #2C3B49", +"G[. c #2B4145", +"H[. c #2B3D49", +"I[. c #2C3A48", +"J[. c #2D363A", +"K[. c #108B4C", +"L[. c #265254", +"M[. c #294544", +"N[. c #2D6F2F", +"O[. c #198240", +"P[. c #294848", +"Q[. c #284D3C", +"R[. c #2D3C37", +"S[. c #245F39", +"T[. c #20723A", +"U[. c #284E39", +"V[. c #1E793A", +"W[. c #236639", +"X[. c #294C39", +"Y[. c #265838", +"Z[. c #27583A", +"`[. c #235E35", +" }. c #177D2B", +".}. c #2A473A", +"+}. c #302E3A", +"@}. c #138D29", +"#}. c #255032", +"$}. c #32283A", +"%}. c #312B3A", +"&}. c #245B2D", +"*}. c #198C1C", +"=}. c #368D1D", +"-}. c #3B6F22", +";}. c #3D5230", +">}. c #263D3C", +",}. c #06B058", +"'}. c #2F822E", +")}. c #537D12", +"!}. c #323738", +"~}. c #2F2D39", +"{}. c #302F39", +"]}. c #312D38", +"^}. c #2A3639", +"/}. c #01C54C", +"(}. c #0CAA45", +"_}. c #43434B", +":}. c #B5B8B5", +"<}. c #C4B8C2", +"[}. c #57AF69", +"}}. c #00BB22", +"|}. c #32293A", +"1}. c #10902E", +"2}. c #07C732", +"3}. c #1B632F", +"4}. c #322739", +"5}. c #32323A", +"6}. c #282831", +"7}. c #CED2CD", +"8}. c #40B337", +"9}. c #16FF00", +"0}. c #19FC01", +"a}. c #18FF00", +"b}. c #1AFE01", +"c}. c #11FF00", +"d}. c #39F126", +"e}. c #443E4C", +"f}. c #30323A", +"g}. c #332A32", +"h}. c #1D5B67", +"i}. c #2A3F49", +"j}. c #322D34", +"k}. c #303139", +"l}. c #332C33", +"m}. c #223F4D", +"n}. c #0496B7", +"o}. c #00C5E4", +"p}. c #04E7F1", +"q}. c #00EFFF", +"r}. c #215E72", +"s}. c #33272E", +"t}. c #30323B", +"u}. c #332A33", +"v}. c #28434A", +"w}. c #01A3A2", +"x}. c #18666E", +"y}. c #275B43", +"z}. c #285245", +"A}. c #265D49", +"B}. c #295244", +"C}. c #0CC0B2", +"D}. c #01DDBE", +"E}. c #14E1C8", +"F}. c #295144", +"G}. c #255D4B", +"H}. c #265C4B", +"I}. c #2B4840", +"J}. c #2A4A44", +"K}. c #2A4946", +"L}. c #245F5C", +"M}. c #2B4544", +"N}. c #265654", +"O}. c #1C7188", +"P}. c #1D6588", +"Q}. c #1463A9", +"R}. c #196DA0", +"S}. c #13B7D2", +"T}. c #12E0E7", +"U}. c #12F1EC", +"V}. c #11E3ED", +"W}. c #0DCBEC", +"X}. c #0A8EEB", +"Y}. c #0346F2", +"Z}. c #033FF1", +"`}. c #0140F7", +" |. c #0639E5", +".|. c #0339EF", +"+|. c #0244F5", +"@|. c #023DF6", +"#|. c #023AF3", +"$|. c #013AF6", +"%|. c #013DF8", +"&|. c #053CE9", +"*|. c #023CF6", +"=|. c #023FF3", +"-|. c #024BF4", +";|. c #0548E9", +">|. c #064EE4", +",|. c #0C41CC", +"'|. c #0840DC", +")|. c #0B4BD0", +"!|. c #0E52C2", +"~|. c #17579F", +"{|. c #1154B7", +"]|. c #1658A5", +"^|. c #0E6AC2", +"/|. c #1E5D85", +"(|. c #23526E", +"_|. c #24446B", +":|. c #1C6D89", +"<|. c #1C658A", +"[|. c #1C6289", +"}|. c #24566A", +"||. c #225E73", +"1|. c #2D3848", +"2|. c #25565F", +"3|. c #25585B", +"4|. c #2E3A44", +"5|. c #294353", +"6|. c #2F4F42", +"7|. c #1CBF35", +"8|. c #1F654B", +"9|. c #2F3546", +"0|. c #302A3E", +"a|. c #2F6131", +"b|. c #169544", +"c|. c #255444", +"d|. c #28543C", +"e|. c #2B4838", +"f|. c #285438", +"g|. c #2C4438", +"h|. c #226C3A", +"i|. c #265D3A", +"j|. c #255E39", +"k|. c #265C3A", +"l|. c #226E3A", +"m|. c #246439", +"n|. c #226A39", +"o|. c #109D2C", +"p|. c #2D3F38", +"q|. c #351F3A", +"r|. c #1A7B2D", +"s|. c #34263A", +"t|. c #303338", +"u|. c #30253C", +"v|. c #2E3F35", +"w|. c #1C7B1E", +"x|. c #27791F", +"y|. c #388D1C", +"z|. c #323139", +"A|. c #3A7221", +"B|. c #3B5B32", +"C|. c #311E38", +"D|. c #206740", +"E|. c #13D048", +"F|. c #375730", +"G|. c #30283A", +"H|. c #2F3339", +"I|. c #332937", +"J|. c #205540", +"K|. c #00DA50", +"L|. c #14893F", +"M|. c #332637", +"N|. c #393940", +"O|. c #C2BFC1", +"P|. c #86918A", +"Q|. c #02AF25", +"R|. c #15922F", +"S|. c #322D3A", +"T|. c #293933", +"U|. c #0CA62F", +"V|. c #09BF32", +"W|. c #214F30", +"X|. c #33293A", +"Y|. c #32323B", +"Z|. c #CDD1CC", +"`|. c #3FB437", +" 1. c #13FF00", +".1. c #16FC01", +"+1. c #17FE01", +"@1. c #0EFF00", +"#1. c #37F126", +"$1. c #443E4D", +"%1. c #30313A", +"&1. c #312F37", +"*1. c #2D3740", +"=1. c #0C8493", +"-1. c #1A6673", +";1. c #332B34", +">1. c #32333A", +",1. c #0AB0BA", +"'1. c #07C1D7", +")1. c #07C3E2", +"!1. c #00E5FF", +"~1. c #16A5B2", +"{1. c #33282D", +"]1. c #2F373E", +"^1. c #31323A", +"/1. c #2C3E40", +"(1. c #08978B", +"_1. c #0889A7", +":1. c #1D6D5E", +"<1. c #21774E", +"[1. c #255F4B", +"}1. c #217353", +"|1. c #088366", +"11. c #0FBA99", +"21. c #24967F", +"31. c #216A4C", +"41. c #23694E", +"51. c #285547", +"61. c #236B51", +"71. c #27594A", +"81. c #2A4948", +"91. c #2B4945", +"01. c #294F4D", +"a1. c #27564D", +"b1. c #2E393D", +"c1. c #285151", +"d1. c #246157", +"e1. c #255C5C", +"f1. c #2A474C", +"g1. c #265A5C", +"h1. c #216C69", +"i1. c #23636A", +"j1. c #255864", +"k1. c #205D7A", +"l1. c #1D6986", +"m1. c #215A77", +"n1. c #1E5B84", +"o1. c #17689E", +"p1. c #1767A0", +"q1. c #18709B", +"r1. c #1D5C89", +"s1. c #18649D", +"t1. c #18599D", +"u1. c #185A9C", +"v1. c #0766E0", +"w1. c #0B55D2", +"x1. c #0A4AD6", +"y1. c #056FCA", +"z1. c #0555DD", +"A1. c #0358D3", +"B1. c #073DDF", +"C1. c #0242F4", +"D1. c #023BF3", +"E1. c #053BE7", +"F1. c #033EF0", +"G1. c #043CEE", +"H1. c #043AED", +"I1. c #0239F6", +"J1. c #013DF7", +"K1. c #023AF6", +"L1. c #0138F7", +"M1. c #0239F5", +"N1. c #0133FA", +"O1. c #043EEC", +"P1. c #033DF0", +"Q1. c #0047FF", +"R1. c #0143F8", +"S1. c #0344EF", +"T1. c #0448ED", +"U1. c #0549E9", +"V1. c #0946D8", +"W1. c #093FD9", +"X1. c #094BD7", +"Y1. c #0F50C0", +"Z1. c #1059BD", +"`1. c #0C51CD", +" 2. c #115EB8", +".2. c #155DA9", +"+2. c #1F517F", +"@2. c #186C9D", +"#2. c #196697", +"$2. c #1A6B93", +"%2. c #1F5D80", +"&2. c #1B6391", +"*2. c #1E6384", +"=2. c #1F5E81", +"-2. c #2A4357", +";2. c #206A75", +">2. c #255A61", +",2. c #2A4955", +"'2. c #274B5D", +")2. c #2E5E41", +"!2. c #2ED822", +"~2. c #1B7852", +"{2. c #294D4F", +"]2. c #284C44", +"^2. c #2A6637", +"/2. c #1A973F", +"(2. c #1B734B", +"_2. c #2C4638", +":2. c #2A4B3B", +"<2. c #2C4439", +"[2. c #24663C", +"}2. c #179C3F", +"|2. c #28523B", +"12. c #265E3B", +"22. c #1B8A3C", +"32. c #24663B", +"42. c #207139", +"52. c #138D2A", +"62. c #34263B", +"72. c #206530", +"82. c #1A762C", +"92. c #34243B", +"02. c #313039", +"a2. c #313239", +"b2. c #2F293B", +"c2. c #375331", +"d2. c #247D19", +"e2. c #245A28", +"f2. c #31771F", +"g2. c #347528", +"h2. c #30233E", +"i2. c #386F24", +"j2. c #3B5933", +"k2. c #2C263E", +"l2. c #49611D", +"m2. c #28AE37", +"n2. c #0C9954", +"o2. c #312D37", +"p2. c #31303A", +"q2. c #332838", +"r2. c #137C47", +"s2. c #00DC4E", +"t2. c #1D6B3B", +"u2. c #332638", +"v2. c #30333A", +"w2. c #B8B9B8", +"x2. c #C0C3C0", +"y2. c #928593", +"z2. c #156D2B", +"A2. c #08C72D", +"B2. c #264C34", +"C2. c #332A3A", +"D2. c #332B3B", +"E2. c #234831", +"F2. c #09B830", +"G2. c #0BB131", +"H2. c #283E34", +"I2. c #332C3B", +"J2. c #C2C2C3", +"K2. c #3DB438", +"L2. c #0FFF00", +"M2. c #12FC01", +"N2. c #13FE01", +"O2. c #0AFF00", +"P2. c #34F126", +"Q2. c #332B33", +"R2. c #19616E", +"S2. c #0B8797", +"T2. c #2B3D47", +"U2. c #322D36", +"V2. c #312D36", +"W2. c #0AD5D6", +"X2. c #00F1F9", +"Y2. c #00D7EF", +"Z2. c #0EFFFF", +"`2. c #2C9B9F", +" 3. c #31232C", +".3. c #30353D", +"+3. c #30343B", +"@3. c #2A4346", +"#3. c #108871", +"$3. c #127588", +"%3. c #0A879C", +"&3. c #255D42", +"*3. c #285D40", +"=3. c #10786A", +"-3. c #0F7C6C", +";3. c #295542", +">3. c #26563F", +",3. c #2C4341", +"'3. c #24634C", +")3. c #265C48", +"!3. c #295043", +"~3. c #27554C", +"{3. c #275549", +"]3. c #2C433E", +"^3. c #275751", +"/3. c #2D3E3D", +"(3. c #28504E", +"_3. c #265A53", +":3. c #24605A", +"<3. c #27565A", +"[3. c #2B444A", +"}3. c #265958", +"|3. c #285157", +"13. c #2A4951", +"23. c #2B3D4F", +"33. c #225A74", +"43. c #255664", +"53. c #1D6689", +"63. c #1F5D7F", +"73. c #1B6590", +"83. c #1D5B86", +"93. c #156CA8", +"03. c #1278B3", +"a3. c #1A5E93", +"b3. c #1362AF", +"c3. c #0A6FD6", +"d3. c #0F48C0", +"e3. c #0B57D1", +"f3. c #094DDB", +"g3. c #054CE0", +"h3. c #0285D0", +"i3. c #03B0E8", +"j3. c #034CF4", +"k3. c #043BEC", +"l3. c #063BE6", +"m3. c #0137F7", +"n3. c #0235F4", +"o3. c #0139FA", +"p3. c #0238F4", +"q3. c #013FFA", +"r3. c #0235F5", +"s3. c #0136FA", +"t3. c #0034FD", +"u3. c #0039FD", +"v3. c #0139F7", +"w3. c #0232F6", +"x3. c #043BEE", +"y3. c #023EF4", +"z3. c #0040FB", +"A3. c #0043FD", +"B3. c #0242F5", +"C3. c #014BF7", +"D3. c #0648E3", +"E3. c #084CDB", +"F3. c #0C46CC", +"G3. c #0D58C9", +"H3. c #0C53CB", +"I3. c #1256B3", +"J3. c #18519B", +"K3. c #1268B2", +"L3. c #1171B7", +"M3. c #1E5682", +"N3. c #186C9B", +"O3. c #1C5C8C", +"P3. c #186F9A", +"Q3. c #235B6F", +"R3. c #215976", +"S3. c #225573", +"T3. c #225B6F", +"U3. c #264F5E", +"V3. c #255B5D", +"W3. c #236064", +"X3. c #2A4750", +"Y3. c #294551", +"Z3. c #236937", +"`3. c #149252", +" 4. c #2A4252", +".4. c #2C4246", +"+4. c #2D4433", +"@4. c #12CE6E", +"#4. c #0BE27C", +"$4. c #2B4C3F", +"%4. c #265941", +"&4. c #275940", +"*4. c #25623D", +"=4. c #21733D", +"-4. c #236A3B", +";4. c #216F3C", +">4. c #226C3C", +",4. c #25613B", +"'4. c #29523B", +")4. c #0EBA36", +"!4. c #226B38", +"~4. c #274D34", +"{4. c #13912C", +"]4. c #33263B", +"^4. c #313339", +"/4. c #2E273C", +"(4. c #3A5F2D", +"_4. c #54F005", +":4. c #2ABF04", +"<4. c #397424", +"[4. c #328716", +"}4. c #30692D", +"|4. c #30243D", +"14. c #366229", +"24. c #385536", +"34. c #373E33", +"44. c #5D8E0E", +"54. c #414D2B", +"64. c #0B9F53", +"74. c #178349", +"84. c #2E323B", +"94. c #09A14E", +"04. c #01D049", +"a4. c #24523A", +"b4. c #332839", +"c4. c #979799", +"d4. c #BEBFBD", +"e4. c #A19EA2", +"f4. c #2B3736", +"g4. c #0BB72D", +"h4. c #13922E", +"i4. c #322A39", +"j4. c #1D5B30", +"k4. c #08C332", +"l4. c #0E9F30", +"m4. c #2D3337", +"n4. c #322E3A", +"o4. c #33333C", +"p4. c #CACAC9", +"q4. c #6E5C75", +"r4. c #3CB438", +"s4. c #0CFF00", +"t4. c #10FC02", +"u4. c #0FFF01", +"v4. c #11FE03", +"w4. c #08FF00", +"x4. c #32F127", +"y4. c #453F4D", +"z4. c #31323B", +"A4. c #332F37", +"B4. c #2C3B45", +"C4. c #0B8696", +"D4. c #1A6471", +"E4. c #332C34", +"F4. c #31333C", +"G4. c #342831", +"H4. c #236B74", +"I4. c #00E1FA", +"J4. c #0DEEFF", +"K4. c #21EAF1", +"L4. c #246371", +"M4. c #332931", +"N4. c #31323C", +"O4. c #2F3C3E", +"P4. c #31333A", +"Q4. c #2B4245", +"R4. c #108F6F", +"S4. c #2B4441", +"T4. c #0B7F98", +"U4. c #13798D", +"V4. c #178483", +"W4. c #078476", +"X4. c #1D805B", +"Y4. c #2C4A40", +"Z4. c #2C4842", +"`4. c #236C4B", +" 5. c #2B4B42", +".5. c #266248", +"+5. c #266148", +"@5. c #2A4D46", +"#5. c #2D4342", +"$5. c #2D4443", +"%5. c #2A4E47", +"&5. c #2F3B3D", +"*5. c #2E3F43", +"=5. c #2C4749", +"-5. c #236A63", +";5. c #236860", +">5. c #265A5A", +",5. c #265D5C", +"'5. c #2A4957", +")5. c #2A4959", +"!5. c #225378", +"~5. c #25466C", +"{5. c #1D628A", +"]5. c #1F5B80", +"^5. c #1F5F80", +"/5. c #205B7D", +"(5. c #196A9D", +"_5. c #1766A2", +":5. c #1567A9", +"<5. c #1D578A", +"[5. c #1752A3", +"}5. c #0E5AC4", +"|5. c #1251B7", +"15. c #0264F5", +"25. c #0350F0", +"35. c #03A7E7", +"45. c #09E5FB", +"55. c #0548F2", +"65. c #0237F4", +"75. c #023FF7", +"85. c #0235F6", +"95. c #003AFF", +"05. c #0038FE", +"a5. c #0334F0", +"b5. c #0437ED", +"c5. c #0232F4", +"d5. c #0333F2", +"e5. c #0037FD", +"f5. c #0438EB", +"g5. c #032EF1", +"h5. c #0136F9", +"i5. c #0437EE", +"j5. c #0634E4", +"k5. c #0233F5", +"l5. c #013AF8", +"m5. c #0240F7", +"n5. c #0345F1", +"o5. c #0444ED", +"p5. c #0846DE", +"q5. c #0A4ED7", +"r5. c #0C47CB", +"s5. c #0B4DD0", +"t5. c #0E56C5", +"u5. c #1160BA", +"v5. c #0C69CF", +"w5. c #1670A4", +"x5. c #1270B7", +"y5. c #166BA7", +"z5. c #1D5A8A", +"A5. c #225577", +"B5. c #196D9A", +"C5. c #1B6A91", +"D5. c #20607D", +"E5. c #235F70", +"F5. c #1C7181", +"G5. c #284B5C", +"H5. c #29504B", +"I5. c #1E867F", +"J5. c #265E5F", +"K5. c #2B513B", +"L5. c #149848", +"M5. c #275048", +"N5. c #275A42", +"O5. c #18A951", +"P5. c #12B25E", +"Q5. c #28603D", +"R5. c #275A3D", +"S5. c #1F7E40", +"T5. c #24663D", +"U5. c #2B4D3B", +"V5. c #1A8F3F", +"W5. c #246A3C", +"X5. c #1E813F", +"Y5. c #236C3D", +"Z5. c #28593C", +"`5. c #21733E", +" 6. c #04FA38", +".6. c #1C9939", +"+6. c #37193A", +"@6. c #236F3C", +"#6. c #05FF3C", +"$6. c #285E39", +"%6. c #33283A", +"&6. c #323439", +"*6. c #30263D", +"=6. c #396C29", +"-6. c #4FF60F", +";6. c #489918", +">6. c #2F7022", +",6. c #316231", +"'6. c #31253D", +")6. c #35632A", +"!6. c #385537", +"~6. c #516E1A", +"{6. c #56771B", +"]6. c #31273D", +"^6. c #2B423B", +"/6. c #08B756", +"(6. c #216143", +"_6. c #352738", +":6. c #31343A", +"<6. c #342C38", +"[6. c #264A42", +"}6. c #02BC51", +"|6. c #07BC44", +"16. c #2B3F3A", +"26. c #332D3B", +"36. c #33333B", +"46. c #8F8F92", +"56. c #382C3F", +"66. c #1B7331", +"76. c #07C62C", +"86. c #264E34", +"96. c #342B3B", +"06. c #17712F", +"a6. c #07CC33", +"b6. c #138930", +"c6. c #57575E", +"d6. c #CBCFCA", +"e6. c #6F5C75", +"f6. c #36B438", +"g6. c #00FF00", +"h6. c #05FC01", +"i6. c #03FF00", +"j6. c #05FE01", +"k6. c #29F126", +"l6. c #453F4E", +"m6. c #32313B", +"n6. c #342C34", +"o6. c #1A6370", +"p6. c #0C8696", +"q6. c #332F38", +"r6. c #32313A", +"s6. c #342931", +"t6. c #2D3F4D", +"u6. c #236072", +"v6. c #0C7593", +"w6. c #0C6E8D", +"x6. c #2B4045", +"y6. c #2F3E3D", +"z6. c #31313B", +"A6. c #342B37", +"B6. c #274E4C", +"C6. c #108C70", +"D6. c #2F4335", +"E6. c #1A7678", +"F6. c #00C4DF", +"G6. c #11A3A3", +"H6. c #2C4E3A", +"I6. c #275C46", +"J6. c #295442", +"K6. c #295444", +"L6. c #266249", +"M6. c #285A45", +"N6. c #285846", +"O6. c #2A4F43", +"P6. c #2A4F46", +"Q6. c #303741", +"R6. c #2C4546", +"S6. c #2A4F4D", +"T6. c #2B4C47", +"U6. c #29544E", +"V6. c #265B5C", +"W6. c #285450", +"X6. c #25615F", +"Y6. c #284660", +"Z6. c #29435D", +"`6. c #1C6690", +" 7. c #225479", +".7. c #29415A", +"+7. c #205981", +"@7. c #255073", +"#7. c #1E688B", +"$7. c #03DCEA", +"%7. c #0FA8C4", +"&7. c #1D4F8B", +"*7. c #1074BF", +"=7. c #096FD8", +"-7. c #0E64C7", +";7. c #0969D9", +">7. c #065BE7", +",7. c #0351F0", +"'7. c #0346F0", +")7. c #036EF7", +"!7. c #055AF6", +"~7. c #0132F8", +"{7. c #0036FB", +"]7. c #0134F7", +"^7. c #0137F9", +"/7. c #0335F1", +"(7. c #0230F7", +"_7. c #0237F6", +":7. c #052FEA", +"<7. c #022DF5", +"[7. c #0134FA", +"}7. c #0138FA", +"|7. c #0435ED", +"17. c #022EF6", +"27. c #0031FF", +"37. c #003AFB", +"47. c #0032FD", +"57. c #023FF6", +"67. c #023FF4", +"77. c #0240F5", +"87. c #0246F3", +"97. c #033EF2", +"07. c #034CEF", +"a7. c #0B4AD2", +"b7. c #085ADF", +"c7. c #0A58D6", +"d7. c #115ABC", +"e7. c #1168BB", +"f7. c #1462AE", +"g7. c #0F73C3", +"h7. c #1660A5", +"i7. c #205B7E", +"j7. c #176FA2", +"k7. c #225B76", +"l7. c #18729F", +"m7. c #1F6C80", +"n7. c #27515E", +"o7. c #255B5F", +"p7. c #2C414B", +"q7. c #07E1B8", +"r7. c #1A9A81", +"s7. c #2D4243", +"t7. c #159E41", +"u7. c #1D6E57", +"v7. c #29564D", +"w7. c #2B4644", +"x7. c #26713E", +"y7. c #178740", +"z7. c #23693F", +"A7. c #275E3F", +"B7. c #246A3F", +"C7. c #24673F", +"D7. c #227140", +"E7. c #207B40", +"F7. c #20793F", +"G7. c #29553E", +"H7. c #25633E", +"I7. c #2F403D", +"J7. c #17852D", +"K7. c #245B34", +"L7. c #381B3C", +"M7. c #1F7C39", +"N7. c #00FF2C", +"O7. c #276539", +"P7. c #34273B", +"Q7. c #31293D", +"R7. c #30921C", +"S7. c #43B314", +"T7. c #405429", +"U7. c #295C2D", +"V7. c #325A33", +"W7. c #32253D", +"X7. c #325E2E", +"Y7. c #487C28", +"Z7. c #62840F", +"`7. c #3C4234", +" 8. c #2F313C", +".8. c #352938", +"+8. c #215F42", +"@8. c #08B856", +"#8. c #2A443D", +"$8. c #342C3A", +"%8. c #31333B", +"&8. c #342A38", +"*8. c #1B6A4B", +"=8. c #00CC51", +"-8. c #0EA541", +";8. c #332E3A", +">8. c #31343B", +",8. c #34343D", +"'8. c #7F7F83", +")8. c #C4C4C3", +"!8. c #B5B6B6", +"~8. c #403D48", +"{8. c #2A3635", +"]8. c #0CB82E", +"^8. c #13942F", +"/8. c #332B3A", +"(8. c #08CA33", +"_8. c #187831", +":8. c #C9C9C8", +"<8. c #6C5C72", +"[8. c #49B449", +"}8. c #27FF20", +"|8. c #29FC23", +"18. c #28FF22", +"28. c #29FE24", +"38. c #22FF1C", +"48. c #46F142", +"58. c #443F4D", +"68. c #2C3C46", +"78. c #31343D", +"88. c #322F37", +"98. c #36242A", +"08. c #1D5266", +"a8. c #0883A5", +"b8. c #1A586E", +"c8. c #342D35", +"d8. c #30363D", +"e8. c #303D3B", +"f8. c #216353", +"g8. c #0B9E73", +"h8. c #2B4F35", +"i8. c #13B29D", +"j8. c #01E4F5", +"k8. c #09E9FE", +"l8. c #1CC3BF", +"m8. c #285439", +"n8. c #275C47", +"o8. c #2B4C41", +"p8. c #2E403E", +"q8. c #22714D", +"r8. c #265F49", +"s8. c #295443", +"t8. c #2B4D42", +"u8. c #2D463F", +"v8. c #2D4540", +"w8. c #295350", +"x8. c #29514E", +"y8. c #30373C", +"z8. c #2E3E45", +"A8. c #294F57", +"B8. c #2B4850", +"C8. c #2B4956", +"D8. c #2C474E", +"E8. c #265665", +"F8. c #284862", +"G8. c #25596D", +"H8. c #2B4353", +"I8. c #245C6D", +"J8. c #197198", +"K8. c #12839C", +"L8. c #0D788D", +"M8. c #06D8DB", +"N8. c #17B8CF", +"O8. c #20507C", +"P8. c #1A5296", +"Q8. c #0B63D3", +"R8. c #0B62D2", +"S8. c #0753E0", +"T8. c #0A56D6", +"U8. c #015FFA", +"V8. c #0443EC", +"W8. c #033BEE", +"X8. c #003EFF", +"Y8. c #0137F8", +"Z8. c #0138F8", +"`8. c #0335F2", +" 9. c #0031FE", +".9. c #0033FB", +"+9. c #002FFD", +"@9. c #012DFA", +"#9. c #002AFD", +"$9. c #002CFC", +"%9. c #0031FB", +"&9. c #0134F8", +"*9. c #012EFA", +"=9. c #022EF5", +"-9. c #0133F9", +";9. c #0231F6", +">9. c #013AF9", +",9. c #0045FF", +"'9. c #0545E9", +")9. c #0640E4", +"!9. c #084ADE", +"~9. c #084EDE", +"{9. c #0A53D4", +"]9. c #0562E8", +"^9. c #0D68C9", +"/9. c #0D65CB", +"(9. c #1163B9", +"_9. c #0F77C0", +":9. c #1D618D", +"<9. c #166AA7", +"[9. c #1F6184", +"}9. c #1E6687", +"|9. c #274B5F", +"19. c #1775A0", +"29. c #24506A", +"39. c #265367", +"49. c #236260", +"59. c #275D63", +"69. c #1E5F4A", +"79. c #148560", +"89. c #323440", +"99. c #1C8741", +"09. c #1A784E", +"a9. c #2C464C", +"b9. c #2C424E", +"c9. c #266641", +"d9. c #169643", +"e9. c #246542", +"f9. c #29573E", +"g9. c #266242", +"h9. c #207941", +"i9. c #285A3F", +"j9. c #217641", +"k9. c #227040", +"l9. c #275C3F", +"m9. c #2B4D3D", +"n9. c #295941", +"o9. c #1D7738", +"p9. c #1B712E", +"q9. c #35283C", +"r9. c #33303C", +"s9. c #11982A", +"t9. c #1D702F", +"u9. c #35263D", +"v9. c #332B3E", +"w9. c #275626", +"x9. c #3A8E15", +"y9. c #39353A", +"z9. c #28622C", +"A9. c #315C34", +"B9. c #2F5E30", +"C9. c #5CA317", +"D9. c #536121", +"E9. c #2E2D3E", +"F9. c #342738", +"G9. c #17824A", +"H9. c #0CA853", +"I9. c #32303B", +"J9. c #118C52", +"K9. c #00CD4E", +"L9. c #129449", +"M9. c #31303B", +"N9. c #332D38", +"O9. c #282832", +"P9. c #757579", +"Q9. c #C2C2C1", +"R9. c #B8B7B8", +"S9. c #46494E", +"T9. c #302337", +"U9. c #1E7633", +"V9. c #342B3C", +"W9. c #0C9E2E", +"X9. c #0BC335", +"Y9. c #C8C8C7", +"Z9. c #BFBFC0", +"`9. c #CACEC9", +" 0. c #6D5C74", +".0. c #41B444", +"+0. c #16FF13", +"@0. c #19FC18", +"#0. c #18FF17", +"$0. c #1AFE18", +"%0. c #12FF0F", +"&0. c #3AF139", +"*0. c #46404E", +"=0. c #32343D", +"-0. c #352D35", +";0. c #1A6572", +">0. c #0D8393", +",0. c #2F3A43", +"'0. c #32333C", +")0. c #33353D", +"!0. c #106D8A", +"~0. c #0B7A9A", +"{0. c #2A3F4C", +"]0. c #2F463E", +"^0. c #32373B", +"/0. c #245A4F", +"(0. c #0C9B6F", +"_0. c #266944", +":0. c #246A4D", +"<0. c #07D7D6", +"[0. c #1DD2D3", +"}0. c #297054", +"|0. c #2B4B3D", +"10. c #22744A", +"20. c #295844", +"30. c #266648", +"40. c #285E45", +"50. c #2A5444", +"60. c #27604C", +"70. c #2D4740", +"80. c #303A40", +"90. c #2C4D44", +"00. c #285851", +"a0. c #26634D", +"b0. c #285B4D", +"c0. c #2C4A4B", +"d0. c #2D474B", +"e0. c #2B4E54", +"f0. c #28585D", +"g0. c #236676", +"h0. c #275767", +"i0. c #26506A", +"j0. c #1F768F", +"k0. c #06FEFC", +"l0. c #07C0C9", +"m0. c #0D7791", +"n0. c #1C628B", +"o0. c #0F86A7", +"p0. c #1C638C", +"q0. c #1F6589", +"r0. c #1F5887", +"s0. c #0E6DC6", +"t0. c #0C55CF", +"u0. c #0B56D2", +"v0. c #0954D9", +"w0. c #024DF7", +"x0. c #0156F9", +"y0. c #0048FB", +"z0. c #0041FC", +"A0. c #0341F2", +"B0. c #0241F6", +"C0. c #003BFC", +"D0. c #0033FF", +"E0. c #002DFB", +"F0. c #0031FC", +"G0. c #012FF9", +"H0. c #0126FB", +"I0. c #002CFE", +"J0. c #0131FA", +"K0. c #0532EB", +"L0. c #002AFB", +"M0. c #0035FF", +"N0. c #012EF8", +"O0. c #032CF3", +"P0. c #0137FA", +"Q0. c #003AFC", +"R0. c #053DEA", +"S0. c #003DFF", +"T0. c #004DFF", +"U0. c #004EFB", +"V0. c #0559EA", +"W0. c #084FDC", +"X0. c #065BE6", +"Y0. c #065FE4", +"Z0. c #0B5FD3", +"`0. c #1366B3", +" a. c #1278B9", +".a. c #0F7CC3", +"+a. c #1A609A", +"@a. c #1F5286", +"#a. c #19619E", +"$a. c #1A7599", +"%a. c #245D70", +"&a. c #265666", +"*a. c #255964", +"=a. c #25576B", +"-a. c #275C73", +";a. c #1B802B", +">a. c #03BF54", +",a. c #275368", +"'a. c #266635", +")a. c #17844D", +"!a. c #246456", +"~a. c #303A41", +"{a. c #26634B", +"]a. c #10AC47", +"^a. c #236843", +"/a. c #2C4D3D", +"(a. c #246B45", +"_a. c #295843", +":a. c #227441", +"b. c #2D4940", +",b. c #2E4540", +"'b. c #2A524D", +")b. c #303E3F", +"!b. c #2C4B45", +"~b. c #266251", +"{b. c #2D4649", +"]b. c #2A4F5B", +"^b. c #285961", +"/b. c #2B4E58", +"(b. c #2C4755", +"_b. c #236174", +":b. c #2C4459", +"c. c #3C4931", +",c. c #31960F", +"'c. c #2E5333", +")c. c #34293E", +"!c. c #27742A", +"~c. c #305837", +"{c. c #362F3B", +"]c. c #638F10", +"^c. c #516E26", +"/c. c #2E2A3F", +"(c. c #342E3B", +"_c. c #2B413D", +":c. c #1F6945", +"d. c #0039FC", +",d. c #0039FF", +"'d. c #0038FC", +")d. c #0034FE", +"!d. c #022FF3", +"~d. c #0230F5", +"{d. c #0237F7", +"]d. c #0432ED", +"^d. c #022BF7", +"/d. c #002FFF", +"(d. c #002EFF", +"_d. c #012FFA", +":d. c #0135F9", +"e. c #352F3D", +",e. c #33333D", +"'e. c #2C2C36", +")e. c #58585E", +"!e. c #C8CCC7", +"~e. c #35B53D", +"{e. c #00FF02", +"]e. c #01FC08", +"^e. c #00FF07", +"/e. c #01FE08", +"(e. c #26F12C", +"_e. c #47414F", +":e. c #33353F", +"f. c #1F5F89", +",f. c #1B6A96", +"'f. c #20597B", +")f. c #1D6B8C", +"!f. c #25606D", +"~f. c #28585E", +"{f. c #294D65", +"]f. c #285A5E", +"^f. c #265C53", +"/f. c #1C7942", +"(f. c #178870", +"_f. c #1F6C4A", +":f. c #10B979", +"g. c #058CA6", +",g. c #1A6C66", +"'g. c #1A8250", +")g. c #15855C", +"!g. c #2E4E3C", +"~g. c #286141", +"{g. c #2D4B3E", +"]g. c #276441", +"^g. c #256C42", +"/g. c #2E4941", +"(g. c #2A5940", +"_g. c #286142", +":g. c #286043", +"h. c #286247", +",h. c #217D4C", +"'h. c #295D45", +")h. c #2D4D41", +"!h. c #313C3E", +"~h. c #362D3D", +"{h. c #2B4B38", +"]h. c #197D2D", +"^h. c #34323D", +"/h. c #2F3E39", +"(h. c #0AAE25", +"_h. c #2A4F37", +":h. c #34343C", +"i. c #2F4056", +",i. c #285067", +"'i. c #225D80", +")i. c #1C6B94", +"!i. c #1A759A", +"~i. c #089DB7", +"{i. c #19679E", +"]i. c #176CAA", +"^i. c #1D5C92", +"/i. c #1B589A", +"(i. c #1A539E", +"_i. c #134FB5", +":i. c #0B4ED2", +"j. c #352F3C", +",j. c #178A59", +"'j. c #05C868", +")j. c #00FA63", +"!j. c #01FB5D", +"~j. c #1DA55B", +"{j. c #362C3D", +"]j. c #B3B3B5", +"^j. c #D2D2D1", +"/j. c #A1A1A4", +"(j. c #2D2D38", +"_j. c #1E7534", +":j. c #07C82C", +"k. c #0951DB", +",k. c #0E4FC8", +"'k. c #0A5FDA", +")k. c #066CE8", +"!k. c #1069C2", +"~k. c #185BA6", +"{k. c #1368B9", +"]k. c #1869A6", +"^k. c #186B9F", +"/k. c #147CAD", +"(k. c #1F698B", +"_k. c #226879", +":k. c #265B6E", +"l. c #0995A7", +",l. c #157584", +"'l. c #353139", +")l. c #33393F", +"!l. c #31413F", +"~l. c #323C3F", +"{l. c #30453F", +"]l. c #2D5040", +"^l. c #2D543B", +"/l. c #146C7C", +"(l. c #01A696", +"_l. c #188656", +":l. c #2F503C", +"m. c #28674D", +",m. c #217D52", +"'m. c #266A4C", +")m. c #24724E", +"!m. c #256F4D", +"~m. c #2D4F45", +"{m. c #323F41", +"]m. c #34373F", +"^m. c #382B40", +"/m. c #216A33", +"(m. c #372D40", +"_m. c #36323F", +":m. c #2D4739", +"n. c #24586C", +",n. c #187A88", +"'n. c #2E485C", +")n. c #196885", +"!n. c #12729A", +"~n. c #20618F", +"{n. c #1C6A98", +"]n. c #11A3D1", +"^n. c #11C8E0", +"/n. c #1357B8", +"(n. c #114BC0", +"_n. c #0D5CD0", +":n. c #0D50CF", +"o. c #52525A", +",o. c #D5D5D4", +"'o. c #79797E", +")o. c #373741", +"!o. c #34363F", +"~o. c #362E3F", +"{o. c #2D4F3F", +"]o. c #02FA4E", +"^o. c #10FF5C", +"/o. c #13F353", +"(o. c #01FF3C", +"_o. c #267A3F", +":o. c #37283F", +"p. c #0343F2", +",p. c #0846E2", +"'p. c #0FC8EB", +")p. c #0C4DD1", +"!p. c #075AE5", +"~p. c #0E59CC", +"{p. c #0C5BD2", +"]p. c #145AB7", +"^p. c #215787", +"/p. c #205A87", +"(p. c #1A64A0", +"_p. c #1D6195", +":p. c #20598C", +"q. c #01FC22", +",q. c #00FF21", +"'q. c #01FE23", +")q. c #00FF1B", +"!q. c #26F141", +"~q. c #382F38", +"{q. c #235763", +"]q. c #079BAF", +"^q. c #205D64", +"/q. c #363838", +"(q. c #314542", +"_q. c #333E3F", +":q. c #32423F", +"r. c #2B6055", +",r. c #1F7F51", +"'r. c #1D7F4B", +")r. c #2A6153", +"!r. c #286851", +"~r. c #2F4F48", +"{r. c #324345", +"]r. c #36323E", +"^r. c #353640", +"/r. c #36353F", +"(r. c #373140", +"_r. c #1A7E2F", +":r. c #2F463B", +"s. c #314352", +",s. c #343C47", +"'s. c #343945", +")s. c #2F585F", +"!s. c #0F9DA7", +"~s. c #1D6173", +"{s. c #353A46", +"]s. c #333C4C", +"^s. c #1E7070", +"/s. c #236367", +"(s. c #0B9BC0", +"_s. c #1283AF", +":s. c #1C6494", +"t. c #392C3D", +",t. c #09B857", +"'t. c #2F4240", +")t. c #373340", +"!t. c #343A41", +"~t. c #236C4F", +"{t. c #09B665", +"]t. c #323D42", +"^t. c #313E3D", +"/t. c #08BB45", +"(t. c #207241", +"_t. c #392C3F", +":t. c #383842", +"u. c #1B5A9E", +",u. c #224F85", +"'u. c #20598B", +")u. c #1E6A94", +"!u. c #1962A4", +"~u. c #245182", +"{u. c #245980", +"]u. c #206D85", +"^u. c #24716F", +"/u. c #2E5059", +"(u. c #2D545C", +"_u. c #2F5152", +":u. c #29655D", +"v. c #2C4E4A", +",v. c #373B3C", +"'v. c #2E5442", +")v. c #2D5F40", +"!v. c #0D8564", +"~v. c #1F6B54", +"{v. c #31503C", +"]v. c #2B643A", +"^v. c #255F4E", +"/v. c #0A7EA0", +"(v. c #13787A", +"_v. c #2F523B", +":v. c #286B40", +"w. c #31423C", +",w. c #1A7D2D", +"'w. c #3A2C44", +")w. c #353C3F", +"!w. c #335635", +"~w. c #2E8621", +"{w. c #16B41B", +"]w. c #257B29", +"^w. c #3E2A42", +"/w. c #332F45", +"(w. c #324F38", +"_w. c #3A8420", +":w. c #489913", +"x. c #246073", +",x. c #295573", +"'x. c #08A1BF", +")x. c #0DA9D1", +"!x. c #1E6798", +"~x. c #24587F", +"{x. c #25577C", +"]x. c #2A486D", +"^x. c #26507A", +"/x. c #225087", +"(x. c #1B74A9", +"_x. c #13D5DE", +":x. c #13E7E4", +"y. c #1E7440", +",y. c #09BC46", +"'y. c #AAAAAC", +")y. c #AFAFB1", +"!y. c #363940", +"~y. c #0BB22D", +"{y. c #46464E", +"]y. c #BBBBBA", +"^y. c #BEC2BE", +"/y. c #A08D9F", +"(y. c #3BBB59", +"_y. c #00FF32", +":y. c #01FC35", +"z. c #08B7AB", +",z. c #1D8B82", +"'z. c #256580", +")z. c #2B6063", +"!z. c #247278", +"~z. c #199399", +"{z. c #237D73", +"]z. c #218275", +"^z. c #2A6764", +"/z. c #237D6F", +"(z. c #1E8F79", +"_z. c #286C64", +":z. c #2D5F5B", +"A. c #1F6663", +",A. c #344B3B", +"'A. c #314B42", +")A. c #2C603F", +"!A. c #2E5740", +"~A. c #2C5F41", +"{A. c #315041", +"]A. c #363C43", +"^A. c #353E49", +"/A. c #373943", +"(A. c #2B4F5C", +"_A. c #167B88", +":A. c #353F4C", +"B. c #04EA7B", +",B. c #00FC76", +"'B. c #1DA268", +")B. c #3B2F40", +"!B. c #3B2E3E", +"~B. c #1F7B55", +"{B. c #0CB064", +"]B. c #323F42", +"^B. c #3C2D41", +"/B. c #236B41", +"(B. c #09BF46", +"_B. c #2F4A40", +":B. c #393342", +"C. c #24617F", +",C. c #237682", +"'C. c #227386", +")C. c #2D5263", +"!C. c #266F7D", +"~C. c #1E757E", +"{C. c #0D93A4", +"]C. c #227A86", +"^C. c #218082", +"/C. c #237979", +"(C. c #227681", +"_C. c #267576", +":C. c #237D78", +"D. c #393743", +",D. c #373F42", +"'D. c #393841", +")D. c #363D4B", +"!D. c #393744", +"~D. c #2A5662", +"{D. c #167E89", +"]D. c #393845", +"^D. c #147370", +"/D. c #304A4F", +"(D. c #363E51", +"_D. c #2E505E", +":D. c #314661", +"E. c #0BB859", +",E. c #21784D", +"'E. c #3C2F41", +")E. c #3A3340", +"!E. c #149C5F", +"~E. c #14995D", +"{E. c #393540", +"]E. c #3C3143", +"^E. c #256540", +"/E. c #08C246", +"(E. c #2D5141", +"_E. c #32323C", +":E. c #5A5A61", +"F. c #1F7D95", +",F. c #1A8B9B", +"'F. c #07A4AC", +")F. c #1D8894", +"!F. c #296175", +"~F. c #1D8297", +"{F. c #217F88", +"]F. c #286E6F", +"^F. c #267176", +"/F. c #2E5A60", +"(F. c #2B6965", +"_F. c #2C6466", +":F. c #324D51", +"G. c #343F55", +",G. c #2E4465", +"'G. c #2F4663", +")G. c #2C4C72", +"!G. c #22557F", +"~G. c #1B6389", +"{G. c #264C89", +"]G. c #1B5F93", +"^G. c #1C7A9F", +"/G. c #14DADF", +"(G. c #13EFE9", +"_G. c #17C6D2", +":G. c #1C73AB", +"H. c #295C41", +",H. c #08C347", +"'H. c #2C5943", +")H. c #3C3244", +"!H. c #3B3B46", +"~H. c #2E2E3A", +"{H. c #75757B", +"]H. c #5B5B63", +"^H. c #3A3A45", +"/H. c #9D9D9F", +"(H. c #B1B6B3", +"_H. c #C3B0BE", +":H. c #68E78D", +"I. c #178EB2", +",I. c #22778E", +"'I. c #1A80A6", +")I. c #1B83A3", +"!I. c #1F7898", +"~I. c #23728A", +"{I. c #0BB7C2", +"]I. c #0AD7E1", +"^I. c #296676", +"/I. c #2E5E66", +"(I. c #27747A", +"_I. c #267B7C", +":I. c #2E5E65", +"J. c #354151", +",J. c #363D52", +"'J. c #2E5053", +")J. c #128284", +"!J. c #2F466A", +"~J. c #2E4869", +"{J. c #334258", +"]J. c #334359", +"^J. c #2F4364", +"/J. c #284D7A", +"(J. c #2F4369", +"_J. c #1D5785", +":J. c #224E7B", +"K. c #3C3442", +",K. c #3B3544", +"'K. c #2C5541", +")K. c #286443", +"!K. c #3D3144", +"~K. c #393B44", +"{K. c #959599", +"]K. c #31313D", +"^K. c #6D6D73", +"/K. c #B0B4B2", +"(K. c #C2AFBC", +"_K. c #67E791", +":K. c #03FD54", +"L. c #1E7386", +",L. c #0B94A6", +"'L. c #2F5767", +")L. c #2E6068", +"!L. c #218B8D", +"~L. c #2A6C76", +"{L. c #2D626B", +"]L. c #27767C", +"^L. c #354B55", +"/L. c #354A52", +"(L. c #3E3042", +"_L. c #178F5A", +":L. c #237054", +"M. c #2F5469", +",M. c #10B9D8", +"'M. c #22748E", +")M. c #179DA9", +"!M. c #314A69", +"~M. c #323F5D", +"{M. c #304166", +"]M. c #264785", +"^M. c #2E3E6D", +"/M. c #2E3E6B", +"(M. c #2B4175", +"_M. c #243F8C", +":M. c #224393", +"N. c #256D42", +",N. c #3E3244", +"'N. c #3A3D44", +")N. c #B0B0B2", +"!N. c #C0AEBA", +"~N. c #67E694", +"{N. c #03FD5C", +"]N. c #00FF5A", +"^N. c #01FE5B", +"/N. c #26F26F", +"(N. c #4E4756", +"_N. c #374644", +":N. c #394044", +"O. c #325561", +",O. c #364752", +"'O. c #3E3344", +")O. c #2A614D", +"!O. c #0CAB66", +"~O. c #3D2E42", +"{O. c #1E9D6B", +"]O. c #04FF83", +"^O. c #374D4A", +"/O. c #3E3544", +"(O. c #21664F", +"_O. c #1D7454", +":O. c #403144", +"P. c #323D66", +",P. c #245677", +"'P. c #04BAD6", +")P. c #2A5080", +"!P. c #303867", +"~P. c #33415F", +"{P. c #373C53", +"]P. c #2F3F69", +"^P. c #304268", +"/P. c #213E95", +"(P. c #2B3D77", +"_P. c #293F7C", +":P. c #2A3C7B", +"Q. c #03FD63", +",Q. c #00FF61", +"'Q. c #01FE62", +")Q. c #26F275", +"!Q. c #4F4956", +"~Q. c #3C3A46", +"{Q. c #3A4145", +"]Q. c #384645", +"^Q. c #384744", +"/Q. c #364F43", +"(Q. c #335642", +"_Q. c #2E683F", +":Q. c #325A42", +"R. c #432842", +",R. c #236F46", +"'R. c #315246", +")R. c #3E3744", +"!R. c #2C544E", +"~R. c #187D5E", +"{R. c #3F3745", +"]R. c #334A47", +"^R. c #15804B", +"/R. c #354A4E", +"(R. c #0DA7A8", +"_R. c #2C5E64", +":R. c #37434E", +"S. c #314166", +",S. c #363B58", +"'S. c #313F68", +")S. c #2E406F", +"!S. c #2B3F77", +"~S. c #333E61", +"{S. c #2D3D73", +"]S. c #353F5C", +"^S. c #2E4170", +"/S. c #2B3E78", +"(S. c #2C3E75", +"_S. c #2A417B", +":S. c #303C69", +"T. c #03FD6A", +",T. c #00FF69", +"'T. c #01FE6A", +")T. c #26F27B", +"!T. c #3A4246", +"~T. c #3C3D46", +"{T. c #3D3B47", +"]T. c #306441", +"^T. c #325E41", +"/T. c #394744", +"(T. c #364F44", +"_T. c #374C44", +":T. c #325C42", +"U. c #3C3A47", +",U. c #3C4346", +"'U. c #2C842E", +")U. c #30663D", +"!U. c #188247", +"~U. c #335247", +"{U. c #3F3747", +"]U. c #24744A", +"^U. c #276548", +"/U. c #403546", +"(U. c #22734B", +"_U. c #364947", +":U. c #3F3444", +"V. c #3A424F", +",V. c #3C3D4A", +"'V. c #364151", +")V. c #1F6B84", +"!V. c #3F3943", +"~V. c #1D7889", +"{V. c #384450", +"]V. c #3E3B45", +"^V. c #3A454D", +"/V. c #08EEB6", +"(V. c #06E38F", +"_V. c #2D5E51", +":V. c #3F3645", +"W. c #363E5A", +",W. c #3B3D4C", +"'W. c #373D57", +")W. c #343F61", +"!W. c #334062", +"~W. c #363E5B", +"{W. c #373C58", +"]W. c #333F64", +"^W. c #303E67", +"/W. c #1A3182", +"(W. c #393D52", +"_W. c #324566", +":W. c #31436A", +"X. c #365544", +",X. c #326143", +"'X. c #365346", +")X. c #306643", +"!X. c #374F46", +"~X. c #355646", +"{X. c #3B4247", +"]X. c #3D3E48", +"^X. c #3D3E4A", +"/X. c #413840", +"(X. c #2B5164", +"_X. c #05A6C8", +":X. c #00C1EE", +"Y. c #AAAEAC", +",Y. c #BBA8B2", +"'Y. c #65E5A2", +")Y. c #00FF73", +"!Y. c #03FD79", +"~Y. c #00FF78", +"{Y. c #01FE79", +"]Y. c #00FF75", +"^Y. c #26F287", +"/Y. c #514A58", +"(Y. c #3E3D49", +"_Y. c #3C4348", +":Y. c #3B4748", +"Z. c #354D4B", +",Z. c #0BBB69", +"'Z. c #207E57", +")Z. c #413546", +"!Z. c #3D4048", +"~Z. c #413549", +"{Z. c #276D45", +"]Z. c #09C548", +"^Z. c #315847", +"/Z. c #616169", +"(Z. c #393945", +"_Z. c #505059", +":Z. c #A9ADAB", +"`. c #3A5147", +",`. c #287F3E", +"'`. c #0DB158", +")`. c #1B8E53", +"!`. c #403747", +"~`. c #1A935E", +"{`. c #0FAC64", +"]`. c #3A4048", +"^`. c #10AB46", +"/`. c #169C46", +"(`. c #40404B", +"_`. c #8B8B90", +":`. c #DBDBDA", +"<`. c #8B8B91", +"[`. c #3E3E4A", +"}`. c #42424D", +"|`. c #A1A1A2", +"1`. c #AFAFAE", +"2`. c #A8ADAB", +"3`. c #BAA7B0", +"4`. c #65E4A5", +"5`. c #00FF7B", +"6`. c #03FD80", +"7`. c #00FF7F", +"8`. c #01FE80", +"9`. c #00FF7D", +"0`. c #27F28D", +"a`. c #514B58", +"b`. c #3C4549", +"c`. c #3C4449", +"d`. c #3D4149", +"e`. c #375447", +"f`. c #3C4548", +"g`. c #394F48", +"h`. c #355B46", +"i`. c #355946", +"j`. c #306A44", +"k`. c #385247", +"l`. c #3A4B48", +"m`. c #3B4749", +"n`. c #3D4349", +"o`. c #3E3D4A", +"p`. c #3E4049", +"q`. c #3D414A", +"r`. c #3F4047", +"s`. c #374556", +"t`. c #166F94", +"u`. c #07D7DE", +"v`. c #04D5EC", +"w`. c #06F3FF", +"x`. c #346F77", +"y`. c #403440", +"z`. c #3E404C", +"A`. c #3F3E48", +"B`. c #213272", +"C`. c #3C3F4D", +"D`. c #3F3A45", +"E`. c #1D5A8C", +"F`. c #3B404F", +"G`. c #3F3D48", +"H`. c #413943", +"I`. c #315466", +"J`. c #226B83", +"K`. c #423842", +"L`. c #3F3C48", +"M`. c #374A57", +"N`. c #1F7788", +"O`. c #403B46", +"P`. c #3E3F4A", +"Q`. c #3E404B", +"R`. c #413541", +"S`. c #11CDD0", +"T`. c #00F5EB", +"U`. c #0BD2CC", +"V`. c #2098A5", +"W`. c #374C5B", +"X`. c #403A45", +"Y`. c #403A4B", +"Z`. c #344E43", +"``. c #0CBE8C", +" + c #01FFCC", +". + c #366564", +"+ + c #256D43", +"@ + c #2F5D4B", +"# + c #443345", +"$ + c #1C6F71", +"% + c #2A6268", +"& + c #453342", +"* + c #1E6C62", +"= + c #2C5E5B", +"- + c #413947", +"; + c #3A444F", +"> + c #0DA9A9", +", + c #296A70", +"' + c #394653", +") + c #0AA2B1", +"! + c #2E5B64", +"~ + c #423147", +"{ + c #3E6639", +"] + c #3D8226", +"^ + c #2B773A", +"/ + c #2F6C3F", +"( + c #41394B", +"_ + c #2C7E3D", +": + c #375344", +"< + c #40394B", +"[ + c #3E3F49", +"} + c #423548", +"| + c #27704F", +"1 + c #09C25C", +"2 + c #33534B", +"3 + c #443247", +"4 + c #2C6552", +"5 + c #08C16A", +"6 + c #2B6350", +"7 + c #413748", +"8 + c #41364A", +"9 + c #2B6546", +"0 + c #08C648", +"a + c #2D6046", +"b + c #42384A", +"c + c #B9B9BB", +"d + c #5D5D66", +"e + c #40404A", +"f + c #A8ACAA", +"g + c #B9A6AF", +"h + c #65E4A7", +"i + c #00FF80", +"j + c #03FD84", +"k + c #00FF84", +"l + c #01FE84", +"m + c #00FF81", +"n + c #27F291", +"o + c #3F3E4A", +"p + c #3D4449", +"q + c #3B4A49", +"r + c #3B4949", +"s + c #3A4D48", +"t + c #3C4748", +"u + c #3B4849", +"v + c #345E45", +"w + c #3B4B48", +"x + c #385148", +"y + c #385349", +"z + c #3B484A", +"A + c #3F3D49", +"B + c #38524A", +"C + c #3C474B", +"D + c #403D47", +"E + c #374958", +"F + c #1B6385", +"G + c #20919E", +"H + c #0BEEFC", +"I + c #2EB0B6", +"J + c #403E49", +"K + c #3F3F48", +"L + c #3C3D4C", +"M + c #1A3283", +"N + c #384355", +"O + c #1B5887", +"P + c #3F3E49", +"Q + c #3E3F4B", +"R + c #423C44", +"S + c #215884", +"T + c #34475E", +"U + c #413D45", +"V + c #3B4451", +"W + c #403C47", +"X + c #3C434E", +"Y + c #1D7C8C", +"Z + c #3D434E", +"` + c #3E414B", +" .+ c #423541", +"..+ c #239092", +"+.+ c #06D9D2", +"@.+ c #0AF2F2", +"#.+ c #0FB0D6", +"$.+ c #403E47", +"%.+ c #3B454A", +"&.+ c #1B8856", +"*.+ c #1C9065", +"=.+ c #384F53", +"-.+ c #2F5E47", +";.+ c #25734A", +">.+ c #473044", +",.+ c #22646A", +"'.+ c #2D5961", +").+ c #463341", +"!.+ c #226562", +"~.+ c #2D5C5C", +"{.+ c #423946", +"].+ c #3D414C", +"^.+ c #423642", +"/.+ c #1E8286", +"(.+ c #149596", +"_.+ c #452834", +":.+ c #198591", +"<.+ c #198094", +"[.+ c #414A3F", +"}.+ c #3F8724", +"|.+ c #327935", +"1.+ c #2B783A", +"2.+ c #413D4B", +"3.+ c #34703F", +"4.+ c #316B3E", +"5.+ c #10B059", +"6.+ c #1B9254", +"7.+ c #3B4349", +"8.+ c #0FAF66", +"9.+ c #19925D", +"0.+ c #413847", +"a.+ c #3E404A", +"b.+ c #3E3A48", +"c.+ c #13A446", +"d.+ c #14A648", +"e.+ c #403C4A", +"f.+ c #383844", +"g.+ c #5E5E67", +"h.+ c #D0D0D1", +"i.+ c #CFCFD0", +"j.+ c #41414C", +"k.+ c #363643", +"l.+ c #A7ABA9", +"m.+ c #B8A5AE", +"n.+ c #64E4A8", +"o.+ c #00FF83", +"p.+ c #03FD88", +"q.+ c #00FF87", +"r.+ c #01FE87", +"s.+ c #00FF85", +"t.+ c #27F293", +"u.+ c #514B59", +"v.+ c #3D444A", +"w.+ c #394F49", +"x.+ c #3D4249", +"y.+ c #375448", +"z.+ c #385348", +"A.+ c #3A4C49", +"B.+ c #326446", +"C.+ c #394E48", +"D.+ c #385248", +"E.+ c #306A47", +"F.+ c #365848", +"G.+ c #375449", +"H.+ c #3C474A", +"I.+ c #3C454A", +"J.+ c #3A4C4A", +"K.+ c #37544B", +"L.+ c #413A47", +"M.+ c #374857", +"N.+ c #186B8C", +"O.+ c #403845", +"P.+ c #3D4350", +"Q.+ c #3F3945", +"R.+ c #3F3C47", +"S.+ c #3E3F4C", +"T.+ c #423C3E", +"U.+ c #234F9B", +"V.+ c #3A3F59", +"W.+ c #403E46", +"X.+ c #413D46", +"Y.+ c #34465C", +"Z.+ c #1F5480", +"`.+ c #433B42", +" ++ c #285276", +".++ c #2A5072", +"+++ c #423B42", +"@++ c #433841", +"#++ c #25687E", +"$++ c #2D5A6D", +"%++ c #423943", +"&++ c #206E80", +"*++ c #394451", +"=++ c #3E3944", +"-++ c #128A85", +";++ c #00EFF8", +">++ c #02B4E0", +",++ c #19B7D5", +"'++ c #40444E", +")++ c #403A49", +"!++ c #217952", +"~++ c #267357", +"{++ c #27725C", +"]++ c #3B4547", +"^++ c #1B844A", +"/++ c #443443", +"(++ c #1C777F", +"_++ c #1C7F88", +":++ c #463442", +"<++ c #206665", +"[++ c #286464", +"}++ c #413844", +"|++ c #325861", +"1++ c #03D4D3", +"2++ c #209A9E", +"3++ c #256F7D", +"4++ c #1098A2", +"5++ c #437D1B", +"6++ c #3C7927", +"7++ c #297F38", +"8++ c #3E4648", +"9++ c #3F3C4A", +"0++ c #3F394B", +"a++ c #3B5844", +"b++ c #307C38", +"c++ c #423649", +"d++ c #28704F", +"e++ c #34544B", +"f++ c #443147", +"g++ c #20845A", +"h++ c #0AB968", +"i++ c #364C4B", +"j++ c #413B49", +"k++ c #2C6045", +"l++ c #07C647", +"m++ c #2C6A48", +"n++ c #372C40", +"o++ c #84868A", +"p++ c #95959A", +"q++ c #353541", +"r++ c #3F3F4B", +"s++ c #606068", +"t++ c #B0B0AF", +"u++ c #A6ABA9", +"v++ c #B8A5AD", +"w++ c #64E4A9", +"x++ c #00FF86", +"y++ c #03FD8B", +"z++ c #00FF8A", +"A++ c #01FE8A", +"B++ c #00FF88", +"C++ c #27F296", +"D++ c #524C59", +"E++ c #403E4B", +"F++ c #3C484A", +"G++ c #3F404A", +"H++ c #3F404B", +"I++ c #3D474A", +"J++ c #3A5048", +"K++ c #3B4C49", +"L++ c #395249", +"M++ c #3A5049", +"N++ c #3F414A", +"O++ c #3B4D49", +"P++ c #3A504A", +"Q++ c #385549", +"R++ c #3C4A4A", +"S++ c #37574A", +"T++ c #3D464A", +"U++ c #3B4B4C", +"V++ c #403E48", +"W++ c #394856", +"X++ c #147393", +"Y++ c #413D47", +"Z++ c #3F404C", +"`++ c #3E3F4D", +" @+ c #443F40", +".@+ c #234593", +"+@+ c #0546E0", +"@@+ c #39476A", +"#@+ c #413E44", +"$@+ c #433D45", +"%@+ c #2F4A66", +"&@+ c #423D45", +"*@+ c #324A64", +"=@+ c #235782", +"-@+ c #433D44", +";@+ c #413C46", +">@+ c #364E5E", +",@+ c #21718A", +"'@+ c #423843", +")@+ c #17AEB7", +"!@+ c #26858F", +"~@+ c #433541", +"{@+ c #3E414D", +"]@+ c #3B4852", +"^@+ c #147C7D", +"/@+ c #1C859E", +"(@+ c #0797C9", +"_@+ c #2B5F76", +":@+ c #433942", +"<@+ c #433749", +"[@+ c #296D52", +"}@+ c #287154", +"|@+ c #228061", +"1@+ c #3C474E", +"2@+ c #1F7E43", +"3@+ c #346160", +"4@+ c #07E1E6", +"5@+ c #04E9ED", +"6@+ c #3D5460", +"7@+ c #255D5E", +"8@+ c #236E6E", +"9@+ c #433A46", +"0@+ c #3E434E", +"a@+ c #43333F", +"b@+ c #278A91", +"c@+ c #07FFFF", +"d@+ c #06E0E4", +"e@+ c #26AA6D", +"f@+ c #27B671", +"g@+ c #298849", +"h@+ c #3D4B3D", +"i@+ c #403C4E", +"j@+ c #3F3D4B", +"k@+ c #40464A", +"l@+ c #338136", +"m@+ c #3C4F45", +"n@+ c #403C4C", +"o@+ c #403F4B", +"p@+ c #11B059", +"q@+ c #1B9455", +"r@+ c #453248", +"s@+ c #33584F", +"t@+ c #0AC06A", +"u@+ c #247756", +"v@+ c #433849", +"w@+ c #403949", +"x@+ c #179D47", +"y@+ c #12AF48", +"z@+ c #B2B1B5", +"A@+ c #D8D9D8", +"B@+ c #66666E", +"C@+ c #4E4E58", +"D@+ c #A6AAA8", +"E@+ c #B7A4AC", +"F@+ c #64E3AB", +"G@+ c #00FF8B", +"H@+ c #03FD8E", +"I@+ c #00FF8E", +"J@+ c #01FE8E", +"K@+ c #00FF8C", +"L@+ c #27F299", +"M@+ c #403F4A", +"N@+ c #3E444B", +"O@+ c #3C4B4A", +"P@+ c #385749", +"Q@+ c #3D484A", +"R@+ c #38564A", +"S@+ c #355F49", +"T@+ c #346348", +"U@+ c #3A4F4A", +"V@+ c #39544B", +"W@+ c #39534A", +"X@+ c #3D484B", +"Y@+ c #3E444C", +"Z@+ c #3F4448", +"`@+ c #394A55", +" #+ c #127795", +".#+ c #394753", +"+#+ c #413E49", +"@#+ c #414048", +"##+ c #3C3E51", +"$#+ c #1B3387", +"%#+ c #403D45", +"&#+ c #2B4F6F", +"*#+ c #255177", +"=#+ c #443D44", +"-#+ c #413F48", +";#+ c #3B4454", +">#+ c #1E5A8A", +",#+ c #1E748D", +"'#+ c #394A58", +")#+ c #433842", +"!#+ c #0BD6DC", +"~#+ c #17B8C1", +"{#+ c #443540", +"]#+ c #3F424D", +"^#+ c #3F414B", +"/#+ c #15787F", +"(#+ c #39474C", +"_#+ c #235E80", +":#+ c #1A688D", +"<#+ c #433C44", +"[#+ c #423A4A", +"}#+ c #33584E", +"|#+ c #247752", +"1#+ c #28745C", +"2#+ c #315F58", +"3#+ c #2A6E43", +"4#+ c #22735C", +"5#+ c #07CDD8", +"6#+ c #20BCC0", +"7#+ c #443D48", +"8#+ c #2B585E", +"9#+ c #246A6D", +"0#+ c #3E444E", +"a#+ c #44313D", +"b#+ c #1F9FA5", +"c#+ c #0ADCDC", +"d#+ c #0AF6F1", +"e#+ c #0EF5E4", +"f#+ c #05EDED", +"g#+ c #375763", +"h#+ c #413B45", +"i#+ c #3F414C", +"j#+ c #413B4D", +"k#+ c #397538", +"l#+ c #38643D", +"m#+ c #41394D", +"n#+ c #29704F", +"o#+ c #0AC35C", +"p#+ c #35544C", +"q#+ c #423748", +"r#+ c #16A162", +"s#+ c #12A562", +"t#+ c #433A4B", +"u#+ c #335A48", +"v#+ c #04C043", +"w#+ c #408B5D", +"x#+ c #D7CBD4", +"y#+ c #D1D4D2", +"z#+ c #D2D1D2", +"A#+ c #C6C6C7", +"B#+ c #474752", +"C#+ c #40404C", +"D#+ c #41414D", +"E#+ c #9B9B9D", +"F#+ c #ACACAB", +"G#+ c #A5A9A7", +"H#+ c #B6A3AB", +"I#+ c #64E3AD", +"J#+ c #00FF8F", +"K#+ c #03FD92", +"L#+ c #00FF92", +"M#+ c #01FE92", +"N#+ c #27F29C", +"O#+ c #524C5A", +"P#+ c #3E454B", +"Q#+ c #3B4C4B", +"R#+ c #3D474B", +"S#+ c #3A514A", +"T#+ c #3C494B", +"U#+ c #3B4D4B", +"V#+ c #34624A", +"W#+ c #38554A", +"X#+ c #365D4A", +"Y#+ c #413C49", +"Z#+ c #3A4656", +"`#+ c #127994", +" $+ c #384C54", +".$+ c #413D49", +"+$+ c #1751A7", +"@$+ c #334469", +"#$+ c #423E45", +"$$+ c #3F404D", +"%$+ c #3E404D", +"&$+ c #443B43", +"*$+ c #274770", +"=$+ c #294B6E", +"-$+ c #443D45", +";$+ c #423B46", +">$+ c #1F5E89", +",$+ c #38485A", +"'$+ c #3F414D", +")$+ c #433943", +"!$+ c #2A6075", +"~$+ c #28657A", +"{$+ c #47333D", +"]$+ c #2C6270", +"^$+ c #227585", +"/$+ c #433944", +"($+ c #167380", +"_$+ c #31555F", +":$+ c #30516A", +"<$+ c #0E79A7", +"[$+ c #3C424F", +"}$+ c #3D424B", +"|$+ c #1D8555", +"1$+ c #335B53", +"2$+ c #247B61", +"3$+ c #335E47", +"4$+ c #089968", +"5$+ c #33495D", +"6$+ c #433742", +"7$+ c #433945", +"8$+ c #2A5B64", +"9$+ c #25686E", +"0$+ c #433B47", +"a$+ c #423844", +"b$+ c #336B71", +"c$+ c #01ECEF", +"d$+ c #03D7D7", +"e$+ c #23CFAE", +"f$+ c #09FDF9", +"g$+ c #11E8EB", +"h$+ c #01FFFF", +"i$+ c #27969C", +"j$+ c #44313E", +"k$+ c #40394E", +"l$+ c #3E6140", +"m$+ c #377834", +"n$+ c #403E4D", +"o$+ c #403F4C", +"p$+ c #1B9556", +"q$+ c #462F48", +"r$+ c #297156", +"s$+ c #09C16A", +"t$+ c #305C50", +"u$+ c #42394B", +"v$+ c #159242", +"w$+ c #26CC5D", +"x$+ c #C5CEC8", +"y$+ c #D6D3D5", +"z$+ c #9F9FA3", +"A$+ c #A3A8A6", +"B$+ c #B5A3AA", +"C$+ c #64E3AE", +"D$+ c #00FF93", +"E$+ c #03FD96", +"F$+ c #00FF95", +"G$+ c #01FE95", +"H$+ c #27F29F", +"I$+ c #534D5A", +"J$+ c #413F4B", +"K$+ c #3E464C", +"L$+ c #40424B", +"M$+ c #40414B", +"N$+ c #3F434B", +"O$+ c #3D494B", +"P$+ c #3F424B", +"Q$+ c #3F444B", +"R$+ c #423C4C", +"S$+ c #3C4C4B", +"T$+ c #3B514B", +"U$+ c #3A524A", +"V$+ c #3E474B", +"W$+ c #3E484C", +"X$+ c #39554B", +"Y$+ c #3F444C", +"Z$+ c #39544C", +"`$+ c #413F4C", +" %+ c #3F424C", +".%+ c #3E4A4A", +"+%+ c #375257", +"@%+ c #127C94", +"#%+ c #3B4653", +"$%+ c #423F49", +"%%+ c #40414C", +"&%+ c #40414D", +"*%+ c #364F6A", +"=%+ c #0081FF", +"-%+ c #1162D7", +";%+ c #42414A", +">%+ c #41434A", +",%+ c #169BB8", +"'%+ c #24698F", +")%+ c #413F4A", +"!%+ c #3F434D", +"~%+ c #0ACCE9", +"{%+ c #1E89B1", +"]%+ c #443840", +"^%+ c #3F424E", +"/%+ c #423E48", +"(%+ c #3A4A58", +"_%+ c #1E758F", +":%+ c #433C47", +"<%+ c #3C4551", +"[%+ c #1C7D8D", +"}%+ c #423F4A", +"|%+ c #177081", +"1%+ c #305360", +"2%+ c #3E4250", +"3%+ c #0D7AA9", +"4%+ c #315065", +"5%+ c #433D46", +"6%+ c #40424C", +"7%+ c #44394A", +"8%+ c #208055", +"9%+ c #34574E", +"0%+ c #28795F", +"a%+ c #14856E", +"b%+ c #148C4F", +"c%+ c #453847", +"d%+ c #3F434E", +"e%+ c #443B48", +"f%+ c #2C535E", +"g%+ c #236770", +"h%+ c #443848", +"i%+ c #3F3D4E", +"j%+ c #403D4F", +"k%+ c #3E2D49", +"l%+ c #355E61", +"m%+ c #31B158", +"n%+ c #3A9736", +"o%+ c #05F0E6", +"p%+ c #00DDE7", +"q%+ c #0DDCDF", +"r%+ c #3A6E77", +"s%+ c #413843", +"t%+ c #403F4E", +"u%+ c #414C48", +"v%+ c #3A822E", +"w%+ c #3F4947", +"x%+ c #413D4D", +"y%+ c #44384B", +"z%+ c #2A7050", +"A%+ c #0AC35D", +"B%+ c #38524D", +"C%+ c #3C464C", +"D%+ c #0DB868", +"E%+ c #1D8B5B", +"F%+ c #43394A", +"G%+ c #443C4D", +"H%+ c #335346", +"I%+ c #19D356", +"J%+ c #7CD398", +"K%+ c #DED2DA", +"L%+ c #D0D3D1", +"M%+ c #3A3A46", +"N%+ c #AEAEAD", +"O%+ c #A2A7A5", +"P%+ c #B5A2A9", +"Q%+ c #63E3B0", +"R%+ c #00FF97", +"S%+ c #03FD9A", +"T%+ c #00FF99", +"U%+ c #01FE99", +"V%+ c #00FF98", +"W%+ c #27F2A2", +"X%+ c #3E474C", +"Y%+ c #3C4E4C", +"Z%+ c #39574A", +"`%+ c #3E484B", +" &+ c #3D4C4C", +".&+ c #3C4D4C", +"+&+ c #3D4B4C", +"@&+ c #3B524B", +"#&+ c #3A554C", +"$&+ c #3E484D", +"%&+ c #3F444D", +"&&+ c #414049", +"*&+ c #375558", +"=&+ c #127E93", +"-&+ c #3B4754", +";&+ c #3D4659", +">&+ c #0C4DBE", +",&+ c #284F90", +"'&+ c #444248", +")&+ c #40404D", +"!&+ c #423C48", +"~&+ c #3C515A", +"{&+ c #00C3F5", +"]&+ c #1791C6", +"^&+ c #443F46", +"/&+ c #197CAA", +"(&+ c #206A96", +"_&+ c #453C43", +":&+ c #40414E", +"<&+ c #40424D", +"[&+ c #433B45", +"}&+ c #1F718A", +"|&+ c #355464", +"1&+ c #443B45", +"2&+ c #38505D", +"3&+ c #433D48", +"4&+ c #443D47", +"5&+ c #1E6479", +"6&+ c #256073", +"7&+ c #473942", +"8&+ c #16719A", +"9&+ c #206485", +"0&+ c #443C45", +"a&+ c #45384B", +"b&+ c #2A6B53", +"c&+ c #2B7051", +"d&+ c #246A66", +"e&+ c #138073", +"f&+ c #1C9858", +"g&+ c #365A52", +"h&+ c #423F4D", +"i&+ c #434146", +"j&+ c #276F78", +"k&+ c #138F9B", +"l&+ c #414F48", +"m&+ c #435144", +"n&+ c #3E5342", +"o&+ c #667E34", +"p&+ c #A7D007", +"q&+ c #3FB232", +"r&+ c #2C8F37", +"s&+ c #36685F", +"t&+ c #09B2C2", +"u&+ c #1E8B97", +"v&+ c #453641", +"w&+ c #423E4E", +"x&+ c #3E7C30", +"y&+ c #3E5E3E", +"z&+ c #413C4F", +"A&+ c #41404C", +"B&+ c #11B05A", +"C&+ c #1A9755", +"D&+ c #1C925E", +"E&+ c #0EB466", +"F&+ c #3B494C", +"G&+ c #423E4C", +"H&+ c #594D5F", +"I&+ c #5CCC81", +"J&+ c #2DDB66", +"K&+ c #BACAC0", +"L&+ c #D8D4D7", +"M&+ c #D1D2D1", +"N&+ c #CDCDCE", +"O&+ c #50505A", +"P&+ c #42424E", +"Q&+ c #B3A0A8", +"R&+ c #63E3B2", +"S&+ c #00FF9B", +"T&+ c #03FD9D", +"U&+ c #00FF9D", +"V&+ c #01FE9D", +"W&+ c #00FF9C", +"X&+ c #27F2A5", +"Y&+ c #534D5B", +"Z&+ c #41404D", +"`&+ c #3E494C", +" *+ c #3B504C", +".*+ c #375C4B", +"+*+ c #39574C", +"@*+ c #3C4C4C", +"#*+ c #3C4F4C", +"$*+ c #3F464D", +"%*+ c #3C4D4D", +"&*+ c #3A534F", +"**+ c #3D494D", +"=*+ c #3E474E", +"-*+ c #41404A", +";*+ c #3B4957", +">*+ c #127F93", +",*+ c #423F4B", +"'*+ c #3F414F", +")*+ c #463E40", +"!*+ c #294679", +"~*+ c #224B8B", +"{*+ c #433E49", +"]*+ c #2C5579", +"^*+ c #1A6597", +"/*+ c #423C47", +"(*+ c #40424E", +"_*+ c #433E48", +":*+ c #3C3E50", +"<*+ c #1E5887", +"[*+ c #42404B", +"}*+ c #443B46", +"|*+ c #2F5B6E", +"1*+ c #25647D", +"2*+ c #4B2C36", +"3*+ c #247080", +"4*+ c #2C6372", +"5*+ c #443A45", +"6*+ c #3F424F", +"7*+ c #1F6079", +"8*+ c #255C71", +"9*+ c #493840", +"0*+ c #255F7E", +"a*+ c #12749F", +"b*+ c #423E4D", +"c*+ c #394D4C", +"d*+ c #15925E", +"e*+ c #16736D", +"f*+ c #1A976A", +"g*+ c #03FA8E", +"h*+ c #0FC55D", +"i*+ c #287A3D", +"j*+ c #2D8242", +"k*+ c #0BDED8", +"l*+ c #01EEFA", +"m*+ c #2EA06E", +"n*+ c #467323", +"o*+ c #3E7630", +"p*+ c #6C9724", +"q*+ c #B9FC06", +"r*+ c #3CB833", +"s*+ c #1D8D75", +"t*+ c #483143", +"u*+ c #1F7A86", +"v*+ c #158B99", +"w*+ c #413A50", +"x*+ c #416839", +"y*+ c #3F7531", +"z*+ c #413B4F", +"A*+ c #44384C", +"B*+ c #2A7051", +"C*+ c #08C55C", +"D*+ c #35514B", +"E*+ c #335C52", +"F*+ c #08C46B", +"G*+ c #296F55", +"H*+ c #44394B", +"I*+ c #43434F", +"J*+ c #343642", +"K*+ c #857F8A", +"L*+ c #BCD5C3", +"M*+ c #21D75C", +"N*+ c #6CD08C", +"O*+ c #DED3DB", +"P*+ c #A9A9AC", +"Q*+ c #393946", +"R*+ c #43434E", +"S*+ c #B19EA6", +"T*+ c #63E2B3", +"U*+ c #00FF9F", +"V*+ c #03FDA1", +"W*+ c #00FFA0", +"X*+ c #01FEA1", +"Y*+ c #27F2A8", +"Z*+ c #544E5B", +"`*+ c #41424C", +" =+ c #40454D", +".=+ c #41434C", +"+=+ c #3F484D", +"@=+ c #42404D", +"#=+ c #3A574C", +"$=+ c #3E4C4C", +"%=+ c #3E4C4D", +"&=+ c #40444D", +"*=+ c #3B544C", +"==+ c #3C514C", +"-=+ c #3A554D", +";=+ c #3F494D", +">=+ c #3E4B4D", +",=+ c #3C514D", +"'=+ c #3B534F", +")=+ c #3D4952", +"!=+ c #167B8C", +"~=+ c #3B4A56", +"{=+ c #433F4A", +"]=+ c #41424D", +"^=+ c #42404C", +"/=+ c #41424E", +"(=+ c #433E46", +"_=+ c #177ECB", +":=+ c #007AFF", +"<=+ c #2E4D86", +"[=+ c #453F42", +"}=+ c #40424F", +"|=+ c #473B40", +"1=+ c #25567D", +"2=+ c #285F7C", +"3=+ c #473D43", +"4=+ c #42414C", +"5=+ c #1C5D8D", +"6=+ c #3B4658", +"7=+ c #43404A", +"8=+ c #3E4450", +"9=+ c #13AEBE", +"0=+ c #37636D", +"a=+ c #335663", +"b=+ c #217887", +"c=+ c #453B45", +"d=+ c #40434F", +"e=+ c #463D46", +"f=+ c #1E6882", +"g=+ c #1F627C", +"h=+ c #354F62", +"i=+ c #0C7CAC", +"j=+ c #364B5D", +"k=+ c #443F49", +"l=+ c #3F444E", +"m=+ c #07A365", +"n=+ c #365254", +"o=+ c #267D5E", +"p=+ c #11C46A", +"q=+ c #327759", +"r=+ c #413F45", +"s=+ c #374E56", +"t=+ c #06C1C8", +"u=+ c #1BD1D5", +"v=+ c #3F4D5D", +"w=+ c #41384B", +"x=+ c #403D50", +"y=+ c #3E3656", +"z=+ c #46801F", +"A=+ c #2A9555", +"B=+ c #0EA4AE", +"C=+ c #41434B", +"D=+ c #296C78", +"E=+ c #0F9CA8", +"F=+ c #3E4053", +"G=+ c #455342", +"H=+ c #418228", +"I=+ c #42464A", +"J=+ c #42414D", +"K=+ c #199755", +"L=+ c #12AD65", +"M=+ c #159F60", +"N=+ c #A4A7A9", +"O=+ c #E5DAE0", +"P=+ c #65CB86", +"Q=+ c #29DD63", +"R=+ c #B5CDBD", +"S=+ c #DBD5D9", +"T=+ c #D2D3D2", +"U=+ c #818188", +"V=+ c #44444F", +"W=+ c #4C4C57", +"X=+ c #9EA2A1", +"Y=+ c #B3A0A7", +"Z=+ c #62E2B5", +"`=+ c #03FDA5", +" -+ c #00FFA4", +".-+ c #01FEA4", +"+-+ c #27F2AB", +"@-+ c #554E5C", +"#-+ c #41434D", +"$-+ c #3D4E4D", +"%-+ c #3D4D4E", +"&-+ c #3F494E", +"*-+ c #3D4F4E", +"=-+ c #3A564E", +"--+ c #3C514E", +";-+ c #3B534E", +">-+ c #395B4F", +",-+ c #41444E", +"'-+ c #3D5050", +")-+ c #3D4E4F", +"!-+ c #3E4B4F", +"~-+ c #197987", +"{-+ c #3A4C58", +"]-+ c #42434C", +"^-+ c #40464F", +"/-+ c #41414E", +"(-+ c #44434A", +"_-+ c #145CB6", +":-+ c #0666E5", +"<-+ c #365885", +"[-+ c #443D43", +"}-+ c #414250", +"|-+ c #414450", +"1-+ c #453745", +"2-+ c #31777E", +"3-+ c #20779D", +"4-+ c #443B44", +"5-+ c #365F6D", +"6-+ c #404551", +"7-+ c #463F46", +"8-+ c #235780", +"9-+ c #2E506F", +"0-+ c #453F47", +"a-+ c #41424F", +"b-+ c #41454F", +"c-+ c #05E4F0", +"d-+ c #219AAB", +"e-+ c #1A8494", +"f-+ c #423E4B", +"g-+ c #404F58", +"h-+ c #0BBECA", +"i-+ c #01ABD9", +"j-+ c #395C6E", +"k-+ c #1178A4", +"l-+ c #275D7A", +"m-+ c #453D47", +"n-+ c #45404C", +"o-+ c #216861", +"p-+ c #0E9762", +"q-+ c #385A4F", +"r-+ c #355A56", +"s-+ c #26775E", +"t-+ c #4A2F47", +"u-+ c #404752", +"v-+ c #127B81", +"w-+ c #2B5A64", +"x-+ c #473744", +"y-+ c #42404A", +"z-+ c #43474C", +"A-+ c #433D51", +"B-+ c #3F6338", +"C-+ c #3D6D24", +"D-+ c #335A68", +"E-+ c #0AB0AF", +"F-+ c #38545D", +"G-+ c #345764", +"H-+ c #0AA1B1", +"I-+ c #38585F", +"J-+ c #487D24", +"K-+ c #425841", +"L-+ c #423D50", +"M-+ c #42434D", +"N-+ c #45394D", +"O-+ c #08C65D", +"P-+ c #36524B", +"Q-+ c #287759", +"R-+ c #09C069", +"S-+ c #355750", +"T-+ c #453D4D", +"U-+ c #C9CACA", +"V-+ c #DCD8DA", +"W-+ c #BDCDC2", +"X-+ c #2BDA64", +"Y-+ c #5DCE82", +"Z-+ c #DBD1D7", +"`-+ c #D2D4D2", +" ;+ c #575761", +".;+ c #3B3B48", +"+;+ c #7D8184", +"@;+ c #B8A5AB", +"#;+ c #61E0B5", +"$;+ c #00FFA7", +"%;+ c #03FDA8", +"&;+ c #01FEA8", +"*;+ c #26F1AD", +"=;+ c #3E4A4E", +"-;+ c #3F474E", +";;+ c #3E4C4E", +">;+ c #40474E", +",;+ c #40464E", +"';+ c #3F484E", +");+ c #395950", +"!;+ c #40454F", +"~;+ c #197B87", +"{;+ c #433F4B", +"];+ c #41414F", +"^;+ c #464348", +"/;+ c #243E78", +"(;+ c #224685", +"_;+ c #474245", +":;+ c #40414F", +"<;+ c #453844", +"[;+ c #2F7381", +"};+ c #05CFF7", +"|;+ c #1477AA", +"1;+ c #1789A7", +"2;+ c #02E6FF", +"3;+ c #188DBF", +"4;+ c #453C46", +"5;+ c #454049", +"6;+ c #2E4F6D", +"7;+ c #225984", +"8;+ c #463E46", +"9;+ c #443E49", +"0;+ c #2E6072", +"a;+ c #217189", +"b;+ c #463A45", +"c;+ c #1B8292", +"d;+ c #38515E", +"e;+ c #463B46", +"f;+ c #3B4A57", +"g;+ c #01CFE9", +"h;+ c #10D7F5", +"i;+ c #3C5B6A", +"j;+ c #463841", +"k;+ c #1D6B8F", +"l;+ c #177098", +"m;+ c #424049", +"n;+ c #463C4C", +"o;+ c #28635A", +"p;+ c #20695E", +"q;+ c #315F4E", +"r;+ c #257550", +"s;+ c #49334C", +"t;+ c #1D8D65", +"u;+ c #3E4952", +"v;+ c #1C6D76", +"w;+ c #226670", +"x;+ c #414150", +"y;+ c #403F50", +"z;+ c #3C3454", +"A;+ c #404E44", +"B;+ c #3D7E20", +"C;+ c #444748", +"D;+ c #3C4856", +"E;+ c #0DACAA", +"F;+ c #2C6B72", +"G;+ c #3F4651", +"H;+ c #0B9BB3", +"I;+ c #328F56", +"J;+ c #48672B", +"K;+ c #413C53", +"L;+ c #42414E", +"M;+ c #1B9655", +"N;+ c #394C4E", +"O;+ c #0BBE6A", +"P;+ c #21835A", +"Q;+ c #473D4E", +"R;+ c #75757C", +"S;+ c #DFD3DB", +"T;+ c #72CD8F", +"U;+ c #22DC5E", +"V;+ c #AECEB9", +"W;+ c #DBD3D9", +"X;+ c #D8DAD8", +"Y;+ c #B2B2B5", +"Z;+ c #575B62", +"`;+ c #B4A1A7", +" >+ c #61E1B8", +".>+ c #00FFAB", +"+>+ c #03FDAC", +"@>+ c #00FFAC", +"#>+ c #01FEAC", +"$>+ c #00FFAA", +"%>+ c #2FFAB8", +"&>+ c #635D68", +"*>+ c #43424E", +"=>+ c #41474E", +"->+ c #3D514F", +";>+ c #42444E", +">>+ c #404B4E", +",>+ c #3C544F", +"'>+ c #3C554F", +")>+ c #3F4B4F", +"!>+ c #3F4D4F", +"~>+ c #3E4E50", +"{>+ c #43414D", +"]>+ c #188087", +"^>+ c #395259", +"/>+ c #453E4B", +"(>+ c #404850", +"_>+ c #42434E", +":>+ c #41434F", +"<>+ c #484045", +"[>+ c #203A76", +"}>+ c #2D3E68", +"|>+ c #464349", +"1>+ c #42424F", +"2>+ c #423F4C", +"3>+ c #3D5262", +"4>+ c #473C44", +"5>+ c #2A778A", +"6>+ c #02F1FF", +"7>+ c #06D1F0", +"8>+ c #395266", +"9>+ c #463E47", +"0>+ c #3C4759", +"a>+ c #1C5D8E", +"b>+ c #1C758E", +"c>+ c #404552", +"d>+ c #247381", +"e>+ c #2F6371", +"f>+ c #443F4A", +"g>+ c #165E77", +"h>+ c #26607D", +"i>+ c #405561", +"j>+ c #464049", +"k>+ c #2E5770", +"l>+ c #0C7DAA", +"m>+ c #3F4356", +"n>+ c #385251", +"o>+ c #157A5F", +"p>+ c #443F4B", +"q>+ c #395B5F", +"r>+ c #0BD295", +"s>+ c #306953", +"t>+ c #287D54", +"u>+ c #169266", +"v>+ c #188167", +"w>+ c #415249", +"x>+ c #424D49", +"y>+ c #404E4A", +"z>+ c #455047", +"A>+ c #79A824", +"B>+ c #4C9B12", +"C>+ c #405142", +"D>+ c #433E51", +"E>+ c #43424B", +"F>+ c #149D9E", +"G>+ c #1F898B", +"H>+ c #443A4B", +"I>+ c #119DA4", +"J>+ c #27916F", +"K>+ c #474044", +"L>+ c #414350", +"M>+ c #463A4D", +"N>+ c #2B7151", +"O>+ c #09C65D", +"P>+ c #34594D", +"Q>+ c #1C9761", +"R>+ c #0EB065", +"S>+ c #40494F", +"T>+ c #A3A4A7", +"U>+ c #D1D2D2", +"V>+ c #D9D6D8", +"W>+ c #C2CCC5", +"X>+ c #32DA68", +"Y>+ c #57D480", +"Z>+ c #D5CED3", +"`>+ c #DEDFDD", +" ,+ c #8B8C91", +".,+ c #454550", +"+,+ c #9C8991", +"@,+ c #66E6BE", +"#,+ c #00FFAF", +"$,+ c #03FDB0", +"%,+ c #00FFB0", +"&,+ c #02FEB0", +"*,+ c #00FFAD", +"=,+ c #34FFBF", +"-,+ c #8A848A", +";,+ c #444450", +">,+ c #43424F", +",,+ c #42434F", +"',+ c #41484F", +"),+ c #43414E", +"!,+ c #42454F", +"~,+ c #3F4C4F", +"{,+ c #404950", +"],+ c #3C5453", +"^,+ c #188386", +"/,+ c #3B4D58", +"(,+ c #44404C", +"_,+ c #424350", +":,+ c #44404A", +"<,+ c #3C5063", +"[,+ c #0972D2", +"},+ c #2C4B7F", +"|,+ c #474146", +"1,+ c #43414C", +"2,+ c #453A47", +"3,+ c #37656D", +"4,+ c #03E8F7", +"5,+ c #02C3EE", +"6,+ c #2B8297", +"7,+ c #463843", +"8,+ c #1C5E8E", +"9,+ c #384C62", +"0,+ c #45414B", +"a,+ c #424450", +"b,+ c #473E48", +"c,+ c #2A6175", +"d,+ c #2B6277", +"e,+ c #365965", +"f,+ c #1D8090", +"g,+ c #186074", +"h,+ c #29596D", +"i,+ c #483D46", +"j,+ c #433E4A", +"k,+ c #424451", +"l,+ c #44414C", +"m,+ c #3C4959", +"n,+ c #0D7BAB", +"o,+ c #285F75", +"p,+ c #197653", +"q,+ c #365555", +"r,+ c #493447", +"s,+ c #317570", +"t,+ c #00FFB5", +"u,+ c #20A566", +"v,+ c #1F8553", +"w,+ c #0EA75E", +"x,+ c #36763F", +"y,+ c #357D39", +"z,+ c #3A7F36", +"A,+ c #3B7932", +"B,+ c #4F8F27", +"C,+ c #A2FF00", +"D,+ c #7ADB10", +"E,+ c #434350", +"F,+ c #42444F", +"G,+ c #463C48", +"H,+ c #208689", +"I,+ c #129DA1", +"J,+ c #484643", +"K,+ c #1FA382", +"L,+ c #198A97", +"M,+ c #453D4B", +"N,+ c #1C9656", +"O,+ c #2E6955", +"P,+ c #09C46B", +"Q,+ c #2C6653", +"R,+ c #4B4152", +"S,+ c #C5C7C7", +"T,+ c #E1D5DD", +"U,+ c #82D09B", +"V,+ c #1DDB5B", +"W,+ c #A0CBAE", +"X,+ c #E2D8DE", +"Y,+ c #5C5F67", +"Z,+ c #3C3C49", +"`,+ c #393D49", +" '+ c #73606D", +".'+ c #69E8C2", +"+'+ c #00FFB2", +"@'+ c #03FDB3", +"#'+ c #00FFB3", +"$'+ c #02FEB4", +"%'+ c #00FFB1", +"&'+ c #2EF9BD", +"*'+ c #A9A2A5", +"='+ c #494A55", +"-'+ c #41464F", +";'+ c #41474F", +">'+ c #3E4F51", +",'+ c #3D5150", +"''+ c #3D5250", +")'+ c #3E5050", +"!'+ c #43404E", +"~'+ c #3F4D51", +"{'+ c #198285", +"]'+ c #43454E", +"^'+ c #414750", +"/'+ c #404951", +"('+ c #414451", +"_'+ c #473B41", +":'+ c #1F78AF", +"<'+ c #0090FF", +"['+ c #116BD5", +"}'+ c #44434D", +"|'+ c #44444E", +"1'+ c #198AAE", +"2'+ c #0894C7", +"3'+ c #3E5461", +"4'+ c #433F4C", +"5'+ c #474148", +"6'+ c #25557F", +"7'+ c #2E4A6E", +"8'+ c #483E45", +"9'+ c #44414D", +"0'+ c #3D4856", +"a'+ c #375562", +"b'+ c #067E90", +"c'+ c #2D5262", +"d'+ c #46414C", +"e'+ c #414551", +"f'+ c #43414B", +"g'+ c #1A6D9A", +"h'+ c #068592", +"i'+ c #2E5D4E", +"j'+ c #473E4F", +"k'+ c #3A645B", +"l'+ c #3A585F", +"m'+ c #15726B", +"n'+ c #198C6C", +"o'+ c #3B4F56", +"p'+ c #443C4F", +"q'+ c #42414F", +"r'+ c #42404F", +"s'+ c #568534", +"t'+ c #5B7740", +"u'+ c #42464F", +"v'+ c #473D47", +"w'+ c #2C6D72", +"x'+ c #0AAAB2", +"y'+ c #4B7F2A", +"z'+ c #2A8F6C", +"A'+ c #0F95AB", +"B'+ c #404650", +"C'+ c #463B4E", +"D'+ c #2E6750", +"E'+ c #13B169", +"F'+ c #109057", +"G'+ c #6E6874", +"H'+ c #DDDEDD", +"I'+ c #D4D5D4", +"J'+ c #D8D6D7", +"K'+ c #C8CDCA", +"L'+ c #34D569", +"M'+ c #53DB7F", +"N'+ c #C0BBC0", +"O'+ c #3F444F", +"P'+ c #544152", +"Q'+ c #56D5B3", +"R'+ c #00FFBA", +"S'+ c #02FDB7", +"T'+ c #00FFB7", +"U'+ c #02FEB8", +"V'+ c #00FFB6", +"W'+ c #2BF7BE", +"X'+ c #B2ACAC", +"Y'+ c #6D6E74", +"Z'+ c #454551", +"`'+ c #44424F", +" )+ c #414B51", +".)+ c #434550", +"+)+ c #434650", +"@)+ c #424750", +"#)+ c #3F4F51", +"$)+ c #3F4E51", +"%)+ c #3F5052", +"&)+ c #3E5353", +"*)+ c #3F4F52", +"=)+ c #168A8A", +"-)+ c #355B62", +";)+ c #414C4F", +">)+ c #424550", +",)+ c #414A52", +"')+ c #44434F", +"))+ c #43444F", +"!)+ c #424452", +"~)+ c #484145", +"{)+ c #275994", +"])+ c #005DDD", +"^)+ c #2668AE", +"/)+ c #46434B", +"()+ c #434450", +"_)+ c #45414D", +":)+ c #43404F", +"<)+ c #136A9B", +"[)+ c #384A60", +"})+ c #45434D", +"|)+ c #463F4A", +"1)+ c #33586E", +"2)+ c #1689B0", +"3)+ c #444452", +"4)+ c #44434E", +"5)+ c #434451", +"6)+ c #424652", +"7)+ c #483C47", +"8)+ c #266B7F", +"9)+ c #0AB2BA", +"0)+ c #366C77", +"a)+ c #4A3544", +"b)+ c #473E4D", +"c)+ c #45404E", +"d)+ c #424551", +"e)+ c #4A3C49", +"f)+ c #1E6E80", +"g)+ c #0686A8", +"h)+ c #424454", +"i)+ c #44404E", +"j)+ c #127F66", +"k)+ c #31595A", +"l)+ c #346757", +"m)+ c #287555", +"n)+ c #4B344A", +"o)+ c #444350", +"p)+ c #453F4F", +"q)+ c #453E50", +"r)+ c #413255", +"s)+ c #3F3454", +"t)+ c #423E53", +"u)+ c #443650", +"v)+ c #355465", +"w)+ c #0EBCA8", +"x)+ c #3D7E47", +"y)+ c #34616A", +"z)+ c #0BA2B1", +"A)+ c #3B515D", +"B)+ c #46404C", +"C)+ c #12B05A", +"D)+ c #1D9756", +"E)+ c #24895E", +"F)+ c #02B15F", +"G)+ c #93ACA3", +"H)+ c #E2DCDE", +"I)+ c #D3D5D4", +"J)+ c #E0D5DD", +"K)+ c #84CA9B", +"L)+ c #28E765", +"M)+ c #578F6E", +"N)+ c #443A4E", +"O)+ c #424651", +"P)+ c #4B384A", +"Q)+ c #43C2A5", +"R)+ c #00FFC1", +"S)+ c #01FCBA", +"T)+ c #00FFBB", +"U)+ c #02FEBB", +"V)+ c #2CF8C2", +"W)+ c #ADA7A8", +"X)+ c #909192", +"Y)+ c #454651", +"Z)+ c #404C51", +"`)+ c #424851", +" !+ c #3D5754", +".!+ c #168D89", +"+!+ c #336165", +"@!+ c #444250", +"#!+ c #45444E", +"$!+ c #414254", +"%!+ c #11439E", +"&!+ c #3C445A", +"*!+ c #46424C", +"=!+ c #1A6794", +"-!+ c #285C7C", +";!+ c #46444D", +">!+ c #473846", +",!+ c #2F7F86", +"'!+ c #00DFFF", +")!+ c #20719D", +"!!+ c #483B43", +"~!+ c #46414E", +"{!+ c #424752", +"]!+ c #424A55", +"^!+ c #13787C", +"/!+ c #148190", +"(!+ c #0AEDEF", +"_!+ c #0BC0C3", +":!+ c #276D6C", +"~+ c #345A5F", +",~+ c #28726A", +"'~+ c #1F8168", +")~+ c #207D5A", +"!~+ c #14C491", +"~~+ c #02D075", +"{~+ c #316253", +"]~+ c #1573A5", +"^~+ c #216A89", +"/~+ c #483F51", +"(~+ c #276A57", +"_~+ c #1B765B", +":~+ c #464351", +"<~+ c #3F4F5B", +"[~+ c #04F7CE", +"}~+ c #15B67D", +"|~+ c #2D754E", +"1~+ c #317D50", +"2~+ c #397249", +"3~+ c #3C7145", +"4~+ c #417342", +"5~+ c #45733D", +"6~+ c #486D3B", +"7~+ c #435B41", +"8~+ c #8FAD1C", +"9~+ c #49E17F", +"0~+ c #1D9293", +"a~+ c #0F9EAB", +"b~+ c #277380", +"c~+ c #473D49", +"d~+ c #14AF5B", +"e~+ c #179D56", +"f~+ c #28B373", +"g~+ c #41D88E", +"h~+ c #CCD1CF", +"i~+ c #D9D7D8", +"j~+ c #D6D5D5", +"k~+ c #D3D5D3", +"l~+ c #E2D7DE", +"m~+ c #8EC9A2", +"n~+ c #04C445", +"o~+ c #2E6F4B", +"p~+ c #473C51", +"q~+ c #444451", +"r~+ c #4D3A4B", +"s~+ c #44C4AA", +"t~+ c #00FFC9", +"u~+ c #01FCC1", +"v~+ c #00FFC2", +"w~+ c #02FEC3", +"x~+ c #2DF8C8", +"y~+ c #A8A2A3", +"z~+ c #87878A", +"A~+ c #444551", +"B~+ c #454450", +"C~+ c #424A53", +"D~+ c #424C53", +"E~+ c #414F54", +"F~+ c #434952", +"G~+ c #178C81", +"H~+ c #346163", +"I~+ c #483F4D", +"J~+ c #434752", +"K~+ c #424B53", +"L~+ c #454350", +"M~+ c #45444F", +"N~+ c #414457", +"O~+ c #133F99", +"P~+ c #384363", +"Q~+ c #47454D", +"R~+ c #444652", +"S~+ c #483E49", +"T~+ c #335C70", +"U~+ c #04B5DA", +"V~+ c #306A84", +"W~+ c #473F4A", +"X~+ c #45434F", +"Y~+ c #493C45", +"Z~+ c #483F49", +"`~+ c #375765", +" {+ c #1C7E85", +".{+ c #19B3B5", +"+{+ c #09AFA3", +"@{+ c #286567", +"#{+ c #4F3845", +"${+ c #2B6275", +"%{+ c #2B6177", +"&{+ c #4B3843", +"*{+ c #493D4C", +"={+ c #46424F", +"-{+ c #12CA83", +";{+ c #0EF393", +">{+ c #445755", +",{+ c #20648A", +"'{+ c #146F9B", +"){+ c #4A3646", +"!{+ c #325D51", +"~{+ c #148058", +"{{+ c #434851", +"]{+ c #464250", +"^{+ c #444550", +"/{+ c #366D63", +"({+ c #434D58", +"_{+ c #463F51", +":{+ c #463D52", +"<{+ c #453D52", +"[{+ c #453D53", +"}{+ c #443D53", +"|{+ c #443E54", +"1{+ c #423E56", +"2{+ c #43374C", +"3{+ c #258583", +"4{+ c #10A3A6", +"5{+ c #17909E", +"6{+ c #1D8593", +"7{+ c #473F4B", +"8{+ c #444552", +"9{+ c #444651", +"0{+ c #483D50", +"a{+ c #2B7152", +"b{+ c #12C361", +"c{+ c #41C582", +"d{+ c #29D985", +"e{+ c #9BCEB5", +"f{+ c #E2D8DD", +"g{+ c #D4D6D5", +"h{+ c #DFDFDE", +"i{+ c #A2A0A5", +"j{+ c #0D9C40", +"k{+ c #13B24A", +"l{+ c #454451", +"m{+ c #44C4AC", +"n{+ c #00FFCD", +"o{+ c #01FCC5", +"p{+ c #00FFC7", +"q{+ c #00FFC6", +"r{+ c #2DF8CB", +"s{+ c #989999", +"t{+ c #9E9E9D", +"u{+ c #575760", +"v{+ c #424B52", +"w{+ c #444752", +"x{+ c #444650", +"y{+ c #424A54", +"z{+ c #0DB5AA", +"A{+ c #346669", +"B{+ c #493B49", +"C{+ c #424456", +"D{+ c #123B98", +"E{+ c #32426D", +"F{+ c #48454C", +"G{+ c #16D0D4", +"H{+ c #06F6FF", +"I{+ c #03B7F2", +"J{+ c #3E5264", +"K{+ c #434754", +"L{+ c #48404B", +"M{+ c #45424E", +"N{+ c #0ADFDF", +"O{+ c #03F9EC", +"P{+ c #405E68", +"Q{+ c #473D4A", +"R{+ c #3F4A57", +"S{+ c #1B7C94", +"T{+ c #424B57", +"U{+ c #473F4F", +"V{+ c #434A4F", +"W{+ c #405557", +"X{+ c #4B3847", +"Y{+ c #2D6478", +"Z{+ c #01C8DF", +"`{+ c #1BA3B0", +" ]+ c #177F59", +".]+ c #3B514F", +"+]+ c #474151", +"@]+ c #483B4C", +"#]+ c #45424F", +"$]+ c #454650", +"%]+ c #444751", +"&]+ c #493E4A", +"*]+ c #2F6871", +"=]+ c #0BB2B0", +"-]+ c #3D505A", +";]+ c #217F8C", +">]+ c #1495A2", +",]+ c #464552", +"']+ c #2ABE6D", +")]+ c #34D47B", +"!]+ c #2AD281", +"~]+ c #5FD19A", +"{]+ c #DDD5D9", +"]]+ c #DEE1DE", +"^]+ c #746A7A", +"/]+ c #2A5943", +"(]+ c #0BCA4B", +"_]+ c #2A774A", +":]+ c #493C51", +"<]+ c #434753", +"[]+ c #44C4AE", +"}]+ c #00FFD1", +"|]+ c #01FCC9", +"1]+ c #00FFCA", +"2]+ c #02FECA", +"3]+ c #2DF8CE", +"4]+ c #A8A1A3", +"5]+ c #969897", +"6]+ c #7A7A7F", +"7]+ c #3F3F4C", +"8]+ c #464653", +"9]+ c #444754", +"0]+ c #493846", +"a]+ c #2998A0", +"b]+ c #11CEC6", +"c]+ c #444954", +"d]+ c #46454F", +"e]+ c #434353", +"f]+ c #0D41AB", +"g]+ c #35426A", +"h]+ c #4A4548", +"i]+ c #444553", +"j]+ c #454552", +"k]+ c #47404C", +"l]+ c #11C2D7", +"m]+ c #00BBF3", +"n]+ c #0D9FD6", +"o]+ c #415C6A", +"p]+ c #444653", +"q]+ c #444753", +"r]+ c #473F4D", +"s]+ c #38676F", +"t]+ c #39757D", +"u]+ c #493F4A", +"v]+ c #236D84", +"w]+ c #32576B", +"x]+ c #4B3A46", +"y]+ c #434854", +"z]+ c #454351", +"A]+ c #454352", +"B]+ c #473C48", +"C]+ c #1CB6BA", +"D]+ c #06FFFF", +"E]+ c #12ACCA", +"F]+ c #48404D", +"G]+ c #47414E", +"H]+ c #3A5760", +"I]+ c #0BB2B1", +"J]+ c #34646B", +"K]+ c #2E6977", +"L]+ c #0CA2B0", +"M]+ c #3E4E5B", +"N]+ c #655A6B", +"O]+ c #88CBA6", +"P]+ c #28DB76", +"Q]+ c #2FCD7D", +"R]+ c #34D588", +"S]+ c #BBD0C6", +"T]+ c #DDD8DA", +"U]+ c #C2C2C4", +"V]+ c #484954", +"W]+ c #453E4F", +"X]+ c #1A9D49", +"Y]+ c #0FB749", +"Z]+ c #3E4A4D", +"`]+ c #464352", +" ^+ c #464651", +".^+ c #444853", +"+^+ c #4E3B4B", +"@^+ c #45C4B0", +"#^+ c #00FFD5", +"$^+ c #01FCCC", +"%^+ c #00FFCE", +"&^+ c #02FECE", +"*^+ c #2DF8D1", +"=^+ c #A7A1A2", +"-^+ c #979898", +";^+ c #9A9B9B", +">^+ c #4E4E59", +",^+ c #464652", +"'^+ c #454652", +")^+ c #464551", +"!^+ c #454854", +"~^+ c #4A3A46", +"{^+ c #21A8AD", +"]^+ c #00E3D4", +"^^+ c #14DED8", +"/^+ c #45505B", +"(^+ c #46434F", +"_^+ c #454654", +":^+ c #494248", +"<^+ c #2C5F99", +"[^+ c #0075FF", +"}^+ c #1152D3", +"|^+ c #424559", +"1^+ c #464650", +"2^+ c #454653", +"3^+ c #47424D", +"4^+ c #405062", +"5^+ c #1383BB", +"6^+ c #1378AD", +"7^+ c #454752", +"8^+ c #483E4B", +"9^+ c #483C48", +"0^+ c #48414D", +"a^+ c #385766", +"b^+ c #12AFBD", +"c^+ c #3E5C67", +"d^+ c #4C3B49", +"e^+ c #444953", +"f^+ c #46424D", +"g^+ c #0FD8DC", +"h^+ c #08EEFB", +"i^+ c #07BFE6", +"j^+ c #11D2EC", +"k^+ c #454D57", +"l^+ c #464350", +"m^+ c #464450", +"n^+ c #424955", +"o^+ c #0FA9A8", +"p^+ c #287C80", +"q^+ c #385966", +"r^+ c #0AA7B5", +"s^+ c #365C68", +"t^+ c #49414D", +"u^+ c #454753", +"v^+ c #474753", +"w^+ c #ADACB0", +"x^+ c #42D482", +"y^+ c #27D475", +"z^+ c #26D481", +"A^+ c #85CFAB", +"B^+ c #E2D7DC", +"C^+ c #D4D4D5", +"D^+ c #74747C", +"E^+ c #4B4255", +"F^+ c #345D4B", +"G^+ c #09C749", +"H^+ c #258049", +"I^+ c #493D52", +"J^+ c #454751", +"K^+ c #45C4B2", +"L^+ c #00FFD9", +"M^+ c #01FCD0", +"N^+ c #00FFD2", +"O^+ c #02FED2", +"P^+ c #2DF8D4", +"Q^+ c #A6A0A1", +"R^+ c #969797", +"S^+ c #9F9F9E", +"T^+ c #3F3F4D", +"U^+ c #48414F", +"V^+ c #3B555D", +"W^+ c #0AA89B", +"X^+ c #3C6D76", +"Y^+ c #483E4C", +"Z^+ c #48434A", +"`^+ c #136BD3", +" /+ c #045EE9", +"./+ c #035BF4", +"+/+ c #39527F", +"@/+ c #484349", +"#/+ c #49414B", +"$/+ c #414555", +"%/+ c #0E6FAC", +"&/+ c #374F67", +"*/+ c #48434D", +"=/+ c #454754", +"-/+ c #493C49", +";/+ c #377079", +">/+ c #0FA9B3", +",/+ c #2A6567", +"'/+ c #365B5D", +")/+ c #434852", +"!/+ c #494051", +"~/+ c #493E53", +"{/+ c #4D3446", +"]/+ c #1C9C9E", +"^/+ c #00C6F0", +"//+ c #03B2DB", +"(/+ c #3195A4", +"_/+ c #483F4B", +":/+ c #48414E", +"(+ c #483E52", +",(+ c #454954", +"'(+ c #4F3C4B", +")(+ c #45C5B6", +"!(+ c #00FFE1", +"~(+ c #01FCD7", +"{(+ c #02FED9", +"](+ c #2DF8DA", +"^(+ c #A59FA0", +"/(+ c #959696", +"((+ c #9C9C9B", +"_(+ c #62626A", +":(+ c #484853", +"<(+ c #464753", +"[(+ c #474652", +"}(+ c #4B3D48", +"|(+ c #49404B", +"1(+ c #4B4048", +"2(+ c #464853", +"3(+ c #4B414E", +"4(+ c #1E797C", +"5(+ c #4A4451", +"6(+ c #464752", +"7(+ c #474751", +"8(+ c #464553", +"9(+ c #10389E", +"0(+ c #364166", +"a(+ c #4A474B", +"b(+ c #464754", +"c(+ c #4B434B", +"d(+ c #2D5A7C", +"e(+ c #136EA6", +"f(+ c #4A3C48", +"g(+ c #4B414F", +"h(+ c #4A414F", +"i(+ c #444B54", +"j(+ c #3A5451", +"k(+ c #20995E", +"l(+ c #20B853", +"m(+ c #3B4C6A", +"n(+ c #0985B3", +"o(+ c #335A71", +"p(+ c #4A434D", +"q(+ c #464854", +"r(+ c #4A404D", +"s(+ c #33676F", +"t(+ c #0AB3B1", +"u(+ c #3B5962", +"v(+ c #1E8693", +"w(+ c #16929F", +"x(+ c #474450", +"y(+ c #494954", +"z(+ c #76767E", +"A(+ c #E2D7DD", +"B(+ c #8ECDA9", +"C(+ c #1BD96E", +"D(+ c #1BD275", +"E(+ c #69CD9E", +"F(+ c #E9E0E3", +"G(+ c #A2A5A8", +"H(+ c #484854", +"I(+ c #493F52", +"J(+ c #1F8F49", +"K(+ c #0BC149", +"L(+ c #3B554E", +"M(+ c #494354", +"N(+ c #464852", +"O(+ c #454955", +"P(+ c #4F3C4C", +"Q(+ c #45C5B8", +"R(+ c #00FFE5", +"S(+ c #01FCDB", +"T(+ c #02FEDD", +"U(+ c #2CF8DD", +"V(+ c #A49E9F", +"W(+ c #949595", +"X(+ c #9A9A99", +"Y(+ c #838386", +"Z(+ c #474653", +"`(+ c #464855", +" _+ c #454856", +"._+ c #464755", +"+_+ c #484450", +"@_+ c #2395AA", +"#_+ c #0EB0DF", +"$_+ c #296F9A", +"%_+ c #474551", +"&_+ c #4B4350", +"*_+ c #1F747B", +"=_+ c #286B74", +"-_+ c #464654", +";_+ c #43465A", +">_+ c #11389C", +",_+ c #33426E", +"'_+ c #4A484F", +")_+ c #484551", +"!_+ c #3F4C5E", +"~_+ c #0E72AF", +"{_+ c #385069", +"]_+ c #4A444F", +"^_+ c #464956", +"/_+ c #4B3F53", +"(_+ c #2A995A", +"__+ c #445F58", +":_+ c #3E4B61", +"<_+ c #0B84B3", +"[_+ c #296482", +"}_+ c #4B424D", +"|_+ c #494350", +"1_+ c #3D555F", +"2_+ c #306D73", +"3_+ c #297381", +"4_+ c #0F9FAC", +"5_+ c #434B58", +"6_+ c #484552", +"7_+ c #484855", +"8_+ c #41D380", +"9_+ c #12D86D", +"0_+ c #39D087", +"a_+ c #C2D1CA", +"b_+ c #605C69", +"c_+ c #3C534F", +"d_+ c #0DC04A", +"e_+ c #1E924A", +"f_+ c #484053", +"g_+ c #45C5BA", +"h_+ c #00FFE9", +"i_+ c #01FCDF", +"j_+ c #02FEE1", +"k_+ c #2CF8E0", +"l_+ c #A49E9E", +"m_+ c #939594", +"n_+ c #575762", +"o_+ c #434351", +"p_+ c #4A404B", +"q_+ c #4B3E4A", +"r_+ c #4B404A", +"s_+ c #4B4149", +"t_+ c #484652", +"u_+ c #494650", +"v_+ c #4A454E", +"w_+ c #4B454E", +"x_+ c #494751", +"y_+ c #4B3C48", +"z_+ c #2C8495", +"A_+ c #01BDF2", +"B_+ c #00B1FF", +"C_+ c #1F77B2", +"D_+ c #4B4249", +"E_+ c #464856", +"F_+ c #484654", +"G_+ c #177984", +"H_+ c #4B424F", +"I_+ c #484752", +"J_+ c #444659", +"K_+ c #4B484E", +"L_+ c #464655", +"M_+ c #49444E", +"N_+ c #196A9E", +"O_+ c #24608A", +"P_+ c #4B434C", +"Q_+ c #474654", +"R_+ c #4B3953", +"S_+ c #484151", +"T_+ c #434A57", +"U_+ c #117DA9", +"V_+ c #1F6F92", +"W_+ c #49444F", +"X_+ c #11A6A5", +"Y_+ c #258387", +"Z_+ c #34616F", +"`_+ c #0AA7B4", +" :+ c #3A5865", +".:+ c #494956", +"+:+ c #3C3C4A", +"@:+ c #83838A", +"#:+ c #8ECCA9", +"$:+ c #11D969", +"%:+ c #22DC7C", +"&:+ c #53937A", +"*:+ c #473D50", +"=:+ c #474954", +"-:+ c #464953", +";:+ c #4A3E54", +">:+ c #24874B", +",:+ c #0AC649", +"':+ c #365C4D", +"):+ c #4A4255", +"!:+ c #464A56", +"~:+ c #503D4C", +"{:+ c #45C5BC", +"]:+ c #01FCE2", +"^:+ c #00FFE4", +"/:+ c #02FEE4", +"(:+ c #2CF8E3", +"_:+ c #A39D9E", +"::+ c #939494", +"<:+ c #77777C", +"[:+ c #494955", +"}:+ c #474956", +"|:+ c #4B404C", +"1:+ c #346D82", +"2:+ c #14A6CC", +"3:+ c #1695CA", +"4:+ c #2E678F", +"5:+ c #4A444E", +"6:+ c #4B464E", +"7:+ c #4B464F", +"8:+ c #4A4650", +"9:+ c #43495A", +"0:+ c #3C4C64", +"a:+ c #35506F", +"b:+ c #2E537A", +"c:+ c #245787", +"d:+ c #1D578F", +"e:+ c #077BBD", +"f:+ c #0894C8", +"g:+ c #098ECA", +"h:+ c #009CFC", +"i:+ c #18A5DE", +"j:+ c #494750", +"k:+ c #474755", +"l:+ c #474854", +"m:+ c #494652", +"n:+ c #444C59", +"o:+ c #147989", +"p:+ c #3C5562", +"q:+ c #4A4551", +"r:+ c #474855", +"s:+ c #484852", +"t:+ c #454759", +"u:+ c #11399E", +"v:+ c #2B407C", +"w:+ c #4C494E", +"x:+ c #4C444D", +"y:+ c #2E5B7D", +"z:+ c #146FA7", +"A:+ c #464B54", +"B:+ c #494651", +"C:+ c #1A759C", +"D:+ c #1679A3", +"E:+ c #484753", +"F:+ c #474955", +"G:+ c #4A414E", +"H:+ c #1E8F92", +"I:+ c #189D9D", +"J:+ c #3A5966", +"K:+ c #0CA6B4", +"L:+ c #306A76", +"M:+ c #4B424E", +"N:+ c #50505B", +"O:+ c #3AD07C", +"P:+ c #0ADD6B", +"Q:+ c #1D9660", +"R:+ c #484452", +"S:+ c #4A4555", +"T:+ c #3F504F", +"U:+ c #1D9A4A", +"V:+ c #494253", +"W:+ c #454A56", +"X:+ c #45C5BE", +"Y:+ c #00FFF1", +"Z:+ c #01FCE6", +"`:+ c #00FFE8", +" <+ c #02FEE8", +".<+ c #2CF8E6", +"+<+ c #A29C9D", +"@<+ c #929393", +"#<+ c #55555F", +"$<+ c #4B404D", +"%<+ c #396677", +"&<+ c #01E3FD", +"*<+ c #00C1FD", +"=<+ c #00ABFF", +"-<+ c #1C76BA", +";<+ c #354B6A", +"><+ c #295480", +",<+ c #21578B", +"'<+ c #1B5A94", +")<+ c #155C9C", +"!<+ c #0F5DA1", +"~<+ c #0B5CA3", +"{<+ c #0A5BA1", +"]<+ c #0A5A9E", +"^<+ c #105491", +"/<+ c #086BAC", +"(<+ c #0093DF", +"_<+ c #07AFF7", +":<+ c #0CC3FF", +"<<+ c #2EAAC6", +"[<+ c #4B414B", +"}<+ c #464957", +"|<+ c #4A4552", +"1<+ c #3B5363", +"2<+ c #13788D", +"3<+ c #424E5D", +"4<+ c #44475A", +"5<+ c #11399F", +"6<+ c #2C407B", +"7<+ c #4C494F", +"8<+ c #474756", +"9<+ c #404D60", +"0<+ c #0F73B0", +"a<+ c #39516A", +"b<+ c #4B4550", +"c<+ c #474856", +"d<+ c #4B444E", +"e<+ c #256A8A", +"f<+ c #0F81AF", +"g<+ c #414D5D", +"h<+ c #4B404E", +"i<+ c #2A797F", +"j<+ c #0FADAC", +"k<+ c #3C5863", +"l<+ c #129CAA", +"m<+ c #257B89", +"n<+ c #4A4A57", +"o<+ c #94949A", +"p<+ c #91CEAB", +"q<+ c #05D864", +"r<+ c #0ABA62", +"s<+ c #3C5B58", +"t<+ c #4A4354", +"u<+ c #4B3F55", +"v<+ c #287F4B", +"w<+ c #0BC84A", +"x<+ c #34644D", +"y<+ c #4B4256", +"z<+ c #45C5C0", +"A<+ c #00FFF5", +"B<+ c #01FCEA", +"C<+ c #00FFEC", +"D<+ c #02FEEC", +"E<+ c #2CF8E9", +"F<+ c #A29C9C", +"G<+ c #919292", +"H<+ c #969695", +"I<+ c #474A57", +"J<+ c #4B3E4B", +"K<+ c #1CAEBE", +"L<+ c #0CF9FF", +"M<+ c #0DBFEA", +"N<+ c #03A8F0", +"O<+ c #019EFF", +"P<+ c #00A0FB", +"Q<+ c #0C66AE", +"R<+ c #0C599F", +"S<+ c #0B5A9F", +"T<+ c #0C5799", +"U<+ c #0F5593", +"V<+ c #165289", +"W<+ c #1E507E", +"X<+ c #284D73", +"Y<+ c #334C69", +"Z<+ c #414658", +"`<+ c #3C586E", +" [+ c #0C91E0", +".[+ c #12B2F8", +"+[+ c #1FC4ED", +"@[+ c #1572AC", +"#[+ c #3A465E", +"$[+ c #4B4852", +"%[+ c #4C4450", +"&[+ c #315A6D", +"*[+ c #16718B", +"=[+ c #484856", +"-[+ c #474857", +";[+ c #13399B", +">[+ c #4A454F", +",[+ c #1A6B9E", +"'[+ c #25618B", +")[+ c #4C444E", +"![+ c #2F607B", +"~[+ c #0B86B6", +"{[+ c #39556A", +"][+ c #4B4250", +"^[+ c #36646D", +"/[+ c #0BB4B2", +"([+ c #37626B", +"_[+ c #1B8E9C", +":[+ c #1B8C99", +"<[+ c #4A4450", +"[[+ c #595965", +"}[+ c #D6D6D7", +"|[+ c #BCBABD", +"1[+ c #10AD59", +"2[+ c #00D762", +"3[+ c #277A58", +"4[+ c #4C4254", +"5[+ c #494655", +"6[+ c #434B52", +"7[+ c #11B74A", +"8[+ c #18A349", +"9[+ c #474453", +"0[+ c #474B57", +"a[+ c #513E4D", +"b[+ c #46C5C2", +"c[+ c #00FFF9", +"d[+ c #01FCEE", +"e[+ c #00FFF0", +"f[+ c #02FEF0", +"g[+ c #2CF7EC", +"h[+ c #A19B9B", +"i[+ c #979796", +"j[+ c #707075", +"k[+ c #484955", +"l[+ c #484957", +"m[+ c #4A4651", +"n[+ c #10BFDB", +"o[+ c #05BAF0", +"p[+ c #0B87B8", +"q[+ c #078DCF", +"r[+ c #039BFF", +"s[+ c #11B5FE", +"t[+ c #166EA0", +"u[+ c #1C497A", +"v[+ c #274F77", +"w[+ c #314C6C", +"x[+ c #3B4B62", +"y[+ c #454959", +"z[+ c #4A4854", +"A[+ c #4C4852", +"B[+ c #4A4954", +"C[+ c #4B4650", +"D[+ c #494654", +"E[+ c #444F62", +"F[+ c #334C6A", +"G[+ c #0C64AF", +"H[+ c #155F9B", +"I[+ c #434857", +"J[+ c #484956", +"K[+ c #4D4651", +"L[+ c #27607B", +"M[+ c #1E6985", +"N[+ c #4C4753", +"O[+ c #4B4952", +"P[+ c #193B92", +"Q[+ c #2A417E", +"R[+ c #4D4A4F", +"S[+ c #484857", +"T[+ c #4D454E", +"U[+ c #2E5C7F", +"V[+ c #494855", +"W[+ c #4C4551", +"X[+ c #39576D", +"Y[+ c #305F79", +"Z[+ c #4C4550", +"`[+ c #4B4653", +" }+ c #41545F", +".}+ c #0DB0AF", +"+}+ c #2D777C", +"@}+ c #267C8A", +"#}+ c #119DAA", +"$}+ c #464C58", +"%}+ c #494754", +"&}+ c #4B4B57", +"*}+ c #A1A1A6", +"=}+ c #E1E1E0", +"-}+ c #E0E2E0", +";}+ c #7E7282", +">}+ c #00DF64", +",}+ c #0FA65A", +"'}+ c #464B56", +")}+ c #484A55", +"!}+ c #4C4156", +"~}+ c #2A794C", +"{}+ c #0ACA4A", +"]}+ c #326B4D", +"^}+ c #4C4256", +"/}+ c #464B57", +"(}+ c #513E4C", +"_}+ c #46C5C4", +":}+ c #00FFFE", +"<}+ c #01FCF2", +"[}+ c #00FFF4", +"}}+ c #02FEF4", +"|}+ c #2CF7EF", +"1}+ c #A09A9A", +"2}+ c #909191", +"3}+ c #929291", +"4}+ c #585862", +"5}+ c #4A4A56", +"6}+ c #494854", +"7}+ c #4B4954", +"8}+ c #0E83C4", +"9}+ c #006FB3", +"0}+ c #037EB9", +"a}+ c #0593E5", +"b}+ c #08AAFF", +"c}+ c #1ECDF6", +"d}+ c #425C6C", +"e}+ c #4C4953", +"f}+ c #4B4853", +"g}+ c #4A4752", +"h}+ c #4D464F", +"i}+ c #2D5175", +"j}+ c #0B6AB5", +"k}+ c #1D598C", +"l}+ c #494752", +"m}+ c #4B4854", +"n}+ c #1C6486", +"o}+ c #27617E", +"p}+ c #4B4953", +"q}+ c #183B93", +"r}+ c #2A407D", +"s}+ c #4D4A50", +"t}+ c #4B4752", +"u}+ c #3E4F64", +"v}+ c #0E74B0", +"w}+ c #3A5269", +"x}+ c #4C4651", +"y}+ c #4B4753", +"z}+ c #405061", +"A}+ c #0E83B1", +"B}+ c #256B8B", +"C}+ c #14A3A3", +"D}+ c #228B8D", +"E}+ c #2F6C7A", +"F}+ c #0CA6B3", +"G}+ c #3F5562", +"H}+ c #4B4552", +"I}+ c #65656F", +"J}+ c #484653", +"K}+ c #0EB55B", +"L}+ c #00D460", +"M}+ c #326655", +"N}+ c #4C4456", +"O}+ c #4A4856", +"P}+ c #444952", +"Q}+ c #14B14A", +"R}+ c #14AB49", +"S}+ c #454852", +"T}+ c #494856", +"U}+ c #474B58", +"V}+ c #46C5C6", +"W}+ c #01FCF5", +"X}+ c #00FEF7", +"Y}+ c #02FEF7", +"Z}+ c #2DF8F2", +"`}+ c #8F9090", +" |+ c #848486", +".|+ c #265B8C", +"+|+ c #0C5088", +"@|+ c #015896", +"#|+ c #0081DF", +"$|+ c #10C0FF", +"%|+ c #20DAFF", +"&|+ c #3994A8", +"*|+ c #484A58", +"=|+ c #484A57", +"-|+ c #4C4750", +";|+ c #265580", +">|+ c #0A6BB6", +",|+ c #26537D", +"'|+ c #4C4751", +")|+ c #4B4251", +"!|+ c #156590", +"~|+ c #35546C", +"{|+ c #4D4751", +"]|+ c #4B4A53", +"^|+ c #183C94", +"/|+ c #2B417C", +"(|+ c #4E4A50", +"_|+ c #186DA2", +":|+ c #26618A", +"<|+ c #4D454F", +"[|+ c #157CA6", +"}|+ c #1B759B", +"||+ c #4A4753", +"1|+ c #4C4350", +"2|+ c #208D90", +"3|+ c #16A1A1", +"4|+ c #346571", +"5|+ c #366470", +"6|+ c #4C4451", +"7|+ c #6D6D77", +"8|+ c #504358", +"9|+ c #2C7253", +"0|+ c #00E564", +"a|+ c #189659", +"b|+ c #4C4356", +"c|+ c #474D57", +"d|+ c #484B56", +"e|+ c #4D4157", +"f|+ c #30724E", +"g|+ c #09CB4A", +"h|+ c #2E734D", +"i|+ c #484B55", +"j|+ c #484C59", +"k|+ c #523F4D", +"l|+ c #46C6C8", +"m|+ c #01FCF9", +"n|+ c #00FFFB", +"o|+ c #01FEFB", +"p|+ c #29F4F2", +"q|+ c #9C9697", +"r|+ c #454553", +"s|+ c #494A57", +"t|+ c #4A4956", +"u|+ c #4C4954", +"v|+ c #265F90", +"w|+ c #0E5187", +"x|+ c #11436C", +"y|+ c #145D9C", +"z|+ c #2171B2", +"A|+ c #2C8AB7", +"B|+ c #426979", +"C|+ c #4B434F", +"D|+ c #1F5A8C", +"E|+ c #0A69B3", +"F|+ c #314F6F", +"G|+ c #4E4851", +"H|+ c #494B59", +"I|+ c #4A4855", +"J|+ c #4D4952", +"K|+ c #21B1BB", +"L|+ c #00C1F8", +"M|+ c #2C6893", +"N|+ c #494B58", +"O|+ c #494957", +"P|+ c #4B4B56", +"Q|+ c #1A3B91", +"R|+ c #4D4B53", +"S|+ c #494A58", +"T|+ c #4E4650", +"U|+ c #2B5E83", +"V|+ c #1E7397", +"W|+ c #127FAA", +"X|+ c #464C5B", +"Y|+ c #4B4955", +"Z|+ c #4E4351", +"`|+ c #2E767C", +" 1+ c #0EB0AD", +".1+ c #36656F", +"+1+ c #10A0AE", +"@1+ c #2A7784", +"#1+ c #4E4350", +"$1+ c #4C4C58", +"%1+ c #72727B", +"&1+ c #A9A9AD", +"*1+ c #4B4C58", +"=1+ c #0BB858", +"-1+ c #02CD5A", +";1+ c #405151", +">1+ c #513B52", +",1+ c #494A56", +"'1+ c #15AB4A", +")1+ c #444C53", +"!1+ c #4B4857", +"~1+ c #474C59", +"{1+ c #46C5CA", +"]1+ c #01FBFC", +"^1+ c #00FDFE", +"/1+ c #01FCFE", +"(1+ c #23EDF0", +"_1+ c #767077", +":1+ c #90908F", +"<1+ c #5C5C65", +"[1+ c #266090", +"}1+ c #0E5388", +"|1+ c #12436A", +"11+ c #115F9E", +"21+ c #40516A", +"31+ c #504348", +"41+ c #4C414B", +"51+ c #4B4A56", +"61+ c #196098", +"71+ c #0D66AB", +"81+ c #3A4C63", +"91+ c #4C4A55", +"01+ c #4D444E", +"a1+ c #4E4953", +"b1+ c #4A4656", +"c1+ c #2B6B8B", +"d1+ c #01B7DB", +"e1+ c #02A2DF", +"f1+ c #0CADEB", +"g1+ c #494E59", +"h1+ c #4E484E", +"i1+ c #183F99", +"j1+ c #204190", +"k1+ c #504A4C", +"l1+ c #484958", +"m1+ c #4C4853", +"n1+ c #3F5065", +"o1+ c #0E74B1", +"p1+ c #3B536B", +"q1+ c #4D4752", +"r1+ c #286988", +"s1+ c #0D84B3", +"t1+ c #3F5264", +"u1+ c #494B57", +"v1+ c #4D4452", +"w1+ c #39626B", +"x1+ c #0BB4B1", +"y1+ c #307178", +"z1+ c #1794A2", +"A1+ c #1E8895", +"B1+ c #4C4552", +"C1+ c #BDBDBF", +"D1+ c #61616C", +"E1+ c #4B4B58", +"F1+ c #484C57", +"G1+ c #4F3E53", +"H1+ c #258864", +"I1+ c #00FCA9", +"J1+ c #0AE0A6", +"K1+ c #279D79", +"L1+ c #4B4755", +"M1+ c #4D4358", +"N1+ c #316C4D", +"O1+ c #297C4C", +"P1+ c #4E4258", +"Q1+ c #52404E", +"R1+ c #46C4CA", +"S1+ c #01F8FC", +"T1+ c #28F0F4", +"U1+ c #58525F", +"V1+ c #75767A", +"W1+ c #4D4D5A", +"X1+ c #4A4A58", +"Y1+ c #266292", +"Z1+ c #0E568A", +"`1+ c #124369", +" 2+ c #10609E", +".2+ c #395778", +"+2+ c #484B5B", +"@2+ c #494C5A", +"#2+ c #4D4A55", +"$2+ c #42495B", +"%2+ c #1463A2", +"&2+ c #0483C0", +"*2+ c #0AAADB", +"=2+ c #2578A7", +"-2+ c #29527B", +";2+ c #125D95", +">2+ c #105991", +",2+ c #0483C7", +"'2+ c #06C9FF", +")2+ c #2D9EBD", +"!2+ c #494A59", +"~2+ c #4D4750", +"{2+ c #355A87", +"]2+ c #0179FD", +"^2+ c #0461F5", +"/2+ c #394B7A", +"(2+ c #4D4951", +"_2+ c #26628B", +":2+ c #4E4652", +"<2+ c #32607A", +"[2+ c #0A87B8", +"}2+ c #355C74", +"|2+ c #4C4755", +"12+ c #43535E", +"22+ c #0EAEAD", +"32+ c #298084", +"42+ c #218593", +"52+ c #1597A5", +"62+ c #4C4C5A", +"72+ c #3F3F4E", +"82+ c #7F7F87", +"92+ c #9A9AA0", +"02+ c #4A4955", +"a2+ c #10DBBE", +"b2+ c #06FFEB", +"c2+ c #06FBD3", +"d2+ c #299971", +"e2+ c #4E3E54", +"f2+ c #494C58", +"g2+ c #4A4B58", +"h2+ c #4A4556", +"i2+ c #1AA44C", +"j2+ c #10B84A", +"k2+ c #435053", +"l2+ c #4C4858", +"m2+ c #494D5A", +"n2+ c #53414E", +"o2+ c #46C2CA", +"p2+ c #01F4FC", +"q2+ c #01F6FE", +"r2+ c #28EDF4", +"s2+ c #5C5662", +"t2+ c #8F8F8E", +"u2+ c #4B4A57", +"v2+ c #4D4954", +"w2+ c #266493", +"x2+ c #0D598C", +"y2+ c #124468", +"z2+ c #10609C", +"A2+ c #395878", +"B2+ c #4A4B59", +"C2+ c #51434E", +"D2+ c #2B758B", +"E2+ c #00A6DB", +"F2+ c #03A5E6", +"G2+ c #00AFFD", +"H2+ c #146398", +"I2+ c #2E4F70", +"J2+ c #3D5E7B", +"K2+ c #357999", +"L2+ c #4D4B54", +"M2+ c #4B4855", +"N2+ c #1677D5", +"O2+ c #097FFA", +"P2+ c #0059F1", +"Q2+ c #155BDA", +"R2+ c #4E4B52", +"S2+ c #4A4A59", +"T2+ c #4F4751", +"U2+ c #2C5F84", +"V2+ c #1470A7", +"W2+ c #4E4853", +"X2+ c #3C576B", +"Y2+ c #2C6682", +"Z2+ c #4B4956", +"`2+ c #179FA0", +" 3+ c #1E9495", +".3+ c #297986", +"+3+ c #0EA3B0", +"@3+ c #435461", +"#3+ c #4D4855", +"$3+ c #4F4F5B", +"%3+ c #C6C6C8", +"&3+ c #575763", +"*3+ c #4C4756", +"=3+ c #45575D", +"-3+ c #05F1C7", +";3+ c #0CFFDA", +">3+ c #13EFBD", +",3+ c #03F59D", +"'3+ c #1AC88C", +")3+ c #4F4054", +"!3+ c #4A4D58", +"~3+ c #4A4C57", +"{3+ c #4E4559", +"]3+ c #36664F", +"^3+ c #0AC94A", +"/3+ c #25854B", +"(3+ c #4E4358", +"_3+ c #484D5A", +":3+ c #46C0CA", +"<3+ c #01F0FC", +"[3+ c #00F3FF", +"}3+ c #01F2FE", +"|3+ c #27E9F3", +"13+ c #5E5864", +"23+ c #424352", +"33+ c #5E5F68", +"43+ c #5F5F68", +"53+ c #4C4C59", +"63+ c #4D4955", +"73+ c #266593", +"83+ c #0D5B8E", +"93+ c #134466", +"03+ c #10609A", +"a3+ c #4F4750", +"b3+ c #494B5A", +"c3+ c #494D5B", +"d3+ c #4F3F4C", +"e3+ c #2B8EA1", +"f3+ c #00D0FC", +"g3+ c #05B4F5", +"h3+ c #14C2F6", +"i3+ c #495C68", +"j3+ c #504650", +"k3+ c #4B4C59", +"l3+ c #4E424C", +"m3+ c #4A4B5A", +"n3+ c #4F494E", +"o3+ c #1A63C6", +"p3+ c #0054E6", +"q3+ c #0454DD", +"r3+ c #2A6FCD", +"s3+ c #4E494F", +"t3+ c #405166", +"u3+ c #0E75B1", +"v3+ c #3B556D", +"w3+ c #4C4956", +"x3+ c #454F5F", +"y3+ c #1081AE", +"z3+ c #207194", +"A3+ c #4D4854", +"B3+ c #4A4C59", +"C3+ c #4E4452", +"D3+ c #24888C", +"E3+ c #13A7A5", +"F3+ c #2E717D", +"G3+ c #3A616E", +"H3+ c #4E4653", +"I3+ c #4D4D5B", +"J3+ c #40404E", +"K3+ c #8D8D94", +"L3+ c #10D7A2", +"M3+ c #00FFB4", +"N3+ c #03EC8E", +"O3+ c #01E68A", +"P3+ c #2CA282", +"Q3+ c #4F4155", +"R3+ c #494D59", +"S3+ c #4B4556", +"T3+ c #1B9D4B", +"U3+ c #0EBE4A", +"V3+ c #405652", +"W3+ c #4D4759", +"X3+ c #4B4B59", +"Y3+ c #53424F", +"Z3+ c #46BECA", +"`3+ c #01EDFC", +" 4+ c #01EFFE", +".4+ c #27E6F4", +"+4+ c #5D5764", +"@4+ c #707076", +"#4+ c #919190", +"$4+ c #888889", +"%4+ c #8A8A89", +"&4+ c #4F4F5C", +"*4+ c #4D4A56", +"=4+ c #266694", +"-4+ c #0E5E90", +";4+ c #134465", +">4+ c #0E629B", +",4+ c #325E85", +"'4+ c #504750", +")4+ c #4C4955", +"!4+ c #445568", +"~4+ c #1098DB", +"{4+ c #19BDEE", +"]4+ c #407E8C", +"^4+ c #4D4350", +"/4+ c #4A4C5A", +"(4+ c #4A4D5B", +"_4+ c #4D4A52", +":4+ c #404E74", +"<4+ c #0541C1", +"[4+ c #184EB3", +"}4+ c #4B5669", +"|4+ c #4B4B5A", +"14+ c #186EA3", +"24+ c #285D88", +"34+ c #52434D", +"44+ c #494D5C", +"54+ c #187AA3", +"64+ c #187AA2", +"74+ c #4F4453", +"84+ c #31737A", +"94+ c #0EB1AE", +"04+ c #2F727C", +"a4+ c #0FA2B0", +"b4+ c #2F707E", +"c4+ c #4F4553", +"d4+ c #C5C5C7", +"e4+ c #4D4556", +"f4+ c #3F6763", +"g4+ c #0EDC8C", +"h4+ c #04E785", +"i4+ c #01E87C", +"j4+ c #24885A", +"k4+ c #504257", +"l4+ c #4A4D59", +"m4+ c #4A4C58", +"n4+ c #4E465A", +"o4+ c #3B6052", +"p4+ c #0CC74B", +"q4+ c #238C4C", +"r4+ c #4E4459", +"s4+ c #4A4E5B", +"t4+ c #54434F", +"u4+ c #47BDCA", +"v4+ c #01E9FC", +"w4+ c #00ECFF", +"x4+ c #01EBFE", +"y4+ c #27E4F3", +"z4+ c #5E5863", +"A4+ c #818183", +"B4+ c #8E8E8D", +"C4+ c #514851", +"D4+ c #2C648B", +"E4+ c #0D6193", +"F4+ c #144565", +"G4+ c #0F6198", +"H4+ c #316087", +"I4+ c #504952", +"J4+ c #4B4C5A", +"K4+ c #4C4B58", +"L4+ c #4C4A58", +"M4+ c #4D4652", +"N4+ c #504C52", +"O4+ c #1D3E90", +"P4+ c #233E86", +"Q4+ c #504B50", +"R4+ c #504851", +"S4+ c #2F5E81", +"T4+ c #0F8BBA", +"U4+ c #415D6E", +"V4+ c #4F4651", +"W4+ c #4E4954", +"X4+ c #227295", +"Y4+ c #1083AF", +"Z4+ c #445162", +"`4+ c #4B4D59", +" 5+ c #4F4755", +".5+ c #3D606A", +"+5+ c #0DB3B0", +"@5+ c #2B7C82", +"#5+ c #1599A7", +"$5+ c #238490", +"%5+ c #4F4653", +"&5+ c #4B4D5A", +"*5+ c #A6A6AA", +"=5+ c #4E4E5B", +"-5+ c #4E4556", +";5+ c #4D4B58", +">5+ c #415D5B", +",5+ c #0BBF5E", +"'5+ c #01D260", +")5+ c #3F5857", +"!5+ c #4F4859", +"~5+ c #4B4D58", +"{5+ c #4E4558", +"]5+ c #20974C", +"^5+ c #0DC34A", +"/5+ c #3C5D51", +"(5+ c #4F485A", +"_5+ c #544350", +":5+ c #47BBCA", +"<5+ c #00F1FF", +"[5+ c #01E5FC", +"}5+ c #00E7FF", +"|5+ c #01E7FE", +"15+ c #00EAFF", +"25+ c #27E0F4", +"35+ c #5D5864", +"45+ c #62626B", +"55+ c #504853", +"65+ c #306184", +"75+ c #0F6292", +"85+ c #144665", +"95+ c #0F6094", +"05+ c #306086", +"a5+ c #504953", +"b5+ c #4C4B59", +"c5+ c #4B4D5B", +"d5+ c #4D4C58", +"e5+ c #1A3E96", +"f5+ c #22418D", +"g5+ c #4F4D56", +"h5+ c #4A4E5C", +"i5+ c #50404F", +"j5+ c #2B97A1", +"k5+ c #01D7FB", +"l5+ c #346A8A", +"m5+ c #4F4752", +"n5+ c #4B4C5B", +"o5+ c #4F4854", +"p5+ c #2C6886", +"q5+ c #0C87B6", +"r5+ c #3D586D", +"s5+ c #4F4955", +"t5+ c #4D4A58", +"u5+ c #46525F", +"v5+ c #11ABAA", +"w5+ c #238B8E", +"x5+ c #1C8E9C", +"y5+ c #1894A1", +"z5+ c #4B4A58", +"A5+ c #4E4E5C", +"B5+ c #40404F", +"C5+ c #E4E4E2", +"D5+ c #B9B9BC", +"E5+ c #4A4D5A", +"F5+ c #523F58", +"G5+ c #317459", +"H5+ c #00E665", +"I5+ c #189858", +"J5+ c #4E4458", +"K5+ c #4F475B", +"L5+ c #3C5C51", +"M5+ c #0CC44A", +"N5+ c #20954C", +"O5+ c #554450", +"P5+ c #47B9CB", +"Q5+ c #00EDFF", +"R5+ c #01E2FC", +"S5+ c #00E4FF", +"T5+ c #01E3FE", +"U5+ c #00E6FF", +"V5+ c #27DDF4", +"W5+ c #4C4D5A", +"X5+ c #6B6B71", +"Y5+ c #52525E", +"Z5+ c #316285", +"`5+ c #0F6695", +" 6+ c #144765", +".6+ c #0D6295", +"+6+ c #2C658E", +"@6+ c #514952", +"#6+ c #4E4D58", +"$6+ c #1B3E95", +"%6+ c #22418C", +"&6+ c #504D55", +"*6+ c #4B4E5B", +"=6+ c #4F4452", +"-6+ c #16D2D5", +";6+ c #0EF4FE", +">6+ c #03C1F3", +",6+ c #14B0DA", +"'6+ c #4F4A55", +")6+ c #504954", +"!6+ c #385D75", +"~6+ c #0B88B8", +"{6+ c #32627D", +"]6+ c #504854", +"^6+ c #4D4956", +"/6+ c #1B9A9B", +"(6+ c #1B9B9B", +"_6+ c #248390", +":6+ c #11A0AD", +"<6+ c #4E4A58", +"[6+ c #82828B", +"}6+ c #70707A", +"|6+ c #4C4E5A", +"16+ c #4D4758", +"26+ c #11B65E", +"36+ c #00D760", +"46+ c #51475A", +"56+ c #4B4E5A", +"66+ c #4F4459", +"76+ c #258F4E", +"86+ c #0CC64A", +"96+ c #386350", +"06+ c #50475B", +"a6+ c #4B4E5C", +"b6+ c #554550", +"c6+ c #47B7CB", +"d6+ c #01DEFC", +"e6+ c #00E0FF", +"f6+ c #01E0FE", +"g6+ c #00E2FF", +"h6+ c #27DBF4", +"i6+ c #5F5965", +"j6+ c #878786", +"k6+ c #767679", +"l6+ c #4C4D5B", +"m6+ c #514953", +"n6+ c #316486", +"o6+ c #0E6897", +"p6+ c #144865", +"q6+ c #0E6191", +"r6+ c #286995", +"s6+ c #4F4C58", +"t6+ c #4F4D58", +"u6+ c #1B3F95", +"v6+ c #514E56", +"w6+ c #4C4C5B", +"x6+ c #4C4E5C", +"y6+ c #514450", +"z6+ c #1FAABC", +"A6+ c #00D1FF", +"B6+ c #03A6E1", +"C6+ c #2F95AF", +"D6+ c #4C4E5B", +"E6+ c #4F4A56", +"F6+ c #415669", +"G6+ c #0D86B4", +"H6+ c #286C8B", +"I6+ c #514654", +"J6+ c #288589", +"K6+ c #12ABA8", +"L6+ c #26818B", +"M6+ c #0EA4B1", +"N6+ c #3F5E6B", +"O6+ c #504956", +"P6+ c #ADADB1", +"Q6+ c #51465A", +"R6+ c #347058", +"S6+ c #00E164", +"T6+ c #0DA95A", +"U6+ c #4E4C5A", +"V6+ c #4F4A5B", +"W6+ c #415854", +"X6+ c #0FC04B", +"Y6+ c #1C9E4B", +"Z6+ c #4D4859", +"`6+ c #4A4E5D", +" 7+ c #554551", +".7+ c #47B5CB", +"+7+ c #01DAFC", +"@7+ c #00DCFF", +"#7+ c #01DCFE", +"$7+ c #00DEFF", +"%7+ c #27D7F4", +"&7+ c #5E5965", +"*7+ c #555561", +"=7+ c #65656D", +"-7+ c #484858", +";7+ c #514954", +">7+ c #316587", +",7+ c #0E6B99", +"'7+ c #144966", +")7+ c #0F608D", +"!7+ c #276994", +"~7+ c #4F4B58", +"{7+ c #4D4C59", +"]7+ c #4F4D59", +"^7+ c #504E56", +"/7+ c #4B5060", +"(7+ c #247CA8", +"_7+ c #098CCA", +":7+ c #3C5670", +"<7+ c #504955", +"[7+ c #4C4D5C", +"}7+ c #4E4B59", +"|7+ c #475060", +"17+ c #1381AC", +"27+ c #1D779C", +"37+ c #4D4B59", +"47+ c #504655", +"57+ c #347078", +"67+ c #287F88", +"77+ c #0FA3B1", +"87+ c #326F7C", +"97+ c #514755", +"07+ c #5F5F6B", +"a7+ c #D3D3D4", +"b7+ c #62626E", +"c7+ c #14B05D", +"d7+ c #00DB62", +"e7+ c #277B59", +"f7+ c #51465B", +"g7+ c #50455B", +"h7+ c #25894D", +"i7+ c #0BC94B", +"j7+ c #376952", +"k7+ c #50475C", +"l7+ c #4B4F5D", +"m7+ c #564651", +"n7+ c #47B4CB", +"o7+ c #00E1FF", +"p7+ c #01D7FC", +"q7+ c #00D8FF", +"r7+ c #01D8FE", +"s7+ c #00DAFF", +"t7+ c #28D4F4", +"u7+ c #5F5A65", +"v7+ c #63636B", +"w7+ c #555560", +"x7+ c #316687", +"y7+ c #0E6E9B", +"z7+ c #144A66", +"A7+ c #0E608C", +"B7+ c #266C95", +"C7+ c #504B57", +"D7+ c #4D4C5A", +"E7+ c #4F4E59", +"F7+ c #4E4C59", +"G7+ c #53454E", +"H7+ c #1A6EA3", +"I7+ c #246894", +"J7+ c #514A54", +"K7+ c #1A7AA0", +"L7+ c #147FA8", +"M7+ c #4A4F5E", +"N7+ c #405F69", +"O7+ c #0FB1AE", +"P7+ c #23898F", +"Q7+ c #129EAC", +"R7+ c #287F8C", +"S7+ c #52525F", +"T7+ c #C8C8CA", +"U7+ c #96969D", +"V7+ c #434352", +"W7+ c #4F4F5D", +"X7+ c #4C4F5A", +"Y7+ c #51475B", +"Z7+ c #376D58", +"`7+ c #00DA62", +" 8+ c #08B85E", +".8+ c #405B5A", +"+8+ c #504A5B", +"@8+ c #4F4B5C", +"#8+ c #445455", +"$8+ c #11BB4C", +"%8+ c #17A74B", +"&8+ c #4B4958", +"*8+ c #4F4B5B", +"=8+ c #4C4F5B", +"-8+ c #4C4F5D", +";8+ c #564652", +">8+ c #47B2CB", +",8+ c #00DDFF", +"'8+ c #01D3FC", +")8+ c #00D5FF", +"!8+ c #01D5FE", +"~8+ c #00D6FF", +"{8+ c #28D2F4", +"]8+ c #5F5A66", +"^8+ c #747478", +"/8+ c #888887", +"(8+ c #838382", +"_8+ c #4D4E5C", +":8+ c #524A55", +"<8+ c #326787", +"[8+ c #0E709C", +"}8+ c #144B67", +"|8+ c #0F5F88", +"18+ c #1F72A0", +"28+ c #4D505F", +"38+ c #4D4D5C", +"48+ c #504E59", +"58+ c #22428D", +"68+ c #524F57", +"78+ c #4E4D5B", +"88+ c #514C57", +"98+ c #2E6287", +"08+ c #1276B0", +"a8+ c #4B4E5D", +"b8+ c #4F4D5A", +"c8+ c #514A57", +"d8+ c #266F90", +"e8+ c #0D86B3", +"f8+ c #425669", +"g8+ c #504C58", +"h8+ c #4F4C5A", +"i8+ c #49525F", +"j8+ c #14A7A6", +"k8+ c #1C9799", +"l8+ c #1E8E9A", +"m8+ c #4F4A58", +"n8+ c #BABABD", +"o8+ c #4D4E5B", +"p8+ c #4D4F5C", +"q8+ c #16AA5C", +"r8+ c #00DA63", +"s8+ c #1C925C", +"t8+ c #4E4B5B", +"u8+ c #4D4F5B", +"v8+ c #52465D", +"w8+ c #2C8250", +"x8+ c #0BC647", +"y8+ c #307951", +"z8+ c #504C5D", +"A8+ c #4B4F5E", +"B8+ c #564752", +"C8+ c #47B0CB", +"D8+ c #00D9FF", +"E8+ c #01D0FC", +"F8+ c #01D1FE", +"G8+ c #00D2FF", +"H8+ c #28CFF4", +"I8+ c #50505E", +"J8+ c #67676E", +"K8+ c #524955", +"L8+ c #326888", +"M8+ c #0E739D", +"N8+ c #144D68", +"O8+ c #0F5F86", +"P8+ c #1F729E", +"Q8+ c #4C5060", +"R8+ c #4D4E5D", +"S8+ c #1B4095", +"T8+ c #514F57", +"U8+ c #435369", +"V8+ c #0D79B7", +"W8+ c #375A78", +"X8+ c #514B56", +"Y8+ c #4C4E5D", +"Z8+ c #524A56", +"`8+ c #306681", +" 9+ c #0A89B8", +".9+ c #376078", +"+9+ c #514A56", +"@9+ c #1F9597", +"#9+ c #16A3A2", +"$9+ c #1C8F9B", +"%9+ c #149BA8", +"&9+ c #49515F", +"*9+ c #A6A6AC", +"=9+ c #51485C", +"-9+ c #386A58", +";9+ c #03D461", +">9+ c #05C361", +",9+ c #336E5C", +"'9+ c #52485B", +")9+ c #4C4F5C", +"!9+ c #4F4C5D", +"~9+ c #475255", +"{9+ c #0CD062", +"]9+ c #01F97D", +"^9+ c #06EE70", +"/9+ c #328B5E", +"(9+ c #51455B", +"_9+ c #4C4F5E", +":9+ c #574752", +"<9+ c #47AFCB", +"[9+ c #01CDFC", +"}9+ c #00CEFF", +"|9+ c #01CEFE", +"19+ c #00CFFF", +"29+ c #28CCF4", +"39+ c #605B67", +"49+ c #585863", +"59+ c #534A55", +"69+ c #326A89", +"79+ c #0E769F", +"89+ c #144E68", +"99+ c #105E83", +"09+ c #1F739D", +"a9+ c #4D5160", +"b9+ c #4F4C59", +"c9+ c #4D4F5D", +"d9+ c #504F5A", +"e9+ c #1B4096", +"f9+ c #23428D", +"g9+ c #524F58", +"h9+ c #1A71A5", +"i9+ c #216B99", +"j9+ c #524B56", +"k9+ c #524B57", +"l9+ c #3A5E75", +"m9+ c #0A89B7", +"n9+ c #2E6986", +"o9+ c #524756", +"p9+ c #2B8186", +"q9+ c #10AEAB", +"r9+ c #1C8F99", +"s9+ c #10A2AF", +"t9+ c #425C69", +"u9+ c #93939A", +"v9+ c #C7C7C9", +"w9+ c #545462", +"x9+ c #50505D", +"y9+ c #4E4F5C", +"z9+ c #4F4A5A", +"A9+ c #19A55B", +"B9+ c #01D763", +"C9+ c #13A661", +"D9+ c #48535B", +"E9+ c #504D5C", +"F9+ c #4D505C", +"G9+ c #406D61", +"H9+ c #02FE8E", +"I9+ c #0CFE97", +"J9+ c #05FF83", +"K9+ c #01F965", +"L9+ c #43665B", +"M9+ c #50495C", +"N9+ c #574853", +"O9+ c #48ADCB", +"P9+ c #01C9FC", +"Q9+ c #01CAFE", +"R9+ c #28C9F4", +"S9+ c #605C67", +"T9+ c #767678", +"U9+ c #4E4F5E", +"V9+ c #326B8A", +"W9+ c #0E79A1", +"X9+ c #145069", +"Y9+ c #105D80", +"Z9+ c #187AA7", +"`9+ c #4B5465", +" 0+ c #514C58", +".0+ c #4F4E5C", +"+0+ c #4E4E5D", +"@0+ c #514F5B", +"#0+ c #535058", +"$0+ c #534B56", +"%0+ c #2F6286", +"&0+ c #1078B3", +"*0+ c #4A5161", +"=0+ c #504E5B", +"-0+ c #4E4F5D", +";0+ c #514D5A", +">0+ c #445668", +",0+ c #0F85B1", +"'0+ c #227496", +")0+ c #514C59", +"!0+ c #4E505E", +"~0+ c #534958", +"{0+ c #386E76", +"]0+ c #0FB2AF", +"^0+ c #1D8F97", +"/0+ c #396977", +"(0+ c #534A58", +"_0+ c #81818A", +":0+ c #5F5F6C", +"<0+ c #51515F", +"[0+ c #4E505C", +"}0+ c #52495D", +"|0+ c #396A59", +"10+ c #06CE60", +"20+ c #06C864", +"30+ c #288460", +"40+ c #4E505D", +"50+ c #4E515D", +"60+ c #53455B", +"70+ c #3A7C63", +"80+ c #10FB8D", +"90+ c #10EC76", +"00+ c #03ED5F", +"a0+ c #3E7E64", +"b0+ c #52455B", +"c0+ c #4C505F", +"d0+ c #48ABCB", +"e0+ c #00CDFF", +"f0+ c #01C5FC", +"g0+ c #00C6FF", +"h0+ c #01C6FE", +"i0+ c #00C7FF", +"j0+ c #28C6F4", +"k0+ c #6B6B70", +"l0+ c #4D505E", +"m0+ c #544955", +"n0+ c #39657E", +"o0+ c #0E7BA3", +"p0+ c #14516A", +"q0+ c #105D7E", +"r0+ c #177AA5", +"s0+ c #47586B", +"t0+ c #4D4F5E", +"u0+ c #514F5A", +"v0+ c #23428C", +"w0+ c #514D59", +"x0+ c #445469", +"y0+ c #0D7AB8", +"z0+ c #385C7A", +"A0+ c #534C57", +"B0+ c #167FA7", +"C0+ c #187CA3", +"D0+ c #514B5A", +"E0+ c #435D69", +"F0+ c #10AEAC", +"G0+ c #1A979B", +"H0+ c #0FA2AF", +"I0+ c #534957", +"J0+ c #444453", +"K0+ c #75757F", +"L0+ c #6C6C77", +"M0+ c #1BA15B", +"N0+ c #03D362", +"O0+ c #0EB666", +"P0+ c #3F615C", +"Q0+ c #524A5D", +"R0+ c #4F4C5C", +"S0+ c #4A575C", +"T0+ c #0BE66D", +"U0+ c #00FF66", +"V0+ c #02F55A", +"W0+ c #05D051", +"X0+ c #435D59", +"Y0+ c #524B5E", +"Z0+ c #584954", +"`0+ c #48A9CC", +" a+ c #00C9FF", +".a+ c #01C1FC", +"+a+ c #01C3FE", +"@a+ c #28C3F4", +"#a+ c #615C68", +"$a+ c #5A5A65", +"%a+ c #7E7E7D", +"&a+ c #68686E", +"*a+ c #4F4F5E", +"=a+ c #4E505F", +"-a+ c #544A56", +";a+ c #3D637B", +">a+ c #127B9F", +",a+ c #14546D", +"'a+ c #125B7B", +")a+ c #48586B", +"!a+ c #524C58", +"~a+ c #1A4099", +"{a+ c #214291", +"]a+ c #52505B", +"^a+ c #1B71A5", +"/a+ c #226C9B", +"(a+ c #534C58", +"_a+ c #4F505E", +":a+ c #514E5B", +"b+ c #4D4A59", +",b+ c #1A9E49", +"'b+ c #0DC64B", +")b+ c #2E6B4A", +"!b+ c #544A5F", +"~b+ c #584A55", +"{b+ c #48A6CC", +"]b+ c #00C1FF", +"^b+ c #01BAFC", +"/b+ c #00BBFF", +"(b+ c #01BBFE", +"_b+ c #28BDF4", +":b+ c #615D69", +"c+ c #10B1AE", +",c+ c #159EA5", +"'c+ c #10A2B0", +")c+ c #3C6876", +"!c+ c #534E5C", +"~c+ c #ACACB0", +"{c+ c #B0B0B4", +"]c+ c #504D5D", +"^c+ c #1EA05C", +"/c+ c #09C75F", +"(c+ c #0CBF69", +"_c+ c #278B62", +":c+ c #534A5D", +"d+ c #564B57", +",d+ c #4F5261", +"'d+ c #51505F", +")d+ c #505060", +"!d+ c #4D5065", +"~d+ c #524F5D", +"{d+ c #495468", +"]d+ c #326183", +"^d+ c #554E59", +"/d+ c #4F5161", +"(d+ c #4E5261", +"_d+ c #197DA5", +":d+ c #1580A9", +"e+ c #5A858E", +",e+ c #1A95AE", +"'e+ c #1C6B7C", +")e+ c #1E6173", +"!e+ c #1789A3", +"~e+ c #4D8492", +"{e+ c #796F6C", +"]e+ c #6C6D6F", +"^e+ c #545461", +"/e+ c #53525E", +"(e+ c #15419E", +"_e+ c #1C4399", +":e+ c #515261", +"f+ c #888890", +",f+ c #464656", +"'f+ c #525161", +")f+ c #52515F", +"!f+ c #13D688", +"~f+ c #02FA7B", +"{f+ c #03D067", +"]f+ c #0BC16A", +"^f+ c #259164", +"/f+ c #525060", +"(f+ c #505363", +"_f+ c #5B4F57", +":f+ c #4999CD", +"g+ c #56515E", +",g+ c #54515F", +"'g+ c #4B5769", +")g+ c #1383AC", +"!g+ c #1A7DA3", +"~g+ c #525462", +"{g+ c #544F5E", +"]g+ c #4A6370", +"^g+ c #05F3F4", +"/g+ c #00F7F3", +"(g+ c #03D9D5", +"_g+ c #06BDC5", +":g+ c #149FAC", +"h+ c #525464", +",h+ c #585159", +"'h+ c #2D69A7", +")h+ c #007BF7", +"!h+ c #0368F0", +"~h+ c #365898", +"{h+ c #585359", +"]h+ c #535463", +"^h+ c #56515D", +"/h+ c #2170A1", +"(h+ c #1975AB", +"_h+ c #535260", +":h+ c #545362", +"i+ c #249465", +",i+ c #554F61", +"'i+ c #5D5259", +")i+ c #4990CD", +"!i+ c #018EFC", +"~i+ c #008EFF", +"{i+ c #018EFE", +"]i+ c #008CFF", +"^i+ c #289AF4", +"/i+ c #65626D", +"(i+ c #4F5060", +"_i+ c #525665", +":i+ c #535564", +"j+ c #0056DF", +",j+ c #0253CE", +"'j+ c #157EF7", +")j+ c #50617A", +"!j+ c #2270A0", +"~j+ c #1777AF", +"{j+ c #555463", +"]j+ c #535665", +"^j+ c #584F5E", +"/j+ c #43697B", +"(j+ c #04CDDF", +"_j+ c #08D4E3", +":j+ c #3A8294", +"k+ c #594F63", +",k+ c #535664", +"'k+ c #525566", +")k+ c #5E545B", +"!k+ c #498BCE", +"~k+ c #0182FC", +"{k+ c #0082FF", +"]k+ c #0183FE", +"^k+ c #0080FF", +"/k+ c #2890F4", +"(k+ c #555565", +"_k+ c #2CA4AC", +":k+ c #00FEFE", +"l+ c #11A6A7", +",l+ c #11A5B2", +"'l+ c #1E909D", +")l+ c #9F9FA6", +"!l+ c #898992", +"~l+ c #545764", +"{l+ c #595065", +"]l+ c #426C60", +"^l+ c #08D363", +"/l+ c #02C65B", +"(l+ c #208E5E", +"_l+ c #575465", +":l+ c #555664", +"m+ c #286D99", +",m+ c #595360", +"'m+ c #565565", +")m+ c #555767", +"!m+ c #5A4F5E", +"~m+ c #4A5E73", +"{m+ c #1188B2", +"]m+ c #1A7BA2", +"^m+ c #515567", +"/m+ c #575665", +"(m+ c #5B5162", +"_m+ c #3A757D", +":m+ c #0DB2AF", +"n+ c #00ECF1", +",n+ c #00C5CA", +"'n+ c #69D1D3", +")n+ c #36D4D6", +"!n+ c #6BF2F4", +"~n+ c #2DFDFD", +"{n+ c #32FFFF", +"]n+ c #96A6AE", +"^n+ c #8F8E98", +"/n+ c #868691", +"(n+ c #5F5F65", +"_n+ c #5F5F66", +":n+ c #18449F", +"o+ c #595969", +",o+ c #565465", +"'o+ c #15B761", +")o+ c #00E263", +"!o+ c #198E55", +"~o+ c #595467", +"{o+ c #555768", +"]o+ c #61595E", +"^o+ c #4A7FCF", +"/o+ c #0067FF", +"(o+ c #0168FC", +"_o+ c #0169FE", +":o+ c #0064FF", +"p+ c #565868", +",p+ c #5C5563", +"'p+ c #3F6280", +")p+ c #0C80C0", +"!p+ c #3C6383", +"~p+ c #5C5562", +"{p+ c #5B5564", +"]p+ c #297696", +"^p+ c #0D8AB6", +"/p+ c #3F677F", +"(p+ c #515162", +"_p+ c #767682", +":p+ c #D7CFD0", +"q+ c #137681", +",q+ c #17606A", +"'q+ c #12949F", +")q+ c #3C7786", +"!q+ c #695E6D", +"~q+ c #B9BDC3", +"{q+ c #A4A5AD", +"]q+ c #9797A0", +"^q+ c #A5A5AD", +"/q+ c #B9B9BF", +"(q+ c #666674", +"_q+ c #63636A", +":q+ c #5A5967", +"r+ c #4B76CF", +",r+ c #0053FF", +"'r+ c #0256FC", +")r+ c #0156FE", +"!r+ c #0051FF", +"~r+ c #286DF5", +"{r+ c #6A6872", +"]r+ c #595A6A", +"^r+ c #5B5565", +"/r+ c #506777", +"(r+ c #179FAE", +"_r+ c #156873", +":r+ c #166772", +"s+ c #175F6A", +",s+ c #14707C", +"'s+ c #1A9AA9", +")s+ c #556273", +"!s+ c #5B5767", +"~s+ c #606069", +"{s+ c #6A6A6E", +"]s+ c #60606C", +"^s+ c #5B5A69", +"/s+ c #244997", +"(s+ c #0E40A7", +"_s+ c #3C5185", +":s+ c #5E5B65", +"t+ c #737372", +",t+ c #707073", +"'t+ c #686870", +")t+ c #58586A", +"!t+ c #5C5B6A", +"~t+ c #254A98", +"{t+ c #3D5284", +"]t+ c #605C66", +"^t+ c #595A6C", +"/t+ c #5A5B6C", +"(t+ c #5F5865", +"_t+ c #107FBC", +":t+ c #4F5E74", +"u+ c #187CB3", +",u+ c #1F75A9", +"'u+ c #5D5666", +")u+ c #545567", +"!u+ c #535365", +"~u+ c #C3C3C4", +"{u+ c #CAC7C6", +"]u+ c #B3C0C5", +"^u+ c #33A0C4", +"/u+ c #31A1C5", +"(u+ c #AFC0C6", +"_u+ c #CECAC9", +":u+ c #C7C8C8", +"v+ c #00F8FE", +",v+ c #00E6F9", +"'v+ c #41BCE1", +")v+ c #C9C6C6", +"!v+ c #CBCBC9", +"~v+ c #C3C5C6", +"{v+ c #D2CAC7", +"]v+ c #77B0C3", +"^v+ c #1D9CC6", +"/v+ c #65ACC4", +"(v+ c #D0CAC8", +"_v+ c #B3B3B7", +":v+ c #7E7E8A", +"w+ c #84848D", +",w+ c #9D9DA2", +"'w+ c #B1B1B3", +")w+ c #C5BFBF", +"!w+ c #29F2F2", +"~w+ c #10B8DF", +"{w+ c #00ACEC", +"]w+ c #40CDEF", +"^w+ c #CEC3BE", +"/w+ c #C1C3C4", +"(w+ c #C9C7C6", +"_w+ c #B8C1C4", +":w+ c #38A1C3", +"x+ c #6E6E79", +",x+ c #616171", +"'x+ c #5F5E6D", +")x+ c #264C9B", +"!x+ c #325091", +"~x+ c #63606B", +"{x+ c #5D5E6F", +"]x+ c #919198", +"^x+ c #A6A6A9", +"/x+ c #BFBFBE", +"(x+ c #BEBDBD", +"_x+ c #C0BEBE", +":x+ c #C1BFC0", +"y+ c #2148FA", +",y+ c #35A3B2", +"'y+ c #585D70", +")y+ c #5E5D6E", +"!y+ c #5C5C6E", +"~y+ c #959594", +"{y+ c #999998", +"]y+ c #929294", +"^y+ c #85858B", +"/y+ c #7B7B84", +"(y+ c #626272", +"_y+ c #616172", +":y+ c #6A6976", +"z+ c #3F7982", +",z+ c #0DABB1", +"'z+ c #0FADBB", +")z+ c #318694", +"!z+ c #63596A", +"~z+ c #5D5F70", +"{z+ c #5C5D71", +"]z+ c #686667", +"^z+ c #4D5AD1", +"/z+ c #0013FF", +"(z+ c #021BFD", +"_z+ c #001AFF", +":z+ c #011BFE", +"A+ c #2A39F4", +",A+ c #706F79", +"'A+ c #A3A4A6", +")A+ c #AFABA5", +"!A+ c #AAABAB", +"~A+ c #AAAAAE", +"{A+ c #7B7B87", +"]A+ c #676776", +"^A+ c #2078AA", +"/A+ c #167CB3", +"(A+ c #556379", +"_A+ c #625F6E", +":A+ c #605F70", +"B+ c #10B6B5", +",B+ c #0CACB6", +"'B+ c #13ABB8", +")B+ c #447483", +"!B+ c #606072", +"~B+ c #5D6376", +"{B+ c #269FB2", +"]B+ c #228284", +"^B+ c #246666", +"/B+ c #1F8A8F", +"(B+ c #359FA7", +"_B+ c #6E6D6E", +":B+ c #646474", +"C+ c #626071", +",C+ c #537084", +"'C+ c #179AB5", +")C+ c #186577", +"!C+ c #195C6D", +"~C+ c #1289A0", +"{C+ c #358BA3", +"]C+ c #665C6D", +"^C+ c #5D5D70", +"/C+ c #6E6E7B", +"(C+ c #777782", +"_C+ c #7F7F88", +":C+ c #89898F", +"D+ c #616274", +",D+ c #68606B", +"'D+ c #456C9B", +")D+ c #0C86F8", +"!D+ c #0A64D4", +"~D+ c #0759C6", +"{D+ c #307ED3", +"]D+ c #67616B", +"^D+ c #616375", +"/D+ c #626373", +"(D+ c #67606E", +"_D+ c #376F95", +":D+ c #636171", +"E+ c #3A5797", +",E+ c #0B45B1", +"'E+ c #134AAF", +")E+ c #565C7B", +"!E+ c #666371", +"~E+ c #626275", +"{E+ c #68616F", +"]E+ c #0D81BD", +"^E+ c #416C8D", +"/E+ c #686170", +"(E+ c #676171", +"_E+ c #4E6B82", +":E+ c #1488B2", +"F+ c #696571", +",F+ c #43598F", +"'F+ c #1445A7", +")F+ c #1445A8", +"!F+ c #465A8D", +"~F+ c #696271", +"{F+ c #387096", +"]F+ c #0E81BE", +"^F+ c #426D8E", +"/F+ c #696172", +"(F+ c #41718D", +"_F+ c #128BB7", +":F+ c #1E83AA", +"G+ c #696674", +",G+ c #525E85", +"'G+ c #1244A9", +")G+ c #3B5697", +"!G+ c #6A6672", +"~G+ c #6A6372", +"{G+ c #397096", +"]G+ c #0D82BF", +"^G+ c #416E90", +"/G+ c #696373", +"(G+ c #347898", +"_G+ c #287EA1", +":G+ c #666475", +" , ' ) ! ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ~ { ] ^ / ( _ : < ' [ [ ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ", +"} | 1 2 3 4 5 6 7 8 9 9 0 a b [ ' ! ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' c d e f g h i j [ ' [ ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ", +"k l m n o p q r s t u v w x y z A ' ! [ ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' B ' ' C D E F G H I J ' [ [ [ K K L B ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ", +"M N O | P Q R S T U V W X Y Z ` . .. ) +. @. [ B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B #. #. ' $. %. &. *. =. -. ;. >. ,. ' [ +. +. ' #. L ' B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B ", +"'. ). !. ~. {. ]. ^. /. (. _. :. <. [. }. |. 1. 2. 3. 4. 5. +. 6. @. [ B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B ' [ 7. [ +. 8. 9. 0. a. b. c. d. e. f. g. h. i. j. +. 7. ' [ B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B ", +"k. l. m. n. o. p. q. r. s. t. u. v. w. x. y. z. A. B. C. D. E. F. +. G. G. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. I. J. +. K. L. M. c. N. O. P. Q. R. S. T. U. V. +. J. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. H. ", +"W. X. Y. Z. `. + .+ ++ @+ #+ $+ %+ &+ Z *+ =+ -+ ;+ >+ ,+ '+ )+ !+ ~+ {+ ]+ ^+ {+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ {+ (+ ^+ ~+ _+ :+ <+ [+ }+ |+ 1+ 2+ 3+ 4+ 5+ 6+ ~+ (+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ ", +"7+ 8+ 9+ 0+ a+ b+ c+ d+ e+ f+ g+ h+ i+ j+ 2. B. k+ l+ m+ n+ o+ p+ q+ r+ s+ ~+ G. ]+ I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. G. t+ {+ ~+ u+ v+ w+ x+ y+ z+ A+ B+ C+ D+ +. E+ I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. I. ", +"F+ G+ H+ I+ J+ K+ L+ M+ N+ O+ P+ +. Q+ R+ S+ T+ U+ V+ W+ X+ Y+ Z+ `+ @ .@ +@ {+ ~+ @@ #@ ^+ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ ^+ #@ $@ ~+ %@ &@ *@ =@ -@ ;@ >@ ,@ '@ ' E+ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ ", +")@ !@ ~@ {@ ]@ ^@ /@ (@ +. _@ :@ <@ [@ }@ |@ 1@ 2@ 3@ 4@ 5@ 6@ 7@ 8@ 9@ 0@ a@ b@ c@ }@ d@ e@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ d@ f@ g@ h@ i@ j@ k@ l@ m@ n@ ' o@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ ", +"p@ q@ r@ s@ t@ u@ v@ w@ x@ y@ z@ A@ e@ B@ A@ }@ C@ D@ E@ F@ G@ H@ I@ J@ K@ L@ M@ N@ O@ P@ }@ $@ @@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ Q@ #@ Q@ Q@ #@ #@ Q@ R@ #@ #@ #@ R@ #@ S@ Q@ Q@ #@ #@ #@ #@ #@ Q@ Q@ Q@ Q@ #@ #@ #@ #@ #@ #@ #@ #@ Q@ T@ }@ U@ T. V@ W@ X@ Y@ Z@ `@ ' # #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ R@ R@ R@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ #@ ", +".# +# @# u@ ## $# %# &# *# =# -# ;# }@ [@ ># ,# z@ '# )# !# ~# {# ]# ^# /# (# _# :# <# [# }# }@ d@ ,# Q@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ #@ [@ [@ [@ [@ [@ #@ [@ [@ [@ [@ [@ Q@ H. #@ [@ [@ [@ [@ [@ [@ #@ [@ [@ #@ [@ [@ [@ [@ [@ [@ [@ Q@ #@ 7. }@ |# 1# 2# 3# 4# 5# 6# 7# 8# Q@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ Q@ Q@ 9# 0# a# b# a# 0# a# a# a# a# a# a# a# a# 0# S@ S@ S@ 9# Q@ Q@ Q@ Q@ [@ Q@ Q@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ [@ ", +"c# d# e# f# g# h# i# j# k# l# m# n# o# p# q# 9# <@ 9# r# s# t# u# v# w# x# y# z# A# B# C# D# E# F# r# G# ># H# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# Q@ Q@ 9# 9# Q@ 9# 9# 9# 9# 9# 9# 9# 9# I. I# J# I. 9# 9# 9# 9# Q@ 9# 9# 9# 9# Q@ 9# 9# 9# 9# 9# 9# ^+ K# L# M# r# N# O# P# Q# R# S# T# r# # 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# S@ a# b# U# b# 0# #@ B ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' H. #@ #@ ^+ 9# a# 0# 0# a# b# b# b# b# b# b# 0# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# 9# ", +"q# V# W# X# Y# Z# }@ `# $ .$ +$ @$ #$ $$ %$ &$ *$ # o@ =$ r# -$ ;$ >$ ,$ '$ )$ !$ ~$ {$ ]$ ^$ /$ ($ r# &$ # ,# _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ S@ ' :$ Q@ <$ [$ ' R@ }$ |$ #@ a# Q@ 1$ #@ 2$ 3$ 4$ ' 1$ S@ a# ' 5$ 6$ 7$ 8$ ' 9$ S@ S@ U# S@ a# Q@ 0$ a$ b$ c$ ' d$ e$ f$ g$ h$ i$ j$ }@ # _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ S@ S@ a# U# U# U# a# _$ k$ ' ' ' ' ' 1$ 0$ l$ m$ n$ o$ p$ q$ r$ s$ t$ u$ v$ w$ x$ y$ z$ A$ B$ C$ 1$ D$ 9$ 9# ' ' ' ' ' ' ' ' ' ' ' Q@ U# a# S@ S@ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ _$ ", +"E$ G# r# r# }@ F$ G$ H$ *$ I$ J$ K$ L$ M$ N$ O$ P$ q# H$ Q$ R$ +. S$ T$ U$ V$ W$ X$ Y$ Z$ `$ % .% +% @% #% r# S@ M# 9# S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ $% ' %% &% *% =% ' ' -% 0$ ' Q@ a# ' b# ' [$ ;% ' U# ^+ 1$ ' >% ,% '% )% ' [@ [@ 9# ' #@ H. ' b# ' !% ~% ' {% ]% ' ^% /% (% _% :% S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ a# U# $% 1$ U# S@ I. ' ' ' ' ' ^+ |$ <% [% }% |% 1% 2% 3% 4% 5% 6% 7% 8% 8% 9% 8% 0% a% b% c% c% d% e% e% e% f% g% h% i% j% 2$ k% l% m% s$ n% o% p% q% r% &% Q@ ' ' H. S@ U# b# 0# S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ ", +"0# a# s% t% u% v% w% v% v% x% x% y% z% A% B% C% D% E% F% d$ G% H% I% J% K% L% M% N% O% P% Q% R% S% T% U% V% W% F$ X% ]% a# w% 0# 0# 0# 0# 0# 0# 0# 0# D$ ' Y% Z% |% l$ `% & .& +& q% @& ' #& @& ' $& %& B J# |$ U# ' && *& o% =& ' u$ a# @& -& D$ A$ ;& >& a# ,& *& S@ '& )& !& ~& {& ]& ^& /& (& _& 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# a# 1$ 1$ U# Q@ H. ' ' ' ' #@ J# B$ w$ :& <& [& }& |& 9% 1& 2& 3& 6% 8% 4& 5& 6& d% d% |& 3% 7& 8& 8& 9& 9& 0& e% e% 0& e% a& e% 9& 0& e% 0& 8& 9& 0& 9& b& 0& 0& a& c& d& e& f& g& h& i& #@ ' ' #@ b# 1$ U# a# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# ", +"S@ S@ S@ S@ S@ S@ S@ S@ S@ j& M# x% H# k& l& m& n& o& p& q& r& s& t& u& v& w& w& x& u& y& z& A& B& C& D& E& F& G& H& I& w% J& S@ S@ S@ S@ S@ S@ S@ S@ 1$ ' K& L& M& }% f% *% l% N& 2% O& P& 8& Q& R& <& }$ S& T& U& ' ' V& W& X& Y& =% Z& =% n% `& * .* +* 3$ $& @* *& #* l$ R& $* %* &* ** =* -* ;* >* M# S@ S@ S@ S@ S@ S@ S@ S@ S@ a# U# 1$ [@ ' ' B 9$ &% h& ,* '* f& )* |& 9% V& && !* V& >% 7% a% b% c% ~* ~* c% ~* ~* ~* 5& {* {* 6& d% |& 3% 3% 7& 8& 9& 0& e% e% a& c& d& ]* +* ^* /* (* f% _* )* }& }& :* e& e& :* f% +* (* <* [* -& }* >& H. ' ' #@ U# 1$ U# a# S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ S@ ", +"a# a# a# a# a# a# a# a# a# a# a# |* a# x% |* 1* 2* 3* 4* ~# 5* 6* 7* 8* 9* 0* 0* a* u& b* z& c* d* e* f* g* h* i* j* k* G$ I& _& ]% a# a# a# a# a# a# 1$ ' l* m* n* l% L& @* o* p* q* o$ r* s* t* u* v* ;& *% [* w* ' ' 7& x* 9& 6& y* u$ }$ z* A* B* .& C* a$ D* Q& x$ E* <% F* G* H* I* J* K* L* M* N* _& a# a# a# a# a# a# a# U# D$ a# ' ' O* P* E* 5$ 7& 9% && Q* R* S* T* 3& 6% 9% 4% a% a% a% a% a% U* U* 4& b% b% c% ~* ~* 5& {* {* 6& d% |& 3% 3% 7& 8& 9& 9& 0& e% a& c& c& d& ]* +* +* ^* /* (* f% f% _* )* }& }& e& F* V* i% F* )* (* }& W* X* Y* P& J# ' ' ' Q@ U# 1$ U# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# a# ", +"U# U# U# U# U# U# U# U# U# U# U# U# U# Z* `* = .= += @= #= $= %= &= *= == -= -= ;= 8* >= ,= '= )= U% != ~= {= ]= ^= /= (= _= (& >* := U# U# U# U# U# U# B @& d% S& j% e% <= [& /* )& [= 2% i& [@ o* }= #& Y* 5& w$ ' #@ h% f% U* |= 1= m$ F* n% p% 2= 3= 4= o* D* a$ 5= E* 6= c% 1= 7= 8= 9= 0= a= b= c= d= e= U# U# U# U# D$ D$ I. ' a# }* W& |= f= f= Q* && V& >% 6% 5% 5% 5% 5% 5% 7% 7% 9% 8% 8% 4% a% a% U* 4& 4& b% c% ~* ~* 5& {* {* 6& d% |& 3% 3% 7& 8& 9& 9& 0& e% a& c& c& d& ]* +* ^* ^* /* (* f% f% _* )* }& :* :* e& F* 5$ V* Y& <* <* i% e& }& 5$ [& y* 7= g= O* B ' H. a# 1$ D$ 1$ U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# ", +"h= h= h= h= h= h= h= h= h= h= h= h= h= a# ]% := i= j= k= l= m= n= o= p= q= r= r= s= t= u= v= w= x= y= E& z= A= B= C= D= E= F= G= H= (& ]% I= U# a# h= U# 1$ ' J= y* X* K= ' m* L= M= B* }& z$ ' N= 3$ O= v$ P= Q= #@ a# E* R= S= %& T= m$ 1% U= <$ V= W= X= Y= Z= Q& [% `= - d& *% m$ .- +- @- #- $- %- (& := U# &- D$ Q@ ' ' z$ w* +* Q* *- S* 3& 1& 1& 3& 1& 1& 1& >% =- =- 6% 5% 5% 7% 9% 9% 8% 4% a% a% U* 4& 4& b% c% ~* ~* 5& {* 6& d% d% |& 3% 7& 7& 8& 9& 0& 0& e% a& c& c& d& ]* +* ^* ^* /* (* f% f% _* )* }& :* e& e& F* 5$ V* i% Y& Y& <* %& -- -- <* V* 5$ )% Y= *% ;- B$ D$ ' ' I. a# 1$ 1$ U# a# h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= h= ", +"U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# e= >- i= = ,- '- )- t= !- ~- ~- {- ]- ^- /- ~+ (- _- :- <- [- }- |- 1- 2- 3- 4- 5- 6- 7- X% M# &- U# U# 8- ' 9% 9- n$ 0- 9- a$ V= a- [* W& b- c- Y= * d- e- J= a# 1$ a# E* f- g- h- i- W= O& j- }= :$ O& ,* 2= W= k- ,* }$ 3= V* X* W= l- b$ m- n- o- p- q- r- s- B ' t- p% u- V& v- w- x- 2& V& x- V& V& 2& 3& 3& 1& >% =- =- 6% 5% 5% 7% 9% 9% 8% 4% 4% a% U* 4& b% ~* 5& {* {* 5& c% b% c% d% |& |& 7& 9& 0& e% a& c& d& d& ]* +* +* ^* ^* /* (* (* (* f% _* )* )* }& :* e& F* F* 5$ V* i% Y& g% g% <* )% %& -- y- !% !% -- g% g% !% k% d- ,% z- U# ' B e= D$ e= U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# U# ", +"$% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% 1$ A- B- C- D- E- F- G- G- H- I- J- K- #@ L- M- N- O- P- Q- R- S- T- U- V- W- X- Y- Z- `- J. L- $% 9$ ' o% ; .; L= +; <$ @; %% #; $; }& %; &; g= m% *; (* ' 9$ b# X= `% ;% v$ Z% _* ; w$ =; W= r% -; 9- ;- Z% N& 7= ,& ;; ,% >; ,; '; ); !; ~; {; ]; H. 9# h& [* a% v- ^; S= V& x- T* T* x- x- V& V& 2& 3& 3& 1& >% >% =- 6% 6% 5% 7% 9% 8% 4% U* 4& b% 4& U* 8% 5% =- >% /; b% e% _* /* |& |& 3% (; b% c% ~* c% c% ~* 5& 6& d% |& 7& e% a& a& ]* /* (* (* )* :* e& F* F* F* 5$ 5$ V* i% Y& g% <* <* )% %& -- _; _; y- W* X& :; X& !% -- %& j% q$ %; l$ S@ ' 1$ D$ 1$ $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% $% ", +"e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= <; [; }; |; 1; 2; 2; 3; 4; 5; 6; #@ 7; 8; 9; 0; a; b; c; d; e; f; g; h; i; j; k; l; m; n; o; I= &- Q@ U# a# #@ Q@ Q@ a# I. Q@ U# [@ #@ Q@ U# ' p; k- ' q; e= Q@ S@ [@ S@ S@ I. D$ ' r; }= ' D$ Q@ S@ Q@ S@ Q@ H. Q@ a# #@ a# U# M# ~+ s; t; u; v; w; x; y; w- T* T* !* && !* !* T* x- x- V& V& 2& 2& 3& 1& >% =- 6% 7% 9% 8% 8% 9% 5% >% 2& x- 2& =- b% ]* )% Y% n$ z; A; B; q; >& e- C; D; ; E; l* F; ,* t$ -& b- j- h- j- U& r* W* x* <* )* e& F* /* +* ]* d& G; e& i% Y& Y& Y& Y& g% <* )% )% %& -- _; y- !% !% W* @* X& :; [& H; [& X& I; @* T= l$ S@ B 1$ J; 1$ e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= e= ", +"&- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- K; [; L; M; N; O; O; P; Q; R; S; T; U; V; W; X; Y; (- Z; `; > .> +> @> #> $> %> &> *> => -> (- ;> q; D$ D$ 9$ J; 9$ J; 8- 9$ D$ 9$ 9$ 9$ >> ' Y% }% ' q; &- 9$ 9$ q; J; J; q; 9$ e= a$ [$ ' '& 9$ 9$ 9$ J; 9$ q; 8- q; t- J; B B ,> '> )> !> ~> {> ]> ^> && S= && && !* !* !* T* T* x- x- V& 3& >% =- =- =- 1& V& !* S* S* T* 6% 5& /> [& 8$ +; (> _> t- Q@ ' ' ' I. _$ U# h= #@ :> #@ I. ' ' ' ' ' ' ' ' ' ' I. &- &- U# )& &% <> Q= ; l$ r% w* [> V* /* /* }& i% <* )% )% )% %& -- -- _; y- !% W* W* @* X& :; j% j% [& }> f& f& :; :; y* l$ |> B e= 9$ &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- ", +"D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ 1> [; 2> 3> 4> 5> 5> 6> 2; 7> 8> 9> 0> a> b> c> d> L- e> f> g> h> i> j> k> l> m> n> o> p> q> r> s> L- J; t> D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ 1$ `% u> U# D$ D$ D$ D$ D$ D$ D$ 9$ I. v> `= J# U# D$ D$ D$ D$ D$ D$ q; q; #@ ' U# w> Y= x> y> z> A> B> C> D> E> S* S= S= && && !* !* T* T* V& 3& V& S* w- F> R* && 7% 7& V* k% G> T& H> Q= D$ B ' ' ' #@ U# D$ q; q; q; 9$ D$ D$ D$ 9$ 9$ 9$ 9$ q; q; q; q; q; q; q; q; 9$ q; 9$ 1$ 1$ D$ U# S@ S@ S@ I. B ' ' U# @& I> d- J> <* )* )* 5$ <* _; y- _; y- y- !% W* @* X& X& :; j% [& H; H; }> u* Y= [> K> [& '* L> q; B 1$ 9$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ ", +"&- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- M> N> O> P> Q> R> S> S> T> 3> U> V> W> X> Y> Z> `> , ., ;> +, @, #, $, %, &, *, =, -, ;, >, ,, ', ), s> !, ~, ;> &- M> M> &- &- &- &- &- &- &- J; ^+ e= J; &- &- &- &- &- &- &- &- J; |> ' &- J; &- M> &- J; {, |> ' B ], 3= ^, /, (, _, R* && :, <, [, }, |, 1, S* S= && && && T* V& V& S* *- S= 2, W* D* 4$ F; D; 3, R@ ' ' ' k$ |> &- 8- {, {, 8- 8- J; J; &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- M> M> M> J; J; J; J; J; J; J; J; 8- 8- 8- {, J; _$ B ' e= 4, F; t$ U& u- F* 5$ <* y- W* @* @* @* X& :; :; j% [& H; }> }> u* f& Y= Q& B* u* H; <& v$ 8- k$ &- 8- J; &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- &- ", +"D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ 5, 6, 7, 8, 9, 0, 0, a, Q> b, c, d, e, f, g, h, i, j, k, 7; l, ' m, n, o, p, q, r, s, t, u, v, w, x, y, z, L- A, B, B, B, J; D$ D$ D$ D$ D$ D$ {, 9$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ 9$ >> 9$ D$ D$ D$ '& D$ ' C, 4$ :* w- D, y; R* Q* R* E, F, G, H, I, J, K, L, S= S= && T* x- S= M, f= N, q$ L> 8- ' ' ' ' Q@ 1$ 9$ '& '& {, q; 9$ J; D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ J; 9$ q; {, J; S@ B ' 1$ @& r% w* l% _; i% O, -- @* j% [& [& [& [& H; }> u* f& Y= Y= [> Q& J> P, [> u* z* (> q; I. D$ q; J; D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ ", +"9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ m; Q, R, S, T, S, S, U, V, W, X, Y, Z, `, ' .' +' @' #' $' '& ' %' &' ' *' =' -' ;' >' ,' '' )' !' ~' {' ]' z, N* N* z, ^' 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ J; q; >> B D$ y* x- D, /' _, R* w- F> w- w- R* (' _' :' <' [' }' |' 1' T* S= *- /, 6% [= 7= J# ' I. D$ '& >> >> '& q; 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ q; '& '& 9$ a# k$ k$ q; D; [% o% 2$ @* )% %& W* [& }> u* u* u* f& Y= [> Q& Q& B* J> P, 2$ B* Y= T= 2' q; :> D$ {, 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ 9$ ", +"3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' m; 4' 5' 6' 7' 6' 6' 8' 9' 0' a' |> b' c' d' e' `> f' g' h' i' j' k' l' ' m' n' o' p' q' r' s' t' u' v' w' x' y' z' A' B' N* C' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 8- D' e= ' w> |& E' F' F> F> f= f= f= F> F> w- w- G' H' I' J' K' L' M' J= N' S= O' P' 4, ' B &- >> {, 8- 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 8- 8- {, {, J; |> k$ :> {, B$ l* b- h- [& y- W* u* Y= Y= Y= [> Q& B* J> l% l% P, 2$ o$ l% Q& y* Q' {, R' J; {, 8- 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' 3' ", +"8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- S' Q, T' U' V' U' U' W' X' Y' a' w% q; ^' Z' c' d' `' ) .) +) @) #) $) %) &) *) =) -) ;) >) ,) ') )) !) ~) {) ]) ^) /) () _) N* :) 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 9$ >> '& ' 0$ [= <) (, F> *- *- *- _, _, f= f= F> w- w- w- [) D> }) |) 1) 2) 3) 4) A; Q@ ' a# O* O* q; 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- {, '& '& 9$ |> I. :> {, B$ r% o% }> @* Y= Q& Q& Q& B* J> l% P, k% k% 2$ o$ #* 2$ J> *% Z% '& R@ D$ '& q; 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- ", +"q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; 5) 6) 7) 8) 9) 8) 8) 0) a) b) c) a# d) q; q; e) f) g) h) i) j) k) l) m) n) o) p) q) r) s) t) u) v) w) x) y) z) A) B) C) D) E) F) G) f) q; q; q; q; q; q; q; q; q; q; q; q; q; 8- {, 3, Q@ #@ c- x- H) *- f= J= J= *- *- _, f= f= f= F> w- I) S* F> <) _, J) K) L) M) ' N) >> J# '& q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; {, '& >> >> 8- h= R@ R@ 6$ r$ f& j% Q& J> J> J> l% P, k% 2$ W& o$ o$ #* q$ o$ O) U= Z% P) _$ J; >> {, q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; q; ", +"8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 5) 6) Q) R) S) R) R) T) U) V) W) X) d) 8- 8- 8- 8- Z' Y) Z) `) ! .! +! @! #! $! %! &! G) *! =! -! ;! >! ,! '! )! !! ~! {! ]! ^! /! f) 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- t- 8- ' (! _! :! > >> h= R@ D; -& [> H; J> P, P, k% k% 2$ W& o$ h- #* #* q$ M& #* W& 7! [% 8! _$ J; >> {, 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- 8- ", +"{, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, 9! 0! a! b! c! d! d! e! f! g! c) h! >> {, {, {, {, {, {, !& {, i! l, j! k! l! m! n! o! b' p! q! r! s! t! u! v! w! x! y! z! A! B! C! {, {, {, {, {, {, {, {, {, {, {, {, O* 3, B J# R& /, D! *- J= v- J= v- J= *- J= *- _, w- F> y; D, *- ]* G> C; B E! r- F! G! H! I! J! K! {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, >> t- e= _$ 6$ [$ B* u* P, W& 2$ W& o$ o$ h- #* |% q$ q$ M& $& S& L! 0- l* 8! _$ 8- >> {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, {, ", +">> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> M! N! O! P! Q! R! R! S! d! T! U! U# V! >> >> >> >> >> >> >> >> C! d) @, W! X! Y! Z! `! ~ .~ +~ q! @~ #~ $~ %~ &~ *~ =~ -~ ;~ >~ ,~ '~ d) >> >> >> >> >> >> >> '& >> P) e= B m$ g- )~ F' *- /, /, v- J= v- J= J= J= f= J= !~ ~~ 4& D* {~ e= ' e= 3, ]~ ^~ /~ (~ _~ :~ 5, D' >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> t- t- e= |> D; #& l% [> 2$ h- o$ h- #* #* |% q$ S& M& M& n* z* $& |% <~ l* [~ e= t- >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> ", +"}~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ |~ 0! 1~ 2~ 3~ 4~ 4~ 5~ R! 6~ U! h! V! }~ }~ }~ }~ }~ }~ }~ }~ {, f) C! 7~ p! 8~ 9~ 0~ a~ b~ c~ d~ e~ f~ g~ h~ i~ j~ k~ l~ m~ n~ o~ p~ f) {, }~ }~ }~ }~ }~ {, 3, >> ' q~ r~ D! D, *- /, /, v- /, v- v- J= v- _, f= !~ s~ m* m$ >> ' _$ D' P) t- }~ {, t~ u~ v~ _~ w~ x~ y~ t~ {, }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ {, t- t- e= |> D; z~ k% Q& W& |% #* |% q$ q$ S& M& $& n* G* z* T= z* q$ <= A~ |> t- >> {, }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ }~ ", +">> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> B~ N! C~ D~ E~ F~ F~ G~ 4~ H~ I~ J~ t- >> >> >> >> >> >> >> >> >> >> >> K~ L~ M~ N~ O~ P~ Q~ R~ S~ T~ U~ V~ W~ X~ Y~ Z~ `~ { .{ +{ @{ 5! D' >> >> >> >> t- [~ Q@ U# w* w- #{ /, v- F' /, /, /, v- /, v- J= f= > P) 3, D' >> >> >> >> D' D' p~ &{ *{ ={ -{ '& K~ >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> t- 3, &- h= 6$ X= q$ J> #* S& q$ S& M& $& $& n* G* z* z* T= y* G* z* h& h= >> ;{ >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> ", +"O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* t- >{ ,{ '{ ){ !{ ~{ ~{ {{ F~ ]{ ^{ 1$ /{ O* O* O* O* O* O* O* O* O* O* O* O* O* K~ L~ ({ N~ _{ :{ <{ [{ }{ |{ 1{ 2{ 3{ 4{ 5{ 6{ 7{ 8{ 9{ 0{ a{ V! O* O* [~ {, ' v$ 3% )~ <) J= F' y; F' /, F' /, v- /, *- *- E' >% 9- R@ U# [~ P) t- O* O* O* O* O* O* O* O* L~ b{ c{ d{ e{ f{ g{ a{ O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* J# 3, J; |> <> <$ M& k% q$ $& M& $& n* G* G* z* h{ T= h{ m% h{ S& i{ >> J; 3, >> O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* O* ", +"D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' j{ k{ l{ m{ n{ o{ o{ p{ ~{ q{ ^{ &- r{ D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' 5! a{ s{ t{ u{ v{ w{ x{ y{ z{ A{ B{ C{ D{ E{ F{ G{ H{ I{ a{ J{ P) B K{ a$ (, L{ v- y; y; F' y; F' /, /, F' v- _, D, (, :$ M{ k$ P) J{ D' D' D' D' D' D' D' D' D' D' D' D' a{ N{ O{ P{ Q{ R{ S{ 5! D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' ;{ J{ 8- T{ <> 7= n* W& M& G* G* G* z* h{ h{ h{ T= h{ h{ T= U{ s$ V{ W{ J{ t- D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' D' ", +";{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ j{ X{ Y{ Z{ `{ ] ] .] +] @] #] $] 3, ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ %] &] *] T. =] -] ;] >] &] @~ ,] '] )] !] ~] {] ]] ^] /] _$ (] 1& _] P* z* h- n* h{ h{ h{ T= h{ T= h{ z* h{ T= S& m% ; e= 3, 3, t- ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ", +"3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7] X{ 8] 9] 0] a] a] b] ] c] d] D$ e] 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, ]~ |] f] g] h] i] j] k] l] m] n] o] p] !] q] r] s] I& t] 2% u] v] /, > R@ 8! P) t- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /{ w] x] y] z] A] B] C] D] 3, /{ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, P) {, e= <> m$ T= q$ z* m% h{ T= h{ z* h{ z* G* h{ n* q$ 5= J; >> P) t- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, ", +";{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ E] F] G] H] I] J] K] K] L] a] M] #] J; N] ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ w] O] |] P] Q] R] S] T] U] J{ V] W] X] Y] Z] `] ^ .^ +^ y; ^ v= ;; 7! $& m% T= h{ z* z* z* z* G* G* G* #* P' ,^ M> ;^ E] ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ;{ ", +"3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, '^ )^ !^ ~^ {^ ]^ ]^ ^^ /^ (^ d] `) P) 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, _^ ]~ :^ =^ <^ [^ }^ |^ 1^ 2^ 3^ 4^ 5^ 6^ 7^ 8^ 9^ 0^ a^ <) ~~ >^ K{ P) 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, b^ c^ d^ e^ f^ g^ h^ i^ j^ b^ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, P) [~ >> &- <> u$ S& h{ h{ z* z* G* z* G* n* G* z* h- k^ l^ >^ ;^ P) 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, ", +"P) _^ m^ P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) n^ )^ o^ p^ q^ ~^ ~^ r^ s^ t^ u^ 8- v^ P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) N] P) w^ x^ y^ z^ A^ B^ C^ D^ E^ F^ G^ H^ I^ J^ K^ L^ <) ~~ <) ~~ > U^ <] $& G* T= G* z* G* n* G* n* $& G* q$ S& Q' J; 3, [~ J{ P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) P) ", +";^ V^ W^ X^ m] ;^ Y^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ n^ Z^ `^ / ./ p^ p^ +/ @/ #/ $/ 8- v^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ b^ N] J{ %/ &/ */ =/ B -/ ;/ >/ ,/ '/ )/ !/ ~/ a^ <) ~~ ~~ /, ~~ {/ Z& <] ]/ }~ ,^ ;^ ^/ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ b^ // (/ _/ :/ #^ m% S& h{ G* n* G* n* $& n* $& n* M& o$ ,* J{ }~ [] J{ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ", +"3/ 4/ 5/ 6/ 7/ 8/ 8/ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ 9/ 0/ a/ b/ c/ / / d/ e/ f/ g/ q; [~ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ P) h/ i/ j/ k/ l/ m/ n/ o/ p/ q/ r/ s/ t/ u/ v/ ~/ a^ w/ F' P= C, 8! P) ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ 8/ x/ y/ z/ A/ B/ C/ D/ E/ &] F/ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ [~ 8! 8- @& K& |% z* G* n* n* $& n* $& M& $& $& W& G/ z$ J; 8! [~ P) ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ;^ ", +"H/ I/ J/ K/ L/ M/ h/ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ N/ O/ P/ Q/ R/ S/ S/ T/ U/ V/ W/ {, X/ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ v^ Y/ Z/ `/ ( .( +( @( #( $( %( &( *( =( -( ;( >( ,( {/ '( )( N^ ;^ ,^ ;^ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [] !( ~( {( ]( ^( /( (( _( :( <( [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ ;^ [( ;{ J{ }( |% n* G* $& n* $& M& $& M& S& $& L! G* {~ |( [] [] ;^ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ ", +"1( 2( 3( 4( 5( 6( 7( 6/ v^ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ N/ O/ 8( 9( 0( a( a( b( c( d( W/ {, X/ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ ;^ [] e( f( g( h( i( j( k( ~/ l( m( n( o( p( q( r( I) s( >^ M> t( [] ;^ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ e( u( v( w( x( y( z( A( )& B( [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ ;^ 8! ;^ C( D( n* q$ G* $& M& $& M& S& M& S& M& |% o$ z; D' J{ [( ;^ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ [~ ", +"E( F( G( H( I( J( K( L( M( N( [] [] [] [] [] [] [] [] [] [] O( P( Q( R( S( T( T( U( V( W( X( >> [( [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] K{ C, Y( Z( `( _ ._ +_ @_ #_ F' $_ %_ &_ *_ =_ -_ ;_ >_ ,^ ,^ [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] <( ,_ '_ )_ !_ ~_ {_ ]_ <( [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] 8! K{ U^ l^ ^_ /_ n* $& M& M& S& M& S& q$ S& S& P, (_ M{ >> ,^ [] [] [] [] __ :_ <_ [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] ", +"[_ }_ |_ 1_ 2_ 3_ 4_ 5_ 6_ 7_ 8_ <( N( [( [( [( [( [( [( [( 9_ 0_ a_ b_ c_ d_ d_ e_ f_ g_ X( >> h_ [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [] ,^ i_ N^ :$ j_ k_ l_ m_ n_ o_ p_ q_ r_ s_ t_ u_ v_ w_ x_ y_ z_ [] [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( X/ <( A_ B_ C_ D_ E_ F_ X/ N( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( i_ [( ,^ D' ,^ 4$ G_ $& $& S& M& S& q$ S& q$ q$ S& 2$ T= H_ 3' ,^ [( [] 8_ I_ J_ K_ 8_ L_ [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( ", +"M_ N_ O_ P_ Q_ R_ S_ T_ U_ V_ 6_ W_ A_ 8_ <( N( [( [( [( [( 9_ 0_ X_ Y_ Z_ `_ `_ : .: +: X( >> h_ [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [] ,^ J{ D' @: #: $: %: &: *: =: -: ;: >: ,: ': ): !: ~: {: ]: F_ A_ N( X/ [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( X/ ^: z_ <( /: (: _: ]_ z_ 8! [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [] ,^ ;^ D' :: |% |% $& S& q$ S& q$ |% q$ |% q$ W& #* <: [: [] }: |: 1: 2: 3: 4: 8_ [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( ", +"5: 6: 7: 8: 9: 0: a: b: c: d: e: f: g: h: i: j: k: }: l: [( m: n: o: p: q: r: r: s: t: u: v: t- ,^ [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( t( [] D' /> w: ~~ /' /' ,( @_ x: y: z: A: B: C: D: E: F: G: H: I: J: k: [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( K: L: M: N: O: l: h_ l: [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( ,^ ,^ [: P: T= o$ M& S& q$ |% q$ |% |% #* q$ h- l% Q: h/ R: S: T: U: V: W: X: [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( ", +"Y: Z: `: < .< +< @< #< $< %< &< *< =< -< ;< >< i: h: h_ k: .; n: ,< '< )< !< !< ~< {< ]< v: t- ^< [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( K{ [( M{ [] D' _! /< ~~ D, D, D, (< _< :< << [< }< |< 1< 2< 3< 4< 5< 6< 7< 8< 9< K: h_ 0< [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( 0< l: h_ l: a< b< c< d< k: [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( K{ [( ,^ t( D' e< b- k% X* q$ |% |% |% #* |% #* #* |% B* f< g< h< i< j< k< K_ l< m< h_ 0< [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( [( ", +"n< o< p< q< r< s< t< u< v< w< x< y< z< A< B< C< D< E< F< G< H< I< J< K< L< M< M< N< O< P< Q< r{ t( ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ R< S< E] }~ _! /< T< k( k( D, D, D, U< V< W< X< Y< Z< `< [ .[ +[ @[ #[ $[ %[ &[ *[ K: ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ K: =[ -[ ;[ >[ ,[ '[ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ )[ ![ ![ ~[ W& #* S& |% #* |% #* h- #* h- |% {[ ][ ^[ /[ ([ _[ :[ X: <[ m< [[ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ,^ ", +"}[ |[ 1[ 0< 2[ 3[ ^< 4[ 5[ 6[ 7[ 8[ 9[ 0[ a[ b[ c[ d[ e[ f[ g[ h[ i[ j[ k[ l[ l[ m[ n[ o[ p[ 3, q[ t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( ,^ r[ D' s[ t[ u[ <) k( k( D, k( D, D, /' v[ w[ x[ y[ z[ A[ ,^ B[ C[ D[ E[ F[ G[ H[ I[ ^< I[ J[ t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( I[ K[ L[ M[ N[ O[ P[ Q[ J[ t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( ,^ t( t( R[ S[ S& W& q$ |% #* h- #* h- h- o$ T[ U[ V[ W[ X[ Y[ Z[ `[ } .} +} '[ t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( ", +"@} #} $} J[ %} '[ I[ &} &} ^< 4[ 5[ >< *} =} -} ;} >} ,} '} )} !} ~} {} ]} ^} ^} /} ^} (} p[ 3, q[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ t( ,^ r[ D' s[ .* _} <) k( k( D, k( D, k( D, <) _} :} <} [} }} |} 1} 2} ,[ 3} 4} 5} 6} 7} 8} 9} 0} '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ 0} a} b} c} d} e} I[ I[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ t( M{ D' f} 3$ g} q$ #* h- h- h- o$ h} i} j} k} l} m} n} l< o} p} q} r} s} I[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ '[ ", +")[ t} t} )[ t( t( t( t( t( )[ 2} 2} J[ u} $} v} w} x} y} z} A} B} C} D} E} j[ j[ F} {} G} H} I} S< t( t( t( t( t( t( t( t( t( t( t( t( t( )[ '[ J} K} L} .* u[ <) !~ k( D, k( D, k( D, /' u[ -% M} L( N} O} P} Q} R} ^< S} T} U} V} W} p] X} R} L[ t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( )[ ^< Y} Z} `} | .| 0} t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( S< ![ )[ +| g} h- #* o$ o$ @| #| $| %| &| *| =| -| ;| >| ,| '| )| !| 3[ t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( t( ", +"~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| t} 3[ 3[ q[ u} {| v} ]| ^| /| (| _| :| _| _| <| _| [| }| || 1| %} %} t} ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| t( v= }~ 2| .* u[ 3| !~ k( !~ k( D, k( D, /' 4| 5| T{ M{ 6| R} 7| 8| 9| 0| a| .| b| c| d| e| f| g| h| i| j| q[ ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| q[ k| l| m| n| o| p| j| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| t( 1< t( ;{ <] W& o$ h- W& q| r| s| t| u| v| w| x| y| z| r} A| B| C| D| 3[ E| q[ ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ~| ", +")[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ t} %} %} q[ F| G| H| I| J| K| L| L| M| N| O| P| Q| R| S| T| q[ %} %} t} )[ )[ )[ )[ )[ M{ )[ U| M> V| Q* {/ (, !~ k( k( !~ k( k( /' (, 4| 5| W| r[ S< )[ k| X| Y| Z| `| )[ S< 1 .1 +1 @1 #1 $1 %1 i| M{ t} )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ j| &1 *1 =1 -1 ;1 >1 j| )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ M{ 1< R[ ,1 2$ W& W& 2$ '1 )1 !1 ~1 {1 ]1 ^1 /1 (1 _1 !| :1 <1 [1 .} }1 3[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ )[ ", +"S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< %} |1 11 21 31 41 51 51 61 71 81 91 01 a1 b1 c1 d1 e1 f1 M{ k| k| S< S< S< )[ e< |( g1 F' _] (, !~ k( !~ !~ k( !~ D, k( /< h1 i1 J} S< M{ S< S< M{ J[ j1 k1 l1 m1 S< j| n1 o1 p1 q1 $1 r1 s1 t1 M{ S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< M{ t1 u1 m| v1 w1 >1 x1 S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< J} R[ y1 z1 k- A1 B1 C1 D1 E1 F1 G1 H1 I1 J1 m< K1 L1 M1 N1 O1 P1 Q1 R1 S1 S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< ", +"1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< T1 U1 V1 W1 X1 J| J| Y1 Z1 `1 2 j* .2 +2 @2 #2 $2 %2 M{ H< &2 1< *2 =2 e< 3' g1 F' u] /' D! !~ k( !~ k( !~ D, D! #{ -2 M> v= 1< M{ 1< 1< ;2 *2 >2 ,2 '2 )2 !2 ~2 {2 ]2 ^2 /2 (2 _2 f| :2 <2 *2 ;2 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< =2 [2 }2 |2 12 22 32 42 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< r[ J{ }( 52 62 72 82 92 02 a2 b2 c2 d2 e2 f2 g2 h2 f2 i2 j2 k2 l2 m2 g2 ;| 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< ", +"S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< n2 o2 p2 q2 r2 31 31 s2 31 t2 u2 v2 w2 x2 y2 z2 A2 B2 C2 D2 E2 &1 F2 G2 H2 I2 J2 u] /' D! !~ D! !~ k( !~ D, D! P= K2 L2 M2 N2 S< S< S< S< S< S< O2 P2 Q2 R2 S2 T2 ;| U2 V2 W2 X2 Y2 Z2 `2 3 1| 42 S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< O2 .3 +3 @3 #3 $3 %3 S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< N2 N2 i_ &3 *3 =3 -3 ;3 >3 ,3 Q& '3 )3 !3 ~3 {3 ]3 K1 ^3 /3 (3 _3 :3 <3 K1 S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< S< ", +"1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< [3 o2 }3 |3 13 W1 W1 23 W1 33 43 53 63 S< 73 83 93 03 a3 b3 c3 d3 e3 f3 g3 h3 i3 ,( j3 k3 l3 m3 n3 n3 o3 H) P= p3 q3 r3 N2 1< 1< 1< 1< 1< 1< 1< 1< s3 t3 u3 v3 w3 x3 s3 >2 y3 z3 A3 A3 B3 C3 ~2 s3 N2 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< N2 ;2 D3 E3 F3 G3 H3 N2 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< r[ S< t} I3 J3 K3 L3 M3 N3 O3 Y= P3 Q3 R3 S3 T3 ]3 U3 V3 W3 X3 Y3 Z3 `3 ]3 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< 1< ", +"r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ 4 .4 +4 @4 #4 q2 q2 $4 q2 %4 &4 l: *4 r[ =4 -4 1< ;4 >4 ,4 '4 )4 !4 ~4 {4 ]4 ^4 #( /4 (4 _4 :4 <4 [4 /4 }4 K2 >^ |4 N2 r[ r[ r[ r[ r[ r[ r[ r[ r[ s3 14 s3 24 R2 34 44 54 64 74 84 94 04 H: a4 b4 c4 54 r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ c4 d4 e4 f4 g4 h4 c4 r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ N2 v= E| i4 j4 k4 l4 m4 n4 o4 p4 *3 q4 r4 s4 t4 u4 v4 ]3 w4 S< x4 y4 z4 A4 ]3 B4 B4 r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ r[ ", +"C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 D4 E4 F4 G4 H4 I4 I4 J4 |3 K4 &4 R< J} s3 s3 c4 L4 =4 63 N2 M4 N4 O4 P4 Q4 R4 S4 T4 U4 V4 W4 X4 Y4 Z4 `4 5 .5 r3 N2 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 N2 c4 +5 @5 #5 $5 %5 &5 +5 *5 =5 -5 ;5 >5 ,5 '5 +5 c4 N2 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 s3 )5 !5 ~5 {5 ]5 ^5 s3 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 N2 /5 (5 _5 :5 <5 [5 }5 p4 Y= *3 |5 15 25 35 45 55 v4 65 75 85 95 05 a5 ^3 w4 b5 65 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 ", +"J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} c5 .4 d5 e5 f5 g5 g5 h5 @4 i5 &4 h_ v= J} J} J} J} j5 k5 r[ l5 m5 n5 o5 p5 q5 r5 s5 t5 u5 v5 w5 x5 () y5 z5 A5 B5 r[ J} J} J} J} J} J} J} J} J} J} J} r[ C5 G| D5 E5 F5 G5 J} 44 H5 I5 J5 94 K5 L5 c4 j5 M5 J} r[ J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} r[ N5 d4 O5 @3 +3 h4 N5 r[ J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} P5 Q5 R5 S5 T5 U5 o4 Y= f& f& V5 W5 X5 Y5 Z5 `5 6 v4 65 J} ^3 .6 +6 @6 #6 $6 %6 j5 r[ J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} ", +"v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= &6 *6 =6 -6 ;6 >6 >6 ,6 G4 '6 )6 ^< e< v= v= v= v= v= v= U| k5 !6 ~6 {6 ]6 ^6 /6 (6 _6 :6 <6 [6 }6 |6 16 26 36 46 56 v= v= v= v= v= v= v= v= v= v= v= v= v= B5 66 76 86 96 66 06 14 a6 D[ b6 c6 d6 e6 f6 g6 h6 B5 i6 v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= k5 j6 k6 l6 m6 n6 o6 k5 v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= *4 v= L4 p6 q6 r6 s6 t6 u6 f& f& u* }> v6 w6 x6 y6 z6 A6 B6 U| v4 56 C6 D6 E6 F6 G6 H6 I6 J6 v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= v= ", +"J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} K6 *6 L6 M6 N6 O6 O6 P6 e5 Q6 R6 ,^ U| J} J} J} J} J} J} S6 C( T6 U6 (< m3 E' V6 W6 ^6 X6 Y6 Z6 `6 7 .7 +7 @7 #7 B5 J} J} J} J} J} J} J} J} J} J} J} J} J} k5 h6 $7 %7 &7 *7 =7 -7 ;7 >7 ,7 '7 )7 !7 ~7 {7 ]7 ^7 B5 J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} /7 (7 _7 @3 :7 <7 /7 J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} k5 k5 [7 56 }7 |7 17 27 37 47 57 a$ u* }> }> H; H; 67 77 87 97 07 a7 b7 *4 J6 c7 d7 e7 f7 g7 h7 L4 k5 J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} J} ", +"U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| i7 j7 k7 l7 m7 n7 n7 o7 p7 q7 )6 t( M2 U| U| U| U| U| S6 R[ r7 u[ !~ D! D! D! m3 m3 s7 t7 u7 v7 w7 x7 y7 z7 h6 U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| A7 B7 C7 D7 E7 F7 i6 G7 H7 D[ I7 J7 K7 L7 () M7 N7 O7 U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| O7 j6 P7 Q7 R7 /7 i6 U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| S7 T7 U7 V7 W7 X7 Y7 Z7 `7 8 d- .8 N= H; H; [& [& [& +8 @8 #8 $8 %8 &8 b7 *8 =8 -8 ;8 >8 ,8 '8 U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| ", +"M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 )8 !8 ~8 {8 ]8 ^8 ^8 /8 M6 (8 _8 }1 :8 M2 M2 M2 M2 r3 S< <8 [8 u] !~ H) D! H) D! H) ,( }8 |8 18 28 38 48 58 68 78 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 88 98 08 a8 b8 c8 d8 e8 f8 g8 h8 i8 j8 k8 l8 m8 n8 o8 p8 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 98 q8 r8 s8 t8 u8 v8 88 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 w8 x8 y8 z8 A8 B8 C8 D8 E8 F8 56 U| l- W* u* [& [& j% j% :; G8 H8 I8 J8 K8 L8 M8 L8 N8 O8 P8 Q8 R8 S8 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 ", +"U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| O7 T8 !8 U8 V8 W8 X8 X8 Y8 l7 Z8 _8 t( M2 U| U| O7 U| S6 [: `8 9 D, H) D! H) D! H) k( #: .9 +9 @9 #9 $9 %9 &9 *9 08 98 U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| 06 06 =9 -9 Z| ;9 >9 M2 ,9 '9 )9 !9 ~9 {9 ]9 ^9 /9 78 O7 U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| A7 (9 _9 :9 <9 [9 }9 98 U| O7 U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| w8 |9 19 29 39 49 59 69 79 89 99 4, S< 09 i- @* H; j% j% :; X& X& a9 b9 c9 d9 e9 <> f9 g9 h9 i9 j9 56 88 06 U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| U| ", +"M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 k9 l9 m9 n9 o9 p9 p9 q9 r9 s9 t9 M{ r3 M2 M2 M2 u9 v9 w9 4| k( H) D! H) H) D! D! H) D! x9 y9 z9 A9 B9 C9 D9 E9 F9 G9 e8 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 78 H9 I9 J9 K9 L9 l5 M9 N9 O9 P9 Q9 R9 S9 T9 G9 e8 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 e8 U9 V9 W9 X9 Y9 Z9 e8 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 `9 0 .0 +0 @0 #0 $0 %0 &0 *0 :8 S6 )[ =0 }> X& j% :; X& X& @* @* -0 ;0 >0 ,0 '0 )0 !0 ~0 {0 ]0 ^0 /0 (0 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 M2 ", +":8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 r3 _0 :0 <0 [0 }0 |0 |0 10 V8 20 30 ;2 |4 :8 M2 S6 )[ 40 ~~ P= !~ H) H) H) D! H) D, 50 60 70 L} 78 80 90 M9 00 a0 b0 G9 78 r3 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 c0 p8 d0 e0 f0 g0 h0 l5 i0 j0 k0 l0 m0 n0 o0 p0 q0 78 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 80 r0 s0 t0 u0 v0 w0 x0 y0 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 z0 A0 B0 C0 D0 E0 F0 G0 H0 A7 :8 M2 I0 '[ J0 .8 :; :; X& @* W* W* K0 L0 M0 N0 O0 P0 Q0 R0 S0 T0 U0 V0 (0 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 :8 ", +"W0 W0 W0 W0 W0 W0 W0 W0 W0 W0 W0 W0 W0 W0 W0 W0 W0 W0 W0 W0 z$ X0 Y0 Z0 `0 a a .a +a @a 30 S< #a W0 r3 S6 $a %a &a D, H) D! H) D! H) k( 4| *a )[ #a r3 W0 W0 e8 =a -a ;a >a ,a 'a y0 W0 W0 W0 W0 W0 W0 W0 W0 W0 W0 W0 W0 W0 W0 W0 W0 y0 )a !a ~a {a ]a ^a /a (a _a :a b ,b 'b )b !b ~b {b ]b S6 Pa #a #a Ja $a p3 ^b X& W* !% !% y- /b (b _b :b c u[ k( H) D! H) D! H) D, _} ,c 'c )c #a #a #a #a #a #a #a !c gb ~c {c ]c ^c kb Ka #a #a #a #a #a #a #a #a #a #a #a #a #a #a #a /c (c /a _c :c d ,d 'd )d !d ~d {d ]d ^d /d (d _d :d r3 e ,e 'e )e `d yc Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja ", +"!e ~e {e ]e ^e /e (e ia _e 0d 9d 0d :e _e f ,f 'f )f !f ~f {f ]f ^f /f (f _f :f :f g ,g 'g )g !g Vd ~g {g {g ]g ^g /g (g _g :g h ,h 'h Vd )h ^g ^g !h ~h {h ]h ^h /h (h T. _h :h i ,i 'i v7 )i j ,j 'j )j !j ~j {j ]j ^j /j (j _j {i Gi Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Sh Gi Sh :j k ,k 'k mh Gg )c )c )c )c mi bj )k !k ~k {k ]k ^k /k (k i% 5$ 5$ F* _k :k l Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg Gg ", +"09 09 09 09 09 09 09 09 09 09 09 09 09 09 09 09 09 09 09 be _> ,l 'l Vd )l !l !l ~l !l {l ]l ^l /l (l _l :l Kl Ll yj Ml Nl Nl Ol Nl Pl Ql Rl Sl Tl Ul Vl Wl Xl Yl Zl Ek 6k 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j `l m .m +m @m #m $m Ek 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j `l %m &m *m =m -m ;m >m Wj ,m 'm )m !m hg ~m %m `l 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j {m ]m ^m /m (m _m {m 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j 'j Ic :m n ,n 'n )n !n ~n {n 2h qm qm qm qm qm qm qm qm ]n ^n /n (n _n :n o ;o ,o Ql v] gn k( )~ 'o )o !o ~o {o ]o ^o Zl Im /o qm qm qm qm qm qm qm qm qm qm qm qm qm qm qm qm qm qm qm /o Im (o _o :o n ko lo mo no oo po qo qm qm qm qm qm qm qm qm qm Hm ro so to uo vo wo xo f% )* _* (k yo zo Ao Bo Co Do Eo Fo Go Ho Io qm qm qm qm qm qm qm qm qm qm qm qm qm qm qm qm qm qm qm qm qm ", +"2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h Jo Ko Lo vm Mo No No Oo No Po Qo Ro So /' _} To Uo Vo $/ Wo {o Xo Yo Zo |l 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h `o p .p +p @p p `o 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h |l Zo #p $p %p &p *p =p -p |i ;p >p ,p 'p )p !p ~p `o 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h |l =p Im @n {p ]p rn ^p 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h 2h /p (p _p :p

q ,q 'q )q !q ~q {q 8e Lj Lj Lj Lj Lj Lj Lj Lj Lj Lj Lj Lj Lj Lj Lj Lj Lj Lj Lj Lj ", +"]q ]q ]q ]q ]q ]q ]q ]q ]q ]q ]q ]q ]q ]q ]q ]q ]q ]q ]q )o ], ^q /q ;o (q _q _q :q r ,r 'r )r !r ~r @r Lj )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o yq )o {r ]r ^r /r (r _r rp )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o :r s 8f ,s 's )s !s ~s 7r 8f 8f 8f 8f 8f 8f 8f 8f 8f 8f 8f 8f 8f @r {s ]s ^s /s (s _s /* +* :s r xs ys Wr s Ar )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o zs As Bs Cs Ds Es ~r .s Hr )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o 8f Fs Gs Hs ;s yq 8f 8f 8f Is Js Ks Ls Ms 6r Ns )o )o )o )o )o )o )o )o )o )o )o )o )o pr Os Ps Qs Rs Ss Ts 8& ^* ]* Us Vs Ws Xs Ys Zs `s t .t +t @t yq yq )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o ", +" s s s s s s s s s s s s s s s s s s s s #t $t %t &t *t =t =t -t ;t >t ,t 't ^> Dh )o Xq s s s s s )t !t ~t {t ]t ^t /t (t Ns s s s s s s s s s s s s s s s s s s s s _t :t u ,u 'u Q< |t )u ,m !u !t |t ~u {u ]u ^u /u (t 7t 2q 2q 2q 2q 2q 2q 2q 2q 2q 2q 2q 2q 2q 2q 2q 2q 2q 2q 2q 2q 2q 2q 2q 7t (u Xq _u :u v ,v )t s s s s s s s s s s s s s s s s s ", +"2q 2q 2q 2q 2q 2q 2q 2q 2q 2q 2q 2q 2q 2q 2q 2q 2q 2q 2q is 'k 'v )v !v ~v {v {v ]v ^v /v (v _v :v Wt 2q 2q 2q 2q 2q 2q 2q 2q 2q 2q w ,w 4v &w yu yu yu yu yu yu yu yu yu yu yu yu yu yu yu yu 4v p[ 'w )w T. !w y7 ~w {w ]w yu yu yu yu yu yu yu yu yu yu yu yu yu yu yu &w u (w _w :w gv x ,x 'x 4v is is )x !x ~x {x ]x ^x !x )x is is is is is is is is is is is is is is is is uv Iv /x (x _x :x ap 8& e% y {* e% ,y 'y )y !y ~y {y ]y ^y /y (y uw %w x Nw Nw Nw Nw Nw Nw Nw Nw Nw Nw Nw Nw Nw Nw Nw ", +"Nw Nw Nw Nw Nw Nw Nw Nw Nw Nw Nw Nw Nw Nw Nw Nw Nw Nw hx _y :y z ,z ,z 'z }y )z !z )o 0y %w %w %w %w %w %w %w %w %w %w %w %w %w %w Tx hy ~z {z ]t ]z ^z /z 5y Tx %w %w %w %w %w %w %w %w %w %w %w %w %w %w %w %w %w 5y (z _z :z A ,A 'A %w %w %w %w %w %w %w %w %w %w %w %w %w %w %w %w %w %w 0y )A !A 1z ~A {A ]A &A ^A /A (A _A :A u =B ,A -B ;B >B ,B D) 'B )B !B ~B {B ]B ^B /B (B _B +A :B &A 0y ZA }z }z }z }z }z }z }z }z }z }z }z }z }z }z }z 0y *A C ,C 'C )C !C ~C {C ]C ^C $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z Wt /C =A (C _C :C D ,D 'D )D !D $C ~D {D ]D $z $z $z $z $z $z Wt QB ]D QB MC QB $z $z $z $z Wt YC ^D /D (D _D YC $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z QB MC :D D, DD IB ED FD GD HC HC HD ID JD KD (t BD $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z LD &4 TC MD ND lx OD PD QD LD $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z QD RD SD YB TD UD QD $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z YC cD VD WD XD () YD ZD `D 2u E .E +E @E #E $E %E &E *E =E -E ;E >E ,E 'E $z QB $z QD 'E $z YC $z )E RB YC $z $z $z $z $z $z 43 !E ~E {E ]E ^E $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z $z QB QB /E (E _E A SE QD hx hx hx hx hx hx hx hx hx hx hx hx hx hx hx hx hx hx BD LD TE UE VE WE XE YE ZE `E F .F +F @F #F $F %F &F OC *F =F -F ;F >F ,F TE hx 'F )F !F &4 LD lD ~F {F ]F BD hx hx hx hx BD 43 ^F /F (F _F :F 43 hx hx hx hx hx hx hx hx hx hx hx hx hx hx hx hx hx hx hx hx hx hx hx hx hx hx hx hx BD BD TE G ,G 'G )G !G ~G {G *G ]G ^G /G (G _G :G wF NF Rz Rz TE H ,H 'H )H !H ~H {H ]H ^H /H (H _H :H OF [G I ,I 'I )I OE !I ~I Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz EB NF SF WC {I 'G NF EB Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz 'G ]I ^I /I (I _I :I F 8I 9I 0I aI bI cI dI eI fI gI hI iI jI kI lI ~I Rz Rz EB mI nI oI pI qI 3G Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz EB NF HH rI rI HH sI tI uI aG vI wI xI yI zI AI BI CI DI EI FI GI mG Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz nG HI II JI rG EB Rz Rz gH KI LI MI NI MI OI EB Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz mG PI QI RI SI TI UI ~* VI WI XI YI ZI cD GI `I J .J +J NG Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz Rz ", +"yE yE @J #J $J %J &J *J =J -J ;J >J ,J 'J hF QB )J !J xr ~J {J ]J ^J /J (J _J _J :J K ,K YF yE yE yE yE yE yE yE yE yE yE yE yE yE yE yE yE yE yE yE yE yE yE yE @K 'K )K !K LH OH ~* ~K {K ]K ^K /K (K x @K _K :K L ,L CK EB EB EB EB EB EB EB EB EB EB EB EB EB EB EB EB EB EB EB EB EB EB EB EB EB EB EB EB EB EB HF 'L PJ vI )L !L ~L {L ]L ^L /L (L _L :L M ,M 'M )M !M ~M {M ]M ^M pv 0E /M xG (M _M :M N ,N ,N 'N FL )N !N ~N {N ]N ^N /N (N _N :N O rN ;O ,O 'O )O !O ~O {O ]O hL yM xF xF xF xF xF xF xF xF xF xF xF xF xF xF xF xF xF xF xF xF xF xF xF xF xF xF xF xF ^O /O (O _O :O QL xF xF xF xF #K P ,P 'P )P !P ~P {P ]P M M M M M M M M M M M M PN rN YN ^P /P YN rN PN M M M M M M M M M M M M M M M xG PN 1M (P _P :P

Q ,Q 'Q )Q !Q ~Q {Q ]Q ^Q /Q (Q _Q :Q R ,R Fa xF xF xF xF 'R 'R xF 'R 'R xF xF xF xF xF xF xF xF xF xF xF xF xF xF xF xF xF xF xF xF xF xF rP )R !R ~R {R ]R ^R /R (R _R :R S 5# ,S 'S )S !S .R ~S PA PA PA PA PA PA PA PA PA PA PA @Q {S ]S ^S /S (S GQ PA PA PA PA PA PA PA PA PA PA PA PA PA ~S .R _S :S T ,T QP 'T )T !T ~T {T ]T PA PA PA PA PA PA PA PA ", +"^T /T (T _T :T U ,U 'U )U !U ~U {U ]U CS wS ^U /U ]U GQ ES cb ~S 'R 'R 'R 'R 'R 'R 'R 'R 'R 'R 'R 'R 'R 'R 'R 'R 'R 'R 'R @Q (U ^R _U :U V +O DS +V +V +V +V +V +V +V +V +V +V ,V 'V EQ )V !V ~V +O +V +V +V +V +V +V +V +V +V +V +V +V ,V {V ]V ^V /V (V AQ DS +V +V +V +V ,V _V :V W ,W 'W )W !W ~W {W ]W fR +V +V +V +V +V +V +V ", +"^W /W (W _W :W V @V wW xW zV yW zW AW BW CW DW EW FW GW HW IW JW KW LW MW NW OW PW QW RW SW TW UW VW WW XW YW ZW `W X .X +X @X #X $X %X &X *X =X -X ;X >X ,X 'X )X !X gW ~X pW pW 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W {X ]X ^X /X (X _X :X Y ,Y 'Y )Y !Y ~Y {Y ]Y ^Y /Y (Y _Y :Y Z ,Z 'Z 5W 5W )Z )Z )Z JX 5W !Z }z ~Z LX v- /, /, /, MX 8W {Z ]Z ^Z SX SX /Z (Z _Z :Z EB ` ,` '` )` !` ~` {` ]` ^` /` 4W (` FX 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W )Z _` :` <` [` }` |` 1` 2` 3` fW fW 4` 5` 6` 7` TY 8` 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W 5W JX ., .' .) .! .~ .{ .] .^ ./ .( ._ .: .< .[ .} .| .1 .2 .3 .4 .5 .6 .7 .8 .9 .0 .a .b .c .d .e .f .g .h .i .j .k .l ...,..x` x` '..)..!..~..~I +W &..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..{..]..^../..(.._..:..<..[..7Z n` [Z JX &..&..&..&..&..&..&..}..|..1..DQ 2..3..{..&..&..&..&..&..&..&..[Z 4..5..6..7..8..9..3..}..&..&..&..&..[Z JX 0..a..b..c..d..e..f..g..h..i..j..k..l..m..n..o..p..q..r..s..t..u..v..w..x..y..z..A..B..C..D..E..F..G..H..I..J..K..L..M..N..O..P..Q..R..S..T..U..V..W..X..Y..Z..`..9 . +..+.++.@+.#+.$+.[Z )Z n` JX [Z &..[Z N` %+.&+.n .*+.=+.[Z -+.o .;+.>+.,+.'+.)+.!+.AY ~+.{+.]+.^+./+.(+.zY &+.JX &..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..[Z &..JX _+.:+.<+.[+.}+.|+.1+.Q .h` 2+.3+.4+.5+.6+.h` &..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..&..*..7+.8+.9+.0+.a+.b+.c+.X .d+.e+.f+.g+.h+.i+.j+.k+.l+.m+.n+.o+.4W &..&..&..&..", +"A` @.,@.'@.)@.!@.~@.{@.]@.^@./@.(@._@.:@.<@.[@.}@.|@.1@.2@.3@.4@.5@.6@.W..7@.8@.9@.0@.a@.b@.c@.d@.e@.f@.g@.h@.i@.j@.k@.N` l@.m@.k@.6Z #.,#.'#.A` $.o@.,$.'$.)$.!$.o@.&$.~$.{$.]$.^$./$.($._$.:$.<$.&$.!Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z &$.[$.}$.|$.1$.2$.3$.4$.5$.6$.YY 7$.8$.9$.0$.a$.U@.!Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z !Z b$.Hx c$.d$.=W e$. Z f$.g$.h$.i$.j$.k$.l$.m$.n$.o$.p$.q$.r$.s$.t$.u$.!Z !Z !Z ", +"+W +W +W +W +W +W +W +W +W +W +W *..v$.w$.y; *- J= J= J= v- ~#.x$.y$.z$.A$._#._#.B$.C$.D$.E$.PN )#.+W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W P+.P+.k#.F$.D` G$.H$.I$.6#.7#.J$.K$.P+.P+.+W +W +W +W +W +W P+.g#.L$.M$.5H N$.O$.+W +W +W P+.P$.Q$.R$.S$.T$.U$.V$.W$.X$.V$.}#.P+.Y$.Z$.`$. %..%.+%.@%.#%.$%.%%.q#.q#.q#.&%.*%.=%.-%.;%.>%.q#.q#.q#.,%.'%.)%.!%.~%.{%.q#.q#.q#.q#.q#.q#.]%.^%./%.(%._%.:%.<%.[%.}%.|%.1%.2%.3%.4%.5%.6%.7%.8%.9%.0%.a%.b%.c%.d%.e%.f%.g%.h%.i%.j%.k%.l%.m%.n%.o%.p%.q%.r%.s%.p%.t%.u%.v%.w%.x%.P+.y%.z%.A%.B%.C%.D%.E%.w@.F@.F%.G%.H%.I%.J%.K%.L%.M%.A` j#.+W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W A` N` N%.O%.P%.Q%.R%.S%.T%.U%.V%.j#.k@.W%.X%.Y%.A` A` +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W +W *..Z%.`%. &..&.+&.@&.#&.$&.%&.2& &&.*&.=&.k` -&.;&.>&.,&.'&.)&.!&.YY +W +W +W ", +")#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.~&.7+.{&.D, f= *- J= J= J= ]&.{#.^&./&.(&.C$.C$._&.:&.<&.[&.$Q *..)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.}&.a#.|&.2#.1&.2&.3&.4&.5&.6&.7&.8&.}&.)#.)#.)#.)#.)#.)#.)#.}&.8&.9&.0&.a&.V$.b#.)#.[#.b&.c&.d&.e&.f&.}#.}&.g&.h&.i&.j&.k&.)#.l&.m&.n&.o&.p&.q&.r&.s&.t&.u&.q#.q#.q#.v&.w&.x&.y&.z&.A&.q#.q#.q#.B&.C&.D&.E&.F&.G&.q#.q#.q#.q#.q#.q#.H&.I&.J&.K&.L&.M&.N&.O&.P&.Q&.R&.S&.T&.U&.V&.W&.X&.Y&.Z&.`&. *..*.+*.@*.#*.$*.%*.&*.**.=*.-*.;*.>*.,*.'*.)*.)#.!*.~*.{*.]*.^*./*.(*._*.:*.<*.^*.[*.}*.|*.1*.2*.3*.4*.5*.6*.7*.8*.9*.0*.a*.b*.c*.d*.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.e*.f*.g*.h*.i*.j*.k*.l*.m*.n*.o*.p*.q*.r*.s*.t*.[#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.)#.u*.v*.~Z 1& w*.x*.y*.z*.A*.B*.C*.D*.E*.F*.G*.H*.I*.J*.K*.L*.Pz }S M*.[#.)#.)#.", +"*..*..*..*..*..*..*..*..*..*..*..N*.Hx -..Ro f= J= J= J= *- ~#.O*.P*.Q*.R*.:&.:&.S*.T*.U*.V*.@Q W*.*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..}&.X*.}&.Y*.Z*.m#.*..`*. =..=.ZX JT +=.]*.}&.*..*..*..*..*..]*.3&.@=.#=.$=.%=.&=.*=.==.-=.;=.U~ >=.,=.K+.K+.'=.)=.!=.~=.{=.]=.^=./=.(=._=.:=.<=.[=.}=.|=.1=.q#.q#.q#.2=.3=.4=.5=.6=.7=.q#.q#.q#.8=.9=.0=.a=.b=.c=.d=.e=.f=.g=.h=.i=.j=.k=.l=.m=.n=.o=.p=.q=.r=.s=.t=.u=.v=.w=.x=.y=.z=.A=.B=.C=.D=.E=.F=.G=.H=.I=.J=.H=.K=.L=.M=.N=.O=.P=.Q=.R=.S=.T=.U=.V=.W=.X=.Y=.Z=.`=. -..-.+-.@-.@-.#-.^*.Y=.$-.%-.&-.*-.=-.--.;-.>-.,-.'-.e*.)-.M*.*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..!-.~-.{-.]-.^-./-.(-._-.:-.<-.[-.}-.|-.1-.2-.e*.*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..+V 3-.4-.5-.+#.6-.@&.7-.8-.9-.0-.a-.b-.c-.d-.e-.M*.f-.g-.h-.i-.j-.W*.[#.*..", +"k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.*..*..'R l-.~~ f= *- *- *- *- m-.n-.o-.p-.q-.r-.r-.s-.p-.t-.[&.@Q *..k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.K+.'=.u-.2#.v-.w-.x-.y-.z-.A-.B-.C-.D-.]*.}&.k-.k-.k-.k-.}&.E-.F-.G-.H-.I-.J-.K-.L-.M-.N-.O-.P-.k#.}&.K+.Q-.R-.S-.'=.T-.U-.V-.W-.X-.Y-.p&.Z-.`-. ;..;.+;.q#.q#.q#.@;.u&.#;.$;.%;.&;.q#.q#.q#.*;.=;.-;.;;.>;.,;.';.);.!;.~;.{;.];.^;./;.(;._;.:;.<;.[;.};.|;.1;.2;.3;.4;.5;.6;.7;.8;.9;.0;.a;.b;.c;.d;.e;.f;.g;.h;.i;.j;.k;.$*.l;.m;.n;.o;.p;.q;.r;.s;.t;.u;.v;.w;.x;.y;.z;.A;.B;.C;.D;.E;.C;.&-.F;.G;.H;.I;.J;.K;.L;.M;.N;.b*.}&.X*.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.O;.P;.Q;.R;.S;.T;.U;.V;.)-.b*.W;.X;.Y;.Z;.`;. >.o` k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.k-.*..JX .>.Z& =- +>.@>.#>.z*.$>.%>.&>.*>.=>.->.;>.>>.[#.,>.JX '>.)>.CB [$.W*.[#.", +"*..*..*..*..*..*..*..*..*..*..b$.+W !>.~>.v- _, _, _, _, f= {>.]>.^>.p-./>./&./&.(>._>.:>.<>..V b$.*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..[>.*..}>.|>.1>.2>.*..x-.3>.4>.A-.B-.5>.6>.7>.[>.*..*..*..8>.9>.0>.a>.b>.c>.d>.e>.f>.g>.h>.i>.j>.k>.*..l>.m>.n>.o>.p>.q>.r>.s>.t>.u>.v>.w>.x>.y>.z>.A>.B>.q#.q#.q#.C>.D>.E>.F>.G>.H>.q#.q#.q#.I>.J>.K>.L>.q#.q#.q#.q#.q#.M>.N>.O>.P>.Q>.R>.S>.T>.U>.V>.W>.X>.Y>.Z>.`>. ,..,.+,.@,.#,.$,.%,.&,.*,.=,.-,.;,.>,.,,.',.a=.),.!,.~,.{,.],.^,./,.(,._,.:,.<,.[,.},.|,.1,.2,.3,.4,.5,.6,.4,.7,.4,.8,.G;.9,.0,.a,.b,.c,.d,.e,.f,.g,.h,.i,.*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..[>.j,.k,.l,.m,.n,.o,.p,.q,.r,.s,.)-.t,.u,.v,.w,.x,.y,.[>.*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..[>.*..[>.z,.3& A,.B,.C,.D,.E,.F,.G,.H,.I,.J,.K,.L,.M*.y,.M,. T,.U,.V,.W,.X,.W,.W,.Y,.Z,.`,.<>..V '.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.l>.3>..'.+'.@'.3>.l>.l>.#'.4>.A-.mW 5>.#'.$'.%'.u*.u*.l>.f&.&'.*'.='.-'.;'.>'.,'.''.)'.!'.~'.R,.b$.%'.{'.]'.^'./'.('._'.:'.<'.['.}'.|'.1'.z>.Z-.2'.3'.q#.q#.q#.4'.5'.6'.7'.8'.9'.q#.q#.q#.0'.a'.b'.c'.q#.q#.q#.q#.q#.q#.q#.d'.e'.f'.g'.h'.i'.j'.k'.l'.m'.n'.o'.p'.q'.r'.s'.t'.u'.v'.w'.x'.y'.z'.A'.B'.C'.D'.E'.F'.G'.H'.I'.J'.K'.L'.M'.N'.O'.P'.Q'.R'.S'.T'.U'.V'.W'.X'.Y'.Z'.`'.L . )..).8,.+).@).#).$).%).&).*).=).-).D%.;).`'.>).u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.>).j,.,).').)).!).~).{).]).^)./).y,.u*.()._).:).<).[).}).^-.>).u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.u*.b$.b$.+W |).2& 7% +>.@>.1).2).3).4).IS 5).6).7).8).9).0).a).b).c).d).e).f).g).", +"[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.h).v*.i).j).F> _, _, _, _, F> T,.k).l).m).n).m).m).o).p).q).<>..V b$.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.%'.>).x-.r).s).t).[>.%'.k>.#'.4>.A-.u).v).~=.l>.[>.[>.[>.k>.'=.w).x).y).z).A).k>.B).C).D).E).7>.%'.[>.F).G).H)._'.I).J).K).L).M).N).O).v>.P).Q).R).S).q#.q#.q#.q#.q#.q#.q#.q#.q#.q#.q#.q#.T).U).V).W).X).Y).Z).`). !.q#.q#.q#..!.+!.@!.#!.$!.%!.&!.*!.=!.-!.;!.>!.,!.'!.)!.!!.~!.{!.]!.^!./!.(!._!.:!..[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.b$.y!.z!.A!.B!.C!.D!.E!.F!.G!.,>.y,.H!.I!.J!.K!.L!.M!.N!.O!.R,.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.[>.h).v*.P!.T* 7% 6% Q!.R!.S!.T!.U!.V!.W!.X!.Y!.Z!.`!. ~.^-.^-..~.+~.@~.#~.$~.", +"$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.%~.*L &~.*~.F> f= f= f= f= w- =~.-~.;~.>~.,~.'~.'~.)~.!~.~~.{~.)Z N*.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.]~.^~./~.(~._~.{'.:~.$'.]~.<~.4>.A-.[~.}~.|~.8>.$'.$'.b$.:~.1~.2~.3~.4~.5~.<~.6~.7~.8~.{'.:~.9~.0~.a~.b~.c~.d~.e~.f~.g~.h~.i~.j~.k~.l~.m~.n~.o~.p~.q#.q#.q#.q~.r~.s~.t~.u~.v~.q#.q#.q#.w~.x~.y~.z~.A~.B~.C~.D~.E~.F~.G~.q#.H~.I~.J~.K~.L~.M~.N~.O~.P~.Q~.R~.S~.T~.U~.V~.W~.X~.Y~.Z~.`~. {..{.+{.@{.#{.${.%{.&{.*{.${.={.-{.;{.>{.,{.'{.){.!{.~{.{{.]{.^{./{.({._{.:{.<{.[{.}{.|{.1{.2{.1{.3{.4{.5{.6{.7{.8{.9{.0{.a{.b{.c{.d{.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.e{.f{.g{.h{.i{.j{.k{.l{.m{.n{.d{. '.o{.p{.q{.r{.s{.t{.u{.v{.w{.x{.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.%~.v*.y{.z{.5% =- A{.B{.#>.C{.D{.E{.F{.;8 G{.H{.I{.J{.K{.$'.L{.M{.N{.O{.P{.", +"N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.%~.*L Q{.F' w- f= f= f= f= [8 R{.S{.T{.U{.V{.W{.W{.X{.Y{.Z{.{~.)Z N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.x{.`{.,'. ]..].<{.N*.N*.N*.]~.+].@].A-.#].$].<~.]~.N*.N*.%].&].*].+].=].-].;].>].,].'].)].x{.!].~].{].]].^]./].(]._].:].<].[].}].|].1].2].3].4].5].q#.q#.q#.6].7].8].9].0].a].q#.q#.q#.b].c].d].e].f].g].h].i].j].k].l].m].n].o].p].q].r].s].t].u].v].w].x].y].z].A].B].C].D].E].F].G].H].I].J].K].L].M].N].O].P].Q].R].S].T].U].V].W].X].s~.Y].Z].`]. ^..^.+^.@^.#^.$^.%^.&^.*^.=^.-^.-^.;^.>^.,^.'^.)^.!^.~^.{^.]^.^^./^.(^.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*._^.:^.<^.[^.}^.|^.1^.2^.3^._^.o{.4^.5^.6^.().7^.8^.9^.0^.a^.b^.~&.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.c^.v$.Jj d^.7% 6% 6% Q!.R!.e^.f^.g^.h^.i^.j^.k^.l^.m^.n^.(^.%].b^.o^.i` p^.", +"$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.q^.r^.Q{.wu w- F> F> F> F> R* s^.S{.t^.u^.v^.w^.w^.x^.y^.z^.A^.[Z h).$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.$'.B^.C^.D^.E^.F^.)].B^.$'.$'.B^.G^.H^.I^.J^.K^.C^.B^.$'.x{.$'.:~.%].k>.L^.M^.N^.O^.P^.Q^.&].R^.S^.T^.U^.V^.W^.X^.Y^.Z^.`^. /../.+/.@/.|'.#/.$/.%/.q#.q#.q#.&/.*/.=/.-/.;/.>/.q#.q#.q#.,/.'/.)/.!/.~/.{/.]/.^/.//.(/._/.:/.(.,(.!* 5% =- =- '(.)(.1).!(.~(.{(.](.^(./(.((._(.:(.r{.0~.x{.h).i,.<(.", +"N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.c^.mP Q{./, R* w- F> F> F> I) [(.S{.}(.|(.1(.2(.2(.3(.4(.5(.6(.A` %~.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.7(.8(.9(.0(.a(.b(.7(.N*.N*.N*.c(.d(.e(.A-.#].f(.g(.h(.i(.j(.N*.c(.k(.l(.m(.n(.o(.p(.q(.r(.s(.t(.u(.v(.w(.x(.y(.z(.A(.B(.C(.D(.E(.F(.G(.H(.I(.J(.q#.q#.q#.K(.L(.M(.N(.O(.P(.q#.q#.q#.Q(.R(.S(.$,.T(.U(.V(.W(.X(.Y(.Z(.`(. _.._.+_.@_.#_.$_.%_.&_.*_.=_.-_.;_.>_.,_.'_.)_.!_.~_.{_.]_.^_./_.(_.__.:_.<_.[_.}_.|_.1_.2_.3_.4_.5_.6_.7_.8_.9_.0_.a_.b_.c_.d_.e_.f_.g_.h_.i_.7(.j_.k_.l_.m_.n_.o_.H/.p_.q_.r_.s_.t_.u_.v_.w{.h).N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.j_.w_.x_.y_.z_.A_.B_.C_.D_.n{.E_.F_.G_.H_.I_.N*.J_.K_.L_.M_.N_.O_.!].N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.N*.c^. M P_.z{.6% >% >% >% Q_.R_.S_.T_.|X U_.V_.W_.X_.Y_.Z_.W*.`_. :. :.`_..:.", +"%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.+:.mP @:.#:.R* w- w- w- w- Q* $:.%:.&:.*:.=:.-:.-:.;:.>:.,:.':.P+.q^.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.j(.):.!:.~:.{:.b(.c(.%~.%~.%~.j(.]:.e(.^:./:.(:._:.::.<:.c(.`_.j(.[:.}:.|:.1:.2:.3:.4:.5:.6:.7:.8:.9:.0:.a:.b:.c:.d:.e:.f:.g:.h:.i:.j:.k:.l:.q#.q#.q#.m:.n:.o:.p:.q:.r:.q#.q#.q#.s:.t:.u:.v:.w:.x:.y:.z:.A:.B:.C:.D:.E:.F:.G:.H:.I:.J:.K:.L:.M:.J:.N:.O:.P:.=_.Q:.R:.S:.T:.U:.V:.W:.X:.Y:.Z:.`:. <..<.+<.N].@<.#<.$<.%<.&<.*<.=<.-<.;<.><.,<.'<.)<.!<.~<.{<.]<.^<./<.(<._<.:<.<<.[<.m_.}<.|<.1<.2<.3<.4<.5<.6<.7<.8<.9<.7(.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.7(.0<.a<.b<.c<.d<.e<.f<.g<.h<.i<.j<.k<.l<.m<.%~.%~.7(.n<.o<.p<.q<.`'.r<.s<.`_.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.c^.JX ~Z 3& =- =- =- =- t<.u<.v<.w<.x<.n^.s<.n<.y<.z<.A<.B<.C<.n<.7(.7(.%~.", +"D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.+:.E<.@:.v- Q* R* w- w- w- s~ {J %:.F<.G<.H<.I<.I<.J<.K<.L<.M<.P+.q^.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.N<.O<.P<.Q<.UF q(.N<.D<.D<.D<.D<.j(.R<.e(.S<.T<.U<.V<.W<.)].j(.N<.N<.X<.Y<.Z<.`<. [..[.+[.@[.#[.$[.%[.&[.*[.=[.-[.;[.>[.,[.'[.)[.![.~[.{[.][.q#.q#.q#.^[./[.([._[.:[.<[.q#.q#.q#.[[.}[.|[.1[.q#.q#.q#.2[.3[.4[.5[.6[.7[.8[.9[.0[.a[.b[.c[.d[.e[.f[.g[.h[.i[.j[.k[.l[.m[.n[.o[.n[.p[.q[.r[.s[.t[.u[.v[.w[.x[.y[.z[.A[.B[.C[.D[.E[.F[.G[.H[.I[.J[.K[.$/.L[.M[.N[.O[.P[.Q[.R[.S[.T[.U[.V[.W[.X[.Y[.Z[.`[. }..}.+}.@}.#}.$}.s<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.J_.%}.&}.*}.=}.yz -}.;}.>}.,}.'}.)}.!}.~}.%~.D<.D<.{}.c(.]}.^}./}.(}.;).q^.N<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.D<.+:.A%._}.=- >% =- >% >% >% :}.<}.[}.}}.n!.|}.J_.{}.%'.1}.2}.3}.4}.J_.D<.N<.", +"%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.5}.6}.i).J= Q* R* R* R* R* s~ 7}.%:.8}.9}.0}.a}.a}.b}.c}.d}.e}.[#.c^.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.f}.g}.h}.~:.i}.j}.k}.%~.%~.%~.%~.f}.l}.m}.n}.o}.p}.q}.r}.s}.t}.f}.u}.v}.w}.x}.y}.z}.A}.B}.C}.D}.E}.F}.G}.H}.6:.I}.r<.J}.K}.L}.M}.N}.q#.q#.q#.q#.q#.q#.q#.O}.P}.q#.q#.q#.q#.q#.q#.q#.Q}.R}.S}.T}.U}.n].V}.W}.X}.Y}.#_.Z}.`}. |..|.+|.@|.#|.$|.+|.%|.&|.*|.b[.b[.=|.-|.;|.>|.,|.'|.)|.!|.~|.{|.]|.^|./|.(|._|.:|.<|.[|.}|.||.1|.2|.3|.4|.5|.6|.7|.8|.9|.0|.a|.b|.c|.d|.e|.f|.g|.h|.i|.j|.k|.l|.m|.n|.o|.p|.q|.r|.F%.s|.)J %~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.q^.t|.u|.v|.w|.x|.y|.z|.A|.B|.C|.D|.E|.F|.G|.t|.%~.%~.%~.%~.%~.H|.I|.J|.K|.L|.M|.t_.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.%~.c^.$'.N|.4& 2& >% >% 1& 1& t<.O|.P|.Q|.R|.n^.t_.)J S|.T|.U|.V|.W|.X|.)J q^.", +"c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.Y|.TV i).M, s~ Q* Q* Q* Q* S* Z|.%:.`|. 1..1.K<.K<.+1.@1.#1.$1.}&.+:.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.%1.&1.*1.=1.-1.;1.t}.c^.c^.c^.c^.%1.q^.>1.,1.'1.)1.!1.~1.{1.]1.%1.^1./1.(1._1.:1.<1.[1.}1.|1.11.21.31.41.51.61.71.81.91.01.a1.b1.c1.d1.e1.f1.g1.h1.i1.j1.k1.l1.m1.n1.o1.p1.q1.r1.s1.t1.u1.v1.w1.x1.y1.z1.A1.B1.C1.D1.E1.F1.G1.H1.I1.J1.K1.L1.M1.N1.O1.O1.P1.Q1.R1.S1.T1.U1.V1.W1.X1.Y1.Z1.`1. 2..2.+2.@2.#2.$2.%2.&2.*2.=2.-2.;2.>2.,2.'2.)2.!2.~2.{2.]2.^2./2.(2._2.:2.<2.[2.}2.|2.12.12.22.32.42.52.k}.62.72.82.92.a<.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.02.a2.b2.c2.d2.e2.f2.g2.h2.i2.j2.k2.l2.m2.n2.o2.p2.k}.c^.c^.c^.c^.c^.t_.q2.r2.s2.t2.u2.v2.02.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.c^.+:.q^.Y|.^, x- >% 1& 1& w2.=- x2.y2.z2.A2.B2.C2.t_.a<.D2.E2.F2.G2.H2.I2.t_.", +"q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.Y|.TV @:.*- J2.Q* Q* Q* Q* S* m-.%:.K2.L2.M2.c}.c}.N2.O2.P2.$1.}&.+:.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.t}.Q2.R2.S2.T2.U2.%1.q^.q^.q^.%1.%1.V2.W2.X2.Y2.Z2.`2. 3..3.+3.c^.@3.#3.$3.%3.&3.*3.=3.-3.;3.>3.,3.'3.)3.!3.~3.{3.]3.^3./3.(3._3.:3.<3.[3.}3.|3.13.23.33.43.53.63.73.83.93.03.a3.b3.c3.d3.e3.f3.g3.h3.i3.j3.k3.l3.m3.n3.o3.p3.q3.r3.M1.s3.t3.u3.v3.w3.x3.y3.z3.A3.B3.C3.D3.E3.F3.G3.H3.I3.J3.K3.L3.M3.N3.O3.P3.Q3.R3.S3.T3.U3.V3.W3.X3.Y3.Z3.`3. 4..4.+4.@4.#4.$4.%4.&4.*4.=4.-4.;4.>4.,4.Z[.'4.)4.!4.92.~4.{4.]4.t_.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.^4./4.(4._4.:4.<4.[4.}4.|4.14.24.34.44.54.64.74.M|.v2.q^.q^.q^.q^.q^.%1.02.84.94.04.a4.b4.v2.02.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.q^.+:.Y|.A%.c4.z{.=- >% >% >% =- d4.e4.f4.g4.h4.i4.f}.q^.a<.X|.j4.k4.l4.m4.n4.", +"+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.o4.nd i).p4.S* s~ s~ s~ s~ S= m-.q4.r4.s4.t4.u4.u4.v4.w4.x4.y4.W*.Y|.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.z4.A4.B4.C4.D4.E4.z4.+:.+:.+:.+:.F4.G4.H4.I4.J4.K4.L4.M4.N4.O4.P4.Q4.R4.S4.T4.U4.V4.W4.X4.Y4.Z4.`4. 5..5.+5.@5.#5.$5.%5.&5.*5.=5.-5.;5.>5.,5.'5.)5.!5.~5.{5.]5.^5./5.(5._5.:5.<5.[5.}5.|5.15.25.d[.35.45.55.65.75.85.95.05.a5.b5.r3.c5.d5.e5.f5.g5.h5.i5.j5.k5.l5.m5.n5.o5.p5.q5.r5.s5.t5.u5.v5.w5.x5.y5.z5.A5.B5.C5.D5.E5.F5.G5.H5.I5.J5.K5.L5.M5.#5.N5.O5.P5.Q5.R5.S5.T5.U5.V5.W5.X5.Y5.Z5.`5. 6..6.+6.@6.#6.$6.%6.P4.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.&6.*6.=6._#.-6.;6.>6.,6.'6.)6.!6.~6.{6.]6.^6./6.(6._6.:6.+:.+:.+:.+:.+:.P4.<6.[6.}6.|6.16.26.:6.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.+:.36.&..46.S= >% 1& 1& 1& >% x- VI 56.66.76.86.96.P4.+:.P4.X|.06.a6.b6.r<.", +"Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.o4.&..c6._, S= s~ s~ s~ s~ S= d6.e6.f6.g6.h6.i6.i6.j6.g6.k6.l6.%'.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.m6.F4.n6.o6.p6.4|.q6.z4.Y|.Y|.Y|.r6.F4.s6.t6.u6.v6.w6.x6.y6.z6.A6.B6.C6.D6.E6.F6.kZ G6.H6.I6.J6.K6.L6.M6.N6.O6.P6.Q6.*5.R6.S6.T6.U6.V6.W6.X6.Y6.Z6.`6. 7..7.+7.@7.#7.$7.%7.&7.*7.=7.-7.;7.>7.,7.'7.)7.!7.~7.j[.{7.]7.^7./7.(7._7.{7.:7.<7.[7.}7.|7.17.27.37.47.57.67.77.87.97.07.a7.b7.c7.d7.e7.f7.g7.h7.i7.`6.j7.k7.l7.m7.n7.o7.p7.q7.r7.s7.t7.u7.v7.w7.x7.y7.z7.A7.W5.B7.C7.D7.E7.F7.G7.H7.I7.J7.K7.L7.M7.N7.O7.P7.:6.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.>1.Q7.R7.S7.T7.U7.V7.W7.X7.Y7.Z7.`7. 8..8.+8.@8.#8.$8.%8.m6.Y|.Y|.Y|.m6.%8.&8.*8.=8.-8.m<.;8.>8.r6.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.,8.E<.'8.)8.>% 3& 3& 3& 1& 2& !8.~8.{8.]8.^8./8.%8.Y|.^1.Y|.0<.!W (8._8.", +"Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.o4.&..i).:8.S= S* S* S* S* && d6.<8.[8.}8.|8.18.18.28.38.48.58.%'.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.z4.q6.68.S2.d..n6.F4.Y|.Y|.Y|.Y|.r6.78.88.98.08.a8.b8.c8.d8.e8.f8.g8.h8.i8.j8.k8.l8.m8.n8.o8.p8.q8.r8.s8.t8.u8.v8.w8.x8.y8.z8.A8.B8.C8.D8.E8.F8.G8.H8.I8.J8.K8.L8.M8.N8.O8.P8.Q8.R8.S8.T8.U8.V8.O1.W8.X8.Y8.Z8.`8. 9.h[..9.+9.47.@9.#9.$9.%9.&9.*9.=9.-9.;9.l5.>9.,9.'9.)9.!9.~9.{9.]9.^9./9.(9._9.:9.<9.[9.}9.|9.19.29.39.49.59.69.79.89.99.09.a9.b9.c9.d9.e9.f9.&5.g9.h9.i9.j9.k9.l9.m9.n9.o9.p9.q9.r9.s9.t9.u9.:6.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.P4.v9.w9.x9.y9.z9.A9.W7.B9.C9.D9.E9.>1.>8.F9.G9.H9.k}.m6.z4.Y|.Y|.Y|.Y|.z4.5}.I9.J9.K9.L9.M9.N9.%8.r6.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.,8.O9.P9.Q9.6% >% >% >% >% 1& R9.S9.T9.U9.uo L .V9.P4.m6.P4.r9.`'.W9.X9.", +"Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.,8.A%.c6.Y9.&& S= S* S* S* Z9.`9. 0..0.+0.@0.#0.#0.$0.%0.&0.*0.x{.o4.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.Y|.=0.-0.;0.>0.,0.36.'0.Y|.Y|.Y|.Y|.Y|.=0.)0.F4.!0.~0.{0.]0.^0./0.(0._0.:0.<0.[0.}0.|0.10.20.30.40.50.60.70.80.90.00.a0.b0.c0.d0.J5.e0.f0.g0.h0.i0.j0.k0.l0.m0.n0.o0.p0.q0.r0.s0.t0.u0.v0.w0.x0.y0.z0.A0.B0.C0.t3.D0.E0.F0.17.G0.H0.I0.J0.K0.L0.M0.N0.O0.P0.Q0.R0.J:.S0.T0.U0.V0.W0.X0.Y0.Z0.`0. a..a.+a.@a.#a.$a.%a.&a.*a.=a.-a.;a.>a.,a.'a.)a.!a.~a.{a.]a.^a./a.(a._a.:a..&& && && && !* f= Aa.Ba.Ca.g4.^8.I2.Da.9a.Ea.Da.Fa.Ga.Ha.", +"36.36.36.36.36.36.36.36.36.36.,8.A%.c6.F> && S= S= S= S= !* Ia.e6.Ja.g6.Ka.g6.g6.La.g6.Ma.Na.x{.o4.36.36.36.36.36.36.36.36.36.36.36.36.36.36.36.36.36.36.36.36.36.36.36.36.36.36.36.36.36.36.36.36.36.36.36.36.36.36.36.36.36.'0.Oa.Pa.Qa.Ra.Sa.=0.'0.Ea.36.Ea.9a.Ea.Ta.Ua.Va.Wa.Xa.>1.Ya.Za.`a. b..b.+b.@b.#b._a.$b.%b.&b.*b.=b.-b.;b.>b.,b.'b.)b.!b.~b.{b.]b.^b./b.(b._b.:b.c.,c.'c.)c.!c.~c.{c.]c.^c./c.KX Y|.Ea.pa.(c._c./6.:c.oa..ic.e6.jc.g6.kc.lc.lc.mc.g6.nc.Na.x{.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.o4.=0.oc.pc.qc.rc.sc.tc.'0.o4.o4.ka.pa.d.,d.'d.)d.!d.~d.{d.]d.G0.#9.^d./d.%9.(d._d.h5.:d. _, _, _, _, M, R* %e.:~.&e.*e.=e.-e.;e.o4.'0.o4.ka.pa.>e.", +",e.,e.,e.,e.,e.,e.,e.,e.,e.,e.7c.'e.)e.w- !* && && && && T* !e.e6.~e.{e.]e.^e.^e./e.g6.(e._e.7(.,8.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.,e.:e.f.,f.'f.)f.!f.~f.{f.]f.^f./f.(f._f.:f.g.,g.'g.)g.!g.~g.{g.]g.^g./g.(g._g.:g.h.,h.'h.)h.[g.!h.~h.{h.]h.Dd.^h./h.(h._h.ff.Qf.,8.,8.,8.,8.,8.,e.:h..mh.~~ f= _, _, _, f= y; nh.o4.o4.,8.oh.ph.qh.rh.4a.ke.Td.0h.4e.,8.", +",8.,8.,8.,8.,8.,8.,8.,8.,8.,8.sh.'e.th.uh.T* !* !* !* !* x- vh.e6.wh.xh.yh.zh.zh.Ah.^e.Bh.Ch.N<.lh.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.Dh.Eh.Fh.T. Wa Gh.Hh.Ih.:e.,8.0h.Jh.,8.0h.=g.Kh.Lh.Mh.Nh.Oh.Ph.Qh.Rh.Sh.Th.Uh.ie.Vh.Wh.Xh.8f.Yh.9f.Zh.`h. i..i.+i.@i.#i.$i.%i.&i.*i.=i.-i.;i.>i.,i.'i.)i.!i.~i.{i.]i.^i./i.(i._i.:i.e.&j.*j.=j.-j.Jh.0h.,8.,8.,8.;j.>j.,j.'j.)j.!j.~j.{j.)0.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.,8.lh.,e.sh.]j.*~._, *- *- *- f= ^j./j.(j.sh.lh.uf.Mf._j.:j.k.,k.'k.)k.!k.~k.{k.]k.^k./k.(k._k.:k.:k.l.,l.'l.pk.)l.!l.~l.Fk.lh.{l.]l.^l./l.(l._l.:l.m.,m.'m.)m.!m.~m.{m.]m.pk.Lk.^m./m.cf.(m._m.:m.n.,n.'n.q#.q#.q#.)n.!n.~n.{n.]n.q#.q#.^n./n.(n._n.:n.j.sh.sh.sh.sh.]m.%o.&o.*o.{j.=o.-o.0h.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh. l.;o.>o./, *- *- J= *- *- f= ,o.'o.7e )o.sh.!o.~o.{o.]o.^o./o.(o._o.:o.p.,p.'p.q#.q#.)p.#f.!p.~p.{p.]p.^p./p.(p._p.:p.q.,q.,q.'q.)q.!q.9o.z4. l.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.0o.~q.{q.]q.^q./q.(q._q.:q.r.,r.'r.)r.!r.~r.{r.]r.^r./r.Am.sh.sh.Am.(r._r.:r.JE s.,s.'s.)s.!s.~s.{s.]s.^s./s.q#.q#.q#.(s._s.:s.t.Np.,t.'t.)t.!t.Cr.hr.>t.~t.{t.]t.^t./t.(t._t.hr.}j.}j.}j.}j.}j.}j.}j.}j.}j.}j.}j.}j.}j.}j.}j.}j.:t.7e u.,u.'u.)u.!u.~u.{u.]u.Yl.^u./u.(u._u.:u.% v..v.+v.@v.#v.N7.N7.$v.%v.&v.dt.'0.)o.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.Zu.*v.)o.=v.-v.;v.>v.,v.'v.)v.!v.~v.{v.]v.^v./v.(v._v.:v.w.,w.'w.)w.!w.~w.{w.]w.^w./w.(w._w.:w.% vw.ww.xw.yw.zw.Aw.Aw.Bw.@v.Cw.dt.'0.Dw.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.*v.)o.fj.Ew.Fw.Gw.Hw.Iw.Jw.Kw.Lw.Mw.Nw.Ow.Pw.Qw.Rw.Sw.Tw.Uw.Vw.Ww.Xw.Yw.Zw.`w. x..x.+x.@x.#x.$x.%x.&x.*x.=x.-x.T. ;x.q#.q#.q#.>x.,x.qs.'x.)x.!x.~x.{x.]x.^x./x.(x._x.:x.y.,y.Aj.9w.cu.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.nm.)o.)o.,e.'y.<) *- v- v- v- *- ^j.)y.sh.)o.)o.nm.nm.nm.nm.nm.nm.nm.!y.du.'^.~y.", +"tr.tr.tr.tr.tr.tr.tr.tr.tr.tr.:t.lh.{y.5% ]y.1& 1& 1& 1& ~6 ^y./y.(y._y.:y.z.,z.'z.)z.!z.~z.{z.]z.^z./z.(z._z.:z.% >% ~6 Sz.Tz.Uz.Vz.Wz.Xz.Xz.Yz._y.Zz.1y.4e.:t.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.`z. A..A.+A.@A.#A.$A.%A.ky.&A.*A.=A.-A.;A.>A.,A.'A.)A.ny.!A.~A.{A.py.]A.^A.5z./A.9v.9v.6z.(A._A.$x.:A.B.,B.'B.)B.4z.4z.!B.~B.{B.]B.^B./B.(B._B.:B.8z.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.)o.:t.sh.% >% >% =- 3B.4B.5B.C.,C.'C.)C.!C.~C.{C.]C.^C./C.(C._C.:C.D.,D.TC.'D.yB.'D.uy.)D.!D.~D.{D.]D.^D./D.(D._D.q#.q#.q#.:D.E.,E.'E.-E.yB.)E.!E.~E.{E.]E.^E./E.(E.`D.PD.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.JC._E.:E.c 6% 6% 6% 6% |E.1E.2E.QC.3E.4E.4E.5E.6E.7E.8E.0j.Nz.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.}E.aB.9E.0E.aE.bE.cE.dE.eE.fE.gE.hE.iE.jE.kE.lE.mE.nE.oE.pE.qE.rE.iB.sE.tE.aB.uy.uE.yB.yB.vE.wE.xE.yE.zE.AE.BE.CE.DE.q#.q#.q#.EE.FE.GE.HE.IE.JE.KE.LE.ME.NE.q#.q#.q#.gv.OE.PE.q#.q#.QE.RE.SE.TE.q#.q#.q#.UE.VE.WE.XE.YE.ZE.`E. F.q#.q#..F.+F.@F.#F.$F.%F.&F.*F.=F.-F.;F.>F.,F.'F.)F.!F.~F.{F.]F.^F./F.(F._F.:F.% 5% 6% 6% 6% h$.DF.EF.6E.FF.GF.GF.HF.IF.JF.SC.*l.YA.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.KF.LF.MF.NF.OF.PF.QF.0E.RF.SF.TF.UF.VF.WF.XF.YF.ZF.`F. G..G.+G.@G.-E.TC.#G.Nz.Nz.$G.%G.&G.*G.=G.-G.;G.>G.q#.q#.q#.q#.q#.q#.q#.,G.'G.)G.!G.~G.{G.]G.^G./G.(G._G.:G.XE.H.,H.'H.)H.-E.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.!H.~H.{H.v] *- v- v- /, v- v- ~~ ]H.Jd.^H.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.Nz.", +"Lf.Lf.Lf.Lf.Lf.Lf.Lf.Lf.Lf.Lf.Lf.JC.JC.)o./H.]y.7% 5% 5% 5% (H._H.:H.IF.I.,I.'I.)I.!I.~I.{I.]I.~I.^I./I.(I._I.:I.J.,J.'J.)J.!J.~J.{J.]J.^J./J.(J._J.:J.K.,K.'K.,H.)K.!K.~K.$G.$G.$G.$G.$G.$G.$G.$G.$G.BI.`u.{K.gn J= F' /, /, /, y; Q* CF.)o.JC.$G.$G.$G.$G.$G.$G.$G.$G.$G.$G.$G.$G.", +"^H.^H.^H.^H.^H.^H.^H.^H.^H.^H.^H.^H.BI.]K.^K.GI.8% 7% 7% 7% /K.(K._K.qm.:K.L.,L.'L.)L.!L.~L.{L.]L.^L./L.nK.nK.~K.(L._L.:L.M.,M.'M.)M.!M.~M.{M.]M.^M./M.(M._M.:M.N.,N.'N.pw.pw.pw.pw.pw.pw.pw.[E.[E.)o.)N./' v- /, /, /, v- /' )N.)o.[E.[E.pw.pw.pw.pw.pw.pw.pw.pw.pw.pw.pw.pw.", +"^H.^H.^H.^H.^H.^H.^H.^H.^H.^H.^H.^H.!H.}E.CF.|= 5% 8% 8% 8% +Z !N.~N.O.,O.DL.^H.^H.bN.^H. M.'O.)O.!O.~O.{O.]O.^O.+H./O.(O._O.:O.P.,P.'P.)P.!P.~P.{P.]P.^P./P.(P._P.:P.K.RP.SP.TP.UP.VP.WP. M.[E.[E.[E.[E.[E.[E.[E.[E.[E.[E.[E.[E.[E.[E.[E.[E.[E.[E.!H.XP.YP.rF.ZP.,N.RP.`P. Q..Q.PI.DO.+Q.@Q.#Q.$Q.%Q..N.[E.[E.[E.[E.[E.[E.BI.:t.HC.f= y; /, /, /, /, J= gn &Q.ja.qO.[E.[E.[E.[E.[E.[E.[E.[E.[E.[E.[E.[E.[E.", +"BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.qO.qL.Q.,Q.,Q.'Q.yO.)Q.!Q.3y.sO.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.~Q.{Q.]Q.{Q.^Q./Q.(Q._Q.:Q.R.,R.'R.+Q.)R.!R.~R.{R.]R.^R./R.(R._R.:R.S.,S.'S.)S.!S.~S.{S.]S.^S./S.(S._S.GQ.:S.T.,T.,T.'T.BR.)T.!Q.yB.$T.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.|R.!T.~T.BI.BI.{T.sO.]T.^T./T.(T.OR._T.NR.:T.U.,U.'U.)U.!U.~U.OS.LS.~T.{U.]U.^U./U.]h BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.BI.dR.eR.(U.gR._U.{T.:U.V.,V.'V.)V.!V.HU.$T.jU.~V.{V.]V.HU.$T.$T.$T.$T.$T.$T.HU.|U.^V./V.(V._V.:V.W.,W.'W.)W.!W.~W.-W.{W.]W.^W./W.(W._W.:W.X.,X.'X.)X.!X.~X.{X.]X.^X./X.(X._X.:X.Y.,Y.'Y.)Y.!Y.~Y.~Y.{Y.]Y.^Y./Y.ZJ.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.(Y._Y.:Y.;X.Z.,Z.'Z.)Z.FY.!Z.~Z.{Z.]Z.^Z.%Z.&Y.PW.-Y./Z.k( y; `.,`._Y.hZ.]X.ZV.ZV.ZV.ZV.ZV.ZV.ZV.ZV.ZV.ZV.ZV.ZV.ZV.ZV.ZV.ZV.ZV.ZV.ZV.ZV.ZV.ZV.ZV.ZV.ZV.ZV.ZV.ZV.]X.VX.YX.'`.)`.!`.wS.~`.{`.]`.hZ.]X.(Y.DO.^`./`.ZT.rX.(`.Ad._`.:`.F' ~~ ~~ +, +' +) +! +~ +{ +] +^ +/ +( +FY.#T.(Y.PW._ +: +< +[ +#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.#T.XY.} +| +1 +2 +3 +4 +5 +6 +7 +XY.yU.8 +9 +0 +a +b +yU.#T.c +Ro y; .+,.+'.+).+!.+~.+{.+].+^.+/.+(.+_.+:.+<.+[.+}.+|.+1.+2.+#T.sL.p`.< +3.+4.+( +p`.sL.sL.sL.sL.sL.sL.sL.sL.sL.sL.sL.sL.sL.sL.sL.sL.sL.sL.sL.sL.sL.sL.sL.sL.sL.sL.sL.sL.sL.sL.sL.[ +o +&Y.5.+6.+} +7.+8.+9.+0.+a.+[ +PW.b.+c.+d.+e.+f.+g.+D, h.+~~ ~~ |.V.+W.+Q +[`.Q +X.+Y.+Z.+U +Q +[`.Q +`.+ ++.+++++Q +z`.@++#++$++%++W +&++*++W +P`.o +=++-++;++>++,++'++(Y.Q`.)++!++~++{++]++^++/++(++_++:++<++[++{.+].+}++|++1++2++3++4++5++6++7++8++9++P`.p`.0++a++b++o +o +P`.[`.[`.[`.[`.[`.[`.[`.[`.[`.[`.[`.[`.[`.[`.[`.[`.[`.[`.[`.[`.[`.[`.[`.[`.[`.[`.[`.[`.[`.[`.[`.[`.a.+c++d++1 +e++f++g++h++i++j++P`.a.+b +k++l++m++n++o++P= y; <) <) ~~ ~~ *Y.:`.p++q++j.+[`.[`.[`.[`.[`.[`.[`.[`.[`.[`.[`.[`.[`.[`.[`.[`.", +"r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++j.+(Z.s++t++{* u++v++w++x++y++z++z++A++B++C++D++8Q.(`.r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++E++F++G++H++I++J++K++L++M++L++N++O++P++Q++R++S++T++T++N++U++V++W++X++V +Y++Z++H++PW.r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++`++ @+.@++@+@@+#@+Z++r++Z++$@+%@+Z.+$@+Z++r++H++&@+*@+=@+-@+Z++H++;@+>@+,@+;@+'@+)@+!@+~@+{@+J +]@+^@+/@+(@+_@+:@+{@+` +<@+[@+}@+|@+1@+2@+3@+4@+5@+6@+7@+8@+9@+0@+a@+b@+c@+$C d@+e@+f@+g@+h@+i@+G++G++j@+k@+l@+m@+n@+G++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++H++o@+p`.p@+q@+r@+s@+t@+u@+v@+` +PW.H++w@+x@+y@+3K.z@+A@+#+J +H++(`.H++Y++,#+'#+)#+!#+~#+{#+]#+M@+^#+/#+(#+_#+:#+<#+Z++H++[#+}#+|#+1#+2#+3#+4#+5#+6#+7#+8#+9#+9@+0#+a#+b#+$C c#+d#+e#+T. f#+g#+h#+i#+G++j#+k#+l#+m#+N++o@+e +e +e +e +e +e +e +e +e +e +e +e +e +e +e +e +e +e +e +e +e +e +e +e +e +e +e +e +e +e +e +e +e +e +^#+<@+n#+o#+p#+q#+r#+s#+[ +o@+H++N++t#+u#+v#+w#+x#+y#+z#+<) ~~ ~~ ~~ /' A#+B#+#T.(`.e +e +e +e +e +e +e +e +e +e +e +e +e +e +e +e +", +"r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++C#+r++D#+E#+F#+G#+H#+I#+J#+K#+L#+L#+M#+= N#+O#+fQ.C#+r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++o@+^#+P#+Q#+P#+R#+S#+S#+T#+Y@+U#+V#+W#+W@+X#+X@+P#+E++Y@+Z++Y#+Z#+`#+ $+.$+Z++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++Z++r++e ++$+@$+#$+$$+r++%$+&$+*$+=$+-$+$$+r++r++Z++;$+>$+,$+Y++Z++'$+)$+!$+~$+{$+]$+^$+/$+'$+Z++.$+($+_$+:$+<$+[$+M@+Z++o@+}$+|$+1$+2$+3$+4$+5$+6$+7$+8$+9$+0$+0@+a$+b$+c$+d$+e$+f$+g$+h$+i$+j$+0#+k$+l$+m$+n$+H++H++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++H++o$+a.+p@+p$+q$+r$+s$+t$+[#+i#+r++i#+u$+v$+w$+x$+y$+<) <) <) <) i.+:`.z$+CV.D#+r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++r++", +"(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.D#+!H.$e.4& A$+B$+C$+D$+E$+F$+F$+G$+D$+H$+I$+HU.j.+(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.J$+K$+L$+M$+N$+O$+P$+Q$+R$+S$+T$+C#+U$+V$+W$+X$+X$+Y$+Z$+X$+`$+ %+.%++%+@%+#%+$%+%%+(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.&%+-@+*%+=%+-%+;%+C#+%%+o@+>%+,%+'%+&$+&%+(`.%%+)%+!%+~%+{%+]%+^%+%%+/%+(%+_%+:%+<%+[%+%%+(`.C#+}%+|%+1%+2%+3%+4%+5%+&%+6%+7%+8%+9%+0%+a%+b%+c%+d%+e%+f%+g%+h%+i%+j%+k%+l%+m%+n%+o%+p%+q%+r%+s%+t%+u%+v%+w%+x%+M$+(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`.(`. %+y%+z%+A%+B%+C%+D%+E%+F%+6%+(`.M$+G%+H%+I%+J%+K%+L%+(, (, (, &+,&+'&+)&+&%+!&+~&+{&+]&+^&+&%+j.+%%+C#+%e./&+(&+_&+:&+j.+<&+[&+}&+|&+1&+Y +2&+3&+<&+4&+5&+6&+7&+8&+9&+0&+&%+6%+a&+b&+c&+d&+e&+f&+g&+h&+i&+j&+k&+l&+m&+n&+o&+p&+q&+r&+s&+t&+u&+v&+^%+w&+x&+y&+z&+L$+A&+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+%%+A&+^#+B&+C&+r@+D&+E&+F&+G&+%%+D#+]h H&+I&+J&+K&+L&+M&+<) <) /' N&+O&+ZV.D#+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+", +")&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+D#+C#+P&+Vk.D@+Q&+R&+S&+T&+U&+U&+V&+W&+X&+Y&+&R.D#+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+&%+Z&+%&+%&+`&+ *+`$+.*++*+@*+@*+#*+$*+W$+%*+&*+$&+**+=*+-*+;*+>*+-&+,*+&%+&%+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+C#+'*+)*+!*+~*+)*+:&+)&+&%+{*+]*+^*+/*+&%+&%+(*+:&+_*+:*+<*+[*+&%+)&+:&+}*+|*+1*+2*+3*+4*+5*+6*+7#+7*+8*+9*+0*+a*+(`.A&+&%+b*+c*+d*+e*+f*+g*+h*+i*+j*+k*+l*+m*+n*+o*+p*+q*+r*+s*+t*+u*+v*+&&+w*+x*+y*+z*+%%+&%+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+<&+A*+B*+C*+D*+E*+F*+G*+H*+<&+I*+J*+K*+L*+M*+N*+O*+L%+(, ~~ :`.P*+Q*+P&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+)&+", +"j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+R*+M%+KC.>Y.S*+T*+U*+V*+W*+W*+X*+U*+Y*+Z*+rX.}`.j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+`*+ =+.=++=+@=+#&+#=+$=+%=+&=+*=+==+-=+;=+>=+,=+'=+$=+)=+!=+~=+{=+]=+^=+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+D#+/=+(=+_=+:=+<=+[=+}=+j.+/=+|=+1=+2=+3=+D#+}*+4=+/=+`*+5=+6=+7=+D#+]=+[*+8=+9=+0=+a=+b=+c=+d=+e=+f=+g=+9*+h=+i=+j=+k=+(*+^=+l=+m=+n=+o=+p=+q=+r=+s=+t=+u=+v=+w=+x=+y=+z=+A=+B=+C=+D=+E=+F=+G=+H=+I=+Z&+`*+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+`*+J=+P$+B&+K=+e.+L=+M=+J$+J=+R*+(Z.N=+O=+P=+Q=+R=+S=+T=+~~ )~ U=+CV.V=+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+j.+", +"}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.P&+r++W=+X=+Y=+Z=+5( `=+ -+ -+.-+5( +-+@-+^X.P&+}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.J=+J=+J=+]=+ =+#-+$-+%-+ =+&-+*-+=-+--+;-+>-+,-+'-+)-+!-+~-+{-+]-+^-+,-+]=+}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.]=+/-+(-+_-+:-+<-+[-+}-+}`.|-+1-+2-+FJ 3-+4-+5-+6-+D#+7-+8-+9-+0-+a-+/=+^=+b-+c-+d-+o@+e-+/=+f-+g-+h-+i-+j-+:%+k-+l-+m-+d=+n-+o-+p-+q-+r-+s-+t-+u-+v-+w-+x-+y-+z-+A-+B-+C-+D-+E-+F-+G-+H-+I-+J-+K-+L-+M-+J=+}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.#-+N-+c&+O-+P-+Q-+R-+S-+T-+Q`.W=+U-+V-+W-+X-+Y-+Z-+`-+/' (, ;+ZV.R*+}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.", +"}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.D#+I*+.;++;+@;+#;+$;+%;+tL tL &;+$;+*;+I$+P`.P&+}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`./=+@=+=;+-;+;;+>;+h&++=+h&+,;++=+>-+';+;;+)-+);+!-+,-+!;+~;+{-+{;+/=+^-+/=+J=+}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.];+^;+/;+(;+_;+:;+}`.}`.|-+<;+[;+};+|;+1;+2;+3;+4;+5;+6;+7;+8;+a-+P&+/=+9;+0;+a;+b;+c;+d;+e;+f;+g;+h;+i;+j;+k;+l;+m;+n;+o;+p;+q;+r;+s;+t;+u;+v;+w;+n;+x;+y;+z;+A;+B;+C;+D;+E;+F;+G;+H;+I;+J;+K;+#-+L;+}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.]=+L;+6%+B&+M;+N;+O;+P;+Q;+vE.R;+zF L%+S;+T;+U;+V;+W;+X;+Y;+ZV.P&+P&+}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.}`.", +"P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+I*+[`.Z;+`;+ >+.>++>+@>+@>+#>+$>+%>+&>+fQ.V=+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+*>+*>+=>+->+;>+>>+,>+'>+)>+)>+->+)>+!>+~>+{>+P&+]>+^>+/>+(>+b-+*>+_>+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+:>+<>+[>+}>+|>+1>+P&+P&+P&+_>+2>+3>+4>+5>+6>+7>+8>+9>+0>+a>+*>+P&+P&+P&+_>+m-+b>+c>+d>+e>+f>+g>+h>+i>+_*+j>+k>+l>+m>+n>+o>+p>+q>+r>+s>+t>+u>+v>+w>+x>+y>+z>+A>+B>+C>+D>+E>+F>+G>+H>+I>+J>+K>+L>+_>+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+;>+M>+N>+O>+P>+Q>+R>+S>+qH.T>+zF U>+V>+W>+X>+Y>+Z>+`>+ ,+f.+.,+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+P&+", +"I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+EY.+,+@,+#,+$,+%,+%,+&,+*,+=,+-,+ZG.;,+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+>,+,,+>,+,,+',+),+!,+',+~,+S>+S>+S>+!,+!,+{,+',+],+^,+/,+(,+1>+,,+*>+>,+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+_,+:,+<,+[,+},+|,+_,+I*+I*+I*+1>+I*+1,+2,+3,+4,+5,+6,+7,+R*+8,+9,+0,+,,+I*+a,+b,+c,+d,+e,+f,+g,+h,+i,+j,+k,+l,+m,+n,+o,+p,+q,+r,+s,+t,+u,+v,+w,+x,+y,+z,+A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+F,+,,+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+,,+>,+#-+B&+N,+O,+P,+Q,+R,+S,+D! /' y#+T,+U,+V,+W,+X,+Y,+Z,+;,+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+", +"I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+;,+`,+ '+.'++'+@'+#'+#'+$'+%'+&'+*'+='+&%+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+*>+F,+-'+;'+>'+)>+,'+''+)'+',+~>+>'+-'+!'+~'+{'+^>+]'+^'+),+/'+F,+*>+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+('+_'+:'+<'+['+}'+1>+,,+I*+I*+R*+,,+a,+1>+|'+1'+2'+3'+4'+5'+6'+7'+8'+L>+*>+,,+9'+0'+yY.a'+b'+c'+d'+e'+a,+_>+,,+f'+g'+h'+i'+j'+F,+`*+k'+l'+m'+n'+o'+p'+q'+r'+x=+s'+t'+x=+u'+v'+w'+x'+y'+z'+A'+B'+),+,,+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+>,+F,+C'+N>+A%+D'+E'+F'+G'+H'+/' D, I'+J'+K'+L'+M'+N'+I*+P&+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+", +"I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+;,+O'+P'+Q'+R'+S'+T'+T'+U'+V'+W'+X'+Y'+tZ.Z'+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+`'+ )+.)++)+@)+ )+#)+$)+ )+%)+&)+*)+`'+=)+-)+;)+>)+.)+,)+')+))+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+!)+~)+{)+])+^)+/)+E,+E,+I*+I*+I*+I*+I*+()+_)+:)+<)+[)+})+|)+1)+2)+3)+4)+5)+')+6)+7)+8)+}X.9)+0)+a)+b)+c)+()+d)+e)+f)+g)+h)+4)+()+`'+i)+j)+k)+l)+m)+n)+o)+p)+q)+r)+s)+D>+t)+u)+v)+w)+x)+y)+z)+A)+B)+()+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+))+o)+;>+C)+D)+E)+F)+G)+H)+(< k( k( I)+J)+K)+L)+M)+N)++)+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+I*+", +"V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+O)+P)+Q)+R)+S)+T)+T)+U)+R'+V)+W)+X)+Y)+I*+;,+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+))+')+')+')+')+()++)+Z)+Z)++)+`)+ !++)+.!++!+})+@!+')+()+')+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+V=+()+#!+$!+%!+&!+/)+()+V=+V=+V=+V=+V=+V=+')+5)+*!+=!+-!+;!+>!+,!+'!+)!+!!+~!+{!+_)+]!+^!+/!+(!+_!+:!+~+,~+'~+)~+!~+~~+{~+]~+^~+*!+/~+(~+_~+:~+n-+<~+[~+}~+|~+1~+2~+3~+4~+5~+6~+7~+8~+9~+0~+_,+a~+b~+c~+q!+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+()+o)+,-+d~+e~+f~+g~+h~+i~+Vq D, j~+k~+l~+m~+n~+o~+p~+.)+o)+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+", +"q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+{!+r~+s~+t~+u~+v~+v~+w~+R)+x~+y~+_s z~+/-+Z'+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+A~+A~+B~+C~+D~+E~+F~+G~+H~+I~+J~+K~+L~+A~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+M~+N~+O~+P~+Q~+q~+q~+q~+q~+q~+q~+q~+q~+R~+S~+T~+U~+V~+W~+X~+Y~+Z~+`~+ {+.{++{+@{+#{+${+%{+&{+_e.*{+={+-'+-{+;{+>{+,{+'{+){+!{+~{+{{+]{+A~+^{+/{+({+Q;+_{+:{+<{+[{+}{+|{+1{+2{+3{+4{+V=+5{+6{+7{+8{+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+9{+0{+a{+b{+c{+d{+e{+f{+g{+k( k( (< h{+i{+j{+k{+ =+l{+^{+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+q~+", +";,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+Z'+J~+r~+m{+n{+o{+p{+p{+j{.q{+r{+y~+s{+t{+u{+D#+Z'+.,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+^{+B~+A~+v{+B~+K~+w{+x{+y{+z{+A{+B{+R~+L~+A~+B~+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+q~+6U.C{+D{+E{+F{+q~+q~+;,+;,+;,+;,+;,+A~+A~+y4.G{+H{+I{+J{+*!+K{+R~+L{+M{+N{+O{+P{+Q{+R{+S{+T{+9{+9{+9{+U{+V{+W{+X{+Y{+Z{+`{+ ]+.]++]+9{+B~+l{+@]+#]+9{+x{+x{+x{+x{+$]+$]+%]+&]+*]+=]+-]+;]+>]+V=+B~+A~+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+^{+^{+,]+i#+']+)]+!]+~]+{]+Rl k3 !~ /' ]]+^]+/]+(]+_]+:]+x{+l{+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+;,+", +"Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+<]+r~+[]+}]+|]+1]+1]+2]+1]+3]+4]+5]+0p 6]+7]+8]+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+l{+Z'+R~+9]+0]+a]+T. b]+c]+l{+8{+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+8{+d]+e]+f]+g]+h]+i]+Z'+Z'+Z'+Z'+Z'+Z'+j]+8{+k]+l]+m]+n]+o]+B)+p]+Z'+q]+r]+s]+t]+~!+<]+u]+v]+w]+x]+y]+8{+R~+z]+A]+B]+C]+D]+;S E]+F]+R~+j]+Z'+Z'+w{+8{+Z'+Z'+Z'+Z'+Z'+Z'+Z'+R~+G]+H]+I]+J]+K]+L]+M]+={+8{+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+8]+zZ.N]+O]+P]+Q]+R]+S]+T]+!i D, #{ U]+V]+W]+X]+Y]+Z]+`]+A~+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+Z'+", +" ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+.^++^+@^+#^+$^+%^+%^+&^+n{+*^+=^+-^+;^+2% >^+E,+,^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+'^+ ^+)^+!^+~^+{^+]^+^^+/^+(^+'^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+_^+:^+<^+[^+}^+|^+1^+'^+ ^+ ^+ ^+ ^+ ^+)^+2^+3^+4^+5^+6^+B~+ ^+'^+ ^+)^+7^+8^+9^+'^+'^+0^+a^+b^+c^+d^+9j.)^+7^+e^+f^+g^+h^+i^+j^+k^+l^+'^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+'^+m^+n^+o^+p^+q^+r^+s^+t^+u^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+Z'+v^+^X.w^+X;+x^+y^+z^+A^+B^+g{+C^+yr D^+YR.E^+F^+G^+H^+I^+J^+)^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+", +"j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+,^+.^++^+K^+L^+M^+N^+N^+O^+N^+P^+Q^+R^+-^+S^+BF.T^+v^+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+'^+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+2^+U^+V^+W^+X^+Y^+u^+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+2^+Z^+`^+ /+./++/+@/+_^+j]+j]+j]+j]+j]+j]+,]+_^+#/+$/+%/+&/+*/+2^+j]+'^+,]+u^+!^+,]+=/+-/+;/+T. >/+,/+'/+)/+!/+~/+{/+]/+^/+//+(/+_/+=/+'^+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+j]+'^+2^+:/+(+u^+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+", +"B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+,(+'(+)(+!(+~(+L^+L^+{(+L^+](+^(+/(+-^+_* ((+_(+/-+:(+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+<(+<(+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+[(+<(+[(+}(+|(+1(+B#+<(+[(+B#+B#+B#+B#+B#+B#+B#+B#+2(+3(+, +4(+5(+<(+6(+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+8]+7(+8(+9(+0(+a(+b(+[(+B#+B#+B#+B#+B#+B#+B#+B#+b(+c(+d(+e(+,^+[(+<(+B#+B#+B#+B#+B#+[(+<(+[(+f(+t^+g(+h(+i(+j(+k(+XW.l(+m(+n(+o(+p(+b(+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+q(+r(+s(+t(+u(+v(+w(+x(+v^+<(+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+,^+y(+tZ.z(+yr D, g{+A(+B(+C(+D(+E(+F(+G(+M!+H(+,^+[(+2(+I(+J(+K(+L(+M(+N(+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+B#+", +"8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+v^+O(+P(+Q(+R(+S(+j/+j/+T(+j/+U(+V(+W(+f% @^ X(+Y(+q~+2/+v^+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+Z(+`(+`(+`(+ _+<(+8]+8]+8]+<(+b(+b(+b(+._+._+8]++_+@_+#_+$_+%_+Z(+b(+8]+8]+8]+8]+8]+8]+8]+8]+b(+&_+*_+=_+g(+b(+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+-_+B#+;_+>_+,_+'_+-_+8]+8]+8]+8]+8]+8]+8]+8]+8]+b(+)_+!_+~_+{_+]_+b(+8]+8]+8]+8]+8]+8]+8]+b(+^_+q(+b(+q(+Z(+/_+<(+(_+__+:_+<_+[_+}_+._+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+b(+|_+1_+=]+2_+3_+4_+5_+6_+b(+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+2/+8]+7_+[8 P= k( k3 7f ~J 8_+9_+0_+a_+b_+:&+7_+8]+8]+<(+M(+c_+d_+e_+f_+2(+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+8]+", +"v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+2/+O(+P(+g_+h_+i_+!(+!(+j_+!(+k_+l_+m_+_* _* )* f% n_+o_+2/+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+Z(+`(+p_+q_+r_+s_+b(+._+._+b(+v^+t_+u_+v_+w_+x_+y_+z_+FJ A_+B_+C_+D_+E_+2/+v^+v^+v^+v^+v^+v^+2/+Z(+F_+G_+o!+H_+q(+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+b(+I_+J_+9(+nT.K_+L_+v^+v^+v^+v^+v^+v^+v^+v^+v^+2/+b(+M_+N_+O_+P_+._+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+2/+q(+Q_+R_+S_+T_+U_+V_+W_+b(+2/+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+b(+Z(+p/+X_+Y_+Z_+`_+ :+|_+q(+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+.:++:+@:+pd D, D! D! Rl X,+#:+$:+%:+&:+*:+=:+v^+v^+v^+v^+-:+;:+>:+,:+':+):+2(+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+v^+", +"H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+!:+~:+{:+$[.]:+^:+^:+/:+R(+(:+_:+::+/(+)* :* /* <:+];+[:+2/+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+&(+}:+|:+1:+2:+3:+4:+5:+6:+7:+8:+&(+9:+0:+a:+b:+c:+d:+e:+f:+g:+h:+i:+j:+k:+l:+H(+H(+H(+H(+H(+H(+l:+m:+n:+o:+p:+q:+r:+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+2/+s:+t:+u:+v:+w:+k:+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+r:+x:+y:+z:+v^+&(+l:+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+&(+l:+A:+=:+B:+C:+D:+2/+E:+l:+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+l:+F:+G:+H:+I:+J:+K:+L:+M:+F:+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+7_+j]+N:+F' E' !~ !~ !~ !~ H) z#+O:+P:+Q:+R:+H(+l:+H(+H(+H(+l:+S:+T:+d/+U:+V:+=:+l:+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+H(+", +"k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+7_+W:+~:+X:+Y:+Z:+`:+`:+ <+h_+.<++<+@<+)* }& }& }& :* #<+3)+7_+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+}:+$<+%<+&<+'!+*<+=<+-<+;<+><+,<+'<+)<+!<+~<+{<+]<+^<+/<+(<+_<+:<+<<+[<+}<+7_+k:+k:+k:+k:+k:+k:+r:+|<+1<+2<+3<+m:+r:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+:(+4<+5<+6<+7<+8<+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+r:+m:+9<+0<+a<+b<+c<+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+c<+d<+e<+f<+g<+m:+r:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+}:+h<+i<+j<+k<+l<+m<+3(+}:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+2/+n<+%(+o<+pd D, D! !~ D! D! Rl X,+p<+q<+r<+s<+t<+r:+k:+k:+k:+k:+=:+u<+v<+w<+x<+y<+=:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+k:+", +"7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+!:+~:+z<+A<+B<+C<+C<+D<+$[.E<+F<+G<+}& :* :* e& H<+Y(+2/+H(+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+I<+J<+K<+L<+M<+N<+O<+P<+Q<+R<+S<+T<+U<+V<+W<+X<+Y<+Z<+`<+ [+.[++[+@[+#[+$[+c<+H(+7_+7_+7_+7_+7_+r:+%[+&[+*[+=[+&(+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+r:+:(+-[+;[+v:+7<+8<+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+r:+>[+,[+'[+x:+c<+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+}:+)[+![+~[+{[+b<+c<+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+}:+][+^[+/[+([+_[+:[+<[+r:+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+.:+E,+[[+}[+D! !~ !~ D! D! So k( u] |[+1[+2[+3[+4[+F:+7_+7_+7_+7_+l:+5[+6[+7[+8[+9[+7_+H(+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+", +"[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+0[+a[+b[+c[+d[+e[+e[+f[+Y:+g[+h[+G<+::+:* e& e& 5$ i[+j[+o_+n<+7_+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+k[+l[+m[+n[+o[+p[+q[+r[+s[+t[+u[+v[+w[+x[+y[+z[+A[+A[+B[+C[+D[+E[+F[+G[+H[+I[+z[+J[+[:+[:+[:+[:+[:+J[+K[+L[+M[+N[+J[+k[+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+k[+=[+O[+P[+Q[+R[+S[+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+l[+T[+U[+z:+7_+V[+J[+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+J[+W[+X[+~[+Y[+Z[+l[+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+J[+`[+ }+.}++}+@}+#}+$}+%}+J[+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+7_+&}+)&+*}+=}+D, D! D! D! !~ D! #_ -}+;}+st.>}+,}+'}+V[+k[+[:+[:+[:+V[+)}+!}+~}+{}+]}+^}+)}+V[+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+[:+", +"7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+/}+(}+_}+:}+<}+[}+[}+}}+A<+|}+1}+2}+:* e& F* F* F* 5$ 3}+4}+j]+5}+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+V[+J[+6}+7}+8}+9}+0}+a}+b}+c}+d}+5(+e}+A[+f}+6}+=[+J[+J[+=[+l[+J[+g}+h}+i}+j}+k}+l}+.:+=[+7_+7_+7_+7_+J[+m}+n}+o}+K[+J[+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+=[+=[+p}+q}+r}+s}+S[+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+J[+t}+u}+v}+w}+x}+J[+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+J[+y}+z}+A}+B}+Z[+l[+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+J[+V[+F:+C}+D}+E}+F}+G}+H}+J[+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+n<+1>+I}+P= !~ !~ !~ D! D! D! k( h{+a/+o_+J}+K}+L}+M}+N}+)}+7_+7_+7_+7_+k[+O}+P}+Q}+R}+S}+T}+k[+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+7_+", +".:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+U}+a[+V}+T. W}+X}+X}+Y}+c[+Z}+1}+`}+e& F* F* 5$ 5$ V* F* |+n<+7_+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+l[+V[+f}+.|++|+@|+#|+$|+%|+&|+}_+*|+l[+l[+J[+.:+.:+.:+.:+.:+.:+.:+l[+=|+-|+;|+>|+,|+'|+l[+.:+.:+.:+=|+D[+)|+!|+~|+{|+l[+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+]|+^|+/|+(|+l[+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+g}+_|+:|+<|+l[+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+V[+I<+[|+}|+||+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+=|+1|+2|+3|+4|+K:+5|+6|+=|+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+n<+q~+Y;+yr k( !~ !~ D! !~ !~ k( u] 7|+d=+8|+9|+0|+a|+b|+c|+.:+.:+.:+.:+.:+d|+e|+f|+g|+h|+e|+i|+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+", +"n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+j|+k|+l|+T. m|+n|+n|+o|+:}+p|+q|+`}+F* 5$ 5$ 5$ V* V* Y& Ig KC.r|+&}+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+5}+s|+t|+u|+v|+w|+x|+y|+z|+A|+B|+C|+s|+s|+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+s|+n<+t}+D|+E|+F|+G|+s|+H|+*|+I|+J|+K|+L|+M|+T[+N|+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+O|+P|+Q|+XB.R|+O|+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+S|+T|+U|+z:+.:+t|+s|+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+s|+N[+V|+W|+X|+Y|+s|+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+N|+Z|+`|+ 1+.1++1+@1+#1+N|+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+$1+/-+%1+=}+!~ H) D! D! !~ D! D, =}+&1+];+*1+n<+2/+=1+-1+;1+>1+s|+s|+n<+n<+n<+,1+n<+l:+'1+k{+)1+!1+,1+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+", +".:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+O|+~1+k|+{1+T. ]1+^1+^1+/1+T. (1+_1++l 5$ 5$ V* V* i% i% Y& g% :1+<1+r|+&}+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+O|+.:+s|+t|+e}+[1+}1+|1+11+21+31+41+C|+N|+s|+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+s|+51+r:+61+71+81+91+01+a1+b1+c1+d1+e1+f1+g1+I|+s|+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+s|+h1+i1+j1+k1+l1+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+s|+m1+n1+o1+p1+q1+s|+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+S|+K[+r1+s1+t1+N[+s|+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+u1+v1+w1+x1+y1+z1+A1+B1+s|+O|+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+.:+O|+n<+n<+7_+C1+u] !~ H) H) D! D! !~ !~ D! D1+q~+E1+F1+G1+H1+I1+J1+K1+L1+O|+s|+.:+.:+O|+d|+M1+N1+g|+O1+P1+d|+O|+.:+.:+.:+.:+.:+.:+.:+.:+.:+", +"n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+j|+Q1+R1+T. S1+rb rb 4H Uc T1+U1+V1+|n i% V* i% i% Y& Y& g% Y& |+W1+O|+X1+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+S|+t|+u|+Y1+Z1+`1+ 2+.2+{|++2+@2+H|+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+S|+#2+$2+%2+&2+*2+=2+-2+;2+>2+,2+'2+)2+m1+S|+X1+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+!2+~2+{2+]2+^2+/2+(2+!2+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+X1+m}+_|+_2+T|+!2+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+H|+:2+<2+[2+}2+:2+H|+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+S|+|2+12+22+32+42+52+O|+n<+X1+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+n<+62+72+82+}q k( H) D! D! H) H) k( }q 92+72+62+n<+X1+02+a2+b2+c2+%,+d2+e2+f2+n<+n<+n<+n<+g2+h2+i2+j2+k2+l2+s|+n<+n<+n<+n<+n<+n<+n<+n<+n<+", +"&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+m2+n2+o2+T. p2+|e.|e.q2+rb r2+s2+s|+-% 5$ Y& Y& Y& g% g% <* )% t2+P9.2/+E1+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+g2+u2+v2+w2+x2+y2+z2+A2+0K B2+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+@2+C2+D2+E2+F2+G2+H2+I2+l[+J2+K2+L2+M2+g2+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+E1+B2+~2+N2+O2+P2+Q2+R2+S2+E1+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+B2+T2+U2+V2+n<+u2+g2+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+g2+W2+X2+~[+Y2+T2+B2+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+g2+&}+Z2+`2+ 3+.3++3+@3+#3+g2+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+&}+E1+.:+$3+%3+EC 1g D! H) H) D! D! #{ i.+&3+7_+E1+g2+*3+=3+-3+;3+>3+,3+'3+)3+!3+&}+&}+&}+&}+~3+{3+]3+^3+/3+(3+~3+&}+&}+&}+&}+&}+&}+&}+&}+&}+", +"X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+_3+n2+:3+Uc <3+[3+[3+}3+;S |3+13+23+33+5$ h% g% g% g% <* <* )% %& O, 43+L_+53+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+B2+u2+63+73+83+93+03+A2+a3+b3+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+c3+d3+e3+f3+g3+h3+i3+j3+k3+{|+l3+X1+g2+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+m3+n3+o3+p3+q3+r3+s3+m3+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+B2+63+t3+u3+v3+63+B2+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+g2+w3+x3+y3+z3+A3+B2+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+B3+C3+D3+E3+F3+K:+G3+H3+B2+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+X1+I3+J3+K3+&a k( H) D! H) D! H) k( &a K3+72+W1+X1+g2+B2+|2+L3+M3+N3+O3+P3+Q3+R3+X1+X1+X1+X1+X1+E1+S3+T3+U3+V3+W3+g2+X1+X1+X1+X1+X1+X1+X1+X1+", +"X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+c3+Y3+Z3+hk `3+q}.q}. 4+^V .4++4+l[+L_+@4+#4+p* <* <* )% )% %& $4+%4+.& &4+O|+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+g2+*4+=4+-4+;4+>4+,4+'4+m3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+B2+)4+!4+~4+{4+]4+^4+c3+X3+/4+(4+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+m3+_4+:4+<4+[4+}4+Y|+|4+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+)4+14+24+34+44+E1+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+E1+B2+54+64+g2+E1+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+/4+74+84+94+04+a4+b4+c4+/4+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+62+k:+&3+3| E' D! D! H) H) H) !~ )~ d4+I3+X1+X3+X3+X3+B3+e4+f4+g4+h4+i4+j4+k4+l4+X3+X3+X3+X3+X3+m4+n4+o4+p4+q4+r4+B3+X3+X3+X3+X3+X3+X3+X3+X3+", +"$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+s4+t4+u4+;S v4+w4+w4+x4+2# y4+z4+J[+53+53+A4+B4+)% )% )% %& %& -- _; ^b P9..:+53+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+k3+k3+C4+D4+E4+F4+G4+H4+I4+J4+53+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+K4+k3+63+1H.L4+M4+k3+K4+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+k3+N4+O4+P4+Q4+J4+K4+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+J4+R4+S4+T4+U4+V4+k3+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+53+k3+W4+X4+Y4+Z4+*4+k3+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+`4+ 5+.5++5+@5+#5+$5+%5+&5+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+$1+53+W1+o_+*5+pd k( H) H) H) D! H) }[+#: 82+1>+=5+E1+$1+$1+K4+`4+-5+;5+>5+,5+'5+)5+!5+~5+$1+$1+$1+$1+$1+`4+{5+]5+^5+/5+(5+~5+$1+$1+$1+$1+$1+$1+$1+", +"X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+c3+_5+:5+<5+[5+}5+}5+|5+15+25+35+c<+I3+S[+&3+<* )% %& %& -- -- _; _; r* %4+45+8<+W1+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+J4+J4+55+65+75+85+95+05+a5+J4+J4+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+J4+J4+b5+c5+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+d5+e5+f5+g5+|4+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+h5+i5+j5+T. k5+l5+m5+c5+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+n5+o5+p5+q5+r5+s5+J4+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+J4+t5+u5+v5+w5+x5+y5+z5+b5+k3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+X3+A5+B5+o<+C5+k( H) H) D! H) H) !~ yr D5+L_+W1+53+X3+X3+X3+X3+b5+&5+E5+F5+G5+H5+I5+J5+&5+X3+X3+X3+X3+X3+k3+K5+L5+M5+N5+{3+`4+X3+X3+X3+X3+X3+X3+X3+", +"53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+62+h5+O5+P5+Q5+R5+S5+S5+T5+U5+V5+13+l[+W5+W1+8<+X5+B4+u- -- -- _; _; y- !% I; @* Y5+X1+W1+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+62+J4+a5+Z5+`5+ 6+.6++6+@6+J4+62+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+62+62+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+62+62+#6+$6+%6+&6+J4+53+53+53+53+53+53+53+53+53+53+53+53+53+62+*6+=6+-6+;6+>6+,6+'6+J4+62+53+53+53+53+53+53+53+53+53+53+53+c5+)6+!6+~6+{6+]6+c5+53+53+53+53+53+53+53+53+53+53+53+53+53+62+62+^6+/6+(6+_6+:6+u5+<6+62+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+53+62+53+&4+B5+[6+yr !~ D! H) H) H) D! D! 1g )~ }6+r|+=5+53+53+53+53+53+53+53+W5+|6+16+26+36+M}+46+`4+53+53+53+53+53+56+66+76+86+96+06+`4+53+53+53+53+53+53+", +"W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+a6+b6+c6+FJ d6+e6+e6+f6+g6+h6+i6+l[+I3+W1+W1+E1+Kc <* _; _; y- y- !% !% W* j6+k6+X3+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W5+l6+m6+n6+o6+p6+q6+r6+s6+62+W5+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+62+t6+u6+%6+v6+w6+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+x6+y6+z6+A6+B6+C6+55+D6+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+l6+E6+F6+G6+H6+)6+l6+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+D6+I6+J6+K6+L6+M6+N6+O6+l6+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+W1+62+&4+3)+}6+:`.E' D! H) D! D! H) H) k( =}+P6+o_+&4+W1+W1+W1+W1+W1+W1+W1+W1+W1+56+Q6+R6+S6+T6+g1+U6+W5+W1+W1+W1+W1+W5+V6+W6+X6+Y6+Z6+W1+W5+W1+W1+W1+W1+W1+", +"w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+`6+ 7+.7+!1.+7+@7+@7+#7+$7+%7+&7+l1+I3+w6+I3+S2+*7+y- _; y- y- !% !% W* W* X& j6+=7+-7+I3+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+l6+l6+;7+>7+,7+'7+)7+!7+~7+{7+l6+62+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+]7+u6+f5+^7+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+l6+;5+/7+(7+_7+:7+<7+[7+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+l6+}7+|7+17+27+37+l6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+a6+47+57+94+67+77+87+97+a6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+w6+62+A5+8<+07+a7+P= !~ H) D! H) H) D! D! H) H) b7+=[+A5+w6+w6+w6+w6+w6+w6+w6+w6+w6+l6+l6+W3+c7+d7+e7+f7+*6+w6+w6+w6+w6+w6+|6+g7+h7+i7+j7+k7+56+w6+w6+w6+w6+w6+", +"I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+l7+m7+n7+o7+p7+q7+q7+r7+s7+t7+u7+S|+=5+I3+W1+=5+O|+v7+%4+!% !% W* W* @* @* X& X& :; w7+X3+=5+W1+I3+I3+I3+I3+I3+I3+I3+I3+I3+W1+I3+l6+;7+x7+y7+z7+A7+B7+C7+D7+I3+W1+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+E7+u6+f5+v6+l6+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+W1+I3+F7+G7+H7+I7+J7+x6+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+W1+D7+K7+L7+M7+F7+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+D6+gU.N7+O7+P7+Q7+R7+97+x6+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+W1+A5+X1+S7+T7+zF }[+H) D! H) H) D! H) k( }q U7+V7+W7+W1+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+X7+Y7+Z7+`7+ 8+.8++8+D6+I3+I3+I3+I3+|6+@8+#8+$8+%8+&8+*8+=8+I3+I3+I3+I3+", +"=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+-8+;8+>8+,8+'8+)8+)8+!8+~8+{8+]8+!2+A5+=5+=5+=5+A5+X3+^8+/8+1% W* @* @* X& X& [= (8+k6+I3+I3+A5+=5+=5+=5+=5+=5+=5+=5+=5+=5+_8+_8+:8+<8+[8+}8+|8+18+28+F7+_8+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+38+48+u6+58+68+38+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+78+-8+88+98+08+a8+b8+_8+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+_8+c8+d8+e8+f8+g8+_8+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+_8+h8+i8+j8+k8+0I l8+m8+_8+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+&4+W1+X3+n8+yr k( H) D! H) H) D! H) #_ &a &1+-_+&4+A5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+=5+o8+p8+(5+q8+r8+s8+t8+A5+o8+=5+=5+=5+=5+u8+v8+w8+x8+y8+z8+f7+_8+78+=5+=5+", +"I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+A8+B8+C8+D8+E8+A6+A6+F8+G8+H8+]8+!2+A5+I3+I3+I3+A5+w6+I8+[= !% @* @* X& X& :; j% [& (8+J8+S2+A5+I3+I3+I3+I3+I3+I3+I3+I3+_8+_8+K8+L8+M8+N8+O8+P8+Q8+s6+R8+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+38+38+48+S8+58+T8+38+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+_8+g8+U8+V8+W8+X8+R8+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+Y8+Z8+`8+ 9+.9++9+Y8+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+38+_8+gU.@9+#9+$9+%9+&9+h8+_8+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+A5+A5+L_+*9+u[ k( H) D! H) H) D! H) k( #: X/+I3+62+A5+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+I3+=8+=9+-9+;9+>9+,9+'9+)9+I3+I3+I3+I3+o8+!9+~9+{9+]9+^9+/9+(9+p8+I3+I3+", +"A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+_9+:9+<9+)8+[9+}9+}9+|9+19+29+39+B2+W7+A5+A5+A5+A5+W7+X3+43+I; X& X& :; :; j% j% [& H; [& 49+62+&4+A5+A5+A5+A5+A5+A5+A5+_8+59+69+79+89+99+09+a9+b9+c9+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+d9+e9+f9+g9+R8+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+s6+h9+i9+j9+c9+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+c9+k9+l9+m9+n9+Z8+c9+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+c9+o9+p9+q9+r9+s9+t9+u.+c9+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+I8+r|+u9+&a k( H) D! H) H) D! H) }[+zF v9+w9+X1+x9+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+y9+z9+A9+B9+C9+D9+E9+y9+A5+A5+A5+F9+Y7+G9+H9+I9+J9+K9+L9+M9+p8+A5+", +"W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+28+N9+O9+A6+P9+S^ S^ Q9+]( R9+S9+m3+W7+W7+W7+W7+W7+W7+W7+|4+^K..8 j% :; j% j% [& H; }> K> T9+W7+A5+W7+W7+W7+W7+W7+W7+U9+k9+V9+W9+X9+Y9+Z9+`9+ 0+U9+.0+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7++0+@0+e9+f9+#0++0+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+U9+$0+%0+&0+*0+=0+-0+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+-0+;0+>0+,0+'0+)0+-0+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+!0+~0+{0+]0+^0+77+/0+(0+!0+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+A5+S7+V7+_0+pd !~ D! H) D! H) D! H) !~ #{ C^+:0+O|+<0+A5+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+[0+}0+|0+10+20+30+'9+40+W7+W7+W7+50+60+70+k +80+90+00+a0+b0+50+W7+", +"A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5++0+c0+N9+d0+e0+f0+g0+g0+h0+i0+j0+39+m3+W7+A5+A5+A5+A5+A5+W7+A5+W7+o* X& m* [& [& H; H; }> u* K> k0+62+W7+W7+A5+A5+A5+l0+m0+n0+o0+p0+q0+r0+s0+ 0+t0+.0++0+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5++0++0+u0+S8+v0+#0++0+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+-0+w0+x0+y0+z0+A0+t0+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+-0+.0+c0+B0+C0+c9+.0+-0+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+-0+D0+E0+F0+G0+H0+-~+I0+l0+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5++0+A5+<0+J0+K0+:] H) D! H) D! H) D! H) 1g E' H) L0+8<+<0+A5++0+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+A5+y9+-0+*8+M0+N0+O0+P0+Q0+[0+A5+A5+-0+R0+S0+T0+U0+V0+W0+X0+Y0+y9++0+", +"W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+28+Z0+`0+ a+.a+#s #s +a+#s @a+#a+n5+I8+W7+W7+W7+W7+W7+W7+I8+38+$a+:; [& [& H; H; }> u* u* f& %a+&a+38+W7+*a+W7+=a+-a+;a+>a+,a+'a+54+)a+!a+=a+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+*a+W7+I8+~a+{a+]a+*a+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+*a+;0+^a+/a+(a+_a+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+W7+*a+:a+ H; }> u* u* f& f& a$ va+wa+38+W7+xa+ya+za+Aa+Ba+Ca+Da+Ea+(a+Fa+|a+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+_a+Ga+Ha+Ia+Ja+Ka+x9+_a+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+La+Ma+Na+Oa+Pa+Qa+_a+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+La+(a+Ra+Sa+Ta+Ua+_a+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+Va+Wa+Xa+Ya+Za+`a+!0+|a+_a+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+W7+<0+I3+ b+.b+)~ #_ D! D! H) D! D! D! k( }q +b+J0+aa+W7+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+x9+@b+I8+R0+#b+$b+%b+&b+*b+=b+x9+x9+|a+Va+-b+;b+>b+,b+'b+)b+!b+50+", +"*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+a9+~b+{b+]b+^b+/b+/b+(b+/b+_b+:b+n5+Ka+*a+*a+*a+*a+*a+*a+*a+I8+I8++0+ Q& 52 wa+28+}b+za+|b+1b+2b+3b+4b+(a+5b+6b+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+7b+8b+Ia+9b+Ka+6b+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+La+0b+ab+bb+cb+db+=a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+=a+eb+fb+gb+hb+eb+=a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+Fa+ib+jb+O7+kb+lb+mb+nb+_a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+Ka+W7+38+ob+h{+D, D! !~ !~ D! H) H) #_ &a pb+L_+qb+I8+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+*a+=b+rb+ca+sb+tb+ub+vb+wb+_a+*a+*a+6b+Va+xb+yb+zb+Ab+Bb+Cb+Db+", +"Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Eb+Fb+Gb+Hb+Ib+Jb+Jb+Kb+Lb+Mb+Nb+[7+<0+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+<0++0+&3+}> u* f& f& Y= Y= [> [> Q& E* Ob+Pb+Qb+Rb+Sb+Tb+Ub+Vb+Wb+Xb+I8+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Yb+Zb+`b+9b+ c+I8+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+0b+.c++c+@c+#c+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Xb+$c+%c+&c+*c+=c+Xb+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Xb+-c+;c+>c+,c+'c+)c+!c+Xb+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+<0+<0+7a+~c+yr D, D! !~ D! D! !~ D! k( pd {c+w6+I8+<0+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+#c+]c+^c+/c+(c+_c+:c+ Y= Y= Y= [> Q& Q& B* dc+ec+fc+gc+hc+ic+jc+kc+lc+mc+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+#c+nc+Zb+oc+9b+<0+3c+#c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+ c+pc+qc+rc+sc+tc+#c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+#c+uc+vc+wc+xc+Yb+<0+#c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+#c+!c+yc+zc+Ac+Bc+Cc+Dc+Ec+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+<0+aa+8<+Fc+Tt #_ D! !~ D! D! !~ D! D, zF U]+Gc+A5+aa+I8+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+3c+Hc+Ic+Jc+Kc+Lc+Mc+Nc+Oc+Hc+3c+3c+3c+3c+Pc+Qc+Rc+Sc+1c+Tc+", +"Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Eb+Uc+Vc+v0 Wc+Xc+Xc+Yc+Zc+`c+ d+.d+qb+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+qb++d+@d+#d+[> [> Q& Q& B* dc+$d+%d+&d+*d+=d+-d+;d+>d+,d+'d+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+)d+3c+!d+`b+9b+qb+'d+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+ c+~d+{d+rc+]d+^d+/d+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+Ka+ c+'d+(d+_d+:d+e+,e+'e+)e+!e+~e+{e+]e+^e+Ka+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+qb+/e+xd+(e+_e+ad+aa+zd+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+:e+f+,f+=f+qb+ad+te+te+te+te+te+te+te+te+te+te+te+te+te+te+te+te+te+te+te+te+te+te+te+te+te+te+:e+'f+)f+!f+= ~f+{f+]f+^f+Oc+6e+te+:e+te+te+'f+zd+ad+/f+", +"ad+ad+ad+ad+ad+ad+ad+ad+ad+ad+ad+ad+ad+ad+ad+ad+ad+ad+ad+ad+(f+_f+:f+xe+g+%g+Gc+Gc+Gc+Gc+Gc+Gc+Gc+Gc+Gc+%g+,g+'g+)g+!g+&g+Rf+%g+Gc+Gc+Gc+Gc+Gc+Gc+Gc+Gc+Gc+Gc+Gc+Gc+~g+{g+]g+^g+/g+(g+_g+:g+h+,h+'h+)h+!h+~h+{h+>h+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+]h+^h+/h+(h+_h+:h+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+]h+h+Oh+Ph+Qh+Rh+Sh+]h+=f+=f+=f+=f+=f+=f+=f+=f+=f+Nh+Th+Uh+Vh+Wh+Sh+Nh+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+:h+Xh+Yh+Zh+`h+ i+.i++i+@i+]h+=f+=f+6d+=f+#i+-f+$i+N&+EC (, D, k( k( !~ !~ k( !~ k( #{ i.+%i+*a+#i+6d+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+&i+*i+=i+-i+;i+>i+,i+&i+]h+=f+=f+=f+=f+", +"6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+=f+Tg+'i+)i+<'+!i+~i+~i+{i+]i+^i+/i+(i+=f+6d+6d+6d+6d+kh+:h+]h+_i+:i+h+6d+6d+6d+6d+6d+6d+6d+6d+6d+]h+ni+oi+pi+qi+ri+si+:h+]h+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+th+ti+ui+vi+Gg+wi+xi+yi+th+=f+6d+#i+ad+0d+zi+L{ !~ (, k( D, D, k( k( !~ !~ /' E' H) Ai+9h+Bi+6d+=f+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+6d+:h+kh+Ci+Di+Ei+Fi+Gi+Hi+Ii+ch+:h+6d+6d+6d+", +"=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+si+Ji+Ki+]i+Li+Mi+Mi+Ni+Oi+Pi+Qi+Ri+#i+=f+=f+=f+=f+=f+Si+Ti+Ui+Vi+Wi+Xi+Yi+Zi+`i+ j+.j++j+@j+#j+$j+de+Bh+%j+&j+`f+q$ S& S& M& $& $& n* G* z* *j+wr.Bh+de+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+Si+=j+-j+;j+>j+,j+'j+)j+ug+$j+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+=f+Si+Sh+!j+~j+Bg+{j+4i+=f+=f+=f+=f+=f+=f+=f+=f+]j+^j+/j+(j+_j+:j+k+,k+{j+de+de+", +"4i+4i+4i+4i+4i+4i+4i+4i+4i+4i+4i+4i+4i+4i+4i+4i+4i+4i+4i+#i+'k+)k+!k+mj+~k+{k+{k+]k+^k+/k+oj+Ri+(k+4i+4i+4i+Si+Ti+Vi+_k+T. :k+:k+:k+T. l+,l+'l+=l+)l+L{ (, <) /' (, (, /' D, D, D, 3| L{ k( !l+0d+#i+5j+#i+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+(k+~l+{l+]l+^l+/l+(l+_l+:l+(k+(k+", +"8h+8h+8h+8h+8h+8h+8h+8h+8h+8h+8h+8h+8h+8h+8h+8h+8h+8h+8h+8h+m+,m+Wk+Bi+Bi+Bi+Bi+Bi+Bi+Bi+'m+)m+!m+~m+{m+]m+^m+/m+Wk+Bi+Bi+Bi+Bi+Bi+Bi+Bi+Bi+Bi+Bi+Bi+Bi+Bi+Bi+Bi+Mk+(m+_m+:m+n+,n+'n+)n+!n+~n+{n+]n+^n+/n+2g+tm+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+5j+Sl+Sl+(n+#m+m% y* m% 7! m% T= T= h{ T= h{ l- *j+*j+_n+5j+*m+5j+5j+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+xm+ym+:n+Am+Bm+xm+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+)m++(, (, <) ~~ :`.dn+en+fn+tm+=n+Sl+5j+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+Sl+gn+hn+in+jn+kn+ln+mn+nn+", +"=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+on+pn+qn+rn+sn+&n+&n+tn+un+vn+wn+Dj+=n+=n+=n+gn+xn+yn+zn+An+Bn+Cn+Dn+En+Fn+Gn+Hn+In+Jn+2g+5m+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+Kn+fl+Ln+y* 7! m% T= T= T= T= h{ h{ z* O& G* Mn+Nn+On+Sl+Sl+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+Cm+Pn+Qn+Rn+Sn+Bm+Pn+Kn+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+Cm+Tn+Un+;m+Vn+o+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+.k+=n+,o+'o+)o+!o+~o+", +"5j+5j+5j+5j+5j+5j+5j+5j+5j+5j+5j+5j+5j+5j+5j+5j+5j+5j+5j+bh+{o+]o+^o+/o+(o+un+un+_o+:o++o+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+tm+tm+%p+wm+2s 2k+T= W= T= h{ h{ z* G* G* G* n* n* n* Ok+$& 43+=n+=n+tm+tm+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+%p+&p+*p+=p+-p+;p+%p+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+=n+>p+,p+'p+)p+!p+~p+>p+=n+=n+=n+=n+=n+=n+=n+}o+eo+{p+]p+^p+/p+,p+>p+=n+=n+=n+=n+=n+=n+tm+>o+5m+(p+Rl+_p+{c+Ro o+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+%p+%p+d +T= #m+h{ l- z* G* G* G* G* n* n* $& Z= M& wp+GB xp+Kn+tm+5m+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+5m+%p+yp+zp+Ap+Bp+Cp+%p+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+tm+eo+Dp+Ep+Fp+Gp+Hp+eo+5m+tm+tm+tm+tm+tm+tm+tm+Ip+,p+Jp+Kp+Lp+,p+eo+5m+tm+5m+tm+5m+>o+5m+Mp+Sl+en+Np+Uk.,o./, y; q+,q+'q+)q+!q+~q+{q+]q+]q+^q+/q+(q+(k+6j+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+6j+6j+5m+Bo+um+Cj+Cj+z* z* G* n* n* $& $& $& $& M& M& wp+q$ _q+5m+%p+6j+6j+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+5m+:q+o+sq+tq+uq+vq+wq+xq+yq+zq+Ro+Aq+Bq+Cq+Cq+Bq+Aq+4i+>o+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+6j+|q+|q+Dq+l- *j+G* <& G* n* n* $& M& M& S& S& S& q$ `f+Eq+Fq+%p+5m+>o+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+Gq+o+(p+=n+Wq+ah+Uk.~~ Xq+v- /, F' y; y; y; Yq+Zq+`q+ r+.r++r+@r+#r+$r+%r+5m+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+|q+&r+gq+*r+=r+", +"6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+>o+-r+;r+>r+,r+'r+qq+qq+)r+!r+~r+{r+*m+]r+^r+/r+(r+_r+:r+o+>o+>o+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+>o+1q+:q+o+>o+6j+6j+6j+6j+6j+6j+6j+1q+9r+0r+ar+br+cr+gp+(p+=n+dr+X/+^j.o+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+6j+>o+Om+", +"Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+mr+nr+or+pr+qr+!r+!r+rr+T0.sr+tr+Kn+%r+ur+vr+wr+wq+xr+yr+kr+zr+Ar+3m+Vq+Vq+Vq+Vq+3m+>o+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+>o+Br+Cr+Dr+Er+el+$& $& M& S& S& q$ q$ q$ |% |% |% L! R& 45+>o+|q+>o+Vq+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+-q+Br+Fr+Gr+Hr+Ir+Jr+Br+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Kr+Lr+Mr+Nr+Or+Pr+]r+Xp+Xp+Xp+Xp+Xp+Xp+Xp+lr+Qr+Rr+Sr+Tr+Yh+Ur+Vr+Wr+LX *~._, DI.J= v- /, /, /, /, F' y; *~.F' N' Xr+Yr+Zr+`r+ s+.s+Om+Xp+-q+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+Xp+-q+Xp+", +">o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+Br+mr+nr++s+@s+#s+$s+$s+%s+&s+*s+tr+=s+kr+-s+;s+>s+,s+'s+)s+!s+]r+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+Xp+Xp+Br+Br+~s+8$ Ok+Z= M& S& S& S& q$ |% |% #* #* #* h- G_ {s+]s+3m+|q+|q+Br+Vq+Vq+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+Br+Br+^s+/s+(s+_s+:s+Uq+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+lr+o+>o+>o+>o+>o+>o+>o+]r+2s+3s+4s+5s+6s+7s+j).wu f= ow.*- J= v- v- v- v- /, F' /, /, /, Uk.Ro 8s+9s+0s+as+bs+cs+ds+es+]r+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+>o+-q+", +"Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+fs+gs+hs+Q1.is+js+js+ks+,9.ls+ms+ns+os+ps+qs+>s+ET rs+ss+%r+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Br+3m+,(.-h+-h+S& D* q$ |% |% |% |% #* #* h- h- G_ ts+k- uR.:0+Br+|q+>o+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+]r+^s+/s+us+vs+ws+xs+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+]r+^s+ys+6r+zs+As+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Bs+>o+Cs+Ds+Es+Fs+Gs+Hs+Is+vr._, *- J= J= J= J= v- /, /, v- v- fs ,o.-o+Js+Ks+Ls+Ms+Ns+Os+Ps+jr+Qs+%r+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+", +"Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Ss+Ts+Us+Vs+Ws+Xs+Xs+Ys+Zs+`s+ t+.t++t+@t+#t+$t+%t+&t+Vq+*t+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+=t+=t+-t+;t+U{ S& q$ q$ |% #* #* h- h- h- o$ k- W& >t+g} g} ,t+'t+:0+Br+)t+Vq+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+*t+=t+!t+~t+us+{t+]t+^t+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+/t+(t+Mr+_t+:t+ z1 B* rt+$(+st+|q+Br+Vq+Rs+Rs+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+=t+=t+tt+~t+ut+{t+vt+Kr+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+%r+wt+xt+yt+zt+wt+/t+[t+[t+|q+Dj+At+Bt+c +Ct+Dt+Et+Ft+Gt+Ht+_, It+*- _, *- J= J= *- *- LX fs Jt+8t+5m+Dj+Rs+[t+Vq+*t+es+Kt+Lt+Mt+Nt+Ot+Pt+*t+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+Vq+", +"Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Qt+Rt+St+95.Tt+X8.X8.Ut+,d.Vt+Wt+Xt+Yt+Zt+`t+ u+.u++u+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+xs+:0+@u+`f+#* #* h- h- o$ o$ o$ W& 2$ k% P, l% l% J> B* #u+52 :$ j[+$u+[t+)t+Br+Rs+%u+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+*t+!t+~t+&u+*u+S9+=u+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+Rs+/t+-u+;u+>u+,u+'u+Uq+)u+!u+At+u9+Z9.#:.f= ~u+{u+]u+^u+/u+(u+_u+:u+_, *- *- _, _, j).^j.Wr+8t+|q+Ro+%u+ B* Q& Q& [> f& hu+%a+iu+ju+ku+Rs+Br+Rs+[t+[t+[t+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+gu+%u+lu+mu+&u+nu+ou+/t+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+[t+[t+pu+qu+ru+su+tu+uu+vu+wu+xu+~>.^; w- s~ R* R* w- yu+zu+Au+Bu+Cu+7t+_, f= f= *~.LX a/+8t+>o+Ro+[t+pu+[t+Bs+Bs+Bs+Bs+gu+Du+Eu+Fu+Gu+Hu+Iu+Ju+Ku+gu+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+Bs+", +"%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+Lu+3u+Mu+Nu+Ou+Pu+Pu+Qu+jb.Ru+Su+Tu+Uu+Vu+Wu+Xu+Yu+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+[t+%u+=u+Zu+`u+L! o$ Y% o$ W& 2$ k% P, l% l% J> B* Q& [> Y= N= f& u* H; v+j% .v++v+@v+=t+Br+Rs+[t+[t+[t+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+lu+#v+=p+$v+%v+&v+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+%u+[t+[t+pu+pu+Rs+%p+*v+=v+-v+;v+>v+,v+'v+)v+!v+R* S* Q* R* R* w- ~v+{v+]v+^v+/v+(v+S,+f= *~.j)._v+:v+Br+*v+[t+pu+[t+%u+%u+%u+%u+%u+%u+%u+ B* Q& Q& [> Y= f& u* }> 2= H; [& ua+kv+x* lv+mv+Ds+xs+=t+t+&w+P, P, l% J> B* Q& [> Y= Y= f& u* }> H; [& j% j% :; @* I; j6+%% w+,w+'w+!* uh.)8.)w+!w+L<+~w+{w+]w+^w+/w+!J Q* R* Q* R* R* (w+_w+:w+ Y= f& u* }> }> H; [& j% :; X& @* @* W* y- ow+ow+T6 pw+qw+rw+sw+Kv+%u+xs+xs+xs+=u+%u+ &x+#u+[> Y= f& u* }> H; [& [& j% :; X& @* W* !% r* y- _; %4+*x+O, O, p* =x+Y(+-x+;x+>x+(q+,x+fv+=u+xs+xs+=t+%u+% /x+z{.x- 2& 3& |o.V& x- (x+T* _x+:x+ H; [& j% :; :; X& @* W* !% y- _; -- -- %& )% <* g% i% :1+3}+Ig Ig 3}+=& vx+wx+xx+yx+zx+(q+Ax+% =- >% 1& 3& 2& V& V& x- x- T* ^> Jx+Kx+Lx+Mx+Nx+Ox+E> J2.S* s~ p4.Y9.Px+Qx+Rx+Sx+Tx+Ux+Vx+Wx+Xx+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Xx+Yx+Zx+`x+ y+.y++y+@y+#y+Xx+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+", +"$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+fx+%y+&y+*y+=y+ x+ x+-y+;y+>y+,y+'y+)y+{x+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+tv+tv+fv+!y+fv+;o++v+Ut %a+[b+[& [& j% :; X& @* W* W* !% y- _; -- %& )% <* <* g% Y& Y& i% V* 5$ F* Ig ~y+i[+G; {y+(* 2% ]y+2B.^y+/y+Ai+;w+At+tv+hv+xs+xs+hv+c =- >% 1& 1& 3& 3& 2& 2& V& x- x- T* T* 0y+ay+by+cy+dy+ay+QA Q* p4.hc.Px+ey+)t+)t+fy+gy+hy+iy+jy+ky+ex+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+{x+ly+my+ny+oy+py+qy+ry+ex+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+$y+", +"Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+tv+sy+ty+uy+vy+wy+xy+xy+yy+zy+Ay+By+Cy+Dy+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+tv+tv+tv+fv+!y+tv+wf+Ey+V= v+ua+:; x* @* W* !% y- y- _; -- %& )% <* <* g% Y& i% V* 5$ 5$ F* e& e& :* }& `8 _* f% /* +* Fy+Gy+S^+t{+Hy+Iy+Jy+Ky+Ly+My+Iy+Iy+&Q.Ny+2, Oy+Py+Qy+Ry+Sy+Ty+e` t++Uy+0% &T.Vy+Wy+Wy+/; /; 7% /; 7% 9% 9% 7% 5% 6% =- =- >% >% 1& 3& 3& 2& 2& V& V& x- x- T* Xy+Yy+zw+Zy+`y+ z+.z++z+@z+_p+)t+Br+#z+#z+{x+$z+%z+&z+*z+=z+-z+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+-z+;z+>z+Ov+,z+'z+)z+!z+~z+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+Kv+", +"Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+{z+]z+^z+/z+(z+_z+_z+:z+% >% 1& 1& 3& 2& 2& 2& =; =; Tk.!* cz+dz+ez+fz+gz+hz+iz+jz+xs+xs+Ax+Ax+Bx+Bx+~z+kz+lz+mz+nz+tv+Bx+8x+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Dy+oz+pz+`x+ y+qz+rz+sz+fy+Dy+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+Bx+", +"tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tz+{z+]z+uz+vz+wz+xz+xz+yz+vz+zz+Az+hv+#z+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tz+#z+#z+tv+!y+$y+Bz+Cz+Dz+!% /8+_; Ez+_; $4+%& )% <* g% Y& i% i% V* 5$ F* F* e& :* }& )* )* _* f% (* /* /* ^* +* ]* d& d& c& >; a& e% 0& 9& 8& 7& 7& Fz+Gz+Hz+Iz+Jz+Kz+bz+~* ~* c% b% 4& 4& U* a% 4% 4% 8% 9% 9% 7% 5% 5% 6% 6% =- >% >% 1& 1& 1& 1& 3& V& z{.cz+Q9.Kf.Lz+Mz+Nz+Oz+Pz+Qz+Rz+$y+Sz+Ax+tz+tv+tv+tv+Dy+Tz+Uz+Vz+Wz+Xz+oz+Dy+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tz+Dy+Yz+Zz+`z+ A+.A++A+@A+~z+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+tv+", +"#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#A+$A+%A+&A+*A+=A+-A+;A+&A+>A+,A+hv+Ax+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+Ax+Ax+tv+!y+tv+(q+D^+T6 ow+^b )% )% )% <* r~ h% Y& i% V* 5$ F* e& e& :* }& )* _* _* f% (* /* ^* ^* +* ]* d& c& c& a& e% 0& 9& 9& 8& 7& 3% 'A+)A+Hz+Iz+Jz+Kz+N, !A+~* c% b% 4& 4& U* a% 4% 4% 8% 9% 9% 7% 5% 5% 6% 6% =- =- =- =- 3& Rz.d^.z{.Kf.~A+U7+{A+]A+% Lz+kA+lA+mA+tv+xs+=u+tv+Sz+_y+nA+oA+pA+qA+rA+oA+sA+Sz+Sz+Sz+Sz+Sz+Sz+tA+uA+vA+wA+xA+uA+tA+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+tA+yA+zA+AA+BA+CA+DA+EA+FA+tA+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+", +"#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+GA+HA+IA+JA+KA+LA+MA+NA+OA+PA+QA+$y+Sz+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+Sz+Sz+#z+$y+$y+,x+Gx+RA+SA+fA+TA+z~+h% 5$ Ig UA+~y+~y+}& }& `8 )* _* f% (* /* ^* +* +* ]* d& c& a& a& e% 0& 9& 9& 8& 7& 3% mh.VA+WA+XA+YA+ZA+N, 5& ~* c% b% b% 4& U* U* a% 4% 4% 4-.8% uL.7% =- ]y. &.6% 'y.U7+`A+ B+tv+xs+=u+fv+Sz+_y+,x+Sz+.B+#z+tA++B+@B+#B+$B+%B+tA+.B+#z+#z+#z+#z+#z+1A+uA+&B+iy+*B+=B+:A+tA+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+tA+-B+;B+>B+,B+'B+)B+3A+1A+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+#z+", +"Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+!B+FA+~B+{B+]B+^B+/B+(B+_B+_B+{s+.B+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+Sz+_y+_y+Sz+.B+tz+$y+$y+tz+Sz+:B+RA+SA+w+VB+WB+hv+hv+tv+Sz+XB+XB+_y+_y+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+YB+ZB+pA+`B+ C+ZB+lB+,x+,x+,x+,x+,x+.C+_y++C+@C+#C+$C+%C+lB+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+.C+&C+*C+AA+=C+-C+DA+;C+>C+.C+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+,x+", +"!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+nA+uA+,C+'C+)C+!C+~C+{C+]C+tB+_y+_y+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+_y+_y+_y+_y+_y+_y+_y+Sz+.B+^C+$y+$y+tz+XB+]A+/C+(C+_C+:C+; [C+>; /H.&Q.}C+|C+1C+2C+Zg+3C+4C+:o+5C+6C+7C+8j+8C+9C+0C+aC+XB+!B+_y+.B+!y+bC+hv+$y+Sz+XB+XB+_y+_y+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+nA+cC+dC+#B+eC+fC+.C+!B+!B+!B+!B+!B+!B+YB+gC+hC+iC+jC+fC+.C+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+.C+kC+lC+>B+mC+nC+oC+pC+YB+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+!B+", +"qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+rC+sC+tC+uC+vC+wC+xC+fB+yC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+XB+XB+XB+XB+XB+_y+!B+zC+^C+^C+tz+_y+AC+BC+uv+0C+AC+CC+AC+Sz+DC+EC+FC+GC+HC+IC+JC+un+KC+LC+MC+$y+^C+.B+.B+.B+_y+qC+_y+qC+XB+XB+NC+XB+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+OC+YB+^A+PC+QC+RC+qC+qC+qC+qC+qC+qC+SC+TC+UC+VC+WC+XC+YC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+SC+ZC+`C+oB+ D+.D++D+@D+SC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+", +"(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+#D+$D+%D+&D+*D+=D+-D+;D+$D+#D+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+XB+XB+XB+XB+WB+XB+(y+_y+.B+#z+Sz+_y+!B+_y+XB+>D+,D+'D+<'+)D+!D+~D+ei+{D+]D+^D+/D+XB+XB+XB+XB+XB+XB+XB+XB+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+(y+SC+(D+_D+`B+ C+(D+SC+(y+(y+(y+(y+(y+yC+:D+D+&C+9D+0D+aD+bD+cD+dD+eD+qC+yC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+XB+XB+NC+NC+NC+XB+XB+XB+qC+>D+8D+fD+gD+hD+iD+jD+kD+lD+mD+nD+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+>D+oD+pD+qD+rD+YC+>D+qC+qC+qC+qC+qC+qC+>D+RC+sD+#C+tD+uD+vD+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+>D+wD+xD+yD+zD+nC+AD+ZC+vD+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+qC+", +"XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+NC+XB+^D+BD+CD+DD+bD+ED+FD+GD+HD+^D+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+nD+]D+ID+JD+KD+LD+MD+ND+>D+NC+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+NC+OD+SC+PD+QD+RD+SD+NC+XB+XB+XB+XB+XB+TD+UD+VD+WD+XD+yC+XB+NC+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+TD+YD+ZD+Ov+`D+ E+.E++E+@E+NC+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+XB+", +"#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+$E+TC+%E+&E+*E+!C+=E+-E+uD+^D+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+nD+;E+>E+,E+'E+)E+!E+~E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+#E+^D+{E+_D+]E+^E+/E+^D+#E+#E+#E+#E+#E+@E+(E+_E+:E+F+,F+'F+)F+!F+>F+;F++F++F++F++F++F++F++F++F++F++F++F++F++F++F++F++F++F++F++F++F++F++F++F++F++F++F++F++F++F++F++F++F++F++F++F++F+yE+~F+{F+]F+^F+~F+yE++F++F++F++F++F+yE+/F+(F+_F+:F+F+eF+)F+fF+gF+>F+;F+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+@F+hF+iF+jF+kF+lF+@F+mF+7E+7E+7E+7E+@F+nF+oF+pF+qF+rF+sF+@F+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+@F+@F+tF+uF+vF+WD wF+xF+WE+yE+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+7E+", +"yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+zF+AF+BF+CF+DF+EF+FF+GF+HF+zF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+IF+fp+JF+KF+LF+MF+fp+IF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+NF+yE+NE+OF+PF+QF+yF+yF+yF+yF+yF+yF+-F+RF+SF+TF+UF+VF+zF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+WF+XF+YF+oB+ZF+`F+ G+}F+.G+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+yF+", +"+G++G++G++G++G++G++G++G++G++G++G+@G+-F+#G+$G+%G+&G+*G+=G+-G+nF+@G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G+;G+>G+,G+JE+'G+)G+!G+IF++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G+zF+~G+{G+]G+^G+~G+zF++G++G++G++G++G+@G+/G+(G+UE+_G+:G+@G+@G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G++G+@G+

q c #76AA80", +",q c #8E868D", +"'q c #1D1722", +")q c #174024", +"!q c #04BD2D", +"~q c #164B25", +"{q c #201624", +"]q c #1E1E25", +"^q c #14122B", +"/q c #A5B83A", +"(q c #D5FB01", +"_q c #D8FF00", +":q c #D8FE02", +"r c #1C262E", +",r c #22171A", +"'r c #134354", +")r c #067C9F", +"!r c #173A48", +"~r c #211A1D", +"{r c #201F23", +"]r c #07A9C2", +"^r c #06A4D8", +"/r c #03B0FF", +"(r c #1096C4", +"_r c #21191A", +":r c #202124", +"s c #1F1F26", +",s c #446C19", +"'s c #2D3726", +")s c #34531C", +"!s c #334627", +"~s c #1C1825", +"{s c #211625", +"]s c #0D8425", +"^s c #0AA729", +"/s c #18171E", +"(s c #404044", +"_s c #9E9F9E", +":s c #9A9B9A", +"t c #D1FC31", +",t c #D8D7DD", +"'t c #DADBD9", +")t c #202227", +"!t c #211E23", +"~t c #1D272E", +"{t c #09808E", +"]t c #069AAA", +"^t c #0D626D", +"/t c #211C22", +"(t c #202127", +"_t c #202228", +":t c #221A1E", +"u c #0782A0", +",u c #134E5F", +"'u c #221A1F", +")u c #173846", +"!u c #10536C", +"~u c #124C61", +"{u c #07789B", +"]u c #1B313C", +"^u c #221E22", +"/u c #20252B", +"(u c #202229", +"_u c #1D2936", +":u c #055DA2", +"v c #1B3B27", +",v c #221A26", +"'v c #27223B", +")v c #B7D85A", +"!v c #C0FF00", +"~v c #BCFD02", +"{v c #BDFF00", +"]v c #BDFE02", +"^v c #BBFF00", +"/v c #C5F92E", +"(v c #E6E5EA", +"_v c #909091", +":v c #15161C", +"w c #1F252B", +",w c #222026", +"'w c #23161C", +")w c #0DA0A4", +"!w c #11FAFA", +"~w c #237177", +"{w c #21161C", +"]w c #22242A", +"^w c #231C21", +"/w c #163F4C", +"(w c #154858", +"_w c #231B20", +":w c #21242B", +"x c #273721", +",x c #37621D", +"'x c #221F2A", +")x c #222328", +"!x c #201B29", +"~x c #2F521F", +"{x c #334F26", +"]x c #284421", +"^x c #325B24", +"/x c #1B3826", +"(x c #05BF29", +"_x c #145A26", +":x c #2B1F2F", +"y c #7B7A7D", +",y c #A1A2A2", +"'y c #A4A3A4", +")y c #9D9F9E", +"!y c #2BCA4D", +"~y c #43BF5D", +"{y c #AFA6AD", +"]y c #46494B", +"^y c #1B1520", +"/y c #0D982D", +"(y c #0A9C2C", +"_y c #17171D", +":y c #979896", +"z c #ACFE03", +",z c #ABFF00", +"'z c #ABFE01", +")z c #ADF025", +"!z c #33313E", +"~z c #251B21", +"{z c #154D57", +"]z c #078594", +"^z c #1C333A", +"/z c #241E25", +"(z c #241D22", +"_z c #135163", +":z c #067D9A", +"A c #125D72", +",A c #251F24", +"'A c #23242B", +")A c #252127", +"!A c #1F2B33", +"~A c #105F74", +"{A c #241F23", +"]A c #23252C", +"^A c #21272E", +"/A c #0790AE", +"(A c #05C5E3", +"_A c #00DCF9", +":A c #185D6D", +"B c #04D3D8", +",B c #0BC9DC", +"'B c #13B9C6", +")B c #261A1F", +"!B c #22262D", +"~B c #0B6E94", +"{B c #098698", +"]B c #1F4034", +"^B c #261624", +"/B c #261B25", +"(B c #261C24", +"_B c #251F26", +":B c #26151B", +"C c #08B38C", +",C c #156848", +"'C c #16574B", +")C c #1A4A47", +"!C c #1E363A", +"~C c #1E444B", +"{C c #15767C", +"]C c #212B32", +"^C c #242229", +"/C c #23242C", +"(C c #23242F", +"_C c #0A59A5", +":C c #1A304E", +"D c #135950", +",D c #185242", +"'D c #136258", +")D c #135C59", +"!D c #099DA2", +"~D c #1F6368", +"{D c #26181E", +"]D c #24272D", +"^D c #262426", +"/D c #0C3983", +"(D c #153668", +"_D c #272323", +":D c #24262B", +"E c #1A5560", +",E c #261B21", +"'E c #24272E", +")E c #27171E", +"!E c #272324", +"~E c #113272", +"{E c #113475", +"]E c #28221D", +"^E c #24252E", +"/E c #25222B", +"(E c #233030", +"_E c #232B2E", +":E c #203F33", +"F c #21323A", +",F c #262127", +"'F c #25262D", +")F c #261C23", +"!F c #27171F", +"~F c #1A6B6F", +"{F c #21333A", +"]F c #252228", +"^F c #272423", +"/F c #13367B", +"(F c #0240C4", +"_F c #1E294A", +":F c #262425", +"G c #106979", +",G c #271F25", +"'G c #25272E", +")G c #252A30", +"!G c #261F27", +"~G c #1F555A", +"{G c #1A6E71", +"]G c #281A21", +"^G c #185864", +"/G c #00FCFF", +"(G c #13ADB5", +"_G c #29181C", +":G c #242B32", +"H c #164B60", +",H c #253227", +"'H c #1E5238", +")H c #0F574A", +"!H c #184A3D", +"~H c #135981", +"{H c #096D96", +"]H c #242430", +"^H c #281E26", +"/H c #233F44", +"(H c #13596D", +"_H c #0679A0", +":H c #20313D", +"I c #098A98", +",I c #0790A0", +"'I c #136069", +")I c #1B6468", +"!I c #272128", +"~I c #26272E", +"{I c #0D6D85", +"]I c #26242A", +"^I c #281E23", +"/I c #155665", +"(I c #0676A4", +"_I c #0DB063", +":I c #01D759", +"J c #252D30", +",J c #28202B", +"'J c #262A2F", +")J c #303238", +"!J c #C3C4C4", +"~J c #CFD0D0", +"{J c #CFD2CD", +"]J c #D7CFE1", +"^J c #B3F071", +"/J c #7FFF00", +"(J c #87FE03", +"_J c #85FF00", +":J c #85FE01", +"K c #206426", +",K c #2A3631", +"'K c #291C2E", +")K c #127D29", +"!K c #2AD64A", +"~K c #AAACAA", +"{K c #B3ABB1", +"]K c #89AC91", +"^K c #1CD743", +"/K c #66B477", +"(K c #3D3241", +"_K c #09A82E", +":K c #0D952D", +"L c #232737", +",L c #272527", +"'L c #252C2F", +")L c #24352F", +"!L c #1F5032", +"~L c #204A31", +"{L c #24342F", +"]L c #224231", +"^L c #224132", +"/L c #233A30", +"(L c #204A32", +"_L c #213433", +":L c #304028", +"M c #0F787E", +",M c #233237", +"'M c #0F8899", +")M c #00D0EF", +"!M c #02E2FE", +"~M c #0B7692", +"{M c #06B2CA", +"]M c #038FC6", +"^M c #026898", +"/M c #292429", +"(M c #27262C", +"_M c #252934", +":M c #134B6A", +"N c #79FE02", +",N c #7AFF00", +"'N c #7AFE01", +")N c #85F62A", +"!N c #1E8C7D", +"~N c #06816B", +"{N c #0B8370", +"]N c #0A8371", +"^N c #0B8070", +"/N c #0E766B", +"(N c #0E766C", +"_N c #0E756C", +":N c #0E756D", +"O c #26312F", +",O c #27342D", +"'O c #3C6523", +")O c #385528", +"!O c #4F751F", +"~O c #089122", +"{O c #0CA629", +"]O c #198130", +"^O c #28282E", +"/O c #28252F", +"(O c #26312C", +"_O c #226A22", +":O c #292C30", +"P c #01B3CB", +",P c #06C0D1", +"'P c #06BED5", +")P c #03DDF9", +"!P c #0AF3FF", +"~P c #1E9196", +"{P c #281820", +"]P c #272B32", +"^P c #0C6E88", +"/P c #0E6E87", +"(P c #292733", +"_P c #087A4E", +":P c #136044", +"