]> SALOME platform Git repositories - modules/paravis.git/commitdiff
Salome HOME
Merge from BR_PORTING_VTK6 01/03/2013
authorvsr <vsr@opencascade.com>
Fri, 1 Mar 2013 14:36:48 +0000 (14:36 +0000)
committervsr <vsr@opencascade.com>
Fri, 1 Mar 2013 14:36:48 +0000 (14:36 +0000)
166 files changed:
CMakeLists.txt
adm_local/cmake_files/FindPARAVIEW.cmake
getwrapclasses.py
idl/CMakeLists.txt
idl/create_hints.py
idl/create_hints.sh
idl/hints [new file with mode: 0644]
idl/vtkWrapIDL.c
idl/wrap.cmake
src/PVGUI/CMakeLists.txt
src/PVGUI/PVGUI_MatplotlibMathTextUtilities.cxx [new file with mode: 0644]
src/PVGUI/PVGUI_MatplotlibMathTextUtilities.h [new file with mode: 0644]
src/PVGUI/PVGUI_Module.cxx
src/PVGUI/PVGUI_Module_widgets.cxx
src/PVGUI/PVGUI_OutputWindowAdapter.cxx
src/PVGUI/PVGUI_OutputWindowAdapter.h
src/PVGUI/PVGUI_ParaViewSettingsPane.h
src/PVGUI/wrap.cmake
src/PV_SWIG/paravisSM.py
src/PV_SWIG/presentations.py
src/PV_SWIG/pvsimple.py
src/ParaView/lex.yy.c
src/ParaView/vtkParse.tab.c
src/ParaView/vtkParseData.c [new file with mode: 0644]
src/ParaView/vtkParseData.h [new file with mode: 0644]
src/ParaView/vtkParseExtras.c
src/ParaView/vtkParseExtras.h
src/ParaView/vtkParseHierarchy.c
src/ParaView/vtkParseHierarchy.h
src/ParaView/vtkParseMain.c
src/ParaView/vtkParseMain.h [new file with mode: 0644]
src/ParaView/vtkParsePreprocess.c
src/ParaView/vtkParsePreprocess.h
src/ParaView/vtkParseString.c [new file with mode: 0644]
src/ParaView/vtkParseString.h [new file with mode: 0644]
src/ParaView/vtkWrap.c
src/ParaView/vtkWrap.h
src/ParaView/vtkWrapHierarchy.c
src/Plugins/ElevationSurface/vtkElevationSurfaceFilter.cxx
src/Plugins/ElevationSurface/vtkElevationSurfaceFilter.h
src/Plugins/Filter/vtkMySampleFilter.cxx
src/Plugins/Filter/vtkMySampleFilter.h
src/Plugins/IntegrationPoints/vtkELNOFilter.cxx
src/Plugins/IntegrationPoints/vtkELNOFilter.h
src/Plugins/IntegrationPoints/vtkELNOMeshFilter.cxx
src/Plugins/IntegrationPoints/vtkELNOMeshFilter.h
src/Plugins/IntegrationPoints/vtkELNOSurfaceFilter.cxx
src/Plugins/IntegrationPoints/vtkELNOSurfaceFilter.h
src/Plugins/MedReader/CMake/FindMED.cmake
src/Plugins/MedReader/CMakeLists.txt
src/Plugins/MedReader/IO/CMakeLists.txt
src/Plugins/MedReader/IO/Testing/Cxx/CMakeLists.txt
src/Plugins/MedReader/IO/module.cmake [new file with mode: 0644]
src/Plugins/MedReader/IO/vtkExtractGroup.cxx
src/Plugins/MedReader/IO/vtkExtractGroup.h
src/Plugins/MedReader/IO/vtkGenerateStructElement.cxx
src/Plugins/MedReader/IO/vtkGenerateStructElement.h
src/Plugins/MedReader/IO/vtkMed.h
src/Plugins/MedReader/IO/vtkMedCartesianGrid.cxx
src/Plugins/MedReader/IO/vtkMedCartesianGrid.h
src/Plugins/MedReader/IO/vtkMedConstantAttribute.cxx
src/Plugins/MedReader/IO/vtkMedConstantAttribute.h
src/Plugins/MedReader/IO/vtkMedCurvilinearGrid.cxx
src/Plugins/MedReader/IO/vtkMedCurvilinearGrid.h
src/Plugins/MedReader/IO/vtkMedDriver.cxx
src/Plugins/MedReader/IO/vtkMedDriver.h
src/Plugins/MedReader/IO/vtkMedDriver30.cxx
src/Plugins/MedReader/IO/vtkMedDriver30.h
src/Plugins/MedReader/IO/vtkMedEntityArray.cxx
src/Plugins/MedReader/IO/vtkMedEntityArray.h
src/Plugins/MedReader/IO/vtkMedFactory.cxx
src/Plugins/MedReader/IO/vtkMedFactory.h
src/Plugins/MedReader/IO/vtkMedFamily.cxx
src/Plugins/MedReader/IO/vtkMedFamily.h
src/Plugins/MedReader/IO/vtkMedFamilyOnEntity.cxx
src/Plugins/MedReader/IO/vtkMedFamilyOnEntity.h
src/Plugins/MedReader/IO/vtkMedFamilyOnEntityOnProfile.cxx
src/Plugins/MedReader/IO/vtkMedFamilyOnEntityOnProfile.h
src/Plugins/MedReader/IO/vtkMedField.cxx
src/Plugins/MedReader/IO/vtkMedField.h
src/Plugins/MedReader/IO/vtkMedFieldOnProfile.cxx
src/Plugins/MedReader/IO/vtkMedFieldOnProfile.h
src/Plugins/MedReader/IO/vtkMedFieldOverEntity.cxx
src/Plugins/MedReader/IO/vtkMedFieldOverEntity.h
src/Plugins/MedReader/IO/vtkMedFieldStep.cxx
src/Plugins/MedReader/IO/vtkMedFieldStep.h
src/Plugins/MedReader/IO/vtkMedFile.cxx
src/Plugins/MedReader/IO/vtkMedFile.h
src/Plugins/MedReader/IO/vtkMedFilter.cxx
src/Plugins/MedReader/IO/vtkMedFilter.h
src/Plugins/MedReader/IO/vtkMedFraction.cxx
src/Plugins/MedReader/IO/vtkMedFraction.h
src/Plugins/MedReader/IO/vtkMedGrid.cxx
src/Plugins/MedReader/IO/vtkMedGrid.h
src/Plugins/MedReader/IO/vtkMedGroup.cxx
src/Plugins/MedReader/IO/vtkMedGroup.h
src/Plugins/MedReader/IO/vtkMedIntArray.cxx
src/Plugins/MedReader/IO/vtkMedIntArray.h
src/Plugins/MedReader/IO/vtkMedIntArrayInternal.cxx
src/Plugins/MedReader/IO/vtkMedIntArrayInternal.h
src/Plugins/MedReader/IO/vtkMedInterpolation.cxx
src/Plugins/MedReader/IO/vtkMedInterpolation.h
src/Plugins/MedReader/IO/vtkMedLink.cxx
src/Plugins/MedReader/IO/vtkMedLink.h
src/Plugins/MedReader/IO/vtkMedLocalization.cxx
src/Plugins/MedReader/IO/vtkMedLocalization.h
src/Plugins/MedReader/IO/vtkMedMesh.cxx
src/Plugins/MedReader/IO/vtkMedMesh.h
src/Plugins/MedReader/IO/vtkMedPolarGrid.cxx
src/Plugins/MedReader/IO/vtkMedPolarGrid.h
src/Plugins/MedReader/IO/vtkMedProfile.cxx
src/Plugins/MedReader/IO/vtkMedProfile.h
src/Plugins/MedReader/IO/vtkMedReader.cxx
src/Plugins/MedReader/IO/vtkMedReader.h
src/Plugins/MedReader/IO/vtkMedRegularGrid.cxx
src/Plugins/MedReader/IO/vtkMedRegularGrid.h
src/Plugins/MedReader/IO/vtkMedSelection.cxx
src/Plugins/MedReader/IO/vtkMedSelection.h
src/Plugins/MedReader/IO/vtkMedSetGet.h
src/Plugins/MedReader/IO/vtkMedStructElement.cxx
src/Plugins/MedReader/IO/vtkMedStructElement.h
src/Plugins/MedReader/IO/vtkMedSupportMesh.cxx
src/Plugins/MedReader/IO/vtkMedSupportMesh.h
src/Plugins/MedReader/IO/vtkMedUnstructuredGrid.cxx
src/Plugins/MedReader/IO/vtkMedUnstructuredGrid.h
src/Plugins/MedReader/IO/vtkMedUtilities.cxx
src/Plugins/MedReader/IO/vtkMedUtilities.h
src/Plugins/MedReader/IO/vtkMedVariableAttribute.cxx
src/Plugins/MedReader/IO/vtkMedVariableAttribute.h
src/Plugins/MedReader/ParaViewPlugin/CMakeLists.txt
src/Plugins/MedReader/ParaViewPlugin/pqExtractGroupPanel.cxx
src/Plugins/MedReader/plugin.cmake [new file with mode: 0644]
src/Plugins/NavigationMode/pqSetModeStarter.cxx
src/Plugins/ParaMEDCorba/CMakeLists.txt
src/Plugins/ParaMEDCorba/VTKParaMEDFieldClient.cxx
src/Plugins/ParaMEDCorba/vtkParaMEDCorbaSource.cxx
src/Plugins/ParaMEDCorba/vtkParaMEDCorbaSource.h
src/Plugins/ScaleVector/vtkScaleVectorFilter.cxx
src/Plugins/ScaleVector/vtkScaleVectorFilter.h
src/Plugins/TableReader/ParaViewPlugin/Resources/TableReaderClient.xml
src/Plugins/TableReader/Reader/vtkVisuTableReader.cxx
src/Plugins/TableReader/Reader/vtkVisuTableReader.h
src/Plugins/TableReader/TableTo3DFilter/vtkTableTo3D.cxx
src/Plugins/TableReader/TableTo3DFilter/vtkTableTo3D.h
test/VisuPrs/2D_viewer/A0.py
test/VisuPrs/2D_viewer/A1.py
test/VisuPrs/2D_viewer/CMakeLists.txt
test/VisuPrs/3D_viewer/CMakeLists.txt
test/VisuPrs/Animation/CMakeLists.txt
test/VisuPrs/CMakeLists.txt
test/VisuPrs/CutLines/CMakeLists.txt
test/VisuPrs/CutPlanes/CMakeLists.txt
test/VisuPrs/DeformedShape/CMakeLists.txt
test/VisuPrs/GaussPoints/CMakeLists.txt
test/VisuPrs/IsoSurfaces/CMakeLists.txt
test/VisuPrs/MeshPresentation/CMakeLists.txt
test/VisuPrs/Plot3D/CMakeLists.txt
test/VisuPrs/SWIG_scripts/CMakeLists.txt
test/VisuPrs/ScalarMap/CMakeLists.txt
test/VisuPrs/ScalarMap_On_DeformedShape/CMakeLists.txt
test/VisuPrs/StreamLines/CMakeLists.txt
test/VisuPrs/Tables/CMakeLists.txt
test/VisuPrs/Util/CMakeLists.txt
test/VisuPrs/Util/paravistest.py
test/VisuPrs/Util/paravistesthelper.py [new file with mode: 0644]
test/VisuPrs/Vectors/CMakeLists.txt

index 0379ad43425ea7b79001295fc51c1010d999ba54..3bf52a63fc785925cf90995ac874d936ee2799d9 100644 (file)
@@ -24,7 +24,7 @@ IF(WINDOWS)
   SET( CMAKE_SHARED_LINKER_FLAGS_DEBUG "${replacementFlags}" )
 ENDIF(WINDOWS)
 
-CMAKE_MINIMUM_REQUIRED(VERSION 2.4.7 FATAL_ERROR)
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8.7 FATAL_ERROR)
 IF(COMMAND cmake_policy)
   cmake_policy(SET CMP0003 NEW)
 ENDIF(COMMAND cmake_policy)            
@@ -75,7 +75,8 @@ ENDIF(EXISTS ${VISU_ROOT_DIR}/adm_local/cmake_files/FindVISU.cmake)
 SET(MED_ROOT_DIR $ENV{MED_ROOT_DIR} CACHE PATH "MED_ROOT_DIR")
 INCLUDE(${MED_ROOT_DIR}/adm_local/cmake_files/FindMED.cmake)
 
-EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/getwrapclasses.py ${PARAVIEW_INCLUDE_DIRS})
+LIST(GET PARAVIEW_INCLUDE_DIRS 0 PARAVIEW_INCLUDE_DIR0)
+EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/getwrapclasses.py ${PARAVIEW_INCLUDE_DIR0})
 
 SET(SUBDIRS
   idl
@@ -98,8 +99,6 @@ SET(output ${CMAKE_CURRENT_BINARY_DIR}/PARAVIS_version.h)
 MESSAGE(STATUS "Creation of ${output}")
 CONFIGURE_FILE(${input} ${output})
 
-ADD_DEFINITIONS(-DVTK_EXCLUDE_STRSTREAM_HEADERS)
-
 FOREACH(dir ${SUBDIRS})
   ADD_SUBDIRECTORY(${dir})
 ENDFOREACH(dir ${SUBDIRS})
index 030d81a2f6e6741c0807b04f51570e758bf301fb..e19f47f4ba9e0c0e4c732038bd09aa12d572252c 100644 (file)
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-FIND_PACKAGE(ParaView REQUIRED)
-
-SET(PARAVIEW_INCLUDES -I${PARAVIEW_INCLUDE_DIRS})
-
-FIND_LIBRARY(QtPython QtPython PATHS ${PARAVIEW_LIBRARY_DIRS} NO_DEFAULT_PATH)
-FIND_LIBRARY(QVTK QVTK PATHS ${PARAVIEW_LIBRARY_DIRS} NO_DEFAULT_PATH)
-FIND_LIBRARY(vtkClientServer vtkClientServer PATHS ${PARAVIEW_LIBRARY_DIRS} NO_DEFAULT_PATH)
-FIND_LIBRARY(vtkPVServerManager vtkPVServerManager PATHS ${PARAVIEW_LIBRARY_DIRS} NO_DEFAULT_PATH)
-FIND_LIBRARY(pqApplicationComponents pqApplicationComponents PATHS ${PARAVIEW_LIBRARY_DIRS} NO_DEFAULT_PATH)
-FIND_LIBRARY(pqComponents pqComponents PATHS ${PARAVIEW_LIBRARY_DIRS} NO_DEFAULT_PATH)
-FIND_LIBRARY(pqCore pqCore PATHS ${PARAVIEW_LIBRARY_DIRS} NO_DEFAULT_PATH)
-FIND_LIBRARY(pqWidgets pqWidgets PATHS ${PARAVIEW_LIBRARY_DIRS} NO_DEFAULT_PATH)
-FIND_LIBRARY(vtkPVClientServerCore vtkPVClientServerCore PATHS ${PARAVIEW_LIBRARY_DIRS} NO_DEFAULT_PATH)
-FIND_LIBRARY(vtkPVServerImplementation vtkPVServerImplementation  PATHS ${PARAVIEW_LIBRARY_DIRS} NO_DEFAULT_PATH)
-FIND_LIBRARY(vtkPVCommon vtkPVCommon PATHS ${PARAVIEW_LIBRARY_DIRS} NO_DEFAULT_PATH)
-FIND_LIBRARY(vtkPVVTKExtensions vtkPVVTKExtensions PATHS ${PARAVIEW_LIBRARY_DIRS} NO_DEFAULT_PATH)
-FIND_LIBRARY(vtkViews vtkViews PATHS ${PARAVIEW_LIBRARY_DIRS} NO_DEFAULT_PATH)
-FIND_LIBRARY(pqApplicationComponents pqApplicationComponents  PATHS ${PARAVIEW_LIBRARY_DIRS} NO_DEFAULT_PATH)
-FIND_LIBRARY(vtkGraphicsCS vtkGraphicsCS  PATHS ${PARAVIEW_LIBRARY_DIRS} NO_DEFAULT_PATH)
-FIND_LIBRARY(vtkCommonCS vtkCommonCS  PATHS ${PARAVIEW_LIBRARY_DIRS} NO_DEFAULT_PATH)
-
-SET(PARAVIEW_LIBS
-  ${QtPython}
-  ${QVTK}
-  ${vtkClientServer}
-  ${vtkGenericFiltering}
-  ${vtkInfovis}
-  ${vtkVolumeRendering}
-  ${vtkPVServerManager}
-  ${pqApplicationComponents}
-  ${pqComponents}
-  ${pqCore}
-  ${pqWidgets}
-  ${vtkPVClientServerCore}
-  ${vtkPVServerImplementation}
-  ${vtkPVVTKExtensions}
-  ${vtkPVCommon}
-  ${vtkViews}
-  ${pqApplicationComponents}
-  ${vtkGraphicsCS}
-  ${vtkCommonCS}
-  )
\ No newline at end of file
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8.7 FATAL_ERROR)
+FIND_PACKAGE(ParaView REQUIRED NO_MODULE)
+INCLUDE(${PARAVIEW_USE_FILE})
index 883f1646cec31cd019faf9b833066a7f389bf3bc..db2b747cc8f7a9e8d3a629ae11908e5deb92ef30 100644 (file)
@@ -24,10 +24,17 @@ import re
 classeslistsm = []
 classeslistvtk = []
 
-from vtkPVClientServerCorePython import *
-from vtkPVServerImplementationPython import *
-from vtkPVServerManagerPython import *
 from vtkPVCommonPython import *
+from vtkPVClientServerCoreCorePython import *
+from vtkPVClientServerCoreDefaultPython import *
+from vtkPVClientServerCoreRenderingPython import *
+from vtkPVServerImplementationCorePython import *
+from vtkPVServerImplementationDefaultPython import *
+from vtkPVServerImplementationRenderingPython import *
+from vtkPVServerManagerApplicationPython import *
+from vtkPVServerManagerCorePython import *
+from vtkPVServerManagerDefaultPython import *
+from vtkPVServerManagerRenderingPython import *
 
 l1 = dir()
 for a in l1:
index dc6b6f02fc79cb7274a3c6787f40f010bad59aca..51d1ea24d9bc755305c3c80afca675b25fc961af 100644 (file)
@@ -23,9 +23,6 @@ SET(SOVERSION_INFO ${VERSION_MAJOR}.${VERSION_MINOR})
 ADD_DEFINITIONS(-DHAVE_SALOME_CONFIG)
 INCLUDE_DIRECTORIES(${OMNIORB_INCLUDE_DIRS} ${KERNEL_ROOT_DIR}/include/salome ${CMAKE_BINARY_DIR}/idl)
 
-#INCLUDE(vtkWrapHierarchy.cmake)
-#SET(VTK_WRAP_HIERARCHY_EXE vtkWrapHierarchy)
-
 INCLUDE(wrap.cmake)
 
 
@@ -74,10 +71,15 @@ ADD_EXECUTABLE(vtkWrapIDL
   ${CMAKE_SOURCE_DIR}/src/ParaView/vtkParseHierarchy.c
   ${CMAKE_SOURCE_DIR}/src/ParaView/vtkParseExtras.c
   ${CMAKE_SOURCE_DIR}/src/ParaView/vtkParseMain.c
+  ${CMAKE_SOURCE_DIR}/src/ParaView/vtkParseData.c
+  ${CMAKE_SOURCE_DIR}/src/ParaView/vtkParseString.c
   ${CMAKE_SOURCE_DIR}/src/ParaView/vtkWrap.c
-  ${CMAKE_SOURCE_DIR}/src/ParaView/vtkWrapText.c
+#  ${CMAKE_SOURCE_DIR}/src/ParaView/vtkWrapText.c
   ${CMAKE_CURRENT_SOURCE_DIR}/vtkWrapIDL.c)
 
+set_property(SOURCE ${CMAKE_SOURCE_DIR}/src/ParaView/vtkParseMain.c PROPERTY COMPILE_DEFINITIONS
+  VTK_PARSE_VERSION="${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}")
+
 ADD_DEPENDENCIES(vtkWrapIDL generate_txt)
   
 INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/src/ParaView)
@@ -86,6 +88,10 @@ FOREACH(f ${PLATFORM_CPPFLAGS} ${PTHREAD_CFLAGS} ${PARAVIEW_INCLUDES} ${VTK_INCL
   SET(flags "${flags} ${f}")
 ENDFOREACH(f ${PLATFORM_CPPFLAGS} ${PTHREAD_CFLAGS} ${PARAVIEW_INCLUDES} ${VTK_INCLUDES})
 
+#VTN TODO:
+#IF(VTK_LEGACY_REMOVE)
+#  ADD_DEFINITIONS(-DVTK_PARSE_LEGACY_REMOVE)
+#ENDIF()
 SET_TARGET_PROPERTIES(vtkWrapIDL PROPERTIES COMPILE_FLAGS "${flags}")
 
 TARGET_LINK_LIBRARIES(vtkWrapIDL ${PLATFORM_LDFLAGS} ${PLATFORM_LIBADD})
@@ -125,7 +131,7 @@ FOREACH(input ${BASEIDL_FILES} ${WRAP_IDL})
   INSTALL(CODE "SET(IDL_FILE ${input})")
   INSTALL(CODE "SET(DIR lib/python${PYTHON_VERSION}/site-packages/salome)")
   INSTALL(CODE "SET(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})")
-  INSTALL(CODE "SET(OMNIORB_IDL_PYTHON ${OMNIORB_IDL_PYTHON})")
+  INSTALL(CODE "SET(OMNIORB_IDL_COMPILER ${OMNIORB_IDL_COMPILER})")
   INSTALL(CODE "SET(IDLPYFLAGS -bpythonIDL -p${CMAKE_CURRENT_SOURCE_DIR} -I${CMAKE_CURRENT_SOURCE_DIR} -I${KERNEL_ROOT_DIR}/idl/salome)")
   INSTALL(SCRIPT ${KERNEL_ROOT_DIR}/salome_adm/cmake_files/deprecated/install_python_from_idl.cmake)
 
index 31addda54dd026af70ecf3719d2a799c0df7733e..32092f62ed7a47db5be192bd6e1b14b7a28c1384 100755 (executable)
@@ -24,7 +24,8 @@ CONF_DIR = os.path.dirname(sys.argv[0])
 
 content = ""
 for filename in [
-    os.path.join(sys.argv[1], "hints"),
+#    os.path.join(sys.argv[1], "hints"),
+    os.path.join(CONF_DIR, "hints"),
     os.path.join(CONF_DIR, "hints_paravis"),
     ]:
     stream = open(filename)
index 85a8c980e2c12ba7db1ee6a9d38f86f6d0a99f8a..6b15c544412fdee5cea5e39a8904f68bf45e7531 100755 (executable)
@@ -21,5 +21,6 @@
 
 CONF_DIR=`echo $0 | sed -e "s,[^/]*$,,;s,/$,,;s,^$,.,"`
 
-cp $1/hints hints
+#cp $1/hints hints
+cp ${CONF_DIR}/hints hints
 cat ${CONF_DIR}/hints_paravis >> hints
diff --git a/idl/hints b/idl/hints
new file mode 100644 (file)
index 0000000..7913280
--- /dev/null
+++ b/idl/hints
@@ -0,0 +1,258 @@
+vtkAbstractMapper3D                   GetBounds                         307  6
+vtkAbstractMapper3D                   GetCenter                         307  3
+vtkAbstractTransform                  TransformDoubleNormalAtPoint      307  3
+vtkAbstractTransform                  TransformDoublePoint              307  3
+vtkAbstractTransform                  TransformDoubleVectorAtPoint      307  3
+vtkAbstractTransform                  TransformFloatNormalAtPoint       301  3
+vtkAbstractTransform                  TransformFloatPoint               301  3
+vtkAbstractTransform                  TransformFloatVectorAtPoint       301  3
+vtkAbstractTransform                  TransformNormalAtPoint            307  3
+vtkAbstractTransform                  TransformPoint                    307  3
+vtkAbstractTransform                  TransformVectorAtPoint            307  3
+vtkAbstractVolumeMapper               GetBounds                         307  6
+vtkActor                              GetBounds                         307  6
+vtkAlgorithm                          GetUpdateExtent                   304  6
+vtkAnnotatedCubeActor                 GetBounds                         307  6
+vtkAssembly                           GetBounds                         307  6
+vtkAxesActor                          GetBounds                         307  6
+vtkAxisActor                          GetBounds                         307  6
+vtkBoxRepresentation                  GetBounds                         307  6
+vtkCamera                             GetOrientation                    307  3
+vtkCamera                             GetOrientationWXYZ                307  4
+vtkCell                               GetBounds                         307  6
+vtkCharArray                          GetValueRange                     303  2
+vtkColorTransferFunction              GetColor                          307  3
+vtkCompositePolyDataMapper2           GetBounds                         307  6
+vtkCompositePolyDataMapper            GetBounds                         307  6
+vtkCoordinate                         GetComputedDisplayValue           304  2
+vtkCoordinate                         GetComputedDoubleDisplayValue     307  2
+vtkCoordinate                         GetComputedDoubleViewportValue    307  2
+vtkCoordinate                         GetComputedLocalDisplayValue      304  2
+vtkCoordinate                         GetComputedViewportValue          304  2
+vtkCoordinate                         GetComputedWorldValue             307  3
+vtkCubeAxesActor2D                    GetBounds                         307  6
+vtkCubeAxesActor2D                    GetRanges                         307  6
+vtkCubeAxesActor                      GetBounds                         307  6
+vtkDataArray                          GetRange                          307  2
+vtkDataArray                          GetTuple2                         307  2
+vtkDataArray                          GetTuple3                         307  3
+vtkDataArray                          GetTuple4                         307  4
+vtkDataArray                          GetTuple9                         307  9
+vtkDataObject                         GetUpdateExtent                   304  6
+vtkDataObject                         GetWholeBoundingBox               307  6
+vtkDataObject                         GetWholeExtent                    304  6
+vtkDataSet                            GetBounds                         307  6
+vtkDataSet                            GetCenter                         307  3
+vtkDataSet                            GetPoint                          307  3
+vtkDataSet                            GetScalarRange                    307  2
+vtkDICOMImageReader                   GetImageOrientationPatient        301  6
+vtkDICOMImageReader                   GetImagePositionPatient           301  3
+vtkDICOMImageReader                   GetPixelSpacing                   307  3
+vtkDirectionEncoder                   GetDecodedGradient                301  3
+vtkDistanceRepresentation             GetPoint1WorldPosition            307  3
+vtkDistanceRepresentation             GetPoint2WorldPosition            307  3
+vtkDoubleArray                        GetValueRange                     307  2
+vtkExtentSplitter                     GetSubExtent                      304  6
+vtkExtractUnstructuredGrid            GetExtent                         307  6
+vtkFloatArray                         GetValueRange                     301  2
+vtkFunctionParser                     GetVectorResult                   307  3
+vtkFunctionParser                     GetVectorVariableValue            307  3
+vtkGeometryFilter                     GetExtent                         307  6
+vtkGraph                              GetEdgePoint                      307  3
+vtkGraphMapper                        GetBounds                         307  6
+vtkGridSynchronizedTemplates3D        GetExecuteExtent                  304  6
+vtkHandleRepresentation               GetDisplayPosition                307  3
+vtkHandleRepresentation               GetWorldPosition                  307  3
+vtkHexahedron                         GetEdgeArray                      304  2
+vtkHexahedron                         GetFaceArray                      304  4
+vtkHyperOctree                        GetPoint                          307  3
+vtkHyperStreamline                    GetStartPosition                  307  3
+vtkIDTypeArray                        GetValueRange                     30A  2
+vtkImageAccumulate                    GetComponentExtent                304  6
+vtkImageActor                         GetBounds                         307  6
+vtkImageActor                         GetDisplayExtent                  304  6
+vtkImageButterworthHighPass           GetCutOff                         307  3
+vtkImageButterworthLowPass            GetCutOff                         307  3
+vtkImageClip                          GetOutputWholeExtent              304  6
+vtkImageConvolve                      GetKernel3x3                      301  9
+vtkImageConvolve                      GetKernel3x3x3                    301  27
+vtkImageConvolve                      GetKernel5x5                      301  25
+vtkImageData                          GetDimensions                     304  3
+vtkImageData                          GetExtent                         304  6
+vtkImageData                          GetIncrements                     30A  3
+vtkImageData                          GetPoint                          307  3
+vtkImageEllipsoidSource               GetWholeExtent                    304  6
+vtkImageExport                        GetDataDimensions                 304  3
+vtkImageExport                        GetDataExtent                     304  6
+vtkImageExport                        GetDataOrigin                     307  3
+vtkImageExport                        GetDataSpacing                    307  3
+vtkImageMandelbrotSource              GetSizeCX                         307  4
+vtkImagePadFilter                     GetOutputWholeExtent              304  6
+vtkImagePlaneWidget                   GetCenter                         307  3
+vtkImagePlaneWidget                   GetNormal                         307  3
+vtkImagePlaneWidget                   GetOrigin                         307  3
+vtkImagePlaneWidget                   GetPoint1                         307  3
+vtkImagePlaneWidget                   GetPoint2                         307  3
+vtkImageReslice                       GetResliceAxesDirectionCosines    307  9
+vtkImageReslice                       GetResliceAxesOrigin              307  3
+vtkImageSincInterpolator              GetBlurFactors                    307  3
+vtkImageSource                        GetExecuteExtent                  304  6
+vtkImageSpatialAlgorithm              GetKernelMiddle                   304  3
+vtkImageSpatialAlgorithm              GetKernelSize                     304  3
+vtkImageSpatialFilter                 GetKernelMiddle                   304  3
+vtkImageSpatialFilter                 GetKernelSize                     304  3
+vtkImageTracerWidget                  GetHandlePosition                 307  3
+vtkImageVectorConvolve                GetKernel                         301  3
+vtkImageViewer                        GetPosition                       304  2
+vtkImageViewer                        GetSize                           304  2
+vtkImplicitFunction                   FunctionGradient                  307  3
+vtkImplicitPlaneRepresentation        GetBounds                         307  6
+vtkImplicitPlaneRepresentation        GetNormal                         307  3
+vtkImplicitPlaneRepresentation        GetOrigin                         307  3
+vtkImplicitPlaneWidget                GetNormal                         307  3
+vtkImplicitPlaneWidget                GetOrigin                         307  3
+vtk__Int64Array                       GetValueRange                     30C  2
+vtkIntArray                           GetValueRange                     304  2
+vtkKdNode                             GetMaxBounds                      307  3
+vtkKdNode                             GetMaxDataBounds                  307  3
+vtkKdNode                             GetMinBounds                      307  3
+vtkKdNode                             GetMinDataBounds                  307  3
+vtkLegendBoxActor                     GetEntryColor                     307  3
+vtkLight                              GetColor                          307  3
+vtkLight                              GetTransformedFocalPoint          307  3
+vtkLight                              GetTransformedPosition            307  3
+vtkLinearTransform                    TransformDoubleNormal             307  3
+vtkLinearTransform                    TransformDoubleVector             307  3
+vtkLinearTransform                    TransformFloatNormal              301  3
+vtkLinearTransform                    TransformFloatVector              301  3
+vtkLinearTransform                    TransformNormal                   307  3
+vtkLinearTransform                    TransformVector                   307  3
+vtkLineRepresentation                 GetBounds                         307  6
+vtkLineRepresentation                 GetPoint1DisplayPosition          307  3
+vtkLineRepresentation                 GetPoint1WorldPosition            307  3
+vtkLineRepresentation                 GetPoint2DisplayPosition          307  3
+vtkLineRepresentation                 GetPoint2WorldPosition            307  3
+vtkLineWidget                         GetPoint1                         307  3
+vtkLineWidget                         GetPoint2                         307  3
+vtkLODProp3D                          GetBounds                         307  6
+vtkLongArray                          GetValueRange                     306  2
+vtkLongLongArray                      GetValueRange                     30B  2
+vtkLookupTable                        GetColor                          307  3
+vtkLookupTable                        GetRange                          307  2
+vtkLookupTable                        GetTableValue                     307  4
+vtkMapper                             GetBounds                         307  6
+vtkMath                               HSVToRGB                          2307 3
+vtkMath                               RGBToHSV                          2307 3
+vtkMath                               SolveCubic                        2307 5
+vtkMath                               SolveLinear                       2307 3
+vtkMath                               SolveQuadratic                    2307 4
+vtkMatrix4x4                          MultiplyDoublePoint               307  4
+vtkMatrix4x4                          MultiplyFloatPoint                301  4
+vtkMatrix4x4                          MultiplyPoint                     301  4
+vtkMedicalImageProperties             GetNthWindowLevelPreset           307  2
+vtkMedicalImageProperties             GetWindowLevelPreset              307  2
+vtkMINCImageReader                    GetDataRange                      307  2
+vtkPainterPolyDataMapper              GetBounds                         307  6
+vtkParallelopipedRepresentation       GetBounds                         307  6
+vtkPiecewiseFunction                  GetRange                          307  2
+vtkPlaneWidget                        GetCenter                         307  3
+vtkPlaneWidget                        GetNormal                         307  3
+vtkPlaneWidget                        GetOrigin                         307  3
+vtkPlaneWidget                        GetPoint1                         307  3
+vtkPlaneWidget                        GetPoint2                         307  3
+vtkPointHandleRepresentation2D        GetBounds                         307  6
+vtkPointHandleRepresentation3D        GetBounds                         307  6
+vtkPointSet                           GetPoint                          307  3
+vtkPoints                             GetBounds                         307  6
+vtkPoints                             GetPoint                          307  3
+vtkPointWidget                        GetPosition                       307  3
+vtkPolyData                           GetUpdateExtent                   304  6
+vtkPolyDataMapper                     GetBounds                         307  6
+vtkPolygon                            ConvertEllipseToImplicit          307  5
+vtkPolygon                            FitEllipse                        307  6
+vtkPolyLine                           ConvertEllipseToImplicit          307  5
+vtkPolyLine                           EllipseToImplicit                 307  3
+vtkPolyLine                           FitEllipse                        307  6
+vtkProjectedPolyDataRayBounder        GetRayBounds                      301  2
+vtkProp3D                             GetBounds                         307  6
+vtkProp3D                             GetCenter                         307  3
+vtkProp3D                             GetOrientation                    307  3
+vtkProp3D                             GetOrientationWXYZ                307  4
+vtkProp3D                             GetXRange                         307  2
+vtkProp3D                             GetYRange                         307  2
+vtkProp3D                             GetZRange                         307  2
+vtkPropAssembly                       GetBounds                         307  6
+vtkProperty                           GetColor                          307  3
+vtkProp                               GetBounds                         307  6
+vtkPyramid                            GetEdgeArray                      304  2
+vtkPyramid                            GetFaceArray                      304  4
+vtkQuadricClustering                  GetNumberOfDivisions              304  3
+vtkRayCaster                          GetParallelIncrements             301  2
+vtkRayCaster                          GetParallelStartPosition          301  3
+vtkRectilinearGrid                    GetExtent                         304  6
+vtkRectilinearGrid                    GetPoint                          307  3
+vtkRecursiveSphereDirectionEncoder    GetDecodedGradient                301  3
+vtkRenderer                           ComputeVisiblePropBounds          307  6
+vtkScalarsToColors                    GetColor                          307  3
+vtkScalarsToColors                    GetRange                          307  2
+vtkShortArray                         GetValueRange                     305  2
+vtkSignedCharArray                    GetValueRange                     30D  2
+vtkSliderRepresentation3D             GetBounds                         307  6
+vtkSphereHandleRepresentation         GetBounds                         307  6
+vtkSphereRepresentation               GetCenter                         307  3
+vtkSphereWidget                       GetCenter                         307  3
+vtkSphericalDirectionEncoder          GetDecodedGradient                301  3
+vtkSplineWidget                       GetHandlePosition                 307  3
+vtkStreamer                           GetStartPosition                  307  3
+vtkStreamingDemandDrivenPipeline      GetWholeExtent                    304  6
+vtkStructuredGrid                     GetDimensions                     304  3
+vtkStructuredGrid                     GetExtent                         304  6
+vtkStructuredGrid                     GetPoint                          307  3
+vtkStructuredGrid                     GetScalarRange                    307  2
+vtkStructuredPointsGeometryFilter     GetExtent                         304  6
+vtkSynchronizedTemplates3D            GetExecuteExtent                  304  6
+vtkTetra                              GetEdgeArray                      304  2
+vtkTetra                              GetFaceArray                      304  3
+vtkTextActor3D                        GetBounds                         307  6
+vtkTransform                          GetDoublePoint                    307  4
+vtkTransform                          GetOrientation                    307  3
+vtkTransform                          GetOrientationWXYZ                307  4
+vtkTransform                          GetPoint                          307  4
+vtkTransform                          GetPosition                       307  3
+vtkTransform                          GetScale                          307  3
+vtkTypeInt64Array                     GetValueRange                     30B  2
+vtkTypeInt64Array                     GetValueRange                     30C  2
+vtkTypeUInt64Array                    GetValueRange                     31B  2
+vtkTypeUInt64Array                    GetValueRange                     31C  2
+vtkUnsignedCharArray                  GetValueRange                     313  2
+vtkUnsigned__Int64Array               GetValueRange                     31C  2
+vtkUnsignedIntArray                   GetValueRange                     314  2
+vtkUnsignedLongArray                  GetValueRange                     316  2
+vtkUnsignedLongLongArray              GetValueRange                     31B  2
+vtkUnsignedShortArray                 GetValueRange                     315  2
+vtkUnstructuredGrid                   GetUpdateExtent                   304  6
+vtkViewport                           GetCenter                         307  2
+vtkViewport                           GetOrigin                         304  2
+vtkViewport                           GetSize                           304  2
+vtkViewRays                           GetParallelIncrements             301  2
+vtkViewRays                           GetParallelStartPosition          301  3
+vtkVolume                             GetBounds                         307  6
+vtkVolumeMapper                       GetBounds                         307  6
+vtkVoxel                              GetEdgeArray                      304  2
+vtkVoxel                              GetFaceArray                      304  4
+vtkWarpLens                           GetCenter                         307  2
+vtkWedge                              GetEdgeArray                      304  2
+vtkWedge                              GetFaceArray                      304  4
+vtkWidgetRepresentation               GetBounds                         307  6
+vtkWin32OpenGLRenderWindow            GetPosition                       304  2
+vtkWin32OpenGLRenderWindow            GetSize                           304  2
+vtkWindow                             GetPosition                       304  2
+vtkWindow                             GetSize                           304  2
+vtkWindowLevelLookupTable             GetMaximumTableValue              307  4
+vtkWindowLevelLookupTable             GetMinimumTableValue              307  4
+vtkXImageWindow                       GetPosition                       304  2
+vtkXImageWindow                       GetSize                           304  2
+vtkXRenderWindow                      GetPosition                       304  2
+vtkXRenderWindow                      GetScreenSize                     304  2
+vtkXRenderWindow                      GetSize                           304  2
+vtkXYPlotActor                        GetPlotColor                      307  3
index 11e33cd8722b0405b4d9c38dfa9e43c9388290ed..784bb0728f70ed5426496c17fe5c8fde4fc4369e 100644 (file)
 #include <stdlib.h>
 #include <string.h>
 #include <ctype.h>
+#include "vtkConfigure.h"
 #include "vtkParse.h"
 #include "vtkParseType.h"
+#include "vtkParseMain.h"
 #include "vtkWrapIDL.h"
 #include "vtkWrap.h"
 
@@ -54,9 +56,11 @@ char* Copyright[] = {
 
 #define bs 12288
 
+HierarchyInfo *hierarchyInfo = NULL;
 int numberOfWrappedFunctions = 0;
 FunctionInfo *wrappedFunctions[1000];
 extern FunctionInfo *currentFunction;
+char *EmptyString = "";
 
 
 static void add_to_sig(char *sig, const char *add, int *i)
@@ -414,14 +418,16 @@ void output_type(char* result, int *currPos, int i, ValueInfo* aType, const char
     }
   }
   
-  if(IsChar(aType)) {
-    if(IsString(aType)) {
-      if(IsReturnArg(i))
-        add_to_sig(result,"const ",currPos);
-      add_to_sig(result,"char",currPos);
+  if(IsString(aType)) {
+    if(IsReturnArg(i))
+      add_to_sig(result,"const ",currPos);
+    if(strcmp(aType->Class, "vtkStdString") == 0) {
+      add_to_sig(result,"vtkStdString",currPos);
     } else {
-      add_to_sig(result,"CORBA::Char",currPos);            
+      add_to_sig(result,"char",currPos);
     }
+  } else if(IsChar(aType)) {
+    add_to_sig(result,"CORBA::Char",currPos);      
   }
   
   if(IsBoolean(aType)) {
@@ -438,7 +444,9 @@ void output_type(char* result, int *currPos, int i, ValueInfo* aType, const char
   }
   
   if(IsArray(aType) || IsPtr(aType) || IsClass(aType) || IsString(aType)) {
-    add_to_sig(result,"*",currPos);
+    if(strcmp(aType->Class, "vtkStdString") != 0) {
+      add_to_sig(result,"*",currPos);
+    }
   }
 }
 
@@ -743,8 +751,8 @@ void get_signature(const char* num, ClassInfo *data)
       ret = 1;
   }
   
-  for (j = 0; j < currentFunction->NumberOfArguments; j++) {
-    aArgVal = currentFunction->Arguments[j];
+  for (j = 0; j < vtkWrap_CountWrappedParameters(currentFunction); j++) {
+    aArgVal = currentFunction->Parameters[j];
     if(IsFunction(aArgVal))
       ret == 1;
     if(IsClass(aArgVal) && ret == 0) {
@@ -762,6 +770,7 @@ void get_signature(const char* num, ClassInfo *data)
     ret = 1;
   }
   
+
   if(ret) {
     add_to_sig(result,"//\n",&currPos);
     /*currentFunction->Signature = (const char*)realloc((void*)currentFunction->Signature,
@@ -802,8 +811,8 @@ void get_signature(const char* num, ClassInfo *data)
   add_to_sig(result,"* TObj;\n",&currPos);
   add_to_sig(result,"  TObj myObj;\n",&currPos);
   
-  for (i = 0; i < currentFunction->NumberOfArguments; i++) {
-    aArgVal = currentFunction->Arguments[i];
+  for (i = 0; i < vtkWrap_CountWrappedParameters(currentFunction); i++) {
+    aArgVal = currentFunction->Parameters[i];
     //output_typedef(result, &currPos, i, currentFunction->ArgTypes[i],
     //               currentFunction->ArgClasses[i]);
     output_typedef(result, &currPos, i, aArgVal, currentFunction->ArgClasses[i]);
@@ -821,13 +830,13 @@ void get_signature(const char* num, ClassInfo *data)
   }
   add_to_sig(result,")",&currPos);
   add_to_sig(result,"(TObj theObj",&currPos);  
-  for (i = 0; i < currentFunction->NumberOfArguments; i++) {
+  for (i = 0; i < vtkWrap_CountWrappedParameters(currentFunction); i++) {
     sprintf(buf,", TParam%d theParam%d",i,i);
     add_to_sig(result,buf,&currPos);
   }
   add_to_sig(result,"):\n",&currPos);  
   add_to_sig(result,"  myObj(theObj)",&currPos);  
-  for (i = 0; i < currentFunction->NumberOfArguments; i++) {
+  for (i = 0; i < vtkWrap_CountWrappedParameters(currentFunction); i++) {
     sprintf(buf,", myParam%d(theParam%d)",i,i);
     add_to_sig(result,buf,&currPos);
   }
@@ -846,8 +855,8 @@ void get_signature(const char* num, ClassInfo *data)
   add_to_sig(result,"myObj->",&currPos);  
   add_to_sig(result,currentFunction->Name,&currPos);  
   add_to_sig(result,"(",&currPos);  
-  for (i = 0; i < currentFunction->NumberOfArguments; i++) {
-    aArgVal = currentFunction->Arguments[i];
+  for (i = 0; i < vtkWrap_CountWrappedParameters(currentFunction); i++) {
+    aArgVal = currentFunction->Parameters[i];
     if(i!=0)
       add_to_sig(result,", ",&currPos);  
     if(IsClass(aArgVal) && IsPtr(aArgVal)) {
@@ -895,23 +904,23 @@ void get_signature(const char* num, ClassInfo *data)
   /* print the arg list */
   add_to_sig(result,"(",&currPos);
 
-  for (i = 0; i < currentFunction->NumberOfArguments; i++) {
-    aArgVal = currentFunction->Arguments[i];
+  for (i = 0; i < vtkWrap_CountWrappedParameters(currentFunction); i++) {
+    aArgVal = currentFunction->Parameters[i];
     if( i != 0 ) {
       add_to_sig(result,", ",&currPos);          
     }
     /*    output_temp(result, &currPos, i, currentFunction->ArgTypes[i],
                 (char*)currentFunction->ArgClasses[i],
                 currentFunction->ArgCounts[i]);*/
-    output_temp(result, &currPos, i, aArgVal,  aArgVal->Class, currentFunction->NumberOfArguments);
+    output_temp(result, &currPos, i, aArgVal,  aArgVal->Class, vtkWrap_CountWrappedParameters(currentFunction));
   }
 
   add_to_sig(result,")",&currPos);
 #if defined(IDL_I_CC)
   add_to_sig(result," {\n",&currPos);
   add_to_sig(result,"  try {\n",&currPos);
-  for (i = 0; i < currentFunction->NumberOfArguments; i++) {
-    aArgVal = currentFunction->Arguments[i];
+  for (i = 0; i < vtkWrap_CountWrappedParameters(currentFunction); i++) {
+    aArgVal = currentFunction->Parameters[i];
     if(IsClass(aArgVal)) {
       sprintf(buf,"    PARAVIS_Base_i* i_temp%d = GET_SERVANT(temp%d);\n",i,i);
       add_to_sig(result,buf,&currPos);
@@ -1012,6 +1021,10 @@ void get_signature(const char* num, ClassInfo *data)
     add_to_sig(result,buf,&currPos);
     add_to_sig(result,"    ",&currPos); 
   }
+
+  if(IsArray(aRetVal) && IsUnsigned(aRetVal)) {
+    add_to_sig(result,"unsigned ",&currPos);
+  }
   
   if(IsFloat(aRetVal)) {
     if(IsArray(aRetVal)) {
@@ -1092,8 +1105,8 @@ void get_signature(const char* num, ClassInfo *data)
   add_to_sig(result,"*)",&currPos);
   add_to_sig(result,"getVTKObject()\n",&currPos);
   
-  for (i = 0; i < currentFunction->NumberOfArguments; i++) {
-    aArgVal = currentFunction->Arguments[i];
+  for (i = 0; i < vtkWrap_CountWrappedParameters(currentFunction); i++) {
+    aArgVal = currentFunction->Parameters[i];
     add_to_sig(result,"      , ",&currPos);
     
     //if(IsClass(currentFunction->ArgTypes[i]) && IsPtr(currentFunction->ArgTypes[i])) {
@@ -1159,8 +1172,8 @@ void get_signature(const char* num, ClassInfo *data)
     add_to_sig(result,");\n",&currPos);              
   }
     
-  for (i = 0; i < currentFunction->NumberOfArguments; i++) {
-    aArgVal = currentFunction->Arguments[i];
+  for (i = 0; i < vtkWrap_CountWrappedParameters(currentFunction); i++) {
+    aArgVal = currentFunction->Parameters[i];
     if(IsArray(aArgVal) && !IsVoid(aArgVal) && !IsString(aArgVal) && !IsClass(aArgVal)) {
       if (!IsIn(aArgVal)) {
         sprintf(buf,"    for(j_temp%d=0;j_temp%d<l_temp%d;j_temp%d++) {\n",i,i,i,i);
@@ -1266,7 +1279,8 @@ void get_signature(const char* num, ClassInfo *data)
       buf[j]=0;
       buf1[j]=0;
       if(strcmp(buf,buf1) == 0) {
-        ((char*)currentFunction->Signature)[0]='\0';
+        //((char*)currentFunction->Signature)[0]='\0';
+       currentFunction->Signature = EmptyString;
         return;
       }
     }
@@ -1373,7 +1387,6 @@ void outputFunction2(FILE *fp, ClassInfo *data)
         {
           sprintf(num,"_%d",j);
         }
-      
       get_signature(num,data);
     }
   /* create external type declarations for all object
@@ -1385,7 +1398,7 @@ void outputFunction2(FILE *fp, ClassInfo *data)
       theName = NULL;
       theType = 0;
       
-      for (i = theFunc->NumberOfArguments; i >= 0; i--)
+      for (i = vtkWrap_CountWrappedParameters(theFunc); i >= 0; i--)
         {
           if (i==0)/* return type */
             {
@@ -1395,7 +1408,7 @@ void outputFunction2(FILE *fp, ClassInfo *data)
             }
           else /* arg type */
             {
-              aArgVal = theFunc->Arguments[i-1];
+              aArgVal = theFunc->Parameters[i-1];
               //theType = theFunc->ArgTypes[i-1];
               //theName = (char*)theFunc->ArgClasses[i-1];
             }
@@ -1416,7 +1429,7 @@ void outputFunction2(FILE *fp, ClassInfo *data)
                     k = i+1;
                   else
                     k = 0;
-                  for (j = backFunc->NumberOfArguments; j >= k; j--)
+                  for (j = vtkWrap_CountWrappedParameters(backFunc); j >= k; j--)
                     {
                       if (j==0) /* return type */
                         {
@@ -1426,7 +1439,7 @@ void outputFunction2(FILE *fp, ClassInfo *data)
                         }
                       else /* arg type */
                         {
-                          aBackArgVal = backFunc->Arguments[j-1];
+                          aBackArgVal = backFunc->Parameters[j-1];
                           //backType = backFunc->ArgTypes[j-1];
                           //backName = (char*)backFunc->ArgClasses[j-1];
                         }
@@ -1553,9 +1566,9 @@ void outputFunction(FILE *fp, ClassInfo *data)
   //printf("#### Check %s\n", currentFunction->Name);
  
   /* check to see if we can handle the args */
-  for (i = 0; i < currentFunction->NumberOfArguments; i++)
+  for (i = 0; i < vtkWrap_CountWrappedParameters(currentFunction); i++)
     {
-      aArgVal = currentFunction->Arguments[i];
+      aArgVal = currentFunction->Parameters[i];
       /*printf("  Argument: %s ", vtkWrap_GetTypeName(aArgVal));
       if (vtkWrap_IsArray(aArgVal)) {
         printf("!!!! Argument %i is array\n", i);
@@ -1652,12 +1665,12 @@ void outputFunction(FILE *fp, ClassInfo *data)
   if (aRetVal % VTK_PARSE_BASE_TYPE == 0x316) args_ok = 0;
   
 
-  if (currentFunction->NumberOfArguments && 
+  if (vtkWrap_CountWrappedParameters(currentFunction) && 
       (currentFunction->ArgTypes[0] == 0x5000)
-      &&(currentFunction->NumberOfArguments != 0x1)) args_ok = 0;*/
+      &&(vtkWrap_CountWrappedParameters(currentFunction) != 0x1)) args_ok = 0;*/
 
   /* make sure we have all the info we need for array arguments in */
-  /*for (i = 0; i < currentFunction->NumberOfArguments; i++)
+  /*for (i = 0; i < vtkWrap_CountWrappedParameters(currentFunction); i++)
     {
     if (((currentFunction->ArgTypes[i] % VTK_PARSE_BASE_TYPE)/0x100 == 0x3)&&
         (currentFunction->ArgCounts[i] <= 0)&&
@@ -1689,7 +1702,7 @@ void outputFunction(FILE *fp, ClassInfo *data)
   }
   
   /* check for New() function */
-  if (!strcmp("New",currentFunction->Name) && currentFunction->NumberOfArguments == 0)
+  if (!strcmp("New",currentFunction->Name) && vtkWrap_CountWrappedParameters(currentFunction) == 0)
     {
       class_has_new = 1;
     }
@@ -1707,17 +1720,41 @@ void outputFunction(FILE *fp, ClassInfo *data)
 }
 
 /* print the parsed structures */
-void vtkParseOutput(FILE *fp, FileInfo *file_info)
+int main(int argc, char *argv[])
 {
-  int i;
+  OptionInfo *options;
+  FileInfo *file_info;
   ClassInfo *data;
+  FILE *fp;
+  int i;
+
+  /* get command-line args and parse the header file */
+  file_info = vtkParse_Main(argc, argv);
+
+  /* get the command-line options */
+  options = vtkParse_GetCommandLineOptions();
+
+  /* get the output file */
+  fp = fopen(options->OutputFileName, "w");
+
+  if (!fp)
+    {
+    fprintf(stderr, "Error opening output file %s\n", options->OutputFileName);
+    exit(1);
+    }
 
   /* get the main class */
-  data = file_info->MainClass;
+  if ((data = file_info->MainClass) == NULL)
+    {
+    fclose(fp);
+    exit(0);
+    }
 
-  // Do not wrap this class
-  //  if (strcmp(data->Name, "vtkVariant") == 0)
-  //  return;
+  /* get the hierarchy info for accurate typing */
+  if (options->HierarchyFileName)
+    {
+    hierarchyInfo = vtkParseHierarchy_ReadFile(options->HierarchyFileName);
+    }
 
 #if defined(IDL_I_HH)
   fprintf(fp, "// idl wrapper interface for %s object implementation\n//\n", data->Name);
@@ -1753,6 +1790,10 @@ void vtkParseOutput(FILE *fp, FileInfo *file_info)
   for (i = 0; i < data->NumberOfFunctions; i++)
     {
       currentFunction = data->Functions[i];
+#ifdef VTK_LEGACY_REMOVE
+      if(currentFunction->IsLegacy)
+       continue;
+#endif
       outputFunction(fp, data);
     }
   //printf("#### NbFunctions %i\n", numberOfWrappedFunctions);
@@ -1768,5 +1809,8 @@ void vtkParseOutput(FILE *fp, FileInfo *file_info)
 #else
   fprintf(fp,"\n#endif\n");
 #endif
-  return;
+
+  vtkParse_Free(file_info);
+
+  return 0;
 }
index 39b6b57804a47f528e00a2d4f5f6b62d70fae587..cda9c7ea994e102d99f9d087ef83f9d64ae5c135 100755 (executable)
@@ -17,6 +17,8 @@
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
+LIST(GET PARAVIEW_INCLUDE_DIRS 0 PARAVIEW_INCLUDE_DIR0)
+
 ADD_CUSTOM_COMMAND(
  OUTPUT vtkWrapIDL.h
  COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/create_header.py ${CMAKE_BINARY_DIR}
@@ -25,8 +27,9 @@ ADD_CUSTOM_COMMAND(
 
 ADD_CUSTOM_COMMAND(
  OUTPUT hints
- COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/create_hints.py ${PARAVIEW_LIBRARY_DIRS}
- DEPENDS ${PARAVIEW_LIBRARY_DIRS}/hints ${CMAKE_CURRENT_SOURCE_DIR}/hints_paravis
+ COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/create_hints.py ${PARAVIEW_LIBRARY_DIR0}
+# DEPENDS ${PARAVIEW_LIBRARY_DIR0}/hints ${CMAKE_CURRENT_SOURCE_DIR}/hints_paravis
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/hints ${CMAKE_CURRENT_SOURCE_DIR}/hints_paravis
 )
 
 SET(WRAP_IDL)
@@ -69,8 +72,8 @@ IF(EXISTS ${CMAKE_BINARY_DIR}/wrapfiles.txt)
   ENDIF(WINDOWS)
   ADD_CUSTOM_COMMAND(
    OUTPUT PARAVIS_Gen_${VAL}.idl
-   COMMAND ${vtkWrapIDL_EXEFILE} ${PARAVIEW_INCLUDE_DIRS}/${VAL}.h hints 0 PARAVIS_Gen_${VAL}.idl
-   DEPENDS vtkWrapIDL ${PARAVIEW_INCLUDE_DIRS}/${VAL}.h hints ${DEP}
+   COMMAND ${vtkWrapIDL_EXEFILE} -o PARAVIS_Gen_${VAL}.idl --hints hints ${PARAVIEW_INCLUDE_DIR0}/${VAL}.h
+   DEPENDS vtkWrapIDL ${PARAVIEW_INCLUDE_DIR0}/${VAL}.h hints ${DEP}
   )
 
  ENDFOREACH(STR ${WRAP_LIST_REG})
index 35e01b79cf138f3ba2535b01ef5348e5e2692612..4096204aa13c77ac70280df7504309ec3c6cde03 100644 (file)
@@ -44,10 +44,14 @@ SET(vtkWrapIDL_HH_CPPFLAGS
 SET(vtkWrapIDL_CC_CPPFLAGS
   -DIDL_I_CC
   )
+#VTN TODO:
+#IF(VTK_LEGACY_REMOVE)
+#  ADD_DEFINITIONS(-DVTK_PARSE_LEGACY_REMOVE)
+#ENDIF()
 
 INCLUDE(wrap.cmake)
 
-INCLUDE(${ParaView_CMAKE_DIR}/vtkClientServer.cmake)
+INCLUDE(${ParaView_CMAKE_DIR}/vtkWrapClientServer.cmake)
 VTK_WRAP_ClientServer(vtkEDFCutterCS vtkEDFCutter_SRCS ${GUI_ROOT_DIR}/include/salome/vtkEDFCutter.h)
 
 # Library sources
@@ -68,6 +72,8 @@ SET(dist_libPARAVIS_la_SOURCES
   PVGUI_Tools.cxx
   PVGUI_ParaViewSettingsPane.h
   PVGUI_ParaViewSettingsPane.cxx
+  PVGUI_MatplotlibMathTextUtilities.h
+  PVGUI_MatplotlibMathTextUtilities.cxx
   PV_I.h
   PARAVIS_Gen_i.hh
   PV_Events.h
@@ -155,6 +161,12 @@ ENDFOREACH(f ${PARAVIEW_INCLUDES} ${VTK_INCLUDES} ${PLATFORM_CPPFLAGS} ${PTHREAD
 SET_TARGET_PROPERTIES(PARAVIS PROPERTIES COMPILE_FLAGS "${flags}")
 SET_TARGET_PROPERTIES(PARAVIS PROPERTIES VERSION ${VERSION_INFO} SOVERSION ${SOVERSION_INFO})
 
+#FIND_PACKAGE(VTK 6.0 COMPONENTS vtkPVClientServerCoreCore vtkPVServerImplementationCore NO_MODULE)
+#SET(VTK_LIBS vtkPVClientServerCoreCore vtkPVServerImplementationCore)
+SET(VTK_LIBS)
+FIND_PACKAGE(ParaView COMPONENTS pqApplicationComponents NO_MODULE)
+SET(PARAVIEW_LIBS pqApplicationComponents)
+
 TARGET_LINK_LIBRARIES(PARAVIS 
   ${PLATFORM_LIBADD} ${PLATFORM_LDFLAGS}
   ${OMNIORB_LIBRARIES}
@@ -177,13 +189,18 @@ FOREACH(name ${bin_PROGRAMS})
     ${CMAKE_SOURCE_DIR}/src/ParaView/vtkParse.tab.c 
     ${CMAKE_SOURCE_DIR}/src/ParaView/vtkParsePreprocess.c
     ${CMAKE_SOURCE_DIR}/src/ParaView/vtkParseHierarchy.c
-    ${CMAKE_SOURCE_DIR}/src/ParaView/vtkParseMain.c
     ${CMAKE_SOURCE_DIR}/src/ParaView/vtkParseExtras.c
+    ${CMAKE_SOURCE_DIR}/src/ParaView/vtkParseMain.c
+    ${CMAKE_SOURCE_DIR}/src/ParaView/vtkParseData.c
+    ${CMAKE_SOURCE_DIR}/src/ParaView/vtkParseString.c
     ${CMAKE_SOURCE_DIR}/src/ParaView/vtkWrap.c
-    ${CMAKE_SOURCE_DIR}/src/ParaView/vtkWrapText.c
+#    ${CMAKE_SOURCE_DIR}/src/ParaView/vtkWrapText.c
     ${CMAKE_SOURCE_DIR}/idl/vtkWrapIDL.c)
   ADD_DEPENDENCIES(${name} generate_txt)
   
+  set_property(SOURCE ${CMAKE_SOURCE_DIR}/src/ParaView/vtkParseMain.c PROPERTY COMPILE_DEFINITIONS
+    VTK_PARSE_VERSION="${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}")
+
   SET(flags)
   FOREACH(f ${PARAVIEW_INCLUDES} ${VTK_INCLUDES} ${PLATFORM_CPPFLAGS} ${PTHREAD_CFLAGS} ${${name}_CPPFLAGS})
     SET(flags "${flags} ${f}")
diff --git a/src/PVGUI/PVGUI_MatplotlibMathTextUtilities.cxx b/src/PVGUI/PVGUI_MatplotlibMathTextUtilities.cxx
new file mode 100644 (file)
index 0000000..372b78f
--- /dev/null
@@ -0,0 +1,24 @@
+// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#include <PVGUI_MatplotlibMathTextUtilities.h>
+
+void PVGUI_MatplotlibMathTextUtilities::Disable() {
+  vtkMatplotlibMathTextUtilities::MPLMathTextAvailable = vtkMatplotlibMathTextUtilities::UNAVAILABLE;
+}
diff --git a/src/PVGUI/PVGUI_MatplotlibMathTextUtilities.h b/src/PVGUI/PVGUI_MatplotlibMathTextUtilities.h
new file mode 100644 (file)
index 0000000..8244cbd
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef _PVGUI_MatplotlibMathTextUtilities_h
+#define _PVGUI_MatplotlibMathTextUtilities_h
+
+#include <vtkMatplotlibMathTextUtilities.h>
+
+/*!
+Disable vtkMatplotlibMathTextUtilities. It conflicts with SALOME Python console.
+
+To use, call PVGUI_MatplotlibMathTextUtilities::Disable() static method.
+
+This class is based on vtkMatplotlibMathTextUtilities VTK class.
+*/
+class PVGUI_MatplotlibMathTextUtilities : public vtkMatplotlibMathTextUtilities
+{
+public:
+  static void Disable();
+
+private:
+  PVGUI_MatplotlibMathTextUtilities();
+  ~PVGUI_MatplotlibMathTextUtilities();
+};
+
+#endif // !_PVGUI_MatplotlibMathTextUtilities_h
index 23649b9dc9a34605aa2f9993817722fa5b4f50d0..2d77ea12b26912d8e06261bdfb8f7893b9d1b292 100644 (file)
 #include <pqPythonDialog.h>
 #include <pqPythonManager.h>
 #include <pqPythonShell.h>
-#include <pqBrandPluginsLoader.h>
+//#include <pqBrandPluginsLoader.h>
 #include <pqLoadDataReaction.h>
 #include <vtkEventQtSlotConnect.h>
 #include <pqPythonScriptEditor.h>
 #include <pqPipelineRepresentation.h>
 #include <pqLookupTableManager.h>
 #include <pqDisplayColorWidget.h>
+#include <pqColorToolbar.h>
+#include <pqScalarBarVisibilityReaction.h>
+#include <pqStandardPropertyWidgetInterface.h>
+#include <pqMultiServerBehavior.h>
+#include <pqViewStreamingBehavior.h>
 
 #include <PARAVIS_version.h>
 
 #include <vtkPVConfig.h>
 
+#include <PVGUI_MatplotlibMathTextUtilities.h>
+
 #include CORBA_SERVER_HEADER(SALOME_ModuleCatalog)
 
 /*
  * collect.
  */
 
-#include <vtkCommonInstantiator.h>
-#include <vtkFilteringInstantiator.h>
-#include <vtkGenericFilteringInstantiator.h>
-#include <vtkIOInstantiator.h>
-#include <vtkImagingInstantiator.h>
-#include <vtkInfovisInstantiator.h>
-#include <vtkGraphicsInstantiator.h>
+//#include <vtkCommonInstantiator.h>
+//#include <vtkFilteringInstantiator.h>
+//#include <vtkGenericFilteringInstantiator.h>
+//#include <vtkIOInstantiator.h>
+//#include <vtkImagingInstantiator.h>
+//#include <vtkInfovisInstantiator.h>
+//#include <vtkGraphicsInstantiator.h>
 
-#include <vtkRenderingInstantiator.h>
-#include <vtkVolumeRenderingInstantiator.h>
-#include <vtkHybridInstantiator.h>
-#include <vtkParallelInstantiator.h>
+//#include <vtkRenderingInstantiator.h>
+//#include <vtkVolumeRenderingInstantiator.h>
+//#include <vtkHybridInstantiator.h>
+//#include <vtkParallelInstantiator.h>
 
 #include <pqAlwaysConnectedBehavior.h>
 #include <pqApplicationCore.h>
@@ -369,6 +376,9 @@ PVGUI_Module::~PVGUI_Module()
 */
 void PVGUI_Module::initialize( CAM_Application* app )
 {
+  //VTN: Disable conflict with python initialization for MatPlot.
+  PVGUI_MatplotlibMathTextUtilities::Disable();
+
   SalomeApp_Module::initialize( app );
 
   // Create ParaViS actions
@@ -416,7 +426,9 @@ void PVGUI_Module::initialize( CAM_Application* app )
 
     // * adds support for standard paraview views.
     pgm->addInterface(new pqStandardViewModules(pgm));
+    //VTN TODO Paraview 3.98.0: Unresolved symbol _ZN36pqStandardSummaryPanelImplementationC1EP7QObject
     pgm->addInterface(new pqStandardSummaryPanelImplementation(pgm));
+    pgm->addInterface(new pqStandardPropertyWidgetInterface(pgm));
 
     // Load plugins distributed with application.
     pqApplicationCore::instance()->loadDistributedPlugins();
@@ -442,6 +454,8 @@ void PVGUI_Module::initialize( CAM_Application* app )
     new pqPersistentMainWindowStateBehavior(aDesktop);
     new pqObjectPickingBehavior(aDesktop);
     new pqCollaborationBehavior(this);
+    new pqMultiServerBehavior(this);
+    new pqViewStreamingBehavior(this);
 
     // Setup quick-launch shortcuts.
     QShortcut *ctrlSpace = new QShortcut(Qt::CTRL + Qt::Key_Space, aDesktop);
@@ -564,11 +578,6 @@ void PVGUI_Module::onVariableChanged(pqVariableType t, const QString) {
   if( t == VARIABLE_TYPE_NONE )
     return;
 
-  pqDataRepresentation* data  = colorWidget->getRepresentation();
-
-  if( !data->getLookupTable() )
-    return;
-
   SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
   
   if(!aResourceMgr)
@@ -579,12 +588,26 @@ void PVGUI_Module::onVariableChanged(pqVariableType t, const QString) {
   if(!visible)
     return;
   
+  /*//VTN: getRepresentation is protected
+  pqDataRepresentation* data  = colorWidget->getRepresentation();
+
+  if( !data->getLookupTable() )
+    return;
+
   pqLookupTableManager* lut_mgr = pqApplicationCore::instance()->getLookupTableManager();
 
   if(lut_mgr) {
     lut_mgr->setScalarBarVisibility(data,visible);
   }
-  
+  */
+  pqColorToolbar* colorTooBar = qobject_cast<pqColorToolbar*>(colorWidget->parent());
+  if( !colorTooBar )
+    return;
+
+  pqScalarBarVisibilityReaction* scalarBarVisibility = colorTooBar->findChild<pqScalarBarVisibilityReaction *>();
+  if(scalarBarVisibility) {
+    scalarBarVisibility->setScalarBarVisibility(visible);
+  }
 }
 
 
@@ -677,6 +700,7 @@ bool PVGUI_Module::pvInit()
       return false;
       }
 
+    /* VTN: Looks like trash. For porting see branded_paraview_initializer.cxx.in
     // Not sure why this is needed. Andy added this ages ago with comment saying
     // needed for Mac apps. Need to check that it's indeed still required.
     QDir dir(QApplication::applicationDirPath());
@@ -696,7 +720,7 @@ bool PVGUI_Module::pvInit()
     plugin_string = "";
     plugin_list = plugin_string.split(';',QString::SkipEmptyParts);
     loader.loadPlugins(plugin_list, true); //quietly skip not-found plugins.
-
+    */
     // End of Initializer code
 
     vtkOutputWindow::SetInstance(PVGUI_OutputWindowAdapter::New());
index feba87a630336de171e2d1aecf7c5aba5b730193..168766a96b3dddf236b98bd60ef35405ac71d63d 100644 (file)
@@ -74,7 +74,7 @@
 #include <pqViewFrameActionsBehavior.h>
 #include <pqParaViewMenuBuilders.h>
 #include <pqCollaborationPanel.h>
-#include <pqMemoryInspector.h>
+#include <pqMemoryInspectorPanel.h>
 
 class ResizeHelper : public pqPVAnimationWidget
 {
@@ -240,13 +240,12 @@ void PVGUI_Module::setupDockWidgets()
   // Memory inspector dock
   QDockWidget* memoryInspectorDock = new QDockWidget(tr( "TTL_MEMORY_INSPECTOR" ), desk);
   memoryInspectorDock->setObjectName("memoryInspectorDock");
-  pqMemoryInspector* dockWidgetContents = new pqMemoryInspector();
+  pqMemoryInspectorPanel* dockWidgetContents = new pqMemoryInspectorPanel();
   dockWidgetContents->setObjectName("dockWidgetContents");
   memoryInspectorDock->setWidget(dockWidgetContents);
   desk->addDockWidget(Qt::RightDockWidgetArea, memoryInspectorDock);
   myDockWidgets[memoryInspectorDock] = false; // hidden by default
 
-
   // Setup the statusbar ...
   pqProgressWidget* aProgress = new pqProgressWidget(desk->statusBar());
   desk->statusBar()->addPermanentWidget(aProgress);
@@ -263,7 +262,6 @@ void PVGUI_Module::setupDockWidgets()
   collaborationPanelDock->hide();
   memoryInspectorDock->hide();
 
-
   // Setup quick-launch shortcuts.
   QShortcut *ctrlSpace = new QShortcut(Qt::CTRL + Qt::Key_Space, desk);
   QObject::connect(ctrlSpace, SIGNAL(activated()), pqApplicationCore::instance(), SLOT(quickLaunch()));
index 8c5c5734edd06534c2eae7e8ef68ee750ff0f63f..8ab4d009eb33129b3c7214adb6a6c75fdcb09fdd 100644 (file)
@@ -27,7 +27,6 @@
 #include <SALOME_Event.h>
 
 vtkStandardNewMacro(PVGUI_OutputWindowAdapter);
-vtkCxxRevisionMacro(PVGUI_OutputWindowAdapter, "$Revision$");
 
 
 
index 86c6e41c19c5c0a119a08c59be36626a0ca16e1e..7fb344516fc38acc606693e0638340232c2a1708 100644 (file)
@@ -34,7 +34,7 @@ class PVGUI_OutputWindowAdapter : public vtkOutputWindow
 {
 public:
   static PVGUI_OutputWindowAdapter *New();
-  vtkTypeRevisionMacro(PVGUI_OutputWindowAdapter, vtkOutputWindow);
+  vtkTypeMacro(PVGUI_OutputWindowAdapter, vtkOutputWindow);
 
   //! Returns the number of text messages received
   const unsigned int getTextCount();
index 5f7909df08a38fbda6fbe1480382b2f2db89b9bd..e2adf29860a176fb3e3c2507744e6226d5fc85bb 100644 (file)
@@ -30,7 +30,7 @@
 
 #include <QWidget>
 
-#include "pqComponentsExport.h"
+#include "vtkPVConfig.h"
 
 class pqOptionsContainer;
 class OptionsDialogForm;
index 3947abf0bf8d1e02326c4efcb2ab180ec9c2cdd7..dcc6f8dcbc993c4a8f0e6f7deae01e4a75a12a2e 100755 (executable)
@@ -17,6 +17,8 @@
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
+LIST(GET PARAVIEW_INCLUDE_DIRS 0 PARAVIEW_INCLUDE_DIR0)
+
 SET(WRAP_IDL_I_HH)
 SET(WRAP_IDL_I_CC)
 
@@ -61,8 +63,8 @@ IF(EXISTS ${CMAKE_BINARY_DIR}/wrapfiles.txt)
 
   ADD_CUSTOM_COMMAND(
    OUTPUT PARAVIS_Gen_${VAL}_i.hh
-   COMMAND ${vtkWrapIDL_HH_EXEFILE} ${PARAVIEW_INCLUDE_DIRS}/${VAL}.h ${CMAKE_BINARY_DIR}/idl/hints 0 PARAVIS_Gen_${VAL}_i.hh
-   DEPENDS vtkWrapIDL_HH ${PARAVIEW_INCLUDE_DIRS}/${VAL}.h ${CMAKE_BINARY_DIR}/idl/hints ${DEP_HH}
+   COMMAND ${vtkWrapIDL_HH_EXEFILE} -o PARAVIS_Gen_${VAL}_i.hh --hints ${CMAKE_BINARY_DIR}/idl/hints ${PARAVIEW_INCLUDE_DIR0}/${VAL}.h
+   DEPENDS vtkWrapIDL_HH ${PARAVIEW_INCLUDE_DIR0}/${VAL}.h ${CMAKE_BINARY_DIR}/idl/hints ${DEP_HH}
   ) 
 
   SET(vtkWrapIDL_CC_EXEFILE ${CMAKE_CURRENT_BINARY_DIR}/vtkWrapIDL_CC)
@@ -76,8 +78,8 @@ IF(EXISTS ${CMAKE_BINARY_DIR}/wrapfiles.txt)
 
   ADD_CUSTOM_COMMAND(
    OUTPUT PARAVIS_Gen_${VAL}_i.cc
-   COMMAND ${vtkWrapIDL_CC_EXEFILE} ${PARAVIEW_INCLUDE_DIRS}/${VAL}.h ${CMAKE_BINARY_DIR}/idl/hints 0 PARAVIS_Gen_${VAL}_i.cc
-   DEPENDS PARAVIS_Gen_${VAL}_i.hh vtkWrapIDL_CC ${PARAVIEW_INCLUDE_DIRS}/${VAL}.h ${CMAKE_BINARY_DIR}/idl/hints ${DEP_CC}
+   COMMAND ${vtkWrapIDL_CC_EXEFILE} -o PARAVIS_Gen_${VAL}_i.cc --hints ${CMAKE_BINARY_DIR}/idl/hints ${PARAVIEW_INCLUDE_DIR0}/${VAL}.h
+   DEPENDS PARAVIS_Gen_${VAL}_i.hh vtkWrapIDL_CC ${PARAVIEW_INCLUDE_DIR0}/${VAL}.h ${CMAKE_BINARY_DIR}/idl/hints ${DEP_CC}
   )
 
  ENDFOREACH(STR ${WRAP_LIST_REG})
index b2abdb78a05bde2f07e00ea26b46744242bad356..ac8bf1f2c12900905f9d7d6a1f9936412094c093 100644 (file)
@@ -51,7 +51,8 @@ A simple example:
 import re, os, new, sys
 from paravis import *
 
-
+# VTN: Avoid paraview.* instructions in this file.
+# It leads to problems during execution.
 
 def _wrap_property(proxy, smproperty):
     """ Internal function.
@@ -224,7 +225,7 @@ class Proxy(object):
             self.Observed = None
             self.ObserverTag = -1
             observed.RemoveObserver(tag)
-        if self.SMProxy and (self.SMProxy, self.Port) in _pyproxies:
+        if _pyproxies and self.SMProxy and (self.SMProxy, self.Port) in _pyproxies:
             del _pyproxies[(self.SMProxy, self.Port)]
 
     def InitializeFromProxy(self, aProxy, update=True):
@@ -956,14 +957,25 @@ class ArrayListProperty(VectorProperty):
            not isinstance(values, list):
             values = (values,)
         fullvalues = []
-        for i in range(len(values)):
-            val = self.ConvertValue(values[i])
-            fullvalues.append(val)
-            fullvalues.append('1')
+
+        # WARNING:
+        # The order of the two loops below are delibrately set in this way
+        # so that values passed in will take precedence.
+        # This is needed for backward compatibility of the
+        # property ElementBlocks for vtkExodusIIReader.
+        # If you attemp to change this, please verify that
+        # python state files for opening old .ex2 file (<=3.14) still works.
         for array in self.Available:
             if not values.__contains__(array):
                 fullvalues.append(array)
                 fullvalues.append('0')
+
+        for i in range(len(values)):
+            val = self.ConvertValue(values[i])
+            fullvalues.append(val)
+            fullvalues.append('1')
+
+
         i = 0
         for value in fullvalues:
             self.SMProperty.SetElement(i, value)
@@ -1915,9 +1927,6 @@ def Connect(ds_host=None, ds_port=11111, rs_host=None, rs_port=22221):
       creates a new connection to the data server on ds_host:ds_port and to the
       render server on rs_host: rs_port.
     """
-    global fromGUI
-    if fromGUI:
-        raise RuntimeError, "Cannot create a session through python. Use the GUI to setup the connection."
     if ds_host == None:
         session = vtkSMSession()
     elif rs_host == None:
@@ -1941,9 +1950,6 @@ def ReverseConnect(port=11111):
     option).
     The optional port specified the port to listen to.
     """
-    global fromGUI
-    if fromGUI:
-        raise RuntimeError, "Cannot create a connection through python. Use the GUI to setup the connection."
     session = vtkSMSessionClient()
     session.Connect("csrc://hostname:" + port)
     id = vtkProcessModule.GetProcessModule().RegisterSession(session)
@@ -1957,7 +1963,9 @@ def Disconnect(session=None):
     global MultiServerConnections
     global fromGUI
     if fromGUI:
-        raise RuntimeError, "Cannot disconnect through python. Use the GUI to disconnect."
+        # Let the UI know that we want to disconnect
+        ActiveConnection.Session.InvokeEvent('ExitEvent')
+        return
     if ActiveConnection and (not session or session == ActiveConnection.Session):
         session = ActiveConnection.Session
         if MultiServerConnections:
@@ -3001,3 +3009,6 @@ def GetConnectionAt(index):
 
 def GetNumberOfConnections():
    return len(MultiServerConnections)
+
+#VTN: Problem during execution
+#atexit.register(vtkPythonProgrammableFilter.DeleteGlobalPythonInterpretor)
index 78a391f5bdebc54254802a65edcec78e1f76dc8e..a9f26e1455b7624bbbab78dbaf1971b099dab57a 100644 (file)
@@ -32,13 +32,13 @@ import warnings
 from math import sqrt, sin, cos, radians
 from string import upper
 
-try:
-    import pvsimple as pv
-    # TODO(MZN): to be removed (issue with Point Sprite texture)
-    #import paravisSM as sm
-except:
-    import paraview.simple as pv
-    import paraview.servermanager as sm
+import pvsimple as pv
+#try:
+#    # TODO(MZN): to be removed (issue with Point Sprite texture)
+#    #import paravisSM as sm
+#except:
+#    import paraview.simple as pv
+#    import paraview.servermanager as sm
 
 
 # Constants
index 2a5d96a0d975ddc2a987e313c67cd5e57086a969..7412586b85ac9f8a897d616dfed6ab7a6cbfd3ee 100644 (file)
@@ -42,41 +42,86 @@ import paravisSM
 
 servermanager = paravisSM
 
-def _disconnect():
-    if servermanager.ActiveConnection:
-        servermanager.ProxyManager().UnRegisterProxies()
-        active_objects.view = None
-        active_objects.source = None
-        import gc
-        gc.collect()
-        servermanager.Disconnect()
+def enableMultiServer():
+    servermanager.enableMultiServer()
+
+def switchActiveConnection(newActiveConnection=None, ns=None):
+    if not ns:
+       ns = globals()
+    _remove_functions(ns)
+    servermanager.switchActiveConnection(newActiveConnection)
+    _add_functions(ns)
+
+def Disconnect(ns=None, force=True):
+    if servermanager.ActiveConnection and (force or servermanager.MultiServerConnections == None):
+       if ns:
+          _remove_functions(ns)
+       _remove_functions(globals())
+       if not servermanager.fromGUI:
+          servermanager.ProxyManager().DisableStateUpdateNotification()
+          servermanager.ProxyManager().UnRegisterProxies()
+       active_objects.view = None
+       active_objects.source = None
+       servermanager.Disconnect()
+       if not servermanager.fromGUI:
+          import gc
+          gc.collect()
 
 def Connect(ds_host=None, ds_port=11111, rs_host=None, rs_port=11111):
     """Creates a connection to a server. Example usage:
     > Connect("amber") # Connect to a single server at default port
     > Connect("amber", 12345) # Connect to a single server at port 12345
     > Connect("amber", 11111, "vis_cluster", 11111) # connect to data server, render server pair"""
-    _disconnect()
-    session = servermanager.Connect(ds_host, ds_port, rs_host, rs_port)
+    Disconnect(globals(), False)
+    connection = servermanager.Connect(ds_host, ds_port, rs_host, rs_port)
     _add_functions(globals())
 
-    tk =  servermanager.misc.TimeKeeper()
-    servermanager.ProxyManager().RegisterProxy("timekeeper", "tk", tk)
-    scene = AnimationScene()
-    scene.TimeKeeper = tk
-    return session
+    servermanager.ProxyManager().DisableStateUpdateNotification()
+    servermanager.ProxyManager().UpdateFromRemote()
+    tk = servermanager.ProxyManager().GetProxy("timekeeper", "TimeKeeper")
+    if not tk:
+       try:
+           tk = servermanager.misc.TimeKeeper()
+           servermanager.ProxyManager().RegisterProxy("timekeeper", "TimeKeeper", tk)
+       except AttributeError:
+           print "Error: Could not create TimeKeeper"
+
+    scene = servermanager.ProxyManager().GetProxy("animation", "AnimationScene")
+    if not scene:
+       try:
+           scene = AnimationScene()
+           scene.TimeKeeper = tk
+       except NameError:
+           print "Error: Could not create AnimationScene"
+
+    servermanager.ProxyManager().EnableStateUpdateNotification()
+    servermanager.ProxyManager().TriggerStateUpdate()
+
+    return connection
 
 def ReverseConnect(port=11111):
     """Create a reverse connection to a server.  Listens on port and waits for
     an incoming connection from the server."""
-    _disconnect()
-    session = servermanager.ReverseConnect(port)
+    Disconnect(globals(), False)
+    connection = servermanager.ReverseConnect(port)
     _add_functions(globals())
-    tk =  servermanager.misc.TimeKeeper()
-    servermanager.ProxyManager().RegisterProxy("timekeeper", "tk", tk)
-    scene = AnimationScene()
-    scene.TimeKeeper = tk
-    return session
+
+    servermanager.ProxyManager().DisableStateUpdateNotification()
+    servermanager.ProxyManager().UpdateFromRemote()
+    tk = servermanager.ProxyManager().GetProxy("timekeeper", "TimeKeeper")
+    if not tk:
+       tk = servermanager.misc.TimeKeeper()
+       servermanager.ProxyManager().RegisterProxy("timekeeper", "TimeKeeper", tk)
+
+    scene = servermanager.ProxyManager().GetProxy("animation", "AnimationScene")
+    if not scene:
+       scene = AnimationScene()
+       scene.TimeKeeper = tk
+
+    servermanager.ProxyManager().EnableStateUpdateNotification()
+    servermanager.ProxyManager().TriggerStateUpdate()
+
+    return connection
 
 def _create_view(view_xml_name):
     "Creates and returns a 3D render view."
@@ -85,7 +130,7 @@ def _create_view(view_xml_name):
       "my_view%d" % _funcs_internals.view_counter, view)
     active_objects.view = view
     _funcs_internals.view_counter += 1
-    
+
     tk = servermanager.ProxyManager().GetProxiesInGroup("timekeeper").values()[0]
     views = tk.Views
     if not view in views:
@@ -126,17 +171,19 @@ def OpenDataFile(filename, **extraArgs):
     """Creates a reader to read the give file, if possible.
        This uses extension matching to determine the best reader possible.
        If a reader cannot be identified, then this returns None."""
-    reader_factor = servermanager.ProxyManager().GetReaderFactory()
-    if  reader_factor.GetNumberOfRegisteredPrototypes() == 0:
-      reader_factor.RegisterPrototypes("sources")
     session = servermanager.ActiveConnection.Session
+    reader_factor = servermanager.vtkSMProxyManager.GetProxyManager().GetReaderFactory()
+    if reader_factor.GetNumberOfRegisteredPrototypes() == 0:
+      reader_factor.RegisterPrototypes(session, "sources")
     first_file = filename
     if type(filename) == list:
         first_file = filename[0]
     if not reader_factor.TestFileReadability(first_file, session):
-        raise RuntimeError, "File not readable: %s " % first_file
+        msg = "File not readable: %s " % first_file
+        raise RuntimeError, msg
     if not reader_factor.CanReadFile(first_file, session):
-        raise RuntimeError, "File not readable. No reader found for '%s' " % first_file
+        msg = "File not readable. No reader found for '%s' " % first_file
+        raise RuntimeError, msg
     prototype = servermanager.ProxyManager().GetPrototypeProxy(
       reader_factor.GetReaderGroup(), reader_factor.GetReaderName())
     xml_name = paraview.make_name_valid(prototype.GetXMLLabel())
@@ -154,9 +201,10 @@ def CreateWriter(filename, proxy=None, **extraArgs):
        data, it simply creates the writer and returns it."""
     if not filename:
        raise RuntimeError, "filename must be specified"
-    writer_factory = servermanager.ProxyManager().GetWriterFactory()
+    session = servermanager.ActiveConnection.Session
+    writer_factory = servermanager.vtkSMProxyManager.GetProxyManager().GetWriterFactory()
     if writer_factory.GetNumberOfRegisteredPrototypes() == 0:
-        writer_factory.RegisterPrototypes("writers")
+        writer_factory.RegisterPrototypes(session, "writers")
     if not proxy:
         proxy = GetActiveSource()
     if not proxy:
@@ -619,10 +667,15 @@ def _create_func(key, module):
             # Register pipeline objects with the time keeper. This is used to extract time values
             # from sources. NOTE: This should really be in the servermanager controller layer.
             if group == "sources":
-                tk = servermanager.ProxyManager().GetProxiesInGroup("timekeeper").values()[0]
-                sources = tk.TimeSources
-                if not px in sources:
-                    sources.append(px)
+                has_tk = True
+                try:
+                    tk = servermanager.ProxyManager().GetProxiesInGroup("timekeeper").values()[0]
+                except IndexError:
+                    has_tk = False
+                if has_tk:
+                    sources = tk.TimeSources
+                    if not px in sources:
+                        sources.append(px)
 
                 active_objects.source = px
         except servermanager.MissingRegistrationInformation:
@@ -655,8 +708,9 @@ def _func_name_valid(name):
     return valid
 
 def _add_functions(g):
-    for m in [servermanager.filters, servermanager.sources,
-              servermanager.writers, servermanager.animation]:
+    activeModule = servermanager.ActiveConnection.Modules
+    for m in [activeModule.filters, activeModule.sources,
+              activeModule.writers, activeModule.animation]:
         dt = m.__dict__
         for key in dt.keys():
             cl = dt[key]
@@ -665,6 +719,19 @@ def _add_functions(g):
                     g[key] = _create_func(key, m)
                     exec "g[key].__doc__ = _create_doc(m.%s.__doc__, g[key].__doc__)" % key
 
+def _remove_functions(g):
+    list = []
+    if servermanager.ActiveConnection:
+       list = [m for m in dir(servermanager.ActiveConnection.Modules) if m[0] != '_']
+
+    for m in list:
+        dt = servermanager.ActiveConnection.Modules.__dict__[m].__dict__
+        for key in dt.keys():
+            cl = dt[key]
+            if not isinstance(cl, str) and g.has_key(key):
+                g.pop(key)
+                #print "remove %s function" % key
+
 def GetActiveView():
     """Returns the active view."""
     return active_objects.view
@@ -878,9 +945,12 @@ def LoadDistributedPlugin(pluginname, remote=True, ns=None):
     information known about plugins distributed with ParaView to locate the
     shared library for the plugin to load. Raises a RuntimeError if the plugin
     was not found."""
-    plm = servermanager.ProxyManager().GetSession().GetPluginManager()
+    if not servermanager.ActiveConnection:
+        raise RuntimeError, "Cannot load a plugin without a session."
+    plm = servermanager.vtkSMProxyManager.GetProxyManager().GetPluginManager()
     if remote:
-        info = plm.GetRemoteInformation()
+        session = servermanager.ActiveConnection.Session
+        info = plm.GetRemoteInformation(session)
     else:
         info = plm.GetLocalInformation()
     for cc in range(0, info.GetNumberOfPlugins()):
@@ -888,15 +958,63 @@ def LoadDistributedPlugin(pluginname, remote=True, ns=None):
             return LoadPlugin(info.GetPluginFileName(cc), remote, ns)
     raise RuntimeError, "Plugin '%s' not found" % pluginname
 
+def GetLayouts():
+    """Returns the layout proxies on the active session.
+    Layout proxies are used to place views in a grid."""
+    return servermanager.ProxyManager().GetProxiesInGroup("layouts")
+
+def GetLayout(view=None):
+    """Return the layout containing the give view, if any.
+    If no view is specified, active view is used.
+    """
+    if not view:
+        view = GetActiveView()
+    if not view:
+        raise RuntimeError, "No active view was found."
+    layouts = GetLayouts()
+    for layout in layouts.values():
+        if layout.GetViewLocation(view) != -1:
+            return layout
+    return None
+
+
+def SelectCells(query=None, proxy=None):
+    """Select cells satisfying the query. If query is None, then all cells are
+       selected. If proxy is None, then the active source is used."""
+    if not proxy:
+        proxy = GetActiveSource()
+    if not proxy:
+        raise RuntimeError, "No active source was found."
+
+    if not query:
+        # This ends up being true for all cells.
+        query = "id >= 0"
+
+    # Note, selSource is not registered with the proxy manager.
+    selSource = servermanager.sources.SelectionQuerySource()
+    selSource.FieldType = "CELL"
+    selSource.QueryString = str(query)
+    proxy.SMProxy.SetSelectionInput(proxy.Port, selSource.SMProxy, 0)
+    return selSource
+
+def ClearSelection(proxy=None):
+    """Clears the selection on the active source."""
+    if not proxy:
+        proxy = GetActiveSource()
+    if not proxy:
+        raise RuntimeError, "No active source was found."
+    proxy.SMProxy.SetSelectionInput(proxy.Port, None, 0)
 
 class ActiveObjects(object):
     """This class manages the active objects (source and view). The active
     objects are shared between Python and the user interface. This class
     is for internal use. Use the Set/Get methods for setting and getting
     active objects."""
-    def __get_selection_model(self, name):
+    def __get_selection_model(self, name, session=None):
         "Internal method."
-        pxm = servermanager.ProxyManager()
+        if session and not servermanager.ActiveConnection.Session.IsSame(session):
+            raise RuntimeError, "Try to set an active object with invalid active connection."
+        pxm = servermanager.ProxyManager(session)
         model = pxm.GetSelectionModel(name)
         if not model:
             model = servermanager.vtkSMProxySelectionModel()
@@ -905,10 +1023,12 @@ class ActiveObjects(object):
 
     def set_view(self, view):
         "Sets the active view."
-        active_view_model = self.__get_selection_model("ActiveView") 
+        active_view_model = self.__get_selection_model("ActiveView")
         if view:
+            active_view_model = self.__get_selection_model("ActiveView", view.GetSession())
             active_view_model.SetCurrentProxy(view.SMProxy, 0)
         else:
+            active_view_model = self.__get_selection_model("ActiveView")
             active_view_model.SetCurrentProxy(None, 0)
 
     def get_view(self):
@@ -918,11 +1038,13 @@ class ActiveObjects(object):
 
     def set_source(self, source):
         "Sets the active source."
-        active_sources_model = self.__get_selection_model("ActiveSources") 
+        active_sources_model = self.__get_selection_model("ActiveSources")
         if source:
             # 3 == CLEAR_AND_SELECT
+            active_sources_model = self.__get_selection_model("ActiveSources", source.GetSession())
             active_sources_model.SetCurrentProxy(source.SMProxy, 3)
         else:
+            active_sources_model = self.__get_selection_model("ActiveSources")
             active_sources_model.SetCurrentProxy(None, 3)
 
     def __convert_proxy(self, px):
@@ -1037,10 +1159,10 @@ def SaveTrace(fileName):
     paravisSM.myParavis.SaveTrace(fileName)
 
 
-_add_functions(globals())
-
 if not servermanager.ActiveConnection:
     Connect()
+else:
+    _add_functions(globals())
 
 def ImportFile(theFileName):
     paravisSM.ImportFile(theFileName)
index d64e2ad9a424e8746141995b1398667a486837c5..a6c44384643e91c14e63d90f9b2b3e175f3ee5dc 100644 (file)
@@ -373,8 +373,8 @@ static void yy_fatal_error (yyconst char msg[]  );
         *yy_cp = '\0'; \
         (yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 247
-#define YY_END_OF_BUFFER 248
+#define YY_NUM_RULES 173
+#define YY_END_OF_BUFFER 174
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -382,241 +382,149 @@ struct yy_trans_info
         flex_int32_t yy_verify;
         flex_int32_t yy_nxt;
         };
-static yyconst flex_int16_t yy_accept[1956] =
+static yyconst flex_int16_t yy_accept[1116] =
     {   0,
-        0,    0,  248,  246,  216,  216,  245,  246,  245,  245,
-      246,  245,  245,  245,  245,  245,  245,  245,  213,  212,
-      245,  245,  245,  245,  208,  208,  208,  208,  208,  208,
-      243,  246,  244,  245,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,  245,  216,   11,   11,   15,  245,  246,
-      238,    0,   16,    0,  229,  235,  230,    0,    0,    0,
-      192,  193,    0,    0,    0,    0,    0,  227,    0,  223,
-      225,  224,  226,  221,    0,    1,   13,  228,  209,  211,
-        0,    0,    0,  212,  212,  212,  242,  219,  239,  237,
-
-      240,  222,  208,  208,  208,  208,  208,  208,  208,  208,
-      214,    0,  232,  208,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  208,  208,  208,  142,  208,  208,
-      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  231,  236,    0,   11,   15,    0,
-        0,   15,   15,   15,   15,   12,    0,   16,  233,   17,
-       17,    0,    0,    0,    0,    0,    0,  220,  241,   13,
-      209,  209,  209,  211,  211,  210,    0,  212,  217,  218,
-      208,  208,  208,    0,  208,  208,  215,  208,  208,  208,
-
-      140,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  208,  208,  208,   98,  208,  208,
-      208,  208,  130,  144,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  208,  208,  208,  208,  146,  234,
-       12,   15,   15,   12,   12,   12,   12,    0,    0,    0,
-        0,    0,    0,    0,    0,  209,  211,  210,  210,    0,
-      212,  208,  208,  208,  206,  205,  208,  208,  208,  208,
-      208,  137,  208,  208,  102,   93,  208,  208,  208,  208,
-      208,  208,  115,  208,  208,  208,  208,  208,    0,  208,
-
-      208,  208,  208,   88,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-        0,  208,  208,  208,  208,  208,  208,  208,  208,  101,
-      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  208,   12,   12,   12,   12,   15,
-       12,   12,   12,   12,    0,    0,    0,    0,    0,    0,
-      211,    0,  212,  208,  208,  208,  206,  205,  205,  205,
-      205,  205,  205,  208,  208,  208,  208,  208,  208,  149,
-        0,  208,  208,  110,  150,  118,  208,  208,  208,  208,
-      208,   26,  208,  208,    0,    0,    0,  208,  208,  208,
-
-      208,  208,    0,  208,  208,  208,  208,  208,  208,  208,
-      208,  208,  143,  208,  208,  208,  208,  208,  208,   69,
-      208,  208,  208,  208,  208,    0,  208,  208,  208,  208,
-      208,  116,  208,  129,  208,    0,    0,  208,  208,  208,
-      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,   12,   12,   12,   12,   15,   12,   12,
-       12,    2,    3,    0,    0,    0,    0,    0,  190,  211,
-        0,  212,  208,  208,  208,  205,  205,  205,  205,  199,
-      208,  208,  208,  141,  148,    0,    0,  208,  208,    0,
-        0,  191,  208,  131,   25,  208,  208,  124,  121,  122,
-
-        0,    0,    0,    0,  208,  208,  208,  208,  208,    0,
-        0,    0,    0,    0,  208,  208,  208,  208,  208,  208,
-      208,  145,  208,  208,  208,  208,  112,  208,  208,    0,
-      208,  208,  208,  208,  100,  103,  208,  123,    0,    0,
-        0,  208,  111,  208,  208,  208,    0,  208,  208,    0,
-        0,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  208,  208,  147,   12,   12,   12,
-        2,    3,   15,   12,   12,   12,    2,    3,    0,    0,
-        0,    0,    0,  211,    0,  212,  208,  208,  208,  205,
-      205,  205,  205,  196,   18,  208,   31,    0,    0,  208,
-
-      208,    0,  208,  208,  208,    0,    0,    0,    0,    0,
-       86,  208,  208,  208,  201,    0,    0,    0,    0,    0,
-      208,   87,  208,  208,  208,  119,  208,  208,  200,  113,
-      208,    0,  208,  208,  208,    0,    0,    0,  208,  208,
-      208,  208,    0,  208,  208,  208,  208,  208,  104,  208,
-        0,    0,    0,    0,    0,  208,  127,  208,    0,  208,
-      117,    0,    0,    0,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  208,    0,   12,   12,   12,    2,
-        3,   15,   12,   12,   12,    0,    0,    0,    0,    0,
-
-      194,  195,  211,   18,   18,  197,  198,  105,  205,  205,
-      205,  205,  208,    0,  208,  208,    0,    0,  208,  208,
-        0,    0,    0,   20,  208,  208,  132,    0,    0,    0,
-        0,   86,    0,    0,    0,    0,  208,  208,  208,   67,
-      208,  208,    0,   87,    0,    0,    0,  208,    0,  208,
-      208,   50,  208,  208,  208,  120,    0,  208,  208,    0,
-      208,  138,  208,    0,    0,    0,   68,  208,  208,  109,
-        0,    0,    0,    0,    0,  208,  208,  208,  208,  208,
-      208,    0,    0,    0,    0,    0,  125,  126,    0,    0,
-        0,   22,   99,    0,    0,  139,  208,  208,  208,  208,
-
-      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-       12,   12,   12,   15,    5,   12,   12,    0,    0,    0,
-        0,   18,  205,  205,  205,  205,  208,    0,    0,  208,
-      208,    0,    0,  208,  208,    0,  208,  208,    0,    0,
-        0,    0,    0,    0,    0,   67,    0,    0,  208,  208,
-      208,    0,  208,  208,   97,  208,    0,    0,    0,   50,
-        0,    0,  208,  208,  208,    0,  208,  208,  208,  208,
-      208,  128,    0,  208,  114,    0,  208,  208,   68,    0,
-        0,    0,  208,  208,  208,  208,    0,    0,    0,    0,
-
-        0,  208,  208,   96,  208,  208,  208,    0,    0,    0,
-        0,    0,    0,    0,   21,    0,    0,    0,    0,  208,
-      208,  208,  208,  208,    0,    0,  208,  208,  208,  208,
-      208,  208,  208,  208,  152,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-        5,   12,   12,   15,    5,   12,   12,    0,    0,  205,
-       18,  177,  205,  208,    0,    0,  208,  208,    0,    0,
-       91,  208,    0,  135,  208,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   97,    0,  208,  208,  208,  208,
-      208,    0,  208,  208,  208,    0,    0,    0,    0,    0,
-
-        0,    0,    0,   24,  208,  208,  208,  208,  208,   85,
-      208,    0,  208,    0,  208,    0,  208,  208,    0,    0,
-        0,    0,  208,  208,  208,  208,    0,    0,   96,    0,
-        0,  208,   92,    0,  208,  208,   84,  208,  208,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  208,  208,  208,  208,  208,    0,  208,  208,
-      208,  208,  208,  208,  208,  208,   19,  208,  208,  208,
-      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-      208,    5,   12,   12,   15,   12,   12,    0,    4,  205,
-      205,  208,    0,    0,  208,  208,   91,    0,  208,    0,
-
-      208,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   48,  208,  208,  208,  208,  208,  208,
-       95,   24,    0,    0,    0,    0,    0,   85,    0,  208,
-      208,   49,  208,  208,    0,  208,  208,    0,  208,    0,
-      208,    0,  208,  208,    0,    0,    0,    0,  208,  208,
-       66,  208,    0,   92,    0,    0,   84,    0,  208,  208,
-      208,    0,  208,  208,   65,  133,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  208,  208,
-       94,  208,  208,    0,  208,  208,  208,  208,  154,  208,
-      208,  208,    0,    0,  208,  153,  208,  208,  208,  208,
-
-      208,  208,  208,  208,  180,  208,  208,  208,  208,  208,
-      208,   12,   12,   15,   12,   12,    0,  205,  205,  208,
-        0,    0,  208,  208,    0,   90,  134,    0,    0,    0,
-        0,   48,    0,    0,    0,    0,    0,    0,   95,    0,
-      208,  208,  208,  208,  208,  208,  208,  208,    0,  208,
-      208,    0,    0,   49,    0,    0,    0,    0,  208,  208,
-        0,  208,  208,  208,  208,  208,   77,    0,  208,    0,
-      208,    0,  106,  208,    0,    0,   66,    0,  208,  208,
-        0,  208,  208,    0,    0,    0,    0,    0,   65,  208,
-      208,  208,  208,  208,    0,  208,  201,  200,    0,    0,
-
-        0,    0,   94,    0,    0,  208,   89,    0,  208,  208,
-       76,  208,    0,  208,  204,  208,  208,  208,  208,  208,
-        0,   19,  208,  208,  208,  208,  202,  208,  182,  184,
-      186,  175,  208,  208,  208,  208,  181,  208,  208,  208,
-       12,   12,   15,   12,   12,    0,  205,  205,  207,    0,
-        0,   30,  208,   90,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  208,  208,   82,  208,
-      208,  208,   78,  208,  208,  208,    0,    0,    0,    0,
-        0,    0,    0,   77,   81,  208,  208,  208,  208,  208,
-       80,    0,  208,    0,  107,    0,  208,  208,    0,    0,
-
-        0,    0,  208,  208,  208,   58,    0,    0,    0,    0,
-        0,    0,   29,   79,  208,   83,  208,  208,    0,    0,
-       89,    0,    0,   76,    0,  208,  208,  208,    0,  208,
-      208,   57,    0,    0,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  208,  183,  185,  187,  208,  208,
-      208,   12,   12,   15,   12,   12,   12,   12,   12,    0,
-      205,  205,   30,    0,  208,    0,    0,    0,   82,    0,
-        0,    0,   78,    0,    0,    0,  208,  208,  208,   63,
-      208,    0,  208,   59,  208,  208,   81,    0,    0,    0,
-
-        0,    0,   80,    0,  208,  208,  208,   47,  208,  208,
-        0,  208,  208,    0,    0,    0,   58,   62,  208,   61,
-        0,  208,   29,   79,    0,   83,    0,    0,    0,  208,
-       60,   46,   64,    0,    0,    0,    0,    0,    0,   57,
-      208,  208,  208,  208,  208,    0,  208,    0,   23,  208,
-      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  208,  208,  208,  188,  189,  208,
-      208,  208,  208,   12,   12,   12,   12,   12,   14,   14,
-       14,   14,   12,   12,   12,   12,   12,    0,  205,  178,
-        0,   28,    0,    0,    0,    0,   63,    0,    0,   59,
-
-        0,    0,  208,  208,   74,  208,  208,   70,  208,    0,
-        0,    0,   47,    0,    0,   73,  208,  208,    0,  208,
-      208,   72,    0,  108,  208,   62,    0,   61,    0,  208,
-      208,    0,   60,   46,   64,  208,    0,  208,    0,    0,
-        0,    0,    0,    0,    0,   27,   71,  208,   75,  208,
-      208,  160,  208,  208,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,   12,   12,   12,   12,   12,   14,   14,
-       14,   14,   14,   14,   14,   14,   12,   12,   12,   12,
-        6,  205,   28,    0,    0,   74,    0,    0,   70,    0,
-
-      208,  208,   55,  208,    0,  208,   51,   73,    0,    0,
-        0,    0,   72,  208,  208,  208,   39,  136,    0,    0,
-       54,   53,    0,    0,  208,  208,  202,   27,   71,    0,
-       75,    0,    0,    0,  208,   52,   38,   56,  208,  208,
-      208,  208,  208,  208,  208,  208,  208,  208,  157,  208,
-      208,  208,  208,  208,  208,  208,  208,  203,  208,  208,
-       12,   12,   12,   12,    6,   14,   14,   12,   12,   12,
-       12,    6,  205,    0,    0,   55,    0,    0,   51,   44,
-      208,   40,  208,    0,    0,    0,   39,   43,  208,   42,
-        0,  208,   54,   53,    0,    0,   41,   45,    0,   52,
-
-       38,   56,  208,    0,  208,  208,  208,  208,  159,  156,
-      208,  208,  208,  208,  170,  158,  155,  208,  208,  208,
-      208,  169,  208,  208,  208,   12,   12,   12,   12,    6,
-       12,   12,   12,   12,  179,   44,    0,   40,    0,  208,
-      208,   43,    0,   42,    0,  208,  208,   41,   45,    0,
-        0,  208,  208,  208,  208,  208,  165,  166,  167,  168,
-      161,  162,  163,  164,  208,  208,  208,   12,   12,   12,
-       12,   12,   12,   12,   12,    0,    0,   36,   32,    0,
-        0,   35,   34,    0,    0,   33,   37,  208,  208,  208,
-      208,  208,  208,   12,   12,   12,   12,   10,   12,   12,
-
-       12,   36,   32,   35,   34,   33,   37,  173,  208,  151,
-      176,  208,  208,   10,   12,   12,   12,   10,   12,    8,
-        9,  208,  208,  208,   10,   12,    8,    9,   12,    8,
-        9,  208,  208,  208,   12,    8,    9,   12,  208,  208,
-      172,   12,    7,  208,  208,    7,    7,  208,  208,    7,
-      208,  171,  208,  174,    0
+        0,    0,  174,  172,  142,  143,  143,  171,  172,  171,
+      171,  172,  171,  171,  171,  171,  171,  171,  171,  140,
+      139,  171,  171,  171,  171,  133,  133,  133,  133,  133,
+      133,  169,  172,  170,  171,  133,  133,  133,  133,  133,
+      133,  133,  133,  133,  133,  133,  133,  133,  133,  133,
+      133,  133,  133,  133,  171,  142,   11,   11,   14,  171,
+      172,  142,  164,    0,   15,    0,  157,  161,  158,    0,
+        0,    0,  116,  117,    0,    0,    0,    0,  155,  151,
+      153,  152,  154,  149,  147,    0,  134,    1,   13,  156,
+      135,  138,    0,    0,  139,  139,  139,  168,  146,  165,
+
+      163,  166,  150,  133,  133,  133,  133,  133,  133,  133,
+      133,  141,    0,  160,  133,  133,  133,  133,  133,  133,
+      133,  133,  133,  133,  133,  133,  133,  133,  133,  133,
+      133,  133,  133,  133,  133,  133,  133,   70,  133,  133,
+      133,  133,  133,  133,  133,  133,  133,  133,  133,  133,
+      133,  133,  133,  133,  133,  159,  162,  142,   11,   14,
+        0,    0,   14,   14,   12,    0,   15,   16,   16,    0,
+        0,    0,    0,    0,  148,  167,  134,  134,   13,  135,
+      135,  138,  138,    0,  136,  137,  144,  145,  133,  133,
+      133,  133,    0,  133,  133,  133,  133,  133,  133,  133,
+
+      133,  133,   68,  133,  133,  133,  133,  133,  133,  133,
+      133,  133,  133,  133,  133,  133,  133,  133,  133,   25,
+      133,  133,  133,  133,   58,   72,  133,  133,  133,  133,
+      133,  133,  133,  133,  133,  133,  133,  133,  133,  133,
+      133,  133,  133,  133,  133,  133,  133,  133,  133,  133,
+      133,   74,   12,   14,   12,   12,   12,   12,    0,    0,
+        0,    0,    0,    0,    0,  134,    0,  135,  136,  137,
+      133,  133,  133,  133,    0,  133,  133,  133,  133,  133,
+      133,  133,  133,  133,  133,  133,   66,  133,  133,   29,
+       24,  133,  133,  133,  133,  133,  133,   42,  133,  133,
+
+      133,  133,  133,  133,   23,  133,  133,  133,  133,  133,
+      133,  133,  133,  133,  133,  133,  133,  133,  133,  133,
+      133,    0,  133,  133,  133,  133,  133,  133,  133,  133,
+      133,   28,  133,  133,  133,  133,  133,  133,  133,  133,
+      133,  133,  133,  133,  133,  133,   12,   12,   12,   12,
+       12,   12,   12,   12,    0,    0,    0,    0,    0,  133,
+      133,  133,  133,  128,  133,  133,  133,  133,  133,  133,
+      133,  133,  133,  133,  133,  133,  133,  133,   77,   37,
+       78,   45,  133,  133,  133,  133,  133,   20,  133,  133,
+      133,  133,  133,  133,  133,   71,  133,  133,  133,  133,
+
+      133,  133,   22,  133,  133,  133,  133,  133,    0,  133,
+      133,  133,   61,  133,  133,   43,  133,   57,  133,  133,
+      133,  133,  133,  133,  133,  133,  133,  133,  133,  133,
+      133,  133,  133,  133,   12,   12,   12,   12,   12,   12,
+       12,    2,    3,    0,    0,    0,    0,    0,  133,  133,
+      133,  133,  128,  133,  133,  133,  121,  133,  133,  133,
+      133,  133,  133,  133,  133,   69,   76,  133,   59,   19,
+      133,  133,   52,   49,   50,  133,  133,  133,   73,  133,
+      133,  133,  133,   39,  133,  133,  133,   27,   30,  133,
+       51,    0,    0,    0,  133,   38,  133,  133,  133,  133,
+
+      133,  133,  133,  133,  133,  133,  133,  133,  133,  133,
+      133,  133,  133,  133,  133,   75,   12,   12,   12,    2,
+        3,   12,   12,   12,    2,    3,    0,    0,    0,    0,
+        0,  133,  133,  133,  133,  133,  133,  133,  120,  133,
+      131,  133,  133,  133,   21,  133,  133,  133,  133,  133,
+      133,   47,  133,  133,  133,   40,  133,    0,  133,  133,
+      133,   31,  133,    0,    0,    0,  124,  124,  133,   55,
+      133,  133,   44,  133,  133,  133,  133,  133,  133,  133,
+      133,  133,  133,  133,  133,  133,  133,  133,  133,  133,
+      133,  133,  133,    0,   12,   12,   12,    2,    3,   12,
+
+       12,   12,    0,    0,    0,    0,    0,  118,  119,  121,
+       17,  121,   32,  133,  133,  133,  133,  133,  133,  133,
+      133,  133,  133,  133,   60,  123,  123,  133,   48,  122,
+      122,    0,  133,    0,   67,  133,    0,   36,  133,    0,
+        0,    0,   53,   54,   26,   46,  133,  133,  133,  133,
+      133,  133,  133,  133,  133,  133,  133,  133,  133,  133,
+      133,  133,  133,  133,  133,  133,  133,  133,  133,   12,
+       12,   12,    5,   12,   12,    0,    0,    0,    0,  133,
+      133,  133,  133,  133,  133,  133,  133,  133,   56,    0,
+       41,    0,  133,  133,    0,    0,    0,  133,  133,  133,
+
+      133,  133,  133,  133,   79,  133,  133,  133,  133,  133,
+      133,  133,  133,  133,  133,  133,  133,  133,  133,  133,
+        5,   12,   12,    5,   12,   12,    0,    0,  133,  132,
+      133,  133,  130,   64,  133,    0,    0,    0,  133,  133,
+        0,    0,    0,  133,  133,  133,  133,  133,  133,  133,
+       18,  133,  133,  133,  133,  133,  133,  133,  133,  133,
+      133,  133,  133,  133,  133,    5,   12,   12,   12,   12,
+        0,    4,  133,  133,  133,  133,    0,    0,    0,  133,
+       62,    0,    0,    0,  133,  133,  133,   81,  133,  133,
+      133,  133,   80,  133,  133,  133,  133,  133,  133,  133,
+
+      133,  106,  133,  133,  133,  133,  133,  133,   12,   12,
+       12,   12,    0,  133,  133,  133,   63,    0,    0,    0,
+      133,    0,    0,  133,  127,  133,  133,  133,  133,  133,
+      133,  133,  133,  125,  133,  108,  110,  112,  102,  133,
+      133,  133,  133,  107,  133,  133,  133,   12,   12,   12,
+       12,    0,  133,  133,  129,    0,    0,    0,   33,  133,
+      133,  133,  133,  133,  133,  133,  133,  133,  133,  133,
+      133,  133,  133,  133,  133,  133,  133,  133,  133,  133,
+      109,  111,  113,  133,  133,  133,   12,   12,   12,   12,
+       12,   12,   12,    0,  133,  133,    0,   34,    0,  133,
+
+      133,  133,  133,  133,  133,  133,  133,  133,  133,  133,
+      133,  133,  133,  133,  133,  133,  133,  114,  115,  133,
+      133,  133,  133,   12,   12,   12,   12,   12,   12,   12,
+       12,   12,   12,    0,  133,  104,    0,  133,   87,  133,
+      133,  133,  133,  133,  133,  133,  133,  133,  133,  133,
+      133,  133,  133,  133,  133,  133,  133,  133,  133,   12,
+       12,   12,   12,   12,   12,   12,   12,   12,    6,  133,
+        0,   35,   65,  133,  133,  133,  133,  133,  133,  133,
+      133,  133,   84,  133,  133,  133,  133,  133,  133,  133,
+      133,  126,  133,  133,   12,   12,   12,   12,    6,   12,
+
+       12,   12,   12,    6,  133,  133,  133,   86,   83,  133,
+      133,  133,  133,   97,   85,   82,  133,  133,  133,  133,
+       96,  133,  133,  133,   12,   12,   12,   12,    6,   12,
+       12,   12,   12,  105,  133,  133,   92,   93,   94,   95,
+       88,   89,   90,   91,  133,  133,  133,   12,   12,   12,
+       12,   12,   12,   12,   12,  133,  133,  133,  133,  133,
+       12,   12,   12,   12,   10,   12,   12,   12,  100,  133,
+      103,  133,  133,   10,   12,   12,   12,   10,   12,    8,
+        9,  133,  133,  133,   10,   12,    8,    9,   12,    8,
+        9,  133,  133,  133,   12,    8,    9,   12,  133,  133,
+
+       99,   12,    7,  133,  133,    7,    7,  133,  133,    7,
+      133,   98,  133,  101,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
-        1,    1,    4,    1,    1,    1,    1,    1,    1,    1,
+        4,    4,    5,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    5,    6,    7,    8,    1,    9,   10,   11,   12,
-       13,   14,   15,   16,   17,   18,   19,   20,   21,   22,
-       23,   24,   25,   26,   25,   27,   25,   28,   29,   30,
-       31,   32,    1,   33,   34,   35,   36,   37,   38,   39,
-       40,   41,   42,   43,   44,   45,   46,   47,   48,   49,
-       50,   51,   52,   53,   54,   55,   56,   57,   58,   59,
-       60,   61,   62,   63,   64,    1,   65,   66,   67,   68,
-
-       69,   70,   71,   72,   73,   74,   75,   76,   77,   78,
-       79,   80,   81,   82,   83,   84,   85,   86,   87,   88,
-       89,   90,   16,   91,   16,   16,    1,    1,    1,    1,
+        1,    6,    7,    8,    9,    1,   10,   11,   12,   13,
+       14,   15,   16,   14,   17,   18,   19,   20,   21,   22,
+       23,   24,   25,   26,   25,   27,   25,   28,   14,   29,
+       30,   31,    1,   32,   33,   34,   35,   36,   37,   38,
+       39,   40,   41,   42,   43,   44,   45,   46,   47,   48,
+       49,   50,   51,   52,   53,   54,   55,   56,   57,   40,
+       58,   59,   60,   61,   62,    1,   63,   64,   65,   66,
+
+       67,   68,   69,   70,   71,   72,   73,   74,   75,   76,
+       77,   78,   79,   80,   81,   82,   83,   84,   85,   86,
+       87,   88,   14,   89,   14,   14,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -633,993 +541,581 @@ static yyconst flex_int32_t yy_ec[256] =
         1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int32_t yy_meta[92] =
+static yyconst flex_int32_t yy_meta[90] =
     {   0,
-        1,    2,    3,    2,    2,    1,    1,    1,    1,    4,
-        5,    1,    6,    4,    1,    1,    1,    7,    1,    8,
-        8,    8,    8,    8,    8,    8,    8,    9,   10,    1,
-        1,    1,    1,   11,   11,   11,   11,   11,   11,   11,
-       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
-       11,   11,   11,   11,   11,   11,   11,   11,   11,    1,
-        1,    1,    1,   11,   11,   11,   11,   11,   11,   11,
-       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
-       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
-        1
-
+        1,    2,    3,    1,    2,    2,    1,    1,    1,    1,
+        2,    4,    1,    1,    2,    1,    1,    5,    1,    6,
+        6,    6,    6,    6,    6,    6,    6,    7,    1,    1,
+        1,    1,    8,    8,    8,    8,    8,    8,    9,    9,
+        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
+        9,    9,    9,    9,    9,    9,    9,    1,    1,    1,
+        1,    9,    8,    8,    8,    8,    8,    8,    9,    9,
+        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
+        9,    9,    9,    9,    9,    9,    9,    9,    1
     } ;
 
-static yyconst flex_int16_t yy_base[2008] =
+static yyconst flex_int16_t yy_base[1153] =
     {   0,
-        0,   90, 4604, 4605, 4605, 4605, 4572,   89, 4571,   87,
-     4540,   97, 4605,  101,   93,   95, 4582,  103,  117,  134,
-     4571,   83, 4567,   84,   61, 4533,   85,   64,   83,   87,
-     4605,  117, 4605, 4565,  107,   98,   99,  101,  100,  106,
-      111,  118,  121,   82,  138,  126,  128,  122,  147,  135,
-      150,  148,  158,  135,  236, 4605, 4605,  213,  215, 4522,
-     4605,  181, 4605,  188, 4605, 4563, 4605,  186,  205,  248,
-     4605, 4605,  207, 4565,  220,  215,  268, 4605, 4513, 4605,
-     4605, 4605, 4605, 4577, 4572, 4605,    0, 4605,  265,  275,
-      241,  322,  242,  289,  299,  344, 4605, 4558, 4605, 4605,
-
-     4605, 4557, 4523,  181,  230,  219,  290,  197,  286,  308,
-     4605, 4583, 4605,  272,  336,  199,  267,  268,  254,  211,
-      213,  316,  309,  311,  201,  312,  315,  319,  338,  339,
-      320,  263,  341,  342,  343,  348,  349, 4521,  350,  356,
-      358,  367,  357,  362,  364,  377,  379,  375,  380,  384,
-      382,  385,  352,  383, 4605, 4553,  464, 4605,  449, 4564,
-     4509, 4520,  468,  471,  410,  455,  300,  443, 4605, 4605,
-      451, 4552, 4551,  449,  450,  452, 4500, 4605, 4605,    0,
-      499,  518,  531,  549,  559,  604,  470,  580, 4605, 4605,
-      438,  436,  273, 4549, 4512,  450, 4605,  437,  421,  418,
-
-     4511,  428,  451,  430,  449,  425,  423,  445,  495,  469,
-      485,  434,  502,  496,  497,  523,  526,  612,  527,  346,
-      524,  581, 4510, 4509,  529,  582,  530,  532,  568,  546,
-      583,  555,  571,  570,  585,  531,  591,  629,  594,  483,
-      595,  598,  614,  602,  597,  618,  619,  663, 4508, 4605,
-      685,  633,  638,    0,  667, 4518, 4517, 4489, 4484,  726,
-      668,  664,  679, 4484,  727,  735,  745,  790, 4528,  673,
-      755,  674,  625,  668,    0,  785,  675,  677,  650,  680,
-      736, 4501,  648,  719, 4500,  782,  724,  669,  734,  758,
-      727,  729, 4499,  726,  757,  767,  730,  769,  832,  774,
-
-      797,  784,  728,  869,  599,  780,  812,  678,  802,  776,
-      731,  811,  779,  804,  800,  813,  821, 4498,  824,  818,
-     4533,  814,  831,  825,  832,  835,  838,  840,  839,  916,
-      830,  843,  841,  848,  859,  861,  863,  862,  865,  868,
-      875,  874,  876,  879,  906,    0,  928, 4507, 4506,  887,
-      904, 4489, 4500, 4499, 4479, 4485,  922,  931,  930, 4469,
-      963,  943,  974,  909,  938,  929,    0, 4488,  910,  907,
-      939,  953,  944,  964,  954,  947,  950,  945,  951, 4487,
-     1028,  952,  946, 1032, 4486, 1037,  979,  980,  981,  956,
-      982, 4485,  983,  986, 4469,  980, 4469,  992,  993,  994,
-
-      995,  997, 1071, 1000,  999, 1002, 1007, 1005, 1018, 1020,
-     1021, 1003, 4482, 1024, 1022, 1026, 1028, 1033, 1034, 1105,
-     1040, 1050, 1061, 4481, 1048, 1047, 1057, 1058, 1059, 1063,
-     1069, 1133, 1027, 4480, 1076, 1146, 1157, 1079, 1067, 1089,
-     1099, 1091, 1093, 1111, 1101, 1102, 1104, 1103, 1116, 1112,
-     1110, 1123, 1118, 1146, 4474, 4485, 4484, 1123, 4506, 4501,
-     4455,    0,    0, 4468, 4454, 1166, 1168, 1167, 4605, 1190,
-     1182, 1200, 1177, 1167, 1168, 1176, 1181, 1194, 1171, 1188,
-     1183, 1175, 1218, 4471, 4470, 4460, 4454, 1179, 1180, 1257,
-     1263, 4605, 1211, 4467, 4466, 1189, 1206, 4465, 1269, 4464,
-
-     4449, 4447, 4454, 4441, 1205, 1213, 1219, 1216, 1221, 4444,
-     4444, 4442, 4447, 4441, 1217, 1220, 1222, 1228, 1223, 1224,
-     1142, 4454, 1226, 1232, 1239, 1227, 1310, 1252, 1237, 1321,
-     1253, 1254, 1256, 1246, 1334, 4453, 1284, 4452, 4432, 4431,
-     4429, 1268, 1338, 1266, 1281, 1280, 1350, 1292, 1271, 1361,
-     1367, 1282, 1303, 1295, 1298, 1317, 1344, 1314, 1065, 1373,
-     1321, 1319, 1320, 1325, 1347, 1358, 4448, 4477, 4472, 4426,
-        0,    0,  952, 4462, 4471, 4439,    0,    0, 4428, 4434,
-     1363, 1369, 1427, 1422, 1397, 1442, 1360, 1356, 1363, 1375,
-     1387, 1392, 1389, 4439, 4438, 1191, 1475, 4430, 4417, 1393,
-
-     1408, 1480, 1369, 4435, 1390, 1485, 4427, 4415, 4418, 4422,
-     1489, 1432, 1406, 1388, 4430, 4408, 4408, 4413, 4419, 4406,
-     1433, 1498, 1434, 1440, 1446, 4424, 1447, 1443, 4423, 1518,
-     1448, 1524, 1460, 1449, 1466, 4408, 4412, 4406, 1451, 1469,
-     1312, 1509, 1539, 1500, 1483, 1470, 1487, 1485, 4419, 1512,
-     4398, 4397, 4398, 4416, 1582, 1490, 4414, 1492, 1588, 1499,
-     4413, 1592, 1606, 1621, 1511, 1535, 1555, 1538, 1514, 1549,
-     1563, 1557, 1564, 1566, 1567, 1524, 1571, 1573, 1568, 1574,
-     1576, 1603, 1580, 1583, 1587, 4448, 4429, 4438, 4406,    0,
-        0, 1651, 4434, 4418, 4388, 4400, 4403, 1620, 1630, 1666,
-
-     4605, 4439, 1661, 1643, 1671, 1613, 1626, 4402, 4401, 1481,
-     1636, 4400, 1635, 1699, 1600, 1641, 4385, 4389, 1642, 1644,
-     1719, 1724, 4433, 4605, 1649, 1672, 4396, 4383, 4374, 4388,
-     4378, 1738, 4371, 4385, 4382, 1742, 1652, 1645, 1673, 1752,
-     1666, 1685, 4386, 1756, 4380, 4372, 4376, 1674, 1762, 1698,
-     1705, 1770, 1712, 1706, 1716, 4384, 1784, 1714, 1727, 4371,
-     1715, 4382, 1728, 4361, 4373, 4360, 1794, 1729, 1736, 4605,
-     4378, 4369, 4362, 4360, 4366, 1765, 1601, 1738, 1737, 1740,
-     1741, 4355, 4354, 4362, 4369, 1828, 1846, 4369, 1857, 1861,
-     4404, 4605, 1866, 1870, 1889, 4367, 1747, 1744, 1756, 1814,
-
-     1816, 1772, 1760, 1817, 1831, 1832, 1833, 1821, 1780, 1835,
-     1838, 1839, 1840, 1842, 1843, 1845, 1394, 1749, 1847, 1876,
-     4392, 4376, 4346, 1913,    0, 4385, 4353, 4347, 4357, 1920,
-     1933, 1932, 1908, 1879, 1513, 1881, 1867, 4350, 4344, 1899,
-     1898, 4352, 4349, 1903, 1849,    0, 1880, 1864, 4354, 4336,
-     4340, 4343, 4336, 4341, 4335, 1974, 4344, 4333, 1902, 1919,
-     1901, 1983, 1925, 1927, 1997, 1928, 4334, 4336, 4330, 2004,
-     4338, 4335, 1946, 1940, 1929, 2015, 1949, 1930, 1950, 1957,
-     1952, 4341, 4328, 1958, 2029, 4324, 1959, 1960, 2036, 4324,
-     4328, 2042, 1962, 1972, 1984, 1978, 4327, 4334, 4314, 4319,
-
-     4317, 1987, 1988, 2079, 1991, 1990, 1992, 4326, 4325, 4315,
-     4375, 2099, 2103, 4363, 4605, 2092, 4358,    0, 2111, 2022,
-     1999, 2000, 2012, 2045, 2131, 4310, 2021, 2010, 2054, 2046,
-     2047, 2073, 1994, 2056, 4324, 2062, 2074, 2075, 2077, 2080,
-     2081, 2083, 2084, 2085, 2094, 1909, 2086, 2090, 2088, 2102,
-        0, 4345, 4313, 2107,    0, 4337, 4304, 4299, 4313, 2115,
-     4317, 4316, 2110, 2108, 4308, 4295, 2112, 2109, 4309, 4298,
-     4311, 2116, 2193, 4310, 2119, 4290, 4287, 4291, 4291, 4291,
-     4297, 4284, 4293, 4287, 2201, 4295, 2122, 2135, 2127, 2137,
-     2124, 2207, 2150, 2151, 2152, 4294, 4291, 4278, 4282, 4286,
-
-     4280, 4289, 4278, 4291, 2154, 2155, 2160, 2162, 2163, 2232,
-     2161, 4275, 2167, 2236, 2178, 4269, 2179, 2181, 4279, 4273,
-     4281, 4278, 2184, 2183, 2185, 2186, 4270, 4265, 2254, 4275,
-     4263, 2188, 4280, 2265, 2196, 2199, 2276, 2209, 2210, 4278,
-     4277, 4270, 4250,    0, 4307, 2283, 2295, 4274, 4265, 4258,
-     4256, 4262, 2238, 2227, 2225, 2237, 2231, 4260, 2257, 2242,
-     2240, 2249, 2248, 2125, 2250, 2252, 2320, 1653, 2254, 2262,
-     2275, 2272, 2278, 2270, 2334, 2280, 2274, 2279, 2294, 2281,
-     2290,    0, 4284, 4251, 2315, 4283, 4245, 4263, 4605, 2330,
-     2318, 4263, 4248, 4252, 2306, 2308, 4605, 4255, 2309, 2383,
-
-     2316, 4240, 4255, 4245, 4242, 4248, 4240, 4244, 4245, 4232,
-     4235, 4241, 4244, 2387, 2314, 2310, 2329, 2331, 2332, 2335,
-     2413, 4605, 4233, 4237, 4225, 4237, 4224, 2417, 4237, 2333,
-     2337, 2421, 2349, 2364, 2427, 2369, 2341, 4221, 2370, 4228,
-     2371, 4220, 2375, 4238, 4230, 4217, 4231, 4220, 2374, 2372,
-     2438, 2380, 4213, 4605, 4217, 4223, 2452, 4210, 2420, 2384,
-     2394, 2461, 2396, 2397, 2476, 4229, 4215, 4214, 4230, 4255,
-     2489, 2505, 2510, 4215, 4222, 4202, 4207, 4205, 2404, 2405,
-     2517, 2424, 2419, 4215, 2433, 2435, 2026, 2422, 4218, 2439,
-     2462, 2463, 2530, 4268, 2483, 4216, 2452, 2477, 2479, 2480,
-
-     2466, 2441, 1285, 2507, 4215, 2488, 2482, 2532, 2490, 2520,
-     2493, 4231, 4193, 2499, 4271, 4202, 4190, 2513, 2528, 2530,
-     4204, 4201, 2505, 2500, 4203, 4206, 4205, 2599, 4184, 4202,
-     2603, 2607, 4197, 4194, 4186, 4190, 4184, 4182, 2611, 2615,
-     2506, 2519, 2512, 2521, 2518, 2527, 2557, 2558, 2621, 2563,
-     2565, 4191, 4188, 2628, 4180, 4184, 4178, 4187, 2570, 2571,
-     2641, 2522, 2572, 2583, 2577, 2575, 2652, 4171, 2625, 4174,
-     2587, 4224, 4605, 2624, 4173, 4177, 2661, 4180, 2603, 2597,
-     2671, 2605, 2613, 4222, 4169, 4167, 4167, 4165, 2703, 2646,
-     2614, 2620, 2596, 2615, 2715, 2618, 4605, 4605, 4226, 2725,
-
-     4164, 4159, 2733, 4169, 4157, 2631, 4174, 2737, 2622, 2650,
-     2746, 2639, 2753, 2645, 4173, 2657, 2668, 2697, 2699, 2747,
-     4223, 4605, 2695, 2716, 2718, 2761, 4171, 2742, 4170, 4169,
-     4168, 4167, 2702, 2726, 2750, 2753, 4166, 2710, 2715, 2727,
-     4224, 4155, 2825, 2763, 4148, 4153, 4161, 2738, 2740, 4156,
-     4145, 4158, 2717, 4605, 2845, 4137, 4147, 4141, 4150, 4139,
-     4147, 4144, 4143, 4131, 4133, 4139, 2732, 2741, 4146, 2754,
-     2733, 2734, 2857, 2744, 2787, 2788, 4133, 4112, 4106, 4090,
-     4088, 4075, 4051, 2866, 4060, 2808, 2802, 2781, 2810, 2811,
-     4049, 2877, 2812, 4074, 4605, 3996, 2819, 2827, 4000, 3976,
-
-     3951, 3960, 2829, 2820, 2830, 2901, 4003, 3955, 3937, 3934,
-     3939, 3938, 3945, 2905, 2831, 3944, 2847, 2835, 3948, 3922,
-     4605, 3916, 3901, 2920, 3882, 2837, 2848, 2849, 2927, 2856,
-     2863, 2933, 2941, 2946, 2876, 2395, 2883, 2888, 2896, 2908,
-     2911, 2916, 2918, 2902, 2904, 2912, 2914, 2924, 2927, 2937,
-     2938, 2921, 2941, 2963, 2925, 3901, 3900, 3899, 2926, 2928,
-     2944, 2958, 3877, 3041, 3890, 3885, 3884, 3880, 3870, 3868,
-     2974, 2853, 4605, 3877, 2945, 3876, 3873, 3860, 4605, 3867,
-     3867, 3856, 3016, 3849, 3844, 3832, 2950, 2951, 2958, 3843,
-     2961, 3029, 2997, 3842, 2952, 2998, 4605, 3835, 3831, 3818,
-
-     3829, 3818, 4605, 3817, 2971, 2999, 3002, 3079, 3021, 3003,
-     3811, 3001, 3014, 3825, 3814, 3807, 3091, 3823, 3022, 3822,
-     3104, 3034, 4605, 3111, 3801, 4605, 3813, 3799, 3115, 3000,
-     3818, 3119, 3817, 3806, 3833, 3777, 3775, 3773, 3771, 3123,
-     3065, 3066, 3067, 3004, 3069, 3136, 3070, 3148, 4605, 3078,
-     3090, 3080, 2973, 3096, 3035, 3046, 3071, 3081, 3098, 3091,
-     3102, 3103, 3107, 3110, 3114, 3116, 3118, 3776, 3772, 3112,
-     3120, 3104, 3124, 3770, 3756, 3752, 3751, 3738, 3754, 3744,
-     3209, 3190, 3715, 3707, 3717, 3716, 3754, 3703, 3165, 3713,
-     3708, 3708, 3202, 3693, 3697, 3701, 4605, 3699, 3688, 4605,
-
-     3686, 3658, 3131, 3137, 3674, 3166, 3167, 3244, 3169, 3667,
-     3656, 3660, 3252, 3663, 3647,   66, 3194, 3172, 3257, 3186,
-     3209,  172,  353, 4605, 3201, 4605,  449, 4605,  530, 3210,
-     3202,  656, 4605, 3277, 4605, 3211, 3288, 3219,  727,  808,
-      808,  834,  894, 1598, 1690, 1764, 3299, 3203, 1788, 3224,
-     3212, 1877, 3248, 3234, 3241, 3242, 3243, 3247, 3249, 3255,
-     3245, 3253, 3251, 3257, 3262, 3264, 3270, 3271, 3272, 3294,
-     3277, 3278, 3279, 1983, 2178, 2213, 2248, 2378, 2528, 3348,
-     2597, 3352, 2638, 3413, 3373, 3342, 2662, 2666, 2816, 2891,
-        0, 3317, 4605, 2872, 2927, 4605, 2968, 3078, 3362, 3105,
-
-     3304, 3293, 3133, 3298, 3380, 3295, 3135, 4605, 3166, 3173,
-     3174, 3200, 4605, 3322, 3309, 3296, 3389, 3220, 3279, 3265,
-     3306, 3314, 3301, 3310, 3325, 3371, 4605, 4605, 3395, 3311,
-     4605, 3330, 3318, 3402, 3369, 3344, 3447, 3346, 3347, 3390,
-     3383, 3393, 3400, 3376, 3399, 3401, 3402, 3403, 3373, 3406,
-     3413, 3404, 3405, 3416, 3424, 3426, 3396, 3375, 3427, 3425,
-     3424, 3427, 3490, 3491,    0, 3494, 3496, 3436, 3420, 3469,
-     3442,    0, 3463, 3442, 3434, 4605, 3442, 3435, 4605, 3451,
-     3452, 3453, 3454, 3451, 3444, 3439, 3526, 3460, 3469, 3461,
-     3532, 3462, 4605, 4605, 3468, 3457, 3478, 3479, 3465, 4605,
-
-     3543, 4605, 3485, 3548, 3490, 3492, 3494, 3496, 3497, 3498,
-     3500, 3502, 3503, 3505, 3501, 3506, 3507, 3508, 3509, 3510,
-     3511, 3512, 3519, 3513, 3528, 3513, 3511, 3560, 3530,    0,
-     3512, 3525, 3524, 3525, 3538, 4605, 3534, 4605, 3526, 3542,
-     3543, 4605, 3539, 4605, 3531, 3547, 3548, 4605, 4605, 3535,
-     3539, 3554, 3555, 3556, 3558, 3560, 3559, 3562, 3563, 3564,
-     3565, 3566, 3569, 3570, 3571, 3572, 3595, 3558, 3570, 3568,
-     3569, 3563, 3567, 3565, 3566, 3582, 3580, 3588, 3590, 3587,
-     3572, 3593, 3594, 3589, 3577, 3598, 3599, 3600, 3601, 3602,
-     3603, 3604, 3605, 3589, 3593, 3591, 3592,    0, 3592, 3598,
-
-     3599, 4605, 4605, 4605, 4605, 4605, 4605, 3616, 3617, 3619,
-     3621, 3622, 3625,    0, 3603, 3614, 3615,    0, 3622,    0,
-        0, 3632, 3651, 3634,    0, 3626,    0,    0, 3621,    0,
-        0, 3639, 3637, 3640, 3626,    0,    0, 3628, 3661, 3645,
-     3644, 3632,    0, 3649, 3654,    0,    0, 3656, 3658,    0,
-     3657, 3660, 3662, 3663, 4605, 3741, 3752, 3762, 3767, 3772,
-     3776, 3787, 3791, 3802, 3806, 3811, 3822, 3826, 3837, 3841,
-     3845, 3856, 3867, 3877, 3887, 3897, 3908, 3919, 3929, 3939,
-     3949, 3959, 3970, 3717, 3981, 3718, 3992, 4002, 3719, 4012,
-     4022, 4033, 4044, 4055, 4066, 4077, 4088, 4099, 4110, 4121,
-
-     4132, 4143, 4154, 4165, 4176, 4187, 4198
+        0,   88, 2594, 2595,   90, 2595, 2595, 2563,   87, 2562,
+       87, 2532,   97, 2595, 2560,   85,   88,  113,   91,  133,
+      151, 2561,   84, 2558,   92,   63, 2525,   83,   42,  128,
+       85, 2595,  124, 2595, 2556, 2523,  103,  120,  122,  136,
+      119,   87,  125,   86,   79,  145,  147,  131,  148,  159,
+      164,  162,  171,  106,  113,  252, 2595, 2595, 2525,  217,
+     2512,  214, 2595,  158, 2595,  186, 2595, 2595, 2595,  223,
+      227,  257, 2595, 2595,  116, 2554,  216,  209, 2595, 2595,
+     2595, 2595, 2595, 2566, 2595, 2562,  254, 2595,    0, 2595,
+      273,  293,  311,    0,  321,  341,  353, 2595, 2549, 2595,
+
+     2595, 2595, 2548, 2515,  205,  227,  208,  335,  241,  142,
+      239, 2595, 2573, 2595,  344,  221,  226,  240,  247,  203,
+      242,  323,  321,  267,  324,  322,  339,  325,  332,  334,
+      244,  328,  329,  352,  351,  356,  287, 2513,  357,  358,
+      261,  361,  360,  362,  371,  378,  372,  366,  381,  383,
+      386,  387,  389,  393,  390, 2595, 2595,  466, 2595, 2515,
+     2554, 2501, 2512,  471,  447,  276,  248, 2595,  444, 2542,
+     2541,  437,  433,  434, 2595, 2595,  466,  484,    0,  492,
+      511,  521,  533,  541,  549,  557, 2595, 2595,  458,  417,
+      478,  462, 2540, 2505,  461,  420,  523,  459,  293,  421,
+
+      524,   80, 2504,  525,  536,  526,  534,  545,  539,  546,
+      542,  541,  330,  553,  556,  549,  569,  567,  548, 2503,
+      571,  573,  574,  576, 2502, 2501,  577,  603,  579,  582,
+      585,  584,  583,  586,  588,  587,  593,  437,  590,  625,
+      602,  599,  594,  607,  613,  617,  616,  614,  291,  618,
+      661, 2500,  683,  679,    0,  665, 2509, 2508, 2481, 2476,
+      716,  656,  666,  658,  723,  731,  739,  747,  755,  763,
+      662,  663,  670,  664,    0,  758,  743,  647,  666,  731,
+      672,  741,  732,  637,  668,  770, 2495,  742,  744, 2494,
+     2493,  753,  747,  754,  757,  761,  750, 2492,  746,  771,
+
+      776,  778,  779,  673, 2491,  780,  781,  808,  784,  786,
+      674,  787,  790,  797,  791,  794,  798,  804, 2490,  802,
+      811, 2523,  801,  816,  812,  467,  817,  822,  823,  825,
+      826, 2488,  828,  827,  833,  829,  835,  837,  839,  838,
+      844,  845,  846,  849,  850,  876,    0,  900, 2497, 2496,
+      868, 2480, 2490, 2489, 2470, 2476,  894,  895,  896,  873,
+      880,  895,  893,    0,  877,  896,  887,  900,  883,  885,
+      886,  890,  884,  927,  894,  892,  898,  899, 2480, 2479,
+     2478, 2477,  905,  907,  908,  906,  914, 2476,  916,  913,
+      921,  919,  923,  924,  925, 2475,  929,  926,  932,  933,
+
+      934,  937, 2474,  938,  940,  968, 2473,  948,  938,  949,
+      952,  958, 2472,  955,  961, 2471,  963, 2470,  964,  966,
+      967,  969,  970,  971,  983,  974,  976,  980,  979,  978,
+      985,  981,  993,  992, 1014, 2464, 2474, 2473, 2495, 2490,
+     2445,    0,    0, 2458, 2444, 1034, 1035, 1036, 1016, 1017,
+     1034, 1035,    0, 1020, 1036, 1040, 1026, 1014, 1018, 1021,
+     1019, 1025, 1065, 1031, 1039, 2461, 2460, 1054, 2459, 2458,
+     1041, 1037, 2457, 2456, 2455, 1043, 1045, 1047, 2454, 1049,
+     1053, 1055, 1051, 1118, 1063, 1052, 1067, 2453, 2452, 1094,
+     2451, 2431, 2430, 2428, 1180, 2447, 1072, 1073, 1074, 1075,
+
+     1076, 1077, 1078, 1081, 1083, 1108, 1084, 1104, 1181, 1096,
+     1101, 1099, 1151, 1103, 1186, 2446, 2474, 2469, 2424,    0,
+        0, 2459, 2468, 2437,    0,    0, 2426, 2432, 1187, 1139,
+     1216, 1116, 1117, 1184, 1168, 1187, 1190, 1185, 2437, 1189,
+     2436, 1155, 1172, 1192, 2435, 1183, 1196, 1198, 2434, 1194,
+     1276, 2433, 1110, 1247, 1365, 1260, 1205, 1268, 1248, 1251,
+     1336, 2432, 1278, 2411, 2410, 2411, 2595, 2428, 1249, 2427,
+     1250, 1252, 2426, 1257, 1258, 1288, 1264, 1268, 1283, 1270,
+     1284, 1337, 1338, 1286, 1291, 1293, 1339, 1294, 1340, 1367,
+     1341, 1349, 1296, 2459, 2441, 2450, 2419,    0,    0, 2446,
+
+     2430, 2401, 2413, 2416, 1376, 1385, 1429, 2595, 2450, 1368,
+     2415, 1388, 2414, 2413, 1375, 2412, 1376, 1377, 1347, 1378,
+     1379, 1381, 1380, 1408, 2411, 2595, 2410, 1395, 2409, 2595,
+     2408, 1461, 1297, 2395, 2406, 1385, 1466, 2595, 1344, 2387,
+     2386, 2394, 2402, 2401, 2400, 2399, 1386, 1394, 1396, 1414,
+     1261, 1413, 1415, 1419, 1420, 1421, 1423, 1427, 1428, 1430,
+     1429, 1436, 1384, 1434, 1438, 1460, 1440, 1441, 1469, 2423,
+     2407, 2378,    0, 2416, 2385, 2379, 2389, 1509, 1523, 1470,
+     1473, 1479, 1451, 1455, 1465, 1472, 1461, 1482, 2391, 2378,
+     1547, 2374, 1492, 1474, 2383, 2382, 2372, 1485, 1478, 1498,
+
+     1486, 1500, 1501, 1494, 2385, 1502, 1507, 1508, 1511, 1512,
+     1513, 1515, 1517, 1518, 1519, 1523, 1525, 1529, 1528, 1527,
+        0, 2405, 2374,    0, 2397, 2365, 2360, 2374, 1213, 2378,
+     1536, 1535, 2377, 2376, 1531, 2360, 1608, 2354, 1537, 1541,
+     2372, 2371, 2364, 1560, 1553, 1555, 1556, 1562, 1544, 1563,
+     2370, 1564, 1566, 1567, 1568, 1569, 1572, 1573, 1624, 1575,
+     1587, 1577, 1590, 1591, 1592,    0, 2384, 2352, 2383, 2346,
+     2364, 2595, 1605, 1608, 2364, 1595, 2343, 2350, 2342, 2360,
+     2359, 2345, 2344,    0, 1599, 1601, 1612, 2356, 1603, 1606,
+     1604, 1631, 2355, 1609, 1610, 1616, 1618, 1619, 1656, 1661,
+
+     1666, 2354, 1630, 1632, 1676, 1633, 1663, 1642, 2369, 2332,
+     2407, 2341, 2329, 1652, 1668, 1669, 2348, 2328, 2331, 1706,
+     1679,    0,    0, 1655, 2345, 1648, 1674, 1681, 1723, 1670,
+     1692, 1694, 1729, 2344, 1698, 2343, 2342, 2341, 2340, 1686,
+     1701, 1707, 1716, 2339, 1696, 1688, 1700, 2394, 2328, 1735,
+     2321, 2326, 2334, 1711, 1705, 1777, 2313, 1787, 2595, 1725,
+     1697, 1719, 1732, 1736, 1739, 1751, 1755, 1757, 1741, 1710,
+     1744, 1746, 1765, 1766, 1767, 1769, 1758, 1796, 1798, 1761,
+     2332, 2331, 2330, 1762, 1763, 1764, 1801, 2314, 2327, 2322,
+     2321, 2320, 2310, 2308, 1805, 1784, 1842, 2595, 2303, 1770,
+
+     1772, 1788, 1791, 1792, 1799, 1801, 1803, 1806, 1809, 1797,
+     1810, 1811, 1816, 1818, 1821, 1823, 1825, 2321, 2320, 1826,
+     1827, 1829, 1830, 2318, 2313, 2312, 2311, 2301, 2292, 2294,
+     2307, 2306, 2344, 2295, 1856, 2308, 1892, 1834, 2307, 1855,
+     1839, 1842, 1845, 1846, 1850, 1859, 1851, 1837, 1861, 1863,
+     1864, 1865, 1870, 1871, 1866, 1889, 1875, 1777, 1876, 2284,
+     2286, 2299, 2298, 2336, 2296, 2297, 2355, 2354,    0, 1905,
+     1947, 2595, 2297, 1885, 1892, 1880, 1883, 1893, 1894, 1896,
+     1899, 1900, 2296, 1901, 1903, 1902, 1904, 1906, 1907, 1908,
+     1909, 2295, 1919, 1921, 2289, 2290, 2348, 2341,    0, 2275,
+
+     2249, 2287, 2248,    0, 1944, 1927, 1929, 2240, 2231, 1931,
+     1932, 1933, 1934, 2222, 2213, 2204, 1935, 1937, 1938, 1939,
+     2174, 1940, 1942, 1955, 2164, 2138, 2176, 2137,    0, 2109,
+     2115, 2102, 2097, 2105, 1945, 1957, 2097, 2093, 2089, 2084,
+     2076, 2071, 2059, 2054, 1958, 1961, 1981, 2030, 2036, 2032,
+     2031, 2023, 2018, 2000, 1999, 1959, 1965, 1967, 1968, 1969,
+     1998, 2000, 1996, 1995,    0, 1992, 1995, 1994, 2007, 1971,
+     2005, 1972, 1975,    0, 1916, 1687, 1442,    0, 1154,    0,
+        0, 1979, 1990, 1983,    0, 1024,    0,    0,  784,    0,
+        0, 1985, 1986, 1989,  733,    0,    0,  629, 2008, 1992,
+
+      550,  313,    0, 1996, 1993,    0,    0, 2000, 1998,    0,
+     2002,  211, 2006,   47, 2595, 2083, 2092, 2100, 2105, 2109,
+     2118, 2122, 2126, 2135, 2139, 2144, 2148, 2156, 2160, 2164,
+     2173, 2175, 2179, 2188, 2197, 2206, 2215, 2224, 2233, 2242,
+     2249, 2256, 2263, 2272, 2281, 2290, 2299, 2308, 2317, 2326,
+     2335, 2344
     } ;
 
-static yyconst flex_int16_t yy_def[2008] =
+static yyconst flex_int16_t yy_def[1153] =
     {   0,
-     1955,    1, 1955, 1955, 1955, 1955, 1955, 1956, 1955, 1955,
-     1957, 1958, 1955, 1955, 1955, 1955, 1955, 1955, 1959, 1960,
-     1955, 1955, 1955, 1955, 1961, 1961, 1961, 1961, 1961, 1961,
-     1955, 1955, 1955, 1955, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1955, 1955, 1955, 1955, 1962, 1955, 1955,
-     1955, 1956, 1955, 1956, 1955, 1955, 1955, 1957, 1957, 1958,
-     1955, 1955, 1963, 1963, 1963, 1963, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1964, 1955, 1965, 1966,
-     1959, 1959, 1959, 1960, 1960, 1960, 1955, 1955, 1955, 1955,
-
-     1955, 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1955, 1955, 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1955, 1955, 1955, 1955, 1962, 1955,
-     1955, 1962, 1962, 1962, 1962, 1967, 1955, 1956, 1955, 1955,
-     1957, 1963, 1955, 1963, 1963, 1963, 1955, 1955, 1955, 1964,
-     1965, 1965, 1965, 1966, 1966, 1968, 1959, 1960, 1955, 1955,
-     1961, 1961, 1961, 1955, 1961, 1961, 1955, 1961, 1961, 1961,
-
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955,
-     1969, 1962, 1962, 1967, 1967, 1967, 1967, 1955, 1955, 1958,
-     1963, 1963, 1963, 1955, 1955, 1965, 1966, 1968,  268, 1959,
-     1960, 1961, 1961, 1961, 1970, 1971, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961,
-
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1969, 1969, 1969, 1969, 1962,
-     1967, 1967, 1967, 1967, 1955, 1955, 1963, 1963, 1963, 1955,
-     1966, 1959, 1960, 1961, 1961, 1961, 1970, 1971, 1971, 1971,
-     1971, 1971, 1971, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1955, 1955, 1955, 1961, 1961, 1961,
-
-     1961, 1961, 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1955, 1955, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1969, 1969, 1969, 1969, 1962, 1967, 1967,
-     1967, 1972, 1973, 1955, 1955, 1963, 1963, 1963, 1955, 1966,
-     1959, 1960, 1961, 1961, 1961, 1971, 1971, 1971, 1971, 1961,
-     1961, 1961, 1961, 1961, 1961, 1955, 1955, 1961, 1961, 1974,
-     1955, 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-
-     1955, 1955, 1955, 1955, 1961, 1961, 1961, 1961, 1961, 1955,
-     1955, 1955, 1955, 1955, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1955,
-     1955, 1961, 1961, 1961, 1961, 1961, 1975, 1961, 1961, 1955,
-     1976, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1969, 1969, 1969,
-     1977, 1978, 1962, 1967, 1967, 1967, 1972, 1973, 1955, 1955,
-     1963, 1963, 1963, 1966, 1959, 1960, 1961, 1961, 1961, 1971,
-     1971, 1971, 1971, 1961, 1961, 1961, 1961, 1955, 1955, 1961,
-
-     1961, 1979, 1961, 1961, 1961, 1955, 1955, 1955, 1955, 1955,
-     1961, 1961, 1961, 1961, 1961, 1955, 1955, 1955, 1955, 1955,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1955, 1961, 1961, 1961, 1955, 1955, 1955, 1961, 1961,
-     1961, 1961, 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1955, 1955, 1955, 1955, 1980, 1961, 1961, 1961, 1981, 1961,
-     1961, 1955, 1955, 1976, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1955, 1969, 1969, 1969, 1977,
-     1978, 1962, 1967, 1967, 1967, 1955, 1955, 1963, 1963, 1955,
-
-     1955, 1963, 1966, 1959, 1960, 1961, 1961, 1961, 1971, 1971,
-     1971, 1971, 1961, 1955, 1961, 1961, 1955, 1955, 1961, 1961,
-     1955, 1979, 1955, 1955, 1961, 1961, 1961, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1961, 1961, 1961, 1961,
-     1961, 1961, 1955, 1955, 1955, 1955, 1955, 1961, 1955, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1955,
-     1961, 1961, 1961, 1955, 1955, 1955, 1961, 1961, 1961, 1955,
-     1955, 1955, 1955, 1955, 1955, 1961, 1961, 1961, 1961, 1961,
-     1961, 1955, 1955, 1955, 1955, 1982, 1961, 1961, 1955, 1981,
-     1955, 1955, 1961, 1955, 1955, 1961, 1961, 1961, 1961, 1961,
-
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1969, 1969, 1969, 1962, 1983, 1967, 1967, 1955, 1955, 1963,
-     1963, 1966, 1971, 1971, 1971, 1971, 1961, 1955, 1955, 1961,
-     1961, 1955, 1955, 1961, 1961, 1984, 1961, 1961, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1961, 1961,
-     1961, 1955, 1961, 1961, 1961, 1961, 1955, 1955, 1955, 1955,
-     1955, 1955, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961,
-     1961, 1961, 1955, 1961, 1961, 1955, 1961, 1961, 1955, 1955,
-     1955, 1955, 1961, 1961, 1961, 1961, 1955, 1955, 1955, 1955,
-
-     1955, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1955, 1955,
-     1955, 1955, 1982, 1955, 1955, 1955, 1985, 1986, 1955, 1961,
-     1961, 1961, 1961, 1961, 1955, 1955, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1987, 1969, 1969, 1962, 1983, 1967, 1967, 1955, 1955, 1971,
-     1971, 1971, 1971, 1961, 1955, 1955, 1961, 1961, 1955, 1955,
-     1961, 1961, 1988, 1961, 1961, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1961, 1961, 1961, 1961,
-     1961, 1955, 1961, 1961, 1961, 1955, 1955, 1955, 1955, 1955,
-
-     1955, 1955, 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1955, 1961, 1955, 1961, 1955, 1961, 1961, 1955, 1955,
-     1955, 1955, 1961, 1961, 1961, 1961, 1955, 1955, 1955, 1955,
-     1955, 1961, 1961, 1955, 1961, 1961, 1961, 1961, 1961, 1955,
-     1955, 1955, 1955, 1989, 1985, 1955, 1990, 1955, 1955, 1955,
-     1955, 1955, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1987, 1969, 1969, 1962, 1967, 1967, 1955, 1955, 1971,
-     1971, 1961, 1955, 1955, 1961, 1961, 1955, 1955, 1961, 1988,
-
-     1961, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1961,
-     1961, 1961, 1961, 1961, 1955, 1961, 1961, 1955, 1961, 1955,
-     1961, 1955, 1961, 1961, 1955, 1955, 1955, 1955, 1961, 1961,
-     1961, 1961, 1955, 1955, 1955, 1955, 1955, 1955, 1961, 1961,
-     1961, 1955, 1961, 1961, 1961, 1961, 1955, 1955, 1955, 1955,
-     1991, 1955, 1990, 1955, 1955, 1955, 1955, 1955, 1961, 1961,
-     1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1955, 1992, 1961, 1961, 1961, 1961, 1961, 1961,
-
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1969, 1969, 1962, 1967, 1967, 1955, 1971, 1971, 1961,
-     1955, 1955, 1961, 1961, 1955, 1961, 1961, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961,
-     1961, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1961, 1961,
-     1955, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1955,
-     1961, 1955, 1955, 1961, 1955, 1955, 1955, 1955, 1961, 1961,
-     1955, 1961, 1961, 1955, 1955, 1955, 1955, 1955, 1955, 1961,
-     1961, 1961, 1961, 1961, 1955, 1961, 1955, 1955, 1955, 1991,
-
-     1955, 1955, 1955, 1955, 1955, 1961, 1961, 1955, 1961, 1961,
-     1961, 1961, 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1992, 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1969, 1969, 1993, 1967, 1967, 1955, 1971, 1971, 1961, 1955,
-     1955, 1961, 1961, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1955, 1961, 1955, 1955, 1955, 1961, 1961, 1955, 1955,
-
-     1955, 1955, 1961, 1961, 1961, 1961, 1955, 1955, 1955, 1955,
-     1955, 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1961, 1961, 1961, 1955, 1961,
-     1961, 1961, 1955, 1955, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1969, 1969, 1994, 1967, 1967, 1967, 1967, 1967, 1955,
-     1971, 1971, 1955, 1955, 1961, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1961, 1961, 1961, 1961,
-     1961, 1955, 1961, 1961, 1961, 1961, 1955, 1955, 1955, 1955,
-
-     1955, 1955, 1955, 1955, 1961, 1961, 1961, 1961, 1961, 1961,
-     1955, 1961, 1961, 1955, 1955, 1955, 1955, 1961, 1961, 1961,
-     1955, 1961, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1961,
-     1961, 1961, 1961, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-     1961, 1961, 1961, 1961, 1961, 1955, 1961, 1955, 1955, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1969, 1969, 1969, 1969, 1969, 1995, 1996,
-     1997, 1995, 1967, 1967, 1967, 1967, 1967, 1955, 1971, 1971,
-     1955, 1961, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-
-     1955, 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955,
-     1955, 1955, 1955, 1955, 1955, 1961, 1961, 1961, 1955, 1961,
-     1961, 1961, 1955, 1955, 1961, 1955, 1955, 1955, 1955, 1961,
-     1961, 1955, 1955, 1955, 1955, 1961, 1955, 1961, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1969, 1969, 1969, 1969, 1969, 1995, 1995,
-     1996, 1996, 1995, 1997, 1995, 1995, 1967, 1967, 1967, 1967,
-     1998, 1971, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-
-     1961, 1961, 1961, 1961, 1955, 1961, 1961, 1955, 1955, 1955,
-     1955, 1955, 1955, 1961, 1961, 1961, 1961, 1961, 1955, 1955,
-     1961, 1961, 1955, 1955, 1961, 1961, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1969, 1969, 1969, 1969, 1999, 1995, 1996, 1967, 1967, 1967,
-     1967, 1998, 1971, 1955, 1955, 1955, 1955, 1955, 1955, 1961,
-     1961, 1961, 1961, 1955, 1955, 1955, 1955, 1961, 1961, 1961,
-     1955, 1961, 1955, 1955, 1955, 1955, 1961, 1961, 1955, 1955,
-
-     1955, 1955, 1961, 1955, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1969, 1969, 1969, 1969, 1999,
-     1967, 1967, 1967, 1967, 1971, 1955, 1955, 1955, 1955, 1961,
-     1961, 1955, 1955, 1955, 1955, 1961, 1961, 1955, 1955, 1955,
-     1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1969, 1969, 1969,
-     1969, 1967, 1967, 1967, 1967, 1955, 1955, 1961, 1961, 1955,
-     1955, 1961, 1961, 1955, 1955, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1969, 1969, 1969, 1969, 2000, 1967, 1967,
-
-     1967, 1955, 1955, 1955, 1955, 1955, 1955, 1961, 1961, 1961,
-     1961, 1961, 1961, 2001, 1969, 1969, 1969, 2000, 1967, 2002,
-     2003, 1961, 1961, 1961, 2001, 1969, 2004, 2005, 1967, 2002,
-     2003, 1961, 1961, 1961, 1969, 2004, 2005, 1967, 1961, 1961,
-     1961, 1969, 2006, 1961, 1961, 2007, 2006, 1961, 1961, 2007,
-     1961, 1961, 1961, 1961,    0, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-
-     1955, 1955, 1955, 1955, 1955, 1955, 1955
+     1115,    1, 1115, 1115, 1115, 1115, 1115, 1115, 1116, 1115,
+     1115, 1117, 1118, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+     1119, 1115, 1115, 1115, 1115, 1120, 1120, 1120, 1120, 1120,
+     1120, 1115, 1115, 1115, 1115, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1115, 1115, 1115, 1115, 1121, 1115,
+     1115, 1115, 1115, 1116, 1115, 1116, 1115, 1115, 1115, 1117,
+     1117, 1118, 1115, 1115, 1122, 1122, 1122, 1122, 1115, 1115,
+     1115, 1115, 1115, 1115, 1115, 1115, 1123, 1115, 1124, 1115,
+     1125, 1126, 1115, 1127, 1119, 1119, 1119, 1115, 1115, 1115,
+
+     1115, 1115, 1115, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1115, 1115, 1115, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1115, 1115, 1115, 1115, 1121,
+     1115, 1115, 1121, 1121, 1128, 1115, 1116, 1115, 1117, 1122,
+     1115, 1122, 1122, 1122, 1115, 1115, 1123, 1123, 1124, 1125,
+     1125, 1126, 1126, 1115, 1129, 1130, 1115, 1115, 1120, 1120,
+     1120, 1120, 1115, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1131, 1121, 1128, 1128, 1128, 1128, 1115, 1115,
+     1118, 1122, 1122, 1122, 1115, 1123, 1115, 1125, 1129, 1130,
+     1120, 1120, 1120, 1120, 1132, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1115, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1131, 1131, 1131, 1131,
+     1128, 1128, 1128, 1128, 1115, 1115, 1122, 1122, 1122, 1120,
+     1120, 1120, 1120, 1133, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1115, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1131, 1131, 1131, 1131, 1128, 1128,
+     1128, 1134, 1135, 1115, 1115, 1122, 1122, 1122, 1120, 1120,
+     1120, 1120, 1133, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1115, 1115, 1115, 1120, 1120, 1120, 1120, 1120, 1120,
+
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1131, 1131, 1131, 1136,
+     1137, 1128, 1128, 1128, 1134, 1135, 1115, 1115, 1122, 1122,
+     1122, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+      495, 1120, 1120, 1120,  495, 1120, 1120, 1115, 1120, 1120,
+     1120, 1120, 1120, 1115, 1115, 1115, 1115, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1115, 1131, 1131, 1131, 1136, 1137, 1128,
+
+     1128, 1128, 1115, 1115, 1122, 1122, 1115, 1115, 1122, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1115, 1120, 1120, 1120, 1115,
+     1120, 1115, 1120, 1115, 1120, 1120, 1115, 1115, 1120, 1115,
+     1115, 1115, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1131,
+     1131, 1131, 1138, 1128, 1128, 1115, 1115, 1122, 1122, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1115,
+     1120, 1115, 1120, 1120, 1115, 1115, 1115, 1120, 1120, 1120,
+
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1139, 1131, 1131, 1138, 1128, 1128, 1115, 1115, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1115, 1115, 1115, 1120, 1120,
+     1115, 1115, 1115, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1139, 1131, 1131, 1128, 1128,
+     1115, 1115, 1120, 1120, 1120, 1120, 1115, 1115, 1115, 1120,
+     1120, 1115, 1115, 1140, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1131, 1131,
+     1128, 1128, 1115, 1120, 1120, 1120, 1120, 1115, 1115, 1115,
+     1120, 1141, 1142, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1131, 1131, 1128,
+     1128, 1115, 1120, 1120, 1120, 1115, 1115, 1115, 1115, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1131, 1131, 1128, 1128,
+     1128, 1128, 1128, 1115, 1120, 1120, 1115, 1115, 1115, 1120,
+
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1131, 1131, 1131, 1131, 1131, 1128, 1128,
+     1128, 1128, 1128, 1115, 1120, 1120, 1115, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1131,
+     1131, 1131, 1131, 1131, 1128, 1128, 1128, 1128, 1143, 1120,
+     1115, 1115, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1131, 1131, 1131, 1131, 1144, 1128,
+
+     1128, 1128, 1128, 1143, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1131, 1131, 1131, 1131, 1144, 1128,
+     1128, 1128, 1128, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1131, 1131, 1131,
+     1131, 1128, 1128, 1128, 1128, 1120, 1120, 1120, 1120, 1120,
+     1131, 1131, 1131, 1131, 1145, 1128, 1128, 1128, 1120, 1120,
+     1120, 1120, 1120, 1146, 1131, 1131, 1131, 1145, 1128, 1147,
+     1148, 1120, 1120, 1120, 1146, 1131, 1149, 1150, 1128, 1147,
+     1148, 1120, 1120, 1120, 1131, 1149, 1150, 1128, 1120, 1120,
+
+     1120, 1131, 1151, 1120, 1120, 1152, 1151, 1120, 1120, 1152,
+     1120, 1120, 1120, 1120,    0, 1115, 1115, 1115, 1115, 1115,
+     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+     1115, 1115
     } ;
 
-static yyconst flex_int16_t yy_nxt[4697] =
+static yyconst flex_int16_t yy_nxt[2685] =
     {   0,
-        4,    5,    6,    5,    5,    7,    8,    4,    9,   10,
-       11,   12,   13,   14,   15,   13,   16,   17,   18,   19,
-       20,   20,   20,   20,   20,   20,   20,   21,   13,   22,
-       23,   24,    4,   25,   26,   27,   26,   26,   26,   26,
-       26,   26,   26,   26,   26,   26,   26,   26,   26,   28,
-       26,   26,   26,   26,   29,   30,   26,   26,   26,   31,
-       32,   33,   34,   35,   36,   37,   38,   39,   40,   41,
-       26,   26,   42,   26,   26,   43,   44,   45,   46,   47,
-       26,   48,   49,   50,   51,   52,   26,   53,   26,   26,
-       54,   55,   56,   57,   55,   63,   66,   58,   70,   70,
-
-       70,   70,   77,   77,   77,   77,   71,   80,   59,  104,
-       72,   82,   98,   99,  101,  102,   86,   67,  106,  111,
-      112,   87,   60,   81,  105,   83,   84,  107,  110,  105,
-       73,   78,   75,   88,   89,  109,   90,   90,   90,   90,
-       90,   90,   90,   90,  114,  105,  105,  108,  105,   64,
-      105,   89,   76,   94,   94,   94,   94,   94,   94,   94,
-       94,  105,  105,  105,  105,  155,  133,   79,  123,  105,
-      115,  118,  120,   92,  105,  116,  121,  119,  124,  122,
-       93,  105,  117,  126,  105,  105,  128,   63,  125,  105,
-      142,  105,  129,  127,  168,  130,  170,   96,  105,  132,
-
-      131,  105,  134,  147,   92,  137,  135,  138,  139,  140,
-      105,  105,  141,  105,  163,  171,  136,  163,  143,  144,
-      151,  105,  191,  148,  194,  156,  152,  149,   86,  145,
-      146,  153,  150,  166,  173,  105,  154,  157,  158,  158,
-      157,   64,  173,  159,  105,   88,   69,  173,   64,   70,
-       70,   70,   70,  175,  160,  174,  176,   71, 1955, 1955,
-      105,   72,  105,  192,  105,   69,  201,  114,  161,   77,
-       77,   77,   77,  164,  105,  205,  105,  206,  211,  187,
-      165,   73,  105,   75,  181,  181,  181,  181,  181,  181,
-      181,  181,   89,  105,   90,   90,   90,   90,   90,   90,
-
-       90,   90,  183,   76,   93,   93,   89,  274,   94,   94,
-       94,   94,   94,   94,   94,   94, 1955,  105,   91,   91,
-       91,   91,   91,   91,   91,   91,  105,  114,  198,  195,
-      105,  105,  204,  183,   79,  105,  105,  193,  185, 1955,
-      220,  186,  186,  186,  186,  186,  186,  186,  186,  105,
-      202,  203,   96,  105,  196,  186,  186,  186,  186,  186,
-      186, 1955,   96,   91,   91,   91,   91,   91,   91,   91,
-       91,  105,  105,  114,  105,  105,  258,  259,  105,  105,
-     1624,  188,  105,  105,  209,   93,  186,  186,  186,  186,
-      186,  186,  207,  208,  213,  210,  212,  215,  214,  105,
-
-      199,  105,  105,  219,  105,  105,  105,   96,  200,  105,
-      216,  105,  105,  105,  217,  105,  304,  225,  222,  105,
-      105,  105,  218,  230,  221,  105,  248,  105,  228,  223,
-      105,  224,  234,  227,  229,  233,  236,  231,  105,  232,
-      105,  237,  105,  105,  238,  105,  105,  105,  105,   63,
-      163,  235,  242,  163,  241,  240,  244,  246,  239,  255,
-      247,  170,  243,  245,  249,  157,  158,  158,  157,  163,
-      164,  159,  163,  162,  252,  272,  173,  173,  253,  173,
-      273,  105,  160,  277,  105,  278,  105, 1955,  105,  256,
-      261,  105,  257,  105,  262,  280,  161,  105,  263,  105,
-
-      105,  105,  288,   64,  279,  285,  282,  287,  105,  164,
-      293,   69,  105,  105,  105,  283,  165, 1719,  181,  181,
-      181,  181,  181,  181,  181,  181,  270,  289,  164,  284,
-      286,  164,  105,   93,  291,  165,  183, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955,  265,  105,  265,  105,  292,
-      266,  266,  266,  266,  266,  266,  266,  266,  105,  105,
-      105,  296,  324,  290,  295,  105, 1955,  183,   91,   91,
-       91,   91,   91,   91,   91,   91, 1955,  294,   91,   91,
-       91,   91,   91,   91,   91,   91,  105,  105,  305,  105,
-      105,  297,  105,  105,  105,  105,  267, 1955,  298,   91,
-
-       91,   91,   91,   91,   91,   91,   91, 1720,  303,  105,
-      308,  310,  185,  299,  299,  299,  299,  311,  105,  114,
-      319,  313,  185,  186,  186,  186,  186,  186,  186,  186,
-      186,  105,  315,  105,  105,  162,  271,  186,  186,  186,
-      186,  186,  186,   96,  105,  105,  105,  317,  105,  306,
-      309,  312,  316,  318,  105,  314,  321,  105,  105,  365,
-      105,  105,  105,  325,  409,  105,  322,  269,  186,  186,
-      186,  186,  186,  186,  320,  105,  326,  105,  323,  328,
-      329,  105,  105,  331,  351,  330,  327,  300,  105,  347,
-     1955,  173,  105,  164,  301,  173,  302,  332,  164,  333,
-
-      334,  335,  336,  352,  337,  357,  173,  350,  358,  338,
-      366,  105,  359,  105,  339,  340,  341,  342,  343,  348,
-      364,  362,  349,  374,  375,  379,  105, 1955, 1955, 1955,
-     1955,  105,  105,  376, 1723,   71,   93,  105,  105,   72,
-      105,  105,  412,  105,  385,  344,  266,  266,  266,  266,
-      266,  266,  266,  266,  266,  266,  266,  266,  266,  266,
-      266,  266, 1955,  377,   91,   91,   91,   91,   91,   91,
-       91,   91, 1955,  114,   91,   91,   91,   91,   91,   91,
-       91,   91,  105,  381,  381,  381,  381,  105, 1727,  105,
-      105,  105,  105,  105,  105,  415,  402,  105,  390,  105,
-
-      380,  361,  388,  363,  378,  389,  384,  393,  185,   91,
-       91,   91,   91,   91,   91,   91,   91,  386,   96,  369,
-      105,  105,  370,   91,   91,   91,   91,   91,   91,  371,
-      105, 1728,  105,  299,  299,  299,  299,  105,  391,  105,
-      372,  387,  105,  105,  414,  105,  394,  105,  373,  114,
-      392,  417,  398,  269,   91,   91,   91,   91,   91,   91,
-      105,  401,  410,  105,  382,  105,  383,  105,  399,  400,
-      403,  403,  403,  403,  105,  105,  105,  105, 1729,  416,
-      411,  105,  413,  419,  105,  421,  418,  105,  105,  422,
-      425,  427,  424,  105,  105,  105,  420,  428,  105,  430,
-
-      429,  105,  105,  105,  105,  440,  105,  395,  433,  431,
-      434,  105,  432,  438,  396, 1730,  397,  436,  436,  436,
-      436,  439,  105,  435,  105,  105,  105,  437,  105,  443,
-      444,  105,  105,  446,  442,  441,  404,  105,  105,  105,
-      445,  405,  105,  114,  406,  454,  450,  164,  447,  173,
-      459,  407,  449,  408,  451,  460,  448,  173,  173,  458,
-     1955,  473,  452,  477,  455,  467,  475,  476,  466,  105,
-      373,  474,  105,  373,  453,  483,  478, 1731,  468,  105,
-     1955,  370,   91,   91,   91,   91,   91,   91,   91,   91,
-      471, 1955,  105,   91,   91,   91,   91,   91,   91,   91,
-
-       91,  105,  373,  479,  481,  480,   93,  373,  105,  105,
-      105,  470,  164,  105,  105,  105,  373,  105,  485,  105,
-      692,  472,  497,  489,  488,  484,  185,  105,  482,  381,
-      381,  381,  381,  490,  490,  490,  490,   96,  491,  491,
-      491,  491,  105,  105,  105,  105,  105,  494,  495,  105,
-      499,  502,  503,  496,  500,  105,  105,  105,  105,  498,
-      105,  509,  105,  105,  507,  105,  105,  492,  105,  505,
-      105,  506,  403,  403,  403,  403,  516,  508,  515,  518,
-      517,  105,  519,  105,  105,  105,  523,  105,  524,  105,
-      105,  105,  526,  520,  527,  105,  105,  105,  114,  521,
-
-      493,  522,  529,  105,  548,  525,  530,  530,  530,  530,
-      486,  105,  487,  105,  538,  534,  528,  535,  675,  539,
-      105,  105,  105,  544,  105,  540,  105,  542,  105,  541,
-      105,  545,  105,  546,  547,  547,  547,  547,  510,  105,
-      549,  543,  105,  511,  536,  553,  512,  436,  436,  436,
-      436,  552,  105,  513,  105,  514,  105,  437,  550,  550,
-      550,  550,  105,  558,  105,  105,  105,  105,  105,  556,
-      551,  561,  554,  105,  105,  105,  557,  531,  555,  105,
-      564,  105,  562,  164,  559,  560,  105,  532,  563,  533,
-      566,  565,  568,  173,  173,  173,  105,  569,  567, 1955,
-
-      573,  582,  588,  589,  593,  105,  627, 1955,  583,   91,
-       91,   91,   91,   91,   91,   91,   91, 1955,  581,   91,
-       91,   91,   91,   91,   91,   91,   91,  587,  590,  591,
-      105,  105,  585,  592,  373,  595,  594,  584,  105,  373,
-      105,  597,  105,  105,  373,   93,  105,  596,  114,  600,
-      586,  105,  105,  185,  105,  604,  713,  373,  490,  490,
-      490,  490,  601,   96,  491,  491,  491,  491,  105,  105,
-      606,  606,  606,  606,  105,  611,  105,  603,  605,  105,
-      105,  105,  105,  105,  105,  105,  105,  105,  614,  105,
-      105,  105,  626,  492,  612,  105,  613,  615,  624,  623,
-
-      105,  621,  105,  622,  628,  625, 1330,  630,  629,  105,
-      631,  632,  632,  632,  632,  105,  105,  105,  635,  105,
-      634,  114,  530,  530,  530,  530,  640,  654,  642,  105,
-      639,  105,  105,  641,  105,  643,  643,  643,  643,  655,
-      655,  655,  655,  105,  105,  105,  661,  105,  105,  656,
-      657,  547,  547,  547,  547,  105,  658,  665,  105,  667,
-      660,  105,  550,  550,  550,  550,  105,  649,  662,  662,
-      662,  662,  681,  105,  551,  105,  668,  105,  666,  663,
-      105,  669,  105,  105,  105,  686,  683,  682,  105,  670,
-      173,  671,  633,  636,  769,  672,  173,  644,  673,  707,
-
-      645,  105,  674,  637,  699,  638,  646,  105,  676,  647,
-      105,  684,  709,  698, 1955,  708,  648,  706,  677,  105,
-      678,  105,  685,  105,  679,  711,  105,  680,  700,  700,
-      700,  700,  105,  725,  710,  947,  105,  712,  373, 1955,
-      701,   91,   91,   91,   91,   91,   91,   91,   91,  704,
-      373,  105,  373,  105,  173,  373,  105,  105,  742, 1955,
-       93,   91,   91,   91,   91,   91,   91,   91,   91,  105,
-      719,  105,  703,  727,  741,  702,  714,  714,  714,  714,
-      720,  721,  721,  721,  721,  185,  606,  606,  606,  606,
-      736,  736,  736,  736,  705,  105,  105,  105,  748,  749,
-
-      749,  749,  749,  105,  752,   96,  105,  723,  724,  105,
-      105,  105,  105,  755,  105,  740,  759,  753,  754,  757,
-      757,  757,  757,  105,  756,  632,  632,  632,  632,  105,
-      762,  834,  105,  105,  767,  761,  770,  114,  105,  768,
-      643,  643,  643,  643,  373,  763,  105,  778,  105,  114,
-      105,  728,  105,  105,  777,  105,  780,  715,  787,  716,
-      788,  105,  105,  776,  737,  779,  793,  729,  730,  731,
-      962,  738,  105,  739,  105,  105,  373,  105,  781,  796,
-      750,  105,  751,  655,  655,  655,  655,  105,  798,  789,
-      789,  789,  789,  662,  662,  662,  662,  800,  105,  807,
-
-      758,  105,  771,  797,  663,  772,  760,  794,  794,  794,
-      794,  773,  105,  801,  774,  791,  792,  795,  105,  799,
-      105,  775,  662,  662,  662,  662,  105,  105,  802,  105,
-      105,  105,  804,  663,  105,  808,  105,  105,  809,  105,
-      803,  813,  811,  105,  814,  805,  105,  173,  815,  806,
-      105,  810,  824,  816,  820,  824,  817,  173,  818,  812,
-     1955,  594,  819,  105,  105,  903,  105,  700,  700,  700,
-      700,  835,  840,  831,  594, 1732,  105,  830, 1955,  701,
-       91,   91,   91,   91,   91,   91,   91,   91, 1955,  105,
-       91,   91,   91,   91,   91,   91,   91,   91,  105,  373,
-
-      714,  714,  714,  714,  105,  105,   93,  105,  105,  114,
-      844,  164,  105,  832,  845,  105,  105,  860,  841,  837,
-      721,  721,  721,  721,  185,  721,  721,  721,  721,  105,
-      859,  847, 1195,  865,   96,  105,  105,  105,  848,  736,
-      736,  736,  736,  736,  736,  736,  736,  724,  105,  873,
-      861,  723,  724,  862,  862,  862,  862,  749,  749,  749,
-      749,  105,  866,  749,  749,  749,  749, 1733,  105,  105,
-      874,  876,  876,  876,  876,  105,  881,  105,  105,  105,
-      880,  838,  875,  839,  882,  757,  757,  757,  757,  884,
-      105,  105,  105,  887,  885,  892,  892,  892,  892,  105,
-
-      105,  105,  114,  105,  105,  907,  895,  105,  896,  888,
-      105,  927,  105,  853,  905,  105,  948,  853,  906,  105,
-      854,  904,  855,  105,  854,  928,  855,  105,  105,  912,
-      912,  912,  912,  105,  863,  105,  864,  902,  868,  929,
-      869,  933,  877,  105,  868,  932,  869,  916,  916,  916,
-      916,  105,  878,  939,  879,  914,  915,  105,  789,  789,
-      789,  789,  789,  789,  789,  789,  883,  919,  919,  919,
-      919,  794,  794,  794,  794,  917,  893,  105,  894,  105,
-      105,  795,  931,  934,  105,  792,  930,  938,  791,  792,
-      925,  925,  925,  925,  105,  105,  105,  937,  105,  935,
-
-      936,  105,  105,  105,  941,  105,  105,  945,  105,  105,
-      105,  950,  105,  946,  824,  943,  940,  824,  963,  944,
-      942,  700,  700,  700,  700,  949,  972,  105,  975,  920,
-      105,  961,  921,  701,  700,  700,  700,  700,  922,  105,
-      105,  923,  373,  105,  373,  370,  701,  173,  924, 1955,
-      964,   91,   91,   91,   91,   91,   91,   91,   91,  960,
-      173,  105,  105,  974,  105,  105,  105,  954,  702,  967,
-      971,  373,  105,  164,  926,  862,  862,  862,  862,  987,
-      968,  702,  105,  989,  862,  862,  862,  862,  105,  988,
-      105,  105,  105,  105, 1077,  185,  995,  990,  992,  992,
-
-      992,  992, 1008,  105,  991,  876,  876,  876,  876,  105,
-     1005, 1006,  105,  105, 1004,  105,  876,  876,  876,  876,
-      105,  105,  105,  105, 1010,  105, 1007, 1009, 1018, 1011,
-     1014, 1014, 1014, 1014, 1023,  105, 1013,  892,  892,  892,
-      892,  105, 1017,  892,  892,  892,  892,  105, 1026, 1024,
-      105,  105, 1025,  105,  105,  105,  983,  105,  984,  114,
-      105, 1037,  105,  105, 1032,  983, 1065,  984, 1761, 1033,
-     1054, 1038,  993,  105, 1039,  105,  999, 1055, 1316,  994,
-     1034, 1034, 1034, 1034,  105, 1053, 1000,  999, 1001,  105,
-     1056, 1060,  105,  916,  916,  916,  916, 1000, 1059, 1001,
-
-      912,  912,  912,  912,  912,  912,  912,  912,  105,  105,
-      105, 1015,  919,  919,  919,  919, 1057,  105, 1019,  105,
-     1020,  917, 1061, 1062, 1019,  105, 1020,  915, 1063, 1067,
-      914,  915,  925,  925,  925,  925,  105,  105,  105, 1066,
-      105, 1064,  105,  105,  105, 1070,  105,  105,  105,  105,
-     1068,  105, 1071,  105, 1035, 1073, 1069,  105, 1079, 1085,
-     1076, 1036, 1074, 1078, 1072,  105, 1091,  164, 1075, 1080,
-     1090,  105,  105,  373, 1048,  105, 1092, 1049,  373,  105,
-     1081, 1096,  105, 1050, 1099,  105, 1051,  105,  105, 1095,
-      105, 1190, 1114, 1052,  721,  721,  721,  721,  105, 1116,
-
-      105, 1101,  992,  992,  992,  992, 1118, 1117,  992,  992,
-      992,  992, 1115,  105,  105,  105,  926,  105,  105, 1121,
-      723,  724, 1120,  105,  105,  105,  105, 1131, 1119, 1137,
-      105, 1130, 1133, 1135, 1135, 1135, 1135, 1014, 1014, 1014,
-     1014,  105,  105, 1132,  105, 1134,  105,  105,  105,  105,
-     1139,  105, 1151, 1141, 1149, 1034, 1034, 1034, 1034,  105,
-     1762, 1143,  105, 1152, 1144, 1150, 1034, 1034, 1034, 1034,
-     1161, 1159,  105,  105, 1160,  114, 1111, 1162, 1162, 1162,
-     1162, 1763, 1111, 1112, 1172, 1172, 1172, 1172,  105, 1112,
-      105, 1180, 1165, 1166,  105,  105,  789,  789,  789,  789,
-
-      105,  105, 1185,  105, 1136,  105, 1186, 1187, 1181, 1183,
-     1179,  105,  105,  105, 1182,  105, 1764,  105, 1140, 1188,
-      105, 1193,  791,  792, 1193,  105, 1189, 1191, 1197, 1155,
-     1192, 1194, 1196,  105, 1201,  105, 1156,  105,  105,  105,
-     1155,  105,  105,  105,  105, 1209, 1207, 1156, 1163,  728,
-     1199, 1164, 1198,  105, 1202, 1200, 1203,  105, 1214, 1204,
-     1205, 1206, 1208, 1218, 1210,  729,  591,  731, 1211,  105,
-     1219,  105,  105,  105, 1223,  164, 1226,  105, 1224,  105,
-     1244,  373, 1243,  105,  721,  721,  721,  721, 1240, 1240,
-     1240, 1240,  105,  373,  105,  105,  105,  105,  105, 1227,
-
-      105, 1259, 1273, 1246,  105, 1765, 1245, 1260, 1267, 1247,
-      723,  724,  105, 1248, 1249, 1249, 1249, 1249, 1135, 1135,
-     1135, 1135, 1261, 1261, 1261, 1261, 1264,  105, 1135, 1135,
-     1135, 1135,  105,  105,  105,  105, 1265,  105,  105, 1281,
-     1281, 1281, 1281,  105, 1280, 1290, 1266,  105, 1283, 1271,
-      105, 1279, 1269, 1162, 1162, 1162, 1162,  105,  105,  105,
-      105, 1291, 1162, 1162, 1162, 1162, 1329,  105,  105, 1241,
-     1317, 1242, 1292, 1293, 1551, 1294,  105, 1295, 1295, 1295,
-     1295, 1306,  105,  105,  105,  105, 1307,  105, 1250, 1257,
-      912,  912,  912,  912, 1311, 1251,  105, 1314,  105, 1257,
-
-     1312,  105,  105, 1262,  105, 1263, 1172, 1172, 1172, 1172,
-     1282,  789,  789,  789,  789,  105,  914,  915, 1308, 1308,
-     1308, 1308, 1318, 1315, 1287,  105,  105, 1288, 1323,  105,
-     1331, 1193, 1319, 1287, 1193, 1324, 1288,  791,  792,  105,
-      105, 1194,  105,  105, 1320,  105,  105, 1325, 1296, 1328,
-     1327,  105, 1334,  105, 1335, 1339,  105, 1336, 1337,  164,
-     1326, 1347, 1343,  105, 1333, 1348, 1332,  114,  105,  105,
-      105,  728, 1352, 1338, 1340,  105,  373, 1353, 1367, 1369,
-      105,  105,  105,  105,  105,  105, 1371,  729, 1680,  731,
-      105,  373, 1309, 1349, 1387,  105, 1368, 1372, 1370, 1310,
-
-      490,  490,  490,  490,  547,  547,  547,  547, 1240, 1240,
-     1240, 1240, 1249, 1249, 1249, 1249, 1240, 1240, 1240, 1240,
-      105,  105, 1249, 1249, 1249, 1249,  105, 1373,  105, 1261,
-     1261, 1261, 1261,  105,  105,  105, 1376, 1385,  105, 1374,
-      105, 1375, 1261, 1261, 1261, 1261,  105, 1390, 1386, 1388,
-      105, 1389, 1395, 1392, 1392, 1392, 1392, 1682, 1391,  105,
-      105,  114, 1281, 1281, 1281, 1281,  105, 1404,  105, 1413,
-     1397, 1403, 1281, 1281, 1281, 1281,  105,  105,  105, 1416,
-     1406,  105, 1405,  105, 1414,  105, 1365,  105,  105, 1357,
-     1398, 1358, 1417, 1366,  105, 1418, 1365, 1357, 1680, 1358,
-
-     1427, 1415,  105, 1366, 1295, 1295, 1295, 1295,  105,  105,
-     1379, 1435, 1380,  105, 1426,  105, 1295, 1295, 1295, 1295,
-      105, 1428, 1432, 1379, 1393, 1380,  912,  912,  912,  912,
-     1768,  105, 1769, 1401, 1308, 1308, 1308, 1308, 1308, 1308,
-     1308, 1308, 1438, 1401, 1439, 1436, 1437, 1429, 1429, 1429,
-     1429, 1456,  914,  915, 1433, 1433, 1433, 1433,  105, 1445,
-      105, 1446,  105, 1447, 1453,  105, 1434, 1454, 1440, 1441,
-     1442, 1457, 1443,  105, 1455, 1412, 1458,  114,  105,  105,
-      105,  105, 1448, 1449, 1450, 1475, 1451, 1412, 1472,  105,
-      105, 1459, 1444, 1460, 1461,  105,  105,  105, 1465, 1466,
-
-     1490,  373, 1487,  105,  105,  105, 1452,  105, 1422,  105,
-      105, 1491, 1422,  105, 1467, 1423,  105,  105, 1430, 1423,
-     1770, 1431, 1489, 1488,  105,  162,  162, 1494,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  162,  105, 1468,  655,  655,  655,  655,
-      105,  105,  162,  162,  162,  162,  162,  162, 1492, 1492,
-     1492, 1492, 1541, 1507, 1495,  105, 1496, 1392, 1392, 1392,
-     1392,  105, 1506,  105,  105,  105, 1505, 1508, 1392, 1392,
-     1392, 1392,  105,  105,  162,  164,  162,  162, 1509, 1510,
-      105, 1513,  105,  105,  105, 1771, 1518, 1519,  105, 1590,
-
-      105, 1512, 1521, 1521, 1521, 1521, 1529, 1529, 1529, 1529,
-      105,  105,  105, 1520, 1531,  162,  373, 1532, 1533,  105,
-      105, 1429, 1429, 1429, 1429, 1542,  105, 1543, 1429, 1429,
-     1429, 1429, 1493, 1544, 1546, 1546, 1546, 1546, 1504,  105,
-     1774, 1545, 1433, 1433, 1433, 1433,  105, 1548, 1548, 1504,
-     1548,  105, 1553, 1555, 1434, 1552, 1556, 1550, 1549,  105,
-     1554, 1557, 1568, 1558,  105,  105, 1559,  105,  105, 1563,
-     1560,  105, 1564, 1522,  105,  105, 1561,  105, 1562,  105,
-     1530,  105, 1565, 1566,  105, 1567, 1569,  105,  105,  105,
-      105,  105, 1538, 1574, 1575, 1539,  105, 1775, 1571, 1538,
-
-      105,  105, 1539, 1570,  105, 1547, 1572,  105,  105, 1576,
-     1589,  370, 1592,  105,  105,  105, 1573, 1492, 1492, 1492,
-     1492,  105, 1608, 1604,  105, 1605,  105, 1603, 1624, 1606,
-     1492, 1492, 1492, 1492,  105, 1776,  105,  373, 1616, 1655,
-     1577, 1579, 1579, 1580, 1579, 1579, 1579, 1579, 1579, 1579,
-     1579, 1579,  162, 1579, 1579, 1579, 1579, 1579, 1579, 1579,
-      105,  105,  105,  105,  105,  105,  105,  105, 1579, 1579,
-     1579, 1579, 1579, 1579, 1618, 1607, 1617,  105, 1636, 1609,
-     1619, 1619, 1619, 1619,  105,  105, 1622, 1649, 1646, 1621,
-     1630, 1599, 1521, 1521, 1521, 1521, 1625,  105,  105, 1657,
-
-     1579, 1582, 1579, 1579, 1599, 1521, 1521, 1521, 1521,  105,
-     1658, 1631, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529,
-     1637, 1637, 1637, 1637, 1546, 1546, 1546, 1546,  105,  105,
-      105, 1579,  105,  105,  105, 1659, 1647, 1546, 1546, 1546,
-     1546,  105,  105,  105,  105, 1660, 1650, 1651, 1648, 1548,
-     1548, 1620, 1548,  105,  105, 1777, 1652, 1654, 1653,  105,
-     1549,  105, 1656, 1629, 1661,  105,  105,  105, 1663, 1664,
-      105, 1665, 1662,  105, 1666,  105, 1629,  105, 1667,  105,
-     1668,  105,  105,  105, 1669, 1672, 1632,  105, 1779, 1670,
-     1632, 1638,  162, 1686,  105, 1645,  105, 1671,  105, 1701,
-
-      105, 1673, 1692,  916,  916,  916,  916, 1702, 1645, 1683,
-     1683, 1580, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683,
-     1679, 1683, 1683, 1683, 1683, 1683, 1683, 1683,  373,  105,
-      105,  917,  105, 1703, 1784,  105, 1683, 1683, 1683, 1683,
-     1683, 1683, 1715, 1785, 1704, 1705, 1705, 1705, 1705,  105,
-     1680, 1786, 1707, 1619, 1619, 1619, 1619,  105, 1619, 1619,
-     1619, 1619, 1714, 1716,  105,  105,  105, 1787, 1683, 1685,
-     1683, 1683,  105,  105,  105,  105, 1717, 1721, 1637, 1637,
-     1637, 1637,  105,  105, 1718, 1722, 1736,  105, 1725, 1637,
-     1637, 1637, 1637, 1739, 1737, 1738, 1726,  105, 1740, 1683,
-
-     1734, 1734, 1734, 1734,  105,  105,  105,  105,  105, 1744,
-      105,  105,  105, 1745,  105, 1746,  105, 1741,  105, 1706,
-      105, 1747, 1742, 1743, 1711,  105, 1748,  105, 1752, 1711,
-     1753, 1749, 1750,  105,  105,  105, 1754, 1755, 1751, 1757,
-      105,  105,  105, 1760,  162, 1759, 1793, 1758, 1794, 1724,
-     1679, 1766, 1773, 1756, 1681, 1767,  105,  105,  105,  105,
-     1724,  105,  105, 1705, 1705, 1705, 1705,  105, 1782,  105,
-     1781, 1780,  105, 1783, 1735, 1679, 1766,  105, 1795, 1790,
-      373, 1705, 1705, 1705, 1705,  105, 1789, 1796,  105, 1788,
-     1791, 1791, 1791, 1791, 1800, 1797, 1734, 1734, 1734, 1734,
-
-     1801, 1802, 1680, 1734, 1734, 1734, 1734,  105, 1680,  105,
-      105, 1806, 1682, 1683, 1683, 1580, 1683, 1683, 1683, 1683,
-     1683, 1683, 1683, 1683, 1679, 1683, 1683, 1683, 1683, 1683,
-     1683, 1683,  105, 1680,  105, 1808,  105, 1778,  105,  105,
-     1683, 1683, 1683, 1683, 1683, 1683,  105, 1803, 1804, 1804,
-     1804, 1804,  105,  105, 1798, 1778,  105, 1811, 1807,  105,
-     1823, 1792,  105,  105,  105,  105,  105,  105,  105,  105,
-     1799, 1809, 1683, 1685, 1683, 1683,  105, 1799, 1810,  105,
-     1812, 1815, 1813, 1814, 1816, 1818, 1819,  105,  105,  105,
-      105, 1817, 1826, 1827, 1828, 1829, 1679, 1820, 1681, 1824,
-
-     1831, 1832, 1833, 1683, 1822, 1821, 1834, 1835, 1825, 1836,
-      105, 1837, 1838, 1839,  105,  105,  105,  105, 1842, 1805,
-     1840, 1843, 1844,  105,  105,  105,  373, 1791, 1791, 1791,
-     1791, 1841,  105, 1791, 1791, 1791, 1791, 1846, 1848, 1847,
-     1849,  105,  105, 1850, 1804, 1804, 1804, 1804,  105, 1804,
-     1804, 1804, 1804,  105, 1680,  105, 1682,  105, 1854,  105,
-      105,  105, 1852,  105,  105,  105,  105, 1853,  105,  105,
-      105,  105,  105,  105,  105,  105,  105, 1868, 1857, 1855,
-     1858, 1859,  105, 1860, 1856, 1865, 1861, 1862, 1863, 1864,
-     1866,  105, 1869, 1870, 1871, 1872, 1867, 1873, 1845, 1874,
-
-     1875,  373, 1876, 1877, 1845,  105,  105, 1880, 1881, 1878,
-      105,  105, 1884, 1879, 1882, 1851, 1885,  105,  105,  105,
-     1851,  105,  105,  105, 1886,  105,  105,  105,  105,  105,
-     1889, 1883,  105,  105,  105,  105, 1892, 1888, 1887, 1890,
-     1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902,
-     1903,  105, 1891,  105, 1904, 1905,  105,  105,  105, 1906,
-     1907,  105,  105,  105,  105,  105,  105,  105,  105, 1913,
-     1910, 1914, 1915, 1916, 1917, 1919, 1920, 1921, 1908,  105,
-      105, 1911,  105, 1909,  105,  105, 1926, 1912,  105, 1922,
-     1923, 1924, 1927, 1928, 1929,  105, 1933,  105, 1935, 1938,
-
-      105, 1940,  105,  105, 1942, 1943, 1944,  105,  105, 1946,
-     1932, 1945,  105, 1948,  105, 1934, 1939,  105, 1941,  105,
-      105,  105, 1951,  105,  105,  105,  105,  973, 1047, 1171,
-     1713, 1712, 1710, 1709, 1708, 1949, 1952,  105, 1953, 1700,
-     1954,   62,   62,   62,   62,   62,   62,   62,   62,   62,
-       62,   62,   68,   68,   68,   68, 1699,   68,   68,   68,
-       68,   68,   68,   74,   74,   74, 1698, 1697, 1696, 1695,
-     1694,  105,   74,   91,   91, 1693,  373,   91,   95,   95,
-     1089, 1691,   95,  103, 1690, 1689,  103,  162,  162, 1688,
-      162,  162,  162,  162,  162,  162,  162,  162,  172,  172,
-
-     1687,  172,  180,  180, 1682,  180,  180,  180,  180,  180,
-      180,  180,  180,  182, 1680, 1678,  182,  184,  184, 1677,
-     1676,  184,  254,  254, 1675,  254,  254,  254,  254,  254,
-      254,  254,  254,  268, 1674,  105,  268,  346,  346,  105,
-      346,  346,  346,  346,  346,  346,  346,  346,  367, 1644,
-     1643,  367,  368, 1642, 1641,  368,  577,  577, 1640,  577,
-      577,  577,  577,  577,  577,  577,  577,  578,  578, 1639,
-      578,  578,  578,  578,  578,  578,  578,  578,  602,  602,
-      105,  105, 1635, 1634, 1633,  105,  105,  602,  659,  659,
-     1628, 1627, 1626, 1623, 1615, 1614, 1613,  659,  664,  664,
-
-     1612, 1611,  664, 1610,  664,  105,  105,  664,  690,  690,
-     1602,  690,  690,  690,  690,  690,  690,  690,  690,  691,
-      691, 1601,  691,  691,  691,  691,  691,  691,  691,  691,
-      722,  722, 1600, 1598, 1597, 1596,  722,  722,  722,  722,
-      786,  786, 1595, 1594, 1593, 1591, 1588, 1587, 1586,  786,
-      790,  790, 1585, 1584, 1583, 1578,  790,  790,  790,  790,
-      913,  913,  105,  105,  105, 1540,  913,  913,  913,  913,
-      955,  955, 1537,  955,  955,  955,  955,  955,  955,  955,
-      955, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
-     1045, 1045, 1082, 1082, 1536, 1082, 1082, 1082, 1082, 1082,
-
-     1082, 1082, 1082, 1100, 1100, 1535, 1534,  105,  105, 1100,
-     1100, 1100, 1100, 1173, 1173, 1528, 1527, 1526, 1525, 1173,
-     1173, 1173, 1173, 1300, 1300, 1524, 1523, 1517, 1516, 1300,
-     1300, 1300, 1300, 1321, 1321, 1321, 1321, 1321, 1321, 1321,
-     1321, 1321, 1321, 1321, 1464, 1464, 1515, 1464, 1464, 1464,
-     1464, 1464, 1464, 1464, 1464, 1581, 1581, 1581, 1581, 1581,
-     1581, 1581, 1581, 1581, 1581, 1581, 1679, 1679, 1514, 1679,
-     1679, 1679, 1679, 1679, 1679, 1679, 1679, 1681, 1681, 1511,
-     1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1684, 1684,
-     1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1772,
-
-     1772, 1395, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772,
-     1830, 1830,  105, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
-     1830, 1918, 1918,  105, 1918, 1918, 1918, 1918, 1918, 1918,
-     1918, 1918, 1925, 1925, 1503, 1925, 1925, 1925, 1925, 1925,
-     1925, 1925, 1925, 1930, 1930, 1502, 1930, 1930, 1930, 1930,
-     1930, 1930, 1930, 1930, 1931, 1931, 1501, 1931, 1931, 1931,
-     1931, 1931, 1931, 1931, 1931, 1936, 1936, 1500, 1936, 1936,
-     1936, 1936, 1936, 1936, 1936, 1936, 1937, 1937, 1499, 1937,
-     1937, 1937, 1937, 1937, 1937, 1937, 1937, 1947, 1947, 1498,
-     1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1950, 1950,
-
-     1497, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950,  105,
-     1486, 1485, 1484, 1483, 1482, 1481, 1480, 1479, 1478, 1477,
-     1476,  105, 1474, 1473, 1471, 1470, 1469, 1463, 1462,  105,
-      105,  105,  105,  105,  105, 1322,  105,  105, 1425, 1424,
-     1421, 1420, 1419, 1411, 1410, 1409, 1408, 1407, 1402, 1400,
-     1399, 1273, 1396, 1394, 1384, 1383, 1382, 1381, 1378, 1377,
-     1364, 1363, 1362, 1361, 1360, 1359, 1356, 1355,  105,  105,
-     1354, 1351, 1350, 1346, 1345, 1344, 1342, 1341,  105,  105,
-     1322,  105, 1313, 1305, 1304, 1303, 1302, 1301, 1299,  654,
-     1298, 1297,  105, 1289, 1286, 1285, 1284, 1278, 1277, 1276,
-
-     1275, 1274, 1272, 1270, 1268, 1258, 1256, 1255, 1254, 1253,
-     1252, 1239, 1238, 1237, 1236, 1235, 1234, 1233, 1232, 1231,
-     1230, 1229, 1228, 1225, 1222, 1221, 1220, 1217, 1216, 1215,
-     1213, 1212, 1184, 1178, 1177, 1176, 1175, 1174, 1046, 1170,
-     1169, 1168, 1167,  105, 1158, 1157, 1154, 1153, 1148, 1147,
-     1146, 1145, 1142, 1138,  105, 1129, 1128, 1127, 1126, 1125,
-     1124, 1123, 1122, 1113, 1110, 1109, 1108, 1107, 1106, 1105,
-     1104, 1103, 1102,  105,  105, 1098, 1097, 1094, 1093,  373,
-      373, 1089, 1088, 1087, 1086, 1084, 1083,  105, 1058, 1046,
-     1044, 1043, 1042, 1041, 1040, 1031, 1030, 1029, 1028, 1027,
-
-     1022, 1021, 1016, 1012,  105, 1003, 1002,  998,  997,  996,
-      986,  985,  982,  981,  980,  979,  978,  977,  976,  970,
-      969,  966,  965,  959,  958,  957,  956,  953,  952,  951,
-      105,  918,  105,  911,  910,  909,  908,  901,  900,  899,
-      898,  897,  891,  890,  889,  105,  886,  105,  872,  871,
-      870,  867,  858,  857,  856,  852,  851,  850,  849,  105,
-      846,  843,  842,  836,  833,  105,  173,  829,  828,  827,
-      826,  825,  823,  822,  821,  426,  105,  105,  785,  784,
-      783,  782,  105,  766,  765,  764,  105,  105,  747,  746,
-      745,  744,  743,  105,  735,  734,  733,  732,  726,  718,
-
-      717,  105,  105,  697,  696,  695,  694,  693,  689,  688,
-      687,  105,  653,  652,  651,  650,  105,  105,  620,  619,
-      618,  617,  616,  610,  609,  608,  607,  105,  105,  105,
-      105,  599,  598,  105,  105,  580,  579,  576,  575,  574,
-      572,  571,  570,  105,  537,  105,  504,  501,  105,  105,
-      105,  373,  469,  465,  464,  463,  462,  461,  457,  456,
-      426,  423,  105,  105,  105,  187,  360,  356,  355,  354,
-      353,  345,  307,  105,  281,  276,  275,  264,  260,  173,
-      164,  167,  251,  250,  226,  197,  105,  190,  189,  179,
-      178,  177,  173,  169,  167,  113,  105,  100,   97,   85,
-
-       69,   65,   61, 1955,    3, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955
-
+        4,    5,    6,    7,    7,    5,    8,    9,    4,   10,
+       11,   12,   13,   14,   15,   16,   17,   18,   19,   20,
+       21,   21,   21,   21,   21,   21,   21,   22,   23,   24,
+       25,    4,   26,   27,   28,   27,   27,   27,   27,   27,
+       27,   27,   27,   27,   27,   27,   27,   27,   29,   27,
+       27,   27,   27,   30,   31,   27,   27,   32,   33,   34,
+       35,   36,   37,   38,   39,   40,   41,   42,   27,   27,
+       43,   27,   27,   44,   45,   46,   47,   48,   27,   49,
+       50,   51,   52,   53,   27,   54,   27,   27,   55,   56,
+       57,   62,   58,   56,   65,   62,   59,   68,   72,   72,
+
+       80,   72,   72,  108,   82,   88,   60,   73,  106,   89,
+      105,   74,   99,  100,   81,  107,   69,   83,   84,   61,
+       90,  102,  103,  109,  106,  111,  112,   85,  113,   75,
+       86,   77,   87,   87,   87,   87,   87,   87,   87,   87,
+      106,  106,  156,  171,  106,   66,  106,  106,  106,  285,
+       91,   78,   92,   92,   92,   92,   92,   92,   92,   92,
+      128,  133,  132,  172,  106,   65,  129,  106,   91,   93,
+       95,   95,   95,   95,   95,   95,   95,   95,  116,  110,
+      106,  106,  155,  106,  194,  117,  106,   97,   94,  106,
+      118,  120,  106,  167,  126,  121,  119,  106,  122,   93,
+
+      130,  157,  123,  106,  127,  131,  106,  134,  106,  106,
+      140,  135,  124,  141,  142,   62,   66,   97,   94,   62,
+      106,  136,  125,  106,  137,  106,  138,  139,  143,  144,
+      147,   88,  106,  148,  168,  165,  171,  150,  169,  145,
+      146,  152,  151,  171,   66,  189,   90,  153,  173,  174,
+      149,  191,  154,  158,  159,   65,  159,  158,   72,   72,
+      160,   72,   72,  190,  106,  207,  106,   73,  193,  106,
+      161,   74,  106,   87,   87,   87,   87,   87,   87,   87,
+       87,   71,  106,  162,  195,   71,  203,  106,  106,   75,
+      178,   77,   87,   87,   87,   87,   87,   87,   87,   87,
+
+      106,  106,  106,  106,  208,  106,   66,  204,  106,  181,
+       91,   78,   92,   92,   92,   92,   92,   92,   92,   92,
+      178,  205,  106,  206,  232,  221,  184,  184,  106,  183,
+      185,  185,  185,  185,  185,  185,  185,  185,   91,  181,
+       95,   95,   95,   95,   95,   95,   95,   95,  106,  212,
+      259,  260,  106,  227,  106,  282,  332,   97, 1115,  183,
+     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,  184,  184,
+     1115,  190,  185,  185,  185,  185,  185,  185,  185,  185,
+      190,  192,  106,  106,  106,  106,  106,   97, 1106,  106,
+      106,  106,  297,  106,  211,  106,  106,  209,  210,  213,
+
+      106,  217,  218,  222,  214,  106,  196,  219,  197,  198,
+      223,  199,  106,  106,  200,  220,  215,  106,  106,  106,
+      216,  106,  106,  106,  201,  202,  224,  106,  230,  233,
+      236,  234,  106,  106,  231,  225,  235,  226,  229,  106,
+      239,  238,  106,  240,  106,  243,  242,  106,  106,  237,
+      106,  106,  256,  245,  106,  168,  247,  241,  244,  249,
+      171,  171,  250,  246,  171,  251,  248,  158,  159,  252,
+      159,  158,  272,  163,  160,  254,  263,  262,  106,  264,
+      257,  106,  106,  258,  161, 1115, 1115, 1115, 1115, 1115,
+     1115, 1115, 1115,  277,  271,  274,  283,  162,  106,  265,
+
+      265,  278,   71,  266,  266,  266,  266,  266,  266,  266,
+      266, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,  106,
+      106,  273,  106,  106,  320,  281,  267,  267,  106,  164,
+      268,  268,  268,  268,  268,  268,  268,  268, 1115,  106,
+     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,  184,  184,
+     1115,  413,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
+      185,  185,  185,  185,  185,  185,  186,  186,  186,  186,
+      186,  186,  186,  186,  106,  106,  106,  106,  279,  186,
+      186,  186,  186,  186,  186,  106,  280,  106,  288,  290,
+
+      106,  287,  106,  106,  296,  284,  106,  106,  295,  106,
+      106,  106,  289,  291,  106,  300,  293,  106,  303,  186,
+      186,  186,  186,  186,  186,  292,  294,  298,  106,  299,
+      106,  301,  106,  302,  106,  106,  306,  106,  106,  190,
+      106,  305,  307,  106,  106,  106,  106,  106,  106,  106,
+      304,  106,  322,  315,  106,  106,  309,  314,  311,  319,
+      106,  316,  318,  106,  106,  312,  313,  317,  106,  310,
+      326,  321,  323,  327,  106,  106,  325,  106,  106,  106,
+      333,  163,  351,  171,  324,  171,  106,  329,  348,  328,
+      359,  330,  357,  171,  334,  331,  335,  336,  106,  337,
+
+      352,  338,  375,  362, 1103,  363,  339,  360,  106,  358,
+      361,  340,  341,  342,  343,  344,  349, 1115, 1115,  350,
+     1115, 1115,  106,  106,  106,  106,   73,  106,  369,  106,
+       74,  106,  370,  106,  106,  106,  372,  164,  376,  391,
+      397,  345,  266,  266,  266,  266,  266,  266,  266,  266,
+      266,  266,  266,  266,  266,  266,  266,  266,  268,  268,
+      268,  268,  268,  268,  268,  268,  268,  268,  268,  268,
+      268,  268,  268,  268, 1115, 1115, 1115, 1115, 1115, 1115,
+     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+      368,  365,  106,  106,  190, 1115, 1115, 1115, 1115, 1115,
+
+     1115,  366,  106,  106,  106,  106,  190,  106,  106, 1102,
+      371,  106,  367,  374,  106,  106,  386,  378,  106,  106,
+      381,  373,  106,  379,  385, 1115, 1115, 1115, 1115, 1115,
+     1115,  106,  106,  380,  384,  382,  377,  106,  383,  106,
+      106,  106,  106,  392,  190,  106,  395,  106,  106,  398,
+      387,  106,  106,  389,  390,  106,  399,  388,  106,  106,
+     1098,  393,  106,  106,  396,  106,  404,  400,  407,  106,
+      405,  401,  106,  106,  394,  402,  410,  106,  106,  403,
+      411,  408,  414,  106,  106,  412,  106,  106,  106,  106,
+      106,  417,  415,  418,  106,  422,  106,  416,  106,  106,
+
+      106,  424,  425,  421,  427,  106,  106,  106,  419,  420,
+      106,  106,  190,  439,  423,  426,  431,  435,  440,  428,
+      430,  171,  171,  171,  449,  432,  450,  451,  447,  452,
+      429,  433,  455,  454,  106,  436,  456,  106,  106,  446,
+      457,  106,  434,  448,  106,  106,  106,  106,  106,  459,
+      460,  106,  463,  106,  106,  106,  106,  106,  464,  106,
+      106,  106,  458,  461,  467,  462,  106,  106,  106,  106,
+      472,  469,  465,  470,  106,  106,  466,  106,  471,  475,
+      106,  474,  106,  476,  106,  106,  106,  106,  106,  473,
+      106,  481,  477,  106,  106,  106,  483,  484,  106,  106,
+
+      478,  106,  479,  486,  190,  488,  480,  482,  492,  106,
+      106,  487,  491,  106,  493,  485,  106,  495,  494,  106,
+      497,  498,  106,  499,  106,  106,  501,  106,  106,  106,
+      106,  106,  106,  496,  507,  106,  502,  106,  500,  106,
+      106,  106,  106,  503,  106,  510,  106,  505,  512,  489,
+      504,  513,  506,  106,  106,  508,  511,  509,  515,  517,
+      514,  171,  171,  171,  518,  532,  533,  530,  534,  535,
+      516,  536,  538,  539,  537,  106,  531,  106,  106,  106,
+      106,  106,  106,  542,  540,  529,  106,  106,  545,  544,
+      190,  541,  106,  546, 1095,  106,  106,  106,  106,  543,
+
+      106,  106,  106,  547,  106,  549,  106,  550,  106,  553,
+      106,  552,  106,  106,  106,  106,  106,  551,  548,  558,
+      558,  556,  558,  558,  106,  554,  106,  555,  106,  559,
+      190,  560,  557,  106,  106,  106,  106,  106,  106,  106,
+      570,  572,  106,  576,  106,  106,  589,  561,  571,  573,
+      574,  575,  578,  569,  579,  106,  583,  106,  580,  577,
+      106,  581,  106,  591,  106,  106,  171,  590,  611,  106,
+      582,  106,  610,  606,  628,  562,  593,  106,  106,  106,
+      567,  567,  567,  567,  567,  567,  567,  567,  567,  567,
+      567,  567,  567,  567,  567,  567,  567,  567,  567,  568,
+
+      568,  568,  568,  568,  568,  568,  568,  567,  567,  567,
+      567,  567,  106,  594,  171,  584,  106,  607,  607,  613,
+      607,  607,  615,  614, 1089,  585,  612,  586,  618,  106,
+      608,  587,  616,  106,  588,  592,  605,  567,  567,  567,
+      567,  106,  106,  171,  106,  106,  106,  106,  106,  619,
+      106,  106,  617,  106,  620,  106,  621,  106,  622,  106,
+      623,  632,  632,  609,  632,  632,  106,  773,  567,  558,
+      558,  633,  558,  558,  106,  625,  626,  626,  626,  626,
+      626,  626,  626,  626,  626,  626,  626,  626,  626,  626,
+      626,  626,  626,  626,  626,  627,  627,  627,  627,  627,
+
+      627,  627,  627,  626,  626,  626,  626,  626,  106,  106,
+      106,  106,  106,  106,  190,  643,  644,  645,  106,  106,
+      648,  106,  106,  646,  647,  106,  629,  635,  636,  106,
+      650,  106,  702,  626,  626,  626,  626,  637,  637,  106,
+      637,  637,  639,  649,  106,  106,  651,  106,  634,  106,
+      653,  652,  106,  657,  106,  106,  658,  106,  106,  656,
+      660,  669,  691,  638,  626,  630,  630,  630,  630,  630,
+      630,  630,  630,  630,  630,  630,  630,  630,  630,  630,
+      630,  630,  630,  630,  631,  631,  631,  631,  631,  631,
+      631,  631,  630,  630,  630,  630,  630,  106,  106,  106,
+
+      106,  106,  106,  171,  662,  106,  694,  663,  106,  681,
+      106,  664,  171,  684,  654,  539,  665,  667,  655,  666,
+      659,  661,  630,  630,  630,  630,  668,  679,  106,  106,
+      607,  607,  678,  607,  607,  539,  106,  106,  106,  106,
+      106,  106,  106,  608,  190,  106,  106,  106,  698,  106,
+      541,  685,  541,  630,  686,  106,  106,  106,  683,  714,
+      687,  689,  632,  632,  693,  632,  632,  637,  637,  106,
+      637,  637,  688,  699,  106,  106,  106,  700,  701,  704,
+      106,  106,  106,  707,  106,  705,  706,  708,  106,  106,
+      106,  106,  703,  638,  711,  106,  715,  106,  709,  106,
+
+      717,  106,  106,  720,  716,  718,  190,  710,  712,  713,
+      607,  607,  106,  607,  607,  731,  106,  719, 1088,  733,
+      729,  106,  106,  608,  607,  607,  106,  607,  607,  730,
+      106,  106,  732,  106,  106,  106,  171,  608,  541,  106,
+      106,  690,  734,  106,  735,  541,  106,  106,  737,  737,
+      171,  737,  737,  106,  740,  106,  609,  745,  739,  106,
+      744,  106,  106,  106,  746,  747,  748,  751,  106,  106,
+      609,  749,  106,  106,  106,  750,  106,  754,  106,  106,
+      106,  752,  755,  760,  106,  757,  106,  753,  106,  106,
+      106,  774,  106,  758,  756,  763,  106,  106,  106,  759,
+
+      762,  775,  106,  765,  785,  106,  761,  764,  106,  737,
+      737,  776,  737,  737,  106,  786,  106,  106,  780,  790,
+      787,  106,  781,  106,  106,  106,  789,  106,  106,  106,
+      106,  794,  788,  106,  106,  798,  106,  814,  106,  791,
+      806,  792,  793,  795,  799,  796,  800,  797,  106,  801,
+      802,  106,  106,  106,  803,  361,  106,  804,  805,  815,
+      106,  824,  106,  826,  106,  106,  106,  106,  808,  106,
+      106,  106,  807,  106,  828,  830,  817,  106,  832,  106,
+      106,  836,  837,  829,  827,  106,  834,  825,  778,  838,
+      831,  106,  106,  106,  106,  833,  841,  846,  842,  853,
+
+      835,  843,  844,  106,  854,  190,  839,  858,  858,  106,
+      858,  858,  840,  106,  845,  190,  106,  106,  863,  861,
+      878,  847,  106,  879,  106,  864,  881,  106,  882,  106,
+      855,  106,  870,  859,  862,  106,  871,  106,  872,  883,
+      106,  190,  106,  860,  865,  866,  867,  106,  868,  106,
+      873,  874,  875,  106,  876,  106,  880,  106,  106,  106,
+      896,  106,  106, 1087,  885,  886,  106,  869,  106,  889,
+      890,  106,  106,  877,  910,  884,  901,  106,  897,  897,
+      106,  897,  897,  905,  106,  891,  106,  900,  858,  858,
+      106,  858,  858,  106,  903,  906,  902,  106,  904,  907,
+
+      106,  908,  106,  909,  898,  106,  911,  106,  912,  913,
+      914,  915,  106,  916,  859,  892,  106,  918,  106,  106,
+      917,  919,  106,  106,  106,  106,  106,  106,  106,  936,
+      106,  106,  921,  106,  923,  924,  925,  920,  106,  922,
+      935,  190,  993,  897,  897,  106,  897,  897,  939,  106,
+      938,  926,  106,  106,  940,  941,  942,  106,  106,  106,
+      106,  943,  106,  944,  106,  945,  106,  106,  946,  898,
+      106,  106,  106,  947,  949,  950,  948,  106,  951,  106,
+      952,  927,  106,  953,  106,  954,  106,  106,  106,  955,
+      106,  106,  970,  971,  971,  106,  971,  971,  106,  974,
+
+      106,  956,  957,  106,  975,  959,  106,  106,  958,  978,
+      979,  106,  106,  983,  980,  973,  106,  106,  976,  972,
+      106,  977,  106,  981,  106,  106,  106,  106,  986,  987,
+      982,  106,  106,  991,  988,  989,  106,  106,  994, 1005,
+      984,  106,  985,  992,  106,  990,  106, 1006,  971,  971,
+      106,  971,  971,  106,  106,  106, 1008,  106, 1007, 1009,
+      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
+      106, 1022, 1010, 1011,  972, 1012, 1014, 1015, 1013, 1016,
+      106, 1017,  106, 1018, 1021, 1019, 1020, 1034,  106, 1023,
+      106, 1035,  106,  106,  106,  106,  106, 1086,  106,  106,
+
+      106,  106, 1024,  106, 1045,  106,  106, 1037, 1038, 1039,
+     1040, 1041, 1036, 1042, 1043, 1044,  106, 1046,  106,  106,
+      106, 1047,  106, 1059, 1056, 1060,  106, 1057,  106,  106,
+      106, 1073,  106,  106, 1093, 1069,  106, 1058, 1083, 1084,
+      106, 1082,  106, 1071,  106, 1070,  106,  106, 1100, 1072,
+      106,  106, 1104,  106,  106, 1092, 1105,  106, 1108,  106,
+     1099,  106, 1094,  106, 1111, 1101,  106,  106,  106,  106,
+     1081, 1080, 1109, 1079, 1112, 1077, 1076, 1075, 1074, 1068,
+     1067, 1113, 1114,   64,   64,   64,   64,   64,   64,   64,
+       64,   64,   70,   70,   70, 1066,   70,   70,   70,   70,
+
+       70,   76,   76, 1065, 1064, 1063, 1062,   76,   76,   96,
+       96, 1061,   96,   96,  104,  106,  104,  104,  163,  163,
+      106,  163,  163,  163,  163,  163,  163,  170,  170,  170,
+      170,  177,  106,  177,  177,  179,  179,  106,  179,  179,
+      179,  179,  179,  179,  180,  106,  180,  180,  182,  182,
+      106,  182,  182,  186,  106,  186,  255,  255,  106,  255,
+      255,  255,  255,  255,  255,  269,  106,  269,  269,  270,
+     1055,  270,  270,  347,  347, 1054,  347,  347,  347,  347,
+      347,  347,  364,  364,  453, 1053,  453,  453,  525,  525,
+     1052,  525,  525,  525,  525,  525,  525,  526,  526, 1051,
+
+      526,  526,  526,  526,  526,  526,  598,  598, 1050,  598,
+      598,  598,  598,  598,  598,  599,  599, 1049,  599,  599,
+      599,  599,  599,  599,  724,  724, 1048,  724,  724,  724,
+      724,  724,  724,  766,  766,  106,  766,  766,  766,  766,
+      766,  766,  567,  567,  567,  567,  567,  567,  567,  626,
+      626,  626,  626,  626,  626,  626,  630,  630,  630,  630,
+      630,  630,  630, 1004, 1004,  106, 1004, 1004, 1004, 1004,
+     1004, 1004, 1029, 1029,  106, 1029, 1029, 1029, 1029, 1029,
+     1029, 1078, 1078,  106, 1078, 1078, 1078, 1078, 1078, 1078,
+     1085, 1085,  106, 1085, 1085, 1085, 1085, 1085, 1085, 1090,
+
+     1090,  106, 1090, 1090, 1090, 1090, 1090, 1090, 1091, 1091,
+     1033, 1091, 1091, 1091, 1091, 1091, 1091, 1096, 1096, 1032,
+     1096, 1096, 1096, 1096, 1096, 1096, 1097, 1097, 1031, 1097,
+     1097, 1097, 1097, 1097, 1097, 1107, 1107, 1030, 1107, 1107,
+     1107, 1107, 1107, 1107, 1110, 1110, 1028, 1110, 1110, 1110,
+     1110, 1110, 1110, 1027, 1026, 1025,  106,  106,  106, 1003,
+     1002, 1001, 1000,  999,  998,  997,  996,  995,  106,  106,
+      772,  969,  968,  967,  966,  965,  964,  963,  962,  961,
+      960,  106,  106,  937,  934,  933,  932,  931,  930,  929,
+      928,  106,  106,  106,  899,  895,  894,  893,  888,  887,
+
+      106,  106,  106,  106,  106,  106,  106,  857,  856,  106,
+      852,  851,  850,  849,  848,  106,  106,  106,  823,  822,
+      106,  821,  820,  819,  818,  816,  813,  812,  811,  810,
+      809,  106,  784,  783,  782,  779,  777,  106,  106,  106,
+      772,  771,  770,  769,  768,  767,  106,  743,  742,  741,
+      738,  736,  106,  728,  727,  726,  725,  723,  722,  721,
+      106,  106,  106,  106,  697,  696,  695,  106,  692,  106,
+      106,  106,  106,  682,  680,  106,  106,  171,  677,  676,
+      675,  674,  673,  672,  671,  670,  409,  106,  106,  106,
+      642,  641,  640,  106,  106,  624,  106,  106,  106,  604,
+
+      603,  602,  601,  600,  597,  596,  595,  106,  106,  566,
+      565,  564,  563,  106,  106,  106,  106,  106,  106,  106,
+      106,  106,  106,  528,  527,  524,  523,  522,  521,  520,
+      519,  106,  106,  106,  490,  106,  106,  106,  468,  106,
+      106,  106,  445,  444,  443,  442,  441,  438,  437,  106,
+      409,  406,  106,  106,  106,  106,  106,  356,  355,  354,
+      353,  346,  308,  106,  106,  286,  276,  275,  261,  171,
+      164,  166,  253,  164,  228,  112,  106,  188,  187,  176,
+      175,  171,  166,  164,  115,  114,  106,  101,   98,   79,
+       71,   67,   63, 1115,    3, 1115, 1115, 1115, 1115, 1115,
+
+     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+     1115, 1115, 1115, 1115
     } ;
 
-static yyconst flex_int16_t yy_chk[4697] =
+static yyconst flex_int16_t yy_chk[2685] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1629,533 +1125,307 @@ static yyconst flex_int16_t yy_chk[4697] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    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,    8,   10,    2,   12,   12,
-
-       12,   12,   14,   14,   14,   14,   12,   15,    2,   25,
-       12,   16,   22,   22,   24,   24,   18,   10,   27,   32,
-       32,   18,    2,   15,   25,   16,   16,   28,   30, 1616,
-       12,   14,   12,   18,   19,   29,   19,   19,   19,   19,
-       19,   19,   19,   19,   35,   44,   29,   28,   27,    8,
-       30,   20,   12,   20,   20,   20,   20,   20,   20,   20,
-       20,   36,   37,   39,   38,   54,   44,   14,   39,   40,
-       35,   37,   38,   19,   41,   36,   38,   37,   39,   38,
-       19,   42,   36,   40,   43,   48,   41,   62,   39,   46,
-       48,   47,   41,   40,   64,   42,   68,   20,   50,   43,
-
-       42,   45,   45,   50,   19,   46,   45,   46,   46,   47,
-       49,   52,   47,   51,   58,   69,   45,   58,   49,   49,
-       52,   53,  104,   50,  108,   54,   52,   51,   59,   49,
-       49,   52,   51,   59,   73, 1622,   53,   55,   55,   55,
-       55,   62,   76,   55,  104,   59,   68,   75,   64,   70,
-       70,   70,   70,   75,   55,   73,   76,   70,   91,   93,
-      108,   70,  116,  106,  125,   69,  116,  105,   55,   77,
-       77,   77,   77,   58,  120,  120,  121,  121,  125,   93,
-       58,   70,  106,   70,   89,   89,   89,   89,   89,   89,
-       89,   89,   90,  105,   90,   90,   90,   90,   90,   90,
-
-       90,   90,   89,   70,   91,   93,   94,  193,   94,   94,
-       94,   94,   94,   94,   94,   94,   95,  119,   95,   95,
-       95,   95,   95,   95,   95,   95,  132,  107,  114,  109,
-      117,  118,  119,   89,   77,  114,  193,  107,   90,   92,
-      132,   92,   92,   92,   92,   92,   92,   92,   92,  109,
-      117,  118,   94,  107,  110,   92,   92,   92,   92,   92,
-       92,   96,   95,   96,   96,   96,   96,   96,   96,   96,
-       96,  110,  123,  115,  124,  126,  167,  167,  127,  122,
-     1623,   96,  128,  131,  123,   92,   92,   92,   92,   92,
-       92,   92,  122,  122,  127,  124,  126,  128,  127,  115,
-
-      115,  129,  130,  131,  133,  134,  135,   96,  115,  220,
-      129,  136,  137,  139,  130,  153,  220,  137,  134,  140,
-      143,  141,  130,  141,  133,  144,  153,  145,  140,  135,
-      142,  136,  144,  139,  140,  143,  145,  142,  148,  142,
-      146,  146,  147,  149,  146,  151,  154,  150,  152,  168,
-      159,  144,  149,  159,  148,  147,  150,  152,  146,  166,
-      152,  171,  149,  151,  154,  157,  157,  157,  157,  163,
-      165,  157,  163,  164,  164,  191,  174,  175,  165,  176,
-      192,  200,  157,  196,  199,  198,  207,  187,  206,  166,
-      174,  202,  166,  204,  175,  200,  157,  212,  176,  192,
-
-      198,  191,  207,  168,  199,  204,  202,  206,  208,  159,
-      212,  171,  205,  196,  203,  203,  159, 1627,  181,  181,
-      181,  181,  181,  181,  181,  181,  187,  208,  163,  203,
-      205,  164,  210,  187,  210,  163,  181,  182,  182,  182,
-      182,  182,  182,  182,  182,  183,  240,  183,  211,  211,
-      183,  183,  183,  183,  183,  183,  183,  183,  209,  214,
-      215,  215,  240,  209,  214,  213,  184,  181,  184,  184,
-      184,  184,  184,  184,  184,  184,  185,  213,  185,  185,
-      185,  185,  185,  185,  185,  185,  216,  221,  221,  217,
-      219,  216,  225,  227,  236,  228,  185,  188,  217,  188,
-
-      188,  188,  188,  188,  188,  188,  188, 1629,  219,  230,
-      225,  227,  184,  218,  218,  218,  218,  228,  232,  226,
-      236,  230,  185,  186,  186,  186,  186,  186,  186,  186,
-      186,  229,  232,  234,  233,  252,  188,  186,  186,  186,
-      186,  186,  186,  188,  222,  226,  231,  234,  235,  222,
-      226,  229,  233,  235,  237,  231,  238,  239,  241,  273,
-      245,  242,  305,  241,  305,  244,  239,  186,  186,  186,
-      186,  186,  186,  186,  237,  218,  242,  243,  239,  244,
-      245,  246,  247,  247,  255,  246,  243,  218,  273,  251,
-      270,  262,  238,  252,  218,  261,  218,  248,  253,  248,
-
-      248,  248,  248,  255,  248,  261,  263,  253,  262,  248,
-      274,  283,  263,  279,  248,  248,  248,  248,  248,  251,
-      272,  270,  251,  277,  278,  283,  248,  260,  260,  260,
-      260,  274,  288,  279, 1632,  260,  270,  272,  277,  260,
-      278,  308,  308,  280,  288,  248,  265,  265,  265,  265,
-      265,  265,  265,  265,  266,  266,  266,  266,  266,  266,
-      266,  266,  267,  280,  267,  267,  267,  267,  267,  267,
-      267,  267,  271,  281,  271,  271,  271,  271,  271,  271,
-      271,  271,  284,  286,  286,  286,  286,  287, 1639,  294,
-      291,  303,  292,  297,  311,  311,  303,  289,  294,  281,
-
-      284,  267,  291,  271,  281,  292,  287,  297,  267,  268,
-      268,  268,  268,  268,  268,  268,  268,  289,  271,  276,
-      295,  290,  276,  268,  268,  268,  268,  268,  268,  276,
-      296, 1640,  298,  299,  299,  299,  299,  300,  295,  310,
-      276,  290,  313,  306,  310,  286,  298,  302,  276,  307,
-      296,  313,  300,  268,  268,  268,  268,  268,  268,  268,
-      301,  302,  306,  315,  286,  309,  286,  314,  301,  301,
-      304,  304,  304,  304,  312,  307,  316,  322, 1641,  312,
-      307,  320,  309,  315,  317,  317,  314,  319,  324,  317,
-      320,  322,  319,  331,  323,  325,  316,  323,  326,  325,
-
-      324,  327,  329,  328,  333,  333,  332,  299,  327,  325,
-      328,  334,  326,  331,  299, 1642,  299,  330,  330,  330,
-      330,  332,  335,  329,  336,  338,  337,  330,  339,  336,
-      337,  340,  304,  339,  335,  334,  304,  342,  341,  343,
-      338,  304,  344,  345,  304,  347,  342,  350,  339,  357,
-      351,  304,  341,  304,  343,  351,  340,  359,  358,  350,
-      362,  364,  344,  370,  347,  358,  366,  369,  357,  345,
-      370,  365,  364,  369,  345,  377,  371, 1643,  359,  330,
-      361,  373,  361,  361,  361,  361,  361,  361,  361,  361,
-      362,  363,  366,  363,  363,  363,  363,  363,  363,  363,
-
-      363,  365,  371,  372,  375,  374,  362,  373,  378,  383,
-      376,  361,  573,  377,  379,  382,  372,  375,  379,  390,
-      573,  363,  390,  383,  382,  378,  361,  374,  376,  381,
-      381,  381,  381,  384,  384,  384,  384,  363,  386,  386,
-      386,  386,  387,  388,  389,  391,  393,  387,  388,  394,
-      393,  396,  396,  389,  394,  398,  399,  400,  401,  391,
-      402,  402,  405,  404,  400,  406,  412,  386,  408,  398,
-      407,  399,  403,  403,  403,  403,  405,  401,  404,  407,
-      406,  409,  408,  410,  411,  415,  412,  414,  414,  416,
-      433,  417,  416,  409,  417,  384,  418,  419,  423,  410,
-
-      386,  411,  419,  421,  433,  415,  420,  420,  420,  420,
-      381,  425,  381,  422,  425,  421,  418,  422,  559,  426,
-      427,  428,  429,  429,  423,  426,  430,  427,  559,  426,
-      439,  430,  431,  431,  432,  432,  432,  432,  403,  435,
-      435,  428,  438,  403,  423,  439,  403,  436,  436,  436,
-      436,  438,  440,  403,  442,  403,  443,  436,  437,  437,
-      437,  437,  441,  444,  445,  446,  448,  447,  420,  442,
-      437,  447,  440,  451,  444,  450,  443,  420,  441,  449,
-      450,  453,  448,  458,  445,  446,  452,  420,  449,  420,
-      452,  451,  454,  466,  468,  467,  432,  454,  453,  471,
-
-      458,  467,  474,  475,  479,  521,  521,  470,  468,  470,
-      470,  470,  470,  470,  470,  470,  470,  472,  466,  472,
-      472,  472,  472,  472,  472,  472,  472,  473,  476,  477,
-      474,  475,  471,  478,  479,  481,  480,  470,  482,  476,
-      473,  483,  488,  489,  477,  471,  481,  482,  493,  488,
-      472,  480,  496,  470,  596,  496,  596,  478,  490,  490,
-      490,  490,  489,  472,  491,  491,  491,  491,  505,  497,
-      499,  499,  499,  499,  493,  505,  506,  493,  497,  508,
-      515,  483,  507,  516,  509,  517,  519,  520,  508,  523,
-      526,  518,  520,  491,  506,  524,  507,  509,  518,  517,
-
-      529,  515,  525,  516,  523,  519, 1203,  525,  524,  534,
-      526,  527,  527,  527,  527,  528,  531,  532,  529,  533,
-      528,  537,  530,  530,  530,  530,  532,  542,  534,  544,
-      531,  542,  499,  533,  549,  535,  535,  535,  535,  543,
-      543,  543,  543,  546,  545,  552,  549,  537, 1203,  544,
-      545,  547,  547,  547,  547,  548,  546,  552,  554,  554,
-      548,  555,  550,  550,  550,  550,  553,  537,  551,  551,
-      551,  551,  561,  527,  550,  641,  555,  558,  553,  551,
-      556,  556,  562,  563,  561,  566,  563,  562,  564,  557,
-      581,  557,  527,  530,  641,  557,  582,  535,  557,  588,
-
-      535,  543,  558,  530,  582,  530,  535,  557,  560,  535,
-      565,  564,  590,  581,  585,  589,  535,  587,  560,  588,
-      560,  566,  565,  587,  560,  592,  589,  560,  583,  583,
-      583,  583,  603,  603,  591,  817,  560,  593,  590,  584,
-      583,  584,  584,  584,  584,  584,  584,  584,  584,  585,
-      591,  614,  593,  605,  583,  592,  600,  817,  614,  586,
-      585,  586,  586,  586,  586,  586,  586,  586,  586,  613,
-      600,  601,  584,  605,  613,  583,  597,  597,  597,  597,
-      601,  602,  602,  602,  602,  584,  606,  606,  606,  606,
-      611,  611,  611,  611,  586,  612,  621,  623,  621,  622,
-
-      622,  622,  622,  624,  623,  586,  628,  602,  602,  625,
-      627,  631,  634,  627,  639,  612,  631,  624,  625,  630,
-      630,  630,  630,  633,  628,  632,  632,  632,  632,  635,
-      634,  710,  640,  646,  639,  633,  642,  644,  597,  640,
-      643,  643,  643,  643,  710,  635,  645,  646,  648,  650,
-      647,  606,  611,  656,  645,  658,  648,  597,  656,  597,
-      658,  622,  660,  644,  611,  647,  660,  606,  606,  606,
-      835,  611,  642,  611,  665,  650,  835,  669,  650,  665,
-      622,  630,  622,  655,  655,  655,  655,  676,  667,  659,
-      659,  659,  659,  662,  662,  662,  662,  669,  666,  676,
-
-      630,  668,  643,  666,  662,  643,  632,  663,  663,  663,
-      663,  643,  670,  670,  643,  659,  659,  663,  667,  668,
-      672,  643,  664,  664,  664,  664,  671,  673,  671,  674,
-      675,  679,  673,  664,  677,  677,  678,  680,  678,  681,
-      672,  682,  680,  683,  682,  674,  684,  698,  682,  675,
-      685,  679,  692,  682,  685,  692,  682,  699,  683,  681,
-      704,  706,  684,  715,  777,  777,  682,  700,  700,  700,
-      700,  711,  715,  699,  707, 1644,  706,  698,  703,  700,
-      703,  703,  703,  703,  703,  703,  703,  703,  705,  707,
-      705,  705,  705,  705,  705,  705,  705,  705,  713,  711,
-
-      714,  714,  714,  714,  716,  719,  704,  720,  738,  726,
-      719,  692,  725,  703,  720,  737, 1068,  738,  716,  713,
-      721,  721,  721,  721,  703,  722,  722,  722,  722,  741,
-      737,  725, 1068,  741,  705,  726,  739,  748,  726,  732,
-      732,  732,  732,  736,  736,  736,  736,  721,  742,  748,
-      739,  722,  722,  740,  740,  740,  740,  744,  744,  744,
-      744,  750,  742,  749,  749,  749,  749, 1645,  751,  754,
-      750,  752,  752,  752,  752,  753,  754,  758,  761,  755,
-      753,  714,  751,  714,  755,  757,  757,  757,  757,  758,
-      759,  763,  768,  761,  759,  767,  767,  767,  767,  769,
-
-      779,  778,  776,  780,  781,  781,  768,  798,  769,  763,
-      797,  797,  818,  732,  779,  740,  818,  736,  780,  799,
-      732,  778,  732,  803,  736,  798,  736, 1646,  776,  786,
-      786,  786,  786,  752,  740,  802,  740,  776,  744,  799,
-      744,  803,  752,  809,  749,  802,  749,  787,  787,  787,
-      787, 1649,  752,  809,  752,  786,  786,  767,  789,  789,
-      789,  789,  790,  790,  790,  790,  757,  793,  793,  793,
-      793,  794,  794,  794,  794,  787,  767,  800,  767,  801,
-      804,  794,  801,  804,  808,  789,  800,  808,  790,  790,
-      795,  795,  795,  795,  805,  806,  807,  807,  810,  805,
-
-      806,  811,  812,  813,  811,  814,  815,  815,  816,  787,
-      819,  820,  845,  816,  824,  813,  810,  824,  836,  814,
-      812,  830,  830,  830,  830,  819,  845,  848,  848,  793,
-      837,  834,  793,  830,  831,  831,  831,  831,  793,  820,
-     1652,  793,  834,  847,  836,  833,  831,  830,  793,  832,
-      837,  832,  832,  832,  832,  832,  832,  832,  832,  833,
-      831,  841,  840,  847,  861,  859,  844,  824,  830,  840,
-      844,  833,  946,  824,  795,  856,  856,  856,  856,  859,
-      841,  831,  860,  861,  862,  862,  862,  862,  863,  860,
-      864,  866,  875,  878,  946,  832,  866,  863,  865,  865,
-
-      865,  865,  878,  874,  864,  870,  870,  870,  870,  873,
-      874,  875,  877,  879,  873,  881,  876,  876,  876,  876,
-      880,  884,  887,  888,  880,  893,  877,  879,  888,  881,
-      885,  885,  885,  885,  893,  894,  884,  889,  889,  889,
-      889,  896,  887,  892,  892,  892,  892,  895,  896,  894,
-      902,  903,  895,  906,  905,  907,  856,  933,  856,  920,
-      865,  905,  921,  922,  902,  862,  933,  862, 1674,  903,
-      921,  906,  865,  928,  907,  923,  870,  922, 1187,  865,
-      904,  904,  904,  904,  927,  920,  870,  876,  870, 1187,
-      923,  928,  885,  916,  916,  916,  916,  876,  927,  876,
-
-      912,  912,  912,  912,  913,  913,  913,  913,  924,  930,
-      931,  885,  919,  919,  919,  919,  924,  929,  889,  934,
-      889,  916,  929,  930,  892,  936,  892,  912,  931,  936,
-      913,  913,  925,  925,  925,  925,  932,  937,  938,  934,
-      939,  932,  904,  940,  941,  939,  942,  943,  944,  947,
-      937,  949,  940,  948,  904,  942,  938,  945,  948,  954,
-      945,  904,  943,  947,  941,  950,  963,  954,  944,  949,
-      960,  964,  968,  963,  919,  967,  964,  919,  960,  972,
-      950,  968,  975,  919,  972,  987,  919,  991, 1064,  967,
-      989, 1064,  987,  919,  973,  973,  973,  973,  988,  989,
-
-      990,  975,  985,  985,  985,  985,  991,  990,  992,  992,
-      992,  992,  988,  993,  994,  995,  925, 1005, 1006,  995,
-      973,  973,  994, 1007, 1011, 1008, 1009, 1006,  993, 1011,
-     1013, 1005, 1008, 1010, 1010, 1010, 1010, 1014, 1014, 1014,
-     1014, 1015, 1017, 1007, 1018, 1009, 1024, 1023, 1025, 1026,
-     1013, 1032, 1025, 1015, 1023, 1029, 1029, 1029, 1029, 1035,
-     1675, 1017, 1036, 1026, 1018, 1024, 1034, 1034, 1034, 1034,
-     1036, 1032, 1038, 1039, 1035, 1053,  985, 1037, 1037, 1037,
-     1037, 1676,  992,  985, 1046, 1046, 1046, 1046, 1055,  992,
-     1054, 1054, 1038, 1039, 1057, 1010, 1047, 1047, 1047, 1047,
-
-     1056, 1053, 1059, 1061, 1010, 1060, 1060, 1061, 1055, 1057,
-     1053, 1063, 1062, 1065, 1056, 1066, 1677, 1069, 1014, 1062,
-     1059, 1067, 1047, 1047, 1067, 1070, 1063, 1065, 1070, 1029,
-     1066, 1067, 1069, 1074, 1074, 1072, 1029, 1077, 1071, 1037,
-     1034, 1073, 1078, 1076, 1080, 1079, 1077, 1034, 1037, 1046,
-     1072, 1037, 1071, 1081, 1075, 1073, 1075, 1079, 1085, 1075,
-     1075, 1076, 1078, 1090, 1080, 1046, 1091, 1046, 1081, 1095,
-     1091, 1096, 1099, 1116, 1095, 1085, 1099, 1115, 1096, 1101,
-     1116, 1091, 1115, 1067, 1100, 1100, 1100, 1100, 1114, 1114,
-     1114, 1114, 1117, 1090, 1118, 1119, 1130, 1075, 1120, 1101,
-
-     1131, 1130, 1143, 1118, 1137, 1678, 1117, 1131, 1137, 1119,
-     1100, 1100, 1133, 1120, 1121, 1121, 1121, 1121, 1128, 1128,
-     1128, 1128, 1132, 1132, 1132, 1132, 1133, 1134, 1135, 1135,
-     1135, 1135, 1136, 1139, 1141, 1150, 1134, 1149, 1143, 1151,
-     1151, 1151, 1151, 1152, 1150, 1159, 1136, 1160, 1152, 1141,
-     1114, 1149, 1139, 1157, 1157, 1157, 1157, 1161, 1436, 1163,
-     1164, 1160, 1162, 1162, 1162, 1162, 1202, 1179, 1180, 1114,
-     1188, 1114, 1161, 1163, 1436, 1164, 1121, 1165, 1165, 1165,
-     1165, 1179, 1183, 1159, 1132, 1188, 1180, 1182, 1121, 1128,
-     1171, 1171, 1171, 1171, 1182, 1121, 1185, 1185, 1186, 1135,
-
-     1183, 1151, 1190, 1132, 1202, 1132, 1172, 1172, 1172, 1172,
-     1151, 1173, 1173, 1173, 1173, 1197, 1171, 1171, 1181, 1181,
-     1181, 1181, 1190, 1186, 1157, 1191, 1192, 1157, 1195, 1201,
-     1204, 1193, 1191, 1162, 1193, 1197, 1162, 1173, 1173, 1165,
-     1198, 1193, 1199, 1200, 1192, 1207, 1195, 1198, 1165, 1201,
-     1200, 1206, 1208, 1209, 1208, 1210, 1211, 1208, 1208, 1214,
-     1199, 1218, 1214, 1224, 1207, 1219, 1206, 1220, 1223, 1241,
-     1204, 1172, 1223, 1209, 1211, 1243, 1218, 1224, 1241, 1243,
-     1181, 1245, 1242, 1210, 1244, 1262, 1245, 1172, 1679, 1172,
-     1246, 1219, 1181, 1220, 1262, 1208, 1242, 1246, 1244, 1181,
-
-     1228, 1228, 1228, 1228, 1231, 1231, 1231, 1231, 1232, 1232,
-     1232, 1232, 1239, 1239, 1239, 1239, 1240, 1240, 1240, 1240,
-     1247, 1248, 1249, 1249, 1249, 1249, 1250, 1247, 1251, 1254,
-     1254, 1254, 1254, 1259, 1260, 1263, 1251, 1259, 1266, 1248,
-     1265, 1250, 1261, 1261, 1261, 1261, 1264, 1265, 1260, 1263,
-     1271, 1264, 1269, 1267, 1267, 1267, 1267, 1681, 1266, 1293,
-     1280, 1274, 1277, 1277, 1277, 1277, 1279, 1280, 1282, 1290,
-     1271, 1279, 1281, 1281, 1281, 1281, 1283, 1291, 1294, 1293,
-     1283, 1296, 1282, 1292, 1291, 1309, 1239, 1274, 1269, 1232,
-     1274, 1232, 1294, 1239, 1306, 1296, 1249, 1240, 1683, 1240,
-
-     1309, 1292, 1312, 1249, 1289, 1289, 1289, 1289, 1314, 1290,
-     1254, 1314, 1254, 1310, 1306, 1267, 1295, 1295, 1295, 1295,
-     1316, 1310, 1312, 1261, 1267, 1261, 1300, 1300, 1300, 1300,
-     1687, 1317, 1688, 1277, 1303, 1303, 1303, 1303, 1308, 1308,
-     1308, 1308, 1318, 1281, 1319, 1316, 1317, 1311, 1311, 1311,
-     1311, 1334, 1300, 1300, 1313, 1313, 1313, 1313, 1323, 1323,
-     1318, 1324, 1319, 1325, 1328, 1333, 1313, 1328, 1320, 1320,
-     1320, 1335, 1320, 1338, 1333, 1289, 1336, 1349, 1339, 1324,
-     1353, 1325, 1326, 1326, 1326, 1353, 1326, 1295, 1348, 1334,
-     1340, 1338, 1320, 1339, 1340, 1367, 1371, 1372, 1344, 1344,
-
-     1371, 1348, 1367, 1349, 1368, 1328, 1326, 1374, 1303, 1311,
-     1320, 1372, 1308, 1335, 1344, 1303, 1336, 1370, 1311, 1308,
-     1689, 1311, 1370, 1368, 1326, 1343, 1343, 1374, 1343, 1343,
-     1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343,
-     1343, 1343, 1343, 1343, 1388, 1344, 1355, 1355, 1355, 1355,
-     1375, 1376, 1343, 1343, 1343, 1343, 1343, 1343, 1373, 1373,
-     1373, 1373, 1426, 1388, 1375, 1387, 1376, 1384, 1384, 1384,
-     1384, 1386, 1387, 1389, 1390, 1393, 1386, 1389, 1392, 1392,
-     1392, 1392, 1397, 1404, 1343, 1343, 1343, 1343, 1390, 1393,
-     1398, 1398, 1403, 1405, 1415, 1690, 1403, 1404, 1418, 1472,
-
-     1426, 1397, 1406, 1406, 1406, 1406, 1414, 1414, 1414, 1414,
-     1417, 1427, 1428, 1405, 1415, 1343, 1472, 1417, 1418, 1430,
-     1373, 1424, 1424, 1424, 1424, 1427, 1431, 1428, 1429, 1429,
-     1429, 1429, 1373, 1430, 1432, 1432, 1432, 1432, 1384, 1435,
-     1694, 1431, 1433, 1433, 1433, 1433, 1437, 1434, 1434, 1392,
-     1434, 1438, 1438, 1440, 1433, 1437, 1441, 1435, 1434, 1439,
-     1439, 1442, 1453, 1443, 1406, 1444, 1444, 1445, 1414, 1448,
-     1445, 1440, 1449, 1406, 1441, 1446, 1446, 1447, 1447, 1442,
-     1414, 1443, 1450, 1451, 1452, 1452, 1454, 1448, 1455, 1459,
-     1449, 1460, 1424, 1462, 1462, 1424, 1432, 1695, 1459, 1429,
-
-     1450, 1451, 1429, 1455, 1453, 1432, 1460, 1461, 1475, 1462,
-     1471, 1471, 1475, 1487, 1488, 1495, 1461, 1483, 1483, 1483,
-     1483, 1489, 1495, 1488, 1491, 1489, 1454, 1487, 1512, 1491,
-     1492, 1492, 1492, 1492, 1505, 1697, 1553, 1471, 1505, 1553,
-     1462, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464,
-     1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464,
-     1493, 1496, 1506, 1530, 1512, 1507, 1510, 1544, 1464, 1464,
-     1464, 1464, 1464, 1464, 1507, 1493, 1506, 1513, 1530, 1496,
-     1508, 1508, 1508, 1508, 1509, 1519, 1510, 1544, 1541, 1509,
-     1519, 1483, 1517, 1517, 1517, 1517, 1513, 1522, 1555, 1555,
-
-     1464, 1464, 1464, 1464, 1492, 1521, 1521, 1521, 1521, 1556,
-     1556, 1522, 1524, 1524, 1524, 1524, 1529, 1529, 1529, 1529,
-     1532, 1532, 1532, 1532, 1540, 1540, 1540, 1540, 1541, 1542,
-     1543, 1464, 1545, 1547, 1557, 1557, 1542, 1546, 1546, 1546,
-     1546, 1550, 1508, 1552, 1558, 1558, 1545, 1547, 1543, 1548,
-     1548, 1508, 1548, 1551, 1560, 1698, 1550, 1552, 1551, 1554,
-     1548, 1559, 1554, 1517, 1559, 1561, 1562, 1572, 1561, 1562,
-     1563, 1563, 1560, 1564, 1564, 1570, 1521, 1565, 1565, 1566,
-     1566, 1567, 1532, 1571, 1567, 1572, 1524, 1573, 1700, 1570,
-     1529, 1532, 1582, 1582, 1603, 1540, 1703, 1571, 1707, 1603,
-
-     1604, 1573, 1589, 1593, 1593, 1593, 1593, 1604, 1546, 1581,
-     1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581,
-     1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1589, 1606,
-     1607, 1593, 1609, 1606, 1709, 1618, 1581, 1581, 1581, 1581,
-     1581, 1581, 1618, 1710, 1607, 1608, 1608, 1608, 1608, 1620,
-     1582, 1711, 1609, 1613, 1613, 1613, 1613, 1617, 1619, 1619,
-     1619, 1619, 1617, 1620, 1625, 1631, 1648, 1712, 1581, 1581,
-     1581, 1581, 1621, 1630, 1636, 1651, 1621, 1630, 1634, 1634,
-     1634, 1634, 1638, 1718, 1625, 1631, 1648, 1650, 1636, 1637,
-     1637, 1637, 1637, 1653, 1650, 1651, 1638, 1654, 1653, 1581,
-
-     1647, 1647, 1647, 1647, 1655, 1656, 1657, 1608, 1661, 1657,
-     1658, 1653, 1659, 1658, 1663, 1659, 1662, 1654, 1660, 1608,
-     1664, 1660, 1655, 1656, 1613, 1665, 1661, 1666, 1665, 1619,
-     1666, 1662, 1663, 1667, 1668, 1669, 1667, 1668, 1664, 1670,
-     1671, 1672, 1673, 1673, 1686, 1672, 1719, 1671, 1720, 1634,
-     1680, 1680, 1692, 1669, 1682, 1682, 1702, 1670, 1706, 1716,
-     1637, 1704, 1647, 1699, 1699, 1699, 1699, 1701, 1704, 1721,
-     1702, 1701, 1715, 1706, 1647, 1685, 1685, 1722, 1723, 1716,
-     1692, 1705, 1705, 1705, 1705, 1714, 1715, 1724, 1725, 1714,
-     1717, 1717, 1717, 1717, 1730, 1725, 1729, 1729, 1729, 1729,
-
-     1732, 1733, 1686, 1734, 1734, 1734, 1734, 1736, 1680, 1738,
-     1739, 1739, 1682, 1684, 1684, 1684, 1684, 1684, 1684, 1684,
-     1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684,
-     1684, 1684, 1735, 1685, 1726, 1741, 1749, 1699, 1758, 1744,
-     1684, 1684, 1684, 1684, 1684, 1684, 1741, 1735, 1737, 1737,
-     1737, 1737, 1717, 1740, 1726, 1705, 1742, 1744, 1740, 1757,
-     1757, 1717, 1745, 1743, 1746, 1747, 1748, 1752, 1753, 1750,
-     1729, 1742, 1684, 1684, 1684, 1684, 1751, 1734, 1743, 1754,
-     1745, 1748, 1746, 1747, 1750, 1752, 1753, 1755, 1760, 1756,
-     1759, 1751, 1761, 1762, 1763, 1764, 1766, 1754, 1767, 1759,
-
-     1768, 1769, 1770, 1684, 1756, 1755, 1771, 1773, 1760, 1774,
-     1737, 1775, 1777, 1778, 1780, 1781, 1782, 1783, 1784, 1737,
-     1781, 1785, 1786, 1788, 1790, 1792, 1773, 1787, 1787, 1787,
-     1787, 1783, 1789, 1791, 1791, 1791, 1791, 1789, 1795, 1792,
-     1796, 1797, 1798, 1799, 1801, 1801, 1801, 1801, 1803, 1804,
-     1804, 1804, 1804, 1805, 1766, 1806, 1767, 1807, 1806, 1808,
-     1809, 1810, 1803, 1811, 1815, 1812, 1813, 1805, 1814, 1816,
-     1817, 1818, 1819, 1820, 1821, 1822, 1824, 1826, 1811, 1807,
-     1812, 1813, 1823, 1814, 1808, 1823, 1818, 1819, 1820, 1821,
-     1824, 1825, 1827, 1828, 1829, 1831, 1825, 1832, 1787, 1833,
-
-     1834, 1835, 1837, 1839, 1791, 1840, 1841, 1843, 1845, 1840,
-     1846, 1847, 1850, 1841, 1846, 1801, 1851, 1852, 1853, 1854,
-     1804, 1855, 1857, 1856, 1852, 1858, 1859, 1860, 1861, 1862,
-     1855, 1847, 1863, 1864, 1865, 1866, 1866, 1854, 1853, 1856,
-     1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876,
-     1877, 1878, 1865, 1879, 1880, 1881, 1882, 1883, 1867, 1884,
-     1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1893,
-     1890, 1894, 1895, 1896, 1897, 1899, 1900, 1901, 1888, 1908,
-     1909, 1891, 1910, 1889, 1911, 1912, 1915, 1892, 1913, 1909,
-     1912, 1913, 1916, 1917, 1919, 1922, 1923, 1924, 1926, 1929,
-
-     1933, 1933, 1932, 1934, 1935, 1938, 1939, 1941, 1940, 1942,
-     1922, 1940, 1944, 1944, 1923, 1924, 1932, 1945, 1934, 1948,
-     1951, 1949, 1948, 1952, 1939, 1953, 1954, 1984, 1986, 1989,
-     1615, 1614, 1612, 1611, 1610, 1945, 1949, 1605, 1951, 1602,
-     1953, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956,
-     1956, 1956, 1957, 1957, 1957, 1957, 1601, 1957, 1957, 1957,
-     1957, 1957, 1957, 1958, 1958, 1958, 1599, 1598, 1596, 1595,
-     1594, 1592, 1958, 1959, 1959, 1591, 1590, 1959, 1960, 1960,
-     1588, 1587, 1960, 1961, 1586, 1585, 1961, 1962, 1962, 1584,
-     1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1963, 1963,
-
-     1583, 1963, 1964, 1964, 1580, 1964, 1964, 1964, 1964, 1964,
-     1964, 1964, 1964, 1965, 1579, 1578, 1965, 1966, 1966, 1577,
-     1576, 1966, 1967, 1967, 1575, 1967, 1967, 1967, 1967, 1967,
-     1967, 1967, 1967, 1968, 1574, 1569, 1968, 1969, 1969, 1568,
-     1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1970, 1539,
-     1538, 1970, 1971, 1537, 1536, 1971, 1972, 1972, 1535, 1972,
-     1972, 1972, 1972, 1972, 1972, 1972, 1972, 1973, 1973, 1534,
-     1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1974, 1974,
-     1533, 1531, 1528, 1527, 1525, 1520, 1518, 1974, 1975, 1975,
-     1516, 1515, 1514, 1511, 1504, 1502, 1501, 1975, 1976, 1976,
-
-     1500, 1499, 1976, 1498, 1976, 1494, 1490, 1976, 1977, 1977,
-     1486, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1978,
-     1978, 1485, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978,
-     1979, 1979, 1484, 1482, 1481, 1480, 1979, 1979, 1979, 1979,
-     1980, 1980, 1478, 1477, 1476, 1474, 1470, 1469, 1468, 1980,
-     1981, 1981, 1467, 1466, 1465, 1463, 1981, 1981, 1981, 1981,
-     1982, 1982, 1458, 1457, 1456, 1425, 1982, 1982, 1982, 1982,
-     1983, 1983, 1423, 1983, 1983, 1983, 1983, 1983, 1983, 1983,
-     1983, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985,
-     1985, 1985, 1987, 1987, 1422, 1987, 1987, 1987, 1987, 1987,
-
-     1987, 1987, 1987, 1988, 1988, 1420, 1419, 1416, 1413, 1988,
-     1988, 1988, 1988, 1990, 1990, 1412, 1411, 1410, 1409, 1990,
-     1990, 1990, 1990, 1991, 1991, 1408, 1407, 1402, 1401, 1991,
-     1991, 1991, 1991, 1992, 1992, 1992, 1992, 1992, 1992, 1992,
-     1992, 1992, 1992, 1992, 1993, 1993, 1400, 1993, 1993, 1993,
-     1993, 1993, 1993, 1993, 1993, 1994, 1994, 1994, 1994, 1994,
-     1994, 1994, 1994, 1994, 1994, 1994, 1995, 1995, 1399, 1995,
-     1995, 1995, 1995, 1995, 1995, 1995, 1995, 1996, 1996, 1396,
-     1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1997, 1997,
-     1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1998,
-
-     1998, 1394, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998,
-     1999, 1999, 1391, 1999, 1999, 1999, 1999, 1999, 1999, 1999,
-     1999, 2000, 2000, 1385, 2000, 2000, 2000, 2000, 2000, 2000,
-     2000, 2000, 2001, 2001, 1383, 2001, 2001, 2001, 2001, 2001,
-     2001, 2001, 2001, 2002, 2002, 1382, 2002, 2002, 2002, 2002,
-     2002, 2002, 2002, 2002, 2003, 2003, 1381, 2003, 2003, 2003,
-     2003, 2003, 2003, 2003, 2003, 2004, 2004, 1380, 2004, 2004,
-     2004, 2004, 2004, 2004, 2004, 2004, 2005, 2005, 1379, 2005,
-     2005, 2005, 2005, 2005, 2005, 2005, 2005, 2006, 2006, 1378,
-     2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2007, 2007,
-
-     1377, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 1369,
-     1366, 1365, 1364, 1363, 1362, 1361, 1360, 1359, 1358, 1357,
-     1356, 1352, 1351, 1350, 1347, 1346, 1345, 1342, 1341, 1337,
-     1332, 1331, 1330, 1329, 1327, 1321, 1315, 1307, 1305, 1304,
-     1302, 1301, 1299, 1288, 1287, 1286, 1285, 1284, 1278, 1276,
-     1275, 1272, 1270, 1268, 1258, 1257, 1256, 1255, 1253, 1252,
-     1238, 1237, 1236, 1235, 1234, 1233, 1230, 1229, 1227, 1226,
-     1225, 1222, 1221, 1217, 1216, 1215, 1213, 1212, 1205, 1196,
-     1194, 1189, 1184, 1178, 1177, 1176, 1175, 1174, 1170, 1169,
-     1168, 1167, 1166, 1158, 1156, 1155, 1153, 1148, 1147, 1146,
-
-     1145, 1144, 1142, 1140, 1138, 1129, 1127, 1126, 1125, 1124,
-     1123, 1113, 1112, 1111, 1110, 1109, 1108, 1107, 1106, 1105,
-     1104, 1103, 1102, 1098, 1094, 1093, 1092, 1088, 1087, 1086,
-     1084, 1083, 1058, 1052, 1051, 1050, 1049, 1048, 1045, 1043,
-     1042, 1041, 1040, 1033, 1031, 1030, 1028, 1027, 1022, 1021,
-     1020, 1019, 1016, 1012, 1004, 1003, 1002, 1001, 1000,  999,
-      998,  997,  996,  986,  984,  983,  982,  981,  980,  979,
-      978,  977,  976,  974,  971,  970,  969,  966,  965,  962,
-      961,  959,  958,  957,  956,  953,  952,  935,  926,  917,
-      914,  911,  910,  909,  908,  901,  900,  899,  898,  897,
-
-      891,  890,  886,  883,  882,  872,  871,  869,  868,  867,
-      858,  857,  855,  854,  853,  852,  851,  850,  849,  843,
-      842,  839,  838,  829,  828,  827,  826,  823,  822,  821,
-      796,  791,  788,  785,  784,  783,  782,  775,  774,  773,
-      772,  771,  766,  765,  764,  762,  760,  756,  747,  746,
-      745,  743,  735,  734,  733,  731,  730,  729,  728,  727,
-      723,  718,  717,  712,  709,  708,  702,  697,  696,  695,
-      694,  693,  689,  688,  687,  686,  661,  657,  654,  653,
-      652,  651,  649,  638,  637,  636,  629,  626,  620,  619,
-      618,  617,  616,  615,  610,  609,  608,  607,  604,  599,
-
-      598,  595,  594,  580,  579,  576,  575,  574,  570,  569,
-      568,  567,  541,  540,  539,  538,  536,  522,  514,  513,
-      512,  511,  510,  504,  503,  502,  501,  500,  498,  495,
-      494,  487,  486,  485,  484,  465,  464,  461,  460,  459,
-      457,  456,  455,  434,  424,  413,  397,  395,  392,  385,
-      380,  368,  360,  356,  355,  354,  353,  352,  349,  348,
-      321,  318,  293,  285,  282,  269,  264,  259,  258,  257,
-      256,  249,  224,  223,  201,  195,  194,  177,  173,  172,
-      162,  161,  160,  156,  138,  112,  103,  102,   98,   85,
-       84,   79,   74,   66,   60,   34,   26,   23,   21,   17,
-
-       11,    9,    7,    3, 1955, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955
-
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    2,
+        2,    5,    2,    2,    9,    5,    2,   11,   13,   13,
+
+       16,   13,   13,   29,   17,   19,    2,   13, 1114,   19,
+       26,   13,   23,   23,   16,   28,   11,   17,   17,    2,
+       19,   25,   25,   29,   26,   31,   33,   18,   33,   13,
+       18,   13,   18,   18,   18,   18,   18,   18,   18,   18,
+       45,  202,   55,   75,   28,    9,   31,   44,   42,  202,
+       20,   13,   20,   20,   20,   20,   20,   20,   20,   20,
+       42,   45,   44,   75,   37,   64,   42,   54,   21,   20,
+       21,   21,   21,   21,   21,   21,   21,   21,   37,   30,
+       41,   38,   54,   39,  110,   37,   43,   21,   20,   30,
+       38,   39,   48,   66,   41,   39,   38,   40,   39,   20,
+
+       43,   55,   40,  110,   41,   43,   46,   46,   47,   49,
+       48,   46,   40,   48,   49,   62,   64,   21,   20,   62,
+       50,   46,   40,   52,   47,   51,   47,   47,   50,   50,
+       51,   60,   53,   51,   70,   60,   78,   52,   71,   50,
+       50,   53,   52,   77,   66,  105,   60,   53,   77,   78,
+       51,  107,   53,   56,   56,  167,   56,   56,   72,   72,
+       56,   72,   72,  106,  120,  120,  105,   72,  109,  107,
+       56,   72, 1112,   87,   87,   87,   87,   87,   87,   87,
+       87,   70,  116,   56,  111,   71,  116,  117,  106,   72,
+       87,   72,   91,   91,   91,   91,   91,   91,   91,   91,
+
+      111,  118,  109,  121,  121,  131,  167,  117,  119,   91,
+       92,   72,   92,   92,   92,   92,   92,   92,   92,   92,
+       87,  118,  141,  119,  141,  131,   93,   93,  124,   92,
+       93,   93,   93,   93,   93,   93,   93,   93,   95,   91,
+       95,   95,   95,   95,   95,   95,   95,   95,  137,  124,
+      166,  166,  249,  137,  199,  199,  249,   95,   96,   92,
+       96,   96,   96,   96,   96,   96,   96,   96,   97,   97,
+       97,  108,   97,   97,   97,   97,   97,   97,   97,   97,
+      115,  108,  123,  126,  122,  125,  128,   95, 1102,  132,
+      133,  213,  213,  129,  123,  130,  108,  122,  122,  125,
+
+      127,  128,  129,  132,  126,  115,  115,  130,  115,  115,
+      133,  115,  135,  134,  115,  130,  127,  136,  139,  140,
+      127,  143,  142,  144,  115,  115,  134,  148,  140,  142,
+      144,  142,  145,  147,  140,  135,  143,  136,  139,  146,
+      146,  145,  149,  146,  150,  148,  147,  151,  152,  144,
+      153,  155,  165,  150,  154,  169,  151,  146,  149,  153,
+      173,  174,  153,  150,  172,  154,  152,  158,  158,  155,
+      158,  158,  190,  164,  158,  164,  173,  172,  190,  174,
+      165,  196,  200,  165,  158,  177,  177,  177,  177,  177,
+      177,  177,  177,  195,  189,  192,  200,  158,  238,  178,
+
+      178,  196,  169,  178,  178,  178,  178,  178,  178,  178,
+      178,  180,  180,  180,  180,  180,  180,  180,  180,  189,
+      198,  191,  195,  192,  238,  198,  181,  181,  326,  164,
+      181,  181,  181,  181,  181,  181,  181,  181,  182,  191,
+      182,  182,  182,  182,  182,  182,  182,  182,  183,  183,
+      183,  326,  183,  183,  183,  183,  183,  183,  183,  183,
+      184,  184,  184,  184,  184,  184,  184,  184,  185,  185,
+      185,  185,  185,  185,  185,  185,  186,  186,  186,  186,
+      186,  186,  186,  186,  197,  201,  204,  206,  197,  186,
+      186,  186,  186,  186,  186,  207,  197,  205,  205,  206,
+
+      209,  204,  212,  211,  212,  201,  208,  210,  211,  219,
+      216, 1101,  205,  207,  214,  216,  209,  215,  219,  186,
+      186,  186,  186,  186,  186,  208,  210,  214,  218,  215,
+      217,  217,  221,  218,  222,  223,  223,  224,  227,  228,
+      229,  222,  224,  230,  233,  232,  231,  234,  236,  235,
+      221,  239,  240,  233,  237,  243,  227,  232,  229,  237,
+      242,  234,  236,  241,  228,  230,  231,  235,  244,  228,
+      243,  239,  241,  244,  245,  248,  242,  247,  246,  250,
+      250,  254,  256,  262,  241,  264,  240,  246,  253,  245,
+      264,  247,  262,  263,  251,  248,  251,  251,  284,  251,
+
+      256,  251,  284,  273, 1098,  274,  251,  271,  278,  263,
+      272,  251,  251,  251,  251,  251,  253,  261,  261,  253,
+      261,  261,  251,  271,  272,  274,  261,  279,  278,  285,
+      261,  273,  279,  281,  304,  311,  281,  254,  285,  304,
+      311,  251,  265,  265,  265,  265,  265,  265,  265,  265,
+      266,  266,  266,  266,  266,  266,  266,  266,  267,  267,
+      267,  267,  267,  267,  267,  267,  268,  268,  268,  268,
+      268,  268,  268,  268,  269,  269,  269,  269,  269,  269,
+      269,  269,  270,  270,  270,  270,  270,  270,  270,  270,
+      277,  276,  280,  283,  276,  270,  270,  270,  270,  270,
+
+      270,  276,  282,  288,  277,  289,  286,  299,  293, 1095,
+      280,  297,  276,  283,  292,  294,  299,  288,  295,  276,
+      293,  282,  296,  289,  297,  270,  270,  270,  270,  270,
+      270,  286,  300,  292,  296,  294,  286,  301,  295,  302,
+      303,  306,  307,  306,  308,  309,  309,  310,  312,  312,
+      300,  313,  315,  302,  303,  316,  313,  301,  314,  317,
+     1089,  307,  323,  320,  310,  318,  318,  314,  320,  308,
+      318,  315,  321,  325,  308,  316,  323,  324,  327,  317,
+      324,  321,  327,  328,  329,  325,  330,  331,  334,  333,
+      336,  329,  327,  330,  335,  335,  337,  328,  338,  340,
+
+      339,  337,  338,  334,  340,  341,  342,  343,  331,  333,
+      344,  345,  346,  351,  336,  339,  343,  348,  351,  340,
+      342,  357,  358,  359,  360,  344,  361,  362,  358,  363,
+      341,  345,  366,  365,  360,  348,  367,  346,  365,  357,
+      368,  361,  346,  359,  369,  373,  370,  371,  367,  370,
+      371,  372,  374,  376,  363,  375,  362,  366,  375,  377,
+      378,  368,  369,  372,  378,  373,  383,  386,  384,  385,
+      386,  383,  376,  384,  390,  387,  377,  389,  385,  390,
+      392,  389,  391,  391,  393,  394,  395,  398,  374,  387,
+      397,  397,  392,  399,  400,  401,  399,  400,  402,  404,
+
+      393,  405,  394,  402,  406,  405,  395,  398,  409,  408,
+      410,  404,  408,  411,  409,  401,  414,  410,  409,  412,
+      412,  414,  415,  415,  417,  419,  419,  420,  421,  406,
+      422,  423,  424,  411,  425,  426,  420,  427,  417,  430,
+      429,  428,  432,  421,  425,  428,  431,  423,  430,  406,
+      422,  431,  424,  434,  433,  426,  429,  427,  433,  435,
+      432,  446,  447,  448,  435,  449,  450,  447,  451,  452,
+      434,  454,  456,  457,  455,  458,  448,  449,  450,  459,
+      461,  454,  460,  460,  458,  446,  462,  457,  463,  462,
+      468,  459,  464,  464, 1086,  451,  452,  455,  472,  461,
+
+      465,  456,  471,  465,  476,  471,  477,  472,  478,  478,
+      480,  477,  483,  486,  481,  468,  482,  476,  468,  484,
+      484,  482,  484,  484,  485,  480,  463,  481,  487,  485,
+      490,  486,  483,  497,  498,  499,  500,  501,  502,  503,
+      498,  500,  504,  504,  505,  507,  510,  487,  499,  501,
+      502,  503,  506,  497,  506,  490,  508,  510,  506,  505,
+      512,  506,  511,  512,  514,  508,  530,  511,  533,  506,
+      507,  553,  532,  530,  553,  490,  514,  532,  533,  484,
+      495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
+      495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
+
+      495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
+      495,  495,  513,  515,  529,  509,  542,  531,  531,  535,
+      531,  531,  537,  536, 1079,  509,  534,  509,  542,  535,
+      531,  509,  538,  543,  509,  513,  529,  495,  495,  495,
+      495,  495,  509,  531,  546,  534,  538,  515,  536,  543,
+      540,  537,  540,  544,  544,  550,  546,  547,  547,  548,
+      548,  556,  556,  531,  556,  556,  557,  729,  495,  558,
+      558,  557,  558,  558,  729,  550,  551,  551,  551,  551,
+      551,  551,  551,  551,  551,  551,  551,  551,  551,  551,
+      551,  551,  551,  551,  551,  551,  551,  551,  551,  551,
+
+      551,  551,  551,  551,  551,  551,  551,  551,  554,  559,
+      569,  571,  560,  572,  563,  569,  571,  572,  574,  575,
+      576,  556,  651,  574,  575,  577,  554,  559,  560,  578,
+      578,  580,  651,  551,  551,  551,  551,  561,  561,  563,
+      561,  561,  563,  577,  579,  581,  579,  584,  558,  576,
+      581,  580,  585,  585,  586,  588,  586,  593,  633,  584,
+      588,  593,  633,  561,  551,  555,  555,  555,  555,  555,
+      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
+      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
+      555,  555,  555,  555,  555,  555,  555,  561,  582,  583,
+
+      587,  589,  591,  605,  590,  639,  639,  590,  619,  615,
+      592,  590,  606,  619,  582,  610,  590,  591,  583,  590,
+      587,  589,  555,  555,  555,  555,  592,  606,  590,  610,
+      607,  607,  605,  607,  607,  612,  615,  617,  618,  620,
+      621,  623,  622,  607,  624,  663,  636,  647,  647,  612,
+      618,  620,  621,  555,  622,  648,  628,  649,  617,  663,
+      623,  628,  632,  632,  636,  632,  632,  637,  637,  624,
+      637,  637,  624,  648,  652,  650,  653,  649,  650,  653,
+      654,  655,  656,  656,  657,  654,  655,  657,  658,  659,
+      661,  660,  652,  637,  660,  664,  664,  662,  658,  665,
+
+      666,  667,  668,  669,  665,  667,  680,  659,  661,  662,
+      678,  678,  683,  678,  678,  682,  684,  668, 1077,  684,
+      680,  666,  687,  678,  679,  679,  685,  679,  679,  681,
+      669,  680,  683,  686,  681,  694,  678,  679,  685,  699,
+      682,  632,  687,  688,  688,  686,  698,  701,  691,  691,
+      679,  691,  691,  693,  694,  704,  678,  699,  693,  700,
+      698,  702,  703,  706,  700,  701,  702,  706,  707,  708,
+      679,  703,  709,  710,  711,  704,  712,  709,  713,  714,
+      715,  707,  710,  715,  716,  712,  717,  708,  720,  719,
+      718,  731,  735,  713,  711,  718,  732,  731,  739,  714,
+
+      717,  732,  740,  720,  744,  749,  716,  719,  691,  737,
+      737,  735,  737,  737,  745,  745,  746,  747,  739,  749,
+      746,  744,  740,  748,  750,  752,  748,  753,  754,  755,
+      756,  754,  747,  757,  758,  758,  760,  773,  762,  750,
+      763,  752,  753,  755,  759,  756,  759,  757,  761,  759,
+      759,  763,  764,  765,  760,  774,  776,  761,  762,  774,
+      785,  785,  786,  787,  789,  791,  773,  790,  765,  774,
+      794,  795,  764,  787,  790,  792,  776,  796,  795,  797,
+      798,  799,  800,  791,  789,  759,  797,  786,  737,  801,
+      794,  803,  792,  804,  806,  796,  805,  807,  805,  814,
+
+      798,  805,  805,  808,  815,  816,  803,  820,  820,  826,
+      820,  820,  804,  814,  806,  821,  824,  799,  827,  824,
+      835,  808,  800,  835,  807,  828,  841,  801,  842,  815,
+      816,  830,  830,  820,  826,  827,  831,  805,  832,  843,
+      821,  855,  828,  821,  829,  829,  829,  840,  829,  846,
+      833,  833,  833,  831,  833,  832,  840,  845,  861,  835,
+      854,  847,  841, 1076,  846,  847,  855,  829,  842,  850,
+      850,  870,  854,  833,  870,  845,  861,  843,  856,  856,
+      862,  856,  856,  865,  829,  850,  860,  860,  858,  858,
+      833,  858,  858,  863,  863,  866,  862,  864,  864,  867,
+
+      865,  868,  869,  869,  856,  871,  871,  872,  872,  873,
+      874,  875,  866,  876,  858,  850,  867,  878,  868,  877,
+      877,  879,  880,  884,  885,  886,  873,  874,  875,  896,
+      876,  900,  884,  901,  886,  887,  887,  880,  958,  885,
+      895,  895,  958,  897,  897,  896,  897,  897,  901,  902,
+      900,  887,  903,  904,  902,  903,  904,  878,  910,  879,
+      905,  905,  906,  906,  907,  907,  895,  908,  908,  897,
+      909,  911,  912,  909,  911,  912,  910,  913,  913,  914,
+      914,  887,  915,  915,  916,  916,  917,  920,  921,  917,
+      922,  923,  935,  937,  937,  938,  937,  937,  948,  940,
+
+      941,  920,  921,  942,  940,  923,  943,  944,  922,  943,
+      944,  945,  947,  948,  945,  938,  940,  935,  941,  937,
+      946,  942,  949,  946,  950,  951,  952,  955,  951,  952,
+      947,  953,  954,  956,  953,  954,  957,  959,  959,  970,
+      949,  976,  950,  957,  977,  955,  974,  974,  971,  971,
+      956,  971,  971,  975,  978,  979,  976,  980,  975,  977,
+      981,  982,  984,  986,  985,  987,  970,  988,  989,  990,
+      991,  991,  978,  979,  971,  980,  982,  984,  981,  985,
+      993,  986,  994,  987,  990,  988,  989, 1005, 1006,  993,
+     1007, 1006, 1010, 1011, 1012, 1013, 1017, 1075, 1018, 1019,
+
+     1020, 1022,  994, 1023, 1022, 1005, 1035, 1010, 1011, 1012,
+     1013, 1017, 1007, 1018, 1019, 1020, 1024, 1023, 1036, 1045,
+     1056, 1024, 1046, 1046, 1035, 1047, 1057, 1036, 1058, 1059,
+     1060, 1060, 1070, 1072, 1083, 1056, 1073, 1045, 1072, 1073,
+     1082, 1070, 1047, 1058, 1084, 1057, 1092, 1093, 1093, 1059,
+     1094, 1083, 1099, 1100, 1105, 1082, 1100, 1104, 1104, 1109,
+     1092, 1108, 1084, 1111, 1108, 1094, 1071, 1113, 1069, 1099,
+     1068, 1067, 1105, 1066, 1109, 1064, 1063, 1062, 1061, 1055,
+     1054, 1111, 1113, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1117, 1117, 1117, 1053, 1117, 1117, 1117, 1117,
+
+     1117, 1118, 1118, 1052, 1051, 1050, 1049, 1118, 1118, 1119,
+     1119, 1048, 1119, 1119, 1120, 1044, 1120, 1120, 1121, 1121,
+     1043, 1121, 1121, 1121, 1121, 1121, 1121, 1122, 1122, 1122,
+     1122, 1123, 1042, 1123, 1123, 1124, 1124, 1041, 1124, 1124,
+     1124, 1124, 1124, 1124, 1125, 1040, 1125, 1125, 1126, 1126,
+     1039, 1126, 1126, 1127, 1038, 1127, 1128, 1128, 1037, 1128,
+     1128, 1128, 1128, 1128, 1128, 1129, 1034, 1129, 1129, 1130,
+     1033, 1130, 1130, 1131, 1131, 1032, 1131, 1131, 1131, 1131,
+     1131, 1131, 1132, 1132, 1133, 1031, 1133, 1133, 1134, 1134,
+     1030, 1134, 1134, 1134, 1134, 1134, 1134, 1135, 1135, 1028,
+
+     1135, 1135, 1135, 1135, 1135, 1135, 1136, 1136, 1027, 1136,
+     1136, 1136, 1136, 1136, 1136, 1137, 1137, 1026, 1137, 1137,
+     1137, 1137, 1137, 1137, 1138, 1138, 1025, 1138, 1138, 1138,
+     1138, 1138, 1138, 1139, 1139, 1021, 1139, 1139, 1139, 1139,
+     1139, 1139, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1141,
+     1141, 1141, 1141, 1141, 1141, 1141, 1142, 1142, 1142, 1142,
+     1142, 1142, 1142, 1143, 1143, 1016, 1143, 1143, 1143, 1143,
+     1143, 1143, 1144, 1144, 1015, 1144, 1144, 1144, 1144, 1144,
+     1144, 1145, 1145, 1014, 1145, 1145, 1145, 1145, 1145, 1145,
+     1146, 1146, 1009, 1146, 1146, 1146, 1146, 1146, 1146, 1147,
+
+     1147, 1008, 1147, 1147, 1147, 1147, 1147, 1147, 1148, 1148,
+     1003, 1148, 1148, 1148, 1148, 1148, 1148, 1149, 1149, 1002,
+     1149, 1149, 1149, 1149, 1149, 1149, 1150, 1150, 1001, 1150,
+     1150, 1150, 1150, 1150, 1150, 1151, 1151, 1000, 1151, 1151,
+     1151, 1151, 1151, 1151, 1152, 1152,  998, 1152, 1152, 1152,
+     1152, 1152, 1152,  997,  996,  995,  992,  983,  973,  968,
+      967,  966,  965,  964,  963,  962,  961,  960,  939,  936,
+      934,  933,  932,  931,  930,  929,  928,  927,  926,  925,
+      924,  919,  918,  899,  894,  893,  892,  891,  890,  889,
+      888,  883,  882,  881,  857,  853,  852,  851,  849,  848,
+
+      844,  839,  838,  837,  836,  834,  825,  819,  818,  817,
+      813,  812,  811,  810,  809,  802,  793,  788,  783,  782,
+      781,  780,  779,  778,  777,  775,  771,  770,  769,  768,
+      767,  751,  743,  742,  741,  738,  736,  734,  733,  730,
+      728,  727,  726,  725,  723,  722,  705,  697,  696,  695,
+      692,  690,  689,  677,  676,  675,  674,  672,  671,  670,
+      646,  645,  644,  643,  642,  641,  640,  635,  634,  631,
+      629,  627,  625,  616,  614,  613,  611,  609,  604,  603,
+      602,  601,  600,  597,  596,  595,  594,  573,  570,  568,
+      566,  565,  564,  562,  552,  549,  545,  541,  539,  528,
+
+      527,  524,  523,  522,  519,  518,  517,  516,  496,  494,
+      493,  492,  491,  489,  488,  479,  475,  474,  473,  470,
+      469,  467,  466,  445,  444,  441,  440,  439,  438,  437,
+      436,  418,  416,  413,  407,  403,  396,  388,  382,  381,
+      380,  379,  356,  355,  354,  353,  352,  350,  349,  332,
+      322,  319,  305,  298,  291,  290,  287,  260,  259,  258,
+      257,  252,  226,  225,  220,  203,  194,  193,  171,  170,
+      163,  162,  161,  160,  138,  113,  104,  103,   99,   86,
+       84,   76,   61,   59,   36,   35,   27,   24,   22,   15,
+       12,   10,    8,    3, 1115, 1115, 1115, 1115, 1115, 1115,
+
+     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+     1115, 1115, 1115, 1115
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[248] =
+static yyconst flex_int32_t yy_rule_can_match_eol[174] =
     {   0,
-0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1,
-    1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0,
-    0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0,     };
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
+    0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,     };
 
 static yy_state_type yy_last_accepting_state;
 static char *yy_last_accepting_cpos;
@@ -2221,18 +1491,27 @@ Modify lex.yy.c:
  * Return 0 if no match found.
  */
 static int skip_comment();
+static int skip_trailing_comment(const char *text, size_t l);
 static int skip_ahead_multi(const char *strings[]);
 static int skip_ahead_until(const char *text);
 static int skip_to_next_directive();
 static int skip_conditional_block();
 
+static void preprocessor_directive(const char *text, size_t l);
 static void print_preprocessor_error(int result, const char *cp, size_t n);
 static const char *get_macro_arguments();
 
 static void push_buffer();
 static int pop_buffer();
 
-#line 2236 "lex.yy.c"
+static void push_include(const char *filename);
+static void pop_include();
+
+static void push_macro(MacroInfo *macro);
+static void pop_macro();
+static int in_macro();
+
+#line 1515 "lex.yy.c"
 
 #define INITIAL 0
 
@@ -2417,10 +1696,10 @@ YY_DECL
         register char *yy_cp, *yy_bp;
         register int yy_act;
 
-#line 65 "vtkParse.l"
+#line 77 "vtkParse.l"
 
 
-#line 2424 "lex.yy.c"
+#line 1703 "lex.yy.c"
 
         if ( !(yy_init) )
                 {
@@ -2474,13 +1753,13 @@ yy_match:
                         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                 {
                                 yy_current_state = (int) yy_def[yy_current_state];
-                                if ( yy_current_state >= 1956 )
+                                if ( yy_current_state >= 1116 )
                                         yy_c = yy_meta[(unsigned int) yy_c];
                                 }
                         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                         ++yy_cp;
                         }
-                while ( yy_base[yy_current_state] != 4605 );
+                while ( yy_base[yy_current_state] != 2595 );
 
 yy_find_action:
                 yy_act = yy_accept[yy_current_state];
@@ -2516,1508 +1795,1118 @@ do_action:        /* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 67 "vtkParse.l"
-{ skip_comment(); };
+#line 79 "vtkParse.l"
+{ skip_comment(); }
         YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 69 "vtkParse.l"
+#line 81 "vtkParse.l"
 {
-       if (!IgnoreBTX) {
-         skip_ahead_until("//ETX");
-       }
-     };
+      if (!IgnoreBTX) {
+        skip_ahead_until("//ETX");
+      }
+    }
         YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 75 "vtkParse.l"
-;
+#line 87 "vtkParse.l"
+/* eat mismatched ETX */
         YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 77 "vtkParse.l"
+#line 89 "vtkParse.l"
 {
-       skip_ahead_until("@end");
-     };
+      skip_ahead_until("@end");
+    }
         YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 81 "vtkParse.l"
+#line 93 "vtkParse.l"
 {
-     size_t pos = 1;
-     while (yytext[pos-1] != 'M' || yytext[pos] != 'E')
-       {
-       pos++;
-       }
-     data.NameComment = vtkstrndup(&yytext[pos + 1], yyleng - pos - 1);
-     };
+      size_t pos = 1;
+      while (yytext[pos-1] != 'M' || yytext[pos] != 'E')
+        {
+        pos++;
+        }
+      data->NameComment = vtkstrndup(&yytext[pos + 1], yyleng - pos - 1);
+    }
         YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 90 "vtkParse.l"
-{ setCommentState(1); };
+#line 102 "vtkParse.l"
+{ setCommentState(1); }
         YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 91 "vtkParse.l"
-{ setCommentState(2); };
+#line 103 "vtkParse.l"
+{ setCommentState(2); }
         YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 92 "vtkParse.l"
-{ setCommentState(3); };
+#line 104 "vtkParse.l"
+{ setCommentState(3); }
         YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 93 "vtkParse.l"
-{ setCommentState(3); };
+#line 105 "vtkParse.l"
+{ setCommentState(3); }
         YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 94 "vtkParse.l"
-{ setCommentState(4); };
+#line 106 "vtkParse.l"
+{ setCommentState(4); }
         YY_BREAK
 case 11:
 /* rule 11 can match eol */
 YY_RULE_SETUP
-#line 95 "vtkParse.l"
-{ closeOrClearComment(); };
+#line 107 "vtkParse.l"
+{ closeOrClearComment(); }
         YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 96 "vtkParse.l"
+#line 108 "vtkParse.l"
 {
-     size_t pos = 2;
-     while (yytext[pos-2] != '/' || yytext[pos-1] != '/') pos++;
-     addCommentLine(&yytext[pos], yyleng - pos);
-     };
+      size_t pos = 2;
+      while (yytext[pos-2] != '/' || yytext[pos-1] != '/') pos++;
+      addCommentLine(&yytext[pos], yyleng - pos);
+    }
         YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 102 "vtkParse.l"
-;
+#line 114 "vtkParse.l"
+/* eat C++ comments */
         YY_BREAK
 case 14:
 /* rule 14 can match eol */
 YY_RULE_SETUP
-#line 104 "vtkParse.l"
+#line 116 "vtkParse.l"
 {
-     int result;
-     MacroInfo *macro;
-     result = vtkParsePreprocess_HandleDirective(&preprocessor, yytext);
-     if (result == VTK_PARSE_OK)
-       {
-       macro = preprocessor.Macros[preprocessor.NumberOfMacros-1];
-       if (!macro->IsFunction)
-         {
-         add_constant(macro->Name, vtkstrdup(macro->Definition), 0, NULL, 1);
-         }
-       }
-     };
+      skip_trailing_comment(yytext, yyleng);
+      preprocessor_directive(yytext, yyleng);
+   }
         YY_BREAK
 case 15:
 /* rule 15 can match eol */
 YY_RULE_SETUP
-#line 118 "vtkParse.l"
+#line 121 "vtkParse.l"
 {
-     int result = 0;
-     result = vtkParsePreprocess_HandleDirective(&preprocessor, yytext);
-     if (result == VTK_PARSE_SKIP)
-       {
-       skip_conditional_block();
-       }
-     else if (result != VTK_PARSE_OK)
-       {
-       print_preprocessor_error(result, yytext, yyleng);
-       }
-     };
+      yylval.str = vtkstrndup(yytext, yyleng);
+      return(STRING_LITERAL);
+    }
         YY_BREAK
 case 16:
 /* rule 16 can match eol */
 YY_RULE_SETUP
-#line 131 "vtkParse.l"
+#line 126 "vtkParse.l"
 {
-                yylval.str = vtkstrndup(yytext, yyleng);
-                return(STRING_LITERAL); }
+      yylval.str = vtkstrndup(yytext, yyleng);
+      return(CHAR_LITERAL);
+    }
         YY_BREAK
 case 17:
-/* rule 17 can match eol */
 YY_RULE_SETUP
-#line 135 "vtkParse.l"
-{
-                yylval.str = vtkstrndup(yytext, yyleng);
-                return(CHAR_LITERAL); }
+#line 131 "vtkParse.l"
+/* ignore EXPORT macros */
         YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 139 "vtkParse.l"
-;
+#line 133 "vtkParse.l"
+{ /* let the wrappers see the parameter */
+      const char *args = NULL;
+      const char *cp;
+      size_t l = 0;
+      args = get_macro_arguments();
+      if (args)
+        {
+        cp = args;
+        if (*cp == '(') { cp++; }
+        while (*cp == ' ' || *cp == '\t') { cp++; }
+        l = vtkidlen(cp);
+        if (l)
+          {
+          yylval.str = vtkstrndup(cp, l);
+          free((char *)args);
+          return(ID);
+          }
+        free((char *)args);
+        }
+    }
         YY_BREAK
 case 19:
-/* rule 19 can match eol */
 YY_RULE_SETUP
-#line 141 "vtkParse.l"
-{
-     size_t i; size_t j = 0;
-     yylval.str = "";
-     if (yytext[yyleng-1] == ')')
-       {
-       while (yytext[j]!='(') { j++; }
-       while (yytext[j]==' ' || yytext[j]=='\t') { j++; }
-       j++; i = j;
-       while (yytext[j]!=')' && yytext[j] != ' ' && yytext[j] != '\t') { j++; }
-       yylval.str = vtkstrndup(&yytext[i], j-i);
-       return(ID);
-       }
-     };
+#line 154 "vtkParse.l"
+return(DOUBLE);
         YY_BREAK
 case 20:
-/* rule 20 can match eol */
 YY_RULE_SETUP
 #line 155 "vtkParse.l"
-{
-     return(CLASS_REF);
-     };
+return(FLOAT);
         YY_BREAK
 case 21:
-/* rule 21 can match eol */
 YY_RULE_SETUP
-#line 159 "vtkParse.l"
-{
-     return(CLASS_REF);
-     };
+#line 156 "vtkParse.l"
+return(INT64__);
         YY_BREAK
 case 22:
-/* rule 22 can match eol */
 YY_RULE_SETUP
-#line 163 "vtkParse.l"
-{
-     return(CLASS_REF);
-     };
+#line 157 "vtkParse.l"
+return(SHORT);
         YY_BREAK
 case 23:
-/* rule 23 can match eol */
 YY_RULE_SETUP
-#line 167 "vtkParse.l"
-{
-     size_t i = 0; size_t j = 0;
-     while (yytext[j] != '*') { i++; j++; }
-     i++; j++;
-     while (yytext[i] != ' ' && yytext[i] != '\t' &&
-            yytext[i] != '\n' && yytext[i] != '\r' && yytext[i] != ')') {i++;}
-     yylval.str = vtkstrndup(&yytext[j], i-j);
-     return(VAR_FUNCTION);
-     };
+#line 158 "vtkParse.l"
+return(LONG);
         YY_BREAK
 case 24:
-/* rule 24 can match eol */
 YY_RULE_SETUP
-#line 177 "vtkParse.l"
-return(LONG_DOUBLE);
+#line 159 "vtkParse.l"
+return(CHAR);
         YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 178 "vtkParse.l"
-return(DOUBLE);
+#line 160 "vtkParse.l"
+return(INT);
         YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 179 "vtkParse.l"
-return(FLOAT);
+#line 162 "vtkParse.l"
+return(UNSIGNED);
         YY_BREAK
 case 27:
-/* rule 27 can match eol */
 YY_RULE_SETUP
-#line 181 "vtkParse.l"
-return(UNSIGNED_INT64__);
+#line 163 "vtkParse.l"
+return(SIGNED);
         YY_BREAK
 case 28:
-/* rule 28 can match eol */
 YY_RULE_SETUP
-#line 182 "vtkParse.l"
-return(UNSIGNED_INT64__);
+#line 165 "vtkParse.l"
+return(VOID);
         YY_BREAK
 case 29:
-/* rule 29 can match eol */
 YY_RULE_SETUP
-#line 184 "vtkParse.l"
-return(INT64__);
+#line 166 "vtkParse.l"
+return(BOOL);
         YY_BREAK
 case 30:
-/* rule 30 can match eol */
 YY_RULE_SETUP
-#line 185 "vtkParse.l"
-return(INT64__);
+#line 168 "vtkParse.l"
+return(SIZE_T);
         YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 186 "vtkParse.l"
-return(INT64__);
+#line 169 "vtkParse.l"
+return(SSIZE_T);
         YY_BREAK
 case 32:
-/* rule 32 can match eol */
 YY_RULE_SETUP
-#line 188 "vtkParse.l"
-return(UNSIGNED_LONG_LONG);
+#line 171 "vtkParse.l"
+/* ignore the Q_OBJECT macro from Qt */
         YY_BREAK
 case 33:
 /* rule 33 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 189 "vtkParse.l"
-return(UNSIGNED_LONG_LONG);
+#line 172 "vtkParse.l"
+return(PUBLIC);
         YY_BREAK
 case 34:
 /* rule 34 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 190 "vtkParse.l"
-return(UNSIGNED_LONG_LONG);
+#line 173 "vtkParse.l"
+return(PRIVATE);
         YY_BREAK
 case 35:
 /* rule 35 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 191 "vtkParse.l"
-return(UNSIGNED_LONG_LONG);
+#line 174 "vtkParse.l"
+return(PROTECTED);
         YY_BREAK
 case 36:
 /* rule 36 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 192 "vtkParse.l"
-return(UNSIGNED_LONG_LONG);
+#line 175 "vtkParse.l"
+return(PROTECTED);
         YY_BREAK
 case 37:
-/* rule 37 can match eol */
 YY_RULE_SETUP
-#line 193 "vtkParse.l"
-return(UNSIGNED_LONG_LONG);
+#line 177 "vtkParse.l"
+return(CLASS);
         YY_BREAK
 case 38:
-/* rule 38 can match eol */
 YY_RULE_SETUP
-#line 194 "vtkParse.l"
-return(UNSIGNED_LONG_LONG);
+#line 178 "vtkParse.l"
+return(STRUCT);
         YY_BREAK
 case 39:
-/* rule 39 can match eol */
 YY_RULE_SETUP
-#line 195 "vtkParse.l"
-return(UNSIGNED_LONG_LONG);
+#line 179 "vtkParse.l"
+return(PUBLIC);
         YY_BREAK
 case 40:
-/* rule 40 can match eol */
 YY_RULE_SETUP
-#line 197 "vtkParse.l"
-return(LONG_LONG);
+#line 180 "vtkParse.l"
+return(PRIVATE);
         YY_BREAK
 case 41:
-/* rule 41 can match eol */
 YY_RULE_SETUP
-#line 198 "vtkParse.l"
-return(LONG_LONG);
+#line 181 "vtkParse.l"
+return(PROTECTED);
         YY_BREAK
 case 42:
-/* rule 42 can match eol */
 YY_RULE_SETUP
-#line 199 "vtkParse.l"
-return(LONG_LONG);
+#line 182 "vtkParse.l"
+return(ENUM);
         YY_BREAK
 case 43:
-/* rule 43 can match eol */
 YY_RULE_SETUP
-#line 200 "vtkParse.l"
-return(LONG_LONG);
+#line 183 "vtkParse.l"
+return(UNION);
         YY_BREAK
 case 44:
-/* rule 44 can match eol */
 YY_RULE_SETUP
-#line 201 "vtkParse.l"
-return(LONG_LONG);
+#line 184 "vtkParse.l"
+return(VIRTUAL);
         YY_BREAK
 case 45:
-/* rule 45 can match eol */
 YY_RULE_SETUP
-#line 202 "vtkParse.l"
-return(LONG_LONG);
+#line 185 "vtkParse.l"
+return(CONST);
         YY_BREAK
 case 46:
-/* rule 46 can match eol */
 YY_RULE_SETUP
-#line 203 "vtkParse.l"
-return(LONG_LONG);
+#line 186 "vtkParse.l"
+return(VOLATILE);
         YY_BREAK
 case 47:
-/* rule 47 can match eol */
 YY_RULE_SETUP
-#line 204 "vtkParse.l"
-return(LONG_LONG);
+#line 187 "vtkParse.l"
+return(MUTABLE);
         YY_BREAK
 case 48:
-/* rule 48 can match eol */
 YY_RULE_SETUP
-#line 205 "vtkParse.l"
-return(LONG_LONG);
+#line 188 "vtkParse.l"
+return(OPERATOR);
         YY_BREAK
 case 49:
-/* rule 49 can match eol */
 YY_RULE_SETUP
-#line 206 "vtkParse.l"
-return(LONG_LONG);
+#line 189 "vtkParse.l"
+return(FRIEND);
         YY_BREAK
 case 50:
-/* rule 50 can match eol */
 YY_RULE_SETUP
-#line 207 "vtkParse.l"
-return(LONG_LONG);
+#line 190 "vtkParse.l"
+return(INLINE);
         YY_BREAK
 case 51:
-/* rule 51 can match eol */
 YY_RULE_SETUP
-#line 209 "vtkParse.l"
-return(UNSIGNED_SHORT);
+#line 191 "vtkParse.l"
+return(STATIC);
         YY_BREAK
 case 52:
-/* rule 52 can match eol */
 YY_RULE_SETUP
-#line 210 "vtkParse.l"
-return(UNSIGNED_SHORT);
+#line 192 "vtkParse.l"
+return(EXTERN);
         YY_BREAK
 case 53:
-/* rule 53 can match eol */
 YY_RULE_SETUP
-#line 211 "vtkParse.l"
-return(UNSIGNED_SHORT);
+#line 193 "vtkParse.l"
+return(TEMPLATE);
         YY_BREAK
 case 54:
-/* rule 54 can match eol */
 YY_RULE_SETUP
-#line 212 "vtkParse.l"
-return(UNSIGNED_SHORT);
+#line 194 "vtkParse.l"
+return(TYPENAME);
         YY_BREAK
 case 55:
-/* rule 55 can match eol */
 YY_RULE_SETUP
-#line 213 "vtkParse.l"
-return(UNSIGNED_SHORT);
+#line 195 "vtkParse.l"
+return(TYPEDEF);
         YY_BREAK
 case 56:
-/* rule 56 can match eol */
 YY_RULE_SETUP
-#line 214 "vtkParse.l"
-return(UNSIGNED_SHORT);
+#line 196 "vtkParse.l"
+return(NAMESPACE);
         YY_BREAK
 case 57:
-/* rule 57 can match eol */
 YY_RULE_SETUP
-#line 215 "vtkParse.l"
-return(UNSIGNED_SHORT);
+#line 197 "vtkParse.l"
+return(USING);
         YY_BREAK
 case 58:
-/* rule 58 can match eol */
 YY_RULE_SETUP
-#line 216 "vtkParse.l"
-return(UNSIGNED_SHORT);
+#line 198 "vtkParse.l"
+return(NEW);
         YY_BREAK
 case 59:
-/* rule 59 can match eol */
 YY_RULE_SETUP
-#line 218 "vtkParse.l"
-return(SHORT);
+#line 199 "vtkParse.l"
+return(DELETE);
         YY_BREAK
 case 60:
-/* rule 60 can match eol */
 YY_RULE_SETUP
-#line 219 "vtkParse.l"
-return(SHORT);
+#line 200 "vtkParse.l"
+return(EXPLICIT);
         YY_BREAK
 case 61:
-/* rule 61 can match eol */
 YY_RULE_SETUP
-#line 220 "vtkParse.l"
-return(SHORT);
+#line 201 "vtkParse.l"
+return(THROW);
         YY_BREAK
 case 62:
-/* rule 62 can match eol */
 YY_RULE_SETUP
-#line 221 "vtkParse.l"
-return(SHORT);
+#line 203 "vtkParse.l"
+return(STATIC_CAST);
         YY_BREAK
 case 63:
-/* rule 63 can match eol */
 YY_RULE_SETUP
-#line 222 "vtkParse.l"
-return(SHORT);
+#line 204 "vtkParse.l"
+return(DYNAMIC_CAST);
         YY_BREAK
 case 64:
-/* rule 64 can match eol */
 YY_RULE_SETUP
-#line 223 "vtkParse.l"
-return(SHORT);
+#line 205 "vtkParse.l"
+return(CONST_CAST);
         YY_BREAK
 case 65:
-/* rule 65 can match eol */
 YY_RULE_SETUP
-#line 224 "vtkParse.l"
-return(SHORT);
+#line 206 "vtkParse.l"
+return(REINTERPRET_CAST);
         YY_BREAK
 case 66:
-/* rule 66 can match eol */
 YY_RULE_SETUP
-#line 225 "vtkParse.l"
-return(SHORT);
+#line 208 "vtkParse.l"
+/* irrelevant to wrappers */
         YY_BREAK
 case 67:
-/* rule 67 can match eol */
 YY_RULE_SETUP
-#line 226 "vtkParse.l"
-return(SHORT);
+#line 209 "vtkParse.l"
+/* irrelevant to wrappers */
         YY_BREAK
 case 68:
-/* rule 68 can match eol */
 YY_RULE_SETUP
-#line 227 "vtkParse.l"
-return(SHORT);
+#line 211 "vtkParse.l"
+return(OP_LOGIC_AND);
         YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 228 "vtkParse.l"
-return(SHORT);
+#line 212 "vtkParse.l"
+return(OP_AND_EQ);
         YY_BREAK
 case 70:
-/* rule 70 can match eol */
 YY_RULE_SETUP
-#line 230 "vtkParse.l"
-return(UNSIGNED_LONG);
+#line 213 "vtkParse.l"
+return(OP_LOGIC_OR);
         YY_BREAK
 case 71:
-/* rule 71 can match eol */
 YY_RULE_SETUP
-#line 231 "vtkParse.l"
-return(UNSIGNED_LONG);
+#line 214 "vtkParse.l"
+return(OP_OR_EQ);
         YY_BREAK
 case 72:
-/* rule 72 can match eol */
 YY_RULE_SETUP
-#line 232 "vtkParse.l"
-return(UNSIGNED_LONG);
+#line 215 "vtkParse.l"
+return('!');
         YY_BREAK
 case 73:
-/* rule 73 can match eol */
 YY_RULE_SETUP
-#line 233 "vtkParse.l"
-return(UNSIGNED_LONG);
+#line 216 "vtkParse.l"
+return(OP_LOGIC_NEQ);
         YY_BREAK
 case 74:
-/* rule 74 can match eol */
 YY_RULE_SETUP
-#line 234 "vtkParse.l"
-return(UNSIGNED_LONG);
+#line 217 "vtkParse.l"
+return('^');
         YY_BREAK
 case 75:
-/* rule 75 can match eol */
 YY_RULE_SETUP
-#line 235 "vtkParse.l"
-return(UNSIGNED_LONG);
+#line 218 "vtkParse.l"
+return(OP_XOR_EQ);
         YY_BREAK
 case 76:
-/* rule 76 can match eol */
 YY_RULE_SETUP
-#line 236 "vtkParse.l"
-return(UNSIGNED_LONG);
+#line 219 "vtkParse.l"
+return('&');
         YY_BREAK
 case 77:
-/* rule 77 can match eol */
 YY_RULE_SETUP
-#line 237 "vtkParse.l"
-return(UNSIGNED_LONG);
+#line 220 "vtkParse.l"
+return('|');
         YY_BREAK
 case 78:
-/* rule 78 can match eol */
 YY_RULE_SETUP
-#line 239 "vtkParse.l"
-return(LONG);
+#line 221 "vtkParse.l"
+return('~');
         YY_BREAK
 case 79:
-/* rule 79 can match eol */
 YY_RULE_SETUP
-#line 240 "vtkParse.l"
-return(LONG);
+#line 223 "vtkParse.l"
+return(IdType);
         YY_BREAK
 case 80:
-/* rule 80 can match eol */
 YY_RULE_SETUP
-#line 241 "vtkParse.l"
-return(LONG);
+#line 224 "vtkParse.l"
+return(SetMacro);
         YY_BREAK
 case 81:
-/* rule 81 can match eol */
 YY_RULE_SETUP
-#line 242 "vtkParse.l"
-return(LONG);
+#line 225 "vtkParse.l"
+return(GetMacro);
         YY_BREAK
 case 82:
-/* rule 82 can match eol */
 YY_RULE_SETUP
-#line 243 "vtkParse.l"
-return(LONG);
+#line 226 "vtkParse.l"
+return(SetStringMacro);
         YY_BREAK
 case 83:
-/* rule 83 can match eol */
 YY_RULE_SETUP
-#line 244 "vtkParse.l"
-return(LONG);
+#line 227 "vtkParse.l"
+return(GetStringMacro);
         YY_BREAK
 case 84:
-/* rule 84 can match eol */
 YY_RULE_SETUP
-#line 245 "vtkParse.l"
-return(LONG);
+#line 228 "vtkParse.l"
+return(SetClampMacro);
         YY_BREAK
 case 85:
-/* rule 85 can match eol */
 YY_RULE_SETUP
-#line 246 "vtkParse.l"
-return(LONG);
+#line 229 "vtkParse.l"
+return(SetObjectMacro);
         YY_BREAK
 case 86:
-/* rule 86 can match eol */
 YY_RULE_SETUP
-#line 247 "vtkParse.l"
-return(LONG);
+#line 230 "vtkParse.l"
+return(GetObjectMacro);
         YY_BREAK
 case 87:
-/* rule 87 can match eol */
 YY_RULE_SETUP
-#line 248 "vtkParse.l"
-return(LONG);
+#line 231 "vtkParse.l"
+return(BooleanMacro);
         YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 249 "vtkParse.l"
-return(LONG);
+#line 232 "vtkParse.l"
+return(SetVector2Macro);
         YY_BREAK
 case 89:
-/* rule 89 can match eol */
 YY_RULE_SETUP
-#line 251 "vtkParse.l"
-return(UNSIGNED_CHAR);
+#line 233 "vtkParse.l"
+return(SetVector3Macro);
         YY_BREAK
 case 90:
-/* rule 90 can match eol */
 YY_RULE_SETUP
-#line 252 "vtkParse.l"
-return(UNSIGNED_CHAR);
+#line 234 "vtkParse.l"
+return(SetVector4Macro);
         YY_BREAK
 case 91:
-/* rule 91 can match eol */
 YY_RULE_SETUP
-#line 253 "vtkParse.l"
-return(SIGNED_CHAR);
+#line 235 "vtkParse.l"
+return(SetVector6Macro);
         YY_BREAK
 case 92:
-/* rule 92 can match eol */
 YY_RULE_SETUP
-#line 254 "vtkParse.l"
-return(SIGNED_CHAR);
+#line 236 "vtkParse.l"
+return(GetVector2Macro);
         YY_BREAK
 case 93:
 YY_RULE_SETUP
-#line 255 "vtkParse.l"
-return(CHAR);
+#line 237 "vtkParse.l"
+return(GetVector3Macro);
         YY_BREAK
 case 94:
-/* rule 94 can match eol */
 YY_RULE_SETUP
-#line 257 "vtkParse.l"
-return(UNSIGNED_INT);
+#line 238 "vtkParse.l"
+return(GetVector4Macro);
         YY_BREAK
 case 95:
-/* rule 95 can match eol */
 YY_RULE_SETUP
-#line 258 "vtkParse.l"
-return(UNSIGNED_INT);
+#line 239 "vtkParse.l"
+return(GetVector6Macro);
         YY_BREAK
 case 96:
-/* rule 96 can match eol */
 YY_RULE_SETUP
-#line 260 "vtkParse.l"
-return(INT);
+#line 240 "vtkParse.l"
+return(SetVectorMacro);
         YY_BREAK
 case 97:
-/* rule 97 can match eol */
 YY_RULE_SETUP
-#line 261 "vtkParse.l"
-return(INT);
+#line 241 "vtkParse.l"
+return(GetVectorMacro);
         YY_BREAK
 case 98:
 YY_RULE_SETUP
-#line 262 "vtkParse.l"
-return(INT);
+#line 242 "vtkParse.l"
+return(ViewportCoordinateMacro);
         YY_BREAK
 case 99:
 YY_RULE_SETUP
-#line 264 "vtkParse.l"
-return(UNSIGNED);
+#line 243 "vtkParse.l"
+return(WorldCoordinateMacro);
         YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 265 "vtkParse.l"
-return(SIGNED);
+#line 244 "vtkParse.l"
+return(TypeMacro);
         YY_BREAK
 case 101:
 YY_RULE_SETUP
-#line 267 "vtkParse.l"
-return(VOID);
+#line 245 "vtkParse.l"
+return(TypeMacro);
         YY_BREAK
 case 102:
 YY_RULE_SETUP
-#line 268 "vtkParse.l"
-return(BOOL);
+#line 246 "vtkParse.l"
+return(TypeMacro);
         YY_BREAK
 case 103:
 YY_RULE_SETUP
-#line 270 "vtkParse.l"
-return(SIZE_T);
+#line 247 "vtkParse.l"
+return(TypeMacro);
         YY_BREAK
 case 104:
 YY_RULE_SETUP
-#line 271 "vtkParse.l"
-return(SSIZE_T);
+#line 248 "vtkParse.l"
+;
         YY_BREAK
 case 105:
 YY_RULE_SETUP
-#line 273 "vtkParse.l"
-;
+#line 249 "vtkParse.l"
+return(VTK_BYTE_SWAP_DECL);
         YY_BREAK
 case 106:
-/* rule 106 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
-(yy_c_buf_p) = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 274 "vtkParse.l"
-return(PUBLIC);
+#line 250 "vtkParse.l"
+return(TypeInt8);
         YY_BREAK
 case 107:
-/* rule 107 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
-(yy_c_buf_p) = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 275 "vtkParse.l"
-return(PRIVATE);
+#line 251 "vtkParse.l"
+return(TypeUInt8);
         YY_BREAK
 case 108:
-/* rule 108 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
-(yy_c_buf_p) = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 276 "vtkParse.l"
-return(PROTECTED);
+#line 252 "vtkParse.l"
+return(TypeInt16);
         YY_BREAK
 case 109:
-*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
-(yy_c_buf_p) = yy_cp = yy_bp + 7;
-YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 277 "vtkParse.l"
-return(PROTECTED);
+#line 253 "vtkParse.l"
+return(TypeUInt16);
         YY_BREAK
 case 110:
 YY_RULE_SETUP
-#line 279 "vtkParse.l"
-return(CLASS);
+#line 254 "vtkParse.l"
+return(TypeInt32);
         YY_BREAK
 case 111:
 YY_RULE_SETUP
-#line 280 "vtkParse.l"
-return(STRUCT);
+#line 255 "vtkParse.l"
+return(TypeUInt32);
         YY_BREAK
 case 112:
 YY_RULE_SETUP
-#line 281 "vtkParse.l"
-return(PUBLIC);
+#line 256 "vtkParse.l"
+return(TypeInt64);
         YY_BREAK
 case 113:
 YY_RULE_SETUP
-#line 282 "vtkParse.l"
-return(PRIVATE);
+#line 257 "vtkParse.l"
+return(TypeUInt64);
         YY_BREAK
 case 114:
 YY_RULE_SETUP
-#line 283 "vtkParse.l"
-return(PROTECTED);
+#line 258 "vtkParse.l"
+return(TypeFloat32);
         YY_BREAK
 case 115:
 YY_RULE_SETUP
-#line 284 "vtkParse.l"
-return(ENUM);
+#line 259 "vtkParse.l"
+return(TypeFloat64);
         YY_BREAK
 case 116:
+/* rule 116 can match eol */
 YY_RULE_SETUP
-#line 285 "vtkParse.l"
-return(UNION);
+#line 261 "vtkParse.l"
+{
+      size_t i = 1;
+      size_t j;
+      while (yytext[i]==' ' || yytext[i]=='\t' ||
+             yytext[i]=='\r' || yytext[i]=='\n') { i++; }
+      j = i;
+      while (yytext[j]!='&') { j++; }
+      yylval.str = vtkstrndup(&yytext[i], j-i);
+      return(LA);
+    }
         YY_BREAK
 case 117:
+/* rule 117 can match eol */
 YY_RULE_SETUP
-#line 286 "vtkParse.l"
-return(VIRTUAL);
+#line 272 "vtkParse.l"
+{
+      size_t i = 1;
+      size_t j;
+      while (yytext[i]==' ' || yytext[i]=='\t' ||
+             yytext[i]=='\r' || yytext[i]=='\n') { i++; }
+      j = i;
+      while (yytext[j]!='*') { j++; }
+      yylval.str = vtkstrndup(&yytext[i], j-i);
+      return(LP);
+    }
         YY_BREAK
 case 118:
+/* rule 118 can match eol */
 YY_RULE_SETUP
-#line 287 "vtkParse.l"
-return(CONST);
+#line 283 "vtkParse.l"
+{
+      yylval.str = "";
+      return(LP);
+    }
         YY_BREAK
 case 119:
+/* rule 119 can match eol */
 YY_RULE_SETUP
 #line 288 "vtkParse.l"
-return(MUTABLE);
+{
+      yylval.str = "";
+      return(LP);
+    }
         YY_BREAK
 case 120:
 YY_RULE_SETUP
-#line 289 "vtkParse.l"
-return(OPERATOR);
+#line 293 "vtkParse.l"
+return('*');
         YY_BREAK
 case 121:
 YY_RULE_SETUP
-#line 290 "vtkParse.l"
-return(FRIEND);
+#line 295 "vtkParse.l"
+/* misc unused win32 macros */
         YY_BREAK
 case 122:
+/* rule 122 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 291 "vtkParse.l"
-return(INLINE);
+#line 297 "vtkParse.l"
+{
+      yylval.str = vtkstrndup(yytext, yyleng);
+      return(OSTREAM);
+    }
         YY_BREAK
 case 123:
+/* rule 123 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 292 "vtkParse.l"
-return(STATIC);
+#line 302 "vtkParse.l"
+{
+      yylval.str = vtkstrndup(yytext, yyleng);
+      return(ISTREAM);
+    }
         YY_BREAK
 case 124:
+/* rule 124 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 293 "vtkParse.l"
-return(EXTERN);
+#line 307 "vtkParse.l"
+{
+      yylval.str = vtkstrndup(yytext, yyleng);
+      return(StdString);
+    }
         YY_BREAK
 case 125:
 YY_RULE_SETUP
-#line 294 "vtkParse.l"
-return(TEMPLATE);
-        YY_BREAK
-case 126:
-YY_RULE_SETUP
-#line 295 "vtkParse.l"
-return(TYPENAME);
-        YY_BREAK
-case 127:
-YY_RULE_SETUP
-#line 296 "vtkParse.l"
-return(TYPEDEF);
-        YY_BREAK
-case 128:
-YY_RULE_SETUP
-#line 297 "vtkParse.l"
-return(NAMESPACE);
-        YY_BREAK
-case 129:
-YY_RULE_SETUP
-#line 298 "vtkParse.l"
-return(USING);
-        YY_BREAK
-case 130:
-YY_RULE_SETUP
-#line 299 "vtkParse.l"
-return(NEW);
-        YY_BREAK
-case 131:
-YY_RULE_SETUP
-#line 300 "vtkParse.l"
-return(DELETE);
-        YY_BREAK
-case 132:
-YY_RULE_SETUP
-#line 301 "vtkParse.l"
-return(EXPLICIT);
-        YY_BREAK
-case 133:
-YY_RULE_SETUP
-#line 303 "vtkParse.l"
-return(STATIC_CAST);
-        YY_BREAK
-case 134:
-YY_RULE_SETUP
-#line 304 "vtkParse.l"
-return(DYNAMIC_CAST);
-        YY_BREAK
-case 135:
-YY_RULE_SETUP
-#line 305 "vtkParse.l"
-return(CONST_CAST);
-        YY_BREAK
-case 136:
-YY_RULE_SETUP
-#line 306 "vtkParse.l"
-return(REINTERPRET_CAST);
-        YY_BREAK
-case 137:
-YY_RULE_SETUP
-#line 308 "vtkParse.l"
-;
-        YY_BREAK
-case 138:
-YY_RULE_SETUP
-#line 309 "vtkParse.l"
-;
-        YY_BREAK
-case 139:
-YY_RULE_SETUP
-#line 310 "vtkParse.l"
-;
-        YY_BREAK
-case 140:
-YY_RULE_SETUP
 #line 312 "vtkParse.l"
-return(OP_LOGIC_AND);
-        YY_BREAK
-case 141:
-YY_RULE_SETUP
-#line 313 "vtkParse.l"
-return(OP_AND_EQ);
-        YY_BREAK
-case 142:
-YY_RULE_SETUP
-#line 314 "vtkParse.l"
-return(OP_LOGIC_OR);
-        YY_BREAK
-case 143:
-YY_RULE_SETUP
-#line 315 "vtkParse.l"
-return(OP_OR_EQ);
-        YY_BREAK
-case 144:
-YY_RULE_SETUP
-#line 316 "vtkParse.l"
-return('!');
+{
+      yylval.str = vtkstrndup(yytext, yyleng);
+      return(StdString);
+    }
         YY_BREAK
-case 145:
+case 126:
 YY_RULE_SETUP
 #line 317 "vtkParse.l"
-return(OP_LOGIC_NEQ);
-        YY_BREAK
-case 146:
-YY_RULE_SETUP
-#line 318 "vtkParse.l"
-return('^');
-        YY_BREAK
-case 147:
-YY_RULE_SETUP
-#line 319 "vtkParse.l"
-return(OP_XOR_EQ);
-        YY_BREAK
-case 148:
-YY_RULE_SETUP
-#line 320 "vtkParse.l"
-return('&');
-        YY_BREAK
-case 149:
-YY_RULE_SETUP
-#line 321 "vtkParse.l"
-return('|');
+{
+      yylval.str = vtkstrndup(yytext, yyleng);
+      return(UnicodeString);
+    }
         YY_BREAK
-case 150:
+case 127:
 YY_RULE_SETUP
 #line 322 "vtkParse.l"
-return('~');
-        YY_BREAK
-case 151:
-YY_RULE_SETUP
-#line 324 "vtkParse.l"
-return(FloatType);
-        YY_BREAK
-case 152:
-YY_RULE_SETUP
-#line 325 "vtkParse.l"
-return(IdType);
-        YY_BREAK
-case 153:
-YY_RULE_SETUP
-#line 326 "vtkParse.l"
-return(SetMacro);
+{
+      yylval.str = vtkstrndup(yytext, yyleng);
+      return(VTK_ID);
+    }
         YY_BREAK
-case 154:
+case 128:
 YY_RULE_SETUP
 #line 327 "vtkParse.l"
-return(GetMacro);
-        YY_BREAK
-case 155:
-YY_RULE_SETUP
-#line 328 "vtkParse.l"
-return(SetStringMacro);
-        YY_BREAK
-case 156:
-YY_RULE_SETUP
-#line 329 "vtkParse.l"
-return(GetStringMacro);
-        YY_BREAK
-case 157:
-YY_RULE_SETUP
-#line 330 "vtkParse.l"
-return(SetClampMacro);
-        YY_BREAK
-case 158:
-YY_RULE_SETUP
-#line 331 "vtkParse.l"
-return(SetObjectMacro);
+{
+      yylval.str = vtkstrndup(yytext, yyleng);
+      return(QT_ID);
+    }
         YY_BREAK
-case 159:
+case 129:
 YY_RULE_SETUP
 #line 332 "vtkParse.l"
-return(GetObjectMacro);
+get_macro_arguments(); /* gcc attributes */
         YY_BREAK
-case 160:
-YY_RULE_SETUP
-#line 333 "vtkParse.l"
-return(BooleanMacro);
-        YY_BREAK
-case 161:
+case 130:
 YY_RULE_SETUP
 #line 334 "vtkParse.l"
-return(SetVector2Macro);
+get_macro_arguments(); /* Windows linkage */
         YY_BREAK
-case 162:
-YY_RULE_SETUP
-#line 335 "vtkParse.l"
-return(SetVector3Macro);
-        YY_BREAK
-case 163:
+case 131:
 YY_RULE_SETUP
 #line 336 "vtkParse.l"
-return(SetVector4Macro);
+/* Windows */
         YY_BREAK
-case 164:
-YY_RULE_SETUP
-#line 337 "vtkParse.l"
-return(SetVector6Macro);
-        YY_BREAK
-case 165:
+case 132:
 YY_RULE_SETUP
 #line 338 "vtkParse.l"
-return(GetVector2Macro);
-        YY_BREAK
-case 166:
-YY_RULE_SETUP
-#line 339 "vtkParse.l"
-return(GetVector3Macro);
-        YY_BREAK
-case 167:
-YY_RULE_SETUP
-#line 340 "vtkParse.l"
-return(GetVector4Macro);
-        YY_BREAK
-case 168:
-YY_RULE_SETUP
-#line 341 "vtkParse.l"
-return(GetVector6Macro);
-        YY_BREAK
-case 169:
-YY_RULE_SETUP
-#line 342 "vtkParse.l"
-return(SetVectorMacro);
-        YY_BREAK
-case 170:
-YY_RULE_SETUP
-#line 343 "vtkParse.l"
-return(GetVectorMacro);
-        YY_BREAK
-case 171:
-YY_RULE_SETUP
-#line 344 "vtkParse.l"
-return(ViewportCoordinateMacro);
-        YY_BREAK
-case 172:
-YY_RULE_SETUP
-#line 345 "vtkParse.l"
-return(WorldCoordinateMacro);
-        YY_BREAK
-case 173:
-YY_RULE_SETUP
-#line 346 "vtkParse.l"
-return(TypeMacro);
-        YY_BREAK
-case 174:
-YY_RULE_SETUP
-#line 347 "vtkParse.l"
-return(TypeMacro);
-        YY_BREAK
-case 175:
-YY_RULE_SETUP
-#line 348 "vtkParse.l"
-return(TypeMacro);
-        YY_BREAK
-case 176:
-YY_RULE_SETUP
-#line 349 "vtkParse.l"
-return(TypeMacro);
-        YY_BREAK
-case 177:
-YY_RULE_SETUP
-#line 350 "vtkParse.l"
-return(VTK_LEGACY);
-        YY_BREAK
-case 178:
-YY_RULE_SETUP
-#line 351 "vtkParse.l"
-;
-        YY_BREAK
-case 179:
-YY_RULE_SETUP
-#line 352 "vtkParse.l"
-return(VTK_BYTE_SWAP_DECL);
-        YY_BREAK
-case 180:
-YY_RULE_SETUP
-#line 353 "vtkParse.l"
-return(TypeInt8);
-        YY_BREAK
-case 181:
-YY_RULE_SETUP
-#line 354 "vtkParse.l"
-return(TypeUInt8);
-        YY_BREAK
-case 182:
-YY_RULE_SETUP
-#line 355 "vtkParse.l"
-return(TypeInt16);
-        YY_BREAK
-case 183:
-YY_RULE_SETUP
-#line 356 "vtkParse.l"
-return(TypeUInt16);
-        YY_BREAK
-case 184:
-YY_RULE_SETUP
-#line 357 "vtkParse.l"
-return(TypeInt32);
-        YY_BREAK
-case 185:
-YY_RULE_SETUP
-#line 358 "vtkParse.l"
-return(TypeUInt32);
-        YY_BREAK
-case 186:
-YY_RULE_SETUP
-#line 359 "vtkParse.l"
-return(TypeInt64);
-        YY_BREAK
-case 187:
-YY_RULE_SETUP
-#line 360 "vtkParse.l"
-return(TypeUInt64);
-        YY_BREAK
-case 188:
-YY_RULE_SETUP
-#line 361 "vtkParse.l"
-return(TypeFloat32);
-        YY_BREAK
-case 189:
-YY_RULE_SETUP
-#line 362 "vtkParse.l"
-return(TypeFloat64);
-        YY_BREAK
-case 190:
-/* rule 190 can match eol */
-YY_RULE_SETUP
-#line 364 "vtkParse.l"
-return(CONST_PTR);
-        YY_BREAK
-case 191:
-/* rule 191 can match eol */
-YY_RULE_SETUP
-#line 365 "vtkParse.l"
-return(CONST_EQUAL);
-        YY_BREAK
-case 192:
-/* rule 192 can match eol */
-YY_RULE_SETUP
-#line 367 "vtkParse.l"
-{
-                size_t i = 1;
-                size_t j;
-                while (yytext[i]==' ' || yytext[i]=='\t' ||
-                       yytext[i]=='\r' || yytext[i]=='\n') { i++; }
-                j = i;
-                while (yytext[j]!='&') { j++; }
-                yylval.str = vtkstrndup(&yytext[i], j-i);
-                return(LA); }
-        YY_BREAK
-case 193:
-/* rule 193 can match eol */
-YY_RULE_SETUP
-#line 377 "vtkParse.l"
-{
-                size_t i = 1;
-                size_t j;
-                while (yytext[i]==' ' || yytext[i]=='\t' ||
-                       yytext[i]=='\r' || yytext[i]=='\n') { i++; }
-                j = i;
-                while (yytext[j]!='*') { j++; }
-                yylval.str = vtkstrndup(&yytext[i], j-i);
-                return(LP); }
-        YY_BREAK
-case 194:
-/* rule 194 can match eol */
-YY_RULE_SETUP
-#line 387 "vtkParse.l"
-{
-                yylval.str = "";
-                return(LP); }
-        YY_BREAK
-case 195:
-/* rule 195 can match eol */
-YY_RULE_SETUP
-#line 391 "vtkParse.l"
-{
-                yylval.str = "";
-                return(LP); }
-        YY_BREAK
-case 196:
-YY_RULE_SETUP
-#line 395 "vtkParse.l"
-{ return('*'); }
-        YY_BREAK
-case 197:
-YY_RULE_SETUP
-#line 397 "vtkParse.l"
-;
-        YY_BREAK
-case 198:
-YY_RULE_SETUP
-#line 398 "vtkParse.l"
-;
-        YY_BREAK
-case 199:
-YY_RULE_SETUP
-#line 399 "vtkParse.l"
-;
-        YY_BREAK
-case 200:
-YY_RULE_SETUP
-#line 401 "vtkParse.l"
-{
-                     yylval.str = vtkstrndup(yytext, yyleng);
-                     return(OSTREAM); }
-        YY_BREAK
-case 201:
-YY_RULE_SETUP
-#line 405 "vtkParse.l"
 {
-                     yylval.str = vtkstrndup(yytext, yyleng);
-                     return(ISTREAM); }
+      const char *args = get_macro_arguments();
+      if (args && args[0] != '\0' && args[1] != '\0')
+        {
+        size_t l = strlen(args);
+        push_macro(NULL);
+        push_buffer();
+        macroName = "VTK_LEGACY";
+        macroUsed = 0;
+        macroEnded = 0;
+        yy_switch_to_buffer(yy_scan_bytes(&args[1],l-2));
+        }
+      free((char *)args);
+    }
         YY_BREAK
-case 202:
+case 133:
 YY_RULE_SETUP
-#line 409 "vtkParse.l"
+#line 353 "vtkParse.l"
 {
-                     yylval.str = vtkstrndup(yytext, yyleng);
-                     return(StdString); }
-        YY_BREAK
-case 203:
-YY_RULE_SETUP
-#line 413 "vtkParse.l"
-{ yylval.str = vtkstrndup(yytext, yyleng);
-                     return(UnicodeString); }
-        YY_BREAK
-case 204:
-YY_RULE_SETUP
-#line 416 "vtkParse.l"
-{ yylval.str = vtkstrdup("vtkDataArray"); return(VTK_ID); }
-        YY_BREAK
-case 205:
-YY_RULE_SETUP
-#line 418 "vtkParse.l"
-{ yylval.str = vtkstrndup(yytext, yyleng);
-                      return(ID); }
-        YY_BREAK
-case 206:
-YY_RULE_SETUP
-#line 421 "vtkParse.l"
-{ yylval.str = vtkstrndup(yytext, yyleng);
-                      return(QT_ID); }
+      const char *name = vtkstrndup(yytext, yyleng);
+      MacroInfo *macro = vtkParsePreprocess_GetMacro(preprocessor, name);
+      int expanded = 0;
+      if (macro)
+        {
+        const char *args = NULL;
+        const char *emacro = NULL;
+
+        /* make sure that vtkNotUsed is never expanded */
+        MacroInfo *ex;
+        ex = vtkParsePreprocess_GetMacro(preprocessor, "vtkNotUsed");
+        if (ex)
+          {
+          ex->IsExcluded = 1;
+          }
+
+        if (macro->IsFunction)
+          {
+          args = get_macro_arguments();
+          if (args)
+            {
+            emacro = vtkParsePreprocess_ExpandMacro(preprocessor, macro, args);
+            if (!emacro)
+              {
+              print_preprocessor_error(VTK_PARSE_MACRO_NUMARGS, NULL, 0);
+              }
+            free((char *)args);
+            }
+          }
+        else if (macro->Definition && macro->Definition[0])
+          {
+          /* first see if macro evaluates to a constant value */
+          preproc_int_t val;
+          int is_unsigned;
+          int r;
+          macro->IsExcluded = 1;
+          r = vtkParsePreprocess_EvaluateExpression(
+             preprocessor, macro->Definition, &val, &is_unsigned);
+          macro->IsExcluded = 0;
+          /* if it isn't a constant expression, then expand it */
+          if (r >= VTK_PARSE_MACRO_UNDEFINED)
+            {
+            emacro = vtkParsePreprocess_ExpandMacro(preprocessor, macro, NULL);
+            if (!emacro)
+              {
+              print_preprocessor_error(r, NULL, 0);
+              }
+            }
+          }
+        else
+          {
+          /* macros with no definition expand to nothing */
+          expanded = 1;
+          }
+        if (emacro)
+          {
+          /* invoke the parser on any expanded macros */
+          push_macro(macro);
+          push_buffer();
+          yy_switch_to_buffer(yy_scan_string(emacro));
+          vtkParsePreprocess_FreeMacroExpansion(preprocessor, macro, emacro);
+          expanded = 1;
+          }
+        }
+      if (!expanded)
+        {
+        /* if no macro expansion occurred, return the ID */
+        yylval.str = name;
+        if (yyleng > 3 && name[0] == 'v' && name[1] == 't' && name[2] == 'k')
+          {
+          return(VTK_ID);
+          }
+        else if (name[0] == 'Q')
+          {
+          return(QT_ID);
+          }
+        else
+          {
+          return(ID);
+          }
+        }
+    }
         YY_BREAK
-case 207:
+case 134:
 YY_RULE_SETUP
-#line 424 "vtkParse.l"
-{ get_macro_arguments(); };
+#line 437 "vtkParse.l"
+{
+      yylval.str = vtkstrndup(yytext, yyleng);
+      return(FLOAT_LITERAL);
+    }
         YY_BREAK
-case 208:
+case 135:
 YY_RULE_SETUP
-#line 426 "vtkParse.l"
+#line 442 "vtkParse.l"
 {
-     const char *name = vtkstrndup(yytext, yyleng);
-     MacroInfo *macro = vtkParsePreprocess_GetMacro(&preprocessor, name);
-     int expanded = 0;
-
-     if (macro)
-       {
-       if (macro->IsFunction)
-         {
-         const char *args = get_macro_arguments();
-         const char *emacro = NULL;
-         if (args)
-           {
-           emacro = vtkParsePreprocess_ExpandMacro(macro, args);
-           free((char *)args);
-           if (emacro)
-             {
-             push_buffer();
-             yy_switch_to_buffer(yy_scan_string(emacro));
-             vtkParsePreprocess_FreeExpandedMacro(emacro);
-             expanded = 1;
-             }
-           else
-             {
-             print_preprocessor_error(
-               VTK_PARSE_MACRO_NUMARGS, macro->Name, strlen(macro->Name));
-             }
-           }
-         }
-       /* non-function macro expansion breaks "real superclass" trick
-       else if (macro->Definition)
-         {
-         push_buffer();
-         yy_switch_to_buffer(yy_scan_string(macro->Definition));
-         expanded = 1;
-         }
-       */
-       }
-     if (!expanded)
-       {
-       yylval.str = name;
-       if (yyleng > 3 && name[0] == 'v' && name[1] == 't' && name[2] == 'k')
-         {
-         return(VTK_ID);
-         }
-       else if (name[0] == 'Q')
-         {
-         return(QT_ID);
-         }
-       else
-         {
-         return(ID);
-         }
-       }
-     };
+      yylval.str = vtkstrndup(yytext, yyleng);
+      return(FLOAT_LITERAL);
+    }
         YY_BREAK
-case 209:
+case 136:
 YY_RULE_SETUP
-#line 482 "vtkParse.l"
+#line 447 "vtkParse.l"
 {
-                     yylval.str = vtkstrndup(yytext, yyleng);
-                     return(FLOAT_LITERAL); }
+      yylval.str = vtkstrndup(yytext, yyleng);
+      return(FLOAT_LITERAL);
+    }
         YY_BREAK
-case 210:
+case 137:
 YY_RULE_SETUP
-#line 486 "vtkParse.l"
+#line 452 "vtkParse.l"
 {
-                     yylval.str = vtkstrndup(yytext, yyleng);
-                     return(HEX_LITERAL); }
+      yylval.str = vtkstrndup(yytext, yyleng);
+      return(HEX_LITERAL);
+    }
         YY_BREAK
-case 211:
+case 138:
 YY_RULE_SETUP
-#line 490 "vtkParse.l"
+#line 457 "vtkParse.l"
 {
-                     yylval.str = vtkstrndup(yytext, yyleng);
-                     return(OCT_LITERAL); }
+      yylval.str = vtkstrndup(yytext, yyleng);
+      return(OCT_LITERAL);
+    }
         YY_BREAK
-case 212:
+case 139:
 YY_RULE_SETUP
-#line 494 "vtkParse.l"
+#line 462 "vtkParse.l"
 {
-                     yylval.str = vtkstrndup(yytext, yyleng);
-                     return(INT_LITERAL); }
+      yylval.str = vtkstrndup(yytext, yyleng);
+      return(INT_LITERAL);
+    }
         YY_BREAK
-case 213:
+case 140:
 YY_RULE_SETUP
-#line 498 "vtkParse.l"
-{ yylval.str = vtkstrndup(yytext, yyleng);
-                     return(ZERO); };
+#line 467 "vtkParse.l"
+{
+      yylval.str = vtkstrndup(yytext, yyleng);
+      return(ZERO);
+    }
         YY_BREAK
-case 214:
-/* rule 214 can match eol */
+case 141:
+/* rule 141 can match eol */
 YY_RULE_SETUP
-#line 501 "vtkParse.l"
-;
+#line 472 "vtkParse.l"
+/* escaped newlines */
         YY_BREAK
-case 215:
-/* rule 215 can match eol */
+case 142:
 YY_RULE_SETUP
-#line 502 "vtkParse.l"
-;
+#line 473 "vtkParse.l"
+/* whitespace */
         YY_BREAK
-case 216:
-/* rule 216 can match eol */
+case 143:
+/* rule 143 can match eol */
 YY_RULE_SETUP
-#line 503 "vtkParse.l"
-;
+#line 474 "vtkParse.l"
+/* whitespace */
         YY_BREAK
-case 217:
+case 144:
 YY_RULE_SETUP
-#line 505 "vtkParse.l"
+#line 476 "vtkParse.l"
 return(OP_LSHIFT_EQ);
         YY_BREAK
-case 218:
+case 145:
 YY_RULE_SETUP
-#line 506 "vtkParse.l"
+#line 477 "vtkParse.l"
 return(OP_RSHIFT_EQ);
         YY_BREAK
-case 219:
+case 146:
 YY_RULE_SETUP
-#line 507 "vtkParse.l"
+#line 478 "vtkParse.l"
 return(OP_LSHIFT);
         YY_BREAK
-case 220:
+case 147:
+YY_RULE_SETUP
+#line 479 "vtkParse.l"
+return(OP_DOT_POINTER);
+        YY_BREAK
+case 148:
 YY_RULE_SETUP
-#line 508 "vtkParse.l"
+#line 480 "vtkParse.l"
 return(OP_ARROW_POINTER);
         YY_BREAK
-case 221:
+case 149:
 YY_RULE_SETUP
-#line 509 "vtkParse.l"
+#line 481 "vtkParse.l"
 return(OP_ARROW);
         YY_BREAK
-case 222:
+case 150:
 YY_RULE_SETUP
-#line 510 "vtkParse.l"
+#line 482 "vtkParse.l"
 return(OP_RSHIFT);
         YY_BREAK
-case 223:
+case 151:
 YY_RULE_SETUP
-#line 511 "vtkParse.l"
+#line 483 "vtkParse.l"
 return(OP_INCR);
         YY_BREAK
-case 224:
+case 152:
 YY_RULE_SETUP
-#line 512 "vtkParse.l"
+#line 484 "vtkParse.l"
 return(OP_DECR);
         YY_BREAK
-case 225:
+case 153:
 YY_RULE_SETUP
-#line 513 "vtkParse.l"
+#line 485 "vtkParse.l"
 return(OP_PLUS_EQ);
         YY_BREAK
-case 226:
+case 154:
 YY_RULE_SETUP
-#line 514 "vtkParse.l"
+#line 486 "vtkParse.l"
 return(OP_MINUS_EQ);
         YY_BREAK
-case 227:
+case 155:
 YY_RULE_SETUP
-#line 515 "vtkParse.l"
+#line 487 "vtkParse.l"
 return(OP_TIMES_EQ);
         YY_BREAK
-case 228:
+case 156:
 YY_RULE_SETUP
-#line 516 "vtkParse.l"
+#line 488 "vtkParse.l"
 return(OP_DIVIDE_EQ);
         YY_BREAK
-case 229:
+case 157:
 YY_RULE_SETUP
-#line 517 "vtkParse.l"
+#line 489 "vtkParse.l"
 return(OP_REMAINDER_EQ);
         YY_BREAK
-case 230:
+case 158:
 YY_RULE_SETUP
-#line 518 "vtkParse.l"
+#line 490 "vtkParse.l"
 return(OP_AND_EQ);
         YY_BREAK
-case 231:
+case 159:
 YY_RULE_SETUP
-#line 519 "vtkParse.l"
+#line 491 "vtkParse.l"
 return(OP_OR_EQ);
         YY_BREAK
-case 232:
+case 160:
 YY_RULE_SETUP
-#line 520 "vtkParse.l"
+#line 492 "vtkParse.l"
 return(OP_XOR_EQ);
         YY_BREAK
-case 233:
-YY_RULE_SETUP
-#line 521 "vtkParse.l"
-return(OP_LOGIC_AND_EQ);
-        YY_BREAK
-case 234:
-YY_RULE_SETUP
-#line 522 "vtkParse.l"
-return(OP_LOGIC_OR_EQ);
-        YY_BREAK
-case 235:
+case 161:
 YY_RULE_SETUP
-#line 523 "vtkParse.l"
+#line 493 "vtkParse.l"
 return(OP_LOGIC_AND);
         YY_BREAK
-case 236:
+case 162:
 YY_RULE_SETUP
-#line 524 "vtkParse.l"
+#line 494 "vtkParse.l"
 return(OP_LOGIC_OR);
         YY_BREAK
-case 237:
+case 163:
 YY_RULE_SETUP
-#line 525 "vtkParse.l"
+#line 495 "vtkParse.l"
 return(OP_LOGIC_EQ);
         YY_BREAK
-case 238:
+case 164:
 YY_RULE_SETUP
-#line 526 "vtkParse.l"
+#line 496 "vtkParse.l"
 return(OP_LOGIC_NEQ);
         YY_BREAK
-case 239:
+case 165:
 YY_RULE_SETUP
-#line 527 "vtkParse.l"
+#line 497 "vtkParse.l"
 return(OP_LOGIC_LEQ);
         YY_BREAK
-case 240:
+case 166:
 YY_RULE_SETUP
-#line 528 "vtkParse.l"
+#line 498 "vtkParse.l"
 return(OP_LOGIC_GEQ);
         YY_BREAK
-case 241:
+case 167:
 YY_RULE_SETUP
-#line 529 "vtkParse.l"
+#line 499 "vtkParse.l"
 return(ELLIPSIS);
         YY_BREAK
-case 242:
+case 168:
 YY_RULE_SETUP
-#line 530 "vtkParse.l"
+#line 500 "vtkParse.l"
 return(DOUBLE_COLON);
         YY_BREAK
-case 243:
+case 169:
 YY_RULE_SETUP
-#line 532 "vtkParse.l"
-{ return(yytext[0]); }
+#line 502 "vtkParse.l"
+return('[');
         YY_BREAK
-case 244:
+case 170:
 YY_RULE_SETUP
-#line 533 "vtkParse.l"
-{ return(yytext[0]); }
+#line 503 "vtkParse.l"
+return(']');
         YY_BREAK
-case 245:
+case 171:
 YY_RULE_SETUP
-#line 535 "vtkParse.l"
-{ return(yytext[0]); }
+#line 505 "vtkParse.l"
+return(yytext[0]);
         YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 537 "vtkParse.l"
+#line 507 "vtkParse.l"
 { if (!pop_buffer()) { yyterminate(); } }
         YY_BREAK
-case 246:
+case 172:
 YY_RULE_SETUP
-#line 539 "vtkParse.l"
+#line 509 "vtkParse.l"
 { return(OTHER); }
         YY_BREAK
-case 247:
+case 173:
 YY_RULE_SETUP
-#line 541 "vtkParse.l"
+#line 511 "vtkParse.l"
 YY_FATAL_ERROR( "flex scanner jammed" );
         YY_BREAK
-#line 4021 "lex.yy.c"
+#line 2910 "lex.yy.c"
 
         case YY_END_OF_BUFFER:
                 {
@@ -4308,7 +3197,7 @@ static int yy_get_next_buffer (void)
                 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                         {
                         yy_current_state = (int) yy_def[yy_current_state];
-                        if ( yy_current_state >= 1956 )
+                        if ( yy_current_state >= 1116 )
                                 yy_c = yy_meta[(unsigned int) yy_c];
                         }
                 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -4336,11 +3225,11 @@ static int yy_get_next_buffer (void)
         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                 {
                 yy_current_state = (int) yy_def[yy_current_state];
-                if ( yy_current_state >= 1956 )
+                if ( yy_current_state >= 1116 )
                         yy_c = yy_meta[(unsigned int) yy_c];
                 }
         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-        yy_is_jam = (yy_current_state == 1955);
+        yy_is_jam = (yy_current_state == 1115);
 
         return yy_is_jam ? 0 : yy_current_state;
 }
@@ -5026,7 +3915,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 541 "vtkParse.l"
+#line 511 "vtkParse.l"
 
 
 
@@ -5041,6 +3930,15 @@ const char *get_macro_arguments()
   int ws = 0;
   int sl = 0;
   int c1 = input();
+
+  if (c1 == '\0')
+    {
+    if (pop_buffer() == 0)
+      {
+      return NULL;
+      }
+    }
+
   while (c1 == ' ' || c1 == '\t' || c1 == '\r' || c1 == '\n')
     {
     c1 = input();
@@ -5188,7 +4086,8 @@ int skip_comment()
      {
      if (c2 == 0)
        {
-       fprintf(yyout,"Cannot find closing comment.\n");
+       print_preprocessor_error(VTK_PARSE_SYNTAX_ERROR,
+         "Cannot find end of comment.", 27);
        return 0;
        }
      if (c1 == '*' && c2 == '/') break;
@@ -5197,6 +4096,72 @@ int skip_comment()
    return 1;
 }
 
+/*
+ * If token contains a comment, make sure whole comment is skipped.
+ */
+int skip_trailing_comment(const char *text, size_t l)
+{
+  const char *cp = text;
+  const char *ep = text + l;
+  int incomment = 0;
+
+  while (cp < ep)
+    {
+    while (cp < ep && *cp != '/' && *cp != '\"') { cp++; };
+    if (cp >= ep)
+      {
+      break;
+      }
+    else if (cp[0] == '/' && cp[1] == '*')
+      {
+      incomment = 1;
+      cp += 2;
+      while (cp < ep && *cp != '*') { cp++; };
+      if (cp[0] == '*' && cp[1] == '/')
+        {
+        incomment = 0;
+        cp += 2;
+        }
+      else
+        {
+        cp++;
+        }
+      }
+    else if (cp[0] == '\"')
+      {
+      cp++;
+      while (cp < ep)
+        {
+        while (cp < ep && *cp != '\\' && *cp != '\"') { cp++; };
+        if (cp >= ep)
+          {
+          break;
+          }
+        else if (*cp == '\"')
+          {
+          cp++;
+          break;
+          }
+        else /* if (*cp == '\\') */
+          {
+          cp += 2;
+          }
+        }
+      }
+    else
+      {
+      cp++;
+      }
+    }
+
+  if (incomment)
+    {
+    return skip_comment();
+    }
+
+  return 1;
+}
+
 /*
  * Skip ahead until the next preprocessor directive.
  * This will eat the '#' that starts the directive.
@@ -5204,26 +4169,29 @@ int skip_comment()
  */
 int skip_to_next_directive()
 {
+  /* state == 0 at the start of a line */
   int state = 0;
   int c;
 
-  do
+  c = input();
+
+  while (c != 0)
     {
-    c = input();
-    if (c == 0)
+    /* whitespace */
+    if (c == ' ' || c == '\t')
       {
-      break;
+      c = input();
       }
-
-    /* newline changes state */
-    if (c == '\n')
+    /* newline renews the start-of-line state */
+    else if (c == '\n')
       {
       state = 0;
       c = input();
       }
     /* skip comments */
-    if (c == '/')
+    else if (c == '/')
       {
+      state = 1;
       if ( (c = input()) == '*')
         {
         if (skip_comment() == 0)
@@ -5233,30 +4201,33 @@ int skip_to_next_directive()
         c = input();
         }
       }
-    /* skip escaped newlines */
-    if (c == '\\')
+    /* skip escaped characters */
+    else if (c == '\\')
       {
+      state = 1;
       if ( (c = input()) == '\r')
         {
-        c = input();
+        if ( (c = input()) == '\n')
+          {
+          c = input();
+          }
         }
-      if (c == '\n')
+      else if (c != 0)
         {
         c = input();
         }
       }
-    /* skip allowed whitespace */
-    while (c == ' ' || c == '\t')
+    /* any other chars except '#' at start of line */
+    else if (c != '#' || state != 0)
       {
+      state = 1;
       c = input();
       }
-    /* look for the directive */
-    if (state == 0 && c == '#')
+    else
       {
       break;
       }
     }
-  while (c != 0);
 
   return c;
 }
@@ -5319,7 +4290,7 @@ int skip_conditional_block()
       }
     linebuf[i++] = c;
 
-    result = vtkParsePreprocess_HandleDirective(&preprocessor, linebuf);
+    result = vtkParsePreprocess_HandleDirective(preprocessor, linebuf);
     if (result != VTK_PARSE_SKIP && result != VTK_PARSE_OK)
       {
       print_preprocessor_error(result, linebuf, i);
@@ -5357,7 +4328,7 @@ int skip_ahead_multi(const char *strings[])
 
     if ((c = (char)input()) == '\0')
       {
-      fprintf(yyout, "Cannot find matching %s.\n", strings[0]);
+      print_preprocessor_error(VTK_PARSE_SYNTAX_ERROR, NULL, 0);
       return 0;
       }
 
@@ -5413,7 +4384,7 @@ void push_buffer()
     {
     buffer_stack = (YY_BUFFER_STATE *)malloc(4*sizeof(YY_BUFFER_STATE));
     }
-  // grow the stack whenever size reaches a power of two
+  /* grow the stack whenever size reaches a power of two */
   else if (n >= 4 && (n & (n-1)) == 0)
     {
     buffer_stack = (YY_BUFFER_STATE *)realloc(
@@ -5427,6 +4398,14 @@ void push_buffer()
  */
 int pop_buffer()
 {
+  if (in_macro())
+    {
+    pop_macro();
+    }
+  else
+    {
+    pop_include();
+    }
   if (buffer_stack_size == 0)
     {
     return 0;
@@ -5437,12 +4416,150 @@ int pop_buffer()
 }
 
 /*
- * print an error with filename and line number.
+ * include stack, to tell what include is being evaluated
+ */
+static size_t include_stack_size = 0;
+static FileInfo **include_stack = NULL;
+static int *lineno_stack = NULL;
+
+/*
+ * push the current include onto the include stack.
+ */
+void push_include(const char *filename)
+{
+  FileInfo *file_info = NULL;
+  int same_file = 0;
+  size_t n = include_stack_size;
+
+  if (include_stack == NULL)
+    {
+    include_stack = (FileInfo **)malloc(4*sizeof(FileInfo *));
+    lineno_stack = (int *)malloc(4*sizeof(int));
+    }
+
+  /* grow the stack whenever size reaches a power of two */
+  else if (n >= 4 && (n & (n-1)) == 0)
+    {
+    include_stack = (FileInfo **)realloc(
+      include_stack, 2*n*sizeof(FileInfo *));
+    lineno_stack = (int *)realloc(
+      lineno_stack, 2*n*sizeof(int));
+    }
+
+  lineno_stack[include_stack_size] = yyget_lineno();
+  yyset_lineno(0);
+  include_stack[include_stack_size++] = data;
+
+  /* if the file is including itself */
+  if (filename == data->FileName ||
+      (filename != 0 && data->FileName != 0 &&
+       strcmp(filename, data->FileName) == 0))
+    {
+    same_file = 1;
+    }
+
+  /* make a new fileinfo, but only if we are in the base namespace
+   * and only if the only items added so far are constants */
+  if (!same_file && currentNamespace == data->Contents &&
+      data->Contents->NumberOfItems == data->Contents->NumberOfConstants)
+    {
+    file_info = (FileInfo *)malloc(sizeof(FileInfo));
+    vtkParse_InitFile(file_info);
+    file_info->FileName = vtkstrdup(filename);
+    file_info->Contents = (NamespaceInfo *)malloc(sizeof(NamespaceInfo));
+    vtkParse_InitNamespace(file_info->Contents);
+    vtkParse_AddIncludeToFile(data, file_info);
+    file_info->Strings = data->Strings;
+    data = file_info;
+    currentNamespace = file_info->Contents;
+    }
+}
+
+/*
+ * pop the include stack
+ */
+void pop_include()
+{
+  if (include_stack_size > 0)
+    {
+    --include_stack_size;
+    fclose(yyin);
+    yyset_lineno(lineno_stack[include_stack_size]);
+    if (data != include_stack[include_stack_size])
+      {
+      data = include_stack[include_stack_size];
+      currentNamespace = data->Contents;
+      }
+    }
+}
+
+
+/*
+ * macro stack, to tell what macro is being evaluated
+ */
+static size_t macro_stack_size = 0;
+static MacroInfo **macro_stack = NULL;
+
+/*
+ * push the current macro onto the macro stack.
+ */
+void push_macro(MacroInfo *macro)
+{
+  size_t n = macro_stack_size;
+  if (macro_stack == NULL)
+    {
+    macro_stack = (MacroInfo **)malloc(4*sizeof(MacroInfo *));
+    }
+  /* grow the stack whenever size reaches a power of two */
+  else if (n >= 4 && (n & (n-1)) == 0)
+    {
+    macro_stack = (MacroInfo **)realloc(
+      macro_stack, 2*n*sizeof(MacroInfo *));
+    }
+  macro_stack[macro_stack_size++] = macro;
+  if (macro)
+    {
+    macro->IsExcluded = 1;
+    if (macro_stack_size == 1)
+      {
+      macroName = macro->Name;
+      macroUsed = 0;
+      macroEnded = 0;
+      }
+    }
+}
+
+/*
+ * pop the macro stack
+ */
+void pop_macro()
+{
+  MacroInfo *macro;
+
+  if (macro_stack_size > 0)
+    {
+    macro = macro_stack[--macro_stack_size];
+    if (macro)
+      {
+      macro->IsExcluded = 0;
+      }
+    }
+  macroEnded = 1;
+}
+
+/*
+ * are we currently processing a macro?
+ */
+int in_macro()
+{
+  return (macro_stack_size > 0);
+}
+
+/*
+ * print a preprocessor error code with filename and line number.
  */
 void print_preprocessor_error(int result, const char *cp, size_t n)
 {
-  size_t j = 0;
-  const char *fn = "";
   const char *text = "";
 
   switch (result)
@@ -5475,7 +4592,7 @@ void print_preprocessor_error(int result, const char *cp, size_t n)
       text = "input/output error";
       break;
     case VTK_PARSE_MACRO_NUMARGS:
-      text = "wrong number of args for macro";
+      text = "wrong number of macro args";
       break;
     case VTK_PARSE_SYNTAX_ERROR:
       text = "syntax error";
@@ -5488,12 +4605,118 @@ void print_preprocessor_error(int result, const char *cp, size_t n)
     return;
     }
 
-  if (data.FileName)
+  print_parser_error(text, cp, n);
+}
+
+/*
+ * print an error with filename and line number.
+ */
+void print_parser_error(const char *text, const char *cp, size_t n)
+{
+  size_t j = 0;
+  const char *fn = "(none)";
+
+  if (data->FileName)
+    {
+    fn = data->FileName;
+    }
+  fprintf(yyout, "In %s:", fn);
+  for (j = 0; j < include_stack_size; j++)
+    {
+    fprintf(yyout, "%i:\nIn %s:",
+            lineno_stack[j], include_stack[j]->FileName);
+    }
+  fprintf(yyout, "%i:\n", yylineno);
+
+  if (cp)
+    {
+    fprintf(yyout, "%s: %*.*s\n", text, (int)n, (int)n, cp);
+    }
+  else if (text)
+    {
+    fprintf(yyout, "%s.\n", text);
+    }
+}
+
+/*
+ * Execute a preprocessor directive.
+ */
+void preprocessor_directive(const char *text, size_t l)
+{
+  int result = 0;
+  size_t n = 0;
+  const char *cp = text;
+  const char *ep = text + l;
+  const char *directive = NULL;
+
+  /* find the directive, store its length in "n" */
+  while (*cp == ' ' || *cp == '\t') { cp++; }
+  if (*cp == '#') { cp++; }
+  while ((*cp == ' ' || *cp == '\t') && cp < ep) { cp++; }
+  directive = cp;
+  while (*cp >= 'a' && *cp <= 'z' && cp < ep) { cp++; }
+  n = cp - directive;
+  while ((*cp == ' ' || *cp == '\t') && cp < ep) { cp++; }
+
+  if (n == 7 && strncmp(directive, "include", n) == 0)
+    {
+    /* include files */
+    int already_loaded = 0;
+    if (*cp == '<' || *cp == '\"')
+      {
+      /* if asked to recurse into header files */
+      if (Recursive && ep - cp > 3)
+        {
+        const char *dp;
+        dp = vtkParsePreprocess_FindIncludeFile(preprocessor,
+          &cp[1], (*cp != '\"'), &already_loaded);
+        if (dp)
+          {
+          yyin = fopen(dp, "r");
+          if (yyin)
+            {
+            push_include(dp);
+            push_buffer();
+            yy_switch_to_buffer(yy_create_buffer(yyin,YY_BUF_SIZE));
+            return;
+            }
+          }
+        }
+      }
+    }
+
+  /* let the preprocessor handle the directive */
+  result = vtkParsePreprocess_HandleDirective(preprocessor, text);
+
+  if (result == VTK_PARSE_SKIP)
+    {
+    skip_conditional_block();
+    }
+  else if (result != VTK_PARSE_OK)
+    {
+    print_preprocessor_error(result, text, l);
+    }
+  else if (n == 6 && strncmp(directive, "define", n) == 0 &&
+           ep - cp > 4 && strncmp(cp, "VTK", 3) == 0)
     {
-    j = strlen(data.FileName);
-    while (j > 0 && data.FileName[j-1] != '/') { j--; }
-    fn = &data.FileName[j];
+    /* macros that start with "VTK" */
+    MacroInfo *macro;
+
+    macro = vtkParsePreprocess_GetMacro(preprocessor, cp);
+    if (macro && macro->Definition && !macro->IsFunction)
+      {
+      /* if macro evaluates to a constant, add it as a constant */
+      macro->IsExcluded = 1;
+      if (guess_constant_type(macro->Definition) == 0)
+        {
+        result = VTK_PARSE_MACRO_UNDEFINED;
+        }
+      macro->IsExcluded = 0;
+      if (result < VTK_PARSE_MACRO_UNDEFINED)
+        {
+        add_constant(
+          vtkstrdup(macro->Name), vtkstrdup(macro->Definition), 0, NULL, 1);
+        }
+      }
     }
-  fprintf(yyout, "In %s:%i: %s: ", fn, yylineno, text);
-  fprintf(yyout, "%*.*s\n", (int)n, (int)n, cp);
 }
index bb80752116a0ff866b78c54afa5d9311b9cc72ca..59894246ce4e5fc96f57144106b863097c41f92a 100644 (file)
@@ -87,6 +87,68 @@ Modify vtkParse.tab.c:
 
 */
 
+/*
+The purpose of this parser is to read C++ header files in order to
+generate data structures that describe the C++ interface of a library,
+one header file at a time.  As such, it is not a complete C++ parser.
+It only parses what is relevant to the interface and skips the rest.
+
+While the parser reads method definitions, type definitions, and
+template definitions it generates a "signature" which is a string
+that matches (apart from whitespace) the text that was parsed.
+
+While parsing types, the parser creates an unsigned int that describes
+the type as well as creating other data structures for arrays, function
+pointers, etc.  The parser also creates a typeId string, which is either
+a simple id that gives the class name or type name, or is "function" for
+function pointer types, or "method" for method pointer types.
+*/
+
+/*
+Conformance Notes:
+
+This parser was designed empirically and incrementally.  It has been
+refactored to make it more similar to the ANSI C++ 1996 BNF grammar,
+but there are still many very significant differences.
+
+The most significant difference between this parser and a "standard"
+parser is that it only parses declarations in detail.  All other
+statements and expressions are parsed as arbitrary sequences of symbols,
+without any syntactic analysis.
+
+The "unqualified_id" does not directly include "operator_function_id" or
+"conversion_function_id" (e.g. ids like "operator=" or "operator int*").
+Instead, these two id types are used to allow operator functions to be
+handled by their own rules, rather than by the generic function rules.
+These ids can only be used in function declarations and using declarations.
+
+Types are handled quite differently from the ANSI BNF.  These differences
+represent a prolonged (and ultimately successful) attempt to empirically
+create a yacc parser without any shift/reduce conflicts.  The rules for
+types are organized according to the way that types are usually defined
+in working code, rather than strictly according to C++ grammar.
+
+The declaration specifiers "friend" and "typedef" can only appear at the
+beginning of a declaration sequence.  There are also restrictions on
+where class and enum specifiers can be used: you can declare a new struct
+within a variable declaration, but not within a parameter declaration.
+
+The lexer returns each of "(scope::*", "(*", "(a::b::*", etc. as single
+tokens.  The ANSI BNF, in contrast, would consider these to be a "("
+followed by a "ptr_operator".  The lexer concatenates these tokens in
+order to eliminate shift/reduce conflicts in the parser.  However, this
+means that this parser will only recognize "scope::*" as valid if it is
+preceded by "(", e.g. as part of a member function pointer specification.
+
+An odd bit of C++ ambiguity is that y(x); can be interpreted variously
+as declaration of variable "x" of type "y", as a function call if "y"
+is the name of a function, or as a constructor if "y" is the name of
+a class.  This parser always interprets this pattern as a constructor
+declaration, because function calls are ignored by the parser, and
+variable declarations of the form y(x); are exceedingly rare compared
+to the more usual form y x; without parentheses.
+*/
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -117,12 +179,12 @@ Modify vtkParse.tab.c:
 # pragma warn -8066 /* unreachable code */
 #endif
 
-/* Map from the type anonymous_enumeration in vtkType.h to the VTK wrapping type
-   system number for the type. */
+/* Map from the type anonymous_enumeration in vtkType.h to the
+   VTK wrapping type system number for the type. */
 
 #include "vtkParse.h"
-#include "vtkParseInternal.h"
 #include "vtkParsePreprocess.h"
+#include "vtkParseData.h"
 #include "vtkType.h"
 
 static unsigned int vtkParseTypeMap[] =
@@ -153,7 +215,7 @@ static unsigned int vtkParseTypeMap[] =
   };
 
 /* Define some constants to simplify references to the table lookup in
-   the type_primitive production rule code.  */
+   the primitive_type production rule code.  */
 #define VTK_PARSE_INT8 vtkParseTypeMap[VTK_TYPE_INT8]
 #define VTK_PARSE_UINT8 vtkParseTypeMap[VTK_TYPE_UINT8]
 #define VTK_PARSE_INT16 vtkParseTypeMap[VTK_TYPE_INT16]
@@ -171,55 +233,74 @@ static unsigned int vtkParseTypeMap[] =
 /* the tokenizer */
 int yylex(void);
 
+/* global variables */
+FileInfo      *data = NULL;
+int            parseDebug;
+
 /* the "preprocessor" */
-PreprocessInfo preprocessor = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+PreprocessInfo *preprocessor = NULL;
 
-/* global variables */
-FileInfo data;
+/* include dirs specified on the command line */
+int            NumberOfIncludeDirectories= 0;
+const char   **IncludeDirectories;
 
-int            NumberOfConcreteClasses = 0;
-const char   **ConcreteClasses;
+/* macros specified on the command line */
+int            NumberOfDefinitions = 0;
+const char   **Definitions;
+
+/* options that can be set by the programs that use the parser */
+int            IgnoreBTX = 0;
+int            Recursive = 0;
 
+/* various state variables */
 NamespaceInfo *currentNamespace = NULL;
 ClassInfo     *currentClass = NULL;
 FunctionInfo  *currentFunction = NULL;
-TemplateArgs  *currentTemplate = NULL;
-
-const char    *currentEnumName = 0;
-const char    *currentEnumValue = 0;
-
-int            parseDebug;
+TemplateInfo  *currentTemplate = NULL;
+const char    *currentEnumName = NULL;
+const char    *currentEnumValue = NULL;
 parse_access_t access_level = VTK_ACCESS_PUBLIC;
-int            IgnoreBTX = 0;
+
+/* functions from vtkParse.l */
+void print_parser_error(const char *text, const char *cp, size_t n);
 
 /* helper functions */
+const char *type_class(unsigned int type, const char *classname);
 void start_class(const char *classname, int is_struct_or_union);
 void reject_class(const char *classname, int is_struct_or_union);
 void end_class();
+void add_base_class(ClassInfo *cls, const char *name, int access_lev,
+                    int is_virtual);
+void output_friend_function(void);
 void output_function(void);
 void reject_function(void);
 void set_return(FunctionInfo *func, unsigned int type,
                 const char *typeclass, int count);
-void add_argument(FunctionInfo *func, unsigned int type,
-                  const char *classname, int count);
+void add_parameter(FunctionInfo *func, unsigned int type,
+                   const char *classname, int count);
+void add_template_parameter(unsigned int datatype,
+                            unsigned int extra, const char *funcSig);
 void add_using(const char *name, int is_namespace);
 void start_enum(const char *enumname);
 void add_enum(const char *name, const char *value);
 void end_enum();
+unsigned int guess_constant_type(const char *value);
 void add_constant(const char *name, const char *value,
                   unsigned int type, const char *typeclass, int global);
 const char *add_const_scope(const char *name);
 void prepend_scope(char *cp, const char *arg);
+unsigned int guess_id_type(const char *cp);
 unsigned int add_indirection(unsigned int tval, unsigned int ptr);
 unsigned int add_indirection_to_array(unsigned int ptr);
 void handle_complex_type(ValueInfo *val, unsigned int datatype,
                          unsigned int extra, const char *funcSig);
-void handle_function_type(ValueInfo *arg, const char *name,
+void handle_function_type(ValueInfo *param, const char *name,
                           const char *funcSig);
+void add_legacy_parameter(FunctionInfo *func, ValueInfo *param);
 
-void outputSetVectorMacro(const char *var, unsigned int argType,
+void outputSetVectorMacro(const char *var, unsigned int paramType,
                           const char *typeText, int n);
-void outputGetVectorMacro(const char *var, unsigned int argType,
+void outputGetVectorMacro(const char *var, unsigned int paramType,
                           const char *typeText, int n);
 
 /*----------------------------------------------------------------
@@ -227,72 +308,13 @@ void outputGetVectorMacro(const char *var, unsigned int argType,
  *
  * Strings are centrally allocated and are const, and they are not
  * freed until the program exits.  If they need to be freed before
- * then, vtkstrfree() can be called.
+ * then, vtkParse_FreeStringCache() can be called.
  */
 
-size_t stringChunkPos = 0;
-int numberOfChunks = 0;
-char **stringArray = NULL;
-
-/* allocate a string of n+1 bytes */
-static char *vtkstralloc(size_t n)
-{
-  size_t chunk_size = 8176;
-  size_t nextChunkPos;
-  char *cp;
-
-  // align next start position on an 8-byte boundary
-  nextChunkPos = (((stringChunkPos + n + 8) | 7 ) - 7);
-
-  if (numberOfChunks == 0 || nextChunkPos > chunk_size)
-    {
-    if (n + 1 > chunk_size)
-      {
-      chunk_size = n + 1;
-      }
-    cp = (char *)malloc(chunk_size);
-    vtkParse_AddStringToArray((const char ***)&stringArray, &numberOfChunks,
-                              cp);
-    stringChunkPos = 0;
-    nextChunkPos = (((n + 8) | 7) - 7);
-    }
-
-  cp = &stringArray[numberOfChunks-1][stringChunkPos];
-  cp[0] = '\0';
-
-  stringChunkPos = nextChunkPos;
-
-  return cp;
-}
-
-/* free all allocated strings */
-void vtkstrfree()
-{
-  int i;
-
-  for (i = 0; i < numberOfChunks; i++)
-    {
-    free(stringArray[i]);
-    }
-  if (stringArray)
-    {
-    free(stringArray);
-    }
-
-  stringArray = NULL;
-  numberOfChunks = 0;
-}
-
 /* duplicate the first n bytes of a string and terminate */
 static const char *vtkstrndup(const char *in, size_t n)
 {
-  char *res = NULL;
-
-  res = vtkstralloc(n);
-  strncpy(res, in, n);
-  res[n] = '\0';
-
-  return res;
+  return vtkParse_CacheString(data->Strings, in, n);
 }
 
 /* duplicate a string */
@@ -300,7 +322,7 @@ static const char *vtkstrdup(const char *in)
 {
   if (in)
     {
-    return vtkstrndup(in, strlen(in));
+    in = vtkParse_CacheString(data->Strings, in, strlen(in));
     }
 
   return in;
@@ -323,7 +345,7 @@ static const char *vtkstrncat(size_t n, const char **str)
       m += j[i];
       }
     }
-  cp = vtkstralloc(m);
+  cp = vtkParse_NewString(data->Strings, m);
   m = 0;
   for (i = 0; i < n; i++)
     {
@@ -385,21 +407,6 @@ static const char *vtkstrcat5(const char *str1, const char *str2,
   return vtkstrncat(5, cp);
 }
 
-static const char *vtkstrcat6(const char *str1, const char *str2,
-                              const char *str3, const char *str4,
-                              const char *str5, const char *str6)
-{
-  const char *cp[6];
-
-  cp[0] = str1;
-  cp[1] = str2;
-  cp[2] = str3;
-  cp[3] = str4;
-  cp[4] = str5;
-  cp[5] = str6;
-  return vtkstrncat(6, cp);
-}
-
 static const char *vtkstrcat7(const char *str1, const char *str2,
                               const char *str3, const char *str4,
                               const char *str5, const char *str6,
@@ -417,6 +424,28 @@ static const char *vtkstrcat7(const char *str1, const char *str2,
   return vtkstrncat(7, cp);
 }
 
+static size_t vtkidlen(const char *text)
+{
+  size_t i = 0;
+  char c = text[0];
+
+  if ((c >= 'a' && c <= 'z') ||
+      (c >= 'A' && c <= 'Z') ||
+       c == '_')
+    {
+    do
+      {
+      c = text[++i];
+      }
+    while ((c >= 'a' && c <= 'z') ||
+           (c >= 'A' && c <= 'Z') ||
+           (c >= '0' && c <= '9') ||
+           c == '_');
+    }
+
+  return i;
+}
+
 /*----------------------------------------------------------------
  * Comments
  */
@@ -485,15 +514,15 @@ void closeComment()
       commentState = -1;
       break;
     case 2:
-      data.Description = vtkstrdup(getComment());
+      data->Description = vtkstrdup(getComment());
       clearComment();
       break;
     case 3:
-      data.SeeAlso = vtkstrdup(getComment());
+      data->SeeAlso = vtkstrdup(getComment());
       clearComment();
       break;
     case 4:
-      data.Caveats = vtkstrdup(getComment());
+      data->Caveats = vtkstrdup(getComment());
       clearComment();
       break;
     }
@@ -528,6 +557,26 @@ void setCommentState(int state)
 }
 
 
+/*----------------------------------------------------------------
+ * Macros
+ */
+
+/* "private" variables */
+const char *macroName = NULL;
+int macroUsed = 0;
+int macroEnded = 0;
+
+const char *getMacro()
+{
+  if (macroUsed == 0)
+    {
+    macroUsed = macroEnded;
+    return macroName;
+    }
+  return NULL;
+}
+
+
 /*----------------------------------------------------------------
  * Namespaces
  *
@@ -558,7 +607,7 @@ void pushNamespace(const char *name)
     {
     currentNamespace = (NamespaceInfo *)malloc(sizeof(NamespaceInfo));
     vtkParse_InitNamespace(currentNamespace);
-    currentNamespace->Name = vtkstrdup(name);
+    currentNamespace->Name = name;
     vtkParse_AddNamespaceToNamespace(oldNamespace, currentNamespace);
     }
 
@@ -605,14 +654,14 @@ void popClass()
  */
 
 /* "private" variables */
-TemplateArgs *templateStack[10];
+TemplateInfo *templateStack[10];
 int templateDepth = 0;
 
 /* begin a template */
 void startTemplate()
 {
-  currentTemplate = (TemplateArgs *)malloc(sizeof(TemplateArgs));
-  vtkParse_InitTemplateArgs(currentTemplate);
+  currentTemplate = (TemplateInfo *)malloc(sizeof(TemplateInfo));
+  vtkParse_InitTemplate(currentTemplate);
 }
 
 /* clear a template, if set */
@@ -669,6 +718,21 @@ const char *getSig()
   return signature;
 }
 
+/* get the signature length */
+size_t getSigLength()
+{
+  return sigLength;
+}
+
+/* reset the sig to the specified length */
+void resetSig(size_t n)
+{
+  if (n < sigLength)
+    {
+    sigLength = n;
+    }
+}
+
 /* reallocate Signature if n chars cannot be appended */
 void checkSigSize(size_t n)
 {
@@ -676,15 +740,16 @@ void checkSigSize(size_t n)
 
   if (sigAllocatedLength == 0)
     {
+    sigLength = 0;
     sigAllocatedLength = 80 + n;
-    signature = vtkstralloc(sigAllocatedLength);
+    signature = vtkParse_NewString(data->Strings, sigAllocatedLength);
     signature[0] = '\0';
     }
   else if (sigLength + n > sigAllocatedLength)
     {
     sigAllocatedLength += sigLength + n;
     ccp = signature;
-    signature = vtkstralloc(sigAllocatedLength);
+    signature = vtkParse_NewString(data->Strings, sigAllocatedLength);
     strncpy(signature, ccp, sigLength);
     signature[sigLength] = '\0';
     }
@@ -705,23 +770,16 @@ void openSig()
 /* insert text at the beginning of the signature */
 void preSig(const char *arg)
 {
-  size_t n;
-
-  n = strlen(arg);
-
-  if (!signature)
-    {
-    checkSigSize(n);
-    strncpy(signature, arg, n);
-    signature[n] = '\0';
-    sigLength = n;
-    }
-  else if (!sigClosed && n > 0)
+  if (!sigClosed)
     {
+    size_t n = strlen(arg);
     checkSigSize(n);
-    memmove(&signature[n], signature, sigLength);
-    strncpy(signature, arg, n);
-    sigLength += n;
+    if (n > 0)
+      {
+      memmove(&signature[n], signature, sigLength);
+      strncpy(signature, arg, n);
+      sigLength += n;
+      }
     signature[sigLength] = '\0';
     }
 }
@@ -729,48 +787,19 @@ void preSig(const char *arg)
 /* append text to the end of the signature */
 void postSig(const char *arg)
 {
-  size_t n;
-
-  n = strlen(arg);
-
-  if (!signature)
-    {
-    checkSigSize(n);
-    strncpy(signature, arg, n);
-    signature[n] = '\0';
-    sigLength = n;
-    }
-  else if (!sigClosed)
+  if (!sigClosed)
     {
+    size_t n = strlen(arg);
     checkSigSize(n);
-    strncpy(&signature[sigLength], arg, n);
-    sigLength += n;
+    if (n > 0)
+      {
+      strncpy(&signature[sigLength], arg, n);
+      sigLength += n;
+      }
     signature[sigLength] = '\0';
     }
 }
 
-/* prepend a scope:: to the ID at the end of the signature */
-void preScopeSig(const char *arg)
-{
-  size_t n;
-
-  n = strlen(arg);
-
-  if (!signature)
-    {
-    checkSigSize(n);
-    strncpy(signature, arg, n);
-    signature[n] = '\0';
-    sigLength = n;
-    }
-  else if (!sigClosed)
-    {
-    checkSigSize(n+2);
-    prepend_scope(signature, arg);
-    sigLength = strlen(signature);
-    }
-}
-
 /* set a mark in the signature for later operations */
 void markSig()
 {
@@ -794,7 +823,7 @@ const char *copySig()
     {
     cp = &signature[sigMark[sigMarkDepth]];
     }
-  return cp;
+  return vtkstrdup(cp);
 }
 
 /* swap the signature text using the mark as the radix */
@@ -844,39 +873,141 @@ void chopSig(void)
     }
 }
 
-/* mark this signature as legacy */
-void legacySig(void)
-{
-  currentFunction->IsLegacy = 1;
-}
-
 /*----------------------------------------------------------------
- * Storage type for vars and functions
+ * Subroutines for building a type
  */
 
 /* "private" variables */
-unsigned int storageType = 0;
+unsigned int storedType;
+unsigned int typeStack[10];
+int typeDepth = 0;
+
+/* save the type on the stack */
+void pushType()
+{
+  typeStack[typeDepth++] = storedType;
+}
+
+/* pop the type stack */
+void popType()
+{
+  storedType = typeStack[--typeDepth];
+}
+
+/* clear the storage type */
+void clearType()
+{
+  storedType = 0;
+}
+
+/* save the type */
+void setTypeBase(unsigned int base)
+{
+  storedType &= ~(unsigned int)(VTK_PARSE_BASE_TYPE);
+  storedType |= base;
+}
 
-/* save the storage type */
-void setStorageType(unsigned int val)
+/* set a type modifier bit */
+void setTypeMod(unsigned int mod)
 {
-  storageType = val;
+  storedType |= mod;
 }
 
 /* modify the indirection (pointers, refs) in the storage type */
-void setStorageTypeIndirection(unsigned int ind)
+void setTypePtr(unsigned int ind)
 {
-  storageType = (storageType & ~VTK_PARSE_INDIRECT);
-  ind = (ind & VTK_PARSE_INDIRECT);
-  storageType = (storageType | ind);
+  storedType &= ~(unsigned int)(VTK_PARSE_INDIRECT);
+  ind &= VTK_PARSE_INDIRECT;
+  storedType |= ind;
 }
 
 /* retrieve the storage type */
-unsigned int getStorageType()
+unsigned int getType()
 {
-  return storageType;
+  return storedType;
+}
+
+/* combine two primitive type parts, e.g. "long int" */
+unsigned int buildTypeBase(unsigned int a, unsigned int b)
+{
+  unsigned int base = (a & VTK_PARSE_BASE_TYPE);
+  unsigned int basemod = (b & VTK_PARSE_BASE_TYPE);
+
+  switch (base)
+    {
+    case 0:
+      base = basemod;
+      break;
+    case VTK_PARSE_UNSIGNED_INT:
+      base = (basemod | VTK_PARSE_UNSIGNED);
+      break;
+    case VTK_PARSE_INT:
+      base = basemod;
+      if (base == VTK_PARSE_CHAR)
+        {
+        base = VTK_PARSE_SIGNED_CHAR;
+        }
+      break;
+    case VTK_PARSE_CHAR:
+      if (basemod == VTK_PARSE_INT)
+        {
+        base = VTK_PARSE_SIGNED_CHAR;
+        }
+      else if (basemod == VTK_PARSE_UNSIGNED_INT)
+        {
+        base = VTK_PARSE_UNSIGNED_CHAR;
+        }
+      break;
+    case VTK_PARSE_SHORT:
+      if (basemod == VTK_PARSE_UNSIGNED_INT)
+        {
+        base = VTK_PARSE_UNSIGNED_SHORT;
+        }
+      break;
+    case VTK_PARSE_LONG:
+      if (basemod == VTK_PARSE_UNSIGNED_INT)
+        {
+        base = VTK_PARSE_UNSIGNED_LONG;
+        }
+      else if (basemod == VTK_PARSE_LONG)
+        {
+        base = VTK_PARSE_LONG_LONG;
+        }
+      else if (basemod == VTK_PARSE_DOUBLE)
+        {
+        base = VTK_PARSE_LONG_DOUBLE;
+        }
+      break;
+    case VTK_PARSE_UNSIGNED_LONG:
+      if (basemod == VTK_PARSE_LONG)
+        {
+        base = VTK_PARSE_UNSIGNED_LONG_LONG;
+        }
+      break;
+    case VTK_PARSE_LONG_LONG:
+      if (basemod == VTK_PARSE_UNSIGNED_INT)
+        {
+        base = VTK_PARSE_UNSIGNED_LONG_LONG;
+        }
+      break;
+    case VTK_PARSE___INT64:
+      if (basemod == VTK_PARSE_UNSIGNED_INT)
+        {
+        base = VTK_PARSE_UNSIGNED___INT64;
+        }
+      break;
+    case VTK_PARSE_DOUBLE:
+      if (basemod == VTK_PARSE_LONG)
+        {
+        base = VTK_PARSE_LONG_DOUBLE;
+        }
+      break;
+    }
+
+  return ((a & ~(unsigned int)(VTK_PARSE_BASE_TYPE)) | base);
 }
 
+
 /*----------------------------------------------------------------
  * Array information
  */
@@ -896,7 +1027,7 @@ void clearArray(void)
 void pushArraySize(const char *size)
 {
   vtkParse_AddStringToArray(&arrayDimensions, &numberOfDimensions,
-                            vtkstrdup(size));
+                            size);
 }
 
 /* add another dimension to the front */
@@ -911,7 +1042,7 @@ void pushArrayFront(const char *size)
     arrayDimensions[i] = arrayDimensions[i-1];
     }
 
-  arrayDimensions[0] = vtkstrdup(size);
+  arrayDimensions[0] = size;
 }
 
 /* get the number of dimensions */
@@ -931,13 +1062,13 @@ const char **getArray()
 }
 
 /*----------------------------------------------------------------
- * Variables and Arguments
+ * Variables and Parameters
  */
 
 /* "private" variables */
-char *currentVarName = 0;
-char *currentVarValue = 0;
-char *currentId = 0;
+const char *currentVarName = 0;
+const char *currentVarValue = 0;
+const char *currentId = 0;
 
 /* clear the var Id */
 void clearVarName(void)
@@ -948,9 +1079,7 @@ void clearVarName(void)
 /* set the var Id */
 void setVarName(const char *text)
 {
-  static char static_text[2048];
-  currentVarName = static_text;
-  strcpy(static_text, text);
+  currentVarName = text;
 }
 
 /* return the var id */
@@ -970,9 +1099,7 @@ void clearVarValue(void)
 /* set the var value */
 void setVarValue(const char *text)
 {
-  static char static_text[2048];
-  currentVarValue = static_text;
-  strcpy(static_text, text);
+  currentVarValue = text;
 }
 
 /* return the var value */
@@ -992,19 +1119,15 @@ void clearTypeId(void)
 /* set the current Id, it is sticky until cleared */
 void setTypeId(const char *text)
 {
-  static char static_text[2048];
   if (currentId == NULL)
     {
-    currentId = static_text;
-    strcpy(static_text, text);
+    currentId = text;
     }
 }
 
 /* set the signature and type together */
 void typeSig(const char *text)
 {
-  size_t n;
-
   postSig(text);
   postSig(" ");
 
@@ -1012,13 +1135,6 @@ void typeSig(const char *text)
     {
     setTypeId(text);
     }
-  else if ((currentId[0] == 'u' && strcmp(currentId, "unsigned") == 0) ||
-           (currentId[0] == 's' && strcmp(currentId, "signed") == 0))
-    {
-    n = strlen(currentId);
-    currentId[n] = ' ';
-    strcpy(&currentId[n+1], text);
-    }
 }
 
 /* return the current Id */
@@ -1076,8 +1192,10 @@ void pushFunction()
     {
     startSig();
     }
-  functionVarNameStack[functionDepth] = vtkstrdup(getVarName());
-  functionTypeIdStack[functionDepth] = vtkstrdup(getTypeId());
+  functionVarNameStack[functionDepth] = getVarName();
+  functionTypeIdStack[functionDepth] = getTypeId();
+  pushType();
+  clearType();
   clearVarName();
   clearTypeId();
   functionDepth++;
@@ -1100,6 +1218,7 @@ void popFunction()
     {
     setTypeId(functionTypeIdStack[functionDepth]);
     }
+  popType();
 
   functionStack[functionDepth+1] = newFunction;
 }
@@ -1231,7 +1350,7 @@ unsigned int add_indirection_to_array(unsigned int type)
 
 
 /* Line 189 of yacc.c  */
-#line 1235 "vtkParse.tab.c"
+#line 1354 "vtkParse.tab.c"
 
 /* Enabling traces.  */
 #ifndef YYDEBUG
@@ -1258,137 +1377,123 @@ unsigned int add_indirection_to_array(unsigned int type)
    /* Put the tokens into the symbol table, so that GDB and other debuggers
       know about them.  */
    enum yytokentype {
-     STRUCT = 258,
-     CLASS = 259,
-     PUBLIC = 260,
-     PRIVATE = 261,
-     PROTECTED = 262,
-     VIRTUAL = 263,
-     ID = 264,
-     STRING_LITERAL = 265,
-     INT_LITERAL = 266,
-     HEX_LITERAL = 267,
-     OCT_LITERAL = 268,
-     FLOAT_LITERAL = 269,
-     CHAR_LITERAL = 270,
-     ZERO = 271,
-     FLOAT = 272,
-     DOUBLE = 273,
-     LONG_DOUBLE = 274,
-     INT = 275,
-     UNSIGNED_INT = 276,
-     SHORT = 277,
-     UNSIGNED_SHORT = 278,
-     LONG = 279,
-     UNSIGNED_LONG = 280,
-     LONG_LONG = 281,
-     UNSIGNED_LONG_LONG = 282,
-     INT64__ = 283,
-     UNSIGNED_INT64__ = 284,
-     CHAR = 285,
-     SIGNED_CHAR = 286,
-     UNSIGNED_CHAR = 287,
-     VOID = 288,
-     BOOL = 289,
-     SSIZE_T = 290,
-     SIZE_T = 291,
-     OSTREAM = 292,
-     ISTREAM = 293,
-     ENUM = 294,
-     UNION = 295,
-     CLASS_REF = 296,
-     OTHER = 297,
-     CONST = 298,
-     CONST_PTR = 299,
-     CONST_EQUAL = 300,
-     OPERATOR = 301,
-     UNSIGNED = 302,
-     SIGNED = 303,
-     FRIEND = 304,
-     INLINE = 305,
-     MUTABLE = 306,
-     TEMPLATE = 307,
-     TYPENAME = 308,
-     TYPEDEF = 309,
-     NAMESPACE = 310,
-     USING = 311,
-     VTK_ID = 312,
-     STATIC = 313,
-     EXTERN = 314,
-     VAR_FUNCTION = 315,
-     VTK_LEGACY = 316,
-     NEW = 317,
-     DELETE = 318,
-     EXPLICIT = 319,
-     STATIC_CAST = 320,
-     DYNAMIC_CAST = 321,
-     CONST_CAST = 322,
-     REINTERPRET_CAST = 323,
-     OP_LSHIFT_EQ = 324,
-     OP_RSHIFT_EQ = 325,
-     OP_LSHIFT = 326,
-     OP_RSHIFT = 327,
-     OP_ARROW_POINTER = 328,
-     OP_ARROW = 329,
-     OP_INCR = 330,
-     OP_DECR = 331,
-     OP_PLUS_EQ = 332,
-     OP_MINUS_EQ = 333,
-     OP_TIMES_EQ = 334,
-     OP_DIVIDE_EQ = 335,
-     OP_REMAINDER_EQ = 336,
-     OP_AND_EQ = 337,
-     OP_OR_EQ = 338,
-     OP_XOR_EQ = 339,
-     OP_LOGIC_AND_EQ = 340,
-     OP_LOGIC_OR_EQ = 341,
-     OP_LOGIC_AND = 342,
-     OP_LOGIC_OR = 343,
-     OP_LOGIC_EQ = 344,
-     OP_LOGIC_NEQ = 345,
-     OP_LOGIC_LEQ = 346,
-     OP_LOGIC_GEQ = 347,
-     ELLIPSIS = 348,
-     DOUBLE_COLON = 349,
-     LP = 350,
-     LA = 351,
-     QT_ID = 352,
-     StdString = 353,
-     UnicodeString = 354,
-     IdType = 355,
-     FloatType = 356,
-     TypeInt8 = 357,
-     TypeUInt8 = 358,
-     TypeInt16 = 359,
-     TypeUInt16 = 360,
-     TypeInt32 = 361,
-     TypeUInt32 = 362,
-     TypeInt64 = 363,
-     TypeUInt64 = 364,
-     TypeFloat32 = 365,
-     TypeFloat64 = 366,
-     SetMacro = 367,
-     GetMacro = 368,
-     SetStringMacro = 369,
-     GetStringMacro = 370,
-     SetClampMacro = 371,
-     SetObjectMacro = 372,
-     GetObjectMacro = 373,
-     BooleanMacro = 374,
-     SetVector2Macro = 375,
-     SetVector3Macro = 376,
-     SetVector4Macro = 377,
-     SetVector6Macro = 378,
-     GetVector2Macro = 379,
-     GetVector3Macro = 380,
-     GetVector4Macro = 381,
-     GetVector6Macro = 382,
-     SetVectorMacro = 383,
-     GetVectorMacro = 384,
-     ViewportCoordinateMacro = 385,
-     WorldCoordinateMacro = 386,
-     TypeMacro = 387,
-     VTK_BYTE_SWAP_DECL = 388
+     ID = 258,
+     VTK_ID = 259,
+     QT_ID = 260,
+     StdString = 261,
+     UnicodeString = 262,
+     OSTREAM = 263,
+     ISTREAM = 264,
+     LP = 265,
+     LA = 266,
+     STRING_LITERAL = 267,
+     INT_LITERAL = 268,
+     HEX_LITERAL = 269,
+     OCT_LITERAL = 270,
+     FLOAT_LITERAL = 271,
+     CHAR_LITERAL = 272,
+     ZERO = 273,
+     STRUCT = 274,
+     CLASS = 275,
+     UNION = 276,
+     ENUM = 277,
+     PUBLIC = 278,
+     PRIVATE = 279,
+     PROTECTED = 280,
+     CONST = 281,
+     VOLATILE = 282,
+     MUTABLE = 283,
+     STATIC = 284,
+     VIRTUAL = 285,
+     EXPLICIT = 286,
+     INLINE = 287,
+     FRIEND = 288,
+     EXTERN = 289,
+     OPERATOR = 290,
+     TEMPLATE = 291,
+     THROW = 292,
+     TYPENAME = 293,
+     TYPEDEF = 294,
+     NAMESPACE = 295,
+     USING = 296,
+     NEW = 297,
+     DELETE = 298,
+     STATIC_CAST = 299,
+     DYNAMIC_CAST = 300,
+     CONST_CAST = 301,
+     REINTERPRET_CAST = 302,
+     OP_LSHIFT_EQ = 303,
+     OP_RSHIFT_EQ = 304,
+     OP_LSHIFT = 305,
+     OP_RSHIFT = 306,
+     OP_DOT_POINTER = 307,
+     OP_ARROW_POINTER = 308,
+     OP_ARROW = 309,
+     OP_INCR = 310,
+     OP_DECR = 311,
+     OP_PLUS_EQ = 312,
+     OP_MINUS_EQ = 313,
+     OP_TIMES_EQ = 314,
+     OP_DIVIDE_EQ = 315,
+     OP_REMAINDER_EQ = 316,
+     OP_AND_EQ = 317,
+     OP_OR_EQ = 318,
+     OP_XOR_EQ = 319,
+     OP_LOGIC_AND = 320,
+     OP_LOGIC_OR = 321,
+     OP_LOGIC_EQ = 322,
+     OP_LOGIC_NEQ = 323,
+     OP_LOGIC_LEQ = 324,
+     OP_LOGIC_GEQ = 325,
+     ELLIPSIS = 326,
+     DOUBLE_COLON = 327,
+     OTHER = 328,
+     VOID = 329,
+     BOOL = 330,
+     FLOAT = 331,
+     DOUBLE = 332,
+     INT = 333,
+     SHORT = 334,
+     LONG = 335,
+     INT64__ = 336,
+     CHAR = 337,
+     SIGNED = 338,
+     UNSIGNED = 339,
+     SSIZE_T = 340,
+     SIZE_T = 341,
+     IdType = 342,
+     TypeInt8 = 343,
+     TypeUInt8 = 344,
+     TypeInt16 = 345,
+     TypeUInt16 = 346,
+     TypeInt32 = 347,
+     TypeUInt32 = 348,
+     TypeInt64 = 349,
+     TypeUInt64 = 350,
+     TypeFloat32 = 351,
+     TypeFloat64 = 352,
+     SetMacro = 353,
+     GetMacro = 354,
+     SetStringMacro = 355,
+     GetStringMacro = 356,
+     SetClampMacro = 357,
+     SetObjectMacro = 358,
+     GetObjectMacro = 359,
+     BooleanMacro = 360,
+     SetVector2Macro = 361,
+     SetVector3Macro = 362,
+     SetVector4Macro = 363,
+     SetVector6Macro = 364,
+     GetVector2Macro = 365,
+     GetVector3Macro = 366,
+     GetVector4Macro = 367,
+     GetVector6Macro = 368,
+     SetVectorMacro = 369,
+     GetVectorMacro = 370,
+     ViewportCoordinateMacro = 371,
+     WorldCoordinateMacro = 372,
+     TypeMacro = 373,
+     VTK_BYTE_SWAP_DECL = 374
    };
 #endif
 
@@ -1399,16 +1504,16 @@ unsigned int add_indirection_to_array(unsigned int type)
 typedef union YYSTYPE
 {
 
-/* Line 214 of yacc.c  */
-#line 1182 "vtkParse.y"
+/* Line 222 of yacc.c  */
+#line 1302 "vtkParse.y"
 
   const char   *str;
   unsigned int  integer;
 
 
 
-/* Line 214 of yacc.c  */
-#line 1544 "vtkParse.tab.c"
+/* Line 222 of yacc.c  */
+#line 1635 "vtkParse.tab.c"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -1420,7 +1525,7 @@ typedef union YYSTYPE
 
 
 /* Line 264 of yacc.c  */
-#line 1556 "vtkParse.tab.c"
+#line 1647 "vtkParse.tab.c"
 
 #ifdef short
 # undef short
@@ -1633,22 +1738,22 @@ union yyalloc
 #endif
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  2
+#define YYFINAL  3
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   7055
+#define YYLAST   5657
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  157
+#define YYNTOKENS  143
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  196
+#define YYNNTS  240
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  581
+#define YYNRULES  603
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  1021
+#define YYNSTATES  968
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   388
+#define YYMAXUTOK   374
 
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -1659,16 +1764,16 @@ static const yytype_uint8 yytranslate[] =
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   155,     2,     2,     2,   149,   150,     2,
-     135,   136,   147,   145,   142,   144,   156,   148,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,   141,   134,
-     139,   143,   140,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,   139,     2,     2,     2,   135,   133,     2,
+     126,   127,   134,   138,   125,   137,   142,   136,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,   124,   120,
+     128,   123,   129,     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,   153,     2,   154,   152,     2,     2,     2,     2,     2,
+       2,   130,     2,   131,   141,     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,   137,   151,   138,   146,     2,     2,     2,
+       2,     2,     2,   121,   140,   122,   132,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -1693,8 +1798,7 @@ static const yytype_uint8 yytranslate[] =
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
      105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133
+     115,   116,   117,   118,   119
 };
 
 #if YYDEBUG
@@ -1702,297 +1806,299 @@ static const yytype_uint8 yytranslate[] =
    YYRHS.  */
 static const yytype_uint16 yyprhs[] =
 {
-       0,     0,     3,     4,     5,     9,    11,    15,    17,    19,
-      21,    23,    27,    32,    34,    37,    41,    44,    47,    50,
-      54,    57,    59,    62,    67,    72,    77,    79,    85,    86,
-      93,    98,    99,   107,   108,   119,   120,   128,   129,   140,
-     145,   146,   154,   155,   166,   171,   172,   173,   177,   181,
-     183,   187,   189,   191,   195,   200,   203,   206,   208,   211,
-     215,   219,   222,   226,   230,   233,   239,   241,   243,   244,
-     247,   249,   253,   255,   258,   261,   264,   266,   268,   270,
-     271,   278,   279,   285,   286,   288,   292,   294,   298,   300,
-     302,   304,   306,   308,   310,   312,   314,   316,   318,   319,
-     323,   324,   329,   330,   335,   337,   339,   341,   343,   345,
-     347,   349,   351,   353,   355,   357,   359,   361,   364,   368,
-     372,   375,   379,   382,   384,   390,   394,   399,   404,   409,
-     413,   415,   420,   425,   429,   433,   434,   440,   442,   443,
-     448,   451,   454,   455,   459,   461,   463,   464,   465,   469,
-     474,   479,   482,   486,   491,   497,   501,   506,   513,   521,
-     527,   534,   537,   541,   544,   548,   552,   554,   557,   560,
-     563,   567,   569,   572,   575,   579,   583,   585,   588,   592,
-     593,   594,   603,   604,   608,   609,   610,   618,   619,   623,
-     624,   627,   630,   632,   634,   638,   639,   645,   646,   647,
-     657,   658,   662,   663,   669,   670,   674,   675,   679,   684,
-     686,   687,   693,   694,   695,   698,   700,   702,   703,   708,
-     709,   710,   716,   718,   720,   723,   724,   726,   727,   731,
-     736,   741,   745,   748,   749,   752,   753,   754,   759,   760,
-     763,   764,   768,   771,   772,   778,   781,   782,   788,   790,
-     792,   794,   796,   798,   799,   801,   802,   803,   809,   811,
-     813,   816,   818,   821,   822,   824,   826,   827,   829,   830,
-     833,   834,   840,   841,   843,   844,   846,   848,   850,   852,
-     854,   856,   858,   860,   862,   864,   866,   868,   870,   872,
-     874,   876,   878,   880,   882,   884,   886,   888,   890,   893,
-     896,   900,   903,   906,   910,   912,   915,   917,   920,   922,
-     925,   928,   930,   932,   934,   936,   937,   941,   942,   948,
-     949,   955,   956,   962,   964,   965,   970,   972,   974,   976,
-     978,   980,   982,   984,   986,   988,   990,   992,   996,  1000,
-    1002,  1004,  1006,  1008,  1010,  1012,  1014,  1016,  1019,  1021,
-    1023,  1026,  1028,  1030,  1032,  1035,  1038,  1041,  1044,  1046,
-    1048,  1050,  1052,  1054,  1056,  1058,  1060,  1062,  1064,  1066,
-    1068,  1070,  1072,  1074,  1076,  1078,  1080,  1082,  1084,  1086,
-    1088,  1090,  1092,  1094,  1096,  1098,  1100,  1102,  1104,  1106,
-    1108,  1110,  1112,  1114,  1116,  1118,  1120,  1122,  1124,  1126,
-    1128,  1130,  1132,  1133,  1140,  1141,  1143,  1144,  1145,  1150,
-    1152,  1153,  1157,  1158,  1162,  1164,  1165,  1170,  1171,  1172,
-    1182,  1184,  1186,  1188,  1190,  1192,  1195,  1197,  1199,  1201,
-    1203,  1205,  1207,  1209,  1210,  1218,  1219,  1220,  1221,  1231,
-    1232,  1238,  1239,  1245,  1246,  1247,  1258,  1259,  1267,  1268,
-    1269,  1270,  1280,  1287,  1288,  1296,  1297,  1305,  1306,  1314,
-    1315,  1323,  1324,  1332,  1333,  1341,  1342,  1350,  1351,  1359,
-    1360,  1370,  1371,  1381,  1386,  1391,  1399,  1402,  1405,  1409,
-    1413,  1415,  1417,  1419,  1421,  1423,  1425,  1427,  1429,  1431,
-    1433,  1435,  1437,  1439,  1441,  1443,  1445,  1447,  1449,  1451,
-    1453,  1455,  1457,  1459,  1461,  1463,  1465,  1467,  1469,  1471,
-    1473,  1475,  1477,  1479,  1481,  1483,  1485,  1487,  1489,  1491,
-    1493,  1495,  1496,  1499,  1500,  1503,  1505,  1507,  1509,  1511,
-    1513,  1515,  1517,  1519,  1521,  1523,  1525,  1527,  1529,  1531,
-    1533,  1535,  1537,  1539,  1541,  1543,  1545,  1547,  1549,  1551,
-    1553,  1555,  1557,  1559,  1561,  1563,  1565,  1567,  1569,  1571,
-    1573,  1575,  1577,  1579,  1581,  1583,  1585,  1587,  1589,  1591,
-    1593,  1595,  1597,  1599,  1601,  1603,  1605,  1607,  1611,  1615,
-    1619,  1623
+       0,     0,     3,     5,     6,     7,    11,    13,    15,    17,
+      19,    21,    23,    25,    27,    29,    31,    33,    35,    37,
+      40,    42,    45,    48,    51,    54,    60,    65,    66,    73,
+      79,    81,    84,    88,    93,    98,   104,   105,   111,   112,
+     117,   118,   122,   124,   126,   128,   129,   130,   134,   138,
+     140,   142,   144,   146,   148,   150,   152,   154,   156,   158,
+     160,   162,   164,   167,   170,   172,   175,   178,   181,   185,
+     188,   192,   193,   195,   198,   200,   204,   206,   210,   214,
+     215,   217,   218,   220,   222,   224,   226,   231,   237,   238,
+     244,   247,   249,   250,   252,   254,   257,   261,   263,   264,
+     269,   276,   280,   285,   288,   292,   298,   302,   304,   307,
+     313,   319,   326,   332,   339,   342,   343,   347,   350,   352,
+     354,   355,   356,   364,   366,   370,   372,   375,   378,   381,
+     385,   389,   394,   398,   399,   405,   407,   408,   413,   414,
+     415,   421,   422,   423,   429,   430,   431,   432,   440,   442,
+     444,   445,   447,   448,   452,   454,   457,   460,   463,   466,
+     469,   472,   476,   479,   483,   486,   490,   494,   497,   501,
+     506,   509,   511,   513,   516,   518,   521,   524,   525,   526,
+     534,   537,   538,   542,   543,   549,   552,   554,   557,   558,
+     561,   562,   566,   568,   571,   575,   577,   578,   584,   586,
+     588,   589,   590,   596,   597,   603,   604,   607,   609,   613,
+     616,   617,   618,   621,   623,   624,   629,   633,   634,   635,
+     641,   642,   644,   645,   649,   654,   657,   658,   661,   662,
+     663,   668,   671,   672,   674,   677,   678,   684,   687,   688,
+     694,   696,   698,   700,   702,   704,   705,   706,   707,   714,
+     716,   717,   720,   723,   727,   729,   732,   734,   737,   738,
+     740,   742,   746,   748,   750,   752,   753,   755,   756,   759,
+     761,   764,   765,   770,   771,   772,   775,   777,   779,   781,
+     783,   786,   789,   792,   795,   798,   802,   806,   807,   813,
+     815,   817,   818,   824,   826,   828,   830,   832,   834,   836,
+     838,   841,   844,   847,   850,   853,   856,   859,   861,   863,
+     865,   867,   869,   871,   873,   875,   877,   879,   881,   883,
+     885,   887,   889,   891,   893,   895,   897,   899,   900,   903,
+     905,   907,   909,   911,   913,   916,   918,   920,   922,   924,
+     926,   929,   931,   933,   935,   937,   939,   941,   943,   946,
+     949,   950,   954,   955,   960,   962,   963,   967,   969,   971,
+     974,   977,   980,   981,   985,   986,   991,   993,   995,   997,
+    1000,  1003,  1006,  1008,  1010,  1012,  1014,  1016,  1018,  1020,
+    1022,  1024,  1026,  1028,  1030,  1032,  1034,  1036,  1038,  1040,
+    1042,  1044,  1046,  1048,  1050,  1052,  1054,  1056,  1058,  1060,
+    1062,  1064,  1066,  1068,  1070,  1072,  1074,  1076,  1079,  1081,
+    1083,  1084,  1088,  1090,  1093,  1094,  1102,  1103,  1104,  1105,
+    1115,  1116,  1122,  1123,  1129,  1130,  1131,  1142,  1143,  1151,
+    1152,  1153,  1154,  1164,  1171,  1172,  1180,  1181,  1189,  1190,
+    1198,  1199,  1207,  1208,  1216,  1217,  1225,  1226,  1234,  1235,
+    1243,  1244,  1254,  1255,  1265,  1270,  1275,  1283,  1284,  1286,
+    1289,  1292,  1296,  1300,  1302,  1304,  1306,  1308,  1310,  1312,
+    1314,  1316,  1318,  1320,  1322,  1324,  1326,  1328,  1330,  1332,
+    1334,  1336,  1338,  1340,  1342,  1344,  1346,  1348,  1350,  1352,
+    1354,  1356,  1358,  1360,  1362,  1364,  1366,  1368,  1370,  1372,
+    1374,  1376,  1378,  1380,  1382,  1384,  1386,  1388,  1390,  1392,
+    1394,  1396,  1398,  1400,  1402,  1404,  1406,  1408,  1410,  1412,
+    1414,  1416,  1418,  1420,  1422,  1424,  1426,  1428,  1430,  1432,
+    1434,  1436,  1438,  1440,  1443,  1445,  1447,  1449,  1451,  1453,
+    1455,  1457,  1459,  1461,  1463,  1465,  1466,  1469,  1471,  1473,
+    1475,  1477,  1479,  1481,  1483,  1485,  1486,  1489,  1490,  1493,
+    1495,  1497,  1499,  1501,  1503,  1504,  1509,  1510,  1515,  1516,
+    1521,  1522,  1527,  1528,  1533,  1534,  1539,  1540,  1543,  1544,
+    1547,  1549,  1551,  1553,  1555,  1557,  1559,  1561,  1563,  1565,
+    1567,  1569,  1571,  1573,  1575,  1577,  1579,  1581,  1583,  1587,
+    1591,  1595,  1597,  1599
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     158,     0,    -1,    -1,    -1,   158,   159,   160,    -1,   252,
-      -1,   178,   254,   134,    -1,   196,    -1,   162,    -1,   161,
-      -1,   194,    -1,   164,   254,   134,    -1,   197,   164,   254,
-     134,    -1,    41,    -1,   214,   226,    -1,   197,   214,   226,
-      -1,   213,   226,    -1,   208,   226,    -1,   209,   226,    -1,
-     197,   208,   226,    -1,   206,   226,    -1,   321,    -1,   299,
-     134,    -1,     9,   135,   346,   136,    -1,    57,   135,   346,
-     136,    -1,    97,   135,   346,   136,    -1,   134,    -1,    59,
-      10,   137,   158,   138,    -1,    -1,    55,   299,   163,   137,
-     158,   138,    -1,    55,   137,   346,   138,    -1,    -1,     4,
-     280,   165,   174,   137,   171,   138,    -1,    -1,     4,   280,
-     139,   294,   140,   166,   174,   137,   171,   138,    -1,    -1,
-       3,   280,   167,   174,   137,   171,   138,    -1,    -1,     3,
-     280,   139,   294,   140,   168,   174,   137,   171,   138,    -1,
-       3,   137,   346,   138,    -1,    -1,    40,   280,   169,   174,
-     137,   171,   138,    -1,    -1,    40,   280,   139,   294,   140,
-     170,   174,   137,   171,   138,    -1,    40,   137,   346,   138,
-      -1,    -1,    -1,   171,   172,   173,    -1,   171,   177,   141,
-      -1,   252,    -1,   178,   254,   134,    -1,   196,    -1,   194,
-      -1,   164,   254,   134,    -1,   197,   164,   254,   134,    -1,
-      49,   192,    -1,    49,   191,    -1,    41,    -1,   214,   226,
-      -1,    49,   214,   226,    -1,   197,   214,   226,    -1,   211,
-     226,    -1,    49,   211,   226,    -1,   197,   211,   226,    -1,
-     207,   226,    -1,   133,   135,   346,   136,   134,    -1,   321,
-      -1,   134,    -1,    -1,   141,   175,    -1,   176,    -1,   176,
-     142,   175,    -1,   297,    -1,     6,   297,    -1,     7,   297,
-      -1,     5,   297,    -1,     5,    -1,     6,    -1,     7,    -1,
-      -1,    39,   280,   179,   137,   181,   138,    -1,    -1,    39,
-     180,   137,   181,   138,    -1,    -1,   182,    -1,   182,   142,
-     181,    -1,   280,    -1,   280,   143,   185,    -1,   184,    -1,
-     280,    -1,   298,    -1,   290,    -1,    16,    -1,    11,    -1,
-      13,    -1,    12,    -1,    15,    -1,   183,    -1,    -1,   189,
-     186,   185,    -1,    -1,   183,   190,   187,   185,    -1,    -1,
-     135,   188,   185,   136,    -1,   144,    -1,   145,    -1,   146,
-      -1,   144,    -1,   145,    -1,   147,    -1,   148,    -1,   149,
-      -1,   150,    -1,   151,    -1,   152,    -1,    71,    -1,    72,
-      -1,   197,   192,    -1,     4,   280,   193,    -1,     3,   280,
-     193,    -1,     3,   193,    -1,    40,   280,   193,    -1,    40,
-     193,    -1,   134,    -1,   137,   346,   138,   347,   134,    -1,
-     141,   347,   134,    -1,   195,   285,   262,   134,    -1,   195,
-     164,   248,   134,    -1,   195,   178,   248,   134,    -1,   195,
-      60,   134,    -1,    54,    -1,    56,    55,   297,   134,    -1,
-      56,    53,   297,   134,    -1,    56,   297,   134,    -1,    52,
-     139,   140,    -1,    -1,    52,   139,   198,   199,   140,    -1,
-     201,    -1,    -1,   201,   142,   200,   199,    -1,   304,   204,
-      -1,   203,   204,    -1,    -1,   202,   197,   204,    -1,     4,
-      -1,    53,    -1,    -1,    -1,   280,   205,   249,    -1,    61,
-     135,   208,   136,    -1,    61,   135,   211,   136,    -1,   283,
-     223,    -1,   283,   210,   223,    -1,   299,    94,   146,   238,
-      -1,    50,   299,    94,   146,   238,    -1,   299,    94,   231,
-      -1,    50,   299,    94,   231,    -1,   299,    94,   299,    94,
-     146,   238,    -1,    50,   299,    94,   299,    94,   146,   238,
-      -1,   299,    94,   299,    94,   231,    -1,    50,   299,    94,
-     299,    94,   231,    -1,   299,    94,    -1,   210,   299,    94,
-      -1,   146,   238,    -1,    50,   146,   238,    -1,     8,   146,
-     238,    -1,   231,    -1,    50,   231,    -1,   212,   231,    -1,
-     283,   223,    -1,     8,   283,   223,    -1,    64,    -1,    50,
-      64,    -1,    64,    50,    -1,   299,    94,   215,    -1,   283,
-     210,   218,    -1,   215,    -1,   283,   218,    -1,     8,   285,
-     218,    -1,    -1,    -1,    46,   283,   135,   216,   241,   136,
-     217,   225,    -1,    -1,   220,   219,   225,    -1,    -1,    -1,
-      46,   344,   221,   135,   222,   241,   136,    -1,    -1,   227,
-     224,   225,    -1,    -1,   143,    16,    -1,    45,    16,    -1,
-      43,    -1,   134,    -1,   137,   346,   138,    -1,    -1,   280,
-     135,   228,   241,   136,    -1,    -1,    -1,   280,   139,   229,
-     294,   140,   135,   230,   241,   136,    -1,    -1,   233,   232,
-     235,    -1,    -1,   280,   135,   234,   241,   136,    -1,    -1,
-     141,   237,   236,    -1,    -1,   142,   237,   236,    -1,   297,
-     135,   346,   136,    -1,   239,    -1,    -1,   280,   135,   240,
-     241,   136,    -1,    -1,    -1,   242,   243,    -1,    93,    -1,
-     245,    -1,    -1,   245,   142,   244,   243,    -1,    -1,    -1,
-     246,   285,   260,   247,   249,    -1,    60,    -1,   280,    -1,
-     300,   280,    -1,    -1,   250,    -1,    -1,   143,   251,   307,
-      -1,   283,   253,   255,   134,    -1,    58,    60,   255,   134,
-      -1,    60,   255,   134,    -1,   262,   249,    -1,    -1,   257,
-     255,    -1,    -1,    -1,   255,   142,   256,   257,    -1,    -1,
-     258,   253,    -1,    -1,   300,   259,   253,    -1,   271,   273,
-      -1,    -1,   264,   269,   136,   261,   267,    -1,   272,   273,
-      -1,    -1,   265,   270,   136,   263,   267,    -1,   135,    -1,
-      95,    -1,    96,    -1,    95,    -1,    96,    -1,    -1,    43,
-      -1,    -1,    -1,   135,   268,   241,   136,   266,    -1,   274,
-      -1,   260,    -1,   300,   260,    -1,   262,    -1,   300,   262,
-      -1,    -1,   272,    -1,   280,    -1,    -1,   274,    -1,    -1,
-     275,   276,    -1,    -1,   278,   153,   277,   279,   154,    -1,
-      -1,   276,    -1,    -1,   185,    -1,    57,    -1,    97,    -1,
-       9,    -1,    38,    -1,    37,    -1,    98,    -1,    99,    -1,
-     281,    -1,   282,    -1,   102,    -1,   103,    -1,   104,    -1,
-     105,    -1,   106,    -1,   107,    -1,   108,    -1,   109,    -1,
-     110,    -1,   111,    -1,   100,    -1,   101,    -1,   285,    -1,
-      51,   285,    -1,    59,   285,    -1,    59,    10,   285,    -1,
-      50,   285,    -1,   284,   285,    -1,    50,   284,   285,    -1,
-      58,    -1,    58,    50,    -1,   286,    -1,   286,   300,    -1,
-     288,    -1,   287,   288,    -1,   288,   287,    -1,    43,    -1,
-     303,    -1,   290,    -1,   298,    -1,    -1,    53,   289,   297,
-      -1,    -1,    57,   139,   291,   294,   140,    -1,    -1,     9,
-     139,   292,   294,   140,    -1,    -1,    97,   139,   293,   294,
-     140,    -1,   296,    -1,    -1,   296,   142,   295,   294,    -1,
-     285,    -1,   184,    -1,    57,    -1,     9,    -1,    97,    -1,
-      38,    -1,    37,    -1,    98,    -1,    99,    -1,   290,    -1,
-     298,    -1,   299,    94,   297,    -1,   290,    94,   297,    -1,
-       9,    -1,    97,    -1,    57,    -1,    38,    -1,    37,    -1,
-      98,    -1,    99,    -1,   150,    -1,   301,   150,    -1,   301,
-      -1,   302,    -1,   301,   302,    -1,   147,    -1,    44,    -1,
-     304,    -1,     4,   305,    -1,     3,   305,    -1,    40,   305,
-      -1,    39,   305,    -1,   306,    -1,   305,    -1,    98,    -1,
-      99,    -1,    37,    -1,    38,    -1,     9,    -1,    57,    -1,
-      97,    -1,    33,    -1,    34,    -1,    35,    -1,    36,    -1,
-     102,    -1,   103,    -1,   104,    -1,   105,    -1,   106,    -1,
-     107,    -1,   108,    -1,   109,    -1,   110,    -1,   111,    -1,
-     100,    -1,   101,    -1,    17,    -1,    18,    -1,    19,    -1,
-      30,    -1,    31,    -1,    32,    -1,    20,    -1,    21,    -1,
-      22,    -1,    23,    -1,    24,    -1,    25,    -1,    26,    -1,
-      27,    -1,    28,    -1,    29,    -1,    48,    -1,    47,    -1,
-     312,    -1,    -1,   137,   308,   307,   310,   309,   138,    -1,
-      -1,   142,    -1,    -1,    -1,   310,   142,   311,   307,    -1,
-     320,    -1,    -1,   145,   313,   320,    -1,    -1,   144,   314,
-     320,    -1,   319,    -1,    -1,   135,   315,   312,   136,    -1,
-      -1,    -1,   318,   139,   316,   286,   140,   135,   317,   312,
-     136,    -1,    65,    -1,    67,    -1,    66,    -1,    68,    -1,
-      10,    -1,   319,    10,    -1,    16,    -1,    11,    -1,    13,
-      -1,    12,    -1,    14,    -1,    15,    -1,   297,    -1,    -1,
-     112,   135,   280,   142,   322,   285,   136,    -1,    -1,    -1,
-      -1,   113,   135,   323,   280,   142,   324,   285,   325,   136,
-      -1,    -1,   114,   135,   326,   280,   136,    -1,    -1,   115,
-     135,   327,   280,   136,    -1,    -1,    -1,   116,   135,   280,
-     142,   328,   303,   329,   142,   347,   136,    -1,    -1,   117,
-     135,   280,   142,   330,   303,   136,    -1,    -1,    -1,    -1,
-     118,   135,   331,   280,   142,   332,   303,   333,   136,    -1,
-     119,   135,   280,   142,   303,   136,    -1,    -1,   120,   135,
-     280,   142,   334,   303,   136,    -1,    -1,   124,   135,   280,
-     142,   335,   303,   136,    -1,    -1,   121,   135,   280,   142,
-     336,   303,   136,    -1,    -1,   125,   135,   280,   142,   337,
-     303,   136,    -1,    -1,   122,   135,   280,   142,   338,   303,
-     136,    -1,    -1,   126,   135,   280,   142,   339,   303,   136,
-      -1,    -1,   123,   135,   280,   142,   340,   303,   136,    -1,
-      -1,   127,   135,   280,   142,   341,   303,   136,    -1,    -1,
-     128,   135,   280,   142,   342,   303,   142,    11,   136,    -1,
-      -1,   129,   135,   280,   142,   343,   303,   142,    11,   136,
-      -1,   130,   135,   280,   136,    -1,   131,   135,   280,   136,
-      -1,   132,   135,   280,   142,   280,   309,   136,    -1,   135,
-     136,    -1,   153,   154,    -1,    62,   153,   154,    -1,    63,
-     153,   154,    -1,   345,    -1,   143,    -1,   147,    -1,   148,
-      -1,   144,    -1,   145,    -1,   155,    -1,   146,    -1,   142,
-      -1,   139,    -1,   140,    -1,   150,    -1,   151,    -1,   152,
-      -1,   149,    -1,    62,    -1,    63,    -1,    69,    -1,    70,
-      -1,    71,    -1,    72,    -1,    73,    -1,    74,    -1,    77,
-      -1,    78,    -1,    79,    -1,    80,    -1,    81,    -1,    75,
-      -1,    76,    -1,    82,    -1,    83,    -1,    84,    -1,    85,
-      -1,    86,    -1,    87,    -1,    88,    -1,    89,    -1,    90,
-      -1,    91,    -1,    92,    -1,    -1,   346,   348,    -1,    -1,
-     347,   349,    -1,   134,    -1,   349,    -1,    42,    -1,   350,
-      -1,   352,    -1,   351,    -1,    54,    -1,   345,    -1,   141,
-      -1,   156,    -1,    94,    -1,     4,    -1,    52,    -1,    38,
-      -1,    37,    -1,    98,    -1,    99,    -1,   306,    -1,    13,
-      -1,    11,    -1,    12,    -1,    14,    -1,    15,    -1,    10,
-      -1,    41,    -1,    43,    -1,    44,    -1,    45,    -1,     3,
-      -1,    46,    -1,    58,    -1,    50,    -1,     8,    -1,    39,
-      -1,    40,    -1,    53,    -1,    16,    -1,    60,    -1,    93,
-      -1,     5,    -1,     7,    -1,     6,    -1,    55,    -1,    56,
-      -1,    59,    -1,     9,    -1,    57,    -1,    97,    -1,    67,
-      -1,    66,    -1,    65,    -1,    68,    -1,   137,   346,   138,
-      -1,   153,   346,   154,    -1,   135,   346,   136,    -1,    95,
-     346,   136,    -1,    96,   346,   136,    -1
+     144,     0,    -1,   145,    -1,    -1,    -1,   145,   146,   147,
+      -1,   198,    -1,   196,    -1,   153,    -1,   150,    -1,   152,
+      -1,   149,    -1,   186,    -1,   259,    -1,   175,    -1,   155,
+      -1,   216,    -1,   148,    -1,   327,    -1,   289,   120,    -1,
+     120,    -1,   199,   155,    -1,   199,   216,    -1,   199,   183,
+      -1,   199,   148,    -1,    34,    12,   121,   145,   122,    -1,
+      40,   121,   375,   122,    -1,    -1,    40,   299,   151,   121,
+     145,   122,    -1,    40,   299,   123,   291,   120,    -1,   154,
+      -1,   199,   154,    -1,   161,   289,   120,    -1,   302,   161,
+     289,   120,    -1,   156,   300,   261,   120,    -1,   302,   156,
+     300,   261,   120,    -1,    -1,   158,   157,   121,   162,   122,
+      -1,    -1,   161,   289,   159,   168,    -1,    -1,   161,   160,
+     168,    -1,    20,    -1,    19,    -1,    21,    -1,    -1,    -1,
+     162,   163,   165,    -1,   162,   164,   124,    -1,    23,    -1,
+      24,    -1,    25,    -1,   196,    -1,   153,    -1,   167,    -1,
+     186,    -1,   259,    -1,   175,    -1,   155,    -1,   220,    -1,
+     166,    -1,   327,    -1,   119,   381,    -1,   289,   120,    -1,
+     120,    -1,   199,   155,    -1,   199,   220,    -1,    33,   184,
+      -1,    33,   199,   184,    -1,    33,   153,    -1,    33,   221,
+     237,    -1,    -1,   169,    -1,   124,   170,    -1,   171,    -1,
+     170,   125,   171,    -1,   289,    -1,    30,   173,   289,    -1,
+     174,   172,   289,    -1,    -1,    30,    -1,    -1,   174,    -1,
+      23,    -1,    24,    -1,    25,    -1,   176,   300,   261,   120,
+      -1,   302,   176,   300,   261,   120,    -1,    -1,   178,   121,
+     177,   179,   122,    -1,    22,   289,    -1,    22,    -1,    -1,
+     180,    -1,   181,    -1,   180,   125,    -1,   180,   125,   181,
+      -1,   298,    -1,    -1,   298,   123,   182,   355,    -1,   308,
+     292,   298,   123,   376,   120,    -1,   161,   289,   185,    -1,
+     302,   161,   289,   185,    -1,   161,   185,    -1,   302,   161,
+     185,    -1,   121,   375,   122,   376,   120,    -1,   124,   376,
+     120,    -1,   187,    -1,   302,   187,    -1,    39,   308,   195,
+     189,   120,    -1,    39,   156,   300,   188,   120,    -1,    39,
+     302,   156,   300,   188,   120,    -1,    39,   176,   300,   188,
+     120,    -1,    39,   302,   176,   300,   188,   120,    -1,   190,
+     189,    -1,    -1,   189,   125,   190,    -1,   265,   195,    -1,
+     268,    -1,   192,    -1,    -1,    -1,   279,   126,   193,   249,
+     127,   194,   275,    -1,   191,    -1,    41,   197,   120,    -1,
+     289,    -1,    38,   289,    -1,   292,   231,    -1,   292,   226,
+      -1,   295,   292,   231,    -1,   295,   292,   226,    -1,    41,
+      40,   289,   120,    -1,    36,   128,   129,    -1,    -1,    36,
+     128,   200,   201,   129,    -1,   203,    -1,    -1,   201,   125,
+     202,   203,    -1,    -1,    -1,   204,   314,   266,   205,   212,
+      -1,    -1,    -1,   206,   211,   266,   207,   212,    -1,    -1,
+      -1,    -1,   208,   199,    20,   209,   266,   210,   212,    -1,
+      20,    -1,    38,    -1,    -1,   213,    -1,    -1,   123,   214,
+     215,    -1,   363,    -1,   215,   363,    -1,   217,   237,    -1,
+     222,   237,    -1,   218,   237,    -1,   219,   237,    -1,   308,
+     233,    -1,   308,   292,   233,    -1,   292,   241,    -1,   302,
+     292,   241,    -1,   292,   223,    -1,   302,   292,   223,    -1,
+     308,   292,   227,    -1,   221,   237,    -1,   292,   231,   120,
+      -1,   302,   292,   231,   120,    -1,   308,   233,    -1,   222,
+      -1,   241,    -1,   302,   241,    -1,   223,    -1,   302,   223,
+      -1,   308,   227,    -1,    -1,    -1,   226,   126,   224,   249,
+     127,   225,   234,    -1,   232,   308,    -1,    -1,   229,   228,
+     234,    -1,    -1,   231,   126,   230,   249,   127,    -1,   232,
+     351,    -1,    35,    -1,   238,   234,    -1,    -1,   234,   235,
+      -1,    -1,    37,   236,   369,    -1,    26,    -1,   123,    18,
+      -1,   121,   375,   122,    -1,   120,    -1,    -1,   240,   126,
+     239,   249,   127,    -1,   298,    -1,   296,    -1,    -1,    -1,
+     244,   242,   246,   243,   234,    -1,    -1,   240,   126,   245,
+     249,   127,    -1,    -1,   124,   247,    -1,   248,    -1,   247,
+     125,   248,    -1,   289,   381,    -1,    -1,    -1,   250,   251,
+      -1,   253,    -1,    -1,   251,   125,   252,   253,    -1,   251,
+     125,    71,    -1,    -1,    -1,   254,   308,   266,   255,   256,
+      -1,    -1,   257,    -1,    -1,   123,   258,   355,    -1,   308,
+     260,   262,   120,    -1,   268,   256,    -1,    -1,   264,   262,
+      -1,    -1,    -1,   262,   125,   263,   264,    -1,   265,   260,
+      -1,    -1,   322,    -1,   278,   281,    -1,    -1,   270,   276,
+     127,   267,   272,    -1,   279,   281,    -1,    -1,   271,   277,
+     127,   269,   272,    -1,   126,    -1,    10,    -1,    11,    -1,
+      10,    -1,    11,    -1,    -1,    -1,    -1,   126,   273,   249,
+     127,   274,   275,    -1,   282,    -1,    -1,   275,    28,    -1,
+     275,    26,    -1,   275,    37,   381,    -1,   266,    -1,   322,
+     266,    -1,   268,    -1,   322,   268,    -1,    -1,   279,    -1,
+     298,    -1,   298,   124,   280,    -1,    15,    -1,    13,    -1,
+      14,    -1,    -1,   282,    -1,    -1,   283,   284,    -1,   285,
+      -1,   284,   285,    -1,    -1,   130,   286,   287,   131,    -1,
+      -1,    -1,   288,   355,    -1,   290,    -1,   291,    -1,   298,
+      -1,   296,    -1,   292,   290,    -1,   295,   290,    -1,   295,
+     291,    -1,   294,   295,    -1,   296,   295,    -1,   292,   294,
+     295,    -1,   292,   296,   295,    -1,    -1,   292,    36,   293,
+     296,   295,    -1,   299,    -1,    72,    -1,    -1,   299,   128,
+     297,   361,   129,    -1,     4,    -1,     5,    -1,     3,    -1,
+       9,    -1,     8,    -1,     6,    -1,     7,    -1,   132,     4,
+      -1,   132,     5,    -1,   132,     3,    -1,   132,     9,    -1,
+     132,     8,    -1,   132,     6,    -1,   132,     7,    -1,    86,
+      -1,    85,    -1,    88,    -1,    89,    -1,    90,    -1,    91,
+      -1,    92,    -1,    93,    -1,    94,    -1,    95,    -1,    96,
+      -1,    97,    -1,    87,    -1,     3,    -1,     5,    -1,     4,
+      -1,     9,    -1,     8,    -1,     6,    -1,     7,    -1,    -1,
+     300,   301,    -1,   303,    -1,   321,    -1,    39,    -1,    33,
+      -1,   303,    -1,   302,   303,    -1,   304,    -1,   305,    -1,
+     306,    -1,    28,    -1,    34,    -1,    34,    12,    -1,    29,
+      -1,    32,    -1,    30,    -1,    31,    -1,    26,    -1,    27,
+      -1,   306,    -1,   307,   306,    -1,   309,   265,    -1,    -1,
+     312,   310,   300,    -1,    -1,   302,   312,   311,   300,    -1,
+     319,    -1,    -1,    38,   313,   289,    -1,   296,    -1,   291,
+      -1,   161,   289,    -1,    22,   289,    -1,   315,   265,    -1,
+      -1,   318,   316,   300,    -1,    -1,   302,   312,   317,   300,
+      -1,   319,    -1,   296,    -1,   291,    -1,    19,   289,    -1,
+      21,   289,    -1,    22,   289,    -1,   321,    -1,   320,    -1,
+       6,    -1,     7,    -1,     8,    -1,     9,    -1,     3,    -1,
+       4,    -1,     5,    -1,    85,    -1,    86,    -1,    88,    -1,
+      89,    -1,    90,    -1,    91,    -1,    92,    -1,    93,    -1,
+      94,    -1,    95,    -1,    96,    -1,    97,    -1,    87,    -1,
+      74,    -1,    75,    -1,    76,    -1,    77,    -1,    82,    -1,
+      78,    -1,    79,    -1,    80,    -1,    81,    -1,    83,    -1,
+      84,    -1,   323,    -1,   326,    -1,   326,   323,    -1,   133,
+      -1,   134,    -1,    -1,   134,   325,   307,    -1,   324,    -1,
+     326,   324,    -1,    -1,    98,   126,   298,   125,   328,   308,
+     127,    -1,    -1,    -1,    -1,    99,   126,   329,   298,   125,
+     330,   308,   331,   127,    -1,    -1,   100,   126,   332,   298,
+     127,    -1,    -1,   101,   126,   333,   298,   127,    -1,    -1,
+      -1,   102,   126,   298,   125,   334,   308,   335,   125,   376,
+     127,    -1,    -1,   103,   126,   298,   125,   336,   308,   127,
+      -1,    -1,    -1,    -1,   104,   126,   337,   298,   125,   338,
+     308,   339,   127,    -1,   105,   126,   298,   125,   308,   127,
+      -1,    -1,   106,   126,   298,   125,   340,   308,   127,    -1,
+      -1,   110,   126,   298,   125,   341,   308,   127,    -1,    -1,
+     107,   126,   298,   125,   342,   308,   127,    -1,    -1,   111,
+     126,   298,   125,   343,   308,   127,    -1,    -1,   108,   126,
+     298,   125,   344,   308,   127,    -1,    -1,   112,   126,   298,
+     125,   345,   308,   127,    -1,    -1,   109,   126,   298,   125,
+     346,   308,   127,    -1,    -1,   113,   126,   298,   125,   347,
+     308,   127,    -1,    -1,   114,   126,   298,   125,   348,   308,
+     125,    13,   127,    -1,    -1,   115,   126,   298,   125,   349,
+     308,   125,    13,   127,    -1,   116,   126,   298,   127,    -1,
+     117,   126,   298,   127,    -1,   118,   126,   298,   125,   298,
+     350,   127,    -1,    -1,   125,    -1,   126,   127,    -1,   130,
+     131,    -1,    42,   130,   131,    -1,    43,   130,   131,    -1,
+     128,    -1,   129,    -1,   125,    -1,   123,    -1,   352,    -1,
+     135,    -1,   134,    -1,   136,    -1,   137,    -1,   138,    -1,
+     139,    -1,   132,    -1,   133,    -1,   140,    -1,   141,    -1,
+      42,    -1,    43,    -1,    48,    -1,    49,    -1,    50,    -1,
+      51,    -1,    52,    -1,    53,    -1,    54,    -1,    57,    -1,
+      58,    -1,    59,    -1,    60,    -1,    61,    -1,    55,    -1,
+      56,    -1,    62,    -1,    63,    -1,    64,    -1,    65,    -1,
+      66,    -1,    67,    -1,    68,    -1,    69,    -1,    70,    -1,
+      39,    -1,    38,    -1,    20,    -1,    19,    -1,    21,    -1,
+      36,    -1,    23,    -1,    25,    -1,    24,    -1,    26,    -1,
+      29,    -1,    32,    -1,    30,    -1,    34,    -1,    40,    -1,
+      35,    -1,    22,    -1,    37,    -1,    46,    -1,    45,    -1,
+      44,    -1,    47,    -1,    15,    -1,    13,    -1,    14,    -1,
+      16,    -1,    17,    -1,    12,    -1,    18,    -1,   358,    -1,
+     355,   358,    -1,   367,    -1,   369,    -1,   373,    -1,   352,
+      -1,   124,    -1,   142,    -1,    72,    -1,   353,    -1,   354,
+      -1,   321,    -1,   320,    -1,    -1,   357,   359,    -1,   356,
+      -1,   128,    -1,   129,    -1,   358,    -1,   123,    -1,   125,
+      -1,   359,    -1,   120,    -1,    -1,   361,   364,    -1,    -1,
+     362,   360,    -1,   365,    -1,   356,    -1,   363,    -1,   123,
+      -1,   125,    -1,    -1,   128,   366,   361,   129,    -1,    -1,
+     130,   368,   357,   131,    -1,    -1,   126,   370,   357,   127,
+      -1,    -1,    10,   371,   357,   127,    -1,    -1,    11,   372,
+     357,   127,    -1,    -1,   121,   374,   362,   122,    -1,    -1,
+     375,   377,    -1,    -1,   376,   378,    -1,   378,    -1,   120,
+      -1,   379,    -1,   381,    -1,   380,    -1,    72,    -1,    71,
+      -1,   352,    -1,   124,    -1,   142,    -1,   128,    -1,   129,
+      -1,   123,    -1,   125,    -1,   353,    -1,   354,    -1,   319,
+      -1,    73,    -1,   121,   375,   122,    -1,   130,   375,   131,
+      -1,   382,   375,   127,    -1,   126,    -1,    10,    -1,    11,
+      -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,  1332,  1332,  1333,  1332,  1337,  1338,  1339,  1340,  1341,
-    1342,  1343,  1344,  1345,  1346,  1347,  1348,  1349,  1350,  1351,
-    1352,  1353,  1354,  1355,  1356,  1357,  1358,  1364,  1370,  1370,
-    1372,  1378,  1378,  1380,  1380,  1382,  1382,  1384,  1384,  1386,
-    1387,  1387,  1389,  1389,  1391,  1393,  1395,  1394,  1397,  1400,
-    1401,  1402,  1403,  1404,  1405,  1406,  1407,  1408,  1409,  1410,
-    1412,  1413,  1414,  1416,  1417,  1418,  1419,  1420,  1422,  1422,
-    1424,  1424,  1426,  1427,  1428,  1429,  1436,  1437,  1438,  1448,
-    1448,  1450,  1450,  1453,  1453,  1453,  1455,  1456,  1458,  1459,
-    1460,  1460,  1462,  1462,  1462,  1462,  1462,  1464,  1465,  1465,
-    1469,  1469,  1473,  1473,  1478,  1478,  1479,  1481,  1481,  1482,
-    1482,  1483,  1483,  1484,  1484,  1485,  1486,  1492,  1494,  1495,
-    1496,  1497,  1498,  1500,  1501,  1502,  1508,  1531,  1532,  1533,
-    1535,  1542,  1543,  1544,  1551,  1552,  1552,  1558,  1559,  1559,
-    1562,  1572,  1580,  1580,  1592,  1593,  1595,  1595,  1595,  1602,
-    1604,  1610,  1612,  1613,  1614,  1615,  1616,  1617,  1618,  1619,
-    1620,  1622,  1623,  1625,  1626,  1627,  1632,  1633,  1634,  1641,
-    1642,  1650,  1650,  1650,  1652,  1653,  1656,  1657,  1658,  1668,
-    1672,  1667,  1684,  1684,  1693,  1694,  1693,  1701,  1701,  1710,
-    1711,  1720,  1730,  1736,  1736,  1739,  1738,  1743,  1744,  1743,
-    1751,  1751,  1758,  1758,  1760,  1760,  1762,  1762,  1764,  1766,
-    1775,  1775,  1781,  1781,  1781,  1784,  1785,  1786,  1786,  1789,
-    1791,  1789,  1820,  1844,  1844,  1846,  1846,  1848,  1848,  1855,
-    1856,  1857,  1859,  1910,  1911,  1913,  1914,  1914,  1917,  1917,
-    1918,  1918,  1922,  1923,  1923,  1937,  1938,  1938,  1951,  1952,
-    1954,  1957,  1959,  1962,  1962,  1964,  1965,  1965,  1967,  1970,
-    1971,  1975,  1976,  1979,  1979,  1981,  1983,  1983,  1985,  1985,
-    1987,  1987,  1989,  1989,  1991,  1992,  1998,  1999,  2000,  2001,
-    2002,  2003,  2004,  2005,  2006,  2009,  2010,  2011,  2012,  2013,
-    2014,  2015,  2016,  2017,  2018,  2021,  2022,  2029,  2030,  2031,
-    2032,  2034,  2035,  2037,  2041,  2042,  2044,  2045,  2047,  2048,
-    2049,  2051,  2053,  2054,  2056,  2058,  2058,  2062,  2062,  2065,
-    2065,  2068,  2068,  2072,  2073,  2073,  2076,  2076,  2078,  2079,
-    2080,  2081,  2082,  2083,  2084,  2085,  2086,  2088,  2093,  2099,
-    2099,  2099,  2099,  2099,  2100,  2100,  2116,  2117,  2118,  2123,
-    2124,  2136,  2137,  2140,  2141,  2142,  2143,  2144,  2147,  2148,
-    2151,  2152,  2153,  2154,  2155,  2156,  2157,  2160,  2161,  2162,
-    2163,  2164,  2165,  2166,  2167,  2168,  2169,  2170,  2171,  2172,
-    2173,  2174,  2175,  2176,  2177,  2178,  2179,  2180,  2181,  2183,
-    2184,  2186,  2187,  2189,  2190,  2192,  2193,  2195,  2196,  2198,
-    2199,  2205,  2206,  2206,  2212,  2212,  2214,  2215,  2215,  2220,
-    2221,  2221,  2222,  2222,  2226,  2227,  2227,  2228,  2230,  2228,
-    2250,  2251,  2252,  2253,  2255,  2256,  2259,  2260,  2261,  2262,
-    2263,  2264,  2265,  2275,  2275,  2285,  2286,  2286,  2285,  2295,
-    2295,  2305,  2305,  2314,  2314,  2314,  2347,  2346,  2357,  2358,
-    2358,  2357,  2367,  2385,  2385,  2390,  2390,  2395,  2395,  2400,
-    2400,  2405,  2405,  2410,  2410,  2415,  2415,  2420,  2420,  2425,
-    2425,  2442,  2442,  2456,  2493,  2531,  2588,  2589,  2590,  2591,
-    2592,  2594,  2595,  2595,  2596,  2596,  2597,  2597,  2598,  2598,
-    2599,  2599,  2600,  2600,  2601,  2602,  2603,  2604,  2605,  2606,
-    2607,  2608,  2609,  2610,  2611,  2612,  2613,  2614,  2615,  2616,
-    2617,  2618,  2619,  2620,  2621,  2622,  2623,  2624,  2625,  2626,
-    2627,  2633,  2633,  2634,  2634,  2636,  2636,  2638,  2638,  2638,
-    2638,  2638,  2639,  2639,  2639,  2639,  2639,  2639,  2640,  2640,
-    2640,  2640,  2640,  2641,  2641,  2641,  2641,  2641,  2642,  2642,
-    2642,  2642,  2642,  2642,  2643,  2643,  2643,  2643,  2643,  2643,
-    2643,  2644,  2644,  2644,  2644,  2644,  2644,  2645,  2645,  2645,
-    2645,  2645,  2645,  2646,  2646,  2646,  2646,  2648,  2649,  2650,
-    2650,  2650
+       0,  1460,  1460,  1462,  1464,  1463,  1474,  1475,  1476,  1477,
+    1478,  1479,  1480,  1481,  1482,  1483,  1484,  1485,  1486,  1487,
+    1488,  1491,  1492,  1493,  1494,  1501,  1508,  1509,  1509,  1513,
+    1520,  1521,  1524,  1525,  1528,  1529,  1532,  1532,  1546,  1546,
+    1548,  1548,  1552,  1553,  1554,  1556,  1558,  1557,  1566,  1570,
+    1571,  1572,  1575,  1576,  1577,  1578,  1579,  1580,  1581,  1582,
+    1583,  1584,  1585,  1586,  1587,  1590,  1591,  1594,  1595,  1596,
+    1597,  1599,  1600,  1603,  1606,  1607,  1610,  1612,  1614,  1618,
+    1619,  1622,  1623,  1626,  1627,  1628,  1639,  1640,  1644,  1644,
+    1657,  1658,  1660,  1661,  1664,  1665,  1666,  1669,  1670,  1670,
+    1678,  1681,  1682,  1683,  1684,  1687,  1688,  1696,  1697,  1700,
+    1701,  1703,  1705,  1707,  1711,  1713,  1714,  1717,  1720,  1721,
+    1724,  1725,  1724,  1729,  1763,  1766,  1767,  1768,  1770,  1772,
+    1774,  1778,  1785,  1788,  1787,  1805,  1807,  1806,  1811,  1813,
+    1811,  1815,  1817,  1815,  1819,  1820,  1822,  1819,  1833,  1834,
+    1836,  1837,  1840,  1840,  1850,  1851,  1859,  1860,  1861,  1862,
+    1865,  1868,  1869,  1870,  1873,  1874,  1875,  1878,  1879,  1880,
+    1883,  1884,  1885,  1886,  1889,  1890,  1891,  1895,  1899,  1894,
+    1911,  1915,  1915,  1926,  1925,  1934,  1938,  1941,  1950,  1951,
+    1954,  1954,  1955,  1956,  1964,  1965,  1969,  1968,  1976,  1977,
+    1985,  1986,  1985,  2004,  2004,  2007,  2008,  2011,  2012,  2015,
+    2021,  2022,  2022,  2025,  2026,  2026,  2028,  2032,  2034,  2032,
+    2058,  2059,  2062,  2062,  2070,  2073,  2132,  2133,  2135,  2136,
+    2136,  2139,  2142,  2143,  2147,  2148,  2148,  2167,  2168,  2168,
+    2186,  2187,  2189,  2193,  2195,  2198,  2199,  2200,  2199,  2205,
+    2207,  2208,  2209,  2210,  2213,  2214,  2218,  2219,  2223,  2224,
+    2227,  2228,  2231,  2232,  2233,  2236,  2237,  2240,  2240,  2243,
+    2244,  2247,  2247,  2250,  2251,  2251,  2258,  2259,  2262,  2263,
+    2266,  2268,  2270,  2274,  2276,  2278,  2280,  2282,  2282,  2287,
+    2290,  2293,  2293,  2308,  2309,  2310,  2311,  2312,  2313,  2314,
+    2315,  2316,  2317,  2318,  2319,  2320,  2321,  2322,  2323,  2324,
+    2325,  2326,  2327,  2328,  2329,  2330,  2331,  2332,  2333,  2334,
+    2341,  2342,  2343,  2344,  2345,  2346,  2347,  2354,  2355,  2358,
+    2359,  2361,  2362,  2365,  2366,  2369,  2370,  2371,  2374,  2375,
+    2376,  2377,  2380,  2381,  2382,  2385,  2386,  2389,  2390,  2399,
+    2402,  2402,  2404,  2404,  2408,  2409,  2409,  2411,  2413,  2415,
+    2417,  2421,  2424,  2424,  2426,  2426,  2430,  2431,  2433,  2435,
+    2437,  2439,  2443,  2444,  2447,  2448,  2449,  2450,  2451,  2452,
+    2453,  2454,  2455,  2456,  2457,  2458,  2459,  2460,  2461,  2462,
+    2463,  2464,  2465,  2466,  2469,  2470,  2471,  2472,  2473,  2474,
+    2475,  2476,  2477,  2478,  2479,  2499,  2500,  2501,  2504,  2507,
+    2508,  2508,  2523,  2524,  2541,  2541,  2551,  2552,  2552,  2551,
+    2561,  2561,  2571,  2571,  2580,  2580,  2580,  2613,  2612,  2623,
+    2624,  2624,  2623,  2633,  2651,  2651,  2656,  2656,  2661,  2661,
+    2666,  2666,  2671,  2671,  2676,  2676,  2681,  2681,  2686,  2686,
+    2691,  2691,  2708,  2708,  2722,  2759,  2797,  2834,  2835,  2842,
+    2843,  2844,  2845,  2846,  2847,  2848,  2849,  2850,  2853,  2854,
+    2855,  2856,  2857,  2858,  2859,  2860,  2861,  2862,  2863,  2864,
+    2865,  2866,  2867,  2868,  2869,  2870,  2871,  2872,  2873,  2874,
+    2875,  2876,  2877,  2878,  2879,  2880,  2881,  2882,  2883,  2884,
+    2885,  2886,  2887,  2890,  2891,  2892,  2893,  2894,  2895,  2896,
+    2897,  2898,  2899,  2900,  2901,  2902,  2903,  2904,  2905,  2906,
+    2907,  2908,  2909,  2910,  2911,  2914,  2915,  2916,  2917,  2918,
+    2919,  2920,  2927,  2928,  2931,  2932,  2933,  2934,  2965,  2965,
+    2966,  2967,  2968,  2969,  2970,  2993,  2994,  2996,  2997,  2998,
+    3000,  3001,  3002,  3004,  3005,  3007,  3008,  3010,  3011,  3014,
+    3015,  3018,  3019,  3020,  3024,  3023,  3037,  3037,  3041,  3041,
+    3043,  3043,  3045,  3045,  3049,  3049,  3054,  3055,  3057,  3058,
+    3061,  3062,  3065,  3066,  3067,  3068,  3069,  3070,  3071,  3071,
+    3071,  3071,  3071,  3071,  3072,  3072,  3073,  3074,  3077,  3080,
+    3083,  3086,  3086,  3086
 };
 #endif
 
@@ -2001,26 +2107,22 @@ static const yytype_uint16 yyrline[] =
    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
 static const char *const yytname[] =
 {
-  "$end", "error", "$undefined", "STRUCT", "CLASS", "PUBLIC", "PRIVATE",
-  "PROTECTED", "VIRTUAL", "ID", "STRING_LITERAL", "INT_LITERAL",
-  "HEX_LITERAL", "OCT_LITERAL", "FLOAT_LITERAL", "CHAR_LITERAL", "ZERO",
-  "FLOAT", "DOUBLE", "LONG_DOUBLE", "INT", "UNSIGNED_INT", "SHORT",
-  "UNSIGNED_SHORT", "LONG", "UNSIGNED_LONG", "LONG_LONG",
-  "UNSIGNED_LONG_LONG", "INT64__", "UNSIGNED_INT64__", "CHAR",
-  "SIGNED_CHAR", "UNSIGNED_CHAR", "VOID", "BOOL", "SSIZE_T", "SIZE_T",
-  "OSTREAM", "ISTREAM", "ENUM", "UNION", "CLASS_REF", "OTHER", "CONST",
-  "CONST_PTR", "CONST_EQUAL", "OPERATOR", "UNSIGNED", "SIGNED", "FRIEND",
-  "INLINE", "MUTABLE", "TEMPLATE", "TYPENAME", "TYPEDEF", "NAMESPACE",
-  "USING", "VTK_ID", "STATIC", "EXTERN", "VAR_FUNCTION", "VTK_LEGACY",
-  "NEW", "DELETE", "EXPLICIT", "STATIC_CAST", "DYNAMIC_CAST", "CONST_CAST",
+  "$end", "error", "$undefined", "ID", "VTK_ID", "QT_ID", "StdString",
+  "UnicodeString", "OSTREAM", "ISTREAM", "LP", "LA", "STRING_LITERAL",
+  "INT_LITERAL", "HEX_LITERAL", "OCT_LITERAL", "FLOAT_LITERAL",
+  "CHAR_LITERAL", "ZERO", "STRUCT", "CLASS", "UNION", "ENUM", "PUBLIC",
+  "PRIVATE", "PROTECTED", "CONST", "VOLATILE", "MUTABLE", "STATIC",
+  "VIRTUAL", "EXPLICIT", "INLINE", "FRIEND", "EXTERN", "OPERATOR",
+  "TEMPLATE", "THROW", "TYPENAME", "TYPEDEF", "NAMESPACE", "USING", "NEW",
+  "DELETE", "STATIC_CAST", "DYNAMIC_CAST", "CONST_CAST",
   "REINTERPRET_CAST", "OP_LSHIFT_EQ", "OP_RSHIFT_EQ", "OP_LSHIFT",
-  "OP_RSHIFT", "OP_ARROW_POINTER", "OP_ARROW", "OP_INCR", "OP_DECR",
-  "OP_PLUS_EQ", "OP_MINUS_EQ", "OP_TIMES_EQ", "OP_DIVIDE_EQ",
-  "OP_REMAINDER_EQ", "OP_AND_EQ", "OP_OR_EQ", "OP_XOR_EQ",
-  "OP_LOGIC_AND_EQ", "OP_LOGIC_OR_EQ", "OP_LOGIC_AND", "OP_LOGIC_OR",
-  "OP_LOGIC_EQ", "OP_LOGIC_NEQ", "OP_LOGIC_LEQ", "OP_LOGIC_GEQ",
-  "ELLIPSIS", "DOUBLE_COLON", "LP", "LA", "QT_ID", "StdString",
-  "UnicodeString", "IdType", "FloatType", "TypeInt8", "TypeUInt8",
+  "OP_RSHIFT", "OP_DOT_POINTER", "OP_ARROW_POINTER", "OP_ARROW", "OP_INCR",
+  "OP_DECR", "OP_PLUS_EQ", "OP_MINUS_EQ", "OP_TIMES_EQ", "OP_DIVIDE_EQ",
+  "OP_REMAINDER_EQ", "OP_AND_EQ", "OP_OR_EQ", "OP_XOR_EQ", "OP_LOGIC_AND",
+  "OP_LOGIC_OR", "OP_LOGIC_EQ", "OP_LOGIC_NEQ", "OP_LOGIC_LEQ",
+  "OP_LOGIC_GEQ", "ELLIPSIS", "DOUBLE_COLON", "OTHER", "VOID", "BOOL",
+  "FLOAT", "DOUBLE", "INT", "SHORT", "LONG", "INT64__", "CHAR", "SIGNED",
+  "UNSIGNED", "SSIZE_T", "SIZE_T", "IdType", "TypeInt8", "TypeUInt8",
   "TypeInt16", "TypeUInt16", "TypeInt32", "TypeUInt32", "TypeInt64",
   "TypeUInt64", "TypeFloat32", "TypeFloat64", "SetMacro", "GetMacro",
   "SetStringMacro", "GetStringMacro", "SetClampMacro", "SetObjectMacro",
@@ -2028,46 +2130,73 @@ static const char *const yytname[] =
   "SetVector4Macro", "SetVector6Macro", "GetVector2Macro",
   "GetVector3Macro", "GetVector4Macro", "GetVector6Macro",
   "SetVectorMacro", "GetVectorMacro", "ViewportCoordinateMacro",
-  "WorldCoordinateMacro", "TypeMacro", "VTK_BYTE_SWAP_DECL", "';'", "'('",
-  "')'", "'{'", "'}'", "'<'", "'>'", "':'", "','", "'='", "'-'", "'+'",
-  "'~'", "'*'", "'/'", "'%'", "'&'", "'|'", "'^'", "'['", "']'", "'!'",
-  "'.'", "$accept", "strt", "$@1", "file_item", "extern", "namespace",
-  "$@2", "class_def", "$@3", "$@4", "$@5", "$@6", "$@7", "$@8",
-  "class_def_body", "$@9", "class_def_item", "optional_scope",
-  "scope_list", "scope_list_item", "scope_type", "enum_def", "$@10",
-  "$@11", "enum_list", "enum_item", "integer_value", "integer_literal",
-  "integer_expression", "$@12", "$@13", "$@14", "math_unary_op",
-  "math_binary_op", "template_internal_class", "internal_class",
-  "internal_class_body", "type_def", "typedef_start", "using", "template",
-  "$@15", "template_args", "$@16", "template_arg", "$@17",
-  "class_or_typename", "maybe_template_id", "$@18", "legacy_function",
-  "legacy_method", "function", "scoped_method", "scope", "method",
-  "explicit_mod", "scoped_operator", "operator", "typecast_op_func",
-  "$@19", "$@20", "op_func", "$@21", "op_sig", "$@22", "$@23", "func",
-  "$@24", "func_trailer", "func_body", "func_sig", "$@25", "$@26", "@27",
-  "constructor", "$@28", "constructor_sig", "$@29", "maybe_initializers",
-  "more_initializers", "initializer", "destructor", "destructor_sig",
-  "$@30", "args_list", "$@31", "more_args", "$@32", "arg", "$@33", "$@34",
-  "maybe_indirect_id", "maybe_var_assign", "var_assign", "$@35", "var",
-  "var_id_maybe_assign", "maybe_vars", "maybe_other_vars", "$@36",
-  "other_var", "$@37", "$@38", "maybe_complex_var_id", "$@39",
-  "complex_var_id", "$@40", "p_or_lp_or_la", "lp_or_la",
-  "maybe_func_const", "maybe_array_or_args", "$@41",
-  "maybe_indirect_maybe_var_id", "maybe_indirect_var_id", "maybe_var_id",
-  "var_id", "maybe_var_array", "var_array", "$@42", "array", "$@43",
-  "more_array", "array_size", "any_id", "sized_type_id", "special_type_id",
-  "storage_type", "static_mod", "type", "type_red", "const_mod",
-  "type_red1", "$@44", "templated_id", "$@45", "$@46", "$@47",
-  "template_params", "$@48", "template_param", "maybe_scoped_id",
-  "scoped_id", "class_id", "type_indirection", "pointers",
-  "pointer_or_const_pointer", "type_red2", "type_simple", "type_id",
-  "type_primitive", "value", "$@49", "maybe_comma", "more_values", "$@50",
-  "literal", "$@51", "$@52", "$@53", "$@54", "$@55", "any_cast",
-  "string_literal", "literal2", "macro", "$@56", "$@57", "$@58", "$@59",
-  "$@60", "$@61", "$@62", "$@63", "$@64", "$@65", "$@66", "$@67", "$@68",
-  "$@69", "$@70", "$@71", "$@72", "$@73", "$@74", "$@75", "$@76", "$@77",
-  "op_token", "op_token_no_delim", "maybe_other", "maybe_other_no_semi",
-  "other_stuff", "other_stuff_no_semi", "braces", "brackets", "parens", 0
+  "WorldCoordinateMacro", "TypeMacro", "VTK_BYTE_SWAP_DECL", "';'", "'{'",
+  "'}'", "'='", "':'", "','", "'('", "')'", "'<'", "'>'", "'['", "']'",
+  "'~'", "'&'", "'*'", "'%'", "'/'", "'-'", "'+'", "'!'", "'|'", "'^'",
+  "'.'", "$accept", "translation_unit", "opt_declaration_seq", "$@1",
+  "declaration", "template_declaration", "linkage_specification",
+  "namespace_definition", "$@2", "namespace_alias_definition",
+  "forward_declaration", "simple_forward_declaration", "class_definition",
+  "class_specifier", "$@3", "class_head", "$@4", "$@5", "class_key",
+  "member_specification", "$@6", "member_access_specifier",
+  "member_declaration", "template_member_declaration",
+  "friend_declaration", "opt_base_clause", "base_clause",
+  "base_specifier_list", "base_specifier", "opt_virtual",
+  "opt_access_specifier", "access_specifier", "enum_definition",
+  "enum_specifier", "$@7", "enum_head", "opt_enumerator_list",
+  "enumerator_list", "enumerator_definition", "$@8",
+  "nested_variable_initialization", "ignored_class", "ignored_class_body",
+  "typedef_declaration", "basic_typedef_declaration",
+  "typedef_declarator_list", "typedef_declarator_list_cont",
+  "typedef_declarator", "typedef_direct_declarator",
+  "function_direct_declarator", "$@9", "$@10", "typedef_declarator_id",
+  "using_declaration", "using_id", "using_directive", "template_head",
+  "$@11", "template_parameter_list", "$@12", "template_parameter", "$@13",
+  "$@14", "$@15", "$@16", "$@17", "$@18", "$@19", "class_or_typename",
+  "opt_template_parameter_initializer", "template_parameter_initializer",
+  "$@20", "template_parameter_value", "function_definition",
+  "function_declaration", "nested_method_declaration",
+  "nested_operator_declaration", "method_definition", "method_declaration",
+  "operator_declaration", "conversion_function", "$@21", "$@22",
+  "conversion_function_id", "operator_function_nr", "$@23",
+  "operator_function_sig", "$@24", "operator_function_id", "operator_sig",
+  "function_nr", "function_trailer_clause", "function_trailer", "$@25",
+  "function_body", "function_sig", "$@26", "function_name",
+  "structor_declaration", "$@27", "$@28", "structor_sig", "$@29",
+  "opt_ctor_initializer", "mem_initializer_list", "mem_initializer",
+  "parameter_declaration_clause", "$@30", "parameter_list", "$@31",
+  "parameter_declaration", "$@32", "$@33", "opt_initializer",
+  "initializer", "$@34", "variable_declaration", "init_declarator_id",
+  "opt_declarator_list", "declarator_list_cont", "$@35", "init_declarator",
+  "opt_ptr_operator_seq", "direct_abstract_declarator", "$@36",
+  "direct_declarator", "$@37", "p_or_lp_or_la", "lp_or_la",
+  "opt_array_or_parameters", "$@38", "$@39", "function_qualifiers",
+  "abstract_declarator", "declarator", "opt_declarator_id",
+  "declarator_id", "bitfield_size", "opt_array_decorator_seq",
+  "array_decorator_seq", "$@40", "array_decorator_seq_impl",
+  "array_decorator", "$@41", "array_size_specifier", "$@42",
+  "id_expression", "unqualified_id", "qualified_id",
+  "nested_name_specifier", "$@43", "identifier_sig", "scope_operator_sig",
+  "template_id", "$@44", "simple_id", "identifier",
+  "opt_decl_specifier_seq", "decl_specifier2", "decl_specifier_seq",
+  "decl_specifier", "storage_class_specifier", "function_specifier",
+  "cv_qualifier", "cv_qualifier_seq", "store_type", "store_type_specifier",
+  "$@45", "$@46", "type_specifier", "$@47", "tparam_type",
+  "tparam_type_specifier2", "$@48", "$@49", "tparam_type_specifier",
+  "simple_type_specifier", "type_name", "primitive_type",
+  "ptr_operator_seq", "reference", "pointer", "$@50", "pointer_seq",
+  "declaration_macro", "$@51", "$@52", "$@53", "$@54", "$@55", "$@56",
+  "$@57", "$@58", "$@59", "$@60", "$@61", "$@62", "$@63", "$@64", "$@65",
+  "$@66", "$@67", "$@68", "$@69", "$@70", "$@71", "$@72", "opt_comma",
+  "operator_id", "operator_id_no_delim", "keyword", "literal",
+  "constant_expression", "common_bracket_item", "any_bracket_contents",
+  "bracket_pitem", "any_bracket_item", "braces_item",
+  "angle_bracket_contents", "braces_contents", "angle_bracket_pitem",
+  "angle_bracket_item", "angle_brackets_sig", "$@73", "brackets_sig",
+  "$@74", "parentheses_sig", "$@75", "$@76", "$@77", "braces_sig", "$@78",
+  "ignored_items", "ignored_expression", "ignored_item",
+  "ignored_item_no_semi", "ignored_braces", "ignored_brackets",
+  "ignored_parentheses", "ignored_left_parenthesis", 0
 };
 #endif
 
@@ -2088,139 +2217,142 @@ static const yytype_uint16 yytoknum[] =
      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
      355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
      365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
-     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
-     385,   386,   387,   388,    59,    40,    41,   123,   125,    60,
-      62,    58,    44,    61,    45,    43,   126,    42,    47,    37,
-      38,   124,    94,    91,    93,    33,    46
+      59,   123,   125,    61,    58,    44,    40,    41,    60,    62,
+      91,    93,   126,    38,    42,    37,    47,    45,    43,    33,
+     124,    94,    46
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint16 yyr1[] =
 {
-       0,   157,   158,   159,   158,   160,   160,   160,   160,   160,
-     160,   160,   160,   160,   160,   160,   160,   160,   160,   160,
-     160,   160,   160,   160,   160,   160,   160,   161,   163,   162,
-     162,   165,   164,   166,   164,   167,   164,   168,   164,   164,
-     169,   164,   170,   164,   164,   171,   172,   171,   171,   173,
-     173,   173,   173,   173,   173,   173,   173,   173,   173,   173,
-     173,   173,   173,   173,   173,   173,   173,   173,   174,   174,
-     175,   175,   176,   176,   176,   176,   177,   177,   177,   179,
-     178,   180,   178,   181,   181,   181,   182,   182,   183,   183,
-     183,   183,   184,   184,   184,   184,   184,   185,   186,   185,
-     187,   185,   188,   185,   189,   189,   189,   190,   190,   190,
-     190,   190,   190,   190,   190,   190,   190,   191,   192,   192,
-     192,   192,   192,   193,   193,   193,   194,   194,   194,   194,
-     195,   196,   196,   196,   197,   198,   197,   199,   200,   199,
-     201,   201,   202,   201,   203,   203,   204,   205,   204,   206,
-     207,   208,   209,   209,   209,   209,   209,   209,   209,   209,
-     209,   210,   210,   211,   211,   211,   211,   211,   211,   211,
-     211,   212,   212,   212,   213,   213,   214,   214,   214,   216,
-     217,   215,   219,   218,   221,   222,   220,   224,   223,   225,
-     225,   225,   225,   226,   226,   228,   227,   229,   230,   227,
-     232,   231,   234,   233,   235,   235,   236,   236,   237,   238,
-     240,   239,   241,   242,   241,   243,   243,   244,   243,   246,
-     247,   245,   245,   248,   248,   249,   249,   251,   250,   252,
-     252,   252,   253,   254,   254,   255,   256,   255,   258,   257,
-     259,   257,   260,   261,   260,   262,   263,   262,   264,   264,
-     264,   265,   265,   266,   266,   267,   268,   267,   267,   269,
-     269,   270,   270,   271,   271,   272,   273,   273,   275,   274,
-     277,   276,   278,   278,   279,   279,   280,   280,   280,   280,
-     280,   280,   280,   280,   280,   281,   281,   281,   281,   281,
-     281,   281,   281,   281,   281,   282,   282,   283,   283,   283,
-     283,   283,   283,   283,   284,   284,   285,   285,   286,   286,
-     286,   287,   288,   288,   288,   289,   288,   291,   290,   292,
-     290,   293,   290,   294,   295,   294,   296,   296,   297,   297,
-     297,   297,   297,   297,   297,   297,   297,   298,   298,   299,
-     299,   299,   299,   299,   299,   299,   300,   300,   300,   301,
-     301,   302,   302,   303,   303,   303,   303,   303,   304,   304,
-     305,   305,   305,   305,   305,   305,   305,   306,   306,   306,
-     306,   306,   306,   306,   306,   306,   306,   306,   306,   306,
-     306,   306,   306,   306,   306,   306,   306,   306,   306,   306,
-     306,   306,   306,   306,   306,   306,   306,   306,   306,   306,
-     306,   307,   308,   307,   309,   309,   310,   311,   310,   312,
-     313,   312,   314,   312,   312,   315,   312,   316,   317,   312,
-     318,   318,   318,   318,   319,   319,   320,   320,   320,   320,
-     320,   320,   320,   322,   321,   323,   324,   325,   321,   326,
-     321,   327,   321,   328,   329,   321,   330,   321,   331,   332,
-     333,   321,   321,   334,   321,   335,   321,   336,   321,   337,
-     321,   338,   321,   339,   321,   340,   321,   341,   321,   342,
-     321,   343,   321,   321,   321,   321,   344,   344,   344,   344,
-     344,   345,   345,   345,   345,   345,   345,   345,   345,   345,
-     345,   345,   345,   345,   345,   345,   345,   345,   345,   345,
-     345,   345,   345,   345,   345,   345,   345,   345,   345,   345,
-     345,   345,   345,   345,   345,   345,   345,   345,   345,   345,
-     345,   346,   346,   347,   347,   348,   348,   349,   349,   349,
-     349,   349,   349,   349,   349,   349,   349,   349,   349,   349,
-     349,   349,   349,   349,   349,   349,   349,   349,   349,   349,
-     349,   349,   349,   349,   349,   349,   349,   349,   349,   349,
-     349,   349,   349,   349,   349,   349,   349,   349,   349,   349,
-     349,   349,   349,   349,   349,   349,   349,   350,   351,   352,
-     352,   352
+       0,   143,   144,   145,   146,   145,   147,   147,   147,   147,
+     147,   147,   147,   147,   147,   147,   147,   147,   147,   147,
+     147,   148,   148,   148,   148,   149,   150,   151,   150,   152,
+     153,   153,   154,   154,   155,   155,   157,   156,   159,   158,
+     160,   158,   161,   161,   161,   162,   163,   162,   162,   164,
+     164,   164,   165,   165,   165,   165,   165,   165,   165,   165,
+     165,   165,   165,   165,   165,   166,   166,   167,   167,   167,
+     167,   168,   168,   169,   170,   170,   171,   171,   171,   172,
+     172,   173,   173,   174,   174,   174,   175,   175,   177,   176,
+     178,   178,   179,   179,   180,   180,   180,   181,   182,   181,
+     183,   184,   184,   184,   184,   185,   185,   186,   186,   187,
+     187,   187,   187,   187,   188,   189,   189,   190,   191,   191,
+     193,   194,   192,   195,   196,   197,   197,   197,   197,   197,
+     197,   198,   199,   200,   199,   201,   202,   201,   204,   205,
+     203,   206,   207,   203,   208,   209,   210,   203,   211,   211,
+     212,   212,   214,   213,   215,   215,   216,   216,   216,   216,
+     217,   218,   218,   218,   219,   219,   219,   220,   220,   220,
+     221,   221,   221,   221,   222,   222,   222,   224,   225,   223,
+     226,   228,   227,   230,   229,   231,   232,   233,   234,   234,
+     236,   235,   235,   235,   237,   237,   239,   238,   240,   240,
+     242,   243,   241,   245,   244,   246,   246,   247,   247,   248,
+     249,   250,   249,   251,   252,   251,   251,   254,   255,   253,
+     256,   256,   258,   257,   259,   260,   261,   261,   262,   263,
+     262,   264,   265,   265,   266,   267,   266,   268,   269,   268,
+     270,   270,   270,   271,   271,   272,   273,   274,   272,   272,
+     275,   275,   275,   275,   276,   276,   277,   277,   278,   278,
+     279,   279,   280,   280,   280,   281,   281,   283,   282,   284,
+     284,   286,   285,   287,   288,   287,   289,   289,   290,   290,
+     291,   291,   291,   292,   292,   292,   292,   293,   292,   294,
+     295,   297,   296,   298,   298,   298,   298,   298,   298,   298,
+     298,   298,   298,   298,   298,   298,   298,   298,   298,   298,
+     298,   298,   298,   298,   298,   298,   298,   298,   298,   298,
+     299,   299,   299,   299,   299,   299,   299,   300,   300,   301,
+     301,   301,   301,   302,   302,   303,   303,   303,   304,   304,
+     304,   304,   305,   305,   305,   306,   306,   307,   307,   308,
+     310,   309,   311,   309,   312,   313,   312,   312,   312,   312,
+     312,   314,   316,   315,   317,   315,   318,   318,   318,   318,
+     318,   318,   319,   319,   320,   320,   320,   320,   320,   320,
+     320,   320,   320,   320,   320,   320,   320,   320,   320,   320,
+     320,   320,   320,   320,   321,   321,   321,   321,   321,   321,
+     321,   321,   321,   321,   321,   322,   322,   322,   323,   324,
+     325,   324,   326,   326,   328,   327,   329,   330,   331,   327,
+     332,   327,   333,   327,   334,   335,   327,   336,   327,   337,
+     338,   339,   327,   327,   340,   327,   341,   327,   342,   327,
+     343,   327,   344,   327,   345,   327,   346,   327,   347,   327,
+     348,   327,   349,   327,   327,   327,   327,   350,   350,   351,
+     351,   351,   351,   351,   351,   351,   351,   351,   352,   352,
+     352,   352,   352,   352,   352,   352,   352,   352,   352,   352,
+     352,   352,   352,   352,   352,   352,   352,   352,   352,   352,
+     352,   352,   352,   352,   352,   352,   352,   352,   352,   352,
+     352,   352,   352,   353,   353,   353,   353,   353,   353,   353,
+     353,   353,   353,   353,   353,   353,   353,   353,   353,   353,
+     353,   353,   353,   353,   353,   354,   354,   354,   354,   354,
+     354,   354,   355,   355,   356,   356,   356,   356,   356,   356,
+     356,   356,   356,   356,   356,   357,   357,   358,   358,   358,
+     359,   359,   359,   360,   360,   361,   361,   362,   362,   363,
+     363,   364,   364,   364,   366,   365,   368,   367,   370,   369,
+     371,   369,   372,   369,   374,   373,   375,   375,   376,   376,
+     377,   377,   378,   378,   378,   378,   378,   378,   378,   378,
+     378,   378,   378,   378,   378,   378,   378,   378,   379,   380,
+     381,   382,   382,   382
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
 static const yytype_uint8 yyr2[] =
 {
-       0,     2,     0,     0,     3,     1,     3,     1,     1,     1,
-       1,     3,     4,     1,     2,     3,     2,     2,     2,     3,
-       2,     1,     2,     4,     4,     4,     1,     5,     0,     6,
-       4,     0,     7,     0,    10,     0,     7,     0,    10,     4,
-       0,     7,     0,    10,     4,     0,     0,     3,     3,     1,
-       3,     1,     1,     3,     4,     2,     2,     1,     2,     3,
-       3,     2,     3,     3,     2,     5,     1,     1,     0,     2,
-       1,     3,     1,     2,     2,     2,     1,     1,     1,     0,
-       6,     0,     5,     0,     1,     3,     1,     3,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     0,     3,
-       0,     4,     0,     4,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     2,     3,     3,
-       2,     3,     2,     1,     5,     3,     4,     4,     4,     3,
-       1,     4,     4,     3,     3,     0,     5,     1,     0,     4,
-       2,     2,     0,     3,     1,     1,     0,     0,     3,     4,
-       4,     2,     3,     4,     5,     3,     4,     6,     7,     5,
-       6,     2,     3,     2,     3,     3,     1,     2,     2,     2,
-       3,     1,     2,     2,     3,     3,     1,     2,     3,     0,
-       0,     8,     0,     3,     0,     0,     7,     0,     3,     0,
-       2,     2,     1,     1,     3,     0,     5,     0,     0,     9,
-       0,     3,     0,     5,     0,     3,     0,     3,     4,     1,
-       0,     5,     0,     0,     2,     1,     1,     0,     4,     0,
-       0,     5,     1,     1,     2,     0,     1,     0,     3,     4,
-       4,     3,     2,     0,     2,     0,     0,     4,     0,     2,
-       0,     3,     2,     0,     5,     2,     0,     5,     1,     1,
-       1,     1,     1,     0,     1,     0,     0,     5,     1,     1,
-       2,     1,     2,     0,     1,     1,     0,     1,     0,     2,
-       0,     5,     0,     1,     0,     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,
-       3,     2,     2,     3,     1,     2,     1,     2,     1,     2,
-       2,     1,     1,     1,     1,     0,     3,     0,     5,     0,
-       5,     0,     5,     1,     0,     4,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     3,     3,     1,
-       1,     1,     1,     1,     1,     1,     1,     2,     1,     1,
-       2,     1,     1,     1,     2,     2,     2,     2,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       0,     2,     1,     0,     0,     3,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     2,
+       1,     2,     2,     2,     2,     5,     4,     0,     6,     5,
+       1,     2,     3,     4,     4,     5,     0,     5,     0,     4,
+       0,     3,     1,     1,     1,     0,     0,     3,     3,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     2,     2,     1,     2,     2,     2,     3,     2,
+       3,     0,     1,     2,     1,     3,     1,     3,     3,     0,
+       1,     0,     1,     1,     1,     1,     4,     5,     0,     5,
+       2,     1,     0,     1,     1,     2,     3,     1,     0,     4,
+       6,     3,     4,     2,     3,     5,     3,     1,     2,     5,
+       5,     6,     5,     6,     2,     0,     3,     2,     1,     1,
+       0,     0,     7,     1,     3,     1,     2,     2,     2,     3,
+       3,     4,     3,     0,     5,     1,     0,     4,     0,     0,
+       5,     0,     0,     5,     0,     0,     0,     7,     1,     1,
+       0,     1,     0,     3,     1,     2,     2,     2,     2,     2,
+       2,     3,     2,     3,     2,     3,     3,     2,     3,     4,
+       2,     1,     1,     2,     1,     2,     2,     0,     0,     7,
+       2,     0,     3,     0,     5,     2,     1,     2,     0,     2,
+       0,     3,     1,     2,     3,     1,     0,     5,     1,     1,
+       0,     0,     5,     0,     5,     0,     2,     1,     3,     2,
+       0,     0,     2,     1,     0,     4,     3,     0,     0,     5,
+       0,     1,     0,     3,     4,     2,     0,     2,     0,     0,
+       4,     2,     0,     1,     2,     0,     5,     2,     0,     5,
+       1,     1,     1,     1,     1,     0,     0,     0,     6,     1,
+       0,     2,     2,     3,     1,     2,     1,     2,     0,     1,
+       1,     3,     1,     1,     1,     0,     1,     0,     2,     1,
+       2,     0,     4,     0,     0,     2,     1,     1,     1,     1,
+       2,     2,     2,     2,     2,     3,     3,     0,     5,     1,
+       1,     0,     5,     1,     1,     1,     1,     1,     1,     1,
+       2,     2,     2,     2,     2,     2,     2,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     0,     2,     1,
+       1,     1,     1,     1,     2,     1,     1,     1,     1,     1,
+       2,     1,     1,     1,     1,     1,     1,     1,     2,     2,
+       0,     3,     0,     4,     1,     0,     3,     1,     1,     2,
+       2,     2,     0,     3,     0,     4,     1,     1,     1,     2,
+       2,     2,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     0,     6,     0,     1,     0,     0,     4,     1,
-       0,     3,     0,     3,     1,     0,     4,     0,     0,     9,
-       1,     1,     1,     1,     1,     2,     1,     1,     1,     1,
-       1,     1,     1,     0,     7,     0,     0,     0,     9,     0,
-       5,     0,     5,     0,     0,    10,     0,     7,     0,     0,
-       0,     9,     6,     0,     7,     0,     7,     0,     7,     0,
-       7,     0,     7,     0,     7,     0,     7,     0,     7,     0,
-       9,     0,     9,     4,     4,     7,     2,     2,     3,     3,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     2,     1,     1,
+       0,     3,     1,     2,     0,     7,     0,     0,     0,     9,
+       0,     5,     0,     5,     0,     0,    10,     0,     7,     0,
+       0,     0,     9,     6,     0,     7,     0,     7,     0,     7,
+       0,     7,     0,     7,     0,     7,     0,     7,     0,     7,
+       0,     9,     0,     9,     4,     4,     7,     0,     1,     2,
+       2,     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,     1,
-       1,     0,     2,     0,     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,     1,     1,     1,     1,
+       1,     1,     1,     2,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     0,     2,     1,     1,     1,
+       1,     1,     1,     1,     1,     0,     2,     0,     2,     1,
+       1,     1,     1,     1,     0,     4,     0,     4,     0,     4,
+       0,     4,     0,     4,     0,     4,     0,     2,     0,     2,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     3,     3,     3,
-       3,     3
+       1,     1,     1,     1,     1,     1,     1,     1,     3,     3,
+       3,     1,     1,     1
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -2228,1803 +2360,1513 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       2,     3,     1,     0,     0,     0,     0,   364,   383,   384,
-     385,   389,   390,   391,   392,   393,   394,   395,   396,   397,
-     398,   386,   387,   388,   367,   368,   369,   370,   362,   363,
-      81,     0,    13,   311,     0,   400,   399,     0,     0,     0,
-     315,   130,     0,     0,   365,   304,     0,   235,     0,   366,
-     360,   361,   381,   382,   371,   372,   373,   374,   375,   376,
-     377,   378,   379,   380,     0,     0,     0,     0,     0,     0,
+       3,     0,     4,     1,     0,   378,   379,   380,   374,   375,
+     376,   377,    43,    42,    44,    91,   345,   346,   338,   341,
+     343,   344,   342,   339,   186,     0,   355,     0,     0,     0,
+     290,   394,   395,   396,   397,   399,   400,   401,   402,   398,
+     403,   404,   381,   382,   393,   383,   384,   385,   386,   387,
+     388,   389,   390,   391,   392,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    26,     4,     9,     8,   238,
-     238,    10,     0,     7,     0,     0,     0,     0,     0,     0,
-     176,     5,     0,     0,   297,   306,     0,   308,   313,   314,
-       0,   312,   353,   359,   358,    21,   364,   362,   363,   365,
-     366,   360,   361,   295,   296,   285,   286,   287,   288,   289,
-     290,   291,   292,   293,   294,   521,    35,   283,   284,   355,
-      31,   354,     0,     0,   364,     0,     0,   365,   366,     0,
-       0,   521,   319,     0,    79,   357,   521,    40,   356,     0,
-     304,     0,     0,     0,   301,     0,   298,   135,     0,   339,
-     343,   342,   341,   340,   344,   345,   521,    28,   329,   332,
-     331,     0,     0,   328,   330,   333,   334,   335,     0,   336,
-     521,   317,   305,   235,     0,   299,     0,     0,   521,   321,
-       0,   435,   439,   441,     0,     0,   448,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    20,     0,     5,    17,
+      11,     9,    10,     8,    30,    15,   327,    36,    40,    14,
+     327,     0,    12,   107,     7,     6,     0,    16,     0,     0,
+       0,     0,   174,     0,     0,    13,     0,   276,   358,     0,
+       0,     0,   357,   278,   289,     0,   333,   335,   336,   337,
+       0,   232,   350,   354,   373,   372,    18,   295,   293,   294,
+     298,   299,   297,   296,   308,   307,   319,   309,   310,   311,
+     312,   313,   314,   315,   316,   317,   318,   360,   277,     0,
+     279,   340,   133,     0,   378,   379,   380,   374,   375,   376,
+     377,   339,   381,   382,   393,   383,   384,   385,   386,   387,
+     388,   389,   390,   391,   392,   327,    40,   327,   358,   357,
+       0,     0,   320,   322,   321,   325,   326,   324,   323,   576,
+      27,     0,     0,     0,   125,     0,     0,     0,   416,   420,
+     422,     0,     0,   429,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   302,   300,
+     301,   305,   306,   304,   303,   232,     0,    71,   359,   232,
+      88,     0,    24,    31,    21,    23,     0,    22,     0,     0,
+     195,   576,   156,   158,   159,   157,   177,     0,     0,   180,
+      19,   287,   164,     0,   162,   200,   280,     0,   279,   278,
+     283,   281,   282,   284,   291,   327,    40,   327,   108,   175,
+       0,   334,   352,   243,   244,   176,   181,     0,     0,   160,
+     188,     0,   228,   220,     0,   265,     0,   199,   260,   408,
+     409,   349,   233,   405,   412,   406,   327,   279,     3,   132,
+     138,   356,   340,   232,   359,   232,   327,   327,   295,   293,
+     294,   298,   299,   297,   296,   123,   119,   115,   118,   265,
+     260,     0,     0,     0,   126,     0,   124,   128,   127,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   352,   351,   346,     0,   235,     0,   240,   348,   349,
-       0,     0,     0,     0,     0,   238,     0,     0,     0,   193,
-     521,    20,    17,    18,    16,    14,   278,   280,   279,     0,
-     276,   251,   252,   277,   281,   282,     0,   177,   182,   151,
-     187,   235,   225,     0,   266,   265,     0,   302,   307,   309,
-     310,     0,     0,    22,     0,     0,    68,     0,    68,   364,
-     362,   363,   365,   366,   360,   361,   178,     0,     0,     0,
-      83,     0,     0,     0,    68,     0,   179,   303,     0,   134,
-     142,   316,     0,     0,     0,     0,   133,     0,     0,     0,
-       2,   300,   231,   236,     0,     0,     0,     0,   278,   280,
-     279,   276,   277,   281,   282,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    11,   234,   239,   265,
-       0,   347,   350,     6,   129,     0,   223,     0,     0,     0,
-       0,    19,    15,     0,     0,   495,   496,   497,   498,   499,
-     500,   501,   502,   508,   509,   503,   504,   505,   506,   507,
-     510,   511,   512,   513,   514,   515,   516,   517,   518,   519,
-     520,     0,   489,   490,   488,   481,   484,   485,   487,   482,
-     483,   494,   491,   492,   493,     0,   486,   184,   480,   175,
-     152,     0,   189,   189,     0,   227,   232,   226,   261,     0,
-       0,   245,   267,   272,   195,   197,   161,   338,   329,   332,
-     331,   328,   330,   333,   334,     0,   174,   155,   200,     0,
-     337,     0,   553,   536,   564,   566,   565,   557,   570,   548,
-     544,   545,   543,   546,   547,   561,   539,   538,   558,   559,
-     549,   527,   550,   551,   552,   554,   556,   537,   560,   531,
-     567,   568,   571,   555,   569,   562,   495,   496,   575,   574,
-     573,   576,   563,   535,   521,   521,   572,   540,   541,   525,
-     521,   521,    39,   533,   521,   534,   542,   532,   522,   526,
-     528,   530,   529,    93,    95,    94,    96,    92,   327,   326,
-       0,   323,     0,     0,     0,     0,    23,     0,     0,    84,
-      86,    83,    44,     0,     0,   213,     0,   156,     0,   144,
-     145,     0,   137,     0,   146,   146,    30,     2,   132,   131,
-      24,     0,   230,     3,   238,   149,    25,     0,   433,     0,
-       0,     0,   443,   446,     0,     0,   453,   457,   461,   465,
-     455,   459,   463,   467,   469,   471,   473,   474,     0,   241,
-     127,   224,   128,   126,    12,   194,     0,     0,   476,   477,
-       0,   162,   192,     0,     0,   183,   188,   229,     0,   246,
-     262,   269,     0,   213,     0,   153,   209,     0,   204,   202,
-       0,     0,     0,     0,     0,     0,    37,   324,     0,     0,
-       0,    69,    70,    72,    45,    33,    45,   320,    82,    83,
-       0,     0,    42,    45,     0,   219,   154,     0,   136,   138,
-     146,   141,   147,   140,     3,   318,    27,   237,   322,     0,
-     436,   440,   442,     0,     0,   449,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   404,   478,   479,
-     185,   191,   190,   424,   427,   429,   428,   430,   431,   426,
-     420,   422,   421,   423,   415,   402,   412,   410,   432,   228,
-     401,     0,   414,   409,   255,   270,     0,     0,   210,     0,
-     201,   213,     0,   159,   580,   581,   579,   577,   578,    68,
-       0,    75,    73,    74,     0,    46,    68,    46,    85,   278,
-     276,   277,   102,   104,   105,   106,    97,    88,    87,    98,
-      89,    91,    90,    80,    68,    46,   180,   222,   215,   214,
-     216,     0,     0,   160,   142,   143,   225,    29,     0,     0,
-     444,     0,     0,   452,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   405,     0,   213,     0,     0,     0,
-       0,   417,   425,   256,   247,   258,   274,   196,     0,   213,
-     206,     0,     0,   157,     0,   325,    71,    76,    77,    78,
-      36,     0,     0,     0,    32,     0,   115,   116,   107,   108,
-     109,   110,   111,   112,   113,   114,   100,     0,     0,    41,
-     189,   217,   263,   158,   139,   148,   434,   437,     0,   447,
-     450,   454,   458,   462,   466,   456,   460,   464,   468,     0,
-       0,   475,     0,     0,   406,   413,   411,     0,   213,   275,
-       0,   198,     0,     0,   205,   521,   203,    45,     0,   364,
-     362,   363,    57,     0,     0,   365,     0,   171,   366,   360,
-     361,   381,   382,   371,   372,   373,   374,   375,   376,   377,
-     378,   379,   380,     0,    67,     0,   238,    47,   238,    52,
-      51,     0,     0,     0,     0,     0,   166,    49,     0,    66,
-      48,    45,     0,     0,    99,    45,   181,   219,   249,   250,
-     248,   220,   263,   266,   264,     0,   523,     0,     0,     0,
-     186,   416,   404,     0,     0,   271,   213,   211,   206,     0,
-      46,     0,     0,   297,     0,     0,     0,    56,    55,     0,
-       0,     0,     0,   172,     0,   167,     0,   173,   521,   163,
-       0,     0,   238,     0,     0,    64,    61,   168,    58,   169,
-      46,   103,   101,    46,   218,   225,   259,     0,   263,   242,
-     438,     0,   451,   470,   472,   407,     0,     0,   253,     0,
-     207,   208,    38,   165,   170,   123,   521,   523,   120,     0,
-       0,   122,     0,     0,     0,     0,   117,    62,    59,   164,
-       0,     0,     0,     0,    53,    50,     0,    63,    60,    34,
-      43,   221,   243,   260,   445,   524,     0,   403,   418,   254,
-     257,   199,     0,     0,   119,   118,   121,   150,     0,    54,
-     255,   408,     0,   523,   125,    65,   244,     0,     0,   419,
-     124
+       0,     0,   332,   331,     0,   228,     0,   328,   329,   330,
+      45,     0,    41,    72,    32,    71,     0,    92,   360,     0,
+       0,   198,     0,   211,   359,     0,   203,   205,   285,   286,
+     555,   232,   359,   232,   165,   163,   327,   188,   183,   478,
+     479,   480,   481,   482,   483,   484,   485,   486,   492,   493,
+     487,   488,   489,   490,   491,   494,   495,   496,   497,   498,
+     499,   500,   501,   502,   466,   465,     0,   463,   464,     0,
+     474,   475,   469,   468,   470,   471,   472,   473,   476,   477,
+     185,   467,   187,   196,     0,   222,   225,   221,   256,     0,
+       0,   237,   266,     0,   166,   161,   199,     0,     0,   407,
+     413,   351,     4,     0,   135,     0,     0,     0,     0,   115,
+       0,     0,   232,   232,     0,   120,   378,   379,   380,   374,
+     375,   376,   377,   602,   603,   530,   526,   527,   525,   528,
+     529,   531,   506,   505,   507,   519,   509,   511,   510,   512,
+     513,   515,   514,   516,   518,   508,   520,   504,   503,   517,
+     478,   479,   523,   522,   521,   524,   586,   585,   597,   581,
+     576,    26,   592,   588,   593,   601,   590,   591,   576,   589,
+     596,   587,   594,   595,   577,   580,   582,   584,   583,   576,
+       0,     0,     3,   131,   130,   129,   414,     0,     0,     0,
+     424,   427,     0,     0,   434,   438,   442,   446,   436,   440,
+     444,   448,   450,   452,   454,   455,     0,    34,   227,   231,
+      46,    83,    84,    85,    81,    73,    74,    79,    76,    39,
+      86,     0,    93,    94,    97,   198,   194,     0,   217,     0,
+       0,   211,     0,   201,     0,     0,    33,     0,   353,   182,
+     211,     0,     0,   459,   460,   192,   190,     0,   189,   211,
+     224,   229,     0,   238,   257,   271,   268,   269,   263,   264,
+     262,   261,   347,   411,    25,   136,   134,     0,     0,     0,
+     368,   367,     0,   258,   232,   362,   366,   148,   149,   258,
+       0,   110,   114,   117,   112,     0,     0,   109,   232,   211,
+       0,     0,     0,    29,     4,     0,   417,   421,   423,     0,
+       0,   430,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   457,    49,    50,    51,    37,     0,     0,
+       0,    82,     0,    80,     0,    89,    95,    98,   578,   178,
+     212,   213,     0,   288,     0,   206,   207,     0,   188,   570,
+     572,   540,   574,   562,   538,   563,   568,   564,   292,   566,
+     539,   544,   543,   537,   541,   542,   560,   561,   556,   559,
+     534,   535,   536,    35,    87,     0,   461,   462,     0,   193,
+       0,   232,   548,   549,   223,   547,   532,   245,   274,   270,
+     348,   138,   369,   370,   371,   364,   241,   242,   240,   139,
+     258,   265,   259,   361,   327,   142,   145,   111,   113,   116,
+       0,   598,   599,   600,    28,     0,     0,   425,     0,     0,
+     433,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   458,     0,     0,     0,     0,    64,    53,    58,    47,
+      60,    54,    57,    55,    52,     0,    59,     0,   171,   172,
+      56,     0,     0,   357,     0,     0,    61,    48,    77,    75,
+      78,    96,     0,     0,   188,   214,   258,   204,     0,   209,
+     202,   545,   545,   557,   545,   555,   545,   184,   191,   197,
+     230,   533,   246,   239,   249,     0,     0,   137,   327,   150,
+     254,     0,   258,   234,   363,   150,   258,   121,   415,   418,
+       0,   428,   431,   435,   439,   443,   447,   437,   441,   445,
+     449,     0,     0,   456,    69,     0,    67,     0,     0,   357,
+       0,     0,    62,    65,    66,     0,   167,    63,     0,   173,
+       0,   170,   199,    99,   100,   579,   179,   216,   217,   218,
+     208,     0,     0,     0,     0,     0,     0,   211,   272,   275,
+     365,   152,   140,   151,   235,   255,   143,   146,   250,     0,
+     578,     0,     0,     0,   576,   578,   103,   359,     0,    68,
+       0,    70,     0,   168,     0,   215,   220,   551,   552,   571,
+     550,   546,   573,   554,   575,   553,   558,   569,   565,   567,
+       0,     0,   245,   150,   122,   419,     0,   432,   451,   453,
+       0,     0,   101,     0,     0,   104,   359,   169,   219,   247,
+     153,   154,   236,   147,   252,   251,     0,   426,   578,   106,
+       0,   102,   250,   155,   253,     0,   248,   105
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     1,     3,    86,    87,    88,   303,    89,   278,   706,
-     276,   699,   294,   724,   705,   781,   867,   513,   611,   612,
-     782,    90,   291,   153,   518,   519,   716,   508,   718,   797,
-     883,   785,   719,   796,   917,   918,   968,    91,    92,    93,
-      94,   300,   531,   734,   532,   533,   534,   631,   736,    95,
-     872,    96,    97,   256,   873,   874,    98,    99,   100,   525,
-     800,   257,   412,   258,   580,   756,   259,   413,   585,   241,
-     260,   593,   594,   906,   876,   598,   438,   691,   690,   834,
-     770,   595,   596,   769,   624,   625,   729,   887,   730,   731,
-     945,   355,   416,   417,   588,   101,   261,   224,   196,   544,
-     225,   226,   350,   891,  1010,   262,   684,   892,   263,  1000,
-     764,   828,   947,   419,   893,   264,   421,   422,   423,   591,
-     766,   592,   830,   439,   137,   138,   912,   103,   104,   105,
-     106,   107,   168,   108,   308,   289,   317,   510,   700,   511,
-     678,   109,   150,   227,   228,   229,   111,   112,   113,   114,
-     679,   758,   755,   902,   996,   680,   760,   759,   757,   827,
-    1012,   681,   682,   683,   115,   639,   326,   739,   895,   327,
-     328,   643,   808,   644,   331,   742,   897,   647,   651,   648,
-     652,   649,   653,   650,   654,   655,   656,   407,   497,   274,
-     951,   498,   499,   500,   501,   502
+      -1,     1,     2,     4,    78,   232,    80,    81,   323,    82,
+      83,    84,   234,    86,   226,    87,   365,   227,   247,   560,
+     668,   669,   779,   780,   781,   362,   363,   565,   566,   674,
+     670,   567,    89,    90,   367,    91,   571,   572,   573,   802,
+     235,   856,   906,    92,    93,   458,   464,   459,   315,   316,
+     639,   898,   317,    94,   193,    95,   236,   300,   453,   731,
+     454,   455,   829,   456,   835,   457,   836,   933,   629,   892,
+     893,   931,   950,   237,    98,    99,   100,   786,   787,   101,
+     102,   373,   804,   103,   275,   387,   276,   590,   277,   104,
+     279,   432,   598,   718,   242,   280,   599,   253,   789,   377,
+     688,   255,   581,   583,   685,   686,   577,   578,   680,   878,
+     681,   682,   916,   436,   437,   602,   105,   282,   354,   434,
+     721,   355,   356,   739,   932,   283,   727,   740,   284,   823,
+     887,   962,   934,   831,   439,   741,   742,   611,   441,   442,
+     443,   606,   607,   728,   825,   826,   194,   107,   178,   149,
+     375,   110,   111,   179,   380,   113,   114,   225,   357,   248,
+     116,   117,   118,   119,   613,   239,   121,   296,   386,   122,
+     153,   623,   624,   744,   828,   625,   123,   124,   125,   292,
+     293,   294,   448,   295,   126,   645,   332,   756,   899,   333,
+     334,   649,   840,   650,   337,   759,   901,   653,   657,   654,
+     658,   655,   659,   656,   660,   661,   662,   772,   430,   703,
+     704,   705,   724,   725,   881,   920,   921,   926,   584,   883,
+     707,   708,   709,   815,   710,   816,   711,   814,   811,   812,
+     712,   813,   321,   803,   524,   525,   526,   527,   528,   529
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -917
+#define YYPACT_NINF -872
 static const yytype_int16 yypact[] =
 {
-    -917,    52,  -917,  5135,  5259,  6825,  6259,    51,  -917,  -917,
-    -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,
-    -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,   -14,    98,
-    6825,  5274,  -917,  -917,  5714,  -917,  -917,  5823,  6259,   -63,
-    -917,  -917,    81,   264,   170,    55,  5932,  -917,   -44,   181,
-     108,   132,  -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,
-    -917,  -917,  -917,  -917,    38,    49,    53,    54,    64,    86,
-     113,   122,   156,   158,   171,   172,   196,   198,   201,   209,
-     215,   216,   219,   220,   224,  -917,  -917,  -917,  -917,    10,
-      10,  -917,  6041,  -917,  5496,   134,   134,   134,   134,   134,
-    -917,  -917,  6615,  6259,  -917,    15,  6368,   151,   188,  -917,
-     147,  -917,  -917,  -917,  -917,  -917,   191,   206,   272,   387,
-     395,   412,   413,  -917,  -917,  -917,  -917,  -917,  -917,  -917,
-    -917,  -917,  -917,  -917,  -917,  -917,    36,  -917,  -917,  -917,
-     229,  -917,   343,   343,   -22,   343,   343,     0,    22,   289,
-     282,  -917,  -917,   240,  -917,  -917,  -917,   239,  -917,  5823,
-     332,  6150,   249,  6259,  -917,   296,  -917,   251,   408,  -917,
-    -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,   -22,   300,
-     301,   408,   408,     0,    22,   303,   310,   188,   271,  -917,
-    -917,  -917,  -917,  -917,  4932,  -917,   138,  5714,  -917,  -917,
-    6850,  -917,  -917,  -917,  6850,  6850,  -917,  6850,  6850,  6850,
-    6850,  6850,  6850,  6850,  6850,  6850,  6850,  6850,  6850,  6850,
-    6850,  -917,  -917,  -917,   278,  -917,  4819,  -917,    19,  -917,
-     280,   281,   848,   848,  4819,    10,   134,   134,  6720,  -917,
-    -917,  -917,  -917,  -917,  -917,  -917,   325,   300,   301,  6900,
-     326,  -917,  -917,   327,   303,   310,  6795,  -917,  -917,  -917,
-    -917,  -917,   279,  4456,   277,   -58,   330,  -917,  -917,  -917,
-    -917,   408,  4606,  -917,  1000,  5605,   284,  5605,   284,  -917,
-    -917,  -917,  -917,  -917,  -917,  -917,  -917,   408,  1154,  5605,
-    6850,   295,  1308,  5605,   284,  6259,  -917,  -917,  4588,  -917,
-    6585,  -917,  1462,   302,   304,   318,  -917,  1616,  5605,   166,
-    -917,  -917,  -917,  -917,   308,  6850,  1770,  5605,  -917,  -917,
-    -917,  -917,  -917,  -917,  -917,   311,  6850,  6850,  6850,   314,
-     324,  6850,   335,   336,   338,   339,   340,   362,   368,   376,
-     377,   378,   381,   391,   397,   393,  -917,   396,  -917,  -917,
-    4819,  -917,  -917,  -917,  -917,   405,  -917,  6850,   407,   414,
-     422,  -917,  -917,   -58,  1924,   389,   404,  -917,  -917,  -917,
-    -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,
-    -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,
-    -917,   423,  -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,
-    -917,  -917,  -917,  -917,  -917,   283,  -917,  -917,  -917,  -917,
-    -917,   464,    40,    40,   184,  -917,  -917,  -917,  -917,   424,
-    4819,  -917,  -917,  -917,  -917,  -917,  -917,  -917,    28,   -12,
-       5,   139,   175,   123,   125,  6850,  -917,  -917,  -917,   426,
-    -917,   469,  -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,
-    -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,
-    -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,
-    -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,
-    -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,
-    -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,
-    -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,
-     425,   427,   351,   429,   428,   433,  -917,   431,   434,   432,
-     430,  6850,  -917,   439,   443,   445,  6850,  -917,   488,  -917,
-    -917,   444,   447,   533,  6850,  6850,  -917,  -917,  -917,  -917,
-    -917,   448,  -917,   453,    15,  -917,  -917,   452,  -917,   451,
-     450,   459,  -917,  -917,   454,  6477,  -917,  -917,  -917,  -917,
-    -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,  6850,  -917,
-    -917,  -917,  -917,  -917,  -917,  -917,   449,   455,  -917,  -917,
-     462,  -917,  -917,   585,   586,  -917,  -917,  -917,  4768,  -917,
-    -917,   458,   461,   445,  5605,  -917,  -917,   470,   463,  -917,
-    4663,  2078,  2232,  2386,  2540,  2694,  -917,  -917,   408,   408,
-     408,  -917,   465,  -917,  -917,  -917,  -917,  -917,  -917,  6850,
-    4531,   468,  -917,  -917,   472,    41,  -917,  4693,  -917,  -917,
-    6850,  -917,  -917,  -917,   474,  -917,  -917,  -917,  -917,  6259,
-    -917,  -917,  -917,  6477,  6477,  -917,   482,  6477,  6477,  6477,
-    6477,  6477,  6477,  6477,  6477,  6477,  6477,   477,  -917,  -917,
-    -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,
-    -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,
-    -917,   481,   611,  -917,   144,  -917,   486,   483,  -917,   408,
-    -917,   445,  6850,  -917,  -917,  -917,  -917,  -917,  -917,   284,
-    5605,  -917,  -917,  -917,   351,    43,   284,    59,  -917,   -22,
-       0,    22,  -917,  -917,  -917,  -917,   364,  -917,  -917,  -917,
-    -917,   188,  -917,  -917,   284,    82,  -917,  -917,  -917,  -917,
-     485,  6259,  6850,  -917,  6585,  -917,   279,  -917,   489,  6259,
-    -917,   493,  6477,  -917,   494,   495,   496,   497,   498,   499,
-     500,   501,   502,   503,  -917,   504,   445,  4803,  4768,   446,
-     446,  -917,  -917,  -917,  -917,  -917,  4531,  -917,   506,   445,
-     505,   507,   510,  -917,   487,  -917,  -917,  -917,  -917,  -917,
-    -917,  3772,   508,   511,  -917,  4531,  -917,  -917,  -917,  -917,
-    -917,  -917,  -917,  -917,  -917,  -917,  -917,  4531,   513,  -917,
-      40,  -917,  5377,  -917,  -917,  -917,  -917,  -917,   509,  -917,
-    -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,   627,
-     628,  -917,   516,   517,  -917,  -917,  -917,  6259,   445,  -917,
-     512,  -917,   518,   408,  -917,  -917,  -917,  -917,  4294,    28,
-     -12,     5,  -917,  3904,  4424,   139,   520,   607,   175,   123,
-     125,   523,   524,   525,   526,   528,   529,   530,   532,   534,
-     535,   538,   539,   540,  -917,  6850,    10,  -917,    10,  -917,
-    -917,  4034,   134,   134,  6850,   134,  -917,  -917,  6690,  -917,
-    -917,  -917,   542,  4531,  -917,  -917,  -917,    41,  -917,  -917,
-    -917,  -917,   390,   277,  -917,   544,  -917,   545,   546,   547,
-    -917,  -917,   543,   536,   550,  -917,   445,  -917,   505,  2848,
-      97,  6850,  6850,   289,  4987,  6825,  4987,  -917,  -917,   243,
-     134,   134,  6720,  -917,  6850,  -917,  4164,  -917,  -917,  -917,
-     553,   555,    10,   134,   134,  -917,  -917,  -917,  -917,  -917,
-     102,  -917,  -917,   107,  -917,   279,  -917,   554,  5377,  -917,
-    -917,  3310,  -917,  -917,  -917,   557,   558,   556,   625,   562,
-    -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,   200,
-     200,  -917,   200,  5008,  6850,  5008,  -917,  -917,  -917,  -917,
-    4294,   563,  6850,  3002,  -917,  -917,   559,  -917,  -917,  -917,
-    -917,  -917,  -917,  -917,  -917,  -917,  4768,  -917,  -917,  -917,
-    -917,  -917,  3156,  3464,  -917,  -917,  -917,  -917,   566,  -917,
-     144,  -917,  4803,  -917,  -917,  -917,  -917,   565,  3618,  -917,
-    -917
+    -872,    77,    87,  -872,  4255,   167,   191,   227,   280,   300,
+     301,   304,  -872,  -872,  -872,  4899,  -872,  -872,  -872,  -872,
+    -872,  -872,  -872,    98,  -872,    -8,  -872,  5429,   383,  4624,
+    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
+    -872,  -872,   -38,   106,   121,   122,   133,   158,   171,   186,
+     196,   203,   210,   228,   243,    -3,    36,    43,    45,    90,
+     114,   130,   138,   151,   179,   183,   187,   202,   215,   233,
+     235,   249,   258,   267,   269,   271,  -872,   438,  -872,  -872,
+    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  4899,  -872,
+    -872,    21,  -872,  -872,  -872,  -872,  5144,  -872,   -71,   -71,
+     -71,   -71,  -872,   281,  5524,  -872,    54,  -872,   284,  4742,
+     350,  4899,   -25,  -872,   297,  5239,  -872,  -872,  -872,  -872,
+    4672,   276,  -872,  -872,  -872,  -872,  -872,   -10,     9,    18,
+      50,    52,   148,   166,  -872,  -872,  -872,  -872,  -872,  -872,
+    -872,  -872,  -872,  -872,  -872,  -872,  -872,   310,  -872,  4921,
+     350,   312,   321,  4899,   -10,     9,    18,    50,    52,   148,
+     166,   441,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
+    -872,  -872,  -872,  -872,  -872,  -872,  4899,  -872,  -872,   350,
+    5429,  4790,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
+     332,  4899,  4899,   337,  -872,  4742,  4899,  4529,  -872,  -872,
+    -872,  4529,  4529,  -872,  4529,  4529,  4529,  4529,  4529,  4529,
+    4529,  4529,  4529,  4529,  4529,  4529,  4529,  4529,  -872,  -872,
+    -872,  -872,  -872,  -872,  -872,  1286,   343,   348,   259,  1286,
+    -872,  4899,  -872,  -872,  -872,  -872,  5144,  -872,  5334,  4947,
+    -872,  -872,  -872,  -872,  -872,  -872,  -872,  4899,  5524,  -872,
+    -872,  -872,  -872,   360,  -872,  -872,  -872,   350,   -13,   362,
+    -872,  -872,  -872,  -872,  -872,  -872,  4899,  -872,  -872,  -872,
+    4742,  -872,  -872,  -872,  -872,  -872,  -872,   363,  5071,  -872,
+    -872,   370,  -872,   377,  1478,   372,  4742,   350,    15,  -872,
+     435,  -872,  -872,  -872,  -872,   276,  -872,   350,  -872,  -872,
+      73,  -872,  -872,  5028,   177,  5028,  -872,  -872,  -872,  -872,
+    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,   107,
+     379,  1212,   409,   384,  -872,   386,  -872,  -872,  -872,  1383,
+    4742,   387,  4529,  4529,  4529,   388,   389,  4529,   390,   391,
+     392,   393,   397,   398,   399,   401,   402,   403,   405,   404,
+     406,   407,  -872,  -872,   414,  -872,  4790,  -872,  -872,  -872,
+    -872,  1111,  -872,  -872,  -872,   348,   415,  4529,  -872,  5334,
+    4742,  -872,  1617,   424,  -872,   471,  -872,   412,  -872,  -872,
+    -872,  1286,   278,  1286,  -872,  -872,  -872,  -872,  -872,   381,
+     423,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
+    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
+    -872,  -872,  -872,  -872,  -872,  -872,   428,  -872,  -872,   411,
+    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
+    -872,  -872,    41,  -872,   212,  -872,  -872,  -872,  -872,   429,
+    4790,  -872,  -872,   427,  -872,  -872,   350,   470,   440,  -872,
+    -872,  4121,   436,    11,  -872,  5560,    88,   524,   442,  -872,
+    4790,   443,  5028,  5028,   224,  -872,  -872,  -872,  -872,  -872,
+    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
+    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
+    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
+    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
+    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
+    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
+     444,   350,  -872,  -872,  -872,  -872,  -872,   445,   434,   439,
+    -872,  -872,   446,  5524,  -872,  -872,  -872,  -872,  -872,  -872,
+    -872,  -872,  -872,  -872,  -872,  -872,  4529,  -872,   447,  -872,
+      48,  -872,  -872,  -872,   485,   448,  -872,   535,  -872,  -872,
+    -872,   452,   451,  -872,   456,   457,  -872,   454,  -872,   350,
+     297,   424,  4899,  -872,  3577,   449,  -872,   462,  4121,    41,
+     424,   437,   453,  -872,  -872,  -872,  -872,   549,  -872,   424,
+    -872,  -872,  3857,  -872,  -872,  -872,   427,  -872,  -872,  -872,
+    -872,  -872,  -872,   440,  -872,  -872,  -872,  4899,  4899,  4899,
+    -872,   350,  5524,  4694,   276,  -872,  -872,  -872,  -872,  4694,
+     563,  -872,   461,  -872,  -872,   467,   468,  -872,   276,   424,
+    1757,  1897,  2037,  -872,   472,  5524,  -872,  -872,  -872,  5524,
+    5524,  -872,   463,  5524,  5524,  5524,  5524,  5524,  5524,  5524,
+    5524,  5524,  5524,   464,  -872,  -872,  -872,  -872,  4137,   469,
+    4899,  -872,  1111,  -872,  4899,  -872,  4529,  -872,  -872,  -872,
+     473,  -872,  5524,  -872,   474,   475,  -872,    58,  -872,  -872,
+    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
+    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
+    -872,  -872,  -872,  -872,  -872,   477,  -872,  -872,    92,  -872,
+     478,   276,  -872,  -872,  3857,  -872,  -872,   160,   465,  -872,
+    -872,    73,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
+     969,   372,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
+     479,  -872,  -872,  -872,  -872,   480,  5524,  -872,   481,  5524,
+    -872,   482,   483,   484,   489,   490,   491,   492,   496,   487,
+     499,  -872,   498,  4373,  4851,    58,  -872,  -872,  -872,  -872,
+    -872,  -872,  -872,  -872,  -872,  4563,  -872,   -71,  -872,  -872,
+    -872,   506,  4742,   129,  4468,  4672,  -872,  -872,  -872,  -872,
+    -872,  -872,  3857,  2317,  -872,   526,  4694,  -872,  4899,  -872,
+      41,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
+    -872,  -872,  -872,  -872,  -872,   497,  3857,  -872,  -872,   504,
+    -872,   502,  4694,  -872,  4121,   504,  4694,  -872,  -872,  -872,
+     508,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
+    -872,   622,   623,  -872,  -872,  4720,  -872,   518,   -71,   -13,
+    4563,  4947,  -872,  -872,  -872,  4563,  -872,  -872,   520,  -872,
+    4742,  -872,  -872,  3857,  -872,  -872,    41,  -872,  -872,  -872,
+    -872,  3017,  3157,  2877,  3297,  3717,  3437,   424,  -872,  3857,
+    4121,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,   514,
+    -872,   515,   516,   519,  -872,  -872,  -872,   328,  4720,  -872,
+     518,  -872,  4720,  -872,   527,  -872,   377,  -872,  -872,  -872,
+    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
+     521,  3997,   160,   504,    93,  -872,  2457,  -872,  -872,  -872,
+    2177,  2597,  -872,   328,  4720,  -872,   339,  -872,  -872,  -872,
+    3997,  -872,  -872,  -872,  -872,  -872,    58,  -872,  -872,  -872,
+     339,  -872,  -872,  -872,  -872,  2737,    93,  -872
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -917,  -270,  -917,  -917,  -917,  -917,  -917,   -72,  -917,  -917,
-    -917,  -917,  -917,  -917,  -587,  -917,  -917,  -273,    -2,  -917,
-    -917,   -84,  -917,  -917,  -476,  -917,  -917,  -541,  -660,  -917,
-    -917,  -917,  -917,  -917,  -917,  -227,  -680,   -78,  -917,   -77,
-    -505,  -917,   -29,  -917,  -917,  -917,  -917,  -466,  -917,  -917,
-    -917,   -27,  -917,  -917,  -750,  -917,  -917,   -70,   435,  -917,
-    -917,  -146,  -917,  -917,  -917,  -917,  -250,  -917,  -399,   -81,
-    -917,  -917,  -917,  -917,  -261,  -917,  -917,  -917,  -917,  -202,
-    -125,  -501,  -917,  -917,  -532,  -917,  -175,  -917,  -917,  -917,
-    -917,   480,  -690,  -917,  -917,   -71,  -182,   -83,     2,  -917,
-     173,  -917,  -917,  -837,  -917,  -177,  -917,  -917,  -917,  -917,
-    -296,  -917,  -917,  -917,  -917,  -761,  -178,  -661,  -917,  -917,
-    -917,  -917,  -917,    -4,  -917,  -917,     1,   -35,    90,  -111,
-     613,   612,  -917,   -33,  -917,  -917,  -917,  -246,  -917,  -917,
-     131,   -10,    31,   -86,  -917,   514,  -180,  -291,     8,  -232,
-    -726,  -917,  -181,  -917,  -917,  -727,  -917,  -917,  -917,  -917,
-    -917,  -917,  -917,  -630,   -59,  -917,  -917,  -917,  -917,  -917,
-    -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,
-    -917,  -917,  -917,  -917,  -917,  -917,  -917,  -917,   519,   -98,
-    -916,  -917,  -877,  -917,  -917,  -917
+    -872,  -872,  -260,  -872,  -872,   645,  -872,  -872,  -872,  -872,
+    -613,   -94,     1,   -26,  -872,  -872,  -872,  -872,    16,  -872,
+    -872,  -872,  -872,  -872,  -872,   285,  -872,  -872,   -20,  -872,
+    -872,    89,   -17,   -21,  -872,  -872,  -872,  -872,   -22,  -872,
+    -872,  -202,  -473,    -9,  -102,  -249,   199,    22,  -872,  -872,
+    -872,  -872,   201,    -6,  -872,  -872,    -1,  -872,  -872,  -872,
+     -66,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -770,
+    -872,  -872,  -872,   668,  -872,  -872,  -872,  -111,   -97,  -576,
+     -80,  -872,  -872,  -154,  -241,  -872,  -872,  -872,  -155,    35,
+    -270,  -364,  -872,  -872,   -91,  -872,  -872,  -105,   -67,  -872,
+    -872,  -872,  -872,  -872,  -872,  -129,  -542,  -872,  -872,  -872,
+    -198,  -872,  -872,  -230,  -872,  -872,    20,   333,  -166,   338,
+    -872,    -5,   -95,  -575,  -872,  -157,  -872,  -872,  -872,  -237,
+    -872,  -872,  -261,  -872,  -872,  -872,   -98,  -872,   -29,  -696,
+    -872,  -872,   112,  -872,  -872,  -872,    13,   -45,     3,    32,
+    -872,   -63,    23,    -4,  -872,   754,   -24,     8,  -872,    10,
+     -81,  -872,  -872,  -415,  -872,    49,  -872,  -872,  -872,   -19,
+    -872,  -872,  -872,  -872,  -872,  -872,  -121,  -391,   194,  -272,
+     425,   430,  -872,  -872,    51,  -872,  -872,  -872,  -872,  -872,
+    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
+    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -204,
+    -302,    82,  -751,  -554,  -456,  -581,  -153,  -872,   -89,  -872,
+    -871,  -872,  -872,  -872,  -872,  -872,    17,  -872,  -872,  -872,
+    -872,  -872,  -183,  -820,  -872,  -759,  -872,  -872,  -660,  -872
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -406
+#define YYTABLE_NINF -411
 static const yytype_int16 yytable[] =
 {
-     136,   140,   163,   286,   102,   515,   410,   230,   233,   535,
-     187,   437,   139,   141,   586,   242,   243,   244,   245,   268,
-     232,   524,   235,   765,   237,   626,   154,   157,   630,   707,
-     823,   514,   824,   189,   110,   162,   725,   527,   155,   158,
-     543,   894,   496,   517,   348,   621,   805,   523,   777,   778,
-     779,  1003,     2,   288,   221,   946,   496,   359,   292,   221,
-     496,   686,   541,   221,   777,   778,   779,   236,   165,   633,
-     496,   547,  -339,   177,   995,   496,   167,   424,   302,   717,
-    -343,   425,  -343,   582,   496,   583,   418,   777,   778,   779,
-     169,   197,   307,   920,  -341,   238,   149,  1018,   265,  -342,
-     316,   727,   777,   778,   779,   192,   829,   777,   778,   779,
-     409,   993,   777,   778,   779,   193,  -340,   152,   170,   171,
-    -343,   933,  -339,  -280,   163,   882,   995,   164,   166,   825,
-     826,   894,   496,   266,   728,   187,   195,   884,   172,   191,
-    -279,   995,   364,   708,  -233,  -339,   357,   357,   187,   187,
-     139,   141,   360,   155,   158,   361,   362,   222,   189,   772,
-     223,   199,   222,  -278,   735,   223,   222,   152,   569,   351,
-     314,   189,   189,   200,   188,   275,   981,   420,   173,   174,
-     175,   780,   234,   584,   201,  -339,   151,   894,   202,   203,
-     152,   773,  -342,   267,    33,   309,   325,   784,   315,   204,
-     329,   330,  -344,   332,   333,   334,   335,   336,   337,   338,
-     339,   340,   341,   342,   343,   344,   345,  -344,   176,  -345,
-     799,   205,   349,   942,   822,   717,  -345,   347,   356,   356,
-     349,   803,  -342,  -341,   363,   962,   971,   832,   187,   187,
-     989,   272,  -344,   590,   717,   990,   973,   974,   206,   164,
-     910,   195,   363,   297,   187,   991,   717,   207,  -281,   349,
-    -282,   189,   189,   414,  -341,   187,  -345,   634,   239,  -340,
-    1011,   240,   312,   178,  -276,  -340,   871,   189,   191,   763,
-     313,   273,   271,   975,   311,  1017,   520,   411,   189,  1004,
-    1005,   208,  1006,   209,   940,   971,   904,  -268,   943,   301,
-     542,   179,   180,   441,  -341,   190,   210,   211,   313,   191,
-    -277,   363,   304,   305,   199,  -340,   198,   181,   587,   182,
-     199,   183,   549,   550,   551,  -278,   313,   554,  -278,   528,
-    -278,   212,  -278,   213,   965,   249,   214,   966,   919,   693,
-    -280,   967,   717,  -280,   215,  -280,   349,  -280,   687,   765,
-     216,   217,   279,   571,   218,   219,   608,   609,   610,   220,
-     178,   184,   185,   186,   929,   509,   733,   509,   277,   496,
-     496,   496,   496,   496,   959,   646,   287,   290,   293,   509,
-     280,   281,   192,   509,   296,   311,   601,   602,   179,   180,
-     298,   299,   603,   604,  -343,  -342,   605,  -344,   509,   318,
-     282,   886,   427,   440,  -345,   306,  -279,   509,   183,  -279,
-     963,  -279,   346,  -279,   353,   354,   349,   178,   440,  -339,
-    -341,  -340,   415,   979,   426,   512,   774,   319,   320,   440,
-    -268,   597,   521,   783,   221,   786,   787,   579,   538,   537,
-     283,   284,   285,   535,   545,   179,   180,   321,   184,   185,
-     186,   798,   539,   548,   775,   178,   552,   664,   665,   666,
-     667,   668,   669,   740,   741,   183,   553,   744,   745,   746,
-     747,   748,   749,   750,   751,   752,   753,   555,   556,   187,
-     557,   558,   559,   179,   180,   888,   889,   322,   323,   324,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   189,   183,   560,   184,   185,   186,   788,   789,
-     561,   790,   791,   792,   793,   794,   795,   520,   562,   563,
-     564,  -276,   597,   565,  -276,   890,  -276,   566,  -276,  -277,
-     632,   632,  -277,   567,  -277,   568,  -277,   222,   313,   570,
-     223,   572,   576,   184,   185,   186,  -281,  -282,   573,  -281,
-    -282,  -281,  -282,  -281,  -282,   187,   574,   577,   581,   578,
-     589,   599,   810,   600,   657,   606,   614,   187,   615,   607,
-     616,   617,   618,   620,   619,   187,   187,   187,   189,   622,
-     623,  -212,   627,   925,   628,    39,   641,   721,   635,   629,
-     189,   636,   638,   640,   187,   642,   645,   660,   189,   189,
-     189,   661,   662,   658,   689,   688,   723,   704,   726,   659,
-     722,  -273,   737,   937,   685,   520,   720,   189,   743,   754,
-     761,   762,   767,   768,   837,   806,   632,   801,   939,   809,
-     811,   812,   813,   814,   815,   816,   817,   818,   898,   899,
-     821,   831,   835,   613,   819,   820,   836,   833,   881,   880,
-     885,   896,   900,   901,   907,   926,   187,   927,  -295,  -296,
-    -285,  -286,   964,  -287,  -288,  -289,   905,  -290,   999,  -291,
-    -292,   187,   939,  -293,  -294,   928,   957,   496,   941,   189,
-     950,   952,   953,   954,   509,   955,   958,   984,   597,   985,
-     992,   998,   976,  1009,   189,  -405,   997,   868,  1001,  1007,
-    1015,  1019,   776,   869,   870,   804,   960,   436,   908,   866,
-     877,   875,   944,   358,  1016,   949,   903,   637,   269,   496,
-     270,   956,   879,     0,   187,   187,   187,   187,   597,   738,
-       0,   440,   939,   721,     0,     0,     0,   909,     0,   701,
-     702,   703,   352,     0,     0,     0,     0,   189,   189,   189,
-     189,   496,   721,     0,     0,     0,   722,     0,   440,     0,
-       0,     0,   720,     0,   721,     0,     0,   286,   408,     0,
-     496,   496,     0,   921,     0,   722,     0,     0,     0,     0,
-       0,   720,   878,   930,     0,   931,   496,   722,     0,     0,
-     509,   935,   936,   720,   938,     0,     0,     0,   349,   932,
-     187,   934,     0,     0,     0,     0,   948,     0,     0,   163,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     771,   802,     0,   189,     0,     0,     0,     0,     0,   807,
-     983,     0,     0,     0,     0,   613,     0,     0,     0,   977,
-     978,     0,     0,     0,   922,     0,     0,     0,     0,   986,
-     721,     0,   987,   988,     0,     0,     0,   318,     0,     0,
-       0,   597,     0,     0,     0,     0,     0,     0,  1002,     0,
-       0,     0,   922,   722,   265,     0,     0,     0,     0,   720,
-       0,     0,     0,     0,     0,   319,   320,     0,   349,     0,
-       0,     0,   221,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   321,     0,   597,   363,     0,
-     969,   970,   972,     0,     0,     0,     0,     0,   363,     0,
-     597,     0,   139,   141,   158,     0,     0,   982,   913,     0,
-       0,     0,     0,     0,   164,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   349,   322,   323,   324,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-       0,     0,     0,   187,   771,     0,     0,     0,     0,   969,
-     970,   972,     0,     0,     0,     0,     0,     0,   363,   187,
-       0,     0,     0,     0,     0,     0,   189,     0,     0,     0,
-       0,     0,     0,     0,     0,   222,     0,     0,   223,     0,
-       0,     0,   189,   442,   443,   444,   445,   446,   447,   448,
-     449,   450,   451,   452,   453,   454,   455,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,   456,   457,   458,
-     459,   460,   461,   462,   463,   464,   465,    35,    36,     0,
-     466,     0,   467,   468,   469,   470,   471,   472,   473,   474,
-     475,     0,   476,   477,     0,   478,   479,   480,   481,   367,
-     368,   369,   370,   371,   372,   373,   374,   375,   376,   377,
-     378,   379,   380,   381,   382,   383,   384,   385,   386,   387,
-     388,   389,   390,   482,   483,   484,   485,   486,   487,   488,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   489,   490,     0,   491,   492,   392,
-     393,   493,   394,   395,   396,   397,   398,   399,   400,   401,
-     402,   403,   404,   494,     0,   406,   495,   442,   443,   444,
-     445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
-     455,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,   456,   457,   458,   459,   460,   461,   462,   463,   464,
-     465,    35,    36,     0,   466,     0,   467,   468,   469,   470,
-     471,   472,   473,   474,   475,     0,   476,   477,     0,   478,
-     479,   480,   481,   367,   368,   369,   370,   371,   372,   373,
-     374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,   385,   386,   387,   388,   389,   390,   482,   483,   484,
-     485,   486,   487,   488,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   489,   490,
-     516,   491,     0,   392,   393,   493,   394,   395,   396,   397,
-     398,   399,   400,   401,   402,   403,   404,   494,     0,   406,
-     495,   442,   443,   444,   445,   446,   447,   448,   449,   450,
-     451,   452,   453,   454,   455,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,   456,   457,   458,   459,   460,
-     461,   462,   463,   464,   465,    35,    36,     0,   466,     0,
-     467,   468,   469,   470,   471,   472,   473,   474,   475,     0,
-     476,   477,     0,   478,   479,   480,   481,   367,   368,   369,
-     370,   371,   372,   373,   374,   375,   376,   377,   378,   379,
-     380,   381,   382,   383,   384,   385,   386,   387,   388,   389,
-     390,   482,   483,   484,   485,   486,   487,   488,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     112,   175,   233,    96,   190,    85,   177,   108,   243,   244,
+     245,   150,   440,   268,   115,   281,   445,   106,   148,   522,
+      88,   726,   285,   589,   318,   150,   291,   809,   147,   252,
+     706,   824,   148,   612,   271,   269,   109,   180,   452,   684,
+     328,   327,   254,   176,   875,   444,   257,    30,   715,   240,
+     241,   873,   196,   120,   745,   777,   461,   720,   372,    30,
+     951,   195,  -320,   366,   256,   896,   261,   595,   473,   474,
+     522,   664,   665,   666,   431,   889,   181,     3,   596,   963,
+     936,  -322,  -308,   319,   150,   941,   257,    -2,  -308,   265,
+    -321,   148,   788,  -141,   267,  -279,   272,   750,   229,   271,
+     445,   228,   689,   690,   256,   258,   238,   150,   627,  -144,
+     151,  -141,    88,  -199,   262,   862,   287,   521,  -320,   954,
+     152,   955,  -325,   197,  -326,   431,   628,   438,   109,   444,
+     956,   266,   257,   260,   281,   263,   615,  -322,   965,   447,
+     616,  -198,   230,   821,   358,   297,  -321,   270,   358,   150,
+     256,   261,   286,   249,   306,   278,   148,   271,   269,   307,
+     854,   272,   198,   953,   597,   830,   301,   271,   521,   199,
+     667,   200,   150,   263,   250,   535,   534,   875,  -325,   148,
+    -326,   281,   875,   303,   515,   305,   285,   150,   150,   304,
+     384,   297,   150,   701,   148,   148,   176,   788,   730,   262,
+     520,    30,   263,   385,   324,   325,   875,   257,   460,   788,
+     460,   701,   265,   635,   636,   585,   201,   587,   696,   272,
+    -324,   726,   358,   257,   358,   256,  -307,   150,   330,   272,
+     329,   879,  -307,   465,   148,   287,   824,  -267,  -323,  -320,
+     202,  -319,  -309,   150,   368,   726,   369,  -319,  -309,  -279,
+     148,   520,   176,  -310,   266,  -199,   203,   895,   285,  -310,
+     374,   897,   150,  -322,   204,   281,   258,   257,   109,   148,
+     270,   370,   644,   381,   278,   383,  -324,   205,  -311,   382,
+     378,   379,   446,   604,  -311,   256,   822,  -295,   271,   269,
+    -267,  -312,   821,  -295,  -323,  -320,   964,  -312,   -38,  -321,
+     358,   -38,   358,   318,   451,   206,  -313,   257,   821,   207,
+     263,  -293,  -313,   208,   462,   463,  -314,  -293,   531,  -322,
+     379,   278,  -314,  -315,   810,   530,   297,   640,   209,  -315,
+    -316,   706,   600,   701,   626,   641,  -316,   601,   522,   522,
+     522,   210,   285,   265,   637,   930,   642,  -294,  -317,   638,
+     272,   580,  -325,  -294,  -317,  -321,   882,   150,   884,   211,
+     886,   212,   319,  -318,   148,   329,   446,   460,   460,  -318,
+     358,   579,  -326,  -324,   568,   213,  -323,   706,   249,   364,
+     -38,   358,   358,   -38,   214,   176,   182,   183,   184,   185,
+     186,   187,   188,   215,   588,   216,   706,   217,   586,   -38,
+    -298,   270,   -38,   523,  -277,   278,  -298,   246,  -325,   289,
+     290,   701,   182,   183,   184,   185,   186,   187,   188,   359,
+    -299,  -297,    30,   359,  -296,   264,  -299,  -297,  -326,  -324,
+    -296,   -90,  -323,   298,   942,   701,   521,   521,   521,   945,
+     876,   218,   219,   220,   221,   222,   223,   224,   364,   904,
+     299,   621,   905,   302,   523,   322,   630,   326,   620,   586,
+     904,  -410,  -410,   905,   360,   622,    16,    17,   832,   379,
+     942,   945,   361,   961,   182,   183,   184,   185,   186,   187,
+     188,    30,   701,   608,   609,   610,   376,   961,  -198,   388,
+     701,   701,   701,   701,   701,   701,   433,   359,   701,   359,
+     435,   522,  -267,   447,   189,   532,   533,   358,   561,   562,
+     563,   591,   536,   540,   541,   543,   544,   545,   546,   520,
+     520,   520,   547,   548,   549,   871,   550,   551,   552,   743,
+     553,   554,   556,   555,   557,   570,   582,    12,    13,    14,
+     701,   271,   594,   460,    16,    17,    18,    19,    20,    21,
+      22,  -210,   161,   592,   263,   593,   603,   605,   614,   701,
+      25,   647,   631,   634,   643,   673,   648,   719,   716,   713,
+     646,   651,   601,   672,   675,   359,   676,   359,   150,   677,
+     678,   679,   714,   746,   717,   148,   638,   747,   748,   771,
+     760,   871,   652,   797,   754,   687,  -273,   877,   805,   521,
+     808,   807,   683,   735,   817,   819,   837,   838,   841,   843,
+     844,   845,   851,   150,   150,   150,   846,   847,   848,   849,
+     148,   148,   148,   850,   852,   853,   867,   891,   888,   894,
+     732,   733,   734,   900,   522,   902,   903,   868,   522,   522,
+     913,   935,   937,   938,   263,   359,   939,   947,   949,    79,
+     569,   782,   799,   671,   801,   909,   359,   359,   632,   783,
+     749,   633,   784,   522,   793,   827,   150,   785,   150,   778,
+     150,   108,    97,   148,   864,   148,   858,   148,   794,   880,
+     915,   791,   520,   798,    88,   568,   948,   800,   790,   559,
+     281,   233,   268,   558,   755,   952,   866,   285,   757,   758,
+     792,   966,   761,   762,   763,   764,   765,   766,   767,   768,
+     769,   770,   833,   271,   269,   914,   820,   795,   729,   796,
+     449,   940,   523,   523,   523,   450,   885,   869,     0,   257,
+     925,   806,   521,     0,     0,   818,   521,   521,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   256,     0,     0,
+       0,     0,   834,   358,     0,     0,   281,     0,     0,     0,
+       0,   521,     0,   233,     0,     0,     0,   911,   265,   859,
+     150,   580,   857,   267,     0,   272,     0,   148,   702,   271,
+     269,   859,   359,   860,   271,   269,   863,     0,   297,   855,
+     859,   872,     0,   869,     0,   865,   702,   196,   869,     0,
+       0,    88,     0,     0,   150,   839,   195,   257,   842,   358,
+     266,   148,     0,     0,     0,   520,   263,   792,     0,   520,
+     520,   687,   861,     0,     0,   256,   870,   278,     0,   271,
+     278,     0,     0,     0,   861,     0,   890,   580,     0,   265,
+       0,   272,     0,     0,   520,     0,   272,     0,     0,     0,
+       0,   150,     0,     0,     0,     0,   859,   872,   148,     0,
+       0,   859,     0,   259,     0,     0,   297,   910,   907,     0,
+       0,     0,     0,   908,   288,     0,   912,     0,     0,     0,
+       0,   266,   263,     0,     0,   523,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   278,   870,     0,     0,
+       0,     0,     0,     0,   150,   278,     0,     0,   150,     0,
+       0,   148,     0,     0,     0,   148,     0,     0,   702,     0,
+       0,   943,     0,     0,     0,   946,   944,     0,     0,     0,
+       0,     0,     0,     0,     0,   320,     0,     0,     0,     0,
+     150,     0,     0,     0,     0,     0,     0,   148,     0,     0,
+       0,   331,     0,     0,     0,   335,   336,   960,   338,   339,
+     340,   341,   342,   343,   344,   345,   346,   347,   348,   349,
+     350,   351,   308,   309,   310,   311,   312,   313,   314,   736,
+     737,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   371,     0,     0,   702,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   489,   490,     0,   491,   522,   392,   393,   493,
-     394,   395,   396,   397,   398,   399,   400,   401,   402,   403,
-     404,   494,     0,   406,   495,   442,   443,   444,   445,   446,
-     447,   448,   449,   450,   451,   452,   453,   454,   455,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,   456,
-     457,   458,   459,   460,   461,   462,   463,   464,   465,    35,
-      36,     0,   466,     0,   467,   468,   469,   470,   471,   472,
-     473,   474,   475,     0,   476,   477,     0,   478,   479,   480,
-     481,   367,   368,   369,   370,   371,   372,   373,   374,   375,
-     376,   377,   378,   379,   380,   381,   382,   383,   384,   385,
-     386,   387,   388,   389,   390,   482,   483,   484,   485,   486,
-     487,   488,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   489,   490,     0,   491,
-     536,   392,   393,   493,   394,   395,   396,   397,   398,   399,
-     400,   401,   402,   403,   404,   494,     0,   406,   495,   442,
-     443,   444,   445,   446,   447,   448,   449,   450,   451,   452,
-     453,   454,   455,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,   456,   457,   458,   459,   460,   461,   462,
-     463,   464,   465,    35,    36,     0,   466,     0,   467,   468,
-     469,   470,   471,   472,   473,   474,   475,     0,   476,   477,
-       0,   478,   479,   480,   481,   367,   368,   369,   370,   371,
-     372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
-     382,   383,   384,   385,   386,   387,   388,   389,   390,   482,
-     483,   484,   485,   486,   487,   488,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     489,   490,   540,   491,     0,   392,   393,   493,   394,   395,
-     396,   397,   398,   399,   400,   401,   402,   403,   404,   494,
-       0,   406,   495,   442,   443,   444,   445,   446,   447,   448,
-     449,   450,   451,   452,   453,   454,   455,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,   456,   457,   458,
-     459,   460,   461,   462,   463,   464,   465,    35,    36,     0,
-     466,     0,   467,   468,   469,   470,   471,   472,   473,   474,
-     475,     0,   476,   477,     0,   478,   479,   480,   481,   367,
-     368,   369,   370,   371,   372,   373,   374,   375,   376,   377,
-     378,   379,   380,   381,   382,   383,   384,   385,   386,   387,
-     388,   389,   390,   482,   483,   484,   485,   486,   487,   488,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   489,   490,   546,   491,     0,   392,
-     393,   493,   394,   395,   396,   397,   398,   399,   400,   401,
-     402,   403,   404,   494,     0,   406,   495,   442,   443,   444,
-     445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
-     455,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,   456,   457,   458,   459,   460,   461,   462,   463,   464,
-     465,    35,    36,     0,   466,     0,   467,   468,   469,   470,
-     471,   472,   473,   474,   475,     0,   476,   477,     0,   478,
-     479,   480,   481,   367,   368,   369,   370,   371,   372,   373,
-     374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,   385,   386,   387,   388,   389,   390,   482,   483,   484,
-     485,   486,   487,   488,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   489,   490,
-       0,   491,   575,   392,   393,   493,   394,   395,   396,   397,
-     398,   399,   400,   401,   402,   403,   404,   494,     0,   406,
-     495,   442,   443,   444,   445,   446,   447,   448,   449,   450,
-     451,   452,   453,   454,   455,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,   456,   457,   458,   459,   460,
-     461,   462,   463,   464,   465,    35,    36,     0,   466,     0,
-     467,   468,   469,   470,   471,   472,   473,   474,   475,     0,
-     476,   477,     0,   478,   479,   480,   481,   367,   368,   369,
-     370,   371,   372,   373,   374,   375,   376,   377,   378,   379,
-     380,   381,   382,   383,   384,   385,   386,   387,   388,   389,
-     390,   482,   483,   484,   485,   486,   487,   488,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   489,   490,   694,   491,     0,   392,   393,   493,
-     394,   395,   396,   397,   398,   399,   400,   401,   402,   403,
-     404,   494,     0,   406,   495,   442,   443,   444,   445,   446,
-     447,   448,   449,   450,   451,   452,   453,   454,   455,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,   456,
-     457,   458,   459,   460,   461,   462,   463,   464,   465,    35,
-      36,     0,   466,     0,   467,   468,   469,   470,   471,   472,
-     473,   474,   475,     0,   476,   477,     0,   478,   479,   480,
-     481,   367,   368,   369,   370,   371,   372,   373,   374,   375,
-     376,   377,   378,   379,   380,   381,   382,   383,   384,   385,
-     386,   387,   388,   389,   390,   482,   483,   484,   485,   486,
-     487,   488,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   489,   490,   695,   491,
-       0,   392,   393,   493,   394,   395,   396,   397,   398,   399,
-     400,   401,   402,   403,   404,   494,     0,   406,   495,   442,
-     443,   444,   445,   446,   447,   448,   449,   450,   451,   452,
-     453,   454,   455,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,   456,   457,   458,   459,   460,   461,   462,
-     463,   464,   465,    35,    36,     0,   466,     0,   467,   468,
-     469,   470,   471,   472,   473,   474,   475,     0,   476,   477,
-       0,   478,   479,   480,   481,   367,   368,   369,   370,   371,
-     372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
-     382,   383,   384,   385,   386,   387,   388,   389,   390,   482,
-     483,   484,   485,   486,   487,   488,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     489,   490,   696,   491,     0,   392,   393,   493,   394,   395,
-     396,   397,   398,   399,   400,   401,   402,   403,   404,   494,
-       0,   406,   495,   442,   443,   444,   445,   446,   447,   448,
-     449,   450,   451,   452,   453,   454,   455,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,   456,   457,   458,
-     459,   460,   461,   462,   463,   464,   465,    35,    36,     0,
-     466,     0,   467,   468,   469,   470,   471,   472,   473,   474,
-     475,     0,   476,   477,     0,   478,   479,   480,   481,   367,
-     368,   369,   370,   371,   372,   373,   374,   375,   376,   377,
-     378,   379,   380,   381,   382,   383,   384,   385,   386,   387,
-     388,   389,   390,   482,   483,   484,   485,   486,   487,   488,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   489,   490,     0,   491,   697,   392,
-     393,   493,   394,   395,   396,   397,   398,   399,   400,   401,
-     402,   403,   404,   494,     0,   406,   495,   442,   443,   444,
-     445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
-     455,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,   456,   457,   458,   459,   460,   461,   462,   463,   464,
-     465,    35,    36,     0,   466,     0,   467,   468,   469,   470,
-     471,   472,   473,   474,   475,     0,   476,   477,     0,   478,
-     479,   480,   481,   367,   368,   369,   370,   371,   372,   373,
-     374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,   385,   386,   387,   388,   389,   390,   482,   483,   484,
-     485,   486,   487,   488,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   489,   490,
-       0,   491,     0,   392,   393,   493,   394,   395,   396,   397,
-     398,   399,   400,   401,   402,   403,   404,   494,   698,   406,
-     495,   442,   443,   444,   445,   446,   447,   448,   449,   450,
-     451,   452,   453,   454,   455,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,   456,   457,   458,   459,   460,
-     461,   462,   463,   464,   465,    35,    36,     0,   466,     0,
-     467,   468,   469,   470,   471,   472,   473,   474,   475,     0,
-     476,   477,     0,   478,   479,   480,   481,   367,   368,   369,
-     370,   371,   372,   373,   374,   375,   376,   377,   378,   379,
-     380,   381,   382,   383,   384,   385,   386,   387,   388,   389,
-     390,   482,   483,   484,   485,   486,   487,   488,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   489,   490,   961,   491,     0,   392,   393,   493,
-     394,   395,   396,   397,   398,   399,   400,   401,   402,   403,
-     404,   494,     0,   406,   495,   442,   443,   444,   445,   446,
-     447,   448,   449,   450,   451,   452,   453,   454,   455,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,   456,
-     457,   458,   459,   460,   461,   462,   463,   464,   465,    35,
-      36,     0,   466,     0,   467,   468,   469,   470,   471,   472,
-     473,   474,   475,     0,   476,   477,     0,   478,   479,   480,
-     481,   367,   368,   369,   370,   371,   372,   373,   374,   375,
-     376,   377,   378,   379,   380,   381,   382,   383,   384,   385,
-     386,   387,   388,   389,   390,   482,   483,   484,   485,   486,
-     487,   488,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   489,   490,  1008,   491,
-       0,   392,   393,   493,   394,   395,   396,   397,   398,   399,
-     400,   401,   402,   403,   404,   494,     0,   406,   495,   442,
-     443,   444,   445,   446,   447,   448,   449,   450,   451,   452,
-     453,   454,   455,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,   456,   457,   458,   459,   460,   461,   462,
-     463,   464,   465,    35,    36,     0,   466,     0,   467,   468,
-     469,   470,   471,   472,   473,   474,   475,     0,   476,   477,
-       0,   478,   479,   480,   481,   367,   368,   369,   370,   371,
-     372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
-     382,   383,   384,   385,   386,   387,   388,   389,   390,   482,
-     483,   484,   485,   486,   487,   488,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   523,     0,
+     702,     0,   523,   523,   259,     0,     0,     0,   359,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   320,     0,
+     371,     0,     0,     0,     0,     0,     0,   523,     0,     0,
+       0,     0,     0,     0,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   702,     0,     0,
+       0,     0,     0,     0,     0,   702,   702,   702,   702,   702,
+     702,     0,     0,   702,   359,     0,   537,   538,   539,     0,
+       0,   542,     0,     0,     0,   738,     0,     0,     0,     0,
+       0,    77,   289,   290,     0,     0,     0,     0,     0,     0,
+     320,     0,     0,     0,   127,   128,   129,   130,   131,   132,
+     133,   574,     0,     0,   575,   702,     0,     0,     0,     0,
+       0,     0,     0,     0,   561,   562,   563,     0,     0,     0,
+       0,   564,     0,     0,   702,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     489,   490,     0,   491,  1013,   392,   393,   493,   394,   395,
-     396,   397,   398,   399,   400,   401,   402,   403,   404,   494,
-       0,   406,   495,   442,   443,   444,   445,   446,   447,   448,
-     449,   450,   451,   452,   453,   454,   455,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,   456,   457,   458,
-     459,   460,   461,   462,   463,   464,   465,    35,    36,     0,
-     466,     0,   467,   468,   469,   470,   471,   472,   473,   474,
-     475,     0,   476,   477,     0,   478,   479,   480,   481,   367,
-     368,   369,   370,   371,   372,   373,   374,   375,   376,   377,
-     378,   379,   380,   381,   382,   383,   384,   385,   386,   387,
-     388,   389,   390,   482,   483,   484,   485,   486,   487,   488,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   490,   994,   491,     0,   392,
-     393,   493,   394,   395,   396,   397,   398,   399,   400,   401,
-     402,   403,   404,   494,     0,   406,   495,   442,   443,   444,
-     445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
-     455,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,   456,   457,   458,   459,   460,   461,   462,   463,   464,
-     465,    35,    36,     0,   466,     0,   467,   468,   469,   470,
-     471,   472,   473,   474,   475,     0,   476,   477,     0,   478,
-     479,   480,   481,   367,   368,   369,   370,   371,   372,   373,
-     374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,   385,   386,   387,   388,   389,   390,   482,   483,   484,
-     485,   486,   487,   488,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,  1014,   490,
-       0,   491,     0,   392,   393,   493,   394,   395,   396,   397,
-     398,   399,   400,   401,   402,   403,   404,   494,     0,   406,
-     495,   442,   443,   444,   445,   446,   447,   448,   449,   450,
-     451,   452,   453,   454,   455,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,   456,   457,   458,   459,   460,
-     461,   462,   463,   464,   465,    35,    36,     0,   466,     0,
-     467,   468,   469,   470,   471,   472,   473,   474,   475,     0,
-     476,   477,     0,   478,   479,   480,   481,   367,   368,   369,
-     370,   371,   372,   373,   374,   375,   376,   377,   378,   379,
-     380,   381,   382,   383,   384,   385,   386,   387,   388,   389,
-     390,   482,   483,   484,   485,   486,   487,   488,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,  1020,   490,     0,   491,     0,   392,   393,   493,
-     394,   395,   396,   397,   398,   399,   400,   401,   402,   403,
-     404,   494,     0,   406,   495,     4,     5,     0,     0,     0,
-     838,   839,     0,     0,     0,     0,     0,     0,     0,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,   840,
-     841,    30,    31,   842,     0,    33,     0,     0,    34,    35,
-      36,   843,   844,    38,    39,    40,    41,     0,    43,   845,
-      45,   161,    47,   846,     0,     0,   847,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    30,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   320,     0,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,     0,
+       0,     0,     0,     0,   320,   466,   467,   468,   469,   470,
+     471,   472,   473,   474,   475,   476,   477,   478,   479,   480,
+     481,   482,   483,   484,   485,   486,   487,   488,   489,     0,
+       0,   490,   491,    77,   492,     0,   493,   494,   495,   496,
+     497,   498,   499,     0,   500,   501,   502,   503,   504,   505,
+     391,   392,   393,   394,   395,   396,   397,   398,   399,   400,
+     401,   402,   403,   404,   405,   406,   407,   408,   409,   410,
+     411,   412,   413,   506,   507,   508,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     663,     0,    16,    17,    18,    19,    20,    21,    22,   352,
+     161,     0,     0,     0,     0,   353,     0,     0,     0,     0,
+       0,     0,   509,   510,   511,   512,   513,   514,   515,     0,
+     516,   517,   518,     0,   420,   421,   422,   423,   424,   425,
+     426,   427,   428,   429,   519,     0,     0,     0,     0,     0,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,     0,     0,     0,     0,     0,     0,   320,     0,     0,
+       0,     0,     0,   320,     0,     0,   154,   155,   156,   157,
+     158,   159,   160,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    12,    13,    14,   231,  -226,     0,     0,    16,
+      17,    18,    19,    20,    21,    22,     0,   161,     0,   289,
+     290,    26,   259,     0,     0,   389,   390,     0,     0,     0,
+     574,   391,   392,   393,   394,   395,   396,   397,   398,   399,
+     400,   401,   402,   403,   404,   405,   406,   407,   408,   409,
+     410,   411,   412,   413,     0,    30,     0,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   308,   309,   310,   311,   312,   313,   314,   273,   274,
+       0,     0,     0,     0,   320,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   414,     0,   415,   416,
+       0,   417,   418,   419,     0,   420,   421,   422,   423,   424,
+     425,   426,   427,   428,   429,     0,     0,   371,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   371,
+       0,     0,     0,     0,     0,     0,     0,     0,   371,   288,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   848,
-     849,   850,   851,   852,   853,   854,   855,   856,   857,   858,
-     859,   860,   861,   862,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,   863,   864,   914,   915,     0,
-       0,     0,   838,   839,     0,     0,     0,     0,   865,     0,
-       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,   840,   841,   145,   916,     0,     0,    33,     0,     0,
-      34,    35,    36,     0,   844,    38,    39,    40,     0,     0,
-       0,   845,   160,   161,     0,     0,     0,     0,   847,     0,
+     320,     0,     0,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   320,     0,     0,     0,
+     320,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      77,   289,   290,     0,   371,   371,     0,     0,     0,   371,
+     466,   467,   468,   469,   470,   471,   472,   473,   474,   475,
+     476,   477,   478,   479,   480,   481,   482,   483,   484,   485,
+     486,   487,   488,   489,     0,     0,   490,   491,     0,   492,
+       0,   493,   494,   495,   496,   497,   498,   499,     0,   500,
+     501,   502,   503,   504,   505,   391,   392,   393,   394,   395,
+     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
+     406,   407,   408,   409,   410,   411,   412,   413,   506,   507,
+     508,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   509,   510,   576,
+     512,   513,   514,   515,     0,   516,   517,   518,     0,   420,
+     421,   422,   423,   424,   425,   426,   427,   428,   429,   519,
+     466,   467,   468,   469,   470,   471,   472,   473,   474,   475,
+     476,   477,   478,   479,   480,   481,   482,   483,   484,   485,
+     486,   487,   488,   489,     0,     0,   490,   491,     0,   492,
+       0,   493,   494,   495,   496,   497,   498,   499,     0,   500,
+     501,   502,   503,   504,   505,   391,   392,   393,   394,   395,
+     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
+     406,   407,   408,   409,   410,   411,   412,   413,   506,   507,
+     508,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   848,   849,   850,   851,   852,   853,   854,   855,   856,
-     857,   858,   859,   860,   861,   862,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   509,   510,   751,
+     512,   513,   514,   515,     0,   516,   517,   518,     0,   420,
+     421,   422,   423,   424,   425,   426,   427,   428,   429,   519,
+     466,   467,   468,   469,   470,   471,   472,   473,   474,   475,
+     476,   477,   478,   479,   480,   481,   482,   483,   484,   485,
+     486,   487,   488,   489,     0,     0,   490,   491,     0,   492,
+       0,   493,   494,   495,   496,   497,   498,   499,     0,   500,
+     501,   502,   503,   504,   505,   391,   392,   393,   394,   395,
+     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
+     406,   407,   408,   409,   410,   411,   412,   413,   506,   507,
+     508,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     4,     5,     0,
-       0,     0,   838,   839,     0,     0,     0,     0,     0,     0,
-     865,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,   840,   841,   145,    31,     0,     0,    33,     0,     0,
-      34,    35,    36,     0,   844,    38,     0,    40,     0,     0,
-       0,   845,   160,   161,     0,     0,     0,     0,   847,     0,
+       0,     0,     0,     0,     0,     0,     0,   509,   510,     0,
+     512,   513,   514,   515,     0,   516,   517,   518,   752,   420,
+     421,   422,   423,   424,   425,   426,   427,   428,   429,   519,
+     466,   467,   468,   469,   470,   471,   472,   473,   474,   475,
+     476,   477,   478,   479,   480,   481,   482,   483,   484,   485,
+     486,   487,   488,   489,     0,     0,   490,   491,     0,   492,
+       0,   493,   494,   495,   496,   497,   498,   499,     0,   500,
+     501,   502,   503,   504,   505,   391,   392,   393,   394,   395,
+     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
+     406,   407,   408,   409,   410,   411,   412,   413,   506,   507,
+     508,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   509,   510,     0,
+     512,   513,   514,   515,   753,   516,   517,   518,     0,   420,
+     421,   422,   423,   424,   425,   426,   427,   428,   429,   519,
+     466,   467,   468,   469,   470,   471,   472,   473,   474,   475,
+     476,   477,   478,   479,   480,   481,   482,   483,   484,   485,
+     486,   487,   488,   489,     0,     0,   490,   491,     0,   492,
+       0,   493,   494,   495,   496,   497,   498,   499,     0,   500,
+     501,   502,   503,   504,   505,   391,   392,   393,   394,   395,
+     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
+     406,   407,   408,   409,   410,   411,   412,   413,   506,   507,
+     508,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   509,   510,   958,
+     512,   513,   514,   515,     0,   516,   517,   518,     0,   420,
+     421,   422,   423,   424,   425,   426,   427,   428,   429,   519,
+     466,   467,   468,   469,   470,   471,   472,   473,   474,   475,
+     476,   477,   478,   479,   480,   481,   482,   483,   484,   485,
+     486,   487,   488,   489,     0,     0,   490,   491,     0,   492,
+       0,   493,   494,   495,   496,   497,   498,   499,     0,   500,
+     501,   502,   503,   504,   505,   391,   392,   393,   394,   395,
+     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
+     406,   407,   408,   409,   410,   411,   412,   413,   506,   507,
+     508,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   848,   849,   850,   851,   852,   853,   854,   855,   856,
-     857,   858,   859,   860,   861,   862,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   874,   510,     0,
+     512,   513,   514,   515,     0,   516,   517,   518,     0,   420,
+     421,   422,   423,   424,   425,   426,   427,   428,   429,   519,
+     466,   467,   468,   469,   470,   471,   472,   473,   474,   475,
+     476,   477,   478,   479,   480,   481,   482,   483,   484,   485,
+     486,   487,   488,   489,     0,     0,   490,   491,     0,   492,
+       0,   493,   494,   495,   496,   497,   498,   499,     0,   500,
+     501,   502,   503,   504,   505,   391,   392,   393,   394,   395,
+     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
+     406,   407,   408,   409,   410,   411,   412,   413,   506,   507,
+     508,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   142,   143,     0,
-       0,     0,   980,   839,     0,     0,     0,     0,     0,     0,
-     865,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,   840,   841,   145,   146,     0,     0,    33,     0,     0,
-       0,    35,    36,     0,   844,    38,     0,    40,     0,     0,
-       0,   845,   160,   161,     0,     0,     0,     0,   847,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   510,     0,
+     512,   513,   514,   515,   957,   516,   517,   518,     0,   420,
+     421,   422,   423,   424,   425,   426,   427,   428,   429,   519,
+     466,   467,   468,   469,   470,   471,   472,   473,   474,   475,
+     476,   477,   478,   479,   480,   481,   482,   483,   484,   485,
+     486,   487,   488,   489,     0,     0,   490,   491,     0,   492,
+       0,   493,   494,   495,   496,   497,   498,   499,     0,   500,
+     501,   502,   503,   504,   505,   391,   392,   393,   394,   395,
+     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
+     406,   407,   408,   409,   410,   411,   412,   413,   506,   507,
+     508,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   959,   510,     0,
+     512,   513,   514,   515,     0,   516,   517,   518,     0,   420,
+     421,   422,   423,   424,   425,   426,   427,   428,   429,   519,
+     466,   467,   468,   469,   470,   471,   472,   473,   474,   475,
+     476,   477,   478,   479,   480,   481,   482,   483,   484,   485,
+     486,   487,   488,   489,     0,     0,   490,   491,     0,   492,
+       0,   493,   494,   495,   496,   497,   498,   499,     0,   500,
+     501,   502,   503,   504,   505,   391,   392,   393,   394,   395,
+     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
+     406,   407,   408,   409,   410,   411,   412,   413,   506,   507,
+     508,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   967,   510,     0,
+     512,   513,   514,   515,     0,   516,   517,   518,     0,   420,
+     421,   422,   423,   424,   425,   426,   427,   428,   429,   519,
+     466,   467,   468,   469,   470,   471,   472,   689,   690,   475,
+     476,   477,   478,   479,   480,   481,   482,   483,   484,   485,
+     486,   487,   488,   489,     0,     0,   490,   491,     0,   492,
+       0,   493,   494,   495,   496,   497,   498,   499,     0,   500,
+     501,   502,   503,   504,   505,   391,   392,   393,   394,   395,
+     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
+     406,   407,   408,   409,   410,   411,   412,   413,     0,   691,
+       0,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   848,   849,   850,   851,   852,   853,   854,   855,   856,
-     857,   858,   859,   860,   861,   862,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   923,   692,   924,
+     917,   694,   918,   696,     0,   722,   723,   699,     0,   420,
+     421,   422,   423,   424,   425,   426,   427,   428,   429,   700,
+     466,   467,   468,   469,   470,   471,   472,   689,   690,   475,
+     476,   477,   478,   479,   480,   481,   482,   483,   484,   485,
+     486,   487,   488,   489,     0,     0,   490,   491,     0,   492,
+       0,   493,   494,   495,   496,   497,   498,   499,     0,   500,
+     501,   502,   503,   504,   505,   391,   392,   393,   394,   395,
+     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
+     406,   407,   408,   409,   410,   411,   412,   413,     0,   691,
+       0,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   142,   143,     0,
-       0,     0,     0,   144,     0,     0,     0,     0,     0,     0,
-     865,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,   145,   146,     0,     0,    33,     0,     0,
-       0,    35,    36,     0,   159,    38,     0,    40,     0,     0,
-       0,   147,   160,   161,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   692,     0,
+     917,   694,   918,   696,   919,   722,   723,   699,     0,   420,
+     421,   422,   423,   424,   425,   426,   427,   428,   429,   700,
+     466,   467,   468,   469,   470,   471,   472,   689,   690,   475,
+     476,   477,   478,   479,   480,   481,   482,   483,   484,   485,
+     486,   487,   488,   489,     0,     0,   490,   491,     0,   492,
+       0,   493,   494,   495,   496,   497,   498,   499,     0,   500,
+     501,   502,   503,   504,   505,   391,   392,   393,   394,   395,
+     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
+     406,   407,   408,   409,   410,   411,   412,   413,     0,   691,
+       0,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   692,     0,
+     917,   694,   918,   696,   922,   722,   723,   699,     0,   420,
+     421,   422,   423,   424,   425,   426,   427,   428,   429,   700,
+     466,   467,   468,   469,   470,   471,   472,   689,   690,   475,
+     476,   477,   478,   479,   480,   481,   482,   483,   484,   485,
+     486,   487,   488,   489,     0,     0,   490,   491,     0,   492,
+       0,   493,   494,   495,   496,   497,   498,   499,     0,   500,
+     501,   502,   503,   504,   505,   391,   392,   393,   394,   395,
+     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
+     406,   407,   408,   409,   410,   411,   412,   413,     0,   691,
+       0,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   692,     0,
+     917,   694,   918,   696,   927,   722,   723,   699,     0,   420,
+     421,   422,   423,   424,   425,   426,   427,   428,   429,   700,
+     466,   467,   468,   469,   470,   471,   472,   689,   690,   475,
+     476,   477,   478,   479,   480,   481,   482,   483,   484,   485,
+     486,   487,   488,   489,     0,     0,   490,   491,     0,   492,
+       0,   493,   494,   495,   496,   497,   498,   499,     0,   500,
+     501,   502,   503,   504,   505,   391,   392,   393,   394,   395,
+     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
+     406,   407,   408,   409,   410,   411,   412,   413,     0,   691,
+       0,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   148,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   692,     0,
+     917,   694,   918,   696,     0,   722,   723,   699,   929,   420,
+     421,   422,   423,   424,   425,   426,   427,   428,   429,   700,
+     466,   467,   468,   469,   470,   471,   472,   689,   690,   475,
+     476,   477,   478,   479,   480,   481,   482,   483,   484,   485,
+     486,   487,   488,   489,     0,     0,   490,   491,     0,   492,
+       0,   493,   494,   495,   496,   497,   498,   499,     0,   500,
+     501,   502,   503,   504,   505,   391,   392,   393,   394,   395,
+     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
+     406,   407,   408,   409,   410,   411,   412,   413,     0,   691,
+       0,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   142,   143,     0,
-       0,     0,     0,   839,     0,     0,     0,     0,     0,     0,
-     911,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,   840,   841,   145,   146,   318,     0,    33,     0,     0,
-       0,    35,    36,     0,     0,     0,     0,    40,     0,     0,
-       0,   845,   160,     0,     0,     0,     0,     0,   923,     0,
-       0,     0,     0,   319,   320,     0,     0,     0,     0,     0,
-     221,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   321,     0,     0,     0,     0,     0,     0,
-       0,   848,   849,   850,   851,   852,   853,   854,   855,   856,
-     857,   858,   859,   860,   861,   862,     0,     0,     0,     0,
-     709,     0,   503,   504,   505,     0,   506,   507,     0,     0,
-       0,   251,   252,   322,   323,   324,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   247,   248,
-     924,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   710,     0,
-       0,     0,     0,     0,     0,     0,     0,   428,     0,     0,
-       0,     0,     0,   222,     0,     0,   223,     0,     0,     0,
-       0,     0,     0,     0,     0,   428,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   429,   430,     0,   711,   254,
-     255,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   429,   430,   431,     0,     0,     0,     0,
-       0,     0,    34,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   431,     0,     0,   712,     0,     0,     0,
-       0,     0,   428,     0,     0,   713,   714,   715,     0,     0,
-       0,     0,     0,     0,     0,   432,   433,   434,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     429,   430,   428,   432,   433,   434,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,     0,     0,
-     431,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     429,   430,     0,     0,   526,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   692,     0,
+     693,   694,   695,   696,     0,   697,   698,   699,     0,   420,
+     421,   422,   423,   424,   425,   426,   427,   428,   429,   700,
+     466,   467,   468,   469,   470,   471,   472,   689,   690,   475,
+     476,   477,   478,   479,   480,   481,   482,   483,   484,   485,
+     486,   487,   488,   489,     0,     0,   490,   491,     0,   492,
+       0,   493,   494,   495,   496,   497,   498,   499,     0,   500,
+     501,   502,   503,   504,   505,   391,   392,   393,   394,   395,
+     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
+     406,   407,   408,   409,   410,   411,   412,   413,     0,   691,
+       0,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     431,     0,   435,     0,     0,     0,     0,     0,     0,     0,
-     432,   433,   434,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,     0,     0,   178,   663,   664,
-     665,   666,   667,   668,   669,     0,     0,     0,     0,     0,
-     432,   433,   434,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   179,   180,     0,     0,   692,
-       0,     0,   178,   663,   664,   665,   666,   667,   668,   669,
-       0,     0,     0,     0,     0,   183,     0,     0,   318,     0,
-       0,     0,     0,   670,   671,   672,   673,     0,     0,   732,
-     179,   180,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   319,   320,     0,     0,
-     183,     0,     0,     0,     0,   184,   185,   186,   670,   671,
-     672,   673,     0,     0,     0,     0,   321,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   692,     0,
+     693,   694,   695,   696,     0,   697,   928,   699,     0,   420,
+     421,   422,   423,   424,   425,   426,   427,   428,   429,   700,
+     466,   467,   468,   469,   470,   471,   472,   689,   690,   475,
+     476,   477,   478,   479,   480,   481,   482,   483,   484,   485,
+     486,   487,   488,   489,     0,     0,   490,   491,     0,   492,
+       0,   493,   494,   495,   496,   497,   498,   499,     0,   500,
+     501,   502,   503,   504,   505,   391,   392,   393,   394,   395,
+     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
+     406,   407,   408,   409,   410,   411,   412,   413,     0,   691,
+       0,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   692,     0,
+       0,   694,     0,   696,     0,   722,   723,   699,     0,   420,
+     421,   422,   423,   424,   425,   426,   427,   428,   429,   700,
+     466,   467,   468,   469,   470,   471,   472,   689,   690,   475,
+     476,   477,   478,   479,   480,   481,   482,   483,   484,   485,
+     486,   487,   488,   489,     0,     0,   490,   491,     0,   492,
+       0,   493,   494,   495,   496,   497,   498,   499,     0,   500,
+     501,   502,   503,   504,   505,   391,   392,   393,   394,   395,
+     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
+     406,   407,   408,   409,   410,   411,   412,   413,     0,   691,
+       0,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     184,   185,   186,   674,     0,   675,     0,     0,     0,     0,
-       0,     0,   676,   677,   251,   252,   322,   323,   324,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,     0,     0,     0,     0,   142,   143,     0,   674,     0,
-       0,   144,     0,     0,     0,     0,     0,   676,   677,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,   145,   146,     0,     0,    33,     0,     0,     0,    35,
-      36,     0,     0,     0,     0,    40,     0,     0,     0,   147,
-       0,     0,     0,     0,     0,     0,   116,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   692,     0,
+       0,   694,     0,   696,     0,   697,     0,   699,     0,   420,
+     421,   422,   423,   424,   425,   426,   427,   428,   429,   700,
+       5,     6,     7,     8,     9,    10,    11,    16,    17,    18,
+      19,    20,    21,    22,   352,   161,    12,    13,    14,    15,
+     353,     0,     0,    16,    17,    18,    19,    20,    21,    22,
+     773,   161,    24,    25,     0,    26,    27,     0,   774,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   318,     0,     0,
-       0,     0,     0,     0,   117,   118,     0,     0,     0,   148,
+       0,     0,     0,     0,     0,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,     0,     0,     0,    30,
+       0,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
       50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,   119,   319,   320,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   321,     0,     0,     0,   310,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,     0,
-       0,     0,     0,     0,     0,   322,   323,   324,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-       0,   965,     0,     0,   966,     0,     0,     0,   967,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     4,     5,
-       0,     0,   965,     6,     7,   966,     0,     0,     0,   967,
-       0,     0,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,     0,    33,     0,
-       0,    34,    35,    36,     0,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,     0,     0,     0,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,   775,   776,     5,     6,
+       7,     8,     9,    10,    11,     0,     0,     0,     0,    77,
+       0,     0,     0,     0,    12,    13,    14,    15,     0,     0,
+       0,    16,    17,    18,    19,    20,    21,    22,     0,    23,
+      24,    25,     0,    26,    27,    28,    29,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    30,     0,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,     0,    76,     5,     6,     7,     8,
+       9,    10,    11,     0,     0,     0,     0,    77,     0,     0,
+       0,     0,    12,    13,    14,   231,     0,     0,     0,    16,
+      17,    18,    19,    20,    21,    22,     0,   161,    24,    25,
+       0,    26,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,   116,    85,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   116,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   117,   118,     0,     0,
+       0,     0,     0,     0,     0,    30,     0,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,     5,     6,     7,     8,     9,    10,    11,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    12,    13,    14,
+      15,     0,     0,     0,    16,    17,    18,    19,    20,    21,
+      22,     0,   161,    24,     0,    77,    26,    27,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   117,   118,     0,     0,     0,   119,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   119,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   308,   309,   310,   311,   312,   313,   314,     0,
+      30,     0,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,     5,     6,     7,     8,
+       9,    10,    11,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    12,    13,    14,   231,     0,     0,     0,    16,
+      17,    18,    19,    20,    21,    22,     0,   161,    24,     0,
+      77,    26,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   127,   128,   129,
+     130,   131,   132,   133,     0,    30,     0,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    77,   191,     0,   192,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   127,   128,   129,   130,   131,
+     132,   133,   273,   274,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    77,    30,   308,   309,   310,
+     311,   312,   313,   314,   736,   737,     0,    24,     0,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,     0,   127,   128,   129,   130,   131,   132,   133,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   318,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   135,     0,     0,     0,
+       0,     0,     0,     0,     0,   127,   128,   129,   130,   131,
+     132,   133,     0,     0,     0,     0,    77,   134,   135,   136,
+     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
+       0,     0,     0,     0,     0,     0,     0,    24,   251,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,    30,   308,   309,   310,   311,   312,   313,   314,
+     273,   274,     0,     0,    77,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,     0,     0,
+     738,     0,     0,     0,     0,     0,    77,   134,   135,   136,
+     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
+       0,   904,     0,     0,   905,     0,     0,     0,     0,     0,
+       0,     0,    77,     0,   127,   128,   129,   130,   131,   132,
+     133,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    77,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,     0,   191,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   156,     0,     0,   319,   320,     0,     0,     0,     0,
+       0,     0,   127,   128,   129,   130,   131,   132,   133,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   321,     0,     0,     0,     0,     0,
+       0,     0,    77,    30,   127,   128,   129,   130,   131,   132,
+     133,     0,     0,     0,     0,     0,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,     0,
+     127,   128,   129,   130,   131,   132,   133,   251,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    30,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    24,    77,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    77,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,     0,     0,     0,     0,     0,
+       0,     0,     0,    77,    16,    17,    18,    19,    20,    21,
+      22,   352,   161,     0,     0,     0,     0,   353,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    77,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   888,   889,   322,   323,   324,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     4,
-       5,     0,     0,     0,     6,   144,     0,     0,     0,     0,
-       0,     0,   890,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,   145,    31,     0,     0,    33,
-       0,     0,    34,    35,    36,     0,   159,    38,     0,    40,
-       0,     0,     0,   147,   160,   161,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,   389,   390,     0,     0,     0,     0,   391,
+     392,   393,   394,   395,   396,   397,   398,   399,   400,   401,
+     402,   403,   404,   405,   406,   407,   408,   409,   410,   411,
+     412,   413,     0,     0,     0,     0,     0,   154,   155,   156,
+     157,   158,   159,   160,     0,     0,     0,     0,     0,     0,
+       0,   289,   290,    12,    13,    14,   231,     0,     0,     0,
+      16,    17,    18,    19,    20,    21,    22,     0,   161,    24,
+      25,     0,    26,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   414,     0,   415,   416,     0,   417,
+     418,   419,     0,   420,   421,   422,   423,   424,   425,   426,
+     427,   428,   429,     0,     0,     0,    30,     0,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   154,   155,   156,   157,   158,   159,   160,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    12,    13,
+      14,    15,     0,     0,     0,    16,    17,    18,    19,    20,
+      21,    22,     0,   161,    24,     0,     0,    26,    27,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   148,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,   142,   143,
-       0,     0,     0,     0,   144,     0,   503,   504,   505,     0,
-     506,   507,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,   145,   146,     0,     0,    33,     0,
-       0,     0,    35,    36,     0,     0,     0,     0,    40,     0,
-       0,     0,   147,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    30,     0,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   154,   155,   156,
+     157,   158,   159,   160,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    12,    13,    14,   231,     0,     0,     0,
+      16,    17,    18,    19,    20,    21,    22,     0,   161,    24,
+       0,     0,    26,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   148,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,   142,   143,     0,
-       0,     0,     0,   144,     0,     0,     0,     0,     0,     0,
-       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,   145,   146,     0,     0,    33,     0,     0,
-       0,    35,    36,     0,   159,    38,     0,    40,     0,     0,
-       0,   147,   160,   161,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    30,     0,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   154,   155,   156,   157,   158,   159,   160,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    12,    13,
+      14,    15,     0,     0,     0,    16,    17,    18,    19,    20,
+      21,    22,     0,   161,     0,     0,     0,    26,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   148,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,   142,   143,     0,     0,
-       0,     0,   144,     0,     0,     0,     0,     0,     0,     0,
+       0,    30,     0,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   154,   155,   156,
+     157,   158,   159,   160,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    12,    13,    14,   231,     0,     0,     0,
+      16,    17,    18,    19,    20,    21,    22,     0,   161,     0,
+       0,     0,    26,   154,   155,   156,   157,   158,   159,   160,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   617,
+       0,   618,   619,     0,     0,     0,    16,    17,    18,    19,
+      20,    21,    22,     0,   161,     0,    30,     0,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    30,     0,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,   162,   163,   164,   165,   166,
+     167,   168,   169,   170,   171,   172,   173,   174
+};
+
+static const yytype_int16 yycheck[] =
+{
+       4,    27,    96,     4,    28,     4,    27,     4,    99,   100,
+     101,    15,   284,   115,     4,   120,   286,     4,    15,   321,
+       4,   602,   120,   387,   181,    29,   121,   687,    15,   109,
+     584,   727,    29,   448,   115,   115,     4,    27,   298,   581,
+     195,   195,   109,    27,   803,   286,   109,    72,   590,   120,
+     121,   802,    29,     4,   629,   668,   305,   599,   241,    72,
+     931,    29,    72,   229,   109,   835,   111,    26,    10,    11,
+     372,    23,    24,    25,   278,   826,    27,     0,    37,   950,
+     900,    72,   120,   181,    88,   905,   149,     0,   126,   115,
+      72,    88,   668,    20,   115,   120,   115,   639,    90,   180,
+     370,    88,    10,    11,   149,   109,    96,   111,    20,    36,
+      12,    38,    96,   126,   111,   775,   120,   321,   128,    26,
+     128,    28,    72,   126,    72,   329,    38,   284,    96,   370,
+      37,   115,   195,   110,   239,   112,   125,   128,   958,   124,
+     129,   126,   121,   724,   225,   149,   128,   115,   229,   153,
+     195,   196,   120,   104,   180,   120,   153,   238,   238,   180,
+     773,   180,   126,   933,   123,   740,   153,   248,   372,   126,
+     122,   126,   176,   150,   120,   330,   330,   936,   128,   176,
+     128,   286,   941,   175,   126,   177,   284,   191,   192,   176,
+     270,   195,   196,   584,   191,   192,   180,   773,   613,   196,
+     321,    72,   179,   270,   191,   192,   965,   270,   303,   785,
+     305,   602,   238,   462,   463,   381,   126,   383,   126,   238,
+      72,   802,   303,   286,   305,   270,   120,   231,   196,   248,
+     195,   806,   126,   126,   231,   239,   932,   130,    72,    72,
+     126,   120,   120,   247,   231,   826,   236,   126,   126,   120,
+     247,   372,   236,   120,   238,   126,   126,   832,   356,   126,
+     247,   836,   266,    72,   126,   370,   270,   330,   236,   266,
+     238,   239,   532,   265,   239,   267,   128,   126,   120,   266,
+     257,   258,   286,   440,   126,   330,   126,   120,   369,   369,
+     130,   120,   873,   126,   128,   128,   956,   126,   121,    72,
+     381,   124,   383,   460,   296,   126,   120,   370,   889,   126,
+     287,   120,   126,   126,   306,   307,   120,   126,   322,   128,
+     297,   286,   126,   120,   688,   322,   330,   510,   126,   126,
+     120,   885,   120,   724,   455,   518,   126,   125,   640,   641,
+     642,   126,   440,   369,   120,   887,   529,   120,   120,   125,
+     369,   375,    72,   126,   126,   128,   812,   361,   814,   126,
+     816,   126,   460,   120,   361,   330,   370,   462,   463,   126,
+     451,   375,    72,    72,   361,   126,    72,   931,   329,   120,
+     121,   462,   463,   124,   126,   369,     3,     4,     5,     6,
+       7,     8,     9,   126,   386,   126,   950,   126,   120,   121,
+     120,   369,   124,   321,   120,   370,   126,   126,   128,   133,
+     134,   802,     3,     4,     5,     6,     7,     8,     9,   225,
+     120,   120,    72,   229,   120,   128,   126,   126,   128,   128,
+     126,   121,   128,   121,   907,   826,   640,   641,   642,   912,
+     804,     3,     4,     5,     6,     7,     8,     9,   120,   121,
+     129,   455,   124,    12,   372,   123,   457,   120,   455,   120,
+     121,    26,    27,   124,   121,   455,    26,    27,   740,   446,
+     943,   944,   124,   946,     3,     4,     5,     6,     7,     8,
+       9,    72,   873,    13,    14,    15,   126,   960,   126,   126,
+     881,   882,   883,   884,   885,   886,   126,   303,   889,   305,
+     123,   803,   130,   124,   121,   121,   120,   588,    23,    24,
+      25,   130,   125,   125,   125,   125,   125,   125,   125,   640,
+     641,   642,   125,   125,   125,   795,   125,   125,   125,   624,
+     125,   127,   125,   127,   120,   120,   124,    19,    20,    21,
+     931,   622,   131,   638,    26,    27,    28,    29,    30,    31,
+      32,   127,    34,   130,   531,   127,   127,   130,   122,   950,
+      36,   127,   120,   120,   120,    30,   127,    18,   131,   120,
+     125,   125,   125,   125,   122,   381,   125,   383,   582,   123,
+     123,   127,   120,    20,   131,   582,   125,   120,   120,   125,
+     127,   861,   543,   124,   122,   582,   131,    71,   125,   803,
+     125,   127,   579,   622,   127,   127,   127,   127,   127,   127,
+     127,   127,   125,   617,   618,   619,   127,   127,   127,   127,
+     617,   618,   619,   127,   125,   127,   120,   123,   131,   127,
+     617,   618,   619,   125,   936,    13,    13,   792,   940,   941,
+     120,   127,   127,   127,   621,   451,   127,   120,   127,     4,
+     365,   668,   672,   564,   676,   857,   462,   463,   459,   668,
+     638,   460,   668,   965,   668,   731,   670,   668,   672,   668,
+     674,   668,     4,   670,   785,   672,   773,   674,   668,   808,
+     878,   668,   803,   670,   668,   672,   916,   674,   668,   356,
+     795,   785,   794,   355,   645,   932,   787,   795,   649,   650,
+     668,   962,   653,   654,   655,   656,   657,   658,   659,   660,
+     661,   662,   741,   794,   794,   870,   721,   668,   606,   668,
+     295,   904,   640,   641,   642,   295,   815,   794,    -1,   792,
+     883,   682,   936,    -1,    -1,   718,   940,   941,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   792,    -1,    -1,
+      -1,    -1,   744,   834,    -1,    -1,   861,    -1,    -1,    -1,
+      -1,   965,    -1,   857,    -1,    -1,    -1,   858,   794,   773,
+     774,   795,   773,   794,    -1,   794,    -1,   774,   584,   860,
+     860,   785,   588,   773,   865,   865,   785,    -1,   792,   773,
+     794,   795,    -1,   860,    -1,   785,   602,   774,   865,    -1,
+      -1,   785,    -1,    -1,   808,   756,   774,   870,   759,   890,
+     794,   808,    -1,    -1,    -1,   936,   793,   785,    -1,   940,
+     941,   808,   773,    -1,    -1,   870,   794,   792,    -1,   910,
+     795,    -1,    -1,    -1,   785,    -1,   828,   861,    -1,   865,
+      -1,   860,    -1,    -1,   965,    -1,   865,    -1,    -1,    -1,
+      -1,   855,    -1,    -1,    -1,    -1,   860,   861,   855,    -1,
+      -1,   865,    -1,   109,    -1,    -1,   870,   857,   855,    -1,
+      -1,    -1,    -1,   857,   120,    -1,   860,    -1,    -1,    -1,
+      -1,   865,   859,    -1,    -1,   803,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   861,   865,    -1,    -1,
+      -1,    -1,    -1,    -1,   908,   870,    -1,    -1,   912,    -1,
+      -1,   908,    -1,    -1,    -1,   912,    -1,    -1,   724,    -1,
+      -1,   908,    -1,    -1,    -1,   912,   910,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   181,    -1,    -1,    -1,    -1,
+     944,    -1,    -1,    -1,    -1,    -1,    -1,   944,    -1,    -1,
+      -1,   197,    -1,    -1,    -1,   201,   202,   944,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   239,    -1,    -1,   802,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   936,    -1,
+     826,    -1,   940,   941,   270,    -1,    -1,    -1,   834,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   284,    -1,
+     286,    -1,    -1,    -1,    -1,    -1,    -1,   965,    -1,    -1,
+      -1,    -1,    -1,    -1,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,   873,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   881,   882,   883,   884,   885,
+     886,    -1,    -1,   889,   890,    -1,   332,   333,   334,    -1,
+      -1,   337,    -1,    -1,    -1,   126,    -1,    -1,    -1,    -1,
+      -1,   132,   133,   134,    -1,    -1,    -1,    -1,    -1,    -1,
+     356,    -1,    -1,    -1,     3,     4,     5,     6,     7,     8,
+       9,   367,    -1,    -1,   370,   931,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    23,    24,    25,    -1,    -1,    -1,
+      -1,    30,    -1,    -1,   950,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    72,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   440,    -1,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    -1,
+      -1,    -1,    -1,    -1,   460,     3,     4,     5,     6,     7,
        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,   145,   146,     0,     0,    33,     0,     0,     0,
-      35,    36,     0,     0,     0,     0,    40,     0,     0,     0,
-     147,   160,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     148,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,   142,   143,     0,     0,     0,
-       0,   144,   194,     0,     0,     0,     0,     0,     0,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,   145,   146,     0,     0,    33,     0,     0,     0,    35,
-      36,     0,     0,     0,     0,    40,     0,     0,     0,   147,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   148,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,     4,     5,     0,     0,     0,     0,
-     144,     0,     0,     0,     0,     0,     0,     0,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,     0,     0,    33,     0,     0,     0,    35,    36,
-       0,     0,     0,     0,    40,     0,     0,     0,   147,     0,
-       0,   231,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   148,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,   142,   143,     0,     0,     0,     0,   144,
-     295,     0,     0,     0,     0,     0,     0,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,   145,
-     146,     0,     0,    33,     0,     0,     0,    35,    36,     0,
-       0,     0,     0,    40,     0,     0,     0,   147,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   148,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,   142,   143,     0,     0,     0,     0,   144,     0,
-       0,     0,     0,     0,     0,     0,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,   145,   146,
-       0,     0,    33,     0,     0,     0,    35,    36,     0,     0,
-       0,     0,    40,     0,     0,     0,   147,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   148,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,   142,   143,     0,     0,     0,     0,   144,     0,     0,
-       0,     0,     0,     0,     0,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,   145,   146,     0,
-       0,     0,     0,     0,     0,    35,    36,     0,     0,     0,
-       0,    40,     0,     0,     0,   147,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   148,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-     142,   143,     0,     0,     0,     0,   279,     0,     0,     0,
-       0,     0,     0,     0,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,   280,   281,   145,   146,     0,     0,
-       0,     0,     0,     0,    35,    36,     0,     0,     0,     0,
-       0,     0,     0,     0,   282,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   283,   284,   285,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,   529,
-       0,     0,     0,     0,   279,     0,     0,     0,     0,     0,
-       0,     0,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,   280,   281,   246,     0,     0,     0,     0,     0,
-       0,     0,    35,    36,     0,     0,     0,     0,   530,     0,
-       0,     0,   282,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   247,   248,     0,     0,     0,     0,     0,     0,
-       0,   249,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   250,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   283,   284,   285,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,     0,     0,   318,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     251,   252,   253,   254,   255,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   319,   320,   318,
-       0,     0,     0,     0,     0,     0,   249,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   321,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   319,   320,     0,
-       0,     0,     0,     0,     0,     0,   249,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   321,     0,     0,
-       0,     0,     0,     0,     0,   251,   252,   322,   323,   324,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,     0,     0,   246,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   322,   323,   324,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   247,   248,   116,     0,     0,     0,     0,     0,
-       0,   249,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   250,     0,     0,     0,     0,     0,     0,   318,
-       0,     0,   117,   118,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   119,     0,     0,     0,     0,   319,   320,     0,
-       0,     0,   253,   254,   255,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   321,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   322,   323,   324,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   365,   366,     0,     0,     0,     0,     0,   367,
-     368,   369,   370,   371,   372,   373,   374,   375,   376,   377,
-     378,   379,   380,   381,   382,   383,   384,   385,   386,   387,
-     388,   389,   390,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   391,     0,     0,     0,   392,
-     393,     0,   394,   395,   396,   397,   398,   399,   400,   401,
-     402,   403,   404,   405,     0,   406
-};
-
-static const yytype_int16 yycheck[] =
-{
-       4,     5,    37,   149,     3,   278,   256,    90,    92,   300,
-      43,   272,     4,     5,   413,    96,    97,    98,    99,   105,
-      92,   294,    94,   684,    94,   526,    30,    31,   533,   616,
-     757,   277,   758,    43,     3,    34,   623,   298,    30,    31,
-     310,   802,   274,   289,   226,   521,   736,   293,     5,     6,
-       7,   967,     0,   151,    44,   892,   288,   234,   156,    44,
-     292,   593,   308,    44,     5,     6,     7,    94,    37,   535,
-     302,   317,    94,    42,   951,   307,   139,   135,   176,   620,
-      94,   139,    94,    43,   316,    45,   263,     5,     6,     7,
-       9,   135,   190,   843,    94,    94,     6,  1013,   102,    94,
-     198,    60,     5,     6,     7,    50,   766,     5,     6,     7,
-     256,   948,     5,     6,     7,    60,    94,   139,    37,    38,
-     134,   871,    94,   135,   159,   785,  1003,    37,    38,   759,
-     760,   892,   364,   102,    93,   168,    46,   797,    57,   139,
-     135,  1018,   240,   619,   134,    94,   232,   233,   181,   182,
-     142,   143,   235,   145,   146,   236,   237,   147,   168,   691,
-     150,   139,   147,   135,   630,   150,   147,   139,   350,   150,
-     197,   181,   182,   135,    43,   139,   926,   263,    97,    98,
-      99,   138,    92,   143,   135,   134,   135,   948,   135,   135,
-     139,   692,    94,   103,    43,   193,   200,   138,   197,   135,
-     204,   205,    94,   207,   208,   209,   210,   211,   212,   213,
-     214,   215,   216,   217,   218,   219,   220,    94,   137,    94,
-     138,   135,   226,   883,   756,   766,    94,   225,   232,   233,
-     234,   732,   134,    94,   238,   138,   916,   769,   271,   272,
-     138,    94,   134,   420,   785,   138,     3,     4,   135,   159,
-     837,   161,   256,   163,   287,   945,   797,   135,   135,   263,
-     135,   271,   272,   261,    94,   298,   134,   537,   134,    94,
-     996,   137,   134,     9,   135,    94,   781,   287,   139,   135,
-     142,   134,    94,    40,   194,  1012,   290,   256,   298,   969,
-     970,   135,   972,   135,   881,   975,   828,   153,   885,   168,
-     134,    37,    38,   272,   134,   135,   135,   135,   142,   139,
-     135,   315,   181,   182,   139,   134,   135,    53,   134,    55,
-     139,    57,   326,   327,   328,   134,   142,   331,   137,   298,
-     139,   135,   141,   135,   134,    46,   135,   137,   843,   600,
-     134,   141,   883,   137,   135,   139,   350,   141,   594,  1010,
-     135,   135,     9,   357,   135,   135,     5,     6,     7,   135,
-       9,    97,    98,    99,   865,   275,   627,   277,   139,   601,
-     602,   603,   604,   605,   906,   555,    94,   137,   139,   289,
-      37,    38,    50,   293,   135,   295,   484,   485,    37,    38,
-      94,   140,   490,   491,    94,    94,   494,    94,   308,     9,
-      57,   800,   271,   272,    94,   134,   134,   317,    57,   137,
-     911,   139,   134,   141,   134,   134,   420,     9,   287,    94,
-      94,    94,   143,   924,    94,   141,   699,    37,    38,   298,
-     153,   435,   137,   706,    44,    71,    72,   154,   134,   137,
-      97,    98,    99,   734,   136,    37,    38,    57,    97,    98,
-      99,   724,   134,   142,   700,     9,   142,    11,    12,    13,
-      14,    15,    16,   643,   644,    57,   142,   647,   648,   649,
-     650,   651,   652,   653,   654,   655,   656,   142,   142,   512,
-     142,   142,   142,    37,    38,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   512,    57,   142,    97,    98,    99,   144,   145,
-     142,   147,   148,   149,   150,   151,   152,   521,   142,   142,
-     142,   134,   526,   142,   137,   135,   139,   136,   141,   134,
-     534,   535,   137,   136,   139,   142,   141,   147,   142,   134,
-     150,   134,   153,    97,    98,    99,   134,   134,   134,   137,
-     137,   139,   139,   141,   141,   588,   134,   153,    94,   136,
-     136,   135,   742,    94,   568,   140,   137,   600,   140,   142,
-     137,   140,   138,   143,   142,   608,   609,   610,   588,   140,
-     137,   136,    94,   844,   140,    52,   136,   620,   140,   142,
-     600,   138,   140,   142,   627,   136,   142,   135,   608,   609,
-     610,    16,    16,   154,   141,   135,   138,   142,   136,   154,
-     620,   153,   138,   874,   153,   619,   620,   627,   136,   142,
-     139,    10,   136,   140,   137,   136,   630,   142,   878,   136,
-     136,   136,   136,   136,   136,   136,   136,   136,    11,    11,
-     136,   135,   135,   512,   142,   142,   136,   142,   137,   141,
-     137,   142,   136,   136,   136,   135,   689,    50,   135,   135,
-     135,   135,   912,   135,   135,   135,   154,   135,    43,   135,
-     135,   704,   922,   135,   135,   135,   140,   909,   136,   689,
-     136,   136,   136,   136,   594,   142,   136,   134,   692,   134,
-     136,   135,   919,   134,   704,   138,   138,   781,   136,   136,
-     134,   136,   704,   781,   781,   734,   908,   272,   833,   781,
-     781,   781,   887,   233,  1010,   893,   827,   544,   106,   951,
-     107,   902,   781,    -1,   757,   758,   759,   760,   732,   639,
-      -1,   600,   982,   766,    -1,    -1,    -1,   835,    -1,   608,
-     609,   610,   228,    -1,    -1,    -1,    -1,   757,   758,   759,
-     760,   983,   785,    -1,    -1,    -1,   766,    -1,   627,    -1,
-      -1,    -1,   766,    -1,   797,    -1,    -1,   913,   249,    -1,
-    1002,  1003,    -1,   843,    -1,   785,    -1,    -1,    -1,    -1,
-      -1,   785,   781,   866,    -1,   868,  1018,   797,    -1,    -1,
-     700,   872,   873,   797,   875,    -1,    -1,    -1,   802,   871,
-     833,   871,    -1,    -1,    -1,    -1,   892,    -1,    -1,   844,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     689,   731,    -1,   833,    -1,    -1,    -1,    -1,    -1,   739,
-     928,    -1,    -1,    -1,    -1,   704,    -1,    -1,    -1,   920,
-     921,    -1,    -1,    -1,   843,    -1,    -1,    -1,    -1,   932,
-     883,    -1,   933,   934,    -1,    -1,    -1,     9,    -1,    -1,
-      -1,   865,    -1,    -1,    -1,    -1,    -1,    -1,   966,    -1,
-      -1,    -1,   871,   883,   878,    -1,    -1,    -1,    -1,   883,
-      -1,    -1,    -1,    -1,    -1,    37,    38,    -1,   892,    -1,
-      -1,    -1,    44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    57,    -1,   911,   912,    -1,
-     914,   915,   916,    -1,    -1,    -1,    -1,    -1,   922,    -1,
-     924,    -1,   914,   915,   916,    -1,    -1,   926,   838,    -1,
-      -1,    -1,    -1,    -1,   844,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   948,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-      -1,    -1,    -1,   996,   833,    -1,    -1,    -1,    -1,   973,
-     974,   975,    -1,    -1,    -1,    -1,    -1,    -1,   982,  1012,
-      -1,    -1,    -1,    -1,    -1,    -1,   996,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   147,    -1,    -1,   150,    -1,
-      -1,    -1,  1012,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    -1,
-      50,    -1,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    -1,    62,    63,    -1,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   134,   135,    -1,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,    -1,   155,   156,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    -1,    50,    -1,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    -1,    62,    63,    -1,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   134,   135,
-     136,   137,    -1,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,    -1,   155,
-     156,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    -1,    50,    -1,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    -1,
-      62,    63,    -1,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   134,   135,    -1,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,    -1,   155,   156,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    -1,    50,    -1,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    -1,    62,    63,    -1,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   134,   135,    -1,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,    -1,   155,   156,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    -1,    50,    -1,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    -1,    62,    63,
-      -1,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     134,   135,   136,   137,    -1,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-      -1,   155,   156,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    -1,
-      50,    -1,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    -1,    62,    63,    -1,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   134,   135,   136,   137,    -1,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,    -1,   155,   156,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    -1,    50,    -1,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    -1,    62,    63,    -1,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   134,   135,
-      -1,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,    -1,   155,
-     156,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    -1,    50,    -1,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    -1,
-      62,    63,    -1,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   134,   135,   136,   137,    -1,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,    -1,   155,   156,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    -1,    50,    -1,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    -1,    62,    63,    -1,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   134,   135,   136,   137,
-      -1,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,    -1,   155,   156,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    -1,    50,    -1,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    -1,    62,    63,
-      -1,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     134,   135,   136,   137,    -1,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-      -1,   155,   156,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    -1,
-      50,    -1,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    -1,    62,    63,    -1,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   134,   135,    -1,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,    -1,   155,   156,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    -1,    50,    -1,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    -1,    62,    63,    -1,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   134,   135,
-      -1,   137,    -1,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    -1,    50,    -1,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    -1,
-      62,    63,    -1,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   134,   135,   136,   137,    -1,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,    -1,   155,   156,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    -1,    50,    -1,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    -1,    62,    63,    -1,    65,    66,    67,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
+      -1,    29,    30,   132,    32,    -1,    34,    35,    36,    37,
+      38,    39,    40,    -1,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
       68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
       78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
       88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   134,   135,   136,   137,
-      -1,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,    -1,   155,   156,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    -1,    50,    -1,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    -1,    62,    63,
-      -1,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+     556,    -1,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,
+      -1,    -1,   120,   121,   122,   123,   124,   125,   126,    -1,
+     128,   129,   130,    -1,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,    -1,    -1,    -1,    -1,    -1,
       74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     134,   135,    -1,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-      -1,   155,   156,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    -1,
-      50,    -1,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    -1,    62,    63,    -1,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   135,   136,   137,    -1,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,    -1,   155,   156,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    -1,    50,    -1,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    -1,    62,    63,    -1,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   134,   135,
-      -1,   137,    -1,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,    -1,   155,
-     156,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    -1,    50,    -1,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    -1,
-      62,    63,    -1,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   134,   135,    -1,   137,    -1,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,    -1,   155,   156,     3,     4,    -1,    -1,    -1,
-       8,     9,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    -1,    43,    -1,    -1,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    -1,    56,    57,
-      58,    59,    60,    61,    -1,    -1,    64,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,     3,     4,    -1,
-      -1,    -1,     8,     9,    -1,    -1,    -1,    -1,   146,    -1,
-      -1,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    -1,    -1,    43,    -1,    -1,
-      46,    47,    48,    -1,    50,    51,    52,    53,    -1,    -1,
-      -1,    57,    58,    59,    -1,    -1,    -1,    -1,    64,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      84,    -1,    -1,    -1,    -1,    -1,    -1,   623,    -1,    -1,
+      -1,    -1,    -1,   629,    -1,    -1,     3,     4,     5,     6,
+       7,     8,     9,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    19,    20,    21,    22,   120,    -1,    -1,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    -1,   133,
+     134,    38,   668,    -1,    -1,    42,    43,    -1,    -1,    -1,
+     676,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    -1,    72,    -1,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      -1,    -1,    -1,    -1,   740,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   123,    -1,   125,   126,
+      -1,   128,   129,   130,    -1,   132,   133,   134,   135,   136,
+     137,   138,   139,   140,   141,    -1,    -1,   773,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   785,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   794,   795,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,    -1,    -1,    -1,    -1,
+     806,    -1,    -1,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   832,    -1,    -1,    -1,
+     836,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,    -1,
-      -1,    -1,     8,     9,    -1,    -1,    -1,    -1,    -1,    -1,
-     146,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    -1,    -1,    43,    -1,    -1,
-      46,    47,    48,    -1,    50,    51,    -1,    53,    -1,    -1,
-      -1,    57,    58,    59,    -1,    -1,    -1,    -1,    64,    -1,
+     132,   133,   134,    -1,   860,   861,    -1,    -1,    -1,   865,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    -1,    -1,    29,    30,    -1,    32,
+      -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   120,   121,   122,
+     123,   124,   125,   126,    -1,   128,   129,   130,    -1,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    -1,    -1,    29,    30,    -1,    32,
+      -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   120,   121,   122,
+     123,   124,   125,   126,    -1,   128,   129,   130,    -1,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    -1,    -1,    29,    30,    -1,    32,
+      -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   120,   121,    -1,
+     123,   124,   125,   126,    -1,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    -1,    -1,    29,    30,    -1,    32,
+      -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,    -1,
-      -1,    -1,     8,     9,    -1,    -1,    -1,    -1,    -1,    -1,
-     146,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    -1,    -1,    43,    -1,    -1,
-      -1,    47,    48,    -1,    50,    51,    -1,    53,    -1,    -1,
-      -1,    57,    58,    59,    -1,    -1,    -1,    -1,    64,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   120,   121,    -1,
+     123,   124,   125,   126,   127,   128,   129,   130,    -1,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    -1,    -1,    29,    30,    -1,    32,
+      -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   120,   121,   122,
+     123,   124,   125,   126,    -1,   128,   129,   130,    -1,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    -1,    -1,    29,    30,    -1,    32,
+      -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   120,   121,    -1,
+     123,   124,   125,   126,    -1,   128,   129,   130,    -1,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    -1,    -1,    29,    30,    -1,    32,
+      -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   121,    -1,
+     123,   124,   125,   126,   127,   128,   129,   130,    -1,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    -1,    -1,    29,    30,    -1,    32,
+      -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,    -1,
-      -1,    -1,    -1,     9,    -1,    -1,    -1,    -1,    -1,    -1,
-     146,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    -1,    -1,    43,    -1,    -1,
-      -1,    47,    48,    -1,    50,    51,    -1,    53,    -1,    -1,
-      -1,    57,    58,    59,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   120,   121,    -1,
+     123,   124,   125,   126,    -1,   128,   129,   130,    -1,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    -1,    -1,    29,    30,    -1,    32,
+      -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   120,   121,    -1,
+     123,   124,   125,   126,    -1,   128,   129,   130,    -1,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    -1,    -1,    29,    30,    -1,    32,
+      -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    -1,    72,
+      -1,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   120,   121,   122,
+     123,   124,   125,   126,    -1,   128,   129,   130,    -1,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    -1,    -1,    29,    30,    -1,    32,
+      -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    -1,    72,
+      -1,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   121,    -1,
+     123,   124,   125,   126,   127,   128,   129,   130,    -1,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    -1,    -1,    29,    30,    -1,    32,
+      -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    -1,    72,
+      -1,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,    -1,
-      -1,    -1,    -1,     9,    -1,    -1,    -1,    -1,    -1,    -1,
-     146,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,     9,    -1,    43,    -1,    -1,
-      -1,    47,    48,    -1,    -1,    -1,    -1,    53,    -1,    -1,
-      -1,    57,    58,    -1,    -1,    -1,    -1,    -1,    64,    -1,
-      -1,    -1,    -1,    37,    38,    -1,    -1,    -1,    -1,    -1,
-      44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    57,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,    -1,    -1,    -1,    -1,
-       9,    -1,    11,    12,    13,    -1,    15,    16,    -1,    -1,
-      -1,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,    37,    38,
-     146,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,     9,    -1,    -1,
-      -1,    -1,    -1,   147,    -1,    -1,   150,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,     9,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    37,    38,    -1,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,    37,    38,    57,    -1,    -1,    -1,    -1,
-      -1,    -1,    46,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    57,    -1,    -1,   135,    -1,    -1,    -1,
-      -1,    -1,     9,    -1,    -1,   144,   145,   146,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-      37,    38,     9,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,    -1,    -1,
-      57,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      37,    38,    -1,    -1,   146,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   121,    -1,
+     123,   124,   125,   126,   127,   128,   129,   130,    -1,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    -1,    -1,    29,    30,    -1,    32,
+      -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    -1,    72,
+      -1,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      57,    -1,   146,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,    -1,    -1,     9,    10,    11,
-      12,    13,    14,    15,    16,    -1,    -1,    -1,    -1,    -1,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,    37,    38,    -1,    -1,   146,
-      -1,    -1,     9,    10,    11,    12,    13,    14,    15,    16,
-      -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,     9,    -1,
-      -1,    -1,    -1,    65,    66,    67,    68,    -1,    -1,   146,
-      37,    38,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    37,    38,    -1,    -1,
-      57,    -1,    -1,    -1,    -1,    97,    98,    99,    65,    66,
-      67,    68,    -1,    -1,    -1,    -1,    57,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   121,    -1,
+     123,   124,   125,   126,   127,   128,   129,   130,    -1,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    -1,    -1,    29,    30,    -1,    32,
+      -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    -1,    72,
+      -1,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   121,    -1,
+     123,   124,   125,   126,    -1,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    -1,    -1,    29,    30,    -1,    32,
+      -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    -1,    72,
+      -1,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      97,    98,    99,   135,    -1,   137,    -1,    -1,    -1,    -1,
-      -1,    -1,   144,   145,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,    -1,    -1,    -1,    -1,     3,     4,    -1,   135,    -1,
-      -1,     9,    -1,    -1,    -1,    -1,    -1,   144,   145,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    -1,    -1,    43,    -1,    -1,    -1,    47,
-      48,    -1,    -1,    -1,    -1,    53,    -1,    -1,    -1,    57,
-      -1,    -1,    -1,    -1,    -1,    -1,     9,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   121,    -1,
+     123,   124,   125,   126,    -1,   128,   129,   130,    -1,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    -1,    -1,    29,    30,    -1,    32,
+      -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    -1,    72,
+      -1,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,     9,    -1,    -1,
-      -1,    -1,    -1,    -1,    37,    38,    -1,    -1,    -1,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,    57,    37,    38,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   121,    -1,
+     123,   124,   125,   126,    -1,   128,   129,   130,    -1,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    -1,    -1,    29,    30,    -1,    32,
+      -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    -1,    72,
+      -1,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,    -1,   137,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   121,    -1,
+      -1,   124,    -1,   126,    -1,   128,   129,   130,    -1,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    -1,    -1,    29,    30,    -1,    32,
+      -1,    34,    35,    36,    37,    38,    39,    40,    -1,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    -1,    72,
+      -1,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,    -1,
-      -1,    -1,    -1,    -1,    -1,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-      -1,   134,    -1,    -1,   137,    -1,    -1,    -1,   141,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
-      -1,    -1,   134,     8,     9,   137,    -1,    -1,    -1,   141,
-      -1,    -1,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    -1,    43,    -1,
-      -1,    46,    47,    48,    -1,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   121,    -1,
+      -1,   124,    -1,   126,    -1,   128,    -1,   130,    -1,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+       3,     4,     5,     6,     7,     8,     9,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    19,    20,    21,    22,
+      39,    -1,    -1,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    -1,    38,    39,    -1,    41,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    -1,    -1,    -1,    72,
+      -1,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,     3,     4,
+       5,     6,     7,     8,     9,    -1,    -1,    -1,    -1,   132,
+      -1,    -1,    -1,    -1,    19,    20,    21,    22,    -1,    -1,
+      -1,    26,    27,    28,    29,    30,    31,    32,    -1,    34,
+      35,    36,    -1,    38,    39,    40,    41,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    97,    98,    99,   100,   101,   102,   103,   104,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
      105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,     9,   134,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,     9,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    37,    38,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    37,    38,    -1,    -1,    -1,    57,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    57,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,     9,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   137,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   137,    -1,    -1,    37,    38,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    57,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
-       4,    -1,    -1,    -1,     8,     9,    -1,    -1,    -1,    -1,
-      -1,    -1,   135,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    -1,    -1,    43,
-      -1,    -1,    46,    47,    48,    -1,    50,    51,    -1,    53,
-      -1,    -1,    -1,    57,    58,    59,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,     3,     4,
-      -1,    -1,    -1,    -1,     9,    -1,    11,    12,    13,    -1,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    -1,    -1,    43,    -1,
-      -1,    -1,    47,    48,    -1,    -1,    -1,    -1,    53,    -1,
-      -1,    -1,    57,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     115,   116,   117,   118,    -1,   120,     3,     4,     5,     6,
+       7,     8,     9,    -1,    -1,    -1,    -1,   132,    -1,    -1,
+      -1,    -1,    19,    20,    21,    22,    -1,    -1,    -1,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      -1,    38,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,     3,     4,    -1,
-      -1,    -1,    -1,     9,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    -1,    -1,    43,    -1,    -1,
-      -1,    47,    48,    -1,    50,    51,    -1,    53,    -1,    -1,
-      -1,    57,    58,    59,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    72,    -1,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,     3,     4,     5,     6,     7,     8,     9,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    19,    20,    21,
+      22,    -1,    -1,    -1,    26,    27,    28,    29,    30,    31,
+      32,    -1,    34,    35,    -1,   132,    38,    39,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,     3,     4,     5,     6,     7,     8,     9,    -1,
+      72,    -1,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,     3,     4,     5,     6,
+       7,     8,     9,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    19,    20,    21,    22,    -1,    -1,    -1,    26,
+      27,    28,    29,    30,    31,    32,    -1,    34,    35,    -1,
+     132,    38,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,     3,     4,     5,
+       6,     7,     8,     9,    -1,    72,    -1,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,   132,    38,    -1,    40,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   132,    72,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    -1,    35,    -1,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    -1,     3,     4,     5,     6,     7,     8,     9,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,     3,     4,    -1,    -1,
-      -1,    -1,     9,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    -1,    -1,    43,    -1,    -1,    -1,
-      47,    48,    -1,    -1,    -1,    -1,    53,    -1,    -1,    -1,
-      57,    58,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,     3,     4,    -1,    -1,    -1,
-      -1,     9,    10,    -1,    -1,    -1,    -1,    -1,    -1,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    -1,    -1,    43,    -1,    -1,    -1,    47,
-      48,    -1,    -1,    -1,    -1,    53,    -1,    -1,    -1,    57,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,     3,     4,    -1,    -1,    -1,    -1,
-       9,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    -1,    -1,    43,    -1,    -1,    -1,    47,    48,
-      -1,    -1,    -1,    -1,    53,    -1,    -1,    -1,    57,    -1,
-      -1,    60,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,     3,     4,    -1,    -1,    -1,    -1,     9,
-      10,    -1,    -1,    -1,    -1,    -1,    -1,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    -1,    -1,    43,    -1,    -1,    -1,    47,    48,    -1,
-      -1,    -1,    -1,    53,    -1,    -1,    -1,    57,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,     7,
+       8,     9,    -1,    -1,    -1,    -1,   132,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    35,    36,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    72,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    -1,    -1,   132,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    -1,    -1,
+     126,    -1,    -1,    -1,    -1,    -1,   132,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      -1,   121,    -1,    -1,   124,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   132,    -1,     3,     4,     5,     6,     7,     8,
+       9,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   132,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    -1,    38,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,     3,     4,     5,     6,     7,     8,     9,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,     3,     4,    -1,    -1,    -1,    -1,     9,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      -1,    -1,    43,    -1,    -1,    -1,    47,    48,    -1,    -1,
-      -1,    -1,    53,    -1,    -1,    -1,    57,    -1,    -1,    -1,
+      -1,    -1,   132,    72,     3,     4,     5,     6,     7,     8,
+       9,    -1,    -1,    -1,    -1,    -1,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    -1,
+       3,     4,     5,     6,     7,     8,     9,    36,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    35,   132,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   132,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   132,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    -1,    -1,    -1,    -1,    39,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   132,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,     3,     4,    -1,    -1,    -1,    -1,     9,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    -1,
-      -1,    -1,    -1,    -1,    -1,    47,    48,    -1,    -1,    -1,
-      -1,    53,    -1,    -1,    -1,    57,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    42,    43,    -1,    -1,    -1,    -1,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
+       6,     7,     8,     9,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   133,   134,    19,    20,    21,    22,    -1,    -1,    -1,
+      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
+      36,    -1,    38,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   123,    -1,   125,   126,    -1,   128,
+     129,   130,    -1,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,    -1,    -1,    -1,    72,    -1,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,     3,     4,     5,     6,     7,     8,     9,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    19,    20,
+      21,    22,    -1,    -1,    -1,    26,    27,    28,    29,    30,
+      31,    32,    -1,    34,    35,    -1,    -1,    38,    39,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-       3,     4,    -1,    -1,    -1,    -1,     9,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    -1,    -1,
-      -1,    -1,    -1,    -1,    47,    48,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    57,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    72,    -1,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,     3,     4,     5,
+       6,     7,     8,     9,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    19,    20,    21,    22,    -1,    -1,    -1,
+      26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
+      -1,    -1,    38,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,     4,
-      -1,    -1,    -1,    -1,     9,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,     9,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    47,    48,    -1,    -1,    -1,    -1,    53,    -1,
-      -1,    -1,    57,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    37,    38,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    46,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    57,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,    -1,    -1,     9,
+      -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,     3,     4,     5,     6,     7,     8,     9,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    19,    20,
+      21,    22,    -1,    -1,    -1,    26,    27,    28,    29,    30,
+      31,    32,    -1,    34,    -1,    -1,    -1,    38,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,    37,    38,     9,
-      -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    37,    38,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,    -1,    -1,     9,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,    37,    38,     9,    -1,    -1,    -1,    -1,    -1,
-      -1,    46,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    57,    -1,    -1,    -1,    -1,    -1,    -1,     9,
-      -1,    -1,    37,    38,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    57,    -1,    -1,    -1,    -1,    37,    38,    -1,
-      -1,    -1,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,    57,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,    62,    63,    -1,    -1,    -1,    -1,    -1,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      -1,    72,    -1,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,     3,     4,     5,
+       6,     7,     8,     9,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    19,    20,    21,    22,    -1,    -1,    -1,
+      26,    27,    28,    29,    30,    31,    32,    -1,    34,    -1,
+      -1,    -1,    38,     3,     4,     5,     6,     7,     8,     9,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    19,
+      -1,    21,    22,    -1,    -1,    -1,    26,    27,    28,    29,
+      30,    31,    32,    -1,    34,    -1,    72,    -1,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    72,    -1,    74,    75,    76,    77,    78,    79,
       80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   135,    -1,    -1,    -1,   139,
-     140,    -1,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,    -1,   155
+      90,    91,    92,    93,    94,    95,    96,    97
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint16 yystos[] =
 {
-       0,   158,     0,   159,     3,     4,     8,     9,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    43,    46,    47,    48,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   134,   160,   161,   162,   164,
-     178,   194,   195,   196,   197,   206,   208,   209,   213,   214,
-     215,   252,   283,   284,   285,   286,   287,   288,   290,   298,
-     299,   303,   304,   305,   306,   321,     9,    37,    38,    57,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   137,   280,   281,   282,   305,
-     280,   305,     3,     4,     9,    39,    40,    57,    97,   285,
-     299,   135,   139,   180,   280,   305,   137,   280,   305,    50,
-      58,    59,   283,   284,   285,   299,   285,   139,   289,     9,
-      37,    38,    57,    97,    98,    99,   137,   299,     9,    37,
-      38,    53,    55,    57,    97,    98,    99,   290,   297,   298,
-     135,   139,    50,    60,    10,   285,   255,   135,   135,   139,
-     135,   135,   135,   135,   135,   135,   135,   135,   135,   135,
-     135,   135,   135,   135,   135,   135,   135,   135,   135,   135,
-     135,    44,   147,   150,   254,   257,   258,   300,   301,   302,
-     254,    60,   164,   178,   285,   164,   208,   214,   283,   134,
-     137,   226,   226,   226,   226,   226,     9,    37,    38,    46,
-      57,    95,    96,    97,    98,    99,   210,   218,   220,   223,
-     227,   253,   262,   265,   272,   280,   299,   285,   300,   288,
-     287,    94,    94,   134,   346,   139,   167,   139,   165,     9,
-      37,    38,    57,    97,    98,    99,   218,    94,   346,   292,
-     137,   179,   346,   139,   169,    10,   135,   285,    94,   140,
-     198,   297,   346,   163,   297,   297,   134,   346,   291,   255,
-     137,   285,   134,   142,   208,   283,   346,   293,     9,    37,
-      38,    57,    97,    98,    99,   280,   323,   326,   327,   280,
-     280,   331,   280,   280,   280,   280,   280,   280,   280,   280,
-     280,   280,   280,   280,   280,   280,   134,   255,   253,   280,
-     259,   150,   302,   134,   134,   248,   280,   300,   248,   262,
-     254,   226,   226,   280,   346,    62,    63,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,   135,   139,   140,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   155,   344,   345,   218,
-     223,   299,   219,   224,   255,   143,   249,   250,   262,   270,
-     300,   273,   274,   275,   135,   139,    94,   297,     9,    37,
-      38,    57,    97,    98,    99,   146,   215,   231,   233,   280,
-     297,   299,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    50,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    62,    63,    65,    66,
-      67,    68,    93,    94,    95,    96,    97,    98,    99,   134,
-     135,   137,   138,   141,   153,   156,   306,   345,   348,   349,
-     350,   351,   352,    11,    12,    13,    15,    16,   184,   285,
-     294,   296,   141,   174,   294,   174,   136,   294,   181,   182,
-     280,   137,   138,   294,   174,   216,   146,   231,   299,     4,
-      53,   199,   201,   202,   203,   304,   138,   137,   134,   134,
-     136,   294,   134,   158,   256,   136,   136,   294,   142,   280,
-     280,   280,   142,   142,   280,   142,   142,   142,   142,   142,
-     142,   142,   142,   142,   142,   142,   136,   136,   142,   253,
-     134,   280,   134,   134,   134,   138,   153,   153,   136,   154,
-     221,    94,    43,    45,   143,   225,   225,   134,   251,   136,
-     262,   276,   278,   228,   229,   238,   239,   280,   232,   135,
-      94,   346,   346,   346,   346,   346,   140,   142,     5,     6,
-       7,   175,   176,   297,   137,   140,   137,   140,   138,   142,
-     143,   181,   140,   137,   241,   242,   238,    94,   140,   142,
-     197,   204,   280,   204,   158,   140,   138,   257,   140,   322,
-     142,   136,   136,   328,   330,   142,   303,   334,   336,   338,
-     340,   335,   337,   339,   341,   342,   343,   280,   154,   154,
-     135,    16,    16,    10,    11,    12,    13,    14,    15,    16,
-      65,    66,    67,    68,   135,   137,   144,   145,   297,   307,
-     312,   318,   319,   320,   263,   153,   241,   294,   135,   141,
-     235,   234,   146,   231,   136,   136,   136,   138,   154,   168,
-     295,   297,   297,   297,   142,   171,   166,   171,   181,     9,
-      57,    97,   135,   144,   145,   146,   183,   184,   185,   189,
-     280,   290,   298,   138,   170,   171,   136,    60,    93,   243,
-     245,   246,   146,   231,   200,   204,   205,   138,   285,   324,
-     303,   303,   332,   136,   303,   303,   303,   303,   303,   303,
-     303,   303,   303,   303,   142,   309,   222,   315,   308,   314,
-     313,   139,    10,   135,   267,   274,   277,   136,   140,   240,
-     237,   297,   241,   238,   174,   294,   175,     5,     6,     7,
-     138,   172,   177,   174,   138,   188,    71,    72,   144,   145,
-     147,   148,   149,   150,   151,   152,   190,   186,   174,   138,
-     217,   142,   285,   238,   199,   249,   136,   285,   329,   136,
-     303,   136,   136,   136,   136,   136,   136,   136,   136,   142,
-     142,   136,   241,   312,   307,   320,   320,   316,   268,   185,
-     279,   135,   241,   142,   236,   135,   136,   137,     8,     9,
-      37,    38,    41,    49,    50,    57,    61,    64,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   133,   134,   146,   164,   173,   178,   194,
-     196,   197,   207,   211,   212,   214,   231,   252,   283,   321,
-     141,   137,   185,   187,   185,   137,   225,   244,    95,    96,
-     135,   260,   264,   271,   272,   325,   142,   333,    11,    11,
-     136,   136,   310,   286,   241,   154,   230,   136,   237,   346,
-     171,   146,   283,   285,     3,     4,    40,   191,   192,   197,
-     211,   214,   283,    64,   146,   231,   135,    50,   135,   238,
-     254,   254,   164,   211,   214,   226,   226,   231,   226,   223,
-     171,   136,   185,   171,   243,   247,   260,   269,   300,   273,
-     136,   347,   136,   136,   136,   142,   309,   140,   136,   241,
-     236,   136,   138,   238,   223,   134,   137,   141,   193,   280,
-     280,   193,   280,     3,     4,    40,   192,   226,   226,   238,
-       8,   211,   283,   346,   134,   134,   254,   226,   226,   138,
-     138,   249,   136,   260,   136,   349,   311,   138,   135,    43,
-     266,   136,   346,   347,   193,   193,   193,   136,   136,   134,
-     261,   307,   317,   138,   134,   134,   267,   312,   347,   136,
-     134
+       0,   144,   145,     0,   146,     3,     4,     5,     6,     7,
+       8,     9,    19,    20,    21,    22,    26,    27,    28,    29,
+      30,    31,    32,    34,    35,    36,    38,    39,    40,    41,
+      72,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   120,   132,   147,   148,
+     149,   150,   152,   153,   154,   155,   156,   158,   161,   175,
+     176,   178,   186,   187,   196,   198,   199,   216,   217,   218,
+     219,   222,   223,   226,   232,   259,   289,   290,   291,   292,
+     294,   295,   296,   298,   299,   302,   303,   304,   305,   306,
+     308,   309,   312,   319,   320,   321,   327,     3,     4,     5,
+       6,     7,     8,     9,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,   289,   291,   292,
+     296,    12,   128,   313,     3,     4,     5,     6,     7,     8,
+       9,    34,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,   156,   161,   176,   291,   296,
+     302,   308,     3,     4,     5,     6,     7,     8,     9,   121,
+     299,    38,    40,   197,   289,   292,   295,   126,   126,   126,
+     126,   126,   126,   126,   126,   126,   126,   126,   126,   126,
+     126,   126,   126,   126,   126,   126,   126,   126,     3,     4,
+       5,     6,     7,     8,     9,   300,   157,   160,   289,   300,
+     121,    22,   148,   154,   155,   183,   199,   216,   302,   308,
+     120,   121,   237,   237,   237,   237,   126,   161,   302,   308,
+     120,    36,   223,   240,   241,   244,   290,   294,   296,   298,
+     295,   290,   291,   295,   128,   156,   161,   176,   187,   223,
+     292,   303,   312,    10,    11,   227,   229,   231,   232,   233,
+     238,   240,   260,   268,   271,   279,   292,   296,   298,   133,
+     134,   265,   322,   323,   324,   326,   310,   296,   121,   129,
+     200,   289,    12,   300,   289,   300,   156,   176,     3,     4,
+       5,     6,     7,     8,     9,   191,   192,   195,   268,   279,
+     298,   375,   123,   151,   289,   289,   120,   226,   231,   232,
+     292,   298,   329,   332,   333,   298,   298,   337,   298,   298,
+     298,   298,   298,   298,   298,   298,   298,   298,   298,   298,
+     298,   298,    33,    39,   261,   264,   265,   301,   303,   321,
+     121,   124,   168,   169,   120,   159,   261,   177,   289,   302,
+     292,   298,   375,   224,   289,   293,   126,   242,   295,   295,
+     297,   300,   289,   300,   223,   241,   311,   228,   126,    42,
+      43,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,   123,   125,   126,   128,   129,   130,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     351,   352,   234,   126,   262,   123,   256,   257,   268,   277,
+     322,   281,   282,   283,   227,   233,   296,   124,   325,   323,
+     324,   300,   145,   201,   203,   204,   206,   208,   188,   190,
+     265,   188,   300,   300,   189,   126,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      29,    30,    32,    34,    35,    36,    37,    38,    39,    40,
+      42,    43,    44,    45,    46,    47,    71,    72,    73,   120,
+     121,   122,   123,   124,   125,   126,   128,   129,   130,   142,
+     319,   352,   353,   354,   377,   378,   379,   380,   381,   382,
+     291,   296,   121,   120,   226,   231,   125,   298,   298,   298,
+     125,   125,   298,   125,   125,   125,   125,   125,   125,   125,
+     125,   125,   125,   125,   127,   127,   125,   120,   262,   260,
+     162,    23,    24,    25,    30,   170,   171,   174,   289,   168,
+     120,   179,   180,   181,   298,   298,   122,   249,   250,   296,
+     299,   245,   124,   246,   361,   261,   120,   261,   300,   234,
+     230,   130,   130,   127,   131,    26,    37,   123,   235,   239,
+     120,   125,   258,   127,   268,   130,   284,   285,    13,    14,
+      15,   280,   306,   307,   122,   125,   129,    19,    21,    22,
+     291,   296,   302,   314,   315,   318,   319,    20,    38,   211,
+     199,   120,   189,   195,   120,   188,   188,   120,   125,   193,
+     375,   375,   375,   120,   145,   328,   125,   127,   127,   334,
+     336,   125,   308,   340,   342,   344,   346,   341,   343,   345,
+     347,   348,   349,   298,    23,    24,    25,   122,   163,   164,
+     173,   174,   125,    30,   172,   122,   125,   123,   123,   127,
+     251,   253,   254,   295,   249,   247,   248,   289,   243,    10,
+      11,    72,   121,   123,   124,   125,   126,   128,   129,   130,
+     142,   320,   321,   352,   353,   354,   356,   363,   364,   365,
+     367,   369,   373,   120,   120,   249,   131,   131,   236,    18,
+     249,   263,   128,   129,   355,   356,   358,   269,   286,   285,
+     306,   202,   289,   289,   289,   312,    10,    11,   126,   266,
+     270,   278,   279,   265,   316,   266,    20,   120,   120,   190,
+     249,   122,   131,   127,   122,   308,   330,   308,   308,   338,
+     127,   308,   308,   308,   308,   308,   308,   308,   308,   308,
+     308,   125,   350,    33,    41,   119,   120,   153,   155,   165,
+     166,   167,   175,   186,   196,   199,   220,   221,   222,   241,
+     259,   289,   292,   296,   302,   308,   327,   124,   289,   171,
+     289,   181,   182,   376,   225,   125,   308,   127,   125,   381,
+     234,   371,   372,   374,   370,   366,   368,   127,   369,   127,
+     264,   358,   126,   272,   282,   287,   288,   203,   317,   205,
+     266,   276,   322,   281,   300,   207,   209,   127,   127,   308,
+     335,   127,   308,   127,   127,   127,   127,   127,   127,   127,
+     127,   125,   125,   127,   153,   161,   184,   199,   221,   296,
+     302,   308,   381,   155,   220,   302,   237,   120,   231,   241,
+     292,   233,   296,   355,   120,   378,   234,    71,   252,   266,
+     248,   357,   357,   362,   357,   361,   357,   273,   131,   355,
+     300,   123,   212,   213,   127,   266,   212,   266,   194,   331,
+     125,   339,    13,    13,   121,   124,   185,   289,   161,   184,
+     302,   237,   161,   120,   231,   253,   255,   123,   125,   127,
+     358,   359,   127,   120,   122,   359,   360,   127,   129,   131,
+     249,   214,   267,   210,   275,   127,   376,   127,   127,   127,
+     375,   376,   185,   289,   161,   185,   289,   120,   256,   127,
+     215,   363,   272,   212,    26,    28,    37,   127,   122,   120,
+     289,   185,   274,   363,   381,   376,   275,   120
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -4835,3243 +4677,3149 @@ yyreduce:
   YY_REDUCE_PRINT (yyn);
   switch (yyn)
     {
-        case 3:
+        case 4:
 
 /* Line 1455 of yacc.c  */
-#line 1333 "vtkParse.y"
-    { startSig(); clearTypeId(); clearTemplate(); closeComment(); }
+#line 1464 "vtkParse.y"
+    {
+      startSig();
+      clearType();
+      clearTypeId();
+      clearTemplate();
+      closeComment();
+    }
     break;
 
-  case 14:
+  case 27:
 
 /* Line 1455 of yacc.c  */
-#line 1346 "vtkParse.y"
-    { output_function(); }
+#line 1509 "vtkParse.y"
+    { pushNamespace((yyvsp[(2) - (2)].str)); }
     break;
 
-  case 15:
+  case 28:
 
 /* Line 1455 of yacc.c  */
-#line 1347 "vtkParse.y"
-    { output_function(); }
+#line 1510 "vtkParse.y"
+    { popNamespace(); }
     break;
 
-  case 16:
+  case 36:
 
 /* Line 1455 of yacc.c  */
-#line 1348 "vtkParse.y"
-    { reject_function(); }
+#line 1532 "vtkParse.y"
+    { pushType(); }
     break;
 
-  case 17:
+  case 37:
 
 /* Line 1455 of yacc.c  */
-#line 1349 "vtkParse.y"
-    { output_function(); }
+#line 1533 "vtkParse.y"
+    {
+      const char *name = (currentClass ? currentClass->Name : NULL);
+      popType();
+      clearTypeId();
+      if (name)
+        {
+        setTypeId(name);
+        setTypeBase(guess_id_type(name));
+        }
+      end_class();
+    }
     break;
 
-  case 18:
+  case 38:
 
 /* Line 1455 of yacc.c  */
-#line 1350 "vtkParse.y"
-    { reject_function(); }
+#line 1546 "vtkParse.y"
+    { start_class((yyvsp[(2) - (2)].str), (yyvsp[(1) - (2)].integer)); }
     break;
 
-  case 19:
+  case 40:
 
 /* Line 1455 of yacc.c  */
-#line 1351 "vtkParse.y"
-    { output_function(); }
+#line 1548 "vtkParse.y"
+    { start_class(NULL, (yyvsp[(1) - (1)].integer)); }
     break;
 
-  case 20:
+  case 42:
 
 /* Line 1455 of yacc.c  */
-#line 1352 "vtkParse.y"
-    { legacySig(); output_function(); }
+#line 1552 "vtkParse.y"
+    { (yyval.integer) = 0; }
     break;
 
-  case 28:
+  case 43:
 
 /* Line 1455 of yacc.c  */
-#line 1370 "vtkParse.y"
-    { pushNamespace((yyvsp[(2) - (2)].str)); }
+#line 1553 "vtkParse.y"
+    { (yyval.integer) = 1; }
     break;
 
-  case 29:
+  case 44:
 
 /* Line 1455 of yacc.c  */
-#line 1371 "vtkParse.y"
-    { popNamespace(); }
+#line 1554 "vtkParse.y"
+    { (yyval.integer) = 2; }
     break;
 
-  case 31:
+  case 46:
 
 /* Line 1455 of yacc.c  */
-#line 1378 "vtkParse.y"
-    { start_class((yyvsp[(2) - (2)].str), 0); }
+#line 1558 "vtkParse.y"
+    {
+      startSig();
+      clearType();
+      clearTypeId();
+      clearTemplate();
+      closeComment();
+    }
     break;
 
-  case 32:
+  case 49:
 
 /* Line 1455 of yacc.c  */
-#line 1379 "vtkParse.y"
-    { end_class(); }
+#line 1570 "vtkParse.y"
+    { access_level = VTK_ACCESS_PUBLIC; }
     break;
 
-  case 33:
+  case 50:
 
 /* Line 1455 of yacc.c  */
-#line 1380 "vtkParse.y"
-    { reject_class((yyvsp[(2) - (5)].str), 0); }
+#line 1571 "vtkParse.y"
+    { access_level = VTK_ACCESS_PRIVATE; }
     break;
 
-  case 34:
+  case 51:
 
 /* Line 1455 of yacc.c  */
-#line 1381 "vtkParse.y"
-    { end_class(); }
+#line 1572 "vtkParse.y"
+    { access_level = VTK_ACCESS_PROTECTED; }
     break;
 
-  case 35:
+  case 70:
 
 /* Line 1455 of yacc.c  */
-#line 1382 "vtkParse.y"
-    { start_class((yyvsp[(2) - (2)].str), 1); }
+#line 1597 "vtkParse.y"
+    { output_friend_function(); }
     break;
 
-  case 36:
+  case 76:
 
 /* Line 1455 of yacc.c  */
-#line 1383 "vtkParse.y"
-    { end_class(); }
+#line 1611 "vtkParse.y"
+    { add_base_class(currentClass, (yyvsp[(1) - (1)].str), access_level, 0); }
     break;
 
-  case 37:
+  case 77:
 
 /* Line 1455 of yacc.c  */
-#line 1384 "vtkParse.y"
-    { reject_class((yyvsp[(2) - (5)].str), 1); }
+#line 1613 "vtkParse.y"
+    { add_base_class(currentClass, (yyvsp[(3) - (3)].str), (yyvsp[(2) - (3)].integer), 1); }
     break;
 
-  case 38:
+  case 78:
 
 /* Line 1455 of yacc.c  */
-#line 1385 "vtkParse.y"
-    { end_class(); }
+#line 1615 "vtkParse.y"
+    { add_base_class(currentClass, (yyvsp[(3) - (3)].str), (yyvsp[(1) - (3)].integer), (yyvsp[(2) - (3)].integer)); }
     break;
 
-  case 40:
+  case 79:
 
 /* Line 1455 of yacc.c  */
-#line 1387 "vtkParse.y"
-    { start_class((yyvsp[(2) - (2)].str), 2); }
+#line 1618 "vtkParse.y"
+    { (yyval.integer) = 0; }
     break;
 
-  case 41:
+  case 80:
 
 /* Line 1455 of yacc.c  */
-#line 1388 "vtkParse.y"
-    { end_class(); }
+#line 1619 "vtkParse.y"
+    { (yyval.integer) = 1; }
     break;
 
-  case 42:
+  case 81:
 
 /* Line 1455 of yacc.c  */
-#line 1389 "vtkParse.y"
-    { reject_class((yyvsp[(2) - (5)].str), 2); }
+#line 1622 "vtkParse.y"
+    { (yyval.integer) = access_level; }
     break;
 
-  case 43:
+  case 83:
 
 /* Line 1455 of yacc.c  */
-#line 1390 "vtkParse.y"
-    { end_class(); }
+#line 1626 "vtkParse.y"
+    { (yyval.integer) = VTK_ACCESS_PUBLIC; }
     break;
 
-  case 46:
+  case 84:
 
 /* Line 1455 of yacc.c  */
-#line 1395 "vtkParse.y"
-    { startSig(); clearTypeId(); clearTemplate();  closeComment(); }
+#line 1627 "vtkParse.y"
+    { (yyval.integer) = VTK_ACCESS_PRIVATE; }
     break;
 
-  case 58:
+  case 85:
 
 /* Line 1455 of yacc.c  */
-#line 1409 "vtkParse.y"
-    { output_function(); }
+#line 1628 "vtkParse.y"
+    { (yyval.integer) = VTK_ACCESS_PROTECTED; }
     break;
 
-  case 59:
+  case 88:
 
 /* Line 1455 of yacc.c  */
-#line 1410 "vtkParse.y"
-    { ClassInfo *tmpc = currentClass;
-     currentClass = NULL; output_function(); currentClass = tmpc; }
+#line 1644 "vtkParse.y"
+    { pushType(); start_enum((yyvsp[(1) - (2)].str)); }
     break;
 
-  case 60:
+  case 89:
 
 /* Line 1455 of yacc.c  */
-#line 1412 "vtkParse.y"
-    { output_function(); }
+#line 1645 "vtkParse.y"
+    {
+      popType();
+      clearTypeId();
+      if ((yyvsp[(1) - (5)].str) != NULL)
+        {
+        setTypeId((yyvsp[(1) - (5)].str));
+        setTypeBase(guess_id_type((yyvsp[(1) - (5)].str)));
+        }
+      end_enum();
+    }
     break;
 
-  case 61:
+  case 90:
 
 /* Line 1455 of yacc.c  */
-#line 1413 "vtkParse.y"
-    { output_function(); }
+#line 1657 "vtkParse.y"
+    { (yyval.str) = (yyvsp[(2) - (2)].str); }
     break;
 
-  case 62:
+  case 91:
 
 /* Line 1455 of yacc.c  */
-#line 1414 "vtkParse.y"
-    { ClassInfo *tmpc = currentClass;
-     currentClass = NULL; output_function(); currentClass = tmpc; }
+#line 1658 "vtkParse.y"
+    { (yyval.str) = NULL; }
     break;
 
-  case 63:
+  case 97:
 
 /* Line 1455 of yacc.c  */
-#line 1416 "vtkParse.y"
-    { output_function(); }
+#line 1669 "vtkParse.y"
+    { add_enum((yyvsp[(1) - (1)].str), NULL); }
     break;
 
-  case 64:
+  case 98:
 
 /* Line 1455 of yacc.c  */
-#line 1417 "vtkParse.y"
-    { legacySig(); output_function(); }
+#line 1670 "vtkParse.y"
+    { postSig("="); markSig(); }
     break;
 
-  case 75:
+  case 99:
 
 /* Line 1455 of yacc.c  */
-#line 1430 "vtkParse.y"
-    {
-      vtkParse_AddStringToArray(&currentClass->SuperClasses,
-                                &currentClass->NumberOfSuperClasses,
-                                vtkstrdup((yyvsp[(2) - (2)].str)));
-    }
+#line 1671 "vtkParse.y"
+    { chopSig(); add_enum((yyvsp[(1) - (4)].str), copySig()); }
     break;
 
-  case 76:
+  case 120:
 
 /* Line 1455 of yacc.c  */
-#line 1436 "vtkParse.y"
-    {access_level = VTK_ACCESS_PUBLIC;}
+#line 1724 "vtkParse.y"
+    { pushFunction(); postSig("("); }
     break;
 
-  case 77:
+  case 121:
 
 /* Line 1455 of yacc.c  */
-#line 1437 "vtkParse.y"
-    {access_level = VTK_ACCESS_PRIVATE;}
+#line 1725 "vtkParse.y"
+    { postSig(")"); }
     break;
 
-  case 78:
+  case 122:
 
 /* Line 1455 of yacc.c  */
-#line 1438 "vtkParse.y"
-    {access_level = VTK_ACCESS_PROTECTED;}
+#line 1726 "vtkParse.y"
+    { (yyval.integer) = VTK_PARSE_FUNCTION; popFunction(); }
     break;
 
-  case 79:
+  case 123:
 
 /* Line 1455 of yacc.c  */
-#line 1448 "vtkParse.y"
-    {start_enum((yyvsp[(2) - (2)].str));}
-    break;
+#line 1730 "vtkParse.y"
+    {
+      ValueInfo *item = (ValueInfo *)malloc(sizeof(ValueInfo));
+      vtkParse_InitValue(item);
+      item->ItemType = VTK_TYPEDEF_INFO;
+      item->Access = access_level;
 
-  case 80:
+      handle_complex_type(item, getType(), (yyvsp[(1) - (1)].integer), getSig());
 
-/* Line 1455 of yacc.c  */
-#line 1449 "vtkParse.y"
-    {end_enum();}
-    break;
-
-  case 81:
+      if (getVarName())
+        {
+        item->Name = getVarName();
+        }
 
-/* Line 1455 of yacc.c  */
-#line 1450 "vtkParse.y"
-    {start_enum(NULL);}
+      if (item->Class == NULL)
+        {
+        vtkParse_FreeValue(item);
+        }
+      else if (currentClass)
+        {
+        vtkParse_AddTypedefToClass(currentClass, item);
+        }
+      else
+        {
+        vtkParse_AddTypedefToNamespace(currentNamespace, item);
+        }
+    }
     break;
 
-  case 82:
+  case 124:
 
 /* Line 1455 of yacc.c  */
-#line 1451 "vtkParse.y"
-    {end_enum();}
+#line 1763 "vtkParse.y"
+    { add_using((yyvsp[(2) - (3)].str), 0); }
     break;
 
-  case 86:
+  case 126:
 
 /* Line 1455 of yacc.c  */
-#line 1455 "vtkParse.y"
-    {add_enum((yyvsp[(1) - (1)].str), NULL);}
+#line 1767 "vtkParse.y"
+    { (yyval.str) = (yyvsp[(2) - (2)].str); }
     break;
 
-  case 87:
+  case 127:
 
 /* Line 1455 of yacc.c  */
-#line 1456 "vtkParse.y"
-    {add_enum((yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str));}
+#line 1769 "vtkParse.y"
+    { (yyval.str) = vtkstrcat((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)); }
     break;
 
-  case 88:
+  case 128:
 
 /* Line 1455 of yacc.c  */
-#line 1458 "vtkParse.y"
-    {postSig((yyvsp[(1) - (1)].str));}
+#line 1771 "vtkParse.y"
+    { (yyval.str) = vtkstrcat((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)); }
     break;
 
-  case 89:
+  case 129:
 
 /* Line 1455 of yacc.c  */
-#line 1459 "vtkParse.y"
-    {(yyval.str) = vtkstrdup(add_const_scope((yyvsp[(1) - (1)].str)));}
+#line 1773 "vtkParse.y"
+    { (yyval.str) = vtkstrcat3((yyvsp[(1) - (3)].str), (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)); }
     break;
 
-  case 97:
+  case 130:
 
 /* Line 1455 of yacc.c  */
-#line 1464 "vtkParse.y"
-    { (yyval.str) = (yyvsp[(1) - (1)].str); }
+#line 1775 "vtkParse.y"
+    { (yyval.str) = vtkstrcat3((yyvsp[(1) - (3)].str), (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)); }
     break;
 
-  case 98:
+  case 131:
 
 /* Line 1455 of yacc.c  */
-#line 1465 "vtkParse.y"
-    {postSig((yyvsp[(1) - (1)].str));}
+#line 1778 "vtkParse.y"
+    { add_using((yyvsp[(3) - (4)].str), 1); }
     break;
 
-  case 99:
+  case 132:
 
 /* Line 1455 of yacc.c  */
-#line 1466 "vtkParse.y"
-    {
-         (yyval.str) = vtkstrcat((yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str));
-       }
+#line 1786 "vtkParse.y"
+    { postSig("template<> "); clearTypeId(); }
     break;
 
-  case 100:
+  case 133:
 
 /* Line 1455 of yacc.c  */
-#line 1469 "vtkParse.y"
-    {postSig((yyvsp[(2) - (2)].str));}
+#line 1788 "vtkParse.y"
+    {
+      postSig("template<");
+      pushType();
+      clearType();
+      clearTypeId();
+      startTemplate();
+    }
     break;
 
-  case 101:
+  case 134:
 
 /* Line 1455 of yacc.c  */
-#line 1470 "vtkParse.y"
+#line 1796 "vtkParse.y"
     {
-         (yyval.str) = vtkstrcat5((yyvsp[(1) - (4)].str), " ", (yyvsp[(2) - (4)].str), " ", (yyvsp[(4) - (4)].str));
-       }
+      chopSig();
+      if (getSig()[getSigLength()-1] == '>') { postSig(" "); }
+      postSig("> ");
+      clearTypeId();
+      popType();
+    }
     break;
 
-  case 102:
+  case 136:
 
 /* Line 1455 of yacc.c  */
-#line 1473 "vtkParse.y"
-    {postSig("(");}
+#line 1807 "vtkParse.y"
+    { chopSig(); postSig(", "); clearType(); clearTypeId(); }
     break;
 
-  case 103:
+  case 138:
 
 /* Line 1455 of yacc.c  */
-#line 1474 "vtkParse.y"
-    {
-         (yyval.str) = vtkstrcat3("(", (yyvsp[(3) - (4)].str), ")");
-       }
+#line 1811 "vtkParse.y"
+    { markSig(); }
     break;
 
-  case 104:
+  case 139:
 
 /* Line 1455 of yacc.c  */
-#line 1478 "vtkParse.y"
-    { (yyval.str) = "-"; }
+#line 1813 "vtkParse.y"
+    { add_template_parameter(getType(), (yyvsp[(3) - (3)].integer), copySig()); }
     break;
 
-  case 105:
+  case 141:
 
 /* Line 1455 of yacc.c  */
-#line 1478 "vtkParse.y"
-    { (yyval.str) = "+"; }
+#line 1815 "vtkParse.y"
+    { markSig(); }
     break;
 
-  case 106:
+  case 142:
 
 /* Line 1455 of yacc.c  */
-#line 1479 "vtkParse.y"
-    { (yyval.str) = "~"; }
+#line 1817 "vtkParse.y"
+    { add_template_parameter(0, (yyvsp[(3) - (3)].integer), copySig()); }
     break;
 
-  case 107:
+  case 144:
 
 /* Line 1455 of yacc.c  */
-#line 1481 "vtkParse.y"
-    { (yyval.str) = "-"; }
+#line 1819 "vtkParse.y"
+    { pushTemplate(); markSig(); }
     break;
 
-  case 108:
+  case 145:
 
 /* Line 1455 of yacc.c  */
-#line 1481 "vtkParse.y"
-    { (yyval.str) = "+"; }
+#line 1820 "vtkParse.y"
+    { postSig("class "); }
     break;
 
-  case 109:
+  case 146:
 
 /* Line 1455 of yacc.c  */
-#line 1482 "vtkParse.y"
-    { (yyval.str) = "*"; }
+#line 1822 "vtkParse.y"
+    {
+      int i;
+      TemplateInfo *newTemplate = currentTemplate;
+      popTemplate();
+      add_template_parameter(0, (yyvsp[(5) - (5)].integer), copySig());
+      i = currentTemplate->NumberOfParameters-1;
+      currentTemplate->Parameters[i]->Template = newTemplate;
+    }
     break;
 
-  case 110:
+  case 148:
 
 /* Line 1455 of yacc.c  */
-#line 1482 "vtkParse.y"
-    { (yyval.str) = "/"; }
+#line 1833 "vtkParse.y"
+    { postSig("class "); }
     break;
 
-  case 111:
+  case 149:
 
 /* Line 1455 of yacc.c  */
-#line 1483 "vtkParse.y"
-    { (yyval.str) = "%"; }
+#line 1834 "vtkParse.y"
+    { postSig("typename "); }
     break;
 
-  case 112:
+  case 152:
 
 /* Line 1455 of yacc.c  */
-#line 1483 "vtkParse.y"
-    { (yyval.str) = "&"; }
+#line 1840 "vtkParse.y"
+    { postSig("="); markSig(); }
     break;
 
-  case 113:
+  case 153:
 
 /* Line 1455 of yacc.c  */
-#line 1484 "vtkParse.y"
-    { (yyval.str) = "|"; }
+#line 1842 "vtkParse.y"
+    {
+      int i = currentTemplate->NumberOfParameters-1;
+      ValueInfo *param = currentTemplate->Parameters[i];
+      chopSig();
+      param->Value = copySig();
+    }
     break;
 
-  case 114:
+  case 156:
 
 /* Line 1455 of yacc.c  */
-#line 1484 "vtkParse.y"
-    { (yyval.str) = "^"; }
+#line 1859 "vtkParse.y"
+    { output_function(); }
     break;
 
-  case 115:
+  case 157:
 
 /* Line 1455 of yacc.c  */
-#line 1485 "vtkParse.y"
-    { (yyval.str) = ">>"; }
+#line 1860 "vtkParse.y"
+    { output_function(); }
     break;
 
-  case 116:
+  case 158:
 
 /* Line 1455 of yacc.c  */
-#line 1486 "vtkParse.y"
-    { (yyval.str) = "<<"; }
+#line 1861 "vtkParse.y"
+    { reject_function(); }
     break;
 
-  case 126:
+  case 159:
 
 /* Line 1455 of yacc.c  */
-#line 1509 "vtkParse.y"
-    {
-      ValueInfo *item = (ValueInfo *)malloc(sizeof(ValueInfo));
-      vtkParse_InitValue(item);
-      item->ItemType = VTK_TYPEDEF_INFO;
-      item->Access = access_level;
-
-      handle_complex_type(item, (yyvsp[(2) - (4)].integer), (yyvsp[(3) - (4)].integer), getSig());
+#line 1862 "vtkParse.y"
+    { reject_function(); }
+    break;
 
-      if (getVarName())
-        {
-        item->Name = vtkstrdup(getVarName());
-        }
+  case 167:
 
-      if (currentClass)
-        {
-        vtkParse_AddTypedefToClass(currentClass, item);
-        }
-      else
-        {
-        vtkParse_AddTypedefToNamespace(currentNamespace, item);
-        }
-    }
+/* Line 1455 of yacc.c  */
+#line 1878 "vtkParse.y"
+    { output_function(); }
     break;
 
-  case 127:
+  case 177:
 
 /* Line 1455 of yacc.c  */
-#line 1531 "vtkParse.y"
-    { }
+#line 1895 "vtkParse.y"
+    {
+      postSig("(");
+      set_return(currentFunction, getType(), getTypeId(), 0);
+    }
     break;
 
-  case 128:
+  case 178:
 
 /* Line 1455 of yacc.c  */
-#line 1532 "vtkParse.y"
-    { }
+#line 1899 "vtkParse.y"
+    { postSig(")"); }
     break;
 
-  case 129:
+  case 179:
 
 /* Line 1455 of yacc.c  */
-#line 1533 "vtkParse.y"
-    { }
+#line 1901 "vtkParse.y"
+    {
+      postSig(";");
+      closeSig();
+      currentFunction->IsOperator = 1;
+      currentFunction->Name = "operator typecast";
+      currentFunction->Comment = vtkstrdup(getComment());
+      vtkParseDebug("Parsed operator", "operator typecast");
+    }
     break;
 
-  case 130:
+  case 180:
 
 /* Line 1455 of yacc.c  */
-#line 1535 "vtkParse.y"
-    { }
+#line 1912 "vtkParse.y"
+    { (yyval.str) = copySig(); }
     break;
 
-  case 131:
+  case 181:
 
 /* Line 1455 of yacc.c  */
-#line 1542 "vtkParse.y"
-    { add_using((yyvsp[(3) - (4)].str), 1); }
+#line 1915 "vtkParse.y"
+    { postSig(")"); }
     break;
 
-  case 132:
+  case 182:
 
 /* Line 1455 of yacc.c  */
-#line 1543 "vtkParse.y"
-    { add_using((yyvsp[(3) - (4)].str), 0); }
+#line 1916 "vtkParse.y"
+    {
+      postSig(";");
+      closeSig();
+      currentFunction->Name = (yyvsp[(1) - (3)].str);
+      currentFunction->Comment = vtkstrdup(getComment());
+      vtkParseDebug("Parsed operator", currentFunction->Name);
+    }
     break;
 
-  case 133:
+  case 183:
 
 /* Line 1455 of yacc.c  */
-#line 1544 "vtkParse.y"
-    { add_using((yyvsp[(2) - (3)].str), 0); }
+#line 1926 "vtkParse.y"
+    {
+      postSig("(");
+      currentFunction->IsOperator = 1;
+      set_return(currentFunction, getType(), getTypeId(), 0);
+    }
     break;
 
-  case 134:
+  case 185:
 
 /* Line 1455 of yacc.c  */
-#line 1551 "vtkParse.y"
-    { postSig("template<> "); clearTypeId(); }
+#line 1935 "vtkParse.y"
+    { chopSig(); (yyval.str) = vtkstrcat(copySig(), (yyvsp[(2) - (2)].str)); postSig((yyvsp[(2) - (2)].str)); }
     break;
 
-  case 135:
+  case 186:
 
 /* Line 1455 of yacc.c  */
-#line 1552 "vtkParse.y"
-    { postSig("template<");
-          clearTypeId(); startTemplate(); }
+#line 1938 "vtkParse.y"
+    { markSig(); postSig("operator "); }
     break;
 
-  case 136:
+  case 187:
 
 /* Line 1455 of yacc.c  */
-#line 1554 "vtkParse.y"
-    { chopSig();
-            if (getSig()[strlen(getSig())-1] == '>') { postSig(" "); }
-            postSig("> "); clearTypeId(); }
+#line 1942 "vtkParse.y"
+    {
+      postSig(";");
+      closeSig();
+      currentFunction->Name = (yyvsp[(1) - (2)].str);
+      currentFunction->Comment = vtkstrdup(getComment());
+      vtkParseDebug("Parsed func", currentFunction->Name);
+    }
     break;
 
-  case 138:
+  case 190:
 
 /* Line 1455 of yacc.c  */
-#line 1559 "vtkParse.y"
-    { chopSig(); postSig(", "); clearTypeId(); }
+#line 1954 "vtkParse.y"
+    { postSig(" throw "); }
     break;
 
-  case 140:
+  case 191:
 
 /* Line 1455 of yacc.c  */
-#line 1563 "vtkParse.y"
-    {
-               TemplateArg *arg = (TemplateArg *)malloc(sizeof(TemplateArg));
-               vtkParse_InitTemplateArg(arg);
-               arg->Type = (yyvsp[(1) - (2)].integer);
-               arg->Class = vtkstrdup(getTypeId());
-               arg->Name = vtkstrdup(getVarName());
-               arg->Value = vtkstrdup(getVarValue());
-               vtkParse_AddArgumentToTemplate(currentTemplate, arg);
-               }
+#line 1954 "vtkParse.y"
+    { chopSig(); }
     break;
 
-  case 141:
+  case 192:
 
 /* Line 1455 of yacc.c  */
-#line 1573 "vtkParse.y"
-    {
-               TemplateArg *arg = (TemplateArg *)malloc(sizeof(TemplateArg));
-               vtkParse_InitTemplateArg(arg);
-               arg->Name = vtkstrdup(getVarName());
-               arg->Value = vtkstrdup(getVarValue());
-               vtkParse_AddArgumentToTemplate(currentTemplate, arg);
-               }
+#line 1955 "vtkParse.y"
+    { postSig(" const"); currentFunction->IsConst = 1; }
     break;
 
-  case 142:
+  case 193:
 
 /* Line 1455 of yacc.c  */
-#line 1580 "vtkParse.y"
-    { pushTemplate(); }
+#line 1957 "vtkParse.y"
+    {
+      postSig(" = 0");
+      currentFunction->IsPureVirtual = 1;
+      if (currentClass) { currentClass->IsAbstract = 1; }
+    }
     break;
 
-  case 143:
+  case 196:
 
 /* Line 1455 of yacc.c  */
-#line 1581 "vtkParse.y"
+#line 1969 "vtkParse.y"
     {
-               TemplateArgs *newTemplate = currentTemplate;
-               TemplateArg *arg = (TemplateArg *)malloc(sizeof(TemplateArg));
-               vtkParse_InitTemplateArg(arg);
-               popTemplate();
-               arg->Template = newTemplate;
-               arg->Name = vtkstrdup(getVarName());
-               arg->Value = vtkstrdup(getVarValue());
-               vtkParse_AddArgumentToTemplate(currentTemplate, arg);
-               }
+      postSig("(");
+      set_return(currentFunction, getType(), getTypeId(), 0);
+    }
     break;
 
-  case 144:
+  case 197:
 
 /* Line 1455 of yacc.c  */
-#line 1592 "vtkParse.y"
-    {postSig("class ");}
+#line 1973 "vtkParse.y"
+    { postSig(")"); }
     break;
 
-  case 145:
+  case 200:
 
 /* Line 1455 of yacc.c  */
-#line 1593 "vtkParse.y"
-    {postSig("typename ");}
+#line 1985 "vtkParse.y"
+    { closeSig(); }
     break;
 
-  case 147:
+  case 201:
 
 /* Line 1455 of yacc.c  */
-#line 1595 "vtkParse.y"
-    { setVarName((yyvsp[(1) - (1)].str)); }
+#line 1986 "vtkParse.y"
+    { openSig(); }
     break;
 
-  case 163:
+  case 202:
 
 /* Line 1455 of yacc.c  */
-#line 1625 "vtkParse.y"
-    {openSig(); preSig("~"); closeSig();}
+#line 1987 "vtkParse.y"
+    {
+      postSig(";");
+      closeSig();
+      if (getType() & VTK_PARSE_VIRTUAL)
+        {
+        currentFunction->IsVirtual = 1;
+        }
+      if (getType() & VTK_PARSE_EXPLICIT)
+        {
+        currentFunction->IsExplicit = 1;
+        }
+      currentFunction->Name = (yyvsp[(1) - (5)].str);
+      currentFunction->Comment = vtkstrdup(getComment());
+      vtkParseDebug("Parsed func", currentFunction->Name);
+    }
     break;
 
-  case 164:
+  case 203:
 
 /* Line 1455 of yacc.c  */
-#line 1626 "vtkParse.y"
-    {openSig(); preSig("~"); closeSig();}
+#line 2004 "vtkParse.y"
+    { pushType(); postSig("("); }
     break;
 
-  case 165:
+  case 204:
 
 /* Line 1455 of yacc.c  */
-#line 1628 "vtkParse.y"
-    {
-         openSig(); preSig("virtual ~"); closeSig();
-         currentFunction->IsVirtual = 1;
-         }
+#line 2005 "vtkParse.y"
+    { popType(); postSig(")"); }
     break;
 
-  case 168:
+  case 211:
 
 /* Line 1455 of yacc.c  */
-#line 1635 "vtkParse.y"
-    {
-         openSig();
-         preSig("explicit ");
-         closeSig();
-         currentFunction->IsExplicit = 1;
-         }
+#line 2022 "vtkParse.y"
+    { clearType(); clearTypeId(); }
     break;
 
-  case 170:
+  case 213:
 
 /* Line 1455 of yacc.c  */
-#line 1643 "vtkParse.y"
-    {
-         openSig();
-         preSig("virtual ");
-         closeSig();
-         currentFunction->IsVirtual = 1;
-         }
+#line 2025 "vtkParse.y"
+    { clearType(); clearTypeId(); }
     break;
 
-  case 178:
+  case 214:
 
 /* Line 1455 of yacc.c  */
-#line 1659 "vtkParse.y"
-    {
-         openSig();
-         preSig("virtual ");
-         closeSig();
-         currentFunction->IsVirtual = 1;
-         }
+#line 2026 "vtkParse.y"
+    { clearType(); clearTypeId(); postSig(", "); }
     break;
 
-  case 179:
+  case 216:
 
 /* Line 1455 of yacc.c  */
-#line 1668 "vtkParse.y"
-    {
-      postSig("(");
-      set_return(currentFunction, getStorageType(), getTypeId(), 0);
-    }
+#line 2029 "vtkParse.y"
+    { currentFunction->IsVariadic = 1; postSig(", ..."); }
     break;
 
-  case 180:
+  case 217:
 
 /* Line 1455 of yacc.c  */
-#line 1672 "vtkParse.y"
-    { postSig(")"); }
+#line 2032 "vtkParse.y"
+    { markSig(); }
     break;
 
-  case 181:
+  case 218:
 
 /* Line 1455 of yacc.c  */
-#line 1673 "vtkParse.y"
+#line 2034 "vtkParse.y"
     {
-      (yyval.integer) = (yyvsp[(2) - (8)].integer);
-      postSig(";");
-      preSig("operator ");
-      closeSig();
-      currentFunction->IsOperator = 1;
-      currentFunction->Name = "operator typecast";
-      currentFunction->Comment = vtkstrdup(getComment());
-      vtkParseDebug("Parsed operator", "operator typecast");
-    }
-    break;
+      ValueInfo *param = (ValueInfo *)malloc(sizeof(ValueInfo));
+      vtkParse_InitValue(param);
 
-  case 182:
+      handle_complex_type(param, getType(), (yyvsp[(3) - (3)].integer), copySig());
+      add_legacy_parameter(currentFunction, param);
 
-/* Line 1455 of yacc.c  */
-#line 1684 "vtkParse.y"
-    { postSig(")"); }
+      if (getVarName())
+        {
+        param->Name = getVarName();
+        }
+
+      vtkParse_AddParameterToFunction(currentFunction, param);
+    }
     break;
 
-  case 183:
+  case 219:
 
 /* Line 1455 of yacc.c  */
-#line 1685 "vtkParse.y"
+#line 2049 "vtkParse.y"
     {
-      postSig(";");
-      closeSig();
-      currentFunction->Name = vtkstrdup((yyvsp[(1) - (3)].str));
-      currentFunction->Comment = vtkstrdup(getComment());
-      vtkParseDebug("Parsed operator", currentFunction->Name);
+      int i = currentFunction->NumberOfParameters-1;
+      if (getVarValue())
+        {
+        currentFunction->Parameters[i]->Value = getVarValue();
+        }
     }
     break;
 
-  case 184:
+  case 220:
 
 /* Line 1455 of yacc.c  */
-#line 1693 "vtkParse.y"
-    {postSig((yyvsp[(2) - (2)].str));}
+#line 2058 "vtkParse.y"
+    { clearVarValue(); }
     break;
 
-  case 185:
+  case 222:
 
 /* Line 1455 of yacc.c  */
-#line 1694 "vtkParse.y"
-    {
-      postSig("(");
-      currentFunction->IsOperator = 1;
-      set_return(currentFunction, getStorageType(), getTypeId(), 0);
-    }
+#line 2062 "vtkParse.y"
+    { postSig("="); clearVarValue(); markSig(); }
     break;
 
-  case 186:
+  case 223:
 
 /* Line 1455 of yacc.c  */
-#line 1699 "vtkParse.y"
-    { (yyval.str) = (yyvsp[(2) - (7)].str); }
+#line 2063 "vtkParse.y"
+    { chopSig(); setVarValue(copySig()); }
     break;
 
-  case 187:
+  case 225:
 
 /* Line 1455 of yacc.c  */
-#line 1701 "vtkParse.y"
-    { postSig(")"); }
-    break;
+#line 2074 "vtkParse.y"
+    {
+      unsigned int type = getType();
+      ValueInfo *var = (ValueInfo *)malloc(sizeof(ValueInfo));
+      vtkParse_InitValue(var);
+      var->ItemType = VTK_VARIABLE_INFO;
+      var->Access = access_level;
 
-  case 188:
+      handle_complex_type(var, type, (yyvsp[(1) - (2)].integer), getSig());
 
-/* Line 1455 of yacc.c  */
-#line 1702 "vtkParse.y"
-    {
-      postSig(";");
-      closeSig();
-      currentFunction->Name = vtkstrdup((yyvsp[(1) - (3)].str));
-      currentFunction->Comment = vtkstrdup(getComment());
-      vtkParseDebug("Parsed func", currentFunction->Name);
-    }
-    break;
+      var->Name = getVarName();
 
-  case 190:
+      if (getVarValue())
+        {
+        var->Value = getVarValue();
+        }
 
-/* Line 1455 of yacc.c  */
-#line 1712 "vtkParse.y"
-    {
-      postSig(" = 0");
-      if (currentClass)
+      /* Is this a typedef? */
+      if ((type & VTK_PARSE_TYPEDEF) != 0)
+        {
+        var->ItemType = VTK_TYPEDEF_INFO;
+        if (currentClass)
+          {
+          vtkParse_AddVariableToClass(currentClass, var);
+          }
+        else
+          {
+          vtkParse_AddVariableToNamespace(currentNamespace, var);
+          }
+        }
+      /* Is this a constant? */
+      else if (((type & VTK_PARSE_CONST) != 0) && var->Value != NULL &&
+          (((type & VTK_PARSE_INDIRECT) == 0) ||
+           ((type & VTK_PARSE_INDIRECT) == VTK_PARSE_ARRAY)))
+        {
+        var->ItemType = VTK_CONSTANT_INFO;
+        if (currentClass)
+          {
+          vtkParse_AddConstantToClass(currentClass, var);
+          }
+        else
+          {
+          vtkParse_AddConstantToNamespace(currentNamespace, var);
+          }
+        }
+      /* This is a true variable i.e. not constant */
+      else
         {
-        currentFunction->IsPureVirtual = 1;
-        currentClass->IsAbstract = 1;
+        if (currentClass)
+          {
+          vtkParse_AddVariableToClass(currentClass, var);
+          }
+        else
+          {
+          vtkParse_AddVariableToNamespace(currentNamespace, var);
+          }
         }
     }
     break;
 
-  case 191:
+  case 229:
 
 /* Line 1455 of yacc.c  */
-#line 1721 "vtkParse.y"
-    {
-      postSig(" const = 0");
-      currentFunction->IsConst = 1;
-      if (currentClass)
-        {
-        currentFunction->IsPureVirtual = 1;
-        currentClass->IsAbstract = 1;
-        }
-    }
+#line 2136 "vtkParse.y"
+    { postSig(", "); }
     break;
 
-  case 192:
+  case 232:
 
 /* Line 1455 of yacc.c  */
-#line 1731 "vtkParse.y"
-    {
-      postSig(" const");
-      currentFunction->IsConst = 1;
-    }
+#line 2142 "vtkParse.y"
+    { setTypePtr(0); }
     break;
 
-  case 195:
+  case 233:
 
 /* Line 1455 of yacc.c  */
-#line 1739 "vtkParse.y"
-    {
-      postSig("(");
-      set_return(currentFunction, getStorageType(), getTypeId(), 0);
-    }
+#line 2143 "vtkParse.y"
+    { setTypePtr((yyvsp[(1) - (1)].integer)); }
     break;
 
-  case 196:
+  case 234:
 
 /* Line 1455 of yacc.c  */
-#line 1742 "vtkParse.y"
-    { (yyval.str) = (yyvsp[(1) - (5)].str); }
+#line 2147 "vtkParse.y"
+    { (yyval.integer) = 0; }
     break;
 
-  case 197:
+  case 235:
 
 /* Line 1455 of yacc.c  */
-#line 1743 "vtkParse.y"
-    {markSig(); postSig("<");}
+#line 2148 "vtkParse.y"
+    { postSig(")"); }
     break;
 
-  case 198:
+  case 236:
 
 /* Line 1455 of yacc.c  */
-#line 1744 "vtkParse.y"
+#line 2150 "vtkParse.y"
     {
-      if (getSig()[strlen(getSig())-1] == '>') { postSig(" "); }
-      postSig(">(");
-      set_return(currentFunction, getStorageType(), getTypeId(), 0);
-      (yyval.str) = vtkstrcat((yyvsp[(1) - (6)].str), copySig());
+      const char *scope = getScope();
+      unsigned int parens = add_indirection((yyvsp[(1) - (5)].integer), (yyvsp[(2) - (5)].integer));
+      if ((yyvsp[(5) - (5)].integer) == VTK_PARSE_FUNCTION)
+        {
+        if (scope) { scope = vtkstrndup(scope, strlen(scope) - 2); }
+        getFunction()->Class = scope;
+        (yyval.integer) = (parens | VTK_PARSE_FUNCTION);
+        }
+      else if ((yyvsp[(5) - (5)].integer) == VTK_PARSE_ARRAY)
+        {
+        (yyval.integer) = add_indirection_to_array(parens);
+        }
     }
     break;
 
-  case 199:
+  case 237:
 
 /* Line 1455 of yacc.c  */
-#line 1749 "vtkParse.y"
-    { (yyval.str) = (yyvsp[(7) - (9)].str); }
+#line 2167 "vtkParse.y"
+    { (yyval.integer) = 0; }
     break;
 
-  case 200:
+  case 238:
 
 /* Line 1455 of yacc.c  */
-#line 1751 "vtkParse.y"
-    { postSig(");"); closeSig(); }
+#line 2168 "vtkParse.y"
+    { postSig(")"); }
     break;
 
-  case 201:
+  case 239:
 
 /* Line 1455 of yacc.c  */
-#line 1752 "vtkParse.y"
+#line 2170 "vtkParse.y"
     {
-      currentFunction->Name = vtkstrdup((yyvsp[(1) - (3)].str));
-      currentFunction->Comment = vtkstrdup(getComment());
-      vtkParseDebug("Parsed func", currentFunction->Name);
+      const char *scope = getScope();
+      unsigned int parens = add_indirection((yyvsp[(1) - (5)].integer), (yyvsp[(2) - (5)].integer));
+      if ((yyvsp[(5) - (5)].integer) == VTK_PARSE_FUNCTION)
+        {
+        if (scope) { scope = vtkstrndup(scope, strlen(scope) - 2); }
+        getFunction()->Class = scope;
+        (yyval.integer) = (parens | VTK_PARSE_FUNCTION);
+        }
+      else if ((yyvsp[(5) - (5)].integer) == VTK_PARSE_ARRAY)
+        {
+        (yyval.integer) = add_indirection_to_array(parens);
+        }
     }
     break;
 
-  case 202:
+  case 240:
 
 /* Line 1455 of yacc.c  */
-#line 1758 "vtkParse.y"
-    { postSig("("); }
+#line 2186 "vtkParse.y"
+    { postSig("("); scopeSig(""); (yyval.integer) = 0; }
     break;
 
-  case 209:
+  case 241:
 
 /* Line 1455 of yacc.c  */
-#line 1767 "vtkParse.y"
-    {
-      postSig(");");
-      closeSig();
-      currentFunction->Name = vtkstrcat("~", (yyvsp[(1) - (1)].str));
-      currentFunction->Comment = vtkstrdup(getComment());
-      vtkParseDebug("Parsed func", currentFunction->Name);
-    }
+#line 2187 "vtkParse.y"
+    { postSig("("); scopeSig((yyvsp[(1) - (1)].str)); postSig("*");
+         (yyval.integer) = VTK_PARSE_POINTER; }
     break;
 
-  case 210:
+  case 242:
 
 /* Line 1455 of yacc.c  */
-#line 1775 "vtkParse.y"
-    { postSig("(");}
+#line 2189 "vtkParse.y"
+    { postSig("("); scopeSig((yyvsp[(1) - (1)].str)); postSig("&");
+         (yyval.integer) = VTK_PARSE_REF; }
     break;
 
-  case 213:
+  case 243:
 
 /* Line 1455 of yacc.c  */
-#line 1781 "vtkParse.y"
-    {clearTypeId();}
+#line 2193 "vtkParse.y"
+    { postSig("("); scopeSig((yyvsp[(1) - (1)].str)); postSig("*");
+         (yyval.integer) = VTK_PARSE_POINTER; }
     break;
 
-  case 215:
+  case 244:
 
 /* Line 1455 of yacc.c  */
-#line 1784 "vtkParse.y"
-    { currentFunction->IsVariadic = 1; postSig("..."); }
+#line 2195 "vtkParse.y"
+    { postSig("("); scopeSig((yyvsp[(1) - (1)].str)); postSig("&");
+         (yyval.integer) = VTK_PARSE_REF; }
     break;
 
-  case 216:
+  case 245:
 
 /* Line 1455 of yacc.c  */
-#line 1785 "vtkParse.y"
-    { clearTypeId(); }
+#line 2198 "vtkParse.y"
+    { (yyval.integer) = 0; }
     break;
 
-  case 217:
+  case 246:
 
 /* Line 1455 of yacc.c  */
-#line 1786 "vtkParse.y"
-    { clearTypeId(); postSig(", "); }
+#line 2199 "vtkParse.y"
+    { pushFunction(); postSig("("); }
     break;
 
-  case 219:
+  case 247:
 
 /* Line 1455 of yacc.c  */
-#line 1789 "vtkParse.y"
-    { markSig(); }
+#line 2200 "vtkParse.y"
+    { postSig(")"); }
     break;
 
-  case 220:
+  case 248:
 
 /* Line 1455 of yacc.c  */
-#line 1791 "vtkParse.y"
+#line 2201 "vtkParse.y"
     {
-      int i = currentFunction->NumberOfArguments;
-      ValueInfo *arg = (ValueInfo *)malloc(sizeof(ValueInfo));
-      vtkParse_InitValue(arg);
-
-      handle_complex_type(arg, (yyvsp[(2) - (3)].integer), (yyvsp[(3) - (3)].integer), copySig());
-
-      if (i < MAX_ARGS)
-        {
-        currentFunction->ArgTypes[i] = arg->Type;
-        currentFunction->ArgClasses[i] = arg->Class;
-        currentFunction->ArgCounts[i] = arg->Count;
-        }
-
-      if (getVarName())
-        {
-        arg->Name = vtkstrdup(getVarName());
-        }
-
-      vtkParse_AddArgumentToFunction(currentFunction, arg);
+      (yyval.integer) = VTK_PARSE_FUNCTION;
+      popFunction();
     }
     break;
 
-  case 221:
+  case 249:
 
 /* Line 1455 of yacc.c  */
-#line 1813 "vtkParse.y"
-    {
-      int i = currentFunction->NumberOfArguments-1;
-      if (getVarValue())
-        {
-        currentFunction->Arguments[i]->Value = vtkstrdup(getVarValue());
-        }
-    }
+#line 2205 "vtkParse.y"
+    { (yyval.integer) = VTK_PARSE_ARRAY; }
     break;
 
-  case 222:
+  case 252:
 
 /* Line 1455 of yacc.c  */
-#line 1821 "vtkParse.y"
-    {
-      int i = currentFunction->NumberOfArguments;
-      ValueInfo *arg = (ValueInfo *)malloc(sizeof(ValueInfo));
-
-      vtkParse_InitValue(arg);
+#line 2209 "vtkParse.y"
+    { currentFunction->IsConst = 1; }
+    break;
 
-      markSig();
-      postSig("void (*");
-      postSig((yyvsp[(1) - (1)].str));
-      postSig(")(void *) ");
+  case 255:
 
-      handle_function_type(arg, (yyvsp[(1) - (1)].str), copySig());
+/* Line 1455 of yacc.c  */
+#line 2215 "vtkParse.y"
+    { (yyval.integer) = add_indirection((yyvsp[(1) - (2)].integer), (yyvsp[(2) - (2)].integer)); }
+    break;
 
-      if (i < MAX_ARGS)
-        {
-        currentFunction->ArgTypes[i] = arg->Type;
-        currentFunction->ArgClasses[i] = arg->Class;
-        currentFunction->ArgCounts[i] = arg->Count;
-        }
+  case 257:
 
-      vtkParse_AddArgumentToFunction(currentFunction, arg);
-    }
+/* Line 1455 of yacc.c  */
+#line 2220 "vtkParse.y"
+    { (yyval.integer) = add_indirection((yyvsp[(1) - (2)].integer), (yyvsp[(2) - (2)].integer)); }
     break;
 
-  case 225:
+  case 258:
 
 /* Line 1455 of yacc.c  */
-#line 1846 "vtkParse.y"
-    {clearVarValue();}
+#line 2223 "vtkParse.y"
+    { clearVarName(); chopSig(); }
     break;
 
-  case 227:
+  case 260:
 
 /* Line 1455 of yacc.c  */
-#line 1848 "vtkParse.y"
-    { postSig("="); clearVarValue();}
+#line 2227 "vtkParse.y"
+    { setVarName((yyvsp[(1) - (1)].str)); }
     break;
 
-  case 228:
+  case 261:
 
 /* Line 1455 of yacc.c  */
-#line 1849 "vtkParse.y"
-    { setVarValue((yyvsp[(3) - (3)].str)); }
+#line 2228 "vtkParse.y"
+    { setVarName((yyvsp[(1) - (3)].str)); }
     break;
 
-  case 232:
+  case 265:
 
 /* Line 1455 of yacc.c  */
-#line 1860 "vtkParse.y"
-    {
-       unsigned int type = getStorageType();
-       ValueInfo *var = (ValueInfo *)malloc(sizeof(ValueInfo));
-       vtkParse_InitValue(var);
-       var->ItemType = VTK_VARIABLE_INFO;
-       var->Access = access_level;
-
-       handle_complex_type(var, type, (yyvsp[(1) - (2)].integer), getSig());
-
-       var->Name = vtkstrdup(getVarName());
-
-       if (getVarValue())
-         {
-         var->Value = vtkstrdup(getVarValue());
-         }
-
-       if ((var->Type & VTK_PARSE_BASE_TYPE) == VTK_PARSE_FUNCTION)
-         {
-         var->Type = var->Type;
-         }
-
-       /* Is this a constant? */
-       if (((type & VTK_PARSE_CONST) != 0) && var->Value != NULL &&
-           (((type & VTK_PARSE_INDIRECT) == 0) ||
-            ((type & VTK_PARSE_INDIRECT) == VTK_PARSE_ARRAY)))
-         {
-         var->ItemType = VTK_CONSTANT_INFO;
-         if (currentClass)
-           {
-           vtkParse_AddConstantToClass(currentClass, var);
-           }
-         else
-           {
-           vtkParse_AddConstantToNamespace(currentNamespace, var);
-           }
-         }
-       /* This is a true variable i.e. not constant */
-       else
-         {
-         if (currentClass)
-           {
-           vtkParse_AddVariableToClass(currentClass, var);
-           }
-         else
-           {
-           vtkParse_AddVariableToNamespace(currentNamespace, var);
-           }
-         }
-     }
+#line 2236 "vtkParse.y"
+    { clearArray(); }
     break;
 
-  case 236:
+  case 267:
 
 /* Line 1455 of yacc.c  */
-#line 1914 "vtkParse.y"
-    {postSig(", ");}
+#line 2240 "vtkParse.y"
+    { clearArray(); }
     break;
 
-  case 238:
+  case 271:
 
 /* Line 1455 of yacc.c  */
-#line 1917 "vtkParse.y"
-    { setStorageTypeIndirection(0); }
+#line 2247 "vtkParse.y"
+    { postSig("["); }
     break;
 
-  case 240:
+  case 272:
 
 /* Line 1455 of yacc.c  */
-#line 1918 "vtkParse.y"
-    { setStorageTypeIndirection((yyvsp[(1) - (1)].integer)); }
+#line 2247 "vtkParse.y"
+    { postSig("]"); }
     break;
 
-  case 242:
+  case 273:
 
 /* Line 1455 of yacc.c  */
-#line 1922 "vtkParse.y"
-    { (yyval.integer) = 0; }
+#line 2250 "vtkParse.y"
+    { pushArraySize(""); }
     break;
 
-  case 243:
+  case 274:
 
 /* Line 1455 of yacc.c  */
-#line 1923 "vtkParse.y"
-    { postSig(")"); }
+#line 2251 "vtkParse.y"
+    { markSig(); }
     break;
 
-  case 244:
+  case 275:
 
 /* Line 1455 of yacc.c  */
-#line 1925 "vtkParse.y"
-    {
-         const char *scope = getScope();
-         unsigned int parens = add_indirection((yyvsp[(1) - (5)].integer), (yyvsp[(2) - (5)].integer));
-         if ((yyvsp[(5) - (5)].integer) == VTK_PARSE_FUNCTION) {
-           if (scope) { scope = vtkstrndup(scope, strlen(scope) - 2); }
-           getFunction()->Class = scope;
-           (yyval.integer) = (parens | VTK_PARSE_FUNCTION); }
-         else if ((yyvsp[(5) - (5)].integer) == VTK_PARSE_ARRAY) {
-           (yyval.integer) = add_indirection_to_array(parens); }
-       }
+#line 2251 "vtkParse.y"
+    { chopSig(); pushArraySize(copySig()); }
     break;
 
-  case 245:
+  case 280:
 
 /* Line 1455 of yacc.c  */
-#line 1937 "vtkParse.y"
-    { (yyval.integer) = 0; }
+#line 2267 "vtkParse.y"
+    { (yyval.str) = vtkstrcat((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)); }
     break;
 
-  case 246:
+  case 281:
 
 /* Line 1455 of yacc.c  */
-#line 1938 "vtkParse.y"
-    { postSig(")"); }
+#line 2269 "vtkParse.y"
+    { (yyval.str) = vtkstrcat((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)); }
     break;
 
-  case 247:
+  case 282:
 
 /* Line 1455 of yacc.c  */
-#line 1940 "vtkParse.y"
-    {
-         const char *scope = getScope();
-         unsigned int parens = add_indirection((yyvsp[(1) - (5)].integer), (yyvsp[(2) - (5)].integer));
-         if ((yyvsp[(5) - (5)].integer) == VTK_PARSE_FUNCTION) {
-           if (scope) { scope = vtkstrndup(scope, strlen(scope) - 2); }
-           getFunction()->Class = scope;
-           (yyval.integer) = (parens | VTK_PARSE_FUNCTION); }
-         else if ((yyvsp[(5) - (5)].integer) == VTK_PARSE_ARRAY) {
-           (yyval.integer) = add_indirection_to_array(parens); }
-       }
+#line 2271 "vtkParse.y"
+    { (yyval.str) = vtkstrcat((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)); }
     break;
 
-  case 248:
+  case 283:
 
 /* Line 1455 of yacc.c  */
-#line 1951 "vtkParse.y"
-    { postSig("("); scopeSig(""); (yyval.integer) = 0; }
+#line 2275 "vtkParse.y"
+    { (yyval.str) = vtkstrcat((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)); }
     break;
 
-  case 249:
+  case 284:
 
 /* Line 1455 of yacc.c  */
-#line 1952 "vtkParse.y"
-    { postSig("("); scopeSig((yyvsp[(1) - (1)].str)); postSig("*");
-               (yyval.integer) = VTK_PARSE_POINTER; }
+#line 2277 "vtkParse.y"
+    { (yyval.str) = vtkstrcat((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)); }
     break;
 
-  case 250:
+  case 285:
 
 /* Line 1455 of yacc.c  */
-#line 1954 "vtkParse.y"
-    { postSig("("); scopeSig((yyvsp[(1) - (1)].str)); postSig("&");
-               (yyval.integer) = VTK_PARSE_REF; }
+#line 2279 "vtkParse.y"
+    { (yyval.str) = vtkstrcat3((yyvsp[(1) - (3)].str), (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)); }
     break;
 
-  case 251:
+  case 286:
 
 /* Line 1455 of yacc.c  */
-#line 1957 "vtkParse.y"
-    { postSig("("); scopeSig((yyvsp[(1) - (1)].str)); postSig("*");
-               (yyval.integer) = VTK_PARSE_POINTER; }
+#line 2281 "vtkParse.y"
+    { (yyval.str) = vtkstrcat3((yyvsp[(1) - (3)].str), (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)); }
     break;
 
-  case 252:
+  case 287:
 
 /* Line 1455 of yacc.c  */
-#line 1959 "vtkParse.y"
-    { postSig("("); scopeSig((yyvsp[(1) - (1)].str)); postSig("&");
-               (yyval.integer) = VTK_PARSE_REF; }
+#line 2282 "vtkParse.y"
+    { postSig("template "); }
     break;
 
-  case 254:
+  case 288:
 
 /* Line 1455 of yacc.c  */
-#line 1962 "vtkParse.y"
-    { currentFunction->IsConst = 1; }
+#line 2284 "vtkParse.y"
+    { (yyval.str) = vtkstrcat4((yyvsp[(1) - (5)].str), "template ", (yyvsp[(4) - (5)].str), (yyvsp[(5) - (5)].str)); }
     break;
 
-  case 255:
+  case 289:
 
 /* Line 1455 of yacc.c  */
-#line 1964 "vtkParse.y"
-    { (yyval.integer) = 0; }
+#line 2287 "vtkParse.y"
+    { postSig((yyvsp[(1) - (1)].str)); }
     break;
 
-  case 256:
+  case 290:
 
 /* Line 1455 of yacc.c  */
-#line 1965 "vtkParse.y"
-    { pushFunction(); postSig("("); }
+#line 2290 "vtkParse.y"
+    { (yyval.str) = "::"; postSig((yyval.str)); }
     break;
 
-  case 257:
+  case 291:
 
 /* Line 1455 of yacc.c  */
-#line 1966 "vtkParse.y"
-    { (yyval.integer) = VTK_PARSE_FUNCTION; postSig(")"); popFunction(); }
+#line 2293 "vtkParse.y"
+    { markSig(); postSig((yyvsp[(1) - (2)].str)); postSig("<"); }
     break;
 
-  case 258:
+  case 292:
 
 /* Line 1455 of yacc.c  */
-#line 1967 "vtkParse.y"
-    { (yyval.integer) = VTK_PARSE_ARRAY; }
+#line 2295 "vtkParse.y"
+    {
+      chopSig(); if (getSig()[getSigLength()-1] == '>') { postSig(" "); }
+      postSig(">"); (yyval.str) = copySig(); clearTypeId();
+    }
     break;
 
-  case 259:
+  case 293:
 
 /* Line 1455 of yacc.c  */
-#line 1970 "vtkParse.y"
-    { (yyval.integer) = (yyvsp[(1) - (1)].integer); }
+#line 2308 "vtkParse.y"
+    { postSig((yyvsp[(1) - (1)].str)); }
     break;
 
-  case 260:
+  case 294:
 
 /* Line 1455 of yacc.c  */
-#line 1972 "vtkParse.y"
-    { (yyval.integer) = add_indirection((yyvsp[(1) - (2)].integer), (yyvsp[(2) - (2)].integer));}
+#line 2309 "vtkParse.y"
+    { postSig((yyvsp[(1) - (1)].str)); }
     break;
 
-  case 261:
+  case 295:
 
 /* Line 1455 of yacc.c  */
-#line 1975 "vtkParse.y"
-    { (yyval.integer) = (yyvsp[(1) - (1)].integer); }
+#line 2310 "vtkParse.y"
+    { postSig((yyvsp[(1) - (1)].str)); }
     break;
 
-  case 262:
+  case 296:
 
 /* Line 1455 of yacc.c  */
-#line 1977 "vtkParse.y"
-    { (yyval.integer) = add_indirection((yyvsp[(1) - (2)].integer), (yyvsp[(2) - (2)].integer));}
+#line 2311 "vtkParse.y"
+    { postSig((yyvsp[(1) - (1)].str)); }
     break;
 
-  case 263:
+  case 297:
 
 /* Line 1455 of yacc.c  */
-#line 1979 "vtkParse.y"
-    {clearVarName(); chopSig();}
+#line 2312 "vtkParse.y"
+    { postSig((yyvsp[(1) - (1)].str)); }
     break;
 
-  case 265:
+  case 298:
 
 /* Line 1455 of yacc.c  */
-#line 1981 "vtkParse.y"
-    {setVarName((yyvsp[(1) - (1)].str));}
+#line 2313 "vtkParse.y"
+    { postSig((yyvsp[(1) - (1)].str)); }
     break;
 
-  case 266:
+  case 299:
 
 /* Line 1455 of yacc.c  */
-#line 1983 "vtkParse.y"
-    {clearArray();}
+#line 2314 "vtkParse.y"
+    { postSig((yyvsp[(1) - (1)].str)); }
     break;
 
-  case 268:
+  case 300:
 
 /* Line 1455 of yacc.c  */
-#line 1985 "vtkParse.y"
-    {clearArray();}
+#line 2315 "vtkParse.y"
+    { (yyval.str) = vtkstrcat("~",(yyvsp[(2) - (2)].str)); postSig((yyval.str)); }
     break;
 
-  case 270:
+  case 301:
 
 /* Line 1455 of yacc.c  */
-#line 1987 "vtkParse.y"
-    {postSig("[");}
+#line 2316 "vtkParse.y"
+    { (yyval.str) = vtkstrcat("~",(yyvsp[(2) - (2)].str)); postSig((yyval.str)); }
     break;
 
-  case 271:
+  case 302:
 
 /* Line 1455 of yacc.c  */
-#line 1987 "vtkParse.y"
-    {postSig("]");}
+#line 2317 "vtkParse.y"
+    { (yyval.str) = vtkstrcat("~",(yyvsp[(2) - (2)].str)); postSig((yyval.str)); }
     break;
 
-  case 274:
+  case 303:
 
 /* Line 1455 of yacc.c  */
-#line 1991 "vtkParse.y"
-    {pushArraySize("");}
+#line 2318 "vtkParse.y"
+    { (yyval.str) = vtkstrcat("~",(yyvsp[(2) - (2)].str)); postSig((yyval.str)); }
     break;
 
-  case 275:
+  case 304:
 
 /* Line 1455 of yacc.c  */
-#line 1992 "vtkParse.y"
-    {pushArraySize((yyvsp[(1) - (1)].str));}
+#line 2319 "vtkParse.y"
+    { (yyval.str) = vtkstrcat("~",(yyvsp[(2) - (2)].str)); postSig((yyval.str)); }
     break;
 
-  case 276:
+  case 305:
 
 /* Line 1455 of yacc.c  */
-#line 1998 "vtkParse.y"
-    {postSig((yyvsp[(1) - (1)].str));}
+#line 2320 "vtkParse.y"
+    { (yyval.str) = vtkstrcat("~",(yyvsp[(2) - (2)].str)); postSig((yyval.str)); }
     break;
 
-  case 277:
+  case 306:
 
 /* Line 1455 of yacc.c  */
-#line 1999 "vtkParse.y"
-    {postSig((yyvsp[(1) - (1)].str));}
+#line 2321 "vtkParse.y"
+    { (yyval.str) = vtkstrcat("~",(yyvsp[(2) - (2)].str)); postSig((yyval.str)); }
     break;
 
-  case 278:
+  case 307:
 
 /* Line 1455 of yacc.c  */
-#line 2000 "vtkParse.y"
-    {postSig((yyvsp[(1) - (1)].str));}
+#line 2322 "vtkParse.y"
+    { (yyval.str) = "size_t"; postSig((yyval.str)); }
     break;
 
-  case 279:
+  case 308:
 
 /* Line 1455 of yacc.c  */
-#line 2001 "vtkParse.y"
-    {postSig((yyvsp[(1) - (1)].str));}
+#line 2323 "vtkParse.y"
+    { (yyval.str) = "ssize_t"; postSig((yyval.str)); }
     break;
 
-  case 280:
+  case 309:
 
 /* Line 1455 of yacc.c  */
-#line 2002 "vtkParse.y"
-    {postSig((yyvsp[(1) - (1)].str));}
+#line 2324 "vtkParse.y"
+    { (yyval.str) = "vtkTypeInt8"; postSig((yyval.str)); }
     break;
 
-  case 281:
+  case 310:
 
 /* Line 1455 of yacc.c  */
-#line 2003 "vtkParse.y"
-    {postSig((yyvsp[(1) - (1)].str));}
+#line 2325 "vtkParse.y"
+    { (yyval.str) = "vtkTypeUInt8"; postSig((yyval.str)); }
     break;
 
-  case 282:
+  case 311:
 
 /* Line 1455 of yacc.c  */
-#line 2004 "vtkParse.y"
-    {postSig((yyvsp[(1) - (1)].str));}
+#line 2326 "vtkParse.y"
+    { (yyval.str) = "vtkTypeInt16"; postSig((yyval.str)); }
     break;
 
-  case 283:
+  case 312:
 
 /* Line 1455 of yacc.c  */
-#line 2005 "vtkParse.y"
-    {postSig((yyvsp[(1) - (1)].str));}
+#line 2327 "vtkParse.y"
+    { (yyval.str) = "vtkTypeUInt16"; postSig((yyval.str)); }
     break;
 
-  case 284:
+  case 313:
 
 /* Line 1455 of yacc.c  */
-#line 2006 "vtkParse.y"
-    {postSig((yyvsp[(1) - (1)].str));}
+#line 2328 "vtkParse.y"
+    { (yyval.str) = "vtkTypeInt32"; postSig((yyval.str)); }
     break;
 
-  case 285:
+  case 314:
 
 /* Line 1455 of yacc.c  */
-#line 2009 "vtkParse.y"
-    {(yyval.str) = "vtkTypeInt8";}
+#line 2329 "vtkParse.y"
+    { (yyval.str) = "vtkTypeUInt32"; postSig((yyval.str)); }
     break;
 
-  case 286:
+  case 315:
 
 /* Line 1455 of yacc.c  */
-#line 2010 "vtkParse.y"
-    {(yyval.str) = "vtkTypeUInt8";}
+#line 2330 "vtkParse.y"
+    { (yyval.str) = "vtkTypeInt64"; postSig((yyval.str)); }
     break;
 
-  case 287:
+  case 316:
 
 /* Line 1455 of yacc.c  */
-#line 2011 "vtkParse.y"
-    {(yyval.str) = "vtkTypeInt16";}
+#line 2331 "vtkParse.y"
+    { (yyval.str) = "vtkTypeUInt64"; postSig((yyval.str)); }
     break;
 
-  case 288:
+  case 317:
 
 /* Line 1455 of yacc.c  */
-#line 2012 "vtkParse.y"
-    {(yyval.str) = "vtkTypeUInt16";}
+#line 2332 "vtkParse.y"
+    { (yyval.str) = "vtkTypeFloat32"; postSig((yyval.str)); }
     break;
 
-  case 289:
+  case 318:
 
 /* Line 1455 of yacc.c  */
-#line 2013 "vtkParse.y"
-    {(yyval.str) = "vtkTypeInt32";}
+#line 2333 "vtkParse.y"
+    { (yyval.str) = "vtkTypeFloat64"; postSig((yyval.str)); }
     break;
 
-  case 290:
+  case 319:
 
 /* Line 1455 of yacc.c  */
-#line 2014 "vtkParse.y"
-    {(yyval.str) = "vtkTypeUInt32";}
+#line 2334 "vtkParse.y"
+    { (yyval.str) = "vtkIdType"; postSig((yyval.str)); }
     break;
 
-  case 291:
+  case 330:
 
 /* Line 1455 of yacc.c  */
-#line 2015 "vtkParse.y"
-    {(yyval.str) = "vtkTypeInt64";}
+#line 2360 "vtkParse.y"
+    { setTypeBase(buildTypeBase(getType(), (yyvsp[(1) - (1)].integer))); }
     break;
 
-  case 292:
+  case 331:
 
 /* Line 1455 of yacc.c  */
-#line 2016 "vtkParse.y"
-    {(yyval.str) = "vtkTypeUInt64";}
+#line 2361 "vtkParse.y"
+    { setTypeMod(VTK_PARSE_TYPEDEF); }
     break;
 
-  case 293:
+  case 332:
 
 /* Line 1455 of yacc.c  */
-#line 2017 "vtkParse.y"
-    {(yyval.str) = "vtkTypeFloat32";}
+#line 2362 "vtkParse.y"
+    { setTypeMod(VTK_PARSE_FRIEND); }
     break;
 
-  case 294:
+  case 335:
 
 /* Line 1455 of yacc.c  */
-#line 2018 "vtkParse.y"
-    {(yyval.str) = "vtkTypeFloat64";}
+#line 2369 "vtkParse.y"
+    { setTypeMod((yyvsp[(1) - (1)].integer)); }
     break;
 
-  case 295:
+  case 336:
 
 /* Line 1455 of yacc.c  */
-#line 2021 "vtkParse.y"
-    {(yyval.str) = "vtkIdType";}
+#line 2370 "vtkParse.y"
+    { setTypeMod((yyvsp[(1) - (1)].integer)); }
     break;
 
-  case 296:
+  case 337:
 
 /* Line 1455 of yacc.c  */
-#line 2022 "vtkParse.y"
-    {(yyval.str) = "vtkFloatingPointType";}
+#line 2371 "vtkParse.y"
+    { setTypeMod((yyvsp[(1) - (1)].integer)); }
     break;
 
-  case 297:
+  case 338:
 
 /* Line 1455 of yacc.c  */
-#line 2029 "vtkParse.y"
-    {(yyval.integer) = (yyvsp[(1) - (1)].integer); setStorageType((yyval.integer));}
+#line 2374 "vtkParse.y"
+    { postSig("mutable "); (yyval.integer) = VTK_PARSE_MUTABLE; }
     break;
 
-  case 298:
+  case 339:
 
 /* Line 1455 of yacc.c  */
-#line 2030 "vtkParse.y"
-    {(yyval.integer) = (yyvsp[(2) - (2)].integer); setStorageType((yyval.integer));}
+#line 2375 "vtkParse.y"
+    { (yyval.integer) = 0; }
     break;
 
-  case 299:
+  case 340:
 
 /* Line 1455 of yacc.c  */
-#line 2031 "vtkParse.y"
-    {(yyval.integer) = (yyvsp[(2) - (2)].integer); setStorageType((yyval.integer));}
+#line 2376 "vtkParse.y"
+    { (yyval.integer) = 0; }
     break;
 
-  case 300:
+  case 341:
 
 /* Line 1455 of yacc.c  */
-#line 2033 "vtkParse.y"
-    {(yyval.integer) = (yyvsp[(3) - (3)].integer); setStorageType((yyval.integer));}
+#line 2377 "vtkParse.y"
+    { postSig("static "); (yyval.integer) = VTK_PARSE_STATIC; }
     break;
 
-  case 301:
+  case 342:
 
 /* Line 1455 of yacc.c  */
-#line 2034 "vtkParse.y"
-    {(yyval.integer) = (yyvsp[(2) - (2)].integer); setStorageType((yyval.integer));}
+#line 2380 "vtkParse.y"
+    { (yyval.integer) = 0; }
     break;
 
-  case 302:
+  case 343:
 
 /* Line 1455 of yacc.c  */
-#line 2035 "vtkParse.y"
-    {(yyval.integer) = ((yyvsp[(1) - (2)].integer) | (yyvsp[(2) - (2)].integer));
-      setStorageType((yyval.integer));}
+#line 2381 "vtkParse.y"
+    { postSig("virtual "); (yyval.integer) = VTK_PARSE_VIRTUAL; }
     break;
 
-  case 303:
+  case 344:
 
 /* Line 1455 of yacc.c  */
-#line 2037 "vtkParse.y"
-    {(yyval.integer) = ((yyvsp[(2) - (3)].integer) | (yyvsp[(3) - (3)].integer));
-      setStorageType((yyval.integer));}
+#line 2382 "vtkParse.y"
+    { postSig("explicit "); (yyval.integer) = VTK_PARSE_EXPLICIT; }
     break;
 
-  case 304:
+  case 345:
 
 /* Line 1455 of yacc.c  */
-#line 2041 "vtkParse.y"
-    {postSig("static "); (yyval.integer) = VTK_PARSE_STATIC; }
+#line 2385 "vtkParse.y"
+    { postSig("const "); (yyval.integer) = VTK_PARSE_CONST; }
     break;
 
-  case 305:
+  case 346:
 
 /* Line 1455 of yacc.c  */
-#line 2042 "vtkParse.y"
-    {postSig("static "); (yyval.integer) = VTK_PARSE_STATIC; }
+#line 2386 "vtkParse.y"
+    { postSig("volatile "); (yyval.integer) = VTK_PARSE_VOLATILE; }
     break;
 
-  case 306:
+  case 348:
 
 /* Line 1455 of yacc.c  */
-#line 2044 "vtkParse.y"
-    {(yyval.integer) = (yyvsp[(1) - (1)].integer);}
+#line 2391 "vtkParse.y"
+    { (yyval.integer) = ((yyvsp[(1) - (2)].integer) | (yyvsp[(2) - (2)].integer)); }
     break;
 
-  case 307:
+  case 350:
 
 /* Line 1455 of yacc.c  */
-#line 2045 "vtkParse.y"
-    {(yyval.integer) = ((yyvsp[(1) - (2)].integer) | (yyvsp[(2) - (2)].integer));}
+#line 2402 "vtkParse.y"
+    { setTypeBase((yyvsp[(1) - (1)].integer)); }
     break;
 
-  case 308:
+  case 352:
 
 /* Line 1455 of yacc.c  */
-#line 2047 "vtkParse.y"
-    {(yyval.integer) = (yyvsp[(1) - (1)].integer);}
+#line 2404 "vtkParse.y"
+    { setTypeBase((yyvsp[(2) - (2)].integer)); }
     break;
 
-  case 309:
+  case 355:
 
 /* Line 1455 of yacc.c  */
-#line 2048 "vtkParse.y"
-    {(yyval.integer) = (VTK_PARSE_CONST | (yyvsp[(2) - (2)].integer));}
+#line 2409 "vtkParse.y"
+    { postSig("typename "); }
     break;
 
-  case 310:
+  case 356:
 
 /* Line 1455 of yacc.c  */
-#line 2049 "vtkParse.y"
-    {(yyval.integer) = (VTK_PARSE_CONST | (yyvsp[(1) - (2)].integer));}
+#line 2410 "vtkParse.y"
+    { postSig(" "); setTypeId((yyvsp[(3) - (3)].str)); (yyval.integer) = guess_id_type((yyvsp[(3) - (3)].str)); }
     break;
 
-  case 311:
+  case 357:
 
 /* Line 1455 of yacc.c  */
-#line 2051 "vtkParse.y"
-    {postSig("const ");}
+#line 2412 "vtkParse.y"
+    { postSig(" "); setTypeId((yyvsp[(1) - (1)].str)); (yyval.integer) = guess_id_type((yyvsp[(1) - (1)].str)); }
     break;
 
-  case 313:
+  case 358:
 
 /* Line 1455 of yacc.c  */
-#line 2055 "vtkParse.y"
-    {postSig(" "); setTypeId((yyvsp[(1) - (1)].str)); (yyval.integer) = VTK_PARSE_UNKNOWN;}
+#line 2414 "vtkParse.y"
+    { postSig(" "); setTypeId((yyvsp[(1) - (1)].str)); (yyval.integer) = guess_id_type((yyvsp[(1) - (1)].str)); }
     break;
 
-  case 314:
+  case 359:
 
 /* Line 1455 of yacc.c  */
-#line 2057 "vtkParse.y"
-    {postSig(" "); setTypeId((yyvsp[(1) - (1)].str)); (yyval.integer) = VTK_PARSE_UNKNOWN;}
+#line 2416 "vtkParse.y"
+    { postSig(" "); setTypeId((yyvsp[(2) - (2)].str)); (yyval.integer) = guess_id_type((yyvsp[(2) - (2)].str)); }
     break;
 
-  case 315:
+  case 360:
 
 /* Line 1455 of yacc.c  */
-#line 2058 "vtkParse.y"
-    {postSig("typename ");}
+#line 2418 "vtkParse.y"
+    { postSig(" "); setTypeId((yyvsp[(2) - (2)].str)); (yyval.integer) = guess_id_type((yyvsp[(2) - (2)].str)); }
     break;
 
-  case 316:
+  case 362:
 
 /* Line 1455 of yacc.c  */
-#line 2059 "vtkParse.y"
-    {postSig(" "); setTypeId((yyvsp[(3) - (3)].str)); (yyval.integer) = VTK_PARSE_UNKNOWN;}
+#line 2424 "vtkParse.y"
+    { setTypeBase((yyvsp[(1) - (1)].integer)); }
     break;
 
-  case 317:
+  case 364:
 
 /* Line 1455 of yacc.c  */
-#line 2062 "vtkParse.y"
-    { markSig(); postSig((yyvsp[(1) - (2)].str)); postSig("<");}
+#line 2426 "vtkParse.y"
+    { setTypeBase((yyvsp[(2) - (2)].integer)); }
     break;
 
-  case 318:
+  case 367:
 
 /* Line 1455 of yacc.c  */
-#line 2063 "vtkParse.y"
-    {chopSig(); if (getSig()[strlen(getSig())-1] == '>') { postSig(" "); }
-      postSig(">"); (yyval.str) = vtkstrdup(copySig()); clearTypeId();}
+#line 2432 "vtkParse.y"
+    { postSig(" "); setTypeId((yyvsp[(1) - (1)].str)); (yyval.integer) = guess_id_type((yyvsp[(1) - (1)].str)); }
     break;
 
-  case 319:
+  case 368:
 
 /* Line 1455 of yacc.c  */
-#line 2065 "vtkParse.y"
-    { markSig(); postSig((yyvsp[(1) - (2)].str)); postSig("<");}
+#line 2434 "vtkParse.y"
+    { postSig(" "); setTypeId((yyvsp[(1) - (1)].str)); (yyval.integer) = guess_id_type((yyvsp[(1) - (1)].str)); }
     break;
 
-  case 320:
+  case 369:
 
 /* Line 1455 of yacc.c  */
-#line 2066 "vtkParse.y"
-    {chopSig(); if (getSig()[strlen(getSig())-1] == '>') { postSig(" "); }
-      postSig(">"); (yyval.str) = vtkstrdup(copySig()); clearTypeId();}
+#line 2436 "vtkParse.y"
+    { postSig(" "); setTypeId((yyvsp[(2) - (2)].str)); (yyval.integer) = guess_id_type((yyvsp[(2) - (2)].str)); }
     break;
 
-  case 321:
+  case 370:
 
 /* Line 1455 of yacc.c  */
-#line 2068 "vtkParse.y"
-    { markSig(); postSig((yyvsp[(1) - (2)].str)); postSig("<");}
+#line 2438 "vtkParse.y"
+    { postSig(" "); setTypeId((yyvsp[(2) - (2)].str)); (yyval.integer) = guess_id_type((yyvsp[(2) - (2)].str)); }
     break;
 
-  case 322:
+  case 371:
 
 /* Line 1455 of yacc.c  */
-#line 2069 "vtkParse.y"
-    {chopSig(); if (getSig()[strlen(getSig())-1] == '>') { postSig(" "); }
-      postSig(">"); (yyval.str) = vtkstrdup(copySig()); clearTypeId();}
+#line 2440 "vtkParse.y"
+    { postSig(" "); setTypeId((yyvsp[(2) - (2)].str)); (yyval.integer) = guess_id_type((yyvsp[(2) - (2)].str)); }
     break;
 
-  case 324:
+  case 372:
 
 /* Line 1455 of yacc.c  */
-#line 2073 "vtkParse.y"
-    {chopSig(); postSig(", ");}
+#line 2443 "vtkParse.y"
+    { setTypeId(""); }
     break;
 
-  case 327:
+  case 374:
 
 /* Line 1455 of yacc.c  */
-#line 2076 "vtkParse.y"
-    {postSig((yyvsp[(1) - (1)].str));}
+#line 2447 "vtkParse.y"
+    { typeSig((yyvsp[(1) - (1)].str)); (yyval.integer) = VTK_PARSE_STRING; }
     break;
 
-  case 328:
+  case 375:
 
 /* Line 1455 of yacc.c  */
-#line 2078 "vtkParse.y"
-    {postSig((yyvsp[(1) - (1)].str));}
+#line 2448 "vtkParse.y"
+    { typeSig((yyvsp[(1) - (1)].str)); (yyval.integer) = VTK_PARSE_UNICODE_STRING;}
     break;
 
-  case 329:
+  case 376:
 
 /* Line 1455 of yacc.c  */
-#line 2079 "vtkParse.y"
-    {postSig((yyvsp[(1) - (1)].str));}
+#line 2449 "vtkParse.y"
+    { typeSig((yyvsp[(1) - (1)].str)); (yyval.integer) = VTK_PARSE_OSTREAM; }
     break;
 
-  case 330:
+  case 377:
 
 /* Line 1455 of yacc.c  */
-#line 2080 "vtkParse.y"
-    {postSig((yyvsp[(1) - (1)].str));}
+#line 2450 "vtkParse.y"
+    { typeSig((yyvsp[(1) - (1)].str)); (yyval.integer) = VTK_PARSE_ISTREAM; }
     break;
 
-  case 331:
+  case 378:
 
 /* Line 1455 of yacc.c  */
-#line 2081 "vtkParse.y"
-    {postSig((yyvsp[(1) - (1)].str));}
+#line 2451 "vtkParse.y"
+    { typeSig((yyvsp[(1) - (1)].str)); (yyval.integer) = VTK_PARSE_UNKNOWN; }
     break;
 
-  case 332:
+  case 379:
 
 /* Line 1455 of yacc.c  */
-#line 2082 "vtkParse.y"
-    {postSig((yyvsp[(1) - (1)].str));}
+#line 2452 "vtkParse.y"
+    { typeSig((yyvsp[(1) - (1)].str)); (yyval.integer) = VTK_PARSE_OBJECT; }
     break;
 
-  case 333:
+  case 380:
 
 /* Line 1455 of yacc.c  */
-#line 2083 "vtkParse.y"
-    {postSig((yyvsp[(1) - (1)].str));}
+#line 2453 "vtkParse.y"
+    { typeSig((yyvsp[(1) - (1)].str)); (yyval.integer) = VTK_PARSE_QOBJECT; }
     break;
 
-  case 334:
+  case 381:
 
 /* Line 1455 of yacc.c  */
-#line 2084 "vtkParse.y"
-    {postSig((yyvsp[(1) - (1)].str));}
+#line 2454 "vtkParse.y"
+    { typeSig("ssize_t"); (yyval.integer) = VTK_PARSE_SSIZE_T; }
     break;
 
-  case 337:
+  case 382:
 
 /* Line 1455 of yacc.c  */
-#line 2089 "vtkParse.y"
-    {
-             (yyval.str) = vtkstrcat3((yyvsp[(1) - (3)].str), "::", (yyvsp[(3) - (3)].str));
-             preScopeSig((yyvsp[(1) - (3)].str));
-           }
+#line 2455 "vtkParse.y"
+    { typeSig("size_t"); (yyval.integer) = VTK_PARSE_SIZE_T; }
     break;
 
-  case 338:
+  case 383:
 
 /* Line 1455 of yacc.c  */
-#line 2094 "vtkParse.y"
-    {
-             (yyval.str) = vtkstrcat3((yyvsp[(1) - (3)].str), "::", (yyvsp[(3) - (3)].str));
-             preScopeSig("");
-           }
+#line 2456 "vtkParse.y"
+    { typeSig("vtkTypeInt8"); (yyval.integer) = VTK_PARSE_INT8; }
     break;
 
-  case 346:
+  case 384:
 
 /* Line 1455 of yacc.c  */
-#line 2116 "vtkParse.y"
-    { postSig("&"); (yyval.integer) = VTK_PARSE_REF;}
+#line 2457 "vtkParse.y"
+    { typeSig("vtkTypeUInt8"); (yyval.integer) = VTK_PARSE_UINT8; }
     break;
 
-  case 347:
+  case 385:
 
 /* Line 1455 of yacc.c  */
-#line 2117 "vtkParse.y"
-    { postSig("&"); (yyval.integer) = ((yyvsp[(1) - (2)].integer) | VTK_PARSE_REF);}
+#line 2458 "vtkParse.y"
+    { typeSig("vtkTypeInt16"); (yyval.integer) = VTK_PARSE_INT16; }
     break;
 
-  case 348:
+  case 386:
 
 /* Line 1455 of yacc.c  */
-#line 2118 "vtkParse.y"
-    { (yyval.integer) = (yyvsp[(1) - (1)].integer); }
+#line 2459 "vtkParse.y"
+    { typeSig("vtkTypeUInt16"); (yyval.integer) = VTK_PARSE_UINT16; }
     break;
 
-  case 349:
+  case 387:
 
 /* Line 1455 of yacc.c  */
-#line 2123 "vtkParse.y"
-    { (yyval.integer) = (yyvsp[(1) - (1)].integer); }
+#line 2460 "vtkParse.y"
+    { typeSig("vtkTypeInt32"); (yyval.integer) = VTK_PARSE_INT32; }
     break;
 
-  case 350:
+  case 388:
 
 /* Line 1455 of yacc.c  */
-#line 2125 "vtkParse.y"
-    {
-       unsigned int n;
-       n = (((yyvsp[(1) - (2)].integer) << 2) | (yyvsp[(2) - (2)].integer));
-       if ((n & VTK_PARSE_INDIRECT) != n)
-         {
-         n = VTK_PARSE_BAD_INDIRECT;
-         }
-      (yyval.integer) = n;
-    }
+#line 2461 "vtkParse.y"
+    { typeSig("vtkTypeUInt32"); (yyval.integer) = VTK_PARSE_UINT32; }
     break;
 
-  case 351:
+  case 389:
 
 /* Line 1455 of yacc.c  */
-#line 2136 "vtkParse.y"
-    { postSig("*"); (yyval.integer) = VTK_PARSE_POINTER; }
+#line 2462 "vtkParse.y"
+    { typeSig("vtkTypeInt64"); (yyval.integer) = VTK_PARSE_INT64; }
     break;
 
-  case 352:
+  case 390:
 
 /* Line 1455 of yacc.c  */
-#line 2137 "vtkParse.y"
-    { postSig("*const "); (yyval.integer) = VTK_PARSE_CONST_POINTER; }
+#line 2463 "vtkParse.y"
+    { typeSig("vtkTypeUInt64"); (yyval.integer) = VTK_PARSE_UINT64; }
     break;
 
-  case 353:
+  case 391:
 
 /* Line 1455 of yacc.c  */
-#line 2140 "vtkParse.y"
-    { (yyval.integer) = (yyvsp[(1) - (1)].integer);}
+#line 2464 "vtkParse.y"
+    { typeSig("vtkTypeFloat32"); (yyval.integer) = VTK_PARSE_FLOAT32; }
     break;
 
-  case 354:
+  case 392:
 
 /* Line 1455 of yacc.c  */
-#line 2141 "vtkParse.y"
-    { (yyval.integer) = (yyvsp[(2) - (2)].integer); }
+#line 2465 "vtkParse.y"
+    { typeSig("vtkTypeFloat64"); (yyval.integer) = VTK_PARSE_FLOAT64; }
     break;
 
-  case 355:
+  case 393:
 
 /* Line 1455 of yacc.c  */
-#line 2142 "vtkParse.y"
-    { (yyval.integer) = (yyvsp[(2) - (2)].integer); }
+#line 2466 "vtkParse.y"
+    { typeSig("vtkIdType"); (yyval.integer) = VTK_PARSE_ID_TYPE; }
     break;
 
-  case 356:
+  case 394:
 
 /* Line 1455 of yacc.c  */
-#line 2143 "vtkParse.y"
-    { typeSig((yyvsp[(2) - (2)].str)); (yyval.integer) = VTK_PARSE_UNKNOWN; }
+#line 2469 "vtkParse.y"
+    { postSig("void "); (yyval.integer) = VTK_PARSE_VOID; }
     break;
 
-  case 357:
+  case 395:
 
 /* Line 1455 of yacc.c  */
-#line 2144 "vtkParse.y"
-    { typeSig((yyvsp[(2) - (2)].str)); (yyval.integer) = VTK_PARSE_UNKNOWN; }
+#line 2470 "vtkParse.y"
+    { postSig("bool "); (yyval.integer) = VTK_PARSE_BOOL; }
     break;
 
-  case 358:
+  case 396:
 
 /* Line 1455 of yacc.c  */
-#line 2147 "vtkParse.y"
-    { (yyval.integer) = (yyvsp[(1) - (1)].integer);}
+#line 2471 "vtkParse.y"
+    { postSig("float "); (yyval.integer) = VTK_PARSE_FLOAT; }
     break;
 
-  case 359:
+  case 397:
 
 /* Line 1455 of yacc.c  */
-#line 2148 "vtkParse.y"
-    { (yyval.integer) = (yyvsp[(1) - (1)].integer);}
+#line 2472 "vtkParse.y"
+    { postSig("double "); (yyval.integer) = VTK_PARSE_DOUBLE; }
     break;
 
-  case 360:
+  case 398:
 
 /* Line 1455 of yacc.c  */
-#line 2151 "vtkParse.y"
-    { typeSig((yyvsp[(1) - (1)].str)); (yyval.integer) = VTK_PARSE_STRING;}
+#line 2473 "vtkParse.y"
+    { postSig("char "); (yyval.integer) = VTK_PARSE_CHAR; }
     break;
 
-  case 361:
+  case 399:
 
 /* Line 1455 of yacc.c  */
-#line 2152 "vtkParse.y"
-    { typeSig((yyvsp[(1) - (1)].str)); (yyval.integer) = VTK_PARSE_UNICODE_STRING;}
+#line 2474 "vtkParse.y"
+    { postSig("int "); (yyval.integer) = VTK_PARSE_INT; }
     break;
 
-  case 362:
+  case 400:
 
 /* Line 1455 of yacc.c  */
-#line 2153 "vtkParse.y"
-    { typeSig((yyvsp[(1) - (1)].str)); (yyval.integer) = VTK_PARSE_OSTREAM; }
+#line 2475 "vtkParse.y"
+    { postSig("short "); (yyval.integer) = VTK_PARSE_SHORT; }
     break;
 
-  case 363:
+  case 401:
 
 /* Line 1455 of yacc.c  */
-#line 2154 "vtkParse.y"
-    { typeSig((yyvsp[(1) - (1)].str)); (yyval.integer) = VTK_PARSE_ISTREAM; }
+#line 2476 "vtkParse.y"
+    { postSig("long "); (yyval.integer) = VTK_PARSE_LONG; }
     break;
 
-  case 364:
+  case 402:
 
 /* Line 1455 of yacc.c  */
-#line 2155 "vtkParse.y"
-    { typeSig((yyvsp[(1) - (1)].str)); (yyval.integer) = VTK_PARSE_UNKNOWN; }
+#line 2477 "vtkParse.y"
+    { postSig("__int64 "); (yyval.integer) = VTK_PARSE___INT64; }
     break;
 
-  case 365:
+  case 403:
 
 /* Line 1455 of yacc.c  */
-#line 2156 "vtkParse.y"
-    { typeSig((yyvsp[(1) - (1)].str)); (yyval.integer) = VTK_PARSE_OBJECT; }
+#line 2478 "vtkParse.y"
+    { postSig("signed "); (yyval.integer) = VTK_PARSE_INT; }
     break;
 
-  case 366:
+  case 404:
 
 /* Line 1455 of yacc.c  */
-#line 2157 "vtkParse.y"
-    { typeSig((yyvsp[(1) - (1)].str)); (yyval.integer) = VTK_PARSE_QOBJECT; }
+#line 2479 "vtkParse.y"
+    { postSig("unsigned "); (yyval.integer) = VTK_PARSE_UNSIGNED_INT; }
     break;
 
-  case 367:
+  case 407:
 
 /* Line 1455 of yacc.c  */
-#line 2160 "vtkParse.y"
-    { typeSig("void"); (yyval.integer) = VTK_PARSE_VOID;}
+#line 2501 "vtkParse.y"
+    { (yyval.integer) = ((yyvsp[(1) - (2)].integer) | (yyvsp[(2) - (2)].integer)); }
     break;
 
-  case 368:
+  case 408:
 
 /* Line 1455 of yacc.c  */
-#line 2161 "vtkParse.y"
-    { typeSig("bool"); (yyval.integer) = VTK_PARSE_BOOL;}
+#line 2504 "vtkParse.y"
+    { postSig("&"); (yyval.integer) = VTK_PARSE_REF; }
     break;
 
-  case 369:
+  case 409:
 
 /* Line 1455 of yacc.c  */
-#line 2162 "vtkParse.y"
-    { typeSig("ssize_t"); (yyval.integer) = VTK_PARSE_SSIZE_T;}
+#line 2507 "vtkParse.y"
+    { postSig("*"); (yyval.integer) = VTK_PARSE_POINTER; }
     break;
 
-  case 370:
+  case 410:
 
 /* Line 1455 of yacc.c  */
-#line 2163 "vtkParse.y"
-    { typeSig("size_t"); (yyval.integer) = VTK_PARSE_SIZE_T;}
+#line 2508 "vtkParse.y"
+    { postSig("*"); }
     break;
 
-  case 371:
+  case 411:
 
 /* Line 1455 of yacc.c  */
-#line 2164 "vtkParse.y"
-    { typeSig("vtkTypeInt8"); (yyval.integer) = VTK_PARSE_INT8; }
+#line 2509 "vtkParse.y"
+    {
+      if (((yyvsp[(3) - (3)].integer) & VTK_PARSE_CONST) != 0)
+        {
+        (yyval.integer) = VTK_PARSE_CONST_POINTER;
+        }
+      if (((yyvsp[(3) - (3)].integer) & VTK_PARSE_VOLATILE) != 0)
+        {
+        (yyval.integer) = VTK_PARSE_BAD_INDIRECT;
+        }
+    }
     break;
 
-  case 372:
+  case 413:
 
 /* Line 1455 of yacc.c  */
-#line 2165 "vtkParse.y"
-    { typeSig("vtkTypeUInt8"); (yyval.integer) = VTK_PARSE_UINT8; }
+#line 2525 "vtkParse.y"
+    {
+      unsigned int n;
+      n = (((yyvsp[(1) - (2)].integer) << 2) | (yyvsp[(2) - (2)].integer));
+      if ((n & VTK_PARSE_INDIRECT) != n)
+        {
+        n = VTK_PARSE_BAD_INDIRECT;
+        }
+      (yyval.integer) = n;
+    }
     break;
 
-  case 373:
+  case 414:
 
 /* Line 1455 of yacc.c  */
-#line 2166 "vtkParse.y"
-    { typeSig("vtkTypeInt16"); (yyval.integer) = VTK_PARSE_INT16; }
+#line 2541 "vtkParse.y"
+    {preSig("void Set"); postSig("(");}
     break;
 
-  case 374:
+  case 415:
 
 /* Line 1455 of yacc.c  */
-#line 2167 "vtkParse.y"
-    { typeSig("vtkTypeUInt16"); (yyval.integer) = VTK_PARSE_UINT16; }
+#line 2542 "vtkParse.y"
+    {
+   postSig("a);");
+   currentFunction->Macro = "vtkSetMacro";
+   currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (7)].str));
+   currentFunction->Comment = vtkstrdup(getComment());
+   add_parameter(currentFunction, getType(), getTypeId(), 0);
+   set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
+   output_function();
+   }
     break;
 
-  case 375:
+  case 416:
 
 /* Line 1455 of yacc.c  */
-#line 2168 "vtkParse.y"
-    { typeSig("vtkTypeInt32"); (yyval.integer) = VTK_PARSE_INT32; }
+#line 2551 "vtkParse.y"
+    {postSig("Get");}
     break;
 
-  case 376:
+  case 417:
 
 /* Line 1455 of yacc.c  */
-#line 2169 "vtkParse.y"
-    { typeSig("vtkTypeUInt32"); (yyval.integer) = VTK_PARSE_UINT32; }
+#line 2552 "vtkParse.y"
+    {markSig();}
     break;
 
-  case 377:
+  case 418:
 
 /* Line 1455 of yacc.c  */
-#line 2170 "vtkParse.y"
-    { typeSig("vtkTypeInt64"); (yyval.integer) = VTK_PARSE_INT64; }
+#line 2552 "vtkParse.y"
+    {swapSig();}
     break;
 
-  case 378:
+  case 419:
 
 /* Line 1455 of yacc.c  */
-#line 2171 "vtkParse.y"
-    { typeSig("vtkTypeUInt64"); (yyval.integer) = VTK_PARSE_UINT64; }
+#line 2553 "vtkParse.y"
+    {
+   postSig("();");
+   currentFunction->Macro = "vtkGetMacro";
+   currentFunction->Name = vtkstrcat("Get", (yyvsp[(4) - (9)].str));
+   currentFunction->Comment = vtkstrdup(getComment());
+   set_return(currentFunction, getType(), getTypeId(), 0);
+   output_function();
+   }
     break;
 
-  case 379:
+  case 420:
 
 /* Line 1455 of yacc.c  */
-#line 2172 "vtkParse.y"
-    { typeSig("vtkTypeFloat32"); (yyval.integer) = VTK_PARSE_FLOAT32; }
+#line 2561 "vtkParse.y"
+    {preSig("void Set");}
     break;
 
-  case 380:
+  case 421:
 
 /* Line 1455 of yacc.c  */
-#line 2173 "vtkParse.y"
-    { typeSig("vtkTypeFloat64"); (yyval.integer) = VTK_PARSE_FLOAT64; }
+#line 2562 "vtkParse.y"
+    {
+   postSig("(char *);");
+   currentFunction->Macro = "vtkSetStringMacro";
+   currentFunction->Name = vtkstrcat("Set", (yyvsp[(4) - (5)].str));
+   currentFunction->Comment = vtkstrdup(getComment());
+   add_parameter(currentFunction, VTK_PARSE_CHAR_PTR, "char", 0);
+   set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
+   output_function();
+   }
     break;
 
-  case 381:
+  case 422:
 
 /* Line 1455 of yacc.c  */
-#line 2174 "vtkParse.y"
-    { typeSig("vtkIdType"); (yyval.integer) = VTK_PARSE_ID_TYPE;}
+#line 2571 "vtkParse.y"
+    {preSig("char *Get");}
     break;
 
-  case 382:
+  case 423:
 
 /* Line 1455 of yacc.c  */
-#line 2175 "vtkParse.y"
-    { typeSig("double"); (yyval.integer) = VTK_PARSE_DOUBLE;}
+#line 2572 "vtkParse.y"
+    {
+   postSig("();");
+   currentFunction->Macro = "vtkGetStringMacro";
+   currentFunction->Name = vtkstrcat("Get", (yyvsp[(4) - (5)].str));
+   currentFunction->Comment = vtkstrdup(getComment());
+   set_return(currentFunction, VTK_PARSE_CHAR_PTR, "char", 0);
+   output_function();
+   }
     break;
 
-  case 383:
+  case 424:
 
 /* Line 1455 of yacc.c  */
-#line 2176 "vtkParse.y"
-    { typeSig("float"); (yyval.integer) = VTK_PARSE_FLOAT;}
+#line 2580 "vtkParse.y"
+    {startSig(); markSig();}
     break;
 
-  case 384:
+  case 425:
 
 /* Line 1455 of yacc.c  */
-#line 2177 "vtkParse.y"
-    { typeSig("double"); (yyval.integer) = VTK_PARSE_DOUBLE;}
+#line 2580 "vtkParse.y"
+    {closeSig();}
     break;
 
-  case 385:
+  case 426:
 
 /* Line 1455 of yacc.c  */
-#line 2178 "vtkParse.y"
-    { typeSig("long double"); (yyval.integer) = VTK_PARSE_UNKNOWN;}
-    break;
-
-  case 386:
+#line 2582 "vtkParse.y"
+    {
+   const char *typeText;
+   chopSig();
+   typeText = copySig();
 
-/* Line 1455 of yacc.c  */
-#line 2179 "vtkParse.y"
-    { typeSig("char"); (yyval.integer) = VTK_PARSE_CHAR;}
-    break;
+   currentFunction->Macro = "vtkSetClampMacro";
+   currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (10)].str));
+   currentFunction->Signature =
+     vtkstrcat5("void ", currentFunction->Name, "(", typeText, ");");
+   currentFunction->Comment = vtkstrdup(getComment());
+   add_parameter(currentFunction, getType(), getTypeId(), 0);
+   set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
+   output_function();
 
-  case 387:
+   currentFunction->Macro = "vtkSetClampMacro";
+   currentFunction->Name = vtkstrcat3("Get", (yyvsp[(3) - (10)].str), "MinValue");
+   currentFunction->Signature =
+     vtkstrcat4(typeText, " ", currentFunction->Name, "();");
+   currentFunction->Comment = vtkstrdup(getComment());
+   set_return(currentFunction, getType(), getTypeId(), 0);
+   output_function();
 
-/* Line 1455 of yacc.c  */
-#line 2180 "vtkParse.y"
-    { typeSig("signed char"); (yyval.integer) = VTK_PARSE_SIGNED_CHAR;}
+   currentFunction->Macro = "vtkSetClampMacro";
+   currentFunction->Name = vtkstrcat3("Get", (yyvsp[(3) - (10)].str), "MaxValue");
+   currentFunction->Signature =
+     vtkstrcat4(typeText, " ", currentFunction->Name, "();");
+   currentFunction->Comment = vtkstrdup(getComment());
+   set_return(currentFunction, getType(), getTypeId(), 0);
+   output_function();
+   }
     break;
 
-  case 388:
+  case 427:
 
 /* Line 1455 of yacc.c  */
-#line 2182 "vtkParse.y"
-    { typeSig("unsigned char"); (yyval.integer) = VTK_PARSE_UNSIGNED_CHAR;}
+#line 2613 "vtkParse.y"
+    {preSig("void Set"); postSig("("); }
     break;
 
-  case 389:
+  case 428:
 
 /* Line 1455 of yacc.c  */
-#line 2183 "vtkParse.y"
-    { typeSig("int"); (yyval.integer) = VTK_PARSE_INT;}
+#line 2614 "vtkParse.y"
+    {
+   postSig("*);");
+   currentFunction->Macro = "vtkSetObjectMacro";
+   currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (7)].str));
+   currentFunction->Comment = vtkstrdup(getComment());
+   add_parameter(currentFunction, VTK_PARSE_OBJECT_PTR, getTypeId(), 0);
+   set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
+   output_function();
+   }
     break;
 
-  case 390:
+  case 429:
 
 /* Line 1455 of yacc.c  */
-#line 2185 "vtkParse.y"
-    { typeSig("unsigned int"); (yyval.integer) = VTK_PARSE_UNSIGNED_INT;}
+#line 2623 "vtkParse.y"
+    {postSig("*Get");}
     break;
 
-  case 391:
+  case 430:
 
 /* Line 1455 of yacc.c  */
-#line 2186 "vtkParse.y"
-    { typeSig("short"); (yyval.integer) = VTK_PARSE_SHORT;}
+#line 2624 "vtkParse.y"
+    {markSig();}
     break;
 
-  case 392:
+  case 431:
 
 /* Line 1455 of yacc.c  */
-#line 2188 "vtkParse.y"
-    { typeSig("unsigned short"); (yyval.integer) = VTK_PARSE_UNSIGNED_SHORT;}
+#line 2624 "vtkParse.y"
+    {swapSig();}
     break;
 
-  case 393:
+  case 432:
 
 /* Line 1455 of yacc.c  */
-#line 2189 "vtkParse.y"
-    { typeSig("long"); (yyval.integer) = VTK_PARSE_LONG;}
+#line 2625 "vtkParse.y"
+    {
+   postSig("();");
+   currentFunction->Macro = "vtkGetObjectMacro";
+   currentFunction->Name = vtkstrcat("Get", (yyvsp[(4) - (9)].str));
+   currentFunction->Comment = vtkstrdup(getComment());
+   set_return(currentFunction, VTK_PARSE_OBJECT_PTR, getTypeId(), 0);
+   output_function();
+   }
     break;
 
-  case 394:
+  case 433:
 
 /* Line 1455 of yacc.c  */
-#line 2191 "vtkParse.y"
-    { typeSig("unsigned long"); (yyval.integer) = VTK_PARSE_UNSIGNED_LONG;}
-    break;
-
-  case 395:
+#line 2634 "vtkParse.y"
+    {
+   currentFunction->Macro = "vtkBooleanMacro";
+   currentFunction->Name = vtkstrcat((yyvsp[(3) - (6)].str), "On");
+   currentFunction->Comment = vtkstrdup(getComment());
+   currentFunction->Signature =
+     vtkstrcat3("void ", currentFunction->Name, "();");
+   set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
+   output_function();
 
-/* Line 1455 of yacc.c  */
-#line 2192 "vtkParse.y"
-    { typeSig("long long"); (yyval.integer) = VTK_PARSE_LONG_LONG;}
+   currentFunction->Macro = "vtkBooleanMacro";
+   currentFunction->Name = vtkstrcat((yyvsp[(3) - (6)].str), "Off");
+   currentFunction->Comment = vtkstrdup(getComment());
+   currentFunction->Signature =
+     vtkstrcat3("void ", currentFunction->Name, "();");
+   set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
+   output_function();
+   }
     break;
 
-  case 396:
+  case 434:
 
 /* Line 1455 of yacc.c  */
-#line 2194 "vtkParse.y"
-    {typeSig("unsigned long long");(yyval.integer)=VTK_PARSE_UNSIGNED_LONG_LONG;}
+#line 2651 "vtkParse.y"
+    {startSig(); markSig();}
     break;
 
-  case 397:
+  case 435:
 
 /* Line 1455 of yacc.c  */
-#line 2195 "vtkParse.y"
-    { typeSig("__int64"); (yyval.integer) = VTK_PARSE___INT64;}
+#line 2652 "vtkParse.y"
+    {
+   chopSig();
+   outputSetVectorMacro((yyvsp[(3) - (7)].str), getType(), copySig(), 2);
+   }
     break;
 
-  case 398:
+  case 436:
 
 /* Line 1455 of yacc.c  */
-#line 2197 "vtkParse.y"
-    { typeSig("unsigned __int64"); (yyval.integer) = VTK_PARSE_UNSIGNED___INT64;}
+#line 2656 "vtkParse.y"
+    {startSig(); markSig();}
     break;
 
-  case 399:
+  case 437:
 
 /* Line 1455 of yacc.c  */
-#line 2198 "vtkParse.y"
-    { typeSig("int"); (yyval.integer) = VTK_PARSE_INT; }
+#line 2657 "vtkParse.y"
+    {
+   chopSig();
+   outputGetVectorMacro((yyvsp[(3) - (7)].str), getType(), copySig(), 2);
+   }
     break;
 
-  case 400:
+  case 438:
 
 /* Line 1455 of yacc.c  */
-#line 2199 "vtkParse.y"
-    { typeSig("unsigned int"); (yyval.integer) = VTK_PARSE_UNSIGNED_INT; }
+#line 2661 "vtkParse.y"
+    {startSig(); markSig();}
     break;
 
-  case 401:
+  case 439:
 
 /* Line 1455 of yacc.c  */
-#line 2205 "vtkParse.y"
-    { (yyval.str) = (yyvsp[(1) - (1)].str); }
+#line 2662 "vtkParse.y"
+    {
+   chopSig();
+   outputSetVectorMacro((yyvsp[(3) - (7)].str), getType(), copySig(), 3);
+   }
     break;
 
-  case 402:
+  case 440:
 
 /* Line 1455 of yacc.c  */
-#line 2206 "vtkParse.y"
-    { postSig("{ "); }
+#line 2666 "vtkParse.y"
+    {startSig(); markSig();}
     break;
 
-  case 403:
+  case 441:
 
 /* Line 1455 of yacc.c  */
-#line 2207 "vtkParse.y"
+#line 2667 "vtkParse.y"
     {
-          postSig("}");
-          (yyval.str) = vtkstrcat4("{ ", (yyvsp[(3) - (6)].str), (yyvsp[(4) - (6)].str), " }");
-        }
-    break;
-
-  case 406:
-
-/* Line 1455 of yacc.c  */
-#line 2214 "vtkParse.y"
-    {(yyval.str) = "";}
+   chopSig();
+   outputGetVectorMacro((yyvsp[(3) - (7)].str), getType(), copySig(), 3);
+   }
     break;
 
-  case 407:
+  case 442:
 
 /* Line 1455 of yacc.c  */
-#line 2215 "vtkParse.y"
-    { postSig(", "); }
+#line 2671 "vtkParse.y"
+    {startSig(); markSig();}
     break;
 
-  case 408:
+  case 443:
 
 /* Line 1455 of yacc.c  */
-#line 2216 "vtkParse.y"
+#line 2672 "vtkParse.y"
     {
-          (yyval.str) = vtkstrcat3((yyvsp[(1) - (4)].str), ", ", (yyvsp[(4) - (4)].str));
-        }
+   chopSig();
+   outputSetVectorMacro((yyvsp[(3) - (7)].str), getType(), copySig(), 4);
+   }
     break;
 
-  case 409:
+  case 444:
 
 /* Line 1455 of yacc.c  */
-#line 2220 "vtkParse.y"
-    {(yyval.str) = (yyvsp[(1) - (1)].str);}
+#line 2676 "vtkParse.y"
+    {startSig(); markSig();}
     break;
 
-  case 410:
+  case 445:
 
 /* Line 1455 of yacc.c  */
-#line 2221 "vtkParse.y"
-    {postSig("+");}
+#line 2677 "vtkParse.y"
+    {
+   chopSig();
+   outputGetVectorMacro((yyvsp[(3) - (7)].str), getType(), copySig(), 4);
+   }
     break;
 
-  case 411:
+  case 446:
 
 /* Line 1455 of yacc.c  */
-#line 2221 "vtkParse.y"
-    {(yyval.str) = (yyvsp[(3) - (3)].str);}
+#line 2681 "vtkParse.y"
+    {startSig(); markSig();}
     break;
 
-  case 412:
+  case 447:
 
 /* Line 1455 of yacc.c  */
-#line 2222 "vtkParse.y"
-    {postSig("-");}
+#line 2682 "vtkParse.y"
+    {
+   chopSig();
+   outputSetVectorMacro((yyvsp[(3) - (7)].str), getType(), copySig(), 6);
+   }
     break;
 
-  case 413:
+  case 448:
 
 /* Line 1455 of yacc.c  */
-#line 2223 "vtkParse.y"
-    {
-             (yyval.str) = vtkstrcat("-", (yyvsp[(3) - (3)].str));
-             }
+#line 2686 "vtkParse.y"
+    {startSig(); markSig();}
     break;
 
-  case 414:
+  case 449:
 
 /* Line 1455 of yacc.c  */
-#line 2226 "vtkParse.y"
-    {(yyval.str) = (yyvsp[(1) - (1)].str); postSig((yyvsp[(1) - (1)].str));}
+#line 2687 "vtkParse.y"
+    {
+   chopSig();
+   outputGetVectorMacro((yyvsp[(3) - (7)].str), getType(), copySig(), 6);
+   }
     break;
 
-  case 415:
+  case 450:
 
 /* Line 1455 of yacc.c  */
-#line 2227 "vtkParse.y"
-    {postSig("(");}
+#line 2691 "vtkParse.y"
+    {startSig(); markSig();}
     break;
 
-  case 416:
+  case 451:
 
 /* Line 1455 of yacc.c  */
-#line 2227 "vtkParse.y"
-    {postSig(")"); (yyval.str) = (yyvsp[(3) - (4)].str);}
+#line 2693 "vtkParse.y"
+    {
+   const char *typeText;
+   chopSig();
+   typeText = copySig();
+   currentFunction->Macro = "vtkSetVectorMacro";
+   currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (9)].str));
+   currentFunction->Signature =
+     vtkstrcat7("void ", currentFunction->Name, "(", typeText,
+                " a[", (yyvsp[(8) - (9)].str), "]);");
+   currentFunction->Comment = vtkstrdup(getComment());
+   add_parameter(currentFunction, (VTK_PARSE_POINTER | getType()),
+                 getTypeId(), (int)strtol((yyvsp[(8) - (9)].str), NULL, 0));
+   set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
+   output_function();
+   }
     break;
 
-  case 417:
+  case 452:
 
 /* Line 1455 of yacc.c  */
-#line 2228 "vtkParse.y"
-    {postSig((yyvsp[(1) - (2)].str)); postSig("<");}
+#line 2708 "vtkParse.y"
+    {startSig();}
     break;
 
-  case 418:
+  case 453:
 
 /* Line 1455 of yacc.c  */
-#line 2230 "vtkParse.y"
+#line 2710 "vtkParse.y"
     {
-             chopSig();
-             if (getSig()[strlen(getSig())-1] == '>') { postSig(" "); }
-             postSig(">(");
-             }
+   chopSig();
+   currentFunction->Macro = "vtkGetVectorMacro";
+   currentFunction->Name = vtkstrcat("Get", (yyvsp[(3) - (9)].str));
+   postSig(" *");
+   postSig(currentFunction->Name);
+   postSig("();");
+   currentFunction->Comment = vtkstrdup(getComment());
+   set_return(currentFunction, (VTK_PARSE_POINTER | getType()),
+              getTypeId(), (int)strtol((yyvsp[(8) - (9)].str), NULL, 0));
+   output_function();
+   }
     break;
 
-  case 419:
+  case 454:
 
 /* Line 1455 of yacc.c  */
-#line 2236 "vtkParse.y"
+#line 2723 "vtkParse.y"
     {
-             postSig(")");
-             if (getTypeId()[strlen(getTypeId())-1] == '>')
-               {
-               (yyval.str) = vtkstrcat6(
-                 (yyvsp[(1) - (9)].str), "<", getTypeId(), " >(", (yyvsp[(8) - (9)].str), ")");
-               }
-             else
-               {
-               (yyval.str) = vtkstrcat6(
-                 (yyvsp[(1) - (9)].str), "<", getTypeId(), ">(", (yyvsp[(8) - (9)].str), ")");
-               }
-             }
-    break;
+     currentFunction->Macro = "vtkViewportCoordinateMacro";
+     currentFunction->Name = vtkstrcat3("Get", (yyvsp[(3) - (4)].str), "Coordinate");
+     currentFunction->Signature =
+       vtkstrcat3("vtkCoordinate *", currentFunction->Name, "();");
+     currentFunction->Comment = vtkstrdup(getComment());
+     set_return(currentFunction, VTK_PARSE_OBJECT_PTR, "vtkCoordinate", 0);
+     output_function();
 
-  case 420:
+     currentFunction->Macro = "vtkViewportCoordinateMacro";
+     currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (4)].str));
+     currentFunction->Signature =
+       vtkstrcat3("void ", currentFunction->Name, "(double, double);");
+     currentFunction->Comment = vtkstrdup(getComment());
+     add_parameter(currentFunction, VTK_PARSE_DOUBLE, "double", 0);
+     add_parameter(currentFunction, VTK_PARSE_DOUBLE, "double", 0);
+     set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
+     output_function();
 
-/* Line 1455 of yacc.c  */
-#line 2250 "vtkParse.y"
-    { (yyval.str) = "static_cast"; }
+     currentFunction->Macro = "vtkViewportCoordinateMacro";
+     currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (4)].str));
+     currentFunction->Signature =
+       vtkstrcat3("void ", currentFunction->Name, "(double a[2]);");
+     currentFunction->Comment = vtkstrdup(getComment());
+     add_parameter(currentFunction, VTK_PARSE_DOUBLE_PTR, "double", 2);
+     set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
+     output_function();
+
+     currentFunction->Macro = "vtkViewportCoordinateMacro";
+     currentFunction->Name = vtkstrcat("Get", (yyvsp[(3) - (4)].str));
+     currentFunction->Signature =
+       vtkstrcat3("double *", currentFunction->Name, "();");
+     currentFunction->Comment = vtkstrdup(getComment());
+     set_return(currentFunction, VTK_PARSE_DOUBLE_PTR, "double", 2);
+     output_function();
+   }
     break;
 
-  case 421:
+  case 455:
 
 /* Line 1455 of yacc.c  */
-#line 2251 "vtkParse.y"
-    { (yyval.str) = "const_cast"; }
+#line 2760 "vtkParse.y"
+    {
+     currentFunction->Macro = "vtkWorldCoordinateMacro";
+     currentFunction->Name = vtkstrcat3("Get", (yyvsp[(3) - (4)].str), "Coordinate");
+     currentFunction->Signature =
+       vtkstrcat3("vtkCoordinate *", currentFunction->Name, "();");
+     currentFunction->Comment = vtkstrdup(getComment());
+     set_return(currentFunction, VTK_PARSE_OBJECT_PTR, "vtkCoordinate", 0);
+     output_function();
+
+     currentFunction->Macro = "vtkWorldCoordinateMacro";
+     currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (4)].str));
+     currentFunction->Signature =
+       vtkstrcat3("void ", currentFunction->Name, "(double, double, double);");
+     currentFunction->Comment = vtkstrdup(getComment());
+     add_parameter(currentFunction, VTK_PARSE_DOUBLE, "double", 0);
+     add_parameter(currentFunction, VTK_PARSE_DOUBLE, "double", 0);
+     add_parameter(currentFunction, VTK_PARSE_DOUBLE, "double", 0);
+     set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
+     output_function();
+
+     currentFunction->Macro = "vtkWorldCoordinateMacro";
+     currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (4)].str));
+     currentFunction->Signature =
+       vtkstrcat3("void ", currentFunction->Name, "(double a[3]);");
+     currentFunction->Comment = vtkstrdup(getComment());
+     add_parameter(currentFunction, VTK_PARSE_DOUBLE_PTR, "double", 3);
+     set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
+     output_function();
+
+     currentFunction->Macro = "vtkWorldCoordinateMacro";
+     currentFunction->Name = vtkstrcat("Get", (yyvsp[(3) - (4)].str));
+     currentFunction->Signature =
+       vtkstrcat3("double *", currentFunction->Name, "();");
+     currentFunction->Comment = vtkstrdup(getComment());
+     set_return(currentFunction, VTK_PARSE_DOUBLE_PTR, "double", 3);
+     output_function();
+   }
     break;
 
-  case 422:
+  case 456:
 
 /* Line 1455 of yacc.c  */
-#line 2252 "vtkParse.y"
-    { (yyval.str) = "dynamic_cast"; }
+#line 2798 "vtkParse.y"
+    {
+   currentFunction->Macro = "vtkTypeMacro";
+   currentFunction->Name = "GetClassName";
+   currentFunction->Signature = "const char *GetClassName();";
+   currentFunction->Comment = vtkstrdup(getComment());
+   set_return(currentFunction, (VTK_PARSE_CONST | VTK_PARSE_CHAR_PTR),
+              "char", 0);
+   output_function();
+
+   currentFunction->Macro = "vtkTypeMacro";
+   currentFunction->Name = "IsA";
+   currentFunction->Signature = "int IsA(const char *name);";
+   currentFunction->Comment = vtkstrdup(getComment());
+   add_parameter(currentFunction, (VTK_PARSE_CONST | VTK_PARSE_CHAR_PTR),
+                "char", 0);
+   set_return(currentFunction, VTK_PARSE_INT, "int", 0);
+   output_function();
+
+   currentFunction->Macro = "vtkTypeMacro";
+   currentFunction->Name = "NewInstance";
+   currentFunction->Signature = vtkstrcat((yyvsp[(3) - (7)].str), " *NewInstance();");
+   currentFunction->Comment = vtkstrdup(getComment());
+   set_return(currentFunction, VTK_PARSE_OBJECT_PTR, (yyvsp[(3) - (7)].str), 0);
+   output_function();
+
+   currentFunction->Macro = "vtkTypeMacro";
+   currentFunction->Name = "SafeDownCast";
+   currentFunction->Signature =
+     vtkstrcat((yyvsp[(3) - (7)].str), " *SafeDownCast(vtkObject* o);");
+   currentFunction->Comment = vtkstrdup(getComment());
+   add_parameter(currentFunction, VTK_PARSE_OBJECT_PTR, "vtkObject", 0);
+   set_return(currentFunction, (VTK_PARSE_STATIC | VTK_PARSE_OBJECT_PTR),
+              (yyvsp[(3) - (7)].str), 0);
+   output_function();
+   }
     break;
 
-  case 423:
+  case 459:
 
 /* Line 1455 of yacc.c  */
-#line 2253 "vtkParse.y"
-    { (yyval.str) = "reinterpret_cast"; }
+#line 2842 "vtkParse.y"
+    { (yyval.str) = "()"; }
     break;
 
-  case 424:
+  case 460:
 
 /* Line 1455 of yacc.c  */
-#line 2255 "vtkParse.y"
-    {(yyval.str) = (yyvsp[(1) - (1)].str);}
+#line 2843 "vtkParse.y"
+    { (yyval.str) = "[]"; }
     break;
 
-  case 425:
+  case 461:
 
 /* Line 1455 of yacc.c  */
-#line 2257 "vtkParse.y"
-    { (yyval.str) = vtkstrcat((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)); }
+#line 2844 "vtkParse.y"
+    { (yyval.str) = " new[]"; }
     break;
 
-  case 426:
+  case 462:
 
 /* Line 1455 of yacc.c  */
-#line 2259 "vtkParse.y"
-    {(yyval.str) = (yyvsp[(1) - (1)].str); postSig((yyvsp[(1) - (1)].str));}
+#line 2845 "vtkParse.y"
+    { (yyval.str) = " delete[]"; }
     break;
 
-  case 427:
+  case 463:
 
 /* Line 1455 of yacc.c  */
-#line 2260 "vtkParse.y"
-    {(yyval.str) = (yyvsp[(1) - (1)].str); postSig((yyvsp[(1) - (1)].str));}
+#line 2846 "vtkParse.y"
+    { (yyval.str) = "<"; }
     break;
 
-  case 428:
+  case 464:
 
 /* Line 1455 of yacc.c  */
-#line 2261 "vtkParse.y"
-    {(yyval.str) = (yyvsp[(1) - (1)].str); postSig((yyvsp[(1) - (1)].str));}
+#line 2847 "vtkParse.y"
+    { (yyval.str) = ">"; }
     break;
 
-  case 429:
+  case 465:
 
 /* Line 1455 of yacc.c  */
-#line 2262 "vtkParse.y"
-    {(yyval.str) = (yyvsp[(1) - (1)].str); postSig((yyvsp[(1) - (1)].str));}
+#line 2848 "vtkParse.y"
+    { (yyval.str) = ","; }
     break;
 
-  case 430:
+  case 466:
 
 /* Line 1455 of yacc.c  */
-#line 2263 "vtkParse.y"
-    {(yyval.str) = (yyvsp[(1) - (1)].str); postSig((yyvsp[(1) - (1)].str));}
+#line 2849 "vtkParse.y"
+    { (yyval.str) = "="; }
     break;
 
-  case 431:
+  case 468:
 
 /* Line 1455 of yacc.c  */
-#line 2264 "vtkParse.y"
-    {(yyval.str) = (yyvsp[(1) - (1)].str); postSig((yyvsp[(1) - (1)].str));}
+#line 2853 "vtkParse.y"
+    { (yyval.str) = "%"; }
     break;
 
-  case 432:
+  case 469:
 
 /* Line 1455 of yacc.c  */
-#line 2266 "vtkParse.y"
-    { (yyval.str) = vtkstrdup(add_const_scope((yyvsp[(1) - (1)].str))); }
+#line 2854 "vtkParse.y"
+    { (yyval.str) = "*"; }
     break;
 
-  case 433:
+  case 470:
 
 /* Line 1455 of yacc.c  */
-#line 2275 "vtkParse.y"
-    {preSig("void Set"); postSig("(");}
+#line 2855 "vtkParse.y"
+    { (yyval.str) = "/"; }
     break;
 
-  case 434:
+  case 471:
 
 /* Line 1455 of yacc.c  */
-#line 2276 "vtkParse.y"
-    {
-   postSig("a);");
-   currentFunction->Macro = "vtkSetMacro";
-   currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (7)].str));
-   currentFunction->Comment = vtkstrdup(getComment());
-   add_argument(currentFunction, (yyvsp[(6) - (7)].integer), getTypeId(), 0);
-   set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
-   output_function();
-   }
+#line 2856 "vtkParse.y"
+    { (yyval.str) = "-"; }
     break;
 
-  case 435:
+  case 472:
 
 /* Line 1455 of yacc.c  */
-#line 2285 "vtkParse.y"
-    {postSig("Get");}
+#line 2857 "vtkParse.y"
+    { (yyval.str) = "+"; }
     break;
 
-  case 436:
+  case 473:
 
 /* Line 1455 of yacc.c  */
-#line 2286 "vtkParse.y"
-    {markSig();}
+#line 2858 "vtkParse.y"
+    { (yyval.str) = "!"; }
     break;
 
-  case 437:
+  case 474:
 
 /* Line 1455 of yacc.c  */
-#line 2286 "vtkParse.y"
-    {swapSig();}
+#line 2859 "vtkParse.y"
+    { (yyval.str) = "~"; }
     break;
 
-  case 438:
+  case 475:
 
 /* Line 1455 of yacc.c  */
-#line 2287 "vtkParse.y"
-    {
-   postSig("();");
-   currentFunction->Macro = "vtkGetMacro";
-   currentFunction->Name = vtkstrcat("Get", (yyvsp[(4) - (9)].str));
-   currentFunction->Comment = vtkstrdup(getComment());
-   set_return(currentFunction, (yyvsp[(7) - (9)].integer), getTypeId(), 0);
-   output_function();
-   }
+#line 2860 "vtkParse.y"
+    { (yyval.str) = "&"; }
     break;
 
-  case 439:
+  case 476:
 
 /* Line 1455 of yacc.c  */
-#line 2295 "vtkParse.y"
-    {preSig("void Set");}
+#line 2861 "vtkParse.y"
+    { (yyval.str) = "|"; }
     break;
 
-  case 440:
+  case 477:
 
 /* Line 1455 of yacc.c  */
-#line 2296 "vtkParse.y"
-    {
-   postSig("(char *);");
-   currentFunction->Macro = "vtkSetStringMacro";
-   currentFunction->Name = vtkstrcat("Set", (yyvsp[(4) - (5)].str));
-   currentFunction->Comment = vtkstrdup(getComment());
-   add_argument(currentFunction, VTK_PARSE_CHAR_PTR, "char", 0);
-   set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
-   output_function();
-   }
+#line 2862 "vtkParse.y"
+    { (yyval.str) = "^"; }
     break;
 
-  case 441:
+  case 478:
 
 /* Line 1455 of yacc.c  */
-#line 2305 "vtkParse.y"
-    {preSig("char *Get");}
+#line 2863 "vtkParse.y"
+    { (yyval.str) = " new"; }
     break;
 
-  case 442:
+  case 479:
 
 /* Line 1455 of yacc.c  */
-#line 2306 "vtkParse.y"
-    {
-   postSig("();");
-   currentFunction->Macro = "vtkGetStringMacro";
-   currentFunction->Name = vtkstrcat("Get", (yyvsp[(4) - (5)].str));
-   currentFunction->Comment = vtkstrdup(getComment());
-   set_return(currentFunction, VTK_PARSE_CHAR_PTR, "char", 0);
-   output_function();
-   }
+#line 2864 "vtkParse.y"
+    { (yyval.str) = " delete"; }
     break;
 
-  case 443:
+  case 480:
 
 /* Line 1455 of yacc.c  */
-#line 2314 "vtkParse.y"
-    {startSig(); markSig();}
+#line 2865 "vtkParse.y"
+    { (yyval.str) = "<<="; }
     break;
 
-  case 444:
+  case 481:
 
 /* Line 1455 of yacc.c  */
-#line 2314 "vtkParse.y"
-    {closeSig();}
+#line 2866 "vtkParse.y"
+    { (yyval.str) = ">>="; }
     break;
 
-  case 445:
+  case 482:
 
 /* Line 1455 of yacc.c  */
-#line 2316 "vtkParse.y"
-    {
-   const char *typeText;
-   chopSig();
-   typeText = copySig();
-
-   currentFunction->Macro = "vtkSetClampMacro";
-   currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (10)].str));
-   currentFunction->Signature =
-     vtkstrcat5("void ", currentFunction->Name, "(", typeText, ");");
-   currentFunction->Comment = vtkstrdup(getComment());
-   add_argument(currentFunction, (yyvsp[(6) - (10)].integer), getTypeId(), 0);
-   set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
-   output_function();
+#line 2867 "vtkParse.y"
+    { (yyval.str) = "<<"; }
+    break;
 
-   currentFunction->Macro = "vtkSetClampMacro";
-   currentFunction->Name = vtkstrcat3("Get", (yyvsp[(3) - (10)].str), "MinValue");
-   currentFunction->Signature =
-     vtkstrcat4(typeText, " ", currentFunction->Name, "();");
-   currentFunction->Comment = vtkstrdup(getComment());
-   set_return(currentFunction, (yyvsp[(6) - (10)].integer), getTypeId(), 0);
-   output_function();
+  case 483:
 
-   currentFunction->Macro = "vtkSetClampMacro";
-   currentFunction->Name = vtkstrcat3("Get", (yyvsp[(3) - (10)].str), "MaxValue");
-   currentFunction->Signature =
-     vtkstrcat4(typeText, " ", currentFunction->Name, "();");
-   currentFunction->Comment = vtkstrdup(getComment());
-   set_return(currentFunction, (yyvsp[(6) - (10)].integer), getTypeId(), 0);
-   output_function();
-   }
+/* Line 1455 of yacc.c  */
+#line 2868 "vtkParse.y"
+    { (yyval.str) = ">>"; }
     break;
 
-  case 446:
+  case 484:
 
 /* Line 1455 of yacc.c  */
-#line 2347 "vtkParse.y"
-    {preSig("void Set"); postSig("("); }
+#line 2869 "vtkParse.y"
+    { (yyval.str) = ".*"; }
     break;
 
-  case 447:
+  case 485:
 
 /* Line 1455 of yacc.c  */
-#line 2348 "vtkParse.y"
-    {
-   postSig("*);");
-   currentFunction->Macro = "vtkSetObjectMacro";
-   currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (7)].str));
-   currentFunction->Comment = vtkstrdup(getComment());
-   add_argument(currentFunction, VTK_PARSE_OBJECT_PTR, getTypeId(), 0);
-   set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
-   output_function();
-   }
+#line 2870 "vtkParse.y"
+    { (yyval.str) = "->*"; }
     break;
 
-  case 448:
+  case 486:
 
 /* Line 1455 of yacc.c  */
-#line 2357 "vtkParse.y"
-    {postSig("*Get");}
+#line 2871 "vtkParse.y"
+    { (yyval.str) = "->"; }
     break;
 
-  case 449:
+  case 487:
 
 /* Line 1455 of yacc.c  */
-#line 2358 "vtkParse.y"
-    {markSig();}
+#line 2872 "vtkParse.y"
+    { (yyval.str) = "+="; }
     break;
 
-  case 450:
+  case 488:
 
 /* Line 1455 of yacc.c  */
-#line 2358 "vtkParse.y"
-    {swapSig();}
+#line 2873 "vtkParse.y"
+    { (yyval.str) = "-="; }
     break;
 
-  case 451:
+  case 489:
 
 /* Line 1455 of yacc.c  */
-#line 2359 "vtkParse.y"
-    {
-   postSig("();");
-   currentFunction->Macro = "vtkGetObjectMacro";
-   currentFunction->Name = vtkstrcat("Get", (yyvsp[(4) - (9)].str));
-   currentFunction->Comment = vtkstrdup(getComment());
-   set_return(currentFunction, VTK_PARSE_OBJECT_PTR, getTypeId(), 0);
-   output_function();
-   }
+#line 2874 "vtkParse.y"
+    { (yyval.str) = "*="; }
     break;
 
-  case 452:
+  case 490:
 
 /* Line 1455 of yacc.c  */
-#line 2368 "vtkParse.y"
-    {
-   currentFunction->Macro = "vtkBooleanMacro";
-   currentFunction->Name = vtkstrcat((yyvsp[(3) - (6)].str), "On");
-   currentFunction->Comment = vtkstrdup(getComment());
-   currentFunction->Signature =
-     vtkstrcat3("void ", currentFunction->Name, "();");
-   set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
-   output_function();
-
-   currentFunction->Macro = "vtkBooleanMacro";
-   currentFunction->Name = vtkstrcat((yyvsp[(3) - (6)].str), "Off");
-   currentFunction->Comment = vtkstrdup(getComment());
-   currentFunction->Signature =
-     vtkstrcat3("void ", currentFunction->Name, "();");
-   set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
-   output_function();
-   }
+#line 2875 "vtkParse.y"
+    { (yyval.str) = "/="; }
     break;
 
-  case 453:
+  case 491:
 
 /* Line 1455 of yacc.c  */
-#line 2385 "vtkParse.y"
-    {startSig(); markSig();}
+#line 2876 "vtkParse.y"
+    { (yyval.str) = "%="; }
     break;
 
-  case 454:
+  case 492:
 
 /* Line 1455 of yacc.c  */
-#line 2386 "vtkParse.y"
-    {
-   chopSig();
-   outputSetVectorMacro((yyvsp[(3) - (7)].str), (yyvsp[(6) - (7)].integer), copySig(), 2);
-   }
+#line 2877 "vtkParse.y"
+    { (yyval.str) = "++"; }
     break;
 
-  case 455:
+  case 493:
 
 /* Line 1455 of yacc.c  */
-#line 2390 "vtkParse.y"
-    {startSig(); markSig();}
+#line 2878 "vtkParse.y"
+    { (yyval.str) = "--"; }
     break;
 
-  case 456:
+  case 494:
 
 /* Line 1455 of yacc.c  */
-#line 2391 "vtkParse.y"
-    {
-   chopSig();
-   outputGetVectorMacro((yyvsp[(3) - (7)].str), (yyvsp[(6) - (7)].integer), copySig(), 2);
-   }
+#line 2879 "vtkParse.y"
+    { (yyval.str) = "&="; }
     break;
 
-  case 457:
+  case 495:
 
 /* Line 1455 of yacc.c  */
-#line 2395 "vtkParse.y"
-    {startSig(); markSig();}
+#line 2880 "vtkParse.y"
+    { (yyval.str) = "|="; }
     break;
 
-  case 458:
+  case 496:
 
 /* Line 1455 of yacc.c  */
-#line 2396 "vtkParse.y"
-    {
-   chopSig();
-   outputSetVectorMacro((yyvsp[(3) - (7)].str), (yyvsp[(6) - (7)].integer), copySig(), 3);
-   }
+#line 2881 "vtkParse.y"
+    { (yyval.str) = "^="; }
     break;
 
-  case 459:
+  case 497:
 
 /* Line 1455 of yacc.c  */
-#line 2400 "vtkParse.y"
-    {startSig(); markSig();}
+#line 2882 "vtkParse.y"
+    { (yyval.str) = "&&"; }
     break;
 
-  case 460:
+  case 498:
 
 /* Line 1455 of yacc.c  */
-#line 2401 "vtkParse.y"
-    {
-   chopSig();
-   outputGetVectorMacro((yyvsp[(3) - (7)].str), (yyvsp[(6) - (7)].integer), copySig(), 3);
-   }
+#line 2883 "vtkParse.y"
+    { (yyval.str) = "||"; }
     break;
 
-  case 461:
+  case 499:
 
 /* Line 1455 of yacc.c  */
-#line 2405 "vtkParse.y"
-    {startSig(); markSig();}
+#line 2884 "vtkParse.y"
+    { (yyval.str) = "=="; }
     break;
 
-  case 462:
+  case 500:
 
 /* Line 1455 of yacc.c  */
-#line 2406 "vtkParse.y"
-    {
-   chopSig();
-   outputSetVectorMacro((yyvsp[(3) - (7)].str), (yyvsp[(6) - (7)].integer), copySig(), 4);
-   }
+#line 2885 "vtkParse.y"
+    { (yyval.str) = "!="; }
     break;
 
-  case 463:
+  case 501:
 
 /* Line 1455 of yacc.c  */
-#line 2410 "vtkParse.y"
-    {startSig(); markSig();}
+#line 2886 "vtkParse.y"
+    { (yyval.str) = "<="; }
     break;
 
-  case 464:
+  case 502:
 
 /* Line 1455 of yacc.c  */
-#line 2411 "vtkParse.y"
-    {
-   chopSig();
-   outputGetVectorMacro((yyvsp[(3) - (7)].str), (yyvsp[(6) - (7)].integer), copySig(), 4);
-   }
+#line 2887 "vtkParse.y"
+    { (yyval.str) = ">="; }
     break;
 
-  case 465:
+  case 503:
 
 /* Line 1455 of yacc.c  */
-#line 2415 "vtkParse.y"
-    {startSig(); markSig();}
+#line 2890 "vtkParse.y"
+    { (yyval.str) = "typedef"; }
     break;
 
-  case 466:
+  case 504:
 
 /* Line 1455 of yacc.c  */
-#line 2416 "vtkParse.y"
-    {
-   chopSig();
-   outputSetVectorMacro((yyvsp[(3) - (7)].str), (yyvsp[(6) - (7)].integer), copySig(), 6);
-   }
+#line 2891 "vtkParse.y"
+    { (yyval.str) = "typename"; }
     break;
 
-  case 467:
+  case 505:
 
 /* Line 1455 of yacc.c  */
-#line 2420 "vtkParse.y"
-    {startSig(); markSig();}
+#line 2892 "vtkParse.y"
+    { (yyval.str) = "class"; }
     break;
 
-  case 468:
+  case 506:
 
 /* Line 1455 of yacc.c  */
-#line 2421 "vtkParse.y"
-    {
-   chopSig();
-   outputGetVectorMacro((yyvsp[(3) - (7)].str), (yyvsp[(6) - (7)].integer), copySig(), 6);
-   }
+#line 2893 "vtkParse.y"
+    { (yyval.str) = "struct"; }
     break;
 
-  case 469:
+  case 507:
 
 /* Line 1455 of yacc.c  */
-#line 2425 "vtkParse.y"
-    {startSig(); markSig();}
+#line 2894 "vtkParse.y"
+    { (yyval.str) = "union"; }
     break;
 
-  case 470:
+  case 508:
 
 /* Line 1455 of yacc.c  */
-#line 2427 "vtkParse.y"
-    {
-   const char *typeText;
-   chopSig();
-   typeText = copySig();
-   currentFunction->Macro = "vtkSetVectorMacro";
-   currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (9)].str));
-   currentFunction->Signature =
-     vtkstrcat7("void ", currentFunction->Name, "(", typeText,
-                " a[", (yyvsp[(8) - (9)].str), "]);");
-   currentFunction->Comment = vtkstrdup(getComment());
-   add_argument(currentFunction, (VTK_PARSE_POINTER | (yyvsp[(6) - (9)].integer)),
-                getTypeId(), (int)strtol((yyvsp[(8) - (9)].str), NULL, 0));
-   set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
-   output_function();
-   }
+#line 2895 "vtkParse.y"
+    { (yyval.str) = "template"; }
     break;
 
-  case 471:
+  case 509:
 
 /* Line 1455 of yacc.c  */
-#line 2442 "vtkParse.y"
-    {startSig();}
+#line 2896 "vtkParse.y"
+    { (yyval.str) = "public"; }
     break;
 
-  case 472:
+  case 510:
 
 /* Line 1455 of yacc.c  */
-#line 2444 "vtkParse.y"
-    {
-   chopSig();
-   currentFunction->Macro = "vtkGetVectorMacro";
-   currentFunction->Name = vtkstrcat("Get", (yyvsp[(3) - (9)].str));
-   postSig(" *");
-   postSig(currentFunction->Name);
-   postSig("();");
-   currentFunction->Comment = vtkstrdup(getComment());
-   set_return(currentFunction, (VTK_PARSE_POINTER | (yyvsp[(6) - (9)].integer)),
-              getTypeId(), (int)strtol((yyvsp[(8) - (9)].str), NULL, 0));
-   output_function();
-   }
+#line 2897 "vtkParse.y"
+    { (yyval.str) = "protected"; }
     break;
 
-  case 473:
+  case 511:
 
 /* Line 1455 of yacc.c  */
-#line 2457 "vtkParse.y"
-    {
-     currentFunction->Macro = "vtkViewportCoordinateMacro";
-     currentFunction->Name = vtkstrcat3("Get", (yyvsp[(3) - (4)].str), "Coordinate");
-     currentFunction->Signature =
-       vtkstrcat3("vtkCoordinate *", currentFunction->Name, "();");
-     currentFunction->Comment = vtkstrdup(getComment());
-     set_return(currentFunction, VTK_PARSE_OBJECT_PTR, "vtkCoordinate", 0);
-     output_function();
-
-     currentFunction->Macro = "vtkViewportCoordinateMacro";
-     currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (4)].str));
-     currentFunction->Signature =
-       vtkstrcat3("void ", currentFunction->Name, "(double, double);");
-     currentFunction->Comment = vtkstrdup(getComment());
-     add_argument(currentFunction, VTK_PARSE_DOUBLE, "double", 0);
-     add_argument(currentFunction, VTK_PARSE_DOUBLE, "double", 0);
-     set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
-     output_function();
-
-     currentFunction->Macro = "vtkViewportCoordinateMacro";
-     currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (4)].str));
-     currentFunction->Signature =
-       vtkstrcat3("void ", currentFunction->Name, "(double a[2]);");
-     currentFunction->Comment = vtkstrdup(getComment());
-     add_argument(currentFunction, VTK_PARSE_DOUBLE_PTR, "double", 2);
-     set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
-     output_function();
-
-     currentFunction->Macro = "vtkViewportCoordinateMacro";
-     currentFunction->Name = vtkstrcat("Get", (yyvsp[(3) - (4)].str));
-     currentFunction->Signature =
-       vtkstrcat3("double *", currentFunction->Name, "();");
-     currentFunction->Comment = vtkstrdup(getComment());
-     set_return(currentFunction, VTK_PARSE_DOUBLE_PTR, "double", 2);
-     output_function();
-   }
+#line 2898 "vtkParse.y"
+    { (yyval.str) = "private"; }
     break;
 
-  case 474:
+  case 512:
 
 /* Line 1455 of yacc.c  */
-#line 2494 "vtkParse.y"
-    {
-     currentFunction->Macro = "vtkWorldCoordinateMacro";
-     currentFunction->Name = vtkstrcat3("Get", (yyvsp[(3) - (4)].str), "Coordinate");
-     currentFunction->Signature =
-       vtkstrcat3("vtkCoordinate *", currentFunction->Name, "();");
-     currentFunction->Comment = vtkstrdup(getComment());
-     set_return(currentFunction, VTK_PARSE_OBJECT_PTR, "vtkCoordinate", 0);
-     output_function();
-
-     currentFunction->Macro = "vtkWorldCoordinateMacro";
-     currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (4)].str));
-     currentFunction->Signature =
-       vtkstrcat3("void ", currentFunction->Name, "(double, double, double);");
-     currentFunction->Comment = vtkstrdup(getComment());
-     add_argument(currentFunction, VTK_PARSE_DOUBLE, "double", 0);
-     add_argument(currentFunction, VTK_PARSE_DOUBLE, "double", 0);
-     add_argument(currentFunction, VTK_PARSE_DOUBLE, "double", 0);
-     set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
-     output_function();
-
-     currentFunction->Macro = "vtkWorldCoordinateMacro";
-     currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (4)].str));
-     currentFunction->Signature =
-       vtkstrcat3("void ", currentFunction->Name, "(double a[3]);");
-     currentFunction->Comment = vtkstrdup(getComment());
-     add_argument(currentFunction, VTK_PARSE_DOUBLE_PTR, "double", 3);
-     set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
-     output_function();
-
-     currentFunction->Macro = "vtkWorldCoordinateMacro";
-     currentFunction->Name = vtkstrcat("Get", (yyvsp[(3) - (4)].str));
-     currentFunction->Signature =
-       vtkstrcat3("double *", currentFunction->Name, "();");
-     currentFunction->Comment = vtkstrdup(getComment());
-     set_return(currentFunction, VTK_PARSE_DOUBLE_PTR, "double", 3);
-     output_function();
-   }
+#line 2899 "vtkParse.y"
+    { (yyval.str) = "const"; }
     break;
 
-  case 475:
+  case 513:
 
 /* Line 1455 of yacc.c  */
-#line 2532 "vtkParse.y"
-    {
-   int is_concrete = 0;
-   int i;
-
-   currentFunction->Macro = "vtkTypeMacro";
-   currentFunction->Name = vtkstrdup("GetClassName");
-   currentFunction->Signature = vtkstrdup("const char *GetClassName();");
-   currentFunction->Comment = vtkstrdup(getComment());
-   set_return(currentFunction, (VTK_PARSE_CONST | VTK_PARSE_CHAR_PTR),
-              "char", 0);
-   output_function();
-
-   currentFunction->Macro = "vtkTypeMacro";
-   currentFunction->Name = vtkstrdup("IsA");
-   currentFunction->Signature = vtkstrdup("int IsA(const char *name);");
-   currentFunction->Comment = vtkstrdup(getComment());
-   add_argument(currentFunction, (VTK_PARSE_CONST | VTK_PARSE_CHAR_PTR),
-                "char", 0);
-   set_return(currentFunction, VTK_PARSE_INT, "int", 0);
-   output_function();
+#line 2900 "vtkParse.y"
+    { (yyval.str) = "static"; }
+    break;
 
-   currentFunction->Macro = "vtkTypeMacro";
-   currentFunction->Name = vtkstrdup("NewInstance");
-   currentFunction->Signature = vtkstrcat((yyvsp[(3) - (7)].str), " *NewInstance();");
-   currentFunction->Comment = vtkstrdup(getComment());
-   set_return(currentFunction, VTK_PARSE_OBJECT_PTR, (yyvsp[(3) - (7)].str), 0);
-   output_function();
+  case 514:
 
-   for (i = 0; i < NumberOfConcreteClasses; i++)
-     {
-     if (strcmp(currentClass->Name, ConcreteClasses[i]) == 0)
-       {
-       is_concrete = 1;
-       break;
-       }
-     }
-
-   if ( is_concrete )
-     {
-     currentFunction->Macro = "vtkTypeMacro";
-     currentFunction->Name = vtkstrdup("SafeDownCast");
-     currentFunction->Signature =
-       vtkstrcat((yyvsp[(3) - (7)].str), " *SafeDownCast(vtkObject* o);");
-     currentFunction->Comment = vtkstrdup(getComment());
-     add_argument(currentFunction, VTK_PARSE_OBJECT_PTR, "vtkObject", 0);
-     set_return(currentFunction, (VTK_PARSE_STATIC | VTK_PARSE_OBJECT_PTR),
-                (yyvsp[(3) - (7)].str), 0);
-     output_function();
-     }
-   }
+/* Line 1455 of yacc.c  */
+#line 2901 "vtkParse.y"
+    { (yyval.str) = "inline"; }
     break;
 
-  case 476:
+  case 515:
 
 /* Line 1455 of yacc.c  */
-#line 2588 "vtkParse.y"
-    { (yyval.str) = "operator()"; }
+#line 2902 "vtkParse.y"
+    { (yyval.str) = "virtual"; }
     break;
 
-  case 477:
+  case 516:
 
 /* Line 1455 of yacc.c  */
-#line 2589 "vtkParse.y"
-    { (yyval.str) = "operator[]"; }
+#line 2903 "vtkParse.y"
+    { (yyval.str) = "extern"; }
     break;
 
-  case 478:
+  case 517:
 
 /* Line 1455 of yacc.c  */
-#line 2590 "vtkParse.y"
-    { (yyval.str) = "operator new[]"; }
+#line 2904 "vtkParse.y"
+    { (yyval.str) = "namespace"; }
     break;
 
-  case 479:
+  case 518:
 
 /* Line 1455 of yacc.c  */
-#line 2591 "vtkParse.y"
-    { (yyval.str) = "operator delete[]"; }
+#line 2905 "vtkParse.y"
+    { (yyval.str) = "operator"; }
     break;
 
-  case 481:
+  case 519:
 
 /* Line 1455 of yacc.c  */
-#line 2594 "vtkParse.y"
-    { (yyval.str) = "operator="; }
+#line 2906 "vtkParse.y"
+    { (yyval.str) = "enum"; }
     break;
 
-  case 482:
+  case 520:
 
 /* Line 1455 of yacc.c  */
-#line 2595 "vtkParse.y"
-    { (yyval.str) = "operator*"; }
+#line 2907 "vtkParse.y"
+    { (yyval.str) = "throw"; }
     break;
 
-  case 483:
+  case 521:
 
 /* Line 1455 of yacc.c  */
-#line 2595 "vtkParse.y"
-    { (yyval.str) = "operator/"; }
+#line 2908 "vtkParse.y"
+    { (yyval.str) = "const_cast"; }
     break;
 
-  case 484:
+  case 522:
 
 /* Line 1455 of yacc.c  */
-#line 2596 "vtkParse.y"
-    { (yyval.str) = "operator-"; }
+#line 2909 "vtkParse.y"
+    { (yyval.str) = "dynamic_cast"; }
     break;
 
-  case 485:
+  case 523:
 
 /* Line 1455 of yacc.c  */
-#line 2596 "vtkParse.y"
-    { (yyval.str) = "operator+"; }
+#line 2910 "vtkParse.y"
+    { (yyval.str) = "static_cast"; }
     break;
 
-  case 486:
+  case 524:
 
 /* Line 1455 of yacc.c  */
-#line 2597 "vtkParse.y"
-    { (yyval.str) = "operator!"; }
+#line 2911 "vtkParse.y"
+    { (yyval.str) = "reinterpret_cast"; }
     break;
 
-  case 487:
+  case 537:
 
 /* Line 1455 of yacc.c  */
-#line 2597 "vtkParse.y"
-    { (yyval.str) = "operator~"; }
+#line 2935 "vtkParse.y"
+    {
+      if ((((yyvsp[(1) - (1)].str))[0] == '+' || ((yyvsp[(1) - (1)].str))[0] == '-' ||
+           ((yyvsp[(1) - (1)].str))[0] == '*' || ((yyvsp[(1) - (1)].str))[0] == '&') &&
+          ((yyvsp[(1) - (1)].str))[1] == '\0')
+        {
+        int c1 = 0;
+        size_t l;
+        const char *cp;
+        chopSig();
+        cp = getSig();
+        l = getSigLength();
+        if (l != 0) { c1 = cp[l-1]; }
+        if (c1 != 0 && c1 != '(' && c1 != '[' && c1 != '=')
+          {
+          postSig(" ");
+          }
+        postSig((yyvsp[(1) - (1)].str));
+        if ((c1 >= 'A' && c1 <= 'Z') || (c1 >= 'a' && c1 <= 'z') ||
+            (c1 >= '0' && c1 <= '9') || c1 == '_' || c1 == '\'' ||
+            c1 == '\"' || c1 == ')' || c1 == ']')
+          {
+          postSig(" ");
+          }
+        }
+       else
+        {
+        postSig((yyvsp[(1) - (1)].str));
+        postSig(" ");
+        }
+    }
     break;
 
-  case 488:
+  case 538:
 
 /* Line 1455 of yacc.c  */
-#line 2598 "vtkParse.y"
-    { (yyval.str) = "operator,"; }
+#line 2965 "vtkParse.y"
+    { postSig(":"); postSig(" "); }
     break;
 
-  case 489:
+  case 539:
 
 /* Line 1455 of yacc.c  */
-#line 2598 "vtkParse.y"
-    { (yyval.str) = "operator<"; }
+#line 2965 "vtkParse.y"
+    { postSig("."); }
     break;
 
-  case 490:
+  case 540:
 
 /* Line 1455 of yacc.c  */
-#line 2599 "vtkParse.y"
-    { (yyval.str) = "operator>"; }
+#line 2966 "vtkParse.y"
+    { chopSig(); postSig("::"); }
     break;
 
-  case 491:
+  case 541:
 
 /* Line 1455 of yacc.c  */
-#line 2599 "vtkParse.y"
-    { (yyval.str) = "operator&"; }
+#line 2967 "vtkParse.y"
+    { postSig((yyvsp[(1) - (1)].str)); postSig(" "); }
     break;
 
-  case 492:
+  case 542:
 
 /* Line 1455 of yacc.c  */
-#line 2600 "vtkParse.y"
-    { (yyval.str) = "operator|"; }
+#line 2968 "vtkParse.y"
+    { postSig((yyvsp[(1) - (1)].str)); postSig(" "); }
     break;
 
-  case 493:
+  case 544:
 
 /* Line 1455 of yacc.c  */
-#line 2600 "vtkParse.y"
-    { (yyval.str) = "operator^"; }
+#line 2971 "vtkParse.y"
+    {
+      int c1 = 0;
+      size_t l;
+      const char *cp;
+      chopSig();
+      cp = getSig();
+      l = getSigLength();
+      if (l != 0) { c1 = cp[l-1]; }
+      while (((c1 >= 'A' && c1 <= 'Z') || (c1 >= 'a' && c1 <= 'z') ||
+              (c1 >= '0' && c1 <= '9') || c1 == '_') && l != 0)
+        {
+        --l;
+        c1 = cp[l-1];
+        }
+      if (l < 2 || cp[l-1] != ':' || cp[l-2] != ':')
+        {
+        cp = add_const_scope(&cp[l]);
+        resetSig(l);
+        postSig(cp);
+        }
+    }
     break;
 
-  case 494:
+  case 548:
 
 /* Line 1455 of yacc.c  */
-#line 2601 "vtkParse.y"
-    { (yyval.str) = "operator%"; }
+#line 2997 "vtkParse.y"
+    { postSig("< "); }
     break;
 
-  case 495:
+  case 549:
 
 /* Line 1455 of yacc.c  */
-#line 2602 "vtkParse.y"
-    { (yyval.str) = "operator new"; }
+#line 2998 "vtkParse.y"
+    { postSig("> "); }
     break;
 
-  case 496:
+  case 551:
 
 /* Line 1455 of yacc.c  */
-#line 2603 "vtkParse.y"
-    { (yyval.str) = "operator delete"; }
+#line 3001 "vtkParse.y"
+    { postSig("= "); }
     break;
 
-  case 497:
+  case 552:
 
 /* Line 1455 of yacc.c  */
-#line 2604 "vtkParse.y"
-    { (yyval.str) = "operator<<="; }
+#line 3002 "vtkParse.y"
+    { chopSig(); postSig(", "); }
     break;
 
-  case 498:
+  case 554:
 
 /* Line 1455 of yacc.c  */
-#line 2605 "vtkParse.y"
-    { (yyval.str) = "operator>>="; }
+#line 3005 "vtkParse.y"
+    { chopSig(); postSig(";"); }
     break;
 
-  case 499:
+  case 562:
 
 /* Line 1455 of yacc.c  */
-#line 2606 "vtkParse.y"
-    { (yyval.str) = "operator<<"; }
+#line 3019 "vtkParse.y"
+    { postSig("= "); }
     break;
 
-  case 500:
+  case 563:
 
 /* Line 1455 of yacc.c  */
-#line 2607 "vtkParse.y"
-    { (yyval.str) = "operator>>"; }
+#line 3020 "vtkParse.y"
+    { chopSig(); postSig(", "); }
     break;
 
-  case 501:
+  case 564:
 
 /* Line 1455 of yacc.c  */
-#line 2608 "vtkParse.y"
-    { (yyval.str) = "operator->*"; }
+#line 3024 "vtkParse.y"
+    {
+      chopSig();
+      if (getSig()[getSigLength()-1] == '<') { postSig(" "); }
+      postSig("<");
+    }
     break;
 
-  case 502:
+  case 565:
 
 /* Line 1455 of yacc.c  */
-#line 2609 "vtkParse.y"
-    { (yyval.str) = "operator->"; }
+#line 3030 "vtkParse.y"
+    {
+      chopSig();
+      if (getSig()[getSigLength()-1] == '>') { postSig(" "); }
+      postSig("> ");
+    }
     break;
 
-  case 503:
+  case 566:
 
 /* Line 1455 of yacc.c  */
-#line 2610 "vtkParse.y"
-    { (yyval.str) = "operator+="; }
+#line 3037 "vtkParse.y"
+    { postSig("["); }
     break;
 
-  case 504:
+  case 567:
 
 /* Line 1455 of yacc.c  */
-#line 2611 "vtkParse.y"
-    { (yyval.str) = "operator-="; }
+#line 3038 "vtkParse.y"
+    { chopSig(); postSig("] "); }
     break;
 
-  case 505:
+  case 568:
 
 /* Line 1455 of yacc.c  */
-#line 2612 "vtkParse.y"
-    { (yyval.str) = "operator*="; }
+#line 3041 "vtkParse.y"
+    { postSig("("); }
     break;
 
-  case 506:
+  case 569:
 
 /* Line 1455 of yacc.c  */
-#line 2613 "vtkParse.y"
-    { (yyval.str) = "operator/="; }
+#line 3042 "vtkParse.y"
+    { chopSig(); postSig(") "); }
     break;
 
-  case 507:
+  case 570:
 
 /* Line 1455 of yacc.c  */
-#line 2614 "vtkParse.y"
-    { (yyval.str) = "operator%="; }
+#line 3043 "vtkParse.y"
+    { postSig("("); postSig((yyvsp[(1) - (1)].str)); postSig("*"); }
     break;
 
-  case 508:
+  case 571:
 
 /* Line 1455 of yacc.c  */
-#line 2615 "vtkParse.y"
-    { (yyval.str) = "operator++"; }
+#line 3044 "vtkParse.y"
+    { chopSig(); postSig(") "); }
     break;
 
-  case 509:
+  case 572:
 
 /* Line 1455 of yacc.c  */
-#line 2616 "vtkParse.y"
-    { (yyval.str) = "operator--"; }
+#line 3045 "vtkParse.y"
+    { postSig("("); postSig((yyvsp[(1) - (1)].str)); postSig("&"); }
     break;
 
-  case 510:
+  case 573:
 
 /* Line 1455 of yacc.c  */
-#line 2617 "vtkParse.y"
-    { (yyval.str) = "operator&="; }
+#line 3046 "vtkParse.y"
+    { chopSig(); postSig(") "); }
     break;
 
-  case 511:
+  case 574:
 
 /* Line 1455 of yacc.c  */
-#line 2618 "vtkParse.y"
-    { (yyval.str) = "operator|="; }
+#line 3049 "vtkParse.y"
+    { postSig("{ "); }
     break;
 
-  case 512:
+  case 575:
 
 /* Line 1455 of yacc.c  */
-#line 2619 "vtkParse.y"
-    { (yyval.str) = "operator^="; }
+#line 3049 "vtkParse.y"
+    { postSig("} "); }
     break;
 
-  case 513:
 
-/* Line 1455 of yacc.c  */
-#line 2620 "vtkParse.y"
-    {(yyval.str) = "operator&&=";}
-    break;
-
-  case 514:
 
 /* Line 1455 of yacc.c  */
-#line 2621 "vtkParse.y"
-    {(yyval.str) = "operator||=";}
-    break;
-
-  case 515:
-
-/* Line 1455 of yacc.c  */
-#line 2622 "vtkParse.y"
-    { (yyval.str) = "operator&&"; }
-    break;
-
-  case 516:
-
-/* Line 1455 of yacc.c  */
-#line 2623 "vtkParse.y"
-    { (yyval.str) = "operator||"; }
-    break;
-
-  case 517:
-
-/* Line 1455 of yacc.c  */
-#line 2624 "vtkParse.y"
-    { (yyval.str) = "operator=="; }
-    break;
-
-  case 518:
-
-/* Line 1455 of yacc.c  */
-#line 2625 "vtkParse.y"
-    { (yyval.str) = "operator!="; }
-    break;
-
-  case 519:
-
-/* Line 1455 of yacc.c  */
-#line 2626 "vtkParse.y"
-    { (yyval.str) = "operator<="; }
-    break;
-
-  case 520:
-
-/* Line 1455 of yacc.c  */
-#line 2627 "vtkParse.y"
-    { (yyval.str) = "operator>="; }
-    break;
-
-
-
-/* Line 1455 of yacc.c  */
-#line 8207 "vtkParse.tab.c"
+#line 7941 "vtkParse.tab.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -8121,850 +7869,240 @@ yyerrlab:
             if (yymsg)
               yymsg_alloc = yyalloc;
             else
-              {
-                yymsg = yymsgbuf;
-                yymsg_alloc = sizeof yymsgbuf;
-              }
-          }
-
-        if (0 < yysize && yysize <= yymsg_alloc)
-          {
-            (void) yysyntax_error (yymsg, yystate, yychar);
-            yyerror (yymsg);
-          }
-        else
-          {
-            yyerror (YY_("syntax error"));
-            if (yysize != 0)
-              goto yyexhaustedlab;
-          }
-      }
-#endif
-    }
-
-
-
-  if (yyerrstatus == 3)
-    {
-      /* If just tried and failed to reuse lookahead token after an
-         error, discard it.  */
-
-      if (yychar <= YYEOF)
-        {
-          /* Return failure if at end of input.  */
-          if (yychar == YYEOF)
-            YYABORT;
-        }
-      else
-        {
-          yydestruct ("Error: discarding",
-                      yytoken, &yylval);
-          yychar = YYEMPTY;
-        }
-    }
-
-  /* Else will try to reuse lookahead token after shifting the error
-     token.  */
-  goto yyerrlab1;
-
-
-/*---------------------------------------------------.
-| yyerrorlab -- error raised explicitly by YYERROR.  |
-`---------------------------------------------------*/
-yyerrorlab:
-
-  /* Pacify compilers like GCC when the user code never invokes
-     YYERROR and the label yyerrorlab therefore never appears in user
-     code.  */
-  if (/*CONSTCOND*/ 0)
-     goto yyerrorlab;
-
-  /* Do not reclaim the symbols of the rule which action triggered
-     this YYERROR.  */
-  YYPOPSTACK (yylen);
-  yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
-  yystate = *yyssp;
-
-
-/*-------------------------------------------------------------.
-| yyerrlab1 -- common code for both syntax error and YYERROR.  |
-`-------------------------------------------------------------*/
-yyerrlab1:
-  yyerrstatus = 3;        /* Each real token shifted decrements this.  */
-
-  for (;;)
-    {
-      yyn = yypact[yystate];
-      if (yyn != YYPACT_NINF)
-        {
-          yyn += YYTERROR;
-          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
-            {
-              yyn = yytable[yyn];
-              if (0 < yyn)
-                break;
-            }
-        }
-
-      /* Pop the current state because it cannot handle the error token.  */
-      if (yyssp == yyss)
-        YYABORT;
-
-
-      yydestruct ("Error: popping",
-                  yystos[yystate], yyvsp);
-      YYPOPSTACK (1);
-      yystate = *yyssp;
-      YY_STACK_PRINT (yyss, yyssp);
-    }
-
-  *++yyvsp = yylval;
-
-
-  /* Shift the error token.  */
-  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
-
-  yystate = yyn;
-  goto yynewstate;
-
-
-/*-------------------------------------.
-| yyacceptlab -- YYACCEPT comes here.  |
-`-------------------------------------*/
-yyacceptlab:
-  yyresult = 0;
-  goto yyreturn;
-
-/*-----------------------------------.
-| yyabortlab -- YYABORT comes here.  |
-`-----------------------------------*/
-yyabortlab:
-  yyresult = 1;
-  goto yyreturn;
-
-#if !defined(yyoverflow) || YYERROR_VERBOSE
-/*-------------------------------------------------.
-| yyexhaustedlab -- memory exhaustion comes here.  |
-`-------------------------------------------------*/
-yyexhaustedlab:
-  yyerror (YY_("memory exhausted"));
-  yyresult = 2;
-  /* Fall through.  */
-#endif
-
-yyreturn:
-  if (yychar != YYEMPTY)
-     yydestruct ("Cleanup: discarding lookahead",
-                 yytoken, &yylval);
-  /* Do not reclaim the symbols of the rule which action triggered
-     this YYABORT or YYACCEPT.  */
-  YYPOPSTACK (yylen);
-  YY_STACK_PRINT (yyss, yyssp);
-  while (yyssp != yyss)
-    {
-      yydestruct ("Cleanup: popping",
-                  yystos[*yyssp], yyvsp);
-      YYPOPSTACK (1);
-    }
-#ifndef yyoverflow
-  if (yyss != yyssa)
-    YYSTACK_FREE (yyss);
-#endif
-#if YYERROR_VERBOSE
-  if (yymsg != yymsgbuf)
-    YYSTACK_FREE (yymsg);
-#endif
-  /* Make sure YYID is used.  */
-  return YYID (yyresult);
-}
-
-
-
-/* Line 1675 of yacc.c  */
-#line 2652 "vtkParse.y"
-
-#include <string.h>
-#include "lex.yy.c"
-
-/* initialize the structure */
-void vtkParse_InitTemplateArgs(TemplateArgs *args)
-{
-  args->NumberOfArguments = 0;
-}
-
-void vtkParse_CopyTemplateArgs(TemplateArgs *args, const TemplateArgs *orig)
-{
-  unsigned long i, n;
-
-  n = orig->NumberOfArguments;
-  args->NumberOfArguments = n;
-  args->Arguments = (TemplateArg **)malloc(n*sizeof(TemplateArg *));
-
-  for (i = 0; i < n; i++)
-    {
-    args->Arguments[i] = (TemplateArg *)malloc(sizeof(TemplateArg));
-    vtkParse_CopyTemplateArg(args->Arguments[i], orig->Arguments[i]);
-    }
-}
-
-void vtkParse_InitTemplateArg(TemplateArg *arg)
-{
-  arg->Template = NULL;
-  arg->Type = 0;
-  arg->Class = NULL;
-  arg->Name = NULL;
-  arg->Value = NULL;
-}
-
-void vtkParse_CopyTemplateArg(TemplateArg *arg, const TemplateArg *orig)
-{
-  arg->Template = NULL;
-
-  if (orig->Template)
-    {
-    arg->Template = (TemplateArgs *)malloc(sizeof(TemplateArgs));
-    vtkParse_CopyTemplateArgs(arg->Template, orig->Template);
-    }
-
-  arg->Type = orig->Type;
-  arg->Class = orig->Class;
-  arg->Name = orig->Name;
-  arg->Value = orig->Value;
-}
-
-/* initialize the structure */
-void vtkParse_InitFunction(FunctionInfo *func)
-{
-  unsigned long i;
-
-  func->ItemType = VTK_FUNCTION_INFO;
-  func->Access = VTK_ACCESS_PUBLIC;
-  func->Name = NULL;
-  func->Comment = NULL;
-  func->Class = NULL;
-  func->Signature = NULL;
-  func->Template = NULL;
-  func->NumberOfArguments = 0;
-  func->ReturnValue = NULL;
-  func->Macro = NULL;
-  func->SizeHint = NULL;
-  func->IsStatic = 0;
-  func->IsVirtual = 0;
-  func->IsPureVirtual = 0;
-  func->IsOperator = 0;
-  func->IsVariadic = 0;
-  func->IsConst = 0;
-  func->IsExplicit = 0;
-
-  /* everything below here is legacy information, *
-   * maintained only for backwards compatibility  */
-  func->ReturnType = VTK_PARSE_VOID;
-  func->ReturnClass = NULL;
-  func->HaveHint = 0;
-  func->HintSize = 0;
-  func->IsLegacy = 0;
-  func->ArrayFailure = 0;
-  func->IsPublic = 0;
-  func->IsProtected = 0;
-
-  for (i = 0; i < MAX_ARGS; i++)
-    {
-    func->ArgTypes[i] = 0;
-    func->ArgClasses[i] = 0;
-    func->ArgCounts[i] = 0;
-    }
-}
-
-void vtkParse_CopyFunction(FunctionInfo *func, const FunctionInfo *orig)
-{
-  unsigned long i, n;
-
-  func->ItemType = orig->ItemType;
-  func->Access = orig->Access;
-  func->Name = orig->Name;
-  func->Comment = orig->Comment;
-  func->Class = orig->Class;
-  func->Signature = orig->Signature;
-  func->Template = NULL;
-
-  if (orig->Template)
-    {
-    func->Template = (TemplateArgs *)malloc(sizeof(TemplateArgs));
-    vtkParse_CopyTemplateArgs(func->Template, orig->Template);
-    }
-
-  n = orig->NumberOfArguments;
-  func->NumberOfArguments = n;
-  if (n)
-    {
-    func->Arguments = (ValueInfo **)malloc(n*sizeof(ValueInfo *));
-    for (i = 0; i < n; i++)
-      {
-      func->Arguments[i] = (ValueInfo *)malloc(sizeof(ValueInfo));
-      vtkParse_CopyValue(func->Arguments[i], orig->Arguments[i]);
-      }
-    }
-
-  func->ReturnValue = NULL;
-  if (orig->ReturnValue)
-    {
-    func->ReturnValue = (ValueInfo *)malloc(sizeof(ValueInfo));
-    vtkParse_CopyValue(func->ReturnValue, orig->ReturnValue);
-    }
-
-  func->Macro = orig->Macro;
-  func->SizeHint = orig->SizeHint;
-  func->IsStatic = orig->IsStatic;
-  func->IsVirtual = orig->IsVirtual;
-  func->IsPureVirtual = orig->IsPureVirtual;
-  func->IsOperator = orig->IsOperator;
-  func->IsVariadic = orig->IsVariadic;
-  func->IsConst = orig->IsConst;
-  func->IsExplicit = orig->IsExplicit;
-
-  /* everything below here is legacy information, *
-   * maintained only for backwards compatibility  */
-  func->ReturnType = orig->ReturnType;
-  func->ReturnClass = orig->ReturnClass;
-  func->HaveHint = orig->HaveHint;
-  func->HintSize = orig->HintSize;
-  func->IsLegacy = orig->IsLegacy;
-  func->ArrayFailure = orig->ArrayFailure;
-  func->IsPublic = orig->IsPublic;
-  func->IsProtected = orig->IsProtected;
-
-  for (i = 0; i < MAX_ARGS; i++)
-    {
-    func->ArgTypes[i] = orig->ArgTypes[i];
-    func->ArgClasses[i] = orig->ArgClasses[i];
-    func->ArgCounts[i] = orig->ArgCounts[i];
-    }
-}
-
-/* initialize the structure */
-void vtkParse_InitValue(ValueInfo *val)
-{
-  val->ItemType = VTK_VARIABLE_INFO;
-  val->Access = VTK_ACCESS_PUBLIC;
-  val->Name = NULL;
-  val->Comment = NULL;
-  val->Value = NULL;
-  val->Type = 0;
-  val->Class = NULL;
-  val->Count = 0;
-  val->CountHint = NULL;
-  val->NumberOfDimensions = 0;
-  val->Function = NULL;
-  val->IsStatic = 0;
-  val->IsEnum = 0;
-}
-
-void vtkParse_CopyValue(ValueInfo *val, const ValueInfo *orig)
-{
-  unsigned long i, n;
-
-  val->ItemType = orig->ItemType;
-  val->Access = orig->Access;
-  val->Name = orig->Name;
-  val->Comment = orig->Comment;
-  val->Value = orig->Value;
-  val->Type = orig->Type;
-  val->Class = orig->Class;
-  val->Count = orig->Count;
-  val->CountHint = orig->CountHint;
-
-  n = orig->NumberOfDimensions;
-  val->NumberOfDimensions = n;
-  if (n)
-    {
-    val->Dimensions = (const char **)malloc(n*sizeof(char *));
-    for (i = 0; i < n; i++)
-      {
-      val->Dimensions[i] = orig->Dimensions[i];
-      }
-    }
-
-  val->Function = NULL;
-  if (orig->Function)
-    {
-    val->Function = (FunctionInfo *)malloc(sizeof(FunctionInfo));
-    vtkParse_CopyFunction(val->Function, orig->Function);
-    }
-
-  val->IsStatic = orig->IsStatic;
-  val->IsEnum = orig->IsEnum;
-}
-
-/* initialize the structure */
-void vtkParse_InitEnum(EnumInfo *item)
-{
-  item->ItemType = VTK_ENUM_INFO;
-  item->Access = VTK_ACCESS_PUBLIC;
-  item->Name = NULL;
-  item->Comment = NULL;
-}
-
-void vtkParse_CopyEnum(EnumInfo *item, const EnumInfo *orig)
-{
-  item->ItemType = orig->ItemType;
-  item->Access = orig->Access;
-  item->Name = orig->Name;
-  item->Comment = orig->Comment;
-}
-
-/* initialize the structure */
-void vtkParse_InitUsing(UsingInfo *item)
-{
-  item->ItemType = VTK_USING_INFO;
-  item->Access = VTK_ACCESS_PUBLIC;
-  item->Name = NULL;
-  item->Comment = NULL;
-  item->Scope = NULL;
-}
-
-void vtkParse_CopyUsing(UsingInfo *item, const UsingInfo *orig)
-{
-  item->ItemType = orig->ItemType;
-  item->Access = orig->Access;
-  item->Name = orig->Name;
-  item->Comment = orig->Comment;
-  item->Scope = orig->Scope;
-}
-
-/* initialize the structure */
-void vtkParse_InitClass(ClassInfo *cls)
-{
-  cls->ItemType = VTK_CLASS_INFO;
-  cls->Access = VTK_ACCESS_PUBLIC;
-  cls->Name = NULL;
-  cls->Comment = NULL;
-  cls->Template = NULL;
-  cls->NumberOfSuperClasses = 0;
-  cls->NumberOfItems = 0;
-  cls->NumberOfClasses = 0;
-  cls->NumberOfFunctions = 0;
-  cls->NumberOfConstants = 0;
-  cls->NumberOfVariables = 0;
-  cls->NumberOfEnums = 0;
-  cls->NumberOfTypedefs = 0;
-  cls->NumberOfUsings = 0;
-  cls->IsAbstract = 0;
-  cls->HasDelete = 0;
-}
-
-void vtkParse_CopyClass(ClassInfo *cls, const ClassInfo *orig)
-{
-  unsigned long i, n;
-
-  cls->ItemType = orig->ItemType;
-  cls->Access = orig->Access;
-  cls->Name = orig->Name;
-  cls->Comment = orig->Comment;
-  cls->Template = NULL;
-
-  if (orig->Template)
-    {
-    cls->Template = (TemplateArgs *)malloc(sizeof(TemplateArgs));
-    vtkParse_CopyTemplateArgs(cls->Template, orig->Template);
-    }
-
-  n = orig->NumberOfSuperClasses;
-  cls->NumberOfSuperClasses = n;
-  if (n)
-    {
-    cls->SuperClasses = (const char **)malloc(n*sizeof(char *));
-    for (i = 0; i < n; i++)
-      {
-      cls->SuperClasses[i] = orig->SuperClasses[i];
-      }
-    }
-
-  n = orig->NumberOfItems;
-  cls->NumberOfItems = n;
-  if (n)
-    {
-    cls->Items = (ItemInfo *)malloc(n*sizeof(ItemInfo));
-    for (i = 0; i < n; i++)
-      {
-      cls->Items[i].Type = orig->Items[i].Type;
-      cls->Items[i].Index = orig->Items[i].Index;
-      }
-    }
-
-  n = orig->NumberOfClasses;
-  cls->NumberOfClasses = n;
-  if (n)
-    {
-    cls->Classes = (ClassInfo **)malloc(n*sizeof(ClassInfo *));
-    for (i = 0; i < n; i++)
-      {
-      cls->Classes[i] = (ClassInfo *)malloc(sizeof(ClassInfo));
-      vtkParse_CopyClass(cls->Classes[i], orig->Classes[i]);
-      }
-    }
-
-  n = orig->NumberOfFunctions;
-  cls->NumberOfFunctions = n;
-  if (n)
-    {
-    cls->Functions = (FunctionInfo **)malloc(n*sizeof(FunctionInfo *));
-    for (i = 0; i < n; i++)
-      {
-      cls->Functions[i] = (FunctionInfo *)malloc(sizeof(FunctionInfo));
-      vtkParse_CopyFunction(cls->Functions[i], orig->Functions[i]);
-      }
-    }
-
-  n = orig->NumberOfConstants;
-  cls->NumberOfConstants = n;
-  if (n)
-    {
-    cls->Constants = (ValueInfo **)malloc(n*sizeof(ValueInfo *));
-    for (i = 0; i < n; i++)
-      {
-      cls->Constants[i] = (ValueInfo *)malloc(sizeof(ValueInfo));
-      vtkParse_CopyValue(cls->Constants[i], orig->Constants[i]);
-      }
-    }
-
-  n = orig->NumberOfVariables;
-  cls->NumberOfVariables = n;
-  if (n)
-    {
-    cls->Variables = (ValueInfo **)malloc(n*sizeof(ValueInfo *));
-    for (i = 0; i < n; i++)
-      {
-      cls->Variables[i] = (ValueInfo *)malloc(sizeof(ValueInfo));
-      vtkParse_CopyValue(cls->Variables[i], orig->Variables[i]);
-      }
-    }
-
-  n = orig->NumberOfEnums;
-  cls->NumberOfEnums = n;
-  if (n)
-    {
-    cls->Enums = (EnumInfo **)malloc(n*sizeof(EnumInfo *));
-    for (i = 0; i < n; i++)
-      {
-      cls->Enums[i] = (EnumInfo *)malloc(sizeof(EnumInfo));
-      vtkParse_CopyEnum(cls->Enums[i], orig->Enums[i]);
-      }
-    }
-
-  n = orig->NumberOfTypedefs;
-  cls->NumberOfTypedefs = n;
-  if (n)
-    {
-    cls->Typedefs = (ValueInfo **)malloc(n*sizeof(ValueInfo *));
-    for (i = 0; i < n; i++)
-      {
-      cls->Typedefs[i] = (ValueInfo *)malloc(sizeof(ValueInfo));
-      vtkParse_CopyValue(cls->Typedefs[i], orig->Typedefs[i]);
-      }
-    }
-
-  n = orig->NumberOfUsings;
-  cls->NumberOfUsings = n;
-  if (n)
-    {
-    cls->Usings = (UsingInfo **)malloc(n*sizeof(UsingInfo *));
-    for (i = 0; i < n; i++)
-      {
-      cls->Usings[i] = (UsingInfo *)malloc(sizeof(UsingInfo));
-      vtkParse_CopyUsing(cls->Usings[i], orig->Usings[i]);
-      }
-    }
-
-  cls->IsAbstract = orig->IsAbstract;
-  cls->HasDelete = orig->HasDelete;
-}
-
-
-/* initialize the structure */
-void vtkParse_InitNamespace(NamespaceInfo *name_info)
-{
-  /* namespace info */
-  name_info->ItemType = VTK_NAMESPACE_INFO;
-  name_info->Access = VTK_ACCESS_PUBLIC;
-  name_info->Name = NULL;
-  name_info->Comment = NULL;
-  name_info->NumberOfItems = 0;
-  name_info->NumberOfClasses = 0;
-  name_info->NumberOfFunctions = 0;
-  name_info->NumberOfConstants = 0;
-  name_info->NumberOfVariables = 0;
-  name_info->NumberOfEnums = 0;
-  name_info->NumberOfTypedefs = 0;
-  name_info->NumberOfUsings = 0;
-  name_info->NumberOfNamespaces = 0;
-}
-
-void vtkParse_CopyNamespace(NamespaceInfo *ninfo, const NamespaceInfo *orig)
-{
-  unsigned long i, n;
-
-  /* namespace info */
-  ninfo->ItemType = orig->ItemType;
-  ninfo->Access = orig->Access;
-  ninfo->Name = orig->Name;
-  ninfo->Comment = orig->Comment;
-
-  n = orig->NumberOfItems;
-  ninfo->NumberOfItems = n;
-  if (n)
-    {
-    ninfo->Items = (ItemInfo *)malloc(n*sizeof(ItemInfo));
-    for (i = 0; i < n; i++)
-      {
-      ninfo->Items[i].Type = orig->Items[i].Type;
-      ninfo->Items[i].Index = orig->Items[i].Index;
-      }
-    }
-
-  n = orig->NumberOfClasses;
-  ninfo->NumberOfClasses = n;
-  if (n)
-    {
-    ninfo->Classes = (ClassInfo **)malloc(n*sizeof(ClassInfo *));
-    for (i = 0; i < n; i++)
-      {
-      ninfo->Classes[i] = (ClassInfo *)malloc(sizeof(ClassInfo));
-      vtkParse_CopyClass(ninfo->Classes[i], orig->Classes[i]);
-      }
-    }
-
-  n = orig->NumberOfFunctions;
-  ninfo->NumberOfFunctions = n;
-  if (n)
-    {
-    ninfo->Functions = (FunctionInfo **)malloc(n*sizeof(FunctionInfo *));
-    for (i = 0; i < n; i++)
-      {
-      ninfo->Functions[i] = (FunctionInfo *)malloc(sizeof(FunctionInfo));
-      vtkParse_CopyFunction(ninfo->Functions[i], orig->Functions[i]);
-      }
-    }
-
-  n = orig->NumberOfConstants;
-  ninfo->NumberOfConstants = n;
-  if (n)
-    {
-    ninfo->Constants = (ValueInfo **)malloc(n*sizeof(ValueInfo *));
-    for (i = 0; i < n; i++)
-      {
-      ninfo->Constants[i] = (ValueInfo *)malloc(sizeof(ValueInfo));
-      vtkParse_CopyValue(ninfo->Constants[i], orig->Constants[i]);
-      }
-    }
-
-  n = orig->NumberOfVariables;
-  ninfo->NumberOfVariables = n;
-  if (n)
-    {
-    ninfo->Variables = (ValueInfo **)malloc(n*sizeof(ValueInfo *));
-    for (i = 0; i < n; i++)
-      {
-      ninfo->Variables[i] = (ValueInfo *)malloc(sizeof(ValueInfo));
-      vtkParse_CopyValue(ninfo->Variables[i], orig->Variables[i]);
-      }
-    }
-
-  n = orig->NumberOfEnums;
-  ninfo->NumberOfEnums = n;
-  if (n)
-    {
-    ninfo->Enums = (EnumInfo **)malloc(n*sizeof(EnumInfo *));
-    for (i = 0; i < n; i++)
-      {
-      ninfo->Enums[i] = (EnumInfo *)malloc(sizeof(EnumInfo));
-      vtkParse_CopyEnum(ninfo->Enums[i], orig->Enums[i]);
-      }
-    }
-
-  n = orig->NumberOfTypedefs;
-  ninfo->NumberOfTypedefs = n;
-  if (n)
-    {
-    ninfo->Typedefs = (ValueInfo **)malloc(n*sizeof(ValueInfo *));
-    for (i = 0; i < n; i++)
-      {
-      ninfo->Typedefs[i] = (ValueInfo *)malloc(sizeof(ValueInfo));
-      vtkParse_CopyValue(ninfo->Typedefs[i], orig->Typedefs[i]);
-      }
-    }
+              {
+                yymsg = yymsgbuf;
+                yymsg_alloc = sizeof yymsgbuf;
+              }
+          }
 
-  n = orig->NumberOfUsings;
-  ninfo->NumberOfUsings = n;
-  if (n)
-    {
-    ninfo->Usings = (UsingInfo **)malloc(n*sizeof(UsingInfo *));
-    for (i = 0; i < n; i++)
-      {
-      ninfo->Usings[i] = (UsingInfo *)malloc(sizeof(UsingInfo));
-      vtkParse_CopyUsing(ninfo->Usings[i], orig->Usings[i]);
+        if (0 < yysize && yysize <= yymsg_alloc)
+          {
+            (void) yysyntax_error (yymsg, yystate, yychar);
+            yyerror (yymsg);
+          }
+        else
+          {
+            yyerror (YY_("syntax error"));
+            if (yysize != 0)
+              goto yyexhaustedlab;
+          }
       }
+#endif
     }
-}
-
-
-
-void vtkParse_InitFile(FileInfo *file_info)
-{
-  /* file info */
-  file_info->FileName = NULL;
-  file_info->NameComment = NULL;
-  file_info->Description = NULL;
-  file_info->Caveats = NULL;
-  file_info->SeeAlso = NULL;
 
-  file_info->MainClass = NULL;
-  file_info->Contents = NULL;
-}
 
-void vtkParse_FreeTemplateArgs(TemplateArgs *template_info)
-{
-  int j, m;
 
-  m = template_info->NumberOfArguments;
-  for (j = 0; j < m; j++)
+  if (yyerrstatus == 3)
     {
-    if (template_info->Arguments[j]->Template)
-      {
-      vtkParse_FreeTemplateArgs(template_info->Arguments[j]->Template);
-      }
-    free(template_info->Arguments[j]);
-    }
-
-  free(template_info);
-}
-
-void vtkParse_FreeFunction(FunctionInfo *function_info);
+      /* If just tried and failed to reuse lookahead token after an
+         error, discard it.  */
 
-void vtkParse_FreeValue(ValueInfo *value_info)
-{
-  if (value_info->NumberOfDimensions)
-    {
-    free((char **)value_info->Dimensions);
-    }
-  if (value_info->Function)
-    {
-    vtkParse_FreeFunction(value_info->Function);
+      if (yychar <= YYEOF)
+        {
+          /* Return failure if at end of input.  */
+          if (yychar == YYEOF)
+            YYABORT;
+        }
+      else
+        {
+          yydestruct ("Error: discarding",
+                      yytoken, &yylval);
+          yychar = YYEMPTY;
+        }
     }
 
-  free(value_info);
-}
+  /* Else will try to reuse lookahead token after shifting the error
+     token.  */
+  goto yyerrlab1;
 
-void vtkParse_FreeEnum(EnumInfo *enum_info)
-{
-  free(enum_info);
-}
 
-void vtkParse_FreeUsing(UsingInfo *using_info)
-{
-  free(using_info);
-}
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR.  |
+`---------------------------------------------------*/
+yyerrorlab:
 
-void vtkParse_FreeFunction(FunctionInfo *function_info)
-{
-  int j, m;
+  /* Pacify compilers like GCC when the user code never invokes
+     YYERROR and the label yyerrorlab therefore never appears in user
+     code.  */
+  if (/*CONSTCOND*/ 0)
+     goto yyerrorlab;
 
-  if (function_info->Template)
-    {
-    vtkParse_FreeTemplateArgs(function_info->Template);
-    }
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYERROR.  */
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+  yystate = *yyssp;
 
-  m = function_info->NumberOfArguments;
-  for (j = 0; j < m; j++) { vtkParse_FreeValue(function_info->Arguments[j]); }
-  if (m > 0) { free(function_info->Arguments); }
 
-  if (function_info->ReturnValue)
-    {
-    vtkParse_FreeValue(function_info->ReturnValue);
-    }
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR.  |
+`-------------------------------------------------------------*/
+yyerrlab1:
+  yyerrstatus = 3;        /* Each real token shifted decrements this.  */
 
-  free(function_info);
-}
+  for (;;)
+    {
+      yyn = yypact[yystate];
+      if (yyn != YYPACT_NINF)
+        {
+          yyn += YYTERROR;
+          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+            {
+              yyn = yytable[yyn];
+              if (0 < yyn)
+                break;
+            }
+        }
 
-void vtkParse_FreeClass(ClassInfo *class_info)
-{
-  int j, m;
+      /* Pop the current state because it cannot handle the error token.  */
+      if (yyssp == yyss)
+        YYABORT;
 
-  if (class_info->Template) { vtkParse_FreeTemplateArgs(class_info->Template); }
 
-  m = class_info->NumberOfSuperClasses;
-  if (m > 0) { free((char **)class_info->SuperClasses); }
+      yydestruct ("Error: popping",
+                  yystos[yystate], yyvsp);
+      YYPOPSTACK (1);
+      yystate = *yyssp;
+      YY_STACK_PRINT (yyss, yyssp);
+    }
 
-  m = class_info->NumberOfClasses;
-  for (j = 0; j < m; j++) { vtkParse_FreeClass(class_info->Classes[j]); }
-  if (m > 0) { free(class_info->Classes); }
+  *++yyvsp = yylval;
 
-  m = class_info->NumberOfFunctions;
-  for (j = 0; j < m; j++) { vtkParse_FreeFunction(class_info->Functions[j]); }
-  if (m > 0) { free(class_info->Functions); }
 
-  m = class_info->NumberOfConstants;
-  for (j = 0; j < m; j++) { vtkParse_FreeValue(class_info->Constants[j]); }
-  if (m > 0) { free(class_info->Constants); }
+  /* Shift the error token.  */
+  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
 
-  m = class_info->NumberOfVariables;
-  for (j = 0; j < m; j++) { vtkParse_FreeValue(class_info->Variables[j]); }
-  if (m > 0) { free(class_info->Variables); }
+  yystate = yyn;
+  goto yynewstate;
 
-  m = class_info->NumberOfEnums;
-  for (j = 0; j < m; j++) { vtkParse_FreeEnum(class_info->Enums[j]); }
-  if (m > 0) { free(class_info->Enums); }
 
-  m = class_info->NumberOfTypedefs;
-  for (j = 0; j < m; j++) { vtkParse_FreeValue(class_info->Typedefs[j]); }
-  if (m > 0) { free(class_info->Typedefs); }
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
 
-  m = class_info->NumberOfUsings;
-  for (j = 0; j < m; j++) { vtkParse_FreeUsing(class_info->Usings[j]); }
-  if (m > 0) { free(class_info->Usings); }
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
 
-  if (class_info->NumberOfItems > 0) { free(class_info->Items); }
+#if !defined(yyoverflow) || YYERROR_VERBOSE
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here.  |
+`-------------------------------------------------*/
+yyexhaustedlab:
+  yyerror (YY_("memory exhausted"));
+  yyresult = 2;
+  /* Fall through.  */
+#endif
 
-  free(class_info);
+yyreturn:
+  if (yychar != YYEMPTY)
+     yydestruct ("Cleanup: discarding lookahead",
+                 yytoken, &yylval);
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYABORT or YYACCEPT.  */
+  YYPOPSTACK (yylen);
+  YY_STACK_PRINT (yyss, yyssp);
+  while (yyssp != yyss)
+    {
+      yydestruct ("Cleanup: popping",
+                  yystos[*yyssp], yyvsp);
+      YYPOPSTACK (1);
+    }
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+  if (yymsg != yymsgbuf)
+    YYSTACK_FREE (yymsg);
+#endif
+  /* Make sure YYID is used.  */
+  return YYID (yyresult);
 }
 
-void vtkParse_FreeNamespace(NamespaceInfo *namespace_info)
-{
-  int j, m;
-
-  m = namespace_info->NumberOfClasses;
-  for (j = 0; j < m; j++) { vtkParse_FreeClass(namespace_info->Classes[j]); }
-  if (m > 0) { free(namespace_info->Classes); }
-
-  m = namespace_info->NumberOfFunctions;
-  for (j=0; j<m; j++) { vtkParse_FreeFunction(namespace_info->Functions[j]); }
-  if (m > 0) { free(namespace_info->Functions); }
-
-  m = namespace_info->NumberOfConstants;
-  for (j=0; j<m; j++) { vtkParse_FreeValue(namespace_info->Constants[j]); }
-  if (m > 0) { free(namespace_info->Constants); }
-
-  m = namespace_info->NumberOfVariables;
-  for (j=0; j<m; j++) { vtkParse_FreeValue(namespace_info->Variables[j]); }
-  if (m > 0) { free(namespace_info->Variables); }
 
-  m = namespace_info->NumberOfEnums;
-  for (j = 0; j < m; j++) { vtkParse_FreeEnum(namespace_info->Enums[j]); }
-  if (m > 0) { free(namespace_info->Enums); }
 
-  m = namespace_info->NumberOfTypedefs;
-  for (j = 0; j < m; j++) { vtkParse_FreeValue(namespace_info->Typedefs[j]); }
-  if (m > 0) { free(namespace_info->Typedefs); }
+/* Line 1675 of yacc.c  */
+#line 3088 "vtkParse.y"
 
-  m = namespace_info->NumberOfUsings;
-  for (j = 0; j < m; j++) { vtkParse_FreeUsing(namespace_info->Usings[j]); }
-  if (m > 0) { free(namespace_info->Usings); }
+#include <string.h>
+#include "lex.yy.c"
 
-  m = namespace_info->NumberOfNamespaces;
-  for (j=0; j<m; j++) {vtkParse_FreeNamespace(namespace_info->Namespaces[j]);}
-  if (m > 0) { free(namespace_info->Namespaces); }
+/* fill in the type name if none given */
+const char *type_class(unsigned int type, const char *classname)
+{
+  if (classname)
+    {
+    if (classname[0] == '\0')
+      {
+      switch ((type & VTK_PARSE_BASE_TYPE))
+        {
+        case VTK_PARSE_VOID:
+          classname = "void";
+          break;
+        case VTK_PARSE_BOOL:
+          classname = "bool";
+          break;
+        case VTK_PARSE_FLOAT:
+          classname = "float";
+          break;
+        case VTK_PARSE_DOUBLE:
+          classname = "double";
+          break;
+        case VTK_PARSE_LONG_DOUBLE:
+          classname = "long double";
+          break;
+        case VTK_PARSE_CHAR:
+          classname = "char";
+          break;
+        case VTK_PARSE_UNSIGNED_CHAR:
+          classname = "unsigned char";
+          break;
+        case VTK_PARSE_SIGNED_CHAR:
+          classname = "signed char";
+          break;
+        case VTK_PARSE_SHORT:
+          classname = "short";
+          break;
+        case VTK_PARSE_UNSIGNED_SHORT:
+          classname = "unsigned short";
+          break;
+        case VTK_PARSE_INT:
+          classname = "int";
+          break;
+        case VTK_PARSE_UNSIGNED_INT:
+          classname = "unsigned int";
+          break;
+        case VTK_PARSE_LONG:
+          classname = "long";
+          break;
+        case VTK_PARSE_UNSIGNED_LONG:
+          classname = "unsigned long";
+          break;
+        case VTK_PARSE_LONG_LONG:
+          classname = "long long";
+          break;
+        case VTK_PARSE_UNSIGNED_LONG_LONG:
+          classname = "unsigned long long";
+          break;
+        case VTK_PARSE___INT64:
+          classname = "__int64";
+          break;
+        case VTK_PARSE_UNSIGNED___INT64:
+          classname = "unsigned __int64";
+          break;
+        }
+      }
+    }
 
-  free(namespace_info);
+  return classname;
 }
 
 /* check whether this is the class we are looking for */
@@ -8974,7 +8112,7 @@ void start_class(const char *classname, int is_struct_or_union)
   pushClass();
   currentClass = (ClassInfo *)malloc(sizeof(ClassInfo));
   vtkParse_InitClass(currentClass);
-  currentClass->Name = vtkstrdup(classname);
+  currentClass->Name = classname;
   if (is_struct_or_union == 1)
     {
     currentClass->ItemType = VTK_STRUCT_INFO;
@@ -8984,13 +8122,16 @@ void start_class(const char *classname, int is_struct_or_union)
     currentClass->ItemType = VTK_UNION_INFO;
     }
 
-  if (outerClass)
-    {
-    vtkParse_AddClassToClass(outerClass, currentClass);
-    }
-  else
+  if (classname && classname[strlen(classname)-1] != '>')
     {
-    vtkParse_AddClassToNamespace(currentNamespace, currentClass);
+    if (outerClass)
+      {
+      vtkParse_AddClassToClass(outerClass, currentClass);
+      }
+    else
+      {
+      vtkParse_AddClassToNamespace(currentNamespace, currentClass);
+      }
     }
 
   /* template information */
@@ -9021,7 +8162,7 @@ void reject_class(const char *classname, int is_struct_or_union)
 
   pushClass();
   currentClass = &static_class;
-  currentClass->Name = vtkstrdup(classname);
+  currentClass->Name = classname;
   vtkParse_InitClass(currentClass);
 
   access_level = VTK_ACCESS_PRIVATE;
@@ -9039,11 +8180,22 @@ void reject_class(const char *classname, int is_struct_or_union)
 void end_class()
 {
   /* add default constructors */
-  vtkParse_AddDefaultConstructors(currentClass);
+  vtkParse_AddDefaultConstructors(currentClass, data->Strings);
 
   popClass();
 }
 
+/* add a base class to the specified class */
+void add_base_class(ClassInfo *cls, const char *name, int al, int virt)
+{
+  if (cls && al == VTK_ACCESS_PUBLIC && virt == 0)
+    {
+    vtkParse_AddStringToArray(&cls->SuperClasses,
+                              &cls->NumberOfSuperClasses,
+                              name);
+    }
+}
+
 /* add a using declaration or directive */
 void add_using(const char *name, int is_namespace)
 {
@@ -9055,7 +8207,7 @@ void add_using(const char *name, int is_namespace)
   if (is_namespace)
     {
     item->Name = NULL;
-    item->Scope = vtkstrdup(name);
+    item->Scope = name;
     }
   else
     {
@@ -9079,18 +8231,16 @@ void add_using(const char *name, int is_namespace)
 /* start a new enum */
 void start_enum(const char *name)
 {
-  static char text[256];
   EnumInfo *item;
 
   currentEnumName = "int";
   currentEnumValue = NULL;
   if (name)
     {
-    strcpy(text, name);
-    currentEnumName = text;
+    currentEnumName = name;
     item = (EnumInfo *)malloc(sizeof(EnumInfo));
     vtkParse_InitEnum(item);
-    item->Name = vtkstrdup(name);
+    item->Name = name;
     item->Access = access_level;
     if (currentClass)
       {
@@ -9120,7 +8270,7 @@ void add_enum(const char *name, const char *value)
   if (value)
     {
     strcpy(text, value);
-    currentEnumValue = text;
+    currentEnumValue = value;
     }
   else if (currentEnumValue)
     {
@@ -9144,17 +8294,18 @@ void add_enum(const char *name, const char *value)
       i = strlen(text);
       strcpy(&text[i], " + 1");
       }
+    currentEnumValue = vtkstrdup(text);
     }
   else
     {
     strcpy(text, "0");
-    currentEnumValue = text;
+    currentEnumValue = "0";
     }
 
   add_constant(name, currentEnumValue, VTK_PARSE_INT, currentEnumName, 2);
 }
 
-/* for a macro constant, guess the constant type */
+/* for a macro constant, guess the constant type, doesn't do any math */
 unsigned int guess_constant_type(const char *valstring)
 {
   unsigned int valtype = 0;
@@ -9280,7 +8431,7 @@ unsigned int guess_constant_type(const char *valstring)
   if (is_name)
     {
     MacroInfo *macro = vtkParsePreprocess_GetMacro(
-      &preprocessor, valstring);
+      preprocessor, valstring);
 
     if (macro && !macro->IsFunction)
       {
@@ -9293,7 +8444,7 @@ unsigned int guess_constant_type(const char *valstring)
     preproc_int_t val;
     int is_unsigned;
     int result = vtkParsePreprocess_EvaluateExpression(
-      &preprocessor, valstring, &val, &is_unsigned);
+      preprocessor, valstring, &val, &is_unsigned);
 
     if (result == VTK_PARSE_PREPROC_DOUBLE)
       {
@@ -9356,13 +8507,10 @@ void add_constant(const char *name, const char *value,
   ValueInfo *con = (ValueInfo *)malloc(sizeof(ValueInfo));
   vtkParse_InitValue(con);
   con->ItemType = VTK_CONSTANT_INFO;
-  con->Name = vtkstrdup(name);
-  con->Value = vtkstrdup(value);
+  con->Name = name;
+  con->Value = value;
   con->Type = type;
-  if (typeclass)
-    {
-    con->Class = vtkstrdup(typeclass);
-    }
+  con->Class = type_class(type, typeclass);
 
   if (flag == 2)
     {
@@ -9371,12 +8519,33 @@ void add_constant(const char *name, const char *value,
 
   if (flag == 1)
     {
+    /* actually a macro, need to guess the type */
+    ValueInfo **cptr = data->Contents->Constants;
+    int n = data->Contents->NumberOfConstants;
+    int i;
+
     con->Access = VTK_ACCESS_PUBLIC;
     if (con->Type == 0)
       {
       con->Type = guess_constant_type(con->Value);
       }
-    vtkParse_AddConstantToNamespace(data.Contents, con);
+
+    for (i = 0; i < n; i++)
+      {
+      if (strcmp(cptr[i]->Name, con->Name) == 0)
+        {
+        break;
+        }
+      }
+
+    if (i == n)
+      {
+      vtkParse_AddConstantToNamespace(data->Contents, con);
+      }
+    else
+      {
+      vtkParse_FreeValue(con);
+      }
     }
   else if (currentClass)
     {
@@ -9440,34 +8609,80 @@ const char *add_const_scope(const char *name)
   return text;
 }
 
-/* add an arg to a function */
-void add_argument(FunctionInfo *func, unsigned int type,
-                  const char *typeclass, int count)
+/* guess the type from the ID */
+unsigned int guess_id_type(const char *cp)
 {
-  int i = func->NumberOfArguments;
-  char text[64];
-  ValueInfo *arg = (ValueInfo *)malloc(sizeof(ValueInfo));
-  vtkParse_InitValue(arg);
+  unsigned int t = 0;
 
-  arg->Type = type;
-  if (typeclass)
+  if (cp)
     {
-    arg->Class = vtkstrdup(typeclass);
+    size_t i;
+    const char *dp;
+
+    i = strlen(cp);
+    while (i > 0 && cp[i-1] != ':') { i--; }
+    dp = &cp[i];
+
+    if (strcmp(dp, "vtkStdString") == 0 ||
+        strcmp(cp, "std::string") == 0)
+      {
+      t = VTK_PARSE_STRING;
+      }
+    else if (strcmp(dp, "vtkUnicodeString") == 0)
+      {
+      t = VTK_PARSE_UNICODE_STRING;
+      }
+    else if (strncmp(dp, "vtk", 3) == 0)
+      {
+      t = VTK_PARSE_OBJECT;
+      }
+    else if (strncmp(dp, "Q", 1) == 0 ||
+             strncmp(cp, "Qt::", 4) == 0)
+      {
+      t = VTK_PARSE_QOBJECT;
+      }
+    else
+      {
+      t = VTK_PARSE_UNKNOWN;
+      }
     }
 
+  return t;
+}
+
+/* add a template parameter to the current template */
+void add_template_parameter(
+  unsigned int datatype, unsigned int extra, const char *funcSig)
+{
+  ValueInfo *param = (ValueInfo *)malloc(sizeof(ValueInfo));
+  vtkParse_InitValue(param);
+  handle_complex_type(param, datatype, extra, funcSig);
+  param->Name = getVarName();
+  vtkParse_AddParameterToTemplate(currentTemplate, param);
+}
+
+/* add a parameter to a function */
+void add_parameter(FunctionInfo *func, unsigned int type,
+                   const char *typeclass, int count)
+{
+  char text[64];
+  ValueInfo *param = (ValueInfo *)malloc(sizeof(ValueInfo));
+  vtkParse_InitValue(param);
+
+  param->Type = type;
+  param->Class = type_class(type, typeclass);
+
   if (count)
     {
-    arg->Count = count;
+    param->Count = count;
     sprintf(text, "%i", count);
-    vtkParse_AddStringToArray(&arg->Dimensions, &arg->NumberOfDimensions,
+    vtkParse_AddStringToArray(&param->Dimensions, &param->NumberOfDimensions,
                               vtkstrdup(text));
     }
 
-  func->ArgTypes[i] = arg->Type;
-  func->ArgClasses[i] = arg->Class;
-  func->ArgCounts[i] = count;
+  add_legacy_parameter(func, param);
 
-  vtkParse_AddArgumentToFunction(func, arg);
+  vtkParse_AddParameterToFunction(func, param);
 }
 
 /* set the return type for the current function */
@@ -9479,10 +8694,7 @@ void set_return(FunctionInfo *func, unsigned int type,
 
   vtkParse_InitValue(val);
   val->Type = type;
-  if (typeclass)
-    {
-    val->Class = vtkstrdup(typeclass);
-    }
+  val->Class = type_class(type, typeclass);
 
   if (count)
     {
@@ -9490,13 +8702,47 @@ void set_return(FunctionInfo *func, unsigned int type,
     sprintf(text, "%i", count);
     vtkParse_AddStringToArray(&val->Dimensions, &val->NumberOfDimensions,
                               vtkstrdup(text));
-    func->HaveHint = 1;
     }
 
   func->ReturnValue = val;
+
+#ifndef VTK_PARSE_LEGACY_REMOVE
   func->ReturnType = val->Type;
   func->ReturnClass = val->Class;
+  func->HaveHint = (count > 0);
   func->HintSize = count;
+#endif
+}
+
+int count_from_dimensions(ValueInfo *val)
+{
+  int count, i, n;
+  const char *cp;
+
+  /* count is the product of the dimensions */
+  count = 0;
+  if (val->NumberOfDimensions)
+    {
+    count = 1;
+    for (i = 0; i < val->NumberOfDimensions; i++)
+      {
+      n = 0;
+      cp = val->Dimensions[i];
+      if (cp[0] != '\0')
+        {
+        while (*cp != '\0' && *cp >= '0' && *cp <= '9') { cp++; }
+        while (*cp != '\0' && (*cp == 'u' || *cp == 'l' ||
+                               *cp == 'U' || *cp == 'L')) { cp++; }
+        if (*cp == '\0')
+          {
+          n = (int)strtol(val->Dimensions[i], NULL, 0);
+          }
+        }
+      count *= n;
+      }
+    }
+
+  return count;
 }
 
 /* deal with types that include function pointers or arrays */
@@ -9505,8 +8751,9 @@ void handle_complex_type(
   const char *funcSig)
 {
   FunctionInfo *func = 0;
-  int i, n;
-  const char *cp;
+
+  /* remove specifiers like "friend" and "typedef" */
+  datatype &= VTK_PARSE_QUALIFIED_TYPE;
 
   /* if "extra" was set, parentheses were involved */
   if ((extra & VTK_PARSE_BASE_TYPE) == VTK_PARSE_FUNCTION)
@@ -9516,12 +8763,15 @@ void handle_complex_type(
     func->ReturnValue = (ValueInfo *)malloc(sizeof(ValueInfo));
     vtkParse_InitValue(func->ReturnValue);
     func->ReturnValue->Type = datatype;
-    func->ReturnValue->Class = vtkstrdup(getTypeId());
-    func->ReturnType = func->ReturnValue->Type;
-    func->ReturnClass = func->ReturnValue->Class;
+    func->ReturnValue->Class = type_class(datatype, getTypeId());
     if (funcSig) { func->Signature = vtkstrdup(funcSig); }
     val->Function = func;
 
+#ifndef VTK_PARSE_LEGACY_REMOVE
+    func->ReturnType = func->ReturnValue->Type;
+    func->ReturnClass = func->ReturnValue->Class;
+#endif
+
     /* the val type is whatever was inside the parentheses */
     clearTypeId();
     setTypeId(func->Class ? "method" : "function");
@@ -9578,7 +8828,7 @@ void handle_complex_type(
 
   /* get the data type */
   val->Type = datatype;
-  val->Class = vtkstrdup(getTypeId());
+  val->Class = type_class(datatype, getTypeId());
 
   /* copy contents of all brackets to the ArgDimensions */
   val->NumberOfDimensions = getArrayNDims();
@@ -9586,54 +8836,40 @@ void handle_complex_type(
   clearArray();
 
   /* count is the product of the dimensions */
-  val->Count = 0;
-  if (val->NumberOfDimensions)
-    {
-    val->Count = 1;
-    for (i = 0; i < val->NumberOfDimensions; i++)
-      {
-      n = 0;
-      cp = val->Dimensions[i];
-      if (cp[0] != '\0')
-        {
-        while (*cp != '\0' && *cp >= '0' && *cp <= '9') { cp++; }
-        if (*cp == '\0')
-          {
-          n = (int)strtol(val->Dimensions[i], NULL, 0);
-          }
-        }
-      val->Count *= n;
-      }
-    }
+  val->Count = count_from_dimensions(val);
 }
 
-/* specifically handle a VAR_FUNCTION argument */
-void handle_function_type(
-  ValueInfo *arg, const char *name, const char *funcSig)
+/* add a parameter to the legacy part of the FunctionInfo struct */
+void add_legacy_parameter(FunctionInfo *func, ValueInfo *param)
 {
-  FunctionInfo *func;
-  size_t j;
-
-  arg->Type = VTK_PARSE_FUNCTION;
-  arg->Class = vtkstrdup("function");
+#ifndef VTK_PARSE_LEGACY_REMOVE
+  int i = func->NumberOfArguments;
 
-  if (name && name[0] != '\0')
+  if (i < MAX_ARGS)
     {
-    arg->Name = vtkstrdup(name);
-    }
+    func->NumberOfArguments = i + 1;
+    func->ArgTypes[i] = param->Type;
+    func->ArgClasses[i] = param->Class;
+    func->ArgCounts[i] = param->Count;
 
-  func = (FunctionInfo *)malloc(sizeof(FunctionInfo));
-  vtkParse_InitFunction(func);
-  add_argument(func, VTK_PARSE_VOID_PTR, "void", 0);
-  set_return(func, VTK_PARSE_VOID, "void", 0);
-  j = strlen(funcSig);
-  while (j > 0 && funcSig[j-1] == ' ')
+    /* legacy wrappers need VTK_PARSE_FUNCTION without POINTER */
+    if (param->Type == VTK_PARSE_FUNCTION_PTR)
+      {
+      /* check for signature "void (*func)(void *)" */
+      if (param->Function->NumberOfParameters == 1 &&
+          param->Function->Parameters[0]->Type == VTK_PARSE_VOID_PTR &&
+          param->Function->Parameters[0]->NumberOfDimensions == 0 &&
+          param->Function->ReturnValue->Type == VTK_PARSE_VOID)
+        {
+        func->ArgTypes[i] = VTK_PARSE_FUNCTION;
+        }
+      }
+    }
+  else
     {
-    j--;
+    func->ArrayFailure = 1;
     }
-
-  func->Signature = vtkstrndup(funcSig, j);
-  arg->Function = func;
+#endif
 }
 
 
@@ -9642,11 +8878,13 @@ void reject_function()
 {
   vtkParse_InitFunction(currentFunction);
   startSig();
+  getMacro();
 }
 
 /* a simple routine that updates a few variables */
 void output_function()
 {
+  const char *macro = getMacro();
   size_t n;
   int i, j;
   int match;
@@ -9665,11 +8903,19 @@ void output_function()
     }
 
   /* static */
-  if (currentFunction->ReturnType & VTK_PARSE_STATIC)
+  if (currentFunction->ReturnValue &&
+      currentFunction->ReturnValue->Type & VTK_PARSE_STATIC)
     {
     currentFunction->IsStatic = 1;
     }
 
+  /* virtual */
+  if (currentFunction->ReturnValue &&
+      currentFunction->ReturnValue->Type & VTK_PARSE_VIRTUAL)
+    {
+    currentFunction->IsVirtual = 1;
+    }
+
   /* the signature */
   if (!currentFunction->Signature)
     {
@@ -9683,9 +8929,34 @@ void output_function()
     currentTemplate = NULL;
     }
 
-  /* a void argument is the same as no arguments */
+  /* a void argument is the same as no parameters */
+  if (currentFunction->NumberOfParameters == 1 &&
+      (currentFunction->Parameters[0]->Type & VTK_PARSE_UNQUALIFIED_TYPE) ==
+      VTK_PARSE_VOID)
+    {
+    currentFunction->NumberOfParameters = 0;
+    }
+
+  /* is it defined in a legacy macro? */
+  if (macro && strcmp(macro, "VTK_LEGACY") == 0)
+    {
+    currentFunction->IsLegacy = 1;
+    }
+
+  /* set public, protected */
+  if (currentClass)
+    {
+    currentFunction->Access = access_level;
+    }
+  else
+    {
+    currentFunction->Access = VTK_ACCESS_PUBLIC;
+    }
+
+#ifndef VTK_PARSE_LEGACY_REMOVE
+  /* a void argument is the same as no parameters */
   if (currentFunction->NumberOfArguments == 1 &&
-      (currentFunction->Arguments[0]->Type & VTK_PARSE_UNQUALIFIED_TYPE) ==
+      (currentFunction->ArgTypes[0] & VTK_PARSE_UNQUALIFIED_TYPE) ==
       VTK_PARSE_VOID)
     {
     currentFunction->NumberOfArguments = 0;
@@ -9696,56 +8967,56 @@ void output_function()
       (currentFunction->ReturnType & VTK_PARSE_UNQUALIFIED_TYPE) ==
        VTK_PARSE_VOID)
     {
-    currentFunction->ReturnClass = vtkstrdup("void");
+    currentFunction->ReturnClass = "void";
     }
 
-  /* set public, protected */
+  /* set legacy flags */
   if (currentClass)
     {
-    currentFunction->Access = access_level;
-    /* set legacy flags */
     currentFunction->IsPublic = (access_level == VTK_ACCESS_PUBLIC);
     currentFunction->IsProtected = (access_level == VTK_ACCESS_PROTECTED);
     }
   else
     {
-    currentFunction->Access = VTK_ACCESS_PUBLIC;
-    /* set legacy flags */
     currentFunction->IsPublic = 1;
     currentFunction->IsProtected = 0;
     }
 
-  /* look for legacy VAR FUNCTIONS */
-  if (currentFunction->NumberOfArguments
-      && (currentFunction->Arguments[0]->Type == VTK_PARSE_FUNCTION))
-    {
-    if (currentFunction->NumberOfArguments != 2 ||
-        currentFunction->Arguments[1]->Type != VTK_PARSE_VOID_PTR)
-      {
-      currentFunction->ArrayFailure = 1;
-      }
-    }
-
-  /* check for too many arguments */
-  if (currentFunction->NumberOfArguments > MAX_ARGS)
+  /* check for too many parameters */
+  if (currentFunction->NumberOfParameters > MAX_ARGS)
     {
     currentFunction->ArrayFailure = 1;
     }
 
-  /* also legacy: tell old wrappers that multi-dimensional arrays are bad */
-  for (i = 0; i < currentFunction->NumberOfArguments; i++)
+  for (i = 0; i < currentFunction->NumberOfParameters; i++)
     {
-    ValueInfo *arg = currentFunction->Arguments[i];
-    if ((arg->Type & VTK_PARSE_POINTER_MASK) != 0)
+    ValueInfo *param = currentFunction->Parameters[i];
+    /* tell old wrappers that multi-dimensional arrays are bad */
+    if ((param->Type & VTK_PARSE_POINTER_MASK) != 0)
+      {
+      if (((param->Type & VTK_PARSE_INDIRECT) == VTK_PARSE_BAD_INDIRECT) ||
+          ((param->Type & VTK_PARSE_POINTER_LOWMASK) != VTK_PARSE_POINTER))
+        {
+        currentFunction->ArrayFailure = 1;
+        }
+      }
+
+    /* allow only "void (*func)(void *)" as a valid function pointer */
+    if ((param->Type & VTK_PARSE_BASE_TYPE) == VTK_PARSE_FUNCTION)
       {
-      if (((arg->Type & VTK_PARSE_BASE_TYPE) == VTK_PARSE_FUNCTION) ||
-          ((arg->Type & VTK_PARSE_INDIRECT) == VTK_PARSE_BAD_INDIRECT) ||
-          ((arg->Type & VTK_PARSE_POINTER_LOWMASK) != VTK_PARSE_POINTER))
-       {
-       currentFunction->ArrayFailure = 1;
-       }
+      if (i != 0 || param->Type != VTK_PARSE_FUNCTION_PTR ||
+          currentFunction->NumberOfParameters != 2 ||
+          currentFunction->Parameters[1]->Type != VTK_PARSE_VOID_PTR ||
+          param->Function->NumberOfParameters != 1 ||
+          param->Function->Parameters[0]->Type != VTK_PARSE_VOID_PTR ||
+          param->Function->Parameters[0]->NumberOfDimensions != 0 ||
+          param->Function->ReturnValue->Type != VTK_PARSE_VOID)
+        {
+        currentFunction->ArrayFailure = 1;
+        }
       }
     }
+#endif /* VTK_PARSE_LEGACY_REMOVE */
 
   if (currentClass)
     {
@@ -9755,7 +9026,7 @@ void output_function()
       currentClass->HasDelete = 1;
       }
 
-    currentFunction->Class = vtkstrdup(currentClass->Name);
+    currentFunction->Class = currentClass->Name;
     vtkParse_AddFunctionToClass(currentClass, currentFunction);
 
     currentFunction = (FunctionInfo *)malloc(sizeof(FunctionInfo));
@@ -9770,23 +9041,23 @@ void output_function()
           strcmp(currentNamespace->Functions[i]->Name,
                  currentFunction->Name) == 0)
         {
-        if (currentNamespace->Functions[i]->NumberOfArguments ==
-            currentFunction->NumberOfArguments)
+        if (currentNamespace->Functions[i]->NumberOfParameters ==
+            currentFunction->NumberOfParameters)
           {
-          for (j = 0; j < currentFunction->NumberOfArguments; j++)
+          for (j = 0; j < currentFunction->NumberOfParameters; j++)
             {
-            if (currentNamespace->Functions[i]->Arguments[j]->Type ==
-                currentFunction->Arguments[j]->Type)
+            if (currentNamespace->Functions[i]->Parameters[j]->Type ==
+                currentFunction->Parameters[j]->Type)
               {
-              if (currentFunction->Arguments[j]->Type == VTK_PARSE_OBJECT &&
-                  strcmp(currentNamespace->Functions[i]->Arguments[j]->Class,
-                         currentFunction->Arguments[j]->Class) == 0)
+              if (currentFunction->Parameters[j]->Type == VTK_PARSE_OBJECT &&
+                  strcmp(currentNamespace->Functions[i]->Parameters[j]->Class,
+                         currentFunction->Parameters[j]->Class) == 0)
                 {
                 break;
                 }
               }
             }
-          if (j == currentFunction->NumberOfArguments)
+          if (j == currentFunction->NumberOfParameters)
             {
             match = 1;
             break;
@@ -9807,7 +9078,16 @@ void output_function()
   startSig();
 }
 
-void outputSetVectorMacro(const char *var, unsigned int argType,
+/* output a function that is not a method of the current class */
+void output_friend_function()
+{
+  ClassInfo *tmpc = currentClass;
+  currentClass = NULL;
+  output_function();
+  currentClass = tmpc;
+}
+
+void outputSetVectorMacro(const char *var, unsigned int paramType,
                           const char *typeText, int n)
 {
   static const char *mnames[] = {
@@ -9837,7 +9117,7 @@ void outputSetVectorMacro(const char *var, unsigned int argType,
   postSig(");");
   for (i = 0; i < n; i++)
     {
-    add_argument(currentFunction, argType, getTypeId(), 0);
+    add_parameter(currentFunction, paramType, getTypeId(), 0);
     }
   set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
   output_function();
@@ -9845,15 +9125,15 @@ void outputSetVectorMacro(const char *var, unsigned int argType,
   currentFunction->Macro = mnames[m];
   currentFunction->Name = vtkstrcat("Set", var);
   currentFunction->Signature =
-    vtkstrcat7("void ", currentFunction->Name, "(", getTypeId(),
+    vtkstrcat7("void ", currentFunction->Name, "(", typeText,
                " a[", ntext, "]);");
-  add_argument(currentFunction, (VTK_PARSE_POINTER | argType),
-               getTypeId(), n);
+  add_parameter(currentFunction, (VTK_PARSE_POINTER | paramType),
+                getTypeId(), n);
   set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
   output_function();
 }
 
-void outputGetVectorMacro(const char *var, unsigned int argType,
+void outputGetVectorMacro(const char *var, unsigned int paramType,
                           const char *typeText, int n)
 {
   static const char *mnames[] = {
@@ -9869,406 +9149,103 @@ void outputGetVectorMacro(const char *var, unsigned int argType,
   currentFunction->Name = vtkstrcat("Get", var);
   currentFunction->Signature =
     vtkstrcat4(typeText, " *", currentFunction->Name, "();");
-  set_return(currentFunction, (VTK_PARSE_POINTER | argType), getTypeId(), n);
+  set_return(currentFunction, (VTK_PARSE_POINTER | paramType), getTypeId(), n);
   output_function();
 }
 
-/* This method is used for extending dynamic arrays in a progression of
- * powers of two.  If "n" reaches a power of two, then the array size is
- * doubled so that "n" can be safely incremented. */
-static void *array_size_check(
-  void *arraymem, size_t size, int n)
+/* Set a flag to ignore BTX/ETX markers in the files */
+void vtkParse_SetIgnoreBTX(int option)
 {
-  /* if empty, alloc for the first time */
-  if (n == 0)
+  if (option)
     {
-    return malloc(size);
+    IgnoreBTX = 1;
     }
-  /* if count is power of two, reallocate with double size */
-  else if ((n & (n-1)) == 0)
+  else
     {
-    return realloc(arraymem, (n << 1)*size);
+    IgnoreBTX = 0;
     }
-
-  /* no reallocation, just return the original array */
-  return arraymem;
-}
-
-/* Utility method to add a pointer to an array */
-void vtkParse_AddPointerToArray(
-  void *valueArray, int *count, const void *value)
-{
-  void **values = *(void ***)valueArray;
-  int n = *count;
-
-  values = (void **)array_size_check(values, sizeof(void *), n);
-
-  values[n++] = (void *)value;
-  *count = n;
-  *(void ***)valueArray = values;
-}
-
-/*
- * There is a lot of repetition here, but all the code is written
- * out explicitly to avoid the use of macros or typecasts.  The
- * use of macros for generic programming makes code harder to debug,
- * and the use of C typecasts for anything but void* and char* breaks
- * the C99 standard.
- */
-
-/* Utility method to add an item to an array */
-void vtkParse_AddItemToArray(
-  ItemInfo **valueArray, int *count,
-  parse_item_t type, int idx)
-{
-  size_t n = *count;
-  ItemInfo *values = *valueArray;
-
-  values = (ItemInfo *)array_size_check(values, sizeof(ItemInfo), n);
-
-  values[n].Type = type;
-  values[n].Index = idx;
-  *count = n+1;
-  *valueArray = values;
-}
-
-/* Add a ClassInfo to a ClassInfo */
-void vtkParse_AddClassToClass(ClassInfo *info, ClassInfo *item)
-{
-  vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
-    item->ItemType, info->NumberOfClasses);
-  info->Classes = (ClassInfo **)array_size_check(
-    info->Classes, sizeof(ClassInfo *), info->NumberOfClasses);
-  info->Classes[info->NumberOfClasses++] = item;
-}
-
-/* Add a FunctionInfo to a ClassInfo */
-void vtkParse_AddFunctionToClass(ClassInfo *info, FunctionInfo *item)
-{
-  vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
-    item->ItemType, info->NumberOfFunctions);
-  info->Functions = (FunctionInfo **)array_size_check(
-    info->Functions, sizeof(FunctionInfo *), info->NumberOfFunctions);
-  info->Functions[info->NumberOfFunctions++] = item;
-}
-
-/* Add a EnumInfo to a ClassInfo */
-void vtkParse_AddEnumToClass(ClassInfo *info, EnumInfo *item)
-{
-  vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
-    item->ItemType, info->NumberOfEnums);
-  info->Enums = (EnumInfo **)array_size_check(
-    info->Enums, sizeof(EnumInfo *), info->NumberOfEnums);
-  info->Enums[info->NumberOfEnums++] = item;
-}
-
-/* Add a Constant ValueInfo to a ClassInfo */
-void vtkParse_AddConstantToClass(ClassInfo *info, ValueInfo *item)
-{
-  vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
-    item->ItemType, info->NumberOfConstants);
-  info->Constants = (ValueInfo **)array_size_check(
-    info->Constants, sizeof(ValueInfo *), info->NumberOfConstants);
-  info->Constants[info->NumberOfConstants++] = item;
-}
-
-/* Add a Variable ValueInfo to a ClassInfo */
-void vtkParse_AddVariableToClass(ClassInfo *info, ValueInfo *item)
-{
-  vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
-    item->ItemType, info->NumberOfVariables);
-  info->Variables = (ValueInfo **)array_size_check(
-    info->Variables, sizeof(ValueInfo *), info->NumberOfVariables);
-  info->Variables[info->NumberOfVariables++] = item;
-}
-
-/* Add a Typedef ValueInfo to a ClassInfo */
-void vtkParse_AddTypedefToClass(ClassInfo *info, ValueInfo *item)
-{
-  vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
-    item->ItemType, info->NumberOfTypedefs);
-  info->Typedefs = (ValueInfo **)array_size_check(
-    info->Typedefs, sizeof(ValueInfo *), info->NumberOfTypedefs);
-  info->Typedefs[info->NumberOfTypedefs++] = item;
-}
-
-/* Add a UsingInfo to a ClassInfo */
-void vtkParse_AddUsingToClass(ClassInfo *info, UsingInfo *item)
-{
-  vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
-    item->ItemType, info->NumberOfUsings);
-  info->Usings = (UsingInfo **)array_size_check(
-    info->Usings, sizeof(UsingInfo *), info->NumberOfUsings);
-  info->Usings[info->NumberOfUsings++] = item;
-}
-
-
-/* Add a NamespaceInfo to a NamespaceInfo */
-void vtkParse_AddNamespaceToNamespace(NamespaceInfo *info, NamespaceInfo *item)
-{
-  vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
-    item->ItemType, info->NumberOfNamespaces);
-  info->Namespaces = (NamespaceInfo **)array_size_check(
-    info->Namespaces, sizeof(NamespaceInfo *), info->NumberOfNamespaces);
-  info->Namespaces[info->NumberOfNamespaces++] = item;
-}
-
-/* Add a ClassInfo to a NamespaceInfo */
-void vtkParse_AddClassToNamespace(NamespaceInfo *info, ClassInfo *item)
-{
-  vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
-    item->ItemType, info->NumberOfClasses);
-  info->Classes = (ClassInfo **)array_size_check(
-    info->Classes, sizeof(ClassInfo *), info->NumberOfClasses);
-  info->Classes[info->NumberOfClasses++] = item;
-}
-
-/* Add a FunctionInfo to a NamespaceInfo */
-void vtkParse_AddFunctionToNamespace(NamespaceInfo *info, FunctionInfo *item)
-{
-  vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
-    item->ItemType, info->NumberOfFunctions);
-  info->Functions = (FunctionInfo **)array_size_check(
-    info->Functions, sizeof(FunctionInfo *), info->NumberOfFunctions);
-  info->Functions[info->NumberOfFunctions++] = item;
-}
-
-/* Add a EnumInfo to a NamespaceInfo */
-void vtkParse_AddEnumToNamespace(NamespaceInfo *info, EnumInfo *item)
-{
-  vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
-    item->ItemType, info->NumberOfEnums);
-  info->Enums = (EnumInfo **)array_size_check(
-    info->Enums, sizeof(EnumInfo *), info->NumberOfEnums);
-  info->Enums[info->NumberOfEnums++] = item;
-}
-
-/* Add a Constant ValueInfo to a NamespaceInfo */
-void vtkParse_AddConstantToNamespace(NamespaceInfo *info, ValueInfo *item)
-{
-  vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
-    item->ItemType, info->NumberOfConstants);
-  info->Constants = (ValueInfo **)array_size_check(
-    info->Constants, sizeof(ValueInfo *), info->NumberOfConstants);
-  info->Constants[info->NumberOfConstants++] = item;
-}
-
-/* Add a Variable ValueInfo to a NamespaceInfo */
-void vtkParse_AddVariableToNamespace(NamespaceInfo *info, ValueInfo *item)
-{
-  vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
-    item->ItemType, info->NumberOfVariables);
-  info->Variables = (ValueInfo **)array_size_check(
-    info->Variables, sizeof(ValueInfo *), info->NumberOfVariables);
-  info->Variables[info->NumberOfVariables++] = item;
-}
-
-/* Add a Typedef ValueInfo to a NamespaceInfo */
-void vtkParse_AddTypedefToNamespace(NamespaceInfo *info, ValueInfo *item)
-{
-  vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
-    item->ItemType, info->NumberOfTypedefs);
-  info->Typedefs = (ValueInfo **)array_size_check(
-    info->Typedefs, sizeof(ValueInfo *), info->NumberOfTypedefs);
-  info->Typedefs[info->NumberOfTypedefs++] = item;
-}
-
-/* Add a UsingInfo to a NamespaceInfo */
-void vtkParse_AddUsingToNamespace(NamespaceInfo *info, UsingInfo *item)
-{
-  vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
-    item->ItemType, info->NumberOfUsings);
-  info->Usings = (UsingInfo **)array_size_check(
-    info->Usings, sizeof(UsingInfo *), info->NumberOfUsings);
-  info->Usings[info->NumberOfUsings++] = item;
-}
-
-
-/* Add a Argument ValueInfo to a FunctionInfo */
-void vtkParse_AddArgumentToFunction(FunctionInfo *info, ValueInfo *item)
-{
-  info->Arguments = (ValueInfo **)array_size_check(
-    info->Arguments, sizeof(ValueInfo *), info->NumberOfArguments);
-  info->Arguments[info->NumberOfArguments++] = item;
-}
-
-
-/* Add a TemplateArg to a TemplateArgs */
-void vtkParse_AddArgumentToTemplate(TemplateArgs *info, TemplateArg *item)
-{
-  info->Arguments = (TemplateArg **)array_size_check(
-    info->Arguments, sizeof(TemplateArg *), info->NumberOfArguments);
-  info->Arguments[info->NumberOfArguments++] = item;
 }
 
-
-/* Utility method to add a const char pointer to an array */
-void vtkParse_AddStringToArray(
-  const char ***valueArray, int *count, const char *value)
+/* Set a flag to recurse into included files */
+void vtkParse_SetRecursive(int option)
 {
-  *valueArray = (const char **)array_size_check(
-    (char **)*valueArray, sizeof(const char *), *count);
-
-  (*valueArray)[(*count)++] = value;
+  if (option)
+    {
+    Recursive = 1;
+    }
+  else
+    {
+    Recursive = 0;
+    }
 }
 
-/* duplicate the first n bytes of a string and terminate */
-const char *vtkParse_DuplicateString(const char *cp, size_t n)
+/* Parse a header file and return a FileInfo struct */
+FileInfo *vtkParse_ParseFile(
+  const char *filename, FILE *ifile, FILE *errfile)
 {
-  char *res = NULL;
-
-  res = vtkstralloc(n);
-  strncpy(res, cp, n);
-  res[n] = '\0';
+  int i, j;
+  int ret;
+  FileInfo *file_info;
+  char *main_class;
 
-  return res;
-}
+  /* "data" is a global variable used by the parser */
+  data = (FileInfo *)malloc(sizeof(FileInfo));
+  vtkParse_InitFile(data);
+  data->Strings = (StringCache *)malloc(sizeof(StringCache));
+  vtkParse_InitStringCache(data->Strings);
 
-/* Add default constructors if they do not already exist */
-void vtkParse_AddDefaultConstructors(ClassInfo *cls)
-{
-  FunctionInfo *func;
-  ValueInfo *arg;
-  size_t k;
-  int i, n;
-  int default_constructor = 1;
-  int copy_constructor = 1;
-  char *tname;
-  const char *ccname;
+  /* "preprocessor" is a global struct used by the parser */
+  preprocessor = (PreprocessInfo *)malloc(sizeof(PreprocessInfo));
+  vtkParsePreprocess_Init(preprocessor, filename);
+  vtkParsePreprocess_AddStandardMacros(preprocessor, VTK_PARSE_NATIVE);
 
-  if (cls == NULL || cls->Name == NULL)
+  /* add include files specified on the command line */
+  for (i = 0; i < NumberOfIncludeDirectories; i++)
     {
-    return;
+    vtkParsePreprocess_IncludeDirectory(preprocessor, IncludeDirectories[i]);
     }
 
-  n = cls->NumberOfFunctions;
-  for (i = 0; i < n; i++)
+  /* add macros specified on the command line */
+  for (i = 0; i < NumberOfDefinitions; i++)
     {
-    func = cls->Functions[i];
-    if (func->Name && strcmp(func->Name, cls->Name) == 0)
-      {
-      default_constructor = 0;
+    const char *cp = Definitions[i];
 
-      if (func->NumberOfArguments == 1)
-        {
-        arg = func->Arguments[0];
-        if (arg->Class &&
-            strcmp(arg->Class, cls->Name) == 0 &&
-            (arg->Type & VTK_PARSE_POINTER_MASK) == 0)
-          {
-          copy_constructor = 0;
-          }
-        }
+    if (*cp == 'U')
+      {
+      vtkParsePreprocess_RemoveMacro(preprocessor, &cp[1]);
       }
-    }
-
-  if (default_constructor)
-    {
-    func = (FunctionInfo *)malloc(sizeof(FunctionInfo));
-    vtkParse_InitFunction(func);
-    func->Class = vtkstrdup(cls->Name);
-    func->Name = vtkstrdup(cls->Name);
-    func->Signature = vtkstrcat(cls->Name, "()");
-    vtkParse_AddFunctionToClass(cls, func);
-    }
-
-  if (copy_constructor)
-    {
-    if (cls->Template)
+    else if (*cp == 'D')
       {
-      /* specialize the name */
-      n = cls->Template->NumberOfArguments;
-
-      k = strlen(cls->Name) + 2;
-      for (i = 0; i < n; i++)
+      const char *definition = &cp[1];
+      while (*definition != '=' && *definition != '\0')
         {
-        k += strlen(cls->Template->Arguments[i]->Name) + 2;
+        definition++;
         }
-      tname = vtkstralloc(k);
-      strcpy(tname, cls->Name);
-      k = strlen(tname);
-      tname[k++] = '<';
-      for (i = 0; i < n; i++)
+      if (*definition == '=')
         {
-        strcpy(&tname[k], cls->Template->Arguments[i]->Name);
-        k += strlen(cls->Template->Arguments[i]->Name);
-        if (i+1 < n)
-          {
-          tname[k++] = ',';
-          tname[k++] = ' ';
-          }
+        definition++;
         }
-      tname[k++] = '>';
-      tname[k] = '\0';
-      ccname = tname;
-      }
-    else
-      {
-      ccname = vtkstrdup(cls->Name);
+      else
+        {
+        definition = NULL;
+        }
+      vtkParsePreprocess_AddMacro(preprocessor, &cp[1], definition);
       }
-
-    func = (FunctionInfo *)malloc(sizeof(FunctionInfo));
-    vtkParse_InitFunction(func);
-    func->Class = vtkstrdup(cls->Name);
-    func->Name = vtkstrdup(cls->Name);
-    func->Signature = vtkstrcat4(cls->Name, "(const &", ccname, ")");
-    arg = (ValueInfo *)malloc(sizeof(ValueInfo));
-    vtkParse_InitValue(arg);
-    arg->Type = (VTK_PARSE_OBJECT_REF | VTK_PARSE_CONST);
-    arg->Class = ccname;
-    vtkParse_AddArgumentToFunction(func, arg);
-    vtkParse_AddFunctionToClass(cls, func);
-    }
-}
-
-/* Set a flag to ignore BTX/ETX markers in the files */
-void vtkParse_SetIgnoreBTX(int option)
-{
-  if (option)
-    {
-    IgnoreBTX = 1;
     }
-  else
-    {
-    IgnoreBTX = 0;
-    }
-}
 
-/* Parse a header file and return a FileInfo struct */
-FileInfo *vtkParse_ParseFile(
-  const char *filename, FILE *ifile, FILE *errfile)
-{
-  int i, j;
-  int lineno;
-  int ret;
-  FileInfo *file_info;
-  char *main_class;
-  const char **include_dirs;
-
-  vtkParse_InitFile(&data);
-
-  i = preprocessor.NumberOfIncludeDirectories;
-  include_dirs = preprocessor.IncludeDirectories;
-  preprocessor.NumberOfIncludeDirectories = 0;
-  preprocessor.IncludeDirectories = NULL;
-  vtkParsePreprocess_InitPreprocess(&preprocessor);
-  vtkParsePreprocess_AddStandardMacros(&preprocessor, VTK_PARSE_NATIVE);
-  preprocessor.FileName = vtkstrdup(filename);
-  preprocessor.NumberOfIncludeDirectories = i;
-  preprocessor.IncludeDirectories = include_dirs;
   /* should explicitly check for vtkConfigure.h, or even explicitly load it */
 #ifdef VTK_USE_64BIT_IDS
-  vtkParsePreprocess_AddMacro(&preprocessor, "VTK_USE_64BIT_IDS", "1");
+  vtkParsePreprocess_AddMacro(preprocessor, "VTK_USE_64BIT_IDS", NULL);
 #endif
 
-  data.FileName = vtkstrdup(filename);
+  data->FileName = vtkstrdup(filename);
 
   clearComment();
 
   namespaceDepth = 0;
   currentNamespace = (NamespaceInfo *)malloc(sizeof(NamespaceInfo));
   vtkParse_InitNamespace(currentNamespace);
-  data.Contents = currentNamespace;
+  data->Contents = currentNamespace;
 
   templateDepth = 0;
   currentTemplate = NULL;
@@ -10286,20 +9263,16 @@ FileInfo *vtkParse_ParseFile(
   yyset_in(ifile);
   yyset_out(errfile);
   ret = yyparse();
-  lineno = yyget_lineno();
-  yylex_destroy();
-
-  free(currentFunction);
 
   if (ret)
     {
-    fprintf(errfile,
-            "*** SYNTAX ERROR found in parsing the header file %s "
-            "before line %d ***\n",
-            filename, lineno);
+    print_parser_error("syntax error", NULL, 0);
     return NULL;
     }
 
+  free(currentFunction);
+  yylex_destroy();
+
   /* The main class name should match the file name */
   i = strlen(filename);
   j = i;
@@ -10325,15 +9298,18 @@ FileInfo *vtkParse_ParseFile(
     {
     if (strcmp(currentNamespace->Classes[i]->Name, main_class) == 0)
       {
-      data.MainClass = currentNamespace->Classes[i];
+      data->MainClass = currentNamespace->Classes[i];
       break;
       }
     }
-
   free(main_class);
 
-  file_info = (FileInfo *)malloc(sizeof(FileInfo));
-  memcpy(file_info, &data, sizeof(FileInfo));
+  vtkParsePreprocess_Free(preprocessor);
+  preprocessor = NULL;
+  macroName = NULL;
+
+  file_info = data;
+  data = NULL;
 
   return file_info;
 }
@@ -10381,13 +9357,13 @@ int vtkParse_ReadHints(FileInfo *file_info, FILE *hfile, FILE *errfile)
           {
           func_info = class_info->Functions[j];
 
-          if (func_info->HaveHint == 0 && func_info->Name &&
-              (strcmp(h_func, func_info->Name) == 0) &&
-              (type == ((func_info->ReturnType & ~VTK_PARSE_REF) &
+          if ((strcmp(h_func, func_info->Name) == 0) &&
+              func_info->ReturnValue &&
+              (type == ((func_info->ReturnValue->Type & ~VTK_PARSE_REF) &
                         VTK_PARSE_UNQUALIFIED_TYPE)))
             {
             /* types that hints are accepted for */
-            switch (func_info->ReturnType & VTK_PARSE_UNQUALIFIED_TYPE)
+            switch (func_info->ReturnValue->Type & VTK_PARSE_UNQUALIFIED_TYPE)
               {
               case VTK_PARSE_FLOAT_PTR:
               case VTK_PARSE_VOID_PTR:
@@ -10407,18 +9383,20 @@ int vtkParse_ReadHints(FileInfo *file_info, FILE *hfile, FILE *errfile)
               case VTK_PARSE_UNSIGNED_CHAR_PTR:
               case VTK_PARSE_CHAR_PTR:
                 {
-                if (func_info->ReturnValue &&
-                    func_info->ReturnValue->NumberOfDimensions == 0)
+                if (func_info->ReturnValue->NumberOfDimensions == 0)
                   {
                   char text[64];
-                  func_info->HaveHint = 1;
-                  func_info->HintSize = h_value;
-                  func_info->ReturnValue->Count = h_value;
                   sprintf(text, "%i", h_value);
+                  func_info->ReturnValue->Count = h_value;
                   vtkParse_AddStringToArray(
                     &func_info->ReturnValue->Dimensions,
                     &func_info->ReturnValue->NumberOfDimensions,
-                    vtkstrdup(text));
+                    vtkParse_CacheString(
+                      file_info->Strings, text, strlen(text)));
+#ifndef VTK_PARSE_LEGACY_REMOVE
+                  func_info->HaveHint = 1;
+                  func_info->HintSize = h_value;
+#endif
                   }
                 break;
                 }
@@ -10440,56 +9418,88 @@ int vtkParse_ReadHints(FileInfo *file_info, FILE *hfile, FILE *errfile)
 /* Free the FileInfo struct returned by vtkParse_ParseFile() */
 void vtkParse_Free(FileInfo *file_info)
 {
-  vtkParse_FreeNamespace(file_info->Contents);
-  file_info->Contents = NULL;
-}
-
-/* Set a property before parsing */
-void vtkParse_SetClassProperty(
-  const char *classname, const char *property)
-{
-   /* the only property recognized */
-   if (strcmp(property, "concrete") == 0 ||
-       strcmp(property, "CONCRETE") == 0 ||
-       strcmp(property, "Concrete") == 0)
-     {
-     vtkParse_AddStringToArray(&ConcreteClasses,
-                               &NumberOfConcreteClasses,
-                               vtkstrdup(classname));
-     }
+  vtkParse_FreeFile(file_info);
+  vtkParse_FreeStringCache(file_info->Strings);
+  free(file_info->Strings);
+  free(file_info);
 }
 
 /** Define a preprocessor macro. Function macros are not supported.  */
 void vtkParse_DefineMacro(const char *name, const char *definition)
 {
-  vtkParsePreprocess_AddMacro(&preprocessor, name, definition);
+  size_t n = vtkidlen(name);
+  size_t l;
+  char *cp;
+
+  if (definition == NULL)
+    {
+    definition = "";
+    }
+
+  l = n + strlen(definition) + 3;
+  cp = (char *)malloc(l);
+  cp[0] = 'D';
+  strncpy(&cp[1], name, n);
+  cp[n+1] = '\0';
+  if (definition[0] != '\0')
+    {
+    cp[n+1] = '=';
+    strcpy(&cp[n+2], definition);
+    }
+  cp[l] = '\0';
+
+  vtkParse_AddStringToArray(&Definitions, &NumberOfDefinitions, cp);
 }
 
 /** Undefine a preprocessor macro.  */
 void vtkParse_UndefineMacro(const char *name)
 {
-  vtkParsePreprocess_RemoveMacro(&preprocessor, name);
+  size_t n = vtkidlen(name);
+  char *cp;
+
+  cp = (char *)malloc(n+2);
+  cp[0] = 'U';
+  strncpy(&cp[1], name, n);
+  cp[n+1] = '\0';
+
+  vtkParse_AddStringToArray(&Definitions, &NumberOfDefinitions, cp);
 }
 
 /** Add an include directory, for use with the "-I" option.  */
 void vtkParse_IncludeDirectory(const char *dirname)
 {
-  vtkParsePreprocess_IncludeDirectory(&preprocessor, dirname);
+  size_t n = strlen(dirname);
+  char *cp;
+  int i;
+
+  for (i = 0; i < NumberOfIncludeDirectories; i++)
+    {
+    if (strncmp(IncludeDirectories[i], dirname, n) == 0 &&
+        IncludeDirectories[i][n] == '\0')
+      {
+      return;
+      }
+    }
+
+  cp = (char *)malloc(n+1);
+  strcpy(cp, dirname);
+
+  vtkParse_AddStringToArray(
+    &IncludeDirectories, &NumberOfIncludeDirectories, cp);
 }
 
 /** Return the full path to a header file.  */
 const char *vtkParse_FindIncludeFile(const char *filename)
 {
+  static PreprocessInfo info = {0, 0, 0, 0, 0, 0, 0, 0, 0};
   int val;
-  return vtkParsePreprocess_FindIncludeFile(&preprocessor, filename, 0, &val);
-}
+  int i;
 
-/** Simple utility for mapping VTK types to VTK_PARSE types */
-unsigned int vtkParse_MapType(int vtktype)
-{
-  if (vtktype > 0 && vtktype <= VTK_UNICODE_STRING)
+  /* add include files specified on the command line */
+  for (i = 0; i < NumberOfIncludeDirectories; i++)
     {
-    return vtkParseTypeMap[vtktype];
+    vtkParsePreprocess_IncludeDirectory(&info, IncludeDirectories[i]);
     }
-  return 0;
+
+  return vtkParsePreprocess_FindIncludeFile(&info, filename, 0, &val);
 }
diff --git a/src/ParaView/vtkParseData.c b/src/ParaView/vtkParseData.c
new file mode 100644 (file)
index 0000000..6b27e86
--- /dev/null
@@ -0,0 +1,935 @@
+/*=========================================================================
+
+  Program:   Visualization Toolkit
+  Module:    vtkParseData.c
+
+  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+  All rights reserved.
+  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
+
+     This software is distributed WITHOUT ANY WARRANTY; without even
+     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+     PURPOSE.  See the above copyright notice for more information.
+
+=========================================================================*/
+/*-------------------------------------------------------------------------
+  Copyright (c) 2010 David Gobbi.
+
+  Contributed to the VisualizationToolkit by the author in May 2010
+  under the terms of the Visualization Toolkit 2008 copyright.
+-------------------------------------------------------------------------*/
+
+#include "vtkParseData.h"
+#include <stdlib.h>
+#include <string.h>
+
+/* Initialize the FileInfo struct */
+void vtkParse_InitFile(FileInfo *file_info)
+{
+  /* file info */
+  file_info->FileName = NULL;
+  file_info->NameComment = NULL;
+  file_info->Description = NULL;
+  file_info->Caveats = NULL;
+  file_info->SeeAlso = NULL;
+
+  file_info->NumberOfIncludes = 0;
+  file_info->Includes = NULL;
+  file_info->MainClass = NULL;
+  file_info->Contents = NULL;
+
+  file_info->Strings = NULL;
+}
+
+/* Free the FileInfo struct */
+void vtkParse_FreeFile(FileInfo *file_info)
+{
+  int i, n;
+
+  n = file_info->NumberOfIncludes;
+  for (i = 0; i < n; i++)
+    {
+    vtkParse_FreeFile(file_info->Includes[i]);
+    free(file_info->Includes[i]);
+    }
+  if (file_info->Includes)
+    {
+    free(file_info->Includes);
+    }
+
+  vtkParse_FreeNamespace(file_info->Contents);
+  file_info->Contents = NULL;
+}
+
+/* Initialize a TemplateInfo struct */
+void vtkParse_InitTemplate(TemplateInfo *info)
+{
+  info->NumberOfParameters = 0;
+  info->Parameters = NULL;
+}
+
+/* Copy a TemplateInfo struct */
+void vtkParse_CopyTemplate(TemplateInfo *info, const TemplateInfo *orig)
+{
+  int i, n;
+
+  n = orig->NumberOfParameters;
+  info->NumberOfParameters = n;
+  info->Parameters = (ValueInfo **)malloc(n*sizeof(ValueInfo *));
+
+  for (i = 0; i < n; i++)
+    {
+    info->Parameters[i] = (ValueInfo *)malloc(sizeof(ValueInfo));
+    vtkParse_CopyValue(info->Parameters[i], orig->Parameters[i]);
+    }
+}
+
+/* Free a TemplateInfo struct */
+void vtkParse_FreeTemplate(TemplateInfo *template_info)
+{
+  int j, m;
+
+  m = template_info->NumberOfParameters;
+  for (j = 0; j < m; j++)
+    {
+    vtkParse_FreeValue(template_info->Parameters[j]);
+    }
+
+  free(template_info);
+}
+
+
+/* Initialize a Function struct */
+void vtkParse_InitFunction(FunctionInfo *func)
+{
+#ifndef VTK_PARSE_LEGACY_REMOVE
+  int i;
+#endif
+
+  func->ItemType = VTK_FUNCTION_INFO;
+  func->Access = VTK_ACCESS_PUBLIC;
+  func->Name = NULL;
+  func->Comment = NULL;
+  func->Class = NULL;
+  func->Signature = NULL;
+  func->Template = NULL;
+  func->NumberOfParameters = 0;
+  func->Parameters = NULL;
+  func->ReturnValue = NULL;
+  func->Macro = NULL;
+  func->SizeHint = NULL;
+  func->IsStatic = 0;
+  func->IsVirtual = 0;
+  func->IsPureVirtual = 0;
+  func->IsOperator = 0;
+  func->IsVariadic = 0;
+  func->IsConst = 0;
+  func->IsExplicit = 0;
+  func->IsLegacy = 0;
+
+#ifndef VTK_PARSE_LEGACY_REMOVE
+  /* everything below here is legacy information, *
+   * maintained only for backwards compatibility  */
+  func->NumberOfArguments = 0;
+  func->ReturnType = VTK_PARSE_VOID;
+  func->ReturnClass = NULL;
+  func->HaveHint = 0;
+  func->HintSize = 0;
+  func->ArrayFailure = 0;
+  func->IsPublic = 0;
+  func->IsProtected = 0;
+
+  for (i = 0; i < MAX_ARGS; i++)
+    {
+    func->ArgTypes[i] = 0;
+    func->ArgClasses[i] = 0;
+    func->ArgCounts[i] = 0;
+    }
+#endif
+}
+
+/* Copy a Function struct */
+void vtkParse_CopyFunction(FunctionInfo *func, const FunctionInfo *orig)
+{
+  int i, n;
+
+  func->ItemType = orig->ItemType;
+  func->Access = orig->Access;
+  func->Name = orig->Name;
+  func->Comment = orig->Comment;
+  func->Class = orig->Class;
+  func->Signature = orig->Signature;
+  func->Template = NULL;
+
+  if (orig->Template)
+    {
+    func->Template = (TemplateInfo *)malloc(sizeof(TemplateInfo));
+    vtkParse_CopyTemplate(func->Template, orig->Template);
+    }
+
+  n = orig->NumberOfParameters;
+  func->NumberOfParameters = n;
+  if (n)
+    {
+    func->Parameters = (ValueInfo **)malloc(n*sizeof(ValueInfo *));
+    for (i = 0; i < n; i++)
+      {
+      func->Parameters[i] = (ValueInfo *)malloc(sizeof(ValueInfo));
+      vtkParse_CopyValue(func->Parameters[i], orig->Parameters[i]);
+      }
+    }
+
+  func->ReturnValue = NULL;
+  if (orig->ReturnValue)
+    {
+    func->ReturnValue = (ValueInfo *)malloc(sizeof(ValueInfo));
+    vtkParse_CopyValue(func->ReturnValue, orig->ReturnValue);
+    }
+
+  func->Macro = orig->Macro;
+  func->SizeHint = orig->SizeHint;
+  func->IsStatic = orig->IsStatic;
+  func->IsVirtual = orig->IsVirtual;
+  func->IsPureVirtual = orig->IsPureVirtual;
+  func->IsOperator = orig->IsOperator;
+  func->IsVariadic = orig->IsVariadic;
+  func->IsConst = orig->IsConst;
+  func->IsExplicit = orig->IsExplicit;
+  func->IsLegacy = orig->IsLegacy;
+
+#ifndef VTK_PARSE_LEGACY_REMOVE
+  /* everything below here is legacy information, *
+   * maintained only for backwards compatibility  */
+  func->NumberOfArguments = orig->NumberOfArguments;
+  func->ReturnType = orig->ReturnType;
+  func->ReturnClass = orig->ReturnClass;
+  func->HaveHint = orig->HaveHint;
+  func->HintSize = orig->HintSize;
+  func->ArrayFailure = orig->ArrayFailure;
+  func->IsPublic = orig->IsPublic;
+  func->IsProtected = orig->IsProtected;
+
+  for (i = 0; i < MAX_ARGS; i++)
+    {
+    func->ArgTypes[i] = orig->ArgTypes[i];
+    func->ArgClasses[i] = orig->ArgClasses[i];
+    func->ArgCounts[i] = orig->ArgCounts[i];
+    }
+#endif
+}
+
+/* Free a Function struct */
+void vtkParse_FreeFunction(FunctionInfo *function_info)
+{
+  int j, m;
+
+  if (function_info->Template)
+    {
+    vtkParse_FreeTemplate(function_info->Template);
+    }
+
+  m = function_info->NumberOfParameters;
+  for (j = 0; j < m; j++) { vtkParse_FreeValue(function_info->Parameters[j]); }
+  if (m > 0) { free(function_info->Parameters); }
+
+  if (function_info->ReturnValue)
+    {
+    vtkParse_FreeValue(function_info->ReturnValue);
+    }
+
+  free(function_info);
+}
+
+
+/* Initialize a Value struct */
+void vtkParse_InitValue(ValueInfo *val)
+{
+  val->ItemType = VTK_VARIABLE_INFO;
+  val->Access = VTK_ACCESS_PUBLIC;
+  val->Name = NULL;
+  val->Comment = NULL;
+  val->Value = NULL;
+  val->Type = 0;
+  val->Class = NULL;
+  val->Count = 0;
+  val->CountHint = NULL;
+  val->NumberOfDimensions = 0;
+  val->Dimensions = NULL;
+  val->Function = NULL;
+  val->Template = NULL;
+  val->IsStatic = 0;
+  val->IsEnum = 0;
+}
+
+/* Copy a Value struct */
+void vtkParse_CopyValue(ValueInfo *val, const ValueInfo *orig)
+{
+  int i, n;
+
+  val->ItemType = orig->ItemType;
+  val->Access = orig->Access;
+  val->Name = orig->Name;
+  val->Comment = orig->Comment;
+  val->Value = orig->Value;
+  val->Type = orig->Type;
+  val->Class = orig->Class;
+  val->Count = orig->Count;
+  val->CountHint = orig->CountHint;
+
+  n = orig->NumberOfDimensions;
+  val->NumberOfDimensions = n;
+  if (n)
+    {
+    val->Dimensions = (const char **)malloc(n*sizeof(char *));
+    for (i = 0; i < n; i++)
+      {
+      val->Dimensions[i] = orig->Dimensions[i];
+      }
+    }
+
+  val->Function = NULL;
+  if (orig->Function)
+    {
+    val->Function = (FunctionInfo *)malloc(sizeof(FunctionInfo));
+    vtkParse_CopyFunction(val->Function, orig->Function);
+    }
+
+  val->Template = NULL;
+  if (orig->Template)
+    {
+    val->Template = (TemplateInfo *)malloc(sizeof(TemplateInfo));
+    vtkParse_CopyTemplate(val->Template, orig->Template);
+    }
+
+  val->IsStatic = orig->IsStatic;
+  val->IsEnum = orig->IsEnum;
+}
+
+/* Free a Value struct */
+void vtkParse_FreeValue(ValueInfo *value_info)
+{
+  if (value_info->NumberOfDimensions)
+    {
+    free((char **)value_info->Dimensions);
+    }
+  if (value_info->Function)
+    {
+    vtkParse_FreeFunction(value_info->Function);
+    }
+  if (value_info->Template)
+    {
+    vtkParse_FreeTemplate(value_info->Template);
+    }
+
+  free(value_info);
+}
+
+
+/* Initialize an Enum struct */
+void vtkParse_InitEnum(EnumInfo *item)
+{
+  item->ItemType = VTK_ENUM_INFO;
+  item->Access = VTK_ACCESS_PUBLIC;
+  item->Name = NULL;
+  item->Comment = NULL;
+}
+
+/* Copy an Enum struct */
+void vtkParse_CopyEnum(EnumInfo *item, const EnumInfo *orig)
+{
+  item->ItemType = orig->ItemType;
+  item->Access = orig->Access;
+  item->Name = orig->Name;
+  item->Comment = orig->Comment;
+}
+
+/* Free an Enum struct */
+void vtkParse_FreeEnum(EnumInfo *enum_info)
+{
+  free(enum_info);
+}
+
+
+/* Initialize a Using struct */
+void vtkParse_InitUsing(UsingInfo *item)
+{
+  item->ItemType = VTK_USING_INFO;
+  item->Access = VTK_ACCESS_PUBLIC;
+  item->Name = NULL;
+  item->Comment = NULL;
+  item->Scope = NULL;
+}
+
+/* Copy a Using struct */
+void vtkParse_CopyUsing(UsingInfo *item, const UsingInfo *orig)
+{
+  item->ItemType = orig->ItemType;
+  item->Access = orig->Access;
+  item->Name = orig->Name;
+  item->Comment = orig->Comment;
+  item->Scope = orig->Scope;
+}
+
+/* Free a Using struct */
+void vtkParse_FreeUsing(UsingInfo *using_info)
+{
+  free(using_info);
+}
+
+
+/* Initialize a Class struct */
+void vtkParse_InitClass(ClassInfo *cls)
+{
+  cls->ItemType = VTK_CLASS_INFO;
+  cls->Access = VTK_ACCESS_PUBLIC;
+  cls->Name = NULL;
+  cls->Comment = NULL;
+  cls->Template = NULL;
+  cls->NumberOfSuperClasses = 0;
+  cls->SuperClasses = NULL;
+  cls->NumberOfItems = 0;
+  cls->Items = NULL;
+  cls->NumberOfClasses = 0;
+  cls->Classes = NULL;
+  cls->NumberOfFunctions = 0;
+  cls->Functions = NULL;
+  cls->NumberOfConstants = 0;
+  cls->Constants = NULL;
+  cls->NumberOfVariables = 0;
+  cls->Variables = NULL;
+  cls->NumberOfEnums = 0;
+  cls->Enums = NULL;
+  cls->NumberOfTypedefs = 0;
+  cls->Typedefs = NULL;
+  cls->NumberOfUsings = 0;
+  cls->Usings = NULL;
+  cls->NumberOfNamespaces = 0;
+  cls->Namespaces = NULL;
+  cls->IsAbstract = 0;
+  cls->HasDelete = 0;
+}
+
+/* Copy a Class struct */
+void vtkParse_CopyClass(ClassInfo *cls, const ClassInfo *orig)
+{
+  int i, n;
+
+  cls->ItemType = orig->ItemType;
+  cls->Access = orig->Access;
+  cls->Name = orig->Name;
+  cls->Comment = orig->Comment;
+  cls->Template = NULL;
+
+  if (orig->Template)
+    {
+    cls->Template = (TemplateInfo *)malloc(sizeof(TemplateInfo));
+    vtkParse_CopyTemplate(cls->Template, orig->Template);
+    }
+
+  n = orig->NumberOfSuperClasses;
+  cls->NumberOfSuperClasses = n;
+  if (n)
+    {
+    cls->SuperClasses = (const char **)malloc(n*sizeof(char *));
+    for (i = 0; i < n; i++)
+      {
+      cls->SuperClasses[i] = orig->SuperClasses[i];
+      }
+    }
+
+  n = orig->NumberOfItems;
+  cls->NumberOfItems = n;
+  if (n)
+    {
+    cls->Items = (ItemInfo *)malloc(n*sizeof(ItemInfo));
+    for (i = 0; i < n; i++)
+      {
+      cls->Items[i].Type = orig->Items[i].Type;
+      cls->Items[i].Index = orig->Items[i].Index;
+      }
+    }
+
+  n = orig->NumberOfClasses;
+  cls->NumberOfClasses = n;
+  if (n)
+    {
+    cls->Classes = (ClassInfo **)malloc(n*sizeof(ClassInfo *));
+    for (i = 0; i < n; i++)
+      {
+      cls->Classes[i] = (ClassInfo *)malloc(sizeof(ClassInfo));
+      vtkParse_CopyClass(cls->Classes[i], orig->Classes[i]);
+      }
+    }
+
+  n = orig->NumberOfFunctions;
+  cls->NumberOfFunctions = n;
+  if (n)
+    {
+    cls->Functions = (FunctionInfo **)malloc(n*sizeof(FunctionInfo *));
+    for (i = 0; i < n; i++)
+      {
+      cls->Functions[i] = (FunctionInfo *)malloc(sizeof(FunctionInfo));
+      vtkParse_CopyFunction(cls->Functions[i], orig->Functions[i]);
+      }
+    }
+
+  n = orig->NumberOfConstants;
+  cls->NumberOfConstants = n;
+  if (n)
+    {
+    cls->Constants = (ValueInfo **)malloc(n*sizeof(ValueInfo *));
+    for (i = 0; i < n; i++)
+      {
+      cls->Constants[i] = (ValueInfo *)malloc(sizeof(ValueInfo));
+      vtkParse_CopyValue(cls->Constants[i], orig->Constants[i]);
+      }
+    }
+
+  n = orig->NumberOfVariables;
+  cls->NumberOfVariables = n;
+  if (n)
+    {
+    cls->Variables = (ValueInfo **)malloc(n*sizeof(ValueInfo *));
+    for (i = 0; i < n; i++)
+      {
+      cls->Variables[i] = (ValueInfo *)malloc(sizeof(ValueInfo));
+      vtkParse_CopyValue(cls->Variables[i], orig->Variables[i]);
+      }
+    }
+
+  n = orig->NumberOfEnums;
+  cls->NumberOfEnums = n;
+  if (n)
+    {
+    cls->Enums = (EnumInfo **)malloc(n*sizeof(EnumInfo *));
+    for (i = 0; i < n; i++)
+      {
+      cls->Enums[i] = (EnumInfo *)malloc(sizeof(EnumInfo));
+      vtkParse_CopyEnum(cls->Enums[i], orig->Enums[i]);
+      }
+    }
+
+  n = orig->NumberOfTypedefs;
+  cls->NumberOfTypedefs = n;
+  if (n)
+    {
+    cls->Typedefs = (ValueInfo **)malloc(n*sizeof(ValueInfo *));
+    for (i = 0; i < n; i++)
+      {
+      cls->Typedefs[i] = (ValueInfo *)malloc(sizeof(ValueInfo));
+      vtkParse_CopyValue(cls->Typedefs[i], orig->Typedefs[i]);
+      }
+    }
+
+  n = orig->NumberOfUsings;
+  cls->NumberOfUsings = n;
+  if (n)
+    {
+    cls->Usings = (UsingInfo **)malloc(n*sizeof(UsingInfo *));
+    for (i = 0; i < n; i++)
+      {
+      cls->Usings[i] = (UsingInfo *)malloc(sizeof(UsingInfo));
+      vtkParse_CopyUsing(cls->Usings[i], orig->Usings[i]);
+      }
+    }
+
+  n = orig->NumberOfNamespaces;
+  cls->NumberOfNamespaces = n;
+  if (n)
+    {
+    cls->Namespaces = (NamespaceInfo **)malloc(n*sizeof(NamespaceInfo *));
+    for (i = 0; i < n; i++)
+      {
+      cls->Namespaces[i] = (NamespaceInfo *)malloc(sizeof(NamespaceInfo));
+      vtkParse_CopyNamespace(cls->Namespaces[i], orig->Namespaces[i]);
+      }
+    }
+
+  cls->IsAbstract = orig->IsAbstract;
+  cls->HasDelete = orig->HasDelete;
+}
+
+/* Free a Class struct */
+void vtkParse_FreeClass(ClassInfo *class_info)
+{
+  int j, m;
+
+  if (class_info->Template) { vtkParse_FreeTemplate(class_info->Template); }
+
+  m = class_info->NumberOfSuperClasses;
+  if (m > 0) { free((char **)class_info->SuperClasses); }
+
+  m = class_info->NumberOfClasses;
+  for (j = 0; j < m; j++) { vtkParse_FreeClass(class_info->Classes[j]); }
+  if (m > 0) { free(class_info->Classes); }
+
+  m = class_info->NumberOfFunctions;
+  for (j = 0; j < m; j++) { vtkParse_FreeFunction(class_info->Functions[j]); }
+  if (m > 0) { free(class_info->Functions); }
+
+  m = class_info->NumberOfConstants;
+  for (j = 0; j < m; j++) { vtkParse_FreeValue(class_info->Constants[j]); }
+  if (m > 0) { free(class_info->Constants); }
+
+  m = class_info->NumberOfVariables;
+  for (j = 0; j < m; j++) { vtkParse_FreeValue(class_info->Variables[j]); }
+  if (m > 0) { free(class_info->Variables); }
+
+  m = class_info->NumberOfEnums;
+  for (j = 0; j < m; j++) { vtkParse_FreeEnum(class_info->Enums[j]); }
+  if (m > 0) { free(class_info->Enums); }
+
+  m = class_info->NumberOfTypedefs;
+  for (j = 0; j < m; j++) { vtkParse_FreeValue(class_info->Typedefs[j]); }
+  if (m > 0) { free(class_info->Typedefs); }
+
+  m = class_info->NumberOfUsings;
+  for (j = 0; j < m; j++) { vtkParse_FreeUsing(class_info->Usings[j]); }
+  if (m > 0) { free(class_info->Usings); }
+
+  m = class_info->NumberOfNamespaces;
+  for (j = 0; j < m; j++) { vtkParse_FreeNamespace(class_info->Namespaces[j]); }
+  if (m > 0) { free(class_info->Namespaces); }
+
+  if (class_info->NumberOfItems > 0) { free(class_info->Items); }
+
+  free(class_info);
+}
+
+
+/* Initialize a Namespace struct */
+void vtkParse_InitNamespace(NamespaceInfo *name_info)
+{
+  vtkParse_InitClass(name_info);
+  name_info->ItemType = VTK_NAMESPACE_INFO;
+}
+
+/* Copy a Namespace struct */
+void vtkParse_CopyNamespace(NamespaceInfo *ninfo, const NamespaceInfo *orig)
+{
+  vtkParse_CopyClass(ninfo, orig);
+}
+
+/* Free a Namespace struct */
+void vtkParse_FreeNamespace(NamespaceInfo *namespace_info)
+{
+  vtkParse_FreeClass(namespace_info);
+}
+
+
+/* This method is used for extending dynamic arrays in a progression of
+ * powers of two.  If "n" reaches a power of two, then the array size is
+ * doubled so that "n" can be safely incremented. */
+static void *array_size_check(
+  void *arraymem, size_t size, int n)
+{
+  /* if empty, alloc for the first time */
+  if (n == 0)
+    {
+    return malloc(size);
+    }
+  /* if count is power of two, reallocate with double size */
+  else if ((n & (n-1)) == 0)
+    {
+    return realloc(arraymem, (n << 1)*size);
+    }
+
+  /* no reallocation, just return the original array */
+  return arraymem;
+}
+
+
+/* Utility method to add an included file to a FileInfo */
+void vtkParse_AddIncludeToFile(
+  FileInfo *file_info, FileInfo *include_file)
+{
+  file_info->Includes = (FileInfo **)array_size_check(
+    (FileInfo **)file_info->Includes, sizeof(FileInfo *),
+    file_info->NumberOfIncludes);
+
+  file_info->Includes[file_info->NumberOfIncludes++] = include_file;
+
+  if (!include_file->Strings)
+    {
+    include_file->Strings = file_info->Strings;
+    }
+}
+
+/* Utility method to add a const char pointer to an array */
+void vtkParse_AddStringToArray(
+  const char ***valueArray, int *count, const char *value)
+{
+  *valueArray = (const char **)array_size_check(
+    (char **)*valueArray, sizeof(const char *), *count);
+
+  (*valueArray)[(*count)++] = value;
+}
+
+/* Utility method to add an item to an array */
+void vtkParse_AddItemToArray(
+  ItemInfo **valueArray, int *count, parse_item_t type, int idx)
+{
+  int n = *count;
+  ItemInfo *values = *valueArray;
+
+  values = (ItemInfo *)array_size_check(values, sizeof(ItemInfo), n);
+
+  values[n].Type = type;
+  values[n].Index = idx;
+  *count = n+1;
+  *valueArray = values;
+}
+
+/* Add a ClassInfo to a ClassInfo */
+void vtkParse_AddClassToClass(ClassInfo *info, ClassInfo *item)
+{
+  vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
+    item->ItemType, info->NumberOfClasses);
+  info->Classes = (ClassInfo **)array_size_check(
+    info->Classes, sizeof(ClassInfo *), info->NumberOfClasses);
+  info->Classes[info->NumberOfClasses++] = item;
+}
+
+/* Add a FunctionInfo to a ClassInfo */
+void vtkParse_AddFunctionToClass(ClassInfo *info, FunctionInfo *item)
+{
+  vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
+    item->ItemType, info->NumberOfFunctions);
+  info->Functions = (FunctionInfo **)array_size_check(
+    info->Functions, sizeof(FunctionInfo *), info->NumberOfFunctions);
+  info->Functions[info->NumberOfFunctions++] = item;
+}
+
+/* Add a EnumInfo to a ClassInfo */
+void vtkParse_AddEnumToClass(ClassInfo *info, EnumInfo *item)
+{
+  vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
+    item->ItemType, info->NumberOfEnums);
+  info->Enums = (EnumInfo **)array_size_check(
+    info->Enums, sizeof(EnumInfo *), info->NumberOfEnums);
+  info->Enums[info->NumberOfEnums++] = item;
+}
+
+/* Add a Constant ValueInfo to a ClassInfo */
+void vtkParse_AddConstantToClass(ClassInfo *info, ValueInfo *item)
+{
+  vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
+    item->ItemType, info->NumberOfConstants);
+  info->Constants = (ValueInfo **)array_size_check(
+    info->Constants, sizeof(ValueInfo *), info->NumberOfConstants);
+  info->Constants[info->NumberOfConstants++] = item;
+}
+
+/* Add a Variable ValueInfo to a ClassInfo */
+void vtkParse_AddVariableToClass(ClassInfo *info, ValueInfo *item)
+{
+  vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
+    item->ItemType, info->NumberOfVariables);
+  info->Variables = (ValueInfo **)array_size_check(
+    info->Variables, sizeof(ValueInfo *), info->NumberOfVariables);
+  info->Variables[info->NumberOfVariables++] = item;
+}
+
+/* Add a Typedef ValueInfo to a ClassInfo */
+void vtkParse_AddTypedefToClass(ClassInfo *info, ValueInfo *item)
+{
+  vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
+    item->ItemType, info->NumberOfTypedefs);
+  info->Typedefs = (ValueInfo **)array_size_check(
+    info->Typedefs, sizeof(ValueInfo *), info->NumberOfTypedefs);
+  info->Typedefs[info->NumberOfTypedefs++] = item;
+}
+
+/* Add a UsingInfo to a ClassInfo */
+void vtkParse_AddUsingToClass(ClassInfo *info, UsingInfo *item)
+{
+  vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
+    item->ItemType, info->NumberOfUsings);
+  info->Usings = (UsingInfo **)array_size_check(
+    info->Usings, sizeof(UsingInfo *), info->NumberOfUsings);
+  info->Usings[info->NumberOfUsings++] = item;
+}
+
+
+/* Add a NamespaceInfo to a NamespaceInfo */
+void vtkParse_AddNamespaceToNamespace(NamespaceInfo *info, NamespaceInfo *item)
+{
+  vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
+    item->ItemType, info->NumberOfNamespaces);
+  info->Namespaces = (NamespaceInfo **)array_size_check(
+    info->Namespaces, sizeof(NamespaceInfo *), info->NumberOfNamespaces);
+  info->Namespaces[info->NumberOfNamespaces++] = item;
+}
+
+/* Add a ClassInfo to a NamespaceInfo */
+void vtkParse_AddClassToNamespace(NamespaceInfo *info, ClassInfo *item)
+{
+  vtkParse_AddClassToClass(info, item);
+}
+
+/* Add a FunctionInfo to a NamespaceInfo */
+void vtkParse_AddFunctionToNamespace(NamespaceInfo *info, FunctionInfo *item)
+{
+  vtkParse_AddFunctionToClass(info, item);
+}
+
+/* Add a EnumInfo to a NamespaceInfo */
+void vtkParse_AddEnumToNamespace(NamespaceInfo *info, EnumInfo *item)
+{
+  vtkParse_AddEnumToClass(info, item);
+}
+
+/* Add a Constant ValueInfo to a NamespaceInfo */
+void vtkParse_AddConstantToNamespace(NamespaceInfo *info, ValueInfo *item)
+{
+  vtkParse_AddConstantToClass(info, item);
+}
+
+/* Add a Variable ValueInfo to a NamespaceInfo */
+void vtkParse_AddVariableToNamespace(NamespaceInfo *info, ValueInfo *item)
+{
+  vtkParse_AddVariableToClass(info, item);
+}
+
+/* Add a Typedef ValueInfo to a NamespaceInfo */
+void vtkParse_AddTypedefToNamespace(NamespaceInfo *info, ValueInfo *item)
+{
+  vtkParse_AddTypedefToClass(info, item);
+}
+
+/* Add a UsingInfo to a NamespaceInfo */
+void vtkParse_AddUsingToNamespace(NamespaceInfo *info, UsingInfo *item)
+{
+  vtkParse_AddUsingToClass(info, item);
+}
+
+
+/* Add a ValueInfo parameter to a FunctionInfo */
+void vtkParse_AddParameterToFunction(FunctionInfo *info, ValueInfo *item)
+{
+  info->Parameters = (ValueInfo **)array_size_check(
+    info->Parameters, sizeof(ValueInfo *), info->NumberOfParameters);
+  info->Parameters[info->NumberOfParameters++] = item;
+}
+
+
+/* Add a ValueInfo to a TemplateInfo */
+void vtkParse_AddParameterToTemplate(TemplateInfo *info, ValueInfo *item)
+{
+  info->Parameters = (ValueInfo **)array_size_check(
+    info->Parameters, sizeof(ValueInfo *), info->NumberOfParameters);
+  info->Parameters[info->NumberOfParameters++] = item;
+}
+
+
+/* Add default constructors if they do not already exist */
+void vtkParse_AddDefaultConstructors(ClassInfo *cls, StringCache *cache)
+{
+  FunctionInfo *func;
+  ValueInfo *param;
+  size_t k, l;
+  int i, n;
+  int default_constructor = 1;
+  int copy_constructor = 1;
+  char *tname;
+  const char *ccname;
+
+  if (cls == NULL || cls->Name == NULL)
+    {
+    return;
+    }
+
+  n = cls->NumberOfFunctions;
+  for (i = 0; i < n; i++)
+    {
+    func = cls->Functions[i];
+    if (func->Name && strcmp(func->Name, cls->Name) == 0)
+      {
+      default_constructor = 0;
+
+      if (func->NumberOfParameters == 1)
+        {
+        param = func->Parameters[0];
+        if (param->Class &&
+            strcmp(param->Class, cls->Name) == 0 &&
+            (param->Type & VTK_PARSE_POINTER_MASK) == 0)
+          {
+          copy_constructor = 0;
+          }
+        }
+      }
+    }
+
+  if (default_constructor)
+    {
+    func = (FunctionInfo *)malloc(sizeof(FunctionInfo));
+    vtkParse_InitFunction(func);
+    func->Class = cls->Name;
+    func->Name = cls->Name;
+    k = strlen(cls->Name);
+    tname = vtkParse_NewString(cache, k + 2);
+    strcpy(tname, cls->Name);
+    strcpy(&tname[k], "()");
+    func->Signature = tname;
+    vtkParse_AddFunctionToClass(cls, func);
+    }
+
+  if (copy_constructor)
+    {
+    ccname = cls->Name;
+
+    if (cls->Template)
+      {
+      /* specialize the name */
+      n = cls->Template->NumberOfParameters;
+
+      k = strlen(cls->Name) + 2;
+      for (i = 0; i < n; i++)
+        {
+        if (cls->Template->Parameters[i]->Name)
+          {
+          k += strlen(cls->Template->Parameters[i]->Name) + 2;
+          }
+        }
+      tname = vtkParse_NewString(cache, k);
+      strcpy(tname, cls->Name);
+      k = strlen(tname);
+      tname[k++] = '<';
+      for (i = 0; i < n; i++)
+        {
+        if (cls->Template->Parameters[i]->Name)
+          {
+          strcpy(&tname[k], cls->Template->Parameters[i]->Name);
+          k += strlen(cls->Template->Parameters[i]->Name);
+          }
+        if (i+1 < n)
+          {
+          tname[k++] = ',';
+          tname[k++] = ' ';
+          }
+        }
+      tname[k++] = '>';
+      tname[k] = '\0';
+      ccname = tname;
+      }
+
+    func = (FunctionInfo *)malloc(sizeof(FunctionInfo));
+    vtkParse_InitFunction(func);
+    func->Class = cls->Name;
+    func->Name = cls->Name;
+    k = strlen(cls->Name);
+    l = strlen(ccname);
+    tname = vtkParse_NewString(cache, k + l + 9);
+    strcpy(tname, cls->Name);
+    strcpy(&tname[k], "(const &");
+    strcpy(&tname[k+8], ccname);
+    strcpy(&tname[k+8+l], ")");
+    func->Signature = tname;
+    param = (ValueInfo *)malloc(sizeof(ValueInfo));
+    vtkParse_InitValue(param);
+    param->Type = (VTK_PARSE_OBJECT_REF | VTK_PARSE_CONST);
+    param->Class = ccname;
+    vtkParse_AddParameterToFunction(func, param);
+    vtkParse_AddFunctionToClass(cls, func);
+    }
+}
diff --git a/src/ParaView/vtkParseData.h b/src/ParaView/vtkParseData.h
new file mode 100644 (file)
index 0000000..cd03e67
--- /dev/null
@@ -0,0 +1,335 @@
+/*=========================================================================
+
+  Program:   Visualization Toolkit
+  Module:    vtkParseData.h
+
+  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+  All rights reserved.
+  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
+
+     This software is distributed WITHOUT ANY WARRANTY; without even
+     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+     PURPOSE.  See the above copyright notice for more information.
+
+=========================================================================*/
+/*-------------------------------------------------------------------------
+  Copyright (c) 2010 David Gobbi.
+
+  Contributed to the VisualizationToolkit by the author in May 2010
+  under the terms of the Visualization Toolkit 2008 copyright.
+-------------------------------------------------------------------------*/
+
+/*
+  Data structures used by vtkParse.
+*/
+
+#ifndef VTK_PARSE_DATA_H
+#define VTK_PARSE_DATA_H
+
+#include "vtkParseType.h"
+#include "vtkParseString.h"
+
+/* legacy */
+#ifndef VTK_PARSE_LEGACY_REMOVE
+#define MAX_ARGS 20
+#endif
+
+/**
+ * Access flags
+ */
+typedef enum _parse_access_t
+{
+  VTK_ACCESS_PUBLIC    = 0,
+  VTK_ACCESS_PROTECTED = 1,
+  VTK_ACCESS_PRIVATE   = 2
+} parse_access_t;
+
+/**
+ * ItemType constants
+ */
+typedef enum _parse_item_t
+{
+  VTK_NAMESPACE_INFO = 1,
+  VTK_CLASS_INFO     = 2,
+  VTK_STRUCT_INFO    = 3,
+  VTK_UNION_INFO     = 4,
+  VTK_ENUM_INFO      = 5,
+  VTK_FUNCTION_INFO  = 6,
+  VTK_VARIABLE_INFO  = 7,
+  VTK_CONSTANT_INFO  = 8,
+  VTK_TYPEDEF_INFO   = 9,
+  VTK_USING_INFO     = 10
+} parse_item_t;
+
+/**
+ * ItemInfo just contains an index
+ */
+typedef struct _ItemInfo
+{
+  parse_item_t   Type;
+  int            Index;
+} ItemInfo;
+
+/* forward declarations */
+struct _ValueInfo;
+struct _FunctionInfo;
+struct _FileInfo;
+typedef struct _ValueInfo ValueInfo;
+typedef struct _FunctionInfo FunctionInfo;
+typedef struct _FileInfo FileInfo;
+
+/**
+ * TemplateInfo holds template definitions
+ */
+typedef struct _TemplateInfo
+{
+  int            NumberOfParameters;
+  ValueInfo    **Parameters;
+} TemplateInfo;
+
+/**
+ * ValueInfo is for typedefs, constants, variables,
+ * function parameters, and return values
+ *
+ * Note that Dimensions is an array of char pointers, in
+ * order to support dimensions that are sized according to
+ * template parameter values or according to named constants.
+ */
+struct _ValueInfo
+{
+  parse_item_t   ItemType;
+  parse_access_t Access;
+  const char    *Name;
+  const char    *Comment;
+  const char    *Value;      /* for vars or default paramter values */
+  unsigned int   Type;       /* as defined in vtkParseType.h   */
+  const char    *Class;      /* classname for type */
+  int            Count;      /* total number of values, if known */
+  const char    *CountHint;  /* hint about how to get the count */
+  int            NumberOfDimensions; /* dimensionality for arrays */
+  const char   **Dimensions; /* dimensions for arrays */
+  FunctionInfo  *Function;  /* for function pointer values */
+  TemplateInfo  *Template;   /* template parameters, or NULL */
+  int            IsStatic;   /* for class variables only */
+  int            IsEnum;     /* for constants only */
+};
+
+/**
+ * FunctionInfo is for functions and methods
+ */
+struct _FunctionInfo
+{
+  parse_item_t   ItemType;
+  parse_access_t Access;
+  const char    *Name;
+  const char    *Comment;
+  const char    *Class;       /* class name for methods */
+  const char    *Signature;   /* function signature as text */
+  TemplateInfo  *Template;    /* template parameters, or NULL */
+  int            NumberOfParameters;
+  ValueInfo    **Parameters;
+  ValueInfo     *ReturnValue; /* NULL for constructors and destructors */
+  const char    *Macro;       /* the macro that defined this function */
+  const char    *SizeHint;    /* hint the size e.g. for operator[] */
+  int            IsOperator;
+  int            IsVariadic;
+  int            IsLegacy;    /* marked as a legacy method or function */
+  int            IsStatic;    /* methods only */
+  int            IsVirtual;   /* methods only */
+  int            IsPureVirtual; /* methods only */
+  int            IsConst;     /* methods only */
+  int            IsExplicit;  /* constructors only */
+#ifndef VTK_PARSE_LEGACY_REMOVE
+  int            NumberOfArguments;   /* legacy */
+  unsigned int   ArgTypes[MAX_ARGS];  /* legacy */
+  const char    *ArgClasses[MAX_ARGS];/* legacy */
+  int            ArgCounts[MAX_ARGS]; /* legacy */
+  unsigned int   ReturnType;  /* legacy */
+  const char    *ReturnClass; /* legacy */
+  int            HaveHint;    /* legacy */
+  int            HintSize;    /* legacy */
+  int            ArrayFailure;/* legacy */
+  int            IsPublic;    /* legacy */
+  int            IsProtected; /* legacy */
+#endif
+};
+
+/**
+ * EnumInfo is for enums
+ * Constants are at the same level as the Enum, not inside it.
+ */
+typedef struct _EnumInfo
+{
+  parse_item_t   ItemType;
+  parse_access_t Access;
+  const char    *Name;
+  const char    *Comment;
+} EnumInfo;
+
+/**
+ * UsingInfo is for using directives
+ */
+typedef struct _UsingInfo
+{
+  parse_item_t   ItemType;
+  parse_access_t Access;
+  const char    *Name;     /* null for using whole namespace */
+  const char    *Comment;
+  const char    *Scope;    /* the namespace or class */
+} UsingInfo;
+
+/**
+ * ClassInfo is for classes, structs, unions, and namespaces
+ */
+typedef struct _ClassInfo
+{
+  parse_item_t   ItemType;
+  parse_access_t Access;
+  const char    *Name;
+  const char    *Comment;
+  TemplateInfo  *Template;
+  int            NumberOfSuperClasses;
+  const char   **SuperClasses;
+  int            NumberOfItems;
+  ItemInfo      *Items;
+  int            NumberOfClasses;
+  struct _ClassInfo **Classes;
+  int            NumberOfFunctions;
+  FunctionInfo **Functions;
+  int            NumberOfConstants;
+  ValueInfo    **Constants;
+  int            NumberOfVariables;
+  ValueInfo    **Variables;
+  int            NumberOfEnums;
+  EnumInfo     **Enums;
+  int            NumberOfTypedefs;
+  ValueInfo    **Typedefs;
+  int            NumberOfUsings;
+  UsingInfo    **Usings;
+  int            NumberOfNamespaces;
+  struct _ClassInfo **Namespaces;
+  int            IsAbstract;
+  int            HasDelete;
+} ClassInfo;
+
+/**
+ * Namespace is for namespaces
+ */
+typedef struct _ClassInfo NamespaceInfo;
+
+/**
+ * FileInfo is for header files
+ */
+struct _FileInfo
+{
+  const char *FileName;
+  const char *NameComment;
+  const char *Description;
+  const char *Caveats;
+  const char *SeeAlso;
+
+  int NumberOfIncludes;
+  struct _FileInfo **Includes;
+  ClassInfo *MainClass;
+  NamespaceInfo *Contents;
+  StringCache *Strings;
+};
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Initializer methods
+ */
+/*@{*/
+void vtkParse_InitFile(FileInfo *file_info);
+void vtkParse_InitNamespace(NamespaceInfo *namespace_info);
+void vtkParse_InitClass(ClassInfo *cls);
+void vtkParse_InitFunction(FunctionInfo *func);
+void vtkParse_InitValue(ValueInfo *val);
+void vtkParse_InitEnum(EnumInfo *item);
+void vtkParse_InitUsing(UsingInfo *item);
+void vtkParse_InitTemplate(TemplateInfo *arg);
+/*@}*/
+
+/**
+ * Copy methods
+ *
+ * Strings are not deep-copied, they are assumed to be persistent.
+ */
+/*@{*/
+void vtkParse_CopyNamespace(NamespaceInfo *data, const NamespaceInfo *orig);
+void vtkParse_CopyClass(ClassInfo *data, const ClassInfo *orig);
+void vtkParse_CopyFunction(FunctionInfo *data, const FunctionInfo *orig);
+void vtkParse_CopyValue(ValueInfo *data, const ValueInfo *orig);
+void vtkParse_CopyEnum(EnumInfo *data, const EnumInfo *orig);
+void vtkParse_CopyUsing(UsingInfo *data, const UsingInfo *orig);
+void vtkParse_CopyTemplate(TemplateInfo *data, const TemplateInfo *orig);
+/*@}*/
+
+/**
+ * Free methods
+ *
+ * Strings are not freed, they are assumed to be persistent.
+ */
+/*@{*/
+void vtkParse_FreeFile(FileInfo *file_info);
+void vtkParse_FreeNamespace(NamespaceInfo *namespace_info);
+void vtkParse_FreeClass(ClassInfo *cls);
+void vtkParse_FreeFunction(FunctionInfo *func);
+void vtkParse_FreeValue(ValueInfo *val);
+void vtkParse_FreeEnum(EnumInfo *item);
+void vtkParse_FreeUsing(UsingInfo *item);
+void vtkParse_FreeTemplate(TemplateInfo *arg);
+/*@}*/
+
+
+/**
+ * Add a string to an array of strings, grow array as necessary.
+ */
+void vtkParse_AddStringToArray(
+  const char ***valueArray, int *count, const char *value);
+
+/**
+ * Expand the Item array for classes and namespaces.
+ */
+void vtkParse_AddItemToArray(
+  ItemInfo **valueArray, int *count, parse_item_t type, int idx);
+
+
+/**
+ * Add various items to the structs.
+ */
+/*@{*/
+void vtkParse_AddIncludeToFile(FileInfo *info, FileInfo *item);
+void vtkParse_AddClassToClass(ClassInfo *info, ClassInfo *item);
+void vtkParse_AddFunctionToClass(ClassInfo *info, FunctionInfo *item);
+void vtkParse_AddEnumToClass(ClassInfo *info, EnumInfo *item);
+void vtkParse_AddConstantToClass(ClassInfo *info, ValueInfo *item);
+void vtkParse_AddVariableToClass(ClassInfo *info, ValueInfo *item);
+void vtkParse_AddTypedefToClass(ClassInfo *info, ValueInfo *item);
+void vtkParse_AddUsingToClass(ClassInfo *info, UsingInfo *item);
+void vtkParse_AddNamespaceToNamespace(NamespaceInfo *info,NamespaceInfo *item);
+void vtkParse_AddClassToNamespace(NamespaceInfo *info, ClassInfo *item);
+void vtkParse_AddFunctionToNamespace(NamespaceInfo *info, FunctionInfo *item);
+void vtkParse_AddEnumToNamespace(NamespaceInfo *info, EnumInfo *item);
+void vtkParse_AddConstantToNamespace(NamespaceInfo *info, ValueInfo *item);
+void vtkParse_AddVariableToNamespace(NamespaceInfo *info, ValueInfo *item);
+void vtkParse_AddTypedefToNamespace(NamespaceInfo *info, ValueInfo *item);
+void vtkParse_AddUsingToNamespace(NamespaceInfo *info, UsingInfo *item);
+void vtkParse_AddParameterToFunction(FunctionInfo *info, ValueInfo *item);
+void vtkParse_AddParameterToTemplate(TemplateInfo *info, ValueInfo *item);
+/*@}*/
+
+/**
+ * Add default constructors to a class if they do not already exist
+ */
+void vtkParse_AddDefaultConstructors(ClassInfo *data, StringCache *cache);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
index 996b670f2037110dcaa72247591c511e399a7961..6504d3b8380fb204d1140e8a0fa32e45bf4760f4 100644 (file)
   under the terms of the Visualization Toolkit 2008 copyright.
 -------------------------------------------------------------------------*/
 
+#include "vtkParseExtras.h"
+#include "vtkParseString.h"
+#include "vtkType.h"
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <ctype.h>
 #include <assert.h>
-#include "vtkParse.h"
-#include "vtkParseInternal.h"
-#include "vtkParseExtras.h"
-#include "vtkType.h"
 
 /* skip over an identifier */
 static size_t vtkparse_id_len(const char *text)
@@ -112,7 +111,7 @@ static size_t vtkparse_quote_len(const char *text)
 }
 
 /* skip over an expression in brackets */
-size_t vtkparse_bracket_len(const char *text)
+static size_t vtkparse_bracket_len(const char *text)
 {
   size_t i = 0;
   size_t j = 1;
@@ -172,6 +171,7 @@ size_t vtkParse_UnscopedNameLength(const char *text)
     if (text[i-1] != '>')
       {
       fprintf(stderr, "Bad template args %*.*s\n", (int)i, (int)i, text);
+      assert(text[i-1] == '>');
       return 0;
       }
     }
@@ -196,8 +196,8 @@ size_t vtkParse_NameLength(const char *text)
 /* Search and replace, return the initial string if no replacements
  * occurred, otherwise return a new string. */
 static const char *vtkparse_string_replace(
-  const char *str1, int n, const char *name[], const char *val[],
-  int useDuplicateString)
+  StringCache *cache, const char *str1,
+  int n, const char *name[], const char *val[])
 {
   const char *cp = str1;
   char result_store[1024];
@@ -303,12 +303,12 @@ static const char *vtkparse_string_replace(
     result[j] = '\0';
     }
 
-  if (useDuplicateString)
+  if (cache)
     {
     if (any_replaced)
       {
-      /* use the efficient but leaky DuplicateString method */
-      cp = vtkParse_DuplicateString(result, j);
+      /* use the efficient CacheString method */
+      cp = vtkParse_CacheString(cache, result, j);
       if (result != result_store)
         {
         free(result);
@@ -336,14 +336,16 @@ static const char *vtkparse_string_replace(
 /* Wherever one of the specified names exists inside a Value or inside
  * a Dimension size, replace it with the corresponding val string. */
 void vtkParse_ExpandValues(
-  ValueInfo *valinfo, int n, const char *name[], const char *val[])
+  ValueInfo *valinfo, StringCache *cache,
+  int n, const char *name[], const char *val[])
 {
   int j, m, dim, count;
   const char *cp;
 
   if (valinfo->Value)
     {
-    valinfo->Value = vtkparse_string_replace(valinfo->Value, n, name, val, 1);
+    valinfo->Value = vtkparse_string_replace(
+      cache, valinfo->Value, n, name, val);
     }
 
   m = valinfo->NumberOfDimensions;
@@ -355,7 +357,7 @@ void vtkParse_ExpandValues(
       cp = valinfo->Dimensions[j];
       if (cp)
         {
-        cp = vtkparse_string_replace(cp, n, name, val, 1);
+        cp = vtkparse_string_replace(cache, cp, n, name, val);
         valinfo->Dimensions[j] = cp;
 
         /* check whether dimension has become an integer literal */
@@ -380,7 +382,8 @@ void vtkParse_ExpandValues(
 }
 
 /* Expand a typedef within a type declaration. */
-void vtkParse_ExpandTypedef(ValueInfo *valinfo, ValueInfo *typedefinfo)
+void vtkParse_ExpandTypedef(
+  ValueInfo *valinfo, ValueInfo *typedefinfo)
 {
   const char *classname;
   unsigned int baseType;
@@ -467,7 +470,8 @@ void vtkParse_ExpandTypedef(ValueInfo *valinfo, ValueInfo *typedefinfo)
 /* Expand any unrecognized types within a variable, parameter, or typedef
  * that match any of the supplied typedefs. The expansion is done in-place. */
 void vtkParse_ExpandTypedefs(
-  ValueInfo *val, int n, const char *names[], const char *values[],
+  ValueInfo *val, StringCache *cache,
+  int n, const char *names[], const char *values[],
   ValueInfo *typedefinfo[])
 {
   int i;
@@ -487,7 +491,8 @@ void vtkParse_ExpandTypedefs(
    if (i == n)
      {
      /* in case type appears as a template arg of another type */
-     val->Class = vtkparse_string_replace(val->Class, n, names, values, 1);
+     val->Class = vtkparse_string_replace(
+       cache, val->Class, n, names, values);
      }
    }
 }
@@ -497,9 +502,46 @@ struct vtk_type_struct
 {
   size_t len;
   const char *name;
-  int type;
+  unsigned int type;
 };
 
+/* Simple utility for mapping VTK types to VTK_PARSE types */
+unsigned int vtkParse_MapType(int vtktype)
+{
+  static unsigned int typemap[] =
+  {
+    VTK_PARSE_VOID,               /* VTK_VOID                0 */
+    0,                            /* VTK_BIT                 1 */
+    VTK_PARSE_CHAR,               /* VTK_CHAR                2 */
+    VTK_PARSE_UNSIGNED_CHAR,      /* VTK_UNSIGNED_CHAR       3 */
+    VTK_PARSE_SHORT,              /* VTK_SHORT               4 */
+    VTK_PARSE_UNSIGNED_SHORT,     /* VTK_UNSIGNED_SHORT      5 */
+    VTK_PARSE_INT,                /* VTK_INT                 6 */
+    VTK_PARSE_UNSIGNED_INT,       /* VTK_UNSIGNED_INT        7 */
+    VTK_PARSE_LONG,               /* VTK_LONG                8 */
+    VTK_PARSE_UNSIGNED_LONG,      /* VTK_UNSIGNED_LONG       9 */
+    VTK_PARSE_FLOAT,              /* VTK_FLOAT              10 */
+    VTK_PARSE_DOUBLE,             /* VTK_DOUBLE             11 */
+    VTK_PARSE_ID_TYPE,            /* VTK_ID_TYPE            12 */
+    VTK_PARSE_STRING,             /* VTK_STRING             13 */
+    0,                            /* VTK_OPAQUE             14 */
+    VTK_PARSE_SIGNED_CHAR,        /* VTK_SIGNED_CHAR        15 */
+    VTK_PARSE_LONG_LONG,          /* VTK_LONG_LONG          16 */
+    VTK_PARSE_UNSIGNED_LONG_LONG, /* VTK_UNSIGNED_LONG_LONG 17 */
+    VTK_PARSE___INT64,            /* VTK___INT64            18 */
+    VTK_PARSE_UNSIGNED___INT64,   /* VTK_UNSIGNED___INT64   19 */
+    0,                            /* VTK_VARIANT            20 */
+    0,                            /* VTK_OBJECT             21 */
+    VTK_PARSE_UNICODE_STRING      /* VTK_UNICODE_STRING     22 */
+    };
+
+  if (vtktype > 0 && vtktype <= VTK_UNICODE_STRING)
+    {
+    return typemap[vtktype];
+    }
+  return 0;
+}
+
 /* Get a type from a type name, and return the number of characters used.
  * If the "classname" argument is not NULL, then it is used to return
  * the short name for the type, e.g. "long int" becomes "long", while
@@ -602,7 +644,12 @@ size_t vtkParse_BasicTypeFromString(
       }
     else if (n == 4 && strncmp(cp, "long", n) == 0)
       {
-      if (base_bits == VTK_PARSE_LONG)
+      if (base_bits == VTK_PARSE_DOUBLE)
+        {
+        classname = "long double";
+        base_bits = VTK_PARSE_LONG_DOUBLE;
+        }
+      else if (base_bits == VTK_PARSE_LONG)
         {
         classname = "long long";
         base_bits = VTK_PARSE_LONG_LONG;
@@ -638,8 +685,16 @@ size_t vtkParse_BasicTypeFromString(
       }
     else if (n == 6 && strncmp(cp, "double", n) == 0)
       {
-      classname = "double";
-      base_bits = VTK_PARSE_DOUBLE;
+      if (base_bits == VTK_PARSE_LONG)
+        {
+        classname = "long double";
+        base_bits = VTK_PARSE_LONG_DOUBLE;
+        }
+      else
+        {
+        classname = "double";
+        base_bits = VTK_PARSE_DOUBLE;
+        }
       }
     else if (n == 4 && strncmp(cp, "bool", n) == 0)
       {
@@ -683,9 +738,7 @@ size_t vtkParse_BasicTypeFromString(
         m = 0;
         if (strncmp(cp, "::", 2) == 0) { m = 2; }
         else if (strncmp(cp, "std::", 5) == 0) { m = 5; }
-#ifndef VTK_LEGACY_REMOVE
         else if (strncmp(cp, "vtkstd::", 8) == 0) { m = 8; }
-#endif
 
         /* advance past the namespace */
         tmpcp = cp + m;
@@ -783,7 +836,8 @@ size_t vtkParse_BasicTypeFromString(
 }
 
 /* Parse a type description in "text" and generate a typedef named "name" */
-void vtkParse_ValueInfoFromString(ValueInfo *data, const char *text)
+size_t vtkParse_ValueInfoFromString(
+  ValueInfo *data, StringCache *cache, const char *text)
 {
   const char *cp = text;
   size_t n;
@@ -796,7 +850,7 @@ void vtkParse_ValueInfoFromString(ValueInfo *data, const char *text)
   /* get the basic type with qualifiers */
   cp += vtkParse_BasicTypeFromString(cp, &base_bits, &classname, &n);
 
-  data->Class = vtkParse_DuplicateString(classname, n);
+  data->Class = vtkParse_CacheString(cache, classname, n);
 
   if ((base_bits & VTK_PARSE_STATIC) != 0)
     {
@@ -841,7 +895,7 @@ void vtkParse_ValueInfoFromString(ValueInfo *data, const char *text)
     {
     /* skip all chars that are part of a name */
     n = vtkparse_id_len(cp);
-    data->Name = vtkParse_DuplicateString(cp, n);
+    data->Name = vtkParse_CacheString(cache, cp, n);
     cp += n;
     while (*cp == ' ' || *cp == '\t') { cp++; }
     }
@@ -855,16 +909,17 @@ void vtkParse_ValueInfoFromString(ValueInfo *data, const char *text)
   while (*cp == '[')
     {
     n = vtkparse_bracket_len(cp);
-    if (n > 0)
+    if (n > 1)
       {
       cp++;
-      n--;
+      n -= 2;
       }
     while (*cp == ' ' || *cp == '\t') { cp++; n--; }
     while (n > 0 && (cp[n-1] == ' ' || cp[n-1] == '\t')) { n--; }
-    vtkParse_AddStringToArray(&data->Dimensions,
-                              &data->NumberOfDimensions,
-                              vtkParse_DuplicateString(cp, n));
+    vtkParse_AddStringToArray(
+      &data->Dimensions,
+      &data->NumberOfDimensions,
+      vtkParse_CacheString(cache, cp, n));
     m = 0;
     if (*cp >= '0' && *cp <= '9' && vtkparse_number_len(cp) == n)
       {
@@ -874,7 +929,7 @@ void vtkParse_ValueInfoFromString(ValueInfo *data, const char *text)
 
     cp += n;
     while (*cp == ' ' || *cp == '\t') { cp++; }
-    if (cp[n] == ']') { cp++; }
+    if (*cp == ']') { cp++; }
     while (*cp == ' ' || *cp == '\t') { cp++; }
     }
 
@@ -892,52 +947,196 @@ void vtkParse_ValueInfoFromString(ValueInfo *data, const char *text)
   /* (Add code here to look for "=" followed by a value ) */
 
   data->Type = (pointer_bits | ref_bits | base_bits);
+
+  return (cp - text);
 }
 
+/* Generate a C++ declaration string from a ValueInfo struct */
+const char *vtkParse_ValueInfoToString(
+  ValueInfo *data, int *needs_free)
+{
+  unsigned int pointer_bits = (data->Type & VTK_PARSE_POINTER_MASK);
+  unsigned int ref_bits = (data->Type & VTK_PARSE_REF);
+  unsigned int qualifier_bits = (data->Type & VTK_PARSE_CONST);
+  unsigned int reverse_bits = 0;
+  unsigned int pointer_type = 0;
+  const char *classname = data->Class;
+  const char *name = data->Name;
+  char *text = NULL;
+  size_t i = 0;
+  size_t l;
+  int j = 0;
+
+  if (pointer_bits == 0 && ref_bits == 0 && qualifier_bits == 0 &&
+      name == NULL)
+    {
+    if (needs_free)
+      {
+      *needs_free = 0;
+      }
+    return classname;
+    }
+
+  /* compute the length of string to allocate */
+  l = 6; /* for const */
+  l += 4*7; /* for pointers */
+  l += 1; /* for ref */
+  l += strlen(classname) + 1; /* for type */
+  for (j = 0; j < data->NumberOfDimensions; j++)
+    {
+    l += 2 + strlen(data->Dimensions[j]);
+    }
+  l++; /* for NULL */
+  l += 4; /* for safety */
+
+  text = (char *)malloc(l);
+
+  if ((qualifier_bits & VTK_PARSE_CONST) != 0)
+    {
+    strcpy(&text[i], "const ");
+    i += 6;
+    }
+
+  strcpy(&text[i], classname);
+  i += strlen(classname);
+  text[i++] = ' ';
+
+  while (pointer_bits != 0)
+    {
+    reverse_bits <<= 2;
+    reverse_bits |= (pointer_bits & VTK_PARSE_POINTER_LOWMASK);
+    pointer_bits = ((pointer_bits >> 2) & VTK_PARSE_POINTER_MASK);
+    }
+
+  while (reverse_bits != 0)
+    {
+    pointer_type = (reverse_bits & VTK_PARSE_POINTER_LOWMASK);
+    if (pointer_type == VTK_PARSE_ARRAY ||
+        (reverse_bits == VTK_PARSE_POINTER &&
+         data->NumberOfDimensions > 0))
+      {
+      break;
+      }
+    else if (pointer_type == VTK_PARSE_POINTER)
+      {
+      text[i++] = '*';
+      }
+    else if (pointer_type == VTK_PARSE_CONST_POINTER)
+      {
+      strcpy(&text[i], "*const ");
+      i += 7;
+      }
 
+    reverse_bits = ((reverse_bits >> 2) & VTK_PARSE_POINTER_MASK);
+    }
+
+  if (ref_bits)
+    {
+    text[i++] = '&';
+    }
+
+  if (name)
+    {
+    strcpy(&text[i], name);
+    i += strlen(name);
+    }
+
+  for (j = 0; j < data->NumberOfDimensions; j++)
+    {
+    text[i++] = '[';
+    if (data->Dimensions[j])
+      {
+      strcpy(&text[i], data->Dimensions[j]);
+      i += strlen(data->Dimensions[j]);
+      }
+    text[i++] = ']';
+    }
+
+  text[i] = '\0';
+
+  /* make sure enough space was allocated */
+  assert(i < l);
+
+  if (needs_free)
+    {
+    *needs_free = 1;
+    }
+
+  return text;
+}
+
+/* Search and replace, return the initial string if no replacements
+ * occurred, otherwise return a new string allocated with malloc. */
+const char *vtkParse_StringReplace(
+  const char *str1, int n, const char *name[], const char *val[])
+{
+  return vtkparse_string_replace(NULL, str1, n, name, val);
+}
 
 /* substitute generic types and values with actual types and values */
 static void func_substitution(
-  FunctionInfo *data, int m, const char *arg_names[],
+  FunctionInfo *data, StringCache *cache,
+  int m, const char *arg_names[],
   const char *arg_values[], ValueInfo *arg_types[]);
 
 static void value_substitution(
-  ValueInfo *data, int m, const char *arg_names[],
+  ValueInfo *data, StringCache *cache,
+  int m, const char *arg_names[],
   const char *arg_values[], ValueInfo *arg_types[])
 {
-  vtkParse_ExpandTypedefs(data, m, arg_names, arg_values, arg_types);
-  vtkParse_ExpandValues(data, m, arg_names, arg_values);
+  vtkParse_ExpandTypedefs(data, cache, m, arg_names, arg_values, arg_types);
+  vtkParse_ExpandValues(data, cache, m, arg_names, arg_values);
 
   if (data->Function)
     {
-    func_substitution(data->Function, m, arg_names, arg_values, arg_types);
+    func_substitution(
+      data->Function, cache, m, arg_names, arg_values, arg_types);
     }
 }
 
 static void func_substitution(
-  FunctionInfo *data, int m, const char *arg_names[],
+  FunctionInfo *data, StringCache *cache,
+  int m, const char *arg_names[],
   const char *arg_values[], ValueInfo *arg_types[])
 {
   int i, n;
 
+  n = data->NumberOfParameters;
+  for (i = 0; i < n; i++)
+    {
+    value_substitution(
+      data->Parameters[i], cache, m, arg_names, arg_values, arg_types);
+    }
+
+  if (data->ReturnValue)
+    {
+    value_substitution(
+      data->ReturnValue, cache, m, arg_names, arg_values, arg_types);
+    }
+
+  if (data->Signature)
+    {
+    data->Signature =
+      vtkparse_string_replace(
+        cache, data->Signature, m, arg_names, arg_values);
+    }
+
+  /* legacy information for old wrappers */
+#ifndef VTK_PARSE_LEGACY_REMOVE
   n = data->NumberOfArguments;
   for (i = 0; i < n; i++)
     {
-    value_substitution(data->Arguments[i], m, arg_names, arg_values, arg_types);
-    if (i < MAX_ARGS)
+    data->ArgTypes[i] = data->Parameters[i]->Type;
+    data->ArgClasses[i] = data->Parameters[i]->Class;
+    if (data->Parameters[i]->NumberOfDimensions == 1 &&
+        data->Parameters[i]->Count > 0)
       {
-      data->ArgTypes[i] = data->Arguments[i]->Type;
-      data->ArgClasses[i] = data->Arguments[i]->Class;
-      if (data->Arguments[i]->NumberOfDimensions == 1 &&
-          data->Arguments[i]->Count > 0)
-        {
-        data->ArgCounts[i] = data->Arguments[i]->Count;
-        }
+      data->ArgCounts[i] = data->Parameters[i]->Count;
       }
     }
+
   if (data->ReturnValue)
     {
-    value_substitution(data->ReturnValue, m, arg_names, arg_values, arg_types);
     data->ReturnType = data->ReturnValue->Type;
     data->ReturnClass = data->ReturnValue->Class;
     if (data->ReturnValue->NumberOfDimensions == 1 &&
@@ -947,15 +1146,12 @@ static void func_substitution(
       data->HaveHint = 1;
       }
     }
-  if (data->Signature)
-    {
-    data->Signature =
-      vtkparse_string_replace(data->Signature, m, arg_names, arg_values, 1);
-    }
+#endif /* VTK_PARSE_LEGACY_REMOVE */
 }
 
 static void class_substitution(
-  ClassInfo *data, int m, const char *arg_names[],
+  ClassInfo *data, StringCache *cache,
+  int m, const char *arg_names[],
   const char *arg_values[], ValueInfo *arg_types[])
 {
   int i, n;
@@ -965,49 +1161,45 @@ static void class_substitution(
   for (i = 0; i < n; i++)
     {
     data->SuperClasses[i] = vtkparse_string_replace(
-      data->SuperClasses[i], m, arg_names, arg_values, 1);
+      cache, data->SuperClasses[i], m, arg_names, arg_values);
     }
 
   n = data->NumberOfClasses;
   for (i = 0; i < n; i++)
     {
-    class_substitution(data->Classes[i], m, arg_names, arg_values, arg_types);
+    class_substitution(
+      data->Classes[i], cache, m, arg_names, arg_values, arg_types);
     }
 
   n = data->NumberOfFunctions;
   for (i = 0; i < n; i++)
     {
-    func_substitution(data->Functions[i], m, arg_names, arg_values, arg_types);
+    func_substitution(
+      data->Functions[i], cache, m, arg_names, arg_values, arg_types);
     }
 
   n = data->NumberOfConstants;
   for (i = 0; i < n; i++)
     {
-    value_substitution(data->Constants[i], m, arg_names, arg_values, arg_types);
+    value_substitution(
+      data->Constants[i], cache, m, arg_names, arg_values, arg_types);
     }
 
   n = data->NumberOfVariables;
   for (i = 0; i < n; i++)
     {
-    value_substitution(data->Variables[i], m, arg_names, arg_values, arg_types);
+    value_substitution(
+      data->Variables[i], cache, m, arg_names, arg_values, arg_types);
     }
 
   n = data->NumberOfTypedefs;
   for (i = 0; i < n; i++)
     {
-    value_substitution(data->Typedefs[i], m, arg_names, arg_values, arg_types);
+    value_substitution(
+      data->Typedefs[i], cache, m, arg_names, arg_values, arg_types);
     }
 }
 
-
-/* Search and replace, return the initial string if no replacements
- * occurred, otherwise return a new string allocated with malloc. */
-const char *vtkParse_StringReplace(
-  const char *str1, int n, const char *name[], const char *val[])
-{
-  return vtkparse_string_replace(str1, n, name, val, 0);
-}
-
 /* Extract template args from a comma-separated list enclosed
  * in angle brackets.  Returns zero if no angle brackets found. */
 size_t vtkParse_DecomposeTemplatedType(
@@ -1031,10 +1223,13 @@ size_t vtkParse_DecomposeTemplatedType(
       }
     }
 
-  new_text = (char *)malloc(i + 1);
-  strncpy(new_text, text, i);
-  new_text[i] = '\0';
-  *classname = new_text;
+  if (classname)
+    {
+    new_text = (char *)malloc(i + 1);
+    strncpy(new_text, text, i);
+    new_text[i] = '\0';
+    *classname = new_text;
+    }
 
   if (text[i] == '<')
     {
@@ -1119,12 +1314,11 @@ void vtkParse_FreeTemplateDecomposition(
     }
 }
 
-
 /* Instantiate a class template by substituting the provided arguments. */
 void vtkParse_InstantiateClassTemplate(
-  ClassInfo *data, int n, const char *args[])
+  ClassInfo *data, StringCache *cache, int n, const char *args[])
 {
-  TemplateArgs *t = data->Template;
+  TemplateInfo *t = data->Template;
   const char **new_args = NULL;
   const char **arg_names = NULL;
   ValueInfo **arg_types = NULL;
@@ -1139,7 +1333,7 @@ void vtkParse_InstantiateClassTemplate(
     return;
     }
 
-  m = t->NumberOfArguments;
+  m = t->NumberOfParameters;
   if (n > m)
     {
     fprintf(stderr, "vtkParse_InstantiateClassTemplate: "
@@ -1149,8 +1343,8 @@ void vtkParse_InstantiateClassTemplate(
 
   for (i = n; i < m; i++)
     {
-    if (t->Arguments[i]->Value == NULL ||
-        t->Arguments[i]->Value[0] == '\0')
+    if (t->Parameters[i]->Value == NULL ||
+        t->Parameters[i]->Value[0] == '\0')
       {
       fprintf(stderr, "vtkParse_InstantiateClassTemplate: "
               "too few template args.\n");
@@ -1158,31 +1352,28 @@ void vtkParse_InstantiateClassTemplate(
       }
     }
 
-  if (n < m)
+  new_args = (const char **)malloc(m*sizeof(char **));
+  for (i = 0; i < n; i++)
     {
-    new_args = (const char **)malloc(m*sizeof(char **));
-    for (i = 0; i < n; i++)
-      {
-      new_args[i] = args[i];
-      }
-    for (i = n; i < m; i++)
-      {
-      new_args[i] = t->Arguments[i]->Value;
-      }
-    args = new_args;
+    new_args[i] = args[i];
+    }
+  for (i = n; i < m; i++)
+    {
+    new_args[i] = t->Parameters[i]->Value;
     }
+  args = new_args;
 
   arg_names = (const char **)malloc(m*sizeof(char **));
   arg_types = (ValueInfo **)malloc(m*sizeof(ValueInfo *));
   for (i = 0; i < m; i++)
     {
-    arg_names[i] = t->Arguments[i]->Name;
+    arg_names[i] = t->Parameters[i]->Name;
     arg_types[i] = NULL;
-    if (t->Arguments[i]->Type == 0)
+    if (t->Parameters[i]->Type == 0)
       {
       arg_types[i] = (ValueInfo *)malloc(sizeof(ValueInfo));
       vtkParse_InitValue(arg_types[i]);
-      vtkParse_ValueInfoFromString(arg_types[i], args[i]);
+      vtkParse_ValueInfoFromString(arg_types[i], cache, args[i]);
       arg_types[i]->ItemType = VTK_TYPEDEF_INFO;
       arg_types[i]->Name = arg_names[i];
       }
@@ -1191,7 +1382,7 @@ void vtkParse_InstantiateClassTemplate(
   /* no longer a template (has been instantiated) */
   if (data->Template)
     {
-    vtkParse_FreeTemplateArgs(data->Template);
+    vtkParse_FreeTemplate(data->Template);
     }
   data->Template = NULL;
 
@@ -1221,18 +1412,15 @@ void vtkParse_InstantiateClassTemplate(
     }
   new_name[k++] = '>';
   new_name[k] = '\0';
-  data->Name = vtkParse_DuplicateString(new_name, k);
-  free((char *)new_name);
+
+  data->Name = vtkParse_CacheString(cache, new_name, k);
+  free(new_name);
 
   /* do the template arg substitution */
-  class_substitution(data, m, arg_names, args, arg_types);
+  class_substitution(data, cache, m, arg_names, args, arg_types);
 
   /* free all allocated arrays */
-  if (new_args)
-    {
-    free((char **)new_args);
-    }
-
+  free((char **)new_args);
   free((char **)arg_names);
 
   for (i = 0; i < m; i++)
@@ -1245,295 +1433,6 @@ void vtkParse_InstantiateClassTemplate(
   free(arg_types);
 }
 
-/* Generate a mangled name for a type, use gcc ia64 ABI.
- * The result is placed in new_name, which must be large enough
- * to accept the result.  This function is incomplete, it cannot
- * handle function types, or any literals except for integer literals. */
-size_t vtkParse_MangledTypeName(const char *name, char *new_name)
-{
-  int scoped = 0;
-  unsigned int ptype = 0;
-  size_t j, k, m;
-  size_t i = 0;
-  const char *cp;
-  char basictype;
-
-  m = vtkParse_BasicTypeFromString(name, &ptype, NULL, NULL);
-
-  /* look for pointers */
-  cp = &name[m];
-  while (*cp == ' ' || *cp == '\t') { cp++; }
-  while (*cp == '*')
-    {
-    do { cp++; } while (*cp == ' ' || *cp == '\t');
-    if (*cp == 'c' && strncmp(cp, "const", 5) == 0 &&
-        ((cp[5] < 'A' || cp[5] > 'Z') &&
-         (cp[5] < 'a' || cp[5] > 'z') &&
-         (cp[5] < '0' || cp[5] > '9') &&
-         cp[5] != '_'))
-      {
-      cp += 4;
-      do { cp++; } while (*cp == ' ' || *cp == '\t');
-      new_name[i++] = 'K';
-      }
-    new_name[i++] = 'P';
-    }
-
-  /* prepend reference if present */
-  if (*cp == '&')
-    {
-    do { cp++; } while (*cp == ' ' || *cp == '\t');
-    for (k = i; k > 0; --k)
-      {
-      new_name[k] = new_name[k-1];
-      }
-    new_name[0] = 'R';
-    i++;
-    }
-
-  /* array brackets are not handled */
-
-  /* qualifiers */
-  if (ptype & VTK_PARSE_CONST)
-    {
-    new_name[i++] = 'K';
-    }
-
-  /* types: the following are unused
-   *  'w' -> wchar_t
-   *  'n' -> __int128
-   *  'o' -> unsigned __int128
-   *  'e' -> __float80
-   *  'g' -> __float128
-   *  'z' -> ... (varargs)
-   */
-
-  basictype = '\0';
-  switch (ptype & VTK_PARSE_BASE_TYPE)
-    {
-    case VTK_PARSE_VOID:
-      basictype = 'v';
-      break;
-    case VTK_PARSE_BOOL:
-      basictype = 'b';
-      break;
-    case VTK_PARSE_CHAR:
-      basictype = 'c';
-      break;
-    case VTK_PARSE_SIGNED_CHAR:
-      basictype = 'a';
-      break;
-    case VTK_PARSE_UNSIGNED_CHAR:
-      basictype = 'h';
-      break;
-    case VTK_PARSE_SHORT:
-      basictype = 's';
-      break;
-    case VTK_PARSE_UNSIGNED_SHORT:
-      basictype = 't';
-      break;
-    case VTK_PARSE_INT:
-      basictype = 'i';
-      break;
-    case VTK_PARSE_UNSIGNED_INT:
-      basictype = 'j';
-      break;
-    case VTK_PARSE_LONG:
-      basictype = 'l';
-      break;
-    case VTK_PARSE_UNSIGNED_LONG:
-      basictype = 'm';
-      break;
-    case VTK_PARSE_LONG_LONG:
-    case VTK_PARSE___INT64:
-      basictype = 'x';
-      break;
-    case VTK_PARSE_UNSIGNED_LONG_LONG:
-    case VTK_PARSE_UNSIGNED___INT64:
-      basictype = 'y';
-      break;
-    case VTK_PARSE_FLOAT:
-      basictype = 'f';
-      break;
-    case VTK_PARSE_DOUBLE:
-      basictype = 'd';
-      break;
-    }
-
-  if (basictype)
-    {
-    new_name[i++] = basictype;
-    new_name[i] = '\0';
-    return (size_t)(cp - name);
-    }
-
-  m = 0;
-  cp = name;
-  do
-    {
-    cp += m;
-    while (*cp == ' ' || *cp == '\t') { cp++; }
-    m = vtkParse_UnscopedNameLength(cp);
-    }
-  while ((m == 5 && strncmp("const", cp, 5) == 0) ||
-         (m == 8 && strncmp("volatile", cp, 8) == 0));
-
-  if (cp[m] == ':' && cp[m+1] == ':')
-    {
-    if (m == 3 && strncmp(cp, "std::", 5) == 0)
-      {
-      cp += 5;
-      m = vtkParse_UnscopedNameLength(cp);
-      if (cp[m] == ':' && cp[m+1] == ':')
-        {
-        new_name[i++] = 'N';
-        scoped = 1;
-        }
-      /* short form for "std::" */
-      new_name[i++] = 'S';
-      new_name[i++] = 't';
-      }
-    else
-      {
-      new_name[i++] = 'N';
-      scoped = 1;
-      }
-    }
-
-  do
-    {
-    if (cp[0] == ':' && cp[1] == ':')
-      {
-      cp += 2;
-      m = vtkParse_UnscopedNameLength(cp);
-      }
-
-    for (j = 0; j < m; j++)
-      {
-      if (cp[j] == '<')
-        {
-        break;
-        }
-      }
-
-    /* write out identifier length */
-    if (j >= 100) { new_name[i++] = '0' + (char)(j/100); }
-    if (j >= 10) { new_name[i++] = '0' + (char)((j%100)/10); }
-    new_name[i++] = '0' + (char)(j%10);
-
-    /* write out the identifier */
-    strncpy(&new_name[i], cp, j);
-    i += j;
-    cp += j;
-
-    /* handle template args */
-    if (*cp == '<')
-      {
-      new_name[i++] = 'I';
-      do
-        {
-        do { cp++; } while (*cp == ' ' || *cp == '\t');
-        m = 0;
-        if ((*cp >= '0' && *cp <= '9') ||
-            (*cp == '.' && cp[1] >= '0' && cp[1] <= '9') ||
-            *cp == '\'' || *cp == '\"')
-          {
-          m = vtkParse_MangledLiteral(cp, &new_name[i]);
-          }
-        else
-          {
-          m = vtkParse_MangledTypeName(cp, &new_name[i]);
-          }
-        if (m == 0)
-          {
-          return 0;
-          }
-        cp += m;
-        i = strlen(new_name);
-        while (*cp == ' ' || *cp == '\t') { cp++; }
-        }
-      while (*cp == ',');
-      new_name[i++] = 'E';
-      if (*cp != '>')
-        {
-        new_name[i] = '\0';
-        return 0;
-        }
-      cp++;
-      }
-    }
-  while (cp[0] == ':' && cp[1] == ':');
-
-  if (scoped)
-    {
-    new_name[i++] = 'E';
-    }
-
-  new_name[i] = '\0';
-
-  return (size_t)(cp - name);
-}
-
-/* Generate a mangled name for a literal, use gcc ia64 ABI. */
-size_t vtkParse_MangledLiteral(const char *name, char *new_name)
-{
-  const char *cp = name;
-  size_t i = 0;
-  char *tmp;
-
-  /* only decimal integers are supported for now */
-  if (*cp >= '0' && *cp <= '9')
-    {
-    /* reject octal and hexadecimal */
-    if (cp[0] == '0' && (cp[1] == 'x' || cp[1] == 'X' ||
-                         (cp[1] >= '0' && cp[1] <= '9')))
-      {
-      new_name[0] = '\0';
-      return 0;
-      }
-
-    new_name[i++] = 'L';
-    tmp = &new_name[i];
-    new_name[i++] = 'i';
-    do { new_name[i++] = *cp++; }
-    while (*cp >= '0' && *cp <= '9');
-
-    /* reject floats */
-    if (*cp == '.' || *cp == 'f' || *cp == 'e' || *cp == 'E')
-      {
-      new_name[0] = '\0';
-      return 0;
-      }
-
-    for (;;)
-      {
-      if (*cp == 'u' || *cp == 'U')
-        {
-        if (*tmp == 'i') { *tmp = 'j'; }
-        else if (*tmp == 'l') { *tmp = 'm'; }
-        else if (*tmp == 'x') { *tmp = 'y'; }
-        cp++;
-        }
-      else if (*cp == 'l' || *cp == 'L')
-        {
-        if (*tmp == 'i') { *tmp = 'l'; }
-        else if (*tmp == 'j') { *tmp = 'm'; }
-        else if (*tmp == 'l') { *tmp = 'x'; }
-        else if (*tmp == 'm') { *tmp = 'y'; }
-        cp++;
-        }
-      else
-        {
-        break;
-        }
-      }
-    new_name[i++] = 'E';
-    }
-  new_name[i] = '\0';
-
-  return (size_t)(cp - name);
-}
-
 /* Get a zero-terminated array of the types in vtkTemplateMacro. */
 const char **vtkParse_GetTemplateMacroTypes()
 {
index 5a552a6e84aa0a3b9e5addcb34fbbd3ee57ae33b..3f3dceca7bdb71bc7dbdc6df4ff58a638d9b4e51 100644 (file)
@@ -26,7 +26,8 @@
 #ifndef VTK_PARSE_EXTRAS_H
 #define VTK_PARSE_EXTRAS_H
 
-#include "vtkParse.h"
+#include "vtkParseData.h"
+#include <stddef.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -42,12 +43,15 @@ size_t vtkParse_IdentifierLength(const char *text);
 /**
  * Skip over a name, including any namespace prefixes and
  * any template arguments.  Return the number of characters.
+ * Examples are "name", "::name", "name<arg>", "name::name2",
+ * "::name::name2<arg1,arg2>".
  */
 size_t vtkParse_NameLength(const char *text);
 
 /**
- * Skip over a name, including any template parameters, but stopping
+ * Skip over a name, including any template arguments, but stopping
  * if a '::' is encoutered.  Return the number of characters.
+ * Examples are "name" and "name<arg>"
  */
 size_t vtkParse_UnscopedNameLength(const char *text);
 
@@ -73,8 +77,18 @@ size_t vtkParse_BasicTypeFromString(
 /**
  * Generate a ValueInfo by parsing the type from the provided text.
  * Only simple text strings are supported, e.g. "const T **".
+ * Returns the number of characters consumed.
  */
-void vtkParse_ValueInfoFromString(ValueInfo *val, const char *text);
+size_t vtkParse_ValueInfoFromString(
+  ValueInfo *val, StringCache *cache, const char *text);
+
+/**
+ * Generate a declaration string from a ValueInfo struct.  If the
+ * "nf" arg is set, the returned string must be freed.
+ * Only simple text strings are supported, e.g. "const T **".
+ * The variable or typedef name, if present, is ignored.
+ */
+const char *vtkParse_ValueInfoToString(ValueInfo *val, int *nf);
 
 /**
  * Expand a typedef within a variable, parameter, or typedef declaration.
@@ -87,7 +101,8 @@ void vtkParse_ExpandTypedef(ValueInfo *valinfo, ValueInfo *typedefinfo);
  * that match any of the supplied typedefs. The expansion is done in-place.
  */
 void vtkParse_ExpandTypedefs(
-  ValueInfo *valinfo, int n, const char *name[], const char *val[],
+  ValueInfo *valinfo, StringCache *cache,
+  int n, const char *name[], const char *val[],
   ValueInfo *typedefinfo[]);
 
 /**
@@ -96,13 +111,12 @@ void vtkParse_ExpandTypedefs(
  * This is used to replace constants with their values.
  */
 void vtkParse_ExpandValues(
-  ValueInfo *valinfo, int n, const char *name[], const char *val[]);
+  ValueInfo *valinfo, StringCache *cache,
+  int n, const char *name[], const char *val[]);
 
 /**
- * Search for all occurences of "name" and replace with the corresponding
- * "val", return the initial string if no replacements occurred, otherwise
- * return a new string allocated with malloc.
- */
+ * Search and replace, return the initial string if no replacements
+ * occurred, else return a new string allocated with malloc. */
 const char *vtkParse_StringReplace(
   const char *str1, int n, const char *name[], const char *val[]);
 
@@ -129,7 +143,7 @@ void vtkParse_FreeTemplateDecomposition(
  * be returned.
  */
 void vtkParse_InstantiateClassTemplate(
-  ClassInfo *data, int n, const char *args[]);
+  ClassInfo *data, StringCache *cache, int n, const char *args[]);
 
 /**
  * Instantiate a function or class method template by substituting the
@@ -139,21 +153,7 @@ void vtkParse_InstantiateClassTemplate(
  * printed to stderr and NULL will be returned.
  */
 void vtkParse_IntantiateFunctionTemplate(
-  FunctionInfo *data, int n, const char *args);
-
-/**
- * Generate a mangled name for a type, use gcc ia64 ABI.
- * The result is placed in new_name, which must be large enough
- * to accept the result.
- */
-size_t vtkParse_MangledTypeName(const char *name, char *new_name);
-
-/**
- * Generate a mangled name for a literal.  Only handles decimal
- * integer literals.  It guesses type from suffix "u", "ul",
- * "ull", "l", "ll" so only certain types are supported.
- */
-size_t vtkParse_MangledLiteral(const char *name, char *new_name);
+  FunctionInfo *data, int n, const char *args[]);
 
 /**
  * Get a zero-terminated array of the types in vtkTemplateMacro.
index c7fafcfe5cd67763686d7dc246c684bb6fa1e255..aa9d1b63863bfea306a99f10df72532bd3d7479d 100644 (file)
@@ -20,9 +20,7 @@
 -------------------------------------------------------------------------*/
 
 #include "vtkParseHierarchy.h"
-#include "vtkParseInternal.h"
 #include "vtkParseExtras.h"
-#include "vtkType.h"
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
@@ -36,6 +34,58 @@ static size_t skip_space(const char *text)
   return i;
 }
 
+static size_t skip_expression(const char *text, const char *delims)
+{
+  char newdelims[2];
+  size_t i = 0;
+  size_t j;
+  int use_angle = 0;
+  char c;
+
+  for (j = 0; delims[j] != '\0'; j++)
+    {
+    if (delims[j] == '>')
+      {
+      use_angle = 1;
+      }
+    }
+
+  while (text[i] != '\0')
+    {
+    c = text[i];
+    j = 0;
+    while (c != delims[j] && delims[j] != '\0') { j++; }
+    if (delims[j] != '\0' || c == '\0') { break; }
+    if (c == '\"' || c == '\'')
+      {
+      char d = c;
+      i++;
+      while (text[i] != d && text[i] != '\0')
+        {
+        if (text[i] == '\\' && text[i+1] != '\0') { i++; }
+        i++;
+        }
+      c = text[i];
+      if (c == '\0') { break; }
+      }
+    i++;
+    if (c == '(' || c == '[' || c == '{' || (use_angle && c == '<'))
+      {
+      if (c == '(') { newdelims[0] = ')'; }
+      if (c == '[') { newdelims[0] = ']'; }
+      if (c == '{') { newdelims[0] = '}'; }
+      if (c == '<') { newdelims[0] = '>'; }
+      newdelims[1] = '\0';
+
+      i += skip_expression(&text[i], newdelims);
+
+      if (text[i] == newdelims[0]) { i++; } else { break; }
+      }
+    }
+
+  return i;
+}
+
 /* helper: comparison of entries */
 static int compare_hierarchy_entries(const void *vp1, const void *vp2)
 {
@@ -74,7 +124,7 @@ HierarchyEntry *vtkParseHierarchy_FindEntry(
     n = vtkParse_UnscopedNameLength(&classname[i]);
     }
   i += vtkParse_IdentifierLength(&classname[i]);
-      
+
   /* create a new (shorter) search string if necessary */
   if (classname[i] != '\0')
     {
@@ -117,6 +167,7 @@ HierarchyInfo *vtkParseHierarchy_ReadFile(const char *filename)
   size_t maxlen = 15;
   size_t i, j, n, m;
   unsigned int bits, pointers;
+  static const char *delims = ">,=";
 
   line = (char *)malloc(maxlen);
 
@@ -130,6 +181,8 @@ HierarchyInfo *vtkParseHierarchy_ReadFile(const char *filename)
   info = (HierarchyInfo *)malloc(sizeof(HierarchyInfo));
   info->NumberOfEntries = 0;
   info->Entries = (HierarchyEntry *)malloc(maxClasses*sizeof(HierarchyEntry));
+  info->Strings = (StringCache *)malloc(sizeof(StringCache));
+  vtkParse_InitStringCache(info->Strings);
 
   while (fgets(line, (int)maxlen, fp))
     {
@@ -166,9 +219,9 @@ HierarchyInfo *vtkParseHierarchy_ReadFile(const char *filename)
     entry->Name = NULL;
     entry->HeaderFile = NULL;
     entry->Module = NULL;
-    entry->NumberOfTemplateArgs = 0;
-    entry->TemplateArgs = NULL;
-    entry->TemplateArgDefaults = NULL;
+    entry->NumberOfTemplateParameters = 0;
+    entry->TemplateParameters = NULL;
+    entry->TemplateDefaults = NULL;
     entry->NumberOfProperties = 0;
     entry->Properties = NULL;
     entry->NumberOfSuperClasses = 0;
@@ -185,10 +238,7 @@ HierarchyInfo *vtkParseHierarchy_ReadFile(const char *filename)
       if (line[i+m] == '<') { break; }
       }
 
-    cp = (char *)malloc(m+1);
-    strncpy(cp, &line[i], m);
-    cp[m] = '\0';
-    entry->Name = cp;
+    entry->Name = vtkParse_CacheString(info->Strings, &line[i], m);
     i += m;
 
     if (line[i] == '<')
@@ -200,25 +250,27 @@ HierarchyInfo *vtkParseHierarchy_ReadFile(const char *filename)
         {
         if (j == 0)
           {
-          entry->TemplateArgs = (const char **)malloc(sizeof(char *));
-          entry->TemplateArgDefaults = (const char **)malloc(sizeof(char *));
+          entry->TemplateParameters = (const char **)malloc(sizeof(char *));
+          entry->TemplateDefaults = (const char **)malloc(sizeof(char *));
           }
         else
           {
-          entry->TemplateArgs = (const char **)realloc(
-            (char **)entry->TemplateArgs, (j+1)*sizeof(char *));
-          entry->TemplateArgDefaults = (const char **)realloc(
-            (char **)entry->TemplateArgDefaults, (j+1)*sizeof(char *));
+          entry->TemplateParameters = (const char **)realloc(
+            (char **)entry->TemplateParameters, (j+1)*sizeof(char *));
+          entry->TemplateDefaults = (const char **)realloc(
+            (char **)entry->TemplateDefaults, (j+1)*sizeof(char *));
           }
-        entry->NumberOfTemplateArgs++;
-        entry->TemplateArgDefaults[j] = NULL;
+        entry->NumberOfTemplateParameters++;
+        entry->TemplateDefaults[j] = NULL;
 
-        m = vtkParse_NameLength(&line[i]);
+        m = skip_expression(&line[i], delims);
+        while (m > 0 && (line[i+m-1] == ' ' || line[i+m-1] == '\t'))
+          {
+          --m;
+          }
 
-        cp = (char *)malloc(m+1);
-        strncpy(cp, &line[i], m);
-        cp[m] = '\0';
-        entry->TemplateArgs[j] = cp;
+        entry->TemplateParameters[j] =
+          vtkParse_CacheString(info->Strings, &line[i], m);
         i += m;
         i += skip_space(&line[i]);
 
@@ -226,12 +278,13 @@ HierarchyInfo *vtkParseHierarchy_ReadFile(const char *filename)
           {
           i++;
           i += skip_space(&line[i]);
-          m = vtkParse_NameLength(&line[i]);
-
-          cp = (char *)malloc(m+1);
-          strncpy(cp, &line[i], m);
-          cp[m] = '\0';
-          entry->TemplateArgDefaults[j] = cp;
+          m = skip_expression(&line[i], delims);
+          while (m > 0 && (line[i+m-1] == ' ' || line[i+m-1] == '\t'))
+            {
+            --m;
+            }
+          entry->TemplateDefaults[j] =
+            vtkParse_CacheString(info->Strings, &line[i], m);
           i += m;
           i += skip_space(&line[i]);
           }
@@ -254,13 +307,12 @@ HierarchyInfo *vtkParseHierarchy_ReadFile(const char *filename)
         i += 2;
         m = vtkParse_NameLength(&line[i]);
         n = strlen(entry->Name);
-        cp = (char *)malloc(n+m+3);
+        cp = vtkParse_NewString(info->Strings, n+m+2);
         strcpy(cp, entry->Name);
         strcpy(&cp[n], "::");
         strncpy(&cp[n+2], &line[i], m);
         i += m;
         cp[n+m+2] = '\0';
-        free((char *)entry->Name);
         entry->Name = cp;
         }
       }
@@ -300,10 +352,8 @@ HierarchyInfo *vtkParseHierarchy_ReadFile(const char *filename)
 
         i += skip_space(&line[i]);
         n = vtkParse_NameLength(&line[i]);
-        cp = (char *)malloc(n+1);
-        strncpy(cp, &line[i], n);
-        cp[n] = '\0';
-        entry->SuperClasses[j] = cp;
+        entry->SuperClasses[j] =
+          vtkParse_CacheString(info->Strings, &line[i], n);
         entry->SuperClassIndex[j] = -1;
         i += n;
 
@@ -347,7 +397,7 @@ HierarchyInfo *vtkParseHierarchy_ReadFile(const char *filename)
           {
           n++;
           }
-        ccp = vtkParse_DuplicateString(&line[i], n);
+        ccp = vtkParse_CacheString(info->Strings, &line[i], n);
         vtkParse_AddStringToArray(&entry->Typedef->Dimensions,
                                   &entry->Typedef->NumberOfDimensions, ccp);
         if (ccp[0] >= '0' && ccp[0] <= '9')
@@ -410,7 +460,7 @@ HierarchyInfo *vtkParseHierarchy_ReadFile(const char *filename)
       /* read the base type (and const) */
       bits = 0;
       i += vtkParse_BasicTypeFromString(&line[i], &bits, &ccp, &n);
-      entry->Typedef->Class = vtkParse_DuplicateString(ccp, n);
+      entry->Typedef->Class = vtkParse_CacheString(info->Strings, ccp, n);
       entry->Typedef->Type |= bits;
       }
 
@@ -422,10 +472,7 @@ HierarchyInfo *vtkParseHierarchy_ReadFile(const char *filename)
       n = 0;
       while(line[i+n] != '\0' && line[i+n] != ';' &&
             !isspace(line[i+n])) { n++; };
-      cp = (char *)malloc(n+1);
-      strncpy(cp, &line[i], n);
-      cp[n] = '\0';
-      entry->HeaderFile = cp;
+      entry->HeaderFile = vtkParse_CacheString(info->Strings, &line[i], n);
 
       i += n;
       i += skip_space(&line[i]);
@@ -438,10 +485,7 @@ HierarchyInfo *vtkParseHierarchy_ReadFile(const char *filename)
         n = 0;
         while(line[i+n] != '\0' && line[i+n] != ';' &&
               !isspace(line[i+n])) { n++; };
-        cp = (char *)malloc(n+1);
-        strncpy(cp, &line[i], n);
-        cp[n] = '\0';
-        entry->Module = cp;
+        entry->Module = vtkParse_CacheString(info->Strings, &line[i], n);
 
         i += n;
         i += skip_space(&line[i]);
@@ -467,10 +511,8 @@ HierarchyInfo *vtkParseHierarchy_ReadFile(const char *filename)
           { n++; }
         if (n && skip_space(&line[i]) != n)
           {
-          cp = (char *)malloc((n+1)*sizeof(char *));
-          strncpy(cp, &line[i], n);
-          cp[n] = '\0';
-          entry->Properties[entry->NumberOfProperties++] = cp;
+          entry->Properties[entry->NumberOfProperties++] =
+            vtkParse_CacheString(info->Strings, &line[i], n);
           }
         i += n;
         }
@@ -494,39 +536,21 @@ HierarchyInfo *vtkParseHierarchy_ReadFile(const char *filename)
 void vtkParseHierarchy_Free(HierarchyInfo *info)
 {
   HierarchyEntry *entry;
-  int i, j;
+  int i;
 
   for (i = 0; i < info->NumberOfEntries; i++)
     {
     entry = &info->Entries[i];
-    free((char *)entry->Name);
-    free((char *)entry->HeaderFile);
-    for (j = 0; j < entry->NumberOfTemplateArgs; j++)
-      {
-      free((char *)entry->TemplateArgs[j]);
-      if (entry->TemplateArgDefaults[j])
-        {
-        free((char *)entry->TemplateArgDefaults[j]);
-        }
-      }
-    if (entry->NumberOfTemplateArgs)
-      {
-      free((char **)entry->TemplateArgs);
-      free((char **)entry->TemplateArgDefaults);
-      }
-    for (j = 0; j < entry->NumberOfSuperClasses; j++)
+    if (entry->NumberOfTemplateParameters)
       {
-      free((char *)entry->SuperClasses[j]);
+      free((char **)entry->TemplateParameters);
+      free((char **)entry->TemplateDefaults);
       }
     if (entry->NumberOfSuperClasses)
       {
       free((char **)entry->SuperClasses);
       free(entry->SuperClassIndex);
       }
-    for (j = 0; j < entry->NumberOfProperties; j++)
-      {
-      free((char *)entry->Properties[j]);
-      }
     if (entry->NumberOfProperties)
       {
       free((char **)entry->Properties);
@@ -540,7 +564,7 @@ void vtkParseHierarchy_Free(HierarchyInfo *info)
 
 /* Check whether class is derived from baseclass.  You must supply
  * the entry for the class (returned by FindEntry) as well as the
- * classname.  If the class is templated, the classname can include 
+ * classname.  If the class is templated, the classname can include
  * template args in angle brackets.  If you provide a pointer for
  * baseclass_with_args, then it will be used to return the name of
  * name of the baseclass with template args in angle brackets. */
@@ -597,7 +621,7 @@ int vtkParseHierarchy_IsTypeOfTemplated(
       }
 
     /* if class is templated */
-    if (entry->NumberOfTemplateArgs)
+    if (entry->NumberOfTemplateParameters)
       {
       /* check for template args for classname */
       m = strlen(entry->Name);
@@ -605,9 +629,9 @@ int vtkParseHierarchy_IsTypeOfTemplated(
         {
         templated = 1;
 
-        nargs = entry->NumberOfTemplateArgs;
+        nargs = entry->NumberOfTemplateParameters;
         vtkParse_DecomposeTemplatedType(classname, &name, nargs, &args,
-          entry->TemplateArgDefaults);
+          entry->TemplateDefaults);
         }
       }
 
@@ -618,11 +642,11 @@ int vtkParseHierarchy_IsTypeOfTemplated(
 
       if (templated)
         {
-        for (k = 0; k < entry->NumberOfTemplateArgs; k++)
+        for (k = 0; k < entry->NumberOfTemplateParameters; k++)
           {
           /* check if the baseclass itself is a template parameter */
-          m = strlen(entry->TemplateArgs[k]);
-          if (strncmp(entry->TemplateArgs[k], supername, m) == 0 &&
+          m = strlen(entry->TemplateParameters[k]);
+          if (strncmp(entry->TemplateParameters[k], supername, m) == 0 &&
               !isalnum(supername[m]) && supername[m] != '_')
             {
             baseclass_is_template_parameter = 1;
@@ -632,7 +656,7 @@ int vtkParseHierarchy_IsTypeOfTemplated(
 
         /* use the class template args to find baseclass template args */
         supername = vtkParse_StringReplace(
-          supername, entry->NumberOfTemplateArgs, entry->TemplateArgs, args);
+          supername, entry->NumberOfTemplateParameters, entry->TemplateParameters, args);
         if (supername != entry->SuperClasses[j])
           {
           supername_needs_free = 1;
@@ -771,11 +795,11 @@ const char *vtkParseHierarchy_TemplatedSuperClass(
     if (classname[j] == '<')
       {
       vtkParse_DecomposeTemplatedType(classname, &name,
-        entry->NumberOfTemplateArgs, &args, entry->TemplateArgDefaults);
+        entry->NumberOfTemplateParameters, &args, entry->TemplateDefaults);
       supername = vtkParse_StringReplace(entry->SuperClasses[i],
-        entry->NumberOfTemplateArgs, entry->TemplateArgs, args);
+        entry->NumberOfTemplateParameters, entry->TemplateParameters, args);
       vtkParse_FreeTemplateDecomposition(
-        name, entry->NumberOfTemplateArgs, args);
+        name, entry->NumberOfTemplateParameters, args);
       }
 
     if (supername == entry->SuperClasses[i])
@@ -818,7 +842,8 @@ const char *vtkParseHierarchy_GetProperty(
 /* Expand all unrecognized types in a ValueInfo struct by
  * using the typedefs in the HierarchyInfo struct. */
 int vtkParseHierarchy_ExpandTypedefsInValue(
-  const HierarchyInfo *info, ValueInfo *val, const char *scope)
+  const HierarchyInfo *info, ValueInfo *val, StringCache *cache,
+  const char *scope)
 {
   char text[128];
   char *cp;
@@ -873,7 +898,8 @@ int vtkParseHierarchy_ExpandTypedefsInValue(
               info, entry->SuperClasses[i], NULL);
             scope_needs_free = (scope != entry->SuperClasses[i]);
             /* recurse if more than one superclass */
-            if (vtkParseHierarchy_ExpandTypedefsInValue(info, val, scope))
+            if (vtkParseHierarchy_ExpandTypedefsInValue(
+                  info, val, cache, scope))
               {
               if (scope_needs_free) { free((char *)scope); }
               return 1;
@@ -904,7 +930,7 @@ int vtkParseHierarchy_ExpandTypedefsInValue(
          info, val->Class, scope);
       if (newclass != val->Class)
         {
-        val->Class = vtkParse_DuplicateString(newclass, strlen(newclass));
+        val->Class = vtkParse_CacheString(cache, newclass, strlen(newclass));
         free((char *)newclass);
         }
       result = 1;
index 7edb869e5903365e849b70c9cbf3c6f4b1ca33fa..876702c129f1d0d8536d86a9051aadd2d70e9378 100644 (file)
@@ -40,7 +40,7 @@
 #define VTK_PARSE_HIERARCHY_H
 
 /* Need the ValueInfo struct for typedefs */
-#include "vtkParse.h"
+#include "vtkParseData.h"
 
 /**
  * One entry from the hierarchy file.
@@ -51,9 +51,9 @@ typedef struct _HierarchyEntry
   const char  *Name;            /* the class or type name */
   const char  *HeaderFile;      /* header file the class is defined in */
   const char  *Module;          /* library the class is defined in */
-  int          NumberOfTemplateArgs; /* number of template arguments */
-  const char **TemplateArgs;
-  const char **TemplateArgDefaults;
+  int          NumberOfTemplateParameters; /* number of template params */
+  const char **TemplateParameters;
+  const char **TemplateDefaults;
   int          NumberOfProperties;   /* number of properties */
   const char **Properties;
   int          NumberOfSuperClasses; /* number of superclasses */
@@ -71,6 +71,7 @@ typedef struct _HierarchyInfo
 {
   int             NumberOfEntries;
   HierarchyEntry *Entries;
+  StringCache    *Strings;
 } HierarchyInfo;
 
 #ifdef __cplusplus
@@ -140,7 +141,8 @@ const char *vtkParseHierarchy_TemplatedSuperClass(
  * using the typedefs in the HierarchyInfo struct.
  */
 int vtkParseHierarchy_ExpandTypedefsInValue(
-  const HierarchyInfo *info, ValueInfo *data, const char *scope);
+  const HierarchyInfo *info, ValueInfo *data, StringCache *cache,
+  const char *scope);
 
 /**
  * Expand typedefs found in a name stored as a string.  The value
index f7ddbbfbf6c98fcadd1aaefa19dab6db52b91a9d..a9e4f7a81d55d870a17d972c1b96ca49f2515fdc 100644 (file)
 /*
 
 This file provides a unified front-end for the wrapper generators.
-It contains the main() function and argument parsing, and calls
-the code that parses the header file.
 
 */
 
 #include "vtkParse.h"
+#include "vtkParseData.h"
 #include "vtkParseMain.h"
-#include "vtkParseInternal.h"
-#include "vtkConfigure.h" // VTK_VERSION
+#include <ctype.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <sys/stat.h>
 
 /* This is the struct that contains the options */
 OptionInfo options;
 
-/* Flags for --help and --version */
-int vtk_parse_help = 0;
-int vtk_parse_version = 0;
+/* Get the base filename */
+static const char *parse_exename(const char *cmd)
+{
+  const char *exename;
+
+  /* remove directory part of exe name */
+  for (exename = cmd + strlen(cmd); exename > cmd; --exename)
+    {
+    char pc = exename[-1];
+    if (pc == ':' || pc == '/' || pc == '\\')
+      {
+      break;
+      }
+    }
+
+  return exename;
+}
+
+/* Print the help */
+static void parse_print_help(FILE *fp, const char *cmd, int multi)
+{
+  fprintf(fp,
+    "Usage: %s [options] infile... \n"
+    "  --help            print this help message\n"
+    "  --version         print the VTK version\n"
+    "  -o <file>         the output file\n"
+    "  -I <dir>          add an include directory\n"
+    "  -D <macro[=def]>  define a preprocessor macro\n"
+    "  -U <macro>        undefine a preprocessor macro\n"
+    "  @<file>           read arguments from a file\n",
+    parse_exename(cmd));
+
+  /* args for describing a singe header file input */
+  if (!multi)
+    {
+    fprintf(fp,
+    "  --hints <file>    the hints file to use\n"
+    "  --types <file>    the type hierarchy file to use\n"
+    "  --concrete        force concrete class (ignored, deprecated)\n"
+    "  --abstract        force abstract class (ignored, deprecated)\n"
+    "  --vtkobject       vtkObjectBase-derived class (ignored, deprecated)\n"
+    "  --special         non-vtkObjectBase class (ignored, deprecated)\n");
+    }
+}
 
-/* This method provides the back-end for the generators */
-extern void vtkParseOutput(FILE *, FileInfo *);
+/* append an arg to the arglist */
+static void parse_append_arg(int *argn, char ***args, char *arg)
+{
+  /* if argn is a power of two, allocate more space */
+  if (*argn > 0 && (*argn & (*argn - 1)) == 0)
+    {
+    *args = (char **)realloc(*args, 2*(*argn)*sizeof(char *));
+    }
+  /* append argument to list */
+  (*args)[*argn] = arg;
+  (*argn)++;
+}
 
-/* Check the options */
-static int check_options(int argc, char *argv[])
+/* read options from a file, return zero on error */
+static int read_option_file(
+  StringCache *strings, const char *filename, int *argn, char ***args)
+{
+  static int option_file_stack_max = 10;
+  static int option_file_stack_size = 0;
+  static const char *option_file_stack[10];
+  FILE *fp;
+  char *line;
+  const char *ccp;
+  char *argstring;
+  char *arg;
+  size_t maxlen = 15;
+  size_t i, n;
+  int j;
+  int in_string;
+
+  line = (char *)malloc(maxlen);
+
+  fp = fopen(filename, "r");
+
+  if (fp == NULL)
+    {
+    return 0;
+    }
+
+  /* read the file line by line */
+  while (fgets(line, (int)maxlen, fp))
+    {
+    n = strlen(line);
+
+    /* if buffer not long enough, increase it */
+    while (n == maxlen-1 && line[n-1] != '\n' && !feof(fp))
+      {
+      maxlen *= 2;
+      line = (char *)realloc(line, maxlen);
+      if (!fgets(&line[n], (int)(maxlen-n), fp)) { break; }
+      n += strlen(&line[n]);
+      }
+
+    /* allocate a string to hold the parsed arguments */
+    argstring = vtkParse_NewString(strings, n);
+    arg = argstring;
+    i = 0;
+
+    /* break the line into individual options */
+    ccp = line;
+    in_string = 0;
+    while (*ccp != '\0')
+      {
+      for (;;)
+        {
+        if (*ccp == '\\')
+          {
+          ccp++;
+          }
+        else if (*ccp == '\"' || *ccp == '\'')
+          {
+          if (!in_string)
+            {
+            in_string = *ccp++;
+            continue;
+            }
+          else if (*ccp == in_string)
+            {
+            in_string = 0;
+            ccp++;
+            continue;
+            }
+          }
+        else if (!in_string && isspace(*ccp))
+          {
+          do { ccp++; } while (isspace(*ccp));
+          break;
+          }
+        if (*ccp == '\0')
+          {
+          break;
+          }
+        /* append character to argument */
+        arg[i++] = *ccp++;
+        }
+      arg[i++] = '\0';
+
+      if (arg[0] == '@')
+        {
+        /* recursively expand '@file' option */
+        if (option_file_stack_size == option_file_stack_max)
+          {
+          fprintf(stderr, "%s: @file recursion is too deep.\n",
+                  (*args)[0]);
+          exit(1);
+          }
+        /* avoid reading the same file recursively */
+        option_file_stack[option_file_stack_size++] = filename;
+        for (j = 0; j < option_file_stack_size; j++)
+          {
+          if (strcmp(&arg[1], option_file_stack[j]) == 0)
+            {
+            break;
+            }
+          }
+        if (j < option_file_stack_size)
+          {
+          parse_append_arg(argn, args, arg);
+          }
+        else if (read_option_file(strings, &arg[1], argn, args) == 0)
+          {
+          parse_append_arg(argn, args, arg);
+          }
+        option_file_stack_size--;
+        }
+      else if (arg[0] != '\0')
+        {
+        parse_append_arg(argn, args, arg);
+        }
+      /* prepare for next arg */
+      arg += i;
+      i = 0;
+      }
+    }
+
+  return 1;
+}
+
+/* expand any "@file" args that occur in the command-line args */
+static void parse_expand_args(
+  StringCache *strings, int argc, char *argv[], int *argn, char ***args)
+{
+  int i;
+
+  *argn = 0;
+  *args = (char **)malloc(sizeof(char *));
+
+  for (i = 0; i < argc; i++)
+    {
+    /* check for "@file" unless this is the command name */
+    if (i > 0 || argv[i][0] == '@')
+      {
+      /* if read_option_file returns null, add "@file" to the args */
+      /* (this mimics the way that gcc expands @file arguments) */
+      if (read_option_file(strings, &argv[i][1], argn, args) == 0)
+        {
+        parse_append_arg(argn, args, argv[i]);
+        }
+      }
+    else
+      {
+      /* append any other arg */
+      parse_append_arg(argn, args, argv[i]);
+      }
+    }
+}
+
+/* Check the options: "multi" should be zero for wrapper tools that
+ * only take one input file, or one for wrapper tools that take multiple
+ * input files.  Returns zero for "--version" or "--help", or returns -1
+ * if an error occurred.  Otherwise, it returns the number of args
+ * that were successfully parsed. */
+static int parse_check_options(int argc, char *argv[], int multi)
 {
   int i;
   size_t j;
+  char *cp;
+  char c;
 
+  options.NumberOfFiles = 0;
+  options.Files = NULL;
   options.InputFileName = NULL;
   options.OutputFileName = NULL;
-  options.IsAbstract = 0;
-  options.IsConcrete = 0;
-  options.IsVTKObject = 0;
-  options.IsSpecialObject = 0;
   options.HierarchyFileName = 0;
   options.HintFileName = 0;
 
-  for (i = 1; i < argc && argv[i][0] == '-'; i++)
+  for (i = 1; i < argc; i++)
     {
-    if (strcmp(argv[i], "--concrete") == 0)
-      {
-      options.IsConcrete = 1;
-      }
-    else if (strcmp(argv[i], "--abstract") == 0)
+    if (strcmp(argv[i], "--help") == 0)
       {
-      options.IsAbstract = 1;
+      parse_print_help(stdout, argv[0], multi);
+      return 0;
       }
-    else if (strcmp(argv[i], "--vtkobject") == 0)
-      {
-      options.IsVTKObject = 1;
-      }
-    else if (strcmp(argv[i], "--special") == 0)
+    else if (strcmp(argv[i], "--version") == 0)
       {
-      options.IsSpecialObject = 1;
+      const char *ver = VTK_PARSE_VERSION;
+      fprintf(stdout, "%s %s\n", parse_exename(argv[0]), ver);
+      return 0;
       }
-    else if (strcmp(argv[i], "--hints") == 0)
+    else if (argv[i][0] != '-')
       {
-      i++;
-      if (i >= argc || argv[i][0] == '-')
+      if (options.NumberOfFiles == 0)
         {
-        return -1;
+        options.Files = (char **)malloc(sizeof(char *));
         }
-      options.HintFileName = argv[i];
-      }
-    else if (strcmp(argv[i], "--types") == 0)
-      {
-      i++;
-      if (i >= argc || argv[i][0] == '-')
+      else if ((options.NumberOfFiles & (options.NumberOfFiles - 1)) == 0)
         {
-        return -1;
+        options.Files = (char **)realloc(
+          options.Files, 2*options.NumberOfFiles*sizeof(char *));
         }
-      options.HierarchyFileName = argv[i];
+      options.Files[options.NumberOfFiles++] = argv[i];
       }
-    else if (strcmp(argv[i], "-I") == 0)
+    else if (argv[i][0] == '-' && isalpha(argv[i][1]))
       {
-      i++;
-      if (i >= argc || argv[i][0] == '-')
+      c = argv[i][1];
+      cp = &argv[i][2];
+      if (*cp == '\0')
         {
-        return -1;
+        i++;
+        if (i >= argc || argv[i][0] == '-')
+          {
+          return -1;
+          }
+        cp = argv[i];
+        }
+
+      if (c == 'o')
+        {
+        options.OutputFileName = cp;
+        }
+      else if (c == 'I')
+        {
+        vtkParse_IncludeDirectory(cp);
+        }
+      else if (c == 'D')
+        {
+        j = 0;
+        while (cp[j] != '\0' && cp[j] != '=') { j++; }
+        if (cp[j] == '=') { j++; }
+        vtkParse_DefineMacro(cp, &cp[j]);
+        }
+      else if (c == 'U')
+        {
+        vtkParse_UndefineMacro(cp);
         }
-      vtkParse_IncludeDirectory(argv[i]);
       }
-    else if (strcmp(argv[i], "-D") == 0)
+    else if (!multi && strcmp(argv[i], "--hints") == 0)
       {
       i++;
-      j = 0;
       if (i >= argc || argv[i][0] == '-')
         {
         return -1;
         }
-      while (argv[i][j] != '\0' && argv[i][j] != '=') { j++; }
-      if (argv[i][j] == '=') { j++; }
-      vtkParse_DefineMacro(argv[i], &argv[i][j]);
+      options.HintFileName = argv[i];
       }
-    else if (strcmp(argv[i], "-U") == 0)
+    else if (!multi && strcmp(argv[i], "--types") == 0)
       {
       i++;
       if (i >= argc || argv[i][0] == '-')
         {
         return -1;
         }
-      vtkParse_UndefineMacro(argv[i]);
-      }
-    else if (strcmp(argv[i], "--help") == 0)
-      {
-      vtk_parse_help = 1;
+      options.HierarchyFileName = argv[i];
       }
-    else if (strcmp(argv[i], "--version") == 0)
+    else if (strcmp(argv[i], "--vtkobject") == 0 ||
+             strcmp(argv[i], "--special") == 0 ||
+             strcmp(argv[i], "--abstract") == 0 ||
+             strcmp(argv[i], "--concrete") == 0)
       {
-      vtk_parse_version = 1;
+      fprintf(stderr, "Warning: the %s option is deprecated "
+              "and will be ignored.\n", argv[i]);
       }
     }
 
@@ -140,96 +358,64 @@ OptionInfo *vtkParse_GetCommandLineOptions()
   return &options;
 }
 
-static void vtk_parse_print_help(FILE *stream, const char *cmd)
-{
-  fprintf(stream,
-    "Usage: %s [options] input_file output_file\n"
-    "  --help          print this help message\n"
-    "  --version       print the VTK version\n"
-    "  --concrete      force concrete class\n"
-    "  --abstract      force abstract class\n"
-    "  --vtkobject     vtkObjectBase-derived class\n"
-    "  --special       non-vtkObjectBase class\n"
-    "  --hints <file>  the hints file to use\n"
-    "  --types <file>  the type hierarchy file to use\n"
-    "  -I <dir>        add an include directory\n"
-    "  -D <macro>      define a preprocessor macro\n"
-    "  -U <macro>      undefine a preprocessor macro\n",
-    cmd);
-}
-
-int main(int argc, char *argv[])
+/* Command-line argument handler for wrapper tools */
+FileInfo *vtkParse_Main(int argc, char *argv[])
 {
   int argi;
-  int has_options = 0;
+  int expected_files;
   FILE *ifile;
-  FILE *ofile;
   FILE *hfile = 0;
-  const char *cp;
-  char *classname;
-  size_t i;
   FileInfo *data;
+  StringCache strings;
+  int argn;
+  char **args;
 
-  argi = check_options(argc, argv);
-  if (argi > 1 && argc - argi == 2)
-    {
-    has_options = 1;
-    }
-  else if (argi < 0 || argc > 5 ||
-           (argc < 3 && !vtk_parse_help && !vtk_parse_version))
-    {
-    vtk_parse_print_help(stderr, argv[0]);
-    exit(1);
-    }
+  /* expand any "@file" args */
+  vtkParse_InitStringCache(&strings);
+  parse_expand_args(&strings, argc, argv, &argn, &args);
+
+  /* read the args into the static OptionInfo struct */
+  argi = parse_check_options(argn, args, 0);
 
-  if (vtk_parse_version)
+  /* was output file already specified by the "-o" option? */
+  expected_files = (options.OutputFileName == NULL ? 2 : 1);
+
+  /* verify number of args, print usage if not valid */
+  if (argi == 0)
     {
-    const char *ver = VTK_VERSION;
-    const char *exename = argv[0];
-    /* remove directory part of exe name */
-    for (exename += strlen(exename); exename > argv[0]; --exename)
-      {
-      char pc = *(exename - 1);
-      if (pc == ':' || pc == '/' || pc == '\\')
-        {
-        break;
-        }
-      }
-    fprintf(stdout, "%s %s\n", exename, ver);
+    free(args);
     exit(0);
     }
-  if (vtk_parse_help)
+  else if (argi < 0 || options.NumberOfFiles != expected_files)
     {
-    vtk_parse_print_help(stdout, argv[0]);
-    exit(0);
+    parse_print_help(stderr, args[0], 0);
+    exit(1);
     }
 
-  options.InputFileName = argv[argi++];
+  /* open the input file */
+  options.InputFileName = options.Files[0];
 
-  ifile = fopen(options.InputFileName, "r");
-  if (!ifile)
+  if (!(ifile = fopen(options.InputFileName, "r")))
     {
-    fprintf(stderr,"Error opening input file %s\n", options.InputFileName);
+    fprintf(stderr, "Error opening input file %s\n", options.InputFileName);
     exit(1);
     }
 
-  if (!has_options)
+  if (options.OutputFileName == NULL &&
+      options.NumberOfFiles > 1)
     {
-    if (argc == 5)
-      {
-      options.HintFileName = argv[argi++];
-      }
-    if (argc >= 4)
-      {
-      options.IsConcrete = atoi(argv[argi++]);
-      options.IsAbstract = !options.IsConcrete;
-      }
+    /* allow outfile to be given after infile, if "-o" option not used */
+    options.OutputFileName = options.Files[1];
+    fprintf(stderr, "Deprecated: specify output file with \"-o\".\n");
     }
 
+  /* free the expanded args */
+  free(args);
+
+  /* open the hint file, if given on the command line */
   if (options.HintFileName && options.HintFileName[0] != '\0')
     {
-    hfile = fopen(options.HintFileName, "r");
-    if (!hfile)
+    if (!(hfile = fopen(options.HintFileName, "r")))
       {
       fprintf(stderr, "Error opening hint file %s\n", options.HintFileName);
       fclose(ifile);
@@ -237,12 +423,10 @@ int main(int argc, char *argv[])
       }
     }
 
-  options.OutputFileName = argv[argi++];
-  ofile = fopen(options.OutputFileName, "w");
-
-  if (!ofile)
+  /* make sure than an output file was given on the command line */
+  if (options.OutputFileName == NULL)
     {
-    fprintf(stderr, "Error opening output file %s\n", options.OutputFileName);
+    fprintf(stderr, "No output file was specified\n");
     fclose(ifile);
     if (hfile)
       {
@@ -251,59 +435,74 @@ int main(int argc, char *argv[])
     exit(1);
     }
 
-  if (options.IsConcrete)
-    {
-    cp = options.InputFileName;
-    i = strlen(cp);
-    classname = (char *)malloc(i+1);
-    while (i > 0 &&
-           cp[i-1] != '/' && cp[i-1] != '\\' && cp[i-1] != ':') { i--; }
-    strcpy(classname, &cp[i]);
-    i = 0;
-    while (classname[i] != '\0' && classname[i] != '.') { i++; }
-    classname[i] = '\0';
-
-    vtkParse_SetClassProperty(classname, "concrete");
-    }
-
+  /* if a hierarchy is was given, then BTX/ETX can be ignored */
   vtkParse_SetIgnoreBTX(0);
   if (options.HierarchyFileName)
     {
     vtkParse_SetIgnoreBTX(1);
     }
 
+  /* parse the input file */
   data = vtkParse_ParseFile(options.InputFileName, ifile, stderr);
 
   if (!data)
     {
-    fclose(ifile);
-    fclose(ofile);
-    if (hfile)
-      {
-      fclose(hfile);
-      }
     exit(1);
     }
 
+  /* fill in some blanks by using the hints file */
   if (hfile)
     {
     vtkParse_ReadHints(data, hfile, stderr);
     }
 
-  if (options.IsConcrete && data->MainClass)
-    {
-    data->MainClass->IsAbstract = 0;
-    }
-  else if (options.IsAbstract && data->MainClass)
+  if (data->MainClass)
     {
-    data->MainClass->IsAbstract = 1;
+    /* mark class as abstract unless it has New() method */
+    int nfunc = data->MainClass->NumberOfFunctions;
+    int ifunc;
+    for (ifunc = 0; ifunc < nfunc; ifunc++)
+      {
+      FunctionInfo *func = data->MainClass->Functions[ifunc];
+      if (func && func->Access == VTK_ACCESS_PUBLIC &&
+          func->Name && strcmp(func->Name, "New") == 0 &&
+          func->NumberOfParameters == 0)
+        {
+        break;
+        }
+      }
+    data->MainClass->IsAbstract = ((ifunc == nfunc) ? 1 : 0);
     }
 
-  vtkParseOutput(ofile, data);
+  return data;
+}
 
-  fclose(ofile);
+/* Command-line argument handler for wrapper tools */
+void vtkParse_MainMulti(int argc, char *argv[])
+{
+  int argi;
+  int argn;
+  char **args;
+  StringCache strings;
 
-  vtkParse_Free(data);
+  /* expand any "@file" args */
+  vtkParse_InitStringCache(&strings);
+  parse_expand_args(&strings, argc, argv, &argn, &args);
+
+  /* read the args into the static OptionInfo struct */
+  argi = parse_check_options(argn, args, 1);
+  free(args);
+
+  if (argi == 0)
+    {
+    exit(0);
+    }
+  else if (argi < 0 || options.NumberOfFiles == 0)
+    {
+    parse_print_help(stderr, argv[0], 1);
+    exit(1);
+    }
 
-  return 0;
+  /* the input file */
+  options.InputFileName = options.Files[0];
 }
diff --git a/src/ParaView/vtkParseMain.h b/src/ParaView/vtkParseMain.h
new file mode 100644 (file)
index 0000000..6bf6f40
--- /dev/null
@@ -0,0 +1,86 @@
+/*=========================================================================
+
+  Program:   Visualization Toolkit
+  Module:    vtkParseMain.h
+
+  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+  All rights reserved.
+  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
+
+     This software is distributed WITHOUT ANY WARRANTY; without even
+     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+     PURPOSE.  See the above copyright notice for more information.
+
+=========================================================================*/
+
+/**
+ vtkParseMain.h provides argument parsing for the wrapper executables.
+
+ Usage: vtkWrap [options] infile ...
+
+ -D <macro[=def]>  add a macro definition
+ -U <macro>        cancel a macro definition
+ -I <dir>          add an include directory
+ -o <file>         specify the output file
+ @<file>           read arguments from a file
+ --help            print a help message and exit
+ --version         print the VTK version number and exit
+ --hints <file>    hints file
+ --types <file>    type hierarchy file
+
+ Notes:
+
+ 1) The "-o" option is needed when there are multiple input files.
+    Otherwise, the output file can be given after the input file.
+
+ 2) The "@file" option allows arguments to be stored in a file,
+    instead of given on the command line.  The use of such a file
+    is sometimes necessary to avoid overflowing the 8191-character
+    command-line limit on Windows.  If the file is not found, then
+    "@file" will be passed as as a command-line parameter.
+*/
+
+#ifndef VTK_PARSE_MAIN_H
+#define VTK_PARSE_MAIN_H
+
+#include "vtkParseData.h"
+#include <stdio.h>
+
+/**
+ * Options for the wrappers
+ */
+typedef struct _OptionInfo
+{
+  int           NumberOfFiles;     /* the total number of file arguments */
+  char        **Files;             /* all of the file arguments */
+  char         *InputFileName;     /* the first file argument */
+  char         *OutputFileName;    /* the second file, or the "-o" file */
+  char         *HintFileName;      /* the file preceded by "--hints" */
+  char         *HierarchyFileName; /* the file preceded by "--types" */
+} OptionInfo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Return the options provided on the command line
+ */
+OptionInfo *vtkParse_GetCommandLineOptions();
+
+/**
+ * The main function, parses the file and returns the result.
+ */
+FileInfo *vtkParse_Main(int argc, char *argv[]);
+
+/**
+ * A main function that can take multiple input files.
+ * It does not parse the files.  It will exit on error.
+ */
+void vtkParse_MainMulti(int argc, char *argv[]);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
index 5bed2aea6fd5a7f3dcce14e995b4aee43b0575c0..8107e37a8cd046fcdb40f8c32ee06b1a9ffe0db9 100644 (file)
 
 #define PREPROC_DEBUG 0
 
+/** Block size for reading files */
+#define FILE_BUFFER_SIZE 8192
+
+/** Size of hash table must be a power of two */
+#define PREPROC_HASH_TABLE_SIZE 1024u
+
+/** Hashes for preprocessor keywords */
+#define HASH_IFDEF      0x0fa4b283u
+#define HASH_IFNDEF     0x04407ab1u
+#define HASH_IF         0x00597834u
+#define HASH_ELIF       0x7c964b25u
+#define HASH_ELSE       0x7c964c6eu
+#define HASH_ENDIF      0x0f60b40bu
+#define HASH_DEFINED    0x088998d4u
+#define HASH_DEFINE     0xf8804a70u
+#define HASH_UNDEF      0x10823b97u
+#define HASH_INCLUDE    0x9e36af89u
+#define HASH_ERROR      0x0f6321efu
+#define HASH_LINE       0x7c9a15adu
+#define HASH_PRAGMA     0x1566a9fdu
+
+/** Various possible char types */
+#define CPRE_ID         0x01  /* A-Z a-z and _ */
+#define CPRE_DIGIT      0x02  /* 0-9 */
+#define CPRE_IDGIT      0x03  /* 0-9 A-Z a-z and _ */
+#define CPRE_HEX        0x04  /* 0-9A-Fa-f */
+#define CPRE_EXP        0x08  /* EPep (exponents for floats) */
+#define CPRE_SIGN       0x10  /* +- (sign for floats) */
+#define CPRE_QUOTE      0x20  /* " and ' */
+#define CPRE_HSPACE     0x40  /* space, tab, carriage return */
+#define CPRE_VSPACE     0x80  /* newline, vertical tab, form feed */
+#define CPRE_WHITE      0xC0  /* all whitespace characters */
+
+/** Whitespace types.
+ * WS_NO_EOL treats newline as end-of-line, instead of whitespace.
+ * WS_ALL treats newlines as regular whitespace.
+ * WS_COMMENT does not treat comments as whitespace, allowing
+ * comments blocks to be returned as tokens. */
+typedef enum _preproc_space_t
+{
+  WS_NO_EOL = CPRE_HSPACE, /* skip horizontal whitespace only */
+  WS_ALL    = CPRE_WHITE,  /* skip all whitespace */
+  WS_COMMENT = (CPRE_WHITE | 0x100), /* comments as tokens */
+} preproc_space_t;
+
 /** Preprocessor tokens. */
-enum _preproc_token_t
+typedef enum _preproc_token_t
 {
-  TOK_ID = 258,
-  TOK_CHAR,
-  TOK_STRING,
-  TOK_NUMBER,
-  TOK_AND,
-  TOK_OR,
-  TOK_NE,
-  TOK_EQ,
-  TOK_GE,
-  TOK_LE,
-  TOK_LSHIFT,
-  TOK_RSHIFT,
-  TOK_DBLHASH,
-  TOK_ELLIPSIS,
-  TOK_OTHER
-};
+  TOK_OTHER = 257,
+  TOK_ID,        /* any id */
+  TOK_CHAR,      /* char literal */
+  TOK_STRING,    /* string literal */
+  TOK_NUMBER,    /* any numeric literal */
+  TOK_COMMENT,   /* C or C++ comment */
+  TOK_DBLHASH,   /* ## */
+  TOK_SCOPE,     /* :: */
+  TOK_INCR,      /* ++ */
+  TOK_DECR,      /* -- */
+  TOK_RSHIFT,    /* >> */
+  TOK_LSHIFT,    /* << */
+  TOK_AND,       /* && */
+  TOK_OR,        /* || */
+  TOK_EQ,        /* == */
+  TOK_NE,        /* != */
+  TOK_GE,        /* >= */
+  TOK_LE,        /* <= */
+  TOK_ADD_EQ,    /* += */
+  TOK_SUB_EQ,    /* -= */
+  TOK_MUL_EQ,    /* *= */
+  TOK_DIV_EQ,    /* /= */
+  TOK_MOD_EQ,    /* %= */
+  TOK_AND_EQ,    /* &= */
+  TOK_OR_EQ,     /* |= */
+  TOK_XOR_EQ,    /* ^= */
+  TOK_ARROW,     /* -> */
+  TOK_DOT_STAR,  /* .* */
+  TOK_ARROW_STAR,/* ->* */
+  TOK_RSHIFT_EQ, /* >>= */
+  TOK_LSHIFT_EQ, /* <<= */
+  TOK_ELLIPSIS,  /* ... */
+} preproc_token_t;
 
 /** A struct for going through the input one token at a time. */
 typedef struct _preproc_tokenizer
 {
   int tok;
-  size_t len;
+  unsigned int hash;
   const char *text;
+  size_t len;
 } preproc_tokenizer;
 
 /** Extend dynamic arrays in a progression of powers of two.
@@ -102,6 +165,55 @@ static preproc_uint_t string_to_preproc_uint(const char *cp, int base)
 #endif
 }
 
+/** Array for quick lookup of char types */
+static unsigned char preproc_charbits[] = {
+  0, 0, 0, 0, 0, 0, 0, 0, 0,
+  CPRE_HSPACE, /* tab */
+  CPRE_VSPACE, CPRE_VSPACE, CPRE_VSPACE, /* newline, vtab, form feed */
+  CPRE_HSPACE, /* carriage return */
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  CPRE_HSPACE, /* ' ' */
+  0, CPRE_QUOTE, 0, 0, 0, 0, CPRE_QUOTE, 0, 0, /* !"#$%&'() */
+  0, CPRE_SIGN, 0, CPRE_SIGN, 0, 0, /* *+,-./ */
+  CPRE_DIGIT|CPRE_HEX, /* 0 */
+  CPRE_DIGIT|CPRE_HEX, CPRE_DIGIT|CPRE_HEX,
+  CPRE_DIGIT|CPRE_HEX, CPRE_DIGIT|CPRE_HEX,
+  CPRE_DIGIT|CPRE_HEX, CPRE_DIGIT|CPRE_HEX,
+  CPRE_DIGIT|CPRE_HEX, CPRE_DIGIT|CPRE_HEX,
+  CPRE_DIGIT|CPRE_HEX, /* 9 */
+  0, 0, 0, 0, 0, 0, 0, /* :;<=>?@ */
+  CPRE_ID|CPRE_HEX, /* A */
+  CPRE_ID|CPRE_HEX, CPRE_ID|CPRE_HEX, CPRE_ID|CPRE_HEX, /* BCD */
+  CPRE_ID|CPRE_HEX|CPRE_EXP, /* E */
+  CPRE_ID|CPRE_HEX, CPRE_ID, CPRE_ID, CPRE_ID, /* FGHI */
+  CPRE_ID, CPRE_ID, CPRE_ID, CPRE_ID, /* JKLM */
+  CPRE_ID, CPRE_ID, CPRE_ID|CPRE_EXP, CPRE_ID, /* NOPQ */
+  CPRE_ID, CPRE_ID, CPRE_ID, CPRE_ID, /* RSTU */
+  CPRE_ID, CPRE_ID, CPRE_ID, CPRE_ID, /* VWXY */
+  CPRE_ID, /* Z */
+  0, 0, 0, 0, /* [\\]^ */
+  CPRE_ID, /* _ */
+  0, /* ` */
+  CPRE_ID|CPRE_HEX, /* a */
+  CPRE_ID|CPRE_HEX, CPRE_ID|CPRE_HEX, CPRE_ID|CPRE_HEX, /* bcd */
+  CPRE_ID|CPRE_HEX|CPRE_EXP, /* e */
+  CPRE_ID|CPRE_HEX, CPRE_ID, CPRE_ID, CPRE_ID, /* fghi */
+  CPRE_ID, CPRE_ID, CPRE_ID, CPRE_ID, /* jklm */
+  CPRE_ID, CPRE_ID, CPRE_ID|CPRE_EXP, CPRE_ID, /* nopq */
+  CPRE_ID, CPRE_ID, CPRE_ID, CPRE_ID, /* rstu */
+  CPRE_ID, CPRE_ID, CPRE_ID, CPRE_ID, /* vwxy */
+  CPRE_ID, /* z */
+  0, 0, 0, 0, /* {|}~ */
+  0, /* '\x7f' */
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+};
+
+/** Macro to get char type */
+#define preproc_chartype(c, bits) \
+  ((preproc_charbits[(unsigned char)(c)] & bits) != 0)
 
 /** Skip over a comment. */
 static void preproc_skip_comment(const char **cpp)
@@ -137,26 +249,47 @@ static void preproc_skip_comment(const char **cpp)
   *cpp = cp;
 }
 
-/** Skip over whitespace, but not newlines unless preceeded by backlash. */
-static void preproc_skip_whitespace(const char **cpp)
+/** Skip over whitespace, but not newlines unless preceded by backlash. */
+static void preproc_skip_whitespace(
+  const char **cpp, preproc_space_t spacetype)
 {
   const char *cp = *cpp;
 
   for (;;)
     {
-    while (*cp == ' ' || *cp == '\t' || *cp == '\r') { cp++; }
-
-    if (cp[0] == '\\' && cp[1] == '\n')
+    if (preproc_chartype(*cp, spacetype))
       {
-      cp += 2;
+      do
+        {
+        cp++;
+        }
+      while (preproc_chartype(*cp, spacetype));
       }
-    else if (cp[0] == '\\' && cp[1] == '\r' && cp[2] == '\n')
+    if (cp[0] == '\\')
       {
-      cp += 3;
+      if (cp[1] == '\n')
+        {
+        cp += 2;
+        }
+      else if (cp[1] == '\r' && cp[2] == '\n')
+        {
+        cp += 3;
+        }
+      else
+        {
+        break;
+        }
       }
-    else if (cp[0] == '/' && (cp[1] == '/' || cp[1] == '*'))
+    else if (cp[0] == '/' && (spacetype & WS_COMMENT) != WS_COMMENT)
       {
-      preproc_skip_comment(&cp);
+      if (cp[1] == '/' || cp[1] == '*')
+        {
+        preproc_skip_comment(&cp);
+        }
+      else
+        {
+        break;
+        }
       }
     else
       {
@@ -173,13 +306,16 @@ static void preproc_skip_quotes(const char **cpp)
   const char *cp = *cpp;
   const char qc = *cp;
 
-  if (*cp == '\'' || *cp == '\"')
+  if (preproc_chartype(*cp, CPRE_QUOTE))
     {
     cp++;
     while (*cp != qc && *cp != '\n' && *cp != '\0')
       {
-      if (cp[0] == '\\' && cp[1] == qc) { cp++; }
-      cp++;
+      if (*cp++ == '\\')
+        {
+        if (cp[0] == '\r' && cp[1] == '\n') { cp += 2; }
+        else if (*cp != '\0') { cp++; }
+        }
       }
     }
   if (*cp == qc)
@@ -195,21 +331,32 @@ static void preproc_skip_name(const char **cpp)
 {
   const char *cp = *cpp;
 
-  if ((*cp >= 'a' && *cp <= 'z') ||
-      (*cp >= 'A' && *cp <= 'Z') ||
-      (*cp == '_'))
+  if (preproc_chartype(*cp, CPRE_ID))
     {
-    cp++;
-    while ((*cp >= '0' && *cp <= '9') ||
-           (*cp >= 'a' && *cp <= 'z') ||
-           (*cp >= 'A' && *cp <= 'Z') ||
-           (*cp == '_'))
+    do
       {
       cp++;
       }
+    while (preproc_chartype(*cp, CPRE_IDGIT));
+    }
+
+  *cpp = cp;
+}
+
+/** A simple 32-bit hash function based on "djb2". */
+static unsigned int preproc_hash_name(const char **cpp)
+{
+  const char *cp = (*cpp);
+  int h = 5381;
+
+  if (preproc_chartype(*cp, CPRE_ID))
+    {
+    do { h = (h << 5) + h + (unsigned char)*cp++; }
+    while (preproc_chartype(*cp, CPRE_IDGIT));
     }
 
   *cpp = cp;
+  return h;
 }
 
 /** Skip over a number. */
@@ -217,22 +364,19 @@ static void preproc_skip_number(const char **cpp)
 {
   const char *cp = *cpp;
 
-  if ((cp[0] >= '0' && cp[0] <= '9') ||
-      (cp[0] == '.' && (cp[1] >= '0' && cp[1] <= '9')))
+  if (preproc_chartype(cp[0], CPRE_DIGIT) ||
+      (cp[0] == '.' && preproc_chartype(cp[1], CPRE_DIGIT)))
     {
-    cp++;
-    while ((*cp >= '0' && *cp <= '9') ||
-           (*cp >= 'a' && *cp <= 'z') ||
-           (*cp >= 'A' && *cp <= 'Z') ||
-           *cp == '_' || *cp == '.')
+    do
       {
       char c = *cp++;
-      if (c == 'e' || c == 'E' ||
-          c == 'p' || c == 'P')
+      if (preproc_chartype(c, CPRE_EXP) &&
+          preproc_chartype(*cp, CPRE_SIGN))
         {
-        if (*cp == '-' || *cp == '+') { cp++; }
+        cp++;
         }
       }
+    while (preproc_chartype(*cp, CPRE_IDGIT) || *cp == '.');
     }
 
   *cpp = cp;
@@ -242,119 +386,118 @@ static void preproc_skip_number(const char **cpp)
 static int preproc_next(preproc_tokenizer *tokens)
 {
   const char *cp = tokens->text + tokens->len;
-  preproc_skip_whitespace(&cp);
-  tokens->text = cp;
+  preproc_skip_whitespace(&cp, WS_NO_EOL);
 
-  if (cp[0] == '_' ||
-      (cp[0] >= 'a' && cp[0] <= 'z') ||
-      (cp[0] >= 'A' && cp[0] <= 'Z'))
+  if (preproc_chartype(*cp, CPRE_ID))
     {
     const char *ep = cp;
-    preproc_skip_name(&ep);
-    tokens->len = ep - cp;
+    unsigned int h = preproc_hash_name(&ep);
     tokens->tok = TOK_ID;
+    tokens->hash = h;
+    tokens->text = cp;
+    tokens->len = ep - cp;
     }
-  else if ((cp[0] >= '0' && cp[0] <= '9') ||
-           (cp[0] == '.' && (cp[1] >= '0' && cp[1] <= '9')))
+  else if (preproc_chartype(*cp, CPRE_QUOTE))
     {
     const char *ep = cp;
-    preproc_skip_number(&ep);
+    preproc_skip_quotes(&ep);
+    tokens->tok = (*cp == '\"' ? TOK_STRING : TOK_CHAR);
+    tokens->hash = 0;
+    tokens->text = cp;
     tokens->len = ep - cp;
-    tokens->tok = TOK_NUMBER;
     }
-  else if (cp[0] == '\'')
+  else if (preproc_chartype(*cp, CPRE_DIGIT) ||
+           (cp[0] == '.' && preproc_chartype(cp[1], CPRE_DIGIT)))
     {
     const char *ep = cp;
-    preproc_skip_quotes(&ep);
+    preproc_skip_number(&ep);
+    tokens->tok = TOK_NUMBER;
+    tokens->hash = 0;
+    tokens->text = cp;
     tokens->len = ep - cp;
-    tokens->tok = TOK_CHAR;
     }
-  else if (cp[0] == '\"')
+  else if (cp[0] == '/' && (cp[1] == '/' || cp[1] == '*'))
     {
     const char *ep = cp;
-    preproc_skip_quotes(&ep);
+    preproc_skip_comment(&ep);
+    tokens->tok = TOK_COMMENT;
+    tokens->hash = 0;
+    tokens->text = cp;
     tokens->len = ep - cp;
-    tokens->tok = TOK_STRING;
     }
   else
     {
+    int t = cp[0];
+    size_t l = 1;
+
     switch (cp[0])
       {
       case ':':
-        if (cp[1] == ':') { tokens->len = 2; tokens->tok = TOK_OTHER; }
-        else { tokens->len = 1; tokens->tok = cp[0]; }
+        if (cp[1] == ':') { l = 2; t = TOK_SCOPE; }
         break;
       case '.':
-        if (cp[1] == '.' && cp[2] == '.')
-          { tokens->len = 3; tokens->tok = TOK_ELLIPSIS; }
-        else if (cp[1] == '*') { tokens->len = 2; tokens->tok = TOK_OTHER; }
-        else { tokens->len = 1; tokens->tok = cp[0]; }
+        if (cp[1] == '.' && cp[2] == '.') { l = 3; t = TOK_ELLIPSIS; }
+        else if (cp[1] == '*') { l = 2; t = TOK_DOT_STAR; }
         break;
       case '=':
-        if (cp[1] == '=') { tokens->len = 2; tokens->tok = TOK_EQ; }
-        else { tokens->len = 1; tokens->tok = cp[0]; }
+        if (cp[1] == '=') { l = 2; t = TOK_EQ; }
         break;
       case '!':
-        if (cp[1] == '=') { tokens->len = 2; tokens->tok = TOK_NE; }
-        else { tokens->len = 1; tokens->tok = cp[0]; }
+        if (cp[1] == '=') { l = 2; t = TOK_NE; }
         break;
       case '<':
-        if (cp[1] == '<' && cp[2] == '=')
-          { tokens->len = 3; tokens->tok = TOK_OTHER; }
-        else if (cp[1] == '<') { tokens->len = 2; tokens->tok = TOK_RSHIFT; }
-        else if (cp[1] == '=') { tokens->len = 2; tokens->tok = TOK_LE; }
-        else { tokens->len = 1; tokens->tok = cp[0]; }
+        if (cp[1] == '<' && cp[2] == '=') { l = 3; t = TOK_LSHIFT_EQ; }
+        else if (cp[1] == '<') { l = 2; t = TOK_LSHIFT; }
+        else if (cp[1] == '=') { l = 2; t = TOK_LE; }
         break;
       case '>':
-        if (cp[1] == '>' && cp[2] == '=')
-          { tokens->len = 3; tokens->tok = TOK_OTHER; }
-        else if (cp[1] == '>') { tokens->len = 2; tokens->tok = TOK_LSHIFT; }
-        else if (cp[1] == '=') { tokens->len = 2; tokens->tok = TOK_GE; }
-        else { tokens->len = 1; tokens->tok = cp[0]; }
+        if (cp[1] == '>' && cp[2] == '=') { l = 3; t = TOK_RSHIFT_EQ; }
+        else if (cp[1] == '>') { l = 2; t = TOK_RSHIFT; }
+        else if (cp[1] == '=') { l = 2; t = TOK_GE; }
         break;
       case '&':
-        if (cp[1] == '&' && cp[2] == '=')
-          { tokens->len = 3; tokens->tok = TOK_OTHER; }
-        else if (cp[1] == '=') { tokens->len = 2; tokens->tok = TOK_OTHER; }
-        else if (cp[1] == '&') { tokens->len = 2; tokens->tok = TOK_AND; }
-        else { tokens->len = 1; tokens->tok = cp[0]; }
+        if (cp[1] == '=') { l = 2; t = TOK_AND_EQ; }
+        else if (cp[1] == '&') { l = 2; t = TOK_AND; }
         break;
       case '|':
-        if (cp[1] == '|' && cp[2] == '=')
-          { tokens->len = 3; tokens->tok = TOK_OTHER; }
-        else if (cp[1] == '=') { tokens->len = 2; tokens->tok = TOK_OTHER; }
-        else if (cp[1] == '|') { tokens->len = 2; tokens->tok = TOK_OR; }
-        else { tokens->len = 1; tokens->tok = cp[0]; }
+        if (cp[1] == '=') { l = 2; t = TOK_OR_EQ; }
+        else if (cp[1] == '|') { l = 2; t = TOK_OR; }
+        break;
+      case '^':
+        if (cp[1] == '=') { l = 2; t = TOK_XOR_EQ; }
+        break;
+      case '*':
+        if (cp[1] == '=') { l = 2; t = TOK_MUL_EQ; }
         break;
-      case '^': case '*': case '/': case '%':
-        if (cp[1] == '=') { tokens->len = 2; tokens->tok = TOK_OTHER; }
-        else { tokens->len = 1; tokens->tok = cp[0]; }
+      case '/':
+        if (cp[1] == '=') { l = 2; t = TOK_DIV_EQ; }
+        break;
+      case '%':
+        if (cp[1] == '=') { l = 2; t = TOK_MOD_EQ; }
         break;
       case '+':
-        if (cp[1] == '+') { tokens->len = 2; tokens->tok = TOK_OTHER; }
-        else if (cp[1] == '=') { tokens->len = 2; tokens->tok = TOK_OTHER; }
-        else { tokens->len = 1; tokens->tok = cp[0]; }
+        if (cp[1] == '+') { l = 2; t = TOK_INCR; }
+        else if (cp[1] == '=') { l = 2; t = TOK_ADD_EQ; }
         break;
       case '-':
-        if (cp[1] == '>' && cp[2] == '*')
-          { tokens->len = 3; tokens->tok = TOK_OTHER; }
-        else if (cp[1] == '>') { tokens->len = 2; tokens->tok = TOK_OTHER; }
-        else if (cp[1] == '-') { tokens->len = 2; tokens->tok = TOK_OTHER; }
-        else if (cp[1] == '=') { tokens->len = 2; tokens->tok = TOK_OTHER; }
-        else { tokens->len = 1; tokens->tok = cp[0]; }
+        if (cp[1] == '>' && cp[2] == '*') { l = 3; t = TOK_ARROW_STAR; }
+        else if (cp[1] == '>') { l = 2; t = TOK_ARROW; }
+        else if (cp[1] == '-') { l = 2; t = TOK_DECR; }
+        else if (cp[1] == '=') { l = 2; t = TOK_SUB_EQ; }
         break;
       case '#':
-        if (cp[1] == '#') { tokens->len = 2; tokens->tok = TOK_DBLHASH; }
-        else { tokens->len = 1; tokens->tok = cp[0]; }
+        if (cp[1] == '#') { l = 2; t = TOK_DBLHASH; }
         break;
       case '\n':
       case '\0':
-        { tokens->len = 0; tokens->tok = 0; }
-        break;
-      default:
-        { tokens->len = 1; tokens->tok = cp[0]; }
+        { l = 0; t = 0; }
         break;
       }
+
+    tokens->tok = t;
+    tokens->hash = 0;
+    tokens->text = cp;
+    tokens->len = l;
     }
 
   return tokens->tok;
@@ -364,11 +507,50 @@ static int preproc_next(preproc_tokenizer *tokens)
 static void preproc_init(preproc_tokenizer *tokens, const char *text)
 {
   tokens->tok = 0;
-  tokens->len = 0;
+  tokens->hash = 0;
   tokens->text = text;
+  tokens->len = 0;
   preproc_next(tokens);
 }
 
+/** Tokenize and compare two strings */
+static int preproc_identical(const char *text1, const char *text2)
+{
+  int result = 1;
+
+  if (text1 != text2)
+    {
+    result = 0;
+
+    if (text1 && text2)
+      {
+      preproc_tokenizer t1;
+      preproc_tokenizer t2;
+
+      preproc_init(&t1, text1);
+      preproc_init(&t2, text2);
+
+      do
+        {
+        if (t1.tok != t2.tok ||
+            t1.hash != t2.hash ||
+            t1.len != t2.len ||
+            strncmp(t1.text, t2.text, t1.len) != 0)
+          {
+          break;
+          }
+        preproc_next(&t1);
+        preproc_next(&t2);
+        }
+      while (t1.tok && t2.tok);
+
+      result = (t1.tok == 0 && t2.tok == 0);
+      }
+    }
+
+  return result;
+}
+
 /** Duplicate the first n bytes of a string. */
 static const char *preproc_strndup(const char *in, size_t n)
 {
@@ -381,23 +563,8 @@ static const char *preproc_strndup(const char *in, size_t n)
   return res;
 }
 
-/** Free a preprocessor macro struct. */
-static void preproc_free_macro(MacroInfo *info)
-{
-  free(info);
-}
-
-/** Add a preprocessor macro to the PreprocessInfo. */
-static void preproc_add_macro(
-  PreprocessInfo *info, MacroInfo *macro)
-{
-  info->Macros = (MacroInfo **)preproc_array_check(
-    info->Macros, sizeof(MacroInfo *), info->NumberOfMacros);
-  info->Macros[info->NumberOfMacros++] = macro;
-}
-
-/** A simple way to add a preprocessor macro definition. */
-static MacroInfo *preproc_add_macro_definition(
+/** Create a new preprocessor macro. */
+static MacroInfo *preproc_new_macro(
   PreprocessInfo *info, const char *name, const char *definition)
 {
   MacroInfo *macro = (MacroInfo *)malloc(sizeof(MacroInfo));
@@ -430,58 +597,179 @@ static MacroInfo *preproc_add_macro_definition(
     }
 
   macro->IsExternal = info->IsExternal;
-  preproc_add_macro(info, macro);
 
   return macro;
 }
 
+/** Free a preprocessor macro struct. */
+static void preproc_free_macro(MacroInfo *info)
+{
+  free(info);
+}
+
 /** Find a preprocessor macro, return 0 if not found. */
-static int preproc_find_macro(
-  PreprocessInfo *info, const char *name, int *idx)
+static MacroInfo *preproc_find_macro(
+  PreprocessInfo *info, preproc_tokenizer *token)
 {
-  int i, n;
-  size_t m;
-  const char *cp = name;
+  unsigned int m = PREPROC_HASH_TABLE_SIZE - 1;
+  unsigned int i = (token->hash & m);
+  const char *name = token->text;
+  size_t l = token->len;
+  MacroInfo ***htable = info->MacroHashTable;
+  MacroInfo **hptr;
+  const char *mname;
+
+  if (htable && ((hptr = htable[i]) != NULL) && *hptr)
+    {
+    do
+      {
+      mname = (*hptr)->Name;
+      if (mname[0] == name[0] &&
+          strncmp(mname, name, l) == 0 &&
+          mname[l] == '\0')
+        {
+        return *hptr;
+        }
+      hptr++;
+      }
+    while (*hptr);
+    }
+
+  return NULL;
+}
 
-  preproc_skip_name(&cp);
-  m = cp - name;
+/** Return the address of the macro within the hash table.
+  * If "insert" is nonzero, add a new location if macro not found. */
+static MacroInfo **preproc_macro_location(
+  PreprocessInfo *info, preproc_tokenizer *token, int insert)
+{
+  MacroInfo ***htable = info->MacroHashTable;
+  unsigned int m = PREPROC_HASH_TABLE_SIZE - 1;
+  unsigned int i = (token->hash & m);
+  const char *name = token->text;
+  size_t l = token->len;
+  size_t n;
+  MacroInfo **hptr;
+  const char *mname;
 
-  n = info->NumberOfMacros;
-  for (i = 0; i < n; i++)
+  if (htable == NULL)
     {
-    if (strncmp(name, info->Macros[i]->Name, m) == 0 &&
-        info->Macros[i]->Name[m] == '\0')
+    if (!insert)
       {
-      *idx = i;
-      return 1;
+      return NULL;
       }
+
+    m = PREPROC_HASH_TABLE_SIZE;
+    htable = (MacroInfo ***)malloc(m*sizeof(MacroInfo **));
+    info->MacroHashTable = htable;
+    do { *htable++ = NULL; } while (--m);
+    htable = info->MacroHashTable;
     }
 
-  *idx = 0;
-  return 0;
+  hptr = htable[i];
+
+  if (hptr == NULL)
+    {
+    if (!insert)
+      {
+      return NULL;
+      }
+
+    hptr = (MacroInfo **)malloc(2*sizeof(MacroInfo *));
+    hptr[0] = NULL;
+    hptr[1] = NULL;
+    htable[i] = hptr;
+    }
+  else if (*hptr)
+    {
+    /* see if macro is already there */
+    n = 0;
+    do
+      {
+      mname = (*hptr)->Name;
+      if (mname[0] == name[0] &&
+          strncmp(mname, name, l) == 0 &&
+          mname[l] == '\0')
+        {
+        break;
+        }
+      n++;
+      hptr++;
+      }
+    while (*hptr);
+
+    if (*hptr == NULL)
+      {
+      if (!insert)
+        {
+        return NULL;
+        }
+
+      /* if n+1 is a power of two, double allocated space */
+      if (n > 0 && (n & (n+1)) == 0)
+        {
+        hptr = htable[i];
+        hptr = (MacroInfo **)realloc(hptr, (2*(n+1))*sizeof(MacroInfo *));
+        htable[i] = hptr;
+        hptr += n;
+        }
+
+      /* add a terminating null */
+      hptr[1] = NULL;
+      }
+    }
+
+  return hptr;
 }
 
-/** Remove a preprocessor macro.  Returns 1 if macro not found. */
+/** Remove a preprocessor macro.  Returns 0 if macro not found. */
 static int preproc_remove_macro(
-  PreprocessInfo *info, const char *name)
+  PreprocessInfo *info, preproc_tokenizer *token)
 {
-  int i, n;
+  MacroInfo **hptr;
+
+  hptr = preproc_macro_location(info, token, 0);
 
-  if (preproc_find_macro(info, name, &i))
+  if (hptr && *hptr)
     {
-    preproc_free_macro(info->Macros[i]);
-    n = info->NumberOfMacros-1;
-    for (; i < n; i++)
+    preproc_free_macro(*hptr);
+
+    do
       {
-      info->Macros[i] = info->Macros[i+1];
+      hptr[0] = hptr[1];
+      hptr++;
       }
-    info->NumberOfMacros = n;
+    while (*hptr);
+
     return 1;
     }
 
   return 0;
 }
 
+/** A simple way to add a preprocessor macro definition. */
+static MacroInfo *preproc_add_macro_definition(
+  PreprocessInfo *info, const char *name, const char *definition)
+{
+  preproc_tokenizer token;
+  MacroInfo *macro;
+  MacroInfo **macro_p;
+
+  preproc_init(&token, name);
+
+  macro = preproc_new_macro(info, name, definition);
+  macro_p = preproc_macro_location(info, &token, 1);
+#if PREPROC_DEBUG
+  if (*macro_p)
+    {
+    fprintf(stderr, "duplicate macro definition %s\n", name);
+    }
+#endif
+  *macro_p = macro;
+
+  return macro;
+}
+
 /** Skip over parentheses, return nonzero if not closed. */
 static int preproc_skip_parentheses(preproc_tokenizer *tokens)
 {
@@ -510,6 +798,9 @@ static int preproc_skip_parentheses(preproc_tokenizer *tokens)
     return VTK_PARSE_OK;
     }
 
+#if PREPROC_DEBUG
+  fprintf(stderr, "syntax error %d\n", __LINE__);
+#endif
   return VTK_PARSE_SYNTAX_ERROR;
 }
 
@@ -543,15 +834,12 @@ static int preproc_evaluate_char(
       else if (*cp == '0')
         {
         *val = string_to_preproc_int(cp, 8);
-        while (*cp >= '0' && *cp <= '7') { cp++; }
+        do { cp++; } while (*cp >= '0' && *cp <= '7');
         }
       else if (*cp == 'x')
         {
-        cp++;
-        *val = string_to_preproc_int(cp, 16);
-        while ((*cp >= '0' && *cp <= '9') ||
-               (*cp >= 'a' && *cp <= 'z') ||
-               (*cp >= 'A' && *cp <= 'Z')) { cp++; }
+        *val = string_to_preproc_int(cp+1, 16);
+        do { cp++; } while (preproc_chartype(*cp, CPRE_HEX));
         }
       }
     if (*cp != '\'')
@@ -586,14 +874,12 @@ static int preproc_evaluate_integer(
     base = 16;
     *is_unsigned = 1;
     ep = cp;
-    while ((*ep >= '0' && *ep <= '9') ||
-           (*ep >= 'a' && *ep <= 'f') ||
-           (*ep >= 'A' && *ep <= 'F'))
+    while (preproc_chartype(*ep, CPRE_HEX))
       {
       ep++;
       }
     }
-  else if (cp[0] == '0' && (cp[1] >= '0' && cp[1] <= '9'))
+  else if (cp[0] == '0' && preproc_chartype(cp[1], CPRE_DIGIT))
     {
     cp += 1;
     base = 8;
@@ -608,7 +894,7 @@ static int preproc_evaluate_integer(
     {
     base = 10;
     *is_unsigned = 0;
-    while (*ep >= '0' && *ep <= '9')
+    while (preproc_chartype(*ep, CPRE_DIGIT))
       {
       ep++;
       }
@@ -651,29 +937,12 @@ static int preproc_evaluate_single(
 {
   int result = VTK_PARSE_OK;
 
-  if (tokens->tok == '(')
-    {
-    preproc_next(tokens);
-    result = preproc_evaluate_expression(info, tokens, val, is_unsigned);
-    if ((result & VTK_PARSE_FATAL_ERROR) == 0)
-      {
-      if (tokens->tok == ')')
-        {
-        preproc_next(tokens);
-        return result;
-        }
-#if PREPROC_DEBUG
-      fprintf(stderr, "syntax error %d\n", __LINE__);
-#endif
-      return VTK_PARSE_SYNTAX_ERROR;
-      }
-    return result;
-    }
-  else if (tokens->tok == TOK_ID)
+  while (tokens->tok == TOK_ID)
     {
-    if (strncmp("defined", tokens->text, tokens->len) == 0)
+    /* handle the "defined" keyword */
+    if (tokens->hash == HASH_DEFINED && tokens->len == 7 &&
+        strncmp("defined", tokens->text, tokens->len) == 0)
       {
-      const char *name;
       int paren = 0;
       preproc_next(tokens);
 
@@ -684,12 +953,18 @@ static int preproc_evaluate_single(
         }
       if (tokens->tok != TOK_ID)
         {
+        *val = 0;
+        *is_unsigned = 0;
 #if PREPROC_DEBUG
         fprintf(stderr, "syntax error %d\n", __LINE__);
 #endif
         return VTK_PARSE_SYNTAX_ERROR;
         }
-      name = tokens->text;
+
+      /* do the name lookup */
+      *is_unsigned = 0;
+      *val = (preproc_find_macro(info, tokens) != 0);
+
       preproc_next(tokens);
       if (paren)
         {
@@ -703,65 +978,79 @@ static int preproc_evaluate_single(
         preproc_next(tokens);
         }
 
-      /* do the name lookup */
-      *is_unsigned = 0;
-      *val = (vtkParsePreprocess_GetMacro(info, name) != NULL);
-
       return result;
       }
     else
       {
       /* look up and evaluate the macro */
-      const char *name = tokens->text;
-      MacroInfo *macro = vtkParsePreprocess_GetMacro(info, name);
+      MacroInfo *macro = preproc_find_macro(info, tokens);
+      const char *args = NULL;
+      const char *expansion = NULL;
+      const char *cp;
       preproc_next(tokens);
+      *val = 0;
+      *is_unsigned = 0;
 
-      if (macro == NULL)
+      if (macro == NULL || macro->IsExcluded)
         {
-        *val = 0;
-        *is_unsigned = 0;
         return VTK_PARSE_MACRO_UNDEFINED;
         }
       else if (macro->IsFunction)
         {
         /* expand function macros using the arguments */
-        if (tokens->tok == '(')
+        args = tokens->text;
+        if (tokens->tok != '(' ||
+            preproc_skip_parentheses(tokens) != VTK_PARSE_OK)
           {
-          const char *args = tokens->text;
-          *val = 0;
-          *is_unsigned = 0;
-          if (preproc_skip_parentheses(tokens) == VTK_PARSE_OK)
-            {
-            const char *expansion;
-            expansion = vtkParsePreprocess_ExpandMacro(macro, args);
-            if (expansion)
-              {
-              result = vtkParsePreprocess_EvaluateExpression(
-                info, expansion, val, is_unsigned);
-              vtkParsePreprocess_FreeExpandedMacro(expansion);
-              return result;
-              }
-#if PREPROC_DEBUG
-            fprintf(stderr, "wrong number of macro args %d\n", __LINE__);
-#endif
-            }
 #if PREPROC_DEBUG
           fprintf(stderr, "syntax error %d\n", __LINE__);
 #endif
           return VTK_PARSE_SYNTAX_ERROR;
           }
-        else
-          {
+        }
+      expansion = vtkParsePreprocess_ExpandMacro(info, macro, args);
+      if (expansion == NULL)
+        {
+        free((char *)args);
 #if PREPROC_DEBUG
-          fprintf(stderr, "syntax error %d\n", __LINE__);
+        fprintf(stderr, "syntax error %d\n", __LINE__);
 #endif
-          return VTK_PARSE_SYNTAX_ERROR;
-          }
+        return (args ? VTK_PARSE_MACRO_NUMARGS : VTK_PARSE_SYNTAX_ERROR);
+        }
+      cp = expansion;
+      preproc_skip_whitespace(&cp, WS_NO_EOL);
+      if (*cp != '\0')
+        {
+        macro->IsExcluded = 1;
+        result = vtkParsePreprocess_EvaluateExpression(
+          info, expansion, val, is_unsigned);
+        macro->IsExcluded = 0;
+        vtkParsePreprocess_FreeMacroExpansion(
+          info, macro, expansion);
+        return result;
         }
+      vtkParsePreprocess_FreeMacroExpansion(info, macro, expansion);
+      }
+    /* if macro expansion was empty, continue */
+    }
 
-      return vtkParsePreprocess_EvaluateExpression(
-        info, macro->Definition, val, is_unsigned);
+  if (tokens->tok == '(')
+    {
+    preproc_next(tokens);
+    result = preproc_evaluate_expression(info, tokens, val, is_unsigned);
+    if ((result & VTK_PARSE_FATAL_ERROR) == 0)
+      {
+      if (tokens->tok == ')')
+        {
+        preproc_next(tokens);
+        return result;
+        }
+#if PREPROC_DEBUG
+      fprintf(stderr, "syntax error %d\n", __LINE__);
+#endif
+      return VTK_PARSE_SYNTAX_ERROR;
       }
+    return result;
     }
   else if (tokens->tok == TOK_NUMBER)
     {
@@ -785,9 +1074,15 @@ static int preproc_evaluate_single(
     *val = 0;
     *is_unsigned = 0;
     preproc_next(tokens);
+    while (tokens->tok == TOK_STRING)
+      {
+      preproc_next(tokens);
+      }
     return VTK_PARSE_PREPROC_STRING;
     }
 
+  *val = 0;
+  *is_unsigned = 0;
 #if PREPROC_DEBUG
   fprintf(stderr, "syntax error %d \"%*.*s\"\n", __LINE__,
           (int)tokens->len, (int)tokens->len, tokens->text);
@@ -970,7 +1265,7 @@ static int preproc_evaluate_bitshift(
     {
     op = tokens->tok;
 
-    if (op != TOK_RSHIFT && op != TOK_LSHIFT)
+    if (op != TOK_LSHIFT && op != TOK_RSHIFT)
       {
       return result;
       }
@@ -981,22 +1276,22 @@ static int preproc_evaluate_bitshift(
 
     if (*is_unsigned)
       {
-      if (op == TOK_RSHIFT)
+      if (op == TOK_LSHIFT)
         {
         *val = (preproc_int_t)((preproc_uint_t)*val << rval);
         }
-      else if (op == TOK_LSHIFT)
+      else if (op == TOK_RSHIFT)
         {
         *val = (preproc_int_t)((preproc_uint_t)*val >> rval);
         }
       }
     else
       {
-      if (op == TOK_RSHIFT)
+      if (op == TOK_LSHIFT)
         {
         *val = *val << rval;
         }
-      else if (op == TOK_LSHIFT)
+      else if (op == TOK_RSHIFT)
         {
         *val = *val >> rval;
         }
@@ -1214,7 +1509,7 @@ static int preproc_evaluate_logic_and(
       /* short circuit */
       while (tokens->tok != 0 && tokens->tok != ')' &&
              tokens->tok != ':' && tokens->tok != '?' &&
-             tokens->tok != TOK_OR && tokens->tok != TOK_OTHER)
+             tokens->tok != ',' && tokens->tok != TOK_OR)
         {
         if (tokens->tok == '(')
           {
@@ -1269,7 +1564,7 @@ static int preproc_evaluate_logic_or(
       /* short circuit */
       while (tokens->tok != 0 && tokens->tok != ')' &&
              tokens->tok != ':' && tokens->tok != '?' &&
-             tokens->tok != TOK_OTHER)
+             tokens->tok != ',')
         {
         if (tokens->tok == '(')
           {
@@ -1372,6 +1667,9 @@ int preproc_evaluate_conditional(
     {
     if (tokens->tok != 0)
       {
+#if PREPROC_DEBUG
+      fprintf(stderr, "syntax error %d\n", __LINE__);
+#endif
       return VTK_PARSE_SYNTAX_ERROR;
       }
     return (rval == 0 ? VTK_PARSE_SKIP : VTK_PARSE_OK);
@@ -1389,23 +1687,24 @@ int preproc_evaluate_conditional(
 static int preproc_evaluate_if(
   PreprocessInfo *info, preproc_tokenizer *tokens)
 {
+  MacroInfo *macro;
   int v1, v2;
   int result = VTK_PARSE_OK;
 
-  if (strncmp("if", tokens->text, tokens->len) == 0 ||
-      strncmp("ifdef", tokens->text, tokens->len) == 0 ||
-      strncmp("ifndef", tokens->text, tokens->len) == 0)
+  if (tokens->hash == HASH_IF ||
+      tokens->hash == HASH_IFDEF ||
+      tokens->hash == HASH_IFNDEF)
     {
     if (info->ConditionalDepth == 0)
       {
-      if (strncmp("if", tokens->text, tokens->len) == 0)
+      if (tokens->hash == HASH_IF)
         {
         preproc_next(tokens);
         result = preproc_evaluate_conditional(info, tokens);
         }
       else
         {
-        v1 = (strncmp("ifndef", tokens->text, tokens->len) != 0);
+        v1 = (tokens->hash != HASH_IFNDEF);
         preproc_next(tokens);
         if (tokens->tok != TOK_ID)
           {
@@ -1414,7 +1713,8 @@ static int preproc_evaluate_if(
 #endif
           return VTK_PARSE_SYNTAX_ERROR;
           }
-        v2 = (vtkParsePreprocess_GetMacro(info, tokens->text) != 0);
+        macro = preproc_find_macro(info, tokens);
+        v2 = (macro && !macro->IsExcluded);
         preproc_next(tokens);
         result = ( (v1 ^ v2) ? VTK_PARSE_SKIP : VTK_PARSE_OK);
         }
@@ -1438,18 +1738,18 @@ static int preproc_evaluate_if(
       info->ConditionalDepth++;
       }
     }
-  else if (strncmp("elif", tokens->text, tokens->len) == 0 ||
-           strncmp("else", tokens->text, tokens->len) == 0)
+  else if (tokens->hash == HASH_ELIF ||
+           tokens->hash == HASH_ELSE)
     {
     if (info->ConditionalDepth == 0)
       {
-      /* preceeding clause was not skipped, so must skip this one */
+      /* preceding clause was not skipped, so must skip this one */
       info->ConditionalDepth = 1;
       }
     else if (info->ConditionalDepth == 1 &&
              info->ConditionalDone == 0)
       {
-      if (strncmp("elif", tokens->text, tokens->len) == 0)
+      if (tokens->hash == HASH_ELIF)
         {
         preproc_next(tokens);
         result = preproc_evaluate_conditional(info, tokens);
@@ -1467,7 +1767,7 @@ static int preproc_evaluate_if(
         }
       }
     }
-  else if (strncmp("endif", tokens->text, tokens->len) == 0)
+  else if (tokens->hash == HASH_ENDIF)
     {
     preproc_next(tokens);
     if (info->ConditionalDepth > 0)
@@ -1491,16 +1791,16 @@ static int preproc_evaluate_if(
 static int preproc_evaluate_define(
   PreprocessInfo *info, preproc_tokenizer *tokens)
 {
+  MacroInfo **macro_p;
   MacroInfo *macro;
   int is_function;
   const char *name;
   size_t namelen;
-  const char *definition = "";
-  int i;
+  const char *definition = 0;
   int n = 0;
-  const char **args = NULL;
+  const char **params = NULL;
 
-  if (strncmp("define", tokens->text, tokens->len) == 0)
+  if (tokens->hash == HASH_DEFINE)
     {
     preproc_next(tokens);
     if (tokens->tok != TOK_ID)
@@ -1511,6 +1811,7 @@ static int preproc_evaluate_define(
       return VTK_PARSE_SYNTAX_ERROR;
       }
 
+    macro_p = preproc_macro_location(info, tokens, 1);
     name = tokens->text;
     namelen = tokens->len;
     preproc_next(tokens);
@@ -1524,7 +1825,7 @@ static int preproc_evaluate_define(
         {
         if (tokens->tok != TOK_ID && tokens->tok != TOK_ELLIPSIS)
           {
-          if (args) { free((char **)args); }
+          if (params) { free((char **)params); }
 #if PREPROC_DEBUG
           fprintf(stderr, "syntax error %d\n", __LINE__);
 #endif
@@ -1532,9 +1833,9 @@ static int preproc_evaluate_define(
           }
 
         /* add to the arg list */
-        args = (const char **)preproc_array_check(
-          (char **)args, sizeof(char *), n);
-        args[n++] = preproc_strndup(tokens->text, tokens->len);
+        params = (const char **)preproc_array_check(
+          (char **)params, sizeof(char *), n);
+        params[n++] = preproc_strndup(tokens->text, tokens->len);
 
         preproc_next(tokens);
         if (tokens->tok == ',')
@@ -1543,7 +1844,7 @@ static int preproc_evaluate_define(
           }
         else if (tokens->tok != ')')
           {
-          if (args) { free((char **)args); }
+          if (params) { free((char **)params); }
 #if PREPROC_DEBUG
           fprintf(stderr, "syntax error %d\n", __LINE__);
 #endif
@@ -1557,22 +1858,30 @@ static int preproc_evaluate_define(
       {
       definition = tokens->text;
       }
-    if (preproc_find_macro(info, name, &i))
+
+    macro = *macro_p;
+    if (macro)
       {
-      if (args) { free((char **)args); }
+      if (preproc_identical(macro->Definition, definition))
+        {
+        return VTK_PARSE_OK;
+        }
+      if (params) { free((char **)params); }
 #if PREPROC_DEBUG
       fprintf(stderr, "macro redefined %d\n", __LINE__);
 #endif
       return VTK_PARSE_MACRO_REDEFINED;
       }
 
-    macro = preproc_add_macro_definition(info, name, definition);
+    macro = preproc_new_macro(info, name, definition);
     macro->IsFunction = is_function;
-    macro->NumberOfArguments = n;
-    macro->Arguments = args;
+    macro->NumberOfParameters = n;
+    macro->Parameters = params;
+    *macro_p = macro;
+
     return VTK_PARSE_OK;
     }
-  else if (strncmp("undef", tokens->text, tokens->len) == 0)
+  else if (tokens->hash == HASH_UNDEF)
     {
     preproc_next(tokens);
     if (tokens->tok != TOK_ID)
@@ -1582,8 +1891,7 @@ static int preproc_evaluate_define(
 #endif
       return VTK_PARSE_SYNTAX_ERROR;
       }
-    name = tokens->text;
-    preproc_remove_macro(info, name);
+    preproc_remove_macro(info, tokens);
     return VTK_PARSE_OK;
     }
 
@@ -1596,6 +1904,7 @@ static int preproc_evaluate_define(
 static int preproc_add_include_file(PreprocessInfo *info, const char *name)
 {
   int i, n;
+  char *dp;
 
   n = info->NumberOfIncludeFiles;
   for (i = 0; i < n; i++)
@@ -1606,9 +1915,12 @@ static int preproc_add_include_file(PreprocessInfo *info, const char *name)
       }
     }
 
+  dp = (char *)malloc(strlen(name)+1);
+  strcpy(dp, name);
+
   info->IncludeFiles = (const char **)preproc_array_check(
     (char **)info->IncludeFiles, sizeof(char *), info->NumberOfIncludeFiles);
-  info->IncludeFiles[info->NumberOfIncludeFiles++] = name;
+  info->IncludeFiles[info->NumberOfIncludeFiles++] = dp;
 
   return 1;
 }
@@ -1649,10 +1961,7 @@ const char *preproc_find_include_file(
 
   /* check for absolute path of form DRIVE: or /path/to/file */
   j = 0;
-  while (filename[j] == '_' ||
-         (filename[j] >= '0' && filename[j] <= '9') ||
-         (filename[j] >= 'a' && filename[j] <= 'z') ||
-         (filename[j] >= 'Z' && filename[j] <= 'Z')) { j++; }
+  while (preproc_chartype(filename[j], CPRE_IDGIT)) { j++; }
 
   if (filename[j] == ':' || filename[0] == '/' || filename[0] == '\\')
     {
@@ -1787,10 +2096,10 @@ static int preproc_include_file(
   PreprocessInfo *info, const char *filename, int system_first)
 {
   char *tbuf;
-  size_t tbuflen = 8192;
+  size_t tbuflen = FILE_BUFFER_SIZE;
   char *line;
   size_t linelen = 80;
-  size_t i, j, n;
+  size_t i, j, n, r;
   int in_comment = 0;
   int in_quote = 0;
   int result = VTK_PARSE_OK;
@@ -1849,29 +2158,48 @@ static int preproc_include_file(
   info->IsExternal = 1;
   info->FileName = path;
 
-  tbuf = (char *)malloc(tbuflen);
+  tbuf = (char *)malloc(tbuflen+4);
   line = (char *)malloc(linelen);
 
   /* the buffer must hold a whole line for it to be processed */
   j = 0;
   i = 0;
   n = 0;
+  r = 0;
 
   do
     {
-    if (i == n)
+    if (i >= n)
       {
+      /* recycle unused lookahead chars */
+      if (r)
+        {
+        r = n + 2 - i;
+        if (r == 2)
+          {
+          tbuf[0] = tbuf[tbuflen-2];
+          tbuf[1] = tbuf[tbuflen-1];
+          }
+        else if (r == 1)
+          {
+          tbuf[0] = tbuf[tbuflen-1];
+          }
+        }
+
       /* read the next chunk of the file */
       i = 0;
       if (feof(fp))
         {
-        n = 0;
+        /* still have the lookahead chars left */
+        n = r;
+        r = 0;
         }
       else
         {
+        /* fill the remainder of the buffer */
         errno = 0;
-        i = 0;
-        while ((n = fread(tbuf, 1, tbuflen, fp)) == 0 && ferror(fp))
+        tbuflen = r + FILE_BUFFER_SIZE;
+        while ((n = fread(&tbuf[r], 1, tbuflen-r, fp)) == 0 && ferror(fp))
           {
           if (errno != EINTR)
             {
@@ -1884,6 +2212,22 @@ static int preproc_include_file(
           errno = 0;
           clearerr(fp);
           }
+
+        if (n + r < tbuflen)
+          {
+          /* this only occurs if the final fread does not fill the buffer */
+          n += r;
+          r = 0;
+          }
+        else
+          {
+          /* set a lookahead reserve of two chars */
+          n -= (2 - r);
+          r = 2;
+          }
+
+        /* guard against lookahead past last char in file */
+        tbuf[n + r] = '\0';
         }
       }
 
@@ -1891,7 +2235,7 @@ static int preproc_include_file(
     while (i < n)
       {
       /* expand line buffer as necessary */
-      if (j+4 > linelen)
+      while (j+4 > linelen)
         {
         linelen *= 2;
         line = (char *)realloc(line, linelen);
@@ -1917,7 +2261,7 @@ static int preproc_include_file(
           line[j++] = tbuf[i++];
           in_quote = 0;
           }
-        else if (tbuf[i] == '\\' && tbuf[i] == '\"')
+        else if (tbuf[i] == '\\' && tbuf[i+1] != '\0')
           {
           line[j++] = tbuf[i++];
           line[j++] = tbuf[i++];
@@ -1927,7 +2271,7 @@ static int preproc_include_file(
           line[j++] = tbuf[i++];
           }
         }
-      else if (tbuf[i] == '/' && tbuf[i] == '*')
+      else if (tbuf[i] == '/' && tbuf[i+1] == '*')
         {
         line[j++] = tbuf[i++];
         line[j++] = tbuf[i++];
@@ -1965,7 +2309,7 @@ static int preproc_include_file(
       const char *cp = line;
       line[j] = '\0';
       j = 0;
-      preproc_skip_whitespace(&cp);
+      preproc_skip_whitespace(&cp, WS_NO_EOL);
       if (*cp == '#')
         {
         vtkParsePreprocess_HandleDirective(info, line);
@@ -1994,7 +2338,7 @@ static int preproc_evaluate_include(
   const char *cp;
   const char *filename;
 
-  if (strncmp("include", tokens->text, tokens->len) == 0)
+  if (tokens->hash == HASH_INCLUDE)
     {
     preproc_next(tokens);
 
@@ -2002,9 +2346,8 @@ static int preproc_evaluate_include(
 
     if (tokens->tok == TOK_ID)
       {
-      MacroInfo *macro;
-      macro = vtkParsePreprocess_GetMacro(info, cp);
-      if (macro && macro->Definition)
+      MacroInfo *macro = preproc_find_macro(info, tokens);
+      if (macro && !macro->IsExcluded && macro->Definition)
         {
         cp = macro->Definition;
         }
@@ -2067,12 +2410,18 @@ int vtkParsePreprocess_HandleDirective(
 
   if (tokens.tok == TOK_ID)
     {
-    if (strncmp("ifdef", tokens.text, tokens.len) == 0 ||
-        strncmp("ifndef", tokens.text, tokens.len) == 0 ||
-        strncmp("if", tokens.text, tokens.len) == 0 ||
-        strncmp("elif", tokens.text, tokens.len) == 0 ||
-        strncmp("else", tokens.text, tokens.len) == 0 ||
-        strncmp("endif", tokens.text, tokens.len) == 0)
+    if ((tokens.hash == HASH_IFDEF && tokens.len == 5 &&
+         strncmp("ifdef", tokens.text, tokens.len) == 0) ||
+        (tokens.hash == HASH_IFNDEF && tokens.len == 6 &&
+         strncmp("ifndef", tokens.text, tokens.len) == 0) ||
+        (tokens.hash == HASH_IF && tokens.len == 2 &&
+         strncmp("if", tokens.text, tokens.len) == 0) ||
+        (tokens.hash == HASH_ELIF && tokens.len == 4 &&
+         strncmp("elif", tokens.text, tokens.len) == 0) ||
+        (tokens.hash == HASH_ELSE && tokens.len == 4 &&
+         strncmp("else", tokens.text, tokens.len) == 0) ||
+        (tokens.hash == HASH_ENDIF && tokens.len == 5 &&
+         strncmp("endif", tokens.text, tokens.len) == 0))
       {
       result = preproc_evaluate_if(info, &tokens);
       while (tokens.tok) { preproc_next(&tokens); }
@@ -2098,12 +2447,15 @@ int vtkParsePreprocess_HandleDirective(
       }
     else if (info->ConditionalDepth == 0)
       {
-      if (strncmp("define", tokens.text, tokens.len) == 0 ||
-          strncmp("undef", tokens.text, tokens.len) == 0)
+      if ((tokens.hash == HASH_DEFINE && tokens.len == 6 &&
+           strncmp("define", tokens.text, tokens.len) == 0) ||
+          (tokens.hash == HASH_UNDEF && tokens.len == 5 &&
+           strncmp("undef", tokens.text, tokens.len) == 0))
         {
         result = preproc_evaluate_define(info, &tokens);
         }
-      else if (strncmp("include", tokens.text, tokens.len) == 0)
+      else if (tokens.hash == HASH_INCLUDE && tokens.len == 7 &&
+               strncmp("include", tokens.text, tokens.len) == 0)
         {
         result = preproc_evaluate_include(info, &tokens);
         }
@@ -2230,16 +2582,28 @@ void vtkParsePreprocess_AddStandardMacros(
 int vtkParsePreprocess_AddMacro(
   PreprocessInfo *info, const char *name, const char *definition)
 {
-  int i;
+  preproc_tokenizer token;
+  MacroInfo **macro_p;
   MacroInfo *macro;
 
-  if (preproc_find_macro(info, name, &i))
+  preproc_init(&token, name);
+  macro_p = preproc_macro_location(info, &token, 1);
+  if (*macro_p)
     {
-    return VTK_PARSE_MACRO_REDEFINED;
+    macro = *macro_p;
+    if (preproc_identical(macro->Definition, definition))
+      {
+      return VTK_PARSE_OK;
+      }
+    else
+      {
+      return VTK_PARSE_MACRO_REDEFINED;
+      }
     }
 
-  macro = preproc_add_macro_definition(info, name, definition);
+  macro = preproc_new_macro(info, name, definition);
   macro->IsExternal = 1;
+  *macro_p = macro;
 
   return VTK_PARSE_OK;
 }
@@ -2250,11 +2614,15 @@ int vtkParsePreprocess_AddMacro(
 MacroInfo *vtkParsePreprocess_GetMacro(
   PreprocessInfo *info, const char *name)
 {
-  int i = 0;
+  preproc_tokenizer token;
+  MacroInfo *macro;
 
-  if (preproc_find_macro(info, name, &i))
+  preproc_init(&token, name);
+  macro = preproc_find_macro(info, &token);
+
+  if (macro && !macro->IsExcluded)
     {
-    return info->Macros[i];
+    return macro;
     }
 
   return NULL;
@@ -2264,9 +2632,13 @@ MacroInfo *vtkParsePreprocess_GetMacro(
  * Remove a preprocessor macro.
  */
 int vtkParsePreprocess_RemoveMacro(
- PreprocessInfo *info, const char *name)
 PreprocessInfo *info, const char *name)
 {
-  if (preproc_remove_macro(info, name))
+  preproc_tokenizer token;
+
+  preproc_init(&token, name);
+
+  if (preproc_remove_macro(info, &token))
     {
     return VTK_PARSE_OK;
     }
@@ -2275,184 +2647,188 @@ int vtkParsePreprocess_RemoveMacro(
 }
 
 /**
- * Expand a function macro
+ * Expand a macro, argstring is ignored if not a function macro
  */
 const char *vtkParsePreprocess_ExpandMacro(
-  MacroInfo *macro, const char *argstring)
+  PreprocessInfo *info, MacroInfo *macro, const char *argstring)
 {
   const char *cp = argstring;
   int n = 0;
   int j = 0;
+  const char *stack_values[8];
   const char **values = NULL;
   const char *pp = NULL;
   const char *dp = NULL;
+  const char *wp = NULL;
+  char stack_rp[128];
   char *rp = NULL;
   size_t rs = 0;
   size_t i = 0;
   size_t l = 0;
   size_t k = 0;
   int stringify = 0;
+  int noexpand = 0;
   int depth = 1;
   int c;
 
-  if (argstring == NULL || *cp != '(')
+  if (macro->IsFunction)
     {
-    return NULL;
-    }
+    if (argstring == NULL || *cp != '(')
+      {
+      return NULL;
+      }
 
-  /* break the string into individual argument values */
-  values = (const char **)malloc(4*sizeof(const char **));
+    /* break the string into individual argument values */
+    values = stack_values;
 
-  cp++;
-  values[n++] = cp;
-  while (depth > 0 && *cp != '\0')
-    {
-    while (*cp != '\0')
+    cp++;
+    values[n++] = cp;
+    while (depth > 0 && *cp != '\0')
       {
-      if (*cp == '\"' || *cp == '\'')
-        {
-        preproc_skip_quotes(&cp);
-        }
-      else if (cp[0] == '/' && (cp[1] == '*' || cp[1] == '/'))
-        {
-        preproc_skip_comment(&cp);
-        }
-      else if (*cp == '(')
-        {
-        cp++;
-        depth++;
-        }
-      else if (*cp == ')')
+      while (*cp != '\0')
         {
-        cp++;
-        if (--depth == 0)
+        if (*cp == '\"' || *cp == '\'')
           {
-          break;
+          preproc_skip_quotes(&cp);
           }
-        }
-      else if (*cp == ',')
-        {
-        cp++;
-        if (depth == 1)
+        else if (cp[0] == '/' && (cp[1] == '*' || cp[1] == '/'))
           {
-          break;
+          preproc_skip_comment(&cp);
+          }
+        else if (*cp == '(')
+          {
+          cp++;
+          depth++;
+          }
+        else if (*cp == ')')
+          {
+          cp++;
+          if (--depth == 0)
+            {
+            break;
+            }
+          }
+        else if (*cp == ',')
+          {
+          cp++;
+          if (depth == 1)
+            {
+            break;
+            }
+          }
+        else if (*cp != '\0')
+          {
+          cp++;
           }
         }
-      else if (*cp != '\0')
+      if (n >= 8 && (n & (n-1)) == 0)
         {
-        cp++;
+        if (values != stack_values)
+          {
+          values = (const char **)realloc(
+            (char **)values, 2*n*sizeof(const char **));
+          }
+        else
+          {
+          values = (const char **)malloc(2*n*sizeof(const char **));
+          memcpy((char **)values, stack_values, 8*sizeof(const char **));
+          }
         }
-      }
-    if (n >= 4 && (n & (n-1)) == 0)
-      {
-      values = (const char **)realloc(
-        (char **)values, 2*n*sizeof(const char **));
-      }
 
-    values[n++] = cp;
-    }
-  --n;
+      values[n++] = cp;
+      }
+    --n;
 
-  /* diagnostic: print out the values */
+    /* diagnostic: print out the values */
 #if PREPROC_DEBUG
-  for (j = 0; j < n; j++)
-    {
-    size_t m = values[j+1] - values[j] - 1;
-    fprintf(stderr, "arg %i: %*.*s\n", (int)j, (int)m, (int)m, values[j]);
-    }
-#endif
-
-  /* allow whitespace as "no argument" */
-  if (macro->NumberOfArguments == 0 && n == 1)
-    {
-    cp = values[0];
-    c = *cp;
-    while (c == ' ' || c == '\n' || c == '\t' || c == '\r')
+    for (j = 0; j < n; j++)
       {
-      c = *(++cp);
+      size_t m = values[j+1] - values[j] - 1;
+      fprintf(stderr, "arg %i: %*.*s\n",
+              (int)j, (int)m, (int)m, values[j]);
       }
-    if (cp + 1 == values[1])
+#endif
+
+    if (macro->NumberOfParameters == 0 && n == 1)
       {
-      n = 0;
+      const char *tp = values[0];
+      preproc_skip_whitespace(&tp, WS_NO_EOL);
+      if (tp + 1 >= values[1])
+        {
+        n = 0;
+        }
       }
-    }
 
-  if (n != macro->NumberOfArguments)
-    {
-    free((char **)values);
+    if (n != macro->NumberOfParameters)
+      {
+      if (values != stack_values) { free((char **)values); }
 #if PREPROC_DEBUG
-    fprintf(stderr, "wrong number of macro args to %s, %d != %d\n",
-            macro->Name, n, macro->NumberOfArguments);
+      fprintf(stderr, "wrong number of macro args to %s, %lu != %lu\n",
+              macro->Name, n, macro->NumberOfParameters);
 #endif
-    return NULL;
+      return NULL;
+      }
     }
 
   cp = macro->Definition;
+  cp = (cp ? cp : "");
   dp = cp;
-  if (cp == NULL)
-    {
-    free((char **)values);
-    return NULL;
-    }
-
-  rp = (char *)malloc(128);
+  rp = stack_rp;
   rp[0] = '\0';
   rs = 128;
 
   while (*cp != '\0')
     {
     pp = cp;
+    wp = cp;
     stringify = 0;
+    noexpand = 0;
     /* skip all chars that aren't part of a name */
-    while ((*cp < 'a' || *cp > 'z') &&
-           (*cp < 'A' || *cp > 'Z') &&
-           *cp != '_' && *cp != '\0')
+    while (!preproc_chartype(*cp, CPRE_ID) && *cp != '\0')
       {
-      if (*cp == '\'' || *cp == '\"')
+      dp = cp;
+      preproc_skip_whitespace(&cp, WS_NO_EOL);
+      if (cp > dp)
         {
-        preproc_skip_quotes(&cp);
         dp = cp;
         }
-      else if (*cp >= '0' && *cp <= '9')
+      else if (preproc_chartype(*cp, CPRE_QUOTE))
         {
-        preproc_skip_number(&cp);
+        preproc_skip_quotes(&cp);
         dp = cp;
+        wp = cp;
+        noexpand = 0;
         }
-      else if (*cp == '/' && (cp[1] == '/' || cp[1] == '*'))
+      else if (preproc_chartype(*cp, CPRE_DIGIT))
         {
-        preproc_skip_comment(&cp);
+        preproc_skip_number(&cp);
         dp = cp;
+        wp = cp;
+        noexpand = 0;
         }
       else if (cp[0] == '#' && cp[1] == '#')
         {
-        dp = cp;
-        while (dp > pp && (dp[-1] == ' ' || dp[-1] == '\t' ||
-                           dp[-1] == '\r' || dp[-1] == '\n'))
-          {
-          --dp;
-          }
+        noexpand = 1;
+        dp = wp;
         cp += 2;
-        while (*cp == ' ' || *cp == '\t' || *cp == '\r' || *cp == '\n')
-          {
-          cp++;
-          }
+        wp = cp;
+        preproc_skip_whitespace(&cp, WS_NO_EOL);
         break;
         }
       else if (*cp == '#')
         {
         stringify = 1;
         dp = cp;
+        wp = cp;
         cp++;
-        while (*cp == ' ' || *cp == '\t' || *cp == '\r' || *cp == '\n')
-          {
-          cp++;
-          }
+        preproc_skip_whitespace(&cp, WS_NO_EOL);
         break;
         }
       else
         {
         cp++;
         dp = cp;
+        wp = cp;
         }
       }
     l = dp - pp;
@@ -2461,7 +2837,15 @@ const char *vtkParsePreprocess_ExpandMacro(
       if (i + l + 1 >= rs)
         {
         rs += rs + i + l + 1;
-        rp = (char *)realloc(rp, rs);
+        if (rp != stack_rp)
+          {
+          rp = (char *)realloc(rp, rs);
+          }
+        else
+          {
+          rp = (char *)malloc(rs);
+          memcpy(rp, stack_rp, i);
+          }
         }
       strncpy(&rp[i], pp, l);
       i += l;
@@ -2476,16 +2860,16 @@ const char *vtkParsePreprocess_ExpandMacro(
       {
       for (j = 0; j < n; j++)
         {
-        /* check whether the name matches an argument */
-        if (strncmp(pp, macro->Arguments[j], l) == 0 &&
-            macro->Arguments[j][l] == '\0')
+        /* check whether the name matches a parameter */
+        if (strncmp(pp, macro->Parameters[j], l) == 0 &&
+            macro->Parameters[j][l] == '\0')
           {
           /* substitute the argument value */
           l = values[j+1] - values[j] - 1;
           pp = values[j];
           /* remove leading whitespace from argument */
           c = *pp;
-          while (c == ' ' || c == '\n' || c == '\t' || c == '\r')
+          while (preproc_chartype(c, CPRE_WHITE))
             {
             c = *(++pp);
             l--;
@@ -2494,7 +2878,7 @@ const char *vtkParsePreprocess_ExpandMacro(
           if (l > 0)
             {
             c = pp[l - 1];
-            while (c == ' ' || c == '\n' || c == '\t' || c == '\r')
+            while (preproc_chartype(c, CPRE_WHITE))
               {
               if (--l == 0)
                 {
@@ -2503,6 +2887,13 @@ const char *vtkParsePreprocess_ExpandMacro(
               c = pp[l-1];
               }
             }
+          /* check if followed by "##" */
+          wp = cp;
+          preproc_skip_whitespace(&wp, WS_NO_EOL);
+          if (wp[0] == '#' && wp[1] == '#')
+            {
+            noexpand = 1;
+            }
           break;
           }
         }
@@ -2522,7 +2913,15 @@ const char *vtkParsePreprocess_ExpandMacro(
       if (i + l + stringify + 1 >= rs)
         {
         rs += rs + i + l + 1;
-        rp = (char *)realloc(rp, rs);
+        if (rp != stack_rp)
+          {
+          rp = (char *)realloc(rp, rs);
+          }
+        else
+          {
+          rp = (char *)malloc(rs);
+          memcpy(rp, stack_rp, i);
+          }
         }
       if (stringify)
         {
@@ -2538,26 +2937,279 @@ const char *vtkParsePreprocess_ExpandMacro(
           }
         rp[i++] = '\"';
         }
+      else if (noexpand)
+        {
+        strncpy(&rp[i], pp, l);
+        i += l;
+        }
       else
         {
+        /* process the arguments before substituting them */
+        const char *text;
+        int is_excluded = macro->IsExcluded;
+        macro->IsExcluded = 1;
         strncpy(&rp[i], pp, l);
+        rp[i + l] = '\0';
+        text = vtkParsePreprocess_ProcessString(info, &rp[i]);
+        if (text)
+          {
+          l = strlen(text);
+          if (text != &rp[i])
+            {
+            char *tp = NULL;
+            if (i + l + 1 >= rs)
+              {
+              rs += rs + i + l + 1;
+              tp = rp;
+              rp = (char *)malloc(rs);
+              memcpy(rp, tp, i);
+              }
+            strncpy(&rp[i], text, l);
+            vtkParsePreprocess_FreeProcessedString(info, text);
+            if (tp && tp != stack_rp)
+              {
+              free(tp);
+              }
+            }
+          }
+        macro->IsExcluded = is_excluded;
         i += l;
         }
       rp[i] = '\0';
       }
     }
 
-  free((char **)values);
+  if (values != stack_values) { free((char **)values); }
+
+  if (!macro->IsFunction && macro->Definition &&
+      strcmp(rp, macro->Definition) == 0)
+    {
+    if (rp != stack_rp) { free(rp); }
+    return macro->Definition;
+    }
+
+  if (rp == stack_rp)
+    {
+    rp = (char *)malloc(strlen(stack_rp) + 1);
+    strcpy(rp, stack_rp);
+    }
+
+  return rp;
+}
+
+/**
+ * Process a string
+ */
+const char *vtkParsePreprocess_ProcessString(
+  PreprocessInfo *info, const char *text)
+{
+  char stack_rp[128];
+  char *rp;
+  char *ep;
+  size_t i = 0;
+  size_t rs = 128;
+  int last_tok = 0;
+  preproc_tokenizer tokens;
+  preproc_init(&tokens, text);
+
+  rp = stack_rp;
+  rp[0] = '\0';
+
+  while (tokens.tok)
+    {
+    size_t l = tokens.len;
+    size_t j;
+    const char *cp = tokens.text;
+    const char *dp;
+
+    if (tokens.tok == TOK_STRING && last_tok == TOK_STRING)
+      {
+      if (i > 0)
+        {
+        do { --i; } while (i > 0 && rp[i] != '\"');
+        }
+      cp++;
+      }
+
+    if (i + l + 2 >= rs)
+      {
+      rs += rs + i + l + 2;
+      if (rp == stack_rp)
+        {
+        rp = (char *)malloc(rs);
+        memcpy(rp, stack_rp, i);
+        }
+      else
+        {
+        rp = (char *)realloc(rp, rs);
+        }
+      }
+
+    /* copy the token, removing backslash-newline */
+    dp = cp;
+    ep = &rp[i];
+    for (j = 0; j < l; j++)
+      {
+      if (*dp == '\\')
+        {
+        if (dp[1] == '\n') { dp += 2; }
+        else if (dp[1] == '\r' && dp[2] == '\n') { dp += 3; }
+        else { *ep++ = *dp++; }
+        }
+      else
+        {
+        *ep++ = *dp++;
+        }
+      }
+    l = ep - &rp[i];
+
+    if (tokens.tok == TOK_ID)
+      {
+      MacroInfo *macro = preproc_find_macro(info, &tokens);
+      if (macro && !macro->IsExcluded)
+        {
+        const char *args = NULL;
+        int expand = 1;
+
+        if (macro->IsFunction)
+          {
+          /* expand function macros using the arguments */
+          preproc_next(&tokens);
+          if (tokens.tok == '(')
+            {
+            int depth = 1;
+            args = tokens.text;
+            while (depth > 0 && preproc_next(&tokens))
+              {
+              if (tokens.tok == '(')
+                {
+                depth++;
+                }
+              else if (tokens.tok == ')')
+                {
+                depth--;
+                }
+              }
+            if (tokens.tok != ')')
+              {
+              if (rp != stack_rp) { free(rp); }
+              return NULL;
+              }
+            }
+          else
+            {
+            /* unput the last token if it isn't "(" */
+            tokens.len = l;
+            tokens.text = cp;
+            expand = 0;
+            }
+          }
+        if (expand)
+          {
+          const char *expansion;
+          const char *processed;
+          expansion = vtkParsePreprocess_ExpandMacro(info, macro, args);
+          if (expansion == NULL)
+            {
+            if (rp != stack_rp) { free(rp); }
+            return NULL;
+            }
+          macro->IsExcluded = 1;
+          processed = vtkParsePreprocess_ProcessString(info, expansion);
+          macro->IsExcluded = 0;
+          if (processed == NULL)
+            {
+            vtkParsePreprocess_FreeMacroExpansion(info, macro, expansion);
+            if (rp != stack_rp) { free(rp); }
+            return NULL;
+            }
+          l = strlen(processed);
+          if (l > 0)
+            {
+            if (i + l + 2 >= rs)
+              {
+              rs += rs + i + l + 2;
+              if (rp == stack_rp)
+                {
+                rp = (char *)malloc(rs);
+                memcpy(rp, stack_rp, i);
+                }
+              else
+                {
+                rp = (char *)realloc(rp, rs);
+                }
+              }
+            strncpy(&rp[i], processed, l);
+            }
+          if (processed != expansion)
+            {
+            vtkParsePreprocess_FreeProcessedString(info, processed);
+            }
+          vtkParsePreprocess_FreeMacroExpansion(info, macro, expansion);
+          }
+        }
+      }
+
+    i += l;
+
+    last_tok = tokens.tok;
+    l = tokens.len;
+    cp = tokens.text;
+    if (preproc_next(&tokens) && tokens.text > cp + l)
+      {
+      rp[i++] = ' ';
+      }
+    }
+  rp[i] = '\0';
+
+  if (strcmp(rp, text) == 0)
+    {
+    /* no change, return */
+    if (rp != stack_rp) { free(rp); }
+    return text;
+    }
+  else
+    {
+    /* string changed, recursively reprocess */
+    const char *tp = vtkParsePreprocess_ProcessString(info, rp);
+    if (rp != tp)
+      {
+      if (rp != stack_rp) { free(rp); }
+      return tp;
+      }
+    if (rp == stack_rp)
+      {
+      rp = (char *)malloc(strlen(stack_rp) + 1);
+      strcpy(rp, stack_rp);
+      }
+    }
 
   return rp;
 }
 
 /**
- * Free an expanded function macro
+ * Free a string returned by ExpandMacro
+ */
+void vtkParsePreprocess_FreeMacroExpansion(
+  PreprocessInfo *info, MacroInfo *macro, const char *text)
+{
+  /* only free expansion if it is different from definition */
+  if (info && text != macro->Definition)
+    {
+    free((char *)text);
+    }
+}
+
+/**
+ * Free a string returned by ProcessString
  */
-void vtkParsePreprocess_FreeExpandedMacro(const char *emacro)
+void vtkParsePreprocess_FreeProcessedString(
+  PreprocessInfo *info, const char *text)
 {
-  free((char *)emacro);
+  if (info)
+    {
+    free((char *)text);
+    }
 }
 
 /**
@@ -2597,6 +3249,7 @@ const char *vtkParsePreprocess_FindIncludeFile(
   if (cp)
     {
     *already_loaded = 1;
+    return cp;
     }
 
   *already_loaded = 0;
@@ -2611,20 +3264,42 @@ void vtkParsePreprocess_InitMacro(MacroInfo *macro)
   macro->Name = NULL;
   macro->Definition = NULL;
   macro->Comment = NULL;
-  macro->NumberOfArguments = 0;
-  macro->Arguments = NULL;
+  macro->NumberOfParameters = 0;
+  macro->Parameters = NULL;
   macro->IsFunction = 0;
   macro->IsExternal = 0;
+  macro->IsExcluded = 0;
+}
+
+/**
+ * Free a preprocessor macro struct
+ */
+void vtkParsePreprocess_FreeMacro(MacroInfo *macro)
+{
+  int i, n;
+
+  free((char *)macro->Name);
+  free((char *)macro->Definition);
+  free((char *)macro->Comment);
+
+  n = macro->NumberOfParameters;
+  for (i = 0; i < n; i++)
+    {
+    free((char *)macro->Parameters[i]);
+    }
+  free((char **)macro->Parameters);
+
+  free(macro);
 }
 
 /**
  * Initialize a preprocessor struct
  */
-void vtkParsePreprocess_InitPreprocess(PreprocessInfo *info)
+void vtkParsePreprocess_Init(
+  PreprocessInfo *info, const char *filename)
 {
   info->FileName = NULL;
-  info->NumberOfMacros = 0;
-  info->Macros = NULL;
+  info->MacroHashTable = NULL;
   info->NumberOfIncludeDirectories = 0;
   info->IncludeDirectories = NULL;
   info->NumberOfIncludeFiles = 0;
@@ -2632,4 +3307,54 @@ void vtkParsePreprocess_InitPreprocess(PreprocessInfo *info)
   info->IsExternal = 0;
   info->ConditionalDepth = 0;
   info->ConditionalDone = 0;
+
+  if (filename)
+    {
+    info->FileName = preproc_strndup(filename, strlen(filename));
+    }
+}
+
+/**
+ * Free a preprocessor struct and its contents
+ */
+void vtkParsePreprocess_Free(PreprocessInfo *info)
+{
+  int i, n;
+  MacroInfo **mptr;
+
+  free((char *)info->FileName);
+
+  if (info->MacroHashTable)
+    {
+    n = PREPROC_HASH_TABLE_SIZE;
+    for (i = 0; i < n; i++)
+      {
+      mptr = info->MacroHashTable[i];
+      if (mptr)
+        {
+        while (*mptr)
+          {
+          vtkParsePreprocess_FreeMacro(*mptr++);
+          }
+        }
+      free(info->MacroHashTable[i]);
+      }
+    free(info->MacroHashTable);
+    }
+
+  n = info->NumberOfIncludeDirectories;
+  for (i = 0; i < n; i++)
+    {
+    free((char *)info->IncludeDirectories[i]);
+    }
+  free((char **)info->IncludeDirectories);
+
+  n = info->NumberOfIncludeFiles;
+  for (i = 0; i < n; i++)
+    {
+    free((char *)info->IncludeFiles[i]);
+    }
+  free((char **)info->IncludeFiles);
+
+  free(info);
 }
index c28bd241a3febbdb99361868f169a7e63102a680..9a4010b20221d6ef5c96940a359d0bcdb9853513 100644 (file)
@@ -38,9 +38,6 @@
   lookup error occurred, and will also let the parser know
   if an #if or #else directive requires that the next block
   of code be skipped.
-
-  No checks are done for recursively-defined macros.  If they
-  occur, the preprocessor will crash.
 */
 
 #ifndef VTK_PARSE_PREPROCESS_H
@@ -65,10 +62,11 @@ typedef struct _MacroInfo
   const char    *Name;
   const char    *Definition;
   const char    *Comment; /* unused */
-  int            NumberOfArguments; /* only if IsFunction == 1 */
-  const char   **Arguments;  /* symbols for arguments */
-  int            IsFunction; /* this macro takes arguments */
+  int            NumberOfParameters; /* only if IsFunction == 1 */
+  const char   **Parameters; /* symbols for parameters */
+  int            IsFunction; /* this macro requires arguments */
   int            IsExternal; /* this macro is from an included file */
+  int            IsExcluded; /* do not expand this macro */
 } MacroInfo;
 
 /**
@@ -78,8 +76,7 @@ typedef struct _MacroInfo
 typedef struct _PreprocessInfo
 {
   const char    *FileName;         /* the file that is being parsed */
-  int            NumberOfMacros;
-  MacroInfo    **Macros;
+  MacroInfo   ***MacroHashTable;   /* hash table for macro lookup */
   int            NumberOfIncludeDirectories;
   const char   **IncludeDirectories;
   int            NumberOfIncludeFiles; /* all included files */
@@ -178,17 +175,34 @@ MacroInfo *vtkParsePreprocess_GetMacro(
   PreprocessInfo *info, const char *name);
 
 /**
- * Expand a function macro, given arguments in parentheses.
- * Returns a new string that was allocated with malloc, or
- * NULL if the wrong number of arguments were given.
+ * Expand a macro.  A function macro must be given an argstring
+ * with args in parentheses, otherwise the argstring can be NULL.
+ * returns NULL if the wrong number of arguments were given.
  */
 const char *vtkParsePreprocess_ExpandMacro(
-  MacroInfo *macro, const char *argstring);
+  PreprocessInfo *info, MacroInfo *macro, const char *argstring);
+
+/**
+ * Free an expanded macro
+ */
+void vtkParsePreprocess_FreeMacroExpansion(
+  PreprocessInfo *info, MacroInfo *macro, const char *text);
+
+/**
+ * Fully process a string with the preprocessor, and
+ * return a new string or NULL if a fatal error occurred.
+ */
+const char *vtkParsePreprocess_ProcessString(
+  PreprocessInfo *info, const char *text);
 
 /**
- * Free an expanded macro.
+ * Free a processed string.  Only call this method if
+ * the string returned by ProcessString is different from
+ * the original string, because ProcessString will just
+ * return the original string if no processing was needed.
  */
-void vtkParsePreprocess_FreeExpandedMacro(const char *emacro);
+void vtkParsePreprocess_FreeProcessedString(
+  PreprocessInfo *info, const char *text);
 
 /**
  * Add an include directory.  The directories that were added
@@ -213,10 +227,21 @@ const char *vtkParsePreprocess_FindIncludeFile(
  */
 void vtkParsePreprocess_InitMacro(MacroInfo *symbol);
 
+/**
+ * Free a preprocessor macro struct
+ */
+void vtkParsePreprocess_FreeMacro(MacroInfo *macro);
+
 /**
  * Initialize a preprocessor struct.
  */
-void vtkParsePreprocess_InitPreprocess(PreprocessInfo *info);
+void vtkParsePreprocess_Init(
+  PreprocessInfo *info, const char *filename);
+
+/**
+ * Free a preprocessor struct and its contents;
+ */
+void vtkParsePreprocess_Free(PreprocessInfo *info);
 
 #ifdef __cplusplus
 } /* extern "C" */
diff --git a/src/ParaView/vtkParseString.c b/src/ParaView/vtkParseString.c
new file mode 100644 (file)
index 0000000..f1863c0
--- /dev/null
@@ -0,0 +1,119 @@
+/*=========================================================================
+
+  Program:   Visualization Toolkit
+  Module:    vtkParseString.c
+
+  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+  All rights reserved.
+  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
+
+     This software is distributed WITHOUT ANY WARRANTY; without even
+     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+     PURPOSE.  See the above copyright notice for more information.
+
+=========================================================================*/
+/*-------------------------------------------------------------------------
+  Copyright (c) 2012 David Gobbi.
+
+  Contributed to the VisualizationToolkit by the author in April 2012
+  under the terms of the Visualization Toolkit 2008 copyright.
+-------------------------------------------------------------------------*/
+
+#include "vtkParseString.h"
+#include <stdlib.h>
+#include <string.h>
+
+/*----------------------------------------------------------------
+ * String utility methods
+ *
+ * Strings are centrally allocated and are const.  They should not
+ * be freed until the parse is complete and all the data structures
+ * generated by the parse have been freed.
+ */
+
+/* allocate a string of n+1 bytes */
+void vtkParse_InitStringCache(StringCache *cache)
+{
+  cache->NumberOfChunks = 0;
+  cache->Chunks = NULL;
+  cache->ChunkSize = 0;
+  cache->Position = 0;
+}
+
+/* allocate a string of n+1 bytes */
+char *vtkParse_NewString(StringCache *cache, size_t n)
+{
+  size_t nextPosition;
+  char *cp;
+
+  if (cache->ChunkSize == 0)
+    {
+    cache->ChunkSize = 8176;
+    }
+
+  // align next start position on an 8-byte boundary
+  nextPosition = (((cache->Position + n + 8) | 7 ) - 7);
+
+  if (cache->NumberOfChunks == 0 || nextPosition > cache->ChunkSize)
+    {
+    if (n + 1 > cache->ChunkSize)
+      {
+      cache->ChunkSize = n + 1;
+      }
+    cp = (char *)malloc(cache->ChunkSize);
+
+    /* if empty, alloc for the first time */
+    if (cache->NumberOfChunks == 0)
+      {
+      cache->Chunks = (char **)malloc(sizeof(char *));
+      }
+    /* if count is power of two, reallocate with double size */
+    else if ((cache->NumberOfChunks & (cache->NumberOfChunks-1)) == 0)
+      {
+      cache->Chunks = (char **)realloc(
+        cache->Chunks, (2*cache->NumberOfChunks)*sizeof(char *));
+      }
+
+    cache->Chunks[cache->NumberOfChunks++] = cp;
+
+    cache->Position = 0;
+    nextPosition = (((n + 8) | 7) - 7);
+    }
+
+  cp = &cache->Chunks[cache->NumberOfChunks-1][cache->Position];
+  cp[0] = '\0';
+
+  cache->Position = nextPosition;
+
+  return cp;
+}
+
+/* free all allocated strings */
+void vtkParse_FreeStringCache(StringCache *cache)
+{
+  unsigned long i;
+
+  for (i = 0; i < cache->NumberOfChunks; i++)
+    {
+    free(cache->Chunks[i]);
+    }
+  if (cache->Chunks)
+    {
+    free(cache->Chunks);
+    }
+
+  cache->Chunks = NULL;
+  cache->NumberOfChunks = 0;
+}
+
+/* duplicate the first n bytes of a string and terminate it */
+const char *vtkParse_CacheString(StringCache *cache, const char *in, size_t n)
+{
+  char *res = NULL;
+
+  res = vtkParse_NewString(cache, n);
+  strncpy(res, in, n);
+  res[n] = '\0';
+
+  return res;
+}
diff --git a/src/ParaView/vtkParseString.h b/src/ParaView/vtkParseString.h
new file mode 100644 (file)
index 0000000..1143082
--- /dev/null
@@ -0,0 +1,78 @@
+/*=========================================================================
+
+  Program:   Visualization Toolkit
+  Module:    vtkParseString.h
+
+  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+  All rights reserved.
+  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
+
+     This software is distributed WITHOUT ANY WARRANTY; without even
+     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+     PURPOSE.  See the above copyright notice for more information.
+
+=========================================================================*/
+
+/*
+  String allocation routines used by vtkParse.
+
+  The parser uses "const char *" as its string object type, and expects
+  all string objects to persist and be constant for the entire lifetime
+  of the data generated by the parse (usually this means until the parser
+  executable has exited).  All strings that are stored in the parser's
+  data objects should either be statically allocated, or allocated with
+  the vtkParse_NewString() or vtkParse_CacheString() methods declared here.
+*/
+
+#ifndef VTK_PARSE_STRING_H
+#define VTK_PARSE_STRING_H
+
+#include <stddef.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * StringCache provides a simple way of allocating strings centrally.
+ * It eliminates the need to allocate and free each individual strings,
+ * which makes the code simpler and more efficient.
+ */
+typedef struct _StringCache
+{
+  unsigned long  NumberOfChunks;
+  char         **Chunks;
+  size_t         ChunkSize;
+  size_t         Position;
+} StringCache;
+
+/**
+ * Initialize the string cache.
+ */
+void vtkParse_InitStringCache(StringCache *cache);
+
+/**
+ * Alocate a new string from the cache.
+ * A total of n+1 bytes will be allocated, to leave room for null.
+ */
+char *vtkParse_NewString(StringCache *cache, size_t n);
+
+/**
+ * Cache a string so that it can then be used in the vtkParse data
+ * structures.  The string will last until the application exits.
+ * At most 'n' chars will be copied, and the string will be terminated.
+ * If a null pointer is provided, then a null pointer will be returned.
+ */
+const char *vtkParse_CacheString(StringCache *cache, const char *cp, size_t n);
+
+/**
+ * Free all strings that were created with vtkParse_NewString() or
+ * with vtkParse_CacheString().
+ */
+void vtkParse_FreeStringCache(StringCache *cache);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
index f41042c4c60a530f5fdf6e235f0285c0958f1364..25ede98b711dd35942614705b22a08e3166a080e 100644 (file)
@@ -14,8 +14,9 @@
 =========================================================================*/
 
 #include "vtkWrap.h"
-#include "vtkParseInternal.h"
+#include "vtkParseData.h"
 #include "vtkParseExtras.h"
+#include "vtkParseString.h"
 #include <stdlib.h>
 #include <string.h>
 #include <ctype.h>
@@ -36,7 +37,20 @@ int vtkWrap_IsVoid(ValueInfo *val)
 int vtkWrap_IsVoidFunction(ValueInfo *val)
 {
   unsigned int t = (val->Type & VTK_PARSE_UNQUALIFIED_TYPE);
-  return (t == VTK_PARSE_FUNCTION);
+
+  if (t == VTK_PARSE_FUNCTION_PTR || t == VTK_PARSE_FUNCTION)
+    {
+    /* check for signature "void (*func)(void *)" */
+    if (val->Function->NumberOfParameters == 1 &&
+        val->Function->Parameters[0]->Type == VTK_PARSE_VOID_PTR &&
+        val->Function->Parameters[0]->NumberOfDimensions == 0 &&
+        val->Function->ReturnValue->Type == VTK_PARSE_VOID)
+      {
+      return 1;
+      }
+    }
+
+  return 0;
 }
 
 int vtkWrap_IsVoidPointer(ValueInfo *val)
@@ -340,18 +354,18 @@ int vtkWrap_IsGetVectorMethod(FunctionInfo *f)
 /* -------------------------------------------------------------------- */
 /* Argument counting */
 
-int vtkWrap_CountWrappedArgs(FunctionInfo *f)
+int vtkWrap_CountWrappedParameters(FunctionInfo *f)
 {
-  int totalArgs = f->NumberOfArguments;
+  int totalArgs = f->NumberOfParameters;
 
   if (totalArgs > 0 &&
-      (f->Arguments[0]->Type & VTK_PARSE_BASE_TYPE)
+      (f->Parameters[0]->Type & VTK_PARSE_BASE_TYPE)
        == VTK_PARSE_FUNCTION)
     {
     totalArgs = 1;
     }
   else if (totalArgs == 1 &&
-           (f->Arguments[0]->Type & VTK_PARSE_UNQUALIFIED_TYPE)
+           (f->Parameters[0]->Type & VTK_PARSE_UNQUALIFIED_TYPE)
             == VTK_PARSE_VOID)
     {
     totalArgs = 0;
@@ -360,19 +374,19 @@ int vtkWrap_CountWrappedArgs(FunctionInfo *f)
   return totalArgs;
 }
 
-int vtkWrap_CountRequiredArgs(FunctionInfo *f)
+int vtkWrap_CountRequiredArguments(FunctionInfo *f)
 {
   int requiredArgs = 0;
   int totalArgs;
   int i;
 
-  totalArgs = vtkWrap_CountWrappedArgs(f);
+  totalArgs = vtkWrap_CountWrappedParameters(f);
 
   for (i = 0; i < totalArgs; i++)
     {
-    if (f->Arguments[i]->Value == NULL ||
-        vtkWrap_IsArray(f->Arguments[i]) ||
-        vtkWrap_IsNArray(f->Arguments[i]))
+    if (f->Parameters[i]->Value == NULL ||
+        vtkWrap_IsArray(f->Parameters[i]) ||
+        vtkWrap_IsNArray(f->Parameters[i]))
       {
       requiredArgs = i+1;
       }
@@ -524,9 +538,9 @@ int vtkWrap_HasPublicCopyConstructor(ClassInfo *data)
     func = data->Functions[i];
 
     if (vtkWrap_IsConstructor(data, func) &&
-        func->NumberOfArguments == 1 &&
-        func->Arguments[0]->Class &&
-        strcmp(func->Arguments[0]->Class, data->Name) == 0 &&
+        func->NumberOfParameters == 1 &&
+        func->Parameters[0]->Class &&
+        strcmp(func->Parameters[0]->Class, data->Name) == 0 &&
         func->Access != VTK_ACCESS_PUBLIC)
       {
       return 0;
@@ -536,19 +550,72 @@ int vtkWrap_HasPublicCopyConstructor(ClassInfo *data)
   return 1;
 }
 
+/* -------------------------------------------------------------------- */
+/* Get the size for subclasses of vtkTuple */
+int vtkWrap_GetTupleSize(ClassInfo *data, HierarchyInfo *hinfo)
+{
+  HierarchyEntry *entry;
+  const char *classname = NULL;
+  size_t m;
+  int size = 0;
+
+  entry = vtkParseHierarchy_FindEntry(hinfo, data->Name);
+  if (entry && vtkParseHierarchy_IsTypeOfTemplated(
+        hinfo, entry, data->Name, "vtkTuple", &classname))
+    {
+    /* attempt to get count from template parameter */
+    if (classname)
+      {
+      m = strlen(classname);
+      if (m > 2 && classname[m - 1] == '>' &&
+          isdigit(classname[m-2]) && (classname[m-3] == ' ' ||
+          classname[m-3] == ',' || classname[m-3] == '<'))
+        {
+        size = classname[m-2] - '0';
+        }
+      free((char *)classname);
+      }
+    }
+
+  return size;
+}
+
 /* -------------------------------------------------------------------- */
 /* This sets the CountHint for vtkDataArray methods where the
  * tuple size is equal to GetNumberOfComponents. */
 void vtkWrap_FindCountHints(
-  ClassInfo *data, HierarchyInfo *hinfo)
+  ClassInfo *data, FileInfo *finfo, HierarchyInfo *hinfo)
 {
   int i;
+  int count;
   const char *countMethod;
-  const char *classname;
   FunctionInfo *theFunc;
-  HierarchyEntry *entry;
-  size_t m;
-  char digit;
+
+  /* add hints for vtkInformation get methods */
+  if (vtkWrap_IsTypeOf(hinfo, data->Name, "vtkInformation"))
+    {
+    countMethod = "Length(temp0)";
+
+    for (i = 0; i < data->NumberOfFunctions; i++)
+      {
+      theFunc = data->Functions[i];
+
+      if (strcmp(theFunc->Name, "Get") == 0 &&
+          theFunc->NumberOfParameters >= 1 &&
+          theFunc->Parameters[0]->Type == VTK_PARSE_OBJECT_PTR &&
+          (strcmp(theFunc->Parameters[0]->Class,
+                  "vtkInformationIntegerVectorKey") == 0 ||
+           strcmp(theFunc->Parameters[0]->Class,
+                  "vtkInformationDoubleVectorKey") == 0))
+        {
+        if (theFunc->ReturnValue && theFunc->ReturnValue->Count == 0 &&
+            theFunc->NumberOfParameters == 1)
+          {
+          theFunc->ReturnValue->CountHint = countMethod;
+          }
+        }
+      }
+    }
 
   /* add hints for array GetTuple methods */
   if (vtkWrap_IsTypeOf(hinfo, data->Name, "vtkDataArray"))
@@ -562,8 +629,8 @@ void vtkWrap_FindCountHints(
       if ((strcmp(theFunc->Name, "GetTuple") == 0 ||
            strcmp(theFunc->Name, "GetTupleValue") == 0) &&
           theFunc->ReturnValue && theFunc->ReturnValue->Count == 0 &&
-          theFunc->NumberOfArguments == 1 &&
-          theFunc->Arguments[0]->Type == VTK_PARSE_ID_TYPE)
+          theFunc->NumberOfParameters == 1 &&
+          theFunc->Parameters[0]->Type == VTK_PARSE_ID_TYPE)
         {
         theFunc->ReturnValue->CountHint = countMethod;
         }
@@ -573,18 +640,18 @@ void vtkWrap_FindCountHints(
                 strcmp(theFunc->Name, "GetTupleValue") == 0 ||
                 strcmp(theFunc->Name, "InsertTuple") == 0 ||
                 strcmp(theFunc->Name, "InsertTupleValue") == 0) &&
-               theFunc->NumberOfArguments == 2 &&
-               theFunc->Arguments[0]->Type == VTK_PARSE_ID_TYPE &&
-               theFunc->Arguments[1]->Count == 0)
+               theFunc->NumberOfParameters == 2 &&
+               theFunc->Parameters[0]->Type == VTK_PARSE_ID_TYPE &&
+               theFunc->Parameters[1]->Count == 0)
         {
-        theFunc->Arguments[1]->CountHint = countMethod;
+        theFunc->Parameters[1]->CountHint = countMethod;
         }
       else if ((strcmp(theFunc->Name, "InsertNextTuple") == 0 ||
                 strcmp(theFunc->Name, "InsertNextTupleValue") == 0) &&
-               theFunc->NumberOfArguments == 1 &&
-               theFunc->Arguments[0]->Count == 0)
+               theFunc->NumberOfParameters == 1 &&
+               theFunc->Parameters[0]->Count == 0)
         {
-        theFunc->Arguments[0]->CountHint = countMethod;
+        theFunc->Parameters[0]->CountHint = countMethod;
         }
       }
     }
@@ -599,13 +666,13 @@ void vtkWrap_FindCountHints(
       theFunc = data->Functions[i];
 
       if (strcmp(theFunc->Name, "Interpolate") == 0 &&
-           theFunc->NumberOfArguments == 2 &&
-           theFunc->Arguments[0]->Type == (VTK_PARSE_DOUBLE_PTR|VTK_PARSE_CONST) &&
-           theFunc->Arguments[0]->Count == 3 &&
-           theFunc->Arguments[1]->Type == VTK_PARSE_DOUBLE_PTR &&
-           theFunc->Arguments[1]->Count == 0)
+           theFunc->NumberOfParameters == 2 &&
+           theFunc->Parameters[0]->Type == (VTK_PARSE_DOUBLE_PTR|VTK_PARSE_CONST) &&
+           theFunc->Parameters[0]->Count == 3 &&
+           theFunc->Parameters[1]->Type == VTK_PARSE_DOUBLE_PTR &&
+           theFunc->Parameters[1]->Count == 0)
         {
-        theFunc->Arguments[1]->CountHint = countMethod;
+        theFunc->Parameters[1]->CountHint = countMethod;
         }
       }
     }
@@ -616,33 +683,22 @@ void vtkWrap_FindCountHints(
 
     /* hints for constructors that take arrays */
     if (vtkWrap_IsConstructor(data, theFunc) &&
-        theFunc->NumberOfArguments == 1 &&
-        vtkWrap_IsPointer(theFunc->Arguments[0]) &&
-        vtkWrap_IsNumeric(theFunc->Arguments[0]) &&
-        theFunc->Arguments[0]->Count == 0 &&
+        theFunc->NumberOfParameters == 1 &&
+        vtkWrap_IsPointer(theFunc->Parameters[0]) &&
+        vtkWrap_IsNumeric(theFunc->Parameters[0]) &&
+        theFunc->Parameters[0]->Count == 0 &&
         hinfo)
       {
-      entry = vtkParseHierarchy_FindEntry(hinfo, data->Name);
-      if (entry && vtkParseHierarchy_IsTypeOfTemplated(
-            hinfo, entry, data->Name, "vtkTuple", &classname))
+      count = vtkWrap_GetTupleSize(data, hinfo);
+      if (count)
         {
-        /* attempt to get count from template parameter */
-        if (classname)
-          {
-          m = strlen(classname);
-          if (m > 2 && classname[m - 1] == '>' &&
-              isdigit(classname[m-2]) && (classname[m-3] == ' ' ||
-              classname[m-3] == ',' || classname[m-3] == '<'))
-            {
-            digit = classname[m-2];
-            theFunc->Arguments[0]->Count = digit - '0';
-            vtkParse_AddStringToArray(
-              &theFunc->Arguments[0]->Dimensions,
-              &theFunc->Arguments[0]->NumberOfDimensions,
-              vtkParse_DuplicateString(&digit, 1));
-            }
-          free((char *)classname);
-          }
+        char counttext[24];
+        sprintf(counttext, "%d", count);
+        theFunc->Parameters[0]->Count = count;
+        vtkParse_AddStringToArray(
+          &theFunc->Parameters[0]->Dimensions,
+          &theFunc->Parameters[0]->NumberOfDimensions,
+          vtkParse_CacheString(finfo->Strings, counttext, strlen(counttext)));
         }
       }
 
@@ -686,6 +742,8 @@ void vtkWrap_FindNewInstanceMethods(
       {
       if (strcmp(theFunc->Name, "NewInstance") == 0 ||
           strcmp(theFunc->Name, "CreateInstance") == 0 ||
+          (strcmp(theFunc->Name, "CreateLookupTable") == 0 &&
+           strcmp(data->Name, "vtkColorSeries") == 0) ||
           (strcmp(theFunc->Name, "CreateImageReader2") == 0 &&
            strcmp(data->Name, "vtkImageReader2Factory") == 0) ||
           (strcmp(theFunc->Name, "CreateDataArray") == 0 &&
@@ -710,7 +768,8 @@ void vtkWrap_FindNewInstanceMethods(
 
 /* -------------------------------------------------------------------- */
 /* Expand all typedef types that are used in function arguments */
-void vtkWrap_ExpandTypedefs(ClassInfo *data, HierarchyInfo *hinfo)
+void vtkWrap_ExpandTypedefs(
+  ClassInfo *data, FileInfo *finfo, HierarchyInfo *hinfo)
 {
   int i, j, n;
   FunctionInfo *funcInfo;
@@ -724,7 +783,7 @@ void vtkWrap_ExpandTypedefs(ClassInfo *data, HierarchyInfo *hinfo)
     if (newclass != data->SuperClasses[i])
       {
       data->SuperClasses[i] =
-        vtkParse_DuplicateString(newclass, strlen(newclass));
+        vtkParse_CacheString(finfo->Strings, newclass, strlen(newclass));
       free((char *)newclass);
       }
     }
@@ -735,15 +794,15 @@ void vtkWrap_ExpandTypedefs(ClassInfo *data, HierarchyInfo *hinfo)
     funcInfo = data->Functions[i];
     if (funcInfo->Access == VTK_ACCESS_PUBLIC)
       {
-      for (j = 0; j < funcInfo->NumberOfArguments; j++)
+      for (j = 0; j < funcInfo->NumberOfParameters; j++)
         {
         vtkParseHierarchy_ExpandTypedefsInValue(
-          hinfo, funcInfo->Arguments[j], data->Name);
+          hinfo, funcInfo->Parameters[j], finfo->Strings, data->Name);
         }
       if (funcInfo->ReturnValue)
         {
         vtkParseHierarchy_ExpandTypedefsInValue(
-          hinfo, funcInfo->ReturnValue, data->Name);
+          hinfo, funcInfo->ReturnValue, finfo->Strings, data->Name);
         }
       }
     }
index 7100e0b87f63a875635f1938ea398ff92baed78f..8b385eb19ec1c136927ea1bc2478acc80aa20f11 100644 (file)
@@ -152,14 +152,20 @@ int vtkWrap_HasPublicCopyConstructor(ClassInfo *data);
  * This should be done before any wrapping is done, to make sure
  * that the wrappers see the real types.
  */
-void vtkWrap_ExpandTypedefs(ClassInfo *data, HierarchyInfo *hinfo);
+void vtkWrap_ExpandTypedefs(
+  ClassInfo *data, FileInfo *finfo, HierarchyInfo *hinfo);
 
 /**
  * Apply any hints about array sizes, e.g. hint that the
  * GetNumberOfComponents() method gives the tuple size.
  */
 void vtkWrap_FindCountHints(
-  ClassInfo *data, HierarchyInfo *hinfo);
+  ClassInfo *data, FileInfo *finfo, HierarchyInfo *hinfo);
+
+/**
+ * Get the size of a fixed-size tuple
+ */
+int vtkWrap_GetTupleSize(ClassInfo *data, HierarchyInfo *hinfo);
 
 /**
  * Apply any hints about methods that return a new object instance,
@@ -195,11 +201,11 @@ int vtkWrap_IsSetVectorMethod(FunctionInfo *f);
 int vtkWrap_IsGetVectorMethod(FunctionInfo *f);
 
 /**
- * Count the number of args that are wrapped.
- * This skips the "void *" argument that follows
- * wrapped function pointer arguments.
+ * Count the number of parameters that are wrapped.
+ * This skips the "void *" parameter that follows
+ * wrapped function pointer parameters.
  */
-int vtkWrap_CountWrappedArgs(FunctionInfo *f);
+int vtkWrap_CountWrappedParameters(FunctionInfo *f);
 
 /**
  * Count the number of args that are required.
@@ -207,7 +213,7 @@ int vtkWrap_CountWrappedArgs(FunctionInfo *f);
  * have a default value.  Array args are not allowed
  * to have default values.
  */
-int vtkWrap_CountRequiredArgs(FunctionInfo *f);
+int vtkWrap_CountRequiredArguments(FunctionInfo *f);
 
 /**
  * Write a variable declaration to a file.
index 22b1700453680437cee0c2aae963747245e1a276..f53fec9de1d3214e92bc374a75834de6f6e697d0 100644 (file)
@@ -38,7 +38,8 @@
 */
 
 #include "vtkParse.h"
-#include "vtkParseInternal.h"
+#include "vtkParseData.h"
+#include "vtkParseMain.h"
 #include "vtkParsePreprocess.h"
 #include <stdio.h>
 #include <string.h>
@@ -125,23 +126,26 @@ static char *append_scope_to_line(
  * Append template info
  */
 static char *append_template_to_line(
-  char *line, size_t *m, size_t *maxlen, TemplateArgs *template_args)
+  char *line, size_t *m, size_t *maxlen, TemplateInfo *template_args)
 {
-  TemplateArg *arg;
+  ValueInfo *arg;
   int j;
 
   line = append_to_line(line, "<", m, maxlen);
 
-  for (j = 0; j < template_args->NumberOfArguments; j++)
+  for (j = 0; j < template_args->NumberOfParameters; j++)
     {
-    arg = template_args->Arguments[j];
-    line = append_to_line(line, arg->Name, m, maxlen);
+    arg = template_args->Parameters[j];
+    if (arg->Name)
+      {
+      line = append_to_line(line, arg->Name, m, maxlen);
+      }
     if (arg->Value && arg->Value[0] != '\n')
       {
       line = append_to_line(line, "=", m, maxlen);
       line = append_to_line(line, arg->Value, m, maxlen);
       }
-    if (j+1 < template_args->NumberOfArguments)
+    if (j+1 < template_args->NumberOfParameters)
       {
       line = append_to_line(line, ",", m, maxlen);
       }
@@ -502,18 +506,21 @@ static char **append_namespace_contents(
       line = append_typedef_to_line(line, &m, &maxlen,
         data->Typedefs[data->Items[i].Index]);
       }
-    else
+    else if (data->Items[i].Type != VTK_NAMESPACE_INFO)
       {
       /* unhandled file element */
       continue;
       }
 
-    /* append filename and flags */
-    line = append_trailer(
-      line, &m, &maxlen, header_file, module_name, tmpflags);
+    if (data->Items[i].Type != VTK_NAMESPACE_INFO)
+      {
+      /* append filename and flags */
+      line = append_trailer(
+        line, &m, &maxlen, header_file, module_name, tmpflags);
 
-    /* append the line to the file */
-    lines = append_unique_line(lines, line, np);
+      /* append the line to the file */
+      lines = append_unique_line(lines, line, np);
+      }
 
     /* for classes, add all typed defined within the class */
     if ((data->Items[i].Type == VTK_CLASS_INFO ||
@@ -905,79 +912,34 @@ static int string_compare(const void *vp1, const void *vp2)
 
 int main(int argc, char *argv[])
 {
-  int usage_error = 0;
-  char *output_filename = 0;
-  int i, argi;
+  OptionInfo *options;
+  int i;
   size_t j, n;
   char **lines = 0;
   char **files = 0;
   char *flags;
   char *module_name;
-  char *option;
-  char *optionarg;
-  const char *optionargval;
 
   /* parse command-line options */
-  for (argi = 1; argi < argc && argv[argi][0] == '-'; argi++)
-    {
-    if (strncmp(argv[argi], "-o", 2) == 0 ||
-        strncmp(argv[argi], "-I", 2) == 0 ||
-        strncmp(argv[argi], "-D", 2) == 0 ||
-        strncmp(argv[argi], "-U", 2) == 0)
-      {
-      option = argv[argi];
-      optionarg = &argv[argi][2];
-      if (argv[argi][2] == '\0')
-        {
-        argi++;
-        if (argi >= argc || argv[argi][0] == '-')
-          {
-          usage_error = 1;
-          break;
-          }
-        optionarg = argv[argi];
-        }
-      if (strncmp(option, "-o", 2) == 0)
-        {
-        output_filename = optionarg;
-        }
-      else if (strncmp(option, "-I", 2) == 0)
-        {
-        vtkParse_IncludeDirectory(optionarg);
-        }
-      else if (strncmp(option, "-D", 2) == 0)
-        {
-        optionargval = "1";
-        j = 0;
-        while (optionarg[j] != '\0' && optionarg[j] != '=') { j++; }
-        if (optionarg[j] == '=')
-          {
-          optionargval = &optionarg[j+1];
-          }
-        vtkParse_DefineMacro(optionarg, optionargval);
-        }
-      else if (strncmp(option, "-U", 2) == 0)
-        {
-        vtkParse_UndefineMacro(optionarg);
-        }
-      }
-    }
+  vtkParse_MainMulti(argc, argv);
+  options = vtkParse_GetCommandLineOptions();
 
-  if (usage_error || !output_filename || argc - argi < 1)
+  /* make sure than an output file was given on the command line */
+  if (options->OutputFileName == NULL)
     {
-    fprintf(stderr,
-            "Usage: %s -o output_file data_file [files_to_merge]\n",
-            argv[0]);
+    fprintf(stderr, "No output file was specified\n");
     exit(1);
     }
 
   /* read the data file */
-  files = vtkWrapHierarchy_TryReadHierarchyFile(argv[argi++], files);
+  files = vtkWrapHierarchy_TryReadHierarchyFile(
+    options->InputFileName, files);
 
   /* read in all the prior files */
-  while (argi < argc)
+  for (i = 1; i < options->NumberOfFiles; i++)
     {
-    lines = vtkWrapHierarchy_TryReadHierarchyFile(argv[argi++], lines);
+    lines = vtkWrapHierarchy_TryReadHierarchyFile(
+      options->Files[i], lines);
     }
 
   /* merge the files listed in the data file */
@@ -1002,7 +964,7 @@ int main(int argc, char *argv[])
   qsort(lines, n, sizeof(char *), &string_compare);
 
   /* write the file, if it has changed */
-  vtkWrapHierarchy_TryWriteHierarchyFile(output_filename, lines);
+  vtkWrapHierarchy_TryWriteHierarchyFile(options->OutputFileName, lines);
 
   for (j = 0; j < n; j++)
     {
index 664bd75b721dc96cea6522daa891992e3569a36e..c1d4bd3f8bb254d2ac72af9083c749a7825c6f48 100644 (file)
@@ -37,7 +37,7 @@
 
 #include <math.h>
 
-vtkCxxRevisionMacro(vtkElevationSurfaceFilter, "$Revision$");
+//vtkCxxRevisionMacro(vtkElevationSurfaceFilter, "$Revision$");
 vtkStandardNewMacro(vtkElevationSurfaceFilter);
 
 vtkElevationSurfaceFilter::vtkElevationSurfaceFilter()
index 5ce7a2f7ddfdbfac81a9849ef2977a9784a6e155..5a532a5d3eba30cb565a9de79e9f5ac74fd2aff0 100644 (file)
@@ -28,7 +28,7 @@ class VTK_EXPORT vtkElevationSurfaceFilter: public vtkAlgorithm
 {
 public:
   static vtkElevationSurfaceFilter *New();
-  vtkTypeRevisionMacro(vtkElevationSurfaceFilter,vtkAlgorithm);
+  vtkTypeMacro(vtkElevationSurfaceFilter,vtkAlgorithm);
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description :
index 461239e0f0d66af112247b20be8602db668dd169..790fdd65223850d3ecda44d9e049b16c60e7c564 100644 (file)
@@ -21,7 +21,7 @@
 
 #include <vtkObjectFactory.h>
 
-vtkCxxRevisionMacro(vtkMySampleFilter, "$Revision$");
+//vtkCxxRevisionMacro(vtkMySampleFilter, "$Revision$");
 vtkStandardNewMacro(vtkMySampleFilter);
 
 //----------------------------------------------------------------------------
index 393a4bcb2c202106ae5abea47cc89717914d94b7..0bb84bfe7a3b874b5f097d406b3f5e44b81147b3 100644 (file)
@@ -26,7 +26,7 @@ class vtkMySampleFilter : public vtkExtractEdges
 {
 public:
   static vtkMySampleFilter* New();
-  vtkTypeRevisionMacro(vtkMySampleFilter, vtkExtractEdges);
+  vtkTypeMacro(vtkMySampleFilter, vtkExtractEdges);
   void PrintSelf(ostream& os, vtkIndent indent);
 
 protected:
index d10ff1febbd2ecf8006f79fb370d365b8b6c2b24..c1a3df0e2182d0b65f437bd99bf3efa9d396baac 100644 (file)
@@ -28,7 +28,7 @@
 #include "vtkQuadratureSchemeDefinition.h"
 #include "vtkUnstructuredGrid.h"
 
-vtkCxxRevisionMacro(vtkELNOFilter, "$Revision$");
+//vtkCxxRevisionMacro(vtkELNOFilter, "$Revision$");
 vtkStandardNewMacro(vtkELNOFilter);
 
 vtkELNOFilter::vtkELNOFilter()
index a48959f49b107f562de282e4fa3782d67ac82280..467616d7982628e71f614928689fe38158947d26 100644 (file)
@@ -26,7 +26,7 @@ class VTK_EXPORT vtkELNOFilter: public vtkQuadraturePointsGenerator
 {
 public:
   static vtkELNOFilter *New();
-  vtkTypeRevisionMacro(vtkELNOFilter,vtkQuadraturePointsGenerator);
+  vtkTypeMacro(vtkELNOFilter,vtkQuadraturePointsGenerator);
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description :
index bd43bdffc8f23660b1dbfaba4a12dce5a96b7cef..a612bdf48a89f711ed09b964f8fa14747401a5cf 100644 (file)
@@ -33,8 +33,8 @@
 #include "vtkCellData.h"
 #include "vtkIdList.h"
 
-vtkCxxRevisionMacro(vtkELNOMeshFilter, "$Revision$")
-;
+//vtkCxxRevisionMacro(vtkELNOMeshFilter, "$Revision$")
+//;
 vtkStandardNewMacro(vtkELNOMeshFilter)
 ;
 
@@ -77,7 +77,7 @@ int vtkELNOMeshFilter::RequestData(vtkInformation *request,
 
   vtkSmartPointer<vtkShrinkFilter> shrink =
       vtkSmartPointer<vtkShrinkFilter>::New();
-  shrink->SetInput(usgInClone);
+  shrink->SetInputData(usgInClone);
   shrink->SetShrinkFactor(0.9999);
   shrink->Update();
   vtkUnstructuredGrid* shrinked = shrink->GetOutput();
index 0839c37717797999a3702478f9ff4f833adca083..fb768e23dbc7e0cf49364805ac69535290d1a9a6 100644 (file)
@@ -26,7 +26,7 @@ class VTK_EXPORT vtkELNOMeshFilter: public vtkUnstructuredGridAlgorithm
 {
 public:
   static vtkELNOMeshFilter *New();
-  vtkTypeRevisionMacro(vtkELNOMeshFilter,vtkUnstructuredGridAlgorithm);
+  vtkTypeMacro(vtkELNOMeshFilter,vtkUnstructuredGridAlgorithm);
   void PrintSelf(ostream& os, vtkIndent indent);
 
 protected:
index 1e304e83e9eb160564a4c55071642f8f93b8b185..d75c44604dc6e3d7651696b41ee95c2f2b5db060 100644 (file)
@@ -34,8 +34,8 @@
 #include "vtkCellData.h"
 #include "vtkIdList.h"
 
-vtkCxxRevisionMacro(vtkELNOSurfaceFilter, "$Revision$")
-;
+//vtkCxxRevisionMacro(vtkELNOSurfaceFilter, "$Revision$")
+//;
 vtkStandardNewMacro(vtkELNOSurfaceFilter)
 ;
 
@@ -72,7 +72,7 @@ int vtkELNOSurfaceFilter::RequestData(vtkInformation *request,
 
   vtkSmartPointer<vtkPVGeometryFilter> geomFilter=vtkSmartPointer<
       vtkPVGeometryFilter>::New();
-  geomFilter->SetInput(usgInClone);
+  geomFilter->SetInputData(usgInClone);
   geomFilter->SetPassThroughCellIds(1);
   geomFilter->SetPassThroughPointIds(1);
   geomFilter->SetUseOutline(0);
@@ -98,7 +98,7 @@ int vtkELNOSurfaceFilter::RequestData(vtkInformation *request,
 
   vtkSmartPointer<vtkShrinkFilter> shrink=
       vtkSmartPointer<vtkShrinkFilter>::New();
-  shrink->SetInput(surface);
+  shrink->SetInputConnection(geomFilter->GetOutputPort(0));
   shrink->SetShrinkFactor(0.9999);
   shrink->Update();
 
index 263b71d37cda498ed690556b6746d128b3842c1a..b2801e5b4d9b36e3290c74c77c2b74da43f8f3fd 100644 (file)
@@ -26,7 +26,7 @@ class VTK_EXPORT vtkELNOSurfaceFilter: public vtkUnstructuredGridAlgorithm
 {
 public:
   static vtkELNOSurfaceFilter *New();
-  vtkTypeRevisionMacro(vtkELNOSurfaceFilter,vtkUnstructuredGridAlgorithm);
+  vtkTypeMacro(vtkELNOSurfaceFilter,vtkUnstructuredGridAlgorithm);
   void PrintSelf(ostream& os, vtkIndent indent);
 
 protected:
index ca02538a5eda1e4490061d8994842d88ed42044e..531520c8b3bfb51da98179337ab94c51a74f9c19 100644 (file)
@@ -57,6 +57,8 @@ FIND_LIBRARY(MED_LIBRARY med
   /usr/lib
 )
 
+get_filename_component(MED_LIBRARY_DIR ${MED_LIBRARY} PATH)
+
 FIND_LIBRARY(MEDC_LIBRARY medC
   HINTS
   ${MED_LIBRARY_DIR}
@@ -66,16 +68,13 @@ FIND_LIBRARY(MEDC_LIBRARY medC
   /usr/lib
 )
 
-get_filename_component(MED_LIBRARY_DIR ${MEDC_LIBRARY} PATH)
-
 IF(MED_INCLUDE_DIR)
-  IF(MEDC_LIBRARY)
-    SET(MED_LIBRARIES ${MEDC_LIBRARY} )
-    IF(MED_LIBRARY)
-      SET(MED_LIBRARIES ${MED_LIBRARIES} ${MED_LIBRARY} )
-    ENDIF(MED_LIBRARY)
-    SET( MED_FOUND "YES" )
-  ENDIF(MEDC_LIBRARY)
+  IF(MED_LIBRARY)
+    IF(MEDC_LIBRARY)
+      SET(MED_LIBRARIES ${MED_LIBRARY} ${MEDC_LIBRARY} )
+      SET( MED_FOUND "YES" )
+    ENDIF(MEDC_LIBRARY)
+  ENDIF(MED_LIBRARY)
 ENDIF(MED_INCLUDE_DIR)
 
 IF(${MED_FOUND})
index 3e535a3e654292e6c0a21f4c8cbe20fdae100013..ba2bbc4193105eeff556569b700847ffeff1c9e7 100644 (file)
@@ -1,22 +1,3 @@
-# Copyright (C) 2010-2012  CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library 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
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
 project(MedReader)
         
 cmake_minimum_required(VERSION 2.8)
@@ -42,6 +23,8 @@ if(MedReader_BUILD_ParaView_Plugin)
         MESSAGE(FATAL_ERROR "Please locate ParaView." )
     ENDIF(NOT ParaView_FOUND)
     INCLUDE(${PARAVIEW_USE_FILE})
+    # Load information about VTK/ParaView modules loaded/available.
+    pv_setup_module_environment("vtkMedReader")
 else(MedReader_BUILD_ParaView_Plugin)
     FIND_PACKAGE(VTK REQUIRED)
     if(NOT VTK_FOUND)
@@ -62,15 +45,26 @@ SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/CMake ${CMAKE_MODULE_PATH} )
 FIND_PACKAGE(MED REQUIRED)
 include_directories(${MED_INCLUDE_DIRS})
 
+#
+# process all vtk-modules defined in this plugin. This generates the necessary
+# wrappings for all these modules as well.
+#
+SET(VTK_INSTALL_RUNTIME_DIR lib/salome)
+SET(VTK_INSTALL_LIBRARY_DIR lib/salome)
+SET(VTK_INSTALL_ARCHIVE_DIR lib/salome)
+
+pv_process_modules()
+
 #
 # Build the vtkMedReader
 #
-add_subdirectory(IO)
+add_subdirectory(IO)
 
 #
 # Build the parallel vtkPMedReader
 #
 set(MedReader_BUILD_PARALLEL ${VTK_USE_PARALLEL} CACHE BOOL "Build the Med Reader with parallel support.")
+# MESSAGE(${MedReader_BUILD_PARALLEL})
 
 #
 # Build the ParaView Plugin
index 14d4738ffaa8e502e8988d6086a860fbca3a523f..3c0bb682149dfe5567408fad30024b9559a8b6e9 100644 (file)
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-#test if we have not yet included ParaView and/or VTK configuration files
-IF(NOT VTK_FOUND)
-    FIND_PACKAGE(VTK REQUIRED)
-    INCLUDE(${VTK_USE_FILE})
-ENDIF(NOT VTK_FOUND)
-
 set(MedReader_CLASSES
     vtkMedReader
     vtkMedDriver
@@ -84,25 +78,21 @@ set_source_files_properties(
   PROPERTIES WRAP_EXCLUDE 1
 )
 
-add_library(vtkMedReader ${MedReader_SRCS})
-
-set(VTK_LIBS vtkIO)
-if(${HDF5_IS_PARALLEL})
-  set(VTK_LIBS ${VTK_LIBS} vtkParallel)
-endif(${HDF5_IS_PARALLEL})
+# this adds target_link_libraries dependencies on all modules listed under
+# DEPENDS in module.cmake
+vtk_module_library(vtkMedReader ${MedReader_SRCS})
 
 # Introducing selection for parallel compilation
+# CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/IO/config.h.cmake ${CMAKE_SOURCE_DIR}/IO/config.h )
 CONFIGURE_FILE( ${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h )
 
-add_definitions( -I${CMAKE_CURRENT_BINARY_DIR} )
+target_link_libraries(vtkMedReader ${MED_LIBRARIES})
 
-target_link_libraries(vtkMedReader ${MED_LIBRARIES} ${VTK_LIBS} ${VTK_PARALLEL} ${vtkPVServerManager})
+#set(MedReader_BUILD_Testing ${VTK_BUILD_TESTING} CACHE BOOL "Build tests for the MedReader filter")
 
-set(MedReader_BUILD_Testing ${VTK_BUILD_TESTING} CACHE BOOL "Build tests for the MedReader filter")
-
-if(MedReader_BUILD_Testing)
-    add_subdirectory(Testing)
-endif(MedReader_BUILD_Testing)
+#if(MedReader_BUILD_Testing)
+#    add_subdirectory(Testing)
+#endif(MedReader_BUILD_Testing)
 
 install(
     TARGETS vtkMedReader
@@ -110,7 +100,7 @@ install(
     LIBRARY DESTINATION lib/salome
     ARCHIVE DESTINATION lib/salome
     )
-    
+
 install(FILES ${MedReader_HDRS} DESTINATION include)
         
 # -----------------------------------------------------------------------------
@@ -118,14 +108,18 @@ install(FILES ${MedReader_HDRS} DESTINATION include)
 # kit.
 # -----------------------------------------------------------------------------
 # needed by vtkExportKit.cmake
-include(${VTK_CMAKE_DIR}/vtkExportKit.cmake)
-IF(NOT VTK_INSTALL_NO_DEVELOPMENT)
-  STRING(REGEX REPLACE "^/" "" VTK_INSTALL_PACKAGE_DIR_CM24 "${VTK_INSTALL_PACKAGE_DIR}")
-ENDIF(NOT VTK_INSTALL_NO_DEVELOPMENT)
 
-vtk_export_kit2(
-  "MedReader_IO" 
-  "MEDREADER_IO" 
-  ${CMAKE_CURRENT_BINARY_DIR} 
-  "${MedReader_SRCS}"
-)
+#include(${ParaView_CMAKE_DIR}/VTKMono/vtkExportKit.cmake)
+
+#  #include(${VTK_CMAKE_DIR}/vtkExportKit.cmake)
+#IF(NOT VTK_INSTALL_NO_DEVELOPMENT)
+#  STRING(REGEX REPLACE "^/" "" VTK_INSTALL_PACKAGE_DIR_CM24 "${VTK_INSTALL_PACKAGE_DIR}")
+#ENDIF(NOT VTK_INSTALL_NO_DEVELOPMENT)
+
+#set(VTK_INSTALL_PACKAGE_DIR_CM24 ${VTK_MODULES_DIR})
+#vtk_export_kit2(
+#  "MedReader_IO" 
+#  "MEDREADER_IO" 
+#  ${CMAKE_CURRENT_BINARY_DIR} 
+#  "${MedReader_SRCS}"
+#)
index baf374d80309bd4d0a53248205bf993963c6edbf..b409a00a4b59646235bb1c6d8571f3de488e6f7a 100644 (file)
@@ -17,7 +17,8 @@
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-include_directories(../..)
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../..)
+include_directories(${CMAKE_CURRENT_BINARY_DIR}/../..)
 
 set(TestMedReader_SRCS
     TestMedReader.cxx
@@ -57,21 +58,20 @@ add_executable(TestMedReadPolyhedron ${TestMedReadPolyhedron_SRCS})
 add_executable(TestMedDescendingPolyhedron ${TestMedDescendingPolyhedron_SRCS})
 add_executable(TestMedReadDescendingPolyhedron ${TestMedReadDescendingPolyhedron_SRCS})
 add_executable(TestMedWriteOcta12 ${TestMedWriteOcta12_SRCS})
-add_executable(TestMedParallelRead ${TestMedParallelRead_SRCS})
-add_executable(TestMedParallelWrite ${TestMedParallelWrite_SRCS})
 
-#set(VTK_LIBS vtkMedReader vtkRendering)
-#if(${HDF5_IS_PARALLEL})
-#  set(VTK_LIBS ${VTK_LIBS} vtkParallel)
-#endif(${HDF5_IS_PARALLEL})
-SET(VTK_LIBS ${VTK_LIBRARIES} vtkMedReader)
+if(${HDF5_IS_PARALLEL})
+  add_executable(TestMedParallelRead ${TestMedParallelRead_SRCS})
+  add_executable(TestMedParallelWrite ${TestMedParallelWrite_SRCS})
+  target_link_libraries(TestMedParallelRead vtkParallelCore ${MED_LIBRARIES})
+  target_link_libraries(TestMedParallelWrite vtkParallelCore ${MED_LIBRARIES})
+endif(${HDF5_IS_PARALLEL})
 
-target_link_libraries(TestMedReader ${VTK_LIBS} ${MED_LIBRARIES})
+INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/../../module.cmake)
+
+target_link_libraries(TestMedReader ${${vtk-module-test}_DEPENDS} ${MED_LIBRARIES})
 target_link_libraries(TestMedPolyhedron ${MED_LIBRARIES})
 target_link_libraries(TestMedReadPolyhedron ${MED_LIBRARIES})
 target_link_libraries(TestMedDescendingPolyhedron ${MED_LIBRARIES})
 target_link_libraries(TestMedReadDescendingPolyhedron ${MED_LIBRARIES})
 target_link_libraries(TestMedWriteOcta12 ${MED_LIBRARIES})
-target_link_libraries(TestMedParallelRead ${MED_LIBRARIES})
-target_link_libraries(TestMedParallelWrite ${MED_LIBRARIES})
 
diff --git a/src/Plugins/MedReader/IO/module.cmake b/src/Plugins/MedReader/IO/module.cmake
new file mode 100644 (file)
index 0000000..5a1f56b
--- /dev/null
@@ -0,0 +1,12 @@
+SET(VTK_LIBS vtkCommonExecutionModel vtkParallelCore)
+
+vtk_module(vtkMedReader
+  DEPENDS
+    ${VTK_LIBS}
+  TEST_DEPENDS
+    vtkRenderingCore
+    vtkTestingRendering
+    vtkInteractionStyle
+    vtkRenderingFreeTypeOpenGL
+  EXCLUDE_FROM_WRAP_HIERARCHY
+)
index 4b7d4338a3fc1881bd3d5e50e0c038f458e88637..e719272a7665599545639fd232db06d64ab1fbd2 100644 (file)
 #include "vtkUnsignedCharArray.h"
 #include "vtkDataSetAttributes.h"
 #include "vtkDemandDrivenPipeline.h"
-#include "vtkCompositeDataIterator.h"
+//#include "vtkCompositeDataIterator.h"
+#include "vtkDataObjectTreeIterator.h"
 
-#include <vtkstd/map>
-#include <vtkstd/deque>
+#include <map>
+#include <deque>
+//#include <vtkstd/map>
+//#include <vtkstd/deque>
 
-vtkCxxRevisionMacro(vtkExtractGroup, "$Revision$");
+// vtkCxxRevisionMacro(vtkExtractGroup, "$Revision$");
 vtkStandardNewMacro(vtkExtractGroup);
 
 vtkCxxSetObjectMacro(vtkExtractGroup, SIL, vtkMutableDirectedGraph);
@@ -132,7 +135,7 @@ void vtkExtractGroup::BuildDefaultSIL(vtkMutableDirectedGraph* sil)
   crossEdgesArray->SetName("CrossEdges");
   sil->GetEdgeData()->AddArray(crossEdgesArray);
   crossEdgesArray->Delete();
-  vtkstd::deque<vtkstd::string> names;
+  std::deque<std::string> names;
 
   // Now build the hierarchy.
   vtkIdType rootId=sil->AddVertex();
@@ -168,7 +171,7 @@ void vtkExtractGroup::BuildDefaultSIL(vtkMutableDirectedGraph* sil)
   namesArray->SetNumberOfTuples(sil->GetNumberOfVertices());
   sil->GetVertexData()->AddArray(namesArray);
   namesArray->Delete();
-  vtkstd::deque<vtkstd::string>::iterator iter;
+  std::deque<std::string>::iterator iter;
   vtkIdType cc;
   for(cc=0, iter=names.begin(); iter!=names.end(); ++iter, ++cc)
     {
@@ -192,7 +195,8 @@ int vtkExtractGroup::RequestData(vtkInformation *request,
 
   outmb->CopyStructure(inmb);
 
-  vtkCompositeDataIterator* iterator = inmb->NewIterator();
+  //vtkCompositeDataIterator* iterator = inmb->NewIterator();
+  vtkDataObjectTreeIterator* iterator = vtkDataObjectTreeIterator::SafeDownCast( inmb->NewIterator() );
   iterator->SetVisitOnlyLeaves(true);
   iterator->InitTraversal();
   while(!iterator->IsDoneWithTraversal())
index fb3f73326eeb066bfb106bd10c197922cff84973..62eabced2918cb6c18bd738c2beceac5f2c2fd4a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -14,7 +14,8 @@
 // License along with this library; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+// See http://www.salome-platform.org/ or email :
+// webmaster.salome@opencascade.com
 //
 
 #ifndef vtkExtractGroup_h__
@@ -32,7 +33,7 @@ class VTK_EXPORT vtkExtractGroup: public vtkMultiBlockDataSetAlgorithm
 {
 public:
   static vtkExtractGroup* New();
-vtkTypeRevisionMacro(vtkExtractGroup, vtkMultiBlockDataSetAlgorithm)
+  vtkTypeMacro(vtkExtractGroup, vtkMultiBlockDataSetAlgorithm)
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index a59c850bd897a1018816d7847cfb527fcbc152bc..a6cf61f81e4890e601f835a27a75f52fc878a0cc 100644 (file)
@@ -1,22 +1,3 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library 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
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
 #include "vtkGenerateStructElement.h"
 
 #include "vtkObjectFactory.h"
@@ -77,7 +58,7 @@ protected :
   std::map<std::string, vtkDataArray*> varAttribute;
 };
 
-vtkCxxRevisionMacro(vtkGenerateStructElement, "$Revision$");
+// vtkCxxRevisionMacro(vtkGenerateStructElement, "$Revision$");
 vtkStandardNewMacro(vtkGenerateStructElement);
 
 vtkGenerateStructElement::vtkGenerateStructElement()
@@ -108,6 +89,8 @@ int vtkGenerateStructElement::RequestData(vtkInformation* request,
   vtkMedStructElement* strelem = vtkMedStructElement::SafeDownCast(
       inug->GetInformation()->Get(vtkMedUtilities::STRUCT_ELEMENT()));
 
+  std::cout << "Inside vtkGenerateStructElement::RequestData" << std::endl;
+
   if(strelem == NULL)
     {
     vtkDebugMacro("vtkGenerateStructElement needs a vtkMedStructElement information");
@@ -131,20 +114,23 @@ int vtkGenerateStructElement::RequestData(vtkInformation* request,
 
   if(name == MED_BALL_NAME)
     {
+    std::cout << "vtkGenerateStructElement::RequestData ...  if(name == MED_BALL_NAME)" << std::endl;
     // sanity check : is the diameter defined?
     if(!cache.HasParameter(MED_BALL_DIAMETER))
       {
       vtkErrorMacro("MED_BALL elements need a diameter");
       return 1;
       }
+    std::cout << "inug->GetNumberOfCells() = " << inug->GetNumberOfCells() << std::endl;
     for(vtkIdType cellId = 0; cellId < inug->GetNumberOfCells(); cellId++)
       {
       vtkIdType ballMedId = strelemindex->GetValue(2*cellId);
       double balldiam = this->GetParameter1(MED_BALL_DIAMETER, ballMedId, cache);
-
+      std::cout << balldiam << " - ";
       //TODO
       //this->GenerateBall(inug, cellId, balldiam, outug);
       }
+    std::cout << std::endl;
     }
   else if(name == MED_PARTICLE_NAME)
     {
index 2477cc9dddd4bd32cbd4c93b141f1f9b84671ca0..58eec5924f7407b06e94b5f3016e443d3e67a341 100644 (file)
@@ -1,22 +1,3 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library 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
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
 #ifndef __vtkGenerateStructElement_h__
 #define __vtkGenerateStructElement_h__
 
@@ -29,7 +10,7 @@ class VTK_EXPORT vtkGenerateStructElement : public vtkUnstructuredGridAlgorithm
 {
 public:
   static vtkGenerateStructElement* New();
-  vtkTypeRevisionMacro(vtkGenerateStructElement, vtkObject)
+  vtkTypeMacro(vtkGenerateStructElement, vtkObject)
   void PrintSelf(ostream& os, vtkIndent indent);
 
 protected :
index d86f2e32fd5e320e2a2419323cf626dac7c23b4c..f1f5bb3491572c651b18b13c63442115457a1275 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 83bed8dda713fa5c513b0c0d2696d9baf3e455a2..033e367c95a2d759867bf39607e658a0e2d7c77a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -21,7 +21,7 @@
 
 #include "vtkObjectFactory.h"
 
-vtkCxxRevisionMacro(vtkMedCartesianGrid, "$Revision$")
+// vtkCxxRevisionMacro(vtkMedCartesianGrid, "$Revision$")
 vtkStandardNewMacro(vtkMedCartesianGrid)
 
 vtkMedCartesianGrid::vtkMedCartesianGrid()
index aec09f0e64734bc99014452e4c341cc92e694858..7f8a54932e372c3d9d9604a04335f9d0d5ada60b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -26,7 +26,7 @@ class VTK_EXPORT vtkMedCartesianGrid : public vtkMedRegularGrid
 {
 public :
   static vtkMedCartesianGrid* New();
-  vtkTypeRevisionMacro(vtkMedCartesianGrid, vtkMedRegularGrid);
+  vtkTypeMacro(vtkMedCartesianGrid, vtkMedRegularGrid);
   void PrintSelf(ostream& os, vtkIndent indent);
 
 protected:
index 01c5d68ecfe36ff67c3eb28ff45c599188a998f8..8c324f47677cef111e6a928ad6aeb85e1ca52506 100644 (file)
@@ -1,22 +1,3 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library 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
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
 #include "vtkMedConstantAttribute.h"
 
 #include "vtkObjectFactory.h"
@@ -31,7 +12,7 @@
 #include <vector>
 using namespace std;
 
-vtkCxxRevisionMacro(vtkMedConstantAttribute, "$Revision$")
+// vtkCxxRevisionMacro(vtkMedConstantAttribute, "$Revision$")
 vtkStandardNewMacro(vtkMedConstantAttribute);
 
 vtkCxxSetObjectMacro(vtkMedConstantAttribute, Values, vtkAbstractArray);
index d93f1172737a88c6547b5d86876004322ab07221..87ac4eb2d0bc264d8e9fb80470b015ba0fb1c4e3 100644 (file)
@@ -1,22 +1,3 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library 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
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
 #ifndef __vtkMedConstantAttribute_h_
 #define __vtkMedConstantAttribute_h_
 
@@ -31,7 +12,7 @@ class VTK_EXPORT vtkMedConstantAttribute : public vtkObject
 {
 public :
   static vtkMedConstantAttribute* New();
-  vtkTypeRevisionMacro(vtkMedConstantAttribute, vtkObject)
+  vtkTypeMacro(vtkMedConstantAttribute, vtkObject)
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index 5379c312e98d7af8522a15c5f914fc5b190cd8ac..b783c8a6d1ad4a0473006092fcb599584ba45b53 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -34,7 +34,7 @@
 
 vtkCxxSetObjectMacro(vtkMedCurvilinearGrid, Coordinates, vtkDataArray);
 
-vtkCxxRevisionMacro(vtkMedCurvilinearGrid, "$Revision$")
+// vtkCxxRevisionMacro(vtkMedCurvilinearGrid, "$Revision$")
 vtkStandardNewMacro(vtkMedCurvilinearGrid)
 
 vtkMedCurvilinearGrid::vtkMedCurvilinearGrid()
@@ -102,7 +102,6 @@ vtkDataSet* vtkMedCurvilinearGrid::CreateVTKDataSet(
   vtkPoints* points = vtkPoints::New();
   vtkgrid->SetPoints(points);
   points->Delete();
-
   vtkgrid->SetDimensions(this->GetAxisSize(0),
                          this->GetAxisSize(1),
                          this->GetAxisSize(2));
@@ -115,6 +114,20 @@ vtkDataSet* vtkMedCurvilinearGrid::CreateVTKDataSet(
     }
   else
     {
+    if(this->GetDimension() == 1)
+      {
+      vtkgrid->SetDimensions(this->GetAxisSize(0),
+                             1,
+                             1);
+      }
+
+    if(this->GetDimension() == 2)
+      {
+      vtkgrid->SetDimensions(this->GetAxisSize(0),
+                             this->GetAxisSize(1),
+                             1);
+      }
+
     vtkDataArray* coords = vtkDataArray::SafeDownCast(
         vtkAbstractArray::CreateArray(this->GetCoordinates()->GetDataType()));
     coords->SetNumberOfComponents(3);
index fc4f13d449078198075fb8d3eee98a8f24ad2cde..07467787b75fe471b6096dde2a86e195d0e234cf 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -30,7 +30,7 @@ class VTK_EXPORT vtkMedCurvilinearGrid : public vtkMedGrid
 {
 public :
   static vtkMedCurvilinearGrid* New();
-  vtkTypeRevisionMacro(vtkMedCurvilinearGrid, vtkMedGrid)
+  vtkTypeMacro(vtkMedCurvilinearGrid, vtkMedGrid)
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index 4566dcc3afdcb8763d95d1044462aca6a351d590..2d1a3877112e6d45b47ab218b8db6e4804c16b16 100644 (file)
@@ -1,22 +1,3 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library 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
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
 #include "vtkMedDriver.h"
 
 #include "vtkObjectFactory.h"
@@ -52,7 +33,7 @@
 
 vtkCxxSetObjectMacro(vtkMedDriver, MedFile, vtkMedFile);
 
-vtkCxxRevisionMacro(vtkMedDriver, "$Revision$")
+//vtkCxxRevisionMacro(vtkMedDriver, "$Revision$")
 vtkStandardNewMacro(vtkMedDriver)
 
 vtkMedDriver::vtkMedDriver()
index a134f0fa91396c82073474cb5f215fe84b9fc315..7b1f8fc6bc15f09ab2467813011f8bc4db346978 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -47,7 +47,7 @@ class VTK_EXPORT vtkMedDriver: public vtkObject
 {
 public:
   static vtkMedDriver* New();
-  vtkTypeRevisionMacro(vtkMedDriver, vtkObject)
+  vtkTypeMacro(vtkMedDriver, vtkObject)
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index 601f896cae509d7ce9178e5fe7d405ac4b44d83f..48bf48f7ef0ace3e04b883393cc89344b1cfd2cc 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 #include "vtkMultiProcessController.h"
 
 #include <string>
-#include <vector>
-#include <algorithm>
 using namespace std;
 
-vtkCxxRevisionMacro(vtkMedDriver30, "$Revision$")
+// vtkCxxRevisionMacro(vtkMedDriver30, "$Revision$")
 vtkStandardNewMacro(vtkMedDriver30)
 
 vtkMedDriver30::vtkMedDriver30() : vtkMedDriver()
@@ -170,6 +168,7 @@ void  vtkMedDriver30::LoadRegularGridCoordinates(vtkMedRegularGrid* grid)
       return;
       }
     }
+
 }
 
 // Description:
@@ -201,6 +200,7 @@ void vtkMedDriver30::ReadCurvilinearGridInformation(vtkMedCurvilinearGrid* grid)
   grid->SetNumberOfPoints(size);
 
   med_int axissize[3];
+
   if(MEDmeshGridStructRd(
       this->FileId,
       grid->GetParentMesh()->GetName(),
@@ -210,24 +210,60 @@ void vtkMedDriver30::ReadCurvilinearGridInformation(vtkMedCurvilinearGrid* grid)
     {
     vtkErrorMacro("ReadCurvilinearGridInformation MEDmeshGridStructRd");
     }
-  grid->SetAxisSize(0, (axissize[0] <= 0 ? 1: axissize[0]));
-  grid->SetAxisSize(1, (axissize[1] <= 0 ? 1: axissize[1]));
-  grid->SetAxisSize(2, (axissize[2] <= 0 ? 1: axissize[2]));
+
+  switch(grid->GetDimension())
+    {
+    case 0 :
+      break;
+    case 1 :
+      grid->SetAxisSize(0, (axissize[0] <= 0 ? 1: axissize[0]));
+      break;
+    case 2 :
+      grid->SetAxisSize(0, (axissize[0] <= 0 ? 1: axissize[0]));
+      grid->SetAxisSize(1, (axissize[1] <= 0 ? 1: axissize[1]));
+      break;
+    case 3 :
+      grid->SetAxisSize(0, (axissize[0] <= 0 ? 1: axissize[0]));
+      grid->SetAxisSize(1, (axissize[1] <= 0 ? 1: axissize[1]));
+      grid->SetAxisSize(2, (axissize[2] <= 0 ? 1: axissize[2]));
+      break;
+    default :
+        vtkErrorMacro("Unsupported dimension for curvilinear grid : "
+                      << grid->GetDimension());
+    return;
+    }
 
   // A test to verify the number of points : total number of
   // points should be equal to the product of each axis size
-  if(size != grid->GetAxisSize(0)*grid->GetAxisSize(1)*grid->GetAxisSize(2))
+  med_int size2 = 0;
+
+  if (grid->GetDimension() == 1)
+    {
+    size2 = grid->GetAxisSize(0);
+    }
+
+  if (grid->GetDimension() == 2)
+    {
+    size2 = grid->GetAxisSize(0)*grid->GetAxisSize(1);
+    }
+
+  if (grid->GetDimension() == 3)
+    {
+    size2 = grid->GetAxisSize(0)*grid->GetAxisSize(1)*grid->GetAxisSize(2);
+    }
+
+  if(size != size2)
     {
     vtkErrorMacro("The total number of points of a Curvilinear grid should "
                   << "be the product of each axis size!");
     }
 
   med_int ncell = 1;
-  if(grid->GetAxisSize(0) > 1)
+  if ((grid->GetDimension() >= 1) && (grid->GetAxisSize(0) > 1))
     ncell *= grid->GetAxisSize(0)-1;
-  if(grid->GetAxisSize(1) > 1)
+  if ((grid->GetDimension() >= 2) && (grid->GetAxisSize(1) > 1))
     ncell *= grid->GetAxisSize(1)-1;
-  if(grid->GetAxisSize(2) > 1)
+  if ((grid->GetDimension() >= 3) && (grid->GetAxisSize(2) > 1))
     ncell *= grid->GetAxisSize(2)-1;
 
   vtkMedEntity entity;
@@ -262,7 +298,6 @@ void vtkMedDriver30::ReadCurvilinearGridInformation(vtkMedCurvilinearGrid* grid)
   array->Delete();
   // this triggers the creation of undefined families
   this->LoadFamilyIds(array);
-
 }
 
 // Description : read the number of entity of all geometry type
@@ -543,56 +578,17 @@ void vtkMedDriver30::ReadFamilyInformation(vtkMedMesh* mesh, vtkMedFamily* famil
 
   family->SetId(familyid);
 
-  if( familyid == 0 ) {
-    family->SetPointOrCell( vtkMedUtilities::OnCell );
-    mesh->AppendCellFamily( family );
-  } else {
-    //rnv: improve algorithm to determine entity of the family:
-    //     1) Read Nb nodes
-    //     2) Read families of the nodes
-    //     3) If list of the families of the nodes contains familyid => vtkMedUtilities::OnPoint
-    //     otherwise => vtkMedUtilities::OnCell
-    med_bool  v1, v2;
-    med_int size = MEDmeshnEntity(
-                                 this->FileId,
-                                 meshName,
-                                 MED_NO_DT,
-                                 MED_NO_IT,
-                                 MED_NODE,
-                                 MED_NO_GEOTYPE,
-                                 MED_COORDINATE,
-                                 MED_NO_CMODE,
-                                 &v1,
-                                 &v2 );
-    if( size < 0 ) {
-      vtkErrorMacro( "vtkMedDriver30::ReadInformation(vtkMedFamily* family)"
-                    <<" cannot read nb Nodes" );
-      return;
+  if(familyid <= 0)
+    {
+    family->SetPointOrCell(vtkMedUtilities::OnCell);
+    mesh->AppendCellFamily(family);
     }
-    
-    vector<med_int> n_fams;
-    n_fams.resize( size );
-    
-    med_int ret_val = MEDmeshEntityFamilyNumberRd( this->FileId,
-                                                   meshName,
-                                                   MED_NO_DT,
-                                                   MED_NO_IT,
-                                                   MED_NODE,
-                                                   MED_NO_GEOTYPE ,
-                                                   &n_fams[0] );
-    // Remove ZERO FAMILY
-    remove( n_fams.begin(),n_fams.end(), 0 );
-    
-    bool isOnPoints = ( ret_val >= 0) && (find( n_fams.begin(), n_fams.end(), familyid ) != n_fams.end() );
-    if( isOnPoints ) {
-      family->SetPointOrCell(vtkMedUtilities::OnPoint);
-      mesh->AppendPointFamily(family);
-    } else {
-      family->SetPointOrCell(vtkMedUtilities::OnCell);       
-      mesh->AppendCellFamily(family);  
-    }
-  }
-  
+  else
+    {
+    family->SetPointOrCell(vtkMedUtilities::OnPoint);
+    mesh->AppendPointFamily(family);
+    }
+
   family->AllocateNumberOfGroup(ngroup);
   // if there where no group, set the name to the default value
   if(has_no_group)
@@ -1071,7 +1067,7 @@ void vtkMedDriver30::ReadFieldInformation(vtkMedField* field)
     vtkMedFieldStep* step = vtkMedFieldStep::New();
     step->SetMedIterator(csit + 1);
     step->SetParentField(field);
-    this->ReadFieldStepInformation(step, true);
+    this->ReadFieldStepInformation(step, csit == 0);
     field->AddFieldStep(step);
     step->SetPreviousStep(previousStep);
     previousStep = step;
@@ -1115,32 +1111,15 @@ void vtkMedDriver30::ReadFieldStepInformation(vtkMedFieldStep* step, bool readAl
   if(mesh == NULL)
     return;
   
-  std::set<vtkMedEntity> tmp_entities;
   std::set<vtkMedEntity> entities;
-  mesh->GatherMedEntities(tmp_entities);
-  
-  std::set<vtkMedEntity>::iterator tmp_entity_it = tmp_entities.begin();
-  while(tmp_entity_it != tmp_entities.end())
-    {
-    vtkMedEntity entity = *tmp_entity_it;
-    tmp_entity_it++;
-    entities.insert(entity);
-    if(entity.EntityType == MED_CELL)
-      {
-      vtkMedEntity newEntity;
-      newEntity.EntityType = MED_NODE_ELEMENT;
-      newEntity.GeometryType = entity.GeometryType;
-      newEntity.GeometryName = entity.GeometryName;
-      entities.insert(newEntity);
-      }
-    }
+  mesh->GatherMedEntities(entities);
   
   vtkMedEntity pointEntity;
   pointEntity.EntityType = MED_NODE;
   pointEntity.GeometryType = MED_NONE;
   pointEntity.GeometryName = MED_NAME_BLANK;
   entities.insert(pointEntity);
-
+  
   std::set<vtkMedEntity>::iterator entity_it = entities.begin();
   while(entity_it != entities.end())
     {
@@ -1986,6 +1965,7 @@ void vtkMedDriver30::LoadConnectivity(vtkMedEntityArray* array)
       {
       if(array->GetEntity().EntityType == MED_STRUCT_ELEMENT)
         {
+        std::cout << "  -- MED_STRUCT_ELEMENT --" << std::endl;
         if(array->GetStructElement() == NULL)
           {
           vtkErrorMacro("Entity type = MED_STRUCT_ELEMENT, but StructElement is not set!");
index d74b4ce9227c0cc2244baed1adb6806d809ab648..578cebad0c49fa3266f6092670642f96cba9b0f8 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -45,7 +45,7 @@ class VTK_EXPORT vtkMedDriver30: public vtkMedDriver
 {
 public:
   static vtkMedDriver30* New();
-  vtkTypeRevisionMacro(vtkMedDriver30, vtkMedDriver)
+  vtkTypeMacro(vtkMedDriver30, vtkMedDriver)
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index 99ac5070f941993745327489de7d5ad94be42f31..bd658b5a218c48bd8a27e29cb2184f75eed4fcc4 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -49,7 +49,7 @@ vtkCxxSetObjectMacro(vtkMedEntityArray,NodeIndex,vtkMedIntArray);
 vtkCxxSetObjectMacro(vtkMedEntityArray,ParentGrid,vtkMedGrid);
 vtkCxxSetObjectMacro(vtkMedEntityArray,StructElement,vtkMedStructElement);
 
-vtkCxxRevisionMacro(vtkMedEntityArray, "$Revision$");
+// vtkCxxRevisionMacro(vtkMedEntityArray, "$Revision$");
 vtkStandardNewMacro(vtkMedEntityArray);
 
 vtkMedEntityArray::vtkMedEntityArray()
@@ -185,27 +185,9 @@ int vtkMedEntityArray::IsConnectivityLoaded()
 
   if(this->Connectivity == MED_NODAL && this->Entity.EntityType != MED_STRUCT_ELEMENT)
     {
-    vtkIdType connSize = 0;
-    if(this->Entity.GeometryType == MED_POLYHEDRON || this->Entity.GeometryType == MED_POLYGON)
-      {
-      if(!this->NodeIndex || !this->FaceIndex)
-        return 0;
-      for(med_int i  = 0; i < this->NumberOfEntity; i++ ) 
-        {
-        med_int start = this->FaceIndex->GetValue(i)-1;
-        med_int end = this->FaceIndex->GetValue(i+1)-1;
-        for(med_int fi = start ; fi < end; fi++ ) 
-          {          
-          med_int fstart = this->NodeIndex->GetValue(fi)-1;
-          med_int fend = this->NodeIndex->GetValue(fi+1)-1;
-          connSize += (fend-fstart);
-          }
-        }
-      } else
-        {
-        connSize = this->NumberOfEntity * 
-        vtkMedUtilities::GetNumberOfPoint(this->Entity.GeometryType);
-        }
+    vtkIdType connSize = this->NumberOfEntity
+        * vtkMedUtilities::GetNumberOfPoint(this->Entity.GeometryType);
+
     return connSize == this->ConnectivityArray->GetNumberOfTuples();
     }
   else if (this->Connectivity == MED_NODAL && this->Entity.EntityType == MED_STRUCT_ELEMENT)
index df8a079a11903dd7aeb4ce8e135726f970d40789..3a7f881e1c8b6af0596877c43ce7c650cc35384f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -40,7 +40,7 @@ class VTK_EXPORT vtkMedEntityArray: public vtkObject
 {
 public:
   static vtkMedEntityArray* New();
-  vtkTypeRevisionMacro(vtkMedEntityArray, vtkObject)
+  vtkTypeMacro(vtkMedEntityArray, vtkObject)
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index d66ff49dace172064bce4352e62bdec28738472e..b6b5752466d9399c6d623b2c6356595afb7fc600 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -23,7 +23,7 @@
 
 #include "vtkMedDriver30.h"
 
-vtkCxxRevisionMacro(vtkMedFactory, "$Revision$")
+// vtkCxxRevisionMacro(vtkMedFactory, "$Revision$")
 vtkStandardNewMacro(vtkMedFactory)
 
 vtkMedFactory::vtkMedFactory()
index cfdf1dae8f597de816c8f3a39a821f38f80c0d78..859461ac37c64f752893014cd0e8572f4813cb6b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -27,7 +27,7 @@ class VTK_EXPORT vtkMedFactory: public vtkObject
 {
 public:
   static vtkMedFactory* New();
-  vtkTypeRevisionMacro(vtkMedFactory, vtkObject)
+  vtkTypeMacro(vtkMedFactory, vtkObject)
   void PrintSelf(ostream& os, vtkIndent indent);
 
   virtual vtkMedDriver* NewMedDriver(int major, int minor, int release);
index 5cd940d173d4e4fd473655b0fcc9d544ec2fbadd..88ff053eeb0df580bd9b32dd0c9ec4528581fba7 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -28,7 +28,7 @@
 vtkCxxGetObjectVectorMacro(vtkMedFamily, Group, vtkMedGroup);
 vtkCxxSetObjectVectorMacro(vtkMedFamily, Group, vtkMedGroup);
 
-vtkCxxRevisionMacro(vtkMedFamily, "$Revision$")
+// vtkCxxRevisionMacro(vtkMedFamily, "$Revision$")
 vtkStandardNewMacro(vtkMedFamily)
 
 vtkMedFamily::vtkMedFamily()
index 81c3cb0efcb69dd0f20b300a2845319e984c7dd5..1eb9f3ffa99fbcf27880b7d6ebb8702e139fba4d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -32,7 +32,7 @@ class VTK_EXPORT vtkMedFamily: public vtkObject
 {
 public:
   static vtkMedFamily* New();
-  vtkTypeRevisionMacro(vtkMedFamily, vtkObject);
+  vtkTypeMacro(vtkMedFamily, vtkObject);
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index 6d72c4d92d24b62e5baf99f0046d95120f3041c3..d938f4e17d42e2add2b69b661d8fe93fb88917a9 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -32,7 +32,7 @@ vtkCxxSetObjectMacro(vtkMedFamilyOnEntity, EntityArray, vtkMedEntityArray);
 
 vtkCxxSetObjectMacro(vtkMedFamilyOnEntity, ParentGrid,vtkMedGrid);
 
-vtkCxxRevisionMacro(vtkMedFamilyOnEntity, "$Revision$");
+// vtkCxxRevisionMacro(vtkMedFamilyOnEntity, "$Revision$");
 vtkStandardNewMacro(vtkMedFamilyOnEntity)
 
 vtkMedFamilyOnEntity::vtkMedFamilyOnEntity()
index 10bf3176ce48b16b86dbb903c22bafc184c11f57..2a171da7f5968d440283091d33f6fe6bd87219e3 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -37,7 +37,7 @@ class VTK_EXPORT vtkMedFamilyOnEntity : public vtkObject
 {
 public :
   static vtkMedFamilyOnEntity* New();
-  vtkTypeRevisionMacro(vtkMedFamilyOnEntity, vtkObject)
+  vtkTypeMacro(vtkMedFamilyOnEntity, vtkObject)
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index e9ac161fd0beb7e8ae19ff3b22452bb03a85a298..85e8099704d46347104176c98fdeb5fe2da26e06 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -45,7 +45,7 @@
 vtkCxxSetObjectMacro(vtkMedFamilyOnEntityOnProfile,FamilyOnEntity, vtkMedFamilyOnEntity);
 vtkCxxSetObjectMacro(vtkMedFamilyOnEntityOnProfile, Profile, vtkMedProfile);
 
-vtkCxxRevisionMacro(vtkMedFamilyOnEntityOnProfile, "$Revision$");
+// vtkCxxRevisionMacro(vtkMedFamilyOnEntityOnProfile, "$Revision$");
 vtkStandardNewMacro(vtkMedFamilyOnEntityOnProfile)
 
 vtkMedFamilyOnEntityOnProfile::vtkMedFamilyOnEntityOnProfile()
@@ -269,9 +269,10 @@ void  vtkMedFamilyOnEntityOnProfile::ComputeUsedPoints()
       this->UseAllPoints = true;
       return;
       }
-    // if there is no profile, the entity is on cell
+    // if there is no profile, the grid is structured, the entity is on cell
     // and there is at most 1 family on his entity, then all points are used
-    if(this->FamilyOnEntity->GetPointOrCell() == vtkMedUtilities::OnCell &&
+    if(vtkMedUnstructuredGrid::SafeDownCast(grid) == NULL &&
+       this->FamilyOnEntity->GetPointOrCell() == vtkMedUtilities::OnCell &&
        this->FamilyOnEntity->GetEntityArray()->GetNumberOfFamilyOnEntity() <= 1)
       {
       this->UseAllPoints = true;
index 4554128d5c733f3cfcbf03ee9afbcda00d74017f..b989b95a1522b874af4f4a7279a94912beb2e6be 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -41,7 +41,7 @@ class VTK_EXPORT vtkMedFamilyOnEntityOnProfile : public vtkObject
 {
 public :
   static vtkMedFamilyOnEntityOnProfile* New();
-  vtkTypeRevisionMacro(vtkMedFamilyOnEntityOnProfile, vtkObject)
+  vtkTypeMacro(vtkMedFamilyOnEntityOnProfile, vtkObject)
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index f51a704bb706b87a792703051704026ade271905..ab6e1df6812ecd9734bbc5cae6d8ec6ac9152f70 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -38,7 +38,7 @@ vtkCxxSetObjectVectorMacro(vtkMedField, Interpolation, vtkMedInterpolation);
 
 vtkCxxSetObjectMacro(vtkMedField, ParentFile, vtkMedFile);
 
-vtkCxxRevisionMacro(vtkMedField, "$Revision$")
+// vtkCxxRevisionMacro(vtkMedField, "$Revision$")
 vtkStandardNewMacro(vtkMedField)
 
 vtkMedField::vtkMedField()
@@ -181,7 +181,6 @@ void  vtkMedField::ExtractFieldType(vtkMedField* otherfield, int type)
     vtkMedFieldStep* otherstep = otherfield->GetFieldStep(stepid);
     vtkMedFieldStep* step = vtkMedFieldStep::New();
     step->SetComputeStep(otherstep->GetComputeStep());
-    step->SetMedIterator(otherstep->GetMedIterator());
     this->AddFieldStep(step);
     step->Delete();
 
index 70fd637c624e7f76b003811fd6d9e274061b7df2..b1511da7488334f9b947070466bd2e824f0acfc7 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -43,7 +43,7 @@ class VTK_EXPORT vtkMedField: public vtkObject
 {
 public:
   static vtkMedField* New();
-  vtkTypeRevisionMacro(vtkMedField, vtkObject);
+  vtkTypeMacro(vtkMedField, vtkObject);
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index 6befbd7e367875c6a3cd2a47f8a3ac6258465b05..5462869876d7567441a1f6d758397fb9cfcfcbdd 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -33,7 +33,7 @@ vtkCxxSetObjectMacro(vtkMedFieldOnProfile, Data, vtkDataArray);
 vtkCxxSetObjectMacro(vtkMedFieldOnProfile, Profile, vtkMedProfile);
 vtkCxxSetObjectMacro(vtkMedFieldOnProfile, ParentFieldOverEntity, vtkMedFieldOverEntity);
 
-vtkCxxRevisionMacro(vtkMedFieldOnProfile, "$Revision$")
+// vtkCxxRevisionMacro(vtkMedFieldOnProfile, "$Revision$")
 vtkStandardNewMacro(vtkMedFieldOnProfile)
 
 vtkMedFieldOnProfile::vtkMedFieldOnProfile()
index fff4dcd9e53731a3a2aaacbba86f1efcd137d717..4140ee9921dd68f5ec51a4da58d596a30a912f20 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -34,7 +34,7 @@ class VTK_EXPORT vtkMedFieldOnProfile: public vtkObject
 {
 public:
   static vtkMedFieldOnProfile* New();
-  vtkTypeRevisionMacro(vtkMedFieldOnProfile, vtkObject);
+  vtkTypeMacro(vtkMedFieldOnProfile, vtkObject);
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index c3880d060b1de2e525266a3305d5ea9b1113bd61..77ade54c35da9935d0297c08be9438e649c75b41 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -34,7 +34,7 @@ vtkCxxSetObjectVectorMacro(vtkMedFieldOverEntity, FieldOnProfile, vtkMedFieldOnP
 
 vtkCxxSetObjectMacro(vtkMedFieldOverEntity, ParentStep, vtkMedFieldStep);
 
-vtkCxxRevisionMacro(vtkMedFieldOverEntity, "$Revision$")
+// vtkCxxRevisionMacro(vtkMedFieldOverEntity, "$Revision$")
 vtkStandardNewMacro(vtkMedFieldOverEntity)
 
 vtkMedFieldOverEntity::vtkMedFieldOverEntity()
index dc853728487e30574e85a4010507b8a565a4e027..0a78bcc3ca55f5b3f46408199b796482bcd613b2 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -33,7 +33,7 @@ class VTK_EXPORT vtkMedFieldOverEntity: public vtkObject
 {
 public:
   static vtkMedFieldOverEntity* New();
-  vtkTypeRevisionMacro(vtkMedFieldOverEntity, vtkObject)
+  vtkTypeMacro(vtkMedFieldOverEntity, vtkObject)
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index 32578332d63e4aa6e84dce54f0f09cc199b14191..78a0fbbb2d9b14f3eeb90a1c45ed35992d51dae6 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -33,7 +33,7 @@ vtkCxxSetObjectVectorMacro(vtkMedFieldStep, FieldOverEntity, vtkMedFieldOverEnti
 vtkCxxSetObjectMacro(vtkMedFieldStep, ParentField, vtkMedField);
 vtkCxxSetObjectMacro(vtkMedFieldStep, PreviousStep, vtkMedFieldStep);
 
-vtkCxxRevisionMacro(vtkMedFieldStep, "$Revision$")
+// vtkCxxRevisionMacro(vtkMedFieldStep, "$Revision$")
 vtkStandardNewMacro(vtkMedFieldStep)
 
 vtkMedFieldStep::vtkMedFieldStep()
index 54b82155ddc893126d1beff8f5c5aba71c05e9a1..b683e198540a0283c2108ff808497ccb05438e79 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -35,7 +35,7 @@ class VTK_EXPORT vtkMedFieldStep: public vtkObject
 {
 public:
   static vtkMedFieldStep* New();
-  vtkTypeRevisionMacro(vtkMedFieldStep, vtkObject);
+  vtkTypeMacro(vtkMedFieldStep, vtkObject);
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index cf41b6ddb42097a85e8f6a982a2dd099a3990500..bbd0aca92c02fd64c391d8f4036d4bafbba2acc3 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -56,7 +56,7 @@ vtkCxxSetObjectVectorMacro(vtkMedFile, SupportMesh, vtkMedMesh);
 
 vtkCxxSetObjectMacro(vtkMedFile, MedDriver, vtkMedDriver);
 
-vtkCxxRevisionMacro(vtkMedFile, "$Revision$")
+//vtkCxxRevisionMacro(vtkMedFile, "$Revision$")
 vtkStandardNewMacro(vtkMedFile)
 
 vtkMedFile::vtkMedFile()
index b1e6f3ee726ed5b04295545a62e532e1df1f6204..7a7561fca2d80bcf3daca6c832a7d428912f223e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -36,7 +36,7 @@ class VTK_EXPORT vtkMedFile: public vtkObject
 {
 public:
   static vtkMedFile* New();
-  vtkTypeRevisionMacro(vtkMedFile, vtkObject)
+  vtkTypeMacro(vtkMedFile, vtkObject)
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index b5939661fda029a4ca0a4654fd3e44c9313dab66..5cfea5184c5e36c971913129f9e49e36a5eb3235 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -21,7 +21,7 @@
 
 #include "vtkObjectFactory.h"
 
-vtkCxxRevisionMacro(vtkMedFilter, "$Revision$")
+// vtkCxxRevisionMacro(vtkMedFilter, "$Revision$")
 vtkStandardNewMacro(vtkMedFilter)
 
 vtkMedFilter::vtkMedFilter()
index 4df3e75404520978061f4b71ae623794602cfb3f..0544c9f9ffd180ed5afdf0a86e2c4701fefe3301 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -27,7 +27,7 @@ class VTK_EXPORT vtkMedFilter : public vtkObject
 {
 public:
   static vtkMedFilter* New();
-  vtkTypeRevisionMacro(vtkMedFilter, vtkObject)
+  vtkTypeMacro(vtkMedFilter, vtkObject)
   void PrintSelf(ostream& os, vtkIndent indent);
 
   void SetFilterSizes( int , int , int , int , int );
index 2680c6ee06cbb612bda8eda8fcdea0d6e8634266..7781aac6931ee79396936a807bd4c56e647a67a9 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -24,7 +24,7 @@
 #include "vtkIntArray.h"
 #include "vtkDoubleArray.h"
 
-vtkCxxRevisionMacro(vtkMedFraction, "$Revision$")
+// vtkCxxRevisionMacro(vtkMedFraction, "$Revision$")
 vtkStandardNewMacro(vtkMedFraction)
 
 vtkMedFraction::vtkMedFraction()
index b594b094505b682a62415e9d8456dba949e8748c..b09b297d11dc3cacc2e38cf4406a63585051e816 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -29,7 +29,7 @@ class VTK_EXPORT vtkMedFraction : public vtkObject
 {
 public:
   static vtkMedFraction* New();
-  vtkTypeRevisionMacro(vtkMedFraction, vtkObject)
+  vtkTypeMacro(vtkMedFraction, vtkObject)
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index 80baf77489b5cddf523140bf8f965d040d245dc1..ddfad540ebfd4e9826f512681f0e9394b18c5777 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -40,7 +40,7 @@ vtkCxxSetObjectMacro(vtkMedGrid, PointGlobalIds, vtkMedIntArray);
 vtkCxxSetObjectMacro(vtkMedGrid, ParentMesh, vtkMedMesh);
 vtkCxxSetObjectMacro(vtkMedGrid, PreviousGrid, vtkMedGrid);
 
-vtkCxxRevisionMacro(vtkMedGrid, "$Revision$")
+// vtkCxxRevisionMacro(vtkMedGrid, "$Revision$")
 
 vtkMedGrid::vtkMedGrid()
 {
index 647b80ec2a31d1bccdc86aa36fb34359bc8df705..5f841c5c783302e0c7718fd11ee5cfe5b77a9b89 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -33,7 +33,7 @@ class vtkMedIntArray;
 class VTK_EXPORT vtkMedGrid : public vtkObject
 {
 public :
-  vtkTypeRevisionMacro(vtkMedGrid, vtkObject)
+  vtkTypeMacro(vtkMedGrid, vtkObject)
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index a2a9ddf042e01eeef1e9ccf34ac451e928071e5e..87ceb93cd265ed9c73852bacff933db6ac15b7c6 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -23,7 +23,7 @@
 
 #include "vtkMedUtilities.h"
 
-vtkCxxRevisionMacro(vtkMedGroup, "$Revision$")
+// vtkCxxRevisionMacro(vtkMedGroup, "$Revision$")
 vtkStandardNewMacro(vtkMedGroup)
 
 vtkMedGroup::vtkMedGroup()
index e5b37d0960bafe085ef927e4a6e0b25aaadf759d..1bb097d3f18c149664c3d4473d04cfe84f7c4269 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -28,7 +28,7 @@ class VTK_EXPORT vtkMedGroup : public vtkObject
 {
 public :
   static vtkMedGroup* New();
-  vtkTypeRevisionMacro(vtkMedGroup, vtkObject)
+  vtkTypeMacro(vtkMedGroup, vtkObject)
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index e196198ca2e6b1996fd766f6c762cdab6a483e7c..5f054dcb719bc54bc06d012855fbda8c6e1a4ac4 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -22,7 +22,7 @@
 #include "vtkObjectFactory.h"
 
 //----------------------------------------------------------------------------
-vtkCxxRevisionMacro(vtkMedIntArray, "$Revision$");
+// vtkCxxRevisionMacro(vtkMedIntArray, "$Revision$");
 vtkStandardNewMacro(vtkMedIntArray);
 
 //----------------------------------------------------------------------------
index 1926ff716ec670b3f355407556d086dd6f413bdd..6b1b0498674eafad3d8cb066fd1718c2644f3229 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -58,7 +58,7 @@ class VTK_EXPORT vtkMedIntArray
 {
 public :
   static vtkMedIntArray* New();
-  vtkTypeRevisionMacro(vtkMedIntArray,vtkMedIntArraySuperclass);
+  vtkTypeMacro(vtkMedIntArray,vtkMedIntArraySuperclass);
   void PrintSelf(ostream& os, vtkIndent indent);
 protected:
   vtkMedIntArray(vtkIdType numComp=1);
index 3fa107ceb2e65da47566c2a3a1b4a044c72ecc5c..f6b87a03157cfb1cd10ba80f8898efd7f1bbb2c2 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -33,7 +33,7 @@ VTK_ARRAY_ITERATOR_TEMPLATE_INSTANTIATE(med_int);
 
 #include "vtkObjectFactory.h"
 
-vtkCxxRevisionMacro(vtkMedIntArrayInternal, "$Revision$");
+// vtkCxxRevisionMacro(vtkMedIntArrayInternal, "$Revision$");
 vtkStandardNewMacro(vtkMedIntArrayInternal);
 
 //----------------------------------------------------------------------------
index b4026ba6a3a426abcf2c58e583c74794acbc8932..ab107acf36fe25e35a767d3cd7298aaae6f9241c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -43,7 +43,7 @@ class VTK_EXPORT vtkMedIntArrayInternal : public vtkDataArray
 {
 public:
   static vtkMedIntArrayInternal* New();
-  vtkTypeRevisionMacro(vtkMedIntArrayInternal,vtkDataArray);
+  vtkTypeMacro(vtkMedIntArrayInternal,vtkDataArray);
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index 34b7693b4181b0972cbb6925fe0630ac8369c255..4f82bf75ca6ec5083d06535575d097f91f896ad0 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -24,7 +24,7 @@
 #include "vtkMedUtilities.h"
 #include "vtkMedFraction.h"
 
-vtkCxxRevisionMacro(vtkMedInterpolation, "$Revision$")
+// vtkCxxRevisionMacro(vtkMedInterpolation, "$Revision$")
 vtkStandardNewMacro(vtkMedInterpolation)
 
 vtkCxxGetObjectVectorMacro(vtkMedInterpolation, BasisFunction,
index 3eb4edca5aba98f8e3802203256cd1fce2737be4..15cb6d9595392de9e61c3278aec32d7ebe9a002c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -31,7 +31,7 @@ class VTK_EXPORT vtkMedInterpolation : public vtkObject
 {
 public:
   static vtkMedInterpolation* New();
-  vtkTypeRevisionMacro(vtkMedInterpolation, vtkObject)
+  vtkTypeMacro(vtkMedInterpolation, vtkObject)
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index deaa521146eeeb9d6b4d9f496d8332f6ebd876d5..3f2c10e15b64b41508d049a58c52330aeeb88f86 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -26,7 +26,7 @@
 #include <string>
 using namespace std;
 
-vtkCxxRevisionMacro(vtkMedLink, "$Revision$")
+// vtkCxxRevisionMacro(vtkMedLink, "$Revision$")
 vtkStandardNewMacro(vtkMedLink)
 
 vtkMedLink::vtkMedLink()
index 1f1434557b88ce9c222a486e2b9efaa236b5d0c9..14884550f366174a71fa336ad438d605ccf32f4b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -32,7 +32,7 @@ class VTK_EXPORT vtkMedLink: public vtkObject
 {
 public:
   static vtkMedLink* New();
-  vtkTypeRevisionMacro(vtkMedLink, vtkObject);
+  vtkTypeMacro(vtkMedLink, vtkObject);
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index 4ac6fd90512d50f05337719ab312924fa9644306..6069d05e56c00d7194942f60d0684a755a47b17c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -372,7 +372,7 @@ static const char* PYRA13_functions[PYRA13_nnode] =
 vtkCxxSetObjectMacro(vtkMedLocalization, ParentFile, vtkMedFile);
 vtkCxxSetObjectMacro(vtkMedLocalization, Interpolation, vtkMedInterpolation);
 
-vtkCxxRevisionMacro(vtkMedLocalization, "$Revision$")
+// vtkCxxRevisionMacro(vtkMedLocalization, "$Revision$")
 vtkStandardNewMacro(vtkMedLocalization)
 
 vtkMedLocalization::vtkMedLocalization()
index 7b88c5fa41d361a5ec4fdcb53493d700e90bdf93..1f7eb8a6894dfb23c93a033a517cd25f039a47a6 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -33,7 +33,7 @@ class VTK_EXPORT vtkMedLocalization : public vtkObject
 {
 public:
   static vtkMedLocalization* New();
-  vtkTypeRevisionMacro(vtkMedLocalization, vtkObject);
+  vtkTypeMacro(vtkMedLocalization, vtkObject);
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index d4257412c9506d84fc93cb50a58db9edf520b56c..b27c824502e091953ac823a3cda6215a501f13dd 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -45,7 +45,7 @@ vtkCxxSetObjectVectorMacro(vtkMedMesh, CellGroup, vtkMedGroup);
 
 vtkCxxSetObjectMacro(vtkMedMesh, ParentFile, vtkMedFile);
 
-vtkCxxRevisionMacro(vtkMedMesh, "$Revision$")
+// vtkCxxRevisionMacro(vtkMedMesh, "$Revision$")
 vtkStandardNewMacro(vtkMedMesh)
 
 vtkMedMesh::vtkMedMesh()
@@ -155,7 +155,7 @@ vtkMedFamily* vtkMedMesh::GetOrCreateCellFamilyById(med_int id)
     }
   vtkMedFamily* family = vtkMedFamily::New();
   family->SetId(id);
-  vtkstd::ostringstream sstr;
+  std::ostringstream sstr;
   sstr << "UNDEFINED_CELL_FAMILY_" << id;
   family->SetName(sstr.str().c_str());
   family->SetPointOrCell(vtkMedUtilities::OnCell);
@@ -187,7 +187,7 @@ vtkMedFamily* vtkMedMesh::GetOrCreatePointFamilyById(med_int id)
     }
   vtkMedFamily* family = vtkMedFamily::New();
   family->SetId(id);
-  vtkstd::ostringstream sstr;
+  std::ostringstream sstr;
   sstr << "UNDEFINED_POINT_FAMILY_" << id;
   family->SetName(sstr.str().c_str());
   family->SetPointOrCell(vtkMedUtilities::OnPoint);
index 872baab29b7da9298d74f74a6ed9cd3e19efc45b..0e84dd55c5bf7b03612b9ec9d3421547a5243b9f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -40,7 +40,7 @@ class VTK_EXPORT vtkMedMesh: public vtkObject
 {
 public:
   static vtkMedMesh* New();
-  vtkTypeRevisionMacro(vtkMedMesh, vtkObject);
+  vtkTypeMacro(vtkMedMesh, vtkObject);
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index e765c7b05306f4e6a3d17d3e90653af869c72ad7..3783136d02ad50e854fe7093e4e5ffd20e35955f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -21,7 +21,7 @@
 
 #include "vtkObjectFactory.h"
 
-vtkCxxRevisionMacro(vtkMedPolarGrid, "$Revision$")
+// vtkCxxRevisionMacro(vtkMedPolarGrid, "$Revision$")
 vtkStandardNewMacro(vtkMedPolarGrid)
 
 vtkMedPolarGrid::vtkMedPolarGrid()
index 13d6332479f37483b070be7a0fcbc280c75330dd..35c857db365007aeae40dd47b7611c45318daaae 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -26,7 +26,7 @@ class VTK_EXPORT vtkMedPolarGrid : public vtkMedRegularGrid
 {
 public :
   static vtkMedPolarGrid* New();
-  vtkTypeRevisionMacro(vtkMedPolarGrid, vtkMedRegularGrid);
+  vtkTypeMacro(vtkMedPolarGrid, vtkMedRegularGrid);
   void PrintSelf(ostream& os, vtkIndent indent);
 
 protected:
index 2bccd4b47229f27b5e5c1814446d2b7ed828384d..49467717eb11c95da8f683476f6f0c2f02a1f505 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -29,7 +29,7 @@
 vtkCxxSetObjectMacro(vtkMedProfile,Ids,vtkMedIntArray);
 vtkCxxSetObjectMacro(vtkMedProfile,ParentFile,vtkMedFile);
 
-vtkCxxRevisionMacro(vtkMedProfile, "$Revision$");
+// vtkCxxRevisionMacro(vtkMedProfile, "$Revision$");
 vtkStandardNewMacro(vtkMedProfile);
 
 vtkMedProfile::vtkMedProfile()
index 818c5996b70c327449265947a7579fda42055537..1da6bfcae9a071a1c9d5701815b18ab074750ed4 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -31,7 +31,7 @@ class VTK_EXPORT vtkMedProfile : public vtkObject
 {
 public :
   static vtkMedProfile* New();
-  vtkTypeRevisionMacro(vtkMedProfile, vtkObject)
+  vtkTypeMacro(vtkMedProfile, vtkObject)
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index ce59b8a2eb6b4f78e506772482cd7c7a61f13fb8..17d4b241f71cdddaf4dedfdb20657939f0efc3e7 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -56,6 +56,7 @@
 #include "vtkMultiBlockDataSet.h"
 #include "vtkExecutive.h"
 #include "vtkStreamingDemandDrivenPipeline.h"
+#include "vtkMultiTimeStepAlgorithm.h"
 #include "vtkUnstructuredGrid.h"
 #include "vtkMath.h"
 #include "vtkPointData.h"
@@ -81,7 +82,6 @@
 #include <list>
 #include <set>
 #include <algorithm>
-
 using namespace std;
 
 struct VTKField
@@ -187,7 +187,7 @@ public:
 
   vtkIdType GetGroupId(const char* key)
   {
-    vtkstd::string meshname, celltypename, groupname;
+    std::string meshname, celltypename, groupname;
     vtkMedUtilities::SplitGroupKey(key, meshname, celltypename, groupname);
     vtkIdType root=GetChild(0, "SIL");
     if(root==-1)
@@ -204,7 +204,7 @@ public:
 
 };
 
-vtkCxxRevisionMacro(vtkMedReader, "$Revision$");
+//vtkCxxRevisionMacro(vtkMedReader, "$Revision$");
 vtkStandardNewMacro(vtkMedReader);
 
 vtkMedReader::vtkMedReader()
@@ -425,11 +425,22 @@ int vtkMedReader::RequestData(vtkInformation *request,
     this->Internal->GhostLevel=0;
     }
 
-  if (info->Has(vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEPS()))
+  //vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEPS()
+  /* if (info->Has(vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEPS()))
     {
     this->Internal->UpdateTimeStep=info->Get(
         vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEPS())[0];
     }
+  else
+    {
+    this->Internal->UpdateTimeStep=0;
+    } */
+
+  if (info->Has(vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEP()))
+    {
+    this->Internal->UpdateTimeStep=info->Get(
+        vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEP());
+    }
   else
     {
     this->Internal->UpdateTimeStep=0;
@@ -1746,16 +1757,6 @@ void vtkMedReader::AddQuadratureSchemeDefinition(vtkInformation* info,
 
   vtkQuadratureSchemeDefinition* def=vtkQuadratureSchemeDefinition::New();
   int cellType=vtkMedUtilities::GetVTKCellType(loc->GetGeometryType());
-  // Control to avoid crahs when loading a file with structural elements.
-  // This should be removed in version 7.1.0 of SALOME.
-  // See mantis issue 21990
-  if(loc->GetGeometryType() >= MED_STRUCT_GEO_INTERNAL)    
-    {
-    vtkErrorMacro("You are loading a file containing structural elements BUT they are still not supported");
-    return;
-    }
-  if(loc->GetWeights()->GetVoidPointer(0) ==  NULL)
-    return;
   def->Initialize(cellType, vtkMedUtilities::GetNumberOfPoint(
       loc->GetGeometryType()), loc->GetNumberOfQuadraturePoint(),
       (double*)loc->GetShapeFunction()->GetVoidPointer(0),
@@ -2338,7 +2339,7 @@ void vtkMedReader::SetVTKFieldOnSupport(vtkMedFieldOnProfile* fop,
       // if the data set is only composed of VTK_VERTEX cells,
       // and no field called with the same name exist on cells,
       // map this field to cells too
-      if(foe->GetVertexOnly()==1 && ds->GetCellData()->GetArray(
+      if(foe->GetVertexOnly()==1&&ds->GetCellData()->GetArray(
               vtkfield.DataArray->GetName())==NULL)
         {
         ds->GetCellData()->AddArray(vtkfield.DataArray);
@@ -2784,7 +2785,7 @@ void vtkMedReader::CreateVTKFieldOnSupport(vtkMedFieldOnProfile* fop,
       if(!foep->KeepPoint(realIndex))
         continue;
 
-      vtkfield.DataArray->InsertNextTuple(fop->GetData()->GetTuple(id));
+      vtkfield.DataArray->InsertNextTuple(fop->GetData()->GetTuple(realIndex));
       }
     vtkfield.DataArray->Squeeze();
     }// support on point
@@ -2875,7 +2876,7 @@ void vtkMedReader::BuildSIL(vtkMutableDirectedGraph* sil)
   crossEdgesArray->SetName("CrossEdges");
   sil->GetEdgeData()->AddArray(crossEdgesArray);
   crossEdgesArray->Delete();
-  vtkstd::deque<vtkstd::string> names;
+  /*vtk*/std::deque</*vtk*/std::string> names;
 
   // Now build the hierarchy.
   vtkIdType rootId=sil->AddVertex();
@@ -3024,7 +3025,7 @@ void vtkMedReader::BuildSIL(vtkMutableDirectedGraph* sil)
   namesArray->SetNumberOfTuples(sil->GetNumberOfVertices());
   sil->GetVertexData()->AddArray(namesArray);
   namesArray->Delete();
-  vtkstd::deque<vtkstd::string>::iterator iter;
+  /*vtk*/std::deque</*vtk*/std::string>::iterator iter;
   vtkIdType cc;
   for(cc=0, iter=names.begin(); iter!=names.end(); ++iter, ++cc)
     {
index a89980595293883a109d17d915b5d39a7dd82193..564d6dabc107b08c729cd31baf995c1c717f1a62 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -56,7 +56,7 @@ class VTK_EXPORT vtkMedReader: public vtkMultiBlockDataSetAlgorithm
 {
 public:
   static vtkMedReader* New();
-  vtkTypeRevisionMacro(vtkMedReader, vtkMultiBlockDataSetAlgorithm);
+  vtkTypeMacro(vtkMedReader, vtkMultiBlockDataSetAlgorithm);
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index 0f3aafe150f3662e938c473526b206d8dbe21b10..926a4d1cd2c487b1806749b78c4a9840a1c09c63 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -36,7 +36,7 @@
 vtkCxxGetObjectVectorMacro(vtkMedRegularGrid, AxisCoordinate, vtkDataArray);
 vtkCxxSetAbstractObjectVectorMacro(vtkMedRegularGrid, AxisCoordinate, vtkDataArray);
 
-vtkCxxRevisionMacro(vtkMedRegularGrid, "$Revision$")
+// vtkCxxRevisionMacro(vtkMedRegularGrid, "$Revision$")
 vtkStandardNewMacro(vtkMedRegularGrid)
 
 vtkMedRegularGrid::vtkMedRegularGrid()
index 1073216856f862b3193e488421626b59c73cf46a..23bb0602a7d2aa253714a5d00a879b11f3d6e3b4 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -32,7 +32,7 @@ class VTK_EXPORT vtkMedRegularGrid : public vtkMedGrid
 {
 public :
   static vtkMedRegularGrid* New();
-  vtkTypeRevisionMacro(vtkMedRegularGrid, vtkMedGrid)
+  vtkTypeMacro(vtkMedRegularGrid, vtkMedGrid)
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index 9f70e9dc76476fad6d89b6235e26d1fc8134b949..4401beba098a38f3d163628f5b7cbc6dc113b602 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -34,7 +34,7 @@ public :
   vector< string > Keys;
 };
 
-vtkCxxRevisionMacro(vtkMedSelection, "$Revision$")
+// vtkCxxRevisionMacro(vtkMedSelection, "$Revision$")
 vtkStandardNewMacro(vtkMedSelection)
 
 vtkMedSelection::vtkMedSelection()
index a9f1418b2b115ee478be2b3c6f9b88fda5f45825..aa7a05a229056a0ba7f81022ea241a4e3dbce44c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -28,7 +28,7 @@ class VTK_EXPORT vtkMedSelection : public vtkObject
 {
 public :
   static vtkMedSelection* New();
-  vtkTypeRevisionMacro(vtkMedSelection, vtkObject)
+  vtkTypeMacro(vtkMedSelection, vtkObject)
   void PrintSelf(ostream& os, vtkIndent indent);
 
   virtual void  Initialize();
index 6e3371e4db61afbbd7717a2cace45706afeb8982..21ced39ef6582672fbbe031e538549a140aaff89 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index b9b7f638b6d10da096ed686175781c586e4a4c1f..1707416cfc22c2abb729abd9bd7c123b6f87f56f 100644 (file)
@@ -1,22 +1,3 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library 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
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
 #include "vtkMedStructElement.h"
 
 #include "vtkObjectFactory.h"
@@ -39,7 +20,7 @@ vtkCxxSetObjectVectorMacro(vtkMedStructElement, ConstantAttribute, vtkMedConstan
 vtkCxxSetObjectMacro(vtkMedStructElement, ParentFile, vtkMedFile);
 vtkCxxSetObjectMacro(vtkMedStructElement, SupportMesh, vtkMedMesh);
 
-vtkCxxRevisionMacro(vtkMedStructElement, "$Revision$")
+// vtkCxxRevisionMacro(vtkMedStructElement, "$Revision$")
 vtkStandardNewMacro(vtkMedStructElement)
 
 vtkMedStructElement::vtkMedStructElement()
index 0542943516421aede5e9506438f3c78397d06780..2610afb712b469700ef8bc54d3a0f59d8a4ea738 100644 (file)
@@ -1,22 +1,3 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library 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
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
 #ifndef __vtkMedStructElement_h_
 #define __vtkMedStructElement_h_
 
@@ -34,7 +15,7 @@ class VTK_EXPORT vtkMedStructElement : public vtkObject
 {
 public :
   static vtkMedStructElement* New();
-  vtkTypeRevisionMacro(vtkMedStructElement, vtkObject)
+  vtkTypeMacro(vtkMedStructElement, vtkObject)
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index 2ca5249bb05b7cdabe8e93164c5034f13f045f9a..e54973f98ea1bc1c0bb821cded7e726252e7c642 100644 (file)
@@ -1,22 +1,3 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library 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
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
 #include "vtkMedSupportMesh.h"
 
 #include "vtkObjectFactory.h"
@@ -32,7 +13,7 @@ using namespace std;
 
 vtkCxxSetObjectMacro(vtkMedSupportMesh, ParentFile, vtkMedFile);
 
-vtkCxxRevisionMacro(vtkMedSupportMesh, "$Revision$")
+// vtkCxxRevisionMacro(vtkMedSupportMesh, "$Revision$")
 vtkStandardNewMacro(vtkMedSupportMesh)
 
 vtkMedSupportMesh::vtkMedSupportMesh()
index 6280199d1b094dfb443ec6e469edb42c99350f8c..6fb0222c04a7dfec18c98cbd1e2567b5f3e24bf2 100644 (file)
@@ -1,22 +1,3 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library 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
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
 #ifndef __vtkMedSupportMesh_h_
 #define __vtkMedSupportMesh_h_
 
@@ -31,7 +12,7 @@ class VTK_EXPORT vtkMedSupportMesh : public vtkObject
 {
 public :
   static vtkMedSupportMesh* New();
-  vtkTypeRevisionMacro(vtkMedSupportMesh, vtkObject)
+  vtkTypeMacro(vtkMedSupportMesh, vtkObject)
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index 5a43dc053d68305c79fac642ae283e72f686249c..eb744d102488abc38be85d707f0e625edbe9f685 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -45,7 +45,7 @@
 
 vtkCxxSetObjectMacro(vtkMedUnstructuredGrid,Coordinates,vtkDataArray);
 
-vtkCxxRevisionMacro(vtkMedUnstructuredGrid, "$Revision$")
+// vtkCxxRevisionMacro(vtkMedUnstructuredGrid, "$Revision$")
 vtkStandardNewMacro(vtkMedUnstructuredGrid)
 
 vtkMedUnstructuredGrid::vtkMedUnstructuredGrid()
@@ -216,6 +216,7 @@ vtkDataSet* vtkMedUnstructuredGrid::CreateVTKDataSet(
         }
 
       vtkugrid->GetInformation()->Set(vtkMedUtilities::STRUCT_ELEMENT(), structelem);
+      std::cout << "structelem->GetNumberOfVariableAttribute() = " << structelem->GetNumberOfVariableAttribute() << std::endl;
       for(int varattid = 0; varattid<structelem->GetNumberOfVariableAttribute(); varattid++)
         {
         vtkMedVariableAttribute* varatt = structelem->GetVariableAttribute(varattid);
@@ -246,7 +247,6 @@ vtkDataSet* vtkMedUnstructuredGrid::CreateVTKDataSet(
     if (controller->GetNumberOfProcesses() > 1)
     valid = 1;
 
-  array->LoadConnectivity();
   for (vtkIdType pindex = 0; pindex<maxId && valid; pindex++)
     {
     vtkIdType realIndex = (pids!=NULL?
@@ -256,6 +256,8 @@ vtkDataSet* vtkMedUnstructuredGrid::CreateVTKDataSet(
     if (!foep->KeepCell(realIndex))
       continue;
 
+    array->GetCellVertices(realIndex, pts);
+
     for(int sid = 0; sid < nsupportcell; sid++)
       {
       cellGlobalIds->InsertNextValue(intialGlobalId+pindex);
@@ -287,7 +289,6 @@ vtkDataSet* vtkMedUnstructuredGrid::CreateVTKDataSet(
       }
     else
       {
-      array->GetCellVertices(realIndex, pts);
       vtkpts->Initialize();
       vtkpts->SetNumberOfIds(pts->GetNumberOfIds());
 
index 5c5944a44254f074cd50ee113119e8744c5b239c..30c1e1fc182a6e0c5b6bb1f029d1b8669fabeece 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -32,7 +32,7 @@ class VTK_EXPORT vtkMedUnstructuredGrid : public vtkMedGrid
 {
 public :
   static vtkMedUnstructuredGrid* New();
-  vtkTypeRevisionMacro(vtkMedUnstructuredGrid, vtkMedGrid);
+  vtkTypeMacro(vtkMedUnstructuredGrid, vtkMedGrid);
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index 10a29238bf0e78f60524f11024ea7321e84d50c4..04f647db152148a5a3acb04fceb7dbc20ec163c2 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -213,8 +213,6 @@ const char* vtkMedUtilities::GeometryName(med_geometry_type geometry)
       return "MED_POLYGON";
     case MED_POLYHEDRON:
       return "MED_POLYHEDRON";
-    case MED_STRUCT_GEO_INTERNAL:
-      return "MED_STRUCT_GEO_INTERNAL";
     case MED_NO_GEOTYPE:
       return "MED_NO_GEOTYPE";
     default:
@@ -631,7 +629,7 @@ int vtkMedUtilities::FormatPolyhedronForVTK(
 
   if (array->GetConnectivity()==MED_NODAL)
     {
-    ids->InsertNextId(end-start);
+    ids->InsertNextId(end-start-1);
     for (int ff = start; ff<end; ff++)
       {
       med_int fstart = nodeIndex->GetValue(ff)-1;
@@ -686,21 +684,21 @@ int vtkMedUtilities::FormatPolyhedronForVTK(
   return 1;
 }
 
-void vtkMedUtilities::SplitGroupKey(const char* name, vtkstd::string& mesh,
-    vtkstd::string& entity, vtkstd::string& group)
+void vtkMedUtilities::SplitGroupKey(const char* name, std::string& mesh,
+    std::string& entity, std::string& group)
 {
-  vtkstd::string remain;
+  std::string remain;
   remain=name;
   mesh="*";
   entity="*";
   group="*";
-  vtkstd::string header="*";
+  std::string header="*";
 
   if(remain=="*")
     {
     return;
     }
-  vtkstd::string::size_type pos;
+  std::string::size_type pos;
   // First get the header, which must be "GROUP"
   pos=remain.find_first_of(vtkMedUtilities::Separator);
   header=remain.substr(0, pos);
index 551635df5f67a545572b2da0844b9c47d631ce7a..b6fe368760414d89fc5d44249b3bab8c6bf43e45 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2010-2011  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -194,8 +194,8 @@ public:
   static const char* OnPointName;
 
   //BTX
-  static void SplitGroupKey(const char* name, vtkstd::string& mesh,
-      vtkstd::string& entity, vtkstd::string& group);
+  static void SplitGroupKey(const char* name, /*vtkstd::*/std::string& mesh,
+      /*vtkstd::*/std::string& entity, /*vtkstd::*/std::string& group);
 
   static std::string GetModeKey(int index, double frequency, int maxindex);
   static int  GetModeFromKey(const char*, int& index, double& frequency);
index cb0f7d524771f1072ce6061858af7c04ed60247b..51c5653b5c0a04f2fe07802af4079699f1165887 100644 (file)
@@ -1,22 +1,3 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library 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
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
 #include "vtkMedVariableAttribute.h"
 
 #include "vtkObjectFactory.h"
@@ -30,7 +11,7 @@
 #include <vector>
 using namespace std;
 
-vtkCxxRevisionMacro(vtkMedVariableAttribute, "$Revision$")
+// vtkCxxRevisionMacro(vtkMedVariableAttribute, "$Revision$")
 vtkStandardNewMacro(vtkMedVariableAttribute);
 
 vtkCxxSetObjectMacro(vtkMedVariableAttribute, ParentStructElement, vtkMedStructElement);
index f3526757922b67cdae243d78d2e49fde243fe0dc..82a5bf9cf4042327484a19bb0c12f05673df63c9 100644 (file)
@@ -1,22 +1,3 @@
-// Copyright (C) 2010-2012  CEA/DEN, EDF R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library 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
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
 #ifndef __vtkMedVariableAttribute_h_
 #define __vtkMedVariableAttribute_h_
 
@@ -32,7 +13,7 @@ class VTK_EXPORT vtkMedVariableAttribute : public vtkObject
 {
 public :
   static vtkMedVariableAttribute* New();
-  vtkTypeRevisionMacro(vtkMedVariableAttribute, vtkObject)
+  vtkTypeMacro(vtkMedVariableAttribute, vtkObject)
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index c03f26705fb48a82fb7d6fda3294ceea5c95de8e..9fa21fde88dc4f8ecdb7a188792abdc6311363b4 100644 (file)
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-set(MEDREADER_HDRS)
-set(EXTRACTGROUP_HDRS)
+# add include indirectories to the vtk files in this plugin.
+include_directories(
+  ${MedReader_SOURCE_DIR}/IO
+  ${MedReader_BINARY_DIR}/IO)
 
-include(${MedReader_BINARY_DIR}/IO/vtkMedReader_IOKit.cmake)
-
-include_directories(${VTK_MEDREADER_IO_HEADER_DIR})
-
-add_definitions( -I${CMAKE_CURRENT_BINARY_DIR}/../IO )
-
-foreach(class ${VTK_MEDREADER_IO_CLASSES})
-    set(MEDREADER_HDRS ${MEDREADER_HDRS} ${VTK_MEDREADER_IO_HEADER_DIR}/${class}.h)
-endforeach(class)
-
-foreach(class ${VTK_MEDREADER_IO_CLASSES_ABSTRACT})
-    set_source_files_properties(${VTK_MEDREADER_IO_HEADER_DIR}/${class}.h PROPERTIES ABSTRACT 1)
-endforeach(class)
-
-foreach(class ${VTK_MEDREADER_IO_CLASSES_WRAP_EXCLUDE})
-    set_source_files_properties(${VTK_MEDREADER_IO_HEADER_DIR}/${class}.h PROPERTIES WRAP_EXCLUDE 1)
-endforeach(class)
 
 SET(SM_SRCS
     vtkSMMedGroupSelectionDomain.cxx
@@ -74,7 +59,7 @@ IF(PARAVIEW_BUILD_QT_GUI)
     
     # create the med reader plugin itself
     ADD_PARAVIEW_PLUGIN(MedReaderPlugin "4.0"
-        SERVER_MANAGER_SOURCES ${MEDREADER_HDRS} ${EXTRACTGROUP_HDRS} ${SM_SRCS}
+        SERVER_MANAGER_SOURCES ${SM_SRCS}
         SERVER_MANAGER_XML Resources/MedReaderServer.xml
         GUI_INTERFACES ${MEDREADER_IFACES} ${EXTRACTGROUP_IFACES}
         GUI_RESOURCES Resources/pqMedReader.qrc
@@ -83,19 +68,27 @@ IF(PARAVIEW_BUILD_QT_GUI)
               ${MOC_SRCS}
               ${MEDREADER_IFACE_SRCS}
               ${EXTRACTGROUP_IFACE_SRCS}
+        CS_KITS
+            # this is the same name as the name in module.cmake file IO
+            # directory.
+            vtkMedReader
     )
         
 ELSE(PARAVIEW_BUILD_QT_GUI)
           
     # create the med reader plugin itself
     ADD_PARAVIEW_PLUGIN(MedReaderPlugin "4.0"
-        SERVER_MANAGER_SOURCES ${MEDREADER_HDRS} ${EXTRACTGROUP_HDRS} ${SM_SRCS}
+        SERVER_MANAGER_SOURCES ${SM_SRCS}
         SERVER_MANAGER_XML Resources/MedReaderServer.xml
+        CS_KITS
+            # this is the same name as the name in module.cmake file IO
+            # directory.
+            vtkMedReader
     )
     
 ENDIF(PARAVIEW_BUILD_QT_GUI)
 
-TARGET_LINK_LIBRARIES(MedReaderPlugin vtkMedReader)
+TARGET_LINK_LIBRARIES(MedReaderPlugin vtkMedReader vtkMedReaderCS)
 
 # Install
 INSTALL(
index 095d9b5e5cea0e4542ea91bd8516c1d7c62a77be..a672951820ac613463a10de8aaadc7ba5e3aff63 100644 (file)
@@ -149,7 +149,14 @@ void pqExtractGroupPanel::linkServerManagerProperties()
 
 void pqExtractGroupPanel::updateSIL()
 {
-
+/* VSR???????? 
+//<<<<<<< HEAD:ParaViewPlugin/pqExtractGroupPanel.cxx
+
+  this->proxy()->UpdatePropertyInformation(
+      this->proxy()->GetProperty("SILUpdateStamp"));
+//=======
+//>>>>>>> medparallel:ParaViewPlugin/pqExtractGroupPanel.cxx
+*/
   vtkSMProxy* reader = this->referenceProxy()->getProxy();
   reader->UpdatePropertyInformation(reader->GetProperty("SILUpdateStamp"));
 
diff --git a/src/Plugins/MedReader/plugin.cmake b/src/Plugins/MedReader/plugin.cmake
new file mode 100644 (file)
index 0000000..7d1291e
--- /dev/null
@@ -0,0 +1,5 @@
+pv_plugin(MedReader
+  # provide a description for the plugin.
+  DESCRIPTION "Reads the MED data format from Electricite de France"
+  PLUGIN_NAMES MedReader
+  DEFAULT_ENABLED)
index f7aa1375ccf7665dc0c903dc7cb1bedca7e49213..fa8e2d3d8ad738807b00baee52aa74d219452884 100644 (file)
@@ -53,7 +53,7 @@ void pqSetModeStarter::setStandardMode()
     // Set Post-Pro-like settings
     QStringList strs;
     pqRenderView::ManipulatorType manips[9];
-    const pqRenderView::ManipulatorType* default3DManips = pqRenderView::getDefaultManipulatorTypes();
+    const pqRenderView::ManipulatorType* default3DManips = pqRenderView::getDefault3DManipulatorTypes();
 
     // Copy default settings, make changes for Ctrl+MB and MB modes
     for(int i=0; i<9; i++)
index fac81bbd762a90f6883198c3b6b34304644dbe25..50333c3dc3f5abfb55ba6011a080668fc105411a 100644 (file)
@@ -19,7 +19,7 @@
 
 PROJECT( ParaMEDCorba )
 
-  CMAKE_MINIMUM_REQUIRED( VERSION 2.6 )
+  CMAKE_MINIMUM_REQUIRED( VERSION 2.8.7 )
   ## !!! This definition corrupts wrapping process
   #SET( LIBRARY_OUTPUT_PATH ${ParaMEDCorba_BINARY_DIR}/bin CACHE INTERNAL "Single place for output" )
   #SET( EXECUTABLE_OUTPUT_PATH ${ParaMEDCorba_BINARY_DIR}/bin  CACHE INTERNAL "Single place for output" )
@@ -28,12 +28,15 @@ PROJECT( ParaMEDCorba )
     EXECUTABLE_OUTPUT_PATH
   )
 
-  FIND_PACKAGE( ParaView REQUIRED )
+  FIND_PACKAGE( ParaView COMPONENTS pqCore NO_MODULE)
 
   IF( ParaView_FOUND )
     
     INCLUDE( ${PARAVIEW_USE_FILE} )
 
+    FIND_PACKAGE( VTK 6.0 COMPONENTS vtkClientServer NO_MODULE)
+    INCLUDE( ${VTK_USE_FILE} )
+
     SET( PARACORBAPLUG_SRCS
       ${ParaMEDCorba_SOURCE_DIR}/vtkParaMEDCorbaSource.cxx
       )
@@ -52,9 +55,9 @@ PROJECT( ParaMEDCorba )
     SET_TARGET_PROPERTIES(ParaMEDCorbaPlugin PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS}")
 
     TARGET_LINK_LIBRARIES(ParaMEDMEM2VTK
-      vtkCommon
-      vtkFiltering
-      vtkGraphics
+      #vtkCommon
+      #vtkFiltering
+      #vtkGraphics
       vtkClientServer
       pqCore
       ${OMNIORB_LIBRARIES}
index dd58e36f620d264fc5dba1da1fc426442d42d4ee..80e3b0af32f8d65357fbf5add88a0c3f1c3c05d0 100644 (file)
@@ -39,11 +39,11 @@ std::vector<double> ParaMEDMEM2VTK::FillMEDCouplingParaFieldDoubleInstanceFrom(S
       SALOME_MED::MEDCouplingFieldDoubleCorbaInterface_var fieldCorba=SALOME_MED::MEDCouplingFieldDoubleCorbaInterface::_narrow(obj);
       std::vector<double> times;
       vtkDataSet *part=ParaMEDMEM2VTK::BuildFullyFilledFromMEDCouplingFieldDoubleInstance(fieldCorba,times);
-      tmp->AddInputConnection(part->GetProducerPort());
+      tmp->SetInputData(part);
       part->Delete();
     }
   vtkCompositeDataToUnstructuredGridFilter *tmp2=vtkCompositeDataToUnstructuredGridFilter::New();
-  tmp2->AddInputConnection(tmp->GetOutput()->GetProducerPort());
+  tmp2->SetInputData(tmp->GetOutput());
   tmp2->Update();
   //
   vtkUnstructuredGrid *ret3=tmp2->GetOutput();
index 3ed9073433bf3dcd69f8f7e70d2ca91177344aac..c5a204ed7cd03f5c4fc61518e4e29e468715b8f5 100644 (file)
@@ -35,9 +35,9 @@
 #include "vtkObjectFactory.h"
 #include "vtkInformation.h"
 //
-#include "vtkstd/string"
+#include "vtksys/stl/string"
 #include "vtksys/ios/fstream"
-#include "vtkstd/algorithm"
+#include "vtksys/stl/algorithm"
 
 #include "VTKMEDCouplingMeshClient.hxx"
 #include "VTKMEDCouplingFieldClient.hxx"
@@ -49,7 +49,7 @@
 //
 
 vtkStandardNewMacro(vtkParaMEDCorbaSource);
-vtkCxxRevisionMacro(vtkParaMEDCorbaSource,"$Revision$");
+//vtkCxxRevisionMacro(vtkParaMEDCorbaSource,"$Revision$");
 
 void *vtkParaMEDCorbaSource::Orb=0;
 
@@ -85,7 +85,7 @@ void vtkParaMEDCorbaSource::SetIORCorba(char *ior)
     return;
   int length=strlen(ior);
   IOR.resize(length+1);
-  vtkstd::copy(ior,ior+length+1,&IOR[0]);
+  vtksys_stl::copy(ior,ior+length+1,&IOR[0]);
   this->Modified();
 }
 
@@ -187,15 +187,15 @@ int vtkParaMEDCorbaSource::RequestData(vtkInformation* request, vtkInformationVe
 {
   vtkInformation *outInfo=outputVector->GetInformationObject(0);
   //
-  this->UpdatePiece = this->GetOutputDataObject(0)->GetUpdatePiece();//emulation vtkUnstructuredGrid::GetUpdateExtent(int&,int&,int&)
-  this->NumberOfPieces = this->GetOutputDataObject(0)->GetUpdateNumberOfPieces();//emulation vtkUnstructuredGrid::GetUpdateExtent(int&,int&,int&)
-  this->GhostLevel = this->GetOutputDataObject(0)->GetUpdateGhostLevel();//emulation vtkUnstructuredGrid::GetUpdateExtent(int&,int&,int&)
+  this->UpdatePiece = vtkStreamingDemandDrivenPipeline::GetUpdatePiece(outInfo);
+  this->NumberOfPieces = vtkStreamingDemandDrivenPipeline::GetUpdateNumberOfPieces(outInfo);
+  this->GhostLevel = vtkStreamingDemandDrivenPipeline::GetUpdateGhostLevel(outInfo);
   this->StartPiece=((this->UpdatePiece*this->TotalNumberOfPieces)/this->NumberOfPieces);
   this->EndPiece=(((this->UpdatePiece+1)*this->TotalNumberOfPieces)/this->NumberOfPieces);
   vtkMultiBlockDataSet *ret0=vtkMultiBlockDataSet::SafeDownCast(outInfo->Get(vtkDataObject::DATA_OBJECT()));
-  double *reqTS = 0;
-  if(outInfo->Has(vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEPS()))
-    reqTS = outInfo->Get(vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEPS());
+  double reqTS = 0;
+  if(outInfo->Has(vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEP()))
+    reqTS = outInfo->Get(vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEP());
   //Client request on ORB.
   CORBA::ORB_var *OrbC=(CORBA::ORB_var *)this->Orb;
   CORBA::Object_var obj=(*OrbC)->string_to_object(&IOR[0]);
@@ -232,13 +232,13 @@ int vtkParaMEDCorbaSource::RequestData(vtkInformation* request, vtkInformationVe
            timeRange[1]=ret2[0];
            outInfo->Set(vtkStreamingDemandDrivenPipeline::TIME_STEPS(),&ret2[0],1);
            outInfo->Set(vtkStreamingDemandDrivenPipeline::TIME_RANGE(),timeRange,2);
-           ret0->GetInformation()->Set(vtkDataObject::DATA_TIME_STEPS(), &ret2[0], 1);
+           ret0->GetInformation()->Set(vtkDataObject::DATA_TIME_STEP(),ret2[0]);
            return 1;
          }
        SALOME_MED::MEDCouplingMultiFieldsCorbaInterface_var multiPtr=SALOME_MED::MEDCouplingMultiFieldsCorbaInterface::_narrow(obj);
        if(!CORBA::is_nil(multiPtr))
          {
-           vtkDataSet *ret=mfieldsFetcher->buildDataSetOnTime(reqTS[0]);
+           vtkDataSet *ret=mfieldsFetcher->buildDataSetOnTime(reqTS);
            if(!ret)
              {
                vtkErrorMacro("On multi fields CORBA fetching an error occurs !");
@@ -246,7 +246,7 @@ int vtkParaMEDCorbaSource::RequestData(vtkInformation* request, vtkInformationVe
              }
            ret0->SetBlock(0,ret);
            ret->Delete();
-           ret0->GetInformation()->Set(vtkDataObject::DATA_TIME_STEPS(),reqTS, 1);
+           ret0->GetInformation()->Set(vtkDataObject::DATA_TIME_STEP(),reqTS);
            return 1;
          }
        vtkErrorMacro("Unrecognized sequential CORBA reference !");
index d4646c6b830857b05a366b7ca06ad6f08f205148..147dcab1b41bb016bd93d552198b328340cf4ca7 100644 (file)
@@ -23,7 +23,7 @@
 
 #include "ParaMEDMEM2VTK_defines.hxx"
 #include "vtkUnstructuredGridAlgorithm.h"
-#include <vtkstd/vector>
+#include <vtksys/stl/vector>
 
 class vtkDoubleArray;
 class vtkUnstructuredGrid;
@@ -36,7 +36,7 @@ namespace ParaMEDMEM2VTK
 class vtkParaMEDCorbaSource : public vtkAlgorithm //
 {
 public:
-  vtkTypeRevisionMacro(vtkParaMEDCorbaSource, vtkAlgorithm);
+  vtkTypeMacro(vtkParaMEDCorbaSource, vtkAlgorithm)
   ParaMEDMEM2VTK_EXPORT static vtkParaMEDCorbaSource* New();
   virtual void PrintSelf( ostream& os, vtkIndent indent );
   const char *GetIORCorba();
@@ -60,7 +60,7 @@ protected:
   int EndPiece;
   int BufferingPolicy;
   vtkUnstructuredGrid *MyDataSet;
-  vtkstd::vector<char> IOR;
+  vtksys_stl::vector<char> IOR;
   ParaMEDMEM2VTK::MEDCouplingMultiFieldsFetcher *mfieldsFetcher;
   //not clean but to avoid to include CORBA.h in this *.h
   static void *Orb;
index 266b9bb96f878d9d6a97843e3f90e7e74dcc986a..988ee58a88ee8d39f34e7afeba6bc1a7fd4ea711 100644 (file)
@@ -29,7 +29,7 @@
 
 using namespace std;
 
-vtkCxxRevisionMacro(vtkScaleVectorFilter, "$Revision$");
+//vtkCxxRevisionMacro(vtkScaleVectorFilter, "$Revision$");
 vtkStandardNewMacro(vtkScaleVectorFilter);
 
 vtkScaleVectorFilter::vtkScaleVectorFilter()
index dea186c8f21094cac666c1923f5e039563badd20..4f75d93970f8153aaef4a7f6c3145a813114f869 100644 (file)
@@ -26,7 +26,7 @@ class VTK_EXPORT vtkScaleVectorFilter: public vtkPassInputTypeAlgorithm
 {
 public:
   static vtkScaleVectorFilter *New();
-  vtkTypeRevisionMacro(vtkScaleVectorFilter,vtkPassInputTypeAlgorithm);
+  vtkTypeMacro(vtkScaleVectorFilter,vtkPassInputTypeAlgorithm);
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description :
index 33f4cf031fe3bacc9669514ed5794a78d2fbc2d7..7fdc1fb1d544c5eb1cf541c22327d2e74d3aecc0 100644 (file)
@@ -1,6 +1,6 @@
 <ParaViewReaders>
   <Reader name="TableReader"
-     extensions="tab txt"
+     extensions="tab txt xls"
      file_description="Post-Pro Table Files">
   </Reader>
 </ParaViewReaders>
index cd20f03f7fac2cb7030c8d74a54916132d0bd3ca..e32cb653760bf9ec0129aa18b7cfcb82c8313235 100644 (file)
 #include "vtkStringArray.h"
 #include "vtkStringToNumeric.h"
 
-#include <vtkstd/stdexcept>
+#include <vtksys/stl/stdexcept>
 #include <vtksys/ios/sstream>
 
 #include <vector> // STL include
 #include <string> // STL include
 using namespace std;
 
-vtkCxxRevisionMacro(vtkVisuTableReader, "$Revision$");
+//vtkCxxRevisionMacro(vtkVisuTableReader, "$Revision$");
 vtkStandardNewMacro(vtkVisuTableReader);
 
 vtkVisuTableReader::vtkVisuTableReader():
@@ -130,7 +130,7 @@ int vtkVisuTableReader::RequestData(vtkInformation*,
        
          if (table.myColumnTitles[col].empty()) 
            {
-             vtkstd::stringstream buffer;
+             vtksys_ios::stringstream buffer;
              if (hasUnit) 
                {
                  buffer << col <<" [" << table.myColumnUnits[col].c_str() << "]";
@@ -145,7 +145,7 @@ int vtkVisuTableReader::RequestData(vtkInformation*,
          {
            if (hasUnit) 
              {
-               vtkstd::stringstream buffer;
+               vtksys_ios::stringstream buffer;
                buffer << table.myColumnTitles[col].c_str() 
                       <<" [" << table.myColumnUnits[col].c_str() << "]";
                newCol->SetName(buffer.str().c_str());
@@ -166,14 +166,14 @@ int vtkVisuTableReader::RequestData(vtkInformation*,
          vtkStringToNumeric* convertor = vtkStringToNumeric::New();
          vtkTable* clone = output_table->NewInstance();
          clone->ShallowCopy(output_table);
-         convertor->SetInput(clone);
+         convertor->SetInputData(clone);
          convertor->Update();
          clone->Delete();
          output_table->ShallowCopy(convertor->GetOutputDataObject(0));
          convertor->Delete();
        }
     } 
-  catch(vtkstd::exception& e) 
+  catch(vtksys_stl::exception& e) 
     {
       vtkErrorMacro(<< "caught exception: " << e.what() << endl);
       output_table->Initialize();
index 8a7ff2bd9c22685f2e46339cea4d6987c266f8f4..6332eee72ce2e18921636a78b8c9de2003f50a71 100644 (file)
@@ -28,7 +28,7 @@ class VTK_EXPORT vtkVisuTableReader: public vtkTableAlgorithm
 {
 public:
   static vtkVisuTableReader* New();
-  vtkTypeRevisionMacro(vtkVisuTableReader, vtkTableAlgorithm)
+  vtkTypeMacro(vtkVisuTableReader, vtkTableAlgorithm)
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index 574b289cac6d6ba04669117e9b6f0dcf661c3aae..4ae494993d5ff0999d3744963243c8f9c12e075e 100644 (file)
@@ -34,7 +34,7 @@
 #include "vtkContourFilter.h"
 
 vtkStandardNewMacro(vtkTableTo3D);
-vtkCxxRevisionMacro(vtkTableTo3D, "$Revision$");
+//vtkCxxRevisionMacro(vtkTableTo3D, "$Revision$");
 
 
 vtkTableTo3D::vtkTableTo3D()
@@ -155,7 +155,7 @@ int vtkTableTo3D::RequestData(vtkInformation* vtkNotUsed(request),
 
   vtkSmartPointer<vtkStructuredGridGeometryFilter> geomFilter = 
     vtkSmartPointer<vtkStructuredGridGeometryFilter>::New();
-  geomFilter->SetInput(structuredGrid);
+  geomFilter->SetInputData(structuredGrid);
   geomFilter->Update();
   
   vtkSmartPointer<vtkWarpScalar> warpScalar = 
@@ -179,17 +179,17 @@ int vtkTableTo3D::RequestData(vtkInformation* vtkNotUsed(request),
 
   if (this->PresentationType == TABLETO3D_SURFACE)
     {
-      warpScalar->SetInput(geomFilter->GetOutput());
+      warpScalar->SetInputConnection(geomFilter->GetOutputPort(0));
       warpScalar->SetScaleFactor(scaleFactor);
     }
   else
     {
       vtkSmartPointer<vtkContourFilter> contourFilter = 
        vtkSmartPointer<vtkContourFilter>::New();
-      contourFilter->SetInput(geomFilter->GetOutput());
+      contourFilter->SetInputConnection(geomFilter->GetOutputPort(0));
       contourFilter->GenerateValues(this->NumberOfContours, 
                                    geomFilter->GetOutput()->GetScalarRange());
-      warpScalar->SetInput(contourFilter->GetOutput());
+      warpScalar->SetInputConnection(contourFilter->GetOutputPort(0));
       warpScalar->SetScaleFactor(scaleFactor);
     }
 
index c1d74283c181a7269a2afbc7727cce2a1064c3b7..c4edecd7d0b919dcbf2fad6e94f23ad55bfe8a75 100644 (file)
@@ -29,7 +29,7 @@ class VTK_EXPORT vtkTableTo3D : public vtkPolyDataAlgorithm
 {
 public:
   static vtkTableTo3D* New();
-  vtkTypeRevisionMacro(vtkTableTo3D, vtkPolyDataAlgorithm);
+  vtkTypeMacro(vtkTableTo3D, vtkPolyDataAlgorithm);
   void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index 3d8b6173cba44ca7667b7a6b6f07eb28d321323b..ef7fd95ca4a8e7e89d27dc25d4a6cae3d308c69f 100755 (executable)
@@ -36,20 +36,24 @@ aXYPlot.ChartTitle = '   '
 aXYPlot.ChartTitle = 'title of XY plot'
 print "Chart title for xyplot ...", aXYPlot.ChartTitle
 
-# Show left and bottom axis
-aXYPlot.ShowAxis = [1, 1, 0, 0]
+error = 0
+try:
+    aXYPlot.ShowAxis = [1, 1, 0, 0]
+except:
+    print "Error: ShowAxis property is not avaliable for XYPlotView"
+    error = error + 1
+
+aXYPlot.AxisUseCustomRange = [1, 1, 0, 0]
 
 # Show grids
 aXYPlot.ShowAxisGrid = [1, 1, 0, 0]
 
-# Set axis range for left and bottom axis
-aXYPlot.AxisBehavior = [1, 1, 0, 0]
-
 aMinX = 0
 aMaxX = 100
 aMinY = 0
 aMaxY = 10
-aXYPlot.AxisRange = [aMinX, aMaxX, aMinY, aMaxY, 0.0, 1.0, 0.0, 1.0]
+aXYPlot.BottomAxisRange = [aMinX, aMaxX]
+aXYPlot.LeftAxisRange = [aMinY, aMaxY]
 
 # Set horizontal scaling for left and bottom axis
 print "Default logarithmic scaling  ...", aXYPlot.AxisLogScale
@@ -73,3 +77,6 @@ print "Title of the bottom axis          ...", aXYPlot.AxisTitle[1]
 # Show/hide legend
 aXYPlot.ShowLegend = 1
 aXYPlot.ShowLegend = 0
+
+if error > 0:
+    raise RuntimeError, "There is(are) some error(s) was(were) found... For more info see ERRORs above..."
index 17fc4c806872b712e5ef3291f58c689a633ce703..fc4191ed8f0d36a1a604f6654514969de73f64dc 100755 (executable)
@@ -25,31 +25,51 @@ from pvsimple import CreateXYPlotView
 # Create view
 aXYPlot = CreateXYPlotView()
 
-# Set range
-axisRange = aXYPlot.AxisRange
+error = 0
+
+aXYPlot.AxisUseCustomRange = [1, 1, 0, 0]
 # Left axis range
+axisRange = aXYPlot.LeftAxisRange
 axisRange[0:2] = [200., 800.]
-Ranges = aXYPlot.AxisRange
-Etvalue = [200, 800, axisRange[2], axisRange[3],
-           axisRange[4], axisRange[5], axisRange[6], axisRange[7] ]
-error = test_values(Ranges, Etvalue)
+Ranges = aXYPlot.LeftAxisRange
+Etvalue = [200, 800]
+error = error + test_values(Ranges, Etvalue)
 # Bottom axis range
-aXYPlot.AxisRange[2:4] = [350.,750.]
-Ranges = aXYPlot.AxisRange
-Etvalue = [200, 800, 350, 750,
-           axisRange[4], axisRange[5], axisRange[6], axisRange[7]]
+axisRange = aXYPlot.BottomAxisRange
+axisRange[0:2] = [350.,750.]
+Ranges = aXYPlot.BottomAxisRange
+Etvalue = [350, 750]
 error = error + test_values(Ranges, Etvalue)
 # Left and bottom axis range
-aXYPlot.AxisRange[0:4] = [1350.,2750.,240.,2230.]
-Ranges=aXYPlot.AxisRange
-Etvalue=[1350.,2750.,240.,2230.,
-         axisRange[4], axisRange[5], axisRange[6], axisRange[7]]
-error = error + test_values(Ranges, Etvalue)
+aXYPlot.LeftAxisRange[0:2] = [1350.,2750.]
+aXYPlot.BottomAxisRange[0:2] = [240.,2230.]
+Etvalue=[1350.,2750.,240.,2230.]
+Ranges=aXYPlot.LeftAxisRange
+error = error + test_values(Ranges, Etvalue[0:2])
+Ranges=aXYPlot.BottomAxisRange
+error = error + test_values(Ranges, Etvalue[2:4])
+
+try:
+    aXYPlot.ShowAxis = [1, 1, 1, 1]
+except:
+    print "Error: ShowAxis property is not avaliable for XYPlotView"
+    error = error + 1
+
+aXYPlot.AxisUseCustomRange = [1, 1, 1, 1]
 # Left, bottom, right and top axis range
-aXYPlot.AxisRange = [0, 200, 100, 450, 0, 200, 100, 450]
-Ranges = aXYPlot.AxisRange
+aXYPlot.LeftAxisRange = [0, 200]
+aXYPlot.BottomAxisRange = [100, 450]
+aXYPlot.RightAxisRange = [0, 200]
+aXYPlot.TopAxisRange = [100, 450]
 Etvalue = [0, 200, 100, 450, 0, 200, 100, 450]
-error = error + test_values(Ranges, Etvalue)
+Ranges=aXYPlot.LeftAxisRange
+error = error + test_values(Ranges, Etvalue[0:2])
+Ranges=aXYPlot.BottomAxisRange
+error = error + test_values(Ranges, Etvalue[2:4])
+Ranges=aXYPlot.RightAxisRange
+error = error + test_values(Ranges, Etvalue[4:6])
+Ranges=aXYPlot.TopAxisRange
+error = error + test_values(Ranges, Etvalue[6:8])
 
 if error > 0:
     raise RuntimeError, "There is(are) some error(s) was(were) found... For more info see ERRORs above..."
index 2bc729675be4844f385896c64b068e35bcee6a86..cec60468e6b43dd64a8deb439492d005b825f632 100644 (file)
@@ -22,6 +22,8 @@ IF (PYTHON_EXECUTABLE)
       A0
       A1
       )
-    ADD_TEST(2DVIEWER_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
+    SET(TIMEOUT 1500)
+    ADD_TEST(2DVIEWER_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/test/VisuPrs/Util/paravistesthelper.py ${TIMEOUT} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
+    SET_TESTS_PROPERTIES(2DVIEWER_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED" TIMEOUT ${TIMEOUT})
   ENDFOREACH( tfile )
 ENDIF (PYTHON_EXECUTABLE)
index f1d6c37f8de3088b2e5ad915d697facbd1745dfe..3bac165bec75e5d4717a4cfd745d7076f2402b3f 100755 (executable)
@@ -31,7 +31,8 @@ IF (PYTHON_EXECUTABLE)
       B0
       B2
       )
-      ADD_TEST(3DVIEWER_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
-    SET_TESTS_PROPERTIES(3DVIEWER_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED")
+    SET(TIMEOUT 1500)
+    ADD_TEST(3DVIEWER_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/test/VisuPrs/Util/paravistesthelper.py ${TIMEOUT} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
+    SET_TESTS_PROPERTIES(3DVIEWER_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED" TIMEOUT ${TIMEOUT})
   ENDFOREACH( tfile )
 ENDIF (PYTHON_EXECUTABLE)
index ae79d51f462ee39d7bfd3e0d580b76563b592580..98ae1def02c971f787d52b718667b2ca973d6a54 100755 (executable)
@@ -49,7 +49,8 @@ IF (PYTHON_EXECUTABLE)
       H1
       H2
       )
-      ADD_TEST(ANIMATION_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
-    SET_TESTS_PROPERTIES(ANIMATION_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED")
+    SET(TIMEOUT 1500)
+    ADD_TEST(ANIMATION_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/test/VisuPrs/Util/paravistesthelper.py ${TIMEOUT} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
+    SET_TESTS_PROPERTIES(ANIMATION_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED" TIMEOUT ${TIMEOUT})
   ENDFOREACH( tfile )
 ENDIF (PYTHON_EXECUTABLE)
index bfb7a98573071b73c8fa4ec3ca05822b65e09226..250b24df1b33ab813ea745f401fb02c25abea3b8 100644 (file)
@@ -33,5 +33,5 @@ SUBDIRS(Util
        GaussPoints
        StreamLines
        SWIG_scripts
-       Tables)
-
+       Tables
+)
index 367f6fcaa32a2fcd0ca3e4cf98dd98ef839e18c5..d99c8342c94030cf44b11352756eab9dd97af648 100644 (file)
@@ -57,7 +57,8 @@ IF (PYTHON_EXECUTABLE)
       G1
       G2      
       )
-    ADD_TEST(CUTLINES_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
-    SET_TESTS_PROPERTIES(CUTLINES_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED")
+    SET(TIMEOUT 1500)
+    ADD_TEST(CUTLINES_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/test/VisuPrs/Util/paravistesthelper.py ${TIMEOUT} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
+    SET_TESTS_PROPERTIES(CUTLINES_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED" TIMEOUT ${TIMEOUT})
   ENDFOREACH( tfile )
 ENDIF (PYTHON_EXECUTABLE)
index 7edb069abd818dcd84586fe6f29efc23c1be0f90..93591e9e5e7bbd35eb593e28693f48d680260b0d 100644 (file)
@@ -57,7 +57,8 @@ IF (PYTHON_EXECUTABLE)
       G1
       G2           
       )
-    ADD_TEST(CUTPLANES_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
-    SET_TESTS_PROPERTIES(CUTPLANES_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED")
+    SET(TIMEOUT 1500)
+    ADD_TEST(CUTPLANES_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/test/VisuPrs/Util/paravistesthelper.py ${TIMEOUT} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
+    SET_TESTS_PROPERTIES(CUTPLANES_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED" TIMEOUT ${TIMEOUT})
   ENDFOREACH( tfile )
 ENDIF (PYTHON_EXECUTABLE)
index a064d534b9ea136f30b8bd1f1f30cc2c1f4552a9..b50dca0c9cf1c5d8666f04c0c9c4f89365c67ef5 100644 (file)
@@ -55,7 +55,8 @@ IF (PYTHON_EXECUTABLE)
       F8
       F9
       )
-    ADD_TEST(DEFORMEDSHAPE_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
-    SET_TESTS_PROPERTIES(DEFORMEDSHAPE_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED")
+    SET(TIMEOUT 1500)
+    ADD_TEST(DEFORMEDSHAPE_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/test/VisuPrs/Util/paravistesthelper.py ${TIMEOUT} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
+    SET_TESTS_PROPERTIES(DEFORMEDSHAPE_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED" TIMEOUT ${TIMEOUT})
   ENDFOREACH( tfile )
 ENDIF (PYTHON_EXECUTABLE)
index c2c47daf5eaea096ab0fd47afb69489568d20d22..4a95dfd1039784b4a39d1ca98c2ff746bb6f76e7 100644 (file)
@@ -47,7 +47,8 @@ IF (PYTHON_EXECUTABLE)
       C6
       C7
       )
-    ADD_TEST(GAUSSPOINTS_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
-    SET_TESTS_PROPERTIES(GAUSSPOINTS_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED")
+    SET(TIMEOUT 1500)
+    ADD_TEST(GAUSSPOINTS_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/test/VisuPrs/Util/paravistesthelper.py ${TIMEOUT} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
+    SET_TESTS_PROPERTIES(GAUSSPOINTS_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED" TIMEOUT ${TIMEOUT})
   ENDFOREACH( tfile )
-ENDIF (PYTHON_EXECUTABLE)
\ No newline at end of file
+ENDIF (PYTHON_EXECUTABLE)
index e8d266bdff5306091efd9c7a23e1730d4483ecb7..eee46f4d5280b1ddba27ff2ab956e214ac0160a8 100755 (executable)
@@ -56,7 +56,8 @@ IF (PYTHON_EXECUTABLE)
       G1
       G2           
       )
-    ADD_TEST(ISOSURFACES_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
-    SET_TESTS_PROPERTIES(ISOSURFACES_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED")
+    SET(TIMEOUT 1500)
+    ADD_TEST(ISOSURFACES_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/test/VisuPrs/Util/paravistesthelper.py ${TIMEOUT} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
+    SET_TESTS_PROPERTIES(ISOSURFACES_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED" TIMEOUT ${TIMEOUT})
   ENDFOREACH( tfile )
 ENDIF (PYTHON_EXECUTABLE)
index 1c8920c9c7124fc1a4e92c57b3b38619b8ae8e91..ec144f3756d16679f4c967c6f8292038f5231815 100644 (file)
@@ -104,8 +104,9 @@ IF (PYTHON_EXECUTABLE)
       L0
       L1
       )
-    ADD_TEST(MESH_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
-    SET_TESTS_PROPERTIES(MESH_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED")
+    SET(TIMEOUT 1500)
+    ADD_TEST(MESH_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/test/VisuPrs/Util/paravistesthelper.py ${TIMEOUT} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
+    SET_TESTS_PROPERTIES(MESH_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED" TIMEOUT ${TIMEOUT})
   ENDFOREACH( tfile )
 ENDIF (PYTHON_EXECUTABLE)
 
index 40c6803dcaaef4fd26455aa8a2df8c30e032d5bd..5cb356467a279390e2a16f71c352b895c8f24ab3 100755 (executable)
@@ -56,7 +56,8 @@ IF (PYTHON_EXECUTABLE)
       G1
       G2           
       )
-    ADD_TEST(PLOT3D_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
-    SET_TESTS_PROPERTIES(PLOT3D_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED")
+    SET(TIMEOUT 1500)
+    ADD_TEST(PLOT3D_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/test/VisuPrs/Util/paravistesthelper.py ${TIMEOUT} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
+    SET_TESTS_PROPERTIES(PLOT3D_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED" TIMEOUT ${TIMEOUT})
   ENDFOREACH( tfile )
 ENDIF (PYTHON_EXECUTABLE)
index 2a86c470987e8252b4955a28cae04188890ed1df..e180475c3ca47d3a9dc5fa0125dd3ca0460a750f 100644 (file)
@@ -37,7 +37,8 @@ IF (PYTHON_EXECUTABLE)
       C3
       C7
       )
-    ADD_TEST(SWIGSCRIPTS_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
-    SET_TESTS_PROPERTIES(SWIGSCRIPTS_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED")
+    SET(TIMEOUT 1500)
+    ADD_TEST(SWIGSCRIPTS_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/test/VisuPrs/Util/paravistesthelper.py ${TIMEOUT} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
+    SET_TESTS_PROPERTIES(SWIGSCRIPTS_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED" TIMEOUT ${TIMEOUT})
   ENDFOREACH( tfile )
 ENDIF (PYTHON_EXECUTABLE)
index 453222bc19ff503cde1f24ac45b82412ed48e859..836e08fa18553d14590d2b24a8d5a0895cd4a7a6 100644 (file)
@@ -56,7 +56,8 @@ IF (PYTHON_EXECUTABLE)
       G1
       G2
       )
-    ADD_TEST(SCALARMAP_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
-    SET_TESTS_PROPERTIES(SCALARMAP_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED")
+    SET(TIMEOUT 1500)
+    ADD_TEST(SCALARMAP_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/test/VisuPrs/Util/paravistesthelper.py ${TIMEOUT} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
+    SET_TESTS_PROPERTIES(SCALARMAP_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED" TIMEOUT ${TIMEOUT})
   ENDFOREACH( tfile )
-ENDIF (PYTHON_EXECUTABLE)
\ No newline at end of file
+ENDIF (PYTHON_EXECUTABLE)
index 43ec9347e191718233da02b0cd426e7d8d9f0cd7..728a686bed9d16fc2448bed5c5250ee4d36d553a 100644 (file)
@@ -53,7 +53,8 @@ IF (PYTHON_EXECUTABLE)
       F7
       F8               
       )
-    ADD_TEST(DEFORMEDSHAPESCALARMAP_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
-    SET_TESTS_PROPERTIES(DEFORMEDSHAPESCALARMAP_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED")
+    SET(TIMEOUT 1500)
+    ADD_TEST(DEFORMEDSHAPESCALARMAP_${tfile} ${CMAKE_SOURCE_DIR}/test/VisuPrs/Util/paravistesthelper.py ${TIMEOUT} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
+    SET_TESTS_PROPERTIES(DEFORMEDSHAPESCALARMAP_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED" TIMEOUT ${TIMEOUT})
   ENDFOREACH( tfile )
 ENDIF (PYTHON_EXECUTABLE)
index a440cf19b913aa1d974102bc374a9ca306c35f89..74e40cc8b1f26f50060425bc371b5043fcfd1d6b 100644 (file)
@@ -53,7 +53,8 @@ IF (PYTHON_EXECUTABLE)
       F8
       F9
       )
-    ADD_TEST(STREAMLINES_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
-    SET_TESTS_PROPERTIES(STREAMLINES_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED")
+    SET(TIMEOUT 1500)
+    ADD_TEST(STREAMLINES_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/test/VisuPrs/Util/paravistesthelper.py ${TIMEOUT} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
+    SET_TESTS_PROPERTIES(STREAMLINES_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED" TIMEOUT ${TIMEOUT})
   ENDFOREACH( tfile )
-ENDIF (PYTHON_EXECUTABLE)
\ No newline at end of file
+ENDIF (PYTHON_EXECUTABLE)
index 8a1ecb4401d3199a78845ed98078377ccb330dc0..53da6970bee6d437c4bda57daf6622c75fa04438 100644 (file)
@@ -22,7 +22,8 @@ IF (PYTHON_EXECUTABLE)
       A0
       A2
       )
-    ADD_TEST(TABLES_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
-    SET_TESTS_PROPERTIES(TABLES_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED")
+    SET(TIMEOUT 1500)
+    ADD_TEST(TABLES_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/test/VisuPrs/Util/paravistesthelper.py ${TIMEOUT} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
+    SET_TESTS_PROPERTIES(TABLES_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED" TIMEOUT ${TIMEOUT})
   ENDFOREACH( tfile )
 ENDIF (PYTHON_EXECUTABLE)
index f084e8f4b5d569e286da6716f6ef340b07ca072e..d681ba70227e51febec1afc034e0da5e4f204adf 100644 (file)
@@ -19,6 +19,7 @@
 
 SET(dist_testscript_DATA
   paravistest.py
+  paravistesthelper.py
   )
 
 FOREACH(f ${dist_testscript_DATA})
index c59d281f7e9895b6a551dff3fa34710293f94399..0b257ccc178b7d4777403037924083ae3f950523 100755 (executable)
@@ -29,7 +29,6 @@ from datetime import date
 
 import salome
 
-
 # Auxiliary variables
 
 # Data directory
@@ -78,7 +77,8 @@ class SalomeSession(object):
     def __init__(self):
         import runSalome
         import sys
-        sys.argv += ["--killall"]
+        #sys.argv += ["--killall"]
+        #sys.argv += ["--portkill=" + port]
         sys.argv += ["--show-desktop=1"]
         sys.argv += ["--splash=0"]
         sys.argv += ["--modules=MED,VISU,PARAVIS"]
diff --git a/test/VisuPrs/Util/paravistesthelper.py b/test/VisuPrs/Util/paravistesthelper.py
new file mode 100644 (file)
index 0000000..14fa7c8
--- /dev/null
@@ -0,0 +1,18 @@
+import searchFreePort
+import subprocess
+import sys
+import signal
+
+args = {}
+searchFreePort.searchFreePort(args)
+port = args['port']
+
+def timeout_handler(signum, frame):
+    print "FAILED : timeout(" + sys.argv[1] + ") is reached"
+    import killSalomeWithPort
+    killSalomeWithPort.killMyPort(port)
+
+signal.alarm(abs(int(sys.argv[1])-10))
+signal.signal(signal.SIGALRM, timeout_handler)
+
+subprocess.check_call([sys.executable]+sys.argv[2:])
index 9fd9cdc32191097fd599d48e4018e0539d331497..257da3b39558db27d0f311e43755905213735cde 100644 (file)
@@ -54,7 +54,8 @@ IF (PYTHON_EXECUTABLE)
       F8
       F9
       )
-    ADD_TEST(VECTORS_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
-    SET_TESTS_PROPERTIES(VECTORS_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED")
+    SET(TIMEOUT 1500)
+    ADD_TEST(VECTORS_${tfile} ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/test/VisuPrs/Util/paravistesthelper.py ${TIMEOUT} ${CMAKE_CURRENT_SOURCE_DIR}/${tfile}.py ${PARAVIS_TEST_OUTPUT_DIR})
+    SET_TESTS_PROPERTIES(VECTORS_${tfile} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED" TIMEOUT ${TIMEOUT})
   ENDFOREACH( tfile )
 ENDIF (PYTHON_EXECUTABLE)